MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / dump_regs

Function dump_regs

libcpu/risc-v/common64/trap.c:33–99  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31#include <rtdbg.h>
32
33void dump_regs(struct rt_hw_stack_frame *regs)
34{
35 rt_kprintf("--------------Dump Registers-----------------\n");
36
37 rt_kprintf("Function Registers:\n");
38 rt_kprintf("\tra(x1) = %p\tuser_sp = %p\n", regs->ra,
39 regs->user_sp_exc_stack);
40 rt_kprintf("\tgp(x3) = %p\ttp(x4) = %p\n", regs->gp, regs->tp);
41 rt_kprintf("Temporary Registers:\n");
42 rt_kprintf("\tt0(x5) = %p\tt1(x6) = %p\n", regs->t0, regs->t1);
43 rt_kprintf("\tt2(x7) = %p\n", regs->t2);
44 rt_kprintf("\tt3(x28) = %p\tt4(x29) = %p\n", regs->t3, regs->t4);
45 rt_kprintf("\tt5(x30) = %p\tt6(x31) = %p\n", regs->t5, regs->t6);
46 rt_kprintf("Saved Registers:\n");
47 rt_kprintf("\ts0/fp(x8) = %p\ts1(x9) = %p\n", regs->s0_fp, regs->s1);
48 rt_kprintf("\ts2(x18) = %p\ts3(x19) = %p\n", regs->s2, regs->s3);
49 rt_kprintf("\ts4(x20) = %p\ts5(x21) = %p\n", regs->s4, regs->s5);
50 rt_kprintf("\ts6(x22) = %p\ts7(x23) = %p\n", regs->s6, regs->s7);
51 rt_kprintf("\ts8(x24) = %p\ts9(x25) = %p\n", regs->s8, regs->s9);
52 rt_kprintf("\ts10(x26) = %p\ts11(x27) = %p\n", regs->s10, regs->s11);
53 rt_kprintf("Function Arguments Registers:\n");
54 rt_kprintf("\ta0(x10) = %p\ta1(x11) = %p\n", regs->a0, regs->a1);
55 rt_kprintf("\ta2(x12) = %p\ta3(x13) = %p\n", regs->a2, regs->a3);
56 rt_kprintf("\ta4(x14) = %p\ta5(x15) = %p\n", regs->a4, regs->a5);
57 rt_kprintf("\ta6(x16) = %p\ta7(x17) = %p\n", regs->a6, regs->a7);
58 rt_kprintf("sstatus = %p\n", regs->sstatus);
59 rt_kprintf("\t%s\n", (regs->sstatus & SSTATUS_SIE)
60 ? "Supervisor Interrupt Enabled"
61 : "Supervisor Interrupt Disabled");
62 rt_kprintf("\t%s\n", (regs->sstatus & SSTATUS_SPIE)
63 ? "Last Time Supervisor Interrupt Enabled"
64 : "Last Time Supervisor Interrupt Disabled");
65 rt_kprintf("\t%s\n", (regs->sstatus & SSTATUS_SPP)
66 ? "Last Privilege is Supervisor Mode"
67 : "Last Privilege is User Mode");
68 rt_kprintf("\t%s\n", (regs->sstatus & SSTATUS_SUM)
69 ? "Permit to Access User Page"
70 : "Not Permit to Access User Page");
71 rt_kprintf("\t%s\n", (regs->sstatus & (1 << 19))
72 ? "Permit to Read Executable-only Page"
73 : "Not Permit to Read Executable-only Page");
74 rt_ubase_t satp_v = read_csr(satp);
75 rt_kprintf("satp = %p\n", satp_v);
76 rt_kprintf("\tCurrent Page Table(Physical) = %p\n",
77 __MASKVALUE(satp_v, __MASK(44)) << PAGE_OFFSET_BIT);
78 rt_kprintf("\tCurrent ASID = %p\n", __MASKVALUE(satp_v >> 44, __MASK(16))
79 << PAGE_OFFSET_BIT);
80 const char *mode_str = "Unknown Address Translation/Protection Mode";
81
82 switch (__MASKVALUE(satp_v >> 60, __MASK(4)))
83 {
84 case 0:
85 mode_str = "No Address Translation/Protection Mode";
86 break;
87
88 case 8:
89 mode_str = "Page-based 39-bit Virtual Addressing Mode";
90 break;

Callers 3

handle_userFunction · 0.85
handle_nested_trap_panicFunction · 0.85
handle_trapFunction · 0.85

Calls 1

rt_kprintfFunction · 0.85

Tested by

no test coverage detected