Skip to content

Commit f606652

Browse files
committed
cmd/internal/obj/x86: still use (fake) local exec TLS mode on android/386
golang.org/cl/16383 broke android/386 because by a sort of confluence of hacks no TLS relocations were emitted at all when Flag_shared != 0. The hack in runtime/cgo works as well in a PIE executable as it does with a position dependent one, so the simplest fix is to still emit a R_TLS_LE reloc when goos == "android". A real fix is to use something more like the IE model code but loading the offset from %gs to the thread local storage from a global variable rather than from a location chosen by the system linker (this is how android/arm works). Issue golang#9327. Change-Id: I9fbfc890ec7fe191f80a595b6cf8e2a1fcbe3034
1 parent aae81d9 commit f606652

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/cmd/internal/obj/x86/asm6.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -2536,7 +2536,7 @@ func vaddr(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r *obj.Reloc) int64 {
25362536
log.Fatalf("reloc")
25372537
}
25382538

2539-
if ctxt.Flag_shared == 0 {
2539+
if ctxt.Flag_shared == 0 || isAndroid {
25402540
r.Type = obj.R_TLS_LE
25412541
r.Siz = 4
25422542
r.Off = -1 // caller must fill in

0 commit comments

Comments
 (0)