Skip to content
Browse files

cmd/link: macos: set initial protection of 0 for __DWARF segment

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
Run-TryBot: Than McIntosh <>
TryBot-Result: Gobot Gobot <>
Reviewed-by: Cherry Zhang <>
  • Loading branch information...
thanm committed Jun 19, 2019
1 parent b373d31 commit 26954bde4443c4bfbfe7608f35584b6b810f3f2c
Showing with 1 addition and 0 deletions.
  1. +1 −0 src/cmd/link/internal/ld/macho_combine_dwarf.go
@@ -409,6 +409,7 @@ func machoUpdateDwarfHeader(r *loadCmdReader, buildmode BuildMode, compressedSec
segv := reflect.ValueOf(seg).Elem()

if compressedSects != nil {
var segSize uint64

0 comments on commit 26954bd

Please sign in to comment.
You can’t perform that action at this time.