Add method to query for 'NoAlias' attribute on call/invoke instructions.
[oota-llvm.git] / include / llvm / Support / MachO.h
index 69043b6c79b6f9bdd868d378fd45a4417aa065da..7f28c3f50021d752a23c39f4e2ecc1477b1ab77b 100644 (file)
@@ -23,7 +23,7 @@ namespace llvm {
   namespace MachO {
     // Enums from <mach-o/loader.h>
     enum {
-      // Constants for the "magic" field in llvm::MachO::mach_header and 
+      // Constants for the "magic" field in llvm::MachO::mach_header and
       // llvm::MachO::mach_header_64
       HeaderMagic32         = 0xFEEDFACEu, // MH_MAGIC
       HeaderMagic32Swapped  = 0xCEFAEDFEu, // MH_CIGAM
@@ -71,7 +71,7 @@ namespace llvm {
       HeaderFlagBitNoReexportedDylibs     = 0x00100000u, // MH_NO_REEXPORTED_DYLIBS
       HeaderFlagBitPIE                    = 0x00200000u, // MH_PIE
       HeaderFlagBitDeadStrippableDylib    = 0x00400000u, // MH_DEAD_STRIPPABLE_DYLIB
-      
+
       // Constants for the "cmd" field in llvm::MachO::load_command
       LoadCommandDynamicLinkerRequired    = 0x80000000u, // LC_REQ_DYLD
       LoadCommandSegment32                = 0x00000001u, // LC_SEGMENT
@@ -110,7 +110,15 @@ namespace llvm {
       LoadCommandDynamicLinkerInfo        = 0x00000022u, // LC_DYLD_INFO
       LoadCommandDynamicLinkerInfoOnly    = 0x80000022u, // LC_DYLD_INFO_ONLY
       LoadCommandDylibLoadUpward          = 0x80000023u, // LC_LOAD_UPWARD_DYLIB
-      
+      LoadCommandVersionMinMacOSX         = 0x00000024u, // LC_VERSION_MIN_MACOSX
+      LoadCommandVersionMinIPhoneOS       = 0x00000025u, // LC_VERSION_MIN_IPHONEOS
+      LoadCommandFunctionStarts           = 0x00000026u, // LC_FUNCTION_STARTS
+      LoadCommandDyldEnvironment          = 0x00000027u, // LC_DYLD_ENVIRONMENT
+      LoadCommandMain                     = 0x80000028u, // LC_MAIN
+      LoadCommandDataInCode               = 0x00000029u, // LC_DATA_IN_CODE
+      LoadCommandSourceVersion            = 0x0000002Au, // LC_SOURCE_VERSION
+      LoadCommandCodeSignDRs              = 0x0000002Bu, // LC_DYLIB_CODE_SIGN_DRS
+
       // Constant bits for the "flags" field in llvm::MachO::segment_command
       SegmentCommandFlagBitHighVM             = 0x1u, // SG_HIGHVM
       SegmentCommandFlagBitFixedVMLibrary     = 0x2u, // SG_FVMLIB
@@ -166,50 +174,50 @@ namespace llvm {
 
       RebaseTypePointer                     = 1u, // REBASE_TYPE_POINTER
       RebaseTypeTextAbsolute32              = 2u, // REBASE_TYPE_TEXT_ABSOLUTE32
-      RebaseTypeTextPCRelative32           = 3u, // REBASE_TYPE_TEXT_PCREL32
+      RebaseTypeTextPCRelative32            = 3u, // REBASE_TYPE_TEXT_PCREL32
 
       RebaseOpcodeMask                          = 0xF0u, // REBASE_OPCODE_MASK
       RebaseImmediateMask                       = 0x0Fu, // REBASE_IMMEDIATE_MASK
       RebaseOpcodeDone                          = 0x00u, // REBASE_OPCODE_DONE
       RebaseOpcodeSetTypeImmediate              = 0x10u, // REBASE_OPCODE_SET_TYPE_IMM
-      RebaseOpcodeSetSegmentAndOffsetULEB      = 0x20u, // REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      RebaseOpcodeSetSegmentAndOffsetULEB       = 0x20u, // REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
       RebaseOpcodeAddAddressULEB                = 0x30u, // REBASE_OPCODE_ADD_ADDR_ULEB
-      RebaseOpcodeAddAddressImmediateScaled    = 0x40u, // REBASE_OPCODE_ADD_ADDR_IMM_SCALED
-      RebaseOpcodeDoRebaseImmediateTimes       = 0x50u, // REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      RebaseOpcodeAddAddressImmediateScaled     = 0x40u, // REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      RebaseOpcodeDoRebaseImmediateTimes        = 0x50u, // REBASE_OPCODE_DO_REBASE_IMM_TIMES
       RebaseOpcodeDoRebaseULEBTimes             = 0x60u, // REBASE_OPCODE_DO_REBASE_ULEB_TIMES
       RebaseOpcodeDoRebaseAddAddressULEB        = 0x70u, // REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB
       RebaseOpcodeDoRebaseULEBTimesSkippingULEB = 0x80u, // REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB
 
 
       BindTypePointer           = 1u, // BIND_TYPE_POINTER
-      BindTypeTextAbsolute32   = 2u, // BIND_TYPE_TEXT_ABSOLUTE32
-      BindTypeTextPCRelative32 = 3u, // BIND_TYPE_TEXT_PCREL32
+      BindTypeTextAbsolute32    = 2u, // BIND_TYPE_TEXT_ABSOLUTE32
+      BindTypeTextPCRelative32  = 3u, // BIND_TYPE_TEXT_PCREL32
 
       BindSpecialDylibSelf            =  0u, // BIND_SPECIAL_DYLIB_SELF
       BindSpecialDylibMainExecutable  = -1u, // BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE
       BindSpecialDylibFlatLookup      = -2u, // BIND_SPECIAL_DYLIB_FLAT_LOOKUP
 
       BindSymbolFlagsWeakImport         = 0x1u, // BIND_SYMBOL_FLAGS_WEAK_IMPORT
-      BindSymbolFlagsNonWeakDefinition = 0x8u, // BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION
+      BindSymbolFlagsNonWeakDefinition  = 0x8u, // BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION
 
       BindOpcodeMask                            = 0xF0u, // BIND_OPCODE_MASK
       BindImmediateMask                         = 0x0Fu, // BIND_IMMEDIATE_MASK
       BindOpcodeDone                            = 0x00u, // BIND_OPCODE_DONE
       BindOpcodeSetDylibOrdinalImmediate        = 0x10u, // BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
       BindOpcodeSetDylibOrdinalULEB             = 0x20u, // BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB
-      BindOpcodeSetDylibSpecialImmediate       = 0x30u, // BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
-      BindOpcodeSetSymbolTrailingFlagsImmediate        = 0x40u, // BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
-      BindOpcodeSetTypeImmediate               = 0x50u, // BIND_OPCODE_SET_TYPE_IMM
+      BindOpcodeSetDylibSpecialImmediate        = 0x30u, // BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
+      BindOpcodeSetSymbolTrailingFlagsImmediate = 0x40u, // BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      BindOpcodeSetTypeImmediate                = 0x50u, // BIND_OPCODE_SET_TYPE_IMM
       BindOpcodeSetAppendSLEB                   = 0x60u, // BIND_OPCODE_SET_ADDEND_SLEB
       BindOpcodeSetSegmentAndOffsetULEB         = 0x70u, // BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
       BindOpcodeAddAddressULEB                  = 0x80u, // BIND_OPCODE_ADD_ADDR_ULEB
       BindOpcodeDoBind                          = 0x90u, // BIND_OPCODE_DO_BIND
-      BindOpcodeDoBindAddAddressULEB           = 0xA0u, // BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB
-      BindOpcodeDoBindAddAddressImmediateScaled        = 0xB0u, // BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED
+      BindOpcodeDoBindAddAddressULEB            = 0xA0u, // BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB
+      BindOpcodeDoBindAddAddressImmediateScaled = 0xB0u, // BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED
       BindOpcodeDoBindULEBTimesSkippingULEB     = 0xC0u, // BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB
 
       ExportSymbolFlagsKindMask           = 0x03u, // EXPORT_SYMBOL_FLAGS_KIND_MASK
-      ExportSymbolFlagsKindRegular       = 0x00u, // EXPORT_SYMBOL_FLAGS_KIND_REGULAR
+      ExportSymbolFlagsKindRegular        = 0x00u, // EXPORT_SYMBOL_FLAGS_KIND_REGULAR
       ExportSymbolFlagsKindThreadLocal    = 0x01u, // EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL
       ExportSymbolFlagsWeakDefinition     = 0x04u, // EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION
       ExportSymbolFlagsIndirectDefinition = 0x08u, // EXPORT_SYMBOL_FLAGS_INDIRECT_DEFINITION
@@ -219,7 +227,7 @@ namespace llvm {
       // Constant masks for the "n_type" field in llvm::MachO::nlist and
       // llvm::MachO::nlist_64
       NlistMaskStab             = 0xe0, // N_STAB
-      NlistMaskPrivateExternal = 0x10, // N_PEXT
+      NlistMaskPrivateExternal  = 0x10, // N_PEXT
       NlistMaskType             = 0x0e, // N_TYPE
       NlistMaskExternal         = 0x01, // N_EXT
 
@@ -236,42 +244,45 @@ namespace llvm {
       NListSectionNoSection     = 0u, // NO_SECT
       NListSectionMaxSection    = 0xffu, // MAX_SECT
 
+      NListDescWeakRef          = 0x40u,
+      NListDescWeakDef          = 0x80u,
+
       // Constant values for the "n_type" field in llvm::MachO::nlist and
       // llvm::MachO::nlist_64 when "(n_type & NlistMaskStab) != 0"
-      StabGlobalSymbol          = 0x20u,  // N_GSYM    
-      StabFunctionName          = 0x22u,  // N_FNAME   
-      StabFunction              = 0x24u,  // N_FUN     
-      StabStaticSymbol          = 0x26u,  // N_STSYM   
-      StabLocalCommon           = 0x28u,  // N_LCSYM   
-      StabBeginSymbol           = 0x2Eu,  // N_BNSYM   
-      StabSourceFileOptions     = 0x3Cu,  // N_OPT     
-      StabRegisterSymbol        = 0x40u,  // N_RSYM    
-      StabSourceLine            = 0x44u,  // N_SLINE   
-      StabEndSymbol             = 0x4Eu,  // N_ENSYM   
-      StabStructureType         = 0x60u,  // N_SSYM    
-      StabSourceFileName        = 0x64u,  // N_SO      
-      StabObjectFileName        = 0x66u,  // N_OSO     
-      StabLocalSymbol           = 0x80u,  // N_LSYM    
-      StabBeginIncludeFileName  = 0x82u,  // N_BINCL   
-      StabIncludeFileName       = 0x84u,  // N_SOL     
-      StabCompilerParameters    = 0x86u,  // N_PARAMS  
-      StabCompilerVersion       = 0x88u,  // N_VERSION 
-      StabCompilerOptLevel      = 0x8Au,  // N_OLEVEL  
-      StabParameter             = 0xA0u,  // N_PSYM    
-      StabEndIncludeFile        = 0xA2u,  // N_EINCL   
-      StabAlternateEntry        = 0xA4u,  // N_ENTRY   
-      StabLeftBracket           = 0xC0u,  // N_LBRAC   
-      StabDeletedIncludeFile    = 0xC2u,  // N_EXCL    
-      StabRightBracket          = 0xE0u,  // N_RBRAC   
-      StabBeginCommon           = 0xE2u,  // N_BCOMM   
-      StabEndCommon             = 0xE4u,  // N_ECOMM   
-      StabEndCommonLocal        = 0xE8u,  // N_ECOML   
-      StabLength                = 0xFEu   // N_LENG    
-
-    };
-    
+      StabGlobalSymbol          = 0x20u,  // N_GSYM
+      StabFunctionName          = 0x22u,  // N_FNAME
+      StabFunction              = 0x24u,  // N_FUN
+      StabStaticSymbol          = 0x26u,  // N_STSYM
+      StabLocalCommon           = 0x28u,  // N_LCSYM
+      StabBeginSymbol           = 0x2Eu,  // N_BNSYM
+      StabSourceFileOptions     = 0x3Cu,  // N_OPT
+      StabRegisterSymbol        = 0x40u,  // N_RSYM
+      StabSourceLine            = 0x44u,  // N_SLINE
+      StabEndSymbol             = 0x4Eu,  // N_ENSYM
+      StabStructureType         = 0x60u,  // N_SSYM
+      StabSourceFileName        = 0x64u,  // N_SO
+      StabObjectFileName        = 0x66u,  // N_OSO
+      StabLocalSymbol           = 0x80u,  // N_LSYM
+      StabBeginIncludeFileName  = 0x82u,  // N_BINCL
+      StabIncludeFileName       = 0x84u,  // N_SOL
+      StabCompilerParameters    = 0x86u,  // N_PARAMS
+      StabCompilerVersion       = 0x88u,  // N_VERSION
+      StabCompilerOptLevel      = 0x8Au,  // N_OLEVEL
+      StabParameter             = 0xA0u,  // N_PSYM
+      StabEndIncludeFile        = 0xA2u,  // N_EINCL
+      StabAlternateEntry        = 0xA4u,  // N_ENTRY
+      StabLeftBracket           = 0xC0u,  // N_LBRAC
+      StabDeletedIncludeFile    = 0xC2u,  // N_EXCL
+      StabRightBracket          = 0xE0u,  // N_RBRAC
+      StabBeginCommon           = 0xE2u,  // N_BCOMM
+      StabEndCommon             = 0xE4u,  // N_ECOMM
+      StabEndCommonLocal        = 0xE8u,  // N_ECOML
+      StabLength                = 0xFEu   // N_LENG
+
+    };
+
     // Structs from <mach-o/loader.h>
-    
+
     struct mach_header {
       uint32_t magic;
       uint32_t cputype;
@@ -479,12 +490,12 @@ namespace llvm {
       uint32_t nextrel;
       uint32_t locreloff;
       uint32_t nlocrel;
-    }; 
+    };
 
     struct dylib_table_of_contents {
       uint32_t symbol_index;
       uint32_t module_index;
-    }; 
+    };
 
     struct dylib_module {
       uint32_t module_name;
@@ -500,7 +511,7 @@ namespace llvm {
       uint32_t ninit_nterm;
       uint32_t objc_module_info_addr;
       uint32_t objc_module_info_size;
-    }; 
+    };
 
     struct dylib_module_64 {
       uint32_t module_name;
@@ -569,6 +580,13 @@ namespace llvm {
       uint32_t cryptid;
     };
 
+    struct version_min_command {
+      uint32_t cmd;
+      uint32_t cmdsize;
+      uint32_t version;
+      uint32_t reserved;
+    };
+
     struct dyld_info_command {
       uint32_t cmd;
       uint32_t cmdsize;
@@ -636,12 +654,12 @@ namespace llvm {
     };
 
     // Get/Set functions from <mach-o/nlist.h>
-    
+
     static inline uint16_t GET_LIBRARY_ORDINAL(uint16_t n_desc)
     {
       return (((n_desc) >> 8u) & 0xffu);
     }
-      
+
     static inline void SET_LIBRARY_ORDINAL(uint16_t &n_desc, uint8_t ordinal)
     {
       n_desc = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8));
@@ -651,7 +669,7 @@ namespace llvm {
     {
       return (n_desc >> 8u) & 0x0fu;
     }
-    
+
     static inline void SET_COMM_ALIGN (uint16_t &n_desc, uint8_t align)
     {
       n_desc = ((n_desc & 0xf0ffu) | ((align & 0x0fu) << 8u));
@@ -662,7 +680,7 @@ namespace llvm {
       // Capability bits used in the definition of cpu_type.
       CPUArchMask = 0xff000000,   // Mask for architecture bits
       CPUArchABI64 = 0x01000000,  // 64 bit ABI
-      
+
       // Constants for the cputype field.
       CPUTypeI386      = 7,
       CPUTypeX86_64    = CPUTypeI386 | CPUArchABI64,
@@ -673,11 +691,11 @@ namespace llvm {
 
 
       // Constants for the cpusubtype field.
-      
+
       // X86
       CPUSubType_I386_ALL    = 3,
       CPUSubType_X86_64_ALL  = 3,
-      
+
       // ARM
       CPUSubType_ARM_ALL     = 0,
       CPUSubType_ARM_V4T     = 5,
@@ -687,7 +705,7 @@ namespace llvm {
 
       // PowerPC
       CPUSubType_POWERPC_ALL = 0,
-      
+
       CPUSubType_SPARC_ALL   = 0
     };
   } // end namespace MachO