From: Andrew Burgess <aburgess@redhat.com>
To: Simon Marchi <simark@simark.ca>, gdb-patches@sourceware.org
Cc: Eli Zaretskii <eliz@gnu.org>
Subject: Re: [PATCH 2/2] gdb: use current executable for 'remote exec-file' in some cases
Date: Tue, 11 Nov 2025 15:59:58 +0000 [thread overview]
Message-ID: <87tsz0zhj5.fsf@redhat.com> (raw)
In-Reply-To: <45969c8b-2637-4ec5-875e-2241fdb3a2b9@simark.ca>
Simon Marchi <simark@simark.ca> writes:
> On 10/11/25 9:34 AM, Andrew Burgess wrote:
>> This commit allows GDB to make use of the file set with the 'file'
>> command when starting a new inferior on an extended-remote target.
>> There are however some restrictions.
>>
>> If the user has used 'set remote exec-file', then this setting is
>> always used in preference to the file set with the 'file' command.
>>
>> Similarly, if the qExecAndArgs packet has succeeded, and GDB knows
>> that the remote target has an executable set, then this will be used
>> in preference to the file set with the 'file' command; this preserves
>> GDB's existing behaviour. In effect, when GDB connects to the remote
>> target, the remote sets the 'remote exec-file' and this prevents GDB
>> from using the 'file' filename.
>>
>> And, GDB can only use the file set with the 'file' command if it
>> believes that both GDB and the remote target will both be able to
>> access this file. This means that one of these is true:
>>
>> + the the remote_target::filesystem_is_local function returns
>> true (see the implementation of that function for details of when
>> this can happen). This means GDB and the remote target can see
>> the same file system, GDB can just use the current executable's
>> filename as is, or
>>
>> + the user has set the 'file' to something with a 'target:' prefix,
>> e.g. 'file target:/path/to/exec'. In this last case, GDB will use
>> the exec filename without the 'target:' prefix, this filename is,
>> by definition, something the remote target can see, or
>>
>> + the sysroot has been updated by the user and no longer contains a
>> 'target:' prefix. In this case, if the 'file' filename is within
>> the sysroot, then it is assumed the remote will also be able to
>> see a file with the same filename. For example, if the sysroot is
>> '/aa/', and the current executable is '/aa/bb/cc', then GDB will
>> tell the remote to run '/bb/cc'. One common case here is when the
>> sysroot is set to the empty string, which is usually done when GDB
>> and the remote target can see the same filesystem, in this case
>> GDB will use the current executable's filename unmodified.
>>
>> If one of these conditions is met, then GDB will use the current
>> executable's filename (with possible modifications as mentioned
>> above), when starting a new extended-remote inferior, in all other
>> cases, GDB will use the file name set with 'set remote exec-file'.
>>
>> This change could be useful any time a user is running a remote target
>> on the same machine as GDB, but I am specifically thinking of the case
>> where GDB is using a tool other than gdbserver, e.g. valgrind, as this
>> saves one additional step that a user must remember. The current
>> steps to start valgrind with GDB, as given on the valgrind
>> website (https://valgrind.org/docs/manual/manual-core-adv.html) are:
>>
>> $ gdb prog
>> (gdb) set remote exec-file prog
>> (gdb) set sysroot /
>> (gdb) target extended-remote | vgdb --multi --vargs -q
>> (gdb) start
>>
>> With this GDB work, and once support for the qExecAndArgs packet is
>> added to valgrind, then the 'set remote exec-file' line can be dropped
>> from those instructions.
>>
>> This commit also extends the 'show remote exec-file' command so that
>> GDB will display the automatic value that it plans to use. Here's an
>> example of the new output:
>>
>> $ gdb -q /tmp/hello
>> Reading symbols from /tmp/hello...
>> (gdb) set sysroot
>> (gdb) target extended-remote | ./gdbserver/gdbserver --multi --once -
>> Remote debugging using | ./gdbserver/gdbserver --multi --once -
>> Remote debugging using stdio
>> (gdb) show remote exec-file
>> The remote exec-file is unset, using automatic value "/tmp/hello".
>>
>> The last line shows the new output.
>>
>> Reviewed-By: Eli Zaretskii <eliz@gnu.org>
>
> I am investigating a regression when running gdb.gdb/selftest.exp with
> the native-extended-gdbserver board, caused by my commit d6340aa42e25
> ("gdb/testsuite: use libtool to launch selftests"). A side-effect of my
> change is that the test no longer does a "set remote exec-file", which
> is currently required in order to run a new process with an
> extended-remote board. I started writing a patch to add a manual "set
> remote exec-file", but then remembered about this patch. I gave it a
> try, and indeed it fixes those regressions. I would therefore be very
> happy to see this patch merged (I had forgotten about it before just now
> to be honest).
>
> I'm fine with what you have see below for small comments.
>
> Approved-By: Simon Marchi <simon.marchi@efficios.com>
>
I addressed the nits you pointed out, and pushed this patch.
Thanks,
Andrew
next prev parent reply other threads:[~2025-11-11 16:00 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-06 15:07 [PATCH] " Andrew Burgess
2025-10-06 15:43 ` Eli Zaretskii
2025-10-09 16:17 ` Simon Marchi
2025-10-11 13:34 ` [PATCH 0/2] Auto setting of 'remote exec-file' Andrew Burgess
2025-10-11 13:34 ` [PATCH 1/2] gdb/remote: replace use of std::pair with an actual struct Andrew Burgess
2025-10-11 13:46 ` Simon Marchi
2025-10-12 8:57 ` Andrew Burgess
2025-10-12 12:05 ` Simon Marchi
2025-10-12 13:13 ` Andrew Burgess
2025-11-19 10:32 ` Andrew Burgess
2025-10-11 13:34 ` [PATCH 2/2] gdb: use current executable for 'remote exec-file' in some cases Andrew Burgess
2025-10-11 14:45 ` Eli Zaretskii
2025-11-07 20:46 ` Simon Marchi
2025-11-11 15:59 ` Andrew Burgess [this message]
2026-01-14 1:17 ` Simon Marchi
2026-01-14 16:48 ` Andrew Burgess
2026-01-14 20:01 ` [PATCH] gdb/testsuite: fix failure in gdb.server/fetch-exec-and-args.exp Andrew Burgess
2026-01-15 21:13 ` Simon Marchi
2026-01-22 15:31 ` Andrew Burgess
2025-11-19 10:32 ` [PATCH 2/2] gdb: use current executable for 'remote exec-file' in some cases Andrew Burgess
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tsz0zhj5.fsf@redhat.com \
--to=aburgess@redhat.com \
--cc=eliz@gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=simark@simark.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox