X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c166bd62fbb907f95f79f621e2a2fb4fdde08e01..9209afa5f69cffa48a04c4a9066357d5cba75926:/lunaix-os/kernel/debug/trace.c?ds=sidebyside diff --git a/lunaix-os/kernel/debug/trace.c b/lunaix-os/kernel/debug/trace.c index 173b1cd..0a70de3 100644 --- a/lunaix-os/kernel/debug/trace.c +++ b/lunaix-os/kernel/debug/trace.c @@ -14,32 +14,21 @@ LOG_MODULE("TRACE") +weak struct ksyms __lunaix_ksymtable[] = { }; +extern struct ksyms __lunaix_ksymtable[]; + static struct trace_context trace_ctx; void trace_modksyms_init(struct boot_handoff* bhctx) { - struct boot_modent* modents = bhctx->mods.entries; - 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(!va_offset(mod->start)); - - 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; - } - } + trace_ctx.ksym_table = __lunaix_ksymtable; } struct ksym_entry* trace_sym_lookup(ptr_t addr) { - int c = trace_ctx.ksym_table->ksym_count; + unsigned long c = trace_ctx.ksym_table->ksym_count; struct ksym_entry* ksent = trace_ctx.ksym_table->syms; int i = c - 1, j = 0, m = 0; @@ -74,8 +63,7 @@ ksym_getstr(struct ksym_entry* sym) return "???"; } - return (char*)((ptr_t)trace_ctx.ksym_table + - trace_ctx.ksym_table->ksym_label_off + sym->label_off); + return sym->label; } static inline bool valid_fp(ptr_t ptr) { @@ -123,9 +111,9 @@ static inline void trace_print_code_entry(ptr_t sym_pc, ptr_t inst_pc, char* sym) { if (sym_pc) { - DEBUG("%p+%p: %s", sym_pc, inst_pc - sym_pc, sym); + DEBUG("%s+%p", sym, inst_pc - sym_pc); } else { - DEBUG("%p+%p: %s", inst_pc, sym_pc, sym); + DEBUG("%s [%p]", sym, sym_pc); } }