diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-05-28 11:55:57 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-05-28 11:55:57 +0200 |
| commit | 55720342adbf22ba318a66b30ed9ea6ec789b032 (patch) | |
| tree | a0737fa72a4b05dc179a8fdd4c82b7039cb87257 /src | |
| parent | 085239ef4a5d76ae4cb77af5d4bb9d3f743bc6f8 (diff) | |
| download | box64-55720342adbf22ba318a66b30ed9ea6ec789b032.tar.gz box64-55720342adbf22ba318a66b30ed9ea6ec789b032.zip | |
Splited Elf Dump from LOG handling
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynablock.c | 4 | ||||
| -rwxr-xr-x | src/elfs/elfload_dump.c | 110 | ||||
| -rwxr-xr-x | src/elfs/elfloader.c | 64 | ||||
| -rwxr-xr-x | src/elfs/elfparser.c | 8 | ||||
| -rwxr-xr-x | src/emu/x64syscall.c | 4 | ||||
| -rwxr-xr-x | src/include/debug.h | 6 | ||||
| -rwxr-xr-x | src/main.c | 68 |
7 files changed, 143 insertions, 121 deletions
diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index e412366e..d4a79156 100755 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -254,7 +254,7 @@ dynablock_t *AddNewDynablock(dynablocklist_t* dynablocks, uintptr_t addr, int* c if(dynablocks->direct) { block = dynablocks->direct[addr-dynablocks->text]; if(block) { - dynarec_log(LOG_DUMP, "Block already exist in Direct Map\n"); + dynarec_log(LOG_VERBOSE, "Block already exist in Direct Map\n"); *created = 0; return block; } @@ -270,7 +270,7 @@ dynablock_t *AddNewDynablock(dynablocklist_t* dynablocks, uintptr_t addr, int* c } // create and add new block - dynarec_log(LOG_DUMP, "Ask for DynaRec Block creation @%p\n", (void*)addr); + dynarec_log(LOG_VERBOSE, "Ask for DynaRec Block creation @%p\n", (void*)addr); block = (dynablock_t*)calloc(1, sizeof(dynablock_t)); block->parent = dynablocks; diff --git a/src/elfs/elfload_dump.c b/src/elfs/elfload_dump.c index 0ad72f00..58415c44 100755 --- a/src/elfs/elfload_dump.c +++ b/src/elfs/elfload_dump.c @@ -246,116 +246,116 @@ const char* IdxSymName(elfheader_t *h, int sym) void DumpMainHeader(Elf64_Ehdr *header, elfheader_t *h) { - if(box64_log>=LOG_DUMP) { - printf_log(LOG_DUMP, "ELF Dump main header\n"); - printf_log(LOG_DUMP, " Entry point = %p\n", (void*)header->e_entry); - printf_log(LOG_DUMP, " Program Header table offset = %p\n", (void*)header->e_phoff); - printf_log(LOG_DUMP, " Section Header table offset = %p\n", (void*)header->e_shoff); - printf_log(LOG_DUMP, " Flags = 0x%X\n", header->e_flags); - printf_log(LOG_DUMP, " ELF Header size = %d\n", header->e_ehsize); - printf_log(LOG_DUMP, " Program Header Entry num/size = %zu(%d)/%d\n", h->numPHEntries, header->e_phnum, header->e_phentsize); - printf_log(LOG_DUMP, " Section Header Entry num/size = %zu(%d)/%d\n", h->numSHEntries, header->e_shnum, header->e_shentsize); - printf_log(LOG_DUMP, " Section Header index num = %zu(%d)\n", h->SHIdx, header->e_shstrndx); - printf_log(LOG_DUMP, "ELF Dump ==========\n"); + if(box64_dump) { + printf_dump(LOG_NEVER, "ELF Dump main header\n"); + printf_dump(LOG_NEVER, " Entry point = %p\n", (void*)header->e_entry); + printf_dump(LOG_NEVER, " Program Header table offset = %p\n", (void*)header->e_phoff); + printf_dump(LOG_NEVER, " Section Header table offset = %p\n", (void*)header->e_shoff); + printf_dump(LOG_NEVER, " Flags = 0x%X\n", header->e_flags); + printf_dump(LOG_NEVER, " ELF Header size = %d\n", header->e_ehsize); + printf_dump(LOG_NEVER, " Program Header Entry num/size = %zu(%d)/%d\n", h->numPHEntries, header->e_phnum, header->e_phentsize); + printf_dump(LOG_NEVER, " Section Header Entry num/size = %zu(%d)/%d\n", h->numSHEntries, header->e_shnum, header->e_shentsize); + printf_dump(LOG_NEVER, " Section Header index num = %zu(%d)\n", h->SHIdx, header->e_shstrndx); + printf_dump(LOG_NEVER, "ELF Dump ==========\n"); - printf_log(LOG_DUMP, "ELF Dump PEntries (%zu)\n", h->numPHEntries); + printf_dump(LOG_NEVER, "ELF Dump PEntries (%zu)\n", h->numPHEntries); for (size_t i=0; i<h->numPHEntries; ++i) - printf_log(LOG_DUMP, " PHEntry %04zu : %s\n", i, DumpPHEntry(h->PHEntries+i)); - printf_log(LOG_DUMP, "ELF Dump PEntries ====\n"); + printf_dump(LOG_NEVER, " PHEntry %04zu : %s\n", i, DumpPHEntry(h->PHEntries+i)); + printf_dump(LOG_NEVER, "ELF Dump PEntries ====\n"); - printf_log(LOG_DUMP, "ELF Dump Sections (%zu)\n", h->numSHEntries); + printf_dump(LOG_NEVER, "ELF Dump Sections (%zu)\n", h->numSHEntries); for (size_t i=0; i<h->numSHEntries; ++i) - printf_log(LOG_DUMP, " Section %04zu : %s\n", i, DumpSection(h->SHEntries+i, h->SHStrTab)); - printf_log(LOG_DUMP, "ELF Dump Sections ====\n"); + printf_dump(LOG_NEVER, " Section %04zu : %s\n", i, DumpSection(h->SHEntries+i, h->SHStrTab)); + printf_dump(LOG_NEVER, "ELF Dump Sections ====\n"); } } void DumpSymTab(elfheader_t *h) { - if(box64_log>=LOG_DUMP && h->SymTab) { + if(box64_dump && h->SymTab) { const char* name = ElfName(h); - printf_log(LOG_DUMP, "ELF Dump SymTab(%zu)=\n", h->numSymTab); + printf_dump(LOG_NEVER, "ELF Dump SymTab(%zu)=\n", h->numSymTab); for (size_t i=0; i<h->numSymTab; ++i) - printf_log(LOG_DUMP, " %s:SymTab[%zu] = \"%s\", value=%p, size=%ld, info/other=%d/%d index=%d\n", name, + printf_dump(LOG_NEVER, " %s:SymTab[%zu] = \"%s\", value=%p, size=%ld, info/other=%d/%d index=%d\n", name, i, h->StrTab+h->SymTab[i].st_name, (void*)h->SymTab[i].st_value, h->SymTab[i].st_size, h->SymTab[i].st_info, h->SymTab[i].st_other, h->SymTab[i].st_shndx); - printf_log(LOG_DUMP, "ELF Dump SymTab=====\n"); + printf_dump(LOG_NEVER, "ELF Dump SymTab=====\n"); } } void DumpDynamicSections(elfheader_t *h) { - if(box64_log>=LOG_DUMP && h->Dynamic) { - printf_log(LOG_DUMP, "ELF Dump Dynamic(%zu)=\n", h->numDynamic); + if(box64_dump && h->Dynamic) { + printf_dump(LOG_NEVER, "ELF Dump Dynamic(%zu)=\n", h->numDynamic); for (size_t i=0; i<h->numDynamic; ++i) - printf_log(LOG_DUMP, " Dynamic %04zu : %s\n", i, DumpDynamic(h->Dynamic+i)); - printf_log(LOG_DUMP, "ELF Dump Dynamic=====\n"); + printf_dump(LOG_NEVER, " Dynamic %04zu : %s\n", i, DumpDynamic(h->Dynamic+i)); + printf_dump(LOG_NEVER, "ELF Dump Dynamic=====\n"); } } void DumpDynSym(elfheader_t *h) { - if(box64_log>=LOG_DUMP && h->DynSym) { + if(box64_dump && h->DynSym) { const char* name = ElfName(h); - printf_log(LOG_DUMP, "ELF Dump DynSym(%zu)=\n", h->numDynSym); + printf_dump(LOG_NEVER, "ELF Dump DynSym(%zu)=\n", h->numDynSym); for (size_t i=0; i<h->numDynSym; ++i) - printf_log(LOG_DUMP, " %s:DynSym[%zu] = %s\n", name, i, DumpSym(h, h->DynSym+i)); - printf_log(LOG_DUMP, "ELF Dump DynSym=====\n"); + printf_dump(LOG_NEVER, " %s:DynSym[%zu] = %s\n", name, i, DumpSym(h, h->DynSym+i)); + printf_dump(LOG_NEVER, "ELF Dump DynSym=====\n"); } } void DumpDynamicNeeded(elfheader_t *h) { - if(box64_log>=LOG_DUMP && h->DynStrTab) { - printf_log(LOG_DUMP, "ELF Dump DT_NEEDED=====\n"); + if(box64_dump && h->DynStrTab) { + printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); for (size_t i=0; i<h->numDynamic; ++i) if(h->Dynamic[i].d_tag==DT_NEEDED) { - printf_log(LOG_DUMP, " Needed : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); + printf_dump(LOG_NEVER, " Needed : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); } - printf_log(LOG_DUMP, "ELF Dump DT_NEEDED=====\n"); + printf_dump(LOG_NEVER, "ELF Dump DT_NEEDED=====\n"); } } void DumpDynamicRPath(elfheader_t *h) { - if(box64_log>=LOG_DUMP && h->DynStrTab) { - printf_log(LOG_DUMP, "ELF Dump DT_RPATH/DT_RUNPATH=====\n"); + if(box64_dump && h->DynStrTab) { + printf_dump(LOG_NEVER, "ELF Dump DT_RPATH/DT_RUNPATH=====\n"); for (size_t i=0; i<h->numDynamic; ++i) { if(h->Dynamic[i].d_tag==DT_RPATH) { - printf_log(LOG_DUMP, " RPATH : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); + printf_dump(LOG_NEVER, " RPATH : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); } if(h->Dynamic[i].d_tag==DT_RUNPATH) { - printf_log(LOG_DUMP, " RUNPATH : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); + printf_dump(LOG_NEVER, " RUNPATH : %s\n", h->DynStrTab+h->Dynamic[i].d_un.d_val + h->delta); } } - printf_log(LOG_DUMP, "=====ELF Dump DT_RPATH/DT_RUNPATH\n"); + printf_dump(LOG_NEVER, "=====ELF Dump DT_RPATH/DT_RUNPATH\n"); } } void DumpRelTable(elfheader_t *h, int cnt, Elf64_Rel *rel, const char* name) { - if(box64_log>=LOG_DUMP) { + if(box64_dump) { const char* elfname = ElfName(h); - printf_log(LOG_DUMP, "ELF Dump %s Table(%d) @%p\n", name, cnt, rel); + printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, rel); for (int i = 0; i<cnt; ++i) - printf_log(LOG_DUMP, " %s:Rel[%d] = %p (0x%lX: %s, sym=0x%0lX/%s)\n", elfname, + printf_dump(LOG_NEVER, " %s:Rel[%d] = %p (0x%lX: %s, sym=0x%0lX/%s)\n", elfname, i, (void*)rel[i].r_offset, rel[i].r_info, DumpRelType(ELF64_R_TYPE(rel[i].r_info)), ELF64_R_SYM(rel[i].r_info), IdxSymName(h, ELF64_R_SYM(rel[i].r_info))); - printf_log(LOG_DUMP, "ELF Dump Rel Table=====\n"); + printf_dump(LOG_NEVER, "ELF Dump Rel Table=====\n"); } } void DumpRelATable(elfheader_t *h, int cnt, Elf64_Rela *rela, const char* name) { - if(box64_log>=LOG_DUMP && h->rela) { + if(box64_dump && h->rela) { const char* elfname = ElfName(h); - printf_log(LOG_DUMP, "ELF Dump %s Table(%d) @%p\n", name, cnt, rela); + printf_dump(LOG_NEVER, "ELF Dump %s Table(%d) @%p\n", name, cnt, rela); for (int i = 0; i<cnt; ++i) - printf_log(LOG_DUMP, " %s:RelA[%d] = %p (0x%lX: %s, sym=0x%lX/%s) Addend=0x%lx\n", elfname, + printf_dump(LOG_NEVER, " %s:RelA[%d] = %p (0x%lX: %s, sym=0x%lX/%s) Addend=0x%lx\n", elfname, i, (void*)rela[i].r_offset, rela[i].r_info, DumpRelType(ELF64_R_TYPE(rela[i].r_info)), ELF64_R_SYM(rela[i].r_info), IdxSymName(h, ELF64_R_SYM(rela[i].r_info)), rela[i].r_addend); - printf_log(LOG_DUMP, "ELF Dump RelA Table=====\n"); + printf_dump(LOG_NEVER, "ELF Dump RelA Table=====\n"); } } @@ -366,24 +366,24 @@ void DumpBinary(char* p, int sz) unsigned char* d = (unsigned char*)p; int delta = ((uintptr_t)p)&0xf; for (int i = 0; sz; ++i) { - printf_log(LOG_DUMP, "%p ", (void*)(((uintptr_t)d)&~0xf)); + printf_dump(LOG_NEVER, "%p ", (void*)(((uintptr_t)d)&~0xf)); int n = 16 - delta; if (n>sz) n = sz; int fill = 16-sz; for (int j = 0; j<delta; ++j) - printf_log(LOG_DUMP, " "); + printf_dump(LOG_NEVER, " "); for (int j = 0; j<n; ++j) - printf_log(LOG_DUMP, "%02X ", d[j]); + printf_dump(LOG_NEVER, "%02X ", d[j]); for (int j = 0; j<fill; ++j) - printf_log(LOG_DUMP, " "); - printf_log(LOG_DUMP, " | "); + printf_dump(LOG_NEVER, " "); + printf_dump(LOG_NEVER, " | "); for (int j = 0; j<delta; ++j) - printf_log(LOG_DUMP, " "); + printf_dump(LOG_NEVER, " "); for (int j = 0; j<n; ++j) - printf_log(LOG_DUMP, "%c", (d[j]<32 || d[j]>127)?'.':d[j]); + printf_dump(LOG_NEVER, "%c", (d[j]<32 || d[j]>127)?'.':d[j]); for (int j = 0; j<fill; ++j) - printf_log(LOG_DUMP, " "); - printf_log(LOG_DUMP, "\n"); + printf_dump(LOG_NEVER, " "); + printf_dump(LOG_NEVER, "\n"); d+=n; sz-=n; delta=0; diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 8890d50a..c49a56ea 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -409,7 +409,7 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn switch(t) { case R_X86_64_NONE: // can be ignored - printf_log(LOG_DUMP, "Ignoring %s @%p (%p)\n", DumpRelType(t), p, (void*)(p?(*p):0)); + printf_dump(LOG_NEVER, "Ignoring %s @%p (%p)\n", DumpRelType(t), p, (void*)(p?(*p):0)); break; case R_X86_64_PC32: if (!offs) { @@ -417,7 +417,7 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn } offs = (offs - (uintptr_t)p); if(!offs) - printf_log(LOG_DUMP, "Apply %s R_X86_64_PC32 @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)(*(uintptr_t*)p+offs)); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_PC32 @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)(*(uintptr_t*)p+offs)); *p += offs; break; case R_X86_64_GLOB_DAT: @@ -426,11 +426,11 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn offs = sym->st_value + head->delta; end = offs + sym->st_size; if(sym->st_size) { - printf_log(LOG_DUMP, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) size=%ld on sym=%s \n", (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, sym->st_size, symname); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) size=%ld on sym=%s \n", (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, sym->st_size, symname); //memmove((void*)globoffs, (void*)offs, sym->st_size); // preapply to copy part from lib to main elf AddWeakSymbol(GetGlobalData(maplib), symname, offs, sym->st_size); } else { - printf_log(LOG_DUMP, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) null sized on sym=%s \n", (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, symname); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) null sized on sym=%s \n", (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, symname); } *p = globoffs; } else { @@ -443,7 +443,7 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn if(strcmp(symname, "__gmon_start__")) printf_log(LOG_NONE, "Error: Global Symbol %s not found, cannot apply R_X86_64_GLOB_DAT @%p (%p) in %s\n", symname, p, *(void**)p, head->name); } else { - printf_log(LOG_DUMP, "Apply %s R_X86_64_GLOB_DAT @%p (%p -> %p) on sym=%s\n", (bind==STB_LOCAL)?"Local":"Global", p, (void*)(p?(*p):0), (void*)offs, symname); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT @%p (%p -> %p) on sym=%s\n", (bind==STB_LOCAL)?"Local":"Global", p, (void*)(p?(*p):0), (void*)offs, symname); *p = offs; } } @@ -464,20 +464,20 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn offs = old_offs; end = old_end; } - printf_log(LOG_DUMP, "Apply %s R_X86_64_COPY @%p with sym=%s, @%p size=%ld (", (bind==STB_LOCAL)?"Local":"Global", p, symname, (void*)offs, sym->st_size); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_COPY @%p with sym=%s, @%p size=%ld (", (bind==STB_LOCAL)?"Local":"Global", p, symname, (void*)offs, sym->st_size); memmove(p, (void*)offs, sym->st_size); - if(box64_log >= LOG_DUMP) { + if(box64_dump) { uint64_t *k = (uint64_t*)p; for (unsigned j=0; j<((sym->st_size>128u)?128u:sym->st_size); j+=8, ++k) - printf_log(LOG_DUMP, "%s0x%016lX", j?" ":"", *k); - printf_log(LOG_DUMP, "%s)\n", (sym->st_size>128u)?" ...":""); + printf_dump(LOG_NEVER, "%s0x%016lX", j?" ":"", *k); + printf_dump(LOG_NEVER, "%s)\n", (sym->st_size>128u)?" ...":""); } } else { printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_X86_64_COPY @%p (%p) in %s\n", symname, p, *(void**)p, head->name); } break; case R_X86_64_RELATIVE: - printf_log(LOG_DUMP, "Apply %s R_X86_64_RELATIVE @%p (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, *(void**)p, (void*)((*p)+head->delta)); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_RELATIVE @%p (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, *(void**)p, (void*)((*p)+head->delta)); *p += head->delta; break; case R_X86_64_64: @@ -485,7 +485,7 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name); // return -1; } else { - printf_log(LOG_DUMP, "Apply %s R_X86_64_64 @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)(offs+*(uint64_t*)p)); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_64 @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)(offs+*(uint64_t*)p)); *p += offs; } break; @@ -507,14 +507,14 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int cn // return -1; } else { if(p) { - printf_log(LOG_DUMP, "Apply %s R_X86_64_JUMP_SLOT @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)offs); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_JUMP_SLOT @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)offs); *p = offs; } else { printf_log(LOG_NONE, "Warning, Symbol %s found, but Jump Slot Offset is NULL \n", symname); } } } else { - printf_log(LOG_DUMP, "Preparing (if needed) %s R_X86_64_JUMP_SLOT @%p (0x%lx->0x%0lx) with sym=%s to be apply later\n", (bind==STB_LOCAL)?"Local":"Global", p, *p, *p+head->delta, symname); + printf_dump(LOG_NEVER, "Preparing (if needed) %s R_X86_64_JUMP_SLOT @%p (0x%lx->0x%0lx) with sym=%s to be apply later\n", (bind==STB_LOCAL)?"Local":"Global", p, *p, *p+head->delta, symname); *p += head->delta; } break; @@ -569,7 +569,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c // can be ignored break; case R_X86_64_RELATIVE: - printf_log(LOG_DUMP, "Apply %s R_X86_64_RELATIVE @%p (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, *(void**)p, (void*)(head->delta+ rela[i].r_addend)); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_RELATIVE @%p (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, *(void**)p, (void*)(head->delta+ rela[i].r_addend)); *p = head->delta+ rela[i].r_addend; break; case R_X86_64_COPY: @@ -584,7 +584,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c if(!offs) {offs = globoffs; end = globend;} if(offs) { // add r_addend to p? - printf_log(LOG_DUMP, "Apply R_X86_64_COPY @%p with sym=%s, @%p+0x%lx size=%ld\n", p, symname, (void*)offs, rela[i].r_addend, sym->st_size); + printf_dump(LOG_NEVER, "Apply R_X86_64_COPY @%p with sym=%s, @%p+0x%lx size=%ld\n", p, symname, (void*)offs, rela[i].r_addend, sym->st_size); if(p!=(void*)(offs+rela[i].r_addend)) memmove(p, (void*)(offs+rela[i].r_addend), sym->st_size); } else { @@ -597,13 +597,13 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c offs = sym->st_value + head->delta; end = offs + sym->st_size; if(sym->st_size) { - printf_log(LOG_DUMP, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) size=%ld on sym=%s \n", + printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) size=%ld on sym=%s \n", (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, sym->st_size, symname); //memmove((void*)globoffs, (void*)offs, sym->st_size); // preapply to copy part from lib to main elf AddWeakSymbol(GetGlobalData(maplib), symname, offs, sym->st_size); } else { - printf_log(LOG_DUMP, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) null sized on sym=%s \n", + printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT with R_X86_64_COPY @%p/%p (%p/%p -> %p/%p) null sized on sym=%s \n", (bind==STB_LOCAL)?"Local":"Global", p, globp, (void*)(p?(*p):0), (void*)(globp?(*globp):0), (void*)offs, (void*)globoffs, symname); } @@ -618,7 +618,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c if(strcmp(symname, "__gmon_start__")) printf_log(LOG_NONE, "Error: Global Symbol %s not found, cannot apply R_X86_64_GLOB_DAT @%p (%p) in %s\n", symname, p, *(void**)p, head->name); } else { - printf_log(LOG_DUMP, "Apply %s R_X86_64_GLOB_DAT @%p (%p -> %p) on sym=%s\n", (bind==STB_LOCAL)?"Local":"Global", p, (void*)(p?(*p):0), (void*)offs, symname); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_GLOB_DAT @%p (%p -> %p) on sym=%s\n", (bind==STB_LOCAL)?"Local":"Global", p, (void*)(p?(*p):0), (void*)offs, symname); *p = offs/* + rela[i].r_addend*/; // not addend it seems } } @@ -642,7 +642,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c // return -1; } else { if(p) { - printf_log(LOG_DUMP, "Apply %s R_X86_64_JUMP_SLOT @%p with sym=%s (%p -> %p)\n", + printf_dump(LOG_NEVER, "Apply %s R_X86_64_JUMP_SLOT @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)(offs+rela[i].r_addend)); *p = offs + rela[i].r_addend; } else { @@ -650,7 +650,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c } } } else { - printf_log(LOG_DUMP, "Preparing (if needed) %s R_X86_64_JUMP_SLOT @%p (0x%lx->0x%0lx) with sym=%s to be apply later (addend=%ld)\n", + printf_dump(LOG_NEVER, "Preparing (if needed) %s R_X86_64_JUMP_SLOT @%p (0x%lx->0x%0lx) with sym=%s to be apply later (addend=%ld)\n", (bind==STB_LOCAL)?"Local":"Global", p, *p, *p+head->delta, symname, rela[i].r_addend); *p += head->delta; *need_resolv = 1; @@ -661,7 +661,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name); // return -1; } else { - printf_log(LOG_DUMP, "Apply %s R_X86_64_64 @%p with sym=%s addend=0x%lx (%p -> %p)\n", + printf_dump(LOG_NEVER, "Apply %s R_X86_64_64 @%p with sym=%s addend=0x%lx (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, rela[i].r_addend, *(void**)p, (void*)(offs+rela[i].r_addend/*+*(uint64_t*)p*/)); *p /*+*/= offs+rela[i].r_addend; } @@ -679,7 +679,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c } if(h_tls) { delta = *(int64_t*)p; - printf_log(LOG_DUMP, "Applying %s %s on %s @%p (%ld -> %ld)\n", (bind==STB_LOCAL)?"Local":"Global", DumpRelType(t), symname, p, delta, (int64_t)offs + rela[i].r_addend + h_tls->tlsbase); + printf_dump(LOG_NEVER, "Applying %s %s on %s @%p (%ld -> %ld)\n", (bind==STB_LOCAL)?"Local":"Global", DumpRelType(t), symname, p, delta, (int64_t)offs + rela[i].r_addend + h_tls->tlsbase); *p = (uintptr_t)((int64_t)offs + rela[i].r_addend + h_tls->tlsbase); } else { printf_log(LOG_INFO, "Warning, cannot apply %s %s on %s @%p (%ld), no elf_header found\n", (bind==STB_LOCAL)?"Local":"Global", DumpRelType(t), symname, p, (int64_t)offs); @@ -700,7 +700,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c offs = getElfIndex(my_context, h_tls); } if(p) { - printf_log(LOG_DUMP, "Apply %s %s @%p with sym=%s (%p -> %p)\n", "R_X86_64_DTPMOD64", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)offs); + printf_dump(LOG_NEVER, "Apply %s %s @%p with sym=%s (%p -> %p)\n", "R_X86_64_DTPMOD64", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)offs); *p = offs; } else { printf_log(LOG_NONE, "Warning, Symbol %s or Elf not found, but R_X86_64_DTPMOD64 Slot Offset is NULL \n", symname); @@ -720,7 +720,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, elfheader_t* head, int c offs = sym->st_value; if(p) { int64_t tlsoffset = offs; // it's not an offset in elf memory - printf_log(LOG_DUMP, "Apply %s R_X86_64_DTPOFF64 @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, (void*)tlsoffset, (void*)offs); + printf_dump(LOG_NEVER, "Apply %s R_X86_64_DTPOFF64 @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, (void*)tlsoffset, (void*)offs); *p = tlsoffset; } else { printf_log(LOG_NONE, "Warning, Symbol %s found, but R_X86_64_DTPOFF64 Slot Offset is NULL \n", symname); @@ -838,8 +838,8 @@ uintptr_t GetEntryPoint(lib_t* maplib, elfheader_t* h) (void)maplib; uintptr_t ep = h->entrypoint + h->delta; printf_log(LOG_DEBUG, "Entry Point is %p\n", (void*)ep); - if(box64_log>=LOG_DUMP) { - printf_log(LOG_DUMP, "(short) Dump of Entry point\n"); + if(box64_dump) { + printf_dump(LOG_NEVER, "(short) Dump of Entry point\n"); int sz = 64; uintptr_t lastbyte = GetLastByte(h); if (ep + sz > lastbyte) @@ -856,7 +856,7 @@ uintptr_t GetLastByte(elfheader_t* h) void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* weaksymbols, kh_mapsymbols_t* localsymbols, elfheader_t* h) { - printf_log(LOG_DUMP, "Will look for Symbol to add in SymTable(%zu)\n", h->numSymTab); + printf_dump(LOG_NEVER, "Will look for Symbol to add in SymTable(%zu)\n", h->numSymTab); for (size_t i=0; i<h->numSymTab; ++i) { const char * symname = h->StrTab+h->SymTab[i].st_name; int bind = ELF64_ST_BIND(h->SymTab[i].st_info); @@ -868,7 +868,7 @@ void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* wea continue; uintptr_t offs = (type==STT_TLS)?h->SymTab[i].st_value:(h->SymTab[i].st_value + h->delta); uint64_t sz = h->SymTab[i].st_size; - printf_log(LOG_DUMP, "Adding Symbol(bind=%s) \"%s\" with offset=%p sz=%zu\n", (bind==STB_LOCAL)?"LOCAL":((bind==STB_WEAK)?"WEAK":"GLOBAL"), symname, (void*)offs, sz); + printf_dump(LOG_NEVER, "Adding Symbol(bind=%s) \"%s\" with offset=%p sz=%zu\n", (bind==STB_LOCAL)?"LOCAL":((bind==STB_WEAK)?"WEAK":"GLOBAL"), symname, (void*)offs, sz); if(bind==STB_LOCAL) AddSymbol(localsymbols, symname, offs, sz); else // add in local and global map @@ -880,7 +880,7 @@ void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* wea } } - printf_log(LOG_DUMP, "Will look for Symbol to add in DynSym (%zu)\n", h->numDynSym); + printf_dump(LOG_NEVER, "Will look for Symbol to add in DynSym (%zu)\n", h->numDynSym); for (size_t i=0; i<h->numDynSym; ++i) { const char * symname = h->DynStr+h->DynSym[i].st_name; int bind = ELF64_ST_BIND(h->DynSym[i].st_info); @@ -893,7 +893,7 @@ void AddSymbols(lib_t *maplib, kh_mapsymbols_t* mapsymbols, kh_mapsymbols_t* wea continue; uintptr_t offs = (type==STT_TLS)?h->DynSym[i].st_value:(h->DynSym[i].st_value + h->delta); uint64_t sz = h->DynSym[i].st_size; - printf_log(LOG_DUMP, "Adding Symbol(bind=%s) \"%s\" with offset=%p sz=%zu\n", (bind==STB_LOCAL)?"LOCAL":((bind==STB_WEAK)?"WEAK":"GLOBAL"), symname, (void*)offs, sz); + printf_dump(LOG_NEVER, "Adding Symbol(bind=%s) \"%s\" with offset=%p sz=%zu\n", (bind==STB_LOCAL)?"LOCAL":((bind==STB_WEAK)?"WEAK":"GLOBAL"), symname, (void*)offs, sz); if(bind==STB_LOCAL) AddSymbol(localsymbols, symname, offs, sz); else // add in local and global map @@ -1353,7 +1353,7 @@ EXPORT void PltResolver(x64emu_t* emu) uintptr_t addr = Pop64(emu); int slot = (int)Pop64(emu); elfheader_t *h = (elfheader_t*)addr; - printf_log(LOG_DEBUG, "PltResolver: Addr=%p, Slot=%d Return=%p: elf is %s\n", (void*)addr, slot, *(void**)(R_RSP), h->name); + printf_dump(LOG_DEBUG, "PltResolver: Addr=%p, Slot=%d Return=%p: elf is %s\n", (void*)addr, slot, *(void**)(R_RSP), h->name); Elf64_Rela * rel = (Elf64_Rela *)(h->jmprel + h->delta) + slot; @@ -1377,7 +1377,7 @@ EXPORT void PltResolver(x64emu_t* emu) return; } else { if(p) { - printf_log(LOG_DEBUG, "PltReolver: Apply %s R_X86_64_JUMP_SLOT @%p with sym=%s (%p -> %p / %s)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)offs, ElfName(FindElfAddress(my_context, offs))); + printf_dump(LOG_DEBUG, "PltReolver: Apply %s R_X86_64_JUMP_SLOT @%p with sym=%s (%p -> %p / %s)\n", (bind==STB_LOCAL)?"Local":"Global", p, symname, *(void**)p, (void*)offs, ElfName(FindElfAddress(my_context, offs))); *p = offs; } else { printf_log(LOG_NONE, "PltReolver: Warning, Symbol %s found, but Jump Slot Offset is NULL \n", symname); diff --git a/src/elfs/elfparser.c b/src/elfs/elfparser.c index 7d5600ea..a5c7f186 100755 --- a/src/elfs/elfparser.c +++ b/src/elfs/elfparser.c @@ -182,14 +182,14 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) FreeElfHeader(&h); return NULL; } - if(box64_log>=LOG_DUMP) DumpMainHeader(&header, h); + if(box64_dump) DumpMainHeader(&header, h); LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".strtab", "SymTab Strings", SHT_STRTAB, (void**)&h->StrTab, NULL); LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".symtab", "SymTab", SHT_SYMTAB, (void**)&h->SymTab, &h->numSymTab); - if(box64_log>=LOG_DUMP && h->SymTab) DumpSymTab(h); + if(box64_dump && h->SymTab) DumpSymTab(h); LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynamic", "Dynamic", SHT_DYNAMIC, (void**)&h->Dynamic, &h->numDynamic); - if(box64_log>=LOG_DUMP && h->Dynamic) DumpDynamicSections(h); + if(box64_dump && h->Dynamic) DumpDynamicSections(h); // grab DT_REL & DT_RELA stuffs // also grab the DT_STRTAB string table { @@ -311,7 +311,7 @@ elfheader_t* ParseElfHeader(FILE* f, const char* name, int exec) LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynstr", "DynSym Strings", SHT_STRTAB, (void**)&h->DynStr, NULL); LoadNamedSection(f, h->SHEntries, h->numSHEntries, h->SHStrTab, ".dynsym", "DynSym", SHT_DYNSYM, (void**)&h->DynSym, &h->numDynSym); - if(box64_log>=LOG_DUMP && h->DynSym) DumpDynSym(h); + if(box64_dump && h->DynSym) DumpDynSym(h); } return h; diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c index e87c0a27..ce85ee3f 100755 --- a/src/emu/x64syscall.c +++ b/src/emu/x64syscall.c @@ -197,7 +197,7 @@ void EXPORT x64Syscall(x64emu_t *emu) switch(syscallwrap[i].nbpars) { case 0: *(int64_t*)&R_RAX = syscall(sc); break; case 1: *(int64_t*)&R_RAX = syscall(sc, R_RDI); break; - case 2: if(s==33) {printf_log(LOG_DUMP, " => sys_access(\"%s\", %ld)\n", (char*)R_RDI, R_RSI);}; *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI); break; + case 2: if(s==33) {printf_dump(LOG_DEBUG, " => sys_access(\"%s\", %ld)\n", (char*)R_RDI, R_RSI);}; *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI); break; case 3: *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI, R_RDX); break; case 4: *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10); break; case 5: *(int64_t*)&R_RAX = syscall(sc, R_RDI, R_RSI, R_RDX, R_R10, R_R8); break; @@ -289,7 +289,7 @@ void EXPORT x64Syscall(x64emu_t *emu) uintptr_t EXPORT my_syscall(x64emu_t *emu) { uint32_t s = R_EDI;; - printf_log(LOG_DUMP, "%p: Calling libc syscall 0x%02X (%d) %p %p %p %p %p\n", (void*)R_RIP, s, s, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); + printf_dump(LOG_DEBUG, "%p: Calling libc syscall 0x%02X (%d) %p %p %p %p %p\n", (void*)R_RIP, s, s, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); // check wrapper first int cnt = sizeof(syscallwrap) / sizeof(scwrap_t); for (int i=0; i<cnt; i++) { diff --git a/src/include/debug.h b/src/include/debug.h index ddf1d8b7..1b6ae3c8 100755 --- a/src/include/debug.h +++ b/src/include/debug.h @@ -4,6 +4,7 @@ typedef struct box64context_s box64context_t; extern int box64_log; // log level +extern int box64_dump; // dump elf or not extern int box64_dynarec_log; extern int box64_dynarec; extern int box64_pagesize; @@ -33,12 +34,15 @@ extern int box64_tcmalloc_minimal; // when using tcmalloc_minimal #define LOG_NONE 0 #define LOG_INFO 1 #define LOG_DEBUG 2 -#define LOG_DUMP 3 +#define LOG_NEVER 3 +#define LOG_VERBOSE 3 extern FILE* ftrace; #define printf_log(L, ...) do {if(L<=box64_log) {fprintf(ftrace, __VA_ARGS__); fflush(ftrace);}} while(0) +#define printf_dump(L, ...) do {if(box64_dump || (L<=box64_log)) {fprintf(ftrace, __VA_ARGS__); fflush(ftrace);}} while(0) + #define dynarec_log(L, ...) do {if(L<=box64_dynarec_log) {fprintf(ftrace, __VA_ARGS__); fflush(ftrace);}} while(0) #define EXPORT __attribute__((visibility("default"))) diff --git a/src/main.c b/src/main.c index e50b43c8..623b9ba1 100755 --- a/src/main.c +++ b/src/main.c @@ -26,6 +26,7 @@ box64context_t *my_context = NULL; int box64_log = LOG_INFO; //LOG_NONE; +int box64_dump = 0; int box64_nobanner = 0; int box64_dynarec_log = LOG_NONE; int box64_pagesize; @@ -115,15 +116,20 @@ void LoadLogEnv() const char *p = getenv("BOX64_NOBANNER"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='1') + if(p[0]>='0' && p[0]<='1') box64_nobanner = p[0]-'0'; } } p = getenv("BOX64_LOG"); if(p) { if(strlen(p)==1) { - if(p[0]>='0'+LOG_NONE && p[1]<='0'+LOG_DEBUG) + if(p[0]>='0'+LOG_NONE && p[0]<='0'+LOG_NEVER) { box64_log = p[0]-'0'; + if(box64_log == LOG_NEVER) { + --box64_log; + box64_dump = 1; + } + } } else { if(!strcasecmp(p, "NONE")) box64_log = LOG_NONE; @@ -131,17 +137,28 @@ void LoadLogEnv() box64_log = LOG_INFO; else if(!strcasecmp(p, "DEBUG")) box64_log = LOG_DEBUG; - else if(!strcasecmp(p, "DUMP")) - box64_log = LOG_DUMP; + else if(!strcasecmp(p, "DUMP")) { + box64_log = LOG_DEBUG; + box64_dump = 1; + } } if(!box64_nobanner) printf_log(LOG_INFO, "Debug level is %d\n", box64_log); } + p = getenv("BOX64_DUMP"); + if(p) { + if(strlen(p)==1) { + if(p[0]>='0' && p[0]<='1') + box64_dump = p[0]-'0'; + } + } + if(!box64_nobanner && box64_dump) + printf_log(LOG_INFO, "Elf Dump if ON\n"); #ifdef DYNAREC p = getenv("BOX64_DYNAREC_DUMP"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='1') + if(p[0]>='0' && p[0]<='1') box64_dynarec_dump = p[0]-'0'; } if (box64_dynarec_dump) printf_log(LOG_INFO, "Dynarec blocks are dumped%s\n", (box64_dynarec_dump>1)?" in color":""); @@ -149,7 +166,7 @@ void LoadLogEnv() p = getenv("BOX64_DYNAREC_LOG"); if(p) { if(strlen(p)==1) { - if((p[0]>='0'+LOG_NONE) && (p[0]<='0'+LOG_DUMP)) + if((p[0]>='0'+LOG_NONE) && (p[0]<='0'+LOG_NEVER)) box64_dynarec_log = p[0]-'0'; } else { if(!strcasecmp(p, "NONE")) @@ -159,14 +176,14 @@ void LoadLogEnv() else if(!strcasecmp(p, "DEBUG")) box64_dynarec_log = LOG_DEBUG; else if(!strcasecmp(p, "VERBOSE")) - box64_dynarec_log = LOG_DUMP; + box64_dynarec_log = LOG_VERBOSE; } printf_log(LOG_INFO, "Dynarec log level is %d\n", box64_dynarec_log); } p = getenv("BOX64_DYNAREC"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='1') + if(p[0]>='0' && p[0]<='1') box64_dynarec = p[0]-'0'; } printf_log(LOG_INFO, "Dynarec is %s\n", box64_dynarec?"On":"Off"); @@ -174,7 +191,7 @@ void LoadLogEnv() p = getenv("BOX64_DYNAREC_FORCED"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='1') + if(p[0]>='0' && p[0]<='1') box64_dynarec_forced = p[0]-'0'; } if(box64_dynarec_forced) @@ -196,21 +213,21 @@ void LoadLogEnv() p = getenv("BOX64_TRACE_XMM"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) trace_xmm = p[0]-'0'; } } p = getenv("BOX64_TRACE_EMM"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) trace_emm = p[0]-'0'; } } p = getenv("BOX64_TRACE_COLOR"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) trace_regsdiff = p[0]-'0'; } } @@ -224,7 +241,7 @@ void LoadLogEnv() p = getenv("BOX64_DYNAREC_TRACE"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) box64_dynarec_trace = p[0]-'0'; if(box64_dynarec_trace) printf_log(LOG_INFO, "Dynarec generated code will also print a trace\n"); @@ -238,14 +255,14 @@ void LoadLogEnv() p = getenv("BOX64_DLSYM_ERROR"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) dlsym_error = p[0]-'0'; } } p = getenv("BOX64_X11THREADS"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) x11threads = p[0]-'0'; } if(x11threads) @@ -254,7 +271,7 @@ void LoadLogEnv() p = getenv("BOX64_X11GLX"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) x11glx = p[0]-'0'; } if(x11glx) @@ -276,7 +293,7 @@ void LoadLogEnv() p = getenv("BOX64_ALLOWMISSINGLIBS"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) allow_missing_libs = p[0]-'0'; } if(allow_missing_libs) @@ -285,7 +302,7 @@ void LoadLogEnv() p = getenv("BOX64_NOPULSE"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) box64_nopulse = p[0]-'0'; } if(box64_nopulse) @@ -294,7 +311,7 @@ void LoadLogEnv() p = getenv("BOX64_NOGTK"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) box64_nogtk = p[0]-'0'; } if(box64_nogtk) @@ -303,7 +320,7 @@ void LoadLogEnv() p = getenv("BOX64_NOVULKAN"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) box64_novulkan = p[0]-'0'; } if(box64_novulkan) @@ -312,7 +329,7 @@ void LoadLogEnv() p = getenv("BOX64_FIX_64BIT_INODES"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) fix_64bit_inodes = p[0]-'0'; } if(fix_64bit_inodes) @@ -321,7 +338,7 @@ void LoadLogEnv() p = getenv("BOX64_JITGDB"); if(p) { if(strlen(p)==1) { - if(p[0]>='0' && p[1]<='0'+1) + if(p[0]>='0' && p[0]<='0'+1) jit_gdb = p[0]-'0'; } if(jit_gdb) @@ -425,7 +442,8 @@ void PrintHelp() { printf("You can also set some environment variables:\n"); printf(" BOX64_PATH is the box64 version of PATH (default is '.:bin')\n"); printf(" BOX64_LD_LIBRARY_PATH is the box64 version LD_LIBRARY_PATH (default is '.:lib')\n"); - printf(" BOX64_LOG with 0/1/2/3 or NONE/INFO/DEBUG/DUMP to set the printed debug info\n"); + printf(" BOX64_LOG with 0/1/2/3 or NONE/INFO/DEBUG/DUMP to set the printed debug info (level 3 is level 2 + BOX64_DUMP)\n"); + printf(" BOX64_DUMP with 0/1 to dump elf infos\n"); printf(" BOX64_NOBANNER with 0/1 to enable/disable the printing of box64 version and build at start\n"); #ifdef DYNAREC printf(" BOX64_DYNAREC_LOG with 0/1/2/3 or NONE/INFO/DEBUG/DUMP to set the printed dynarec info\n"); @@ -743,9 +761,9 @@ int main(int argc, const char **argv, const char **env) { // allocate extra space for new environment variables such as BOX64_PATH my_context->envv = (char**)calloc(my_context->envc+4, sizeof(char*)); GatherEnv(&my_context->envv, environ?environ:env, my_context->box64path); - if(box64_log>=LOG_DUMP) { + if(box64_dump) { for (int i=0; i<my_context->envc; ++i) - printf_log(LOG_DUMP, " Env[%02d]: %s\n", i, my_context->envv[i]); + printf_dump(LOG_NEVER, " Env[%02d]: %s\n", i, my_context->envv[i]); } path_collection_t ld_preload = {0}; |