[llvm-commits] [llvm] r103689 - in /llvm/trunk: include/llvm/MC/MCAsmLayout.h include/llvm/MC/MCAssembler.h lib/MC/MCAssembler.cpp

Daniel Dunbar daniel at zuster.org
Wed May 12 18:10:22 PDT 2010


Author: ddunbar
Date: Wed May 12 20:10:22 2010
New Revision: 103689

URL: http://llvm.org/viewvc/llvm-project?rev=103689&view=rev
Log:
MC: Add MCSectionData::AddressSize, which is the size of the address space consumed by the section. This can differ from both the section logical size, and the section size on disk (although the current code handles this without making an explicit distinction).

Modified:
    llvm/trunk/include/llvm/MC/MCAsmLayout.h
    llvm/trunk/include/llvm/MC/MCAssembler.h
    llvm/trunk/lib/MC/MCAssembler.cpp

Modified: llvm/trunk/include/llvm/MC/MCAsmLayout.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAsmLayout.h?rev=103689&r1=103688&r2=103689&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCAsmLayout.h (original)
+++ llvm/trunk/include/llvm/MC/MCAsmLayout.h Wed May 12 20:10:22 2010
@@ -91,10 +91,18 @@
   /// \brief Set the data size of the given section.
   void setSectionFileSize(MCSectionData *SD, uint64_t Value);
 
-  /// \brief Get the actual data size of the given section.
+  /// \brief Get the address space size of the given section, as it effects
+  /// layout. This may differ from the size reported by \see getSectionSize() by
+  /// not including section tail padding.
+  uint64_t getSectionAddressSize(const MCSectionData *SD) const;
+
+  /// \brief Set the address space size of the given section.
+  void setSectionAddressSize(MCSectionData *SD, uint64_t Value);
+
+  /// \brief Get the logical data size of the given section.
   uint64_t getSectionSize(const MCSectionData *SD) const;
 
-  /// \brief Set the actual data size of the given section.
+  /// \brief Set the logical data size of the given section.
   void setSectionSize(MCSectionData *SD, uint64_t Value);
 
   /// @}

Modified: llvm/trunk/include/llvm/MC/MCAssembler.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAssembler.h?rev=103689&r1=103688&r2=103689&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCAssembler.h (original)
+++ llvm/trunk/include/llvm/MC/MCAssembler.h Wed May 12 20:10:22 2010
@@ -394,9 +394,13 @@
   /// initialized.
   uint64_t Address;
 
-  /// Size - The content size of this section. This is ~0 until initialized.
+  /// Size - The logical size of this section. This is ~0 until initialized.
   uint64_t Size;
 
+  /// AddressSize - The address space size used by this section. This is ~0
+  /// until initialized.
+  uint64_t AddressSize;
+
   /// FileSize - The size of this section in the object file. This is ~0 until
   /// initialized.
   uint64_t FileSize;

Modified: llvm/trunk/lib/MC/MCAssembler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAssembler.cpp?rev=103689&r1=103688&r2=103689&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCAssembler.cpp (original)
+++ llvm/trunk/lib/MC/MCAssembler.cpp Wed May 12 20:10:22 2010
@@ -126,6 +126,14 @@
   SD->FileSize = Value;
 }
 
+uint64_t MCAsmLayout::getSectionAddressSize(const MCSectionData *SD) const {
+  assert(SD->AddressSize != ~UINT64_C(0) && "Address size not set!");
+  return SD->AddressSize;
+}
+void MCAsmLayout::setSectionAddressSize(MCSectionData *SD, uint64_t Value) {
+  SD->AddressSize = Value;
+}
+
 /* *** */
 
 MCFragment::MCFragment() : Kind(FragmentType(~0)) {
@@ -150,6 +158,7 @@
     Alignment(1),
     Address(~UINT64_C(0)),
     Size(~UINT64_C(0)),
+    AddressSize(~UINT64_C(0)),
     FileSize(~UINT64_C(0)),
     HasInstructions(false)
 {
@@ -434,7 +443,8 @@
   uint64_t StartAddress = 0;
   if (SectionOrderIndex) {
     MCSectionData *Prev = Layout.getSectionOrder()[SectionOrderIndex - 1];
-    StartAddress = Layout.getSectionAddress(Prev) + Layout.getSectionSize(Prev);
+    StartAddress = (Layout.getSectionAddress(Prev) +
+                    Layout.getSectionAddressSize(Prev));
   }
 
   // Align this section if necessary by adding padding bytes to the previous
@@ -465,6 +475,7 @@
     Size = Layout.getFragmentOffset(F) + Layout.getFragmentEffectiveSize(F);
   }
   Layout.setSectionSize(&SD, Size);
+  Layout.setSectionAddressSize(&SD, Size);
   Layout.setSectionFileSize(&SD, IsVirtual ? 0 : Size);
 }
 
@@ -837,9 +848,7 @@
   raw_ostream &OS = llvm::errs();
 
   OS << "<MCFragment " << (void*) this << " Offset:" << Offset
-     << " EffectiveSize:" << EffectiveSize;
-
-  OS << ">";
+     << " EffectiveSize:" << EffectiveSize << ">";
 }
 
 void MCAlignFragment::dump() {
@@ -914,8 +923,8 @@
 
   OS << "<MCSectionData";
   OS << " Alignment:" << getAlignment() << " Address:" << Address
-     << " Size:" << Size << " FileSize:" << FileSize
-     << " Fragments:[\n      ";
+     << " Size:" << Size << " AddressSize:" << AddressSize
+     << " FileSize:" << FileSize << " Fragments:[\n      ";
   for (iterator it = begin(), ie = end(); it != ie; ++it) {
     if (it != begin()) OS << ",\n      ";
     it->dump();





More information about the llvm-commits mailing list