From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id uS0YAj+ow2q5pjwAWB0awg (envelope-from ) for ; Mon, 05 Oct 2026 09:38:07 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=Y+Gp/g7o; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 035571E04E; Mon, 05 Oct 2026 09:38:07 -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,FREEMAIL_FROM,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 319611E04E for ; Mon, 05 Oct 2026 09:38:06 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EF9D94BA9019 for ; Mon, 5 Oct 2026 13:38:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EF9D94BA9019 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=Y+Gp/g7o Received: from mail-dy1-x132b.google.com (mail-dy1-x132b.google.com [IPv6:2607:f8b0:4864:20::132b]) by sourceware.org (Postfix) with ESMTPS id D37DE4BA23EB for ; Mon, 5 Oct 2026 13:37:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D37DE4BA23EB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D37DE4BA23EB Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::132b ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1791207462; cv=none; b=ki2tk0ACcllx1w7hS8tynhuVwrIovMp0tNZDs5VAUxgUH4bIYYV4LA8S+eFFMfObs2jh4F7yhATSxtvVvFZWO1w+WWNfAz8+owNP7jOvu2AiugYiIGkezOkEW22NquD1/7VwUT7pLhpmmg0+PbqWWafclVU1P0e3ajYqaI8pmzw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1791207462; c=relaxed/simple; bh=R3EeDJ093Ju5BmRK/cyjfQtq36JJJtvv6iH4jKs/Fnw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=flnFRE8V1Ku3m4fboXYTYCdUNh2Pgv86T9boyYJf/Hf8chTXpWuT0Vah2QO0jmCzscF2kBXyk8LPLlFdPh1YuJGXRG7nHx5Fh7kQq2/m2akl2/5LobrL5xZ3Dqvo10Q/rS9vNwKQnjKWV04TTi7/40U3h3pW+aDqexV9OHs2yUs= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=Y+Gp/g7o DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D37DE4BA23EB Received: by mail-dy1-x132b.google.com with SMTP id 5a478bee46e88-34bb8b31647so2939876eec.0 for ; Mon, 05 Oct 2026 06:37:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791207461; x=1791812261; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=Wjk6CPdkgxp7WXbilgzbd/KRGnVWk6YVJIqaz67ikrM=; b=Y+Gp/g7oPZ4+tGy4393pJJ9AjUUYduodDiVXKlWvHxcZHzwNlTKqx+pm3VJi+tlDtM zzZJhI3YdzrtM9QVtuVblFdawZoVT9tjdYd/l0T2FQB7kV7SfWjsD/+DQ+yukp+xC5br Jiu0081AHcS4mY9EDr21s5uZUh/uAfBI3EUKReWEx7M8HK8Dmw1RFTsI/Xx4jEJzFTWW 7UT5AkcrCwIFr1rmbXfGUURlUmFNq3UJWCos7W8sxp+G9Z1d1kKDVHjPVrwxETX3AZAs kX4HLq4n2sswS4jkQM26crlHlcKd9wZIxsg4i8+6PDEaFdggZEARB5qNqMGyR+mjQ24y V50w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791207461; x=1791812261; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Wjk6CPdkgxp7WXbilgzbd/KRGnVWk6YVJIqaz67ikrM=; b=ZmZXmNGFM4K0apnFxrn7aUQVsKtiBNW7eE2rikzXMDRKyKfn9j2oXmooYYcDt60s3E KQ1I9bNVm0WJsW4Gt2zKaTAIy1lrYhyShCMBNADBuTd05RQJckTF96Okgv8+WouBXmHi JZ6G799QD3VeN+NO32cm6NxgzRPR+OSHQXB3SwLhcTBzbaO0iektrXaP/W+qy9CsccuZ P/BeysKDU1iStXVJhDXSClxN/N1nc6Ej4him5EfOy8cxyQqfdfdaZo8S7k+WP8sK9JEm oGfbS0dIn0Tkll5ZfQiHR1hgXa65DvMbF8BMrbvNt9I6ZMpPFIphIZgBplfkN4aZawv6 sAfQ== X-Gm-Message-State: AFq9FYKz3fcQ6XTA11q3IqSNDS8N/L5axlFY5ox3BX2EbVqTC8l9VBql 4GJDa59paPcEXxD6t9OGJgMU1Tv/kKxy3+TiwZbTsU3qdILRld0xvz2E X-Gm-Gg: AYBFou1wQDH291noZvRrH5rFHWb5SegLDleHdVAMR8li+LMBRMv1WA3mr/zn3kM/dO8 86I2QjlTaGWADoRSXMUJBYBe8twEKGn5UjomGq69yskPvoIn7tWEVTlu0Z1SxBraV6omjI9nhqa ujEtOmuDx4NslfEsKO4N7T9VkiZmrRvDfUysUEKxkPd4EiS5xNeRFmSpFw7FP/lAaf/SbInoxtq 0Z0jSH9akEqmqa5QujjD25mERSWRh2S84UTFLJEvn4VTZ6l8I9dlUrdcft/g2Dse2l0Domiki6q 8JRDO4pbt1wawq+YgFs7ym20A+5bRP0lhX+uzxh7P1j+Uyo8gXS/l3zoDDpUXMH/Ve/RZb+Upcz jV0mKtizy6PX42/G9UhrVg4AiFc8xZTSrojyz5pinRLiTvcBeeoxJ3yos7VveWl6KkgwEquRkhL ixaG9kTa5cRsbCMnxCQhDbFk8EIcy9hK7vzgXHdY4bOLgWOw+KnCwrXeYIH+eOa/W6oQHSezb83 0pSBFocT3wbhkKkt09PrQAo93g= X-Received: by 2002:a05:7301:4304:b0:34b:5ab2:e200 with SMTP id 5a478bee46e88-3511141a3c7mr10754178eec.14.1791207460496; Mon, 05 Oct 2026 06:37:40 -0700 (PDT) Received: from localhost.localdomain ([122.171.21.153]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3512a3fd5dcsm11844885eec.21.2026.10.05.06.37.37 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 05 Oct 2026 06:37:40 -0700 (PDT) From: Aditya Vidyadhar Kamath To: ulrich.weigand@de.ibm.com, simon.marchi@polymtl.ca, tom@tromey.com Cc: gdb-patches@sourceware.org, Aditya.Kamath1@ibm.com, sangamesh.swamy@in.ibm.com, Aditya Vidyadhar Kamath Subject: [PATCH v4 5/5] Fix 32-bit GPR and SPR register reads/writes in pthdb callbacks. Date: Mon, 5 Oct 2026 19:06:39 +0530 Message-ID: <20261005133638.32325-2-akamath996@gmail.com> X-Mailer: git-send-email 2.43.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 From: Aditya Vidyadhar Kamath This patch does two simple changes mentioned in each paragraph below: When a 32-bit thread's GPRs are read via pdc_read_regs, a raw memcpy from a uint32_t[32] array into pthdb_context_t::gpr which holds uint64_t elements was silently truncating or misinterpreting data. Replace the memcpy with an element-wise assignment so each 32-bit value is correctly zero-extended into the 64-bit context field. Similarly, the SPRS read for 32-bit threads was copying the entire struct ptsprs over &context->msr, clobbering adjacent context fields. Replace the memcpy with explicit field-by-field assignments. For writes in pdc_write_regs, restore the arch64 branch distinction: 1: 64-bit: pass context->gpr / &context->msr directly as before. 2: 32-bit GPRs: truncate each context->gpr[i] (uint64_t) into a local uint32_t gprs32[] array before calling ptrace64aix. 3: 32-bit SPRs: pack a local struct ptsprs from the individual context fields before calling ptrace64aix. --- gdb/aix-thread.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c index 4826e33265c..f4693702804 100644 --- a/gdb/aix-thread.c +++ b/gdb/aix-thread.c @@ -411,7 +411,8 @@ pdc_read_regs (pthdb_user_t user_current_pid, { if (!ptrace64aix (PTT_READ_GPRS, tid, (long long) gprs32, 0, NULL)) memset (gprs32, 0, sizeof (gprs32)); - memcpy (context->gpr, gprs32, sizeof (gprs32)); + for (int i = 0; i < ppc_num_gprs; i++) + context->gpr[i] = gprs32[i]; } } @@ -436,7 +437,14 @@ pdc_read_regs (pthdb_user_t user_current_pid, { if (!ptrace64aix (PTT_READ_SPRS, tid, (long long) &sprs32, 0, NULL)) memset (&sprs32, 0, sizeof (sprs32)); - memcpy (&context->msr, &sprs32, sizeof (sprs32)); + context->iar = sprs32.pt_iar; + context->msr = sprs32.pt_msr; + context->cr = sprs32.pt_cr; + context->lr = sprs32.pt_lr; + context->ctr = sprs32.pt_ctr; + context->xer = sprs32.pt_xer; + context->fpscr = sprs32.pt_fpscr; + context->mq = sprs32.pt_mq; } } @@ -486,7 +494,17 @@ pdc_write_regs (pthdb_user_t user_current_pid, /* General-purpose registers. */ if (flags & PTHDB_FLAG_GPRS) - ptrace64aix (PTT_WRITE_GPRS, tid, (long long) context->gpr, 0, NULL); + { + if (data->arch64) + ptrace64aix (PTT_WRITE_GPRS, tid, (long long) context->gpr, 0, NULL); + else + { + uint32_t gprs32[ppc_num_gprs]; + for (int i = 0; i < ppc_num_gprs; i++) + gprs32[i] = context->gpr[i]; + ptrace64aix (PTT_WRITE_GPRS, tid, (long long) gprs32, 0, NULL); + } + } /* Floating-point registers. */ if (flags & PTHDB_FLAG_FPRS) @@ -494,7 +512,23 @@ pdc_write_regs (pthdb_user_t user_current_pid, /* Special-purpose registers. */ if (flags & PTHDB_FLAG_SPRS) - ptrace64aix (PTT_WRITE_SPRS, tid, (long long) &context->msr, 0, NULL); + { + if (data->arch64) + ptrace64aix (PTT_WRITE_SPRS, tid, (long long) &context->msr, 0, NULL); + else + { + struct ptsprs sprs32; + sprs32.pt_iar = context->iar; + sprs32.pt_msr = context->msr; + sprs32.pt_cr = context->cr; + sprs32.pt_lr = context->lr; + sprs32.pt_ctr = context->ctr; + sprs32.pt_xer = context->xer; + sprs32.pt_fpscr = context->fpscr; + sprs32.pt_mq = context->mq; + ptrace64aix (PTT_WRITE_SPRS, tid, (long long) &sprs32, 0, NULL); + } + } /* vector registers. */ if (__power_vmx () && (flags & PTHDB_FLAG_REGS)) -- 2.51.2