]> Cypherpunks repositories - gostls13.git/commit
cmd/go, cmd/ld, runtime, os/user: TLS emulation for android
authorDavid Crawshaw <david.crawshaw@zentus.com>
Thu, 3 Jul 2014 20:14:34 +0000 (16:14 -0400)
committerDavid Crawshaw <david.crawshaw@zentus.com>
Thu, 3 Jul 2014 20:14:34 +0000 (16:14 -0400)
commit12b990ba7d9969987e79d5d1e5e71e50d2cc2c06
treea4de0aea505bbdb57085fbe304d0f195083dd91e
parentd3be3daafef4b614fc676c807956047976848c7e
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
13 files changed:
src/cmd/go/build.go
src/cmd/ld/data.c
src/cmd/ld/elf.c
src/cmd/ld/lib.c
src/cmd/ld/pobj.c
src/cmd/ld/symtab.c
src/pkg/os/user/lookup_stubs.go
src/pkg/os/user/lookup_unix.go
src/pkg/runtime/asm_arm.s
src/pkg/runtime/cgo/cgo.go
src/pkg/runtime/cgo/gcc_android_arm.c [new file with mode: 0644]
src/pkg/runtime/cgo/gcc_linux_arm.c
src/pkg/runtime/tls_arm.s [new file with mode: 0644]