git: 2b8c4137d497 - main - arm64: fix stack unwinding past exception handlers
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 10 May 2023 12:06:53 UTC
The branch main has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=2b8c4137d49762587c946a67840df0bfd1ee2f2f
commit 2b8c4137d49762587c946a67840df0bfd1ee2f2f
Author: Zachary Leaf <zachary.leaf@arm.com>
AuthorDate: 2023-05-09 16:04:44 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2023-05-10 11:54:54 +0000
arm64: fix stack unwinding past exception handlers
Commit 281402e0a563 ("arm64: Shave off two instructions in exceptions")
removed the instruction that set the frame pointer (x29) as it appeared
to be unused.
The frame pointer is used in arm64/db_trace.c:db_stack_trace_cmd() when
unwinding state, and hence still needs to be set.
Add back the instruction to save_registers to properly update frame
pointer.
Reported by: andrew
Sponsored by: Arm Ltd
---
sys/arm64/arm64/exception.S | 1 +
1 file changed, 1 insertion(+)
diff --git a/sys/arm64/arm64/exception.S b/sys/arm64/arm64/exception.S
index c82b8307ab17..a568d1264b53 100644
--- a/sys/arm64/arm64/exception.S
+++ b/sys/arm64/arm64/exception.S
@@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$");
.endm
.macro save_registers el
+ add x29, sp, #(TF_SIZE)
.if \el == 0
#if defined(PERTHREAD_SSP)
/* Load the SSP canary to sp_el0 */