From c0160faa42cf57e95f74806d9a7102360da0d865 Mon Sep 17 00:00:00 2001 From: tracer-ysyx Date: Wed, 20 Mar 2024 17:30:12 +0800 Subject: [PATCH] =?UTF-8?q?>=20compile=20NEMU=20ysyx=5F22040000=20?= =?UTF-8?q?=E6=9D=8E=E5=BF=83=E6=9D=A8=20Linux=20calcite=206.6.19=20#1-Nix?= =?UTF-8?q?OS=20SMP=20PREEMPT=5FDYNAMIC=20Fri=20Mar=20=201=2012:35:11=20UT?= =?UTF-8?q?C=202024=20x86=5F64=20GNU/Linux=20=2017:30:12=20=20up=20=20=204?= =?UTF-8?q?:36,=20=202=20users,=20=20load=20average:=200.38,=200.28,=200.2?= =?UTF-8?q?5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nemu/include/func.h | 1 + nemu/src/utils/{elf-parser.c => ftrace.c} | 23 ++++++++--------------- 2 files changed, 9 insertions(+), 15 deletions(-) rename nemu/src/utils/{elf-parser.c => ftrace.c} (86%) diff --git a/nemu/include/func.h b/nemu/include/func.h index 135ddcc..125b5f0 100644 --- a/nemu/include/func.h +++ b/nemu/include/func.h @@ -10,6 +10,7 @@ typedef struct { } func_t; func_t *func_table; +const char *get_func_name(vaddr_t addr); #endif #endif \ No newline at end of file diff --git a/nemu/src/utils/elf-parser.c b/nemu/src/utils/ftrace.c similarity index 86% rename from nemu/src/utils/elf-parser.c rename to nemu/src/utils/ftrace.c index 63a37d7..5d1c780 100644 --- a/nemu/src/utils/elf-parser.c +++ b/nemu/src/utils/ftrace.c @@ -23,6 +23,7 @@ const char *get_func_name(vaddr_t addr) { if(func_table[mid].start <= addr) l = mid + 1; else r = mid - 1; } + if(func_table[l].start + func_table[l].len < addr) return "???"; return l == 0 ? "???" : func_table[l - 1].name; } @@ -78,24 +79,16 @@ void init_elf(const char *path) { } } qsort(func_table, func_table_len, sizeof(func_t), cmp_func_t); - for(int i = 0; i < func_table_len; i++) { - func_t *f = &func_table[i]; - printf("%s: 0x%x - 0x%x\n", f->name, f->start, f->start + f->len); - } - printf("%s\n", get_func_name(0x80000010)); - printf("%s\n", get_func_name(0x80000012)); - printf("%s\n", get_func_name(0x7fffffff)); - printf("%s\n", get_func_name(0x80000000)); success = true; failed: - for(int i = 0; i < func_table_len; i++) { - func_t *f = &func_table[i]; - if(f->name) { free(f->name); } - } - free(func_table); - free(sym); +// for(int i = 0; i < func_table_len; i++) { +// func_t *f = &func_table[i]; +// if(f->name) { free(f->name); } +// } +// free(func_table); +// free(sym); failed_shstrtab: - free(shstrtab); +// free(shstrtab); failed_nosym: if(success) return; else Error("Failed reading elf file");