Skip to content

Commit

Permalink
runtime: disable pprof test with cgo on aix/ppc64
Browse files Browse the repository at this point in the history
This commit disables new cgo pprof tests and adds an handler in sigtramp
to refuse SIGPROF signal.

Updates #28555

Change-Id: I152a871f8636e93328d411329104c6f023bd1691
Reviewed-on: https://go-review.googlesource.com/c/go/+/164013
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
  • Loading branch information
Clément Chigot authored and ianlancetaylor committed Mar 19, 2019
1 parent 6f7bb2c commit 205d62d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/runtime/crash_cgo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 4 additions & 0 deletions src/runtime/pprof/proto_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
17 changes: 17 additions & 0 deletions src/runtime/sys_aix_ppc64.s
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand Down

0 comments on commit 205d62d

Please sign in to comment.