From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 88FF33858036; Mon, 13 Dec 2021 22:00:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 88FF33858036 From: "fredrik.hederstierna@securitas-direct.com" To: gdb-prs@sourceware.org Subject: [Bug gdb/28549] ARM/Cortex-M: improper stack unwinding when the target is in lockup state Date: Mon, 13 Dec 2021 22:00:38 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gdb X-Bugzilla-Component: gdb X-Bugzilla-Version: 9.2 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: fredrik.hederstierna@securitas-direct.com X-Bugzilla-Status: WAITING X-Bugzilla-Resolution: X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: luis.machado at linaro dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gdb-prs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-prs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Dec 2021 22:00:38 -0000 https://sourceware.org/bugzilla/show_bug.cgi?id=3D28549 --- Comment #22 from Fredrik Hederstierna --- Something like this (sketch not compiled): @@ -2982,6 +2989,7 @@ arm_m_exception_cache (struct frame_info *this_frame) struct gdbarch *gdbarch =3D get_frame_arch (this_frame); enum bfd_endian byte_order =3D gdbarch_byte_order (gdbarch); struct arm_prologue_cache *cache; + CORE_ADDR pc; CORE_ADDR lr; CORE_ADDR sp; CORE_ADDR unwound_sp; @@ -2998,12 +3006,26 @@ arm_m_exception_cache (struct frame_info *this_fram= e) describes which bits in LR that define which stack was used prior to the exception and if FPU is used (causing extended stack frame). = */ + pc =3D get_frame_register_unsigned (this_frame, ARM_PC_REGNUM); lr =3D get_frame_register_unsigned (this_frame, ARM_LR_REGNUM); sp =3D get_frame_register_unsigned (this_frame, ARM_SP_REGNUM); /* Check EXC_RETURN indicator bits. */ exc_return =3D (((lr >> 28) & 0xf) =3D=3D 0xf); + /* Check if the core is in Lockup state. */ + if (exc_return && (pc =3D=3D 0xFFFFFFFE)) + { + /* Thread (process) stack could not be fetched in Lockup, + give warning and exit. */ + + warning (_("no thread stack unwinding supported in Lockup.")); + + /* Terminate any further stack unwinding by refer to self. */ + cache->prev_sp =3D sp; + return cache; + } + /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used. */ process_stack_used =3D ((lr & (1 << 2)) !=3D 0); if (exc_return && process_stack_used) --=20 You are receiving this mail because: You are on the CC list for the bug.=