[llvm-commits] [llvm] r78517 - in /llvm/trunk: include/llvm/MC/MCContext.h include/llvm/MC/MCSection.h lib/CodeGen/AsmPrinter/DwarfDebug.cpp lib/CodeGen/ELFWriter.cpp lib/MC/MCAsmStreamer.cpp lib/MC/MCSection.cpp lib/Target/PIC16/PIC16AsmPrinter.cpp lib/Target/PIC16/PIC16Section.h lib/Target/PIC16/PIC16TargetObjectFile.cpp lib/Target/PIC16/PIC16TargetObjectFile.h test/MC/AsmParser/labels.s tools/llvm-mc/AsmParser.cpp tools/llvm-mc/llvm-mc.cpp

Chris Lattner sabre at nondot.org
Sat Aug 8 16:39:42 PDT 2009


Author: lattner
Date: Sat Aug  8 18:39:42 2009
New Revision: 78517

URL: http://llvm.org/viewvc/llvm-project?rev=78517&view=rev
Log:
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!! ;-)

Modified:
    llvm/trunk/include/llvm/MC/MCContext.h
    llvm/trunk/include/llvm/MC/MCSection.h
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
    llvm/trunk/lib/CodeGen/ELFWriter.cpp
    llvm/trunk/lib/MC/MCAsmStreamer.cpp
    llvm/trunk/lib/MC/MCSection.cpp
    llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp
    llvm/trunk/lib/Target/PIC16/PIC16Section.h
    llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.cpp
    llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.h
    llvm/trunk/test/MC/AsmParser/labels.s
    llvm/trunk/tools/llvm-mc/AsmParser.cpp
    llvm/trunk/tools/llvm-mc/llvm-mc.cpp

Modified: llvm/trunk/include/llvm/MC/MCContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCContext.h (original)
+++ llvm/trunk/include/llvm/MC/MCContext.h Sat Aug  8 18:39:42 2009
@@ -41,8 +41,6 @@
     /// We use a bump pointer allocator to avoid the need to track all allocated
     /// objects.
     BumpPtrAllocator Allocator;
-
-    friend class MCSection;
   public:
     MCContext();
     ~MCContext();
@@ -51,6 +49,13 @@
     /// null if it doesn't exist.
     MCSection *GetSection(const StringRef &Name) const;
     
+    
+    void SetSection(const StringRef &Name, MCSection *S) {
+      MCSection *&Entry = Sections[Name];
+      assert(Entry == 0 && "Multiple sections with the same name created");
+      Entry = S;
+    }
+    
     /// CreateSymbol - Create a new symbol with the specified @param Name.
     ///
     /// @param Name - The symbol name, which must be unique across all symbols.

Modified: llvm/trunk/include/llvm/MC/MCSection.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCSection.h?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/include/llvm/MC/MCSection.h (original)
+++ llvm/trunk/include/llvm/MC/MCSection.h Sat Aug  8 18:39:42 2009
@@ -27,27 +27,14 @@
   /// section in the current translation unit.  The MCContext class uniques and
   /// creates these.
   class MCSection {
-    std::string Name;
-    
-    /// IsDirective - This is true if the section name is a directive, not
-    /// something that should be printed with ".section".
-    ///
-    /// FIXME: This is a hack.  Switch to a semantic view of the section instead
-    /// of a syntactic one.
-    bool IsDirective;
-    
     MCSection(const MCSection&);      // DO NOT IMPLEMENT
     void operator=(const MCSection&); // DO NOT IMPLEMENT
   protected:
-    MCSection(const StringRef &Name, bool IsDirective, SectionKind K,
-              MCContext &Ctx);
+    MCSection(SectionKind K) : Kind(K) {}
     SectionKind Kind;
   public:
     virtual ~MCSection();
 
-    const std::string &getName() const { return Name; }
-    bool isDirective() const { return IsDirective; }
-    
     SectionKind getKind() const { return Kind; }
     
     virtual void PrintSwitchToSection(const TargetAsmInfo &TAI,
@@ -56,36 +43,73 @@
 
   
   class MCSectionELF : public MCSection {
+    std::string Name;
+    
+    /// IsDirective - This is true if the section name is a directive, not
+    /// something that should be printed with ".section".
+    ///
+    /// FIXME: This is a hack.  Switch to a semantic view of the section instead
+    /// of a syntactic one.
+    bool IsDirective;
+    
     MCSectionELF(const StringRef &Name, bool IsDirective, SectionKind K,
-                 MCContext &Ctx) : MCSection(Name, IsDirective, K, Ctx) {}
+                 MCContext &Ctx);
   public:
     
     static MCSectionELF *Create(const StringRef &Name, bool IsDirective, 
                                 SectionKind K, MCContext &Ctx);
 
+    const std::string &getName() const { return Name; }
+    bool isDirective() const { return IsDirective; }
+    
+    
     virtual void PrintSwitchToSection(const TargetAsmInfo &TAI,
                                       raw_ostream &OS) const;
   };
 
   class MCSectionMachO : public MCSection {
+    std::string Name;
+    
+    /// IsDirective - This is true if the section name is a directive, not
+    /// something that should be printed with ".section".
+    ///
+    /// FIXME: This is a hack.  Switch to a semantic view of the section instead
+    /// of a syntactic one.
+    bool IsDirective;
+    
     MCSectionMachO(const StringRef &Name, bool IsDirective, SectionKind K,
-                   MCContext &Ctx) : MCSection(Name, IsDirective, K, Ctx) {}
+                   MCContext &Ctx);
   public:
     
     static MCSectionMachO *Create(const StringRef &Name, bool IsDirective, 
                                   SectionKind K, MCContext &Ctx);
 
+    const std::string &getName() const { return Name; }
+    bool isDirective() const { return IsDirective; }
+    
     virtual void PrintSwitchToSection(const TargetAsmInfo &TAI,
                                       raw_ostream &OS) const;
   };
   
   class MCSectionCOFF : public MCSection {
+    std::string Name;
+    
+    /// IsDirective - This is true if the section name is a directive, not
+    /// something that should be printed with ".section".
+    ///
+    /// FIXME: This is a hack.  Switch to a semantic view of the section instead
+    /// of a syntactic one.
+    bool IsDirective;
+    
     MCSectionCOFF(const StringRef &Name, bool IsDirective, SectionKind K,
-                  MCContext &Ctx) : MCSection(Name, IsDirective, K, Ctx) {}
+                  MCContext &Ctx);
   public:
     
     static MCSectionCOFF *Create(const StringRef &Name, bool IsDirective, 
                                    SectionKind K, MCContext &Ctx);
+
+    const std::string &getName() const { return Name; }
+    bool isDirective() const { return IsDirective; }
     
     virtual void PrintSwitchToSection(const TargetAsmInfo &TAI,
                                       raw_ostream &OS) const;

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Sat Aug  8 18:39:42 2009
@@ -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;

Modified: llvm/trunk/lib/CodeGen/ELFWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/ELFWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/ELFWriter.cpp Sat Aug  8 18:39:42 2009
@@ -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,

Modified: llvm/trunk/lib/MC/MCAsmStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAsmStreamer.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCAsmStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCAsmStreamer.cpp Sat Aug  8 18:39:42 2009
@@ -100,13 +100,6 @@
   return false;
 }
 
-/// Allow printing sections directly to a raw_ostream with proper quoting.
-static inline raw_ostream &operator<<(raw_ostream &os, const MCSection *S) {
-  if (NeedsQuoting(S->getName()))
-    return os << '"' << S->getName() << '"';
-  return os << S->getName();
-}
-
 /// Allow printing symbols directly to a raw_ostream with proper quoting.
 static inline raw_ostream &operator<<(raw_ostream &os, const MCSymbol *S) {
   if (NeedsQuoting(S->getName()))
@@ -144,10 +137,8 @@
   if (Section != CurSection) {
     CurSection = Section;
 
-    // FIXME: Really we would like the segment, flags, etc. to be separate
-    // values instead of embedded in the name. Not all assemblers understand all
-    // this stuff though.
-    OS << ".section " << Section << "\n";
+    // FIXME: Needs TargetAsmInfo!
+    Section->PrintSwitchToSection(*(const TargetAsmInfo*)0, OS);
   }
 }
 
@@ -228,7 +219,12 @@
   // FIXME: Really we would like the segment and section names as well as the
   // section type to be separate values instead of embedded in the name. Not
   // all assemblers understand all this stuff though.
-  OS << ".zerofill " << Section;
+  OS << ".zerofill ";
+  
+  // This is a mach-o specific directive.
+  OS << '"' << ((MCSectionMachO*)Section)->getName() << '"';
+  
+  
   if (Symbol != NULL) {
     OS << ',' << Symbol << ',' << Size;
     if (Pow2Alignment != 0)

Modified: llvm/trunk/lib/MC/MCSection.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSection.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/MC/MCSection.cpp (original)
+++ llvm/trunk/lib/MC/MCSection.cpp Sat Aug  8 18:39:42 2009
@@ -20,13 +20,6 @@
 MCSection::~MCSection() {
 }
 
-MCSection::MCSection(const StringRef &N, bool isDirective, SectionKind K, 
-                     MCContext &Ctx)
-  : Name(N), IsDirective(isDirective), Kind(K) {
-  MCSection *&Entry = Ctx.Sections[Name];
-  assert(Entry == 0 && "Multiple sections with the same name created");
-  Entry = this;
-}
 
 //===----------------------------------------------------------------------===//
 // MCSectionELF
@@ -37,6 +30,13 @@
   return new (Ctx) MCSectionELF(Name, IsDirective, K, Ctx);
 }
 
+MCSectionELF::MCSectionELF(const StringRef &name, bool isDirective,
+                           SectionKind K, MCContext &Ctx)
+  : MCSection(K), Name(name), IsDirective(isDirective) {
+  Ctx.SetSection(Name, this);
+}
+
+
 void MCSectionELF::PrintSwitchToSection(const TargetAsmInfo &TAI,
                                         raw_ostream &OS) const {
   if (isDirective()) {
@@ -118,6 +118,12 @@
   return new (Ctx) MCSectionMachO(Name, IsDirective, K, Ctx);
 }
 
+MCSectionMachO::MCSectionMachO(const StringRef &name, bool isDirective,
+                               SectionKind K, MCContext &Ctx)
+  : MCSection(K), Name(name), IsDirective(isDirective) {
+  Ctx.SetSection(Name, this);
+}
+
 void MCSectionMachO::PrintSwitchToSection(const TargetAsmInfo &TAI,
                                           raw_ostream &OS) const {
   if (!isDirective())
@@ -135,6 +141,13 @@
   return new (Ctx) MCSectionCOFF(Name, IsDirective, K, Ctx);
 }
 
+MCSectionCOFF::MCSectionCOFF(const StringRef &name, bool isDirective,
+                             SectionKind K, MCContext &Ctx)
+  : MCSection(K), Name(name), IsDirective(isDirective) {
+  Ctx.SetSection(Name, this);
+}
+
+
 void MCSectionCOFF::PrintSwitchToSection(const TargetAsmInfo &TAI,
                                          raw_ostream &OS) const {
   

Modified: llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp Sat Aug  8 18:39:42 2009
@@ -13,6 +13,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "PIC16AsmPrinter.h"
+#include "PIC16Section.h"
 #include "PIC16TargetAsmInfo.h"
 #include "llvm/DerivedTypes.h"
 #include "llvm/Function.h"
@@ -21,7 +22,6 @@
 #include "llvm/CodeGen/MachineFrameInfo.h"
 #include "llvm/CodeGen/DwarfWriter.h"
 #include "llvm/CodeGen/MachineModuleInfo.h"
-#include "llvm/MC/MCSection.h"
 #include "llvm/Target/TargetRegistry.h"
 #include "llvm/Target/TargetLoweringObjectFile.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -227,9 +227,11 @@
   // Set the section names for all globals.
   for (Module::global_iterator I = M.global_begin(), E = M.global_end();
        I != E; ++I)
-    if (!I->isDeclaration() && !I->hasAvailableExternallyLinkage())
-      I->setSection(getObjFileLowering().
-                    SectionForGlobal(I, Mang,TM)->getName());
+    if (!I->isDeclaration() && !I->hasAvailableExternallyLinkage()) {
+      const MCSection *S = getObjFileLowering().SectionForGlobal(I, Mang, TM);
+      
+      I->setSection(((const MCSectionPIC16*)S)->getName());
+    }
 
   DbgInfo.BeginModule(M);
   EmitFunctionDecls(M);

Modified: llvm/trunk/lib/Target/PIC16/PIC16Section.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16Section.h?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16Section.h (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16Section.h Sat Aug  8 18:39:42 2009
@@ -15,27 +15,23 @@
 #define LLVM_PIC16SECTION_H
 
 #include "llvm/MC/MCSection.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/Support/raw_ostream.h"
 
 namespace llvm {
 
   class MCSectionPIC16 : public MCSection {
-    MCSectionPIC16(const StringRef &Name, bool IsDirective, SectionKind K,
-                 MCContext &Ctx) : MCSection(Name, IsDirective, K, Ctx) {}
+    std::string Name;
+    
+    MCSectionPIC16(const StringRef &name, SectionKind K,
+                   MCContext &Ctx);
   public:
     
-    static MCSectionPIC16 *Create(const StringRef &Name, bool IsDirective, 
-                                  SectionKind K, MCContext &Ctx) {
-      return new (Ctx) MCSectionPIC16(Name, IsDirective, K, Ctx);
-    }
+    const std::string &getName() const { return Name; }
     
+    static MCSectionPIC16 *Create(const StringRef &Name, 
+                                  SectionKind K, MCContext &Ctx);
     
     virtual void PrintSwitchToSection(const TargetAsmInfo &TAI,
-                                      raw_ostream &OS) const {
-      OS << getName() << '\n';
-    }
-
+                                      raw_ostream &OS) const;
   };
 
 } // end namespace llvm

Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.cpp (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.cpp Sat Aug  8 18:39:42 2009
@@ -15,17 +15,37 @@
 #include "llvm/Module.h"
 #include "llvm/MC/MCSection.h"
 #include "llvm/MC/MCContext.h"
+#include "llvm/Support/raw_ostream.h"
 using namespace llvm;
 
+MCSectionPIC16::MCSectionPIC16(const StringRef &name, SectionKind K,
+                               MCContext &Ctx) : MCSection(K), Name(name) {
+  Ctx.SetSection(Name, this);
+}
+
+MCSectionPIC16 *MCSectionPIC16::Create(const StringRef &Name, 
+                                       SectionKind K, MCContext &Ctx) {
+  return new (Ctx) MCSectionPIC16(Name, K, Ctx);
+}
+
+
+void MCSectionPIC16::PrintSwitchToSection(const TargetAsmInfo &TAI,
+                                          raw_ostream &OS) const {
+  OS << getName() << '\n';
+}
+
+
+
+
 PIC16TargetObjectFile::PIC16TargetObjectFile()
   : ExternalVarDecls(0), ExternalVarDefs(0) {
 }
 
-const MCSection *PIC16TargetObjectFile::
-getPIC16Section(const char *Name, bool isDirective, SectionKind Kind) const {
+const MCSectionPIC16 *PIC16TargetObjectFile::
+getPIC16Section(const char *Name, SectionKind Kind) const {
   if (MCSection *S = getContext().GetSection(Name))
-    return S;
-  return MCSectionPIC16::Create(Name, isDirective, Kind, getContext());
+    return (MCSectionPIC16*)S;
+  return MCSectionPIC16::Create(Name, Kind, getContext());
 }
 
 
@@ -33,39 +53,35 @@
   TargetLoweringObjectFile::Initialize(Ctx, tm);
   TM = &tm;
   
-  BSSSection = getPIC16Section("udata.# UDATA", false, 
-                               SectionKind::getBSS());
-  ReadOnlySection = getPIC16Section("romdata.# ROMDATA", false,
+  BSSSection = getPIC16Section("udata.# UDATA", SectionKind::getBSS());
+  ReadOnlySection = getPIC16Section("romdata.# ROMDATA", 
                                     SectionKind::getReadOnly());
-  DataSection = getPIC16Section("idata.# IDATA", false,
-                                SectionKind::getDataRel());
+  DataSection = getPIC16Section("idata.# IDATA", SectionKind::getDataRel());
   
   // Need because otherwise a .text symbol is emitted by DwarfWriter
   // in BeginModule, and gpasm cribbs for that .text symbol.
-  TextSection = getPIC16Section("", true, SectionKind::getText());
+  TextSection = getPIC16Section("", SectionKind::getText());
 
-  ROSections.push_back(new PIC16Section(ReadOnlySection));
+  ROSections.push_back(new PIC16Section((MCSectionPIC16*)ReadOnlySection));
   
   // FIXME: I don't know what the classification of these sections really is.
   ExternalVarDecls = new PIC16Section(getPIC16Section("ExternalVarDecls",
-                                                      false,
                                       SectionKind::getMetadata()));
   ExternalVarDefs = new PIC16Section(getPIC16Section("ExternalVarDefs",
-                                                     false,
                                       SectionKind::getMetadata()));
 }
 
 const MCSection *PIC16TargetObjectFile::
 getSectionForFunction(const std::string &FnName) const {
   std::string T = PAN::getCodeSectionName(FnName);
-  return getPIC16Section(T.c_str(), false, SectionKind::getText());
+  return getPIC16Section(T.c_str(), SectionKind::getText());
 }
 
 
 const MCSection *PIC16TargetObjectFile::
 getSectionForFunctionFrame(const std::string &FnName) const {
   std::string T = PAN::getFrameSectionName(FnName);
-  return getPIC16Section(T.c_str(), false, SectionKind::getDataRel());
+  return getPIC16Section(T.c_str(), SectionKind::getDataRel());
 }
 
 const MCSection *
@@ -92,9 +108,8 @@
   // No BSS section spacious enough was found. Crate a new one.
   if (!FoundBSS) {
     std::string name = PAN::getUdataSectionName(BSSSections.size());
-    const MCSection *NewSection = getPIC16Section(name.c_str(), false,
-                                                  // FIXME.
-                                                  SectionKind::getMetadata());
+    const MCSectionPIC16 *NewSection
+      = getPIC16Section(name.c_str(), /*FIXME*/ SectionKind::getMetadata());
 
     FoundBSS = new PIC16Section(NewSection);
 
@@ -134,9 +149,8 @@
   // No IDATA section spacious enough was found. Crate a new one.
   if (!FoundIDATA) {
     std::string name = PAN::getIdataSectionName(IDATASections.size());
-    const MCSection *NewSection = getPIC16Section(name.c_str(), false,
-                                                  // FIXME.
-                                                  SectionKind::getMetadata());
+    const MCSectionPIC16 *NewSection =
+      getPIC16Section(name.c_str(), /*FIXME*/ SectionKind::getMetadata());
 
     FoundIDATA = new PIC16Section(NewSection);
 
@@ -169,10 +183,8 @@
 
   // No Auto section was found. Crate a new one.
   if (!FoundAutoSec) {
-    const MCSection *NewSection = getPIC16Section(name.c_str(),
-                                                  // FIXME.
-                                                  false,
-                                       SectionKind::getMetadata());
+    const MCSectionPIC16 *NewSection =
+      getPIC16Section(name.c_str(), /*FIXME*/ SectionKind::getMetadata());
 
     FoundAutoSec = new PIC16Section(NewSection);
 
@@ -270,7 +282,7 @@
     return CreateSectionForGlobal(GVar, Mang);
   }
 
-  return getPIC16Section(GV->getSection().c_str(), false, Kind);
+  return getPIC16Section(GV->getSection().c_str(), Kind);
 }
 
 // Create a new section for global variable. If Addr is given then create
@@ -322,8 +334,8 @@
   
   PIC16Section *NewBSS = FoundBSS;
   if (NewBSS == NULL) {
-    const MCSection *NewSection = getPIC16Section(Name.c_str(), false,
-                                                  SectionKind::getBSS());
+    const MCSectionPIC16 *NewSection =
+      getPIC16Section(Name.c_str(), SectionKind::getBSS());
     NewBSS = new PIC16Section(NewSection);
     BSSSections.push_back(NewBSS);
   }
@@ -374,9 +386,8 @@
 
   PIC16Section *NewIDATASec = FoundIDATASec;
   if (NewIDATASec == NULL) {
-    const MCSection *NewSection = getPIC16Section(Name.c_str(), false,
-                                                  // FIXME:
-                                                  SectionKind::getMetadata());
+    const MCSectionPIC16 *NewSection =
+      getPIC16Section(Name.c_str(), /* FIXME */SectionKind::getMetadata());
     NewIDATASec = new PIC16Section(NewSection);
     IDATASections.push_back(NewIDATASec);
   }
@@ -414,8 +425,8 @@
 
   PIC16Section *NewRomSec = FoundROSec;
   if (NewRomSec == NULL) {
-    const MCSection *NewSection = getPIC16Section(Name.c_str(), false,
-                                                  SectionKind::getReadOnly());
+    const MCSectionPIC16 *NewSection =
+      getPIC16Section(Name.c_str(), SectionKind::getReadOnly());
     NewRomSec = new PIC16Section(NewSection);
     ROSections.push_back(NewRomSec);
   }

Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.h?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.h (original)
+++ llvm/trunk/lib/Target/PIC16/PIC16TargetObjectFile.h Sat Aug  8 18:39:42 2009
@@ -17,6 +17,7 @@
   class GlobalVariable;
   class Module;
   class PIC16TargetMachine;
+  class MCSectionPIC16;
   
   enum { DataBankSize = 80 };
 
@@ -29,12 +30,12 @@
   /// FIXME: MOVE ALL THIS STUFF TO MCSectionPIC16.
   ///
   struct PIC16Section {
-    const MCSection *S_; // Connection to actual Section.
+    const MCSectionPIC16 *S_; // Connection to actual Section.
     unsigned Size;  // Total size of the objects contained.
     bool SectionPrinted;
     std::vector<const GlobalVariable*> Items;
     
-    PIC16Section(const MCSection *s) {
+    PIC16Section(const MCSectionPIC16 *s) {
       S_ = s;
       Size = 0;
       SectionPrinted = false;
@@ -46,8 +47,8 @@
   class PIC16TargetObjectFile : public TargetLoweringObjectFile {
     const TargetMachine *TM;
     
-    const MCSection *getPIC16Section(const char *Name, bool isDirective,
-                                     SectionKind K) const;
+    const MCSectionPIC16 *getPIC16Section(const char *Name,
+                                          SectionKind K) const;
   public:
     mutable std::vector<PIC16Section*> BSSSections;
     mutable std::vector<PIC16Section*> IDATASections;

Modified: llvm/trunk/test/MC/AsmParser/labels.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AsmParser/labels.s?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/test/MC/AsmParser/labels.s (original)
+++ llvm/trunk/test/MC/AsmParser/labels.s Sat Aug  8 18:39:42 2009
@@ -29,8 +29,8 @@
 // CHECK: .long 11
         .long "a 0"
 
-// CHECK: .section "a 1,a 2"
-.section "a 1", "a 2"
+// XXCHCK: .section "a 1,a 2"
+//.section "a 1", "a 2"
 
 // CHECK: .globl "a 3"
         .globl "a 3"

Modified: llvm/trunk/tools/llvm-mc/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/AsmParser.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/tools/llvm-mc/AsmParser.cpp (original)
+++ llvm/trunk/tools/llvm-mc/AsmParser.cpp Sat Aug  8 18:39:42 2009
@@ -706,7 +706,7 @@
   // FIXME: Arch specific.
   MCSection *S = Ctx.GetSection(Section);
   if (S == 0)
-    S = MCSectionCOFF::Create(Section, false, SectionKind(), Ctx);
+    S = MCSectionMachO::Create(Section, false, SectionKind(), Ctx);
   
   Out.SwitchSection(S);
   return false;
@@ -727,7 +727,7 @@
   // FIXME: Arch specific.
   MCSection *S = Ctx.GetSection(Section);
   if (S == 0)
-    S = MCSectionCOFF::Create(Section, false, SectionKind(), Ctx);
+    S = MCSectionMachO::Create(Section, false, SectionKind(), Ctx);
   
   Out.SwitchSection(S);
   return false;
@@ -1118,7 +1118,7 @@
     // FIXME: Arch specific.
     MCSection *S = Ctx.GetSection(Section);
     if (S == 0)
-      S = MCSectionCOFF::Create(Section, false, SectionKind(), Ctx);
+      S = MCSectionMachO::Create(Section, false, SectionKind(), Ctx);
     
     // Create the zerofill section but no symbol
     Out.EmitZerofill(S);
@@ -1178,7 +1178,7 @@
   // FIXME: Arch specific.
   MCSection *S = Ctx.GetSection(Section);
   if (S == 0)
-    S = MCSectionCOFF::Create(Section, false, SectionKind(), Ctx);
+    S = MCSectionMachO::Create(Section, false, SectionKind(), Ctx);
   
   // Create the zerofill Symbol with Size and Pow2Alignment
   Out.EmitZerofill(S, Sym, Size, Pow2Alignment);

Modified: llvm/trunk/tools/llvm-mc/llvm-mc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/llvm-mc.cpp?rev=78517&r1=78516&r2=78517&view=diff

==============================================================================
--- llvm/trunk/tools/llvm-mc/llvm-mc.cpp (original)
+++ llvm/trunk/tools/llvm-mc/llvm-mc.cpp Sat Aug  8 18:39:42 2009
@@ -186,7 +186,7 @@
   OwningPtr<MCStreamer> Str(createAsmStreamer(Ctx, outs()));
 
   // FIXME: Target hook & command line option for initial section.
-  Str.get()->SwitchSection(MCSectionCOFF::Create("__TEXT,__text,"
+  Str.get()->SwitchSection(MCSectionMachO::Create("__TEXT,__text,"
                                              "regular,pure_instructions",
                                              false,
                                             SectionKind::getText(),





More information about the llvm-commits mailing list