From: Anton Korobeynikov Date: Wed, 9 Jul 2008 13:20:07 +0000 (+0000) Subject: Move flag decoding stuff into special hook X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=6e405f3f77c4f633a5f3de78d9276efbf3206fed;p=oota-llvm.git Move flag decoding stuff into special hook git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53297 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Target/TargetAsmInfo.h b/include/llvm/Target/TargetAsmInfo.h index 13b32e790ed..0cd7f8d7a5e 100644 --- a/include/llvm/Target/TargetAsmInfo.h +++ b/include/llvm/Target/TargetAsmInfo.h @@ -474,6 +474,8 @@ namespace llvm { virtual std::string UniqueSectionForGlobal(const GlobalValue* GV, SectionKind::Kind kind) const; + virtual std::string PrintSectionFlags(unsigned flags) const { return ""; } + // Accessors. // const char *getTextSection() const { diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 80156c79c03..b34f2d19e39 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -411,7 +411,6 @@ std::string X86TargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV, std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { - const X86Subtarget *Subtarget = &X86TM->getSubtarget(); SectionKind::Kind kind = SectionKindForGlobal(GV); unsigned flags = SectionFlagsForGlobal(GV, GV->getSection().c_str()); std::string Name; @@ -471,44 +470,53 @@ std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { assert(0 && "Unsupported global"); } + Name += PrintSectionFlags(flags); + return Name; +} + +std::string X86TargetAsmInfo::PrintSectionFlags(unsigned flags) const { + const X86Subtarget *Subtarget = &X86TM->getSubtarget(); + + std::string Flags = ""; + // Add all special flags, etc switch (Subtarget->TargetType) { case X86Subtarget::isELF: - Name += ",\""; + Flags += ",\""; if (!(flags & SectionFlags::Debug)) - Name += 'a'; + Flags += 'a'; if (flags & SectionFlags::Code) - Name += 'x'; + Flags += 'x'; if (flags & SectionFlags::Writeable) - Name += 'w'; + Flags += 'w'; if (flags & SectionFlags::Mergeable) - Name += 'M'; + Flags += 'M'; if (flags & SectionFlags::Strings) - Name += 'S'; + Flags += 'S'; if (flags & SectionFlags::TLS) - Name += 'T'; + Flags += 'T'; - Name += "\""; + Flags += "\""; // FIXME: There can be exceptions here if (flags & SectionFlags::BSS) - Name += ",@nobits"; + Flags += ",@nobits"; else - Name += ",@progbits"; + Flags += ",@progbits"; // FIXME: entity size for mergeable sections break; case X86Subtarget::isCygwin: case X86Subtarget::isMingw: - Name += ",\""; + Flags += ",\""; if (flags & SectionFlags::Code) - Name += 'x'; + Flags += 'x'; if (flags & SectionFlags::Writeable) - Name += 'w'; + Flags += 'w'; - Name += "\""; + Flags += "\""; break; case X86Subtarget::isDarwin: @@ -517,6 +525,5 @@ std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { break; } - return Name; + return Flags; } - diff --git a/lib/Target/X86/X86TargetAsmInfo.h b/lib/Target/X86/X86TargetAsmInfo.h index 9f9ef3e9af4..35e7af89862 100644 --- a/lib/Target/X86/X86TargetAsmInfo.h +++ b/lib/Target/X86/X86TargetAsmInfo.h @@ -30,6 +30,7 @@ namespace llvm { virtual std::string SectionForGlobal(const GlobalValue *GV) const; virtual std::string UniqueSectionForGlobal(const GlobalValue* GV, SectionKind::Kind kind) const; + virtual std::string PrintSectionFlags(unsigned flags) const; private: const X86TargetMachine* X86TM;