diff options
author | Chris Lattner <sabre@nondot.org> | 2009-08-08 20:43:12 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-08-08 20:43:12 +0000 |
commit | 5277b22687d3513dd29d5a9c8510cac740f933f6 (patch) | |
tree | 9e9e43f4b75db5fda4347245ebfac0fe152b1f27 /lib/Target/TargetLoweringObjectFile.cpp | |
parent | 17421d81fdbc94dbd8b3549b095303baaf52e689 (diff) |
eliminate TargetLoweringObjectFileSparc in favor of a TAI hook.
A TAI hook is appropriate in this case because this is just an
asm syntax issue, not a semantic difference. TLOF should model
the semantics of the section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78498 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/TargetLoweringObjectFile.cpp')
-rw-r--r-- | lib/Target/TargetLoweringObjectFile.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/lib/Target/TargetLoweringObjectFile.cpp b/lib/Target/TargetLoweringObjectFile.cpp index 8a60086f7a..eabd626372 100644 --- a/lib/Target/TargetLoweringObjectFile.cpp +++ b/lib/Target/TargetLoweringObjectFile.cpp @@ -18,8 +18,9 @@ #include "llvm/GlobalVariable.h" #include "llvm/MC/MCContext.h" #include "llvm/MC/MCSection.h" -#include "llvm/Target/TargetMachine.h" +#include "llvm/Target/TargetAsmInfo.h" #include "llvm/Target/TargetData.h" +#include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetOptions.h" #include "llvm/Support/Mangler.h" #include "llvm/ADT/StringExtras.h" @@ -407,7 +408,25 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, void TargetLoweringObjectFileELF:: -getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str) const { +getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str, + const TargetAsmInfo &TAI) const { + // Handle the weird solaris syntax if desired. + if (TAI.usesSunStyleELFSectionSwitchSyntax() && + !Kind.isMergeableConst() && !Kind.isMergeableCString()) { + // FIXME: Inefficient. + std::string Res; + if (!Kind.isMetadata()) + Res += ",#alloc"; + if (Kind.isText()) + Res += ",#execinstr"; + if (Kind.isWriteable()) + Res += ",#write"; + if (Kind.isThreadLocal()) + Res += ",#tls"; + Str.append(Res.begin(), Res.end()); + return; + } + Str.push_back(','); Str.push_back('"'); @@ -848,7 +867,8 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind, void TargetLoweringObjectFileCOFF:: -getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str) const { +getSectionFlagsAsString(SectionKind Kind, SmallVectorImpl<char> &Str, + const TargetAsmInfo &TAI) const { // FIXME: Inefficient. std::string Res = ",\""; if (Kind.isText()) |