xref: /openbsd-src/gnu/llvm/llvm/lib/MC/MCAsmInfoXCOFF.cpp (revision 73471bf04ceb096474c7f0fa83b1b65c70a787a1)
109467b48Spatrick //===- MC/MCAsmInfoXCOFF.cpp - XCOFF asm properties ------------ *- C++ -*-===//
209467b48Spatrick //
309467b48Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
409467b48Spatrick // See https://llvm.org/LICENSE.txt for license information.
509467b48Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
609467b48Spatrick //
709467b48Spatrick //===----------------------------------------------------------------------===//
809467b48Spatrick 
909467b48Spatrick #include "llvm/MC/MCAsmInfoXCOFF.h"
10097a140dSpatrick #include "llvm/ADT/StringExtras.h"
11*73471bf0Spatrick #include "llvm/Support/CommandLine.h"
1209467b48Spatrick 
1309467b48Spatrick using namespace llvm;
1409467b48Spatrick 
15*73471bf0Spatrick namespace llvm {
16*73471bf0Spatrick extern cl::opt<cl::boolOrDefault> UseLEB128Directives;
17*73471bf0Spatrick }
18*73471bf0Spatrick 
anchor()1909467b48Spatrick void MCAsmInfoXCOFF::anchor() {}
2009467b48Spatrick 
MCAsmInfoXCOFF()2109467b48Spatrick MCAsmInfoXCOFF::MCAsmInfoXCOFF() {
2209467b48Spatrick   IsLittleEndian = false;
23097a140dSpatrick   HasVisibilityOnlyWithLinkage = true;
24*73471bf0Spatrick   HasBasenameOnlyForFileDirective = false;
25*73471bf0Spatrick   HasFourStringsDotFile = true;
26*73471bf0Spatrick 
27*73471bf0Spatrick   // For XCOFF, string constant consists of any number of characters enclosed in
28*73471bf0Spatrick   // "" (double quotation marks).
29*73471bf0Spatrick   HasPairedDoubleQuoteStringConstants = true;
30*73471bf0Spatrick 
31097a140dSpatrick   PrivateGlobalPrefix = "L..";
32097a140dSpatrick   PrivateLabelPrefix = "L..";
33097a140dSpatrick   SupportsQuotedNames = false;
3409467b48Spatrick   UseDotAlignForAlignment = true;
35*73471bf0Spatrick   UsesDwarfFileAndLocDirectives = false;
36*73471bf0Spatrick   DwarfSectionSizeRequired = false;
37*73471bf0Spatrick   if (UseLEB128Directives == cl::BOU_UNSET)
38*73471bf0Spatrick     HasLEB128Directives = false;
39097a140dSpatrick   ZeroDirective = "\t.space\t";
40097a140dSpatrick   ZeroDirectiveSupportsNonZeroValue = false;
4109467b48Spatrick   AsciiDirective = nullptr; // not supported
4209467b48Spatrick   AscizDirective = nullptr; // not supported
43*73471bf0Spatrick   ByteListDirective = "\t.byte\t";
44*73471bf0Spatrick   PlainStringDirective = "\t.string\t";
45*73471bf0Spatrick   CharacterLiteralSyntax = ACLS_SingleQuotePrefix;
46097a140dSpatrick 
47097a140dSpatrick   // Use .vbyte for data definition to avoid directives that apply an implicit
48097a140dSpatrick   // alignment.
49097a140dSpatrick   Data16bitsDirective = "\t.vbyte\t2, ";
50097a140dSpatrick   Data32bitsDirective = "\t.vbyte\t4, ";
51097a140dSpatrick 
52097a140dSpatrick   COMMDirectiveAlignmentIsInBytes = false;
53097a140dSpatrick   LCOMMDirectiveAlignmentType = LCOMM::Log2Alignment;
54097a140dSpatrick   HasDotTypeDotSizeDirective = false;
55097a140dSpatrick   UseIntegratedAssembler = false;
56*73471bf0Spatrick   ParseInlineAsmUsingAsmParser = true;
5709467b48Spatrick   NeedsFunctionDescriptors = true;
58*73471bf0Spatrick 
59*73471bf0Spatrick   ExceptionsType = ExceptionHandling::AIX;
6009467b48Spatrick }
6109467b48Spatrick 
isAcceptableChar(char C) const6209467b48Spatrick bool MCAsmInfoXCOFF::isAcceptableChar(char C) const {
6309467b48Spatrick   // QualName is allowed for a MCSymbolXCOFF, and
6409467b48Spatrick   // QualName contains '[' and ']'.
6509467b48Spatrick   if (C == '[' || C == ']')
6609467b48Spatrick     return true;
6709467b48Spatrick 
68097a140dSpatrick   // For AIX assembler, symbols may consist of numeric digits,
69097a140dSpatrick   // underscores, periods, uppercase or lowercase letters, or
70097a140dSpatrick   // any combination of these.
71097a140dSpatrick   return isAlnum(C) || C == '_' || C == '.';
7209467b48Spatrick }
73