From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) by sourceware.org (Postfix) with ESMTPS id 623B63858D28 for ; Fri, 4 Feb 2022 08:41:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 623B63858D28 Received: by mail-wr1-x430.google.com with SMTP id m14so9854322wrg.12 for ; Fri, 04 Feb 2022 00:41:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6iUbrlz7+gIWiio5nulSMKnD8bl492bIBwZnSqprCGc=; b=r7FathemQQYwVYHhAE94/dUH14c6mFAi2rLaV4fKCDVy+C6/hqC9Xz1s1JKi3vgfCm MyxBV+r4y0BNPs3vHxRLaVV0n9GN/GLvWBgfo8adzL5iGH6huorPN6TasWkqO6Gjd3aj bhKgK7HtPoLuwOR+OToxb4HFWNfQyrU6Z/JmLxuqA2eAmgetJBA8SAYdh1yLsArIMNfE fZtZjFX7ov2Fc13YyzIYDDtusEgPgaxvgX+pkvATF5fUaZeU+AAfPL4PaD4rCKCh1bc6 CXJCoDtEVSmn0Xpp/95bENPjfq3j07HtC+YXq5pwl1WKGpraYmwuLb0CAgJ4MjQ9ILRX mn/g== X-Gm-Message-State: AOAM530oVpShZySbMLxrDGpWm0k2U25CS75bWpHzblTlM95xq+R7PC17 hDmeC38cgzYmSf2r9dMf0l8CNP7t15jYpA== X-Google-Smtp-Source: ABdhPJysfcpjiB9cfTD1PkdLVjSp/tV3yevrNJ++Wzbuc8T3VsSRNAKxn2vdwCKVXQ0/i7Veq2Mb3A== X-Received: by 2002:a5d:5887:: with SMTP id n7mr1540611wrf.116.1643964118444; Fri, 04 Feb 2022 00:41:58 -0800 (PST) Received: from babel.clyon.hd.free.fr ([2a01:e0a:203:b210:afd3:bde6:6149:fc73]) by smtp.gmail.com with ESMTPSA id y7sm1198617wrr.74.2022.02.04.00.41.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Feb 2022 00:41:58 -0800 (PST) From: christophe.lyon.oss@gmail.com X-Google-Original-From: christophe.lyon@gmail.com To: gdb-patches@sourceware.org Cc: torbjorn.svensson@st.com, Christophe Lyon Subject: [PATCH v3 1/5] gdb/arm: Fix prologue analysis to support vpush Date: Fri, 4 Feb 2022 09:41:47 +0100 Message-Id: <20220204084151.14480-2-christophe.lyon@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220204084151.14480-1-christophe.lyon@gmail.com> References: <20220204084151.14480-1-christophe.lyon@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , X-List-Received-Date: Fri, 04 Feb 2022 08:42:01 -0000 From: Christophe Lyon While working on adding support for Non-secure/Secure modes unwinding, I noticed that the prologue analysis lacked support for vpush, which is used for instance in the CMSE stub routine. This patch updates thumb_analyze_prologue accordingly, adding support for vpush of D-registers. Signed-off-by: Christophe Lyon --- gdb/arm-tdep.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 7495434484e..7d52d2d78f6 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -896,6 +896,31 @@ thumb_analyze_prologue (struct gdbarch *gdbarch, regs[bits (insn, 0, 3)] = addr; } + else if ((insn & 0xff20) == 0xed20 /* vstmdb Rn{!}, { D-registers} */ + && (inst2 & 0x0f00) == 0x0b00/* (aka vpush) */ + && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM)) + { + /* Address SP points to. */ + pv_t addr = regs[bits (insn, 0, 3)]; + + /* Number of registers saved. */ + int number = bits (inst2, 0, 7) >> 1; + + if (stack.store_would_trash (addr)) + break; + + /* Calculate offsets of saved registers. */ + for (; number > 0; number--) + { + addr = pv_add_constant (addr, -8); + stack.store (addr, 8, pv_register (ARM_D0_REGNUM + number, 0)); + } + + /* Writeback SP if needed. */ + if (insn & 0x0020) + regs[bits (insn, 0, 3)] = addr; + } + else if ((insn & 0xff50) == 0xe940 /* strd Rt, Rt2, [Rn, #+/-imm]{!} */ && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM)) -- 2.25.1