From f8dc8aac3c8d19cc5edb2081bb729eb4f6e1dfc5 Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Wed, 24 Sep 2008 22:15:21 +0000 Subject: [PATCH] Get rid of duplicate char*/Section* TextSection llvm-svn: 56574 --- llvm/include/llvm/CodeGen/AsmPrinter.h | 1 + llvm/include/llvm/Target/TargetAsmInfo.h | 8 ++------ llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 3 ++- llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp | 17 +++++++++-------- llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp | 4 ++-- llvm/lib/Target/DarwinTargetAsmInfo.cpp | 2 +- llvm/lib/Target/ELFTargetAsmInfo.cpp | 3 +-- .../Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp | 4 ++-- llvm/lib/Target/TargetAsmInfo.cpp | 7 +++---- llvm/lib/Target/X86/X86TargetAsmInfo.cpp | 2 +- 10 files changed, 24 insertions(+), 27 deletions(-) diff --git a/llvm/include/llvm/CodeGen/AsmPrinter.h b/llvm/include/llvm/CodeGen/AsmPrinter.h index 931e31a63c65..077f5b1e7749 100644 --- a/llvm/include/llvm/CodeGen/AsmPrinter.h +++ b/llvm/include/llvm/CodeGen/AsmPrinter.h @@ -92,6 +92,7 @@ namespace llvm { /// CurrentSection - The current section we are emitting to. This is /// controlled and used by the SwitchSection method. std::string CurrentSection; + const Section* CurrentSection_; /// IsInTextSection - True if the current section we are emitting to is a /// text section. diff --git a/llvm/include/llvm/Target/TargetAsmInfo.h b/llvm/include/llvm/Target/TargetAsmInfo.h index 49a99c509e60..6e019fd73b7e 100644 --- a/llvm/include/llvm/Target/TargetAsmInfo.h +++ b/llvm/include/llvm/Target/TargetAsmInfo.h @@ -131,8 +131,7 @@ namespace llvm { /// TextSection - Section directive for standard text. /// - const char *TextSection; // Defaults to ".text". - const Section *TextSection_; + const Section *TextSection; // Defaults to ".text". /// DataSection - Section directive for standard data. /// @@ -599,12 +598,9 @@ namespace llvm { // Accessors. // - const char *getTextSection() const { + const Section *getTextSection() const { return TextSection; } - const Section *getTextSection_() const { - return TextSection_; - } const char *getDataSection() const { return DataSection; } diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 9fc57a9545c0..3c25ab73b21b 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -114,6 +114,7 @@ void AsmPrinter::SwitchToSection(const Section* NS) { // FIXME: Make CurrentSection a Section* in the future CurrentSection = NewSection; + CurrentSection_ = NS; if (!CurrentSection.empty()) { // If section is named we need to switch into it via special '.section' @@ -174,7 +175,7 @@ bool AsmPrinter::doFinalization(Module &M) { if (TAI->getSetDirective()) { if (!M.alias_empty()) - SwitchToTextSection(TAI->getTextSection()); + SwitchToSection(TAI->getTextSection()); O << '\n'; for (Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end(); diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 99e94e2ac049..5d2581f5f3ba 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -1152,7 +1152,7 @@ private: /// SectionMap - Provides a unique id per text section. /// - UniqueVector SectionMap; + UniqueVector SectionMap; /// SectionSourceLines - Tracks line numbers per text section. /// @@ -2062,7 +2062,7 @@ private: Asm->SwitchToDataSection(TAI->getDwarfRangesSection()); EmitLabel("section_ranges", 0); - Asm->SwitchToTextSection(TAI->getTextSection()); + Asm->SwitchToSection(TAI->getTextSection()); EmitLabel("text_begin", 0); Asm->SwitchToDataSection(TAI->getDataSection()); EmitLabel("data_begin", 0); @@ -2353,9 +2353,10 @@ private: // Isolate current sections line info. const std::vector &LineInfos = SectionSourceLines[j]; - if (VerboseAsm) - Asm->EOL(std::string("Section ") + SectionMap[j + 1]); - else + if (VerboseAsm) { + const Section* S = SectionMap[j + 1]; + Asm->EOL(std::string("Section ") + S->getName()); + } else Asm->EOL(); // Dwarf assumes we start with first line of first source file. @@ -2747,14 +2748,14 @@ public: if (!ShouldEmitDwarf()) return; // Standard sections final addresses. - Asm->SwitchToTextSection(TAI->getTextSection()); + Asm->SwitchToSection(TAI->getTextSection()); EmitLabel("text_end", 0); Asm->SwitchToDataSection(TAI->getDataSection()); EmitLabel("data_end", 0); // End text sections. for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) { - Asm->SwitchToTextSection(SectionMap[i].c_str()); + Asm->SwitchToSection(SectionMap[i]); EmitLabel("section_end", i); } @@ -2832,7 +2833,7 @@ public: if (!LineInfos.empty()) { // Get section line info. - unsigned ID = SectionMap.insert(Asm->CurrentSection); + unsigned ID = SectionMap.insert(Asm->CurrentSection_); if (SectionSourceLines.size() < ID) SectionSourceLines.resize(ID); std::vector &SectionLineInfos = SectionSourceLines[ID-1]; // Append the function info to section info. diff --git a/llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp index 16abca22e116..7f069f699a2f 100644 --- a/llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp @@ -62,7 +62,7 @@ static void EmitCamlGlobal(const Module &M, raw_ostream &OS, AsmPrinter &AP, void OcamlGCMetadataPrinter::beginAssembly(raw_ostream &OS, AsmPrinter &AP, const TargetAsmInfo &TAI) { - AP.SwitchToTextSection(TAI.getTextSection()); + AP.SwitchToSection(TAI.getTextSection()); EmitCamlGlobal(getModule(), OS, AP, TAI, "code_begin"); AP.SwitchToDataSection(TAI.getDataSection()); @@ -97,7 +97,7 @@ void OcamlGCMetadataPrinter::finishAssembly(raw_ostream &OS, AsmPrinter &AP, AddressAlignLog = 3; } - AP.SwitchToTextSection(TAI.getTextSection()); + AP.SwitchToSection(TAI.getTextSection()); EmitCamlGlobal(getModule(), OS, AP, TAI, "code_end"); AP.SwitchToDataSection(TAI.getDataSection()); diff --git a/llvm/lib/Target/DarwinTargetAsmInfo.cpp b/llvm/lib/Target/DarwinTargetAsmInfo.cpp index 2fc1d28d2b6b..a5b72e3edd3a 100644 --- a/llvm/lib/Target/DarwinTargetAsmInfo.cpp +++ b/llvm/lib/Target/DarwinTargetAsmInfo.cpp @@ -82,7 +82,7 @@ DarwinTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { if (isWeak) return TextCoalSection; else - return getTextSection_(); + return getTextSection(); case SectionKind::Data: case SectionKind::ThreadData: case SectionKind::BSS: diff --git a/llvm/lib/Target/ELFTargetAsmInfo.cpp b/llvm/lib/Target/ELFTargetAsmInfo.cpp index 9ffc72d2340d..4529d0158d9c 100644 --- a/llvm/lib/Target/ELFTargetAsmInfo.cpp +++ b/llvm/lib/Target/ELFTargetAsmInfo.cpp @@ -27,7 +27,6 @@ using namespace llvm; ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM) { ETM = &TM; - TextSection_ = getUnnamedSection("\t.text", SectionFlags::Code); DataSection_ = getUnnamedSection("\t.data", SectionFlags::Writeable); BSSSection_ = getUnnamedSection("\t.bss", SectionFlags::Writeable | SectionFlags::BSS); @@ -49,7 +48,7 @@ ELFTargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { case Function::InternalLinkage: case Function::DLLExportLinkage: case Function::ExternalLinkage: - return getTextSection_(); + return getTextSection(); case Function::WeakLinkage: case Function::LinkOnceLinkage: std::string Name = UniqueSectionForGlobal(GV, Kind); diff --git a/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp index 2d9ecbd71e33..f21cb4e710fa 100644 --- a/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp @@ -637,7 +637,7 @@ bool PPCLinuxAsmPrinter::doInitialization(Module &M) { // GNU as handles section names wrapped in quotes Mang->setUseQuotes(true); - SwitchToTextSection(TAI->getTextSection()); + SwitchToSection(TAI->getTextSection()); return Result; } @@ -864,7 +864,7 @@ bool PPCDarwinAsmPrinter::doInitialization(Module &M) { SwitchToTextSection("\t.section __TEXT,__symbol_stub1,symbol_stubs," "pure_instructions,16"); } - SwitchToTextSection(TAI->getTextSection()); + SwitchToSection(TAI->getTextSection()); return Result; } diff --git a/llvm/lib/Target/TargetAsmInfo.cpp b/llvm/lib/Target/TargetAsmInfo.cpp index 536f16d6578a..df540393d5c5 100644 --- a/llvm/lib/Target/TargetAsmInfo.cpp +++ b/llvm/lib/Target/TargetAsmInfo.cpp @@ -26,8 +26,7 @@ using namespace llvm; TargetAsmInfo::TargetAsmInfo() : - TextSection("\t.text"), - TextSection_(0), + TextSection(0), DataSection("\t.data"), DataSection_(0), BSSSection("\t.bss"), @@ -126,7 +125,7 @@ TargetAsmInfo::TargetAsmInfo() : DwarfEHFrameSection(".eh_frame"), DwarfExceptionSection(".gcc_except_table"), AsmTransCBE(0) { - TextSection_ = getUnnamedSection(TextSection); + TextSection = getUnnamedSection("\t.text", SectionFlags::Code); DataSection_ = getUnnamedSection(DataSection); } @@ -300,7 +299,7 @@ TargetAsmInfo::SelectSectionForGlobal(const GlobalValue *GV) const { return getNamedSection(Name.c_str(), Flags); } else { if (Kind == SectionKind::Text) - return getTextSection_(); + return getTextSection(); else if (isBSS(Kind) && getBSSSection_()) return getBSSSection_(); else if (getReadOnlySection_() && SectionKind::isReadOnly(Kind)) diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp index 64858f89bd5b..9f9e2ed7d684 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp @@ -433,7 +433,7 @@ X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM): Data64bitsDirective = "\tdq\t"; HasDotTypeDotSizeDirective = false; - TextSection = "_text"; + TextSection = getUnnamedSection("_text", SectionFlags::Code); DataSection = "_data"; JumpTableDataSection = NULL; SwitchToSectionDirective = "";