From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31117 invoked by alias); 10 Sep 2009 19:43:06 -0000 Received: (qmail 31105 invoked by uid 22791); 10 Sep 2009 19:42:59 -0000 X-SWARE-Spam-Status: No, hits=-0.1 required=5.0 tests=AWL,BAYES_05,J_CHICKENPOX_37,J_CHICKENPOX_61,J_CHICKENPOX_63,ZMIde_GENERICSPAM1 X-Spam-Check-By: sourceware.org Received: from smtp-outbound-2.vmware.com (HELO smtp-outbound-2.vmware.com) (65.115.85.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 Sep 2009 19:42:50 +0000 Received: from jupiter.vmware.com (mailhost5.vmware.com [10.16.68.131]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id 12133A00F; Thu, 10 Sep 2009 12:42:49 -0700 (PDT) Received: from [10.20.94.141] (msnyder-server.eng.vmware.com [10.20.94.141]) by jupiter.vmware.com (Postfix) with ESMTP id 0604DDC080; Thu, 10 Sep 2009 12:42:49 -0700 (PDT) Message-ID: <4AA95648.10605@vmware.com> Date: Thu, 10 Sep 2009 19:43:00 -0000 From: Michael Snyder User-Agent: Thunderbird 1.5.0.12 (X11/20080411) MIME-Version: 1.0 To: Hui Zhu CC: gdb-patches ml Subject: Re: [RFA] Make the prec support signal better[0/4] References: In-Reply-To: Content-Type: multipart/mixed; boundary="------------090201090701090505050801" 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: 2009-09/txt/msg00280.txt.bz2 This is a multi-part message in MIME format. --------------090201090701090505050801 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-length: 581 Hui Zhu wrote: > Hi guys, > > In some days before, I post a patch about make prec support signal > better. After that, I worked together with Michael to make this patch > better. > Now, I split the patch to 4 patches. > 1. For gdbarch.sh > 2. For record.c > 3. For i386-linux > 4. For amd64-linux > > Please post your comment to it. I worked with Hui on this change, so of course it has my approval, but I'd prefer not to be the only reviewer. Attached is a test case for it -- it will have a number of XFAILS without this patch, which will become PASSES with the patch. --------------090201090701090505050801 Content-Type: text/plain; name="sigall-reverse.exp" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="sigall-reverse.exp" Content-length: 10445 # Copyright 1995, 1996, 1997, 1999, 2007, 2008, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . if [target_info exists gdb,nosignals] { verbose "Skipping sigall-reverse.exp because of nosignals." continue } if ![target_info exists gdb,can_reverse] { return } if $tracelevel then { strace $tracelevel } set prms_id 0 set bug_id 0 gdb_exit gdb_start gdb_reinitialize_dir $srcdir/$subdir set testfile sigall-reverse set srcfile ${testfile}.c set binfile ${objdir}/${subdir}/${testfile} if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } { untested sigall.exp return -1 } # Make the first signal SIGABRT because it is always supported. set sig_supported 1 set thissig "ABRT" proc test_one_sig {nextsig} { global sig_supported global gdb_prompt global thissig set this_sig_supported $sig_supported gdb_test "handle SIG$thissig stop print" \ "SIG$thissig\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*" gdb_test "b handle_$thissig" "Breakpoint \[0-9\]+ .*" gdb_test "b gen_$nextsig" "Breakpoint \[0-9\]+ .*" set need_another_continue 1 set missed_handler 0 if $this_sig_supported then { send_gdb "continue\n" if { $thissig == "IO" } { setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu" } gdb_expect { -re "Program received signal SIG$thissig.*handle_$thissig.*$gdb_prompt $" { fail "get signal $thissig (wrong location)" } -re "Program received signal SIG$thissig.*$gdb_prompt $" { pass "get signal $thissig" } -re "Breakpoint.* handle_$thissig.*$gdb_prompt $" { xfail "get signal $thissig" set need_another_continue 0 } -re ".*$gdb_prompt $" { fail "get signal $thissig" set need_another_continue 0 } default { fail "get signal $thissig (eof or timeout)" } } } if [ istarget "alpha-dec-osf3*" ] then { # OSF/1-3.x is unable to continue with a job control stop signal. # The inferior remains stopped without an event of interest # and GDB waits forever for the inferior to stop on an event # of interest. Work around the kernel bug. if { $thissig == "TSTP" || $thissig == "TTIN" || $thissig == "TTOU" } { setup_xfail "alpha-dec-osf3*" fail "cannot continue from signal $thissig" set need_another_continue 0 } } if $need_another_continue then { send_gdb "continue\n" if { $thissig == "URG" } { setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu" } # Either Lynx or GDB screws up on SIGPRIO if { $thissig == "PRIO" } { setup_xfail "*-*-*lynx*" } gdb_expect { -re "Breakpoint.*handle_$thissig.*$gdb_prompt $" { pass "send signal $thissig" } -re "Breakpoint.*gen_$nextsig.*kill.*$gdb_prompt $" { fail "missed breakpoint at handle_$thissig" set missed_handler 1 } } } if { $missed_handler == "0" } then { send_gdb "signal 0\n" gdb_expect { -re "Breakpoint.*gen_$nextsig.*kill.*$gdb_prompt $" { pass "advance to $nextsig" set sig_supported 1 } -re "Breakpoint.*gen_$nextsig.*handle.*$gdb_prompt $" { pass "advance to $nextsig" set sig_supported 0 } -re ".*$gdb_prompt $" { fail "advance to $nextsig" } default { fail "advance to $nextsig (eof or timeout)" } } } set thissig $nextsig } proc test_one_sig_reverse {prevsig} { global gdb_prompt gdb_test "reverse-continue" "Breakpoint .* handle_$prevsig.*" \ "reverse to handler of $prevsig" set saw_signal 0 send_gdb "reverse-continue\n" gdb_expect { -re "Breakpoint.*handle_.*$gdb_prompt " { pass "reverse to gen_$prevsig (un-handled)" } -re "Program received signal SIG$prevsig.*$gdb_prompt " { pass "reverse to signal event, $prevsig" send_gdb "frame\n" gdb_expect { -re ".*handle_$prevsig.*$gdb_prompt " { fail "reverse signal delivered (wrong location)" } -re ".*$gdb_prompt " { pass "reverse signal delivered" } } set saw_signal 1 send_gdb "reverse-continue\n" exp_continue } -re "Breakpoint.*kill.*$gdb_prompt " { if { $saw_signal } then { pass "reverse to gen_$prevsig (handled)" } else { xfail "reverse to gen_$prevsig (handled)" } } -re "No more reverse-execution history.*kill.*$gdb_prompt " { if { $saw_signal } then { pass "reverse to gen_$prevsig (handled)" } else { xfail "reverse to gen_$prevsig (handled)" } } default { fail "reverse to gen_$prevsig (timeout)" } } } gdb_load $binfile runto gen_ABRT if [target_info exists gdb,use_precord] { # Activate process record/replay gdb_test "record" "" "Turn on process record" # FIXME: command ought to acknowledge, so we can test if it succeeded. } test_one_sig HUP test_one_sig QUIT test_one_sig ILL test_one_sig EMT test_one_sig FPE test_one_sig BUS test_one_sig SEGV test_one_sig SYS test_one_sig PIPE test_one_sig ALRM test_one_sig URG test_one_sig TSTP test_one_sig CONT test_one_sig CHLD test_one_sig TTIN test_one_sig TTOU test_one_sig IO test_one_sig XCPU test_one_sig XFSZ test_one_sig VTALRM test_one_sig PROF test_one_sig WINCH test_one_sig LOST test_one_sig USR1 test_one_sig USR2 test_one_sig PWR test_one_sig POLL test_one_sig WIND test_one_sig PHONE test_one_sig WAITING test_one_sig LWP test_one_sig DANGER test_one_sig GRANT test_one_sig RETRACT test_one_sig MSG test_one_sig SOUND test_one_sig SAK test_one_sig PRIO test_one_sig 33 test_one_sig 34 test_one_sig 35 test_one_sig 36 test_one_sig 37 test_one_sig 38 test_one_sig 39 test_one_sig 40 test_one_sig 41 test_one_sig 42 test_one_sig 43 test_one_sig 44 test_one_sig 45 test_one_sig 46 test_one_sig 47 test_one_sig 48 test_one_sig 49 test_one_sig 50 test_one_sig 51 test_one_sig 52 test_one_sig 53 test_one_sig 54 test_one_sig 55 test_one_sig 56 test_one_sig 57 test_one_sig 58 test_one_sig 59 test_one_sig 60 test_one_sig 61 test_one_sig 62 test_one_sig 63 test_one_sig TERM # The last signal (SIGTERM) gets handled slightly differently because # we are not setting up for another test. gdb_test "handle SIGTERM stop print" \ "SIGTERM\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes.*" gdb_test "b handle_TERM" "Breakpoint \[0-9\]+ .*" gdb_test "continue" \ "Continuing.*Program received signal SIGTERM.*" \ "get signal TERM" gdb_test "continue" "Breakpoint.*handle_TERM.*" "send signal TERM" # gdb_continue_to_end "continue to sigall exit" send_gdb "continue\n" gdb_expect { -re ".*Do you want to stop the program.*$" { send_gdb "yes\n" exp_continue } -re "$gdb_prompt " { pass "continue to sigall exit" } default { fail "continue to sigall exit (timeout)" } } test_one_sig_reverse TERM test_one_sig_reverse 63 test_one_sig_reverse 62 test_one_sig_reverse 61 test_one_sig_reverse 60 test_one_sig_reverse 59 test_one_sig_reverse 58 test_one_sig_reverse 57 test_one_sig_reverse 56 test_one_sig_reverse 55 test_one_sig_reverse 54 test_one_sig_reverse 53 test_one_sig_reverse 52 test_one_sig_reverse 51 test_one_sig_reverse 50 test_one_sig_reverse 49 test_one_sig_reverse 48 test_one_sig_reverse 47 test_one_sig_reverse 46 test_one_sig_reverse 45 test_one_sig_reverse 44 test_one_sig_reverse 43 test_one_sig_reverse 42 test_one_sig_reverse 41 test_one_sig_reverse 40 test_one_sig_reverse 39 test_one_sig_reverse 38 test_one_sig_reverse 37 test_one_sig_reverse 36 test_one_sig_reverse 35 test_one_sig_reverse 34 test_one_sig_reverse 33 test_one_sig_reverse PRIO test_one_sig_reverse SAK test_one_sig_reverse SOUND test_one_sig_reverse MSG test_one_sig_reverse RETRACT test_one_sig_reverse GRANT test_one_sig_reverse DANGER test_one_sig_reverse LWP test_one_sig_reverse WAITING test_one_sig_reverse PHONE test_one_sig_reverse WIND test_one_sig_reverse POLL test_one_sig_reverse PWR test_one_sig_reverse USR2 test_one_sig_reverse USR1 test_one_sig_reverse LOST test_one_sig_reverse WINCH test_one_sig_reverse PROF test_one_sig_reverse VTALRM test_one_sig_reverse XFSZ test_one_sig_reverse XCPU test_one_sig_reverse IO test_one_sig_reverse TTOU test_one_sig_reverse TTIN test_one_sig_reverse CHLD test_one_sig_reverse CONT test_one_sig_reverse TSTP test_one_sig_reverse URG test_one_sig_reverse ALRM test_one_sig_reverse PIPE test_one_sig_reverse SYS test_one_sig_reverse SEGV test_one_sig_reverse BUS test_one_sig_reverse FPE test_one_sig_reverse EMT test_one_sig_reverse ILL test_one_sig_reverse QUIT test_one_sig_reverse HUP test_one_sig_reverse ABRT # Make the first signal SIGABRT because it is always supported. set sig_supported 1 set thissig "ABRT" test_one_sig HUP test_one_sig QUIT test_one_sig ILL test_one_sig EMT test_one_sig FPE test_one_sig BUS test_one_sig SEGV test_one_sig SYS test_one_sig PIPE test_one_sig ALRM test_one_sig URG test_one_sig TSTP test_one_sig CONT test_one_sig CHLD test_one_sig TTIN test_one_sig TTOU test_one_sig IO test_one_sig XCPU test_one_sig XFSZ test_one_sig VTALRM test_one_sig PROF test_one_sig WINCH test_one_sig LOST test_one_sig USR1 test_one_sig USR2 test_one_sig PWR test_one_sig POLL test_one_sig WIND test_one_sig PHONE test_one_sig WAITING test_one_sig LWP test_one_sig DANGER test_one_sig GRANT test_one_sig RETRACT test_one_sig MSG test_one_sig SOUND test_one_sig SAK test_one_sig PRIO test_one_sig 33 test_one_sig 34 test_one_sig 35 test_one_sig 36 test_one_sig 37 test_one_sig 38 test_one_sig 39 test_one_sig 40 test_one_sig 41 test_one_sig 42 test_one_sig 43 test_one_sig 44 test_one_sig 45 test_one_sig 46 test_one_sig 47 test_one_sig 48 test_one_sig 49 test_one_sig 50 test_one_sig 51 test_one_sig 52 test_one_sig 53 test_one_sig 54 test_one_sig 55 test_one_sig 56 test_one_sig 57 test_one_sig 58 test_one_sig 59 test_one_sig 60 test_one_sig 61 test_one_sig 62 test_one_sig 63 test_one_sig TERM return 0 --------------090201090701090505050801 Content-Type: text/x-csrc; name="sigall-reverse.c" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="sigall-reverse.c" Content-length: 19714 #include #include #ifdef __sh__ #define signal(a,b) /* Signals not supported on this target - make them go away */ #endif /* Signal handlers, we set breakpoints in them to make sure that the signals really get delivered. */ #ifdef PROTOTYPES void handle_ABRT (int sig) #else void handle_ABRT (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_HUP (int sig) #else void handle_HUP (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_QUIT (int sig) #else void handle_QUIT (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_ILL (int sig) #else void handle_ILL (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_EMT (int sig) #else void handle_EMT (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_FPE (int sig) #else void handle_FPE (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_BUS (int sig) #else void handle_BUS (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_SEGV (int sig) #else void handle_SEGV (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_SYS (int sig) #else void handle_SYS (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_PIPE (int sig) #else void handle_PIPE (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_ALRM (int sig) #else void handle_ALRM (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_URG (int sig) #else void handle_URG (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_TSTP (int sig) #else void handle_TSTP (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_CONT (int sig) #else void handle_CONT (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_CHLD (int sig) #else void handle_CHLD (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_TTIN (int sig) #else void handle_TTIN (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_TTOU (int sig) #else void handle_TTOU (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_IO (int sig) #else void handle_IO (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_XCPU (int sig) #else void handle_XCPU (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_XFSZ (int sig) #else void handle_XFSZ (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_VTALRM (int sig) #else void handle_VTALRM (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_PROF (int sig) #else void handle_PROF (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_WINCH (int sig) #else void handle_WINCH (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_LOST (int sig) #else void handle_LOST (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_USR1 (int sig) #else void handle_USR1 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_USR2 (int sig) #else void handle_USR2 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_PWR (int sig) #else void handle_PWR (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_POLL (int sig) #else void handle_POLL (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_WIND (int sig) #else void handle_WIND (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_PHONE (int sig) #else void handle_PHONE (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_WAITING (int sig) #else void handle_WAITING (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_LWP (int sig) #else void handle_LWP (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_DANGER (int sig) #else void handle_DANGER (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_GRANT (int sig) #else void handle_GRANT (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_RETRACT (int sig) #else void handle_RETRACT (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_MSG (int sig) #else void handle_MSG (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_SOUND (int sig) #else void handle_SOUND (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_SAK (int sig) #else void handle_SAK (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_PRIO (int sig) #else void handle_PRIO (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_33 (int sig) #else void handle_33 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_34 (int sig) #else void handle_34 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_35 (int sig) #else void handle_35 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_36 (int sig) #else void handle_36 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_37 (int sig) #else void handle_37 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_38 (int sig) #else void handle_38 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_39 (int sig) #else void handle_39 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_40 (int sig) #else void handle_40 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_41 (int sig) #else void handle_41 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_42 (int sig) #else void handle_42 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_43 (int sig) #else void handle_43 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_44 (int sig) #else void handle_44 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_45 (int sig) #else void handle_45 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_46 (int sig) #else void handle_46 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_47 (int sig) #else void handle_47 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_48 (int sig) #else void handle_48 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_49 (int sig) #else void handle_49 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_50 (int sig) #else void handle_50 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_51 (int sig) #else void handle_51 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_52 (int sig) #else void handle_52 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_53 (int sig) #else void handle_53 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_54 (int sig) #else void handle_54 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_55 (int sig) #else void handle_55 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_56 (int sig) #else void handle_56 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_57 (int sig) #else void handle_57 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_58 (int sig) #else void handle_58 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_59 (int sig) #else void handle_59 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_60 (int sig) #else void handle_60 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_61 (int sig) #else void handle_61 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_62 (int sig) #else void handle_62 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_63 (int sig) #else void handle_63 (sig) int sig; #endif { } #ifdef PROTOTYPES void handle_TERM (int sig) #else void handle_TERM (sig) int sig; #endif { } /* Functions to send signals. These also serve as markers. */ int gen_ABRT () { kill (getpid (), SIGABRT); return 0; } int gen_HUP () { #ifdef SIGHUP kill (getpid (), SIGHUP); #else handle_HUP (0); #endif return 0; } int gen_QUIT () { #ifdef SIGQUIT kill (getpid (), SIGQUIT); #else handle_QUIT (0); #endif return 0; } int gen_ILL () { #ifdef SIGILL kill (getpid (), SIGILL); #else handle_ILL (0); #endif return 0; } int gen_EMT () { #ifdef SIGEMT kill (getpid (), SIGEMT); #else handle_EMT (0); #endif return 0; } int x; int gen_FPE () { /* The intent behind generating SIGFPE this way is to check the mapping from the CPU exception itself to the signals. It would be nice to do the same for SIGBUS, SIGSEGV, etc., but I suspect that even this test might turn out to be insufficiently portable. */ #if 0 /* Loses on the PA because after the signal handler executes we try to re-execute the failing instruction again. Perhaps we could siglongjmp out of the signal handler? */ /* The expect script looks for the word "kill"; don't delete it. */ return 5 / x; /* and we both started jumping up and down yelling kill */ #else kill (getpid (), SIGFPE); #endif return 0; } int gen_BUS () { #ifdef SIGBUS kill (getpid (), SIGBUS); #else handle_BUS (0); #endif return 0; } int gen_SEGV () { #ifdef SIGSEGV kill (getpid (), SIGSEGV); #else handle_SEGV (0); #endif return 0; } int gen_SYS () { #ifdef SIGSYS kill (getpid (), SIGSYS); #else handle_SYS (0); #endif return 0; } int gen_PIPE () { #ifdef SIGPIPE kill (getpid (), SIGPIPE); #else handle_PIPE (0); #endif return 0; } int gen_ALRM () { #ifdef SIGALRM kill (getpid (), SIGALRM); #else handle_ALRM (0); #endif return 0; } int gen_URG () { #ifdef SIGURG kill (getpid (), SIGURG); #else handle_URG (0); #endif return 0; } int gen_TSTP () { #ifdef SIGTSTP kill (getpid (), SIGTSTP); #else handle_TSTP (0); #endif return 0; } int gen_CONT () { #ifdef SIGCONT kill (getpid (), SIGCONT); #else handle_CONT (0); #endif return 0; } int gen_CHLD () { #ifdef SIGCHLD kill (getpid (), SIGCHLD); #else handle_CHLD (0); #endif return 0; } int gen_TTIN () { #ifdef SIGTTIN kill (getpid (), SIGTTIN); #else handle_TTIN (0); #endif return 0; } int gen_TTOU () { #ifdef SIGTTOU kill (getpid (), SIGTTOU); #else handle_TTOU (0); #endif return 0; } int gen_IO () { #ifdef SIGIO kill (getpid (), SIGIO); #else handle_IO (0); #endif return 0; } int gen_XCPU () { #ifdef SIGXCPU kill (getpid (), SIGXCPU); #else handle_XCPU (0); #endif return 0; } int gen_XFSZ () { #ifdef SIGXFSZ kill (getpid (), SIGXFSZ); #else handle_XFSZ (0); #endif return 0; } int gen_VTALRM () { #ifdef SIGVTALRM kill (getpid (), SIGVTALRM); #else handle_VTALRM (0); #endif return 0; } int gen_PROF () { #ifdef SIGPROF kill (getpid (), SIGPROF); #else handle_PROF (0); #endif return 0; } int gen_WINCH () { #ifdef SIGWINCH kill (getpid (), SIGWINCH); #else handle_WINCH (0); #endif return 0; } int gen_LOST () { #if defined(SIGLOST) && (!defined(SIGABRT) || SIGLOST != SIGABRT) kill (getpid (), SIGLOST); #else handle_LOST (0); #endif return 0; } int gen_USR1 () { #ifdef SIGUSR1 kill (getpid (), SIGUSR1); #else handle_USR1 (0); #endif return 0; } int gen_USR2 () { #ifdef SIGUSR2 kill (getpid (), SIGUSR2); #else handle_USR2 (0); #endif return 0; } int gen_PWR () { #ifdef SIGPWR kill (getpid (), SIGPWR); #else handle_PWR (0); #endif return 0; } int gen_POLL () { #if defined (SIGPOLL) && (!defined (SIGIO) || SIGPOLL != SIGIO) kill (getpid (), SIGPOLL); #else handle_POLL (0); #endif return 0; } int gen_WIND () { #ifdef SIGWIND kill (getpid (), SIGWIND); #else handle_WIND (0); #endif return 0; } int gen_PHONE () { #ifdef SIGPHONE kill (getpid (), SIGPHONE); #else handle_PHONE (0); #endif return 0; } int gen_WAITING () { #ifdef SIGWAITING kill (getpid (), SIGWAITING); #else handle_WAITING (0); #endif return 0; } int gen_LWP () { #ifdef SIGLWP kill (getpid (), SIGLWP); #else handle_LWP (0); #endif return 0; } int gen_DANGER () { #ifdef SIGDANGER kill (getpid (), SIGDANGER); #else handle_DANGER (0); #endif return 0; } int gen_GRANT () { #ifdef SIGGRANT kill (getpid (), SIGGRANT); #else handle_GRANT (0); #endif return 0; } int gen_RETRACT () { #ifdef SIGRETRACT kill (getpid (), SIGRETRACT); #else handle_RETRACT (0); #endif return 0; } int gen_MSG () { #ifdef SIGMSG kill (getpid (), SIGMSG); #else handle_MSG (0); #endif return 0; } int gen_SOUND () { #ifdef SIGSOUND kill (getpid (), SIGSOUND); #else handle_SOUND (0); #endif return 0; } int gen_SAK () { #ifdef SIGSAK kill (getpid (), SIGSAK); #else handle_SAK (0); #endif return 0; } int gen_PRIO () { #ifdef SIGPRIO kill (getpid (), SIGPRIO); #else handle_PRIO (0); #endif return 0; } int gen_33 () { #ifdef SIG33 kill (getpid (), 33); #else handle_33 (0); #endif return 0; } int gen_34 () { #ifdef SIG34 kill (getpid (), 34); #else handle_34 (0); #endif return 0; } int gen_35 () { #ifdef SIG35 kill (getpid (), 35); #else handle_35 (0); #endif return 0; } int gen_36 () { #ifdef SIG36 kill (getpid (), 36); #else handle_36 (0); #endif return 0; } int gen_37 () { #ifdef SIG37 kill (getpid (), 37); #else handle_37 (0); #endif return 0; } int gen_38 () { #ifdef SIG38 kill (getpid (), 38); #else handle_38 (0); #endif return 0; } int gen_39 () { #ifdef SIG39 kill (getpid (), 39); #else handle_39 (0); #endif return 0; } int gen_40 () { #ifdef SIG40 kill (getpid (), 40); #else handle_40 (0); #endif return 0; } int gen_41 () { #ifdef SIG41 kill (getpid (), 41); #else handle_41 (0); #endif return 0; } int gen_42 () { #ifdef SIG42 kill (getpid (), 42); #else handle_42 (0); #endif return 0; } int gen_43 () { #ifdef SIG43 kill (getpid (), 43); #else handle_43 (0); #endif return 0; } int gen_44 () { #ifdef SIG44 kill (getpid (), 44); #else handle_44 (0); #endif return 0; } int gen_45 () { #ifdef SIG45 kill (getpid (), 45); #else handle_45 (0); #endif return 0; } int gen_46 () { #ifdef SIG46 kill (getpid (), 46); #else handle_46 (0); #endif return 0; } int gen_47 () { #ifdef SIG47 kill (getpid (), 47); #else handle_47 (0); #endif return 0; } int gen_48 () { #ifdef SIG48 kill (getpid (), 48); #else handle_48 (0); #endif return 0; } int gen_49 () { #ifdef SIG49 kill (getpid (), 49); #else handle_49 (0); #endif return 0; } int gen_50 () { #ifdef SIG50 kill (getpid (), 50); #else handle_50 (0); #endif return 0; } int gen_51 () { #ifdef SIG51 kill (getpid (), 51); #else handle_51 (0); #endif return 0; } int gen_52 () { #ifdef SIG52 kill (getpid (), 52); #else handle_52 (0); #endif return 0; } int gen_53 () { #ifdef SIG53 kill (getpid (), 53); #else handle_53 (0); #endif return 0; } int gen_54 () { #ifdef SIG54 kill (getpid (), 54); #else handle_54 (0); #endif return 0; } int gen_55 () { #ifdef SIG55 kill (getpid (), 55); #else handle_55 (0); #endif return 0; } int gen_56 () { #ifdef SIG56 kill (getpid (), 56); #else handle_56 (0); #endif return 0; } int gen_57 () { #ifdef SIG57 kill (getpid (), 57); #else handle_57 (0); #endif return 0; } int gen_58 () { #ifdef SIG58 kill (getpid (), 58); #else handle_58 (0); #endif return 0; } int gen_59 () { #ifdef SIG59 kill (getpid (), 59); #else handle_59 (0); #endif return 0; } int gen_60 () { #ifdef SIG60 kill (getpid (), 60); #else handle_60 (0); #endif return 0; } int gen_61 () { #ifdef SIG61 kill (getpid (), 61); #else handle_61 (0); #endif return 0; } int gen_62 () { #ifdef SIG62 kill (getpid (), 62); #else handle_62 (0); #endif return 0; } int gen_63 () { #ifdef SIG63 kill (getpid (), 63); #else handle_63 (0); #endif return 0; } int gen_TERM () { kill (getpid (), SIGTERM); return 0; } int main () { #ifdef usestubs set_debug_traps (); breakpoint (); #endif #ifdef SIG_SETMASK /* Ensure all the signals aren't blocked. The environment in which the testsuite is run may have blocked some for whatever reason. */ { sigset_t newset; sigemptyset (&newset); sigprocmask (SIG_SETMASK, &newset, NULL); } #endif signal (SIGABRT, handle_ABRT); #ifdef SIGHUP signal (SIGHUP, handle_HUP); #endif #ifdef SIGQUIT signal (SIGQUIT, handle_QUIT); #endif #ifdef SIGILL signal (SIGILL, handle_ILL); #endif #ifdef SIGEMT signal (SIGEMT, handle_EMT); #endif #ifdef SIGFPE signal (SIGFPE, handle_FPE); #endif #ifdef SIGBUS signal (SIGBUS, handle_BUS); #endif #ifdef SIGSEGV signal (SIGSEGV, handle_SEGV); #endif #ifdef SIGSYS signal (SIGSYS, handle_SYS); #endif #ifdef SIGPIPE signal (SIGPIPE, handle_PIPE); #endif #ifdef SIGALRM signal (SIGALRM, handle_ALRM); #endif #ifdef SIGURG signal (SIGURG, handle_URG); #endif #ifdef SIGTSTP signal (SIGTSTP, handle_TSTP); #endif #ifdef SIGCONT signal (SIGCONT, handle_CONT); #endif #ifdef SIGCHLD signal (SIGCHLD, handle_CHLD); #endif #ifdef SIGTTIN signal (SIGTTIN, handle_TTIN); #endif #ifdef SIGTTOU signal (SIGTTOU, handle_TTOU); #endif #ifdef SIGIO signal (SIGIO, handle_IO); #endif #ifdef SIGXCPU signal (SIGXCPU, handle_XCPU); #endif #ifdef SIGXFSZ signal (SIGXFSZ, handle_XFSZ); #endif #ifdef SIGVTALRM signal (SIGVTALRM, handle_VTALRM); #endif #ifdef SIGPROF signal (SIGPROF, handle_PROF); #endif #ifdef SIGWINCH signal (SIGWINCH, handle_WINCH); #endif #if defined(SIGLOST) && (!defined(SIGABRT) || SIGLOST != SIGABRT) signal (SIGLOST, handle_LOST); #endif #ifdef SIGUSR1 signal (SIGUSR1, handle_USR1); #endif #ifdef SIGUSR2 signal (SIGUSR2, handle_USR2); #endif #ifdef SIGPWR signal (SIGPWR, handle_PWR); #endif #if defined (SIGPOLL) && (!defined (SIGIO) || SIGPOLL != SIGIO) signal (SIGPOLL, handle_POLL); #endif #ifdef SIGWIND signal (SIGWIND, handle_WIND); #endif #ifdef SIGPHONE signal (SIGPHONE, handle_PHONE); #endif #ifdef SIGWAITING signal (SIGWAITING, handle_WAITING); #endif #ifdef SIGLWP signal (SIGLWP, handle_LWP); #endif #ifdef SIGDANGER signal (SIGDANGER, handle_DANGER); #endif #ifdef SIGGRANT signal (SIGGRANT, handle_GRANT); #endif #ifdef SIGRETRACT signal (SIGRETRACT, handle_RETRACT); #endif #ifdef SIGMSG signal (SIGMSG, handle_MSG); #endif #ifdef SIGSOUND signal (SIGSOUND, handle_SOUND); #endif #ifdef SIGSAK signal (SIGSAK, handle_SAK); #endif #ifdef SIGPRIO signal (SIGPRIO, handle_PRIO); #endif #ifdef __Lynx__ /* Lynx doesn't seem to have anything in signal.h for this. */ signal (33, handle_33); signal (34, handle_34); signal (35, handle_35); signal (36, handle_36); signal (37, handle_37); signal (38, handle_38); signal (39, handle_39); signal (40, handle_40); signal (41, handle_41); signal (42, handle_42); signal (43, handle_43); signal (44, handle_44); signal (45, handle_45); signal (46, handle_46); signal (47, handle_47); signal (48, handle_48); signal (49, handle_49); signal (50, handle_50); signal (51, handle_51); signal (52, handle_52); signal (53, handle_53); signal (54, handle_54); signal (55, handle_55); signal (56, handle_56); signal (57, handle_57); signal (58, handle_58); signal (59, handle_59); signal (60, handle_60); signal (61, handle_61); signal (62, handle_62); signal (63, handle_63); #endif /* lynx */ signal (SIGTERM, handle_TERM); x = 0; gen_ABRT (); gen_HUP (); gen_QUIT (); gen_ILL (); gen_EMT (); gen_FPE (); gen_BUS (); gen_SEGV (); gen_SYS (); gen_PIPE (); gen_ALRM (); gen_URG (); gen_TSTP (); gen_CONT (); gen_CHLD (); gen_TTIN (); gen_TTOU (); gen_IO (); gen_XCPU (); gen_XFSZ (); gen_VTALRM (); gen_PROF (); gen_WINCH (); gen_LOST (); gen_USR1 (); gen_USR2 (); gen_PWR (); gen_POLL (); gen_WIND (); gen_PHONE (); gen_WAITING (); gen_LWP (); gen_DANGER (); gen_GRANT (); gen_RETRACT (); gen_MSG (); gen_SOUND (); gen_SAK (); gen_PRIO (); gen_33 (); gen_34 (); gen_35 (); gen_36 (); gen_37 (); gen_38 (); gen_39 (); gen_40 (); gen_41 (); gen_42 (); gen_43 (); gen_44 (); gen_45 (); gen_46 (); gen_47 (); gen_48 (); gen_49 (); gen_50 (); gen_51 (); gen_52 (); gen_53 (); gen_54 (); gen_55 (); gen_56 (); gen_57 (); gen_58 (); gen_59 (); gen_60 (); gen_61 (); gen_62 (); gen_63 (); gen_TERM (); return 0; } --------------090201090701090505050801--