This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] Make the prec support signal better[0/4]


Joel, I'm a little vague about gdb_test_multiple, but is the attached better?

Michael

Joel Brobecker wrote:
Attached is a test case for it -- it will have a number of
XFAILS without this patch, which will become PASSES with the patch.

I looked at the testcase, and noticed a couple of things:


# Copyright 1995, 1996, 1997, 1999, 2007, 2008, 2009

I was surprised by the copyright years, but I then read the contents of the testcase that mentions alpha-osf3. That's when I realized that this file is inspired by sigall.exp... I supposed that this was the right thing to do, although it probably does not matter because I believe that these headers are actually not legally significant.

if [target_info exists gdb,nosignals] {
    verbose "Skipping sigall-reverse.exp because of nosignals."
    continue
}

I wonder why we do a continue here, whereas we do a return elsewhere:


if ![target_info exists gdb,can_reverse] {
    return
}

I wish we had a cookbook for writing testcases, I always forget what we're supposed to do :-(. Anyone knows if this is significant?

	send_gdb "continue\n"
	if { $thissig == "IO" } {
	    setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
	}
	gdb_expect {
[...]

IMO, the send_gdb/gdb_expect sequences in this script should be converted
to using test_gdb_multiple. I'd rather we avoid send_gdb/gdb_expect
if we can.


#   Copyright 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 <http://www.gnu.org/licenses/>.

if [target_info exists gdb,nosignals] {
    verbose "Skipping sigall-reverse.exp because of nosignals."
    return
}

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 {
	if { $thissig == "IO" } {
	    setup_xfail "i*86-pc-linuxoldld-gnu" "i*86-pc-linuxaout-gnu"
	}
	gdb_test_multiple "continue" "get signal" {
	    -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 {
	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_test_multiple "continue" "send signal" {
	    -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 {
        gdb_test_multiple "signal 0" "advance to $nextsig" {
	    -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
    gdb_test_multiple "reverse-continue" "reverse to gen_$prevsig" {
	-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"

	    gdb_test_multiple "frame" "reverse signal delivered" {
		-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"
gdb_test_multiple "continue" "continue to sigall exit" {
    -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

gdb_test_multiple "echo foo\n" "test echo foo" {
    -re ".*foo.*$gdb_prompt " {
	pass "echo foo"
    }
    -re ".*$gdb_prompt " {
	fail "echo foo"
    }
}

return 0
#include <signal.h>
#include <unistd.h>

#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;
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]