Add debug support for X86/ELF targets (Linux). This allows llvm-gcc4
[oota-llvm.git] / lib / Target / TargetAsmInfo.cpp
1 //===-- TargetAsmInfo.cpp - Asm Info ---------------------------------------==//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by James M. Laskey and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines target asm properties related what form asm statements
11 // should take.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "llvm/Target/TargetAsmInfo.h"
16
17 using namespace llvm;
18
19 TargetAsmInfo::TargetAsmInfo() :
20   TextSection(".text"),
21   DataSection(".data"),
22   AddressSize(4),
23   NeedsSet(false),
24   MaxInstLength(4),
25   SeparatorChar(';'),
26   CommentString("#"),
27   GlobalPrefix(""),
28   PrivateGlobalPrefix("."),
29   GlobalVarAddrPrefix(""),
30   GlobalVarAddrSuffix(""),
31   FunctionAddrPrefix(""),
32   FunctionAddrSuffix(""),
33   InlineAsmStart("#APP"),
34   InlineAsmEnd("#NO_APP"),
35   ZeroDirective("\t.zero\t"),
36   ZeroDirectiveSuffix(0),
37   AsciiDirective("\t.ascii\t"),
38   AscizDirective("\t.asciz\t"),
39   Data8bitsDirective("\t.byte\t"),
40   Data16bitsDirective("\t.short\t"),
41   Data32bitsDirective("\t.long\t"),
42   Data64bitsDirective("\t.quad\t"),
43   AlignDirective("\t.align\t"),
44   AlignmentIsInBytes(true),
45   SwitchToSectionDirective("\t.section\t"),
46   TextSectionStartSuffix(""),
47   DataSectionStartSuffix(""),
48   SectionEndDirectiveSuffix(0),
49   ConstantPoolSection("\t.section .rodata\n"),
50   JumpTableDataSection("\t.section .rodata\n"),
51   JumpTableDirective(0),
52   CStringSection(0),
53   StaticCtorsSection("\t.section .ctors,\"aw\",@progbits"),
54   StaticDtorsSection("\t.section .dtors,\"aw\",@progbits"),
55   FourByteConstantSection(0),
56   EightByteConstantSection(0),
57   SixteenByteConstantSection(0),
58   SetDirective(0),
59   LCOMMDirective(0),
60   COMMDirective("\t.comm\t"),
61   COMMDirectiveTakesAlignment(true),
62   HasDotTypeDotSizeDirective(true),
63   UsedDirective(0),
64   HasLEB128(false),
65   HasDotLoc(false),
66   HasDotFile(false),
67   DwarfRequiresFrameSection(true),
68   DwarfAbbrevSection(".debug_abbrev"),
69   DwarfInfoSection(".debug_info"),
70   DwarfLineSection(".debug_line"),
71   DwarfFrameSection(".debug_frame"),
72   DwarfPubNamesSection(".debug_pubnames"),
73   DwarfPubTypesSection(".debug_pubtypes"),
74   DwarfStrSection(".debug_str"),
75   DwarfLocSection(".debug_loc"),
76   DwarfARangesSection(".debug_aranges"),
77   DwarfRangesSection(".debug_ranges"),
78   DwarfMacInfoSection(".debug_macinfo") {
79 }
80
81 TargetAsmInfo::~TargetAsmInfo() {
82 }
83
84 /// Measure the specified inline asm to determine an approximation of its
85 /// length.
86 unsigned TargetAsmInfo::getInlineAsmLength(const char *Str) const {
87   // Count the number of instructions in the asm.
88   unsigned NumInsts = 0;
89   for (; *Str; ++Str) {
90     if (*Str == '\n' || *Str == SeparatorChar)
91       ++NumInsts;
92   }
93
94   // Multiply by the worst-case length for each instruction.
95   return NumInsts * MaxInstLength;
96 }