| ... | @@ -6044,7 +6044,10 @@ fn writeCodeSignaturePadding(self: *MachO) !void { | ... | @@ -6044,7 +6044,10 @@ fn writeCodeSignaturePadding(self: *MachO) !void { |
| 6044 | | 6044 | |
| 6045 | const linkedit_segment = &self.load_commands.items[self.linkedit_segment_cmd_index.?].segment; | 6045 | const linkedit_segment = &self.load_commands.items[self.linkedit_segment_cmd_index.?].segment; |
| 6046 | const code_sig_cmd = &self.load_commands.items[self.code_signature_cmd_index.?].linkedit_data; | 6046 | const code_sig_cmd = &self.load_commands.items[self.code_signature_cmd_index.?].linkedit_data; |
| 6047 | const fileoff = linkedit_segment.inner.fileoff + linkedit_segment.inner.filesize; | 6047 | // Code signature data has to be 16-bytes aligned for Apple tools to recognize the file |
| | 6048 | // https://github.com/opensource-apple/cctools/blob/fdb4825f303fd5c0751be524babd32958181b3ed/libstuff/checkout.c#L271 |
| | 6049 | const fileoff = mem.alignForwardGeneric(u64, linkedit_segment.inner.fileoff + linkedit_segment.inner.filesize, 16); |
| | 6050 | const padding = fileoff - (linkedit_segment.inner.fileoff + linkedit_segment.inner.filesize); |
| 6048 | const needed_size = CodeSignature.calcCodeSignaturePaddingSize( | 6051 | const needed_size = CodeSignature.calcCodeSignaturePaddingSize( |
| 6049 | self.base.options.emit.?.sub_path, | 6052 | self.base.options.emit.?.sub_path, |
| 6050 | fileoff, | 6053 | fileoff, |
| ... | @@ -6054,7 +6057,7 @@ fn writeCodeSignaturePadding(self: *MachO) !void { | ... | @@ -6054,7 +6057,7 @@ fn writeCodeSignaturePadding(self: *MachO) !void { |
| 6054 | code_sig_cmd.datasize = needed_size; | 6057 | code_sig_cmd.datasize = needed_size; |
| 6055 | | 6058 | |
| 6056 | // Advance size of __LINKEDIT segment | 6059 | // Advance size of __LINKEDIT segment |
| 6057 | linkedit_segment.inner.filesize += needed_size; | 6060 | linkedit_segment.inner.filesize += needed_size + padding; |
| 6058 | if (linkedit_segment.inner.vmsize < linkedit_segment.inner.filesize) { | 6061 | if (linkedit_segment.inner.vmsize < linkedit_segment.inner.filesize) { |
| 6059 | linkedit_segment.inner.vmsize = mem.alignForwardGeneric(u64, linkedit_segment.inner.filesize, self.page_size); | 6062 | linkedit_segment.inner.vmsize = mem.alignForwardGeneric(u64, linkedit_segment.inner.filesize, self.page_size); |
| 6060 | } | 6063 | } |