diff options
Diffstat (limited to 'lib/Target/X86/X86Relocator.cpp')
-rw-r--r-- | lib/Target/X86/X86Relocator.cpp | 236 |
1 files changed, 119 insertions, 117 deletions
diff --git a/lib/Target/X86/X86Relocator.cpp b/lib/Target/X86/X86Relocator.cpp index 6e3234f..8cc916e 100644 --- a/lib/Target/X86/X86Relocator.cpp +++ b/lib/Target/X86/X86Relocator.cpp @@ -32,7 +32,7 @@ static Relocation& helper_DynRel_init(ResolveInfo* pSym, Fragment& pFrag, uint64_t pOffset, - X86Relocator::Type pType, + Relocator::Type pType, X86_32Relocator& pParent) { X86_32GNULDBackend& ld_backend = pParent.getTarget(); @@ -65,7 +65,7 @@ helper_use_relative_reloc(const ResolveInfo& pSym, static X86_32GOTEntry& helper_GOT_init(Relocation& pReloc, bool pHasRel, - X86_32Relocator& pParent) + X86_32Relocator& pParent) { // rsym - The relocation target symbol ResolveInfo* rsym = pReloc.symInfo(); @@ -96,13 +96,13 @@ X86_32GOTEntry& helper_GOT_init(Relocation& pReloc, } static -X86Relocator::Address helper_GOT_ORG(X86_32Relocator& pParent) +Relocator::Address helper_GOT_ORG(X86_32Relocator& pParent) { return pParent.getTarget().getGOTPLT().addr(); } static -X86Relocator::Address helper_get_GOT_address(Relocation& pReloc, +Relocator::Address helper_get_GOT_address(Relocation& pReloc, X86_32Relocator& pParent) { X86_32GOTEntry* got_entry = pParent.getSymGOTMap().lookUp(*pReloc.symInfo()); @@ -135,8 +135,8 @@ PLTEntryBase& helper_PLT_init(Relocation& pReloc, X86_32Relocator& pParent) return *plt_entry; } -static -X86Relocator::Address helper_get_PLT_address(ResolveInfo& pSym, X86_32Relocator& pParent) +static Relocator::Address +helper_get_PLT_address(ResolveInfo& pSym, X86_32Relocator& pParent) { PLTEntryBase* plt_entry = pParent.getSymPLTMap().lookUp(pSym); assert(NULL != plt_entry); @@ -150,7 +150,7 @@ DECL_X86_32_APPLY_RELOC_FUNCS /// the prototype of applying function typedef Relocator::Result (*X86_32ApplyFunctionType)(Relocation& pReloc, - X86_32Relocator& pParent); + X86_32Relocator& pParent); // the table entry of applying functions struct X86_32ApplyFunctionTriple @@ -802,36 +802,37 @@ void X86_32Relocator::convertTLSIEtoLE(Relocation& pReloc, assert(pReloc.type() == llvm::ELF::R_386_TLS_IE); assert(NULL != pReloc.targetRef().frag()); - // 1. create the fragment references and new relocs - uint64_t off = pReloc.targetRef().offset(); - if (off >= 4) - off -= 4; - else - off = 0; - - FragmentRef* fragref = FragmentRef::Create(*pReloc.targetRef().frag(), off); - Relocation* reloc = Relocation::Create(X86_32Relocator::R_386_TLS_OPT, - *fragref, - 0x0); + // 1. create the new relocs + Relocation* reloc = + Relocation::Create(X86_32Relocator::R_386_TLS_OPT, + *FragmentRef::Create(*pReloc.targetRef().frag(), + pReloc.targetRef().offset() - 1), + 0x0); // FIXME: should we create a special symbol for the tls opt instead? reloc->setSymInfo(pReloc.symInfo()); // 2. modify the opcodes to the appropriate ones uint8_t* op = (reinterpret_cast<uint8_t*>(&reloc->target())); - off = pReloc.targetRef().offset() - reloc->targetRef().offset() - 1; - if (op[off] == 0xa1) { - op[off] = 0xb8; + if (op[0] == 0xa1) { + op[0] = 0xb8; } else { - switch (op[off - 1]) { + // create the new reloc (move 1 byte forward). + reloc = Relocation::Create(X86_32Relocator::R_386_TLS_OPT, + *FragmentRef::Create(*pReloc.targetRef().frag(), + pReloc.targetRef().offset() - 2), + 0x0); + reloc->setSymInfo(pReloc.symInfo()); + op = (reinterpret_cast<uint8_t*>(&reloc->target())); + switch (op[0]) { case 0x8b: - assert((op[off] & 0xc7) == 0x05); - op[off - 1] = 0xc7; - op[off] = 0xc0 | ((op[off] >> 3) & 7); + assert((op[1] & 0xc7) == 0x05); + op[0] = 0xc7; + op[1] = 0xc0 | ((op[1] >> 3) & 7); break; case 0x03: - assert((op[off] & 0xc7) == 0x05); - op[off - 1] = 0x81; - op[off] = 0xc0 | ((op[off] >> 3) & 7); + assert((op[1] & 0xc7) == 0x05); + op[0] = 0x81; + op[1] = 0xc0 | ((op[1] >> 3) & 7); break; default: assert(0); @@ -840,6 +841,7 @@ void X86_32Relocator::convertTLSIEtoLE(Relocation& pReloc, } // 3. insert the new relocs "BEFORE" the original reloc. + assert(reloc != NULL); pSection.getRelocData()->getRelocationList().insert( RelocData::iterator(pReloc), reloc); @@ -852,15 +854,15 @@ void X86_32Relocator::convertTLSIEtoLE(Relocation& pReloc, //================================================// // R_386_NONE -X86Relocator::Result none(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result none(Relocation& pReloc, X86_32Relocator& pParent) { - return X86Relocator::OK; + return Relocator::OK; } // R_386_32: S + A // R_386_16 // R_386_8 -X86Relocator::Result abs(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result abs(Relocation& pReloc, X86_32Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); Relocator::DWord A = pReloc.target() + pReloc.addend(); @@ -876,7 +878,7 @@ X86Relocator::Result abs(Relocation& pReloc, X86_32Relocator& pParent) // but perform static relocation. (e.g., applying .debug section) if (0x0 == (llvm::ELF::SHF_ALLOC & target_sect.flag())) { pReloc.target() = S + A; - return X86Relocator::OK; + return Relocator::OK; } // An external symbol may need PLT and dynamic relocation @@ -890,18 +892,18 @@ X86Relocator::Result abs(Relocation& pReloc, X86_32Relocator& pParent) if (has_dyn_rel) if (llvm::ELF::R_386_32 != pReloc.type() || (!helper_use_relative_reloc(*rsym, pParent))) - return X86Relocator::OK; + return Relocator::OK; } // perform static relocation pReloc.target() = S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_386_PC32: S + A - P // R_386_PC16 // R_386_PC8 -X86Relocator::Result rel(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result rel(Relocation& pReloc, X86_32Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); Relocator::DWord A = pReloc.target() + pReloc.addend(); @@ -917,7 +919,7 @@ X86Relocator::Result rel(Relocation& pReloc, X86_32Relocator& pParent) // but perform static relocation. (e.g., applying .debug section) if (0x0 == (llvm::ELF::SHF_ALLOC & target_sect.flag())) { pReloc.target() = S + A - P; - return X86Relocator::OK; + return Relocator::OK; } // An external symbol may need PLT and dynamic relocation @@ -928,41 +930,41 @@ X86Relocator::Result rel(Relocation& pReloc, X86_32Relocator& pParent) } if (has_dyn_rel) if (!helper_use_relative_reloc(*rsym, pParent)) - return X86Relocator::OK; + return Relocator::OK; } // perform static relocation pReloc.target() = S + A - P; - return X86Relocator::OK; + return Relocator::OK; } // R_386_GOTOFF: S + A - GOT_ORG -X86Relocator::Result gotoff32(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result gotoff32(Relocation& pReloc, X86_32Relocator& pParent) { Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); - X86Relocator::Address S = pReloc.symValue(); + Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); + Relocator::Address S = pReloc.symValue(); pReloc.target() = S + A - GOT_ORG; - return X86Relocator::OK; + return Relocator::OK; } // R_386_GOTPC: GOT_ORG + A - P -X86Relocator::Result gotpc32(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result gotpc32(Relocation& pReloc, X86_32Relocator& pParent) { Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); + Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); // Apply relocation. pReloc.target() = GOT_ORG + A - pReloc.place(); - return X86Relocator::OK; + return Relocator::OK; } // R_386_GOT32: GOT(S) + A - GOT_ORG -X86Relocator::Result got32(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result got32(Relocation& pReloc, X86_32Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); if (!(rsym->reserved() & (X86Relocator::ReserveGOT))) - return X86Relocator::BadReloc; + return Relocator::BadReloc; // set up got entry value if the got has no dyn rel or // the dyn rel is RELATIVE @@ -971,37 +973,37 @@ X86Relocator::Result got32(Relocation& pReloc, X86_32Relocator& pParent) if (got_entry->getValue() == X86Relocator::SymVal) got_entry->setValue(pReloc.symValue()); - X86Relocator::Address GOT_S = helper_get_GOT_address(pReloc, pParent); + Relocator::Address GOT_S = helper_get_GOT_address(pReloc, pParent); Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); + Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); // Apply relocation. pReloc.target() = GOT_S + A - GOT_ORG; - return X86Relocator::OK; + return Relocator::OK; } // R_386_PLT32: PLT(S) + A - P -X86Relocator::Result plt32(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result plt32(Relocation& pReloc, X86_32Relocator& pParent) { // PLT_S depends on if there is a PLT entry. - X86Relocator::Address PLT_S; + Relocator::Address PLT_S; if ((pReloc.symInfo()->reserved() & X86Relocator::ReservePLT)) PLT_S = helper_get_PLT_address(*pReloc.symInfo(), pParent); else PLT_S = pReloc.symValue(); Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address P = pReloc.place(); + Relocator::Address P = pReloc.place(); pReloc.target() = PLT_S + A - P; - return X86Relocator::OK; + return Relocator::OK; } // R_386_TLS_GD: -X86Relocator::Result tls_gd(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result tls_gd(Relocation& pReloc, X86_32Relocator& pParent) { // global-dynamic ResolveInfo* rsym = pReloc.symInfo(); // must reserve two pairs of got and dynamic relocation if (!(rsym->reserved() & X86Relocator::ReserveGOT)) - return X86Relocator::BadReloc; + return Relocator::BadReloc; ELFFileFormat* file_format = pParent.getTarget().getOutputFormat(); // setup corresponding got and dynamic relocatio entries: @@ -1018,16 +1020,16 @@ X86Relocator::Result tls_gd(Relocation& pReloc, X86_32Relocator& pParent) Relocator::DWord A = pReloc.target() + pReloc.addend(); // GOT_OFF - the offset between the got_entry1 and _GLOBAL_OFFSET_TABLE (the // .got.plt section) - X86Relocator::Address GOT_OFF = + Relocator::Address GOT_OFF = file_format->getGOT().addr() + got_entry1->getOffset() - file_format->getGOTPLT().addr(); pReloc.target() = GOT_OFF + A; - return X86Relocator::OK; + return Relocator::OK; } // R_386_TLS_LDM -X86Relocator::Result tls_ldm(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result tls_ldm(Relocation& pReloc, X86_32Relocator& pParent) { // FIXME: no linker optimization for TLS relocation const X86_32GOTEntry& got_entry = pParent.getTLSModuleID(); @@ -1039,46 +1041,46 @@ X86Relocator::Result tls_ldm(Relocation& pReloc, X86_32Relocator& pParent) Relocator::DWord A = pReloc.target() + pReloc.addend(); pReloc.target() = GOT_S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_386_TLS_LDO_32 -X86Relocator::Result tls_ldo_32(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result tls_ldo_32(Relocation& pReloc, X86_32Relocator& pParent) { // FIXME: no linker optimization for TLS relocation Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address S = pReloc.symValue(); + Relocator::Address S = pReloc.symValue(); pReloc.target() = S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_X86_TLS_IE -X86Relocator::Result tls_ie(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result tls_ie(Relocation& pReloc, X86_32Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); if (!(rsym->reserved() & X86Relocator::ReserveGOT)) { - return X86Relocator::BadReloc; + return Relocator::BadReloc; } // set up the got and dynamic relocation entries if not exist X86_32GOTEntry* got_entry = pParent.getSymGOTMap().lookUp(*rsym); assert(NULL != got_entry); // perform relocation to the absolute address of got_entry - X86Relocator::Address GOT_S = - pParent.getTarget().getGOT().addr() + got_entry->getOffset(); + Relocator::Address GOT_S = + pParent.getTarget().getGOT().addr() + got_entry->getOffset(); Relocator::DWord A = pReloc.target() + pReloc.addend(); pReloc.target() = GOT_S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_386_TLS_GOTIE -X86Relocator::Result tls_gotie(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result tls_gotie(Relocation& pReloc, X86_32Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); if (!(rsym->reserved() & X86Relocator::ReserveGOT)) { - return X86Relocator::BadReloc; + return Relocator::BadReloc; } // set up the got and dynamic relocation entries if not exist @@ -1091,14 +1093,14 @@ X86Relocator::Result tls_gotie(Relocation& pReloc, X86_32Relocator& pParent) Relocator::DWord A = pReloc.target() + pReloc.addend(); pReloc.target() = GOT_S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_X86_TLS_LE -X86Relocator::Result tls_le(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result tls_le(Relocation& pReloc, X86_32Relocator& pParent) { if (pReloc.symInfo()->reserved() & X86Relocator::ReserveRel) - return X86Relocator::OK; + return Relocator::OK; // perform static relocation // get TLS segment @@ -1108,14 +1110,14 @@ X86Relocator::Result tls_le(Relocation& pReloc, X86_32Relocator& pParent) 0x0); assert(tls_seg != pParent.getTarget().elfSegmentTable().end()); Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address S = pReloc.symValue(); + Relocator::Address S = pReloc.symValue(); pReloc.target() = S + A - (*tls_seg)->memsz(); - return X86Relocator::OK; + return Relocator::OK; } -X86Relocator::Result unsupport(Relocation& pReloc, X86_32Relocator& pParent) +Relocator::Result unsupport(Relocation& pReloc, X86_32Relocator& pParent) { - return X86Relocator::Unsupport; + return Relocator::Unsupport; } //===--------------------------------------------------------------------===// @@ -1126,7 +1128,7 @@ static Relocation& helper_DynRel_init(ResolveInfo* pSym, Fragment& pFrag, uint64_t pOffset, - X86Relocator::Type pType, + Relocator::Type pType, X86_64Relocator& pParent) { X86_64GNULDBackend& ld_backend = pParent.getTarget(); @@ -1193,14 +1195,14 @@ X86_64GOTEntry& helper_GOT_init(Relocation& pReloc, } static -X86Relocator::Address helper_GOT_ORG(X86_64Relocator& pParent) +Relocator::Address helper_GOT_ORG(X86_64Relocator& pParent) { return pParent.getTarget().getGOT().addr(); } static -X86Relocator::Address helper_get_GOT_address(Relocation& pReloc, - X86_64Relocator& pParent) +Relocator::Address helper_get_GOT_address(Relocation& pReloc, + X86_64Relocator& pParent) { X86_64GOTEntry* got_entry = pParent.getSymGOTMap().lookUp(*pReloc.symInfo()); assert(NULL != got_entry); @@ -1208,8 +1210,8 @@ X86Relocator::Address helper_get_GOT_address(Relocation& pReloc, } static -X86Relocator::Address helper_get_PLT_address(ResolveInfo& pSym, - X86_64Relocator& pParent) +Relocator::Address helper_get_PLT_address(ResolveInfo& pSym, + X86_64Relocator& pParent) { PLTEntryBase* plt_entry = pParent.getSymPLTMap().lookUp(pSym); assert(NULL != plt_entry); @@ -1248,7 +1250,7 @@ DECL_X86_64_APPLY_RELOC_FUNCS /// the prototype of applying function typedef Relocator::Result (*X86_64ApplyFunctionType)(Relocation& pReloc, - X86_64Relocator& pParent); + X86_64Relocator& pParent); // the table entry of applying functions struct X86_64ApplyFunctionTriple @@ -1426,7 +1428,7 @@ void X86_64Relocator::scanGlobalReloc(Relocation& pReloc, *this); getRelRelMap().record(pReloc, reloc); } - getTarget().checkAndSetHasTextRel(*pSection.getLink()); + getTarget().checkAndSetHasTextRel(*pSection.getLink()); } } return; @@ -1497,12 +1499,12 @@ void X86_64Relocator::scanGlobalReloc(Relocation& pReloc, // All other dynamic relocations may lead to run-time relocation // overflow. if (getTarget().isDynamicSymbol(*rsym) && - getTarget().symbolNeedsDynRel(*rsym, + getTarget().symbolNeedsDynRel(*rsym, (rsym->reserved() & ReservePLT), false) && - getTarget().symbolNeedsCopyReloc(pReloc, *rsym)) { - LDSymbol& cpy_sym = defineSymbolforCopyReloc(pBuilder, *rsym, getTarget()); - addCopyReloc(*cpy_sym.resolveInfo(), getTarget()); + getTarget().symbolNeedsCopyReloc(pReloc, *rsym)) { + LDSymbol& cpy_sym = defineSymbolforCopyReloc(pBuilder, *rsym, getTarget()); + addCopyReloc(*cpy_sym.resolveInfo(), getTarget()); } return; @@ -1517,16 +1519,16 @@ void X86_64Relocator::scanGlobalReloc(Relocation& pReloc, // // === // R_X86_64_NONE -X86Relocator::Result none(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result none(Relocation& pReloc, X86_64Relocator& pParent) { - return X86Relocator::OK; + return Relocator::OK; } // R_X86_64_64: S + A // R_X86_64_32: // R_X86_64_16: // R_X86_64_8 -X86Relocator::Result abs(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result abs(Relocation& pReloc, X86_64Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); Relocator::DWord A = pReloc.target() + pReloc.addend(); @@ -1539,13 +1541,13 @@ X86Relocator::Result abs(Relocation& pReloc, X86_64Relocator& pParent) // but perform static relocation. (e.g., applying .debug section) if (0x0 == (llvm::ELF::SHF_ALLOC & target_sect.flag())) { pReloc.target() = S + A; - return X86Relocator::OK; + return Relocator::OK; } // A local symbol may need RELA Type dynamic relocation if (rsym->isLocal() && has_dyn_rel) { dyn_rel->setAddend(S + A); - return X86Relocator::OK; + return Relocator::OK; } // An external symbol may need PLT and dynamic relocation @@ -1563,18 +1565,18 @@ X86Relocator::Result abs(Relocation& pReloc, X86_64Relocator& pParent) } else { dyn_rel->setAddend(A); - return X86Relocator::OK; + return Relocator::OK; } } } // perform static relocation pReloc.target() = S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_X86_64_32S: S + A -X86Relocator::Result signed32(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result signed32(Relocation& pReloc, X86_64Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); Relocator::DWord A = pReloc.target() + pReloc.addend(); @@ -1582,7 +1584,7 @@ X86Relocator::Result signed32(Relocation& pReloc, X86_64Relocator& pParent) // There should be no dynamic relocations for R_X86_64_32S. if (NULL != pParent.getRelRelMap().lookUp(pReloc)) - return X86Relocator::BadReloc; + return Relocator::BadReloc; LDSection& target_sect = pReloc.targetRef().frag()->getParent()->getSection(); // If the flag of target section is not ALLOC, we will not scan this relocation @@ -1596,19 +1598,19 @@ X86Relocator::Result signed32(Relocation& pReloc, X86_64Relocator& pParent) // Check 32-bit signed overflow. Relocator::SWord V = S + A; if (V > INT64_C(0x7fffffff) || V < INT64_C(-0x80000000)) - return X86Relocator::Overflow; + return Relocator::Overflow; #endif // perform static relocation pReloc.target() = S + A; - return X86Relocator::OK; + return Relocator::OK; } // R_X86_64_GOTPCREL: GOT(S) + GOT_ORG + A - P -X86Relocator::Result gotpcrel(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result gotpcrel(Relocation& pReloc, X86_64Relocator& pParent) { if (!(pReloc.symInfo()->reserved() & X86Relocator::ReserveGOT)) { - return X86Relocator::BadReloc; + return Relocator::BadReloc; } // set symbol value of the got entry if needed @@ -1622,33 +1624,33 @@ X86Relocator::Result gotpcrel(Relocation& pReloc, X86_64Relocator& pParent) dyn_rel->setAddend(pReloc.symValue()); } - X86Relocator::Address GOT_S = helper_get_GOT_address(pReloc, pParent); - Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); + Relocator::Address GOT_S = helper_get_GOT_address(pReloc, pParent); + Relocator::DWord A = pReloc.target() + pReloc.addend(); + Relocator::Address GOT_ORG = helper_GOT_ORG(pParent); // Apply relocation. pReloc.target() = GOT_S + GOT_ORG + A - pReloc.place(); - return X86Relocator::OK; + return Relocator::OK; } // R_X86_64_PLT32: PLT(S) + A - P -X86Relocator::Result plt32(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result plt32(Relocation& pReloc, X86_64Relocator& pParent) { // PLT_S depends on if there is a PLT entry. - X86Relocator::Address PLT_S; + Relocator::Address PLT_S; if ((pReloc.symInfo()->reserved() & X86Relocator::ReservePLT)) PLT_S = helper_get_PLT_address(*pReloc.symInfo(), pParent); else PLT_S = pReloc.symValue(); - Relocator::DWord A = pReloc.target() + pReloc.addend(); - X86Relocator::Address P = pReloc.place(); + Relocator::DWord A = pReloc.target() + pReloc.addend(); + Relocator::Address P = pReloc.place(); pReloc.target() = PLT_S + A - P; - return X86Relocator::OK; + return Relocator::OK; } // R_X86_64_PC32: S + A - P // R_X86_64_PC16 // R_X86_64_PC8 -X86Relocator::Result rel(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result rel(Relocation& pReloc, X86_64Relocator& pParent) { ResolveInfo* rsym = pReloc.symInfo(); Relocator::DWord A = pReloc.target() + pReloc.addend(); @@ -1660,7 +1662,7 @@ X86Relocator::Result rel(Relocation& pReloc, X86_64Relocator& pParent) // but perform static relocation. (e.g., applying .debug section) if (0x0 == (llvm::ELF::SHF_ALLOC & target_sect.flag())) { pReloc.target() = S + A - P; - return X86Relocator::OK; + return Relocator::OK; } // setup relocation addend if needed @@ -1678,16 +1680,16 @@ X86Relocator::Result rel(Relocation& pReloc, X86_64Relocator& pParent) *rsym, (rsym->reserved() & X86Relocator::ReservePLT), false)) { - return X86Relocator::Overflow; + return Relocator::Overflow; } } // perform static relocation pReloc.target() = S + A - P; - return X86Relocator::OK; + return Relocator::OK; } -X86Relocator::Result unsupport(Relocation& pReloc, X86_64Relocator& pParent) +Relocator::Result unsupport(Relocation& pReloc, X86_64Relocator& pParent) { - return X86Relocator::Unsupport; + return Relocator::Unsupport; } |