From: Daniel Jacobowitz Date: Tue, 16 Feb 2010 20:51:51 +0000 (+0000) Subject: gdb/ X-Git-Tag: gdb_7_1-2010-02-18-branchpoint~34 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=791dfb6488c972e2352ff5c3b4aa5659ce476136;p=platform%2Fupstream%2Fbinutils.git gdb/ * linespec.c (decode_line_1): Handle FILE:FUNCTION even if FUNCTION contains parentheses. Improve removal of a trailing single quote. gdb/testsuite/ * gdb.base/list.exp (test_list_filename_and_function): Add test with single quotes. * gdb.cp/overload.cc (intToChar): Rewrite onto one line for easy matching. * gdb.cp/overload.exp: Add tests with filename, function, and quotes. Add KFAIL'd tests for PR gdb/11289. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 564983b..d7d71fd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2010-02-16 Daniel Jacobowitz + * linespec.c (decode_line_1): Handle FILE:FUNCTION even if + FUNCTION contains parentheses. Improve removal of a trailing + single quote. + +2010-02-16 Daniel Jacobowitz + * gcore.c (do_bfd_delete_cleanup): New function. (gcore_command): Use it. Discard the cleanup after success. (gcore_copy_callback): Delete dead code. diff --git a/gdb/linespec.c b/gdb/linespec.c index 74902b6..60d7611 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -698,6 +698,8 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, int is_quote_enclosed; int is_objc_method = 0; char *saved_arg = *argptr; + /* If IS_QUOTED, the end of the quoted bit. */ + char *end_quote = NULL; if (not_found_ptr) *not_found_ptr = 0; @@ -717,6 +719,8 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, */ set_flags (*argptr, &is_quoted, &paren_pointer); + if (is_quoted) + end_quote = skip_quoted (*argptr); /* Check to see if it's a multipart linespec (with colons or periods). */ @@ -747,13 +751,13 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, return values; } + if (is_quoted) + *argptr = *argptr + 1; + /* Does it look like there actually were two parts? */ - if ((p[0] == ':' || p[0] == '.') && paren_pointer == NULL) + if (p[0] == ':' || p[0] == '.') { - if (is_quoted) - *argptr = *argptr + 1; - /* Is it a C++ or Java compound data structure? The check on p[1] == ':' is capturing the case of "::", since p[0]==':' was checked above. @@ -762,14 +766,30 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, can return now. */ if (p[0] == '.' || p[1] == ':') - return decode_compound (argptr, funfirstline, canonical, - saved_arg, p, not_found_ptr); + { + if (paren_pointer == NULL) + return decode_compound (argptr, funfirstline, canonical, + saved_arg, p, not_found_ptr); + /* Otherwise, fall through to decode_variable below. */ + } + else + { + /* No, the first part is a filename; set file_symtab to be that file's + symtab. Also, move argptr past the filename. */ - /* No, the first part is a filename; set file_symtab to be that file's - symtab. Also, move argptr past the filename. */ + file_symtab = symtab_from_filename (argptr, p, is_quote_enclosed, + not_found_ptr); - file_symtab = symtab_from_filename (argptr, p, is_quote_enclosed, - not_found_ptr); + /* Check for single quotes on the non-filename part. */ + if (!is_quoted) + { + is_quoted = (**argptr + && strchr (get_gdb_completer_quote_characters (), + **argptr) != NULL); + if (is_quoted) + end_quote = skip_quoted (*argptr); + } + } } #if 0 /* No one really seems to know why this was added. It certainly @@ -829,7 +849,7 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1)); else if (is_quoted) { - p = skip_quoted (*argptr); + p = end_quote; if (p[-1] != '\'') error (_("Unmatched single quote.")); } @@ -862,6 +882,8 @@ decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab, copy[p - *argptr - 1] = '\0'; copy++; } + else if (is_quoted) + copy[p - *argptr - 1] = '\0'; while (*p == ' ' || *p == '\t') p++; *argptr = p; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 3f10965..2d857f9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,14 @@ 2010-02-16 Daniel Jacobowitz + * gdb.base/list.exp (test_list_filename_and_function): Add test + with single quotes. + * gdb.cp/overload.cc (intToChar): Rewrite onto one line for easy + matching. + * gdb.cp/overload.exp: Add tests with filename, function, and quotes. + Add KFAIL'd tests for PR gdb/11289. + +2010-02-16 Daniel Jacobowitz + * gdb.cp/cpcompletion.exp: Specify source file name explicitly. 2010-02-16 Daniel Jacobowitz diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp index ba3e637..11804c8 100644 --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -473,6 +473,9 @@ proc test_list_filename_and_function {} { pass "list filename:function ($testcnt tests)" + # Test with quoting. + gdb_test "list 'list0.c:main'" "int main.*" + # Test some invalid specs # The following test takes the FIXME result on most systems using # DWARF. It fails to notice that main() is not in the file requested. diff --git a/gdb/testsuite/gdb.cp/overload.cc b/gdb/testsuite/gdb.cp/overload.cc index e643d4c..78fae14 100644 --- a/gdb/testsuite/gdb.cp/overload.cc +++ b/gdb/testsuite/gdb.cp/overload.cc @@ -56,10 +56,7 @@ namespace N { int nsoverload (int x, int y) { return x + y; } }; -int intToChar (char c) -{ - return 297; -} +int intToChar (char c) { return 297; } void marker1() {} diff --git a/gdb/testsuite/gdb.cp/overload.exp b/gdb/testsuite/gdb.cp/overload.exp index 317cbc5..101be4a 100644 --- a/gdb/testsuite/gdb.cp/overload.exp +++ b/gdb/testsuite/gdb.cp/overload.exp @@ -293,6 +293,21 @@ gdb_test "list \"foo::overloadfnarg(int, int (*)(int))\"" \ "int foo::overloadfnarg.*\\(int arg, int \\(\\*foo\\) \\(int\\)\\).*" \ "list overloaded function with function ptr args - quotes around argument" +# Test list with filename. + +gdb_test "list ${srcfile}:intToChar" "int intToChar.*" +gdb_test "list ${srcfile}:intToChar(char)" "int intToChar.*" +gdb_test "list ${srcfile}:'intToChar(char)'" "int intToChar.*" +gdb_test "list '${srcfile}:intToChar(char)'" "int intToChar.*" + +# And with filename and namespace... which does not work. + +setup_kfail *-*-* gdb/11289 +gdb_test "list ${srcfile}:foo::overloadfnarg(int)" "int foo::overloadfnarg" + +setup_kfail *-*-* gdb/11289 +gdb_test "list ${srcfile}:'foo::overloadfnarg(int)'" "int foo::overloadfnarg" + # Now some tests to see how overloading and namespaces interact. gdb_test "print overloadNamespace(1)" ".\[0-9\]* = 1"