aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/ld/pobj.c
diff options
context:
space:
mode:
authorDavid Crawshaw <david.crawshaw@zentus.com>2014-07-03 16:14:34 -0400
committerDavid Crawshaw <david.crawshaw@zentus.com>2014-07-03 16:14:34 -0400
commit12b990ba7d9969987e79d5d1e5e71e50d2cc2c06 (patch)
treea4de0aea505bbdb57085fbe304d0f195083dd91e /src/cmd/ld/pobj.c
parentd3be3daafef4b614fc676c807956047976848c7e (diff)
downloadgo-12b990ba7d9969987e79d5d1e5e71e50d2cc2c06.tar.xz
cmd/go, cmd/ld, runtime, os/user: TLS emulation for android
Based on cl/69170045 by Elias Naur. There are currently several schemes for acquiring a TLS slot to save the g register. None of them appear to work for android. The closest are linux and darwin. Linux uses a linker TLS relocation. This is not supported by the android linker. Darwin uses a fixed offset, and calls pthread_key_create until it gets the slot it wants. As the runtime loads late in the android process lifecycle, after an arbitrary number of other libraries, we cannot rely on any particular slot being available. So we call pthread_key_create, take the first slot we are given, and put it in runtime.tlsg, which we turn into a regular variable in cmd/ld. Makes android/arm cgo binaries work. LGTM=minux R=elias.naur, minux, dave, josharian CC=golang-codereviews https://golang.org/cl/106380043
Diffstat (limited to 'src/cmd/ld/pobj.c')
-rw-r--r--src/cmd/ld/pobj.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cmd/ld/pobj.c b/src/cmd/ld/pobj.c
index 819c37954a..d3a15a7705 100644
--- a/src/cmd/ld/pobj.c
+++ b/src/cmd/ld/pobj.c
@@ -139,7 +139,7 @@ main(int argc, char *argv[])
if(HEADTYPE == -1)
HEADTYPE = headtype(goos);
ctxt->headtype = HEADTYPE;
- if (headstring == nil)
+ if(headstring == nil)
headstring = headstr(HEADTYPE);
archinit();