From patchwork Sat Nov 5 09:44:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tomas Vanek X-Patchwork-Id: 59990 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 3FB4B38582A0 for ; Sat, 5 Nov 2022 09:45:44 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp00.avonet.cz (smtp00.avonet.cz [217.112.162.55]) by sourceware.org (Postfix) with ESMTP id 251243858419 for ; Sat, 5 Nov 2022 09:45:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 251243858419 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=fbl.cz Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=fbl.cz Received: from ktus.lan (217-115-245-101.cust.avonet.cz [217.115.245.101]) by smtp00.avonet.cz (Postfix) with ESMTP id 4N4CKD4RtFz1xrv; Sat, 5 Nov 2022 10:45:20 +0100 (CET) From: Tomas Vanek To: gdb-patches@sourceware.org Subject: [RFC PATCH 3/5] gdb/dwarf2: Add dwarf2_frame_reg_rule for GDB register number Date: Sat, 5 Nov 2022 10:44:34 +0100 Message-Id: <1667641476-31602-3-git-send-email-vanekt@fbl.cz> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1667641476-31602-1-git-send-email-vanekt@fbl.cz> References: <1667641476-31602-1-git-send-email-vanekt@fbl.cz> X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_FAIL, SPF_HELO_NONE, 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.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Tomas Vanek Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" Arm M-profile security extension requires the dwarf2 unwinder to copy a value from a mode specific stack pointer to the general sp. We can achive this using DWARF2_FRAME_REG_SAVED_REG but it is complicated as the DWARF base register number has to be filled to reg->loc.reg (and dwarf2_frame_prev_register() in turn converts it back to the GDB register number). To avoid the useless conversion forth and back introduce a new item in enum dwarf2_frame_reg_rule for GDB internal use. DWARF2_FRAME_REG_SAVED_GDB_REG copies the value from a register indexed by GDB number. Signed-off-by: Tomas Vanek --- gdb/dwarf2/frame.c | 4 ++++ gdb/dwarf2/frame.h | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gdb/dwarf2/frame.c b/gdb/dwarf2/frame.c index 3f884ab..a0e554f 100644 --- a/gdb/dwarf2/frame.c +++ b/gdb/dwarf2/frame.c @@ -1166,6 +1166,10 @@ struct dwarf2_frame_cache (gdbarch, cache->reg[regnum].loc.reg); return frame_unwind_got_register (this_frame, regnum, realnum); + case DWARF2_FRAME_REG_SAVED_GDB_REG: + realnum = cache->reg[regnum].loc.reg; + return frame_unwind_got_register (this_frame, regnum, realnum); + case DWARF2_FRAME_REG_SAVED_EXP: addr = execute_stack_op (cache->reg[regnum].loc.exp.start, cache->reg[regnum].loc.exp.len, diff --git a/gdb/dwarf2/frame.h b/gdb/dwarf2/frame.h index 06c8a10..848e924 100644 --- a/gdb/dwarf2/frame.h +++ b/gdb/dwarf2/frame.h @@ -61,7 +61,10 @@ enum dwarf2_frame_reg_rule DWARF2_FRAME_REG_RA, /* Return Address. */ DWARF2_FRAME_REG_RA_OFFSET, /* Return Address with offset. */ DWARF2_FRAME_REG_CFA, /* Call Frame Address. */ - DWARF2_FRAME_REG_CFA_OFFSET /* Call Frame Address with offset. */ + DWARF2_FRAME_REG_CFA_OFFSET, /* Call Frame Address with offset. */ + DWARF2_FRAME_REG_SAVED_GDB_REG + /* As DWARF2_FRAME_REG_SAVED_REG, loc.reg contains GDB register number, + not DWARF register number. */ }; /* Register state. */