Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cmd/go: program built by go build misses debug information in go1.21.x on darwin/amd64 #65014

Closed
CbcWestwolf opened this issue Jan 8, 2024 · 22 comments
Labels
compiler/runtime Issues related to the Go compiler and/or runtime. GoCommand cmd/go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. OS-Darwin
Milestone

Comments

@CbcWestwolf
Copy link

Go version

go version go1.21.5 darwin/amd64

Output of go env in your module/workspace:

GO111MODULE='on'
GOARCH='amd64'
GOBIN=''
GOCACHE='/Users/user/Library/Caches/go-build'
GOENV='/Users/user/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/user/.gvm/pkgsets/go1.21.5/global/pkg/mod'
GONOPROXY='github.com/pingcap'
GONOSUMDB='github.com/pingcap'
GOOS='darwin'
GOPATH='/Users/user/.gvm/pkgsets/go1.21.5/global'
GOPRIVATE='github.com/pingcap'
GOPROXY='https://goproxy.cn,direct'
GOROOT='/Users/user/.gvm/gos/go1.21.5'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/Users/user/.gvm/gos/go1.21.5/pkg/tool/darwin_amd64'
GOVCS=''
GOVERSION='go1.21.5'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='/usr/local/opt/llvm/bin/clang'
CXX='/usr/local/opt/llvm/bin/clang++'
CGO_ENABLED='1'
GOMOD='/Users/user/tidb/pingcap/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-build2907687815=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?

git clone https://github.com/pingcap/tidb.git
cd tidb
gvm use go1.21.5
make server 			# which build the tidb-server by 'go build'
objdump -h bin/tidb-server

What did you see happen?

❯ objdump -h bin/tidb-server

bin/tidb-server:	file format mach-o 64-bit x86-64

Sections:
Idx Name           Size     VMA              Type
  0 __text         0302846c 0000000100004e60 TEXT
  1 __stubs        000004aa 000000010302d2cc TEXT
  2 __rodata       014628ec 000000010302d780 DATA
  3 __typelink     00020594 0000000104490080 DATA
  4 __itablink     0000ce90 00000001044b0620 DATA
  5 __gosymtab     00000000 00000001044bd4b0 DATA
  6 __gopclntab    020bca68 00000001044bd4c0 DATA
  7 __cstring      00001130 0000000106579f28 DATA
  8 __const        000048f4 000000010657b060 DATA
  9 __unwind_info  000006a4 000000010657f954 DATA
 10 __got          00000660 0000000106580000 DATA
 11 __const        00000248 0000000106580660 DATA
 12 __cfstring     000000a0 00000001065808a8 DATA
 13 __go_buildinfo 00004180 0000000106580950 DATA
 14 __noptrdata    007f3880 0000000106584ae0 DATA
 15 __data         000bbf68 0000000106d78360 DATA
 16 __bss          000439dc 0000000106e342e0 BSS
 17 __noptrbss     00015370 0000000106e77cc0 BSS
 18 __common       00000018 0000000106e8d030 BSS

What did you expect to see?

❯ objdump -h bin/tidb-server

bin/tidb-server:	file format mach-o 64-bit x86-64

Sections:
Idx Name             Size     VMA              Type
  0 __text           032050ec 0000000100002340 TEXT
  1 __stubs          00000498 000000010320742c TEXT
  2 __rodata         013fffad 00000001032078e0 DATA
  3 __typelink       000204c4 00000001046078a0 DATA
  4 __itablink       0000cf88 0000000104627d80 DATA
  5 __gosymtab       00000000 0000000104634d08 DATA
  6 __gopclntab      02031218 0000000104634d20 DATA
  7 __cstring        00001130 0000000106665f38 DATA
  8 __const          000048f4 0000000106667070 DATA
  9 __unwind_info    0000069c 000000010666b964 DATA
 10 __got            00000648 000000010666c000 DATA
 11 __const          00000248 000000010666c650 DATA
 12 __cfstring       000000a0 000000010666c898 DATA
 13 __go_buildinfo   000041d0 000000010666c940 DATA
 14 __noptrdata      00c646e0 0000000106670b20 DATA
 15 __data           000b6e70 00000001072d5200 DATA
 16 __bss            000462dc 000000010738c080 BSS
 17 __noptrbss       000151f0 00000001073d2360 BSS
 18 __common         00000008 00000001073e7550 BSS
 19 __zdebug_line    005d7ac9 00000001085c9000 DATA, DEBUG
 20 __zdebug_aranges 0008ad3e 0000000108ba0ac9 DATA, DEBUG
 21 __zdebug_ranges  0028abeb 0000000108c2b807 DATA, DEBUG
 22 __zdebug_loc     007e3ad4 0000000108eb63f2 DATA, DEBUG
 23 __zdebug_info    008ff88a 0000000109699ec6 DATA, DEBUG
 24 __zdebug_frame   0013f413 0000000109f99750 DATA, DEBUG
 25 __zdebug_abbrev  00000477 000000010a0d8b63 DATA, DEBUG
 26 __zdebug_str     00168b1b 000000010a0d8fda DATA, DEBUG
 27 __apple_namespac 00000024 000000010a241af5 DATA, DEBUG
 28 __zapple_names   0036cbb4 000000010a241b19 DATA
 29 __zapple_types   000dfe63 000000010a5ae6cd DATA
 30 __apple_objc     00000024 000000010a68e530 DATA, DEBUG
@CbcWestwolf CbcWestwolf changed the title cmd/go: miss debug information in go1.21.x on darwin/amd64 cmd/go: go build misses debug information in go1.21.x on darwin/amd64 Jan 8, 2024
@seankhliao
Copy link
Member

so how did you get the binary with the debug info?

@CbcWestwolf
Copy link
Author

so how did you get the binary with the debug info?

Use go1.20 and checkout the branch of tidb to release-7.1, which requires go1.20.
I note that debug info is also missed if I use go1.21 to build release-7.1. So I think this missing may relate to go1.21

@bcmills
Copy link
Contributor

bcmills commented Jan 8, 2024

Why do you expect those debug symbols to be present? (Where are they defined?)

@bcmills bcmills added OS-Darwin GoCommand cmd/go compiler/runtime Issues related to the Go compiler and/or runtime. NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels Jan 8, 2024
@bcmills bcmills added this to the Backlog milestone Jan 8, 2024
@bcmills bcmills added the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label Jan 8, 2024
@CbcWestwolf
Copy link
Author

Why do you expect those debug symbols to be present? (Where are they defined?)

TBH I am not familiar with how these debug symbols are generated and where I can define them in my go program. I found that if I upgraded to go version to go1.21, I could not debug the tidb-server. But other simpler go programs built by go1.21 contain debug info.

I checked the flags for go build:

CGO_ENABLED=1 GO111MODULE=on go build  -tags codes -gcflags="all=-N -l"  ... -o bin/tidb-server-debug ./tidb-server

The flags seem not to disable any debug info from my understanding. I also reinstalled llvm/clang to check if it is caused by CGO. But it doesn't help.

Do I miss any steps to generate debug info?

@bcmills bcmills removed the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label Jan 8, 2024
@bcmills
Copy link
Contributor

bcmills commented Jan 8, 2024

I found that if I upgraded to go version to go1.21, I could not debug the tidb-server.

Can you clarify what you mean by that? (What command(s) were you trying to use to debug it, and what was the failure mode of the debugger?)

@bcmills bcmills added the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label Jan 8, 2024
@CbcWestwolf
Copy link
Author

Can you clarify what you mean by that? (What command(s) were you trying to use to debug it, and what was the failure mode of the debugger?)

Sure! Here are the detailed steps:

  1. git clone -b release-7.1 https://github.com/pingcap/tidb.git this commands may take a long time
  2. cd tidb
  3. make server_debug, which actually executes CGO_ENABLED=1 GO111MODULE=on go build -tags codes -gcflags="all=-N -l" -o bin/tidb-server-debug ./tidb-server
  4. start the tidb-server by ./bin/tidb-server-debug. To debug it by dlv, just use dlv exec bin/tidb-server-debug. It would report:
Warning: no debug info found, some functionality will be missing such as stack traces and variable evaluation.

Thanks for your help!

@CbcWestwolf CbcWestwolf changed the title cmd/go: go build misses debug information in go1.21.x on darwin/amd64 cmd/go: program built by go build misses debug information in go1.21.x on darwin/amd64 Jan 8, 2024
@bcmills bcmills removed the WaitingForInfo Issue is not actionable because of missing required information, which needs to be provided. label Jan 8, 2024
@cherrymui
Copy link
Member

What C toolchain version do you use? Could you post the output of cc -v and ld -v? Also, could you try building with -ldflags=-v to see what flags are passed to the C linker? Also, could you try Go 1.22rc1? Thanks.

@tttoad
Copy link

tttoad commented Jan 12, 2024

@cherrymui I have the same problem...
I tried using 1.22rc1. it doesn't work.
In my project I don't use CGO, by default CGO_ENABLED is 1.
When I use CGO_ENABLE =0, it works.

@cherrymui
Copy link
Member

Hmm, I have not been able to reproduce with tidb-server with #65014 (comment) . I didn't run make, just go build directly. It builds fine, and debug info is there.

$ git clone -b release-7.1 https://github.com/pingcap/tidb.git
$ cd tidb/
$ CGO_ENABLED=1 GO111MODULE=on go1.21 build  -tags codes -gcflags="all=-N -l" -o /tmp/tidb-server ./tidb-server/
$ objdump -h /tmp/tidb-server 

/tmp/tidb-server:	file format mach-o 64-bit x86-64

Sections:
Idx Name             Size     VMA              Type
  0 __text           04c647d3 0000000100005860 TEXT
  1 __stubs          000004b0 0000000104c6a034 TEXT
  2 __rodata         01397434 0000000104c6a500 DATA
  3 __typelink       00020e7c 0000000106001940 DATA
  4 __itablink       0000cf88 00000001060227c0 DATA
  5 __gosymtab       00000000 000000010602f748 DATA
  6 __gopclntab      01d4e780 000000010602f760 DATA
  7 __cstring        00001130 0000000107d7dee0 DATA
  8 __const          00004934 0000000107d7f010 DATA
  9 __unwind_info    000006b0 0000000107d83944 DATA
 10 __got            00000668 0000000107d84000 DATA
 11 __const          00000248 0000000107d84670 DATA
 12 __cfstring       000000a0 0000000107d848b8 DATA
 13 __go_buildinfo   00003ff0 0000000107d84960 DATA
 14 __noptrdata      007f3e80 0000000107d88960 DATA
 15 __data           000b6748 000000010857c7e0 DATA
 16 __bss            000467bc 0000000108632f40 BSS
 17 __noptrbss       000152d0 0000000108679700 BSS
 18 __common         00000018 000000010868e9d0 BSS
 19 __zdebug_line    003d964a 0000000109904000 DATA, DEBUG
 20 __zdebug_ranges  0011e286 0000000109cdd64a DATA, DEBUG
 21 __zdebug_loc     002a21ea 0000000109dfb8d0 DATA, DEBUG
 22 __zdebug_aranges 000992ed 000000010a09daba DATA, DEBUG
 23 __zdebug_info    006cf495 000000010a136da7 DATA, DEBUG
 24 __zdebug_frame   001828d4 000000010a80623c DATA, DEBUG
 25 __zdebug_abbrev  00000409 000000010a988b10 DATA, DEBUG
 26 __zdebug_str     00169790 000000010a988f19 DATA, DEBUG
 27 __zapple_names   002b814d 000000010aaf26a9 DATA
 28 __apple_namespac 00000024 000000010adaa7f6 DATA, DEBUG
 29 __zapple_types   000ebd4c 000000010adaa81a DATA
 30 __apple_objc     00000024 000000010ae96566 DATA, DEBUG
$ go1.21 version
go version go1.21.6 darwin/amd64

Same for go1.22rc1. Debug info is generated.

What C toolchain version do you use? I have

$ cc -v 
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: x86_64-apple-darwin22.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
$ ld -v
@(#)PROGRAM:ld  PROJECT:dyld-1022.1
BUILD 05:26:33 Dec  7 2023
configured to support archs: armv6 armv7 armv7s arm64 arm64e arm64_32 i386 x86_64 x86_64h
will use ld-classic for: armv6 armv7 armv7s arm64_32 i386 armv6m armv7k armv7m armv7em
LTO support using: LLVM version 15.0.0 (static support for 29, runtime is 29)
TAPI support using: Apple TAPI version 15.0.0 (tapi-1500.0.12.8)
Library search paths:
Framework search paths:

@cherrymui
Copy link
Member

@tttoad what is your project? Is there an easy way we can reproduce it? Thanks.

@CbcWestwolf
Copy link
Author

What C toolchain version do you use? Could you post the output of cc -v and ld -v?

❯ cc -v
Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: x86_64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

❯ ld -v
@(#)PROGRAM:ld  PROJECT:dyld-1022.1
BUILD 13:20:30 Nov 10 2023
configured to support archs: armv6 armv7 armv7s arm64 arm64e arm64_32 i386 x86_64 x86_64h
will use ld-classic for: armv6 armv7 armv7s arm64_32 i386 armv6m armv7k armv7m armv7em
LTO support using: LLVM version 15.0.0 (static support for 29, runtime is 29)
TAPI support using: Apple TAPI version 15.0.0 (tapi-1500.0.12.8)
Library search paths:
Framework search paths:

Also, could you try building with -ldflags=-v to see what flags are passed to the C linker?

Here is the output of CGO_ENABLED=1 GO111MODULE=on go build -tags codes -gcflags="all=-N -l" -ldflags=-v -o bin/tidb-server-debug ./cmd/tidb-server. In an earlier version that does not exist this problem, the output looks like this.

Also, could you try Go 1.22rc1? Thanks.

Yes, I waited for the release of go1.21.6 and go1.22rc1. But the problem still exists...

what is your project? Is there an easy way we can reproduce it? Thanks.

Recently I found another repo that can reproduce this problem:

git clone -b release-7.1 https://github.com/tikv/pd.git
cd pd
make build # which would build 3 binaries: pd-server, pd-ctl, and pd-recover
objdump -h bin/*

Here pd-server also lacks debug info, while pd-ctl and pd-recover do not. I noticed that CGO was disabled when building pd-ctl and pd-recover. If enable CGO for building pd-ctl, debug info also lacks. Maybe it is a clue.

@cherrymui
Copy link
Member

Is it reproducible if you run go build directly, without using make?

host link: "/usr/local/opt/llvm/bin/clang" ...
host link dsymutil: "/usr/local/opt/llvm/bin/dsymutil"

I noticed that you use a C toolchain that you installed yourself. Could you try using the one from from Xcode? Like, CC=/usr/bin/cc go build ... and see if that makes any difference?

Thanks.

@CbcWestwolf
Copy link
Author

Like, CC=/usr/bin/cc go build ... and see if that makes any difference?

Yes, it works! I mixed the usage of homebrew's clang and Command-Line Tool's clang. I think the issue has been resolved :-)

Thanks for your help!

@tttoad
Copy link

tttoad commented Jan 13, 2024

Problem solved, I also used my own installed C toolchain... thanks! @cherrymui

@seankhliao seankhliao closed this as not planned Won't fix, can't repro, duplicate, stale Jan 13, 2024
@cherrymui
Copy link
Member

Thanks @CbcWestwolf @tttoad for confirming!

Although nothing needed to do for the Go toolchain for now, it might still be good to understand what went wrong. Like, does homebrew's C toolchain not work well with the Apple linker, in term of debug info? Would you mind running your build with CGO_LDFLAGS=-v to see how your C toolchain invokes the C linker? Also, is it reproducible with a very simple cgo program like below?

package main

// #include <stdio.h>
// void F() { printf("hello\n"); }
import "C"

func main() {
	C.F()
}

Thanks.

@tttoad
Copy link

tttoad commented Jan 16, 2024

@cherrymui
I think this is a problem in go 1.21.
When I use 1.20.7 or 1.19 it works fine.

build with 1.20.7

# command-line-arguments
Homebrew clang version 17.0.3
Target: arm64-apple-darwin23.1.0
Thread model: posix
InstalledDir: /opt/homebrew/opt/llvm/bin
 "/usr/bin/ld" -demangle -lto_library /opt/homebrew/Cellar/llvm/17.0.3/lib/libLTO.dylib -dynamic -arch arm64 -platform_version macos 14.0.0 14.0.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -o $WORK/b001/exe/a.out -headerpad 1144 /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/go.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000000.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000001.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000002.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000003.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000004.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000005.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000006.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000007.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000008.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000009.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/000010.o -framework CoreFoundation -lSystem /opt/homebrew/Cellar/llvm/17.0.3/lib/clang/17/lib/darwin/libclang_rt.osx.a
ld: warning: '/private/var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/go.o' has malformed LC_DYSYMTAB, expected 48 undefined symbols to start at index 1649, found 55 undefined symbols starting at index 15

build in 1.21.5

# command-line-arguments
Homebrew clang version 17.0.3
Target: arm64-apple-darwin23.1.0
Thread model: posix
InstalledDir: /opt/homebrew/opt/llvm/bin
 "/usr/bin/ld" -demangle -lto_library /opt/homebrew/Cellar/llvm/17.0.3/lib/libLTO.dylib -dynamic -arch arm64 -platform_version macos 14.0.0 14.0.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -o $WORK/b001/exe/a.out -headerpad 1144 /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/go.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000000.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000001.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000002.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000003.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000004.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000005.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000006.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000007.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000008.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000009.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000010.o /var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-4107080935/000011.o -framework CoreFoundation -lSystem /opt/homebrew/Cellar/llvm/17.0.3/lib/clang/17/lib/darwin/libclang_rt.osx.a

Maybe it's because of the warning.

ld: warning: '/private/var/folders/g1/tgmnlrdn3vxgv08kdgh9vpkw0000gn/T/go-link-462143842/go.o' has malformed LC_DYSYMTAB, expected 48 undefined symbols to start at index 1649, found 55 undefined symbols starting at index 15

@CbcWestwolf
Copy link
Author

is it reproducible with a very simple cgo program like below

Yes! Simple cgo program reproduces it, while a simple pure go program does not.

running your build with CGO_LDFLAGS=-v to see how your C toolchain invokes the C linker

Here is the output of go1.21.5 with homebrew's C toolchain:

Homebrew clang version 17.0.6
Target: x86_64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin
 "/usr/bin/ld" -demangle -lto_library /usr/local/Cellar/llvm/17.0.6/lib/libLTO.dylib -dynamic -arch x86_64 -platform_version macos 14.0.0 14.0.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -o $WORK/b001/exe/a.out -headerpad 1144 -flat_namespace -bind_at_load -ld_classic -no_pie /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/go.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000000.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000001.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000002.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000003.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000004.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000005.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000006.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000007.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000008.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000009.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000010.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000011.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000012.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000013.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000014.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000015.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000016.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000017.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000018.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000019.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000020.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000021.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000022.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000023.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000024.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000025.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000026.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000027.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000028.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000029.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000030.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000031.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000032.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000033.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000034.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000035.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000036.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000037.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000038.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000039.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000040.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000041.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000042.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000043.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000044.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000045.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000046.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000047.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000048.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000049.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000050.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000051.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000052.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000053.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000054.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000055.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000056.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000057.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000058.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000059.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000060.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000061.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000062.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000063.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000064.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000065.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000066.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000067.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000068.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000069.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000070.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000071.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000072.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-3432923941/000073.o -lresolv -lpthread -framework IOKit -framework CoreFoundation -framework IOKit -framework CoreFoundation -framework Security -lSystem /usr/local/Cellar/llvm/17.0.6/lib/clang/17/lib/darwin/libclang_rt.osx.a

Here is the output of go1.21.5 with command line tool's C toolchain:

Apple clang version 15.0.0 (clang-1500.1.0.2.5)
Target: x86_64-apple-darwin23.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
 "/Library/Developer/CommandLineTools/usr/bin/ld" -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -dynamic -arch x86_64 -platform_version macos 14.0.0 14.2 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o $WORK/b001/exe/a.out -L/usr/local/lib -headerpad 1144 -flat_namespace -bind_at_load -ld_classic -no_pie /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/go.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000000.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000001.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000002.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000003.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000004.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000005.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000006.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000007.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000008.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000009.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000010.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000011.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000012.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000013.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000014.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000015.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000016.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000017.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000018.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000019.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000020.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000021.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000022.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000023.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000024.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000025.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000026.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000027.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000028.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000029.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000030.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000031.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000032.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000033.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000034.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000035.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000036.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000037.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000038.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000039.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000040.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000041.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000042.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000043.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000044.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000045.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000046.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000047.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000048.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000049.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000050.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000051.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000052.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000053.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000054.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000055.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000056.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000057.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000058.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000059.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000060.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000061.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000062.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000063.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000064.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000065.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000066.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000067.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000068.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000069.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000070.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000071.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000072.o /var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-link-1663739691/000073.o -lresolv -lpthread -framework IOKit -framework CoreFoundation -framework IOKit -framework CoreFoundation -framework Security -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/15.0.0/lib/darwin/libclang_rt.osx.a

@cherrymui
Copy link
Member

@tttoad The warning is irrelevant (see #61229).

@CbcWestwolf thank you for trying the simple cgo program, and sharing the -v output. It seems for your program (the real one, not the simple one), it uses the old Apple linker (the -ld_classic flag) as the program seems to use plugins. That suggests that it is not the new Apple linker.

I'm wondering if homebrew's dsymutil program does not behave as the Apple one. Would you mind building the simple cgo code with -ldflags=-tmpdir=/tmp/xxx (mkdir /tmp/xxx first) and share the that the content of that temporary directory? That contains intermediate files which may help understanding the issue. Also, would you mind trying temporarily replacing the Homebrew dsymutil (at /usr/local/opt/llvm/bin/dsymutil) with the Apple one (/usr/bin/dsymutil), and see if this makes any difference?

Thanks.

@CbcWestwolf
Copy link
Author

Thanks for your analysis :-)

as the program seems to use plugins. That suggests that it is not the new Apple linker.

Do you mean that using the "plugin" in the project requires the old Apple linker? Is there any reference for this?

Would you mind building the simple cgo code with -ldflags=-tmpdir=/tmp/xxx (mkdir /tmp/xxx first) and share the that the content of that temporary directory?

It seems that all temp files are deleted. Do I miss something?

 ❯ go build -x -ldflags="-tmpdir=/Users/cbcwestwolf/tmp -v" hello.go                                                                                               
WORK=/var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-build1993737340
cat /Users/cbcwestwolf/Library/Caches/go-build/0e/0e295cc05d3f638c8ef5bc3324e7f682441dee1faca8ed39ee296e8fab30c578-d  # internal
# command-line-arguments
HEADER = -H1 -T0x1001000 -R0x1000
host obj copy: $WORK/b001/_pkg_.a(_x001.o) from pkg main -> /Users/cbcwestwolf/tmp/000000.o
host obj copy: $WORK/b001/_pkg_.a(_x002.o) from pkg main -> /Users/cbcwestwolf/tmp/000001.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x001.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000002.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x002.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000003.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x003.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000004.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x004.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000005.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x005.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000006.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x006.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000007.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x007.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000008.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x008.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000009.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x009.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000010.o
host obj copy: /Users/cbcwestwolf/Library/Caches/go-build/a8/a8c5cc2091c03e911d318a11fb879d38c0a11257c6b1a72df8177666464781c6-d(_x010.o) from pkg runtime/cgo -> /Users/cbcwestwolf/tmp/000011.o
host link: "/usr/local/opt/llvm/bin/clang" "-arch" "x86_64" "-m64" "-Wl,-headerpad,1144" "-Wl,-no_pie" "-o" "/var/folders/p8/db9w2tpd3pvc6qwqp8rk59240000gn/T/go-build2120567024/b001/exe/a.out" "-Qunused-arguments" "/Users/cbcwestwolf/tmp/go.o" "/Users/cbcwestwolf/tmp/000000.o" "/Users/cbcwestwolf/tmp/000001.o" "/Users/cbcwestwolf/tmp/000002.o" "/Users/cbcwestwolf/tmp/000003.o" "/Users/cbcwestwolf/tmp/000004.o" "/Users/cbcwestwolf/tmp/000005.o" "/Users/cbcwestwolf/tmp/000006.o" "/Users/cbcwestwolf/tmp/000007.o" "/Users/cbcwestwolf/tmp/000008.o" "/Users/cbcwestwolf/tmp/000009.o" "/Users/cbcwestwolf/tmp/000010.o" "/Users/cbcwestwolf/tmp/000011.o" "-O2" "-g" "-O2" "-g" "-lpthread" "-no-pie"
59927 symbols, 18755 reachable
	26346 package symbols, 22376 hashed symbols, 8328 non-package symbols, 2877 external symbols
71439 liveness data

 ❯ ls /Users/cbcwestwolf/tmp                                                                                                                                       

would you mind trying temporarily replacing the Homebrew dsymutil (at /usr/local/opt/llvm/bin/dsymutil) with the Apple one (/usr/bin/dsymutil), and see if this makes any difference?

I replace the Homebrew dsymutil with the Apple one by alias dsymutil=/usr/bin/dsymutil, and no difference happens.

@cherrymui
Copy link
Member

Do you mean that using the "plugin" in the project requires the old Apple linker? Is there any reference for this?

See #62598. There is a bug in Apple's new linker that causes plugins to fail. We changed our code generation to avoid the bug in Go tip (1.22rc1 and later). For Go 1.21, we instead worked around by forcing the old Apple linker. (I don't think this is related to this bug, though.)

It seems that all temp files are deleted. Do I miss something?

That is weird. It should not delete files if -tmpdir is set. Maybe try again and make sure to use a unique tmp dir (so nothing else would change it)? Also, could you try Go tip or 1.22rc1?

I replace the Homebrew dsymutil with the Apple one by alias dsymutil=/usr/bin/dsymutil

I don't think alias would work. The linker invokes dsymutil without going through the shell.

@CbcWestwolf
Copy link
Author

Also, could you try Go tip or 1.22rc1?

I don't know what happened in my environment :-(
1.22rc1 also behaves the same.

image

@cherrymui
Copy link
Member

That is very weird. This is what I see:

$ mkdir /tmp/xxx
$ go build -ldflags=-tmpdir=/tmp/xxx ~/go/c.go
$ ls /tmp/xxx
000000.o  000001.o  000002.o  000003.o  000004.o  000005.o  000006.o  000007.o  000008.o  000009.o  000010.o  000011.o  go.dwarf  go.o      trivial.c

Trying using a Go installation from https://go.dev/dl/#go1.22rc1 , or built from source? Also try using an absolute path for the tmpdir. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compiler/runtime Issues related to the Go compiler and/or runtime. GoCommand cmd/go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. OS-Darwin
Projects
None yet
Development

No branches or pull requests

5 participants