diff options
-rw-r--r-- | lld/ELF/OutputSections.cpp | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp index 1f72e123cd3..d237f33033c 100644 --- a/lld/ELF/OutputSections.cpp +++ b/lld/ELF/OutputSections.cpp @@ -261,19 +261,12 @@ typename ELFFile<ELFT>::uintX_t DynamicReloc<ELFT>::getOffset() const { template <class ELFT> void RelocationSection<ELFT>::writeTo(uint8_t *Buf) { for (const DynamicReloc<ELFT> &Rel : Relocs) { - auto *P = reinterpret_cast<Elf_Rel *>(Buf); + auto *P = reinterpret_cast<Elf_Rela *>(Buf); Buf += IsRela ? sizeof(Elf_Rela) : sizeof(Elf_Rel); SymbolBody *Sym = Rel.Sym; - if (IsRela) { - uintX_t VA; - if (Rel.UseSymVA) - VA = Sym->getVA<ELFT>(Rel.Addend); - else - VA = Rel.Addend; - reinterpret_cast<Elf_Rela *>(P)->r_addend = VA; - } - + if (IsRela) + P->r_addend = Rel.UseSymVA ? Sym->getVA<ELFT>(Rel.Addend) : Rel.Addend; P->r_offset = Rel.getOffset(); uint32_t SymIdx = (!Rel.UseSymVA && Sym) ? Sym->DynsymIndex : 0; P->setSymbolAndType(SymIdx, Rel.Type, Config->Mips64EL); |