Merge "Revert "Refactoring: use generic reloc constants""
This commit is contained in:
commit
b13f5f5029
@ -1320,25 +1320,33 @@ int soinfo::relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& glob
|
||||
*/
|
||||
|
||||
switch (type) {
|
||||
case R_GENERIC_JUMP_SLOT:
|
||||
case R_GENERIC_GLOB_DAT:
|
||||
case R_GENERIC_RELATIVE:
|
||||
case R_GENERIC_IRELATIVE:
|
||||
#if defined(__aarch64__)
|
||||
case R_AARCH64_JUMP_SLOT:
|
||||
case R_AARCH64_GLOB_DAT:
|
||||
case R_AARCH64_ABS64:
|
||||
case R_AARCH64_ABS32:
|
||||
case R_AARCH64_ABS16:
|
||||
#elif defined(__x86_64__)
|
||||
case R_X86_64_32:
|
||||
case R_X86_64_64:
|
||||
case R_X86_64_PC32:
|
||||
#endif
|
||||
case R_AARCH64_RELATIVE:
|
||||
case R_AARCH64_IRELATIVE:
|
||||
/*
|
||||
* The sym_addr was initialized to be zero above, or the relocation
|
||||
* code below does not care about value of sym_addr.
|
||||
* No need to do anything.
|
||||
*/
|
||||
break;
|
||||
#elif defined(__x86_64__)
|
||||
case R_X86_64_JUMP_SLOT:
|
||||
case R_X86_64_GLOB_DAT:
|
||||
case R_X86_64_32:
|
||||
case R_X86_64_64:
|
||||
case R_X86_64_RELATIVE:
|
||||
case R_X86_64_IRELATIVE:
|
||||
// No need to do anything.
|
||||
break;
|
||||
case R_X86_64_PC32:
|
||||
sym_addr = reloc;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
DL_ERR("unknown weak reloc type %d @ %p (%zu)", type, rela, idx);
|
||||
return -1;
|
||||
@ -1505,7 +1513,7 @@ int soinfo::relocate(ElfW(Rela)* rela, unsigned count, const soinfo_list_t& glob
|
||||
TRACE_TYPE(RELO, "RELO R_X86_64_PC32 %08zx <- +%08zx (%08zx - %08zx) %s",
|
||||
static_cast<size_t>(reloc), static_cast<size_t>(sym_addr - reloc),
|
||||
static_cast<size_t>(sym_addr), static_cast<size_t>(reloc), sym_name);
|
||||
*reinterpret_cast<ElfW(Addr)*>(reloc) = (sym_addr == 0 ? 0 : sym_addr - reloc) + rela->r_addend;
|
||||
*reinterpret_cast<ElfW(Addr)*>(reloc) = sym_addr + rela->r_addend - reloc;
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user