diff --git a/llvm/include/llvm/BinaryFormat/MachO.def b/llvm/include/llvm/BinaryFormat/MachO.def index f68ecefa6c9e4d..6d1ddda3bfa9a7 100644 --- a/llvm/include/llvm/BinaryFormat/MachO.def +++ b/llvm/include/llvm/BinaryFormat/MachO.def @@ -76,6 +76,7 @@ HANDLE_LOAD_COMMAND(LC_NOTE, 0x00000031u, note_command) HANDLE_LOAD_COMMAND(LC_BUILD_VERSION, 0x00000032u, build_version_command) HANDLE_LOAD_COMMAND(LC_DYLD_EXPORTS_TRIE, 0x80000033u, linkedit_data_command) HANDLE_LOAD_COMMAND(LC_DYLD_CHAINED_FIXUPS, 0x80000034u, linkedit_data_command) +HANDLE_LOAD_COMMAND(LC_FILESET_ENTRY, 0x80000035u, fileset_entry_command) #endif @@ -114,6 +115,7 @@ LOAD_COMMAND_STRUCT(uuid_command) LOAD_COMMAND_STRUCT(version_min_command) LOAD_COMMAND_STRUCT(note_command) LOAD_COMMAND_STRUCT(build_version_command) +LOAD_COMMAND_STRUCT(fileset_entry_command) #endif diff --git a/llvm/include/llvm/BinaryFormat/MachO.h b/llvm/include/llvm/BinaryFormat/MachO.h index cdc8792e7b2d95..8fcaeb0eb1b051 100644 --- a/llvm/include/llvm/BinaryFormat/MachO.h +++ b/llvm/include/llvm/BinaryFormat/MachO.h @@ -50,7 +50,8 @@ enum HeaderFileType { MH_BUNDLE = 0x8u, MH_DYLIB_STUB = 0x9u, MH_DSYM = 0xAu, - MH_KEXT_BUNDLE = 0xBu + MH_KEXT_BUNDLE = 0xBu, + MH_FILESET = 0xCu, }; enum { @@ -885,6 +886,14 @@ struct linker_option_command { uint32_t count; }; +struct fileset_entry_command { + uint32_t cmd; + uint32_t cmdsize; + uint64_t vmaddr; + uint64_t fileoff; + uint32_t entry_id; +}; + // The symseg_command is obsolete and no longer supported. struct symseg_command { uint32_t cmd; @@ -1363,6 +1372,14 @@ inline void swapStruct(linker_option_command &C) { sys::swapByteOrder(C.count); } +inline void swapStruct(fileset_entry_command &C) { + sys::swapByteOrder(C.cmd); + sys::swapByteOrder(C.cmdsize); + sys::swapByteOrder(C.vmaddr); + sys::swapByteOrder(C.fileoff); + sys::swapByteOrder(C.entry_id); +} + inline void swapStruct(version_min_command &C) { sys::swapByteOrder(C.cmd); sys::swapByteOrder(C.cmdsize); diff --git a/llvm/lib/ObjectYAML/MachOYAML.cpp b/llvm/lib/ObjectYAML/MachOYAML.cpp index b6f3b53a42b3a3..81b1d46c7c8e50 100644 --- a/llvm/lib/ObjectYAML/MachOYAML.cpp +++ b/llvm/lib/ObjectYAML/MachOYAML.cpp @@ -613,6 +613,13 @@ void MappingTraits::mapping( IO.mapRequired("ntools", LoadCommand.ntools); } +void MappingTraits::mapping( + IO &IO, MachO::fileset_entry_command &LoadCommand) { + IO.mapRequired("vmaddr", LoadCommand.vmaddr); + IO.mapRequired("fileoff", LoadCommand.fileoff); + IO.mapRequired("id", LoadCommand.entry_id); +} + } // end namespace yaml } // end namespace llvm