From: Simon Marchi <simark@simark.ca>
To: "Metzger, Markus T" <markus.t.metzger@intel.com>
Cc: "Aktemur, Tankut Baris" <tankut.baris.aktemur@intel.com>,
"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>,
Thiago Jung Bauermann <thiago.bauermann@linaro.org>
Subject: Re: [PATCH v3 09/44] gdb, gdbserver, ze: in-memory libraries
Date: Fri, 12 Dec 2025 14:34:34 -0500 [thread overview]
Message-ID: <1c2082a9-02df-41ca-84bb-abdf6546ab35@simark.ca> (raw)
In-Reply-To: <DM8PR11MB57493FB548E7BC72177C711EDEAEA@DM8PR11MB5749.namprd11.prod.outlook.com>
On 12/12/25 6:20 AM, Metzger, Markus T wrote:
> Hello Simon,
>
> Thanks for your review.
>
>>> diff --git a/gdb/features/library-list.dtd b/gdb/features/library-list.dtd
>>> index
>> 66945cbe97c13cfac5a4d00e9a752ccd8419252f..baa01485af950c58e9e242229
>> 365501c043e2fe1 100644
>>> --- a/gdb/features/library-list.dtd
>>> +++ b/gdb/features/library-list.dtd
>>> @@ -5,12 +5,16 @@
>>> notice and this notice are preserved. -->
>>>
>>> <!-- library-list: Root element with versioning -->
>>> -<!ELEMENT library-list (library)*>
>>> -<!ATTLIST library-list version CDATA #FIXED "1.0">
>>> +<!ELEMENT library-list (library | in-memory-library)*>
>>> +<!ATTLIST library-list version CDATA #FIXED "1.1">
>>
>> Hmm, looking at the history of this file and other .dtd files, we added
>> attributes and elements in the past without bumping this version number.
>> I guess it's not needed because we do our own checking of what the other
>> side supports via the qSupported packet and adjust the behavior based on
>> that. If not useful, I think we could keep 1.0 here for simplicity.
>
> This has been discussed with Thiago, as well in
> https://sourceware.org/pipermail/gdb-patches/2025-July/219545.html
>
> Thiago thought that the version bump was necessary, but suggested bumping
> it once for the entire series and not for each patch that makes changes to it.
>
> I'm fine, either way, but I wonder why we major.minor version if we then ignore it.
As far as I know, the GDB client doesn't even check these version
numbers, so I am not sure what bumping the version number would help
with. It won't prevent an older GDB from trying to read a newer
backwards-incompatible version.
I see two possibilities:
1. Adding a new attribute or element is considered
backwards-incompatible, in which case this version number should have
been bumped a few times already. But they haven't so... not sure
it's worth starting now.
2. Adding a new attribute or element is considered backwards-compatible
(an older client would just ignore them), so it's not necessary to
bump the version.
Would it work to just make gdbserver return these in-memory-library
elements, without even a qSupported flag? Would older GDBs just ignore
them?
>> new_solib.original_name = (std::string ("in-memory-")
>> + core_addr_to_string_nz (info-
>>> begin)
>> + "-"
>> + core_addr_to_string_nz (info-
>>> end));
>>
>> Just a note regarding ROCm. We have a particular syntax for in-memory
>> objects, like this:
>>
>> memory://57663#offset=0x55555562b040&size=62488
>>
>> It is documented here:
>>
>> https://llvm.org/docs/AMDGPUUsage.html#loaded-code-object-path-uniform-
>> resource-identifier-uri
>>
>> Currently, solib-rocm.c generates solibs with that kind of name for
>> in-memory objects. If we add proper support for solibs in memory, like
>> this patch does, we'll probably want to change solib-rocm to use that.
>> However, we'll want to make sure that "info shared" still shows the URIs
>> in the format shown above, at least for ROCm. We can cross this bridge
>> when we get there, but we'll need to find a way.
>
> The name that gets printed by 'info shared' is defined by the in-memory bfd.
>
> I don't know where this name is used. Looks like it is OK to not provide a name.
Ok, so "info shared" shows solib->name. For in-memory solibs, you don't
set solib->name? Does this mean that no name is shown in "info shared"
for these libraries?
As of today, even with this change, solib-rocm.c could set solib->name
to whatever it wants. If we ever want to support remote debugging with
ROCm, we would want to find a way to get our `memory://...` string as
the name.
Do you think that the remote side could provide a name inside an
<in-memory-library> element? A ROCm would put that `memory://...`
string. But in general, it would be a place to put a user-friendly name
that will end up in "info shared".
>
>>> + if (so.end <= so.begin)
>>> + error (_("Bad address range [%s; %s) for in-memory shared library."),
>>> + core_addr_to_string_nz (so.begin),
>>> + core_addr_to_string_nz (so.end));
>>
>> Sounds like we should never end up with an solib like this, I don't
>> think we need to handle this case here.
>
> We're subtracting so.begin from so.end. If you don't like the error, we
> should assert this. The only place that currently adds such solibs ignores
> those with a warning, so asserting it should be fine.
Yes I think an assert makes sense here (or in an eventual solib
constructor that takes these two addresses). Filtering for bad solib
data would always be done earlier than that.
>>> +/* Print a qXfer:libraries:read entry for DLL. */
>>> +
>>> +static std::string
>>> +print_qxfer_libraries_entry (dll_info &dll)
>>> +{
>>> + switch (dll.location)
>>> + {
>>> + case dll_info::in_memory:
>>> + if (get_client_state ().in_memory_library_supported)
>>> + return string_printf
>>> + (" <in-memory-library begin=\"0x%s\" end=\"0x%s\">"
>>> + "<segment address=\"0x%s\"/></in-memory-library>\n",
>>> + paddress (dll.begin), paddress (dll.end),
>>> + paddress (dll.base_addr));
>>> +
>>> + /* GDB does not support in-memory-library. Fall back to storing it in a
>>> + temporary file and report that file to GDB. */
>>
>> Curious, do you actually need this fallback? If not, could GDBserver
>> just not report these in-memory libraries if GDB is too old? If we can
>> avoid the complexity...
>
> Since support will be there from the beginning for our target, we don't
> actually need the fall-back. A GDB that doesn't support this also wouldn't
> be able to support the IntelGT architecture.
>
> I'm fine to drop it.
That would be my preference, otherwise it's code that will never
actually be used but will add maintenance cost.
>>> @@ -2772,6 +2896,7 @@ handle_query (char *own_buf, int packet_len, int
>> *new_packet_len_p)
>>> /* We do not have any hook to indicate whether the non-SVR4 target
>>> backend supports qXfer:libraries:read, so always report it. */
>>> strcat (own_buf, ";qXfer:libraries:read+");
>>> + strcat (own_buf, ";qXfer:libraries:read:in-memory-library+");
>>
>> So, this makes gdbserver reply "I support in memory libraries". Is it
>> really needed? It seems to me like it's only important for GDB to tell
>> gdbserver, not the other way around.
>
> Right, GDB needs to opt into this new response.
>
> I thought it was common practice to announce features in gdbserver.
> If we only do this for opt-ins, I can drop this.
If GDB needs to know what gdbserver supports, it makes sense for
gdbserver to announce it, but I think it's only the other way around
in this case.
But really, if we can just add the new <in-memory-library> element and
it is gracefully ignored by older GDBs, without the need for a feature
flag, that would be the simplest solution (and therefore my preference).
Simon
next prev parent reply other threads:[~2025-12-12 19:35 UTC|newest]
Thread overview: 92+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-01 9:37 [PATCH v3 00/44] A new target to debug Intel GPUs Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 01/44] gdb, intelgt: add intelgt as a basic machine Tankut Baris Aktemur
2025-12-09 20:44 ` Simon Marchi
2025-12-19 11:13 ` Aktemur, Tankut Baris
2025-08-01 9:37 ` [PATCH v3 02/44] bfd: add intelgt target to BFD Tankut Baris Aktemur
2025-08-01 12:20 ` Jan Beulich
2025-08-08 5:03 ` Metzger, Markus T
2025-12-09 21:05 ` Simon Marchi
2025-12-19 12:46 ` Aktemur, Tankut Baris
2025-08-01 9:37 ` [PATCH v3 03/44] ld: add intelgt as a target configuration Tankut Baris Aktemur
2025-08-01 12:06 ` Jan Beulich
2025-08-08 5:03 ` Metzger, Markus T
2025-08-01 9:37 ` [PATCH v3 04/44] opcodes: add intelgt as a configuration Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 05/44] gdb, gdbserver, gdbsupport: add 'device' tag to XML target description Tankut Baris Aktemur
2025-12-09 21:27 ` Simon Marchi
2025-12-15 21:03 ` Simon Marchi
2025-12-18 15:04 ` Aktemur, Tankut Baris
2026-01-09 19:12 ` Aktemur, Tankut Baris
2026-01-09 19:34 ` Simon Marchi
2025-08-01 9:37 ` [PATCH v3 06/44] gdb, arch, intelgt: add intelgt arch definitions Tankut Baris Aktemur
2025-12-09 21:48 ` Simon Marchi
2025-12-16 15:47 ` Metzger, Markus T
2025-08-01 9:37 ` [PATCH v3 07/44] gdb, intelgt: add the target-dependent definitions for the Intel GT architecture Tankut Baris Aktemur
2025-12-11 18:53 ` Simon Marchi
2025-12-19 16:01 ` Aktemur, Tankut Baris
2025-08-01 9:37 ` [PATCH v3 08/44] gdb, intelgt: add disassemble feature " Tankut Baris Aktemur
2025-12-11 19:37 ` Simon Marchi
2025-12-23 11:03 ` Aktemur, Tankut Baris
2025-08-01 9:37 ` [PATCH v3 09/44] gdb, gdbserver, ze: in-memory libraries Tankut Baris Aktemur
2025-12-12 4:13 ` Simon Marchi
2025-12-12 11:20 ` Metzger, Markus T
2025-12-12 19:34 ` Simon Marchi [this message]
2025-12-15 13:07 ` Metzger, Markus T
2025-12-15 21:25 ` Simon Marchi
2025-08-01 9:37 ` [PATCH v3 10/44] gdb, gdbserver, rsp, ze: acknowledge libraries Tankut Baris Aktemur
2025-12-12 4:41 ` Simon Marchi
2025-12-12 14:28 ` Metzger, Markus T
2025-08-01 9:37 ` [PATCH v3 11/44] gdb, solib, ze: update target_solib_ops::bfd_open_from_target_memory Tankut Baris Aktemur
2025-12-12 4:43 ` Simon Marchi
2025-12-12 14:33 ` Metzger, Markus T
2025-08-01 9:37 ` [PATCH v3 12/44] gdb, infrun, ze: allow saving process events Tankut Baris Aktemur
2025-12-12 4:57 ` Simon Marchi
2025-12-15 13:13 ` Metzger, Markus T
2025-12-16 21:10 ` Simon Marchi
2025-12-17 9:30 ` Metzger, Markus T
2025-12-17 20:44 ` Simon Marchi
2025-12-18 7:20 ` Metzger, Markus T
2025-08-01 9:37 ` [PATCH v3 13/44] gdb, ze: add TARGET_WAITKIND_UNAVAILABLE Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 14/44] gdb, infrun, ze: handle stopping unavailable threads Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 15/44] gdb, infrun, ze: allow resuming " Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 16/44] gdb, gdbserver, ze: add U stop reply Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 17/44] gdb, gdbserver, ze: add library notification to " Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 18/44] gdbserver, ze: report TARGET_WAITKIND_UNAVAILABLE events Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 19/44] gdb, ze: handle TARGET_WAITKIND_UNAVAILABLE in stop_all_threads Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 20/44] gdb, remote: handle thread unavailability in print_one_stopped_thread Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 21/44] gdb, remote: do 'remote_add_inferior' in 'remote_notice_new_inferior' earlier Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 22/44] gdb, remote: handle a generic process PID in remote_notice_new_inferior Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 23/44] gdb, remote: handle a generic process PID in process_stop_reply Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 24/44] gdb: use the pid from inferior in setup_inferior Tankut Baris Aktemur
2025-12-12 19:51 ` Simon Marchi
2025-12-13 12:40 ` Aktemur, Tankut Baris
2025-08-01 9:37 ` [PATCH v3 25/44] gdb: revise the pid_to_exec_file target op Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 26/44] gdb: load solibs if the target does not have the notion of an exec file Tankut Baris Aktemur
2025-12-12 20:30 ` Simon Marchi
2026-01-09 19:10 ` Aktemur, Tankut Baris
2025-08-01 9:37 ` [PATCH v3 27/44] gdbserver: import AC_LIB_HAVE_LINKFLAGS macro into the autoconf script Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 28/44] gdbserver: add a pointer to the owner thread in regcache Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 29/44] gdbserver: wait for stopped threads in queue_stop_reply_callback Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 30/44] gdbserver: adjust pid after the target attaches Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 31/44] gdb: do not create a thread after a process event Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 32/44] gdb, ze: on a whole process stop, mark all threads as not_resumed Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 33/44] gdb, dwarf, ze: add DW_OP_INTEL_regval_bits Tankut Baris Aktemur
2025-08-01 12:02 ` Jan Beulich
2025-08-01 12:31 ` Metzger, Markus T
2025-08-01 12:50 ` Jan Beulich
2025-08-08 5:25 ` Metzger, Markus T
2025-08-01 9:37 ` [PATCH v3 34/44] gdbserver: allow configuring for a heterogeneous target Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 35/44] gdbserver, ze, intelgt: introduce ze-low and intel-ze-low targets Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 36/44] testsuite, sycl: add SYCL support Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 37/44] testsuite, sycl: add test for backtracing inside a kernel Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 38/44] testsuite, sycl: add test for 'info locals' and 'info args' Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 39/44] testsuite, sycl: add tests for stepping and accessing data elements Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 40/44] testsuite, sycl: add test for 1-D and 2-D parallel_for kernels Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 41/44] testsuite, sycl: add test for scheduler-locking Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 42/44] testsuite, arch, intelgt: add a disassembly test Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 43/44] testsuite, arch, intelgt: add intelgt-program-bp.exp Tankut Baris Aktemur
2025-08-01 9:37 ` [PATCH v3 44/44] testsuite, sycl: test canceling a stepping flow Tankut Baris Aktemur
2025-09-17 12:43 ` [PATCH v3 00/44] A new target to debug Intel GPUs Aktemur, Tankut Baris
2025-10-14 6:34 ` Aktemur, Tankut Baris
2025-12-08 11:32 ` Aktemur, Tankut Baris
2025-12-09 21:30 ` Simon Marchi
2025-12-19 12:52 ` Aktemur, Tankut Baris
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=1c2082a9-02df-41ca-84bb-abdf6546ab35@simark.ca \
--to=simark@simark.ca \
--cc=gdb-patches@sourceware.org \
--cc=markus.t.metzger@intel.com \
--cc=tankut.baris.aktemur@intel.com \
--cc=thiago.bauermann@linaro.org \
/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