Skip to content

Commit ba6b705

Browse files
committed
MC: Replace getOrCreateDataFragment with getCurrentFragment
Add an assert to ensure `CurFrag` is either null or an `FT_Data` fragment. Follow-up to 39c8cfb. Extracted from #149721
1 parent 6201761 commit ba6b705

File tree

8 files changed

+29
-28
lines changed

8 files changed

+29
-28
lines changed

llvm/include/llvm/MC/MCObjectStreamer.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,6 @@ class MCObjectStreamer : public MCStreamer {
7272
MCSymbol *emitCFILabel() override;
7373
void emitCFISections(bool EH, bool Debug) override;
7474

75-
// TODO: Change callers to use getCurrentFragment instead.
76-
MCFragment *getOrCreateDataFragment() { return getCurrentFragment(); }
77-
7875
protected:
7976
bool changeSectionImpl(MCSection *Section, uint32_t Subsection);
8077

llvm/include/llvm/MC/MCStreamer.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,8 +427,12 @@ class LLVM_ABI MCStreamer {
427427
}
428428

429429
MCFragment *getCurrentFragment() const {
430+
// Ensure consistency with the section stack.
430431
assert(!getCurrentSection().first ||
431432
CurFrag->getParent() == getCurrentSection().first);
433+
// Ensure we eagerly allocate an empty fragment after adding fragment with a
434+
// variable-size tail.
435+
assert(!CurFrag || CurFrag->getKind() == MCFragment::FT_Data);
432436
return CurFrag;
433437
}
434438
/// Save the current and previous section on the section stack.

llvm/lib/MC/MCObjectStreamer.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ void MCObjectStreamer::emitCFISections(bool EH, bool Debug) {
119119
void MCObjectStreamer::emitValueImpl(const MCExpr *Value, unsigned Size,
120120
SMLoc Loc) {
121121
MCStreamer::emitValueImpl(Value, Size, Loc);
122-
MCFragment *DF = getOrCreateDataFragment();
122+
MCFragment *DF = getCurrentFragment();
123123

124124
MCDwarfLineEntry::make(this, getCurrentSectionOnly());
125125

@@ -168,7 +168,7 @@ void MCObjectStreamer::emitLabel(MCSymbol *Symbol, SMLoc Loc) {
168168
// If there is a current fragment, mark the symbol as pointing into it.
169169
// Otherwise queue the label and set its fragment pointer when we emit the
170170
// next fragment.
171-
MCFragment *F = getOrCreateDataFragment();
171+
MCFragment *F = getCurrentFragment();
172172
Symbol->setFragment(F);
173173
Symbol->setOffset(F->getContents().size());
174174

@@ -202,7 +202,7 @@ void MCObjectStreamer::emitULEB128Value(const MCExpr *Value) {
202202
emitULEB128IntValue(IntValue);
203203
return;
204204
}
205-
auto *F = getOrCreateDataFragment();
205+
auto *F = getCurrentFragment();
206206
F->makeLEB(false, Value);
207207
newFragment();
208208
}
@@ -213,7 +213,7 @@ void MCObjectStreamer::emitSLEB128Value(const MCExpr *Value) {
213213
emitSLEB128IntValue(IntValue);
214214
return;
215215
}
216-
auto *F = getOrCreateDataFragment();
216+
auto *F = getCurrentFragment();
217217
F->makeLEB(true, Value);
218218
newFragment();
219219
}
@@ -312,7 +312,7 @@ void MCObjectStreamer::emitInstruction(const MCInst &Inst,
312312

313313
void MCObjectStreamer::emitInstToData(const MCInst &Inst,
314314
const MCSubtargetInfo &STI) {
315-
MCFragment *F = getOrCreateDataFragment();
315+
MCFragment *F = getCurrentFragment();
316316

317317
// Append the instruction to the data fragment.
318318
size_t FixupStartIndex = F->getFixups().size();
@@ -344,7 +344,7 @@ void MCObjectStreamer::emitInstToData(const MCInst &Inst,
344344

345345
void MCObjectStreamer::emitInstToFragment(const MCInst &Inst,
346346
const MCSubtargetInfo &STI) {
347-
auto *F = getOrCreateDataFragment();
347+
auto *F = getCurrentFragment();
348348
SmallVector<char, 16> Data;
349349
SmallVector<MCFixup, 1> Fixups;
350350
getAssembler().getEmitter().encodeInstruction(Inst, Data, Fixups, STI);
@@ -417,7 +417,7 @@ void MCObjectStreamer::emitDwarfAdvanceLineAddr(int64_t LineDelta,
417417
return;
418418
}
419419

420-
auto *F = getOrCreateDataFragment();
420+
auto *F = getCurrentFragment();
421421
F->Kind = MCFragment::FT_Dwarf;
422422
F->setDwarfAddrDelta(buildSymbolDiff(*this, Label, LastLabel, SMLoc()));
423423
F->setDwarfLineDelta(LineDelta);
@@ -449,7 +449,7 @@ void MCObjectStreamer::emitDwarfLineEndEntry(MCSection *Section,
449449
void MCObjectStreamer::emitDwarfAdvanceFrameAddr(const MCSymbol *LastLabel,
450450
const MCSymbol *Label,
451451
SMLoc Loc) {
452-
auto *F = getOrCreateDataFragment();
452+
auto *F = getCurrentFragment();
453453
F->Kind = MCFragment::FT_DwarfFrame;
454454
F->setDwarfAddrDelta(buildSymbolDiff(*this, Label, LastLabel, Loc));
455455
newFragment();
@@ -511,7 +511,7 @@ void MCObjectStreamer::emitCVFileChecksumOffsetDirective(unsigned FileNo) {
511511

512512
void MCObjectStreamer::emitBytes(StringRef Data) {
513513
MCDwarfLineEntry::make(this, getCurrentSectionOnly());
514-
MCFragment *DF = getOrCreateDataFragment();
514+
MCFragment *DF = getCurrentFragment();
515515
DF->appendContents(ArrayRef(Data.data(), Data.size()));
516516
}
517517

llvm/lib/MC/MCWin64EH.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ static void EmitUnwindInfo(MCStreamer &streamer, WinEH::FrameInfo *info) {
318318

319319
// Emit the epilog instructions.
320320
if (EnableUnwindV2) {
321-
MCFragment *DF = OS->getOrCreateDataFragment();
321+
MCFragment *DF = OS->getCurrentFragment();
322322

323323
bool IsLast = true;
324324
for (const auto &Epilog : llvm::reverse(info->EpilogMap)) {

llvm/lib/MC/MCWinCOFFStreamer.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ void MCWinCOFFStreamer::emitCOFFSymbolIndex(MCSymbol const *Symbol) {
278278

279279
void MCWinCOFFStreamer::emitCOFFSectionIndex(const MCSymbol *Symbol) {
280280
visitUsedSymbol(*Symbol);
281-
MCFragment *DF = getOrCreateDataFragment();
281+
MCFragment *DF = getCurrentFragment();
282282
const MCSymbolRefExpr *SRE = MCSymbolRefExpr::create(Symbol, getContext());
283283
MCFixup Fixup = MCFixup::create(DF->getContents().size(), SRE, FK_SecRel_2);
284284
DF->addFixup(Fixup);
@@ -288,7 +288,7 @@ void MCWinCOFFStreamer::emitCOFFSectionIndex(const MCSymbol *Symbol) {
288288
void MCWinCOFFStreamer::emitCOFFSecRel32(const MCSymbol *Symbol,
289289
uint64_t Offset) {
290290
visitUsedSymbol(*Symbol);
291-
MCFragment *DF = getOrCreateDataFragment();
291+
MCFragment *DF = getCurrentFragment();
292292
// Create Symbol A for the relocation relative reference.
293293
const MCExpr *MCE = MCSymbolRefExpr::create(Symbol, getContext());
294294
// Add the constant offset, if given.
@@ -306,7 +306,7 @@ void MCWinCOFFStreamer::emitCOFFSecRel32(const MCSymbol *Symbol,
306306
void MCWinCOFFStreamer::emitCOFFImgRel32(const MCSymbol *Symbol,
307307
int64_t Offset) {
308308
visitUsedSymbol(*Symbol);
309-
MCFragment *DF = getOrCreateDataFragment();
309+
MCFragment *DF = getCurrentFragment();
310310
// Create Symbol A for the relocation relative reference.
311311
const MCExpr *MCE = MCSymbolRefExpr::create(
312312
Symbol, MCSymbolRefExpr::VK_COFF_IMGREL32, getContext());
@@ -324,7 +324,7 @@ void MCWinCOFFStreamer::emitCOFFImgRel32(const MCSymbol *Symbol,
324324

325325
void MCWinCOFFStreamer::emitCOFFSecNumber(MCSymbol const *Symbol) {
326326
visitUsedSymbol(*Symbol);
327-
MCFragment *DF = getOrCreateDataFragment();
327+
MCFragment *DF = getCurrentFragment();
328328
// Create Symbol for section number.
329329
const MCExpr *MCE = MCCOFFSectionNumberTargetExpr::create(
330330
*Symbol, this->getWriter(), getContext());
@@ -338,7 +338,7 @@ void MCWinCOFFStreamer::emitCOFFSecNumber(MCSymbol const *Symbol) {
338338

339339
void MCWinCOFFStreamer::emitCOFFSecOffset(MCSymbol const *Symbol) {
340340
visitUsedSymbol(*Symbol);
341-
MCFragment *DF = getOrCreateDataFragment();
341+
MCFragment *DF = getCurrentFragment();
342342
// Create Symbol for section offset.
343343
const MCExpr *MCE =
344344
MCCOFFSectionOffsetTargetExpr::create(*Symbol, getContext());

llvm/lib/MC/MCXCOFFStreamer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ void MCXCOFFStreamer::emitXCOFFSymbolLinkageWithVisibility(
8989
void MCXCOFFStreamer::emitXCOFFRefDirective(const MCSymbol *Symbol) {
9090
// Add a Fixup here to later record a relocation of type R_REF to prevent the
9191
// ref symbol from being garbage collected (by the binder).
92-
MCFragment *DF = getOrCreateDataFragment();
92+
MCFragment *DF = getCurrentFragment();
9393
const MCSymbolRefExpr *SRE = MCSymbolRefExpr::create(Symbol, getContext());
9494
std::optional<MCFixupKind> MaybeKind =
9595
getAssembler().getBackend().getFixupKind("R_REF");

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ class ARMELFStreamer : public MCELFStreamer {
593593
getContext().reportError(Loc, "relocated expression must be 32-bit");
594594
return;
595595
}
596-
getOrCreateDataFragment();
596+
getCurrentFragment();
597597
}
598598

599599
emitDataMappingSymbol();
@@ -1207,7 +1207,7 @@ inline void ARMELFStreamer::SwitchToExIdxSection(const MCSymbol &FnStart) {
12071207
}
12081208

12091209
void ARMELFStreamer::EmitFixup(const MCExpr *Expr, MCFixupKind Kind) {
1210-
MCFragment *Frag = getOrCreateDataFragment();
1210+
MCFragment *Frag = getCurrentFragment();
12111211
Frag->addFixup(MCFixup::create(Frag->getContents().size(), Expr, Kind));
12121212
}
12131213

@@ -1295,7 +1295,7 @@ void ARMELFStreamer::EmitPersonalityFixup(StringRef Name) {
12951295
MCSymbolRefExpr::create(PersonalitySym, ARM::S_ARM_NONE, getContext());
12961296

12971297
visitUsedExpr(*PersonalityRef);
1298-
MCFragment *DF = getOrCreateDataFragment();
1298+
MCFragment *DF = getCurrentFragment();
12991299
DF->addFixup(
13001300
MCFixup::create(DF->getContents().size(), PersonalityRef, FK_Data_4));
13011301
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1033,42 +1033,42 @@ MCELFStreamer &MipsTargetELFStreamer::getStreamer() {
10331033
}
10341034

10351035
void MipsTargetELFStreamer::emitGPRel32Value(const MCExpr *Value) {
1036-
MCFragment *DF = getStreamer().getOrCreateDataFragment();
1036+
MCFragment *DF = getStreamer().getCurrentFragment();
10371037
DF->addFixup(MCFixup::create(DF->getContents().size(), Value,
10381038
Mips::fixup_Mips_GPREL32));
10391039
DF->appendContents(4, 0);
10401040
}
10411041

10421042
void MipsTargetELFStreamer::emitGPRel64Value(const MCExpr *Value) {
1043-
MCFragment *DF = getStreamer().getOrCreateDataFragment();
1043+
MCFragment *DF = getStreamer().getCurrentFragment();
10441044
DF->addFixup(MCFixup::create(DF->getContents().size(), Value,
10451045
Mips::fixup_Mips_GPREL32));
10461046
DF->appendContents(8, 0);
10471047
}
10481048

10491049
void MipsTargetELFStreamer::emitDTPRel32Value(const MCExpr *Value) {
1050-
MCFragment *DF = getStreamer().getOrCreateDataFragment();
1050+
MCFragment *DF = getStreamer().getCurrentFragment();
10511051
DF->addFixup(MCFixup::create(DF->getContents().size(), Value,
10521052
Mips::fixup_Mips_DTPREL32));
10531053
DF->appendContents(4, 0);
10541054
}
10551055

10561056
void MipsTargetELFStreamer::emitDTPRel64Value(const MCExpr *Value) {
1057-
MCFragment *DF = getStreamer().getOrCreateDataFragment();
1057+
MCFragment *DF = getStreamer().getCurrentFragment();
10581058
DF->addFixup(MCFixup::create(DF->getContents().size(), Value,
10591059
Mips::fixup_Mips_DTPREL64));
10601060
DF->appendContents(8, 0);
10611061
}
10621062

10631063
void MipsTargetELFStreamer::emitTPRel32Value(const MCExpr *Value) {
1064-
MCFragment *DF = getStreamer().getOrCreateDataFragment();
1064+
MCFragment *DF = getStreamer().getCurrentFragment();
10651065
DF->addFixup(MCFixup::create(DF->getContents().size(), Value,
10661066
Mips::fixup_Mips_TPREL32));
10671067
DF->appendContents(4, 0);
10681068
}
10691069

10701070
void MipsTargetELFStreamer::emitTPRel64Value(const MCExpr *Value) {
1071-
MCFragment *DF = getStreamer().getOrCreateDataFragment();
1071+
MCFragment *DF = getStreamer().getCurrentFragment();
10721072
DF->addFixup(MCFixup::create(DF->getContents().size(), Value,
10731073
Mips::fixup_Mips_TPREL64));
10741074
DF->appendContents(8, 0);

0 commit comments

Comments
 (0)