Skip to content

Commit 21cf7bd

Browse files
committed
BPFMCCodeEmitter: Set PCRel at fixup creation
Avoid reliance on the MCAssembler::evaluateFixup workaround that checks MCFixupKindInfo::FKF_IsPCRel. Additionally, standardize how fixups are appended. This helper will facilitate future fixup data structure optimizations.
1 parent 56cf2cb commit 21cf7bd

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

llvm/lib/Target/BPF/MCTargetDesc/BPFAsmBackend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class BPFAsmBackend : public MCAsmBackend {
4444

4545
MCFixupKindInfo BPFAsmBackend::getFixupKindInfo(MCFixupKind Kind) const {
4646
const static MCFixupKindInfo Infos[BPF::NumTargetFixupKinds] = {
47-
{ "FK_BPF_PCRel_4", 0, 32, MCFixupKindInfo::FKF_IsPCRel },
47+
{"FK_BPF_PCRel_4", 0, 32, 0},
4848
};
4949

5050
if (Kind < FirstTargetFixupKind)

llvm/lib/Target/BPF/MCTargetDesc/BPFMCCodeEmitter.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ MCCodeEmitter *llvm::createBPFbeMCCodeEmitter(const MCInstrInfo &MCII,
7777
return new BPFMCCodeEmitter(MCII, *Ctx.getRegisterInfo(), false, Ctx);
7878
}
7979

80+
static void addFixup(SmallVectorImpl<MCFixup> &Fixups, uint32_t Offset,
81+
const MCExpr *Value, uint16_t Kind, bool PCRel = false) {
82+
Fixups.push_back(MCFixup::create(Offset, Value, Kind, PCRel));
83+
}
84+
8085
unsigned BPFMCCodeEmitter::getMachineOpValue(const MCInst &MI,
8186
const MCOperand &MO,
8287
SmallVectorImpl<MCFixup> &Fixups,
@@ -102,14 +107,14 @@ unsigned BPFMCCodeEmitter::getMachineOpValue(const MCInst &MI,
102107

103108
if (MI.getOpcode() == BPF::JAL)
104109
// func call name
105-
Fixups.push_back(MCFixup::create(0, Expr, FK_PCRel_4));
110+
addFixup(Fixups, 0, Expr, FK_PCRel_4, true);
106111
else if (MI.getOpcode() == BPF::LD_imm64)
107-
Fixups.push_back(MCFixup::create(0, Expr, FK_SecRel_8));
112+
addFixup(Fixups, 0, Expr, FK_SecRel_8);
108113
else if (MI.getOpcode() == BPF::JMPL)
109-
Fixups.push_back(MCFixup::create(0, Expr, (MCFixupKind)BPF::FK_BPF_PCRel_4));
114+
addFixup(Fixups, 0, Expr, BPF::FK_BPF_PCRel_4, true);
110115
else
111116
// bb label
112-
Fixups.push_back(MCFixup::create(0, Expr, FK_PCRel_2));
117+
addFixup(Fixups, 0, Expr, FK_PCRel_2, true);
113118

114119
return 0;
115120
}

0 commit comments

Comments
 (0)