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/link/MachO/CodeSignature.zig | |
| parent | 79381dc4fb1f7eb92b5e01d21f866f550ca3ff20 (diff) | |
| download | zig-9dcf7ee9c904b25fbffd264cabeb6638e9d9e2d6.tar.gz zig-9dcf7ee9c904b25fbffd264cabeb6638e9d9e2d6.zip | |
stage2 macho: add info about __TEXT segment
Diffstat (limited to 'src/link/MachO/CodeSignature.zig')
| -rw-r--r-- | src/link/MachO/CodeSignature.zig | 18 |
1 files changed, 12 insertions, 6 deletions
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(); |
