Use uintptr_t instead of uint64_t for pointers in stack frames.

Reviewed by:	mhorne
Obtained from:	CheriBSD
Sponsored by:	DARPA
Differential Revision:	https://reviews.freebsd.org/D25995
This commit is contained in:
John Baldwin 2020-08-12 20:29:49 +00:00
parent 97dc595da2
commit 367de39efa
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=364180
4 changed files with 18 additions and 18 deletions

View File

@ -41,9 +41,9 @@
(va) <= VM_MAX_KERNEL_ADDRESS) (va) <= VM_MAX_KERNEL_ADDRESS)
struct unwind_state { struct unwind_state {
uint64_t fp; uintptr_t fp;
uint64_t sp; uintptr_t sp;
uint64_t pc; uintptr_t pc;
}; };
int unwind_frame(struct unwind_state *); int unwind_frame(struct unwind_state *);

View File

@ -108,9 +108,9 @@ db_stack_trace_cmd(struct unwind_state *frame)
db_printf("--- exception %ld, tval = %#lx\n", db_printf("--- exception %ld, tval = %#lx\n",
tf->tf_scause & EXCP_MASK, tf->tf_scause & EXCP_MASK,
tf->tf_stval); tf->tf_stval);
frame->sp = (uint64_t)tf->tf_sp; frame->sp = tf->tf_sp;
frame->fp = (uint64_t)tf->tf_s[0]; frame->fp = tf->tf_s[0];
frame->pc = (uint64_t)tf->tf_sepc; frame->pc = tf->tf_sepc;
if (!INKERNEL(frame->fp)) if (!INKERNEL(frame->fp))
break; break;
continue; continue;
@ -132,9 +132,9 @@ db_trace_thread(struct thread *thr, int count)
ctx = kdb_thr_ctx(thr); ctx = kdb_thr_ctx(thr);
frame.sp = (uint64_t)ctx->pcb_sp; frame.sp = ctx->pcb_sp;
frame.fp = (uint64_t)ctx->pcb_s[0]; frame.fp = ctx->pcb_s[0];
frame.pc = (uint64_t)ctx->pcb_ra; frame.pc = ctx->pcb_ra;
db_stack_trace_cmd(&frame); db_stack_trace_cmd(&frame);
return (0); return (0);
} }
@ -143,12 +143,12 @@ void
db_trace_self(void) db_trace_self(void)
{ {
struct unwind_state frame; struct unwind_state frame;
uint64_t sp; uintptr_t sp;
__asm __volatile("mv %0, sp" : "=&r" (sp)); __asm __volatile("mv %0, sp" : "=&r" (sp));
frame.sp = sp; frame.sp = sp;
frame.fp = (uint64_t)__builtin_frame_address(0); frame.fp = (uintptr_t)__builtin_frame_address(0);
frame.pc = (uint64_t)db_trace_self; frame.pc = (uintptr_t)db_trace_self;
db_stack_trace_cmd(&frame); db_stack_trace_cmd(&frame);
} }

View File

@ -86,13 +86,13 @@ void
stack_save(struct stack *st) stack_save(struct stack *st)
{ {
struct unwind_state frame; struct unwind_state frame;
uint64_t sp; uintptr_t sp;
__asm __volatile("mv %0, sp" : "=&r" (sp)); __asm __volatile("mv %0, sp" : "=&r" (sp));
frame.sp = sp; frame.sp = sp;
frame.fp = (uint64_t)__builtin_frame_address(0); frame.fp = (uintptr_t)__builtin_frame_address(0);
frame.pc = (uint64_t)stack_save; frame.pc = (uintptr_t)stack_save;
stack_capture(st, &frame); stack_capture(st, &frame);
} }

View File

@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
int int
unwind_frame(struct unwind_state *frame) unwind_frame(struct unwind_state *frame)
{ {
uint64_t fp; uintptr_t fp;
fp = frame->fp; fp = frame->fp;
@ -50,8 +50,8 @@ unwind_frame(struct unwind_state *frame)
return (-1); return (-1);
frame->sp = fp; frame->sp = fp;
frame->fp = *(uint64_t *)(fp - 16); frame->fp = ((uintptr_t *)fp)[-2];
frame->pc = *(uint64_t *)(fp - 8) - 4; frame->pc = ((uintptr_t *)fp)[-1] - 4;
return (0); return (0);
} }