From: James Bartlett Date: Wed, 3 May 2023 18:27:05 +0000 (+0000) Subject: cmd/link: fix checks for supported linker flags with relative paths. X-Git-Tag: go1.21rc1~529 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=db22489012aabdd853d09d33e7525788d0acf2c4;p=gostls13.git cmd/link: fix checks for supported linker flags with relative paths. The existing way of checking for supported linker flags causes false negatives when there are relative paths passed to go tool link. This fixes the issue by calling the external linker in the current working directory, instead of in a temporary directory. Fixes #59952 Change-Id: I173bb8b44902f30dacefde1c202586f87667ab70 Reviewed-on: https://go-review.googlesource.com/c/go/+/491796 Run-TryBot: Cherry Mui Reviewed-by: Dmitri Shuralyov TryBot-Result: Gopher Robot Reviewed-by: Cherry Mui --- diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index 0febb3081f..54021b69f4 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -2006,10 +2006,11 @@ func linkerFlagSupported(arch *sys.Arch, linker, altLinker, flag string) bool { if altLinker != "" { flags = append(flags, "-fuse-ld="+altLinker) } - flags = append(flags, flag, "trivial.c") + trivialPath := filepath.Join(*flagTmpdir, "trivial.c") + outPath := filepath.Join(*flagTmpdir, "a.out") + flags = append(flags, "-o", outPath, flag, trivialPath) cmd := exec.Command(linker, flags...) - cmd.Dir = *flagTmpdir cmd.Env = append([]string{"LC_ALL=C"}, os.Environ()...) out, err := cmd.CombinedOutput() // GCC says "unrecognized command line option ‘-no-pie’"