gdb: 'list' command, tweak handling of +/- arguments.
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 16 Nov 2015 09:33:32 +0000 (09:33 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Fri, 11 Dec 2015 23:05:35 +0000 (23:05 +0000)
There is an inconsistency with the handling of the special +/- arguments
to the list command.

For the very first time that list is used (after the inferior has
changed locations) then only the first character of the argument string
is checked, so 'list +BLAH' will operate as 'list +' and 'list -----FOO'
will operate as 'list -'.  This compares to each subsequent use of list,
where the whole argument string is checked, so 'list +BLAH' will try to
list lines of code around the function '+BLAH'.

This commit unifies the behaviour so that the whole argument string is
checked, in order to list the next 10, or previous 10 lines from a file
only 'list +' and 'list -' are now valid.

gdb/ChangeLog:

* cli/cli-cmds.c (list_command): Check that the argument string is
a single character, either '+' or '-'.

gdb/testsuite/ChangeLog:

* gdb.base/list.exp (test_list_invalid_args): New function,
defined, and called.

gdb/ChangeLog
gdb/cli/cli-cmds.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/list.exp

index 17db0c3c846a615dd5943aefe2f4af26caa99735..970bea2cd5f7b312ad7404dc5dad741b345262be 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * cli/cli-cmds.c (list_command): Check that the argument string is
+       a single character, either '+' or '-'.
+
 2015-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * cli/cli-cmds.c (list_command): Move all handling of +/-
index 872c844d8783e0693295d7039d713b8466084dca..4557bfd66acde25e391b0f861c9c46d2369dfebe 100644 (file)
@@ -907,7 +907,7 @@ list_command (char *arg, int from_tty)
   cleanup = make_cleanup (null_cleanup, NULL);
 
   /* Pull in the current default source line if necessary.  */
-  if (arg == NULL || arg[0] == '+' || arg[0] == '-')
+  if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0'))
     {
       set_default_source_symtab_and_line ();
       cursal = get_current_source_symtab_and_line ();
@@ -933,13 +933,13 @@ list_command (char *arg, int from_tty)
        }
 
       /* "l" or "l +" lists next ten lines.  */
-      else if (arg == NULL || strcmp (arg, "+") == 0)
+      else if (arg == NULL || arg[0] == '+')
        print_source_lines (cursal.symtab, cursal.line,
                            cursal.line + get_lines_to_list (), 0);
 
       /* "l -" lists previous ten lines, the ones before the ten just
         listed.  */
-      else if (strcmp (arg, "-") == 0)
+      else if (arg[0] == '-')
        print_source_lines (cursal.symtab,
                            max (get_first_line_listed ()
                                 - get_lines_to_list (), 1),
index b1902e027241f0fc082889dbdf380862ac61e5ee..8c7af55d8ffcaacb90a230bceae77f37a0ea1066 100644 (file)
@@ -1,3 +1,8 @@
+2015-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * gdb.base/list.exp (test_list_invalid_args): New function,
+       defined, and called.
+
 2015-12-11  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * gdb.base/list.exp (test_list): Make test names unique.
index 84ae251bfe41fc215bea2cc081bab5786c367f24..cac3a626ad3eff87bbad51a97dc0500bdea4e1a9 100644 (file)
@@ -505,6 +505,24 @@ proc test_only_end {} {
     gdb_test "list ,5" "list ,5\r\n4\[ \t\]\[^\r\n\]*\r\n5\[ \t\]\[^\r\n\]*"
 }
 
+proc test_list_invalid_args {} {
+    global binfile
+
+    clean_restart ${binfile}
+    gdb_test "list -INVALID" \
+       "invalid explicit location argument, \"-INVALID\"" \
+       "first use of \"list -INVALID\""
+    gdb_test "list -INVALID" \
+       "invalid explicit location argument, \"-INVALID\"" \
+       "second use of \"list -INVALID\""
+
+    clean_restart ${binfile}
+    gdb_test "list +INVALID" "Function \"\\+INVALID\" not defined." \
+       "first use of \"list +INVALID\""
+    gdb_test "list +INVALID" "Function \"\\+INVALID\" not defined." \
+       "second use of \"list +INVALID\""
+}
+
 # Start with a fresh gdb.
 
 gdb_exit
@@ -527,6 +545,7 @@ if [ set_listsize 10 ] then {
     test_list_filename_and_function
     test_forward_search
     test_only_end
+    test_list_invalid_args
 }
 
 # Follows tests that require execution.