//===- 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 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 == '.'; }