diff options
| author | David Crawshaw <david.crawshaw@zentus.com> | 2014-07-03 16:14:34 -0400 |
|---|---|---|
| committer | David Crawshaw <david.crawshaw@zentus.com> | 2014-07-03 16:14:34 -0400 |
| commit | 12b990ba7d9969987e79d5d1e5e71e50d2cc2c06 (patch) | |
| tree | a4de0aea505bbdb57085fbe304d0f195083dd91e /src/pkg/os | |
| parent | d3be3daafef4b614fc676c807956047976848c7e (diff) | |
| download | go-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/pkg/os')
| -rw-r--r-- | src/pkg/os/user/lookup_stubs.go | 2 | ||||
| -rw-r--r-- | src/pkg/os/user/lookup_unix.go | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/src/pkg/os/user/lookup_stubs.go b/src/pkg/os/user/lookup_stubs.go index 86f0e6e645..4fb0e3c6ed 100644 --- a/src/pkg/os/user/lookup_stubs.go +++ b/src/pkg/os/user/lookup_stubs.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !cgo,!windows,!plan9 +// +build !cgo,!windows,!plan9 android package user diff --git a/src/pkg/os/user/lookup_unix.go b/src/pkg/os/user/lookup_unix.go index f2baf05bbf..0871473df1 100644 --- a/src/pkg/os/user/lookup_unix.go +++ b/src/pkg/os/user/lookup_unix.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build darwin dragonfly freebsd !android,linux netbsd openbsd solaris // +build cgo package user |
