[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