aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/kill-after-signal.exp
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/gdb.base/kill-after-signal.exp')
-rw-r--r--gdb/testsuite/gdb.base/kill-after-signal.exp33
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"