sink the 'name' and 'isdirective' state out of MCSection into its derived classes.
This totally optimizes PIC16 sections by not having an 'isdirective' bit anymore!! ;-)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78517 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
index be481bd..c05e847 100644
--- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
+++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
@@ -2133,13 +2133,12 @@
     // Isolate current sections line info.
     const std::vector<SrcLineInfo> &LineInfos = SectionSourceLines[j];
 
-    if (Asm->isVerbose()) {
+    /*if (Asm->isVerbose()) {
       const MCSection *S = SectionMap[j + 1];
       O << '\t' << TAI->getCommentString() << " Section"
         << S->getName() << '\n';
-    } else {
-      Asm->EOL();
-    }
+    }*/
+    Asm->EOL();
 
     // Dwarf assumes we start with first line of first source file.
     unsigned Source = 1;
diff --git a/lib/CodeGen/ELFWriter.cpp b/lib/CodeGen/ELFWriter.cpp
index 42fe56d..ca79d9d 100644
--- a/lib/CodeGen/ELFWriter.cpp
+++ b/lib/CodeGen/ELFWriter.cpp
@@ -179,21 +179,21 @@
 // getCtorSection - Get the static constructor section
 ELFSection &ELFWriter::getCtorSection() {
   const MCSection *Ctor = TLOF.getStaticCtorSection();
-  return getSection(Ctor->getName(), ELFSection::SHT_PROGBITS, 
+  return getSection(((MCSectionELF*)Ctor)->getName(), ELFSection::SHT_PROGBITS, 
                     getElfSectionFlags(Ctor->getKind()));
 }
 
 // getDtorSection - Get the static destructor section
 ELFSection &ELFWriter::getDtorSection() {
   const MCSection *Dtor = TLOF.getStaticDtorSection();
-  return getSection(Dtor->getName(), ELFSection::SHT_PROGBITS, 
+  return getSection(((MCSectionELF*)Dtor)->getName(), ELFSection::SHT_PROGBITS, 
                     getElfSectionFlags(Dtor->getKind()));
 }
 
 // getTextSection - Get the text section for the specified function
 ELFSection &ELFWriter::getTextSection(Function *F) {
   const MCSection *Text = TLOF.SectionForGlobal(F, Mang, TM);
-  return getSection(Text->getName(), ELFSection::SHT_PROGBITS,
+  return getSection(((MCSectionELF*)Text)->getName(), ELFSection::SHT_PROGBITS,
                     getElfSectionFlags(Text->getKind()));
 }
 
@@ -201,7 +201,7 @@
 // emitting jump tables. TODO: add PIC support
 ELFSection &ELFWriter::getJumpTableSection() {
   const MCSection *JT = TLOF.getSectionForConstant(SectionKind::getReadOnly());
-  return getSection(JT->getName(), 
+  return getSection(((MCSectionELF*)JT)->getName(), 
                     ELFSection::SHT_PROGBITS,
                     getElfSectionFlags(JT->getKind()), 
                     TM.getTargetData()->getPointerABIAlignment());
@@ -226,7 +226,8 @@
     }
   }
 
-  return getSection(TLOF.getSectionForConstant(Kind)->getName(),
+  const MCSection *CPSect = TLOF.getSectionForConstant(Kind);
+  return getSection(((MCSectionELF*)CPSect)->getName(),
                     ELFSection::SHT_PROGBITS,
                     getElfSectionFlags(Kind),
                     CPE.getAlignment());
@@ -369,7 +370,8 @@
 
     if (isELFCommonSym(GVar)) {
       GblSym->SectionIdx = ELFSection::SHN_COMMON;
-      getSection(S->getName(), ELFSection::SHT_NOBITS, SectionFlags, 1);
+      getSection(((MCSectionELF*)S)->getName(), 
+                 ELFSection::SHT_NOBITS, SectionFlags, 1);
 
       // A new linkonce section is created for each global in the
       // common section, the default alignment is 1 and the symbol
@@ -378,7 +380,8 @@
 
     } else if (isELFBssSym(GVar, Kind)) {
       ELFSection &ES =
-        getSection(S->getName(), ELFSection::SHT_NOBITS, SectionFlags);
+        getSection(((MCSectionELF*)S)->getName(), ELFSection::SHT_NOBITS,
+                   SectionFlags);
       GblSym->SectionIdx = ES.SectionIdx;
 
       // Update the size with alignment and the next object can
@@ -393,7 +396,8 @@
 
     } else { // The symbol must go to some kind of data section
       ELFSection &ES =
-        getSection(S->getName(), ELFSection::SHT_PROGBITS, SectionFlags);
+        getSection(((MCSectionELF*)S)->getName(), ELFSection::SHT_PROGBITS,
+                   SectionFlags);
       GblSym->SectionIdx = ES.SectionIdx;
 
       // GblSym->Value should contain the symbol offset inside the section,