From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [185.132.182.106]) by sourceware.org (Postfix) with ESMTPS id B79BC389838B for ; Thu, 6 Oct 2022 14:16:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B79BC389838B Received: from pps.filterd (m0241204.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 296DaJk2023818; Thu, 6 Oct 2022 16:16:18 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3jxcw2emq7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 06 Oct 2022 16:16:18 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id B9444100034; Thu, 6 Oct 2022 16:16:13 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node3.st.com [10.75.129.71]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 96A4322F7B3; Thu, 6 Oct 2022 16:16:13 +0200 (CEST) Received: from jkgcxl0002.jkg.st.com (10.75.127.118) by SHFDAG1NODE3.st.com (10.75.129.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.2375.31; Thu, 6 Oct 2022 16:16:10 +0200 From: =?UTF-8?q?Torbj=C3=B6rn=20SVENSSON?= To: Subject: [PATCH] gdb/arm: Stop unwinding on error, but do not assert Date: Thu, 6 Oct 2022 16:15:56 +0200 Message-ID: <20221006141556.300733-1-torbjorn.svensson@foss.st.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-Originating-IP: [10.75.127.118] X-ClientProxiedBy: GPXDAG2NODE4.st.com (10.75.127.68) To SHFDAG1NODE3.st.com (10.75.129.71) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-10-06_02,2022-10-06_02,2022-06-22_01 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, 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.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Oct 2022 14:16:29 -0000 When it's impossible to read the FPCCR and XPSR, the unwinding is unpredictable as the it's not possible to determine the correct frame size or padding. The only sane thing to do in this condition is to stop the unwinding. Without this patch, gdb would assert if this errornous state was detected. Signed-off-by: Torbjörn SVENSSON --- gdb/arm-tdep.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index d357066653b..ce5c8c23fd4 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -3591,9 +3591,10 @@ arm_m_exception_cache (struct frame_info *this_frame) ULONGEST fpcar; /* Read FPCCR register. */ - gdb_assert (safe_read_memory_unsigned_integer (FPCCR, - ARM_INT_REGISTER_SIZE, - byte_order, &fpccr)); + if (!safe_read_memory_unsigned_integer (FPCCR, ARM_INT_REGISTER_SIZE, + byte_order, &fpccr)) + error (_("Could not fetch required FPCCR content. Further unwind " + "is impossible.")); /* Read FPCAR register. */ if (!safe_read_memory_unsigned_integer (FPCAR, ARM_INT_REGISTER_SIZE, @@ -3669,9 +3670,11 @@ arm_m_exception_cache (struct frame_info *this_frame) aligner between the top of the 32-byte stack frame and the previous context's stack pointer. */ ULONGEST xpsr; - gdb_assert (safe_read_memory_unsigned_integer (cache->saved_regs[ - ARM_PS_REGNUM].addr (), 4, - byte_order, &xpsr)); + if (!safe_read_memory_unsigned_integer (cache->saved_regs[ ARM_PS_REGNUM] + .addr (), 4, byte_order, &xpsr)) + error (_("Could not fetch required XPSR content. Further unwind is " + "impossible.")); + if (bit (xpsr, 9) != 0) { CORE_ADDR new_sp = arm_cache_get_prev_sp_value (cache, tdep) + 4; -- 2.25.1