From 824583844a8f334dd261894a3fac7ad476531667 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 1 Aug 2009 21:56:13 +0000 Subject: [PATCH] fix a fixme by sinking various target-specific directives down into the appropriate subclasses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77815 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../llvm/Target/TargetLoweringObjectFile.h | 60 +++++++++---------- lib/Target/PIC16/PIC16TargetObjectFile.cpp | 4 +- lib/Target/TargetLoweringObjectFile.cpp | 29 ++++----- 3 files changed, 44 insertions(+), 49 deletions(-) diff --git a/include/llvm/Target/TargetLoweringObjectFile.h b/include/llvm/Target/TargetLoweringObjectFile.h index 2b2d52fc6ed..55d9cd297bf 100644 --- a/include/llvm/Target/TargetLoweringObjectFile.h +++ b/include/llvm/Target/TargetLoweringObjectFile.h @@ -35,32 +35,18 @@ protected: /// TextSection - Section directive for standard text. /// - const MCSection *TextSection; // Defaults to ".text". + const MCSection *TextSection; /// DataSection - Section directive for standard data. /// - const MCSection *DataSection; // Defaults to ".data". + const MCSection *DataSection; + /// BSSSection - Section that is default initialized to zero. + const MCSection *BSSSection; - - // FIXME: SINK THESE. - const MCSection *BSSSection_; - - /// ReadOnlySection - This is the directive that is emitted to switch to a - /// read-only section for constant data (e.g. data declared const, - /// jump tables). - const MCSection *ReadOnlySection; // Defaults to NULL - - /// TLSDataSection - Section directive for Thread Local data. - /// - const MCSection *TLSDataSection; // Defaults to ".tdata". - - /// TLSBSSSection - Section directive for Thread Local uninitialized data. - /// Null if this target doesn't support a BSS section. - /// - const MCSection *TLSBSSSection; // Defaults to ".tbss". - - const MCSection *CStringSection_; + /// ReadOnlySection - Section that is readonly and can contain arbitrary + /// initialized data. + const MCSection *ReadOnlySection; public: // FIXME: NONPUB. @@ -87,7 +73,7 @@ public: /// FIXME: REMOVE this (rdar://7071300) virtual bool shouldEmitUsedDirectiveFor(const GlobalValue *GV, Mangler *) const { - return (GV!=0); + return GV != 0; } /// getSectionForMergeableConstant - Given a mergeable constant with the @@ -141,6 +127,26 @@ protected: class TargetLoweringObjectFileELF : public TargetLoweringObjectFile { bool AtIsCommentChar; // True if @ is the comment character on this target. bool HasCrazyBSS; +protected: + /// TLSDataSection - Section directive for Thread Local data. + /// + const MCSection *TLSDataSection; // Defaults to ".tdata". + + /// TLSBSSSection - Section directive for Thread Local uninitialized data. + /// Null if this target doesn't support a BSS section. + /// + const MCSection *TLSBSSSection; // Defaults to ".tbss". + + const MCSection *CStringSection; + + const MCSection *DataRelSection; + const MCSection *DataRelLocalSection; + const MCSection *DataRelROSection; + const MCSection *DataRelROLocalSection; + + const MCSection *MergeableConst4Section; + const MCSection *MergeableConst8Section; + const MCSection *MergeableConst16Section; public: /// ELF Constructor - AtIsCommentChar is true if the CommentCharacter from TAI /// is "@". @@ -166,20 +172,12 @@ public: virtual const MCSection * SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, Mangler *Mang, const TargetMachine &TM) const; -protected: - const MCSection *DataRelSection; - const MCSection *DataRelLocalSection; - const MCSection *DataRelROSection; - const MCSection *DataRelROLocalSection; - - const MCSection *MergeableConst4Section; - const MCSection *MergeableConst8Section; - const MCSection *MergeableConst16Section; }; class TargetLoweringObjectFileMachO : public TargetLoweringObjectFile { + const MCSection *CStringSection; const MCSection *TextCoalSection; const MCSection *ConstTextCoalSection; const MCSection *ConstDataCoalSection; diff --git a/lib/Target/PIC16/PIC16TargetObjectFile.cpp b/lib/Target/PIC16/PIC16TargetObjectFile.cpp index 78e88ca935c..04f2ebf1133 100644 --- a/lib/Target/PIC16/PIC16TargetObjectFile.cpp +++ b/lib/Target/PIC16/PIC16TargetObjectFile.cpp @@ -19,8 +19,8 @@ void PIC16TargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &tm){ TargetLoweringObjectFile::Initialize(Ctx, tm); TM = &tm; - BSSSection_ = getOrCreateSection("udata.# UDATA", false, - SectionKind::get(SectionKind::BSS)); + BSSSection = getOrCreateSection("udata.# UDATA", false, + SectionKind::get(SectionKind::BSS)); ReadOnlySection = getOrCreateSection("romdata.# ROMDATA", false, SectionKind::get(SectionKind::ReadOnly)); DataSection = getOrCreateSection("idata.# IDATA", false, diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index a26bec2bdf7..84247790f45 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -32,11 +32,8 @@ using namespace llvm; TargetLoweringObjectFile::TargetLoweringObjectFile() : Ctx(0) { TextSection = 0; DataSection = 0; - BSSSection_ = 0; + BSSSection = 0; ReadOnlySection = 0; - TLSDataSection = 0; - TLSBSSSection = 0; - CStringSection_ = 0; } TargetLoweringObjectFile::~TargetLoweringObjectFile() { @@ -222,8 +219,8 @@ TargetLoweringObjectFile::SelectSectionForGlobal(const GlobalValue *GV, if (Kind.isText()) return getTextSection(); - if (Kind.isBSS() && BSSSection_ != 0) - return BSSSection_; + if (Kind.isBSS() && BSSSection != 0) + return BSSSection; if (Kind.isReadOnly() && ReadOnlySection != 0) return ReadOnlySection; @@ -261,16 +258,16 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, const TargetMachine &TM) { TargetLoweringObjectFile::Initialize(Ctx, TM); if (!HasCrazyBSS) - BSSSection_ = getOrCreateSection("\t.bss", true, - SectionKind::get(SectionKind::BSS)); + BSSSection = getOrCreateSection("\t.bss", true, + SectionKind::get(SectionKind::BSS)); else // PPC/Linux doesn't support the .bss directive, it needs .section .bss. // FIXME: Does .section .bss work everywhere?? // FIXME2: this should just be handle by the section printer. We should get // away from syntactic view of the sections and MCSection should just be a // semantic view. - BSSSection_ = getOrCreateSection("\t.bss", false, - SectionKind::get(SectionKind::BSS)); + BSSSection = getOrCreateSection("\t.bss", false, + SectionKind::get(SectionKind::BSS)); TextSection = getOrCreateSection("\t.text", true, @@ -283,7 +280,7 @@ void TargetLoweringObjectFileELF::Initialize(MCContext &Ctx, TLSDataSection = getOrCreateSection("\t.tdata", false, SectionKind::get(SectionKind::ThreadData)); - CStringSection_ = getOrCreateSection("\t.rodata.str", true, + CStringSection = getOrCreateSection("\t.rodata.str", true, SectionKind::get(SectionKind::MergeableCString)); TLSBSSSection = getOrCreateSection("\t.tbss", false, @@ -423,7 +420,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, if (Kind.isText()) return TextSection; if (Kind.isMergeableCString()) { - assert(CStringSection_ && "Should have string section prefix"); + assert(CStringSection && "Should have string section prefix"); // We also need alignment here. // FIXME: this is getting the alignment of the character, not the @@ -431,7 +428,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, unsigned Align = TM.getTargetData()->getPreferredAlignment(cast(GV)); - std::string Name = CStringSection_->getName() + "1." + utostr(Align); + std::string Name = CStringSection->getName() + "1." + utostr(Align); return getOrCreateSection(Name.c_str(), false, SectionKind::get(SectionKind::MergeableCString)); } @@ -451,7 +448,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, if (Kind.isThreadData()) return TLSDataSection; if (Kind.isThreadBSS()) return TLSBSSSection; - if (Kind.isBSS()) return BSSSection_; + if (Kind.isBSS()) return BSSSection; if (Kind.isDataNoRel()) return DataSection; if (Kind.isDataRelLocal()) return DataRelLocalSection; @@ -493,7 +490,7 @@ void TargetLoweringObjectFileMachO::Initialize(MCContext &Ctx, DataSection = getOrCreateSection("\t.data", true, SectionKind::get(SectionKind::DataRel)); - CStringSection_ = getOrCreateSection("\t.cstring", true, + CStringSection = getOrCreateSection("\t.cstring", true, SectionKind::get(SectionKind::MergeableCString)); FourByteConstantSection = getOrCreateSection("\t.literal4\n", true, SectionKind::get(SectionKind::MergeableConst4)); @@ -554,7 +551,7 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind, if (Size) { unsigned Align = TD.getPreferredAlignment(cast(GV)); if (Align <= 32) - return CStringSection_; + return CStringSection; } return ReadOnlySection;