[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

Howard Su howard0su at gmail.com
Mon Jul 27 18:26:08 PDT 2009


PIC16 is also using COFF as its target.

On Tue, Jul 28, 2009 at 12:46 AM, Chris Lattner <sabre at nondot.org> wrote:

> 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);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
-Howard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20090728/ea8fea75/attachment.html>


More information about the llvm-commits mailing list