Skip to content

Commit 7d71a35

Browse files
committed
MCFixup: Remove FK_PCRel_ from getKindForSize
Remove FK_PCRel_* kinds from the generic fixup list, as they are not generic like FK_Data_*. In getRelocType, FK_PCRel_* can be replaced with FK_Data_* by leveraging the IsPCRel argument. Their inclusion in the generic kind list caused confusion for PowerPC, RISCV, and VE targets. The X86/M68k uses can be implemented as target-specific fixups.
1 parent dcef154 commit 7d71a35

File tree

10 files changed

+24
-28
lines changed

10 files changed

+24
-28
lines changed

llvm/include/llvm/MC/MCFixup.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,17 @@ class MCFixup {
110110

111111
/// Return the generic fixup kind for a value with the given size. It
112112
/// is an error to pass an unsupported size.
113-
static MCFixupKind getKindForSize(unsigned Size, bool IsPCRel) {
113+
static MCFixupKind getDataKindForSize(unsigned Size) {
114114
switch (Size) {
115115
default: llvm_unreachable("Invalid generic fixup size!");
116116
case 1:
117-
return IsPCRel ? FK_PCRel_1 : FK_Data_1;
117+
return FK_Data_1;
118118
case 2:
119-
return IsPCRel ? FK_PCRel_2 : FK_Data_2;
119+
return FK_Data_2;
120120
case 4:
121-
return IsPCRel ? FK_PCRel_4 : FK_Data_4;
121+
return FK_Data_4;
122122
case 8:
123-
return IsPCRel ? FK_PCRel_8 : FK_Data_8;
123+
return FK_Data_8;
124124
}
125125
}
126126

llvm/lib/MC/MCObjectStreamer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,9 +201,8 @@ void MCObjectStreamer::emitValueImpl(const MCExpr *Value, unsigned Size,
201201
emitIntValue(AbsValue, Size);
202202
return;
203203
}
204-
DF->getFixups().push_back(
205-
MCFixup::create(DF->getContents().size(), Value,
206-
MCFixup::getKindForSize(Size, false), Loc));
204+
DF->getFixups().push_back(MCFixup::create(
205+
DF->getContents().size(), Value, MCFixup::getDataKindForSize(Size), Loc));
207206
DF->appendContents(Size, 0);
208207
}
209208

llvm/lib/MC/WasmObjectWriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1897,7 +1897,7 @@ uint64_t WasmObjectWriter::writeOneObject(MCAssembler &Asm,
18971897
assert(llvm::all_of(DataFrag.getContents(), [](char C) { return !C; }));
18981898
for (const MCFixup &Fixup : DataFrag.getFixups()) {
18991899
assert(Fixup.getKind() ==
1900-
MCFixup::getKindForSize(is64Bit() ? 8 : 4, false));
1900+
MCFixup::getDataKindForSize(is64Bit() ? 8 : 4));
19011901
const MCExpr *Expr = Fixup.getValue();
19021902
auto *SymRef = dyn_cast<MCSymbolRefExpr>(Expr);
19031903
if (!SymRef)

llvm/lib/Target/ARM/MCTargetDesc/ARMELFStreamer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1299,9 +1299,8 @@ void ARMELFStreamer::EmitPersonalityFixup(StringRef Name) {
12991299

13001300
visitUsedExpr(*PersonalityRef);
13011301
MCDataFragment *DF = getOrCreateDataFragment();
1302-
DF->getFixups().push_back(MCFixup::create(DF->getContents().size(),
1303-
PersonalityRef,
1304-
MCFixup::getKindForSize(4, false)));
1302+
DF->getFixups().push_back(
1303+
MCFixup::create(DF->getContents().size(), PersonalityRef, FK_Data_4));
13051304
}
13061305

13071306
void ARMELFStreamer::FlushPendingOffset() {

llvm/lib/Target/M68k/MCTargetDesc/M68kMCCodeEmitter.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,8 @@ void M68kMCCodeEmitter::encodeRelocImm(const MCInst &MI, unsigned OpIdx,
139139

140140
// Relocatable address
141141
unsigned InsertByte = getBytePosition<Size>(InsertPos);
142-
Fixups.push_back(MCFixup::create(InsertByte, Expr,
143-
getFixupForSize(Size, /*IsPCRel=*/false),
144-
MI.getLoc()));
142+
Fixups.push_back(MCFixup::create(
143+
InsertByte, Expr, MCFixup::getDataKindForSize(Size), MI.getLoc()));
145144
}
146145
}
147146

llvm/lib/Target/PowerPC/MCTargetDesc/PPCELFObjectWriter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,11 +167,9 @@ unsigned PPCELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
167167
}
168168
break;
169169
case FK_Data_4:
170-
case FK_PCRel_4:
171170
Type = ELF::R_PPC_REL32;
172171
break;
173172
case FK_Data_8:
174-
case FK_PCRel_8:
175173
Type = ELF::R_PPC64_REL64;
176174
break;
177175
}

llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFObjectWriter.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ unsigned RISCVELFObjectWriter::getRelocType(MCContext &Ctx,
8484
Ctx.reportError(Fixup.getLoc(), "unsupported relocation type");
8585
return ELF::R_RISCV_NONE;
8686
case FK_Data_4:
87-
case FK_PCRel_4:
8887
return ELF::R_RISCV_32_PCREL;
8988
case RISCV::fixup_riscv_pcrel_hi20:
9089
return ELF::R_RISCV_PCREL_HI20;

llvm/lib/Target/VE/MCTargetDesc/VEAsmBackend.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,6 @@ static uint64_t adjustFixupValue(unsigned Kind, uint64_t Value) {
2828
case FK_Data_2:
2929
case FK_Data_4:
3030
case FK_Data_8:
31-
case FK_PCRel_1:
32-
case FK_PCRel_2:
33-
case FK_PCRel_4:
34-
case FK_PCRel_8:
3531
return Value;
3632
case VE::fixup_ve_hi32:
3733
case VE::fixup_ve_pc_hi32:
@@ -60,14 +56,11 @@ static unsigned getFixupKindNumBytes(unsigned Kind) {
6056
default:
6157
llvm_unreachable("Unknown fixup kind!");
6258
case FK_Data_1:
63-
case FK_PCRel_1:
6459
return 1;
6560
case FK_Data_2:
66-
case FK_PCRel_2:
6761
return 2;
6862
return 4;
6963
case FK_Data_4:
70-
case FK_PCRel_4:
7164
case VE::fixup_ve_reflong:
7265
case VE::fixup_ve_srel32:
7366
case VE::fixup_ve_hi32:

llvm/lib/Target/VE/MCTargetDesc/VEELFObjectWriter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,10 @@ unsigned VEELFObjectWriter::getRelocType(MCContext &Ctx, const MCValue &Target,
6767
"1-byte pc-relative data relocation is not supported");
6868
return ELF::R_VE_NONE;
6969
case FK_Data_2:
70-
case FK_PCRel_2:
7170
Ctx.reportError(Fixup.getLoc(),
7271
"2-byte pc-relative data relocation is not supported");
7372
return ELF::R_VE_NONE;
7473
case FK_Data_4:
75-
case FK_PCRel_4:
7674
return ELF::R_VE_SREL32;
7775
case FK_Data_8:
7876
case FK_PCRel_8:

llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,18 @@ static MCFixupKind getImmFixupKind(uint64_t TSFlags) {
451451
return MCFixupKind(X86::reloc_signed_4byte);
452452
}
453453
}
454-
return MCFixup::getKindForSize(Size, isPCRel);
454+
switch (Size) {
455+
default:
456+
llvm_unreachable("Invalid generic fixup size!");
457+
case 1:
458+
return isPCRel ? FK_PCRel_1 : FK_Data_1;
459+
case 2:
460+
return isPCRel ? FK_PCRel_2 : FK_Data_2;
461+
case 4:
462+
return isPCRel ? FK_PCRel_4 : FK_Data_4;
463+
case 8:
464+
return isPCRel ? FK_PCRel_8 : FK_Data_8;
465+
}
455466
}
456467

457468
enum GlobalOffsetTableExprKind { GOT_None, GOT_Normal, GOT_SymDiff };

0 commit comments

Comments
 (0)