Mach-O FFI constants and data structures.

release
Erik Charlebois 2010-04-06 02:44:57 -07:00
parent a91d7a0e7b
commit 2a2d9eb0a2
3 changed files with 812 additions and 0 deletions

1
extra/macho/authors.txt Normal file
View File

@ -0,0 +1 @@
Erik Charlebois

810
extra/macho/macho.factor Normal file
View File

@ -0,0 +1,810 @@
! Copyright (C) 2010 Erik Charlebois.
! See http:// factorcode.org/license.txt for BSD license.
USING: alien.c-types alien.syntax classes.struct kernel literals math
unix.types ;
IN: macho
TYPEDEF: int integer_t
TYPEDEF: int vm_prot_t
TYPEDEF: integer_t cpu_type_t
TYPEDEF: integer_t cpu_subtype_t
TYPEDEF: integer_t cpu_threadtype_t
CONSTANT: VM_PROT_NONE HEX: 00
CONSTANT: VM_PROT_READ HEX: 01
CONSTANT: VM_PROT_WRITE HEX: 02
CONSTANT: VM_PROT_EXECUTE HEX: 04
CONSTANT: VM_PROT_DEFAULT HEX: 03
CONSTANT: VM_PROT_ALL HEX: 07
CONSTANT: VM_PROT_NO_CHANGE HEX: 08
CONSTANT: VM_PROT_COPY HEX: 10
CONSTANT: VM_PROT_WANTS_COPY HEX: 10
! loader.h
STRUCT: mach_header
{ magic uint32_t }
{ cputype cpu_type_t }
{ cpusubtype cpu_subtype_t }
{ filetype uint32_t }
{ ncmds uint32_t }
{ sizeofcmds uint32_t }
{ flags uint32_t } ;
CONSTANT: MH_MAGIC HEX: feedface
CONSTANT: MH_CIGAM HEX: cefaedfe
STRUCT: mach_header_64
{ magic uint32_t }
{ cputype cpu_type_t }
{ cpusubtype cpu_subtype_t }
{ filetype uint32_t }
{ ncmds uint32_t }
{ sizeofcmds uint32_t }
{ flags uint32_t }
{ reserved uint32_t } ;
CONSTANT: MH_MAGIC_64 HEX: feedfacf
CONSTANT: MH_CIGAM_64 HEX: cffaedfe
CONSTANT: MH_OBJECT HEX: 1
CONSTANT: MH_EXECUTE HEX: 2
CONSTANT: MH_FVMLIB HEX: 3
CONSTANT: MH_CORE HEX: 4
CONSTANT: MH_PRELOAD HEX: 5
CONSTANT: MH_DYLIB HEX: 6
CONSTANT: MH_DYLINKER HEX: 7
CONSTANT: MH_BUNDLE HEX: 8
CONSTANT: MH_DYLIB_STUB HEX: 9
CONSTANT: MH_DSYM HEX: a
CONSTANT: MH_KEXT_BUNDLE HEX: b
CONSTANT: MH_NOUNDEFS HEX: 1
CONSTANT: MH_INCRLINK HEX: 2
CONSTANT: MH_DYLDLINK HEX: 4
CONSTANT: MH_BINDATLOAD HEX: 8
CONSTANT: MH_PREBOUND HEX: 10
CONSTANT: MH_SPLIT_SEGS HEX: 20
CONSTANT: MH_LAZY_INIT HEX: 40
CONSTANT: MH_TWOLEVEL HEX: 80
CONSTANT: MH_FORCE_FLAT HEX: 100
CONSTANT: MH_NOMULTIDEFS HEX: 200
CONSTANT: MH_NOFIXPREBINDING HEX: 400
CONSTANT: MH_PREBINDABLE HEX: 800
CONSTANT: MH_ALLMODSBOUND HEX: 1000
CONSTANT: MH_SUBSECTIONS_VIA_SYMBOLS HEX: 2000
CONSTANT: MH_CANONICAL HEX: 4000
CONSTANT: MH_WEAK_DEFINES HEX: 8000
CONSTANT: MH_BINDS_TO_WEAK HEX: 10000
CONSTANT: MH_ALLOW_STACK_EXECUTION HEX: 20000
CONSTANT: MH_DEAD_STRIPPABLE_DYLIB HEX: 400000
CONSTANT: MH_ROOT_SAFE HEX: 40000
CONSTANT: MH_SETUID_SAFE HEX: 80000
CONSTANT: MH_NO_REEXPORTED_DYLIBS HEX: 100000
CONSTANT: MH_PIE HEX: 200000
STRUCT: load_command
{ cmd uint32_t }
{ cmdsize uint32_t } ;
CONSTANT: LC_REQ_DYLD HEX: 80000000
CONSTANT: LC_SEGMENT HEX: 1
CONSTANT: LC_SYMTAB HEX: 2
CONSTANT: LC_SYMSEG HEX: 3
CONSTANT: LC_THREAD HEX: 4
CONSTANT: LC_UNIXTHREAD HEX: 5
CONSTANT: LC_LOADFVMLIB HEX: 6
CONSTANT: LC_IDFVMLIB HEX: 7
CONSTANT: LC_IDENT HEX: 8
CONSTANT: LC_FVMFILE HEX: 9
CONSTANT: LC_PREPAGE HEX: a
CONSTANT: LC_DYSYMTAB HEX: b
CONSTANT: LC_LOAD_DYLIB HEX: c
CONSTANT: LC_ID_DYLIB HEX: d
CONSTANT: LC_LOAD_DYLINKER HEX: e
CONSTANT: LC_ID_DYLINKER HEX: f
CONSTANT: LC_PREBOUND_DYLIB HEX: 10
CONSTANT: LC_ROUTINES HEX: 11
CONSTANT: LC_SUB_FRAMEWORK HEX: 12
CONSTANT: LC_SUB_UMBRELLA HEX: 13
CONSTANT: LC_SUB_CLIENT HEX: 14
CONSTANT: LC_SUB_LIBRARY HEX: 15
CONSTANT: LC_TWOLEVEL_HINTS HEX: 16
CONSTANT: LC_PREBIND_CKSUM HEX: 17
CONSTANT: LC_LOAD_WEAK_DYLIB HEX: 80000018
CONSTANT: LC_SEGMENT_64 HEX: 19
CONSTANT: LC_ROUTINES_64 HEX: 1a
CONSTANT: LC_UUID HEX: 1b
CONSTANT: LC_RPATH HEX: 8000001c
CONSTANT: LC_CODE_SIGNATURE HEX: 1d
CONSTANT: LC_SEGMENT_SPLIT_INFO HEX: 1e
CONSTANT: LC_REEXPORT_DYLIB HEX: 8000001f
CONSTANT: LC_LAZY_LOAD_DYLIB HEX: 20
CONSTANT: LC_ENCRYPTION_INFO HEX: 21
CONSTANT: LC_DYLD_INFO HEX: 22
CONSTANT: LC_DYLD_INFO_ONLY HEX: 80000022
UNION-STRUCT: lc_str
{ offset uint32_t }
{ ptr char* } ;
STRUCT: segment_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ segname char[16] }
{ vmaddr uint32_t }
{ vmsize uint32_t }
{ fileoff uint32_t }
{ filesize uint32_t }
{ maxprot vm_prot_t }
{ initprot vm_prot_t }
{ nsects uint32_t }
{ flags uint32_t } ;
STRUCT: segment_command_64
{ cmd uint32_t }
{ cmdsize uint32_t }
{ segname char[16] }
{ vmaddr uint64_t }
{ vmsize uint64_t }
{ fileoff uint64_t }
{ filesize uint64_t }
{ maxprot vm_prot_t }
{ initprot vm_prot_t }
{ nsects uint32_t }
{ flags uint32_t } ;
CONSTANT: SG_HIGHVM HEX: 1
CONSTANT: SG_FVMLIB HEX: 2
CONSTANT: SG_NORELOC HEX: 4
CONSTANT: SG_PROTECTED_VERSION_1 HEX: 8
STRUCT: section
{ sectname char[16] }
{ segname char[16] }
{ addr uint32_t }
{ size uint32_t }
{ offset uint32_t }
{ align uint32_t }
{ reloff uint32_t }
{ nreloc uint32_t }
{ flags uint32_t }
{ reserved1 uint32_t }
{ reserved2 uint32_t } ;
STRUCT: section_64
{ sectname char[16] }
{ segname char[16] }
{ addr uint64_t }
{ size uint64_t }
{ offset uint32_t }
{ align uint32_t }
{ reloff uint32_t }
{ nreloc uint32_t }
{ flags uint32_t }
{ reserved1 uint32_t }
{ reserved2 uint32_t }
{ reserved3 uint32_t } ;
CONSTANT: SECTION_TYPE HEX: 000000ff
CONSTANT: SECTION_ATTRIBUTES HEX: ffffff00
CONSTANT: S_REGULAR HEX: 0
CONSTANT: S_ZEROFILL HEX: 1
CONSTANT: S_CSTRING_LITERALS HEX: 2
CONSTANT: S_4BYTE_LITERALS HEX: 3
CONSTANT: S_8BYTE_LITERALS HEX: 4
CONSTANT: S_LITERAL_POINTERS HEX: 5
CONSTANT: S_NON_LAZY_SYMBOL_POINTERS HEX: 6
CONSTANT: S_LAZY_SYMBOL_POINTERS HEX: 7
CONSTANT: S_SYMBOL_STUBS HEX: 8
CONSTANT: S_MOD_INIT_FUNC_POINTERS HEX: 9
CONSTANT: S_MOD_TERM_FUNC_POINTERS HEX: a
CONSTANT: S_COALESCED HEX: b
CONSTANT: S_GB_ZEROFILL HEX: c
CONSTANT: S_INTERPOSING HEX: d
CONSTANT: S_16BYTE_LITERALS HEX: e
CONSTANT: S_DTRACE_DOF HEX: f
CONSTANT: S_LAZY_DYLIB_SYMBOL_POINTERS HEX: 10
CONSTANT: SECTION_ATTRIBUTES_USR HEX: ff000000
CONSTANT: S_ATTR_PURE_INSTRUCTIONS HEX: 80000000
CONSTANT: S_ATTR_NO_TOC HEX: 40000000
CONSTANT: S_ATTR_STRIP_STATIC_SYMS HEX: 20000000
CONSTANT: S_ATTR_NO_DEAD_STRIP HEX: 10000000
CONSTANT: S_ATTR_LIVE_SUPPORT HEX: 08000000
CONSTANT: S_ATTR_SELF_MODIFYING_CODE HEX: 04000000
CONSTANT: S_ATTR_DEBUG HEX: 02000000
CONSTANT: SECTION_ATTRIBUTES_SYS HEX: 00ffff00
CONSTANT: S_ATTR_SOME_INSTRUCTIONS HEX: 00000400
CONSTANT: S_ATTR_EXT_RELOC HEX: 00000200
CONSTANT: S_ATTR_LOC_RELOC HEX: 00000100
CONSTANT: SEG_PAGEZERO "__PAGEZERO"
CONSTANT: SEG_TEXT "__TEXT"
CONSTANT: SECT_TEXT "__text"
CONSTANT: SECT_FVMLIB_INIT0 "__fvmlib_init0"
CONSTANT: SECT_FVMLIB_INIT1 "__fvmlib_init1"
CONSTANT: SEG_DATA "__DATA"
CONSTANT: SECT_DATA "__data"
CONSTANT: SECT_BSS "__bss"
CONSTANT: SECT_COMMON "__common"
CONSTANT: SEG_OBJC "__OBJC"
CONSTANT: SECT_OBJC_SYMBOLS "__symbol_table"
CONSTANT: SECT_OBJC_MODULES "__module_info"
CONSTANT: SECT_OBJC_STRINGS "__selector_strs"
CONSTANT: SECT_OBJC_REFS "__selector_refs"
CONSTANT: SEG_ICON "__ICON"
CONSTANT: SECT_ICON_HEADER "__header"
CONSTANT: SECT_ICON_TIFF "__tiff"
CONSTANT: SEG_LINKEDIT "__LINKEDIT"
CONSTANT: SEG_UNIXSTACK "__UNIXSTACK"
CONSTANT: SEG_IMPORT "__IMPORT"
STRUCT: fvmlib
{ name lc_str }
{ minor_version uint32_t }
{ header_addr uint32_t } ;
STRUCT: fvmlib_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ fvmlib fvmlib } ;
STRUCT: dylib
{ name lc_str }
{ timestamp uint32_t }
{ current_version uint32_t }
{ compatibility_version uint32_t } ;
STRUCT: dylib_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ dylib dylib } ;
STRUCT: sub_framework_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ umbrella lc_str } ;
STRUCT: sub_client_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ client lc_str } ;
STRUCT: sub_umbrella_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ sub_umbrella lc_str } ;
STRUCT: sub_library_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ sub_library lc_str } ;
STRUCT: prebound_dylib_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ name lc_str }
{ nmodules uint32_t }
{ linked_modules lc_str } ;
STRUCT: dylinker_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ name lc_str } ;
STRUCT: thread_command
{ cmd uint32_t }
{ cmdsize uint32_t } ;
STRUCT: routines_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ init_address uint32_t }
{ init_module uint32_t }
{ reserved1 uint32_t }
{ reserved2 uint32_t }
{ reserved3 uint32_t }
{ reserved4 uint32_t }
{ reserved5 uint32_t }
{ reserved6 uint32_t } ;
STRUCT: routines_command_64
{ cmd uint32_t }
{ cmdsize uint32_t }
{ init_address uint64_t }
{ init_module uint64_t }
{ reserved1 uint64_t }
{ reserved2 uint64_t }
{ reserved3 uint64_t }
{ reserved4 uint64_t }
{ reserved5 uint64_t }
{ reserved6 uint64_t } ;
STRUCT: symtab_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ symoff uint32_t }
{ nsyms uint32_t }
{ stroff uint32_t }
{ strsize uint32_t } ;
STRUCT: dysymtab_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ ilocalsym uint32_t }
{ nlocalsym uint32_t }
{ iextdefsym uint32_t }
{ nextdefsym uint32_t }
{ iundefsym uint32_t }
{ nundefsym uint32_t }
{ tocoff uint32_t }
{ ntoc uint32_t }
{ modtaboff uint32_t }
{ nmodtab uint32_t }
{ extrefsymoff uint32_t }
{ nextrefsyms uint32_t }
{ indirectsymoff uint32_t }
{ nindirectsyms uint32_t }
{ extreloff uint32_t }
{ nextrel uint32_t }
{ locreloff uint32_t }
{ nlocrel uint32_t } ;
CONSTANT: INDIRECT_SYMBOL_LOCAL HEX: 80000000
CONSTANT: INDIRECT_SYMBOL_ABS HEX: 40000000
STRUCT: dylib_table_of_contents
{ symbol_index uint32_t }
{ module_index uint32_t } ;
STRUCT: dylib_module
{ module_name uint32_t }
{ iextdefsym uint32_t }
{ nextdefsym uint32_t }
{ irefsym uint32_t }
{ nrefsym uint32_t }
{ ilocalsym uint32_t }
{ nlocalsym uint32_t }
{ iextrel uint32_t }
{ nextrel uint32_t }
{ iinit_iterm uint32_t }
{ ninit_nterm uint32_t }
{ objc_module_info_addr uint32_t }
{ objc_module_info_size uint32_t } ;
STRUCT: dylib_module_64
{ module_name uint32_t }
{ iextdefsym uint32_t }
{ nextdefsym uint32_t }
{ irefsym uint32_t }
{ nrefsym uint32_t }
{ ilocalsym uint32_t }
{ nlocalsym uint32_t }
{ iextrel uint32_t }
{ nextrel uint32_t }
{ iinit_iterm uint32_t }
{ ninit_nterm uint32_t }
{ objc_module_info_size uint32_t }
{ objc_module_info_addr uint64_t } ;
STRUCT: dylib_reference
{ isym_flags uint32_t } ;
STRUCT: twolevel_hints_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ offset uint32_t }
{ nhints uint32_t } ;
STRUCT: twolevel_hint
{ isub_image_itoc uint32_t } ;
STRUCT: prebind_cksum_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ cksum uint32_t } ;
STRUCT: uuid_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ uuid uint8_t[16] } ;
STRUCT: rpath_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ path lc_str } ;
STRUCT: linkedit_data_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ dataoff uint32_t }
{ datasize uint32_t } ;
STRUCT: encryption_info_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ cryptoff uint32_t }
{ cryptsize uint32_t }
{ cryptid uint32_t } ;
STRUCT: dyld_info_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ rebase_off uint32_t }
{ rebase_size uint32_t }
{ bind_off uint32_t }
{ bind_size uint32_t }
{ weak_bind_off uint32_t }
{ weak_bind_size uint32_t }
{ lazy_bind_off uint32_t }
{ lazy_bind_size uint32_t }
{ export_off uint32_t }
{ export_size uint32_t } ;
CONSTANT: REBASE_TYPE_POINTER 1
CONSTANT: REBASE_TYPE_TEXT_ABSOLUTE32 2
CONSTANT: REBASE_TYPE_TEXT_PCREL32 3
CONSTANT: REBASE_OPCODE_MASK HEX: F0
CONSTANT: REBASE_IMMEDIATE_MASK HEX: 0F
CONSTANT: REBASE_OPCODE_DONE HEX: 00
CONSTANT: REBASE_OPCODE_SET_TYPE_IMM HEX: 10
CONSTANT: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB HEX: 20
CONSTANT: REBASE_OPCODE_ADD_ADDR_ULEB HEX: 30
CONSTANT: REBASE_OPCODE_ADD_ADDR_IMM_SCALED HEX: 40
CONSTANT: REBASE_OPCODE_DO_REBASE_IMM_TIMES HEX: 50
CONSTANT: REBASE_OPCODE_DO_REBASE_ULEB_TIMES HEX: 60
CONSTANT: REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB HEX: 70
CONSTANT: REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB HEX: 80
CONSTANT: BIND_TYPE_POINTER 1
CONSTANT: BIND_TYPE_TEXT_ABSOLUTE32 2
CONSTANT: BIND_TYPE_TEXT_PCREL32 3
CONSTANT: BIND_SPECIAL_DYLIB_SELF 0
CONSTANT: BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE -1
CONSTANT: BIND_SPECIAL_DYLIB_FLAT_LOOKUP -2
CONSTANT: BIND_SYMBOL_FLAGS_WEAK_IMPORT HEX: 1
CONSTANT: BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION HEX: 8
CONSTANT: BIND_OPCODE_MASK HEX: F0
CONSTANT: BIND_IMMEDIATE_MASK HEX: 0F
CONSTANT: BIND_OPCODE_DONE HEX: 00
CONSTANT: BIND_OPCODE_SET_DYLIB_ORDINAL_IMM HEX: 10
CONSTANT: BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB HEX: 20
CONSTANT: BIND_OPCODE_SET_DYLIB_SPECIAL_IMM HEX: 30
CONSTANT: BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM HEX: 40
CONSTANT: BIND_OPCODE_SET_TYPE_IMM HEX: 50
CONSTANT: BIND_OPCODE_SET_ADDEND_SLEB HEX: 60
CONSTANT: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB HEX: 70
CONSTANT: BIND_OPCODE_ADD_ADDR_ULEB HEX: 80
CONSTANT: BIND_OPCODE_DO_BIND HEX: 90
CONSTANT: BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB HEX: A0
CONSTANT: BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED HEX: B0
CONSTANT: BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB HEX: C0
CONSTANT: EXPORT_SYMBOL_FLAGS_KIND_MASK HEX: 03
CONSTANT: EXPORT_SYMBOL_FLAGS_KIND_REGULAR HEX: 00
CONSTANT: EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL HEX: 01
CONSTANT: EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION HEX: 04
CONSTANT: EXPORT_SYMBOL_FLAGS_INDIRECT_DEFINITION HEX: 08
CONSTANT: EXPORT_SYMBOL_FLAGS_HAS_SPECIALIZATIONS HEX: 10
STRUCT: symseg_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ offset uint32_t }
{ size uint32_t } ;
STRUCT: ident_command
{ cmd uint32_t }
{ cmdsize uint32_t } ;
STRUCT: fvmfile_command
{ cmd uint32_t }
{ cmdsize uint32_t }
{ name lc_str }
{ header_addr uint32_t } ;
! machine.h
CONSTANT: CPU_STATE_MAX 4
CONSTANT: CPU_STATE_USER 0
CONSTANT: CPU_STATE_SYSTEM 1
CONSTANT: CPU_STATE_IDLE 2
CONSTANT: CPU_STATE_NICE 3
CONSTANT: CPU_ARCH_MASK HEX: ff000000
CONSTANT: CPU_ARCH_ABI64 HEX: 01000000
CONSTANT: CPU_TYPE_ANY -1
CONSTANT: CPU_TYPE_VAX 1
CONSTANT: CPU_TYPE_MC680x0 6
CONSTANT: CPU_TYPE_X86 7
CONSTANT: CPU_TYPE_I386 $ CPU_TYPE_X86
CONSTANT: CPU_TYPE_X86_64 $[ CPU_TYPE_X86 CPU_ARCH_ABI64 bitor ]
CONSTANT: CPU_TYPE_MC98000 10
CONSTANT: CPU_TYPE_HPPA 11
CONSTANT: CPU_TYPE_ARM 12
CONSTANT: CPU_TYPE_MC88000 13
CONSTANT: CPU_TYPE_SPARC 14
CONSTANT: CPU_TYPE_I860 15
CONSTANT: CPU_TYPE_POWERPC 18
CONSTANT: CPU_TYPE_POWERPC64 $[ $ CPU_TYPE_POWERPC CPU_ARCH_ABI64 bitor ]
CONSTANT: CPU_SUBTYPE_MASK HEX: ff000000
CONSTANT: CPU_SUBTYPE_LIB64 HEX: 80000000
CONSTANT: CPU_SUBTYPE_MULTIPLE -1
CONSTANT: CPU_SUBTYPE_LITTLE_ENDIAN 0
CONSTANT: CPU_SUBTYPE_BIG_ENDIAN 1
CONSTANT: CPU_THREADTYPE_NONE 0
CONSTANT: CPU_SUBTYPE_VAX_ALL 0
CONSTANT: CPU_SUBTYPE_VAX780 1
CONSTANT: CPU_SUBTYPE_VAX785 2
CONSTANT: CPU_SUBTYPE_VAX750 3
CONSTANT: CPU_SUBTYPE_VAX730 4
CONSTANT: CPU_SUBTYPE_UVAXI 5
CONSTANT: CPU_SUBTYPE_UVAXII 6
CONSTANT: CPU_SUBTYPE_VAX8200 7
CONSTANT: CPU_SUBTYPE_VAX8500 8
CONSTANT: CPU_SUBTYPE_VAX8600 9
CONSTANT: CPU_SUBTYPE_VAX8650 10
CONSTANT: CPU_SUBTYPE_VAX8800 11
CONSTANT: CPU_SUBTYPE_UVAXIII 12
CONSTANT: CPU_SUBTYPE_MC680x0_ALL 1
CONSTANT: CPU_SUBTYPE_MC68030 1
CONSTANT: CPU_SUBTYPE_MC68040 2
CONSTANT: CPU_SUBTYPE_MC68030_ONLY 3
: CPU_SUBTYPE_INTEL ( f m -- subtype ) 4 shift + ; inline
CONSTANT: CPU_SUBTYPE_I386_ALL 3
CONSTANT: CPU_SUBTYPE_386 3
CONSTANT: CPU_SUBTYPE_486 4
CONSTANT: CPU_SUBTYPE_486SX 132
CONSTANT: CPU_SUBTYPE_586 5
CONSTANT: CPU_SUBTYPE_PENT 5
CONSTANT: CPU_SUBTYPE_PENTPRO 22
CONSTANT: CPU_SUBTYPE_PENTII_M3 54
CONSTANT: CPU_SUBTYPE_PENTII_M5 86
CONSTANT: CPU_SUBTYPE_CELERON 103
CONSTANT: CPU_SUBTYPE_CELERON_MOBILE 119
CONSTANT: CPU_SUBTYPE_PENTIUM_3 8
CONSTANT: CPU_SUBTYPE_PENTIUM_3_M 24
CONSTANT: CPU_SUBTYPE_PENTIUM_3_XEON 40
CONSTANT: CPU_SUBTYPE_PENTIUM_M 9
CONSTANT: CPU_SUBTYPE_PENTIUM_4 10
CONSTANT: CPU_SUBTYPE_PENTIUM_4_M 26
CONSTANT: CPU_SUBTYPE_ITANIUM 11
CONSTANT: CPU_SUBTYPE_ITANIUM_2 27
CONSTANT: CPU_SUBTYPE_XEON 12
CONSTANT: CPU_SUBTYPE_XEON_MP 28
: CPU_SUBTYPE_INTEL_FAMILY ( x -- family ) 15 bitand ; inline
CONSTANT: CPU_SUBTYPE_INTEL_FAMILY_MAX 15
: CPU_SUBTYPE_INTEL_MODEL ( x -- model ) -4 shift ; inline
CONSTANT: CPU_SUBTYPE_INTEL_MODEL_ALL 0
CONSTANT: CPU_SUBTYPE_X86_ALL 3
CONSTANT: CPU_SUBTYPE_X86_64_ALL 3
CONSTANT: CPU_SUBTYPE_X86_ARCH1 4
CONSTANT: CPU_THREADTYPE_INTEL_HTT 1
CONSTANT: CPU_SUBTYPE_MIPS_ALL 0
CONSTANT: CPU_SUBTYPE_MIPS_R2300 1
CONSTANT: CPU_SUBTYPE_MIPS_R2600 2
CONSTANT: CPU_SUBTYPE_MIPS_R2800 3
CONSTANT: CPU_SUBTYPE_MIPS_R2000a 4
CONSTANT: CPU_SUBTYPE_MIPS_R2000 5
CONSTANT: CPU_SUBTYPE_MIPS_R3000a 6
CONSTANT: CPU_SUBTYPE_MIPS_R3000 7
CONSTANT: CPU_SUBTYPE_MC98000_ALL 0
CONSTANT: CPU_SUBTYPE_MC98601 1
CONSTANT: CPU_SUBTYPE_HPPA_ALL 0
CONSTANT: CPU_SUBTYPE_HPPA_7100 0
CONSTANT: CPU_SUBTYPE_HPPA_7100LC 1
CONSTANT: CPU_SUBTYPE_MC88000_ALL 0
CONSTANT: CPU_SUBTYPE_MC88100 1
CONSTANT: CPU_SUBTYPE_MC88110 2
CONSTANT: CPU_SUBTYPE_SPARC_ALL 0
CONSTANT: CPU_SUBTYPE_I860_ALL 0
CONSTANT: CPU_SUBTYPE_I860_860 1
CONSTANT: CPU_SUBTYPE_POWERPC_ALL 0
CONSTANT: CPU_SUBTYPE_POWERPC_601 1
CONSTANT: CPU_SUBTYPE_POWERPC_602 2
CONSTANT: CPU_SUBTYPE_POWERPC_603 3
CONSTANT: CPU_SUBTYPE_POWERPC_603e 4
CONSTANT: CPU_SUBTYPE_POWERPC_603ev 5
CONSTANT: CPU_SUBTYPE_POWERPC_604 6
CONSTANT: CPU_SUBTYPE_POWERPC_604e 7
CONSTANT: CPU_SUBTYPE_POWERPC_620 8
CONSTANT: CPU_SUBTYPE_POWERPC_750 9
CONSTANT: CPU_SUBTYPE_POWERPC_7400 10
CONSTANT: CPU_SUBTYPE_POWERPC_7450 11
CONSTANT: CPU_SUBTYPE_POWERPC_970 100
CONSTANT: CPU_SUBTYPE_ARM_ALL 0
CONSTANT: CPU_SUBTYPE_ARM_V4T 5
CONSTANT: CPU_SUBTYPE_ARM_V6 6
CONSTANT: CPU_SUBTYPE_ARM_V5TEJ 7
CONSTANT: CPU_SUBTYPE_ARM_XSCALE 8
CONSTANT: CPU_SUBTYPE_ARM_V7 9
CONSTANT: CPUFAMILY_UNKNOWN 0
CONSTANT: CPUFAMILY_POWERPC_G3 HEX: cee41549
CONSTANT: CPUFAMILY_POWERPC_G4 HEX: 77c184ae
CONSTANT: CPUFAMILY_POWERPC_G5 HEX: ed76d8aa
CONSTANT: CPUFAMILY_INTEL_6_13 HEX: aa33392b
CONSTANT: CPUFAMILY_INTEL_6_14 HEX: 73d67300
CONSTANT: CPUFAMILY_INTEL_6_15 HEX: 426f69ef
CONSTANT: CPUFAMILY_INTEL_6_23 HEX: 78ea4fbc
CONSTANT: CPUFAMILY_INTEL_6_26 HEX: 6b5a4cd2
CONSTANT: CPUFAMILY_ARM_9 HEX: e73283ae
CONSTANT: CPUFAMILY_ARM_11 HEX: 8ff620d8
CONSTANT: CPUFAMILY_ARM_XSCALE HEX: 53b005f5
CONSTANT: CPUFAMILY_ARM_13 HEX: 0cc90e64
CONSTANT: CPUFAMILY_INTEL_YONAH $ CPUFAMILY_INTEL_6_14
CONSTANT: CPUFAMILY_INTEL_MEROM $ CPUFAMILY_INTEL_6_15
CONSTANT: CPUFAMILY_INTEL_PENRYN $ CPUFAMILY_INTEL_6_23
CONSTANT: CPUFAMILY_INTEL_NEHALEM $ CPUFAMILY_INTEL_6_26
CONSTANT: CPUFAMILY_INTEL_CORE $ CPUFAMILY_INTEL_6_14
CONSTANT: CPUFAMILY_INTEL_CORE2 $ CPUFAMILY_INTEL_6_15
! fat.h
CONSTANT: FAT_MAGIC HEX: cafebabe
CONSTANT: FAT_CIGAM HEX: bebafeca
STRUCT: fat_header
{ magic uint32_t }
{ nfat_arch uint32_t } ;
STRUCT: fat_arch
{ cputype cpu_type_t }
{ cpusubtype cpu_subtype_t }
{ offset uint32_t }
{ size uint32_t }
{ align uint32_t } ;
! nlist.h
STRUCT: nlist
{ n_strx int32_t }
{ n_type uint8_t }
{ n_sect uint8_t }
{ n_desc int16_t }
{ n_value uint32_t } ;
STRUCT: nlist_64
{ n_strx uint32_t }
{ n_type uint8_t }
{ n_sect uint8_t }
{ n_desc uint16_t }
{ n_value uint64_t } ;
CONSTANT: N_STAB HEX: e0
CONSTANT: N_PEXT HEX: 10
CONSTANT: N_TYPE HEX: 0e
CONSTANT: N_EXT HEX: 01
CONSTANT: N_UNDF HEX: 0
CONSTANT: N_ABS HEX: 2
CONSTANT: N_SECT HEX: e
CONSTANT: N_PBUD HEX: c
CONSTANT: N_INDR HEX: a
CONSTANT: NO_SECT 0
CONSTANT: MAX_SECT 255
: GET_COMM_ALIGN ( n_desc -- align )
-8 shift HEX: 0f bitand ; inline
: SET_COMM_ALIGN ( n_desc align -- n_desc )
[ HEX: f0ff bitand ]
[ HEX: 000f bitand 8 shift ] bi* bitor ; inline
CONSTANT: REFERENCE_TYPE 7
CONSTANT: REFERENCE_FLAG_UNDEFINED_NON_LAZY 0
CONSTANT: REFERENCE_FLAG_UNDEFINED_LAZY 1
CONSTANT: REFERENCE_FLAG_DEFINED 2
CONSTANT: REFERENCE_FLAG_PRIVATE_DEFINED 3
CONSTANT: REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY 4
CONSTANT: REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY 5
CONSTANT: REFERENCED_DYNAMICALLY HEX: 0010
: GET_LIBRARY_ORDINAL ( n_desc -- ordinal )
-8 shift HEX: ff bitand ; inline
: SET_LIBRARY_ORDINAL ( n_desc ordinal -- n_desc )
[ HEX: 00ff bitand ]
[ HEX: 00ff bitand 8 shift ] bi* bitor ; inline
CONSTANT: SELF_LIBRARY_ORDINAL HEX: 0
CONSTANT: MAX_LIBRARY_ORDINAL HEX: fd
CONSTANT: DYNAMIC_LOOKUP_ORDINAL HEX: fe
CONSTANT: EXECUTABLE_ORDINAL HEX: ff
CONSTANT: N_NO_DEAD_STRIP HEX: 0020
CONSTANT: N_DESC_DISCARDED HEX: 0020
CONSTANT: N_WEAK_REF HEX: 0040
CONSTANT: N_WEAK_DEF HEX: 0080
CONSTANT: N_REF_TO_WEAK HEX: 0080
CONSTANT: N_ARM_THUMB_DEF HEX: 0008
! ranlib.h
CONSTANT: SYMDEF "__.SYMDEF"
CONSTANT: SYMDEF_SORTED "__.SYMDEF SORTED"
STRUCT: ranlib
{ ran_strx uint32_t }
{ ran_off uint32_t } ;
! reloc.h
STRUCT: relocation_info
{ r_address int32_t }
{ r_symbolnum_pcrel_length_extern_type uint32_t } ;
CONSTANT: R_ABS 0
CONSTANT: R_SCATTERED HEX: 80000000
STRUCT: scattered_relocation_info_big_endian
{ r_scattered_pcrel_length_type_address uint32_t }
{ r_value int32_t } ;
STRUCT: scattered_relocation_info_little_endian
{ r_address_type_length_pcrel_scattered uint32_t }
{ r_value int32_t } ;
TYPEDEF: int reloc_type_generic
C-ENUM:
GENERIC_RELOC_VANILLA
GENERIC_RELOC_PAIR
GENERIC_RELOC_SECTDIFF
GENERIC_RELOC_PB_LA_PTR
GENERIC_RELOC_LOCAL_SECTDIFF ;
TYPEDEF: int reloc_type_x86_64
C-ENUM:
X86_64_RELOC_UNSIGNED
X86_64_RELOC_SIGNED
X86_64_RELOC_BRANCH
X86_64_RELOC_GOT_LOAD
X86_64_RELOC_GOT
X86_64_RELOC_SUBTRACTOR
X86_64_RELOC_SIGNED_1
X86_64_RELOC_SIGNED_2
X86_64_RELOC_SIGNED_4 ;
TYPEDEF: int reloc_type_ppc
C-ENUM:
PPC_RELOC_VANILLA
PPC_RELOC_PAIR
PPC_RELOC_BR14
PPC_RELOC_BR24
PPC_RELOC_HI16
PPC_RELOC_LO16
PPC_RELOC_HA16
PPC_RELOC_LO14
PPC_RELOC_SECTDIFF
PPC_RELOC_PB_LA_PTR
PPC_RELOC_HI16_SECTDIFF
PPC_RELOC_LO16_SECTDIFF
PPC_RELOC_HA16_SECTDIFF
PPC_RELOC_JBSR
PPC_RELOC_LO14_SECTDIFF
PPC_RELOC_LOCAL_SECTDIFF ;

1
extra/macho/summary.txt Normal file
View File

@ -0,0 +1 @@
Constants and structs related to the Mach object format.