| //===-- TargetAsmInfo.cpp - Asm Info ---------------------------------------==// | 
 | // | 
 | //                     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. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #include "llvm/Target/TargetAsmInfo.h" | 
 | #include "llvm/Support/Dwarf.h" | 
 | #include <cctype> | 
 | #include <cstring> | 
 |  | 
 | using namespace llvm; | 
 |  | 
 | TargetAsmInfo::TargetAsmInfo() : | 
 |   TextSection("\t.text"), | 
 |   DataSection("\t.data"), | 
 |   BSSSection("\t.bss"), | 
 |   TLSDataSection("\t.section .tdata,\"awT\",@progbits"), | 
 |   TLSBSSSection("\t.section .tbss,\"awT\",@nobits"), | 
 |   ZeroFillDirective(0), | 
 |   NeedsSet(false), | 
 |   MaxInstLength(4), | 
 |   PCSymbol("$"), | 
 |   SeparatorChar(';'), | 
 |   CommentString("#"), | 
 |   GlobalPrefix(""), | 
 |   PrivateGlobalPrefix("."), | 
 |   JumpTableSpecialLabelPrefix(0), | 
 |   GlobalVarAddrPrefix(""), | 
 |   GlobalVarAddrSuffix(""), | 
 |   FunctionAddrPrefix(""), | 
 |   FunctionAddrSuffix(""), | 
 |   PersonalityPrefix(""), | 
 |   PersonalitySuffix(""), | 
 |   NeedsIndirectEncoding(false), | 
 |   InlineAsmStart("#APP"), | 
 |   InlineAsmEnd("#NO_APP"), | 
 |   AssemblerDialect(0), | 
 |   ZeroDirective("\t.zero\t"), | 
 |   ZeroDirectiveSuffix(0), | 
 |   AsciiDirective("\t.ascii\t"), | 
 |   AscizDirective("\t.asciz\t"), | 
 |   Data8bitsDirective("\t.byte\t"), | 
 |   Data16bitsDirective("\t.short\t"), | 
 |   Data32bitsDirective("\t.long\t"), | 
 |   Data64bitsDirective("\t.quad\t"), | 
 |   AlignDirective("\t.align\t"), | 
 |   AlignmentIsInBytes(true), | 
 |   TextAlignFillValue(0), | 
 |   SwitchToSectionDirective("\t.section\t"), | 
 |   TextSectionStartSuffix(""), | 
 |   DataSectionStartSuffix(""), | 
 |   SectionEndDirectiveSuffix(0), | 
 |   ConstantPoolSection("\t.section .rodata"), | 
 |   JumpTableDataSection("\t.section .rodata"), | 
 |   JumpTableDirective(0), | 
 |   CStringSection(0), | 
 |   StaticCtorsSection("\t.section .ctors,\"aw\",@progbits"), | 
 |   StaticDtorsSection("\t.section .dtors,\"aw\",@progbits"), | 
 |   FourByteConstantSection(0), | 
 |   EightByteConstantSection(0), | 
 |   SixteenByteConstantSection(0), | 
 |   ReadOnlySection(0), | 
 |   GlobalDirective("\t.globl\t"), | 
 |   SetDirective(0), | 
 |   LCOMMDirective(0), | 
 |   COMMDirective("\t.comm\t"), | 
 |   COMMDirectiveTakesAlignment(true), | 
 |   HasDotTypeDotSizeDirective(true), | 
 |   UsedDirective(0), | 
 |   WeakRefDirective(0), | 
 |   WeakDefDirective(0), | 
 |   HiddenDirective("\t.hidden\t"), | 
 |   ProtectedDirective("\t.protected\t"), | 
 |   AbsoluteDebugSectionOffsets(false), | 
 |   AbsoluteEHSectionOffsets(false), | 
 |   HasLEB128(false), | 
 |   HasDotLocAndDotFile(false), | 
 |   SupportsDebugInformation(false), | 
 |   SupportsExceptionHandling(false), | 
 |   DwarfRequiresFrameSection(true), | 
 |   GlobalEHDirective(0), | 
 |   SupportsWeakOmittedEHFrame(true), | 
 |   ShortenEHDataOn64Bit(false), | 
 |   DwarfSectionOffsetDirective(0), | 
 |   DwarfAbbrevSection(".debug_abbrev"), | 
 |   DwarfInfoSection(".debug_info"), | 
 |   DwarfLineSection(".debug_line"), | 
 |   DwarfFrameSection(".debug_frame"), | 
 |   DwarfPubNamesSection(".debug_pubnames"), | 
 |   DwarfPubTypesSection(".debug_pubtypes"), | 
 |   DwarfStrSection(".debug_str"), | 
 |   DwarfLocSection(".debug_loc"), | 
 |   DwarfARangesSection(".debug_aranges"), | 
 |   DwarfRangesSection(".debug_ranges"), | 
 |   DwarfMacInfoSection(".debug_macinfo"), | 
 |   DwarfEHFrameSection(".eh_frame"), | 
 |   DwarfExceptionSection(".gcc_except_table"), | 
 |   AsmTransCBE(0) { | 
 | } | 
 |  | 
 | TargetAsmInfo::~TargetAsmInfo() { | 
 | } | 
 |  | 
 | /// Measure the specified inline asm to determine an approximation of its | 
 | /// length. | 
 | /// Comments (which run till the next SeparatorChar or newline) do not | 
 | /// count as an instruction. | 
 | /// Any other non-whitespace text is considered an instruction, with | 
 | /// multiple instructions separated by SeparatorChar or newlines. | 
 | /// Variable-length instructions are not handled here; this function | 
 | /// may be overloaded in the target code to do that. | 
 | unsigned TargetAsmInfo::getInlineAsmLength(const char *Str) const { | 
 |   // Count the number of instructions in the asm. | 
 |   bool atInsnStart = true; | 
 |   unsigned Length = 0; | 
 |   for (; *Str; ++Str) { | 
 |     if (*Str == '\n' || *Str == SeparatorChar) | 
 |       atInsnStart = true; | 
 |     if (atInsnStart && !isspace(*Str)) { | 
 |       Length += MaxInstLength; | 
 |       atInsnStart = false; | 
 |     } | 
 |     if (atInsnStart && strncmp(Str, CommentString, strlen(CommentString))==0) | 
 |       atInsnStart = false; | 
 |   } | 
 |  | 
 |   return Length; | 
 | } | 
 |  | 
 | unsigned TargetAsmInfo::PreferredEHDataFormat(DwarfEncoding::Target Reason, | 
 |                                               bool Global) const { | 
 |   return dwarf::DW_EH_PE_absptr; | 
 | } | 
 |  |