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)