Page MenuHomeFreeBSD

D15359.diff
No OneTemporary

D15359.diff

Index: head/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c
===================================================================
--- head/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c
+++ head/sys/cddl/dev/dtrace/aarch64/dtrace_isa.c
@@ -70,7 +70,7 @@
{
struct unwind_state state;
int scp_offset;
- register_t sp;
+ register_t sp, fp;
int depth;
depth = 0;
@@ -88,11 +88,15 @@
state.pc = (uint64_t)dtrace_getpcstack;
while (depth < pcstack_limit) {
- if (unwind_frame(&state))
- break;
-
if (!INKERNEL(state.pc) || !INKERNEL(state.fp))
break;
+
+ fp = state.fp;
+ state.sp = fp + 0x10;
+ /* FP to previous frame (X29) */
+ state.fp = *(register_t *)(fp);
+ /* LR (X30) */
+ state.pc = *(register_t *)(fp + 8) - 4;
/*
* NB: Unlike some other architectures, we don't need to

File Metadata

Mime Type
text/plain
Expires
Sun, Jun 28, 3:23 PM (3 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34437681
Default Alt Text
D15359.diff (802 B)

Event Timeline