From 8e03d125cef630d4f9751888c9ced8075e0942b8 Mon Sep 17 00:00:00 2001 From: tracer-ysyx Date: Wed, 20 Mar 2024 16:12:38 +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=2016:12:38=20=20up=20=20=203?= =?UTF-8?q?:18,=20=202=20users,=20=20load=20average:=200.31,=200.30,=200.3?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nemu/src/utils/elf-parser.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nemu/src/utils/elf-parser.c b/nemu/src/utils/elf-parser.c index 48f1f46..63a37d7 100644 --- a/nemu/src/utils/elf-parser.c +++ b/nemu/src/utils/elf-parser.c @@ -16,14 +16,14 @@ static int cmp_func_t(const void *a, const void *b) { return ((func_t *)a)->start > ((func_t *)b)->start; } -func_t *get_func(vaddr_t addr) { +const char *get_func_name(vaddr_t addr) { int l = 0, r = func_table_len - 1; while(l <= r) { int mid = (l + r) / 2; if(func_table[mid].start <= addr) l = mid + 1; else r = mid - 1; } - return &func_table[l]; + return l == 0 ? "???" : func_table[l - 1].name; } void init_elf(const char *path) { @@ -82,10 +82,10 @@ void init_elf(const char *path) { 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(0x80000010)->name); - printf("%s\n", get_func(0x80000012)->name); - printf("%s\n", get_func(0x7fffffff)->name); - printf("%s\n", get_func(0x80000000)->name); + 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++) {