From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id VePxOrU3n2oRfzUAWB0awg (envelope-from ) for ; Mon, 07 Sep 2026 18:16:21 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=palves.net header.i=@palves.net header.a=rsa-sha256 header.s=dreamhost header.b=LhAhF7qn; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id DAA0B1E033; Mon, 07 Sep 2026 18:16:21 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 83C3C1E033 for ; Mon, 07 Sep 2026 18:16:20 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 7DE2D48F8A4A for ; Mon, 7 Sep 2026 22:16:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7DE2D48F8A4A Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=palves.net header.i=@palves.net header.a=rsa-sha256 header.s=dreamhost header.b=LhAhF7qn Received: from beige.elm.relay.mailchannels.net (beige.elm.relay.mailchannels.net [23.83.212.16]) by sourceware.org (Postfix) with ESMTPS id 4652B4B9DB5F for ; Mon, 7 Sep 2026 22:15:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4652B4B9DB5F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=palves.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=palves.net ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4652B4B9DB5F Authentication-Results: sourceware.org; arc=none smtp.remote-ip=23.83.212.16 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788819355; cv=none; b=MHWXEMF3b3CMzaHJwl2ROMqmV4qNunYH6dXCZmqSHllpp++ZSLF+ohg8KhzM9kAieahLXUvADs59CLt3Wyea9isdAPsCroa57Q7H/1ZffkBMPePA8S0w56gecJpy8sscmVkZ14zfSraIYudSyVYtYlFzqoy/mCuiRxG+w7QOjRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788819355; c=relaxed/simple; bh=qkrX/kdv2PCtoNXjpxbwvcYqAziHnSBaD1nSAGOnP/o=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=OTYWN5dZMnohCdivSW5+bl2Bu3tKi3FMKHjVfXZajcVkALZNjlDpa7+R2mbAL6kUynDoREE18zl6AlKwvnvbTj2mCKXEcjRfukSvtMk8pymBdmKOE/LcllAMCUzQD5tXuZNkftO+VIIbOaw6ORo3eWRQHgs4swycWnUSnETl1BI= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=palves.net header.i=@palves.net header.a=rsa-sha256 header.s=dreamhost header.b=LhAhF7qn DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4652B4B9DB5F X-Sender-Id: dreamhost|x-authsender|pedro@palves.net Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 21C907E1ED6; Mon, 07 Sep 2026 22:15:54 +0000 (UTC) Received: from pdx1-sub0-mail-a207.dreamhost.com (100-98-21-200.trex-nlb.outbound.svc.cluster.local [100.98.21.200]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id E2DF07E1E38; Mon, 07 Sep 2026 22:15:53 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|pedro@palves.net X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|pedro@palves.net X-MailChannels-Auth-Id: dreamhost X-Wiry-Abaft: 778a07ab760a74b1_1788819353968_612216790 X-MC-Loop-Signature: 1788819353968:3428322249 X-MC-Ingress-Time: 1788819353968 Received: from pdx1-sub0-mail-a207.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.98.21.200 (trex/8.0.2); Mon, 07 Sep 2026 22:15:53 +0000 Received: from localhost (bl22-81-37.dsl.telepac.pt [2.83.81.37]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: pedro@palves.net) by pdx1-sub0-mail-a207.dreamhost.com (Postfix) with ESMTPSA id 4hf1c92vN5z1v; Mon, 7 Sep 2026 15:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=palves.net; s=dreamhost; t=1788819353; bh=1r9bsaNtjygpeaScOs89Stetq2KIevw9FfeJIMyJc5I=; h=From:To:Cc:Subject:Date:Content-Transfer-Encoding; b=LhAhF7qnjfsJoivQJzo/iwp2pgZeTc0SfzF4x8GGnzxoYpCuc1H6OciFB7mHhMCCJ RhIfVy8FflmyWDZbo7v1Hsf9cFTXHop1c/ghQHdcXbm0/3CZfWS3JTr/060NVByUzw vCNkcRtZokbO4TOF7bxmBW/WZsfgKWo8SUugri1pPL7v6u5fW8f7aveLnX38rtPlND 4wCYNjfjka7k6TcSGglhqSzw8IMf75EORKb2LdMgogU+/8Cq0XOHuN448aPrSIBZVt 5d3W6qEz0iAFX0gLRUmcWyskVA6u0GB0K0cBaZiIbwtQL/lCPbVGSF8Aboa4LXsZBz WYF5CgF8qX+lg== From: Pedro Alves To: gdb-patches@sourceware.org Cc: "Six, Lancelot" Subject: [PATCH] gdb/amdgpu: Fix accessing GPU global memory Date: Mon, 7 Sep 2026 23:15:45 +0100 Message-ID: <20260907221545.3817530-1-pedro@palves.net> X-Mailer: git-send-email 2.54.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org 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"@000001f82fdcc110 (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 , 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); base-commit: e0d8f6fc3867435e37e0409987b63e70aee4513b -- 2.54.0