diff --git a/lib/Target/PIC16/PIC16AsmPrinter.cpp b/lib/Target/PIC16/PIC16AsmPrinter.cpp index e98cf41b540..55ec1fe7d55 100644 --- a/lib/Target/PIC16/PIC16AsmPrinter.cpp +++ b/lib/Target/PIC16/PIC16AsmPrinter.cpp @@ -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 diff --git a/lib/Target/PIC16/PIC16AsmPrinter.h b/lib/Target/PIC16/PIC16AsmPrinter.h index c365b5a30db..19c490f78fe 100644 --- a/lib/Target/PIC16/PIC16AsmPrinter.h +++ b/lib/Target/PIC16/PIC16AsmPrinter.h @@ -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); diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/lib/Target/PIC16/PIC16TargetObjectFile.cpp index 7b5d5574e5c..f15f3321c7c 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.cpp +++ b/lib/Target/PIC16/PIC16TargetObjectFile.cpp @@ -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 { diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.h b/lib/Target/PIC16/PIC16TargetObjectFile.h index 708c311e28e..6cc7054e63b 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.h +++ b/lib/Target/PIC16/PIC16TargetObjectFile.h @@ -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;