This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] break.exp: bt & finish from dummy call
- To: gdb-patches at sources dot redhat dot com
- Subject: [RFA] break.exp: bt & finish from dummy call
- From: Nick Duffek <nsd at redhat dot com>
- Date: Fri, 17 Nov 2000 01:00:14 -0500
This patch fixes a break.exp failure when testing remote targets. Without
the patch, break.exp does the following on non-HP-UX systems:
break marker2
print marker2 (99) # GDB stops in the dummy call to marker2
runto_main
On remote targets, runto_main jumps to the program's entry point, which
contains the dummy breakpoint if CALL_DUMMY_LOCATION == AT_ENTRY_POINT.
GDB therefore stops at that breakpoint instead of in main as expected by
runto_main, with test failures as a result.
On HP-UX systems, the same section of break.exp does this:
break marker2
print marker2 (99) # GDB stops in the dummy call to marker2
bt
finish
runto_main
The finish command runs GDB to the dummy breakpoint, which then gets
deleted, allowing the subsequent runto_main to work as expected.
I removed the HP-UX conditional and made the regular expressions a bit
more general. With these changes, the script expects the bt output to
look something like this:
#0 marker2 (a=99) at ../../../src/gdb/testsuite/gdb.base/break.c:49
#1 <function called from gdb>
or this:
#0 marker2 (a=99) at ../../../src/gdb/testsuite/gdb.base/break.c:49
#1 ... _sr4export ...
_sr4export is part of the original code, so I assume it's needed on HP-UX.
I haven't been able to test that assumption, though. Does anyone know
whether it's true?
Also, I assume that GDB always should display "<function called from gdb>"
when backtracing through a dummy function. If that's not true, then this
patch will cause failures on some systems.
There are no regressions on i686-pc-linux-gnu or sparc-sun-solaris2.5.1.
Okay to apply?
Nick
[patch follows]
Index: gdb/testsuite/gdb.base/break.exp
===================================================================
diff -up gdb/testsuite/gdb.base/break.exp gdb/testsuite/gdb.base/break.exp
--- gdb/testsuite/gdb.base/break.exp Thu Nov 16 19:28:03 2000
+++ gdb/testsuite/gdb.base/break.exp Thu Nov 16 19:27:49 2000
@@ -577,31 +577,35 @@ gdb_expect {
# As long as we're stopped (breakpointed) in a called function,
# verify that we can successfully backtrace & such from here.
#
-
-if [istarget "hppa*-*-hpux*"] then {
- send_gdb "bt\n"
- gdb_expect {
- -re "#0\[ \t\]*$hex in marker2.*:4\[49\]\r\n#1.*_sr4export.*$gdb_prompt $"\
- {pass "backtrace while in called function"}
- -re "#0\[ \t\]*$hex in marker2.*:4\[49\]\r\n#1.*function called from gdb.*$gdb_prompt $"\
-
+# In this and the following test, the _sr4export check apparently is needed
+# for hppa*-*-hpux.
+#
+send_gdb "bt\n"
+gdb_expect {
+ -re "#0\[ \t\]*$hex in marker2.*:4\[49\]\r\n#1.*_sr4export.*$gdb_prompt $"\
{pass "backtrace while in called function"}
+ -re "#0\[ \t\]*($hex in )?marker2.*:4\[49\]\r\n#1.*function called from gdb.*$gdb_prompt $"\
+ {pass "backtrace while in called function"}
-re "$gdb_prompt $"\
{fail "backtrace while in called function"}
timeout {fail "(timeout) backtrace while in called function"}
- }
- send_gdb "finish\n"
- gdb_expect {
- -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.* in _sr4export.*$gdb_prompt $"\
+}
+
+# Return from the called function. For remote targets, it's important to do
+# this before runto_main, which otherwise may silently stop on the dummy
+# breakpoint inserted by GDB at the program's entry point.
+#
+send_gdb "finish\n"
+gdb_expect {
+ -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.* in _sr4export.*$gdb_prompt $"\
{pass "finish from called function"}
- -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.*function called from gdb.*$gdb_prompt $"\
+ -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.*function called from gdb.*$gdb_prompt $"\
{pass "finish from called function"}
- -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.*Value returned.*$gdb_prompt $"\
+ -re "Run till exit from .*marker2.* at .*4\[49\]\r\n.*Value returned.*$gdb_prompt $"\
{pass "finish from called function"}
-re "$gdb_prompt $"\
{fail "finish from called function"}
timeout {fail "(timeout) finish from called function"}
- }
}
# Verify that GDB responds gracefully to a "finish" command with