diff options
author | Chris Lattner <sabre@nondot.org> | 2009-07-27 16:45:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-07-27 16:45:59 +0000 |
commit | 1814e81e17f15afc73adb7e5b4ddc044f16b02c5 (patch) | |
tree | df317cec89e5640d75a7281902906c8cf180057f /llvm/lib/Target/X86 | |
parent | ff1f401f9be84723593e22d9df16029a4037a8fa (diff) | |
download | bcm5719-llvm-1814e81e17f15afc73adb7e5b4ddc044f16b02c5.tar.gz bcm5719-llvm-1814e81e17f15afc73adb7e5b4ddc044f16b02c5.zip |
make COFF work like ELF and macho, by splitting out into its own
header even though there is only one COFF target.
llvm-svn: 77204
Diffstat (limited to 'llvm/lib/Target/X86')
-rw-r--r-- | llvm/lib/Target/X86/X86TargetAsmInfo.cpp | 60 | ||||
-rw-r--r-- | llvm/lib/Target/X86/X86TargetAsmInfo.h | 14 |
2 files changed, 7 insertions, 67 deletions
diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp index 94529ea8ceb..40c46bb1de0 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.cpp @@ -188,42 +188,6 @@ X86ELFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, } } -X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM): - X86GenericTargetAsmInfo(TM) { - - TextSection = getOrCreateSection("_text", true, SectionKind::Text); - DataSection = getOrCreateSection("_data", true, SectionKind::DataRel); - - GlobalPrefix = "_"; - LCOMMDirective = "\t.lcomm\t"; - COMMDirectiveTakesAlignment = false; - HasDotTypeDotSizeDirective = false; - HasSingleParameterDotFile = false; - StaticCtorsSection = "\t.section .ctors,\"aw\""; - StaticDtorsSection = "\t.section .dtors,\"aw\""; - HiddenDirective = NULL; - PrivateGlobalPrefix = "L"; // Prefix for private global symbols - WeakRefDirective = "\t.weak\t"; - SetDirective = "\t.set\t"; - - // Set up DWARF directives - HasLEB128 = true; // Target asm supports leb128 directives (little-endian) - AbsoluteDebugSectionOffsets = true; - AbsoluteEHSectionOffsets = false; - SupportsDebugInformation = true; - DwarfSectionOffsetDirective = "\t.secrel32\t"; - DwarfAbbrevSection = "\t.section\t.debug_abbrev,\"dr\""; - DwarfInfoSection = "\t.section\t.debug_info,\"dr\""; - DwarfLineSection = "\t.section\t.debug_line,\"dr\""; - DwarfFrameSection = "\t.section\t.debug_frame,\"dr\""; - DwarfPubNamesSection ="\t.section\t.debug_pubnames,\"dr\""; - DwarfPubTypesSection ="\t.section\t.debug_pubtypes,\"dr\""; - DwarfStrSection = "\t.section\t.debug_str,\"dr\""; - DwarfLocSection = "\t.section\t.debug_loc,\"dr\""; - DwarfARangesSection = "\t.section\t.debug_aranges,\"dr\""; - DwarfRangesSection = "\t.section\t.debug_ranges,\"dr\""; - DwarfMacroInfoSection = "\t.section\t.debug_macinfo,\"dr\""; -} unsigned X86COFFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, @@ -263,32 +227,10 @@ X86COFFTargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, return DW_EH_PE_absptr; } -const char *X86COFFTargetAsmInfo:: -getSectionPrefixForUniqueGlobal(SectionKind Kind) const { - if (Kind.isText()) - return ".text$linkonce"; - if (Kind.isWriteable()) - return ".data$linkonce"; - return ".rdata$linkonce"; -} - - -void X86COFFTargetAsmInfo::getSectionFlagsAsString(SectionKind Kind, - SmallVectorImpl<char> &Str) const { - // FIXME: Inefficient. - std::string Res = ",\""; - if (Kind.isText()) - Res += 'x'; - if (Kind.isWriteable()) - Res += 'w'; - Res += "\""; - - Str.append(Res.begin(), Res.end()); -} X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM): - X86GenericTargetAsmInfo(TM) { + X86TargetAsmInfo<TargetAsmInfo>(TM) { GlobalPrefix = "_"; CommentString = ";"; diff --git a/llvm/lib/Target/X86/X86TargetAsmInfo.h b/llvm/lib/Target/X86/X86TargetAsmInfo.h index d9716809767..0847660f2e5 100644 --- a/llvm/lib/Target/X86/X86TargetAsmInfo.h +++ b/llvm/lib/Target/X86/X86TargetAsmInfo.h @@ -16,8 +16,9 @@ #include "X86TargetMachine.h" #include "llvm/Target/TargetAsmInfo.h" -#include "llvm/Target/ELFTargetAsmInfo.h" +#include "llvm/Target/COFFTargetAsmInfo.h" #include "llvm/Target/DarwinTargetAsmInfo.h" +#include "llvm/Target/ELFTargetAsmInfo.h" #include "llvm/Support/Compiler.h" namespace llvm { @@ -49,16 +50,13 @@ namespace llvm { bool Global) const; }; - struct X86COFFTargetAsmInfo : public X86GenericTargetAsmInfo { - explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM); + struct X86COFFTargetAsmInfo : public X86TargetAsmInfo<COFFTargetAsmInfo> { + explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM) : + X86TargetAsmInfo<COFFTargetAsmInfo>(TM) {} virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason, bool Global) const; - virtual const char * - getSectionPrefixForUniqueGlobal(SectionKind kind) const; - - virtual void getSectionFlagsAsString(SectionKind Kind, - SmallVectorImpl<char> &Str) const; }; + struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo { explicit X86WinTargetAsmInfo(const X86TargetMachine &TM); |