aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld/lib.c
diff options
context:
space:
mode:
authorDavid Crawshaw <crawshaw@golang.org>2015-02-13 14:52:07 -0500
committerDavid Crawshaw <crawshaw@golang.org>2015-02-13 21:27:21 +0000
commitae3229ae5c12a2bfce2961e21c299f286e8b8cb1 (patch)
tree14ed7c2f84d0ff58e62179b5b9dc85a6cf1c945f /src/cmd/ld/lib.c
parent69937d213192b1a87d6ca8a71337b7aa05f3566e (diff)
downloadgo-ae3229ae5c12a2bfce2961e21c299f286e8b8cb1.tar.xz
cmd/ld: always mark tlsg STLSBSS
Android apps build again. Defining TLSG in runtime/tls_arm.s gives it the type SNOPTRBSS, so its type was never being set when GOOS=android. I considered modifying the if statement, but I no longer understand the intention of the original change (in d738c6b0cad). We were always setting it before, what platform is this not valid for? Fixes #9829 Change-Id: I3eaa4a9590893eff67695797eb22547a170cdbcd Reviewed-on: https://go-review.googlesource.com/4834 Reviewed-by: Minux Ma <minux@golang.org> Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com> Run-TryBot: David Crawshaw <crawshaw@golang.org>
Diffstat (limited to 'src/cmd/ld/lib.c')
-rw-r--r--src/cmd/ld/lib.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c
index 72c903b4d2..200c96da96 100644
--- a/src/cmd/ld/lib.c
+++ b/src/cmd/ld/lib.c
@@ -269,11 +269,13 @@ loadlib(void)
tlsg = linklookup(ctxt, "runtime.tlsg", 0);
// For most ports, runtime.tlsg is a placeholder symbol for TLS
- // relocation. However, the Android and Darwin ports need it to
- // be a real variable. Instead of hard-coding which platforms
- // need it to be a real variable, we set the type to STLSBSS only
- // when the runtime has not declared its type already.
- if(tlsg->type == 0)
+ // relocation. However, the Android and Darwin arm ports need it
+ // to be a real variable.
+ //
+ // TODO(crawshaw): android should require leaving the tlsg->type
+ // alone (as the runtime-provided SNOPTRBSS) just like darwin/arm.
+ // But some other part of the linker is expecting STLSBSS.
+ if (!(strcmp(goos, "darwin") == 0 && thearch.thechar == '5'))
tlsg->type = STLSBSS;
tlsg->size = thearch.ptrsize;
tlsg->hide = 1;