diff --git a/lld/MachO/OutputSegment.cpp b/lld/MachO/OutputSegment.cpp --- a/lld/MachO/OutputSegment.cpp +++ b/lld/MachO/OutputSegment.cpp @@ -31,9 +31,9 @@ } static uint32_t maxProt(StringRef name) { - if (name == segment_names::pageZero) - return 0; - return VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE; + assert(config->arch != AK_i386 && + "TODO: i386 has different maxProt requirements"); + return initProt(name); } size_t OutputSegment::numNonHiddenSections() const { diff --git a/lld/test/MachO/segments.s b/lld/test/MachO/segments.s --- a/lld/test/MachO/segments.s +++ b/lld/test/MachO/segments.s @@ -28,7 +28,7 @@ ## dyld3 assumes that the __TEXT segment starts from the file header # CHECK-NEXT: fileoff: 0 # CHECK-NEXT: filesize: -# CHECK-NEXT: maxprot: rwx +# CHECK-NEXT: maxprot: r-x # CHECK-NEXT: initprot: r-x # CHECK-NEXT: nsects: 1 # CHECK-NEXT: flags: 0x0 @@ -46,7 +46,7 @@ # CHECK-NEXT: vmsize: # CHECK-NEXT: fileoff: [[#%u, LINKEDIT_OFF:]] # CHECK-NEXT: filesize: [[#%u, LINKEDIT_SIZE:]] -# CHECK-NEXT: maxprot: rwx +# CHECK-NEXT: maxprot: r-- # CHECK-NEXT: initprot: r-- # CHECK-NOT: Cmd: LC_SEGMENT_64