mirror of
https://github.com/ziglang/zig.git
synced 2026-02-17 14:59:14 +00:00
link.MachO: code sig size grows when emitting it
This commit is contained in:
parent
5be9df710c
commit
e418197247
@ -3015,24 +3015,30 @@ pub fn writeCodeSignature(self: *MachO, code_sig: *CodeSignature) !void {
|
||||
const offset = self.codesig_cmd.dataoff;
|
||||
const gpa = self.base.comp.gpa;
|
||||
|
||||
const buffer = try gpa.alloc(u8, code_sig.size());
|
||||
defer gpa.free(buffer);
|
||||
var writer: Writer = .fixed(buffer);
|
||||
try code_sig.writeAdhocSignature(self, .{
|
||||
var buffer: std.Io.Writer.Allocating = .init(gpa);
|
||||
defer buffer.deinit();
|
||||
// The writeAdhocSignature function internally changes code_sig.size()
|
||||
// during the execution.
|
||||
try buffer.ensureUnusedCapacity(code_sig.size());
|
||||
|
||||
code_sig.writeAdhocSignature(self, .{
|
||||
.file = self.base.file.?,
|
||||
.exec_seg_base = seg.fileoff,
|
||||
.exec_seg_limit = seg.filesize,
|
||||
.file_size = offset,
|
||||
.dylib = self.base.isDynLib(),
|
||||
}, &writer);
|
||||
assert(writer.buffered().len == code_sig.size());
|
||||
}, &buffer.writer) catch |err| switch (err) {
|
||||
error.WriteFailed => return error.OutOfMemory,
|
||||
else => |e| return e,
|
||||
};
|
||||
assert(buffer.written().len == code_sig.size());
|
||||
|
||||
log.debug("writing code signature from 0x{x} to 0x{x}", .{
|
||||
offset,
|
||||
offset + writer.buffered().len,
|
||||
offset + buffer.written().len,
|
||||
});
|
||||
|
||||
try self.pwriteAll(writer.buffered(), offset);
|
||||
try self.pwriteAll(buffer.written(), offset);
|
||||
}
|
||||
|
||||
pub fn updateFunc(
|
||||
|
||||
@ -263,7 +263,7 @@ pub fn writeAdhocSignature(
|
||||
self: *CodeSignature,
|
||||
macho_file: *MachO,
|
||||
opts: WriteOpts,
|
||||
writer: anytype,
|
||||
writer: *std.Io.Writer,
|
||||
) !void {
|
||||
const tracy = trace(@src());
|
||||
defer tracy.end();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user