mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
Always sort by offset first. NFC.
Every target changing sortRelocs was first calling the parent implementation. Just run that first. llvm-svn: 255898
This commit is contained in:
parent
047024fc88
commit
d12e397608
@ -1046,10 +1046,26 @@ void ELFObjectWriter::WriteSecHdrEntry(uint32_t Name, uint32_t Type,
|
||||
WriteWord(EntrySize); // sh_entsize
|
||||
}
|
||||
|
||||
// ELF doesn't require relocations to be in any order. We sort by the Offset,
|
||||
// just to match gnu as for easier comparison. The use type is an arbitrary way
|
||||
// of making the sort deterministic.
|
||||
static int cmpRel(const ELFRelocationEntry *AP, const ELFRelocationEntry *BP) {
|
||||
const ELFRelocationEntry &A = *AP;
|
||||
const ELFRelocationEntry &B = *BP;
|
||||
if (A.Offset != B.Offset)
|
||||
return B.Offset - A.Offset;
|
||||
if (B.Type != A.Type)
|
||||
return A.Type - B.Type;
|
||||
llvm_unreachable("ELFRelocs might be unstable!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ELFObjectWriter::writeRelocations(const MCAssembler &Asm,
|
||||
const MCSectionELF &Sec) {
|
||||
std::vector<ELFRelocationEntry> &Relocs = Relocations[&Sec];
|
||||
|
||||
array_pod_sort(Relocs.begin(), Relocs.end(), cmpRel);
|
||||
|
||||
// Sort the relocation entries. Most targets just sort by Offset, but some
|
||||
// (e.g., MIPS) have additional constraints.
|
||||
TargetObjectWriter->sortRelocs(Asm, Relocs);
|
||||
|
@ -29,23 +29,7 @@ bool MCELFObjectTargetWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||
return false;
|
||||
}
|
||||
|
||||
// ELF doesn't require relocations to be in any order. We sort by the Offset,
|
||||
// just to match gnu as for easier comparison. The use type is an arbitrary way
|
||||
// of making the sort deterministic.
|
||||
static int cmpRel(const ELFRelocationEntry *AP, const ELFRelocationEntry *BP) {
|
||||
const ELFRelocationEntry &A = *AP;
|
||||
const ELFRelocationEntry &B = *BP;
|
||||
if (A.Offset != B.Offset)
|
||||
return B.Offset - A.Offset;
|
||||
if (B.Type != A.Type)
|
||||
return A.Type - B.Type;
|
||||
//llvm_unreachable("ELFRelocs might be unstable!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MCELFObjectTargetWriter::sortRelocs(const MCAssembler &Asm,
|
||||
std::vector<ELFRelocationEntry> &Relocs) {
|
||||
array_pod_sort(Relocs.begin(), Relocs.end(), cmpRel);
|
||||
}
|
||||
|
@ -332,9 +332,6 @@ void MipsELFObjectWriter::sortRelocs(const MCAssembler &Asm,
|
||||
if (Relocs.size() < 2)
|
||||
return;
|
||||
|
||||
// The default function sorts entries by Offset in descending order.
|
||||
MCELFObjectTargetWriter::sortRelocs(Asm, Relocs);
|
||||
|
||||
// Init MipsRelocs from Relocs.
|
||||
std::vector<MipsRelocationEntry> MipsRelocs;
|
||||
for (unsigned I = 0, E = Relocs.size(); I != E; ++I)
|
||||
|
@ -156,9 +156,6 @@ unsigned SystemZObjectWriter::GetRelocType(const MCValue &Target,
|
||||
|
||||
void SystemZObjectWriter::sortRelocs(const MCAssembler &Asm,
|
||||
std::vector<ELFRelocationEntry> &Relocs) {
|
||||
// The default function sorts entries by Offset in descending order.
|
||||
MCELFObjectTargetWriter::sortRelocs(Asm, Relocs);
|
||||
|
||||
// This is OK for SystemZ, except for R_390_TLS_GDCALL/LDCALL relocs.
|
||||
// There is typically another reloc, a R_390_PLT32DBL, on the same
|
||||
// instruction. This other reloc must come *before* the GDCALL reloc,
|
||||
|
Loading…
Reference in New Issue
Block a user