From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32478 invoked by alias); 20 Jun 2011 04:13:44 -0000 Received: (qmail 32454 invoked by uid 22791); 20 Jun 2011 04:13:41 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,TW_XF,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 20 Jun 2011 04:13:18 +0000 Received: (qmail 29798 invoked from network); 20 Jun 2011 04:13:16 -0000 Received: from unknown (HELO ?192.168.0.102?) (yao@127.0.0.2) by mail.codesourcery.com with ESMTPA; 20 Jun 2011 04:13:16 -0000 Message-ID: <4DFEC8D8.3000608@codesourcery.com> Date: Mon, 20 Jun 2011 04:13:00 -0000 From: Yao Qi User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110424 Lightning/1.0b2 Thunderbird/3.1.10 MIME-Version: 1.0 To: Mark Kettenis CC: gdb-patches@sourceware.org Subject: [patch V2, testsuite] gdb.base/savedregs.exp: SIGSEGV -> SIGALRM References: <4DF09229.4070704@codesourcery.com> <201106091117.p59BHRWi025356@glazunov.sibelius.xs4all.nl> <4DF0C613.70101@codesourcery.com> In-Reply-To: <4DF0C613.70101@codesourcery.com> Content-Type: multipart/mixed; boundary="------------020203020005010203000004" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2011-06/txt/msg00257.txt.bz2 This is a multi-part message in MIME format. --------------020203020005010203000004 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Content-length: 1778 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 >>> >>> 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 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? -- Yao (齐尧) --------------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" Content-length: 1180 2011-06-20 Yao Qi 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--