]> Cypherpunks repositories - gostls13.git/commit
runtime: set up TLS without cgo on darwin/arm64
authorCherry Zhang <cherryyz@google.com>
Sat, 24 Oct 2020 17:14:36 +0000 (13:14 -0400)
committerCherry Zhang <cherryyz@google.com>
Wed, 28 Oct 2020 13:25:44 +0000 (13:25 +0000)
commit72dec90bfdb60a0ca2ac1b743db472d2e689414e
tree9c3e315b322275e8b55f01c40757bb0ed2f47b25
parentcf6cfba4d5358404dd890f6025e573a4b2156543
runtime: set up TLS without cgo on darwin/arm64

Currently, on darwin/arm64 we set up TLS using cgo. TLS is not
set for pure Go programs. As we use libc for syscalls on darwin,
we need to save the G register before the libc call. Otherwise it
is not signal-safe, as a signal may land during the execution of
a libc function, where the G register may be clobbered.

This CL initializes TLS in Go, by calling the pthread functions
directly without cgo. This makes it possible to save the G
register to TLS in pure Go programs (done in a later CL).

Inspired by Elias's CL 209197. Write the logic in Go instead of
assembly.

Updates #38485, #35853.

Change-Id: I257ba2a411ad387b2f4d50d10129d37fec7a226e
Reviewed-on: https://go-review.googlesource.com/c/go/+/265118
Trust: Cherry Zhang <cherryyz@google.com>
Trust: Elias Naur <mail@eliasnaur.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/asm_arm64.s
src/runtime/cgo/gcc_darwin_arm64.c
src/runtime/defs_darwin_arm64.go
src/runtime/sys_darwin_arm64.go [new file with mode: 0644]
src/runtime/sys_darwin_arm64.s