X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/b60166b327a9108b07e3069fa6568a451529ffd9..refs/heads/feat/user_model:/lunaix-os/kernel/debug/trace.c diff --git a/lunaix-os/kernel/debug/trace.c b/lunaix-os/kernel/debug/trace.c index 1e5c44a..173b1cd 100644 --- a/lunaix-os/kernel/debug/trace.c +++ b/lunaix-os/kernel/debug/trace.c @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -7,6 +6,7 @@ #include #include +#include #include @@ -23,11 +23,12 @@ trace_modksyms_init(struct boot_handoff* bhctx) for (size_t i = 0; i < bhctx->mods.mods_num; i++) { struct boot_modent* mod = &bhctx->mods.entries[i]; if (streq(mod->str, "modksyms")) { - assert(PG_ALIGNED(mod->start)); + assert(!va_offset(mod->start)); - ptr_t end = ROUNDUP(mod->end, PG_SIZE); - ptr_t ksym_va = - (ptr_t)vmap(mod->start, (end - mod->start), PG_PREM_R, 0); + pte_t pte = mkpte(mod->start, KERNEL_DATA); + size_t n = pfn(mod->end) - pfn(mod->start); + + ptr_t ksym_va = vmap_leaf_ptes(pte, n); assert(ksym_va); trace_ctx.ksym_table = (struct ksyms*)ksym_va; @@ -43,7 +44,7 @@ trace_sym_lookup(ptr_t addr) int i = c - 1, j = 0, m = 0; - if (addr > ksent[i].pc || addr < ksent[j].pc || addr < KERNEL_EXEC) { + if (addr > ksent[i].pc || addr < ksent[j].pc || !kernel_addr(addr)) { return NULL; } @@ -79,7 +80,9 @@ ksym_getstr(struct ksym_entry* sym) static inline bool valid_fp(ptr_t ptr) { ptr_t start = ROUNDUP(current_thread->kstack - KSTACK_SIZE, MEM_PAGE); - return start < ptr && ptr < current_thread->kstack; + + return (start < ptr && ptr < current_thread->kstack) + || arch_valid_fp(ptr); } int @@ -147,7 +150,12 @@ trace_printstack_of(ptr_t fp) void trace_printstack() { - trace_printstack_of(abi_get_callframe()); + if (current_thread) { + trace_printstack_isr(current_thread->intr_ctx); + } + else { + trace_printstack_of(abi_get_callframe()); + } } static void @@ -200,4 +208,6 @@ trace_printstack_isr(const isr_param* isrm) p = p->execp->saved_prev_ctx; } + + DEBUG("----- [trace end] -----\n"); } \ No newline at end of file