[llvm] r252313 - Bring r252305 back with a test fix.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 6 07:30:46 PST 2015


Author: rafael
Date: Fri Nov  6 09:30:45 2015
New Revision: 252313

URL: http://llvm.org/viewvc/llvm-project?rev=252313&view=rev
Log:
Bring r252305 back with a test fix.

We now create the .eh_frame section early, just like every other special
section.

This means that the special flags are visible in code that explicitly
asks for ".eh_frame".

Modified:
    llvm/trunk/include/llvm/MC/MCObjectFileInfo.h
    llvm/trunk/lib/MC/MCObjectFileInfo.cpp
    llvm/trunk/lib/MC/MCSectionELF.cpp
    llvm/trunk/test/CodeGen/X86/eh_frame.ll

Modified: llvm/trunk/include/llvm/MC/MCObjectFileInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCObjectFileInfo.h?rev=252313&r1=252312&r2=252313&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCObjectFileInfo.h (original)
+++ llvm/trunk/include/llvm/MC/MCObjectFileInfo.h Fri Nov  6 09:30:45 2015
@@ -47,10 +47,6 @@ protected:
   unsigned FDECFIEncoding;
   unsigned TTypeEncoding;
 
-  /// Section flags for eh_frame
-  unsigned EHSectionType;
-  unsigned EHSectionFlags;
-
   /// Compact unwind encoding indicating that we should emit only an EH frame.
   unsigned CompactUnwindDwarfEHFrameOnly;
 
@@ -336,8 +332,6 @@ public:
   MCSection *getSXDataSection() const { return SXDataSection; }
 
   MCSection *getEHFrameSection() {
-    if (!EHFrameSection)
-      InitEHFrameSection();
     return EHFrameSection;
   }
 
@@ -357,9 +351,6 @@ private:
   void initELFMCObjectFileInfo(Triple T);
   void initCOFFMCObjectFileInfo(Triple T);
 
-  /// Initialize EHFrameSection on demand.
-  void InitEHFrameSection();
-
 public:
   const Triple &getTargetTriple() const { return TT; }
 };

Modified: llvm/trunk/lib/MC/MCObjectFileInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCObjectFileInfo.cpp?rev=252313&r1=252312&r2=252313&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCObjectFileInfo.cpp (original)
+++ llvm/trunk/lib/MC/MCObjectFileInfo.cpp Fri Nov  6 09:30:45 2015
@@ -49,6 +49,12 @@ void MCObjectFileInfo::initMachOMCObject
   // MachO
   SupportsWeakOmittedEHFrame = false;
 
+  EHFrameSection = Ctx->getMachOSection(
+      "__TEXT", "__eh_frame",
+      MachO::S_COALESCED | MachO::S_ATTR_NO_TOC |
+          MachO::S_ATTR_STRIP_STATIC_SYMS | MachO::S_ATTR_LIVE_SUPPORT,
+      SectionKind::getReadOnly());
+
   if (T.isOSDarwin() && T.getArch() == Triple::aarch64)
     SupportsCompactUnwindWithoutEHFrame = true;
 
@@ -416,12 +422,13 @@ void MCObjectFileInfo::initELFMCObjectFi
     break;
   }
 
-  EHSectionType = T.getArch() == Triple::x86_64 ? ELF::SHT_X86_64_UNWIND
-                                                : ELF::SHT_PROGBITS;
+  unsigned EHSectionType = T.getArch() == Triple::x86_64
+                               ? ELF::SHT_X86_64_UNWIND
+                               : ELF::SHT_PROGBITS;
 
   // Solaris requires different flags for .eh_frame to seemingly every other
   // platform.
-  EHSectionFlags = ELF::SHF_ALLOC;
+  unsigned EHSectionFlags = ELF::SHF_ALLOC;
   if (T.isOSSolaris() && T.getArch() != Triple::x86_64)
     EHSectionFlags |= ELF::SHF_WRITE;
 
@@ -546,9 +553,17 @@ void MCObjectFileInfo::initELFMCObjectFi
 
   FaultMapSection =
       Ctx->getELFSection(".llvm_faultmaps", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
+
+  EHFrameSection =
+      Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
 }
 
 void MCObjectFileInfo::initCOFFMCObjectFileInfo(Triple T) {
+  EHFrameSection = Ctx->getCOFFSection(
+      ".eh_frame", COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
+                       COFF::IMAGE_SCN_MEM_READ | COFF::IMAGE_SCN_MEM_WRITE,
+      SectionKind::getDataRel());
+
   bool IsWoA = T.getArch() == Triple::arm || T.getArch() == Triple::thumb;
 
   CommDirectiveSupportsAlignment = true;
@@ -822,24 +837,3 @@ MCSection *MCObjectFileInfo::getDwarfTyp
   return Ctx->getELFSection(".debug_types", ELF::SHT_PROGBITS, ELF::SHF_GROUP,
                             0, utostr(Hash));
 }
-
-void MCObjectFileInfo::InitEHFrameSection() {
-  if (Env == IsMachO)
-    EHFrameSection =
-      Ctx->getMachOSection("__TEXT", "__eh_frame",
-                           MachO::S_COALESCED |
-                           MachO::S_ATTR_NO_TOC |
-                           MachO::S_ATTR_STRIP_STATIC_SYMS |
-                           MachO::S_ATTR_LIVE_SUPPORT,
-                           SectionKind::getReadOnly());
-  else if (Env == IsELF)
-    EHFrameSection =
-        Ctx->getELFSection(".eh_frame", EHSectionType, EHSectionFlags);
-  else
-    EHFrameSection =
-      Ctx->getCOFFSection(".eh_frame",
-                          COFF::IMAGE_SCN_CNT_INITIALIZED_DATA |
-                          COFF::IMAGE_SCN_MEM_READ |
-                          COFF::IMAGE_SCN_MEM_WRITE,
-                          SectionKind::getDataRel());
-}

Modified: llvm/trunk/lib/MC/MCSectionELF.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionELF.cpp?rev=252313&r1=252312&r2=252313&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCSectionELF.cpp (original)
+++ llvm/trunk/lib/MC/MCSectionELF.cpp Fri Nov  6 09:30:45 2015
@@ -133,6 +133,8 @@ void MCSectionELF::PrintSwitchToSection(
     OS << "note";
   else if (Type == ELF::SHT_PROGBITS)
     OS << "progbits";
+  else if (Type == ELF::SHT_X86_64_UNWIND)
+    OS << "unwind";
 
   if (EntrySize) {
     assert(Flags & ELF::SHF_MERGE);

Modified: llvm/trunk/test/CodeGen/X86/eh_frame.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/eh_frame.ll?rev=252313&r1=252312&r2=252313&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/eh_frame.ll (original)
+++ llvm/trunk/test/CodeGen/X86/eh_frame.ll Fri Nov  6 09:30:45 2015
@@ -7,8 +7,8 @@
 @bar1 = constant i8* bitcast (i32* @foo to i8*), section "my_bar1", align 8
 
 
-; STATIC: .section	.eh_frame,"a", at progbits
+; STATIC: .section	.eh_frame,"a", at unwind
 ; STATIC: .section	my_bar1,"a", at progbits
 
-; PIC:	.section	.eh_frame,"a", at progbits
+; PIC:	.section	.eh_frame,"a", at unwind
 ; PIC:	.section	my_bar1,"aw", at progbits




More information about the llvm-commits mailing list