]> git.saurik.com Git - apple/ld64.git/blobdiff - src/abstraction/MachOFileAbstraction.hpp
ld64-242.2.tar.gz
[apple/ld64.git] / src / abstraction / MachOFileAbstraction.hpp
index 60b4f10c22fecaaa02e5c3c50fd38864521e5138..ae61d7c1893bfe102c1a6db52571f6d33d5cc97c 100644 (file)
        #define N_SYMBOL_RESOLVER 0x100
 #endif
 
        #define N_SYMBOL_RESOLVER 0x100
 #endif
 
+#ifndef N_AST
+       #define N_AST 0x32
+#endif
+
 #ifndef LC_FUNCTION_STARTS
        #define LC_FUNCTION_STARTS      0x26
 #endif
 #ifndef LC_FUNCTION_STARTS
        #define LC_FUNCTION_STARTS      0x26
 #endif
   };
 #endif
 
   };
 #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)
 
 #ifndef CPU_SUBTYPE_ARM_V7F
   #define CPU_SUBTYPE_ARM_V7F    ((cpu_subtype_t) 10)
 
 
 // hack until arm64 headers are worked out
 
 
 // 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
 
 #define ARM64_RELOC_UNSIGNED            0 // for pointers
 #define ARM64_RELOC_SUBTRACTOR          1 // must be followed by a ARM64_RELOC_UNSIGNED
 
 #define UNWIND_ARM64_DWARF_SECTION_OFFSET               0x00FFFFFF
 
 
 #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 {
 #ifndef LC_SOURCE_VERSION
        #define LC_SOURCE_VERSION 0x2A
        struct source_version_command {
        };
 #endif
 
        };
 #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
 #ifndef EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE
        #define EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE                       0x02
 #endif
        #define CPU_SUBTYPE_ARM_V7EM    ((cpu_subtype_t) 16) 
 #endif 
 
        #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;
 
 struct ArchInfo {
        const char*                     archName;
@@ -428,7 +484,10 @@ struct ArchInfo {
 
 static const ArchInfo archInfoArray[] = {
 #if SUPPORT_ARCH_x86_64
 
 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 },
 #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
        #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
 #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 }
 };
 #endif
        { NULL, 0, 0, NULL, NULL, false, false }
 };