]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: prevent TLS fetching instructions from being assembled on NaCl/ARM
authorCherry Zhang <cherryyz@google.com>
Sat, 8 Apr 2017 18:27:33 +0000 (14:27 -0400)
committerDave Cheney <dave@cheney.net>
Sat, 8 Apr 2017 22:51:18 +0000 (22:51 +0000)
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>
src/runtime/tls_arm.s

index 32bfcf88f0d64bd1422d2f94f378cc28a7fb7b59..a5f5003ea87cfdc3eda021995c5164dc0e33f2e0 100644 (file)
@@ -35,7 +35,7 @@ TEXT runtime·save_g(SB),NOSPLIT,$-4
        // nothing to do as nacl/arm does not use TLS at all.
        MOVW    g, R0 // preserve R0 across call to setg<>
        RET
-#endif
+#else
        // 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.
        // 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, R0 // preserve R0 across call to setg<>
        RET
+#endif
 
 // load_g loads the g register from pthread-provided
 // thread-local memory, for use after calling externally compiled
@@ -54,7 +55,7 @@ TEXT runtime·load_g(SB),NOSPLIT,$0
 #ifdef GOOS_nacl
        // nothing to do as nacl/arm does not use TLS at all.
        RET
-#endif
+#else
        // See save_g
        MRC     15, 0, R0, C13, C0, 3 // fetch TLS base pointer
        BIC $3, R0 // Darwin/ARM might return unaligned pointer
@@ -62,6 +63,7 @@ TEXT runtime·load_g(SB),NOSPLIT,$0
        ADD     R11, R0
        MOVW    0(R0), g
        RET
+#endif
 
 // This is called from rt0_go, which runs on the system stack
 // using the initial stack allocated by the OS.