Commit 33d1942f27

Jakub Konka <kubkon@jakubkonka.com>
2022-10-19 17:33:30
macho: always create __TEXT segment
1 parent e70adc7
Changed files (1)
src
link
MachO
src/link/MachO/zld.zig
@@ -1476,6 +1476,17 @@ pub const Zld = struct {
             });
         }
 
+        // __TEXT segment is non-optional
+        {
+            const protection = getSegmentMemoryProtection("__TEXT");
+            try self.segments.append(self.gpa, .{
+                .cmdsize = @sizeOf(macho.segment_command_64),
+                .segname = makeStaticString("__TEXT"),
+                .maxprot = protection,
+                .initprot = protection,
+            });
+        }
+
         for (self.sections.items(.header)) |header, sect_id| {
             if (header.size == 0) continue; // empty section
 
@@ -1498,14 +1509,12 @@ pub const Zld = struct {
             self.sections.items(.segment_index)[sect_id] = segment_id;
         }
 
+        // __LINKEDIT always comes last
         {
             const protection = getSegmentMemoryProtection("__LINKEDIT");
-            const base = self.getSegmentAllocBase(@intCast(u8, self.segments.items.len));
             try self.segments.append(self.gpa, .{
                 .cmdsize = @sizeOf(macho.segment_command_64),
                 .segname = makeStaticString("__LINKEDIT"),
-                .vmaddr = base.vmaddr,
-                .fileoff = base.fileoff,
                 .maxprot = protection,
                 .initprot = protection,
             });