From: "Six, Lancelot" <Lancelot.Six@amd.com>
To: Simon Marchi <simark@simark.ca>, Pedro Alves <pedro@palves.net>,
"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: RE: [PATCH] gdb/amdgpu: Fix accessing GPU global memory
Date: Tue, 8 Sep 2026 09:10:50 +0000 [thread overview]
Message-ID: <CH3PR12MB9079F998D4B53E2062550C1A83B12@CH3PR12MB9079.namprd12.prod.outlook.com> (raw)
In-Reply-To: <a0bd7c6c-8fd8-4323-85a9-7455e0686067@simark.ca>
AMD General
> -----Original Message-----
> From: Simon Marchi <simark@simark.ca>
> Sent: 08 September 2026 00:30
> To: Pedro Alves <pedro@palves.net>; gdb-patches@sourceware.org
> Cc: Six, Lancelot <Lancelot.Six@amd.com>
> Subject: Re: [PATCH] gdb/amdgpu: Fix accessing GPU global memory
>
> Caution: This message originated from an External Source. Use proper caution
> when opening attachments, clicking links, or responding.
>
>
> On 2026-09-07 18:15, Pedro Alves wrote:
> > Now that multi solib provider support is in, the gdb.rocm/ tests
> > should work on Windows, in theory. Turns out they still don't. GDB
> > is now able to discover GPU code objects, but still fails to stop at
> > GPU breakpoints.
> >
> > The reason is that accessing GPU global memory is not working on
> > Windows. It fails with STATUS_ERROR_INVALID_LANE_ID, like so:
> >
> > [amd-dbgapi-lib] amd_dbgapi_code_object_get_info
> (code_object_id=code_object_1
> <"memory://5268#offset=0x90e9850&size=47824">,
> query=CODE_OBJECT_INFO_URI_NAME, value_size=
> > 8, value=0x73739feee0) {
> > [amd-dbgapi-lib] callback: allocate_memory (42) {
> > [amd-dbgapi-lib] callback: } allocate_memory = 0x1f82fdcc110 (took
> 0.011000 ms)
> > [amd-dbgapi-lib] } amd_dbgapi_code_object_get_info = STATUS_SUCCESS,
> *value="memory://5268#offset=0x90e9850&size=47824"@000001f82fdcc1
> 10 (took 0.633000 ms)
> > [amd-dbgapi-lib] amd_dbgapi_read_memory (process_id=process_1,
> wave_id=WAVE_NONE, lane_id=0, address_space_id=address_space_1
> <global>, segment_address=0x90e9850, value_s
> > ize=47824@00000073739fde78, value=0x1f8309246b0) {
> > [amd-dbgapi-lib] } amd_dbgapi_read_memory =
> STATUS_ERROR_INVALID_LANE_ID (took 0.024000 ms)
> >
> > We get STATUS_ERROR_INVALID_LANE_ID because we passed down
> > AMD_DBGAPI_WAVE_NONE, and in that case dbgapi enforces that the caller
> > pass down AMD_DBGAPI_LANE_NONE for lane.
> >
> > From dbgapi/src/memory.cpp:
> >
> > xfer_memory (amd_dbgapi_process_id_t process_id,
> amd_dbgapi_wave_id_t wave_id,
> > ...
> > if (wave != nullptr)
> > {
> > ...
> > }
> > else if (wave_id != AMD_DBGAPI_WAVE_NONE)
> > {
> > THROW (AMD_DBGAPI_STATUS_ERROR_INVALID_WAVE_ID);
> > }
> > else if (lane_id != AMD_DBGAPI_LANE_NONE)
> > {
> > /* wave_id is WAVE_NONE and lane_id != LANE_NONE. */
> > THROW (AMD_DBGAPI_STATUS_ERROR_INVALID_LANE_ID);
> <<<<<<<<<< HERE
> > }
> > ...
> >
> > Actually, all the GPU global accesses currently fail on Linux too!
> > The logs show the exact same STATUS_ERROR_INVALID_LANE_ID all over the
> > place. It just so happens to be papered over by accident there --
> > when accessing memory via amd-dbgapi-target fails, the core of GDB
> > will try the target beneath in the target stack (the process stratum
> > layer), and that (linux-nat) will work, because unlike on Windows, on
> > Linux we have unified memory so /proc/pid/mem successfully accesses
> > the GPU memory.
> >
> > Fix this by passing AMD_DBGAPI_LANE_NONE when wave_id is
> > AMD_DBGAPI_WAVE_NONE. We don't have proper lane support yet, so
> when
> > wave_id is a valid wave, continue accessing lane 0.
> >
> > Tested on x86_64-pc-linux-gnu and x86_64-pc-windows-msvc (with
> pending
> > testsuite patches).
> >
> > gdb.rocm/ tests now work on Windows, and most pass cleanly.
> >
> > Change-Id: I7dd53bc0a6ffdfaca71e70772562cc7ac1362f05
> > ---
> > gdb/amd-dbgapi-target.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/gdb/amd-dbgapi-target.c b/gdb/amd-dbgapi-target.c
> > index 45ad8f98a92..93207a8fdd2 100644
> > --- a/gdb/amd-dbgapi-target.c
> > +++ b/gdb/amd-dbgapi-target.c
> > @@ -769,16 +769,20 @@ amd_dbgapi_target::xfer_partial (enum
> target_object object, const char *annex,
> > amd_dbgapi_wave_id_t wave_id = (ptid_is_gpu (inferior_ptid)
> > ? get_amd_dbgapi_wave_id (inferior_ptid)
> > : AMD_DBGAPI_WAVE_NONE);
> > + /* dbgapi requires LANE_NONE when wave is WAVE_NONE. */
> > + amd_dbgapi_lane_id_t lane_id = (wave_id != AMD_DBGAPI_WAVE_NONE
> > + ? 0
> > + : AMD_DBGAPI_LANE_NONE);
> >
> > size_t len = requested_len;
> > amd_dbgapi_status_t status;
> >
> > if (readbuf != nullptr)
> > - status = amd_dbgapi_read_memory (process_id, wave_id, 0,
> > + status = amd_dbgapi_read_memory (process_id, wave_id, lane_id,
> > AMD_DBGAPI_ADDRESS_SPACE_GLOBAL,
> > offset, &len, readbuf);
> > else
> > - status = amd_dbgapi_write_memory (process_id, wave_id, 0,
> > + status = amd_dbgapi_write_memory (process_id, wave_id, lane_id,
> > AMD_DBGAPI_ADDRESS_SPACE_GLOBAL,
> > offset, &len, writebuf);
>
> I don't know if you want to wait for Lancelot's approval, but fwiw it
> LGTM, and trivial enough.
>
> Approved-By: Simon Marchi <simon.marchi@efficios.com>
>
> Simon
Hi,
This looks good to me as well, nice catch.
Approved-by: Lancelot Six <lancelot.six@amd.com> (amdgpu)
Best,
Lancelot.
prev parent reply other threads:[~2026-09-08 9:11 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-07 22:15 Pedro Alves
2026-09-07 23:29 ` Simon Marchi
2026-09-08 9:10 ` Six, Lancelot [this message]
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=CH3PR12MB9079F998D4B53E2062550C1A83B12@CH3PR12MB9079.namprd12.prod.outlook.com \
--to=lancelot.six@amd.com \
--cc=gdb-patches@sourceware.org \
--cc=pedro@palves.net \
--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