> compile NEMU

221220000 张三
Linux zzy 5.15.146.1-microsoft-standard-WSL2 #1 SMP Thu Jan 11 04:09:03 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
 23:53:03 up 5 days, 12:01,  3 users,  load average: 0.83, 0.74, 0.59
This commit is contained in:
tracer-ics2023
2024-09-10 23:53:04 +08:00
committed by zzy
parent b63367cc4f
commit 6bea51e595

View File

@ -77,13 +77,13 @@ void init_elf(const char* elf_file) {
// get symbol table and string table // get symbol table and string table
Elf_Sym *psymt = NULL; Elf_Sym *psymt = NULL;
char* pstrt = NULL; char* pstrt = NULL;
size_t symt_sz = 0, strt_sz = 0; size_t symt_len = 0, strt_sz = 0;
for (int i = 0; i < ehdr.e_shnum; i++) { for (int i = 0; i < ehdr.e_shnum; i++) {
if (shdr[i].sh_type == SHT_SYMTAB) { if (shdr[i].sh_type == SHT_SYMTAB) {
fseek(fp, shdr[i].sh_offset, SEEK_SET); fseek(fp, shdr[i].sh_offset, SEEK_SET);
assert(shdr[i].sh_size % sizeof(Elf_Sym) == 0); assert(shdr[i].sh_size % sizeof(Elf_Sym) == 0);
symt_sz = shdr[i].sh_entsize; symt_len = shdr[i].sh_entsize;
Elf_Sym sym[symt_sz]; Elf_Sym sym[symt_len];
ret = fread(sym, shdr[i].sh_size, 1, fp); ret = fread(sym, shdr[i].sh_size, 1, fp);
assert(ret == 1); assert(ret == 1);
psymt = sym; psymt = sym;
@ -99,7 +99,8 @@ void init_elf(const char* elf_file) {
// filling ftrace // filling ftrace
assert(pstrt != NULL && pstrt != NULL); assert(pstrt != NULL && pstrt != NULL);
for (int i = 0; i < symt_sz; i ++) { for (int i = 0; i < symt_len; i ++) {
Log("---LOG: %3d: %08x %5d %x", i, psymt[i].st_value, psymt[i].st_size, psymt[i].st_name);
if (ELF_ST_TYPE(psymt[i].st_info) == STT_FUNC) { if (ELF_ST_TYPE(psymt[i].st_info) == STT_FUNC) {
// Warning due to elf_ftrace is global variable so you don't need to set '\0' in the end // Warning due to elf_ftrace is global variable so you don't need to set '\0' in the end
// strncpy(elf_ftrace[elf_ftrace_size].fname, pstrt + psymt[i].st_name, // strncpy(elf_ftrace[elf_ftrace_size].fname, pstrt + psymt[i].st_name,
@ -108,7 +109,6 @@ void init_elf(const char* elf_file) {
elf_ftrace[elf_ftrace_size].size = psymt[i].st_size; elf_ftrace[elf_ftrace_size].size = psymt[i].st_size;
elf_ftrace[elf_ftrace_size].end = psymt[i].st_value + psymt[i].st_size - 1; elf_ftrace[elf_ftrace_size].end = psymt[i].st_value + psymt[i].st_size - 1;
elf_ftrace_size ++; elf_ftrace_size ++;
Log("---LOG: %d: %08x %d", i, psymt[i].st_value, psymt[i].st_name);
} }
} }