[llvm] dd50e8e - MCFragment: Remove setContents/setFixups
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 20 12:00:48 PDT 2025
Author: Fangrui Song
Date: 2025-07-20T12:00:43-07:00
New Revision: dd50e8e240d19e5050f4e52d8715d093a3fb810a
URL: https://github.com/llvm/llvm-project/commit/dd50e8e240d19e5050f4e52d8715d093a3fb810a
DIFF: https://github.com/llvm/llvm-project/commit/dd50e8e240d19e5050f4e52d8715d093a3fb810a.diff
LOG: MCFragment: Remove setContents/setFixups
Make the fixed-size part of MCFragment append-only to support allocating
content as trailing data. Update CodeView callers to use setVarContents
instead of setContents. Remove unused setFixups.
Added:
Modified:
llvm/include/llvm/MC/MCSection.h
llvm/lib/MC/MCAssembler.cpp
llvm/lib/MC/MCCodeView.cpp
llvm/lib/MC/MCSection.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCSection.h b/llvm/include/llvm/MC/MCSection.h
index 2013b02ce5f23..953e6f7e5208d 100644
--- a/llvm/include/llvm/MC/MCSection.h
+++ b/llvm/include/llvm/MC/MCSection.h
@@ -231,11 +231,16 @@ class MCFragment {
/// FT_Relaxable, x86-specific
bool AllowAutoPadding : 1;
+ // Track content and fixups for the fixed-size part as fragments are
+ // appended to the section. The content remains immutable, except when
+ // modified by applyFixup.
uint32_t ContentStart = 0;
uint32_t ContentEnd = 0;
uint32_t FixupStart = 0;
uint32_t FixupEnd = 0;
+ // Track content and fixups for the optional variable-size tail part,
+ // typically modified during relaxation.
uint32_t VarContentStart = 0;
uint32_t VarContentEnd = 0;
uint32_t VarFixupStart = 0;
@@ -364,7 +369,6 @@ class MCFragment {
getContentsForAppending().append(Num, Elt);
doneAppending();
}
- LLVM_ABI void setContents(ArrayRef<char> Contents);
MutableArrayRef<char> getContents() {
return MutableArrayRef(getParent()->ContentStorage)
.slice(ContentStart, ContentEnd - ContentStart);
@@ -396,7 +400,6 @@ class MCFragment {
void clearFixups() { FixupEnd = FixupStart; }
LLVM_ABI void addFixup(MCFixup Fixup);
LLVM_ABI void appendFixups(ArrayRef<MCFixup> Fixups);
- LLVM_ABI void setFixups(ArrayRef<MCFixup> Fixups);
MutableArrayRef<MCFixup> getFixups() {
return MutableArrayRef(getParent()->FixupStorage)
.slice(FixupStart, FixupEnd - FixupStart);
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 26726c0902f5a..3f9bbc480533b 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -923,15 +923,15 @@ bool MCAssembler::relaxDwarfCallFrameFragment(MCFragment &F) {
}
bool MCAssembler::relaxCVInlineLineTable(MCCVInlineLineTableFragment &F) {
- unsigned OldSize = F.getContents().size();
+ unsigned OldSize = F.getVarContents().size();
getContext().getCVContext().encodeInlineLineTable(*this, F);
- return OldSize != F.getContents().size();
+ return OldSize != F.getVarContents().size();
}
bool MCAssembler::relaxCVDefRange(MCCVDefRangeFragment &F) {
- unsigned OldSize = F.getContents().size();
+ unsigned OldSize = F.getVarContents().size();
getContext().getCVContext().encodeDefRange(*this, F);
- return OldSize != F.getContents().size();
+ return OldSize != F.getVarContents().size();
}
bool MCAssembler::relaxFill(MCFillFragment &F) {
diff --git a/llvm/lib/MC/MCCodeView.cpp b/llvm/lib/MC/MCCodeView.cpp
index b151a2545ddb2..7d528a55432e6 100644
--- a/llvm/lib/MC/MCCodeView.cpp
+++ b/llvm/lib/MC/MCCodeView.cpp
@@ -26,8 +26,10 @@ using namespace llvm;
using namespace llvm::codeview;
void CodeViewContext::finish() {
- if (StrTabFragment)
- StrTabFragment->setContents(StrTab);
+ if (!StrTabFragment)
+ return;
+ assert(StrTabFragment->getKind() == MCFragment::FT_Data);
+ StrTabFragment->setVarContents(StrTab);
}
/// This is a valid number for use with .cv_loc if we've already seen a .cv_file
@@ -168,6 +170,7 @@ void CodeViewContext::emitStringTable(MCObjectStreamer &OS) {
if (!StrTabFragment) {
OS.newFragment();
StrTabFragment = OS.getCurrentFragment();
+ OS.newFragment();
}
OS.emitValueToAlignment(Align(4), 0);
@@ -603,7 +606,7 @@ void CodeViewContext::encodeInlineLineTable(const MCAssembler &Asm,
compressAnnotation(BinaryAnnotationsOpCode::ChangeCodeLength, Buffer);
compressAnnotation(std::min(EndSymLength, LocAfterLength), Buffer);
- Frag.setContents(Buffer);
+ Frag.setVarContents(Buffer);
}
void CodeViewContext::encodeDefRange(const MCAssembler &Asm,
@@ -691,6 +694,6 @@ void CodeViewContext::encodeDefRange(const MCAssembler &Asm,
}
}
- Frag.setContents(Contents);
- Frag.setFixups(Fixups);
+ Frag.setVarContents(Contents);
+ Frag.setVarFixups(Fixups);
}
diff --git a/llvm/lib/MC/MCSection.cpp b/llvm/lib/MC/MCSection.cpp
index 1b5a7b337c207..023f7f27de0aa 100644
--- a/llvm/lib/MC/MCSection.cpp
+++ b/llvm/lib/MC/MCSection.cpp
@@ -58,16 +58,6 @@ LLVM_DUMP_METHOD void MCSection::dump(
}
#endif
-void MCFragment::setContents(ArrayRef<char> Contents) {
- auto &S = getParent()->ContentStorage;
- if (ContentStart + Contents.size() > ContentEnd) {
- ContentStart = S.size();
- S.resize_for_overwrite(S.size() + Contents.size());
- }
- ContentEnd = ContentStart + Contents.size();
- llvm::copy(Contents, S.begin() + ContentStart);
-}
-
void MCFragment::setVarContents(ArrayRef<char> Contents) {
auto &S = getParent()->ContentStorage;
if (VarContentStart + Contents.size() > VarContentEnd) {
@@ -94,16 +84,6 @@ void MCFragment::appendFixups(ArrayRef<MCFixup> Fixups) {
FixupEnd = S.size();
}
-void MCFragment::setFixups(ArrayRef<MCFixup> Fixups) {
- auto &S = getParent()->FixupStorage;
- if (FixupStart + Fixups.size() > FixupEnd) {
- FixupStart = S.size();
- S.resize_for_overwrite(S.size() + Fixups.size());
- }
- FixupEnd = FixupStart + Fixups.size();
- llvm::copy(Fixups, S.begin() + FixupStart);
-}
-
void MCFragment::setVarFixups(ArrayRef<MCFixup> Fixups) {
auto &S = getParent()->FixupStorage;
if (VarFixupStart + Fixups.size() > VarFixupEnd) {
More information about the llvm-commits
mailing list