diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2008-08-16 12:58:12 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2008-08-16 12:58:12 +0000 |
commit | 328da65bd14045d3e229cbc5549835cebf6ff703 (patch) | |
tree | 65b82156ac97d8733c26c35643d0c5f446865e03 /lib/Target | |
parent | ffe31d7bf1e070650b0ff9ebfac815ea172a82bb (diff) | |
download | external_llvm-328da65bd14045d3e229cbc5549835cebf6ff703.zip external_llvm-328da65bd14045d3e229cbc5549835cebf6ff703.tar.gz external_llvm-328da65bd14045d3e229cbc5549835cebf6ff703.tar.bz2 |
Add interface for section override. Use this for Sparc, since it should use named BSS section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54844 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
-rw-r--r-- | lib/Target/Sparc/SparcTargetAsmInfo.cpp | 5 | ||||
-rw-r--r-- | lib/Target/TargetAsmInfo.cpp | 10 |
2 files changed, 11 insertions, 4 deletions
diff --git a/lib/Target/Sparc/SparcTargetAsmInfo.cpp b/lib/Target/Sparc/SparcTargetAsmInfo.cpp index afa5327..c13d45c 100644 --- a/lib/Target/Sparc/SparcTargetAsmInfo.cpp +++ b/lib/Target/Sparc/SparcTargetAsmInfo.cpp @@ -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 { diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index cc0745f..6baebd0 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -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; } |