1
0
mirror of https://github.com/golang/go synced 2024-11-18 04:34:52 -07:00

runtime: prevent TLS fetching instructions from being assembled on NaCl/ARM

They are dead code already, but the verifier is still not happy.
Don't assemble them at all.

Looks like it has been like that for long. I don't know why it
was ok. Maybe the verifier is now more picky?

Fixes #19884.

Change-Id: Ib806fb73ca469789dec56f52d484cf8baf7a245c
Reviewed-on: https://go-review.googlesource.com/40111
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Dave Cheney <dave@cheney.net>
This commit is contained in:
Cherry Zhang 2017-04-08 14:27:33 -04:00 committed by Dave Cheney
parent e0efdac65a
commit 0020b8a257

View File

@ -35,7 +35,7 @@ TEXT runtime·save_g(SB),NOSPLIT,$-4
// nothing to do as nacl/arm does not use TLS at all. // nothing to do as nacl/arm does not use TLS at all.
MOVW g, R0 // preserve R0 across call to setg<> MOVW g, R0 // preserve R0 across call to setg<>
RET RET
#endif #else
// If the host does not support MRC the linker will replace it with // If the host does not support MRC the linker will replace it with
// a call to runtime.read_tls_fallback which jumps to __kuser_get_tls. // a call to runtime.read_tls_fallback which jumps to __kuser_get_tls.
// The replacement function saves LR in R11 over the call to read_tls_fallback. // The replacement function saves LR in R11 over the call to read_tls_fallback.
@ -46,6 +46,7 @@ TEXT runtime·save_g(SB),NOSPLIT,$-4
MOVW g, 0(R0) MOVW g, 0(R0)
MOVW g, R0 // preserve R0 across call to setg<> MOVW g, R0 // preserve R0 across call to setg<>
RET RET
#endif
// load_g loads the g register from pthread-provided // load_g loads the g register from pthread-provided
// thread-local memory, for use after calling externally compiled // thread-local memory, for use after calling externally compiled
@ -54,7 +55,7 @@ TEXT runtime·load_g(SB),NOSPLIT,$0
#ifdef GOOS_nacl #ifdef GOOS_nacl
// nothing to do as nacl/arm does not use TLS at all. // nothing to do as nacl/arm does not use TLS at all.
RET RET
#endif #else
// See save_g // See save_g
MRC 15, 0, R0, C13, C0, 3 // fetch TLS base pointer MRC 15, 0, R0, C13, C0, 3 // fetch TLS base pointer
BIC $3, R0 // Darwin/ARM might return unaligned pointer BIC $3, R0 // Darwin/ARM might return unaligned pointer
@ -62,6 +63,7 @@ TEXT runtime·load_g(SB),NOSPLIT,$0
ADD R11, R0 ADD R11, R0
MOVW 0(R0), g MOVW 0(R0), g
RET RET
#endif
// This is called from rt0_go, which runs on the system stack // This is called from rt0_go, which runs on the system stack
// using the initial stack allocated by the OS. // using the initial stack allocated by the OS.