From e924ea03cc7651cffdec9636a0d79d54eb6e7e0d Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Mon, 11 Sep 2023 15:53:49 -0400 Subject: [PATCH] cmd/link: disable DWARF by default in c-shared mode on darwin Currently, linking a Go c-shared object with C code using Apple's new linker, it fails with % cc a.c go.so ld: segment '__DWARF' filesize exceeds vmsize in 'go.so' Apple's new linker has more checks for unmapped segments. It is very hard to make it accept a Mach-O shared object with an additional DWARF segment. We may want to stop combinding DWARF into the shared object (see also #62577). For now, disable DWARF by default in c-shared mode on darwin. (One can still enable it with -ldflags=-w=0, which will contain DWARF, but it will need the old C linker to link against with.) For #61229. Change-Id: I4cc77da54fac10e2c2cbcffa92779cba82706d75 Reviewed-on: https://go-review.googlesource.com/c/go/+/527415 LUCI-TryBot-Result: Go LUCI Reviewed-by: Than McIntosh Run-TryBot: Cherry Mui TryBot-Result: Gopher Robot --- src/cmd/link/internal/ld/main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index ccc7d29bf25..aa6c00ce88d 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -245,6 +245,9 @@ func Main(arch *sys.Arch, theArch Arch) { *FlagW = true case ternaryFlagUnset: *FlagW = *FlagS // -s implies -w if not explicitly set + if ctxt.IsDarwin() && ctxt.BuildMode == BuildModeCShared { + *FlagW = true // default to -w in c-shared mode on darwin, see #61229 + } } if !buildcfg.Experiment.RegabiWrappers {