| #include <assert.h> |
| #include <kdebug.h> |
| #include <pmap.h> |
| #include <process.h> |
| #include <string.h> |
| |
| /* Here's the old backtrace, remove it once gen_backtrace is done: */ |
| #if 0 |
| void backtrace(void) |
| { |
| void **fp; |
| asm volatile ("move %0, s0" : "=r"(fp)); |
| |
| for (int i = 0; ; i++) { |
| void *pc = fp[-1], *sp = fp[-2]; |
| printk("[%d] pc %p sp %p\n", i, pc, sp); |
| if (pc == 0 || (void**)sp < fp) |
| break; |
| fp = (void**)sp; |
| } |
| } |
| #endif |
| |
| void gen_backtrace(void (*pfunc)(void *, const char *), void *opaque) |
| { |
| printk("\n\tTODO: %s on riscv\n\n", __func__); |
| } |
| |
| /* can either implement these, or use the x86 ones globally and limit the |
| * arch-indep stuff. */ |
| size_t backtrace_list(uintptr_t pc, uintptr_t fp, uintptr_t *pcs, |
| size_t nr_slots) |
| { |
| printk("\n\tTODO: %s on riscv\n\n", __func__); |
| return 0; |
| } |
| |
| size_t backtrace_user_list(uintptr_t pc, uintptr_t fp, uintptr_t *pcs, |
| size_t nr_slots) |
| { |
| printk("\n\tTODO: %s on riscv\n\n", __func__); |
| return 0; |
| } |