[patch, testsuite] gdb.base/savedregs.exp: SIGSEGV -> SIGILL

Yao Qi
2011-06-09T09:28:32Z

[-- Attachment #1: Type: text/plain, Size: 520 bytes --]

In current gdb.base/savedregs.exp, signal handler is installed for
signal SIGSEGV, and SIGSEGV is trigger by `*(char *)0 = 0;'. However,
on non-mmu uclinux system, writing to an address 0x0 doesn't trigger
SIGSEGV.

In my patch, SIGILL is chosen to replace SIGSEGV. One assumption here
is that 0xffff is an invalid instruction on all ports.

FAILs go away on my non-mmu uclinux system, and no regression on
i686-pc-linux-gnu/x86_64-unknown-linux-gnu/armv7l-unknown-linux-gnueabi.
OK to apply?

--
Yao (é½å°§)

[-- Attachment #2: savedregs_sigsegv_to_sigill.patch --]
[-- Type: text/x-patch, Size: 1283 bytes --]

2011-06-09 Yao Qi <yao@codesourcery.com>

gdb/testsuite/
* gdb.base/savedregs.c (catcher): Add an invalid instruction
to trigger SIGILL.
(main): Install catcher for signal SIGILL.
* gdb.base/savedregs.exp (process_saved_regs): Handle SIGILL.

diff --git a/gdb/testsuite/gdb.base/savedregs.c b/gdb/testsuite/gdb.base/savedregs.c
index 9c4ce87..9af2c6c 100644
--- a/gdb/testsuite/gdb.base/savedregs.c
+++ b/gdb/testsuite/gdb.base/savedregs.c
@@ -45,11 +45,12 @@ catcher (int sig)
static void
thrower (void)
{
- *(char *)0 = 0;
+ /* Assume 0xffff is an invalid instruction on all ports. */
+ asm (".word 0xffff");
}

main ()
{
- signal (SIGSEGV, catcher);
+ signal (SIGILL, catcher);
thrower ();
}
diff --git a/gdb/testsuite/gdb.base/savedregs.exp b/gdb/testsuite/gdb.base/savedregs.exp
index 6434512..5d9634e 100644
--- a/gdb/testsuite/gdb.base/savedregs.exp
+++ b/gdb/testsuite/gdb.base/savedregs.exp
@@ -142,7 +142,7 @@ process_saved_regs thrower { main } { }

# Continue to the signal catcher, check main's saved-reg info, capture
# catcher's saved-reg info.
-gdb_test "handle SIGSEGV pass print nostop"
+gdb_test "handle SIGILL pass print nostop"
gdb_test "advance catcher" "catcher .* at .*"
process_saved_regs catcher { sigtramp thrower } { main }