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);