mirror of https://github.com/golang/go.git
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>
This commit is contained in:
parent
9a0a150c9f
commit
eddb41eb2c
|
|
@ -172,8 +172,10 @@ nocpuinfo:
|
|||
TESTL AX, AX
|
||||
JZ needtls
|
||||
#ifdef GOOS_android
|
||||
MOVL 0(TLS), BX
|
||||
MOVL BX, 12(SP) // 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 (+8).
|
||||
MOVL -8(TLS), BX
|
||||
MOVL BX, 12(SP)
|
||||
MOVL $runtime·tls_g(SB), 8(SP) // arg 3: &tls_g
|
||||
#else
|
||||
MOVL $0, BX
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue