MCAsmInfo.h revision 9eb158d5b4cd4f6fc80912e2dd77bdf13c3ca0e7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- llvm/MC/MCAsmInfo.h - Asm info --------------------------*- C++ -*-===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)//
87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)//===----------------------------------------------------------------------===//
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)//
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// This file contains a class to be used as the basis for target specific
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// asm writers.  This class primarily takes care of global printing constants,
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// which are used in very similar ways across all targets.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)//===----------------------------------------------------------------------===//
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef LLVM_TARGET_ASM_INFO_H
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define LLVM_TARGET_ASM_INFO_H
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "llvm/MC/MCDirectives.h"
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <cassert>
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace llvm {
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  class MCSection;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class MCContext;
25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  /// MCAsmInfo - This class is intended to be used as a base class for asm
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// properties and features specific to the target.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  namespace ExceptionHandling { enum ExceptionsType { None, Dwarf, SjLj }; }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  class MCAsmInfo {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  protected:
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===------------------------------------------------------------------===//
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Properties to be set by the target writer, used to configure asm printer.
34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    //
35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    /// HasSubsectionsViaSymbols - True if this target has the MachO
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// .subsections_via_symbols directive.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasSubsectionsViaSymbols;           // Default is false.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    /// HasMachoZeroFillDirective - True if this is a MachO target that supports
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// the macho-specific .zerofill directive for emitting BSS Symbols.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasMachoZeroFillDirective;               // Default is false.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HasStaticCtorDtorReferenceInStaticMode - True if the compiler should
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// emit a ".reference .constructors_used" or ".reference .destructors_used"
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// directive after the a static ctor/dtor list.  This directive is only
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// emitted in Static relocation model.
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    bool HasStaticCtorDtorReferenceInStaticMode;  // Default is false.
49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// NeedsSet - True if target asm treats expressions in data directives
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// as linktime-relocatable.  For assembly-time computation, we need to
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// use a .set.  Thus:
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /// .set w, x-y
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /// .long w
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /// is computed at assembly time, while
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /// .long x-y
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// is relocated if the relative locations of x and y change at linktime.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// We want both these things in different places.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool NeedsSet;                           // Defaults to false.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// MaxInstLength - This is the maximum possible length of an instruction,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// which is needed to compute the size of an inline asm.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned MaxInstLength;                  // Defaults to 4.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// PCSymbol - The symbol used to represent the current PC.  Used in PC
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// relative expressions.
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *PCSymbol;                    // Defaults to "$".
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// SeparatorChar - This character, if specified, is used to separate
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// instructions from each other when on the same line.  This is used to
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// measure inline asm instructions.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char SeparatorChar;                      // Defaults to ';'
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// CommentColumn - This indicates the comment num (zero-based) at
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// which asm comments should be printed.
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    unsigned CommentColumn;                  // Defaults to 60
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    /// CommentString - This indicates the comment character used by the
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// assembler.
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char *CommentString;               // Defaults to "#"
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /// GlobalPrefix - If this is set to a non-empty string, it is prepended
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    /// onto all global symbols.  This is often used for "_" or ".".
84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const char *GlobalPrefix;                // Defaults to ""
85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    /// PrivateGlobalPrefix - This prefix is used for globals like constant
87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    /// pool entries that are completely private to the .s file and should not
88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    /// have names in the .o file.  This is often "." or "L".
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *PrivateGlobalPrefix;         // Defaults to "."
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// LinkerPrivateGlobalPrefix - This prefix is used for symbols that should
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// be passed through the assembler but be removed by the linker.  This
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// is "l" on Darwin, currently used for some ObjC metadata.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *LinkerPrivateGlobalPrefix;   // Defaults to ""
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// InlineAsmStart/End - If these are nonempty, they contain a directive to
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// emit before and after an inline assembly statement.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *InlineAsmStart;              // Defaults to "#APP\n"
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *InlineAsmEnd;                // Defaults to "#NO_APP\n"
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AssemblerDialect - Which dialect of an assembler variant to use.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned AssemblerDialect;               // Defaults to 0
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AllowQuotesInName - This is true if the assembler allows for complex
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// symbol names to be surrounded in quotes.  This defaults to false.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool AllowQuotesInName;
107a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AllowNameToStartWithDigit - This is true if the assembler allows symbol
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// names to start with a digit (e.g., "0x0021").  This defaults to false.
110a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool AllowNameToStartWithDigit;
111a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===--- Data Emission Directives -------------------------------------===//
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// ZeroDirective - this should be set to the directive used to get some
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// number of zero bytes emitted to the current section.  Common cases are
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// "\t.zero\t" and "\t.space\t".  If this is set to null, the
117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    /// Data*bitsDirective's will be used to emit zero bytes.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *ZeroDirective;               // Defaults to "\t.zero\t"
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AsciiDirective - This directive allows emission of an ascii string with
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// the standard C escape characters embedded into it.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *AsciiDirective;              // Defaults to "\t.ascii\t"
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AscizDirective - If not null, this allows for special handling of
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// zero terminated strings on this target.  This is commonly supported as
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// ".asciz".  If a target doesn't support this, it can be set to null.
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *AscizDirective;              // Defaults to "\t.asciz\t"
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// DataDirectives - These directives are used to output some unit of
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// integer data to the current section.  If a data directive is set to
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// null, smaller data directives will be used to emit the large sizes.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *Data8bitsDirective;          // Defaults to "\t.byte\t"
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *Data16bitsDirective;         // Defaults to "\t.short\t"
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *Data32bitsDirective;         // Defaults to "\t.long\t"
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *Data64bitsDirective;         // Defaults to "\t.quad\t"
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// getDataASDirective - Return the directive that should be used to emit
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// data of the specified size to the specified numeric address space.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual const char *getDataASDirective(unsigned Size, unsigned AS) const {
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      assert(AS != 0 && "Don't know the directives for default addr space");
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 0;
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// SunStyleELFSectionSwitchSyntax - This is true if this target uses "Sun
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// Style" syntax for section switching ("#alloc,#write" etc) instead of the
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// normal ELF syntax (,"a,w") in .section directives.
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool SunStyleELFSectionSwitchSyntax;     // Defaults to false.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// UsesELFSectionDirectiveForBSS - This is true if this target uses ELF
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// '.section' directive before the '.bss' one. It's used for PPC/Linux
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// which doesn't support the '.bss' directive only.
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool UsesELFSectionDirectiveForBSS;      // Defaults to false.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===--- Alignment Information ----------------------------------------===//
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AlignDirective - The directive used to emit round up to an alignment
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// boundary.
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ///
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *AlignDirective;              // Defaults to "\t.align\t"
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AlignmentIsInBytes - If this is true (the default) then the asmprinter
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// emits ".align N" directives, where N is the number of bytes to align to.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// Otherwise, it emits ".align log2(N)", e.g. 3 to align to an 8 byte
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// boundary.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool AlignmentIsInBytes;                 // Defaults to true
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// TextAlignFillValue - If non-zero, this is used to fill the executable
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// space created as the result of a alignment directive.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned TextAlignFillValue;             // Defaults to 0
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===--- Section Switching Directives ---------------------------------===//
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// JumpTableDirective - if non-null, the directive to emit before jump
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// table entries.  FIXME: REMOVE THIS.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *JumpTableDirective;          // Defaults to NULL.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *PICJumpTableDirective;       // Defaults to NULL.
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===--- Global Variable Emission Directives --------------------------===//
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// GlobalDirective - This is the directive used to declare a global entity.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ///
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *GlobalDirective;             // Defaults to NULL.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// ExternDirective - This is the directive used to declare external
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// globals.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ///
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *ExternDirective;             // Defaults to NULL.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// SetDirective - This is the name of a directive that can be used to tell
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// the assembler to set the value of a variable to some expression.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *SetDirective;                // Defaults to null.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HasLCOMMDirective - This is true if the target supports the .lcomm
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// directive.
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasLCOMMDirective;              // Defaults to false.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// COMMDirectiveTakesAlignment - True if COMMDirective take a third
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// argument that specifies the alignment of the declaration.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool COMMDirectiveTakesAlignment;        // Defaults to true.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HasDotTypeDotSizeDirective - True if the target has .type and .size
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// directives, this is true for most ELF targets.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasDotTypeDotSizeDirective;         // Defaults to true.
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HasSingleParameterDotFile - True if the target has a single parameter
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// .file directive, this is true for ELF targets.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasSingleParameterDotFile;          // Defaults to true.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HasNoDeadStrip - True if this target supports the MachO .no_dead_strip
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// directive.
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasNoDeadStrip;                     // Defaults to false.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// WeakRefDirective - This directive, if non-null, is used to declare a
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// global as being a weak undefined symbol.
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *WeakRefDirective;            // Defaults to NULL.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// WeakDefDirective - This directive, if non-null, is used to declare a
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// global as being a weak defined symbol.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *WeakDefDirective;            // Defaults to NULL.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// LinkOnceDirective - This directive, if non-null is used to declare a
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// global as being a weak defined symbol.  This is used on cygwin/mingw.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *LinkOnceDirective;           // Defaults to NULL.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HiddenVisibilityAttr - This attribute, if not MCSA_Invalid, is used to
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// declare a symbol as having hidden visibility.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MCSymbolAttr HiddenVisibilityAttr;       // Defaults to MCSA_Hidden.
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// ProtectedVisibilityAttr - This attribute, if not MCSA_Invalid, is used
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// to declare a symbol as having protected visibility.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MCSymbolAttr ProtectedVisibilityAttr;    // Defaults to MCSA_Protected
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===--- Dwarf Emission Directives -----------------------------------===//
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AbsoluteDebugSectionOffsets - True if we should emit abolute section
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// offsets for debug information.
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool AbsoluteDebugSectionOffsets;        // Defaults to false.
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// AbsoluteEHSectionOffsets - True if we should emit abolute section
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// offsets for EH information. Defaults to false.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool AbsoluteEHSectionOffsets;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// HasLEB128 - True if target asm supports leb128 directives.
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasLEB128;                          // Defaults to false.
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// hasDotLocAndDotFile - True if target asm supports .loc and .file
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// directives for emitting debugging information.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool HasDotLocAndDotFile;                // Defaults to false.
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// SupportsDebugInformation - True if target supports emission of debugging
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// information.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool SupportsDebugInformation;           // Defaults to false.
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// SupportsExceptionHandling - True if target supports exception handling.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExceptionHandling::ExceptionsType ExceptionsType; // Defaults to None
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// RequiresFrameSection - true if the Dwarf2 output needs a frame section
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool DwarfRequiresFrameSection;          // Defaults to true.
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// DwarfUsesInlineInfoSection - True if DwarfDebugInlineSection is used to
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// encode inline subroutine information.
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool DwarfUsesInlineInfoSection;         // Defaults to false.
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// Is_EHSymbolPrivate - If set, the "_foo.eh" is made private so that it
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// doesn't show up in the symbol table of the object file.
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool Is_EHSymbolPrivate;                 // Defaults to true.
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// GlobalEHDirective - This is the directive used to make exception frame
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// tables globally visible.
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *GlobalEHDirective;           // Defaults to NULL.
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// SupportsWeakEmptyEHFrame - True if target assembler and linker will
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// handle a weak_definition of constant 0 for an omitted EH frame.
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool SupportsWeakOmittedEHFrame;         // Defaults to true.
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /// DwarfSectionOffsetDirective - Special section offset directive.
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* DwarfSectionOffsetDirective; // Defaults to NULL
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //===--- CBE Asm Translation Table -----------------------------------===//
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    const char *const *AsmTransCBE;          // Defaults to empty
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  public:
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    explicit MCAsmInfo();
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual ~MCAsmInfo();
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // FIXME: move these methods to DwarfPrinter when the JIT stops using them.
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static unsigned getSLEB128Size(int Value);
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    static unsigned getULEB128Size(unsigned Value);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool hasSubsectionsViaSymbols() const { return HasSubsectionsViaSymbols; }
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Data directive accessors.
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    //
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getData8bitsDirective(unsigned AS = 0) const {
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AS == 0 ? Data8bitsDirective : getDataASDirective(8, AS);
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getData16bitsDirective(unsigned AS = 0) const {
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AS == 0 ? Data16bitsDirective : getDataASDirective(16, AS);
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getData32bitsDirective(unsigned AS = 0) const {
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return AS == 0 ? Data32bitsDirective : getDataASDirective(32, AS);
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getData64bitsDirective(unsigned AS = 0) const {
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AS == 0 ? Data64bitsDirective : getDataASDirective(64, AS);
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    /// getNonexecutableStackSection - Targets can implement this method to
310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// specify a section to switch to if the translation unit doesn't have any
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    /// trampolines that require an executable stack.
312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    virtual MCSection *getNonexecutableStackSection(MCContext &Ctx) const {
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return 0;
314424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    }
315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    bool usesSunStyleELFSectionSwitchSyntax() const {
317424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return SunStyleELFSectionSwitchSyntax;
318424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    }
319424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
320424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    bool usesELFSectionDirectiveForBSS() const {
321424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return UsesELFSectionDirectiveForBSS;
322424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    }
323424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
324424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    // Accessors.
325424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    //
326424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    bool hasMachoZeroFillDirective() const { return HasMachoZeroFillDirective; }
327424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    bool hasStaticCtorDtorReferenceInStaticMode() const {
328424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      return HasStaticCtorDtorReferenceInStaticMode;
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool needsSet() const {
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return NeedsSet;
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned getMaxInstLength() const {
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return MaxInstLength;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getPCSymbol() const {
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return PCSymbol;
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    char getSeparatorChar() const {
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SeparatorChar;
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned getCommentColumn() const {
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return CommentColumn;
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getCommentString() const {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return CommentString;
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getGlobalPrefix() const {
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return GlobalPrefix;
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char *getPrivateGlobalPrefix() const {
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return PrivateGlobalPrefix;
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char *getLinkerPrivateGlobalPrefix() const {
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return LinkerPrivateGlobalPrefix;
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getInlineAsmStart() const {
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return InlineAsmStart;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getInlineAsmEnd() const {
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return InlineAsmEnd;
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    unsigned getAssemblerDialect() const {
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AssemblerDialect;
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool doesAllowQuotesInName() const {
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AllowQuotesInName;
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool doesAllowNameToStartWithDigit() const {
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AllowNameToStartWithDigit;
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getZeroDirective() const {
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return ZeroDirective;
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getAsciiDirective() const {
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AsciiDirective;
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getAscizDirective() const {
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return AscizDirective;
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getJumpTableDirective(bool isPIC) const {
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return isPIC ? PICJumpTableDirective : JumpTableDirective;
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getAlignDirective() const {
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AlignDirective;
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool getAlignmentIsInBytes() const {
388a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return AlignmentIsInBytes;
389a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
390a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    unsigned getTextAlignFillValue() const {
391a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return TextAlignFillValue;
392a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const char *getGlobalDirective() const {
394a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return GlobalDirective;
395a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
396a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const char *getExternDirective() const {
397a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return ExternDirective;
398a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
399a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const char *getSetDirective() const {
400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return SetDirective;
401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
402a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool hasLCOMMDirective() const { return HasLCOMMDirective; }
403a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool getCOMMDirectiveTakesAlignment() const {
404a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return COMMDirectiveTakesAlignment;
405a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
406a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool hasDotTypeDotSizeDirective() const {return HasDotTypeDotSizeDirective;}
407a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool hasSingleParameterDotFile() const { return HasSingleParameterDotFile; }
408a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool hasNoDeadStrip() const { return HasNoDeadStrip; }
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getWeakRefDirective() const { return WeakRefDirective; }
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getWeakDefDirective() const { return WeakDefDirective; }
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getLinkOnceDirective() const { return LinkOnceDirective; }
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    MCSymbolAttr getProtectedVisibilityAttr() const {
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return ProtectedVisibilityAttr;
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool isAbsoluteDebugSectionOffsets() const {
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AbsoluteDebugSectionOffsets;
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool isAbsoluteEHSectionOffsets() const {
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AbsoluteEHSectionOffsets;
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool hasLEB128() const {
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return HasLEB128;
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool hasDotLocAndDotFile() const {
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return HasDotLocAndDotFile;
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool doesSupportDebugInformation() const {
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SupportsDebugInformation;
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool doesSupportExceptionHandling() const {
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return ExceptionsType != ExceptionHandling::None;
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExceptionHandling::ExceptionsType getExceptionHandlingType() const {
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return ExceptionsType;
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool doesDwarfRequireFrameSection() const {
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return DwarfRequiresFrameSection;
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool doesDwarfUsesInlineInfoSection() const {
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return DwarfUsesInlineInfoSection;
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool is_EHSymbolPrivate() const {
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return Is_EHSymbolPrivate;
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char *getGlobalEHDirective() const {
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return GlobalEHDirective;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool getSupportsWeakOmittedEHFrame() const {
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return SupportsWeakOmittedEHFrame;
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *getDwarfSectionOffsetDirective() const {
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return DwarfSectionOffsetDirective;
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char *const *getAsmCBE() const {
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return AsmTransCBE;
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)