fix "server" command prefix handling (unexpected confirmation queries)

The "server" command prefix no longer turns confirmation queries off.
We can reproduce this with any program by tring to delete all breakpoints,
for instance:

    (gdb) break main
    Breakpoint 1 at 0x40049b: file /[...]/break-fun-addr1.c, line 21.
    (gdb) server delete breakpoints
    Delete all breakpoints? (y or n)

GDB should not be asking "Delete all breakpoints? (y or n)", but
instead just delete all breakpoints without asking for confirmation.

Looking at utils.c::defaulted_query gives a glimpse of how this feature
is expected to work:

  /* Automatically answer the default value if the user did not want
     prompts or the command was issued with the server prefix.  */
  if (!confirm || server_command)
    return def_value;

So, it relies on the server_command global to be set when the "server "
command prefix is used, which is no longer the case since the following
commit:

    commit b69d38afde
    Date:   Wed Mar 9 18:25:00 2016 +0000
    Subject: Command line input handling TLC

The patch was simplifying the handling for the command line, and
I believe there was just a small oversight of removing the setting
of the server_command global.

This patch restores that, and adds a testcase to make sure we test
that feature.

gdb/ChangeLog:

        * event-top.c (handle_line_of_input): Set server_command.

gdb/testsuite/ChangeLog:

        * gdb.base/server-del-break.c: New file.
        * gdb.base/server-del-break.exp: New file.

Tested on x86_64-linux, no regression.
This commit is contained in:
Joel Brobecker
2017-12-11 23:51:29 -05:00
parent 2c66e1634c
commit 9937536c23
5 changed files with 71 additions and 1 deletions

View File

@@ -1,3 +1,7 @@
2017-12-13 Joel Brobecker <brobecker@adacore.com>
* event-top.c (handle_line_of_input): Set server_command.
2017-12-12 Stafford Horne <shorne@gmail.com>
Stefan Wallentowitz <stefan@wallentowitz.de>
Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>

View File

@@ -669,7 +669,8 @@ handle_line_of_input (struct buffer *cmd_line_buffer,
}
#define SERVER_COMMAND_PREFIX "server "
if (startswith (cmd, SERVER_COMMAND_PREFIX))
server_command = startswith (cmd, SERVER_COMMAND_PREFIX);
if (server_command)
{
/* Note that we don't set `saved_command_line'. Between this
and the check in dont_repeat, this insures that repeating

View File

@@ -1,3 +1,8 @@
2017-12-13 Joel Brobecker <brobecker@adacore.com>
* gdb.base/server-del-break.c: New file.
* gdb.base/server-del-break.exp: New file.
2017-12-12 Stafford Horne <shorne@gmail.com>
* gdb.xml/tdesc-regs.exp: Add or1k support.

View File

@@ -0,0 +1,22 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2017 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
int
main (void)
{
return 0;
}

View File

@@ -0,0 +1,38 @@
# Copyright 2017 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# The purpose of this testcase is to verify that using the "server"
# command prefix turns queries (confirmation requests, for instance)
# off. In this particular testcase, we use the "delete breakpoints"
# command to demonstrate the behavior.
standard_testfile
if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
return -1
}
gdb_test "break main" \
"Breakpoint.*at.* file .*$srcfile, line .*"
# Try deleting all breakpoints, using the "server" command prefix.
# Prefixing the "delete breakpoints" with "server" should turn
# the confirmation request ("Delete all breakpoints? (y or n)")
# off, hence we expect the operation to be executed without output.
gdb_test_no_output "server delete breakpoints"
# Double-check that the all breakpoints were in fact deleted.
gdb_test "info break" \
"No breakpoints or watchpoints."