From 92b6c51762be84c0fae16428517fdde84b721de0 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Sun, 4 Feb 2024 13:08:33 -0800 Subject: [PATCH] macho: update mach-o/loader.h --- extra/macho/macho.factor | 160 ++++++++++++++++++++++++++++----------- 1 file changed, 117 insertions(+), 43 deletions(-) diff --git a/extra/macho/macho.factor b/extra/macho/macho.factor index 94864865cf..dcd378fe36 100644 --- a/extra/macho/macho.factor +++ b/extra/macho/macho.factor @@ -61,6 +61,9 @@ CONSTANT: MH_BUNDLE 0x8 CONSTANT: MH_DYLIB_STUB 0x9 CONSTANT: MH_DSYM 0xa CONSTANT: MH_KEXT_BUNDLE 0xb +CONSTANT: MH_FILESET 0xc +CONSTANT: MH_GPU_EXECUTE 0xd +CONSTANT: MH_GPU_DYLIB 0xe CONSTANT: MH_NOUNDEFS 0x1 CONSTANT: MH_INCRLINK 0x2 @@ -80,11 +83,17 @@ CONSTANT: MH_CANONICAL 0x4000 CONSTANT: MH_WEAK_DEFINES 0x8000 CONSTANT: MH_BINDS_TO_WEAK 0x10000 CONSTANT: MH_ALLOW_STACK_EXECUTION 0x20000 -CONSTANT: MH_DEAD_STRIPPABLE_DYLIB 0x400000 CONSTANT: MH_ROOT_SAFE 0x40000 CONSTANT: MH_SETUID_SAFE 0x80000 CONSTANT: MH_NO_REEXPORTED_DYLIBS 0x100000 CONSTANT: MH_PIE 0x200000 +CONSTANT: MH_DEAD_STRIPPABLE_DYLIB 0x400000 +CONSTANT: MH_HAS_TLV_DESCRIPTORS 0x800000 +CONSTANT: MH_NO_HEAP_EXECUTION 0x1000000 +CONSTANT: MH_APP_EXTENSION_SAFE 0x2000000 +CONSTANT: MH_NLIST_OUTOFSYNC_WITH_DYLDINFO 0x4000000 +CONSTANT: MH_SIM_SUPPORT 0x8000000 +CONSTANT: MH_DYLIB_IN_CACHE 0x80000000 STRUCT: load_command { cmd uint } @@ -92,50 +101,61 @@ STRUCT: load_command CONSTANT: LC_REQ_DYLD 0x80000000 -CONSTANT: LC_SEGMENT 0x1 -CONSTANT: LC_SYMTAB 0x2 -CONSTANT: LC_SYMSEG 0x3 -CONSTANT: LC_THREAD 0x4 -CONSTANT: LC_UNIXTHREAD 0x5 -CONSTANT: LC_LOADFVMLIB 0x6 -CONSTANT: LC_IDFVMLIB 0x7 -CONSTANT: LC_IDENT 0x8 -CONSTANT: LC_FVMFILE 0x9 -CONSTANT: LC_PREPAGE 0xa -CONSTANT: LC_DYSYMTAB 0xb -CONSTANT: LC_LOAD_DYLIB 0xc -CONSTANT: LC_ID_DYLIB 0xd -CONSTANT: LC_LOAD_DYLINKER 0xe -CONSTANT: LC_ID_DYLINKER 0xf -CONSTANT: LC_PREBOUND_DYLIB 0x10 -CONSTANT: LC_ROUTINES 0x11 -CONSTANT: LC_SUB_FRAMEWORK 0x12 -CONSTANT: LC_SUB_UMBRELLA 0x13 -CONSTANT: LC_SUB_CLIENT 0x14 -CONSTANT: LC_SUB_LIBRARY 0x15 -CONSTANT: LC_TWOLEVEL_HINTS 0x16 -CONSTANT: LC_PREBIND_CKSUM 0x17 -CONSTANT: LC_LOAD_WEAK_DYLIB 0x80000018 -CONSTANT: LC_SEGMENT_64 0x19 -CONSTANT: LC_ROUTINES_64 0x1a -CONSTANT: LC_UUID 0x1b -CONSTANT: LC_RPATH 0x8000001c -CONSTANT: LC_CODE_SIGNATURE 0x1d -CONSTANT: LC_SEGMENT_SPLIT_INFO 0x1e -CONSTANT: LC_REEXPORT_DYLIB 0x8000001f -CONSTANT: LC_LAZY_LOAD_DYLIB 0x20 -CONSTANT: LC_ENCRYPTION_INFO 0x21 -CONSTANT: LC_DYLD_INFO 0x22 -CONSTANT: LC_DYLD_INFO_ONLY 0x80000022 -CONSTANT: LC_LOAD_UPWARD_DYLIB 0x80000023 -CONSTANT: LC_VERSION_MIN_MACOSX 0x24 +CONSTANT: LC_SEGMENT 0x1 +CONSTANT: LC_SYMTAB 0x2 +CONSTANT: LC_SYMSEG 0x3 +CONSTANT: LC_THREAD 0x4 +CONSTANT: LC_UNIXTHREAD 0x5 +CONSTANT: LC_LOADFVMLIB 0x6 +CONSTANT: LC_IDFVMLIB 0x7 +CONSTANT: LC_IDENT 0x8 +CONSTANT: LC_FVMFILE 0x9 +CONSTANT: LC_PREPAGE 0xa +CONSTANT: LC_DYSYMTAB 0xb +CONSTANT: LC_LOAD_DYLIB 0xc +CONSTANT: LC_ID_DYLIB 0xd +CONSTANT: LC_LOAD_DYLINKER 0xe +CONSTANT: LC_ID_DYLINKER 0xf +CONSTANT: LC_PREBOUND_DYLIB 0x10 +CONSTANT: LC_ROUTINES 0x11 +CONSTANT: LC_SUB_FRAMEWORK 0x12 +CONSTANT: LC_SUB_UMBRELLA 0x13 +CONSTANT: LC_SUB_CLIENT 0x14 +CONSTANT: LC_SUB_LIBRARY 0x15 +CONSTANT: LC_TWOLEVEL_HINTS 0x16 +CONSTANT: LC_PREBIND_CKSUM 0x17 +CONSTANT: LC_LOAD_WEAK_DYLIB 0x80000018 +CONSTANT: LC_SEGMENT_64 0x19 +CONSTANT: LC_ROUTINES_64 0x1a +CONSTANT: LC_UUID 0x1b +CONSTANT: LC_RPATH 0x8000001c +CONSTANT: LC_CODE_SIGNATURE 0x1d +CONSTANT: LC_SEGMENT_SPLIT_INFO 0x1e +CONSTANT: LC_REEXPORT_DYLIB 0x8000001f +CONSTANT: LC_LAZY_LOAD_DYLIB 0x20 +CONSTANT: LC_ENCRYPTION_INFO 0x21 +CONSTANT: LC_DYLD_INFO 0x22 +CONSTANT: LC_DYLD_INFO_ONLY 0x80000022 +CONSTANT: LC_LOAD_UPWARD_DYLIB 0x80000023 +CONSTANT: LC_VERSION_MIN_MACOSX 0x24 CONSTANT: LC_VERSION_MIN_IPHONEOS 0x25 -CONSTANT: LC_FUNCTION_STARTS 0x26 -CONSTANT: LC_DYLD_ENVIRONMENT 0x27 -CONSTANT: LC_MAIN 0x80000028 -CONSTANT: LC_DATA_IN_CODE 0x29 -CONSTANT: LC_SOURCE_VERSION 0x2A +CONSTANT: LC_FUNCTION_STARTS 0x26 +CONSTANT: LC_DYLD_ENVIRONMENT 0x27 +CONSTANT: LC_MAIN 0x80000028 +CONSTANT: LC_DATA_IN_CODE 0x29 +CONSTANT: LC_SOURCE_VERSION 0x2A CONSTANT: LC_DYLIB_CODE_SIGN_DRS 0x2B +CONSTANT: LC_ENCRYPTION_INFO_64 0x2C +CONSTANT: LC_LINKER_OPTION 0x2D +CONSTANT: LC_LINKER_OPTIMIZATION_HINT 0x2E +CONSTANT: LC_VERSION_MIN_TVOS 0x2F +CONSTANT: LC_VERSION_MIN_WATCHOS 0x30 +CONSTANT: LC_NOTE 0x31 +CONSTANT: LC_BUILD_VERSION 0x32 +CONSTANT: LC_DYLD_EXPORTS_TRIE 0x80000033 +CONSTANT: LC_DYLD_CHAINED_FIXUPS 0x80000034 +CONSTANT: LC_FILESET_ENTRY 0x80000035 +CONSTANT: LC_ATOM_INFO 0x36 UNION-STRUCT: lc_str { offset uint } @@ -171,6 +191,7 @@ CONSTANT: SG_HIGHVM 0x1 CONSTANT: SG_FVMLIB 0x2 CONSTANT: SG_NORELOC 0x4 CONSTANT: SG_PROTECTED_VERSION_1 0x8 +CONSTANT: SG_READ_ONLY 0x10 STRUCT: section { sectname char[16] } @@ -219,6 +240,12 @@ CONSTANT: S_INTERPOSING 0xd CONSTANT: S_16BYTE_LITERALS 0xe CONSTANT: S_DTRACE_DOF 0xf CONSTANT: S_LAZY_DYLIB_SYMBOL_POINTERS 0x10 +CONSTANT: S_THREAD_LOCAL_REGULAR 0x11 +CONSTANT: S_THREAD_LOCAL_ZEROFILL 0x12 +CONSTANT: S_THREAD_LOCAL_VARIABLES 0x13 +CONSTANT: S_THREAD_LOCAL_VARIABLE_POINTERS 0x14 +CONSTANT: S_THREAD_LOCAL_INIT_FUNCTION_POINTERS 0x15 +CONSTANT: S_INIT_FUNC_OFFSETS 0x16 CONSTANT: SECTION_ATTRIBUTES_USR 0xff000000 CONSTANT: S_ATTR_PURE_INSTRUCTIONS 0x80000000 @@ -462,6 +489,47 @@ STRUCT: version_min_command { version uint32_t } { sdk uint32_t } ; +STRUCT: build_version_command + { cmd uint32_t } + { cmdsize uint32_t } + { platform uint32_t } + { minos uint32_t } + { sdk uint32_t } + { ntools uint32_t } ; + +STRUCT: build_tool_version + { tool uint32_t } + { version uint32_t } ; + +CONSTANT: PLATFORM_UNKNOWN 0 +CONSTANT: PLATFORM_ANY 0xFFFFFFFF +CONSTANT: PLATFORM_MACOS 1 +CONSTANT: PLATFORM_IOS 2 +CONSTANT: PLATFORM_TVOS 3 +CONSTANT: PLATFORM_WATCHOS 4 +CONSTANT: PLATFORM_BRIDGEOS 5 +CONSTANT: PLATFORM_MACCATALYST 6 +CONSTANT: PLATFORM_IOSSIMULATOR 7 +CONSTANT: PLATFORM_TVOSSIMULATOR 8 +CONSTANT: PLATFORM_WATCHOSSIMULATOR 9 +CONSTANT: PLATFORM_DRIVERKIT 10 +CONSTANT: PLATFORM_VISIONOS 11 +CONSTANT: PLATFORM_VISIONOSSIMULATOR 12 +CONSTANT: PLATFORM_FIRMWARE 13 +CONSTANT: PLATFORM_SEPOS 14 + +CONSTANT: TOOL_CLANG 1 +CONSTANT: TOOL_SWIFT 2 +CONSTANT: TOOL_LD 3 +CONSTANT: TOOL_LLD 4 +CONSTANT: TOOL_METAL 1024 +CONSTANT: TOOL_AIRLLD 1025 +CONSTANT: TOOL_AIRNT 1026 +CONSTANT: TOOL_AIRNT_PLUGIN 1027 +CONSTANT: TOOL_AIRPACK 1028 +CONSTANT: TOOL_GPUARCHIVER 1031 +CONSTANT: TOOL_METAL_FRAMEWORK 1032 + CONSTANT: REBASE_TYPE_POINTER 1 CONSTANT: REBASE_TYPE_TEXT_ABSOLUTE32 2 CONSTANT: REBASE_TYPE_TEXT_PCREL32 3 @@ -485,6 +553,7 @@ 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_SPECIAL_DYLIB_WEAK_LOOKUP -3 CONSTANT: BIND_SYMBOL_FLAGS_WEAK_IMPORT 0x1 CONSTANT: BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION 0x8 @@ -504,6 +573,9 @@ CONSTANT: BIND_OPCODE_DO_BIND 0x90 CONSTANT: BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB 0xA0 CONSTANT: BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED 0xB0 CONSTANT: BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB 0xC0 +CONSTANT: BIND_OPCODE_THREADED 0xD0 +CONSTANT: BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB 0x00 +CONSTANT: BIND_SUBOPCODE_THREADED_APPLY 0x01 CONSTANT: EXPORT_SYMBOL_FLAGS_KIND_MASK 0x03 CONSTANT: EXPORT_SYMBOL_FLAGS_KIND_REGULAR 0x00 @@ -511,6 +583,7 @@ CONSTANT: EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL 0x01 CONSTANT: EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION 0x04 CONSTANT: EXPORT_SYMBOL_FLAGS_INDIRECT_DEFINITION 0x08 CONSTANT: EXPORT_SYMBOL_FLAGS_HAS_SPECIALIZATIONS 0x10 +CONSTANT: EXPORT_SYMBOL_FLAGS_STATIC_RESOLVER 0x20 STRUCT: symseg_command { cmd uint } @@ -920,6 +993,7 @@ TYPED: 64-bit? ( macho: mach_header_32/64 -- ? ) { LC_DATA_IN_CODE [ data_in_code_entry ] } { LC_SOURCE_VERSION [ source_version_command ] } { LC_DYLIB_CODE_SIGN_DRS [ linkedit_data_command ] } + { LC_BUILD_VERSION [ build_version_command ] } } case ; : read-command ( cmd -- next-cmd ) -- 2.34.1