Page MenuHomeFreeBSD

D25996.diff
No OneTemporary

D25996.diff

Index: head/sys/riscv/riscv/stack_machdep.c
===================================================================
--- head/sys/riscv/riscv/stack_machdep.c
+++ head/sys/riscv/riscv/stack_machdep.c
@@ -47,15 +47,18 @@
#include <machine/stack.h>
static void
-stack_capture(struct stack *st, struct unwind_state *frame)
+stack_capture(struct thread *td, struct stack *st, struct unwind_state *frame)
{
stack_zero(st);
while (1) {
+ if ((vm_offset_t)frame->fp < td->td_kstack ||
+ (vm_offset_t)frame->fp >= td->td_kstack +
+ td->td_kstack_pages * PAGE_SIZE)
+ break;
unwind_frame(frame);
- if (!INKERNEL((vm_offset_t)frame->fp) ||
- !INKERNEL((vm_offset_t)frame->pc))
+ if (!INKERNEL((vm_offset_t)frame->pc))
break;
if (stack_put(st, frame->pc) == -1)
break;
@@ -78,7 +81,7 @@
frame.fp = td->td_pcb->pcb_s[0];
frame.pc = td->td_pcb->pcb_ra;
- stack_capture(st, &frame);
+ stack_capture(td, st, &frame);
return (0);
}
@@ -94,5 +97,5 @@
frame.fp = (uintptr_t)__builtin_frame_address(0);
frame.pc = (uintptr_t)stack_save;
- stack_capture(st, &frame);
+ stack_capture(curthread, st, &frame);
}

File Metadata

Mime Type
text/plain
Expires
Mon, Jun 29, 4:15 AM (9 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
34452546
Default Alt Text
D25996.diff (1 KB)

Event Timeline