diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-04-16 16:31:33 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-04-16 16:31:33 +0200 |
| commit | 93a4201c66e5229cba60603a1560850ec9dd38e3 (patch) | |
| tree | a6ca5f77bdabf44ebe82f8503cc5d309726934ce /src | |
| parent | 88369e0366c4bc11f7b1029e834dbff176024696 (diff) | |
| download | box64-93a4201c66e5229cba60603a1560850ec9dd38e3.tar.gz box64-93a4201c66e5229cba60603a1560850ec9dd38e3.zip | |
Do not error out for missing weak R_X86_64_64 binding
Diffstat (limited to 'src')
| -rwxr-xr-x | src/elfs/elfloader.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 225f2058..e8be8b58 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -553,8 +553,9 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t* break; case R_X86_64_64: if (!offs) { - 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); - ret_ok = 1; + printf_log(LOG_NONE, "%s: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", (bind==STB_GLOBAL)?"Error":"Warning", symname, p, *(void**)p, head->name); + if(bind==STB_GLOBAL) + ret_ok = 1; // return -1; } else { 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)); @@ -795,8 +796,9 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t if(symname && !strcmp(symname, "__gxx_personality_v0")) { printf_dump(LOG_NEVER, "Warning: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name); } else { - 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); - ret_ok = 1; + printf_log(LOG_INFO, "%s: Symbol %s not found, cannot apply R_X86_64_64 @%p (%p) in %s\n", (bind==STB_GLOBAL)?"Error":"Warning", symname, p, *(void**)p, head->name); + if(bind==STB_GLOBAL) + ret_ok = 1; // return -1; } } else { @@ -844,7 +846,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t printf_dump(LOG_NEVER, "Apply %s %s @%p with sym=%s (%p -> %p)\n", (bind==STB_LOCAL)?"Local":"Global", "R_X86_64_DTPMOD64", 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); + printf_log(LOG_INFO, "Warning, Symbol %s or Elf not found, but R_X86_64_DTPMOD64 Slot Offset is NULL \n", symname); } break; case R_X86_64_DTPOFF64: @@ -853,7 +855,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t if(bind==STB_WEAK) { printf_log(LOG_INFO, "Warning: Weak Symbol %s not found, cannot apply R_X86_64_DTPOFF64 @%p (%p)\n", symname, p, *(void**)p); } else { - printf_log(LOG_NONE, "Error: Symbol %s not found, cannot apply R_X86_64_DTPOFF64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name); + printf_log(LOG_INFO, "Error: Symbol %s not found, cannot apply R_X86_64_DTPOFF64 @%p (%p) in %s\n", symname, p, *(void**)p, head->name); } // return -1; } else { @@ -864,7 +866,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t 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); + printf_log(LOG_INFO, "Warning, Symbol %s found, but R_X86_64_DTPOFF64 Slot Offset is NULL \n", symname); } } break; @@ -877,7 +879,7 @@ int RelocateElfRELA(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t td->entry = tlsdescUndefweak; td->arg = (uintptr_t)(head->tlsbase + rela[i].r_addend); } else { - printf_log(LOG_NONE, "Warning, R_X86_64_TLSDESC used with Symbol %s(%p) not supported for now \n", symname, sym); + printf_log(LOG_INFO, "Warning, R_X86_64_TLSDESC used with Symbol %s(%p) not supported for now \n", symname, sym); } break; default: |