X-Git-Url: https://git.saurik.com/apple/ld64.git/blobdiff_plain/f80fe69f3f29962e8aa43a99f8ed9201548f3d78..e667b16e39593d19d0e25a8440a563eac3572653:/src/abstraction/MachOFileAbstraction.hpp diff --git a/src/abstraction/MachOFileAbstraction.hpp b/src/abstraction/MachOFileAbstraction.hpp index 60b4f10..ae61d7c 100644 --- a/src/abstraction/MachOFileAbstraction.hpp +++ b/src/abstraction/MachOFileAbstraction.hpp @@ -192,6 +192,10 @@ #define N_SYMBOL_RESOLVER 0x100 #endif +#ifndef N_AST + #define N_AST 0x32 +#endif + #ifndef LC_FUNCTION_STARTS #define LC_FUNCTION_STARTS 0x26 #endif @@ -229,7 +233,13 @@ }; #endif +#ifndef MH_APP_EXTENSION_SAFE + #define MH_APP_EXTENSION_SAFE 0x02000000 +#endif +#ifndef N_ALT_ENTRY + #define N_ALT_ENTRY 0x0200 +#endif #ifndef CPU_SUBTYPE_ARM_V7F #define CPU_SUBTYPE_ARM_V7F ((cpu_subtype_t) 10) @@ -244,9 +254,16 @@ // hack until arm64 headers are worked out -#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64) -#define CPU_SUBTYPE_ARM64_ALL 0 -#define CPU_SUBTYPE_ARM64_V8 1 +#ifndef CPU_TYPE_ARM64 + #define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64) +#endif +#ifndef CPU_SUBTYPE_ARM64_ALL + #define CPU_SUBTYPE_ARM64_ALL 0 +#endif +#ifndef CPU_SUBTYPE_ARM64_V8 + #define CPU_SUBTYPE_ARM64_V8 1 +#endif + #define ARM64_RELOC_UNSIGNED 0 // for pointers #define ARM64_RELOC_SUBTRACTOR 1 // must be followed by a ARM64_RELOC_UNSIGNED @@ -360,6 +377,9 @@ #define UNWIND_ARM64_DWARF_SECTION_OFFSET 0x00FFFFFF +#define UNW_ARM_D31 287 + + #ifndef LC_SOURCE_VERSION #define LC_SOURCE_VERSION 0x2A struct source_version_command { @@ -394,6 +414,18 @@ }; #endif +#ifndef LC_LINKER_OPTIMIZATION_HINTS + #define LC_LINKER_OPTIMIZATION_HINTS 0x2E + #define LOH_ARM64_ADRP_ADRP 1 + #define LOH_ARM64_ADRP_LDR 2 + #define LOH_ARM64_ADRP_ADD_LDR 3 + #define LOH_ARM64_ADRP_LDR_GOT_LDR 4 + #define LOH_ARM64_ADRP_ADD_STR 5 + #define LOH_ARM64_ADRP_LDR_GOT_STR 6 + #define LOH_ARM64_ADRP_ADD 7 + #define LOH_ARM64_ADRP_LDR_GOT 8 +#endif + #ifndef EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE #define EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE 0x02 #endif @@ -415,6 +447,30 @@ #define CPU_SUBTYPE_ARM_V7EM ((cpu_subtype_t) 16) #endif +#ifndef CPU_SUBTYPE_X86_64_H + #define CPU_SUBTYPE_X86_64_H ((cpu_subtype_t) 8) +#endif + +#define UNWIND_ARM_MODE_MASK 0x0F000000 +#define UNWIND_ARM_MODE_FRAME 0x01000000 +#define UNWIND_ARM_MODE_FRAME_D 0x02000000 +#define UNWIND_ARM_MODE_DWARF 0x04000000 + +#define UNWIND_ARM_FRAME_STACK_ADJUST_MASK 0x00C00000 + +#define UNWIND_ARM_FRAME_FIRST_PUSH_R4 0x00000001 +#define UNWIND_ARM_FRAME_FIRST_PUSH_R5 0x00000002 +#define UNWIND_ARM_FRAME_FIRST_PUSH_R6 0x00000004 + +#define UNWIND_ARM_FRAME_SECOND_PUSH_R8 0x00000008 +#define UNWIND_ARM_FRAME_SECOND_PUSH_R9 0x00000010 +#define UNWIND_ARM_FRAME_SECOND_PUSH_R10 0x00000020 +#define UNWIND_ARM_FRAME_SECOND_PUSH_R11 0x00000040 +#define UNWIND_ARM_FRAME_SECOND_PUSH_R12 0x00000080 + +#define UNWIND_ARM_FRAME_D_REG_COUNT_MASK 0x00000F00 + +#define UNWIND_ARM_DWARF_SECTION_OFFSET 0x00FFFFFF struct ArchInfo { const char* archName; @@ -428,7 +484,10 @@ struct ArchInfo { static const ArchInfo archInfoArray[] = { #if SUPPORT_ARCH_x86_64 - { "x86_64", CPU_TYPE_X86_64, CPU_SUBTYPE_X86_64_ALL, "x86_64-", "", false, false }, + { "x86_64", CPU_TYPE_X86_64, CPU_SUBTYPE_X86_64_ALL, "x86_64-", "", true, false }, +#endif +#if SUPPORT_ARCH_x86_64h + { "x86_64h", CPU_TYPE_X86_64, CPU_SUBTYPE_X86_64_H, "x86_64h-", "", true, false }, #endif #if SUPPORT_ARCH_i386 { "i386", CPU_TYPE_I386, CPU_SUBTYPE_I386_ALL, "i386-", "", false, false }, @@ -478,10 +537,10 @@ static const ArchInfo archInfoArray[] = { #define SUPPORT_ARCH_arm_any 1 #endif #if SUPPORT_ARCH_arm64 - { "arm64", CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_ALL, "arm64-", "", false, false }, + { "arm64", CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_ALL, "arm64-", "aarch64-", false, false }, #endif #if SUPPORT_ARCH_arm64v8 - { "arm64v8", CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_V8, "arm64v8-", "", true, false }, + { "arm64v8", CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_V8, "arm64v8-", "aarch64-", true, false }, #endif { NULL, 0, 0, NULL, NULL, false, false } };