From db22489012aabdd853d09d33e7525788d0acf2c4 Mon Sep 17 00:00:00 2001 From: James Bartlett Date: Wed, 3 May 2023 18:27:05 +0000 Subject: [PATCH] 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 --- src/cmd/link/internal/ld/lib.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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’" -- 2.48.1