From: Mark Kettenis <mark.kettenis@xs4all.nl>
To: yao@codesourcery.com
Cc: gdb-patches@sourceware.org
Subject: Re: [patch V2, testsuite] gdb.base/savedregs.exp: SIGSEGV -> SIGALRM
Date: Mon, 20 Jun 2011 07:03:00 -0000 [thread overview]
Message-ID: <201106200701.p5K71m5h030689@glazunov.sibelius.xs4all.nl> (raw)
In-Reply-To: <4DFEC8D8.3000608@codesourcery.com> (message from Yao Qi on Mon, 20 Jun 2011 12:13:12 +0800)
> Date: Mon, 20 Jun 2011 12:13:12 +0800
> From: Yao Qi <yao@codesourcery.com>
>
> On 06/09/2011 09:09 PM, Yao Qi wrote:
> > On 06/09/2011 07:17 PM, Mark Kettenis wrote:
> >>> Date: Thu, 09 Jun 2011 17:28:09 +0800
> >>> From: Yao Qi <yao@codesourcery.com>
> >>>
> >>> 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.
> >>
> >> Please don't do this. You're changing the test significantly. And
> >
> > I don't think the test is changed *significantly*. The purpose of
> > writing to zero, at least in this case, is to trigger a signal, and
> > check the register in signal trampoline frame. Either SIGSEGV or SIGILL
> > meets this need.
> >
>
> Mark,
> I still believe my explanation above is correct. The original patch's
> explanation is
> <http://sourceware.org/ml/gdb-patches/2004-10/msg00475.html> and "The
> attached checks that "info frame" doesn't change as the stack evolves."
> shows that SIGSEGV is used here to trigger calling to signal handler.
>
> Please let me know if you still believe that replacing SIGSEGV by other
> signals change the test significantly.
>
> >> there is no guarantee that 0xffff is an invalid instruction. Heck
> >> most platforms don't even have 16-bit instructions.
> >
> > It is possible to find a `common' invalid instruction over all ports,
> > even 0xffff may not be.
> >
>
> This part is weak, I think. In my second version of this patch, I am
> using SIGALRM to replace SIGSEGV.
>
> Tested this new patch on
> i686-pc-linux-gnu/x86_64-unknown-linux-gnu/armv7l-unknown-linux-gnu-eabi/my-uclinux-new-port/.
> No new fails.
>
> OK for mainline?
That's an even bigger change. And I don't think that SIGALRM is even
guaranteed to happen before the program terminates. And if there
MMU-less systems that effectively don't support SIGSEGV, there
certainly are timer-less systems that don't support SIGALRM.
Really, just skip this test on MMU-less systems. If you're worried
about test coverage on your MMU-less ARM systems, add an additional
test in gdb.arch/ that uses an undefined instruction to generate
SIGILL.
> --------------020203020005010203000004
> Content-Type: text/x-patch;
> name="savedregs_sigsegv_to_sigalrm.patch"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: attachment;
> filename="savedregs_sigsegv_to_sigalrm.patch"
>
> 2011-06-20 Yao Qi <yao@codesourcery.com>
>
> gdb/testsuite/
> * gdb.base/savedregs.c (thrower): Remove write to address zero.
> (main): Install handler to SIGALRM instead of SIGSEGV.
> * gdb.base/savedregs.exp: Sleep for a while to make signal is delivered.
>
> diff --git a/gdb/testsuite/gdb.base/savedregs.c b/gdb/testsuite/gdb.base/savedregs.c
> index 9c4ce87..0a804cd 100644
> --- a/gdb/testsuite/gdb.base/savedregs.c
> +++ b/gdb/testsuite/gdb.base/savedregs.c
> @@ -45,11 +45,11 @@ catcher (int sig)
> static void
> thrower (void)
> {
> - *(char *)0 = 0;
> }
>
> main ()
> {
> - signal (SIGSEGV, catcher);
> + signal (SIGALRM, catcher);
> + alarm (1);
> thrower ();
> }
> diff --git a/gdb/testsuite/gdb.base/savedregs.exp b/gdb/testsuite/gdb.base/savedregs.exp
> index 6434512..0de0db8 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"
> +sleep 2
> gdb_test "advance catcher" "catcher .* at .*"
> process_saved_regs catcher { sigtramp thrower } { main }
>
>
> --------------020203020005010203000004--
>
next prev parent reply other threads:[~2011-06-20 7:03 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-09 9:28 [patch, testsuite] gdb.base/savedregs.exp: SIGSEGV -> SIGILL Yao Qi
2011-06-09 10:08 ` Andreas Schwab
2011-06-09 10:53 ` Yao Qi
2011-06-09 11:19 ` Mark Kettenis
2011-06-09 11:41 ` Pedro Alves
2011-06-09 13:25 ` Yao Qi
2011-06-09 13:10 ` Yao Qi
2011-06-09 14:25 ` Pedro Alves
2011-06-20 4:13 ` [patch V2, testsuite] gdb.base/savedregs.exp: SIGSEGV -> SIGALRM Yao Qi
2011-06-20 7:03 ` Mark Kettenis [this message]
2011-06-20 8:26 ` Yao Qi
2011-06-20 11:12 ` Mark Kettenis
2011-06-20 15:07 ` Yao Qi
2011-06-20 15:14 ` Paul Koning
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201106200701.p5K71m5h030689@glazunov.sibelius.xs4all.nl \
--to=mark.kettenis@xs4all.nl \
--cc=gdb-patches@sourceware.org \
--cc=yao@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox