go through PIC16TargetObjectFile to make sections instead of

creating them directly in the pic16 asmprinter.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78317 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-08-06 16:27:28 +00:00
parent fc60eb4033
commit 759b88898d
4 changed files with 26 additions and 12 deletions

View 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

View 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);

View 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 {

View 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;