Add interface for section override. Use this for Sparc, since it should use named BSS section.

llvm-svn: 54844
This commit is contained in:
Anton Korobeynikov 2008-08-16 12:58:12 +00:00
parent bd890b1faf
commit 2ae5446b62
3 changed files with 15 additions and 6 deletions

View File

@ -520,9 +520,11 @@ namespace llvm {
virtual ~TargetAsmInfo();
const Section* getNamedSection(const char *Name,
unsigned Flags = SectionFlags::None) const;
unsigned Flags = SectionFlags::None,
bool Override = false) const;
const Section* getUnnamedSection(const char *Directive,
unsigned Flags = SectionFlags::None) const;
unsigned Flags = SectionFlags::None,
bool Override = false) const;
/// Measure the specified inline asm to determine an approximation of its
/// length.

View File

@ -25,6 +25,11 @@ SparcELFTargetAsmInfo::SparcELFTargetAsmInfo(const TargetMachine &TM):
ConstantPoolSection = "\t.section \".rodata\",#alloc\n";
COMMDirectiveTakesAlignment = true;
CStringSection=".rodata.str";
// Sparc normally uses named section for BSS.
BSSSection_ = getNamedSection("\t.bss",
SectionFlags::Writeable | SectionFlags::BSS,
/* Override */ true);
}
std::string SparcELFTargetAsmInfo::printSectionFlags(unsigned flags) const {

View File

@ -352,11 +352,12 @@ TargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV,
}
const Section*
TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags) const {
TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags,
bool Override) const {
Section& S = Sections[Name];
// This is newly-created section, set it up properly.
if (S.Flags == SectionFlags::Invalid) {
if (S.Flags == SectionFlags::Invalid || Override) {
S.Flags = Flags | SectionFlags::Named;
S.Name = Name;
}
@ -365,11 +366,12 @@ TargetAsmInfo::getNamedSection(const char *Name, unsigned Flags) const {
}
const Section*
TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags) const {
TargetAsmInfo::getUnnamedSection(const char *Directive, unsigned Flags,
bool Override) const {
Section& S = Sections[Directive];
// This is newly-created section, set it up properly.
if (S.Flags == SectionFlags::Invalid) {
if (S.Flags == SectionFlags::Invalid || Override) {
S.Flags = Flags & ~SectionFlags::Named;
S.Name = Directive;
}