diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2024-02-24 18:47:37 +0100 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2024-02-26 02:22:36 +0100 |
| commit | d7276c1527a298ba8647f312d5e86615bbc99eda (patch) | |
| tree | 82d4e668ebab577772191d6c55e1e46522b45f05 /src/link/MachO.zig | |
| parent | aa39e98d9024ab68246ae45b2d67c7eda46f28ab (diff) | |
| download | zig-d7276c1527a298ba8647f312d5e86615bbc99eda.tar.gz zig-d7276c1527a298ba8647f312d5e86615bbc99eda.zip | |
macho: actually set SG_READ_ONLY on __DATA_CONST segment
Diffstat (limited to 'src/link/MachO.zig')
| -rw-r--r-- | src/link/MachO.zig | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 69dcf7aba1..946e6a7d74 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2170,8 +2170,7 @@ fn initSegments(self: *MachO) !void { for (slice.items(.header)) |header| { const segname = header.segName(); if (self.getSegmentByName(segname) == null) { - const flags: u32 = if (mem.startsWith(u8, segname, "__DATA_CONST")) macho.SG_READ_ONLY else 0; - _ = try self.addSegment(segname, .{ .prot = getSegmentProt(segname), .flags = flags }); + _ = try self.addSegment(segname, .{ .prot = getSegmentProt(segname) }); } } @@ -2247,6 +2246,12 @@ fn initSegments(self: *MachO) !void { segment.nsects += 1; seg_id.* = segment_id; } + + // Set __DATA_CONST as READ_ONLY + if (self.getSegmentByName("__DATA_CONST")) |seg_id| { + const seg = &self.segments.items[seg_id]; + seg.flags |= macho.SG_READ_ONLY; + } } fn allocateSections(self: *MachO) !void { @@ -3727,7 +3732,6 @@ pub fn addSegment(self: *MachO, name: []const u8, opts: struct { fileoff: u64 = 0, filesize: u64 = 0, prot: macho.vm_prot_t = macho.PROT.NONE, - flags: u32 = 0, }) error{OutOfMemory}!u8 { const gpa = self.base.comp.gpa; const index = @as(u8, @intCast(self.segments.items.len)); |
