]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix cgo export of panicmem on ios
authorElias Naur <elias.naur@gmail.com>
Sun, 8 Oct 2017 13:23:10 +0000 (15:23 +0200)
committerElias Naur <elias.naur@gmail.com>
Tue, 10 Oct 2017 08:49:16 +0000 (08:49 +0000)
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>
src/cmd/vet/all/whitelist/darwin_arm64.txt
src/runtime/cgo/gcc_signal2_darwin_armx.c
src/runtime/cgo/signal_darwin_arm.s
src/runtime/cgo/signal_darwin_arm64.s
src/runtime/cgo/signal_darwin_armx.go

index 080a4caafadc29b681f15da5b7085f06da3e25a1..793cccf8dd84a9e247cb1b920d3c73c5a7985722 100644 (file)
@@ -5,10 +5,4 @@ runtime/sys_darwin_arm64.s: [arm64] sigtramp: 24(RSP) should be infostyle+8(FP)
 runtime/sys_darwin_arm64.s: [arm64] bsdthread_create: RET without writing to 4-byte ret+24(FP)
 runtime/sys_darwin_arm64.s: [arm64] bsdthread_start: function bsdthread_start missing Go declaration
 runtime/sys_darwin_arm64.s: [arm64] bsdthread_register: RET without writing to 4-byte ret+0(FP)
-runtime/cgo/signal_darwin_arm64.s: [arm64] panicmem: use of 8(RSP) points beyond argument frame
-runtime/cgo/signal_darwin_arm64.s: [arm64] panicmem: use of 8(RSP) points beyond argument frame
-runtime/cgo/signal_darwin_arm64.s: [arm64] panicmem: use of 16(RSP) points beyond argument frame
-runtime/cgo/signal_darwin_arm64.s: [arm64] panicmem: use of 8(RSP) points beyond argument frame
-runtime/cgo/signal_darwin_arm64.s: [arm64] panicmem: use of 16(RSP) points beyond argument frame
-runtime/cgo/signal_darwin_arm64.s: [arm64] panicmem: use of 16(RSP) points beyond argument frame
 runtime/asm_arm64.s: [arm64] sigreturn: function sigreturn missing Go declaration
index 6da623b3b1b6faec7258d7c41403e9ddc92c6fb8..54b7e326588e2627109c239f2df9797726ca7013 100644 (file)
@@ -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) {}
index ee5c3d347653fa1ccd3d3058963ff232d70c7875..f886e4bc06ce6c1b727f7a812edb72ce78e55a17 100644 (file)
@@ -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
index 75aefd4b951e58df46070305cdfc0ad60fa5c668..17781cf496aa7476a57a491571add7b8ef99fe2b 100644 (file)
@@ -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
index e1d9e54c462f1b46cd8cd08f76034cbbd4238a61..9f4b462415ff64b05d877dada6545038223862ad 100644 (file)
@@ -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()