Revert r199871 and replace it with a simple check in the debug info
authorEric Christopher <echristo@gmail.com>
Tue, 28 Jan 2014 00:49:26 +0000 (00:49 +0000)
committerEric Christopher <echristo@gmail.com>
Tue, 28 Jan 2014 00:49:26 +0000 (00:49 +0000)
code to see if we're emitting a function into a non-default
text section. This is still a less-than-ideal solution, but more
contained than r199871 to determine whether or not we're emitting
code into an array of comdat sections.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200269 91177308-0d34-0410-b5e6-96231b3b80d8

16 files changed:
include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
include/llvm/Target/TargetLoweringObjectFile.h
include/llvm/Target/TargetMachine.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h
lib/CodeGen/TargetLoweringObjectFileImpl.cpp
lib/Target/Hexagon/HexagonTargetObjectFile.cpp
lib/Target/Hexagon/HexagonTargetObjectFile.h
lib/Target/Mips/MipsTargetObjectFile.cpp
lib/Target/Mips/MipsTargetObjectFile.h
lib/Target/PowerPC/PPCTargetObjectFile.cpp
lib/Target/PowerPC/PPCTargetObjectFile.h
lib/Target/TargetLoweringObjectFile.cpp
lib/Target/TargetMachine.cpp
lib/Target/XCore/XCoreTargetObjectFile.cpp
lib/Target/XCore/XCoreTargetObjectFile.h

index 717ebdb2f71d6b40b6ea88a95d89637de9011e1c..4e90e141ce16adcc8f576a08edd6e68daa3641b9 100644 (file)
@@ -53,7 +53,7 @@ public:
 
   virtual const MCSection *
   SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                         Mangler *Mang, TargetMachine &TM) const;
+                         Mangler *Mang, const TargetMachine &TM) const;
 
   /// getTTypeGlobalReference - Return an MCExpr to use for a reference to the
   /// specified type info global variable from exception handling information.
@@ -92,7 +92,7 @@ public:
 
   virtual const MCSection *
   SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                         Mangler *Mang, TargetMachine &TM) const;
+                         Mangler *Mang, const TargetMachine &TM) const;
 
   virtual const MCSection *
   getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
@@ -131,7 +131,7 @@ public:
 
   virtual const MCSection *
   SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                         Mangler *Mang, TargetMachine &TM) const;
+                         Mangler *Mang, const TargetMachine &TM) const;
 
   /// getDepLibFromLinkerOpt - Extract the dependent library name from a linker
   /// option string. Returns StringRef() if the option does not specify a library.
index e7e16ace8947ada5ffb1605e89c78a38ac018d6c..5bf9a13563ed4e0630f1a738ba6a51ff4a4e7f8d 100644 (file)
@@ -38,7 +38,7 @@ class TargetLoweringObjectFile : public MCObjectFileInfo {
   const DataLayout *DL;
 
   TargetLoweringObjectFile(
-      const TargetLoweringObjectFile &) LLVM_DELETED_FUNCTION;
+    const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
   void operator=(const TargetLoweringObjectFile&) LLVM_DELETED_FUNCTION;
 
 public:
@@ -91,14 +91,14 @@ public:
   /// be passed external (or available externally) globals.
   const MCSection *SectionForGlobal(const GlobalValue *GV,
                                     SectionKind Kind, Mangler *Mang,
-                                    TargetMachine &TM) const;
+                                    const TargetMachine &TM) const;
   
   /// SectionForGlobal - This method computes the appropriate section to emit
   /// the specified global variable or function definition.  This should not
   /// be passed external (or available externally) globals.
   const MCSection *SectionForGlobal(const GlobalValue *GV,
                                     Mangler *Mang,
-                                    TargetMachine &TM) const {
+                                    const TargetMachine &TM) const {
     return SectionForGlobal(GV, getKindForGlobal(GV, TM), Mang, TM);
   }
 
@@ -167,7 +167,7 @@ public:
 protected:
   virtual const MCSection *
   SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                         Mangler *Mang, TargetMachine &TM) const;
+                         Mangler *Mang, const TargetMachine &TM) const;
 };
 
 } // end namespace llvm
index 7cbc87d9a8b472b576f5eb29b11a0574267335c1..c27ffdfcd77b3b74f0914e08162916eace43dd45 100644 (file)
@@ -88,7 +88,6 @@ protected: // Can only create subclasses.
   unsigned MCUseLoc : 1;
   unsigned MCUseCFI : 1;
   unsigned MCUseDwarfDirectory : 1;
-  unsigned DebugUseUniqueSections : 1;
   unsigned RequireStructuredCFG : 1;
 
 public:
@@ -161,9 +160,6 @@ public:
   bool requiresStructuredCFG() const { return RequireStructuredCFG; }
   void setRequiresStructuredCFG(bool Value) { RequireStructuredCFG = Value; }
 
-  bool debugUseUniqueSections() const { return DebugUseUniqueSections; }
-  void setDebugUseUniqueSections(bool Value) { DebugUseUniqueSections = Value; }
-
   /// hasMCRelaxAll - Check whether all machine code instructions should be
   /// relaxed.
   bool hasMCRelaxAll() const { return MCRelaxAll; }
index 72ce337b203f350bf15d372b7d95699f87ebe445..1d059d9f3c771e313cda1bf3f3d9cb0764786cc5 100644 (file)
@@ -176,6 +176,7 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
     : Asm(A), MMI(Asm->MMI), FirstCU(0), SourceIdMap(DIEValueAllocator),
       PrevLabel(NULL), GlobalRangeCount(0),
       InfoHolder(A, "info_string", DIEValueAllocator), HasCURanges(false),
+      UsedNonDefaultText(false),
       SkeletonHolder(A, "skel_string", DIEValueAllocator) {
 
   DwarfInfoSectionSym = DwarfAbbrevSectionSym = DwarfStrSectionSym = 0;
@@ -1123,7 +1124,7 @@ void DwarfDebug::endSections() {
   // we have -ffunction-sections enabled, or we've emitted a function
   // into a unique section. At this point all sections should be finalized
   // except for dwarf sections.
-  HasCURanges = DwarfCURanges || Asm->TM.debugUseUniqueSections() ||
+  HasCURanges = DwarfCURanges || UsedNonDefaultText ||
                 TargetMachine::getFunctionSections();
 }
 
@@ -1580,6 +1581,12 @@ void DwarfDebug::beginFunction(const MachineFunction *MF) {
   else
     Asm->OutStreamer.getContext().setDwarfCompileUnitID(TheCU->getUniqueID());
 
+  // Check the current section against the standard text section. If different
+  // keep track so that we will know when we're emitting functions into multiple
+  // sections.
+  if (Asm->getObjFileLowering().getTextSection() != Asm->getCurrentSection())
+    UsedNonDefaultText = true;
+
   // Emit a label for the function so that we have a beginning address.
   FunctionBeginSym = Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber());
   // Assumes in correct section after the entry point.
index 516def804d1533f577900bbc1ce55479d8ec5930..11695a5735d10e141524d22f1fe242f7087955a5 100644 (file)
@@ -461,6 +461,10 @@ class DwarfDebug : public AsmPrinterHandler {
   // Whether or not to use AT_ranges for compilation units.
   bool HasCURanges;
 
+  // Whether we emitted a function into a section other than the default
+  // text.
+  bool UsedNonDefaultText;
+
   // Version of dwarf we're emitting.
   unsigned DwarfVersion;
 
index 7f534acb70a7aef73e484a38d07d17b111e4745d..3621b5828780cfb96ae3f7be9282b60e3e9d39f0 100644 (file)
@@ -232,7 +232,7 @@ static const char *getSectionPrefixForGlobal(SectionKind Kind) {
 
 const MCSection *TargetLoweringObjectFileELF::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                       Mangler *Mang, TargetMachine &TM) const {
+                       Mangler *Mang, const TargetMachine &TM) const {
   // If we have -ffunction-section or -fdata-section then we should emit the
   // global value to a uniqued section specifically for it.
   bool EmitUniquedSection;
@@ -258,8 +258,6 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
       Flags |= ELF::SHF_GROUP;
     }
 
-    // Set that we've used a unique section name in the target machine.
-    TM.setDebugUseUniqueSections(true);
     return getContext().getELFSection(Name.str(),
                                       getELFSectionType(Name.str(), Kind),
                                       Flags, Kind, 0, Group);
@@ -531,7 +529,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
 
 const MCSection *TargetLoweringObjectFileMachO::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                       Mangler *Mang, TargetMachine &TM) const {
+                       Mangler *Mang, const TargetMachine &TM) const {
 
   // Handle thread local data.
   if (Kind.isThreadBSS()) return TLSBSSSection;
@@ -756,7 +754,7 @@ static const char *getCOFFSectionNameForUniqueGlobal(SectionKind Kind) {
 
 const MCSection *TargetLoweringObjectFileCOFF::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                       Mangler *Mang, TargetMachine &TM) const {
+                       Mangler *Mang, const TargetMachine &TM) const {
 
   // If this global is linkonce/weak and the target handles this by emitting it
   // into a 'uniqued' section name, create and return the section now.
index a26b81de06c5d9e886b13dfc1773edd6d9fd37a8..7773cff2d21ae1932ad6e302c78b074a070fed3c 100644 (file)
@@ -87,7 +87,7 @@ IsGlobalInSmallSection(const GlobalValue *GV, const TargetMachine &TM,
 
 const MCSection *HexagonTargetObjectFile::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                       Mangler *Mang, TargetMachine &TM) const {
+                       Mangler *Mang, const TargetMachine &TM) const {
 
   // Handle Small Section classification here.
   if (Kind.isBSS() && IsGlobalInSmallSection(GV, TM, Kind))
index ac87814b4b63b3a1fe98e48c49da644a57f8cbe5..41f6792ca8e51179a067ad9bd400c7f3bec9f417 100644 (file)
@@ -30,9 +30,10 @@ namespace llvm {
                                 const TargetMachine &TM) const;
 
     bool IsSmallDataEnabled () const;
-    const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
-                                            SectionKind Kind, Mangler *Mang,
-                                            TargetMachine &TM) const;
+    const MCSection* SelectSectionForGlobal(const GlobalValue *GV,
+                                            SectionKind Kind,
+                                            Mangler *Mang,
+                                            const TargetMachine &TM) const;
   };
 
 } // namespace llvm
index 90808bcb05239150ba8c0d163ae21604a2d83391..4c748c5b57cde4efa2b507274b9b8d3e5e626c0a 100644 (file)
@@ -103,7 +103,7 @@ IsGlobalInSmallSection(const GlobalValue *GV, const TargetMachine &TM,
 
 const MCSection *MipsTargetObjectFile::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                       Mangler *Mang, TargetMachine &TM) const {
+                       Mangler *Mang, const TargetMachine &TM) const {
   // TODO: Could also support "weak" symbols as well with ".gnu.linkonce.s.*"
   // sections?
 
index 9aaf7941abfa6019723506cdef0fddf5c779aeed..c0e9140c829cb92169e47d4500e5d14cc9e978ec 100644 (file)
@@ -31,8 +31,9 @@ namespace llvm {
                                 const TargetMachine &TM) const;
 
     const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
-                                            SectionKind Kind, Mangler *Mang,
-                                            TargetMachine &TM) const;
+                                            SectionKind Kind,
+                                            Mangler *Mang,
+                                            const TargetMachine &TM) const;
 
     // TODO: Classify globals as mips wishes.
     const MCSection *getReginfoSection() const { return ReginfoSection; }
index b9cfe7c9a84c23d74ca47f2b0448a026ade73a92..32678674f9a658cbca4b6af9c1d405047e95d0d9 100644 (file)
@@ -24,7 +24,7 @@ Initialize(MCContext &Ctx, const TargetMachine &TM) {
 
 const MCSection * PPC64LinuxTargetObjectFile::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
-                       Mangler *Mang, TargetMachine &TM) const {
+                       Mangler *Mang, const TargetMachine &TM) const {
 
   const MCSection *DefaultSection = 
     TargetLoweringObjectFileELF::SelectSectionForGlobal(GV, Kind, Mang, TM);
index 571954535db8227ec507454e5cdec20c175373d8..262c52213d29ce5658818375ab580651982ea6f5 100644 (file)
@@ -22,10 +22,9 @@ namespace llvm {
 
     virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
 
-    virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
-                                                    SectionKind Kind,
-                                                    Mangler *Mang,
-                                                    TargetMachine &TM) const;
+    virtual const MCSection *
+    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
+                           Mangler *Mang, const TargetMachine &TM) const;
 
     /// \brief Describe a TLS variable address within debug info.
     virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
index 8d73a3ab34778b49d84719f99f129239cd7fc2d6..b62577e0801a634834688fa0b9b8f188f96af180 100644 (file)
@@ -265,7 +265,7 @@ SectionKind TargetLoweringObjectFile::getKindForGlobal(const GlobalValue *GV,
 /// be passed external (or available externally) globals.
 const MCSection *TargetLoweringObjectFile::
 SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
-                 TargetMachine &TM) const {
+                 const TargetMachine &TM) const {
   // Select section name.
   if (GV->hasSection())
     return getExplicitSectionGlobal(GV, Kind, Mang, TM);
@@ -277,9 +277,11 @@ SectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
 
 
 // Lame default implementation. Calculate the section name for global.
-const MCSection *TargetLoweringObjectFile::SelectSectionForGlobal(
-    const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
-    TargetMachine &TM) const {
+const MCSection *
+TargetLoweringObjectFile::SelectSectionForGlobal(const GlobalValue *GV,
+                                                 SectionKind Kind,
+                                                 Mangler *Mang,
+                                                 const TargetMachine &TM) const{
   assert(!Kind.isThreadLocal() && "Doesn't support TLS");
 
   if (Kind.isText())
index 39ade0a2b852f640807295df88a0be47afe1d09d..a2350352071e5cdaba11d9e0ab2e52dc3f39c7fc 100644 (file)
@@ -55,7 +55,6 @@ TargetMachine::TargetMachine(const Target &T,
     MCUseLoc(true),
     MCUseCFI(true),
     MCUseDwarfDirectory(false),
-    DebugUseUniqueSections(false),
     RequireStructuredCFG(false),
     Options(Options) {
 }
index fec79d759c80745e14bb391af5765ccaa3aedea9..61eb2b51f3ebf744437490e3e4a8c09cabece476 100644 (file)
@@ -130,7 +130,7 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
 
 const MCSection *XCoreTargetObjectFile::
 SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang,
-                       TargetMachine &TM) const{
+                       const TargetMachine &TM) const{
   if (Kind.isText())                      return TextSection;
   if (Kind.isMergeable1ByteCString())     return CStringSection;
   if (Kind.isMergeableConst4())           return MergeableConst4Section;
index 127ff0704c14c92459fcd768a444a863bcfb94ff..bf9798d5085da22101d78537c7443d5f0c882d12 100644 (file)
@@ -27,10 +27,9 @@ static const unsigned CodeModelLargeSize = 256;
     getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
                              Mangler *Mang, const TargetMachine &TM) const;
 
-    virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
-                                                    SectionKind Kind,
-                                                    Mangler *Mang,
-                                                    TargetMachine &TM) const;
+    virtual const MCSection *
+    SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
+                           Mangler *Mang, const TargetMachine &TM) const;
 
     virtual const MCSection *getSectionForConstant(SectionKind Kind) const;
   };