From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10223 invoked by alias); 27 Mar 2013 20:44:38 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 9744 invoked by uid 89); 27 Mar 2013 20:44:30 -0000 X-Spam-SWARE-Status: No, score=-8.4 required=5.0 tests=AWL,BAYES_00,KHOP_RCVD_UNTRUST,KHOP_THREADED,RCVD_IN_DNSWL_HI,RCVD_IN_HOSTKARMA_W,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.1 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Wed, 27 Mar 2013 20:44:28 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r2RKiQFf007592 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 27 Mar 2013 16:44:26 -0400 Received: from brno.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r2RKiPGK010611 for ; Wed, 27 Mar 2013 16:44:26 -0400 Subject: [PATCH 4/4] Fix PR gdb/15294: list with unlimited listsize broken To: gdb-patches@sourceware.org From: Pedro Alves Date: Thu, 28 Mar 2013 09:12:00 -0000 Message-ID: <20130327204425.24420.85758.stgit@brno.lan> In-Reply-To: <20130327204357.24420.94722.stgit@brno.lan> References: <20130327204357.24420.94722.stgit@brno.lan> User-Agent: StGit/0.16 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-SW-Source: 2013-03/txt/msg01046.txt.bz2 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 previous patches made it so that the list line 1 with unlimited listsize actually passes now, so we can remove the xfail. The list.exp test was originally written years and years ago expecting 0 mean "no output", but GDB never actually worked that way. This adjusts the test to the old behavior, so that the test actually passes, and the xfail is removed. gdb/ 2013-03-27 Pedro Alves PR gdb/15294 * source.c (_initialize_source): Change back "set listsize" to an integer command. gdb/testsuite/ 2013-03-27 Pedro Alves * 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/source.c | 8 ++++---- gdb/testsuite/gdb.base/list.exp | 10 ++-------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/gdb/source.c b/gdb/source.c index 2d9410e..03c5253 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -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, _("\ diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp index 915b255..96ca198 100644 --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -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" }