diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/kill-after-signal.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/kill-after-signal.exp | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/gdb/testsuite/gdb.base/kill-after-signal.exp b/gdb/testsuite/gdb.base/kill-after-signal.exp index 09f5cbc..fcbec9a 100644 --- a/gdb/testsuite/gdb.base/kill-after-signal.exp +++ b/gdb/testsuite/gdb.base/kill-after-signal.exp @@ -36,7 +36,38 @@ if ![runto_main] { } gdb_test "continue" "Program received signal SIGUSR1, .*" -gdb_test "stepi" "\r\nhandler .*" + +set test "handler" +gdb_test_multiple "stepi" $test { + -re "\r\nhandler .*" { + pass $test + } + -re ".*signal handler called.*$gdb_prompt $" { + # PowerPC Linux kernel patchs: + # commit: 0138ba5783ae0dcc799ad401a1e8ac8333790df9 + # powerpc/64/signal: Balance return predictor + # stack in signal trampoline. + # + # The kernel places an additional brctl instruction + # in the vdso to call the user hadler. + # + # commit 24321ac668e452a4942598533d267805f291fdc9 + # powerpc/64/signal: Fix regression in + # __kernel_sigtramp_rt64() semantics + # + # Updates the semantics of __kernel_sigtramp_rt64(). + # It adds a new symbol to serve as a jump target from + # the kernel to the trampoline. + # + # The net result of these changes is that gdb stops + # at __kernel_start_sigtramp_rt64. Need to do one + # more stepi to reach the expected location in the user + # signal handler. + gdb_test "p \$pc" ".*__kernel_start_sigtramp_rt64.*" "in kernel code" + gdb_test "stepi" "\r\nhandler .*" $test + } +} + gdb_test_multiple "kill" "kill" { -re "Kill the program being debugged\\? \\(y or n\\) $" { gdb_test "y" "\\\[Inferior $decimal \\(.*\\) killed\\\]" "kill" |