[llvm-commits] [llvm] r77184 - in /llvm/trunk: include/llvm/Target/ lib/CodeGen/ lib/CodeGen/AsmPrinter/ lib/Target/ lib/Target/ARM/ lib/Target/ARM/AsmPrinter/ lib/Target/CellSPU/ lib/Target/MSP430/ lib/Target/Mips/ lib/Target/PIC16/ lib/Target/P
Rafael Espindola
espindola at google.com
Thu Jul 30 10:07:24 PDT 2009
This caused http://llvm.org/PR4650
2009/7/26 Chris Lattner <sabre at nondot.org>:
> Author: lattner
> Date: Mon Jul 27 00:32:16 2009
> New Revision: 77184
>
> URL: http://llvm.org/viewvc/llvm-project?rev=77184&view=rev
> Log:
> Eliminate SectionFlags, just embed a SectionKind into Section
> instead and drive things based off of that.
>
> Modified:
> llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h
> llvm/trunk/include/llvm/Target/TargetAsmInfo.h
> llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> llvm/trunk/lib/CodeGen/ELFWriter.cpp
> llvm/trunk/lib/CodeGen/ELFWriter.h
> llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
> llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
> llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp
> llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
> llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp
> llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp
> llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp
> llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp
> llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
> llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
> llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
> llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp
> llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h
> llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp
> llvm/trunk/lib/Target/TargetAsmInfo.cpp
> llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
> llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
> llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
> llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp
>
> Modified: llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h Mon Jul 27 00:32:16 2009
> @@ -31,19 +31,16 @@
> virtual const Section *
> getSectionForMergeableConstant(SectionKind Kind) const;
>
> - /// getFlagsForNamedSection - If this target wants to be able to infer
> - /// section flags based on the name of the section specified for a global
> - /// variable, it can implement this. This is used on ELF systems so that
> - /// ".tbss" gets the TLS bit set etc.
> - virtual unsigned getFlagsForNamedSection(const char *Section) const;
> + virtual SectionKind::Kind getKindForNamedSection(const char *Section,
> + SectionKind::Kind K) const;
> + void getSectionFlagsAsString(SectionKind Kind,
> + SmallVectorImpl<char> &Str) const;
>
> const char *getSectionPrefixForUniqueGlobal(SectionKind Kind) const;
>
> virtual const Section* SelectSectionForGlobal(const GlobalValue *GV,
> SectionKind Kind) const;
> - virtual void getSectionFlags(unsigned Flags,
> - SmallVectorImpl<char> &Str) const;
> -
> +
> const Section *DataRelSection;
> const Section *DataRelLocalSection;
> const Section *DataRelROSection;
>
> Modified: llvm/trunk/include/llvm/Target/TargetAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Target/TargetAsmInfo.h (original)
> +++ llvm/trunk/include/llvm/Target/TargetAsmInfo.h Mon Jul 27 00:32:16 2009
> @@ -22,6 +22,9 @@
>
> namespace llvm {
> template <typename T> class SmallVectorImpl;
> + class TargetMachine;
> + class GlobalValue;
> + class Mangler;
>
> // DWARF encoding query type
> namespace DwarfEncoding {
> @@ -39,8 +42,12 @@
> ///
> /// The comments below describe these as if they were an inheritance hierarchy
> /// in order to explain the predicates below.
> - struct SectionKind {
> + class SectionKind {
> + public:
> enum Kind {
> + /// Metadata - Debug info sections or other metadata.
> + Metadata,
> +
> /// Text - Text section, used for functions and other executable code.
> Text,
>
> @@ -140,6 +147,8 @@
> bool isWeak() const { return Weak; }
> bool hasExplicitSection() const { return ExplicitSection; }
>
> +
> + bool isMetadata() const { return K == Metadata; }
> bool isText() const { return K == Text; }
>
> bool isReadOnly() const {
> @@ -191,7 +200,7 @@
> return K == ReadOnlyWithRelLocal;
> }
>
> - static SectionKind get(Kind K, bool isWeak,
> + static SectionKind get(Kind K, bool isWeak = false,
> bool hasExplicitSection = false) {
> SectionKind Res;
> Res.K = K;
> @@ -201,65 +210,18 @@
> }
> };
>
> - namespace SectionFlags {
> - const unsigned Invalid = -1U;
> - const unsigned None = 0;
> - const unsigned Code = 1 << 0; ///< Section contains code
> - const unsigned Writable = 1 << 1; ///< Section is writeable
> - const unsigned BSS = 1 << 2; ///< Section contains only zeroes
> - const unsigned Mergeable = 1 << 3; ///< Section contains mergeable data
> - const unsigned Strings = 1 << 4; ///< Section contains C-type strings
> - const unsigned TLS = 1 << 5; ///< Section contains thread-local data
> - const unsigned Debug = 1 << 6; ///< Section contains debug data
> - const unsigned Linkonce = 1 << 7; ///< Section is linkonce
> - const unsigned TypeFlags = 0xFF;
> - // Some gap for future flags
> -
> - /// Named - True if this section should be printed with ".section <name>",
> - /// false if the section name is something like ".const".
> - const unsigned Named = 1 << 23; ///< Section is named
> - const unsigned EntitySize = 0xFF << 24; ///< Entity size for mergeable stuff
> -
> - static inline unsigned getEntitySize(unsigned Flags) {
> - return (Flags >> 24) & 0xFF;
> - }
> -
> - // FIXME: Why does this return a value?
> - static inline unsigned setEntitySize(unsigned Flags, unsigned Size) {
> - return (Flags & ~EntitySize) | ((Size & 0xFF) << 24);
> - }
> -
> - struct KeyInfo {
> - static inline unsigned getEmptyKey() { return Invalid; }
> - static inline unsigned getTombstoneKey() { return Invalid - 1; }
> - static unsigned getHashValue(const unsigned &Key) { return Key; }
> - static bool isEqual(unsigned LHS, unsigned RHS) { return LHS == RHS; }
> - static bool isPod() { return true; }
> - };
> - }
> -
> - class TargetMachine;
> - class CallInst;
> - class GlobalValue;
> - class Type;
> - class Mangler;
> -
> class Section {
> friend class TargetAsmInfo;
> friend class StringMapEntry<Section>;
> friend class StringMap<Section>;
>
> std::string Name;
> - unsigned Flags;
> - explicit Section(unsigned F = SectionFlags::Invalid) : Flags(F) { }
> + SectionKind Kind;
> + explicit Section() { }
>
> public:
> - unsigned getEntitySize() const { return (Flags >> 24) & 0xFF; }
> -
> const std::string &getName() const { return Name; }
> - unsigned getFlags() const { return Flags; }
> -
> - bool hasFlag(unsigned F) const { return (Flags & F) != 0; }
> + SectionKind getKind() const { return Kind; }
> };
>
> /// TargetAsmInfo - This class is intended to be used as a base class for asm
> @@ -678,9 +640,9 @@
> virtual ~TargetAsmInfo();
>
> const Section* getNamedSection(const char *Name,
> - unsigned Flags = SectionFlags::None) const;
> + SectionKind::Kind K) const;
> const Section* getUnnamedSection(const char *Directive,
> - unsigned Flags = SectionFlags::None) const;
> + SectionKind::Kind K) const;
>
> /// Measure the specified inline asm to determine an approximation of its
> /// length.
> @@ -717,12 +679,13 @@
> return 0;
> }
>
> - /// getFlagsForNamedSection - If this target wants to be able to infer
> + /// getKindForNamedSection - If this target wants to be able to override
> /// section flags based on the name of the section specified for a global
> /// variable, it can implement this. This is used on ELF systems so that
> /// ".tbss" gets the TLS bit set etc.
> - virtual unsigned getFlagsForNamedSection(const char *Section) const {
> - return 0;
> + virtual SectionKind::Kind getKindForNamedSection(const char *Section,
> + SectionKind::Kind K) const{
> + return K;
> }
>
> /// SectionForGlobal - This method computes the appropriate section to emit
> @@ -741,10 +704,11 @@
> return 0;
> }
>
> - /// Turn the specified flags into a string that can be printed to the
> - /// assembly file.
> - virtual void getSectionFlags(unsigned Flags,
> - SmallVectorImpl<char> &Str) const {
> + /// getSectionFlagsAsString - Turn the flags in the specified SectionKind
> + /// into a string that can be printed to the assembly file after the
> + /// ".section foo" part of a section directive.
> + virtual void getSectionFlagsAsString(SectionKind Kind,
> + SmallVectorImpl<char> &Str) const {
> }
>
> // FIXME: Eliminate this.
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/AsmPrinter.cpp Mon Jul 27 00:32:16 2009
> @@ -117,8 +117,8 @@
>
> /// SwitchToSection - Switch to the specified section of the executable if we
> /// are not already in it!
> -void AsmPrinter::SwitchToSection(const Section* NS) {
> - const std::string& NewSection = NS->getName();
> +void AsmPrinter::SwitchToSection(const Section *NS) {
> + const std::string &NewSection = NS->getName();
>
> // If we're already in this section, we're done.
> if (CurrentSection == NewSection) return;
> @@ -135,20 +135,20 @@
> // If section is named we need to switch into it via special '.section'
> // directive and also append funky flags. Otherwise - section name is just
> // some magic assembler directive.
> - if (NS->hasFlag(SectionFlags::Named)) {
> - O << TAI->getSwitchToSectionDirective()
> - << CurrentSection;
> -
> + if (NS->getKind().hasExplicitSection()) {
> SmallString<32> FlagsStr;
> - TAI->getSectionFlags(NS->getFlags(), FlagsStr);
> - O << FlagsStr.c_str();
> + TAI->getSectionFlagsAsString(NS->getKind(), FlagsStr);
> +
> + O << TAI->getSwitchToSectionDirective()
> + << CurrentSection
> + << FlagsStr.c_str();
> } else {
> O << CurrentSection;
> }
> O << TAI->getDataSectionStartSuffix() << '\n';
> }
>
> - IsInTextSection = (NS->getFlags() & SectionFlags::Code);
> + IsInTextSection = NS->getKind().isText();
> }
>
> void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
> @@ -404,7 +404,7 @@
> bool JTInDiffSection = false;
> if ((IsPic && !(LoweringInfo && LoweringInfo->usesGlobalOffsetTable())) ||
> !JumpTableDataSection ||
> - FuncSection->hasFlag(SectionFlags::Linkonce)) {
> + FuncSection->getKind().isWeak()) {
> // In PIC mode, we need to emit the jump table to the same section as the
> // function body itself, otherwise the label differences won't make sense.
> // We should also do if the section name is NULL or function is declared in
>
> Modified: llvm/trunk/lib/CodeGen/ELFWriter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/ELFWriter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/ELFWriter.cpp Mon Jul 27 00:32:16 2009
> @@ -228,18 +228,18 @@
>
> // getElfSectionFlags - Get the ELF Section Header flags based
> // on the flags defined in ELFTargetAsmInfo.
> -unsigned ELFWriter::getElfSectionFlags(unsigned Flags) {
> +unsigned ELFWriter::getElfSectionFlags(SectionKind Kind) {
> unsigned ElfSectionFlags = ELFSection::SHF_ALLOC;
>
> - if (Flags & SectionFlags::Code)
> + if (Kind.isText())
> ElfSectionFlags |= ELFSection::SHF_EXECINSTR;
> - if (Flags & SectionFlags::Writable)
> + if (Kind.isWriteable())
> ElfSectionFlags |= ELFSection::SHF_WRITE;
> - if (Flags & SectionFlags::Mergeable)
> + if (Kind.isMergeableConst())
> ElfSectionFlags |= ELFSection::SHF_MERGE;
> - if (Flags & SectionFlags::TLS)
> + if (Kind.isThreadLocal())
> ElfSectionFlags |= ELFSection::SHF_TLS;
> - if (Flags & SectionFlags::Strings)
> + if (Kind.isMergeableCString())
> ElfSectionFlags |= ELFSection::SHF_STRINGS;
>
> return ElfSectionFlags;
> @@ -293,7 +293,7 @@
>
> // Get ELF section from TAI
> const Section *S = TAI->SectionForGlobal(GV);
> - unsigned SectionFlags = getElfSectionFlags(S->getFlags());
> + unsigned SectionFlags = getElfSectionFlags(S->getKind());
>
> // The symbol align should update the section alignment if needed
> const TargetData *TD = TM.getTargetData();
>
> Modified: llvm/trunk/lib/CodeGen/ELFWriter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/ELFWriter.h?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/ELFWriter.h (original)
> +++ llvm/trunk/lib/CodeGen/ELFWriter.h Mon Jul 27 00:32:16 2009
> @@ -34,6 +34,7 @@
> class TargetAsmInfo;
> class TargetELFWriterInfo;
> class raw_ostream;
> + class SectionKind;
>
> typedef std::vector<ELFSym*>::iterator ELFSymIter;
> typedef std::vector<ELFSection*>::iterator ELFSectionIter;
> @@ -209,7 +210,7 @@
> unsigned getGlobalELFBinding(const GlobalValue *GV);
> unsigned getGlobalELFType(const GlobalValue *GV);
> unsigned getGlobalELFVisibility(const GlobalValue *GV);
> - unsigned getElfSectionFlags(unsigned Flags);
> + unsigned getElfSectionFlags(SectionKind Kind);
>
> // setGlobalSymLookup - Set global value 'GV' with 'Index' in the lookup map
> void setGlobalSymLookup(const GlobalValue *GV, unsigned Index) {
>
> Modified: llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -59,8 +59,7 @@
> ARMTargetAsmInfo<ELFTargetAsmInfo>(TM) {
> Subtarget = &TM.getSubtarget<ARMSubtarget>();
>
> - BSSSection_ = getUnnamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
>
> NeedsSet = false;
> HasLEB128 = true;
>
> Modified: llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp Mon Jul 27 00:32:16 2009
> @@ -1130,9 +1130,10 @@
> const Section *TheSection = TAI->SectionForGlobal(GVar);
> SwitchToSection(TheSection);
>
> + // FIXME: get this stuff from section kind flags.
> if (C->isNullValue() && !GVar->hasSection() && !GVar->isThreadLocal() &&
> // Don't put things that should go in the cstring section into "comm".
> - !TheSection->hasFlag(SectionFlags::Strings)) {
> + !TheSection->getKind().isMergeableCString()) {
> if (GVar->hasExternalLinkage()) {
> if (const char *Directive = TAI->getZeroFillDirective()) {
> O << "\t.globl\t" << name << "\n";
>
> Modified: llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/CellSPU/SPUTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -35,8 +35,7 @@
>
> // BSS section needs to be emitted as ".section"
> BSSSection = "\t.section\t.bss";
> - BSSSection_ = getUnnamedSection("\t.section\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getUnnamedSection("\t.section\t.bss", SectionKind::BSS);
>
> SupportsDebugInformation = true;
> NeedsSet = true;
>
> Modified: llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/DarwinTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -29,28 +29,29 @@
> : TargetAsmInfo(TM) {
>
> CStringSection_ = getUnnamedSection("\t.cstring",
> - SectionFlags::Mergeable |SectionFlags::Strings);
> + SectionKind::MergeableCString);
> FourByteConstantSection = getUnnamedSection("\t.literal4\n",
> - SectionFlags::Mergeable);
> + SectionKind::MergeableConst4);
> EightByteConstantSection = getUnnamedSection("\t.literal8\n",
> - SectionFlags::Mergeable);
> + SectionKind::MergeableConst8);
>
> // Note: 16-byte constant section is subtarget specific and should be provided
> // there, if needed.
> SixteenByteConstantSection = 0;
>
> - ReadOnlySection = getUnnamedSection("\t.const", SectionFlags::None);
> + ReadOnlySection = getUnnamedSection("\t.const", SectionKind::ReadOnly);
>
> TextCoalSection =
> getNamedSection("\t__TEXT,__textcoal_nt,coalesced,pure_instructions",
> - SectionFlags::Code);
> + SectionKind::Text);
> ConstTextCoalSection = getNamedSection("\t__TEXT,__const_coal,coalesced",
> - SectionFlags::None);
> + SectionKind::Text);
> ConstDataCoalSection = getNamedSection("\t__DATA,__const_coal,coalesced",
> - SectionFlags::None);
> - ConstDataSection = getUnnamedSection("\t.const_data", SectionFlags::None);
> + SectionKind::Text);
> + ConstDataSection = getUnnamedSection("\t.const_data",
> + SectionKind::ReadOnlyWithRel);
> DataCoalSection = getNamedSection("\t__DATA,__datacoal_nt,coalesced",
> - SectionFlags::Writable);
> + SectionKind::DataRel);
>
>
> // Common settings for all Darwin targets.
>
> Modified: llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ELFTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -27,28 +27,24 @@
> ELFTargetAsmInfo::ELFTargetAsmInfo(const TargetMachine &TM)
> : TargetAsmInfo(TM) {
>
> - BSSSection_ = getUnnamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> - ReadOnlySection = getNamedSection("\t.rodata", SectionFlags::None);
> - TLSDataSection = getNamedSection("\t.tdata",
> - SectionFlags::Writable | SectionFlags::TLS);
> - TLSBSSSection = getNamedSection("\t.tbss",
> - SectionFlags::Writable | SectionFlags::TLS | SectionFlags::BSS);
> + ReadOnlySection = getNamedSection("\t.rodata", SectionKind::ReadOnly);
> + TLSDataSection = getNamedSection("\t.tdata", SectionKind::ThreadData);
> + TLSBSSSection = getNamedSection("\t.tbss", SectionKind::ThreadBSS);
>
> - DataRelSection = getNamedSection("\t.data.rel", SectionFlags::Writable);
> + DataRelSection = getNamedSection("\t.data.rel", SectionKind::DataRel);
> DataRelLocalSection = getNamedSection("\t.data.rel.local",
> - SectionFlags::Writable);
> + SectionKind::DataRelLocal);
> DataRelROSection = getNamedSection("\t.data.rel.ro",
> - SectionFlags::Writable);
> + SectionKind::ReadOnlyWithRel);
> DataRelROLocalSection = getNamedSection("\t.data.rel.ro.local",
> - SectionFlags::Writable);
> + SectionKind::ReadOnlyWithRelLocal);
>
> MergeableConst4Section = getNamedSection(".rodata.cst4",
> - SectionFlags::setEntitySize(SectionFlags::Mergeable, 4));
> + SectionKind::MergeableConst4);
> MergeableConst8Section = getNamedSection(".rodata.cst8",
> - SectionFlags::setEntitySize(SectionFlags::Mergeable, 8));
> + SectionKind::MergeableConst8);
> MergeableConst16Section = getNamedSection(".rodata.cst16",
> - SectionFlags::setEntitySize(SectionFlags::Mergeable, 16));
> + SectionKind::MergeableConst16);
> }
>
>
> @@ -98,28 +94,30 @@
> /// getFlagsForNamedSection - If this target wants to be able to infer
> /// section flags based on the name of the section specified for a global
> /// variable, it can implement this.
> -unsigned ELFTargetAsmInfo::getFlagsForNamedSection(const char *Name) const {
> - unsigned Flags = 0;
> - if (Name[0] != '.') return 0;
> +SectionKind::Kind ELFTargetAsmInfo::getKindForNamedSection(const char *Name,
> + SectionKind::Kind K) const {
> + if (Name[0] != '.') return K;
>
> // Some lame default implementation based on some magic section names.
> if (strncmp(Name, ".gnu.linkonce.b.", 16) == 0 ||
> strncmp(Name, ".llvm.linkonce.b.", 17) == 0 ||
> strncmp(Name, ".gnu.linkonce.sb.", 17) == 0 ||
> strncmp(Name, ".llvm.linkonce.sb.", 18) == 0)
> - Flags |= SectionFlags::BSS;
> - else if (strcmp(Name, ".tdata") == 0 ||
> - strncmp(Name, ".tdata.", 7) == 0 ||
> - strncmp(Name, ".gnu.linkonce.td.", 17) == 0 ||
> - strncmp(Name, ".llvm.linkonce.td.", 18) == 0)
> - Flags |= SectionFlags::TLS;
> - else if (strcmp(Name, ".tbss") == 0 ||
> - strncmp(Name, ".tbss.", 6) == 0 ||
> - strncmp(Name, ".gnu.linkonce.tb.", 17) == 0 ||
> - strncmp(Name, ".llvm.linkonce.tb.", 18) == 0)
> - Flags |= SectionFlags::BSS | SectionFlags::TLS;
> + return SectionKind::BSS;
>
> - return Flags;
> + if (strcmp(Name, ".tdata") == 0 ||
> + strncmp(Name, ".tdata.", 7) == 0 ||
> + strncmp(Name, ".gnu.linkonce.td.", 17) == 0 ||
> + strncmp(Name, ".llvm.linkonce.td.", 18) == 0)
> + return SectionKind::ThreadData;
> +
> + if (strcmp(Name, ".tbss") == 0 ||
> + strncmp(Name, ".tbss.", 6) == 0 ||
> + strncmp(Name, ".gnu.linkonce.tb.", 17) == 0 ||
> + strncmp(Name, ".llvm.linkonce.tb.", 18) == 0)
> + return SectionKind::ThreadBSS;
> +
> + return K;
> }
>
> const char *
> @@ -152,37 +150,36 @@
> if (Size <= 16) {
> assert(getCStringSection() && "Should have string section prefix");
>
> - // We also need alignment here
> + // We also need alignment here.
> + // FIXME: this is getting the alignment of the character, not the alignment
> + // of the string!!
> unsigned Align = TD->getPrefTypeAlignment(Ty);
> if (Align < Size)
> Align = Size;
>
> std::string Name = getCStringSection() + utostr(Size) + '.' + utostr(Align);
> - unsigned Flags = SectionFlags::setEntitySize(SectionFlags::Mergeable |
> - SectionFlags::Strings,
> - Size);
> - return getNamedSection(Name.c_str(), Flags);
> + return getNamedSection(Name.c_str(), SectionKind::MergeableCString);
> }
>
> return getReadOnlySection();
> }
>
> -void ELFTargetAsmInfo::getSectionFlags(unsigned Flags,
> - SmallVectorImpl<char> &Str) const {
> +void ELFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind,
> + SmallVectorImpl<char> &Str) const {
> Str.push_back(',');
> Str.push_back('"');
>
> - if (!(Flags & SectionFlags::Debug))
> + if (!Kind.isMetadata())
> Str.push_back('a');
> - if (Flags & SectionFlags::Code)
> + if (Kind.isText())
> Str.push_back('x');
> - if (Flags & SectionFlags::Writable)
> + if (Kind.isWriteable())
> Str.push_back('w');
> - if (Flags & SectionFlags::Mergeable)
> + if (Kind.isMergeableConst() || Kind.isMergeableCString())
> Str.push_back('M');
> - if (Flags & SectionFlags::Strings)
> + if (Kind.isMergeableCString())
> Str.push_back('S');
> - if (Flags & SectionFlags::TLS)
> + if (Kind.isThreadLocal())
> Str.push_back('T');
>
> Str.push_back('"');
> @@ -195,16 +192,27 @@
> Str.push_back('@');
>
> const char *KindStr;
> - if (Flags & SectionFlags::BSS)
> + if (Kind.isBSS())
> KindStr = "nobits";
> else
> KindStr = "progbits";
>
> Str.append(KindStr, KindStr+strlen(KindStr));
>
> - if (unsigned entitySize = SectionFlags::getEntitySize(Flags)) {
> + if (Kind.isMergeableCString()) {
> + // TODO: Eventually handle multiple byte character strings. For now, all
> + // mergable C strings are single byte.
> + Str.push_back(',');
> + Str.push_back('1');
> + } else if (Kind.isMergeableConst4()) {
> + Str.push_back(',');
> + Str.push_back('4');
> + } else if (Kind.isMergeableConst8()) {
> + Str.push_back(',');
> + Str.push_back('8');
> + } else if (Kind.isMergeableConst16()) {
> Str.push_back(',');
> - std::string Size = utostr(entitySize);
> - Str.append(Size.begin(), Size.end());
> + Str.push_back('1');
> + Str.push_back('6');
> }
> }
>
> Modified: llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -18,6 +18,5 @@
> : ELFTargetAsmInfo(TM) {
> AlignmentIsInBytes = false;
>
> - BSSSection_ = getUnnamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
> }
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -30,8 +30,7 @@
> BSSSection = "\t.section\t.bss";
> CStringSection = ".rodata.str";
>
> - BSSSection_ = getUnnamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
>
> if (!TM.getSubtarget<MipsSubtarget>().hasABICall())
> JumpTableDirective = "\t.word\t";
>
> Modified: llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/PIC16/PIC16AsmPrinter.cpp Mon Jul 27 00:32:16 2009
> @@ -61,8 +61,8 @@
> // Now emit the instructions of function in its code section.
> const char *codeSection = PAN::getCodeSectionName(CurrentFnName).c_str();
>
> - const Section *fCodeSection = TAI->getNamedSection(codeSection,
> - SectionFlags::Code);
> + const Section *fCodeSection =
> + TAI->getNamedSection(codeSection, SectionKind::Text);
> // Start the Code Section.
> O << "\n";
> SwitchToSection(fCodeSection);
> @@ -291,8 +291,8 @@
> O << "\n";
> const char *SectionName = PAN::getFrameSectionName(CurrentFnName).c_str();
>
> - const Section *fPDataSection = TAI->getNamedSection(SectionName,
> - SectionFlags::Writable);
> + const Section *fPDataSection =
> + TAI->getNamedSection(SectionName, SectionKind::DataRel);
> SwitchToSection(fPDataSection);
>
> // Emit function frame label
>
> Modified: llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PIC16/PIC16TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -37,18 +37,21 @@
> ZeroDirective = NULL;
> AsciiDirective = " dt ";
> AscizDirective = NULL;
> - BSSSection_ = getNamedSection("udata.# UDATA",
> - SectionFlags::Writable | SectionFlags::BSS);
> - ReadOnlySection = getNamedSection("romdata.# ROMDATA", SectionFlags::None);
> - DataSection = getNamedSection("idata.# IDATA", SectionFlags::Writable);
> + BSSSection_ = getNamedSection("udata.# UDATA", SectionKind::BSS);
> + ReadOnlySection = getNamedSection("romdata.# ROMDATA", SectionKind::ReadOnly);
> + DataSection = getNamedSection("idata.# IDATA", SectionKind::DataRel);
> SwitchToSectionDirective = "";
> // Need because otherwise a .text symbol is emitted by DwarfWriter
> // in BeginModule, and gpasm cribbs for that .text symbol.
> - TextSection = getUnnamedSection("", SectionFlags::Code);
> + TextSection = getUnnamedSection("", SectionKind::Text);
> PIC16Section *ROSection = new PIC16Section(getReadOnlySection());
> ROSections.push_back(ROSection);
> - ExternalVarDecls = new PIC16Section(getNamedSection("ExternalVarDecls"));
> - ExternalVarDefs = new PIC16Section(getNamedSection("ExternalVarDefs"));
> +
> + // FIXME: I don't know what the classification of these sections really is.
> + ExternalVarDecls = new PIC16Section(getNamedSection("ExternalVarDecls",
> + SectionKind::Metadata));
> + ExternalVarDefs = new PIC16Section(getNamedSection("ExternalVarDefs",
> + SectionKind::Metadata));
> // Set it to false because we weed to generate c file name and not bc file
> // name.
> HasSingleParameterDotFile = false;
> @@ -95,7 +98,9 @@
> // No BSS section spacious enough was found. Crate a new one.
> if (!FoundBSS) {
> std::string name = PAN::getUdataSectionName(BSSSections.size());
> - const Section *NewSection = getNamedSection(name.c_str());
> + const Section *NewSection = getNamedSection(name.c_str(),
> + // FIXME.
> + SectionKind::Metadata);
>
> FoundBSS = new PIC16Section(NewSection);
>
> @@ -135,7 +140,9 @@
> // No IDATA section spacious enough was found. Crate a new one.
> if (!FoundIDATA) {
> std::string name = PAN::getIdataSectionName(IDATASections.size());
> - const Section *NewSection = getNamedSection(name.c_str());
> + const Section *NewSection = getNamedSection(name.c_str(),
> + // FIXME.
> + SectionKind::Metadata);
>
> FoundIDATA = new PIC16Section(NewSection);
>
> @@ -168,7 +175,9 @@
>
> // No Auto section was found. Crate a new one.
> if (!FoundAutoSec) {
> - const Section *NewSection = getNamedSection(name.c_str());
> + const Section *NewSection = getNamedSection(name.c_str(),
> + // FIXME.
> + SectionKind::Metadata);
>
> FoundAutoSec = new PIC16Section(NewSection);
>
> @@ -316,7 +325,7 @@
>
> PIC16Section *NewBSS = FoundBSS;
> if (NewBSS == NULL) {
> - const Section *NewSection = getNamedSection(Name.c_str());
> + const Section *NewSection = getNamedSection(Name.c_str(), SectionKind::BSS);
> NewBSS = new PIC16Section(NewSection);
> BSSSections.push_back(NewBSS);
> }
> @@ -367,7 +376,9 @@
>
> PIC16Section *NewIDATASec = FoundIDATASec;
> if (NewIDATASec == NULL) {
> - const Section *NewSection = getNamedSection(Name.c_str());
> + const Section *NewSection = getNamedSection(Name.c_str(),
> + // FIXME:
> + SectionKind::Metadata);
> NewIDATASec = new PIC16Section(NewSection);
> IDATASections.push_back(NewIDATASec);
> }
> @@ -405,7 +416,8 @@
>
> PIC16Section *NewRomSec = FoundROSec;
> if (NewRomSec == NULL) {
> - const Section *NewSection = getNamedSection(Name.c_str());
> + const Section *NewSection = getNamedSection(Name.c_str(),
> + SectionKind::ReadOnly);
> NewRomSec = new PIC16Section(NewSection);
> ROSections.push_back(NewRomSec);
> }
>
> Modified: llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp Mon Jul 27 00:32:16 2009
> @@ -899,7 +899,7 @@
> (GVar->hasLocalLinkage() || GVar->hasExternalLinkage() ||
> GVar->isWeakForLinker()) &&
> // Don't put things that should go in the cstring section into "comm".
> - !TheSection->hasFlag(SectionFlags::Strings)) {
> + !TheSection->getKind().isMergeableCString()) {
> if (Size == 0) Size = 1; // .comm Foo, 0 is undefined, avoid it.
>
> if (GVar->hasExternalLinkage()) {
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -49,8 +49,7 @@
> return DW_EH_PE_absptr;
> }
>
> -const char *
> -PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const {
> +const char *PPCDarwinTargetAsmInfo::getEHGlobalPrefix() const {
> const PPCSubtarget* Subtarget = &TM.getSubtarget<PPCSubtarget>();
> if (Subtarget->getDarwinVers() > 9)
> return PrivateGlobalPrefix;
> @@ -72,8 +71,7 @@
> BSSSection = "\t.section\t\".sbss\",\"aw\", at nobits";
>
> // PPC/Linux normally uses named section for BSS.
> - BSSSection_ = getNamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getNamedSection("\t.bss", SectionKind::BSS);
>
> // Debug Information
> AbsoluteDebugSectionOffsets = true;
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -27,25 +27,24 @@
> CStringSection=".rodata.str";
>
> // Sparc normally uses named section for BSS.
> - BSSSection_ = getNamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getNamedSection("\t.bss", SectionKind::BSS);
> }
>
>
> -void SparcELFTargetAsmInfo::getSectionFlags(unsigned Flags,
> +void SparcELFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind,
> SmallVectorImpl<char> &Str) const {
> - if (Flags & SectionFlags::Mergeable)
> - return ELFTargetAsmInfo::getSectionFlags(Flags, Str);
> + if (Kind.isMergeableConst() || Kind.isMergeableCString())
> + return ELFTargetAsmInfo::getSectionFlagsAsString(Kind, Str);
>
> // FIXME: Inefficient.
> std::string Res;
> - if (!(Flags & SectionFlags::Debug))
> + if (!Kind.isMetadata())
> Res += ",#alloc";
> - if (Flags & SectionFlags::Code)
> + if (Kind.isText())
> Res += ",#execinstr";
> - if (Flags & SectionFlags::Writable)
> + if (Kind.isWriteable())
> Res += ",#write";
> - if (Flags & SectionFlags::TLS)
> + if (Kind.isThreadLocal())
> Res += ",#tls";
>
> Str.append(Res.begin(), Res.end());
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcTargetAsmInfo.h Mon Jul 27 00:32:16 2009
> @@ -24,8 +24,8 @@
> struct SparcELFTargetAsmInfo : public ELFTargetAsmInfo {
> explicit SparcELFTargetAsmInfo(const TargetMachine &TM);
>
> - virtual void getSectionFlags(unsigned Flags,
> - SmallVectorImpl<char> &Str) const;
> + virtual void getSectionFlagsAsString(SectionKind Kind,
> + SmallVectorImpl<char> &Str) const;
>
> };
>
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -28,6 +28,5 @@
>
> NonexecutableStackDirective = "\t.section\t.note.GNU-stack,\"\", at progbits";
>
> - BSSSection_ = getUnnamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
> }
>
> Modified: llvm/trunk/lib/Target/TargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/TargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -122,8 +122,8 @@
> DwarfEHFrameSection = ".eh_frame";
> DwarfExceptionSection = ".gcc_except_table";
> AsmTransCBE = 0;
> - TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
> - DataSection = getUnnamedSection("\t.data", SectionFlags::Writable);
> + TextSection = getUnnamedSection("\t.text", SectionKind::Text);
> + DataSection = getUnnamedSection("\t.data", SectionKind::DataRel);
> }
>
> TargetAsmInfo::~TargetAsmInfo() {
> @@ -199,23 +199,6 @@
> return false;
> }
>
> -static unsigned SectionFlagsForGlobal(SectionKind Kind) {
> - // Decode flags from global and section kind.
> - unsigned Flags = SectionFlags::None;
> - if (Kind.isWeak())
> - Flags |= SectionFlags::Linkonce;
> - if (Kind.isBSS() || Kind.isThreadBSS())
> - Flags |= SectionFlags::BSS;
> - if (Kind.isThreadLocal())
> - Flags |= SectionFlags::TLS;
> - if (Kind.isText())
> - Flags |= SectionFlags::Code;
> - if (Kind.isWriteable())
> - Flags |= SectionFlags::Writable;
> -
> - return Flags;
> -}
> -
> static SectionKind::Kind SectionKindForGlobal(const GlobalValue *GV,
> const TargetMachine &TM) {
> Reloc::Model ReloModel = TM.getRelocationModel();
> @@ -326,29 +309,21 @@
> if (const Section *TS = getSpecialCasedSectionGlobals(GV, Kind))
> return TS;
>
> - // Honour section already set, if any.
> - unsigned Flags = SectionFlagsForGlobal(Kind);
> -
> - // This is an explicitly named section.
> - Flags |= SectionFlags::Named;
> -
> // If the target has magic semantics for certain section names, make sure to
> // pick up the flags. This allows the user to write things with attribute
> // section and still get the appropriate section flags printed.
> - Flags |= getFlagsForNamedSection(GV->getSection().c_str());
> + GVKind = getKindForNamedSection(GV->getSection().c_str(), GVKind);
>
> - return getNamedSection(GV->getSection().c_str(), Flags);
> + return getNamedSection(GV->getSection().c_str(), GVKind);
> }
>
> // If this global is linkonce/weak and the target handles this by emitting it
> // into a 'uniqued' section name, create and return the section now.
> if (Kind.isWeak()) {
> if (const char *Prefix = getSectionPrefixForUniqueGlobal(Kind)) {
> - unsigned Flags = SectionFlagsForGlobal(Kind);
> -
> // FIXME: Use mangler interface (PR4584).
> std::string Name = Prefix+GV->getNameStr();
> - return getNamedSection(Name.c_str(), Flags);
> + return getNamedSection(Name.c_str(), GVKind);
> }
> }
>
> @@ -390,12 +365,12 @@
>
>
> const Section *TargetAsmInfo::getNamedSection(const char *Name,
> - unsigned Flags) const {
> + SectionKind::Kind Kind) const {
> Section &S = Sections[Name];
>
> // This is newly-created section, set it up properly.
> if (S.Name.empty()) {
> - S.Flags = Flags | SectionFlags::Named;
> + S.Kind = SectionKind::get(Kind, false /*weak*/, true /*Named*/);
> S.Name = Name;
> }
>
> @@ -403,12 +378,13 @@
> }
>
> const Section*
> -TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags) const {
> +TargetAsmInfo::getUnnamedSection(const char *Directive,
> + SectionKind::Kind Kind) const {
> Section& S = Sections[Directive];
>
> // This is newly-created section, set it up properly.
> if (S.Name.empty()) {
> - S.Flags = Flags & ~SectionFlags::Named;
> + S.Kind = SectionKind::get(Kind, false /*weak*/, false /*Named*/);
> S.Name = Directive;
> }
>
>
> Modified: llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp Mon Jul 27 00:32:16 2009
> @@ -799,7 +799,7 @@
>
> if (C->isNullValue() && !GVar->hasSection() &&
> // Don't put things that should go in the cstring section into "comm".
> - !TheSection->hasFlag(SectionFlags::Strings)) {
> + !TheSection->getKind().isMergeableCString()) {
> if (GVar->hasExternalLinkage()) {
> if (const char *Directive = TAI->getZeroFillDirective()) {
> O << "\t.globl " << name << '\n';
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -58,7 +58,7 @@
> // FIXME: Why don't we always use this section?
> if (is64Bit)
> SixteenByteConstantSection = getUnnamedSection("\t.literal16\n",
> - SectionFlags::Mergeable);
> + SectionKind::MergeableConst16);
> LCOMMDirective = "\t.lcomm\t";
>
> // Leopard and above support aligned common symbols.
> @@ -128,8 +128,7 @@
> // Set up DWARF directives
> HasLEB128 = true; // Target asm supports leb128 directives (little-endian)
>
> - BSSSection_ = getUnnamedSection("\t.bss",
> - SectionFlags::Writable | SectionFlags::BSS);
> + BSSSection_ = getUnnamedSection("\t.bss", SectionKind::BSS);
>
> // Debug Information
> AbsoluteDebugSectionOffsets = true;
> @@ -278,13 +277,14 @@
> }
>
>
> -void X86COFFTargetAsmInfo::getSectionFlags(unsigned Flags,
> - SmallVectorImpl<char> &Str) const {
> +
> +void X86COFFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind,
> + SmallVectorImpl<char> &Str) const {
> // FIXME: Inefficient.
> std::string Res = ",\"";
> - if (Flags & SectionFlags::Code)
> + if (Kind.isText())
> Res += 'x';
> - if (Flags & SectionFlags::Writable)
> + if (Kind.isWriteable())
> Res += 'w';
> Res += "\"";
>
> @@ -314,8 +314,8 @@
>
> AlignmentIsInBytes = true;
>
> - TextSection = getUnnamedSection("_text", SectionFlags::Code);
> - DataSection = getUnnamedSection("_data", SectionFlags::Writable);
> + TextSection = getUnnamedSection("_text", SectionKind::Text);
> + DataSection = getUnnamedSection("_data", SectionKind::DataRel);
>
> JumpTableDataSection = NULL;
> SwitchToSectionDirective = "";
>
> Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h Mon Jul 27 00:32:16 2009
> @@ -56,8 +56,8 @@
> virtual const char *
> getSectionPrefixForUniqueGlobal(SectionKind kind) const;
>
> - virtual void getSectionFlags(unsigned Flags,
> - SmallVectorImpl<char> &Str) const;
> + virtual void getSectionFlagsAsString(SectionKind Kind,
> + SmallVectorImpl<char> &Str) const;
> };
>
> struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp?rev=77184&r1=77183&r2=77184&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreTargetAsmInfo.cpp Mon Jul 27 00:32:16 2009
> @@ -24,10 +24,9 @@
> XCoreTargetAsmInfo::XCoreTargetAsmInfo(const XCoreTargetMachine &TM)
> : ELFTargetAsmInfo(TM) {
> SupportsDebugInformation = true;
> - TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
> - DataSection = getNamedSection("\t.dp.data", SectionFlags::Writable);
> - BSSSection_ = getNamedSection("\t.dp.bss", SectionFlags::Writable |
> - SectionFlags::BSS);
> + TextSection = getUnnamedSection("\t.text", SectionKind::Text);
> + DataSection = getNamedSection("\t.dp.data", SectionKind::DataRel);
> + BSSSection_ = getNamedSection("\t.dp.bss", SectionKind::BSS);
>
> // TLS globals are lowered in the backend to arrays indexed by the current
> // thread id. After lowering they require no special handling by the linker
> @@ -36,9 +35,10 @@
> TLSBSSSection = BSSSection_;
>
> if (TM.getSubtargetImpl()->isXS1A())
> - ReadOnlySection = getNamedSection("\t.dp.rodata", SectionFlags::Writable);
> + // FIXME: Why is this writable???
> + ReadOnlySection = getNamedSection("\t.dp.rodata", SectionKind::DataRel);
> else
> - ReadOnlySection = getNamedSection("\t.cp.rodata", SectionFlags::None);
> + ReadOnlySection = getNamedSection("\t.cp.rodata", SectionKind::ReadOnly);
> Data16bitsDirective = "\t.short\t";
> Data32bitsDirective = "\t.long\t";
> Data64bitsDirective = 0;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Rafael Avila de Espindola
Google | Gordon House | Barrow Street | Dublin 4 | Ireland
Registered in Dublin, Ireland | Registration Number: 368047
More information about the llvm-commits
mailing list