From 849c8617bef33902612917006ecc19d3b0243da9 Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Wed, 9 Jul 2008 13:21:49 +0000 Subject: [PATCH] Split PrintSectionFlags llvm-svn: 53302 --- lib/Target/X86/X86TargetAsmInfo.cpp | 148 +++++++++++++--------------- lib/Target/X86/X86TargetAsmInfo.h | 3 +- 2 files changed, 70 insertions(+), 81 deletions(-) diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index ea8d0131b5d..c900ac9e77c 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -313,6 +313,35 @@ X86ELFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, } } +std::string X86ELFTargetAsmInfo::PrintSectionFlags(unsigned flags) const { + std::string Flags = ",\""; + + if (!(flags & SectionFlags::Debug)) + Flags += 'a'; + if (flags & SectionFlags::Code) + Flags += 'x'; + if (flags & SectionFlags::Writeable) + Flags += 'w'; + if (flags & SectionFlags::Mergeable) + Flags += 'M'; + if (flags & SectionFlags::Strings) + Flags += 'S'; + if (flags & SectionFlags::TLS) + Flags += 'T'; + + Flags += "\""; + + // FIXME: There can be exceptions here + if (flags & SectionFlags::BSS) + Flags += ",@nobits"; + else + Flags += ",@progbits"; + + // FIXME: entity size for mergeable sections + + return Flags; +} + X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM): X86TargetAsmInfo(TM) { GlobalPrefix = "_"; @@ -345,32 +374,6 @@ X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM): DwarfMacInfoSection = "\t.section\t.debug_macinfo,\"dr\""; } -X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM): - X86TargetAsmInfo(TM) { - GlobalPrefix = "_"; - CommentString = ";"; - - PrivateGlobalPrefix = "$"; - AlignDirective = "\talign\t"; - ZeroDirective = "\tdb\t"; - ZeroDirectiveSuffix = " dup(0)"; - AsciiDirective = "\tdb\t"; - AscizDirective = 0; - Data8bitsDirective = "\tdb\t"; - Data16bitsDirective = "\tdw\t"; - Data32bitsDirective = "\tdd\t"; - Data64bitsDirective = "\tdq\t"; - HasDotTypeDotSizeDirective = false; - - TextSection = "_text"; - DataSection = "_data"; - JumpTableDataSection = NULL; - SwitchToSectionDirective = ""; - TextSectionStartSuffix = "\tsegment 'CODE'"; - DataSectionStartSuffix = "\tsegment 'DATA'"; - SectionEndDirectiveSuffix = "\tends\n"; -} - unsigned X86COFFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, bool Global) const { @@ -430,6 +433,45 @@ X86COFFTargetAsmInfo::UniqueSectionForGlobal(const GlobalValue* GV, } } +std::string X86COFFTargetAsmInfo::PrintSectionFlags(unsigned flags) const { + std::string Flags = ",\""; + + if (flags & SectionFlags::Code) + Flags += 'x'; + if (flags & SectionFlags::Writeable) + Flags += 'w'; + + Flags += "\""; + + return Flags; +} + +X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM): + X86TargetAsmInfo(TM) { + GlobalPrefix = "_"; + CommentString = ";"; + + PrivateGlobalPrefix = "$"; + AlignDirective = "\talign\t"; + ZeroDirective = "\tdb\t"; + ZeroDirectiveSuffix = " dup(0)"; + AsciiDirective = "\tdb\t"; + AscizDirective = 0; + Data8bitsDirective = "\tdb\t"; + Data16bitsDirective = "\tdw\t"; + Data32bitsDirective = "\tdd\t"; + Data64bitsDirective = "\tdq\t"; + HasDotTypeDotSizeDirective = false; + + TextSection = "_text"; + DataSection = "_data"; + JumpTableDataSection = NULL; + SwitchToSectionDirective = ""; + TextSectionStartSuffix = "\tsegment 'CODE'"; + DataSectionStartSuffix = "\tsegment 'DATA'"; + SectionEndDirectiveSuffix = "\tends\n"; +} + std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { SectionKind::Kind kind = SectionKindForGlobal(GV); unsigned flags = SectionFlagsForGlobal(GV, GV->getSection().c_str()); @@ -493,57 +535,3 @@ std::string X86TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { 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: - Flags += ",\""; - - if (!(flags & SectionFlags::Debug)) - Flags += 'a'; - if (flags & SectionFlags::Code) - Flags += 'x'; - if (flags & SectionFlags::Writeable) - Flags += 'w'; - if (flags & SectionFlags::Mergeable) - Flags += 'M'; - if (flags & SectionFlags::Strings) - Flags += 'S'; - if (flags & SectionFlags::TLS) - Flags += 'T'; - - Flags += "\""; - - // FIXME: There can be exceptions here - if (flags & SectionFlags::BSS) - Flags += ",@nobits"; - else - Flags += ",@progbits"; - - // FIXME: entity size for mergeable sections - break; - case X86Subtarget::isCygwin: - case X86Subtarget::isMingw: - Flags += ",\""; - - if (flags & SectionFlags::Code) - Flags += 'x'; - if (flags & SectionFlags::Writeable) - Flags += 'w'; - - Flags += "\""; - - break; - case X86Subtarget::isDarwin: - // Darwin does not use any special flags - default: - break; - } - - return Flags; -} diff --git a/lib/Target/X86/X86TargetAsmInfo.h b/lib/Target/X86/X86TargetAsmInfo.h index 0789bd8e389..85969920115 100644 --- a/lib/Target/X86/X86TargetAsmInfo.h +++ b/lib/Target/X86/X86TargetAsmInfo.h @@ -26,7 +26,6 @@ namespace llvm { virtual bool ExpandInlineAsm(CallInst *CI) const; virtual std::string SectionForGlobal(const GlobalValue *GV) const; - virtual std::string PrintSectionFlags(unsigned flags) const; private: bool LowerToBSwap(CallInst *CI) const; @@ -46,6 +45,7 @@ namespace llvm { explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM); virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason, bool Global) const; + virtual std::string PrintSectionFlags(unsigned flags) const; }; struct X86COFFTargetAsmInfo : public X86TargetAsmInfo { @@ -54,6 +54,7 @@ namespace llvm { bool Global) const; virtual std::string UniqueSectionForGlobal(const GlobalValue* GV, SectionKind::Kind kind) const; + virtual std::string PrintSectionFlags(unsigned flags) const; }; struct X86WinTargetAsmInfo : public X86TargetAsmInfo {