[commit] Testsuite adjustments for finish/return on MIPS

Daniel Jacobowitz drow@false.org
Tue Oct 2 15:00:00 GMT 2007


The MIPS/Linux o32 ABI is interesting in that there is a caller-saved
register which has to be restored after basically every function call
($gp).  This extra instruction is labelled with the same line as the
function call.  Most of the finish / return / until test cases already
allow for this, since those commands are defined to return to the
instruction following the call (unlike nexting out of a function,
which advances to the next source line).  Here's fixes for a couple
of tests which didn't.

Tested on x86_64-linux and mipsel-linux, committed.

-- 
Daniel Jacobowitz
CodeSourcery

2007-10-02  Daniel Jacobowitz  <dan@codesourcery.com>

	* gdb.cp/classes.exp (do_tests): Always step to the line after the
	call.
	* gdb.mi/mi-simplerun.exp (test_controlled_execution): Allow finish
	to return to the call.
	* gdb.mi/mi2-simplerun.exp (test_controlled_execution): Likewise.
	* gdb.mi/mi-return.exp (test_return_simple): Likewise.
	* gdb.mi/mi2-return.exp (test_return_simple): Likewise.
	* gdb.mi/mi-until.exp (test_until): Likewise.
	* gdb.mi/mi2-until.exp (test_until): Likewise.

Index: gdb/testsuite/gdb.cp/classes.exp
===================================================================
--- gdb/testsuite/gdb.cp/classes.exp	(revision 182501)
+++ gdb/testsuite/gdb.cp/classes.exp	(working copy)
@@ -582,7 +582,14 @@ proc do_tests {} {
 
     gdb_breakpoint enums2
     gdb_test "continue" ".*Breakpoint .* enums2.*" "continue to enums2(\\(\\)|)"
-    gdb_test "finish" "" ""
+    # Leave enums2.  Make sure we reach the next line, in case there
+    # are any more instructions to finish the function call.
+    gdb_test_multiple "finish" "" {
+	-re "enums2 \\(\\);.*$gdb_prompt $" {
+	    gdb_test "next" "" ""
+	}
+	-re "$gdb_prompt $" { }
+    }
     test_enums
 
     gdb_test "finish" "" ""
Index: gdb/testsuite/gdb.mi/mi2-simplerun.exp
===================================================================
--- gdb/testsuite/gdb.mi/mi2-simplerun.exp	(revision 182501)
+++ gdb/testsuite/gdb.mi/mi2-simplerun.exp	(working copy)
@@ -132,6 +132,7 @@ proc test_controlled_execution {} {
     set line_callee4_head         [gdb_get_line_number "callee4 ("]
     set line_callee4_body         [expr $line_callee4_head + 2]
     set line_callee3_head         [gdb_get_line_number "callee3 ("]
+    set line_callee3_call         [expr $line_callee3_head + 2]
     set line_callee3_close_brace  [expr $line_callee3_head + 3]
     set line_callee1_head         [gdb_get_line_number "callee1 ("]
     set line_callee1_body         [expr $line_callee1_head + 2]
@@ -164,7 +165,8 @@ proc test_controlled_execution {} {
     # FIXME: A string argument is not printed right; should be fixed and
     #        we should look for the right thing here.
     # NOTE: The ``.'' is part of ``gdb-result-var="$1"''
-    mi_finish_to "callee3" ".*" "basics.c" $line_callee3_close_brace ".1" "0" "exec-finish"
+    mi_finish_to "callee3" ".*" "basics.c" \
+	"($line_callee3_call|$line_callee3_close_brace)" ".1" "0" "exec-finish"
 }
 
 proc test_controlling_breakpoints {} {
Index: gdb/testsuite/gdb.mi/mi2-return.exp
===================================================================
--- gdb/testsuite/gdb.mi/mi2-return.exp	(revision 182501)
+++ gdb/testsuite/gdb.mi/mi2-return.exp	(working copy)
@@ -51,11 +51,12 @@ proc test_return_simple {} {
     global hex fullname_syntax srcfile
 
     set line_callee3_head         [gdb_get_line_number "callee3 ("]
+    set line_callee3_call         [expr $line_callee3_head + 2]
     set line_callee3_close_brace  [expr $line_callee3_head + 3]
 
     send_gdb "111-exec-return\n"
     gdb_expect {
-	-re "111\\^done,frame=\{level=\"0\",addr=\"$hex\",func=\"callee3\",args=\\\[.*\\\],file=\".*basics.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$line_callee3_close_brace\"\}\r\n$mi_gdb_prompt$" {pass "return from callee4 now"}
+	-re "111\\^done,frame=\{level=\"0\",addr=\"$hex\",func=\"callee3\",args=\\\[.*\\\],file=\".*basics.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"($line_callee3_call|$line_callee3_close_brace)\"\}\r\n$mi_gdb_prompt$" {pass "return from callee4 now"}
 	-re ".*\r\n$mi_gdb_prompt$" { fail "return from callee4 now" }
 	timeout { fail "return from callee4 now (timeout)"
 	}
Index: gdb/testsuite/gdb.mi/mi-simplerun.exp
===================================================================
--- gdb/testsuite/gdb.mi/mi-simplerun.exp	(revision 182501)
+++ gdb/testsuite/gdb.mi/mi-simplerun.exp	(working copy)
@@ -131,6 +131,7 @@ proc test_controlled_execution {} {
     set line_callee4_head         [gdb_get_line_number "callee4 ("]
     set line_callee4_body         [expr $line_callee4_head + 2]
     set line_callee3_head         [gdb_get_line_number "callee3 ("]
+    set line_callee3_call         [expr $line_callee3_head + 2]
     set line_callee3_close_brace  [expr $line_callee3_head + 3]
     set line_callee1_head         [gdb_get_line_number "callee1 ("]
     set line_callee1_body         [expr $line_callee1_head + 2]
@@ -163,7 +164,8 @@ proc test_controlled_execution {} {
     # FIXME: A string argument is not printed right; should be fixed and
     #        we should look for the right thing here.
     # NOTE: The ``.'' is part of ``gdb-result-var="$1"''
-    mi_finish_to "callee3" ".*" "basics.c" $line_callee3_close_brace ".1" "0" "exec-finish"
+    mi_finish_to "callee3" ".*" "basics.c" \
+	"($line_callee3_call|$line_callee3_close_brace)" ".1" "0" "exec-finish"
 }
 
 proc test_controlling_breakpoints {} {
Index: gdb/testsuite/gdb.mi/mi-until.exp
===================================================================
--- gdb/testsuite/gdb.mi/mi-until.exp	(revision 182501)
+++ gdb/testsuite/gdb.mi/mi-until.exp	(working copy)
@@ -117,7 +117,7 @@ proc test_until {} {
 
     send_gdb "444-exec-until until.c:25\n"
     gdb_expect {
-	-re "444\\^running\r\n${mi_gdb_prompt}444\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"24\"\}\r\n$mi_gdb_prompt$" {
+	-re "444\\^running\r\n${mi_gdb_prompt}444\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"(23|24)\"\}\r\n$mi_gdb_prompt$" {
 	    pass "until after current function"
 	}
 	timeout {
Index: gdb/testsuite/gdb.mi/mi2-until.exp
===================================================================
--- gdb/testsuite/gdb.mi/mi2-until.exp	(revision 182501)
+++ gdb/testsuite/gdb.mi/mi2-until.exp	(working copy)
@@ -117,7 +117,7 @@ proc test_until {} {
 
     send_gdb "444-exec-until until.c:25\n"
     gdb_expect {
-	-re "444\\^running\r\n${mi_gdb_prompt}444\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"24\"\}\r\n$mi_gdb_prompt$" {
+	-re "444\\^running\r\n${mi_gdb_prompt}444\\*stopped,reason=\"location-reached\",thread-id=\"\[01\]\",frame=\{addr=\"$hex\",func=\"main\",args=\\\[\\\],file=\".*until.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"(23|24)\"\}\r\n$mi_gdb_prompt$" {
 	    pass "until after current function"
 	}
 	timeout {
Index: gdb/testsuite/gdb.mi/mi-return.exp
===================================================================
--- gdb/testsuite/gdb.mi/mi-return.exp	(revision 182501)
+++ gdb/testsuite/gdb.mi/mi-return.exp	(working copy)
@@ -51,11 +51,12 @@ proc test_return_simple {} {
     global hex fullname_syntax srcfile
 
     set line_callee3_head         [gdb_get_line_number "callee3 ("]
+    set line_callee3_call         [expr $line_callee3_head + 2]
     set line_callee3_close_brace  [expr $line_callee3_head + 3]
 
     send_gdb "111-exec-return\n"
     gdb_expect {
-	-re "111\\^done,frame=\{level=\"0\",addr=\"$hex\",func=\"callee3\",args=\\\[.*\\\],file=\".*basics.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"$line_callee3_close_brace\"\}\r\n$mi_gdb_prompt$" {pass "return from callee4 now"}
+	-re "111\\^done,frame=\{level=\"0\",addr=\"$hex\",func=\"callee3\",args=\\\[.*\\\],file=\".*basics.c\",fullname=\"${fullname_syntax}${srcfile}\",line=\"($line_callee3_call|$line_callee3_close_brace)\"\}\r\n$mi_gdb_prompt$" {pass "return from callee4 now"}
 	-re ".*\r\n$mi_gdb_prompt$" { fail "return from callee4 now" }
 	timeout { fail "return from callee4 now (timeout)"
 	}



More information about the Gdb-patches mailing list