Author: jhb
Date: Wed Aug 12 20:29:49 2020
New Revision: 364180
URL: https://svnweb.freebsd.org/changeset/base/364180

Log:
  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

Modified:
  head/sys/riscv/include/stack.h
  head/sys/riscv/riscv/db_trace.c
  head/sys/riscv/riscv/stack_machdep.c
  head/sys/riscv/riscv/unwind.c

Modified: head/sys/riscv/include/stack.h
==============================================================================
--- head/sys/riscv/include/stack.h      Wed Aug 12 20:05:43 2020        
(r364179)
+++ head/sys/riscv/include/stack.h      Wed Aug 12 20:29:49 2020        
(r364180)
@@ -41,9 +41,9 @@
                         (va) <= VM_MAX_KERNEL_ADDRESS)
 
 struct unwind_state {
-       uint64_t fp;
-       uint64_t sp;
-       uint64_t pc;
+       uintptr_t fp;
+       uintptr_t sp;
+       uintptr_t pc;
 };
 
 int unwind_frame(struct unwind_state *);

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

Modified: head/sys/riscv/riscv/stack_machdep.c
==============================================================================
--- head/sys/riscv/riscv/stack_machdep.c        Wed Aug 12 20:05:43 2020        
(r364179)
+++ head/sys/riscv/riscv/stack_machdep.c        Wed Aug 12 20:29:49 2020        
(r364180)
@@ -86,13 +86,13 @@ void
 stack_save(struct stack *st)
 {
        struct unwind_state frame;
-       uint64_t sp;
+       uintptr_t sp;
 
        __asm __volatile("mv %0, sp" : "=&r" (sp));
 
        frame.sp = sp;
-       frame.fp = (uint64_t)__builtin_frame_address(0);
-       frame.pc = (uint64_t)stack_save;
+       frame.fp = (uintptr_t)__builtin_frame_address(0);
+       frame.pc = (uintptr_t)stack_save;
 
        stack_capture(st, &frame);
 }

Modified: head/sys/riscv/riscv/unwind.c
==============================================================================
--- head/sys/riscv/riscv/unwind.c       Wed Aug 12 20:05:43 2020        
(r364179)
+++ head/sys/riscv/riscv/unwind.c       Wed Aug 12 20:29:49 2020        
(r364180)
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
 int
 unwind_frame(struct unwind_state *frame)
 {
-       uint64_t fp;
+       uintptr_t fp;
 
        fp = frame->fp;
 
@@ -50,8 +50,8 @@ unwind_frame(struct unwind_state *frame)
                return (-1);
 
        frame->sp = fp;
-       frame->fp = *(uint64_t *)(fp - 16);
-       frame->pc = *(uint64_t *)(fp - 8) - 4;
+       frame->fp = ((uintptr_t *)fp)[-2];
+       frame->pc = ((uintptr_t *)fp)[-1] - 4;
 
        return (0);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to