summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2008-03-21 15:33:11 +0000
committerDaniel Jacobowitz <drow@false.org>2008-03-21 15:33:11 +0000
commit6214f497d3f1800171978839ef029f712369e2f9 (patch)
treeaf177c71d56a8b1a91799e3891ca8e7719631ce0
parent6309237547d076d68daaf8f4d0cd55c5964e1411 (diff)
downloadbinutils-gdb-6214f497d3f1800171978839ef029f712369e2f9.tar.gz
2008-03-21 Chris Demetriou <cgd@google.com>
* symtab.c (rbreak_command): Quote symbol name before passing it to break_command. * gdb.base/break.exp (rbreak junk): New test for rbreak "Junk at end of arguments" issue.
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/symtab.c8
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.base/break.exp42
4 files changed, 59 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b56a87e0268..ef832624645 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-21 Chris Demetriou <cgd@google.com>
+
+ * symtab.c (rbreak_command): Quote symbol name before passing
+ it to break_command.
+
2008-03-21 Daniel Jacobowitz <dan@codesourcery.com>
* eval.c (evaluate_subexp_for_address): Clarify error message.
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 40e31dc45da..ddd2310165d 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -3345,7 +3345,13 @@ rbreak_command (char *regexp, int from_tty)
}
else
{
- break_command (SYMBOL_LINKAGE_NAME (p->msymbol), from_tty);
+ char *string = alloca (strlen (SYMBOL_LINKAGE_NAME (p->msymbol))
+ + 3);
+ strcpy (string, "'");
+ strcat (string, SYMBOL_LINKAGE_NAME (p->msymbol));
+ strcat (string, "'");
+
+ break_command (string, from_tty);
printf_filtered ("<function, no debug info> %s;\n",
SYMBOL_PRINT_NAME (p->msymbol));
}
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0438144fb87..d72ef2b2d84 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-03-21 Chris Demetriou <cgd@google.com>
+
+ * gdb.base/break.exp (rbreak junk): New test for rbreak
+ "Junk at end of arguments" issue.
+
2008-03-21 Daniel Jacobowitz <dan@codesourcery.com>
* gdb.base/printcmds.exp (test_print_array_constants): Do not expect
diff --git a/gdb/testsuite/gdb.base/break.exp b/gdb/testsuite/gdb.base/break.exp
index 0ec70c92dce..2e042ddd1b2 100644
--- a/gdb/testsuite/gdb.base/break.exp
+++ b/gdb/testsuite/gdb.base/break.exp
@@ -944,6 +944,48 @@ gdb_expect {
}
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+if [target_info exists gdb_stub] {
+ gdb_step_for_stub;
+}
+
+#
+# test that 'rbreak' on a symbol that may be from a shared library doesn't
+# cause a "Junk at end of arguments." error.
+#
+# On x86 GNU/Linux, this test will choke on e.g. __libc_start_main@plt.
+#
+# Note that this test won't necessarily choke on all targets even if
+# all the rbreak issue is present. rbreak needs to match and set a
+# breakpoint on a symbol causes 'break' to choke.
+#
+
+gdb_test "set breakpoint pending on" "" "rbreak junk pending setup"
+
+# We expect at least one breakpoint to be set when we "rbreak main".
+gdb_test "rbreak main" \
+ ".*Breakpoint.*at.* file .*$srcfile, line.*" \
+ "rbreak junk set breakpoint"
+
+# Run to a breakpoint. Fail if we see "Junk at end of arguments".
+gdb_run_cmd
+gdb_expect {
+ -re "Junk at end of arguments" {
+ fail "rbreak junk"
+ }
+ -re ".*Breakpoint \[0-9\]+,.*$gdb_prompt $" {
+ pass "rbreak junk"
+ }
+ timeout {
+ fail "rbreak junk (timeout)"
+ }
+}
+
+
# Reset the default arguments for VxWorks
if [istarget "*-*-vxworks*"] {
set timeout 10