> compile NEMU

ysyx_22040000 李心杨
Linux calcite 6.6.19 #1-NixOS SMP PREEMPT_DYNAMIC Fri Mar  1 12:35:11 UTC 2024 x86_64 GNU/Linux
 14:34:01  up 2 days  4:10,  2 users,  load average: 0.02, 0.25, 0.30
This commit is contained in:
tracer-ysyx 2024-03-15 14:34:01 +08:00 committed by xinyangli
parent cbb58f2265
commit 0df2e277fb

View file

@ -28,18 +28,19 @@ void init_elf(const char *path) {
} }
int sym_length = symtab->sh_entsize / sizeof(Elf32_Sym); int sym_length = symtab->sh_size / sizeof(Elf32_Sym);
Elf32_Sym *sym = calloc(sym_length, sizeof(Elf32_Sym)); Elf32_Sym *sym = calloc(sym_length, sizeof(Elf32_Sym));
FAILED_GOTO(failed, fseek(elf_file, symtab->sh_offset, SEEK_SET) != 0); FAILED_GOTO(failed, fseek(elf_file, symtab->sh_offset, SEEK_SET) != 0);
FAILED_GOTO(failed, fread(sym, sizeof(Elf32_Sym), sym_length, elf_file) <= 0); FAILED_GOTO(failed, fread(sym, sizeof(Elf32_Sym), sym_length, elf_file) <= 0);
for(int j = 0; j < sym_length; j++) { for(int j = 0; j < sym_length; j++) {
if(ELF32_ST_TYPE(sym[j].st_info) != STT_FUNC) continue; if(ELF32_ST_TYPE(sym[j].st_info) != STT_FUNC) continue;
// Only read function type symbol // Only read function type symbol
char func[30] = ""; char func[30];
FAILED_GOTO(failed, fseek(elf_file, sym[j].st_name + strtab->sh_offset, SEEK_SET) != 0); FAILED_GOTO(failed, fseek(elf_file, sym[j].st_name + strtab->sh_offset, SEEK_SET) != 0);
FAILED_GOTO(failed, fgets(func, 30, elf_file) <= 0); FAILED_GOTO(failed, fgets(func, 30, elf_file) <= 0);
puts(func); puts(func);
} }
free(sym);
return; return;
failed: failed:
free(sym); free(sym);