]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: don't pass --build-id if C linker doesn't support it
authorCherry Mui <cherryyz@google.com>
Tue, 22 Oct 2024 16:02:02 +0000 (12:02 -0400)
committerCherry Mui <cherryyz@google.com>
Thu, 24 Oct 2024 19:25:58 +0000 (19:25 +0000)
On Solaris the default (non-GNU) C linker doesn't support the
--build-id flag (and I'm not aware of any alternative). So check
that the linker supports the flag before passing it.

Updates #41004, #63934.

Cq-Include-Trybots: luci.golang.try:gotip-solaris-amd64
Change-Id: I4379e5bf6eb495154d663ac4ed802ecb11fcf91c
Reviewed-on: https://go-review.googlesource.com/c/go/+/621639
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>

src/cmd/link/elf_test.go
src/cmd/link/internal/ld/lib.go

index e68f94e7de32be10db249169a15eb77c50118daf..db6ef1bb51d9ba6cf4141dbdf8ee83a1bfc03aae 100644 (file)
@@ -224,7 +224,9 @@ func TestGNUBuildID(t *testing.T) {
                {"specific", "-B=0x0123456789abcdef", "\x01\x23\x45\x67\x89\xab\xcd\xef"},
                {"none", "-B=none", ""},
        }
-       if testenv.HasCGO() {
+       if testenv.HasCGO() && runtime.GOOS != "solaris" && runtime.GOOS != "illumos" {
+               // Solaris ld doesn't support --build-id. So we don't
+               // add it in external linking mode.
                for _, test := range tests {
                        t1 := test
                        t1.name += "_external"
index a9eda54713fbef6fb1ac22c158a8098d57dc658c..0c37a1dc1f8c15194f6eadbd16677f66eb9f7a96 100644 (file)
@@ -1701,7 +1701,7 @@ func (ctxt *Link) hostlink() {
                argv = append(argv, "-fuse-ld="+altLinker)
        }
 
-       if ctxt.IsELF {
+       if ctxt.IsELF && linkerFlagSupported(ctxt.Arch, argv[0], "", "-Wl,--build-id=0x1234567890abcdef") { // Solaris ld doesn't support --build-id.
                if len(buildinfo) > 0 {
                        argv = append(argv, fmt.Sprintf("-Wl,--build-id=0x%x", buildinfo))
                } else if *flagHostBuildid == "none" {