[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/PowerPC/ lib/Target/PowerPC/AsmPrinter/ lib/Target/Sparc/ lib/Target/SystemZ/ lib/Target/X86/ lib/Target/X86/AsmPrinter/ lib/Target/XCore/
Chris Lattner
sabre at nondot.org
Sun Jul 26 22:32:17 PDT 2009
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;
More information about the llvm-commits
mailing list