[llvm-commits] [llvm] r77204 - in /llvm/trunk: include/llvm/Target/COFFTargetAsmInfo.h include/llvm/Target/ELFTargetAsmInfo.h lib/Target/COFFTargetAsmInfo.cpp lib/Target/X86/X86TargetAsmInfo.cpp lib/Target/X86/X86TargetAsmInfo.h

Chris Lattner sabre at nondot.org
Mon Jul 27 09:46:00 PDT 2009


Author: lattner
Date: Mon Jul 27 11:45:59 2009
New Revision: 77204

URL: http://llvm.org/viewvc/llvm-project?rev=77204&view=rev
Log:
make COFF work like ELF and macho, by splitting out into its own
header even though there is only one COFF target.

Added:
    llvm/trunk/include/llvm/Target/COFFTargetAsmInfo.h
    llvm/trunk/lib/Target/COFFTargetAsmInfo.cpp
Modified:
    llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h
    llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
    llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h

Added: llvm/trunk/include/llvm/Target/COFFTargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/COFFTargetAsmInfo.h?rev=77204&view=auto

==============================================================================
--- llvm/trunk/include/llvm/Target/COFFTargetAsmInfo.h (added)
+++ llvm/trunk/include/llvm/Target/COFFTargetAsmInfo.h Mon Jul 27 11:45:59 2009
@@ -0,0 +1,30 @@
+//===-- COFFTargetAsmInfo.h - COFF asm properties ---------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_COFF_TARGET_ASM_INFO_H
+#define LLVM_COFF_TARGET_ASM_INFO_H
+
+#include "llvm/Target/TargetAsmInfo.h"
+
+namespace llvm {
+  class COFFTargetAsmInfo : public TargetAsmInfo {
+  protected:
+    explicit COFFTargetAsmInfo(const TargetMachine &TM);
+  public:
+
+    virtual const char *
+    getSectionPrefixForUniqueGlobal(SectionKind kind) const;
+    
+    virtual void getSectionFlagsAsString(SectionKind Kind,
+                                         SmallVectorImpl<char> &Str) const;
+  };
+}
+
+
+#endif // LLVM_ELF_TARGET_ASM_INFO_H

Modified: llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h?rev=77204&r1=77203&r2=77204&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h (original)
+++ llvm/trunk/include/llvm/Target/ELFTargetAsmInfo.h Mon Jul 27 11:45:59 2009
@@ -18,7 +18,6 @@
 #include "llvm/Target/TargetAsmInfo.h"
 
 namespace llvm {
-  class GlobalValue;
 
   struct ELFTargetAsmInfo : public TargetAsmInfo {
     ELFTargetAsmInfo(const TargetMachine &TM);

Added: llvm/trunk/lib/Target/COFFTargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/COFFTargetAsmInfo.cpp?rev=77204&view=auto

==============================================================================
--- llvm/trunk/lib/Target/COFFTargetAsmInfo.cpp (added)
+++ llvm/trunk/lib/Target/COFFTargetAsmInfo.cpp Mon Jul 27 11:45:59 2009
@@ -0,0 +1,76 @@
+//===-- COFFTargetAsmInfo.cpp - COFF asm properties -------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines target asm properties related what form asm statements
+// should take in general on COFF-based targets
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Target/COFFTargetAsmInfo.h"
+#include "llvm/ADT/SmallVector.h"
+using namespace llvm;
+
+COFFTargetAsmInfo::COFFTargetAsmInfo(const TargetMachine &TM)
+  : TargetAsmInfo(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\"";
+}
+
+const char *COFFTargetAsmInfo::
+getSectionPrefixForUniqueGlobal(SectionKind Kind) const {
+  if (Kind.isText())
+    return ".text$linkonce";
+  if (Kind.isWriteable())
+    return ".data$linkonce";
+  return ".rdata$linkonce";
+}
+
+void COFFTargetAsmInfo::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());
+}

Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp?rev=77204&r1=77203&r2=77204&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.cpp Mon Jul 27 11:45:59 2009
@@ -188,42 +188,6 @@
   }
 }
 
-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 @@
   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 = ";";
 

Modified: llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h?rev=77204&r1=77203&r2=77204&view=diff

==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h (original)
+++ llvm/trunk/lib/Target/X86/X86TargetAsmInfo.h Mon Jul 27 11:45:59 2009
@@ -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 @@
                                            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);





More information about the llvm-commits mailing list