[llvm] a40ca78 - [MC] Remove MCAsmLayout::{getSectionFileSize,getSectionAddressSize}
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 1 11:27:38 PDT 2024
Author: Fangrui Song
Date: 2024-07-01T11:27:32-07:00
New Revision: a40ca78bb926d8c596036fc93b1c6ca7731c795b
URL: https://github.com/llvm/llvm-project/commit/a40ca78bb926d8c596036fc93b1c6ca7731c795b
DIFF: https://github.com/llvm/llvm-project/commit/a40ca78bb926d8c596036fc93b1c6ca7731c795b.diff
LOG: [MC] Remove MCAsmLayout::{getSectionFileSize,getSectionAddressSize}
Added:
Modified:
llvm/include/llvm/MC/MCAsmLayout.h
llvm/include/llvm/MC/MCMachObjectWriter.h
llvm/lib/MC/MCAssembler.cpp
llvm/lib/MC/MachObjectWriter.cpp
llvm/lib/MC/WasmObjectWriter.cpp
llvm/lib/MC/WinCOFFObjectWriter.cpp
llvm/lib/MC/XCOFFObjectWriter.cpp
llvm/tools/dsymutil/MachOUtils.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/MC/MCAsmLayout.h b/llvm/include/llvm/MC/MCAsmLayout.h
index 0630af6e84a2b..490908dff3302 100644
--- a/llvm/include/llvm/MC/MCAsmLayout.h
+++ b/llvm/include/llvm/MC/MCAsmLayout.h
@@ -54,15 +54,6 @@ class MCAsmLayout {
/// \name Utility Functions
/// @{
- /// Get the address space size of the given section, as it effects
- /// layout. This may
diff er from the size reported by \see
- /// getSectionFileSize() by not including section tail padding.
- uint64_t getSectionAddressSize(const MCSection *Sec) const;
-
- /// Get the data size of the given section, as emitted to the object
- /// file. This may include additional padding, or be 0 for virtual sections.
- uint64_t getSectionFileSize(const MCSection *Sec) const;
-
/// Variant that reports a fatal error if the offset is not computable.
uint64_t getSymbolOffset(const MCSymbol &S) const;
diff --git a/llvm/include/llvm/MC/MCMachObjectWriter.h b/llvm/include/llvm/MC/MCMachObjectWriter.h
index f6f61ebd8f8bf..29f286f01be4b 100644
--- a/llvm/include/llvm/MC/MCMachObjectWriter.h
+++ b/llvm/include/llvm/MC/MCMachObjectWriter.h
@@ -159,7 +159,7 @@ class MachObjectWriter : public MCObjectWriter {
uint64_t getFragmentAddress(const MCAssembler &Asm,
const MCFragment *Fragment) const;
- uint64_t getPaddingSize(const MCSection *SD, const MCAsmLayout &Layout) const;
+ uint64_t getPaddingSize(const MCAssembler &Asm, const MCSection *SD) const;
const MCSymbol *getAtom(const MCSymbol &S) const;
@@ -191,7 +191,7 @@ class MachObjectWriter : public MCObjectWriter {
uint64_t SectionDataSize, uint32_t MaxProt,
uint32_t InitProt);
- void writeSection(const MCAsmLayout &Layout, const MCSection &Sec,
+ void writeSection(const MCAssembler &Asm, const MCSection &Sec,
uint64_t VMAddr, uint64_t FileOffset, unsigned Flags,
uint64_t RelocationsStart, unsigned NumRelocations);
diff --git a/llvm/lib/MC/MCAssembler.cpp b/llvm/lib/MC/MCAssembler.cpp
index 35fc132d65fe4..b16df78afa333 100644
--- a/llvm/lib/MC/MCAssembler.cpp
+++ b/llvm/lib/MC/MCAssembler.cpp
@@ -603,9 +603,6 @@ uint64_t MCAssembler::getSectionAddressSize(const MCSection &Sec) const {
const MCFragment &F = *Sec.curFragList()->Tail;
return getFragmentOffset(F) + computeFragmentSize(F);
}
-uint64_t MCAsmLayout::getSectionAddressSize(const MCSection *Sec) const {
- return Assembler.getSectionAddressSize(*Sec);
-}
uint64_t MCAssembler::getSectionFileSize(const MCSection &Sec) const {
// Virtual sections have no file size.
@@ -613,9 +610,6 @@ uint64_t MCAssembler::getSectionFileSize(const MCSection &Sec) const {
return 0;
return getSectionAddressSize(Sec);
}
-uint64_t MCAsmLayout::getSectionFileSize(const MCSection *Sec) const {
- return Assembler.getSectionFileSize(*Sec);
-}
bool MCAssembler::registerSymbol(const MCSymbol &Symbol) {
bool Changed = !Symbol.isRegistered();
diff --git a/llvm/lib/MC/MachObjectWriter.cpp b/llvm/lib/MC/MachObjectWriter.cpp
index 3f688055d3293..4178cf705f1ce 100644
--- a/llvm/lib/MC/MachObjectWriter.cpp
+++ b/llvm/lib/MC/MachObjectWriter.cpp
@@ -121,14 +121,14 @@ uint64_t MachObjectWriter::getSymbolAddress(const MCSymbol &S,
Layout.getSymbolOffset(S);
}
-uint64_t MachObjectWriter::getPaddingSize(const MCSection *Sec,
- const MCAsmLayout &Layout) const {
- uint64_t EndAddr = getSectionAddress(Sec) + Layout.getSectionAddressSize(Sec);
+uint64_t MachObjectWriter::getPaddingSize(const MCAssembler &Asm,
+ const MCSection *Sec) const {
+ uint64_t EndAddr = getSectionAddress(Sec) + Asm.getSectionAddressSize(*Sec);
unsigned Next = Sec->getLayoutOrder() + 1;
- if (Next >= Layout.getSectionOrder().size())
+ if (Next >= Asm.getLayout()->getSectionOrder().size())
return 0;
- const MCSection &NextSec = *Layout.getSectionOrder()[Next];
+ const MCSection &NextSec = *Asm.getLayout()->getSectionOrder()[Next];
if (NextSec.isVirtualSection())
return 0;
return offsetToAlignment(EndAddr, NextSec.getAlign());
@@ -245,17 +245,17 @@ void MachObjectWriter::writeSegmentLoadCommand(
assert(W.OS.tell() - Start == SegmentLoadCommandSize);
}
-void MachObjectWriter::writeSection(const MCAsmLayout &Layout,
+void MachObjectWriter::writeSection(const MCAssembler &Asm,
const MCSection &Sec, uint64_t VMAddr,
uint64_t FileOffset, unsigned Flags,
uint64_t RelocationsStart,
unsigned NumRelocations) {
- uint64_t SectionSize = Layout.getSectionAddressSize(&Sec);
+ uint64_t SectionSize = Asm.getSectionAddressSize(Sec);
const MCSectionMachO &Section = cast<MCSectionMachO>(Sec);
// The offset is unused for virtual sections.
if (Section.isVirtualSection()) {
- assert(Layout.getSectionFileSize(&Sec) == 0 && "Invalid file size!");
+ assert(Asm.getSectionFileSize(Sec) == 0 && "Invalid file size!");
FileOffset = 0;
}
@@ -679,7 +679,7 @@ void MachObjectWriter::computeSectionAddresses(const MCAssembler &Asm) {
// Explicitly pad the section to match the alignment requirements of the
// following one. This is for 'gas' compatibility, it shouldn't
/// strictly be necessary.
- StartAddress += getPaddingSize(Sec, *Asm.getLayout());
+ StartAddress += getPaddingSize(Asm, Sec);
}
}
@@ -857,7 +857,7 @@ uint64_t MachObjectWriter::writeObject(MCAssembler &Asm) {
uint64_t Address = getSectionAddress(&Sec);
uint64_t Size = Asm.getSectionAddressSize(Sec);
uint64_t FileSize = Asm.getSectionFileSize(Sec);
- FileSize += getPaddingSize(&Sec, Layout);
+ FileSize += getPaddingSize(Asm, &Sec);
VMSize = std::max(VMSize, Address + Size);
@@ -893,7 +893,7 @@ uint64_t MachObjectWriter::writeObject(MCAssembler &Asm) {
unsigned Flags = Sec.getTypeAndAttributes();
if (Sec.hasInstructions())
Flags |= MachO::S_ATTR_SOME_INSTRUCTIONS;
- writeSection(Layout, Sec, getSectionAddress(&Sec), SectionStart, Flags,
+ writeSection(Asm, Sec, getSectionAddress(&Sec), SectionStart, Flags,
RelocTableEnd, NumRelocs);
RelocTableEnd += NumRelocs * sizeof(MachO::any_relocation_info);
}
@@ -995,7 +995,7 @@ uint64_t MachObjectWriter::writeObject(MCAssembler &Asm) {
for (const MCSection &Sec : Asm) {
Asm.writeSectionData(W.OS, &Sec);
- uint64_t Pad = getPaddingSize(&Sec, Layout);
+ uint64_t Pad = getPaddingSize(Asm, &Sec);
W.OS.write_zeros(Pad);
}
diff --git a/llvm/lib/MC/WasmObjectWriter.cpp b/llvm/lib/MC/WasmObjectWriter.cpp
index c123d802f946b..63bce850a2a93 100644
--- a/llvm/lib/MC/WasmObjectWriter.cpp
+++ b/llvm/lib/MC/WasmObjectWriter.cpp
@@ -1062,7 +1062,7 @@ uint32_t WasmObjectWriter::writeCodeSection(const MCAssembler &Asm,
for (const WasmFunction &Func : Functions) {
auto *FuncSection = static_cast<MCSectionWasm *>(Func.Section);
- int64_t Size = Layout.getSectionAddressSize(FuncSection);
+ int64_t Size = Asm.getSectionAddressSize(*FuncSection);
encodeULEB128(Size, W->OS);
FuncSection->setSectionOffset(W->OS.tell() - Section.ContentsOffset);
Asm.writeSectionData(W->OS, FuncSection);
diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp
index 44bdf6356dd64..f25d9f245a8e1 100644
--- a/llvm/lib/MC/WinCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp
@@ -172,7 +172,7 @@ class WinCOFFWriter {
COFFSymbol *GetOrCreateCOFFSymbol(const MCSymbol *Symbol);
COFFSection *createSection(StringRef Name);
- void defineSection(MCSectionCOFF const &Sec, const MCAsmLayout &Layout);
+ void defineSection(const MCAssembler &Asm, MCSectionCOFF const &Sec);
COFFSymbol *getLinkedSymbol(const MCSymbol &Symbol);
void DefineSymbol(const MCSymbol &Symbol, MCAssembler &Assembler,
@@ -318,8 +318,8 @@ static uint32_t getAlignment(const MCSectionCOFF &Sec) {
/// This function takes a section data object from the assembler
/// and creates the associated COFF section staging object.
-void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec,
- const MCAsmLayout &Layout) {
+void WinCOFFWriter::defineSection(const MCAssembler &Asm,
+ const MCSectionCOFF &MCSec) {
COFFSection *Section = createSection(MCSec.getName());
COFFSymbol *Symbol = createSymbol(MCSec.getName());
Section->Symbol = Symbol;
@@ -354,8 +354,8 @@ void WinCOFFWriter::defineSection(const MCSectionCOFF &MCSec,
if (UseOffsetLabels && !MCSec.empty()) {
const uint32_t Interval = 1 << OffsetLabelIntervalBits;
uint32_t N = 1;
- for (uint32_t Off = Interval, E = Layout.getSectionAddressSize(&MCSec);
- Off < E; Off += Interval) {
+ for (uint32_t Off = Interval, E = Asm.getSectionAddressSize(MCSec); Off < E;
+ Off += Interval) {
auto Name = ("$L" + MCSec.getName() + "_" + Twine(N++)).str();
COFFSymbol *Label = createSymbol(Name);
Label->Section = Section;
@@ -775,7 +775,7 @@ void WinCOFFWriter::assignFileOffsets(MCAssembler &Asm,
if (!Sec || Sec->Number == -1)
continue;
- Sec->Header.SizeOfRawData = Layout.getSectionAddressSize(&Section);
+ Sec->Header.SizeOfRawData = Asm.getSectionAddressSize(Section);
if (IsPhysicalSection(Sec)) {
Sec->Header.PointerToRawData = Offset;
@@ -841,7 +841,7 @@ void WinCOFFWriter::executePostLayoutBinding(MCAssembler &Asm) {
if ((Mode == NonDwoOnly && isDwoSection(Section)) ||
(Mode == DwoOnly && !isDwoSection(Section)))
continue;
- defineSection(static_cast<const MCSectionCOFF &>(Section), Layout);
+ defineSection(Asm, static_cast<const MCSectionCOFF &>(Section));
}
if (Mode != DwoOnly)
diff --git a/llvm/lib/MC/XCOFFObjectWriter.cpp b/llvm/lib/MC/XCOFFObjectWriter.cpp
index 47d0407cb58cd..0ea7ccc0660af 100644
--- a/llvm/lib/MC/XCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/XCOFFObjectWriter.cpp
@@ -1477,7 +1477,7 @@ void XCOFFObjectWriter::assignAddressesAndIndices(MCAssembler &Asm,
for (auto &Csect : *Group) {
const MCSectionXCOFF *MCSec = Csect.MCSec;
Csect.Address = alignTo(Address, MCSec->getAlign());
- Csect.Size = Layout.getSectionAddressSize(MCSec);
+ Csect.Size = Asm.getSectionAddressSize(*MCSec);
Address = Csect.Address + Csect.Size;
Csect.SymbolTableIndex = SymbolTableIndex;
SymbolIndexMap[MCSec->getQualNameSymbol()] = Csect.SymbolTableIndex;
@@ -1560,7 +1560,7 @@ void XCOFFObjectWriter::assignAddressesAndIndices(MCAssembler &Asm,
// Section size.
// For DWARF section, we must use the real size which may be not aligned.
- DwarfSection.Size = DwarfSect.Size = Layout.getSectionAddressSize(MCSec);
+ DwarfSection.Size = DwarfSect.Size = Asm.getSectionAddressSize(*MCSec);
Address = DwarfSection.Address + DwarfSection.Size;
diff --git a/llvm/tools/dsymutil/MachOUtils.cpp b/llvm/tools/dsymutil/MachOUtils.cpp
index ff1b969826a22..3665744fc45a1 100644
--- a/llvm/tools/dsymutil/MachOUtils.cpp
+++ b/llvm/tools/dsymutil/MachOUtils.cpp
@@ -323,9 +323,10 @@ static void transferSegmentAndSections(
}
// Write the __DWARF segment load command to the output file.
-static bool createDwarfSegment(uint64_t VMAddr, uint64_t FileOffset,
+static bool createDwarfSegment(const MCAssembler& Asm,uint64_t VMAddr, uint64_t FileOffset,
uint64_t FileSize, unsigned NumSections,
- MCAsmLayout &Layout, MachObjectWriter &Writer) {
+ MachObjectWriter &Writer) {
+ auto &Layout = *Asm.getLayout();
Writer.writeSegmentLoadCommand("__DWARF", NumSections, VMAddr,
alignTo(FileSize, 0x1000), FileOffset,
FileSize, /* MaxProt */ 7,
@@ -333,7 +334,7 @@ static bool createDwarfSegment(uint64_t VMAddr, uint64_t FileOffset,
for (unsigned int i = 0, n = Layout.getSectionOrder().size(); i != n; ++i) {
MCSection *Sec = Layout.getSectionOrder()[i];
- if (Sec->begin() == Sec->end() || !Layout.getSectionFileSize(Sec))
+ if (!Asm.getSectionFileSize(*Sec))
continue;
Align Alignment = Sec->getAlign();
@@ -345,10 +346,10 @@ static bool createDwarfSegment(uint64_t VMAddr, uint64_t FileOffset,
"'s file offset exceeds 4GB."
" Refusing to produce an invalid Mach-O file.");
}
- Writer.writeSection(Layout, *Sec, VMAddr, FileOffset, 0, 0, 0);
+ Writer.writeSection(Asm, *Sec, VMAddr, FileOffset, 0, 0, 0);
- FileOffset += Layout.getSectionAddressSize(Sec);
- VMAddr += Layout.getSectionAddressSize(Sec);
+ FileOffset += Asm.getSectionAddressSize(*Sec);
+ VMAddr += Asm.getSectionAddressSize(*Sec);
}
return true;
}
@@ -495,7 +496,7 @@ bool generateDsymCompanion(
if (Sec->begin() == Sec->end())
continue;
- if (uint64_t Size = Layout.getSectionFileSize(Sec)) {
+ if (uint64_t Size = MCAsm.getSectionFileSize(*Sec)) {
DwarfSegmentSize = alignTo(DwarfSegmentSize, Sec->getAlign());
DwarfSegmentSize += Size;
++NumDwarfSections;
@@ -586,8 +587,8 @@ bool generateDsymCompanion(
}
// Write the load command for the __DWARF segment.
- if (!createDwarfSegment(DwarfVMAddr, DwarfSegmentStart, DwarfSegmentSize,
- NumDwarfSections, Layout, Writer))
+ if (!createDwarfSegment(MCAsm, DwarfVMAddr, DwarfSegmentStart, DwarfSegmentSize,
+ NumDwarfSections, Writer))
return false;
assert(OutFile.tell() == LoadCommandSize + HeaderSize);
More information about the llvm-commits
mailing list