aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/asm_amd64.s
diff options
context:
space:
mode:
authorElias Naur <mail@eliasnaur.com>2019-04-08 23:12:52 +0200
committerElias Naur <mail@eliasnaur.com>2019-04-10 14:21:20 +0000
commiteddb41eb2cb7699f3515a229ff069ca914c7c879 (patch)
treed8c9247457ff5959b5525f32dff74f4fa45580f5 /src/runtime/asm_amd64.s
parent9a0a150c9f50f920f35cc4d50ac3005503f44f2d (diff)
downloadgo-eddb41eb2cb7699f3515a229ff069ca914c7c879.tar.gz
go-eddb41eb2cb7699f3515a229ff069ca914c7c879.zip
runtime: correct the TLS base offset on Android
CL 170955 set tlsg to the Android Q free TLS slot offset in the linker data (16 on amd64, 8 on 386), offsetting all TLS relative access. We need the 0'th slot (TLS_SLOT_SELF) at initialization, so compensate with a corresponding negative offset. Fixes the android/386 and android/amd64 builders broken by CL 170955. Change-Id: I9882088c0c8bc6a777d2aabc9404cb76f02b6cea Reviewed-on: https://go-review.googlesource.com/c/go/+/170956 TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/runtime/asm_amd64.s')
-rw-r--r--src/runtime/asm_amd64.s4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s
index 7b2fdf0d3d..e5b987858d 100644
--- a/src/runtime/asm_amd64.s
+++ b/src/runtime/asm_amd64.s
@@ -136,7 +136,9 @@ nocpuinfo:
MOVQ $setg_gcc<>(SB), SI // arg 2: setg_gcc
#ifdef GOOS_android
MOVQ $runtimeĀ·tls_g(SB), DX // arg 3: &tls_g
- MOVQ 0(TLS), CX // arg 4: TLS base, stored in the first slot (TLS_SLOT_SELF).
+ // arg 4: TLS base, stored in slot 0 (Android's TLS_SLOT_SELF).
+ // Compensate for tls_g (+16).
+ MOVQ -16(TLS), CX
#else
MOVQ $0, DX // arg 3, 4: not used when using platform's TLS
MOVQ $0, CX