]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
gdb/gdbserver: add a '--no-escape-args' command line option
authorMichael Weghorn <m.weghorn@posteo.de>
Fri, 22 Oct 2021 07:19:29 +0000 (07:19 +0000)
committerAndrew Burgess <aburgess@redhat.com>
Fri, 12 Sep 2025 08:50:03 +0000 (09:50 +0100)
commite5e76451fa82e0bc00599af96382b361c3d6ac32
tree1d57c5aa038fffcc328412965ed952de732e5e3b
parent13793e39831c1aaf8b430e5d6002bd3aebf25fc3
gdb/gdbserver: add a '--no-escape-args' command line option

This introduces a new '--no-escape-args' option for gdb and gdbserver.

I (Andrew Burgess) have based this patch from work done in this
series:

  https://inbox.sourceware.org/gdb-patches/20211022071933.3478427-1-m.weghorn@posteo.de/

I have changed things slightly from the original series.  I think this
work is close enough that I've left the original author (Michael) in
place and added myself as co-author.  Any bugs introduced by my
modifications to the original patch should be considered mine.  I've
also added documentation and tests which were missing from the
originally proposed patch.

When the startup-with-shell option is enabled, arguments passed
directly as 'gdb --args <args>' or 'gdbserver <args>', are by default
escaped so that they are passed to the inferior as passed on the
command line, no globbing or variable substitution happens within the
shell GDB uses to start the inferior.

For gdbserver, this is the case since commit:

  commit bea571ebd78ee29cb94adf648fbcda1e109e1be6
  Date:   Mon May 25 11:39:43 2020 -0400

      Use construct_inferior_arguments which handles special chars

Only arguments set via 'set args <args>', 'run <args>', or through the
Python API are not escaped in standard upstream GDB right now.

For the 'gdb --args' case, directly setting unescaped args on gdb
invocation is possible e.g. by using the "--eval-command='set args
<args>'", while this possibility does not exist for gdbserver.

This commit adds a new '--no-escape-args' command line option for GDB
and gdbserver.  This option is used with GDB as a replacement for the
current '--args' option, and for gdbserver this new option is a flag
which changes how gdbserver handles inferior arguments on the command
line.  When '--no-escape-args' is used inferior arguments passed on
the command line will not have escaping added by GDB or gdbserver.

For gdbserver, using this new option allows having the behaviour from
before commit bea571ebd78ee29cb94adf648fbcda1e109e1be6, while keeping
the default behaviour unified between GDB and GDBserver.

For GDB the --no-escape-args option can be used as a replacement for
--args, like this:

  shell> gdb --no-escape-args my-program arg1 arg2 arg3

While for gdbserver, the --no-escape-args option is a flag, which can
be used like:

  shell> gdbserver --no-escape-args --once localhost:54321 \
             my-program arg1 arg2 arg3

Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28392

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Tested-By: Guinevere Larsen <guinevere@redhat.com>
gdb/NEWS
gdb/doc/gdb.texinfo
gdb/main.c
gdb/testsuite/gdb.base/args.exp
gdb/testsuite/gdb.server/inferior-args.c [new file with mode: 0644]
gdb/testsuite/gdb.server/inferior-args.exp [new file with mode: 0644]
gdbserver/server.cc