Skip to content

Commit 3a63f73

Browse files
committed
[MC] Refactor writeRelocations. NFC
MIPS is different and should better off use separate code.
1 parent 87c7f4a commit 3a63f73

File tree

1 file changed

+33
-27
lines changed

1 file changed

+33
-27
lines changed

llvm/lib/MC/ELFObjectWriter.cpp

+33-27
Original file line numberDiff line numberDiff line change
@@ -943,54 +943,60 @@ void ELFWriter::writeRelocations(const MCAssembler &Asm,
943943
OWriter.TargetObjectWriter->sortRelocs(Asm, Relocs);
944944

945945
const bool Rela = usesRela(Sec);
946-
for (const ELFRelocationEntry &Entry : Relocs) {
947-
unsigned Index = Entry.Symbol ? Entry.Symbol->getIndex() : 0;
948-
949-
if (is64Bit()) {
950-
write(Entry.Offset);
951-
if (OWriter.TargetObjectWriter->getEMachine() == ELF::EM_MIPS) {
952-
write(uint32_t(Index));
953-
946+
if (OWriter.TargetObjectWriter->getEMachine() == ELF::EM_MIPS) {
947+
for (const ELFRelocationEntry &Entry : Relocs) {
948+
uint32_t Symidx = Entry.Symbol ? Entry.Symbol->getIndex() : 0;
949+
if (is64Bit()) {
950+
write(Entry.Offset);
951+
write(uint32_t(Symidx));
954952
write(OWriter.TargetObjectWriter->getRSsym(Entry.Type));
955953
write(OWriter.TargetObjectWriter->getRType3(Entry.Type));
956954
write(OWriter.TargetObjectWriter->getRType2(Entry.Type));
957955
write(OWriter.TargetObjectWriter->getRType(Entry.Type));
956+
if (Rela)
957+
write(Entry.Addend);
958958
} else {
959-
struct ELF::Elf64_Rela ERE64;
960-
ERE64.setSymbolAndType(Index, Entry.Type);
961-
write(ERE64.r_info);
962-
}
963-
if (Rela)
964-
write(Entry.Addend);
965-
} else {
966-
write(uint32_t(Entry.Offset));
967-
968-
struct ELF::Elf32_Rela ERE32;
969-
ERE32.setSymbolAndType(Index, Entry.Type);
970-
write(ERE32.r_info);
971-
972-
if (Rela)
973-
write(uint32_t(Entry.Addend));
974-
975-
if (OWriter.TargetObjectWriter->getEMachine() == ELF::EM_MIPS) {
959+
write(uint32_t(Entry.Offset));
960+
ELF::Elf32_Rela ERE32;
961+
ERE32.setSymbolAndType(Symidx, Entry.Type);
962+
write(ERE32.r_info);
963+
if (Rela)
964+
write(uint32_t(Entry.Addend));
976965
if (uint32_t RType =
977966
OWriter.TargetObjectWriter->getRType2(Entry.Type)) {
978967
write(uint32_t(Entry.Offset));
979-
980968
ERE32.setSymbolAndType(0, RType);
981969
write(ERE32.r_info);
982970
write(uint32_t(0));
983971
}
984972
if (uint32_t RType =
985973
OWriter.TargetObjectWriter->getRType3(Entry.Type)) {
986974
write(uint32_t(Entry.Offset));
987-
988975
ERE32.setSymbolAndType(0, RType);
989976
write(ERE32.r_info);
990977
write(uint32_t(0));
991978
}
992979
}
993980
}
981+
return;
982+
}
983+
for (const ELFRelocationEntry &Entry : Relocs) {
984+
uint32_t Symidx = Entry.Symbol ? Entry.Symbol->getIndex() : 0;
985+
if (is64Bit()) {
986+
write(Entry.Offset);
987+
ELF::Elf64_Rela ERE;
988+
ERE.setSymbolAndType(Symidx, Entry.Type);
989+
write(ERE.r_info);
990+
if (Rela)
991+
write(Entry.Addend);
992+
} else {
993+
write(uint32_t(Entry.Offset));
994+
ELF::Elf32_Rela ERE;
995+
ERE.setSymbolAndType(Symidx, Entry.Type);
996+
write(ERE.r_info);
997+
if (Rela)
998+
write(uint32_t(Entry.Addend));
999+
}
9941000
}
9951001
}
9961002

0 commit comments

Comments
 (0)