aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/cgo
diff options
context:
space:
mode:
authorElias Naur <elias.naur@gmail.com>2017-10-08 15:23:10 +0200
committerElias Naur <elias.naur@gmail.com>2017-10-10 08:49:16 +0000
commitae175f74cb4beb4a6695e185c77c7ed52ee2d1d7 (patch)
tree087a9dec0b63e0f7c063e273df8a7aaee969a70a /src/runtime/cgo
parentbb0bfd002ada7e3eb9198d4287b32c2fed6e8da6 (diff)
downloadgo-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.c2
-rw-r--r--src/runtime/cgo/signal_darwin_arm.s6
-rw-r--r--src/runtime/cgo/signal_darwin_arm64.s6
-rw-r--r--src/runtime/cgo/signal_darwin_armx.go4
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()