| //===- MC/MCAsmInfoXCOFF.cpp - XCOFF asm properties ------------ *- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "llvm/MC/MCAsmInfoXCOFF.h" |
| #include "llvm/ADT/StringExtras.h" |
| #include "llvm/Support/CommandLine.h" |
| |
| using namespace llvm; |
| |
| namespace llvm { |
| extern cl::opt<cl::boolOrDefault> UseLEB128Directives; |
| } |
| |
| void MCAsmInfoXCOFF::anchor() {} |
| |
| MCAsmInfoXCOFF::MCAsmInfoXCOFF() { |
| IsLittleEndian = false; |
| HasVisibilityOnlyWithLinkage = true; |
| HasBasenameOnlyForFileDirective = false; |
| HasFourStringsDotFile = true; |
| |
| // For XCOFF, string constant consists of any number of characters enclosed in |
| // "" (double quotation marks). |
| HasPairedDoubleQuoteStringConstants = true; |
| |
| PrivateGlobalPrefix = "L.."; |
| PrivateLabelPrefix = "L.."; |
| SupportsQuotedNames = false; |
| UseDotAlignForAlignment = true; |
| UsesDwarfFileAndLocDirectives = false; |
| DwarfSectionSizeRequired = false; |
| if (UseLEB128Directives == cl::BOU_UNSET) |
| HasLEB128Directives = false; |
| ZeroDirective = "\t.space\t"; |
| ZeroDirectiveSupportsNonZeroValue = false; |
| AsciiDirective = nullptr; // not supported |
| AscizDirective = nullptr; // not supported |
| ByteListDirective = "\t.byte\t"; |
| PlainStringDirective = "\t.string\t"; |
| CharacterLiteralSyntax = ACLS_SingleQuotePrefix; |
| |
| // Use .vbyte for data definition to avoid directives that apply an implicit |
| // alignment. |
| Data16bitsDirective = "\t.vbyte\t2, "; |
| Data32bitsDirective = "\t.vbyte\t4, "; |
| |
| COMMDirectiveAlignmentIsInBytes = false; |
| LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment; |
| HasDotTypeDotSizeDirective = false; |
| UseIntegratedAssembler = false; |
| ParseInlineAsmUsingAsmParser = true; |
| NeedsFunctionDescriptors = true; |
| |
| ExceptionsType = ExceptionHandling::AIX; |
| } |
| |
| bool MCAsmInfoXCOFF::isAcceptableChar(char C) const { |
| // QualName is allowed for a MCSymbolXCOFF, and |
| // QualName contains '[' and ']'. |
| if (C == '[' || C == ']') |
| return true; |
| |
| // For AIX assembler, symbols may consist of numeric digits, |
| // underscores, periods, uppercase or lowercase letters, or |
| // any combination of these. |
| return isAlnum(C) || C == '_' || C == '.'; |
| } |