diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2020-11-20 11:50:44 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2020-11-26 11:50:09 +0100 |
| commit | 9dcf7ee9c904b25fbffd264cabeb6638e9d9e2d6 (patch) | |
| tree | b15b3c0bcc0708e44e8009b15a4c0dc72f723a6a /src | |
| parent | 79381dc4fb1f7eb92b5e01d21f866f550ca3ff20 (diff) | |
| download | zig-9dcf7ee9c904b25fbffd264cabeb6638e9d9e2d6.tar.gz zig-9dcf7ee9c904b25fbffd264cabeb6638e9d9e2d6.zip | |
stage2 macho: add info about __TEXT segment
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/MachO.zig | 2 | ||||
| -rw-r--r-- | src/link/MachO/CodeSignature.zig | 18 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 431dcf714c..f77f05fb33 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -1758,7 +1758,7 @@ fn writecodeSignature(self: *MachO) !void { var code_sig = CodeSignature.init(self.base.allocator); defer code_sig.deinit(); - try code_sig.calcAdhocSignature(); + try code_sig.calcAdhocSignature(self); var buffer = try self.base.allocator.alloc(u8, code_sig.size()); defer self.base.allocator.free(buffer); diff --git a/src/link/MachO/CodeSignature.zig b/src/link/MachO/CodeSignature.zig index fbc67dbabd..25b1e9e9ff 100644 --- a/src/link/MachO/CodeSignature.zig +++ b/src/link/MachO/CodeSignature.zig @@ -8,6 +8,8 @@ const mem = std.mem; const testing = std.testing; const Allocator = mem.Allocator; +const MachO = @import("../MachO.zig"); + const Blob = struct { inner: macho.CodeDirectory, data: std.ArrayListUnmanaged(u8) = .{}, @@ -56,13 +58,17 @@ pub fn init(alloc: *Allocator) CodeSignature { }; } -pub fn calcAdhocSignature(self: *CodeSignature) !void { +pub fn calcAdhocSignature(self: *CodeSignature, bin_file: *const MachO) !void { + const text_segment = bin_file.load_commands.items[bin_file.text_segment_cmd_index.?].Segment; + const execSegBase: u64 = text_segment.fileoff; + const execSegLimit: u64 = text_segment.filesize; + const execSegFlags: u64 = text_segment.flags; var blob = Blob{ .inner = .{ .magic = macho.CSMAGIC_CODEDIRECTORY, .length = @sizeOf(macho.CodeDirectory), - .version = 0x20400, - .flags = 0, + .version = macho.CS_SUPPORTSEXECSEG, + .flags = macho.CS_ADHOC, .hashOffset = 0, .identOffset = 0, .nSpecialSlots = 0, @@ -77,9 +83,9 @@ pub fn calcAdhocSignature(self: *CodeSignature) !void { .teamOffset = 0, .spare3 = 0, .codeLimit64 = 0, - .execSegBase = 0, - .execSegLimit = 0, - .execSegFlags = 0, + .execSegBase = execSegBase, + .execSegLimit = execSegLimit, + .execSegFlags = execSegFlags, }, }; self.inner.length += @sizeOf(macho.BlobIndex) + blob.size(); |
