From patchwork Fri Apr 19 10:39:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Moritz_Str=C3=BCbe?= X-Patchwork-Id: 88721 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A997F3844747 for ; Fri, 19 Apr 2024 10:39:58 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mta-64-134.flowmailer.net (mta-64-134.flowmailer.net [185.136.64.134]) by sourceware.org (Postfix) with ESMTPS id D15723849AC7 for ; Fri, 19 Apr 2024 10:39:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D15723849AC7 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=siemens-energy.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=errorhandling.siemens-energy.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D15723849AC7 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=185.136.64.134 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713523169; cv=none; b=yGFYyAlkSgsVRRLbD0Jcgl0VBjEVw/9ver77HxOKU3MJFQQ4ps7S6/iH23CEpVA/5jjhQMu5GHk0G2WohFxHBr36HOizj0Uzu44WylJGQLxoJCNyL7uv7GPzT1uL4U6Wd9ezWDpXmLu+i6HzFCauPgX3Kk1vRCyUcwnIDN0bHkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713523169; c=relaxed/simple; bh=d7I/zepxADNcpc6Fe1/q7xBVJ91kxZF0oDtP11ybTtk=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=rPe1YkQ+ZU2uPjXOLJqj1XquisXg+KRyHVai5hb+zfnGMFA5lt/lURZFAYsqL84kixHm/in5mi90kFxcJ+qFUHiWgATOYIXFOX4HkhyiRLMinTVOYyAoi1bdxjlicsMmTnp1oi4xn2qPhGxdDQLZXJCzJnQDFTgupXo9lhVeZto= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mta-64-134.flowmailer.net with ESMTPSA id 202404191039259a5b01c9539d209231 for ; Fri, 19 Apr 2024 12:39:25 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=s1; d=flowmailer.net; h=from:from:sender:to:to:cc:cc:subject:subject:content-type:content-transfer-encoding:content-transfer-encoding:References:In-Reply-To:Date:Message-ID:MIME-Version; bh=qrZ7mP7c1A0JAS8BWHUJfRjTdxVTG8dI4P8bvsWmhP4=; b=o0AalUWhPVAft0BEBSSmDj/+yTXk4LDpNvkv7mXJj0FQ2PGFSapu7WyXqRmxdh/YMnrBHI +dXsVKWpD02OmH9MW7si2O5vT4a6nqk7LXPKZxZ2CE1b5LWQgtuI1PlOp9akMj/kT4YbpsOb WEzGNvLbgCueb4EiZ3uokUksPzKtk=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm4; d=siemens-energy.com; i=moritz.struebe@siemens-energy.com; h=from:from:sender:to:to:cc:cc:subject:subject:content-type:content-transfer-encoding:content-transfer-encoding:References:In-Reply-To:Date:Message-ID:MIME-Version; bh=qrZ7mP7c1A0JAS8BWHUJfRjTdxVTG8dI4P8bvsWmhP4=; b=e4Xk27++DWaTZmhdV2CcVdeoqm+Gc6zZVilK8uvQkEOaNmWq17o2fErRm04nirQfnZ3ken wU8Ui1MmcZOJ+TO/FMJJ7pbpLev1TMt0DxNxwi3r9NfOJwC3kS7YiNCqXJWapQ+Whi5y442J f7llcWiY2z2zT3/nCK9UtHHU54l4yxOsoA+ojphBM+mZPenM3V0CBjYZ8Nj4+M4i2SWCPYCX 8ina53qHRTnatYki+FEKwOOj9CR3sBrNHviARCd1bzwXnrLJjRNmHsBuANSE283Koy6K6ibG 15rx3TsuCORm32qXQGmKb03M613yJRFR3NJnDUpFlyT9QXV6HE8Y23ug==; From: =?utf-8?q?Moritz_Str=C3=BCbe?= To: gdb-patches@sourceware.org Cc: =?utf-8?q?Moritz_Str=C3=BCbe?= Subject: [PATCH 1/2] Nios2, libbfd: Support new coredump .reg section Date: Fri, 19 Apr 2024 12:39:21 +0200 Message-ID: In-Reply-To: <20240419103922.3621961-1-moritz.struebe@siemens-energy.com> References: <20240419103922.3621961-1-moritz.struebe@siemens-energy.com> MIME-Version: 1.0 X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPAM_FROM, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org The coredumps of the current kernel are larger. --- bfd/elf32-nios2.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bfd/elf32-nios2.c b/bfd/elf32-nios2.c index 806ec314c82..3d0fa6fbf27 100644 --- a/bfd/elf32-nios2.c +++ b/bfd/elf32-nios2.c @@ -1921,7 +1921,18 @@ nios2_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) { default: return false; + case 272: /* Linux/Nios II */ + /* pr_cursig */ + elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); + + /* pr_pid */ + elf_tdata (abfd)->core->pid = bfd_get_32 (abfd, note->descdata + 24); + /* pr_reg */ + offset = 72; + size = 196; + + break; case 212: /* Linux/Nios II */ /* pr_cursig */ elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12); From patchwork Fri Apr 19 10:39:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Moritz_Str=C3=BCbe?= X-Patchwork-Id: 88722 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 61F783849AF4 for ; Fri, 19 Apr 2024 10:39:59 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mta-64-131.flowmailer.net (mta-64-131.flowmailer.net [185.136.64.131]) by sourceware.org (Postfix) with ESMTPS id D6EDB3849ACF for ; Fri, 19 Apr 2024 10:39:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D6EDB3849ACF Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=siemens-energy.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=errorhandling.siemens-energy.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org D6EDB3849ACF Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=185.136.64.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713523169; cv=none; b=A9fTLuGjbv3CvERFYpnYVRvg0Xoq4Hpyu0dznTBkWZJbhkesbOKmXKrjhmfADtSYsd+CpBkb1WMXDcHiQZ+bvTlfYi4RkluUNPCalg4j6k13eiQDaIY2gPCmfUp6QYIKLQeCMldbTxsfMS9RSyBYPklWdWl03T+m+Dd5s8/l92c= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1713523169; c=relaxed/simple; bh=Wf7atvpN0WCBZ8H8z7hjF98n63bri8OFivFe84Kz6Ao=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=Fcs6kGi6maklR0TYOys62r79KL9YNcqoeMzrRdTf3jQ2g+NefopCpQXv2Wo6UxhIML/iNvtSN28NFevLxjQ+K8OnZ6QxruJJG3D7pD09Wi3HNRRIQMnfbRDh+d3FlszHeC/5K1uTAzHFZOYClwRbZsS0I0QaxgVoDTGoU/tYZ6w= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mta-64-131.flowmailer.net with ESMTPSA id 202404191039253f6027d3c5d2ac7a26 for ; Fri, 19 Apr 2024 12:39:25 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=s1; d=flowmailer.net; h=from:from:sender:to:to:cc:cc:subject:subject:content-type:content-transfer-encoding:content-transfer-encoding:References:In-Reply-To:Date:Message-ID:MIME-Version; bh=/19cRhlNmdSmifRzxeQC5ru4DHgpjvAt9VOuEMw8ODA=; b=Jdnlfe1AYOLetyW3+w+xTSvsr0pPrmEIPISiQFlZAhIW1zC9MzyCnuA48tNdy+9gGLOqoA zrR7jAd0km6PriY2KIozLAPT0S96j4cEecCKBhXiPFu8k2f9vNkygi8wcrv/uTVVWwcaHeqH cZkG5UImm1c/pzUj+34ngZwuq2bIs=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm4; d=siemens-energy.com; i=moritz.struebe@siemens-energy.com; h=from:from:sender:to:to:cc:cc:subject:subject:content-type:content-transfer-encoding:content-transfer-encoding:References:In-Reply-To:Date:Message-ID:MIME-Version; bh=/19cRhlNmdSmifRzxeQC5ru4DHgpjvAt9VOuEMw8ODA=; b=p6Xe9hcS5KRWeetnWCnqeHVWEPWdz4RKyt1ftDZ6DzQQglhnbEOm8atqv0KT2f+MwBYvew XMebwwmPcHqp2r8xpcEmSewZ1q1+F+MpoUZcAV29v7Z/uYSqJUZxOzHDQnlE7OMk1b54HOzQ vVo0KvJSf8T+hmjvhvmh54gRDvggBILFDG3Yqk6bQ0erUhjeRH7E6NNmBZyKRg62EsJWepi5 pGwxrRmIo8/FhOE3dBKa8P8jiy5HQGzkmgaTSK7DFPlmY7/sKaiE6ZMMQ4SZmd5u9XrKzGqe QNrSBd1W6n4JXpaAmSQA/kySkHvNeU8udlQ+ammCdLCOgD0QW6yP3KjA==; From: =?utf-8?q?Moritz_Str=C3=BCbe?= To: gdb-patches@sourceware.org Cc: =?utf-8?q?Moritz_Str=C3=BCbe?= Subject: [PATCH 2/2] Nios2, gdb: Adjust to new coredump format Date: Fri, 19 Apr 2024 12:39:22 +0200 Message-ID: In-Reply-To: <20240419103922.3621961-1-moritz.struebe@siemens-energy.com> References: <20240419103922.3621961-1-moritz.struebe@siemens-energy.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPAM_FROM, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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+patchwork=sourceware.org@sourceware.org Current kernels create their coredumps using ptrace. Adjust to this new format. --- gdb/nios2-linux-tdep.c | 68 ++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 36 deletions(-) diff --git a/gdb/nios2-linux-tdep.c b/gdb/nios2-linux-tdep.c index fb9e88326fb..16581508688 100644 --- a/gdb/nios2-linux-tdep.c +++ b/gdb/nios2-linux-tdep.c @@ -32,46 +32,40 @@ #include "gdbarch.h" /* Core file and register set support. */ +/* See arch/nios2/kernel/ptrace.c */ -/* Map from the normal register enumeration order to the order that - registers appear in core files, which corresponds to the order - of the register slots in the kernel's struct pt_regs. */ +#define NIOS2_GREGS_SIZE (4 * NIOS2_NUM_REGS) -static const int reg_offsets[NIOS2_NUM_REGS] = -{ - -1, 8, 9, 10, 11, 12, 13, 14, /* r0 - r7 */ - 0, 1, 2, 3, 4, 5, 6, 7, /* r8 - r15 */ - 23, 24, 25, 26, 27, 28, 29, 30, /* r16 - r23 */ - -1, -1, 19, 18, 17, 21, -1, 16, /* et bt gp sp fp ea sstatus ra */ - 21, /* pc */ - -1, 20, -1, -1, -1, -1, -1, -1, /* status estatus ... */ - -1, -1, -1, -1, -1, -1, -1, -1 -}; - -/* General register set size. Should match sizeof (struct pt_regs) + - sizeof (struct switch_stack) from the NIOS2 Linux kernel patch. */ - -#define NIOS2_GREGS_SIZE (4 * 34) +/* Registers not set by dump */ +static std::set notsetregs = {0, 24, 25, 30}; /* Implement the supply_regset hook for core files. */ - static void nios2_supply_gregset (const struct regset *regset, struct regcache *regcache, int regnum, const void *gregs_buf, size_t len) { const gdb_byte *gregs = (const gdb_byte *) gregs_buf; - int regno; - static const gdb_byte zero_buf[4] = {0, 0, 0, 0}; - - for (regno = NIOS2_Z_REGNUM; regno <= NIOS2_MPUACC_REGNUM; regno++) - if (regnum == -1 || regnum == regno) - { - if (reg_offsets[regno] != -1) - regcache->raw_supply (regno, gregs + 4 * reg_offsets[regno]); - else - regcache->raw_supply (regno, zero_buf); + const uint32_t *regvals = (const uint32_t *) gregs_buf; + + // If regno is 0 dump all registers + if(regnum > 0 ){ + regcache->raw_supply (regnum, gregs + 4 * regnum); + } else { + for (auto regno = NIOS2_Z_REGNUM; regno < NIOS2_NUM_REGS; regno++){ + // Only CPU registers are set by dump. Thus ignore everything above NIOS2_PC_REGNUM + if(notsetregs.find(regno) == notsetregs.end() && regno <= NIOS2_PC_REGNUM ) { + regcache->raw_supply(regno, gregs + 4 * regno); + } else { + // Print a warning in case the register is suddenly set in the future. + if(regvals[regno] != 0){ + warning (_("'.reg': expected regno %d to be 0, but was 0x%08x."), regno, regvals[regno]); + } + // Registers not available should be set passing NULL. + regcache->raw_supply(regno, NULL); } + } + } } /* Implement the collect_regset hook for core files. */ @@ -82,14 +76,16 @@ nios2_collect_gregset (const struct regset *regset, int regnum, void *gregs_buf, size_t len) { gdb_byte *gregs = (gdb_byte *) gregs_buf; - int regno; - - for (regno = NIOS2_Z_REGNUM; regno <= NIOS2_MPUACC_REGNUM; regno++) - if (regnum == -1 || regnum == regno) - { - if (reg_offsets[regno] != -1) - regcache->raw_collect (regno, gregs + 4 * reg_offsets[regno]); + // If regno is 0 dump all registers + if(regnum > 0 ){ + regcache->raw_collect (regnum, gregs + 4 * regnum); + } else { + for (auto regno = NIOS2_Z_REGNUM; regno <= NIOS2_NUM_REGS; regno++){ + if(notsetregs.find(regno) == notsetregs.end() && regno <= NIOS2_PC_REGNUM ) { + regcache->raw_collect(regno, gregs + 4 * regno); } + } + } } static const struct regset nios2_core_regset =