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:
parent
e0efdac65a
commit
0020b8a257
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user