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>
|
2003-11-19 Andrew Cagney <cagney@redhat.com>
|
||||||
|
|
||||||
* gdb.base/callfuncs.exp: Change the XFAILed descriptor test to a
|
* gdb.base/callfuncs.exp: Change the XFAILed descriptor test to a
|
||||||
|
|
|
@ -651,33 +651,21 @@ gdb_expect {
|
||||||
|
|
||||||
send_gdb "maint internal-error\n"
|
send_gdb "maint internal-error\n"
|
||||||
gdb_expect {
|
gdb_expect {
|
||||||
-re "Quit this debugging session.*\\(y or n\\) $" {
|
-re "A problem internal to GDB has been detected" {
|
||||||
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"
|
pass "maint internal-error"
|
||||||
}
|
if [gdb_internal_error_resync] {
|
||||||
timeout {
|
pass "internal-error resync"
|
||||||
fail "(timeout) maint internal-error"
|
} else {
|
||||||
}
|
fail "internal-error resync"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-re ".*$gdb_prompt $" {
|
-re ".*$gdb_prompt $" {
|
||||||
fail "maint internal-error"
|
fail "maint internal-error"
|
||||||
|
untested "internal-error resync"
|
||||||
}
|
}
|
||||||
timeout {
|
timeout {
|
||||||
fail "(timeout) maint internal-error"
|
fail "maint internal-error (timeout)"
|
||||||
}
|
untested "internal-error resync"
|
||||||
}
|
|
||||||
}
|
|
||||||
-re ".*$gdb_prompt $" {
|
|
||||||
fail "maint internal-error"
|
|
||||||
}
|
|
||||||
timeout {
|
|
||||||
fail "(timeout) maint internal-error"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
# gdb_test_multiple COMMAND MESSAGE EXPECT_ARGUMENTS
|
||||||
# Send a command to gdb; test the result.
|
# Send a command to gdb; test the result.
|
||||||
|
@ -511,6 +560,10 @@ proc gdb_test_multiple { command message user_code } {
|
||||||
}
|
}
|
||||||
|
|
||||||
set code {
|
set code {
|
||||||
|
-re ".*A problem internal to GDB has been detected" {
|
||||||
|
fail "$message (GDB internal error)"
|
||||||
|
gdb_internal_error_resync
|
||||||
|
}
|
||||||
-re "\\*\\*\\* DOSEXIT code.*" {
|
-re "\\*\\*\\* DOSEXIT code.*" {
|
||||||
if { $message != "" } {
|
if { $message != "" } {
|
||||||
fail "$message";
|
fail "$message";
|
||||||
|
|
Loading…
Reference in New Issue