2003-11-20 Andrew Cagney <cagney@redhat.com>
* gdb.base/maint.exp: Use gdb_internal_error_resync to recover from the internal error. * lib/gdb.exp (gdb_internal_error_resync): New procedure. Original from Jim Blandy. (gdb_test_multiple): Use gdb_internal_error_resync.
This commit is contained in:
parent
90ced0dda1
commit
039cf96dc4
@ -1,3 +1,11 @@
|
||||
2003-11-20 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* gdb.base/maint.exp: Use gdb_internal_error_resync to recover
|
||||
from the internal error.
|
||||
* lib/gdb.exp (gdb_internal_error_resync): New procedure.
|
||||
Original from Jim Blandy.
|
||||
(gdb_test_multiple): Use gdb_internal_error_resync.
|
||||
|
||||
2003-11-19 Andrew Cagney <cagney@redhat.com>
|
||||
|
||||
* gdb.base/callfuncs.exp: Change the XFAILed descriptor test to a
|
||||
|
@ -650,34 +650,22 @@ gdb_expect {
|
||||
}
|
||||
|
||||
send_gdb "maint internal-error\n"
|
||||
gdb_expect {
|
||||
-re "Quit this debugging session.*\\(y or n\\) $" {
|
||||
send_gdb "n\n"
|
||||
gdb_expect {
|
||||
-re "Create a core file.*\\(y or n\\) $" {
|
||||
send_gdb "n\n"
|
||||
gdb_expect {
|
||||
-re ".*$gdb_prompt $" {
|
||||
pass "maint internal-error"
|
||||
}
|
||||
timeout {
|
||||
fail "(timeout) maint internal-error"
|
||||
}
|
||||
}
|
||||
}
|
||||
-re ".*$gdb_prompt $" {
|
||||
fail "maint internal-error"
|
||||
}
|
||||
timeout {
|
||||
fail "(timeout) maint internal-error"
|
||||
}
|
||||
gdb_expect {
|
||||
-re "A problem internal to GDB has been detected" {
|
||||
pass "maint internal-error"
|
||||
if [gdb_internal_error_resync] {
|
||||
pass "internal-error resync"
|
||||
} else {
|
||||
fail "internal-error resync"
|
||||
}
|
||||
}
|
||||
-re ".*$gdb_prompt $" {
|
||||
fail "maint internal-error"
|
||||
untested "internal-error resync"
|
||||
}
|
||||
timeout {
|
||||
fail "(timeout) maint internal-error"
|
||||
fail "maint internal-error (timeout)"
|
||||
untested "internal-error resync"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -360,6 +360,55 @@ proc gdb_continue_to_breakpoint {name} {
|
||||
}
|
||||
|
||||
|
||||
# gdb_internal_error_resync:
|
||||
#
|
||||
# Answer the questions GDB asks after it reports an internal error
|
||||
# until we get back to a GDB prompt. Decline to quit the debugging
|
||||
# session, and decline to create a core file. Return non-zero if the
|
||||
# resync succeeds.
|
||||
#
|
||||
# This procedure just answers whatever questions come up until it sees
|
||||
# a GDB prompt; it doesn't require you to have matched the input up to
|
||||
# any specific point. However, it only answers questions it sees in
|
||||
# the output itself, so if you've matched a question, you had better
|
||||
# answer it yourself before calling this.
|
||||
#
|
||||
# You can use this function thus:
|
||||
#
|
||||
# gdb_expect {
|
||||
# ...
|
||||
# -re ".*A problem internal to GDB has been detected" {
|
||||
# gdb_internal_error_resync
|
||||
# }
|
||||
# ...
|
||||
# }
|
||||
#
|
||||
proc gdb_internal_error_resync {} {
|
||||
global gdb_prompt
|
||||
|
||||
set count 0
|
||||
while {$count < 10} {
|
||||
gdb_expect {
|
||||
-re "Quit this debugging session\\? \\(y or n\\) $" {
|
||||
send_gdb "n\n"
|
||||
incr count
|
||||
}
|
||||
-re "Create a core file of GDB\\? \\(y or n\\) $" {
|
||||
send_gdb "n\n"
|
||||
incr count
|
||||
}
|
||||
-re "$gdb_prompt $" {
|
||||
# We're resynchronized.
|
||||
return 1
|
||||
}
|
||||
timeout {
|
||||
perror "Could not resync from internal error (timeout)"
|
||||
return 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# gdb_test_multiple COMMAND MESSAGE EXPECT_ARGUMENTS
|
||||
# Send a command to gdb; test the result.
|
||||
@ -511,6 +560,10 @@ proc gdb_test_multiple { command message user_code } {
|
||||
}
|
||||
|
||||
set code {
|
||||
-re ".*A problem internal to GDB has been detected" {
|
||||
fail "$message (GDB internal error)"
|
||||
gdb_internal_error_resync
|
||||
}
|
||||
-re "\\*\\*\\* DOSEXIT code.*" {
|
||||
if { $message != "" } {
|
||||
fail "$message";
|
||||
|
Loading…
x
Reference in New Issue
Block a user