]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix PR gdb/15294: list with unlimited listsize broken
authorPedro Alves <palves@redhat.com>
Thu, 28 Mar 2013 11:50:00 +0000 (11:50 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 28 Mar 2013 11:50:00 +0000 (11:50 +0000)
Currently, "set listsize -1" is supposed to mean "unlimited" source
lines, but, alas, it doesn't actually work:

 (gdb) set listsize -1
 (gdb) show listsize
 Number of source lines gdb will list by default is unlimited.
 (gdb) list 1
 (gdb) list 1
 (gdb) list 1
 (gdb) set listsize 10
 (gdb) list 1
 1       /* Main function for CLI gdb.
 2          Copyright (C) 2002-2013 Free Software Foundation, Inc.
 3
 4          This file is part of GDB.
 5
 6          This program is free software; you can redistribute it and/or modify
 7          it under the terms of the GNU General Public License as published by
 8          the Free Software Foundation; either version 3 of the License, or
 9          (at your option) any later version.
 10

Before this patch:

     http://sourceware.org/ml/gdb-patches/2012-08/msg00367.html

was applied, the "set listsize" command was a var_integer command, and
"unlimited" was set with 0.  Internally, var_integer maps 0 to INT_MAX

   case var_integer:
      {
      ...
if (val == 0 && c->var_type == var_integer)
  val = INT_MAX;

The change in that patch to zuinteger_unlimited command, meant that -1
is left as -1 in the command's control variable (lines_to_list), and
the code in source.c isn't expecting that -- it only expects positive
numbers.

I previously suggested fixing the code and keeping the new behavior,
but I found that "set listsize 0" is currently used in the wild, and
we do have a bunch of other commands where "0" means unlimited, so I'm
thinking that changing this command alone in isolation is not a good
idea.

So I now strongly prefer reverting back the behavior in 7.6 to the
same behavior the command has had since 2006 (0==unlimited, -1=error).
Before that, set listsize -1 would be accepted as unlimited as well.

After 7.6 is out, in mainline, we can get back to reconsidering
changing this command's behavior, if there's a real need for being
able to suppress output.  For now, let's play it safe.

The "list line 1 with unlimited listsize" test in list.exp was
originally written years and years ago expecting 0 to mean "no
output", but GDB never actually worked that way, even when the tests
were written, so the tests had been xfailed then.  This patch now
adjusts the test to the new behavior, so that the test actually
passes, and the xfail is removed.

gdb/
2013-03-28  Pedro Alves  <palves@redhat.com>

PR gdb/15294

* source.c (_initialize_source): Change back "set listsize" to an
integer command.

gdb/testsuite/
2013-03-28  Pedro Alves  <palves@redhat.com>

PR gdb/15294

* gdb.base/list.exp (set_listsize): Adjust to accept $arg == 0 to
mean unlimited instead of $arg < 0.
(test_listsize): Remove "listsize of 0 suppresses output" test.
Test that "set listsize 0" ends up with an unlimited listsize.

gdb/doc/
2013-03-28  Pedro Alves  <palves@redhat.com>

PR gdb/15294

* gdb.texinfo (List) <set listsize>: Adjust to document that
listsize 0 means no limit, and remove mention of -1.

gdb/ChangeLog
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/source.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/list.exp

index e6d928f86c358e4babf36545dd75ba5dd5a53ce3..dda8053aa04fb88a04a3daaa27fbc88e3d65c7bb 100644 (file)
@@ -1,3 +1,10 @@
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+       PR gdb/15294
+
+       * source.c (_initialize_source): Change back "set listsize" to an
+       integer command.
+
 2013-03-27  Gareth McMullin  <gareth@blacksphere.co.nz>
 
        PR gdb/15275
index 677e93bc45254977c48080342163c9d7cdb38782..fb063b9dc057e44574f1af0e737cb711ef45371a 100644 (file)
@@ -1,3 +1,10 @@
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+       PR gdb/15294
+
+       * gdb.texinfo (List) <set listsize>: Adjust to document that
+       listsize 0 means no limit, and remove mention of -1.
+
 2013-03-11  Eli Zaretskii  <eliz@gnu.org>
 
        * gdb.texinfo (General Query Packets): Don't use colon in index
index 9ee2d2f32a596e6a6854af0172590d3a73006a13..e4b401404396f167b15ad0483c1535d930044d7e 100644 (file)
@@ -6916,8 +6916,7 @@ the @code{list} command.  You can change this using @code{set listsize}:
 @item set listsize @var{count}
 Make the @code{list} command display @var{count} source lines (unless
 the @code{list} argument explicitly specifies some other number).
-Setting @var{count} to -1 means there's no limit and 0 means suppress
-display of source lines.
+Setting @var{count} to 0 means there's no limit.
 
 @kindex show listsize
 @item show listsize
index 2d9410ecc37ed9cfbcf2823901d40623dd29ee53..03c5253ba13a5f4c40a18d1b19e45a7ae34524c2 100644 (file)
@@ -2044,12 +2044,12 @@ The matching line number is also stored as the value of \"$_\"."));
       add_com_alias ("?", "reverse-search", class_files, 0);
     }
 
-  add_setshow_zuinteger_unlimited_cmd ("listsize", class_support,
-                                      &lines_to_list, _("\
+  add_setshow_integer_cmd ("listsize", class_support, &lines_to_list, _("\
 Set number of source lines gdb will list by default."), _("\
 Show number of source lines gdb will list by default."), NULL,
-                                      NULL, show_lines_to_list,
-                                      &setlist, &showlist);
+                           NULL,
+                           show_lines_to_list,
+                           &setlist, &showlist);
 
   add_cmd ("substitute-path", class_files, set_substitute_path_command,
            _("\
index fd7fd831d75c5e47a5e83bb505868dfef3da2ee0..e05a8457ce3e91c20145e0f5ac4760d1549630ac 100644 (file)
@@ -1,3 +1,12 @@
+2013-03-28  Pedro Alves  <palves@redhat.com>
+
+       PR gdb/15294
+
+       * gdb.base/list.exp (set_listsize): Adjust to accept $arg == 0 to
+       mean unlimited instead of $arg < 0.
+       (test_listsize): Remove "listsize of 0 suppresses output" test.
+       Test that "set listsize 0" ends up with an unlimited listsize.
+
 2013-03-28  Pedro Alves  <palves@redhat.com>
 
        * gdb.base/list.exp (last_line): New global.
index f305d6f0b75de6bea71c35dfc009846640b0f0fe..091b48e14dd38e445ffb4e69ef80c5deed698994 100644 (file)
@@ -67,7 +67,7 @@ proc set_listsize { arg } {
     if [gdb_test_no_output "set listsize $arg" "setting listsize to $arg #$set_listsize_count"] {
        return 0;
     }
-    if { $arg < 0 } {
+    if { $arg == 0 } {
        set arg "unlimited";
     }
 
@@ -136,15 +136,9 @@ proc test_listsize {} {
        gdb_test "list 10" "1\[ \t\]+#include \"list0.h\".*\r\n${last_line_re}" "list line 10 with listsize 100"
     }
 
-    # Try listsize of 0 which suppresses printing.
+    # Try listsize of 0 which is special, and means unlimited.
 
     set_listsize 0
-    gdb_test "list 1" "" "listsize of 0 suppresses output"
-
-    # Try listsize of -1 which is special, and means unlimited.
-
-    set_listsize -1
-    setup_xfail "*-*-*"
     gdb_test "list 1" "1\[ \t\]+#include .*\r\n${last_line_re}" "list line 1 with unlimited listsize"
 }