From: Chris Lattner Date: Sat, 8 Aug 2009 20:14:13 +0000 (+0000) Subject: sink getOrCreateSection down into all the object file implementations, X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=fbf1d271e6a7157c1b5432e84d5633f63869b5a8;p=oota-llvm.git sink getOrCreateSection down into all the object file implementations, now that they create *all* the sections. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78494 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Target/TargetLoweringObjectFile.h b/include/llvm/Target/TargetLoweringObjectFile.h index 0972dcde072..e9533c4da22 100644 --- a/include/llvm/Target/TargetLoweringObjectFile.h +++ b/include/llvm/Target/TargetLoweringObjectFile.h @@ -80,12 +80,11 @@ protected: const MCSection *DwarfRangesSection; const MCSection *DwarfMacroInfoSection; -protected: - const MCSection *getOrCreateSection(const char *Name, - bool isDirective, - SectionKind K) const; public: + MCContext &getContext() const { return *Ctx; } + + virtual ~TargetLoweringObjectFile(); /// Initialize - this method must be called before any actual lowering is @@ -206,6 +205,11 @@ protected: const MCSection *MergeableConst4Section; const MCSection *MergeableConst8Section; const MCSection *MergeableConst16Section; + +protected: + const MCSection *getOrCreateSection(const char *Name, + bool isDirective, + SectionKind K) const; public: /// ELF Constructor - AtIsCommentChar is true if the CommentCharacter from TAI /// is "@". @@ -213,9 +217,8 @@ public: // FIXME: REMOVE AFTER UNIQUING IS FIXED. bool hasCrazyBSS = false) : AtIsCommentChar(atIsCommentChar), HasCrazyBSS(hasCrazyBSS) {} - - virtual void Initialize(MCContext &Ctx, const TargetMachine &TM); + virtual void Initialize(MCContext &Ctx, const TargetMachine &TM); /// getSectionForConstant - Given a constant with the SectionKind, return a /// section that it should be placed in. @@ -247,6 +250,10 @@ class TargetLoweringObjectFileMachO : public TargetLoweringObjectFile { const MCSection *FourByteConstantSection; const MCSection *EightByteConstantSection; const MCSection *SixteenByteConstantSection; +protected: + const MCSection *getOrCreateSection(const char *Name, + bool isDirective, + SectionKind K) const; public: virtual void Initialize(MCContext &Ctx, const TargetMachine &TM); @@ -276,6 +283,10 @@ public: class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile { +protected: + const MCSection *getOrCreateSection(const char *Name, + bool isDirective, + SectionKind K) const; public: virtual void Initialize(MCContext &Ctx, const TargetMachine &TM); diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/lib/Target/PIC16/PIC16TargetObjectFile.cpp index b09ad305c28..308e09c100b 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.cpp +++ b/lib/Target/PIC16/PIC16TargetObjectFile.cpp @@ -13,12 +13,21 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" #include "llvm/MC/MCSection.h" +#include "llvm/MC/MCContext.h" using namespace llvm; PIC16TargetObjectFile::PIC16TargetObjectFile() : ExternalVarDecls(0), ExternalVarDefs(0) { } +const MCSection *PIC16TargetObjectFile:: +getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const { + if (MCSection *S = getContext().GetSection(Name)) + return S; + return MCSection::Create(Name, isDirective, Kind, getContext()); +} + + void PIC16TargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &tm){ TargetLoweringObjectFile::Initialize(Ctx, tm); TM = &tm; diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.h b/lib/Target/PIC16/PIC16TargetObjectFile.h index c2611087b50..b71a7050a71 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.h +++ b/lib/Target/PIC16/PIC16TargetObjectFile.h @@ -45,6 +45,10 @@ namespace llvm { class PIC16TargetObjectFile : public TargetLoweringObjectFile { const TargetMachine *TM; + + const MCSection *getOrCreateSection(const char *Name, + bool isDirective, + SectionKind K) const; public: mutable std::vector BSSSections; mutable std::vector IDATASections; diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index 6aca6da8afe..e983285f337 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -274,19 +274,18 @@ TargetLoweringObjectFile::getSectionForConstant(SectionKind Kind) const { } -const MCSection *TargetLoweringObjectFile:: -getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const { - if (MCSection *S = Ctx->GetSection(Name)) - return S; - return MCSection::Create(Name, isDirective, Kind, *Ctx); -} - - //===----------------------------------------------------------------------===// // ELF //===----------------------------------------------------------------------===// +const MCSection *TargetLoweringObjectFileELF:: +getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const { + if (MCSection *S = getContext().GetSection(Name)) + return S; + return MCSection::Create(Name, isDirective, Kind, getContext()); +} + void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, const TargetMachine &TM) { TargetLoweringObjectFile::Initialize(Ctx, TM); @@ -575,6 +574,13 @@ getSectionForConstant(SectionKind Kind) const { // MachO //===----------------------------------------------------------------------===// +const MCSection *TargetLoweringObjectFileMachO:: +getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const { + if (MCSection *S = getContext().GetSection(Name)) + return S; + return MCSection::Create(Name, isDirective, Kind, getContext()); +} + const MCSection *TargetLoweringObjectFileMachO:: getMachOSection(const char *Name, bool isDirective, SectionKind K) { // FOR NOW, Just forward. @@ -788,6 +794,13 @@ shouldEmitUsedDirectiveFor(const GlobalValue *GV, Mangler *Mang) const { // COFF //===----------------------------------------------------------------------===// +const MCSection *TargetLoweringObjectFileCOFF:: +getOrCreateSection(const char *Name, bool isDirective, SectionKind Kind) const { + if (MCSection *S = getContext().GetSection(Name)) + return S; + return MCSection::Create(Name, isDirective, Kind, getContext()); +} + const MCSection *TargetLoweringObjectFileCOFF:: getCOFFSection(const char *Name, bool isDirective, SectionKind K) { return getOrCreateSection(Name, isDirective, K);