⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signals.exp

📁 lwip在ucos上的移植
💻 EXP
📖 第 1 页 / 共 2 页
字号:
}# lynx2.2.2 doesn't lose signals, instead it screws up the stack pointer# in some of these tests leading to massive problems.  I've# reported this to lynx, hopefully it'll be fixed in lynx2.3.# Severe braindamage.if [ istarget "*-*-*lynx*" ] then {  setup_xfail "*-*-*"  fail "kernel scroggs stack pointer in signal tests on this target"  return 0}gdb_exitgdb_start# This will need to be updated as the exact list of signals changes,# but I want to test that TARGET_SIGNAL_0, TARGET_SIGNAL_DEFAULT, and# TARGET_SIGNAL_UNKNOWN are skipped.proc test_handle_all_print {} {    global timeout    # Increase timeout and expect input buffer for large output from gdb.    # Allow blank or TAB as whitespace characters.    set oldtimeout $timeout    set timeout [expr "$timeout + 360"]    verbose "Timeout is now $timeout seconds" 2    if { ![istarget "*-*-linux*"]         && ( [istarget "*-*-gnu*"]              || [istarget "*-*-mach*"] ) } {	gdb_test "handle all print" "Signal\[ 	\]+Stop\[ 	\]+Print\[ 	\]+Pass to program\[ 	\]+Description\r\nSIGHUP\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Hangup.*SIG63\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Real-time event 63.*EXC_BREAKPOINT\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Breakpoint"    } else {	gdb_test "handle all print" "Signal\[ 	\]+Stop\[ 	\]+Print\[ 	\]+Pass to program\[ 	\]+Description\r\nSIGHUP\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Hangup.*SIG63\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Yes\[ 	\]+Real-time event 63.*"    }    set timeout $oldtimeout    verbose "Timeout restored to $timeout seconds" 2}test_handle_all_printgdb_exitgdb_startgdb_reinitialize_dir $srcdir/$subdirgdb_load $binfilesignal_tests_1# Force a resync, so we're looking at the right prompt.  On SCO we# were getting out of sync (I don't understand why).send_gdb "p 1+1\n"gdb_expect {    -re "= 2.*$gdb_prompt $" {}    -re ".*$gdb_prompt $" { perror "sync trouble in signals.exp" }    default { perror "sync trouble in signals.exp" }}if [runto_main] then {    gdb_test "break handler if 0" "Breakpoint \[0-9\]+ .*"    gdb_test "set \$handler_breakpoint_number = \$bpnum" ""    # Get to the point where a signal is waiting to be delivered    gdb_test "next" "signal \\(SIGUSR1.*" "next to signal in signals.exp"    gdb_test "next" "alarm \\(.*" "next to alarm #1 in signals.exp"    gdb_test "next" "\\+\\+count; /\\* first \\*/" \	"next to ++count #1 in signals.exp"    # Give the signal time to get delivered    sleep 2    # Now call a function.  When GDB tries to run the stack dummy,    # it will hit the breakpoint at handler.  Provided it doesn't    # lose its cool, this is not a problem, it just has to note    # that the breakpoint condition is false and keep going.    gdb_test "p func1 ()" "^p func1 \\(\\)\r\n.\[0-9\]* = $void" \	"p func1 () #1 in signals.exp"    # Make sure the count got incremented.    # Haven't investigated this xfail    setup_xfail "rs6000-*-*"    setup_xfail "powerpc-*-*"    gdb_test "p count" "= 2" "p count #1 in signals.exp"    if { [istarget "rs6000-*-*"] || [istarget "powerpc-*-*"] } { return 0 }    gdb_test "condition \$handler_breakpoint_number" "now unconditional\\."    gdb_test "next" "alarm \\(.*" "next to alarm #2 in signals.exp"    gdb_test "next" "\\+\\+count; /\\* second \\*/" \	"next to ++count #2 in signals.exp"    sleep 2    # This time we stop when GDB tries to run the stack dummy.    # So it is OK that we do not print the return value from the function.    gdb_test "p func1 ()" \"Breakpoint \[0-9\]*, handler.*The program being debugged stopped while in a function called from GDB.*" \	"p func1 () #2 in signals.exp"    # But we should be able to backtrace...    # On alpha-*-osf2.0 this test works when run manually but sometime fails when    # run under dejagnu, making it very hard to debug the problem.  Weird...    gdb_test "bt 10" "#0.*handler.*#1.*#2.*main.*" "bt in signals.exp"    # ...and continue...    gdb_test "continue" "Continuing\\." "continue in signals.exp"    # ...and then count should have been incremented    gdb_test "p count" "= 5" "p count #2 in signals.exp"# Verify that "info signals" produces reasonable output.#    send_gdb "info signals\n"    gdb_expect {      -re "SIGHUP.*SIGINT.*SIGQUIT.*SIGILL.*SIGTRAP.*SIGABRT.*SIGEMT.*SIGFPE.*SIGKILL.*SIGBUS.*SIGSEGV.*SIGSYS.*SIGPIPE.*SIGALRM.*SIGTERM.*SIGURG.*SIGSTOP.*SIGTSTP.*SIGCONT.*SIGCHLD.*SIGTTIN.*SIGTTOU.*SIGIO.*SIGXCPU.*SIGXFSZ.*SIGVTALRM.*SIGPROF.*SIGWINCH.*SIGLOST.*SIGUSR1.*SIGUSR2.*SIGPWR.*SIGPOLL.*SIGWIND.*SIGPHONE.*SIGWAITING.*SIGLWP.*SIGDANGER.*SIGGRANT.*SIGRETRACT.*SIGMSG.*SIGSOUND.*SIGSAK.*SIGPRIO.*SIG33.*SIG34.*SIG35.*SIG36.*SIG37.*SIG38.*SIG39.*SIG40.*SIG41.*SIG42.*SIG43.*SIG44.*SIG45.*SIG46.*SIG47.*SIG48.*SIG49.*SIG50.*SIG51.*SIG52.*SIG53.*SIG54.*SIG55.*SIG56.*SIG57.*SIG58.*SIG59.*SIG60.*SIG61.*SIG62.*SIG63.*Use the \"handle\" command to change these tables.*$gdb_prompt $"\              {pass "info signals"}      -re "$gdb_prompt $"\              {fail "info signals"}      timeout {fail "(timeout) info signals"}    }# Verify that "info signal" correctly handles an argument, be it a# symbolic signal name, or an integer ID.#    send_gdb "info signal SIGTRAP\n"    gdb_expect {      -re ".*SIGTRAP\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*No\[ \t\]*Trace/breakpoint trap.*$gdb_prompt $"\              {pass "info signal SIGTRAP"}      -re "$gdb_prompt $"\              {fail "info signal SIGTRAP"}      timeout {fail "(timeout) info signal SIGTRAP"}    }    send_gdb "info signal 5\n"    gdb_expect {      -re ".*SIGTRAP\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*No\[ \t\]*Trace/breakpoint trap.*$gdb_prompt $"\              {pass "info signal 5"}      -re "$gdb_prompt $"\              {fail "info signal 5"}      timeout {fail "(timeout) info signal 5"}    }# Verify that "handle" with illegal arguments is gracefully, um, handled.#    send_gdb "handle\n"    gdb_expect {      -re "Argument required .signal to handle.*$gdb_prompt $"\              {pass "handle without arguments"}      -re "$gdb_prompt $"\              {fail "handle without arguments"}      timeout {fail "(timeout) handle without arguments"}    }    send_gdb "handle SIGFOO\n"    gdb_expect {      -re "Unrecognized or ambiguous flag word: \"SIGFOO\".*$gdb_prompt $"\              {pass "handle with bogus SIG"}      -re "$gdb_prompt $"\              {fail "handle with bogus SIG"}      timeout {fail "(timeout) handle with bogus SIG"}    }    send_gdb "handle SIGHUP frump\n"    gdb_expect {      -re "Unrecognized or ambiguous flag word: \"frump\".*$gdb_prompt $"\              {pass "handle SIG with bogus action"}      -re "$gdb_prompt $"\              {fail "handle SIG with bogus action"}      timeout {fail "(timeout) handle SIG with bogus action"}    }# Verify that "handle" can take multiple actions per SIG, and that in# the case of conflicting actions, that the rightmost action "wins".#    send_gdb "handle SIGHUP print noprint\n"    gdb_expect {      -re ".*SIGHUP\[ \t\]*No\[ \t\]*No\[ \t\]*Yes\[ \t\]*Hangup.*$gdb_prompt $"\              {pass "handle SIG with multiple conflicting actions"}      -re "$gdb_prompt $"\              {fail "handle SIG with multiple conflicting actions"}      timeout {fail "(timeout) handle SIG with multiple conflicting actions"}    }# Exercise all the various actions.  (We don't care what the outcome# is, this is just to ensure that they all can be parsed.)#    send_gdb "handle SIGHUP print noprint stop nostop ignore noignore pass nopass\n"    gdb_expect {      -re ".*Signal.*$gdb_prompt $"\              {pass "handle SIG parses all legal actions"}      -re "$gdb_prompt $"\              {fail "handle SIG parses all legal actions"}      timeout {fail "(timeout) handle SIG parses all legal actions"}    }# Verify that we can "handle" multiple signals at once, interspersed# with actions.#    send_gdb "handle SIG63 print SIGILL\n"    gdb_expect {      -re ".*SIGILL\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Illegal instruction.*SIG63\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*Real-time event 63.*$gdb_prompt $"\              {pass "handle multiple SIGs"}      -re "$gdb_prompt $"\              {fail "handle multiple SIGs"}      timeout {fail "(timeout) handle multiple SIGs"}    }# Verify that "handle" can take a numeric argument for the signal ID,# rather than a symbolic name.  (This may not be portable; works for# HP-UX.)## Also note that this testpoint overrides SIGTRAP, which on HP-UX at# least, is used to implement single-steps and breakpoints.  Don't# expect to run the inferior after this!#    send_gdb "handle 5 nopass\n"    gdb_expect {      -re ".*SIGTRAP is used by the debugger.*Are you sure you want to change it.*y or n.*"\              {send_gdb "y\n"               gdb_expect {                 -re ".*SIGTRAP\[ \t\]*Yes\[ \t\]*Yes\[ \t\]*No\[ \t\]*Trace/breakpoint trap.*$gdb_prompt $"\                         {pass "override SIGTRAP (#5)"}                 -re "$gdb_prompt $"\                         {fail "override SIGTRAP (#5)"}                 timeout {fail "(timeout) override SIGTRAP (#5)"}               }              }      -re "$gdb_prompt $"\              {fail "override SIGTRAP (#5)"}      timeout {fail "(timeout) override SIGTRAP (#5)"}    }# GDB doesn't seem to allow numeric signal IDs larger than 15.  Verify# that restriction.  ??rehrauer: Not sure if this is a feature or a# bug, actually.  Why is the range 1-15?#    send_gdb "handle 58\n"    gdb_expect {      -re "Only signals 1-15 are valid as numeric signals.*Use \"info signals\" for a list of symbolic signals.*$gdb_prompt $"\              {pass "invalid signal number rejected"}      -re "$gdb_prompt $"\              {fail "invalid signal number rejected"}      timeout {fail "(timeout) invalid signal number rejected"}    }# Verify that we can accept a signal ID range (number-number).# ??rehrauer: This feature isn't documented on the quick-reference# card.#    send_gdb "handle 13-15\n"    gdb_expect {      -re ".*SIGPIPE.*SIGALRM.*SIGTERM.*$gdb_prompt $"\              {pass "handle multiple SIGs via integer range"}      -re "$gdb_prompt $"\              {fail "handle multiple SIGs via integer range"}      timeout {fail "(timeout) handle multiple SIGs via integer range"}    }# Bizarrely enough, GDB also allows you to reverse the range# stat, stop IDs.  E.g., "3-1" and "1-3" mean the same thing.# Probably this isn't documented, but the code anticipates it,# so we'd best test it...#    send_gdb "handle 15-13\n"    gdb_expect {      -re ".*SIGPIPE.*SIGALRM.*SIGTERM.*$gdb_prompt $"\              {pass "handle multiple SIGs via integer range"}      -re "$gdb_prompt $"\              {fail "handle multiple SIGs via integer range"}      timeout {fail "(timeout) handle multiple SIGs via integer range"}    }# SIGINT is used by the debugger as well.  Verify that we can change# our minds about changing it.#    send_gdb "handle SIGINT nopass\n"    gdb_expect {      -re ".*SIGINT is used by the debugger.*Are you sure you want to change it.*y or n.*"\              {send_gdb "n\n"# ??rehrauer: When you answer "n", the header for the signal info is# printed, but not the actual handler settings.  Probably a bug.#               gdb_expect {                 -re "Not confirmed, unchanged.*Signal.*$gdb_prompt $"\                         {pass "override SIGINT"}                 -re "$gdb_prompt $"\                         {fail "override SIGINT"}                 timeout {fail "(timeout) override SIGINT"}               }              }      -re "$gdb_prompt $"\              {fail "override SIGINT"}      timeout {fail "(timeout) override SIGINT"}    }# Verify that GDB responds gracefully to the "signal" command with# a missing argument.#    send_gdb "signal\n"    gdb_expect {      -re "Argument required .signal number..*$gdb_prompt $"\              {pass "signal without arguments disallowed"}      -re "$gdb_prompt $"\              {fail "signal without arguments disallowed"}      timeout {fail "(timeout) signal without arguments disallowed"}    }# Verify that we can successfully send a signal other than 0 to# the inferior.  (This probably causes the inferior to run away.# Be prepared to rerun to main for further testing.)#    send_gdb "signal 5\n"    gdb_expect {      -re "Continuing with signal SIGTRAP.*$gdb_prompt $"\              {pass "sent signal 5"}      -re "$gdb_prompt $"\              {fail "sent signal 5"}      timeout {fail "(timeout) sent signal 5"}    }}return 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -