authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-01-14 22:32:33+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-01-14 22:32:33+01:00
logb3471ef3009c4e3164145692b1b5d0662077d949
treefb1cca18af4d59804a03c0330057f75082957992
parent1e481dfef5a2241bfc5460214dbd0daffe5063bc

macho: code signature needs to be 16 bytes aligned


1 files changed, 5 insertions(+), 2 deletions(-)

src/link/MachO.zig+5-2
......@@ -6044,7 +6044,10 @@ fn writeCodeSignaturePadding(self: *MachO) !void {
60446044
60456045 const linkedit_segment = &self.load_commands.items[self.linkedit_segment_cmd_index.?].segment;
60466046 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);
60486051 const needed_size = CodeSignature.calcCodeSignaturePaddingSize(
60496052 self.base.options.emit.?.sub_path,
60506053 fileoff,
......@@ -6054,7 +6057,7 @@ fn writeCodeSignaturePadding(self: *MachO) !void {
60546057 code_sig_cmd.datasize = needed_size;
60556058
60566059 // Advance size of __LINKEDIT segment
6057 linkedit_segment.inner.filesize += needed_size;
6060 linkedit_segment.inner.filesize += needed_size + padding;
60586061 if (linkedit_segment.inner.vmsize < linkedit_segment.inner.filesize) {
60596062 linkedit_segment.inner.vmsize = mem.alignForwardGeneric(u64, linkedit_segment.inner.filesize, self.page_size);
60606063 }