Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
663 lines
24 KiB
Diff
663 lines
24 KiB
Diff
From 5ce3538352b162cfaacca4a7e3c5e04fabf1d169 Mon Sep 17 00:00:00 2001
|
||
From: Randy Eckenrode <randy@largeandhighquality.com>
|
||
Date: Wed, 13 Nov 2024 13:53:14 -0500
|
||
Subject: [PATCH 08/18] =?UTF-8?q?Provide=20mach=20compatibility=20headers?=
|
||
=?UTF-8?q?=20based=20on=20LLVM=E2=80=99s=20headers?=
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
---
|
||
include/mach-o/fat.h | 16 ++
|
||
include/mach-o/loader.h | 224 +++++++++++++++++++++++
|
||
include/mach-o/nlist.h | 61 ++++++
|
||
include/mach/machine.h | 200 ++++++++++++++++++++
|
||
include/mach/vm_prot.h | 13 ++
|
||
src/abstraction/MachOFileAbstraction.hpp | 32 ++--
|
||
6 files changed, 530 insertions(+), 16 deletions(-)
|
||
create mode 100644 include/mach-o/fat.h
|
||
create mode 100644 include/mach-o/loader.h
|
||
create mode 100644 include/mach-o/nlist.h
|
||
create mode 100644 include/mach/machine.h
|
||
create mode 100644 include/mach/vm_prot.h
|
||
|
||
diff --git a/include/mach-o/fat.h b/include/mach-o/fat.h
|
||
new file mode 100644
|
||
index 0000000..82f5dc1
|
||
--- /dev/null
|
||
+++ b/include/mach-o/fat.h
|
||
@@ -0,0 +1,16 @@
|
||
+// SPDX-License-Identifier: APSL-2.0
|
||
+
|
||
+// Derive `fat.h` from LLVM to avoid macro conflicts.
|
||
+
|
||
+#pragma once
|
||
+
|
||
+#include <llvm/BinaryFormat/MachO.h>
|
||
+
|
||
+using llvm::MachO::fat_arch;
|
||
+using llvm::MachO::fat_arch_64;
|
||
+using llvm::MachO::fat_header;
|
||
+
|
||
+using llvm::MachO::FAT_CIGAM;
|
||
+using llvm::MachO::FAT_CIGAM_64;
|
||
+using llvm::MachO::FAT_MAGIC;
|
||
+using llvm::MachO::FAT_MAGIC_64;
|
||
diff --git a/include/mach-o/loader.h b/include/mach-o/loader.h
|
||
new file mode 100644
|
||
index 0000000..5306a20
|
||
--- /dev/null
|
||
+++ b/include/mach-o/loader.h
|
||
@@ -0,0 +1,224 @@
|
||
+// SPDX-License-Identifier: APSL-2.0
|
||
+
|
||
+// Derive `loader.h` from LLVM to avoid macro conflicts.
|
||
+
|
||
+#pragma once
|
||
+
|
||
+#include <mach/vm_prot.h>
|
||
+
|
||
+#include <llvm/BinaryFormat/MachO.h>
|
||
+
|
||
+using llvm::MachO::mach_header;
|
||
+using llvm::MachO::mach_header_64;
|
||
+
|
||
+using llvm::MachO::data_in_code_entry;
|
||
+
|
||
+using llvm::MachO::dylib_table_of_contents;
|
||
+
|
||
+using llvm::MachO::dylib_module;
|
||
+using llvm::MachO::dylib_module_64;
|
||
+
|
||
+using llvm::MachO::section;
|
||
+using llvm::MachO::section_64;
|
||
+
|
||
+using llvm::MachO::build_tool_version;
|
||
+using llvm::MachO::build_version_command;
|
||
+using llvm::MachO::dyld_info_command;
|
||
+using llvm::MachO::dylib;
|
||
+using llvm::MachO::dylib_command;
|
||
+using llvm::MachO::dylinker_command;
|
||
+using llvm::MachO::dysymtab_command;
|
||
+using llvm::MachO::encryption_info_command;
|
||
+using llvm::MachO::encryption_info_command_64;
|
||
+using llvm::MachO::entry_point_command;
|
||
+using llvm::MachO::linkedit_data_command;
|
||
+using llvm::MachO::linker_option_command;
|
||
+using llvm::MachO::load_command;
|
||
+using llvm::MachO::routines_command;
|
||
+using llvm::MachO::routines_command_64;
|
||
+using llvm::MachO::rpath_command;
|
||
+using llvm::MachO::segment_command;
|
||
+using llvm::MachO::segment_command_64;
|
||
+using llvm::MachO::source_version_command;
|
||
+using llvm::MachO::sub_client_command;
|
||
+using llvm::MachO::sub_framework_command;
|
||
+using llvm::MachO::sub_library_command;
|
||
+using llvm::MachO::sub_umbrella_command;
|
||
+using llvm::MachO::symtab_command;
|
||
+using llvm::MachO::thread_command;
|
||
+using llvm::MachO::twolevel_hints_command;
|
||
+using llvm::MachO::uuid_command;
|
||
+using llvm::MachO::version_min_command;
|
||
+
|
||
+using llvm::MachO::LC_BUILD_VERSION;
|
||
+using llvm::MachO::LC_CODE_SIGNATURE;
|
||
+using llvm::MachO::LC_DATA_IN_CODE;
|
||
+using llvm::MachO::LC_DYLD_ENVIRONMENT;
|
||
+using llvm::MachO::LC_DYLD_INFO;
|
||
+using llvm::MachO::LC_DYLD_INFO_ONLY;
|
||
+using llvm::MachO::LC_DYSYMTAB;
|
||
+using llvm::MachO::LC_ENCRYPTION_INFO;
|
||
+using llvm::MachO::LC_ENCRYPTION_INFO_64;
|
||
+using llvm::MachO::LC_FUNCTION_STARTS;
|
||
+using llvm::MachO::LC_ID_DYLIB;
|
||
+using llvm::MachO::LC_ID_DYLINKER;
|
||
+using llvm::MachO::LC_LINKER_OPTION;
|
||
+using llvm::MachO::LC_LOAD_DYLIB;
|
||
+using llvm::MachO::LC_LOAD_DYLINKER;
|
||
+using llvm::MachO::LC_LOAD_UPWARD_DYLIB;
|
||
+using llvm::MachO::LC_LOAD_WEAK_DYLIB;
|
||
+using llvm::MachO::LC_MAIN;
|
||
+using llvm::MachO::LC_REEXPORT_DYLIB;
|
||
+using llvm::MachO::LC_REQ_DYLD;
|
||
+using llvm::MachO::LC_ROUTINES;
|
||
+using llvm::MachO::LC_ROUTINES_64;
|
||
+using llvm::MachO::LC_RPATH;
|
||
+using llvm::MachO::LC_SEGMENT;
|
||
+using llvm::MachO::LC_SEGMENT_64;
|
||
+using llvm::MachO::LC_SEGMENT_SPLIT_INFO;
|
||
+using llvm::MachO::LC_SOURCE_VERSION;
|
||
+using llvm::MachO::LC_SUB_CLIENT;
|
||
+using llvm::MachO::LC_SUB_FRAMEWORK;
|
||
+using llvm::MachO::LC_SUB_LIBRARY;
|
||
+using llvm::MachO::LC_SUB_UMBRELLA;
|
||
+using llvm::MachO::LC_SYMTAB;
|
||
+using llvm::MachO::LC_UNIXTHREAD;
|
||
+using llvm::MachO::LC_UUID;
|
||
+using llvm::MachO::LC_VERSION_MIN_IPHONEOS;
|
||
+using llvm::MachO::LC_VERSION_MIN_MACOSX;
|
||
+using llvm::MachO::LC_VERSION_MIN_TVOS;
|
||
+using llvm::MachO::LC_VERSION_MIN_WATCHOS;
|
||
+using llvm::MachO::LC_DYLIB_CODE_SIGN_DRS;
|
||
+using llvm::MachO::LC_NOTE;
|
||
+using llvm::MachO::LC_LAZY_LOAD_DYLIB;
|
||
+using llvm::MachO::LC_PREBIND_CKSUM;
|
||
+using llvm::MachO::LC_TWOLEVEL_HINTS;
|
||
+
|
||
+using llvm::MachO::MH_ALLOW_STACK_EXECUTION;
|
||
+using llvm::MachO::MH_APP_EXTENSION_SAFE;
|
||
+using llvm::MachO::MH_BINDS_TO_WEAK;
|
||
+using llvm::MachO::MH_BUNDLE;
|
||
+using llvm::MachO::MH_CIGAM;
|
||
+using llvm::MachO::MH_CIGAM_64;
|
||
+using llvm::MachO::MH_DEAD_STRIPPABLE_DYLIB;
|
||
+using llvm::MachO::MH_DYLDLINK;
|
||
+using llvm::MachO::MH_DYLIB;
|
||
+using llvm::MachO::MH_DYLIB_STUB;
|
||
+using llvm::MachO::MH_DYLINKER;
|
||
+using llvm::MachO::MH_EXECUTE;
|
||
+using llvm::MachO::MH_LAZY_INIT;
|
||
+using llvm::MachO::MH_INCRLINK;
|
||
+using llvm::MachO::MH_HAS_TLV_DESCRIPTORS;
|
||
+using llvm::MachO::MH_KEXT_BUNDLE;
|
||
+using llvm::MachO::MH_MAGIC;
|
||
+using llvm::MachO::MH_MAGIC_64;
|
||
+using llvm::MachO::MH_NOUNDEFS;
|
||
+using llvm::MachO::MH_NO_HEAP_EXECUTION;
|
||
+using llvm::MachO::MH_NO_REEXPORTED_DYLIBS;
|
||
+using llvm::MachO::MH_OBJECT;
|
||
+using llvm::MachO::MH_PIE;
|
||
+using llvm::MachO::MH_PREBOUND;
|
||
+using llvm::MachO::MH_PRELOAD;
|
||
+using llvm::MachO::MH_SPLIT_SEGS;
|
||
+using llvm::MachO::MH_SUBSECTIONS_VIA_SYMBOLS;
|
||
+using llvm::MachO::MH_TWOLEVEL;
|
||
+using llvm::MachO::MH_WEAK_DEFINES;
|
||
+
|
||
+using llvm::MachO::BIND_IMMEDIATE_MASK;
|
||
+
|
||
+using llvm::MachO::BIND_OPCODE_ADD_ADDR_ULEB;
|
||
+using llvm::MachO::BIND_OPCODE_DONE;
|
||
+using llvm::MachO::BIND_OPCODE_DO_BIND;
|
||
+using llvm::MachO::BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED;
|
||
+using llvm::MachO::BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB;
|
||
+using llvm::MachO::BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB;
|
||
+using llvm::MachO::BIND_OPCODE_SET_ADDEND_SLEB;
|
||
+using llvm::MachO::BIND_OPCODE_SET_DYLIB_ORDINAL_IMM;
|
||
+using llvm::MachO::BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB;
|
||
+using llvm::MachO::BIND_OPCODE_SET_DYLIB_SPECIAL_IMM;
|
||
+using llvm::MachO::BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB;
|
||
+using llvm::MachO::BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM;
|
||
+using llvm::MachO::BIND_OPCODE_SET_TYPE_IMM;
|
||
+using llvm::MachO::BIND_OPCODE_MASK;
|
||
+
|
||
+using llvm::MachO::BIND_SPECIAL_DYLIB_FLAT_LOOKUP;
|
||
+using llvm::MachO::BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE;
|
||
+using llvm::MachO::BIND_SPECIAL_DYLIB_SELF;
|
||
+
|
||
+using llvm::MachO::BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION;
|
||
+using llvm::MachO::BIND_SYMBOL_FLAGS_WEAK_IMPORT;
|
||
+
|
||
+using llvm::MachO::BIND_TYPE_POINTER;
|
||
+using llvm::MachO::BIND_TYPE_TEXT_ABSOLUTE32;
|
||
+using llvm::MachO::BIND_TYPE_TEXT_PCREL32;
|
||
+
|
||
+using llvm::MachO::DICE_KIND_ABS_JUMP_TABLE32;
|
||
+using llvm::MachO::DICE_KIND_DATA;
|
||
+using llvm::MachO::DICE_KIND_JUMP_TABLE16;
|
||
+using llvm::MachO::DICE_KIND_JUMP_TABLE32;
|
||
+using llvm::MachO::DICE_KIND_JUMP_TABLE8;
|
||
+
|
||
+using llvm::MachO::EXPORT_SYMBOL_FLAGS_KIND_MASK;
|
||
+using llvm::MachO::EXPORT_SYMBOL_FLAGS_KIND_REGULAR;
|
||
+using llvm::MachO::EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL;
|
||
+using llvm::MachO::EXPORT_SYMBOL_FLAGS_REEXPORT;
|
||
+using llvm::MachO::EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER;
|
||
+using llvm::MachO::EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION;
|
||
+
|
||
+using llvm::MachO::REBASE_IMMEDIATE_MASK;
|
||
+
|
||
+using llvm::MachO::REBASE_OPCODE_MASK;
|
||
+using llvm::MachO::REBASE_OPCODE_ADD_ADDR_IMM_SCALED;
|
||
+using llvm::MachO::REBASE_OPCODE_ADD_ADDR_ULEB;
|
||
+using llvm::MachO::REBASE_OPCODE_DONE;
|
||
+using llvm::MachO::REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB;
|
||
+using llvm::MachO::REBASE_OPCODE_DO_REBASE_IMM_TIMES;
|
||
+using llvm::MachO::REBASE_OPCODE_DO_REBASE_ULEB_TIMES;
|
||
+using llvm::MachO::REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB;
|
||
+using llvm::MachO::REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB;
|
||
+using llvm::MachO::REBASE_OPCODE_SET_TYPE_IMM;
|
||
+
|
||
+using llvm::MachO::REBASE_TYPE_POINTER;
|
||
+using llvm::MachO::REBASE_TYPE_TEXT_ABSOLUTE32;
|
||
+using llvm::MachO::REBASE_TYPE_TEXT_PCREL32;
|
||
+
|
||
+using llvm::MachO::S_4BYTE_LITERALS;
|
||
+using llvm::MachO::S_8BYTE_LITERALS;
|
||
+using llvm::MachO::S_16BYTE_LITERALS;
|
||
+using llvm::MachO::S_ATTR_DEBUG;
|
||
+using llvm::MachO::S_ATTR_EXT_RELOC;
|
||
+using llvm::MachO::S_ATTR_LIVE_SUPPORT;
|
||
+using llvm::MachO::S_ATTR_LOC_RELOC;
|
||
+using llvm::MachO::S_ATTR_LOC_RELOC;
|
||
+using llvm::MachO::S_ATTR_NO_DEAD_STRIP;
|
||
+using llvm::MachO::S_ATTR_PURE_INSTRUCTIONS;
|
||
+using llvm::MachO::S_ATTR_SELF_MODIFYING_CODE;
|
||
+using llvm::MachO::S_ATTR_SOME_INSTRUCTIONS;
|
||
+using llvm::MachO::S_COALESCED;
|
||
+using llvm::MachO::S_CSTRING_LITERALS;
|
||
+using llvm::MachO::S_DTRACE_DOF;
|
||
+using llvm::MachO::S_INTERPOSING;
|
||
+using llvm::MachO::S_LAZY_DYLIB_SYMBOL_POINTERS;
|
||
+using llvm::MachO::S_LAZY_SYMBOL_POINTERS;
|
||
+using llvm::MachO::S_LITERAL_POINTERS;
|
||
+using llvm::MachO::S_MOD_INIT_FUNC_POINTERS;
|
||
+using llvm::MachO::S_MOD_TERM_FUNC_POINTERS;
|
||
+using llvm::MachO::S_NON_LAZY_SYMBOL_POINTERS;
|
||
+using llvm::MachO::S_REGULAR;
|
||
+using llvm::MachO::S_SYMBOL_STUBS;
|
||
+using llvm::MachO::S_THREAD_LOCAL_INIT_FUNCTION_POINTERS;
|
||
+using llvm::MachO::S_THREAD_LOCAL_REGULAR;
|
||
+using llvm::MachO::S_THREAD_LOCAL_VARIABLES;
|
||
+using llvm::MachO::S_THREAD_LOCAL_VARIABLE_POINTERS;
|
||
+using llvm::MachO::S_THREAD_LOCAL_ZEROFILL;
|
||
+using llvm::MachO::S_ZEROFILL;
|
||
+
|
||
+using llvm::MachO::SG_NORELOC;
|
||
+
|
||
+using llvm::MachO::INDIRECT_SYMBOL_ABS;
|
||
+using llvm::MachO::INDIRECT_SYMBOL_LOCAL;
|
||
+using llvm::MachO::SECTION_TYPE;
|
||
+using llvm::MachO::TOOL_LD;
|
||
+
|
||
+template<typename T>
|
||
+inline constexpr int operator| (llvm::MachO::SectionType lhs, T rhs) { return (int) lhs | (int) rhs; }
|
||
diff --git a/include/mach-o/nlist.h b/include/mach-o/nlist.h
|
||
new file mode 100644
|
||
index 0000000..3c319a4
|
||
--- /dev/null
|
||
+++ b/include/mach-o/nlist.h
|
||
@@ -0,0 +1,61 @@
|
||
+// SPDX-License-Identifier: APSL-2.0
|
||
+
|
||
+// Derive `nlist.h` from LLVM to avoid macro conflicts.
|
||
+
|
||
+#pragma once
|
||
+
|
||
+#include <llvm/BinaryFormat/MachO.h>
|
||
+
|
||
+using llvm::MachO::nlist;
|
||
+using llvm::MachO::nlist_64;
|
||
+
|
||
+using llvm::MachO::N_ARM_THUMB_DEF;
|
||
+
|
||
+using llvm::MachO::N_ABS;
|
||
+using llvm::MachO::N_EXT;
|
||
+using llvm::MachO::N_INDR;
|
||
+using llvm::MachO::N_PBUD;
|
||
+using llvm::MachO::N_PEXT;
|
||
+using llvm::MachO::N_SECT;
|
||
+using llvm::MachO::N_STAB;
|
||
+using llvm::MachO::N_TYPE;
|
||
+using llvm::MachO::N_UNDF;
|
||
+
|
||
+using llvm::MachO::N_ALT_ENTRY;
|
||
+using llvm::MachO::N_NO_DEAD_STRIP;
|
||
+using llvm::MachO::N_SYMBOL_RESOLVER;
|
||
+using llvm::MachO::N_WEAK_DEF;
|
||
+using llvm::MachO::N_WEAK_REF;
|
||
+
|
||
+#define N_REF_TO_WEAK 0x80 // Not defined in LLVM headers
|
||
+
|
||
+using llvm::MachO::DYNAMIC_LOOKUP_ORDINAL;
|
||
+
|
||
+using llvm::MachO::EXECUTABLE_ORDINAL;
|
||
+
|
||
+using llvm::MachO::GET_COMM_ALIGN;
|
||
+using llvm::MachO::SET_COMM_ALIGN;
|
||
+
|
||
+using llvm::MachO::GET_LIBRARY_ORDINAL;
|
||
+using llvm::MachO::SET_LIBRARY_ORDINAL;
|
||
+
|
||
+using llvm::MachO::REFERENCE_FLAG_DEFINED;
|
||
+using llvm::MachO::REFERENCE_FLAG_PRIVATE_DEFINED;
|
||
+using llvm::MachO::REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY;
|
||
+using llvm::MachO::REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY;
|
||
+using llvm::MachO::REFERENCE_FLAG_UNDEFINED_LAZY;
|
||
+using llvm::MachO::REFERENCE_FLAG_UNDEFINED_NON_LAZY;
|
||
+using llvm::MachO::REFERENCE_TYPE;
|
||
+
|
||
+using llvm::MachO::REFERENCED_DYNAMICALLY;
|
||
+
|
||
+using llvm::MachO::MAX_SECT;
|
||
+using llvm::MachO::NO_SECT;
|
||
+
|
||
+using llvm::MachO::SELF_LIBRARY_ORDINAL;
|
||
+
|
||
+template<typename T>
|
||
+inline constexpr int operator| (llvm::MachO::NListType lhs, T rhs) { return (int) lhs | (int) rhs; }
|
||
+
|
||
+template<typename T>
|
||
+inline constexpr int operator| (T lhs, llvm::MachO::NListType rhs) { return (int) lhs | (int) rhs; }
|
||
diff --git a/include/mach/machine.h b/include/mach/machine.h
|
||
new file mode 100644
|
||
index 0000000..9162c1d
|
||
--- /dev/null
|
||
+++ b/include/mach/machine.h
|
||
@@ -0,0 +1,200 @@
|
||
+// SPDX-License-Identifier: APSL-2.0
|
||
+
|
||
+// Derive `machine.h` from LLVM to avoid macro conflicts.
|
||
+
|
||
+#pragma once
|
||
+
|
||
+#include_next <mach/machine.h>
|
||
+
|
||
+#undef CPU_ARCH_MASK
|
||
+
|
||
+#undef CPU_ARCH_ABI64_32
|
||
+#undef CPU_ARCH_ABI64
|
||
+
|
||
+#undef CPU_TYPE_ANY
|
||
+
|
||
+#undef CPU_TYPE_ARM
|
||
+#undef CPU_TYPE_ARM64
|
||
+#undef CPU_TYPE_ARM64_32
|
||
+#undef CPU_TYPE_I386
|
||
+#undef CPU_TYPE_X86
|
||
+#undef CPU_TYPE_X86_64
|
||
+#undef CPU_TYPE_MC98000
|
||
+#undef CPU_TYPE_SPARC
|
||
+#undef CPU_TYPE_POWERPC
|
||
+#undef CPU_TYPE_POWERPC64
|
||
+
|
||
+#undef CPU_SUBTYPE_MASK
|
||
+
|
||
+#undef CPU_SUBTYPE_ARM64E
|
||
+#undef CPU_SUBTYPE_ARM64_32_V8
|
||
+#undef CPU_SUBTYPE_ARM64_ALL
|
||
+#undef CPU_SUBTYPE_ARM64_V8
|
||
+#undef CPU_SUBTYPE_ARM_ALL
|
||
+#undef CPU_SUBTYPE_ARM_XSCALE
|
||
+#undef CPU_SUBTYPE_ARM_V4T
|
||
+#undef CPU_SUBTYPE_ARM_V5TEJ
|
||
+#undef CPU_SUBTYPE_ARM_V6
|
||
+#undef CPU_SUBTYPE_ARM_V6M
|
||
+#undef CPU_SUBTYPE_ARM_V7
|
||
+#undef CPU_SUBTYPE_ARM_V7EM
|
||
+#undef CPU_SUBTYPE_ARM_V7F
|
||
+#undef CPU_SUBTYPE_ARM_V7K
|
||
+#undef CPU_SUBTYPE_ARM_V7M
|
||
+#undef CPU_SUBTYPE_ARM_V7S
|
||
+#undef CPU_SUBTYPE_ARM_V8
|
||
+
|
||
+#undef CPU_SUBTYPE_I386_ALL
|
||
+#undef CPU_SUBTYPE_386
|
||
+#undef CPU_SUBTYPE_486
|
||
+#undef CPU_SUBTYPE_486SX
|
||
+#undef CPU_SUBTYPE_586
|
||
+#undef CPU_SUBTYPE_PENT
|
||
+#undef CPU_SUBTYPE_PENTPRO
|
||
+#undef CPU_SUBTYPE_PENTII_M3
|
||
+#undef CPU_SUBTYPE_PENTII_M5
|
||
+#undef CPU_SUBTYPE_CELERON
|
||
+#undef CPU_SUBTYPE_CELERON_MOBILE
|
||
+#undef CPU_SUBTYPE_PENTIUM_3
|
||
+#undef CPU_SUBTYPE_PENTIUM_3_M
|
||
+#undef CPU_SUBTYPE_PENTIUM_3_XEON
|
||
+#undef CPU_SUBTYPE_PENTIUM_M
|
||
+#undef CPU_SUBTYPE_PENTIUM_4
|
||
+#undef CPU_SUBTYPE_PENTIUM_4_M
|
||
+#undef CPU_SUBTYPE_ITANIUM
|
||
+#undef CPU_SUBTYPE_ITANIUM_2
|
||
+#undef CPU_SUBTYPE_XEON
|
||
+#undef CPU_SUBTYPE_XEON_MP
|
||
+
|
||
+#undef CPU_SUBTYPE_X86_ALL
|
||
+#undef CPU_SUBTYPE_X86_ARCH1
|
||
+
|
||
+#undef CPU_SUBTYPE_X86_64_ALL
|
||
+#undef CPU_SUBTYPE_X86_64_H
|
||
+
|
||
+#undef CPU_SUBTYPE_INTEL
|
||
+#undef CPU_SUBTYPE_INTEL_FAMILY
|
||
+#undef CPU_SUBTYPE_INTEL_FAMILY_MAX
|
||
+#undef CPU_SUBTYPE_INTEL_MODEL
|
||
+#undef CPU_SUBTYPE_INTEL_MODEL_ALL
|
||
+
|
||
+#undef CPU_SUBTYPE_POWERPC_ALL
|
||
+#undef CPU_SUBTYPE_POWERPC_601
|
||
+#undef CPU_SUBTYPE_POWERPC_602
|
||
+#undef CPU_SUBTYPE_POWERPC_603
|
||
+#undef CPU_SUBTYPE_POWERPC_603e
|
||
+#undef CPU_SUBTYPE_POWERPC_603ev
|
||
+#undef CPU_SUBTYPE_POWERPC_604
|
||
+#undef CPU_SUBTYPE_POWERPC_604e
|
||
+#undef CPU_SUBTYPE_POWERPC_620
|
||
+#undef CPU_SUBTYPE_POWERPC_750
|
||
+#undef CPU_SUBTYPE_POWERPC_7400
|
||
+#undef CPU_SUBTYPE_POWERPC_7450
|
||
+#undef CPU_SUBTYPE_POWERPC_970
|
||
+
|
||
+#undef CPU_SUBTYPE_MC98601
|
||
+
|
||
+#undef CPU_SUBTYPE_SPARC_ALL
|
||
+
|
||
+#undef CPU_SUBTYPE_LIB64
|
||
+#undef CPU_SUBTYPE_MULTIPLE
|
||
+
|
||
+#include <llvm/BinaryFormat/MachO.h>
|
||
+
|
||
+using llvm::MachO::CPU_ARCH_MASK;
|
||
+
|
||
+using llvm::MachO::CPU_ARCH_ABI64_32;
|
||
+using llvm::MachO::CPU_ARCH_ABI64;
|
||
+
|
||
+using llvm::MachO::CPU_TYPE_ANY;
|
||
+
|
||
+using llvm::MachO::CPU_TYPE_ARM;
|
||
+using llvm::MachO::CPU_TYPE_ARM64;
|
||
+using llvm::MachO::CPU_TYPE_ARM64_32;
|
||
+using llvm::MachO::CPU_TYPE_I386;
|
||
+using llvm::MachO::CPU_TYPE_X86;
|
||
+using llvm::MachO::CPU_TYPE_X86_64;
|
||
+using llvm::MachO::CPU_TYPE_MC98000;
|
||
+using llvm::MachO::CPU_TYPE_SPARC;
|
||
+using llvm::MachO::CPU_TYPE_POWERPC;
|
||
+using llvm::MachO::CPU_TYPE_POWERPC64;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_MASK;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM64E;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM64_32_V8;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM64_ALL;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM64_V8;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_ALL;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_XSCALE;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V4T;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V5TEJ;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V6;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V6M;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V7;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V7EM;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V7K;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V7M;
|
||
+using llvm::MachO::CPU_SUBTYPE_ARM_V7S;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_I386_ALL;
|
||
+using llvm::MachO::CPU_SUBTYPE_386;
|
||
+using llvm::MachO::CPU_SUBTYPE_486;
|
||
+using llvm::MachO::CPU_SUBTYPE_486SX;
|
||
+using llvm::MachO::CPU_SUBTYPE_586;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENT;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTPRO;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTII_M3;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTII_M5;
|
||
+using llvm::MachO::CPU_SUBTYPE_CELERON;
|
||
+using llvm::MachO::CPU_SUBTYPE_CELERON_MOBILE;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTIUM_3;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTIUM_3_M;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTIUM_3_XEON;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTIUM_M;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTIUM_4;
|
||
+using llvm::MachO::CPU_SUBTYPE_PENTIUM_4_M;
|
||
+using llvm::MachO::CPU_SUBTYPE_ITANIUM;
|
||
+using llvm::MachO::CPU_SUBTYPE_ITANIUM_2;
|
||
+using llvm::MachO::CPU_SUBTYPE_XEON;
|
||
+using llvm::MachO::CPU_SUBTYPE_XEON_MP;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_X86_ALL;
|
||
+using llvm::MachO::CPU_SUBTYPE_X86_ARCH1;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_X86_64_ALL;
|
||
+using llvm::MachO::CPU_SUBTYPE_X86_64_H;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_INTEL;
|
||
+using llvm::MachO::CPU_SUBTYPE_INTEL_FAMILY;
|
||
+using llvm::MachO::CPU_SUBTYPE_INTEL_FAMILY_MAX;
|
||
+using llvm::MachO::CPU_SUBTYPE_INTEL_MODEL;
|
||
+using llvm::MachO::CPU_SUBTYPE_INTEL_MODEL_ALL;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_ALL;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_601;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_602;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_603;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_603e;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_603ev;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_604;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_604e;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_620;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_750;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_7400;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_7450;
|
||
+using llvm::MachO::CPU_SUBTYPE_POWERPC_970;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_MC98601;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_SPARC_ALL;
|
||
+
|
||
+using llvm::MachO::CPU_SUBTYPE_LIB64;
|
||
+using llvm::MachO::CPU_SUBTYPE_MULTIPLE;
|
||
+
|
||
+// These definitions aren’t in the LLVM headers.
|
||
+#define CPU_TYPE_RISCV32 24
|
||
+
|
||
+#define CPU_SUBTYPE_ARM_V7F 10
|
||
+#define CPU_SUBTYPE_ARM_V8 CPU_SUBTYPE_ARM64_V8
|
||
+#define CPU_SUBTYPE_RISCV32_ALL 0
|
||
diff --git a/include/mach/vm_prot.h b/include/mach/vm_prot.h
|
||
new file mode 100644
|
||
index 0000000..e524808
|
||
--- /dev/null
|
||
+++ b/include/mach/vm_prot.h
|
||
@@ -0,0 +1,13 @@
|
||
+// SPDX-License-Identifier: APSL-2.0
|
||
+
|
||
+// Derive `vm_prot.h` from LLVM to avoid macro conflicts.
|
||
+
|
||
+#pragma once
|
||
+
|
||
+#include <llvm/BinaryFormat/MachO.h>
|
||
+
|
||
+using llvm::MachO::VM_PROT_EXECUTE;
|
||
+using llvm::MachO::VM_PROT_READ;
|
||
+using llvm::MachO::VM_PROT_WRITE;
|
||
+
|
||
+#include_next <mach/vm_prot.h>
|
||
diff --git a/src/abstraction/MachOFileAbstraction.hpp b/src/abstraction/MachOFileAbstraction.hpp
|
||
index 71e7765..e8d9b5c 100644
|
||
--- a/src/abstraction/MachOFileAbstraction.hpp
|
||
+++ b/src/abstraction/MachOFileAbstraction.hpp
|
||
@@ -847,8 +847,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t name_offset() const INLINE { return E::get32(fields.dylib.name.offset); }
|
||
- void set_name_offset(uint32_t value) INLINE { E::set32(fields.dylib.name.offset, value); }
|
||
+ uint32_t name_offset() const INLINE { return E::get32(fields.dylib.name); }
|
||
+ void set_name_offset(uint32_t value) INLINE { E::set32(fields.dylib.name, value); }
|
||
|
||
uint32_t timestamp() const INLINE { return E::get32(fields.dylib.timestamp); }
|
||
void set_timestamp(uint32_t value) INLINE { E::set32(fields.dylib.timestamp, value); }
|
||
@@ -880,8 +880,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t name_offset() const INLINE { return E::get32(fields.name.offset); }
|
||
- void set_name_offset(uint32_t value) INLINE { E::set32(fields.name.offset, value); }
|
||
+ uint32_t name_offset() const INLINE { return E::get32(fields.name); }
|
||
+ void set_name_offset(uint32_t value) INLINE { E::set32(fields.name, value); }
|
||
|
||
const char* name() const INLINE { return (const char*)&fields + name_offset(); }
|
||
void set_name_offset() INLINE { set_name_offset(sizeof(fields)); }
|
||
@@ -904,8 +904,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t umbrella_offset() const INLINE { return E::get32(fields.umbrella.offset); }
|
||
- void set_umbrella_offset(uint32_t value) INLINE { E::set32(fields.umbrella.offset, value); }
|
||
+ uint32_t umbrella_offset() const INLINE { return E::get32(fields.umbrella); }
|
||
+ void set_umbrella_offset(uint32_t value) INLINE { E::set32(fields.umbrella, value); }
|
||
|
||
const char* umbrella() const INLINE { return (const char*)&fields + umbrella_offset(); }
|
||
void set_umbrella_offset() INLINE { set_umbrella_offset(sizeof(fields)); }
|
||
@@ -928,8 +928,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t client_offset() const INLINE { return E::get32(fields.client.offset); }
|
||
- void set_client_offset(uint32_t value) INLINE { E::set32(fields.client.offset, value); }
|
||
+ uint32_t client_offset() const INLINE { return E::get32(fields.client); }
|
||
+ void set_client_offset(uint32_t value) INLINE { E::set32(fields.client, value); }
|
||
|
||
const char* client() const INLINE { return (const char*)&fields + client_offset(); }
|
||
void set_client_offset() INLINE { set_client_offset(sizeof(fields)); }
|
||
@@ -952,8 +952,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t sub_umbrella_offset() const INLINE { return E::get32(fields.sub_umbrella.offset); }
|
||
- void set_sub_umbrella_offset(uint32_t value) INLINE { E::set32(fields.sub_umbrella.offset, value); }
|
||
+ uint32_t sub_umbrella_offset() const INLINE { return E::get32(fields.sub_umbrella); }
|
||
+ void set_sub_umbrella_offset(uint32_t value) INLINE { E::set32(fields.sub_umbrella, value); }
|
||
|
||
const char* sub_umbrella() const INLINE { return (const char*)&fields + sub_umbrella_offset(); }
|
||
void set_sub_umbrella_offset() INLINE { set_sub_umbrella_offset(sizeof(fields)); }
|
||
@@ -976,8 +976,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t sub_library_offset() const INLINE { return E::get32(fields.sub_library.offset); }
|
||
- void set_sub_library_offset(uint32_t value) INLINE { E::set32(fields.sub_library.offset, value); }
|
||
+ uint32_t sub_library_offset() const INLINE { return E::get32(fields.sub_library); }
|
||
+ void set_sub_library_offset(uint32_t value) INLINE { E::set32(fields.sub_library, value); }
|
||
|
||
const char* sub_library() const INLINE { return (const char*)&fields + sub_library_offset(); }
|
||
void set_sub_library_offset() INLINE { set_sub_library_offset(sizeof(fields)); }
|
||
@@ -1355,8 +1355,8 @@ public:
|
||
uint32_t cmdsize() const INLINE { return E::get32(fields.cmdsize); }
|
||
void set_cmdsize(uint32_t value) INLINE { E::set32(fields.cmdsize, value); }
|
||
|
||
- uint32_t path_offset() const INLINE { return E::get32(fields.path.offset); }
|
||
- void set_path_offset(uint32_t value) INLINE { E::set32(fields.path.offset, value); }
|
||
+ uint32_t path_offset() const INLINE { return E::get32(fields.path); }
|
||
+ void set_path_offset(uint32_t value) INLINE { E::set32(fields.path, value); }
|
||
|
||
const char* path() const INLINE { return (const char*)&fields + path_offset(); }
|
||
void set_path_offset() INLINE { set_path_offset(sizeof(fields)); }
|
||
@@ -1381,8 +1381,8 @@ template <> struct macho_nlist_content<Pointer64<LittleEndian> > { struct nlist_
|
||
template <typename P>
|
||
class macho_nlist {
|
||
public:
|
||
- uint32_t n_strx() const INLINE { return E::get32(entry.fields.n_un.n_strx); }
|
||
- void set_n_strx(uint32_t value) INLINE { E::set32((uint32_t&)entry.fields.n_un.n_strx, value); }
|
||
+ uint32_t n_strx() const INLINE { return E::get32(entry.fields.n_strx); }
|
||
+ void set_n_strx(uint32_t value) INLINE { E::set32((uint32_t&)entry.fields.n_strx, value); }
|
||
|
||
uint8_t n_type() const INLINE { return entry.fields.n_type; }
|
||
void set_n_type(uint8_t value) INLINE { entry.fields.n_type = value; }
|
||
--
|
||
2.47.2
|
||
|