From e26d4300144d42a315adbc715b5765335815c9c2 Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Fri, 21 Mar 2008 15:33:11 +0000 Subject: [PATCH] 2008-03-21 Chris Demetriou * 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. --- gdb/ChangeLog | 5 +++++ gdb/symtab.c | 8 +++++++- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/break.exp | 42 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b56a87e026..ef83262464 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-03-21 Chris Demetriou + + * symtab.c (rbreak_command): Quote symbol name before passing + it to break_command. + 2008-03-21 Daniel Jacobowitz * eval.c (evaluate_subexp_for_address): Clarify error message. diff --git a/gdb/symtab.c b/gdb/symtab.c index 40e31dc45d..ddd2310165 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 (" %s;\n", SYMBOL_PRINT_NAME (p->msymbol)); } diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 0438144fb8..d72ef2b2d8 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-03-21 Chris Demetriou + + * gdb.base/break.exp (rbreak junk): New test for rbreak + "Junk at end of arguments" issue. + 2008-03-21 Daniel Jacobowitz * 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 0ec70c92dc..2e042ddd1b 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 -- 2.11.0