| ... | @@ -2243,7 +2243,8 @@ fn initSegments(self: *MachO) !void { | ... | @@ -2243,7 +2243,8 @@ fn initSegments(self: *MachO) !void { |
| 2243 | for (slice.items(.header)) |header| { | 2243 | for (slice.items(.header)) |header| { |
| 2244 | const segname = header.segName(); | 2244 | const segname = header.segName(); |
| 2245 | if (self.getSegmentByName(segname) == null) { | 2245 | if (self.getSegmentByName(segname) == null) { |
| 2246 | _ = try self.addSegment(segname, .{ .prot = getSegmentProt(segname) }); | 2246 | const flags: u32 = if (mem.startsWith(u8, segname, "__DATA_CONST")) macho.SG_READ_ONLY else 0; |
| | 2247 | _ = try self.addSegment(segname, .{ .prot = getSegmentProt(segname), .flags = flags }); |
| 2247 | } | 2248 | } |
| 2248 | } | 2249 | } |
| 2249 | | 2250 | |
| ... | @@ -3543,6 +3544,7 @@ pub fn addSegment(self: *MachO, name: []const u8, opts: struct { | ... | @@ -3543,6 +3544,7 @@ pub fn addSegment(self: *MachO, name: []const u8, opts: struct { |
| 3543 | fileoff: u64 = 0, | 3544 | fileoff: u64 = 0, |
| 3544 | filesize: u64 = 0, | 3545 | filesize: u64 = 0, |
| 3545 | prot: macho.vm_prot_t = macho.PROT.NONE, | 3546 | prot: macho.vm_prot_t = macho.PROT.NONE, |
| | 3547 | flags: u32 = 0, |
| 3546 | }) error{OutOfMemory}!u8 { | 3548 | }) error{OutOfMemory}!u8 { |
| 3547 | const gpa = self.base.comp.gpa; | 3549 | const gpa = self.base.comp.gpa; |
| 3548 | const index = @as(u8, @intCast(self.segments.items.len)); | 3550 | const index = @as(u8, @intCast(self.segments.items.len)); |