From ae3229ae5c12a2bfce2961e21c299f286e8b8cb1 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Fri, 13 Feb 2015 14:52:07 -0500 Subject: [PATCH] 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 Reviewed-by: Hyang-Ah Hana Kim Run-TryBot: David Crawshaw --- src/cmd/ld/lib.c | 12 +++++++----- 1 file 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; -- 2.50.0