• Than McIntosh's avatar
    cmd/link: macos: set initial protection of 0 for __DWARF segment · 26954bde
    Than McIntosh authored
    For later versions of MacOS, the dynamic loader is more picky about
    enforcing restrictions on __DWARF MachO load commands/segments,
    triggering aborts of the form
    
      dyld: malformed mach-o image: segment __DWARF has vmsize < filesize
    
    for Go programs that use cgo on Darwin. The error is being triggered
    because the Go linker is setting "vmsize" in the DWARF segment entry
    to zero as a way to signal that the DWARF doesn't need to be mapped
    into memory at runtime (which we need to continue to do).
    
    This patch changes the initial protection on the __DWARF segment to
    zero, which dyld seems to be happy with (this is used for other similar
    non-loadable sections such as __LLVM).
    
    Fixes #32673
    
    Change-Id: I9a73449c6d26c172f3d70361719943af381f37e6
    Reviewed-on: https://go-review.googlesource.com/c/go/+/182958
    Run-TryBot: Than McIntosh <thanm@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    26954bde
macho_combine_dwarf.go 14.4 KB