This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[commit] Recover from struct-return internal errors
- From: Andrew Cagney <ac131313 at redhat dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Thu, 20 Nov 2003 13:07:18 -0500
- Subject: [commit] Recover from struct-return internal errors
I've committed the attached. It tries to get the structs.exp test out
of a hole that that the amd64 GDB appears to be digging for it:
(gdb) PASS: gdb.base/structs.exp: ptype foo1; structs-tc
p/c fun1()
/home/cygnus/cagney/GDB/src/gdb/x86-64-tdep.c:438: internal-error: classify_argument: unknown argument type
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) FAIL: gdb.base/structs.exp: p/c fun<n>(); call 1 structs-tc (GDB internal error)
n
/home/cygnus/cagney/GDB/src/gdb/x86-64-tdep.c:438: internal-error: classify_argument: unknown argument type
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Create a core file of GDB? (y or n) n
Andrew
2003-11-20 Andrew Cagney <cagney@redhat.com>
* gdb.base/structs.exp: Handle and recover from internal errors.
Replace "foo${n}" with "foo<n>" in test messages.
Index: gdb.base/structs.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/structs.exp,v
retrieving revision 1.8
diff -u -r1.8 structs.exp
--- gdb.base/structs.exp 20 Nov 2003 17:11:55 -0000 1.8
+++ gdb.base/structs.exp 20 Nov 2003 18:01:41 -0000
@@ -321,11 +321,22 @@
-re "L[expr ${n} + 1] *= fun[expr ${n} + 1].*${gdb_prompt} $" {
pass "${test}"
}
+ -re "A problem internal to GDB has been detected" {
+ fail "${test} (GDB internal error 2)"
+ gdb_internal_error_resync
+ }
+ -re "${gdb_prompt} $" {
+ fail "${test} (wrong line info)"
+ }
timeout {
fail "${test} (timeout 2)"
}
}
}
+ -re "A problem internal to GDB has been detected" {
+ fail "${test} (GDB internal error 1)"
+ gdb_internal_error_resync
+ }
-re "${gdb_prompt} $" {
fail "${test} (no query)"
}
@@ -364,6 +375,10 @@
fail "${test}"
}
}
+ -re "A problem internal to GDB has been detected" {
+ fail "${test} (GDB internal error)"
+ gdb_internal_error_resync
+ }
-re "${gdb_prompt} $" {
# Garbage returned, garbage printed
fail "${test}"
@@ -395,7 +410,7 @@
# Finish the function, set 'finish_value_unknown" to non-empty if the
# return-value was not found.
send_gdb "finish\n"
- set test "finish foo${n}; ${tests}"
+ set test "finish foo<n>; ${tests}"
set finish_value_unknown 0
gdb_expect {
-re "Value returned is .*${gdb_prompt} $" {
@@ -406,6 +421,10 @@
set finish_value_unknown 1
pass "${test}"
}
+ -re "A problem internal to GDB has been detected" {
+ fail "${test} (GDB internal error)"
+ gdb_internal_error_resync
+ }
-re ".*${gdb_prompt} $" {
# Garbage returned
fail "${test}"
@@ -419,7 +438,7 @@
# "p/c". If no return value was found, the 'Z' from the previous
# check that the variable was cleared, is printed.
send_gdb "p/c\n"
- set test "value foo${n} finished; ${tests}"
+ set test "value foo<n> finished; ${tests}"
setup_kfails structs-*tld* i686-*-* gdb/1447
gdb_expect {
-re "[foo ${n}]\[\r\n\]+${gdb_prompt} $" {
@@ -440,6 +459,10 @@
# know the location of the return-value.
fail "${test}"
}
+ }
+ -re "A problem internal to GDB has been detected" {
+ fail "${test} (GDB internal error)"
+ gdb_internal_error_resync
}
-re ".*${gdb_prompt} $" {
# Garbage returned