diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-10-05 00:23:42 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-10-05 00:23:42 +0200 |
| commit | 348cb57240efe51690e420a4fdf3a012e3251d44 (patch) | |
| tree | b6eb1e1d84b84b93216dda07743c42ae3200702d /src | |
| parent | 46f71f39475fcf5b3a29cd4a1df526cec4f38c4e (diff) | |
| download | box64-348cb57240efe51690e420a4fdf3a012e3251d44.tar.gz box64-348cb57240efe51690e420a4fdf3a012e3251d44.zip | |
Small fix for elfloader
Diffstat (limited to 'src')
| -rwxr-xr-x | src/elfs/elfloader.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index 2dbba828..32e13a42 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -448,12 +448,12 @@ int RelocateElfREL(lib_t *maplib, lib_t *local_maplib, int bindnow, elfheader_t* case R_X86_64_GLOB_DAT: if(head!=my_context->elfs[0] && !IsGlobalNoWeakSymbolInNative(maplib, symname, version, vername) && FindR64COPYRel(my_context->elfs[0], symname, &globoffs, &globp, version, vername)) { // set global offs / size for the symbol - offs = sym->st_value + head->delta; + offs = sym->st_value; end = offs + sym->st_size; - if(sym->st_size) { - 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, version, vername); + if(sym->st_size && offs) { + 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 + head->delta), (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 + head->delta, sym->st_size, version, vername); } else { 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); } |