Skip to content

Commit 1a6bf94

Browse files
committed
[MC] Remove ELFRelocationEntry::OriginalAddend
For MIPS's o32 ABI (REL), https://reviews.llvm.org/D19718 introduced `OriginalAddend` to find the matching R_MIPS_LO16 relocation for R_MIPS_GOT16 when STT_SECTION conversion is applicable. lw $2, %lo(local1) lui $2, %got(local1) However, we could just store the original `Addend` in `ELFRelocationEntry` and remove `OriginalAddend`. Note: The relocation ordering algorithm in https://reviews.llvm.org/D19718 is inefficient (#104562), which will be addressed by another patch.
1 parent c6e16a4 commit 1a6bf94

File tree

3 files changed

+13
-22
lines changed

3 files changed

+13
-22
lines changed

llvm/include/llvm/MC/MCELFObjectWriter.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,15 @@ struct ELFRelocationEntry {
3838
unsigned Type; // The type of the relocation.
3939
uint64_t Addend; // The addend to use.
4040
const MCSymbolELF *OriginalSymbol; // The original value of Symbol if we changed it.
41-
uint64_t OriginalAddend; // The original value of addend.
4241

4342
ELFRelocationEntry(uint64_t Offset, const MCSymbolELF *Symbol, unsigned Type,
44-
uint64_t Addend, const MCSymbolELF *OriginalSymbol,
45-
uint64_t OriginalAddend)
43+
uint64_t Addend, const MCSymbolELF *OriginalSymbol)
4644
: Offset(Offset), Symbol(Symbol), Type(Type), Addend(Addend),
47-
OriginalSymbol(OriginalSymbol), OriginalAddend(OriginalAddend) {}
45+
OriginalSymbol(OriginalSymbol) {}
4846

4947
void print(raw_ostream &Out) const {
5048
Out << "Off=" << Offset << ", Sym=" << Symbol << ", Type=" << Type
51-
<< ", Addend=" << Addend << ", OriginalSymbol=" << OriginalSymbol
52-
<< ", OriginalAddend=" << OriginalAddend;
49+
<< ", Addend=" << Addend << ", OriginalSymbol=" << OriginalSymbol;
5350
}
5451

5552
LLVM_DUMP_METHOD void dump() const { print(errs()); }

llvm/lib/MC/ELFObjectWriter.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,22 +1443,17 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm,
14431443
bool RelocateWithSymbol =
14441444
shouldRelocateWithSymbol(Asm, Target, SymA, C, Type) ||
14451445
(Parent->getType() == ELF::SHT_LLVM_CALL_GRAPH_PROFILE);
1446-
uint64_t Addend = 0;
1447-
1448-
FixedValue = !RelocateWithSymbol && SymA && !SymA->isUndefined()
1449-
? C + Asm.getSymbolOffset(*SymA)
1450-
: C;
1451-
if (usesRela(TO, FixupSection)) {
1452-
Addend = FixedValue;
1453-
FixedValue = 0;
1454-
}
1446+
uint64_t Addend = !RelocateWithSymbol && SymA && !SymA->isUndefined()
1447+
? C + Asm.getSymbolOffset(*SymA)
1448+
: C;
1449+
FixedValue = usesRela(TO, FixupSection) ? 0 : Addend;
14551450

14561451
if (!RelocateWithSymbol) {
14571452
const auto *SectionSymbol =
14581453
SecA ? cast<MCSymbolELF>(SecA->getBeginSymbol()) : nullptr;
14591454
if (SectionSymbol)
14601455
SectionSymbol->setUsedInReloc();
1461-
ELFRelocationEntry Rec(FixupOffset, SectionSymbol, Type, Addend, SymA, C);
1456+
ELFRelocationEntry Rec(FixupOffset, SectionSymbol, Type, Addend, SymA);
14621457
Relocations[&FixupSection].push_back(Rec);
14631458
return;
14641459
}
@@ -1473,7 +1468,7 @@ void ELFObjectWriter::recordRelocation(MCAssembler &Asm,
14731468
else
14741469
RenamedSymA->setUsedInReloc();
14751470
}
1476-
ELFRelocationEntry Rec(FixupOffset, RenamedSymA, Type, Addend, SymA, C);
1471+
ELFRelocationEntry Rec(FixupOffset, RenamedSymA, Type, Addend, SymA);
14771472
Relocations[&FixupSection].push_back(Rec);
14781473
}
14791474

llvm/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,9 @@ static FindBestPredicateResult isMatchingReloc(const MipsRelocationEntry &X,
166166
const ELFRelocationEntry &R,
167167
unsigned MatchingType) {
168168
if (X.R.Type == MatchingType && X.R.OriginalSymbol == R.OriginalSymbol) {
169-
if (!X.Matched &&
170-
X.R.OriginalAddend == R.OriginalAddend)
169+
if (!X.Matched && X.R.Addend == R.Addend)
171170
return FindBest_PerfectMatch;
172-
else if (X.R.OriginalAddend >= R.OriginalAddend)
171+
else if (X.R.Addend >= R.Addend)
173172
return FindBest_Match;
174173
}
175174
return FindBest_NoMatch;
@@ -183,8 +182,8 @@ static FindBestPredicateResult isMatchingReloc(const MipsRelocationEntry &X,
183182
/// - It is not already involved in a match.
184183
static bool compareMatchingRelocs(const MipsRelocationEntry &Candidate,
185184
const MipsRelocationEntry &PreviousBest) {
186-
if (Candidate.R.OriginalAddend != PreviousBest.R.OriginalAddend)
187-
return Candidate.R.OriginalAddend < PreviousBest.R.OriginalAddend;
185+
if (Candidate.R.Addend != PreviousBest.R.Addend)
186+
return Candidate.R.Addend < PreviousBest.R.Addend;
188187
return PreviousBest.Matched && !Candidate.Matched;
189188
}
190189

0 commit comments

Comments
 (0)