From 0f4d60ca903c961209d3c631153fc4c7e218246c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 26 Jul 2009 19:23:28 +0000 Subject: [PATCH] untangle a TargetAsmInfo hack where ELFTargetAsmInfo would create a 'unnamed' bss section, but some impls would want a named one. Since they don't have consistent behavior, just make each target do their own thing, instead of doing something "sortof common" then having targets change immutable objects later. llvm-svn: 77165 --- include/llvm/Target/ELFTargetAsmInfo.h | 2 +- include/llvm/Target/TargetAsmInfo.h | 7 ++----- lib/Target/ARM/ARMTargetAsmInfo.cpp | 3 +++ lib/Target/CellSPU/SPUTargetAsmInfo.cpp | 3 +-- lib/Target/ELFTargetAsmInfo.cpp | 5 ++--- lib/Target/MSP430/MSP430TargetAsmInfo.cpp | 7 ++++--- lib/Target/MSP430/MSP430TargetAsmInfo.h | 7 +------ lib/Target/Mips/MipsTargetAsmInfo.cpp | 5 +++-- lib/Target/Mips/MipsTargetAsmInfo.h | 9 --------- lib/Target/PowerPC/PPCTargetAsmInfo.cpp | 11 ++++------- lib/Target/Sparc/SparcTargetAsmInfo.cpp | 9 ++++----- lib/Target/Sparc/SparcTargetAsmInfo.h | 1 - lib/Target/SystemZ/SystemZTargetAsmInfo.cpp | 3 +++ lib/Target/SystemZ/SystemZTargetAsmInfo.h | 1 - lib/Target/TargetAsmInfo.cpp | 11 +++++------ lib/Target/X86/X86TargetAsmInfo.cpp | 3 +++ 16 files changed, 36 insertions(+), 51 deletions(-) diff --git a/include/llvm/Target/ELFTargetAsmInfo.h b/include/llvm/Target/ELFTargetAsmInfo.h index eb24dd10f71..1b405d6dcac 100644 --- a/include/llvm/Target/ELFTargetAsmInfo.h +++ b/include/llvm/Target/ELFTargetAsmInfo.h @@ -23,7 +23,7 @@ namespace llvm { class Type; struct ELFTargetAsmInfo: public TargetAsmInfo { - explicit ELFTargetAsmInfo(const TargetMachine &TM); + ELFTargetAsmInfo(const TargetMachine &TM); /// getSectionForMergeableConstant - Given a mergeable constant with the /// specified size and relocation information, return a section that it diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h index ab28ec12ff4..af3fd22eb6f 100644 --- a/include/llvm/Target/TargetAsmInfo.h +++ b/include/llvm/Target/TargetAsmInfo.h @@ -254,7 +254,6 @@ namespace llvm { explicit Section(unsigned F = SectionFlags::Invalid) : Flags(F) { } public: - unsigned getEntitySize() const { return (Flags >> 24) & 0xFF; } const std::string &getName() const { return Name; } @@ -679,11 +678,9 @@ namespace llvm { virtual ~TargetAsmInfo(); const Section* getNamedSection(const char *Name, - unsigned Flags = SectionFlags::None, - bool Override = false) const; + unsigned Flags = SectionFlags::None) const; const Section* getUnnamedSection(const char *Directive, - unsigned Flags = SectionFlags::None, - bool Override = false) const; + unsigned Flags = SectionFlags::None) const; /// Measure the specified inline asm to determine an approximation of its /// length. diff --git a/lib/Target/ARM/ARMTargetAsmInfo.cpp b/lib/Target/ARM/ARMTargetAsmInfo.cpp index 34c187492fd..95f19c89799 100644 --- a/lib/Target/ARM/ARMTargetAsmInfo.cpp +++ b/lib/Target/ARM/ARMTargetAsmInfo.cpp @@ -59,6 +59,9 @@ ARMELFTargetAsmInfo::ARMELFTargetAsmInfo(const ARMBaseTargetMachine &TM): ARMTargetAsmInfo(TM) { Subtarget = &TM.getSubtarget(); + BSSSection_ = getUnnamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); + NeedsSet = false; HasLEB128 = true; AbsoluteDebugSectionOffsets = true; diff --git a/lib/Target/CellSPU/SPUTargetAsmInfo.cpp b/lib/Target/CellSPU/SPUTargetAsmInfo.cpp index 000ba01c869..c4d354687ff 100644 --- a/lib/Target/CellSPU/SPUTargetAsmInfo.cpp +++ b/lib/Target/CellSPU/SPUTargetAsmInfo.cpp @@ -36,8 +36,7 @@ SPULinuxTargetAsmInfo::SPULinuxTargetAsmInfo(const SPUTargetMachine &TM) : // BSS section needs to be emitted as ".section" BSSSection = "\t.section\t.bss"; BSSSection_ = getUnnamedSection("\t.section\t.bss", - SectionFlags::Writable | SectionFlags::BSS, - true); + SectionFlags::Writable | SectionFlags::BSS); SupportsDebugInformation = true; NeedsSet = true; diff --git a/lib/Target/ELFTargetAsmInfo.cpp b/lib/Target/ELFTargetAsmInfo.cpp index b64c0b675d9..927cb38b1de 100644 --- a/lib/Target/ELFTargetAsmInfo.cpp +++ b/lib/Target/ELFTargetAsmInfo.cpp @@ -22,14 +22,13 @@ #include "llvm/Target/ELFTargetAsmInfo.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetData.h" - using namespace llvm; ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM) : TargetAsmInfo(TM) { - BSSSection_ = getUnnamedSection("\t.bss", - SectionFlags::Writable | SectionFlags::BSS); + BSSSection_ = getUnnamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); ReadOnlySection = getNamedSection("\t.rodata", SectionFlags::None); TLSDataSection = getNamedSection("\t.tdata", SectionFlags::Writable | SectionFlags::TLS); diff --git a/lib/Target/MSP430/MSP430TargetAsmInfo.cpp b/lib/Target/MSP430/MSP430TargetAsmInfo.cpp index ab181de13f9..12ae5528e7e 100644 --- a/lib/Target/MSP430/MSP430TargetAsmInfo.cpp +++ b/lib/Target/MSP430/MSP430TargetAsmInfo.cpp @@ -12,11 +12,12 @@ //===----------------------------------------------------------------------===// #include "MSP430TargetAsmInfo.h" -#include "MSP430TargetMachine.h" - using namespace llvm; -MSP430TargetAsmInfo::MSP430TargetAsmInfo(const MSP430TargetMachine &TM) +MSP430TargetAsmInfo::MSP430TargetAsmInfo(const TargetMachine &TM) : ELFTargetAsmInfo(TM) { AlignmentIsInBytes = false; + + BSSSection_ = getUnnamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); } diff --git a/lib/Target/MSP430/MSP430TargetAsmInfo.h b/lib/Target/MSP430/MSP430TargetAsmInfo.h index b58d5c9c764..93ed04f1bcb 100644 --- a/lib/Target/MSP430/MSP430TargetAsmInfo.h +++ b/lib/Target/MSP430/MSP430TargetAsmInfo.h @@ -14,16 +14,11 @@ #ifndef MSP430TARGETASMINFO_H #define MSP430TARGETASMINFO_H -#include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/ELFTargetAsmInfo.h" namespace llvm { - - // Forward declaration. - class MSP430TargetMachine; - struct MSP430TargetAsmInfo : public ELFTargetAsmInfo { - explicit MSP430TargetAsmInfo(const MSP430TargetMachine &TM); + explicit MSP430TargetAsmInfo(const TargetMachine &TM); }; } // namespace llvm diff --git a/lib/Target/Mips/MipsTargetAsmInfo.cpp b/lib/Target/Mips/MipsTargetAsmInfo.cpp index 4f1d2079269..4e7d1bdccc8 100644 --- a/lib/Target/Mips/MipsTargetAsmInfo.cpp +++ b/lib/Target/Mips/MipsTargetAsmInfo.cpp @@ -13,8 +13,6 @@ #include "MipsTargetAsmInfo.h" #include "MipsTargetMachine.h" -#include "llvm/GlobalVariable.h" - using namespace llvm; MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM) @@ -32,6 +30,9 @@ MipsTargetAsmInfo::MipsTargetAsmInfo(const MipsTargetMachine &TM) BSSSection = "\t.section\t.bss"; CStringSection = ".rodata.str"; + BSSSection_ = getUnnamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); + if (!TM.getSubtarget().hasABICall()) JumpTableDirective = "\t.word\t"; else diff --git a/lib/Target/Mips/MipsTargetAsmInfo.h b/lib/Target/Mips/MipsTargetAsmInfo.h index f70ca527fca..e3cfadc47ec 100644 --- a/lib/Target/Mips/MipsTargetAsmInfo.h +++ b/lib/Target/Mips/MipsTargetAsmInfo.h @@ -14,23 +14,14 @@ #ifndef MIPSTARGETASMINFO_H #define MIPSTARGETASMINFO_H -#include "MipsSubtarget.h" -#include "llvm/DerivedTypes.h" -#include "llvm/Target/TargetAsmInfo.h" -#include "llvm/Target/TargetOptions.h" #include "llvm/Target/ELFTargetAsmInfo.h" namespace llvm { - // Forward declaration. - class GlobalValue; class MipsTargetMachine; struct MipsTargetAsmInfo : public ELFTargetAsmInfo { explicit MipsTargetAsmInfo(const MipsTargetMachine &TM); - - private: - const MipsSubtarget *Subtarget; }; } // namespace llvm diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp index 0a5530e0dbd..c85dddf1bff 100644 --- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp +++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp @@ -50,13 +50,11 @@ PPCDarwinTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, } const char * -PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const -{ +PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const { const PPCSubtarget* Subtarget = &TM.getSubtarget(); if (Subtarget->getDarwinVers() > 9) return PrivateGlobalPrefix; - else - return ""; + return ""; } PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) : @@ -74,9 +72,8 @@ PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) : BSSSection = "\t.section\t\".sbss\",\"aw\",@nobits"; // PPC/Linux normally uses named section for BSS. - BSSSection_ = getNamedSection("\t.bss", - SectionFlags::Writable | SectionFlags::BSS, - /* Override */ true); + BSSSection_ = getNamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); // Debug Information AbsoluteDebugSectionOffsets = true; diff --git a/lib/Target/Sparc/SparcTargetAsmInfo.cpp b/lib/Target/Sparc/SparcTargetAsmInfo.cpp index 7b9f449436e..adec722805e 100644 --- a/lib/Target/Sparc/SparcTargetAsmInfo.cpp +++ b/lib/Target/Sparc/SparcTargetAsmInfo.cpp @@ -15,8 +15,8 @@ #include "llvm/ADT/SmallVector.h" using namespace llvm; -SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM): - ELFTargetAsmInfo(TM) { +SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM) + : ELFTargetAsmInfo(TM) { Data16bitsDirective = "\t.half\t"; Data32bitsDirective = "\t.word\t"; Data64bitsDirective = 0; // .xword is only supported by V9. @@ -27,9 +27,8 @@ SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM): CStringSection=".rodata.str"; // Sparc normally uses named section for BSS. - BSSSection_ = getNamedSection("\t.bss", - SectionFlags::Writable | SectionFlags::BSS, - /* Override */ true); + BSSSection_ = getNamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); } diff --git a/lib/Target/Sparc/SparcTargetAsmInfo.h b/lib/Target/Sparc/SparcTargetAsmInfo.h index 77cf4e9f4d6..cf65c1f914e 100644 --- a/lib/Target/Sparc/SparcTargetAsmInfo.h +++ b/lib/Target/Sparc/SparcTargetAsmInfo.h @@ -14,7 +14,6 @@ #ifndef SPARCTARGETASMINFO_H #define SPARCTARGETASMINFO_H -#include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/ELFTargetAsmInfo.h" namespace llvm { diff --git a/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp b/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp index 25048b81bc4..3040262b6e5 100644 --- a/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp +++ b/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp @@ -27,4 +27,7 @@ SystemZTargetAsmInfo::SystemZTargetAsmInfo(const SystemZTargetMachine &TM) PCSymbol = "."; NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\",@progbits"; + + BSSSection_ = getUnnamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); } diff --git a/lib/Target/SystemZ/SystemZTargetAsmInfo.h b/lib/Target/SystemZ/SystemZTargetAsmInfo.h index b0a7639eee9..98b50d49784 100644 --- a/lib/Target/SystemZ/SystemZTargetAsmInfo.h +++ b/lib/Target/SystemZ/SystemZTargetAsmInfo.h @@ -14,7 +14,6 @@ #ifndef SystemZTARGETASMINFO_H #define SystemZTARGETASMINFO_H -#include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/ELFTargetAsmInfo.h" namespace llvm { diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 0052075fea3..28d6324cbbc 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -389,12 +389,12 @@ TargetAsmInfo::getSectionForMergeableConstant(SectionKind Kind) const { } -const Section *TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags, - bool Override) const { +const Section *TargetAsmInfo::getNamedSection(const char *Name, + unsigned Flags) const { Section &S = Sections[Name]; // This is newly-created section, set it up properly. - if (S.Flags == SectionFlags::Invalid || Override) { + if (S.Name.empty()) { S.Flags = Flags | SectionFlags::Named; S.Name = Name; } @@ -403,12 +403,11 @@ const Section *TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags, } const Section* -TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags, - bool Override) const { +TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags) const { Section& S = Sections[Directive]; // This is newly-created section, set it up properly. - if (S.Flags == SectionFlags::Invalid || Override) { + if (S.Name.empty()) { S.Flags = Flags & ~SectionFlags::Named; S.Name = Directive; } diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index b584cb49c3c..802d04a6b3c 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -128,6 +128,9 @@ X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM): // Set up DWARF directives HasLEB128 = true; // Target asm supports leb128 directives (little-endian) + BSSSection_ = getUnnamedSection("\t.bss", + SectionFlags::Writable | SectionFlags::BSS); + // Debug Information AbsoluteDebugSectionOffsets = true; SupportsDebugInformation = true;