go through PIC16TargetObjectFile to make sections instead of
authorChris Lattner <sabre@nondot.org>
Thu, 6 Aug 2009 16:27:28 +0000 (16:27 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 6 Aug 2009 16:27:28 +0000 (16:27 +0000)
creating them directly in the pic16 asmprinter.

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

lib/Target/PIC16/PIC16AsmPrinter.cpp
lib/Target/PIC16/PIC16AsmPrinter.h
lib/Target/PIC16/PIC16TargetObjectFile.cpp
lib/Target/PIC16/PIC16TargetObjectFile.h

index e98cf41b5400cd3b62da447fb6decfdb60cf7271..55ec1fe7d55d35b452233217d1f0af6461cfabd9 100644 (file)
@@ -68,12 +68,8 @@ bool PIC16AsmPrinter::runOnMachineFunction(MachineFunction &MF) {
   EmitAutos(CurrentFnName);
 
   // Now emit the instructions of function in its code section.
-  std::string T = PAN::getCodeSectionName(CurrentFnName);
-  const char *codeSection = T.c_str();
   const MCSection *fCodeSection = 
-    getObjFileLowering().getOrCreateSection(codeSection, false, 
-                                           SectionKind::getText());
+    getObjFileLowering().getSectionForFunction(CurrentFnName);
   // Start the Code Section.
   O <<  "\n";
   SwitchToSection(fCodeSection);
@@ -347,12 +343,9 @@ void PIC16AsmPrinter::EmitFunctionFrame(MachineFunction &MF) {
   const TargetData *TD = TM.getTargetData();
   // Emit the data section name.
   O << "\n"; 
-  std::string T = PAN::getFrameSectionName(CurrentFnName);
-  const char *SectionName = T.c_str();
-
+  
   const MCSection *fPDataSection =
-    getObjFileLowering().getOrCreateSection(SectionName, false,
-                                        SectionKind::getDataRel());
+    getObjFileLowering().getSectionForFunctionFrame(CurrentFnName);
   SwitchToSection(fPDataSection);
   
   // Emit function frame label
index c365b5a30dba9f4db0933d5e6e51ba83c4595e8d..19c490f78fe85569a67fff8df40244ed3c29c51a 100644 (file)
@@ -37,6 +37,10 @@ namespace llvm {
     virtual const char *getPassName() const {
       return "PIC16 Assembly Printer";
     }
+    
+    PIC16TargetObjectFile &getObjFileLowering() const {
+      return (PIC16TargetObjectFile &)AsmPrinter::getObjFileLowering();
+    }
 
     bool runOnMachineFunction(MachineFunction &F);
     void printOperand(const MachineInstr *MI, int opNum);
index 7b5d5574e5c8e3cc2becff3a8db6870403cdb9ea..f15f3321c7ca7985c2dd12744dc7ef03b8200390 100644 (file)
@@ -16,8 +16,7 @@
 using namespace llvm;
 
 PIC16TargetObjectFile::PIC16TargetObjectFile()
-  : ExternalVarDecls(0), ExternalVarDefs(0) 
-{
+  : ExternalVarDecls(0), ExternalVarDefs(0) {
 }
 
 void PIC16TargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &tm){
@@ -47,6 +46,18 @@ void PIC16TargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &tm){
                                       SectionKind::getMetadata()));
 }
 
+const MCSection *PIC16TargetObjectFile::
+getSectionForFunction(const std::string &FnName) const {
+  std::string T = PAN::getCodeSectionName(FnName);
+  return getOrCreateSection(T.c_str(), false, SectionKind::getText());
+}
+
+
+const MCSection *PIC16TargetObjectFile::
+getSectionForFunctionFrame(const std::string &FnName) const {
+  std::string T = PAN::getFrameSectionName(FnName);
+  return getOrCreateSection(T.c_str(), false, SectionKind::getDataRel());
+}
 
 const MCSection *
 PIC16TargetObjectFile::getBSSSectionForGlobal(const GlobalVariable *GV) const {
index 708c311e28e4f939e9b1bc24c5dbb07201e3b8bb..6cc7054e63b5e5676ec6b73c49720a23822b0158 100644 (file)
@@ -64,10 +64,16 @@ namespace llvm {
     virtual const MCSection *
     getSpecialCasedSectionGlobals(const GlobalValue *GV, Mangler *Mang,
                                   SectionKind Kind) const;
+    
     virtual const MCSection *SelectSectionForGlobal(const GlobalValue *GV,
                                                     SectionKind Kind,
                                                     Mangler *Mang,
                                                     const TargetMachine&) const;
+
+    const MCSection *getSectionForFunction(const std::string &FnName) const;
+    const MCSection *getSectionForFunctionFrame(const std::string &FnName)const;
+    
+    
   private:
     std::string getSectionNameForSym(const std::string &Sym) const;