MCAsmInfo.h revision f9f93e4388962b678fd59b7af5212d4cc0d38be2
182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//===-- llvm/MC/MCAsmInfo.h - Asm info --------------------------*- C++ -*-===//
282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//                     The LLVM Compiler Infrastructure
482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// This file is distributed under the University of Illinois Open Source
682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// License. See LICENSE.TXT for details.
782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//===----------------------------------------------------------------------===//
982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
1082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// This file contains a class to be used as the basis for target specific
1182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// asm writers.  This class primarily takes care of global printing constants,
1282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner// which are used in very similar ways across all targets.
1382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//
1482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner//===----------------------------------------------------------------------===//
15af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner
1682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#ifndef LLVM_TARGET_ASM_INFO_H
1782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#define LLVM_TARGET_ASM_INFO_H
18af76e592c7f9deff0e55c13dbb4a34f07f1c7f64Chris Lattner
19152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner#include "llvm/MC/MCDirectives.h"
2082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#include <cassert>
2182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
2282d748d55c549dd055528ed10dbb534618ca8115Chris Lattnernamespace llvm {
23f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner  class MCSection;
24f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner  class MCContext;
25f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner
2682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  /// MCAsmInfo - This class is intended to be used as a base class for asm
2782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  /// properties and features specific to the target.
2882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  namespace ExceptionHandling { enum ExceptionsType { None, Dwarf, SjLj }; }
2982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
3082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  class MCAsmInfo {
3182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  protected:
3282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===------------------------------------------------------------------===//
3382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    // Properties to be set by the target writer, used to configure asm printer.
3482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //
3582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
36f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    /// HasSubsectionsViaSymbols - True if this target has the MachO
37f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    /// .subsections_via_symbols directive.
38f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    bool HasSubsectionsViaSymbols;           // Default is false.
39f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner
40aac138e84dee1cb3ffc1035b2a1e4361fe0b4f80Chris Lattner    /// HasMachoZeroFillDirective - True if this is a MachO target that supports
41aac138e84dee1cb3ffc1035b2a1e4361fe0b4f80Chris Lattner    /// the macho-specific .zerofill directive for emitting BSS Symbols.
4271eae713153e564ec743c5c4162ff258c255de78Chris Lattner    bool HasMachoZeroFillDirective;               // Default is false.
4371eae713153e564ec743c5c4162ff258c255de78Chris Lattner
4471eae713153e564ec743c5c4162ff258c255de78Chris Lattner    /// HasStaticCtorDtorReferenceInStaticMode - True if the compiler should
4571eae713153e564ec743c5c4162ff258c255de78Chris Lattner    /// emit a ".reference .constructors_used" or ".reference .destructors_used"
4671eae713153e564ec743c5c4162ff258c255de78Chris Lattner    /// directive after the a static ctor/dtor list.  This directive is only
4771eae713153e564ec743c5c4162ff258c255de78Chris Lattner    /// emitted in Static relocation model.
4871eae713153e564ec743c5c4162ff258c255de78Chris Lattner    bool HasStaticCtorDtorReferenceInStaticMode;  // Default is false.
49aac138e84dee1cb3ffc1035b2a1e4361fe0b4f80Chris Lattner
5082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// NeedsSet - True if target asm treats expressions in data directives
5182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// as linktime-relocatable.  For assembly-time computation, we need to
5282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// use a .set.  Thus:
5382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .set w, x-y
5482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .long w
5582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// is computed at assembly time, while
5682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .long x-y
5782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// is relocated if the relative locations of x and y change at linktime.
5882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// We want both these things in different places.
59eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool NeedsSet;                           // Defaults to false.
6082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
6182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// MaxInstLength - This is the maximum possible length of an instruction,
6282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// which is needed to compute the size of an inline asm.
63eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned MaxInstLength;                  // Defaults to 4.
6482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
6582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// PCSymbol - The symbol used to represent the current PC.  Used in PC
6682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// relative expressions.
67eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PCSymbol;                    // Defaults to "$".
6882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
6982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SeparatorChar - This character, if specified, is used to separate
7082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// instructions from each other when on the same line.  This is used to
7182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// measure inline asm instructions.
72eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    char SeparatorChar;                      // Defaults to ';'
7382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
7482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// CommentColumn - This indicates the comment num (zero-based) at
7582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// which asm comments should be printed.
76eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned CommentColumn;                  // Defaults to 60
7782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
7882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// CommentString - This indicates the comment character used by the
7982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// assembler.
80eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *CommentString;               // Defaults to "#"
8182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
8282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalPrefix - If this is set to a non-empty string, it is prepended
8382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// onto all global symbols.  This is often used for "_" or ".".
84eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *GlobalPrefix;                // Defaults to ""
8582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
8682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// PrivateGlobalPrefix - This prefix is used for globals like constant
8782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// pool entries that are completely private to the .s file and should not
8882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// have names in the .o file.  This is often "." or "L".
89eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PrivateGlobalPrefix;         // Defaults to "."
9082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
9182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// LinkerPrivateGlobalPrefix - This prefix is used for symbols that should
9282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// be passed through the assembler but be removed by the linker.  This
9382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// is "l" on Darwin, currently used for some ObjC metadata.
94eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *LinkerPrivateGlobalPrefix;   // Defaults to ""
9582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
9682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// InlineAsmStart/End - If these are nonempty, they contain a directive to
9782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// emit before and after an inline assembly statement.
98eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *InlineAsmStart;              // Defaults to "#APP\n"
99eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *InlineAsmEnd;                // Defaults to "#NO_APP\n"
10082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
10182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AssemblerDialect - Which dialect of an assembler variant to use.
102eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned AssemblerDialect;               // Defaults to 0
10382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
10482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AllowQuotesInName - This is true if the assembler allows for complex
10582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// symbol names to be surrounded in quotes.  This defaults to false.
10682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool AllowQuotesInName;
107c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov
108c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov    /// AllowNameToStartWithDigit - This is true if the assembler allows symbol
109c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov    /// names to start with a digit (e.g., "0x0021").  This defaults to false.
110c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov    bool AllowNameToStartWithDigit;
11182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
11282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Data Emission Directives -------------------------------------===//
11382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
11482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ZeroDirective - this should be set to the directive used to get some
11582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// number of zero bytes emitted to the current section.  Common cases are
11682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// "\t.zero\t" and "\t.space\t".  If this is set to null, the
11782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Data*bitsDirective's will be used to emit zero bytes.
118eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ZeroDirective;               // Defaults to "\t.zero\t"
11982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
12082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AsciiDirective - This directive allows emission of an ascii string with
12182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// the standard C escape characters embedded into it.
122eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *AsciiDirective;              // Defaults to "\t.ascii\t"
12382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
12482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AscizDirective - If not null, this allows for special handling of
12582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// zero terminated strings on this target.  This is commonly supported as
12682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ".asciz".  If a target doesn't support this, it can be set to null.
127eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *AscizDirective;              // Defaults to "\t.asciz\t"
12882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
12982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// DataDirectives - These directives are used to output some unit of
13082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// integer data to the current section.  If a data directive is set to
13182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// null, smaller data directives will be used to emit the large sizes.
132eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data8bitsDirective;          // Defaults to "\t.byte\t"
133eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data16bitsDirective;         // Defaults to "\t.short\t"
134eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data32bitsDirective;         // Defaults to "\t.long\t"
135eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *Data64bitsDirective;         // Defaults to "\t.quad\t"
13682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
13782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// getDataASDirective - Return the directive that should be used to emit
13882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// data of the specified size to the specified numeric address space.
13982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    virtual const char *getDataASDirective(unsigned Size, unsigned AS) const {
14082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      assert(AS != 0 && "Don't know the directives for default addr space");
1415ec2e6b586bf4029763711d6860b57d312eb2d2eChris Lattner      return 0;
14282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
14382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
14482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SunStyleELFSectionSwitchSyntax - This is true if this target uses "Sun
14582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Style" syntax for section switching ("#alloc,#write" etc) instead of the
14682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// normal ELF syntax (,"a,w") in .section directives.
147eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool SunStyleELFSectionSwitchSyntax;     // Defaults to false.
14882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
14982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// UsesELFSectionDirectiveForBSS - This is true if this target uses ELF
15082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// '.section' directive before the '.bss' one. It's used for PPC/Linux
15182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// which doesn't support the '.bss' directive only.
152eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool UsesELFSectionDirectiveForBSS;      // Defaults to false.
15382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
15482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Alignment Information ----------------------------------------===//
15582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
15682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AlignDirective - The directive used to emit round up to an alignment
15782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// boundary.
15882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
159eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *AlignDirective;              // Defaults to "\t.align\t"
16082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
16182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AlignmentIsInBytes - If this is true (the default) then the asmprinter
16282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// emits ".align N" directives, where N is the number of bytes to align to.
16382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Otherwise, it emits ".align log2(N)", e.g. 3 to align to an 8 byte
16482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// boundary.
165eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool AlignmentIsInBytes;                 // Defaults to true
16682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
16782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// TextAlignFillValue - If non-zero, this is used to fill the executable
16882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// space created as the result of a alignment directive.
169eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    unsigned TextAlignFillValue;             // Defaults to 0
17082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
17182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Section Switching Directives ---------------------------------===//
17282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
17382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// JumpTableDirective - if non-null, the directive to emit before jump
17482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// table entries.  FIXME: REMOVE THIS.
175eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *JumpTableDirective;          // Defaults to NULL.
176eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *PICJumpTableDirective;       // Defaults to NULL.
17782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
17882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
17982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Global Variable Emission Directives --------------------------===//
18082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
18182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalDirective - This is the directive used to declare a global entity.
18282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
183eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *GlobalDirective;             // Defaults to NULL.
18482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
18582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// ExternDirective - This is the directive used to declare external
18682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// globals.
18782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ///
188eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *ExternDirective;             // Defaults to NULL.
18982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
19082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SetDirective - This is the name of a directive that can be used to tell
19182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// the assembler to set the value of a variable to some expression.
192eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *SetDirective;                // Defaults to null.
19382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
19482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// LCOMMDirective - This is the name of a directive (if supported) that can
19582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// be used to efficiently declare a local (internal) block of zero
19682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// initialized data in the .bss/.data section.  The syntax expected is:
197814819f6ea7fb0638fe73920299fda0da941a59eChris Lattner    /// @verbatim <LCOMMDirective> SYMBOLNAME LENGTHINBYTES
19882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// @endverbatim
199eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *LCOMMDirective;              // Defaults to null.
20082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
201eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *COMMDirective;               // Defaults to "\t.comm\t".
20282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
20382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// COMMDirectiveTakesAlignment - True if COMMDirective take a third
20482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// argument that specifies the alignment of the declaration.
205eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool COMMDirectiveTakesAlignment;        // Defaults to true.
20682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
20782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HasDotTypeDotSizeDirective - True if the target has .type and .size
20882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// directives, this is true for most ELF targets.
209eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool HasDotTypeDotSizeDirective;         // Defaults to true.
21082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
21182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HasSingleParameterDotFile - True if the target has a single parameter
21282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// .file directive, this is true for ELF targets.
213eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    bool HasSingleParameterDotFile;          // Defaults to true.
21482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
2153a9be0ee36fe2143f514d28315f3dc1bda132b2eChris Lattner    /// HasNoDeadStrip - True if this target supports the MachO .no_dead_strip
2163a9be0ee36fe2143f514d28315f3dc1bda132b2eChris Lattner    /// directive.
2173a9be0ee36fe2143f514d28315f3dc1bda132b2eChris Lattner    bool HasNoDeadStrip;                     // Defaults to false.
21882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
21982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// WeakRefDirective - This directive, if non-null, is used to declare a
22082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// global as being a weak undefined symbol.
221eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *WeakRefDirective;            // Defaults to NULL.
22282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
22382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// WeakDefDirective - This directive, if non-null, is used to declare a
22482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// global as being a weak defined symbol.
225eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *WeakDefDirective;            // Defaults to NULL.
22641eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner
22741eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner    /// LinkOnceDirective - This directive, if non-null is used to declare a
22841eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner    /// global as being a weak defined symbol.  This is used on cygwin/mingw.
22941eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner    const char *LinkOnceDirective;           // Defaults to NULL.
23082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
231152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    /// HiddenVisibilityAttr - This attribute, if not MCSA_Invalid, is used to
232152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    /// declare a symbol as having hidden visibility.
233152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    MCSymbolAttr HiddenVisibilityAttr;       // Defaults to MCSA_Hidden.
23482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
235152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    /// ProtectedVisibilityAttr - This attribute, if not MCSA_Invalid, is used
236152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    /// to declare a symbol as having protected visibility.
237152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    MCSymbolAttr ProtectedVisibilityAttr;    // Defaults to MCSA_Protected
23882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
23982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- Dwarf Emission Directives -----------------------------------===//
24082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
24182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AbsoluteDebugSectionOffsets - True if we should emit abolute section
242b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    /// offsets for debug information.
243b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool AbsoluteDebugSectionOffsets;        // Defaults to false.
24482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
24582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// AbsoluteEHSectionOffsets - True if we should emit abolute section
24682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// offsets for EH information. Defaults to false.
24782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool AbsoluteEHSectionOffsets;
24882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
24982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// HasLEB128 - True if target asm supports leb128 directives.
250b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool HasLEB128;                          // Defaults to false.
25182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
25282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// hasDotLocAndDotFile - True if target asm supports .loc and .file
25382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// directives for emitting debugging information.
254b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool HasDotLocAndDotFile;                // Defaults to false.
25582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
25682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SupportsDebugInformation - True if target supports emission of debugging
25782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// information.
258b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool SupportsDebugInformation;           // Defaults to false.
25982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
260b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    /// SupportsExceptionHandling - True if target supports exception handling.
261b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    ExceptionHandling::ExceptionsType ExceptionsType; // Defaults to None
26282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
26382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// RequiresFrameSection - true if the Dwarf2 output needs a frame section
264b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool DwarfRequiresFrameSection;          // Defaults to true.
26582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
26682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// DwarfUsesInlineInfoSection - True if DwarfDebugInlineSection is used to
26782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// encode inline subroutine information.
268b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool DwarfUsesInlineInfoSection;         // Defaults to false.
26982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
27082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// Is_EHSymbolPrivate - If set, the "_foo.eh" is made private so that it
27182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// doesn't show up in the symbol table of the object file.
272b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool Is_EHSymbolPrivate;                 // Defaults to true.
273b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling
27482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// GlobalEHDirective - This is the directive used to make exception frame
27582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// tables globally visible.
276b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    const char *GlobalEHDirective;           // Defaults to NULL.
27782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
27882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// SupportsWeakEmptyEHFrame - True if target assembler and linker will
27982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// handle a weak_definition of constant 0 for an omitted EH frame.
280b9e7689c89acf9324fba9242e00a9a4b8a3a83a6Bill Wendling    bool SupportsWeakOmittedEHFrame;         // Defaults to true.
28182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
28282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    /// DwarfSectionOffsetDirective - Special section offset directive.
28382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char* DwarfSectionOffsetDirective; // Defaults to NULL
28482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
28582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //===--- CBE Asm Translation Table -----------------------------------===//
28682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
287eb2fde2c939892f620de93f56dc21ec0c36824efBill Wendling    const char *const *AsmTransCBE;          // Defaults to empty
28882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
28982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  public:
2908eeba35babf3114966fc4e6e8522057e46b610dbChris Lattner    explicit MCAsmInfo();
29182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    virtual ~MCAsmInfo();
29282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
293f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    // FIXME: move these methods to DwarfPrinter when the JIT stops using them.
29482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    static unsigned getSLEB128Size(int Value);
29582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    static unsigned getULEB128Size(unsigned Value);
29682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
297f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    bool hasSubsectionsViaSymbols() const { return HasSubsectionsViaSymbols; }
298f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner
29982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    // Data directive accessors.
30082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //
30182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData8bitsDirective(unsigned AS = 0) const {
30282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data8bitsDirective : getDataASDirective(8, AS);
30382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
30482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData16bitsDirective(unsigned AS = 0) const {
30582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data16bitsDirective : getDataASDirective(16, AS);
30682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
30782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData32bitsDirective(unsigned AS = 0) const {
30882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data32bitsDirective : getDataASDirective(32, AS);
30982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
31082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getData64bitsDirective(unsigned AS = 0) const {
31182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AS == 0 ? Data64bitsDirective : getDataASDirective(64, AS);
31282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
31382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
314f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    /// getNonexecutableStackSection - Targets can implement this method to
315f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    /// specify a section to switch to if the translation unit doesn't have any
316f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    /// trampolines that require an executable stack.
317f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    virtual MCSection *getNonexecutableStackSection(MCContext &Ctx) const {
318f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner      return 0;
319f9f93e4388962b678fd59b7af5212d4cc0d38be2Chris Lattner    }
32082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
32182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool usesSunStyleELFSectionSwitchSyntax() const {
32282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SunStyleELFSectionSwitchSyntax;
32382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
32482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
32582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool usesELFSectionDirectiveForBSS() const {
32682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return UsesELFSectionDirectiveForBSS;
32782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
32882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
32982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    // Accessors.
33082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    //
331aac138e84dee1cb3ffc1035b2a1e4361fe0b4f80Chris Lattner    bool hasMachoZeroFillDirective() const { return HasMachoZeroFillDirective; }
33271eae713153e564ec743c5c4162ff258c255de78Chris Lattner    bool hasStaticCtorDtorReferenceInStaticMode() const {
33371eae713153e564ec743c5c4162ff258c255de78Chris Lattner      return HasStaticCtorDtorReferenceInStaticMode;
33471eae713153e564ec743c5c4162ff258c255de78Chris Lattner    }
33582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool needsSet() const {
33682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return NeedsSet;
33782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
33882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getMaxInstLength() const {
33982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return MaxInstLength;
34082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
34182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getPCSymbol() const {
34282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return PCSymbol;
34382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
34482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    char getSeparatorChar() const {
34582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SeparatorChar;
34682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
34782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getCommentColumn() const {
34882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return CommentColumn;
34982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getCommentString() const {
35182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return CommentString;
35282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalPrefix() const {
35482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalPrefix;
35582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getPrivateGlobalPrefix() const {
35782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return PrivateGlobalPrefix;
35882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
35982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getLinkerPrivateGlobalPrefix() const {
36082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return LinkerPrivateGlobalPrefix;
36182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
36282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getInlineAsmStart() const {
36382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return InlineAsmStart;
36482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
36582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getInlineAsmEnd() const {
36682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return InlineAsmEnd;
36782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
36882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getAssemblerDialect() const {
36982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AssemblerDialect;
37082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
37182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesAllowQuotesInName() const {
37282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AllowQuotesInName;
37382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
374c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov    bool doesAllowNameToStartWithDigit() const {
375c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov      return AllowNameToStartWithDigit;
376c6f729ed5519cdf398ca4039dbdbea4f81433ec0Anton Korobeynikov    }
37782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getZeroDirective() const {
37882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ZeroDirective;
37982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getAsciiDirective() const {
38182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AsciiDirective;
38282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getAscizDirective() const {
38482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AscizDirective;
38582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getJumpTableDirective(bool isPIC) const {
38782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return isPIC ? PICJumpTableDirective : JumpTableDirective;
38882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
38982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getAlignDirective() const {
39082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AlignDirective;
39182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
39282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getAlignmentIsInBytes() const {
39382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AlignmentIsInBytes;
39482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
39582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    unsigned getTextAlignFillValue() const {
39682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return TextAlignFillValue;
39782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
39882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalDirective() const {
39982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalDirective;
40082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getExternDirective() const {
40282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ExternDirective;
40382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getSetDirective() const {
40582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SetDirective;
40682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
40782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getLCOMMDirective() const {
40882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return LCOMMDirective;
40982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
41082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getCOMMDirective() const {
41182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return COMMDirective;
41282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
41382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getCOMMDirectiveTakesAlignment() const {
41482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return COMMDirectiveTakesAlignment;
41582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
4163a9be0ee36fe2143f514d28315f3dc1bda132b2eChris Lattner    bool hasDotTypeDotSizeDirective() const {return HasDotTypeDotSizeDirective;}
4173a9be0ee36fe2143f514d28315f3dc1bda132b2eChris Lattner    bool hasSingleParameterDotFile() const { return HasSingleParameterDotFile; }
4183a9be0ee36fe2143f514d28315f3dc1bda132b2eChris Lattner    bool hasNoDeadStrip() const { return HasNoDeadStrip; }
41941eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner    const char *getWeakRefDirective() const { return WeakRefDirective; }
42041eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner    const char *getWeakDefDirective() const { return WeakDefDirective; }
42141eb8b47717e1fe1a6d0e99ec1b4e890091f77aaChris Lattner    const char *getLinkOnceDirective() const { return LinkOnceDirective; }
422152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner
423152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    MCSymbolAttr getHiddenVisibilityAttr() const { return HiddenVisibilityAttr;}
424152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner    MCSymbolAttr getProtectedVisibilityAttr() const {
425152a29bfa6fa505182658d046bc75626e10d67c3Chris Lattner      return ProtectedVisibilityAttr;
42682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
42782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool isAbsoluteDebugSectionOffsets() const {
42882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AbsoluteDebugSectionOffsets;
42982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool isAbsoluteEHSectionOffsets() const {
43182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AbsoluteEHSectionOffsets;
43282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool hasLEB128() const {
43482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HasLEB128;
43582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool hasDotLocAndDotFile() const {
43782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return HasDotLocAndDotFile;
43882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
43982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesSupportDebugInformation() const {
44082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SupportsDebugInformation;
44182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
44282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesSupportExceptionHandling() const {
44382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ExceptionsType != ExceptionHandling::None;
44482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
44582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    ExceptionHandling::ExceptionsType getExceptionHandlingType() const {
44682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return ExceptionsType;
44782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
44882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesDwarfRequireFrameSection() const {
44982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return DwarfRequiresFrameSection;
45082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
45182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool doesDwarfUsesInlineInfoSection() const {
45282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return DwarfUsesInlineInfoSection;
45382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
45482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool is_EHSymbolPrivate() const {
45582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return Is_EHSymbolPrivate;
45682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
45782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getGlobalEHDirective() const {
45882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return GlobalEHDirective;
45982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    bool getSupportsWeakOmittedEHFrame() const {
46182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return SupportsWeakOmittedEHFrame;
46282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46382d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *getDwarfSectionOffsetDirective() const {
46482d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return DwarfSectionOffsetDirective;
46582d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46682d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    const char *const *getAsmCBE() const {
46782d748d55c549dd055528ed10dbb534618ca8115Chris Lattner      return AsmTransCBE;
46882d748d55c549dd055528ed10dbb534618ca8115Chris Lattner    }
46982d748d55c549dd055528ed10dbb534618ca8115Chris Lattner  };
47082d748d55c549dd055528ed10dbb534618ca8115Chris Lattner}
47182d748d55c549dd055528ed10dbb534618ca8115Chris Lattner
47282d748d55c549dd055528ed10dbb534618ca8115Chris Lattner#endif
473