This is the mail archive of the gdb-patches@sources.redhat.com 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]

[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

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