diff --git a/src/p_mach.h b/src/p_mach.h index aa2f30c5..721963ba 100644 --- a/src/p_mach.h +++ b/src/p_mach.h @@ -269,6 +269,16 @@ __packed_struct(Mach_twolevel_hints_command) #include "p_mach_enum.h" __packed_struct_end() +template +__packed_struct(Mach_linkedit_data_command) + typedef typename TMachITypes::Word Word; + + Word cmd; + Word cmdsize; + Word dataoff; // file offset of data in __LINKEDIT segment + Word datasize; // file size of data in __LINKEDIT segment +__packed_struct_end() + template __packed_struct(Mach_ppc_thread_state) typedef typename TMachITypes::Addr Addr; @@ -392,6 +402,7 @@ struct MachClass_32 typedef N_Mach::Mach_segsplit_info_command Mach_segsplit_info_command; typedef N_Mach::Mach_routines_command Mach_routines_command; typedef N_Mach::Mach_twolevel_hints_command Mach_twolevel_hints_command; + typedef N_Mach::Mach_linkedit_data_command Mach_linkedit_data_command; typedef N_Mach::Mach_ppc_thread_state Mach_ppc_thread_state; typedef N_Mach::Mach_i386_thread_state Mach_i386_thread_state; typedef N_Mach::Mach_AMD64_thread_state Mach_AMD64_thread_state; @@ -428,6 +439,7 @@ struct MachClass_64 typedef N_Mach::Mach_segsplit_info_command Mach_segsplit_info_command; typedef N_Mach::Mach_routines_command_64 Mach_routines_command; typedef N_Mach::Mach_twolevel_hints_command Mach_twolevel_hints_command; + typedef N_Mach::Mach_linkedit_data_command Mach_linkedit_data_command; static void compileTimeAssertions() { BeLePolicy::compileTimeAssertions(); @@ -452,6 +464,7 @@ typedef MachClass_Host32::Mach_dysymtab_command Mach32_dysymtab_command; typedef MachClass_Host32::Mach_segsplit_info_command Mach32_segsplit_info_command; typedef MachClass_Host32::Mach_routines_command Mach32_routines_command; typedef MachClass_Host32::Mach_twolevel_hints_command Mach32_twolevel_hints_command; +typedef MachClass_Host32::Mach_linkedit_data_command Mach32_linkedit_data_command; typedef MachClass_Host64::Mach_segment_command Mach64_segment_command; typedef MachClass_Host64::Mach_section_command Mach64_section_command; @@ -460,6 +473,7 @@ typedef MachClass_Host64::Mach_dysymtab_command Mach64_dysymtab_command; typedef MachClass_Host64::Mach_segsplit_info_command Mach64_segsplit_info_command; typedef MachClass_Host64::Mach_routines_command Mach64_routines_command; typedef MachClass_Host64::Mach_twolevel_hints_command Mach64_twolevel_hints_command; +typedef MachClass_Host64::Mach_linkedit_data_command Mach64_linkedit_data_command; typedef MachClass_BE32::Mach_segment_command MachBE32_segment_command; typedef MachClass_BE32::Mach_section_command MachBE32_section_command; @@ -468,6 +482,7 @@ typedef MachClass_BE32::Mach_dysymtab_command MachBE32_dysymtab_command; typedef MachClass_BE32::Mach_segsplit_info_command MachBE32_segsplit_info_command; typedef MachClass_BE32::Mach_routines_command MachBE32_routines_command; typedef MachClass_BE32::Mach_twolevel_hints_command MachBE32_twolevel_hints_command; +typedef MachClass_BE32::Mach_linkedit_data_command MachBE32_linkedit_data_command; typedef MachClass_BE64::Mach_segment_command MachBE64_segment_command; typedef MachClass_BE64::Mach_section_command MachBE64_section_command; @@ -476,6 +491,7 @@ typedef MachClass_BE64::Mach_dysymtab_command MachBE64_dysymtab_command; typedef MachClass_BE64::Mach_segsplit_info_command MachBE64_segsplit_info_command; typedef MachClass_BE64::Mach_routines_command MachBE64_routines_command; typedef MachClass_BE64::Mach_twolevel_hints_command MachBE64_twolevel_hints_command; +typedef MachClass_BE64::Mach_linkedit_data_command MachBE64_linkedit_data_command; typedef MachClass_LE32::Mach_segment_command MachLE32_segment_command; typedef MachClass_LE32::Mach_section_command MachLE32_section_command; @@ -484,6 +500,7 @@ typedef MachClass_LE32::Mach_dysymtab_command MachLE32_dysymtab_command; typedef MachClass_LE32::Mach_segsplit_info_command MachLE32_segsplit_info_command; typedef MachClass_LE32::Mach_routines_command MachLE32_routines_command; typedef MachClass_LE32::Mach_twolevel_hints_command MachLE32_twolevel_hints_command; +typedef MachClass_LE32::Mach_linkedit_data_command MachLE32_linkedit_data_command; typedef MachClass_LE64::Mach_segment_command MachLE64_segment_command; typedef MachClass_LE64::Mach_section_command MachLE64_section_command; @@ -492,6 +509,7 @@ typedef MachClass_LE64::Mach_dysymtab_command MachLE64_dysymtab_command; typedef MachClass_LE64::Mach_segsplit_info_command MachLE64_segsplit_info_command; typedef MachClass_LE64::Mach_routines_command MachLE64_routines_command; typedef MachClass_LE64::Mach_twolevel_hints_command MachLE64_twolevel_hints_command; +typedef MachClass_LE64::Mach_linkedit_data_command MachLE64_linkedit_data_command; typedef MachClass_BE32::Mach_ppc_thread_state Mach_ppc_thread_state; typedef MachClass_LE32::Mach_i386_thread_state Mach_i386_thread_state; @@ -522,6 +540,7 @@ protected: typedef typename MachClass::Mach_segsplit_info_command Mach_segsplit_info_command; typedef typename MachClass::Mach_routines_command Mach_routines_command; typedef typename MachClass::Mach_twolevel_hints_command Mach_twolevel_hints_command; + typedef typename MachClass::Mach_linkedit_data_command Mach_linkedit_data_command; public: PackMachBase(InputFile *, unsigned cpuid, unsigned filetype, @@ -575,7 +594,8 @@ protected: Mach_header mhdri; Mach_header mhdro; - Mach_segment_command segcmdo; + Mach_segment_command segcmdo[2]; // __TEXT; __LINKEDIT (needed for code signing) + Mach_linkedit_data_command linkedito; __packed_struct(b_info) // 12-byte header before each compressed block TE32 sz_unc; // uncompressed_size