Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: "Metzger, Markus T" <markus.t.metzger@intel.com>
To: Simon Marchi <simark@simark.ca>
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: Mon, 15 Dec 2025 13:07:44 +0000	[thread overview]
Message-ID: <DM8PR11MB5749BBC006ACB5BB149BA735DEADA@DM8PR11MB5749.namprd11.prod.outlook.com> (raw)
In-Reply-To: <1c2082a9-02df-41ca-84bb-abdf6546ab35@simark.ca>

>>>>  <!-- 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?

GDB silently ignores unknown elements and unknown attributes.

I will drop most of this patch and just send the new in-memory-library
response without opt-in and without fallback.


>>> 	      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?

No, 'info shared' prints the name given by

  /* Constructor.  BASE and SIZE define where the BFD can be found in
     target memory.  */
  target_buffer (CORE_ADDR base, ULONGEST size)
    : m_base (base),
      m_size (size),
      m_filename (xstrprintf ("<in-memory@%s-%s>",
			      core_addr_to_string_nz (m_base),
			      core_addr_to_string_nz (m_base + m_size)))

This is existing code.  I'm no longer setting solib->name for in-memory libs.


>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".

We'd need to route that through.  I have not looked into it.  I'm quite happy
with the name GDB chooses.  It makes it easy to copy&paste to a 'dump
memory' command.


>>>> +      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.

I'd leave the assert here.  This is where we need that property asserted.


>>>> +/* 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).

OK.

Regards,
Markus.
Intel Deutschland GmbH
Registered Address: Dornacher Straße 1, 85622 Feldkirchen, Germany
Tel: +49 89 991 430, www.intel.de
Managing Directors: Harry Demas, Jeffrey Schneiderman, Yin Chong Sorrell
Chairperson of the Supervisory Board: Nicole Lau
Registered Seat: Munich
Commercial Register: Amtsgericht München HRB 186928

  reply	other threads:[~2025-12-15 13:09 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
2025-12-15 13:07         ` Metzger, Markus T [this message]
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=DM8PR11MB5749BBC006ACB5BB149BA735DEADA@DM8PR11MB5749.namprd11.prod.outlook.com \
    --to=markus.t.metzger@intel.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simark@simark.ca \
    --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