diff options
| author | Elias Naur <elias.naur@gmail.com> | 2017-10-08 15:23:10 +0200 |
|---|---|---|
| committer | Elias Naur <elias.naur@gmail.com> | 2017-10-10 08:49:16 +0000 |
| commit | ae175f74cb4beb4a6695e185c77c7ed52ee2d1d7 (patch) | |
| tree | 087a9dec0b63e0f7c063e273df8a7aaee969a70a /src/runtime/cgo | |
| parent | bb0bfd002ada7e3eb9198d4287b32c2fed6e8da6 (diff) | |
| download | go-ae175f74cb4beb4a6695e185c77c7ed52ee2d1d7.tar.xz | |
runtime: fix cgo export of panicmem on ios
CL 68490 reworked the way the panicmem function is exposed to the
C mach expection catcher. However, //go:cgo_export_static isn't enough:
the underlying assembly functions must not start with the middle dot.
Without the middle dot, the panicmem function's exported name is
not prefixed with its package; rename it to xx_cgo_panicmem to decrease
the chance of a symbol name clash.
Finally, mark the overridden C symbol weak to avoid duplicate symbol
errors from the host linker.
For the ios builders.
Change-Id: Ib87789fecec9314e398cf1bd8c04ba0b3a6642af
Reviewed-on: https://go-review.googlesource.com/69113
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Diffstat (limited to 'src/runtime/cgo')
| -rw-r--r-- | src/runtime/cgo/gcc_signal2_darwin_armx.c | 2 | ||||
| -rw-r--r-- | src/runtime/cgo/signal_darwin_arm.s | 6 | ||||
| -rw-r--r-- | src/runtime/cgo/signal_darwin_arm64.s | 6 | ||||
| -rw-r--r-- | src/runtime/cgo/signal_darwin_armx.go | 4 |
4 files changed, 9 insertions, 9 deletions
diff --git a/src/runtime/cgo/gcc_signal2_darwin_armx.c b/src/runtime/cgo/gcc_signal2_darwin_armx.c index 6da623b3b1..54b7e32658 100644 --- a/src/runtime/cgo/gcc_signal2_darwin_armx.c +++ b/src/runtime/cgo/gcc_signal2_darwin_armx.c @@ -10,4 +10,4 @@ // We hope that for real binaries the definition provided by Go will take precedence // and the linker will drop this .o file altogether, which is why this definition // is all by itself in its own file. -void xx_cgo_panicmem(void) {} +void __attribute__((weak)) xx_cgo_panicmem(void) {} diff --git a/src/runtime/cgo/signal_darwin_arm.s b/src/runtime/cgo/signal_darwin_arm.s index ee5c3d3476..f886e4bc06 100644 --- a/src/runtime/cgo/signal_darwin_arm.s +++ b/src/runtime/cgo/signal_darwin_arm.s @@ -4,13 +4,13 @@ #include "textflag.h" -// panicmem is the entrypoint for SIGSEGV as intercepted via a +// xx_cgo_panicmem is the entrypoint for SIGSEGV as intercepted via a // mach thread port as EXC_BAD_ACCESS. As the segfault may have happened -// in C code, we first need to load_g then call panicmem. +// in C code, we first need to load_g then call xx_cgo_panicmem. // // R1 - LR at moment of fault // R2 - PC at moment of fault -TEXT ·panicmem(SB),NOSPLIT,$-4 +TEXT xx_cgo_panicmem(SB),NOSPLIT,$-4 // If in external C code, we need to load the g register. BL runtime·load_g(SB) CMP $0, g diff --git a/src/runtime/cgo/signal_darwin_arm64.s b/src/runtime/cgo/signal_darwin_arm64.s index 75aefd4b95..17781cf496 100644 --- a/src/runtime/cgo/signal_darwin_arm64.s +++ b/src/runtime/cgo/signal_darwin_arm64.s @@ -4,13 +4,13 @@ #include "textflag.h" -// panicmem is the entrypoint for SIGSEGV as intercepted via a +// xx_cgo_panicmem is the entrypoint for SIGSEGV as intercepted via a // mach thread port as EXC_BAD_ACCESS. As the segfault may have happened -// in C code, we first need to load_g then call panicmem. +// in C code, we first need to load_g then call xx_cgo_panicmem. // // R1 - LR at moment of fault // R2 - PC at moment of fault -TEXT ·panicmem(SB),NOSPLIT,$-8 +TEXT xx_cgo_panicmem(SB),NOSPLIT,$-8 // If in external C code, we need to load the g register. BL runtime·load_g(SB) CMP $0, g diff --git a/src/runtime/cgo/signal_darwin_armx.go b/src/runtime/cgo/signal_darwin_armx.go index e1d9e54c46..9f4b462415 100644 --- a/src/runtime/cgo/signal_darwin_armx.go +++ b/src/runtime/cgo/signal_darwin_armx.go @@ -9,5 +9,5 @@ package cgo import _ "unsafe" -//go:cgo_export_static panicmem xx_cgo_panicmem -func panicmem() +//go:cgo_export_static xx_cgo_panicmem xx_cgo_panicmem +func xx_cgo_panicmem() |
