aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/crash_cgo_test.go3
-rw-r--r--src/runtime/pprof/proto_test.go4
-rw-r--r--src/runtime/sys_aix_ppc64.s17
3 files changed, 24 insertions, 0 deletions
diff --git a/src/runtime/crash_cgo_test.go b/src/runtime/crash_cgo_test.go
index c1dd757797..e0c8955e7d 100644
--- a/src/runtime/crash_cgo_test.go
+++ b/src/runtime/crash_cgo_test.go
@@ -229,6 +229,9 @@ func TestCgoPanicDeadlock(t *testing.T) {
}
func TestCgoCCodeSIGPROF(t *testing.T) {
+ if runtime.GOOS == "aix" {
+ t.Skip("pprof not yet available on AIX (see golang.org/issue/28555)")
+ }
t.Parallel()
got := runTestProg(t, "testprogcgo", "CgoCCodeSIGPROF")
want := "OK\n"
diff --git a/src/runtime/pprof/proto_test.go b/src/runtime/pprof/proto_test.go
index 4452d51231..cb38150da8 100644
--- a/src/runtime/pprof/proto_test.go
+++ b/src/runtime/pprof/proto_test.go
@@ -312,6 +312,10 @@ func TestMapping(t *testing.T) {
testenv.MustHaveGoRun(t)
testenv.MustHaveCGO(t)
+ if runtime.GOOS == "aix" {
+ t.Skip("pprof not yet available on AIX (see golang.org/issue/28555)")
+ }
+
prog := "./testdata/mappingtest/main.go"
// GoOnly includes only Go symbols that runtime will symbolize.
diff --git a/src/runtime/sys_aix_ppc64.s b/src/runtime/sys_aix_ppc64.s
index d691b76cc7..d9e97ac8b7 100644
--- a/src/runtime/sys_aix_ppc64.s
+++ b/src/runtime/sys_aix_ppc64.s
@@ -109,6 +109,9 @@ TEXT runtime·_sigtramp(SB),NOSPLIT|NOFRAME,$0
BL runtime·load_g(SB)
+ CMP $0, g
+ BEQ sigtrampnog // g == nil
+
// Save m->libcall. We need to do this because we
// might get interrupted by a signal in runtime·asmcgocall.
@@ -155,6 +158,7 @@ TEXT runtime·_sigtramp(SB),NOSPLIT|NOFRAME,$0
MOVD 120(R1), R8
MOVD R8, 0(R7)
+exit:
// restore registers
MOVD 56(R1),R31
MOVD 64(R1),g
@@ -166,6 +170,19 @@ TEXT runtime·_sigtramp(SB),NOSPLIT|NOFRAME,$0
MOVD R0, LR
BR (LR)
+sigtrampnog:
+ // Signal arrived on a non-Go thread.
+ // SIGPROF handler is not yet available so simply call badsignal,
+ // after having created *sigctxt.
+ MOVD R4, 80(R1)
+ MOVD R5, 88(R1)
+ MOVD R1, R4
+ ADD $80, R4
+ MOVD R4, FIXED_FRAME+8(R1)
+ MOVD R3, FIXED_FRAME+0(R1)
+ BL runtime·badsignal(SB)
+ JMP exit
+
// runtime.tstart is a function descriptor to the real tstart.
DATA runtime·tstart+0(SB)/8, $runtime·_tstart(SB)
DATA runtime·tstart+8(SB)/8, $TOC(SB)