From: Jose Quaresma <quaresma.jose@gmail.com>
To: yocto@lists.yoctoproject.org
Cc: ricardo@foundries.io, jose.quaresma@foundries.io
Subject: [[yocto][meta-lts-mixins][kirkstone/go] 14/16] go: fix some linkshared regression introduced in go 1.20
Date: Fri, 31 Mar 2023 16:20:40 +0000 [thread overview]
Message-ID: <20230331162042.1801766-14-jose.quaresma@foundries.io> (raw)
In-Reply-To: <20230331162042.1801766-1-jose.quaresma@foundries.io>
Since go 1.20 some packages fails to link [1][2]
and only build staticaly with GO_LINKSHARED = ""
[1] https://lists.yoctoproject.org/g/meta-virtualization/topic/97182310
[2] https://github.com/golang/go/issues/58966
Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
---
recipes-devtools/go-1.20/go-1.20.1.inc | 1 +
...ompile-instantiated-generic-methods-.patch | 90 +++++++++++++++++++
2 files changed, 91 insertions(+)
create mode 100644 recipes-devtools/go-1.20/go/0010-cmd-compile-re-compile-instantiated-generic-methods-.patch
diff --git a/recipes-devtools/go-1.20/go-1.20.1.inc b/recipes-devtools/go-1.20/go-1.20.1.inc
index aa3e2da..ffde7ed 100644
--- a/recipes-devtools/go-1.20/go-1.20.1.inc
+++ b/recipes-devtools/go-1.20/go-1.20.1.inc
@@ -14,5 +14,6 @@ SRC_URI += "\
file://0007-exec.go-do-not-write-linker-flags-into-buildids.patch \
file://0008-src-cmd-dist-buildgo.go-do-not-hardcode-host-compile.patch \
file://0009-go-Filter-build-paths-on-staticly-linked-arches.patch \
+ file://0010-cmd-compile-re-compile-instantiated-generic-methods-.patch \
"
SRC_URI[main.sha256sum] = "b5c1a3af52c385a6d1c76aed5361cf26459023980d0320de7658bae3915831a2"
diff --git a/recipes-devtools/go-1.20/go/0010-cmd-compile-re-compile-instantiated-generic-methods-.patch b/recipes-devtools/go-1.20/go/0010-cmd-compile-re-compile-instantiated-generic-methods-.patch
new file mode 100644
index 0000000..f9ac202
--- /dev/null
+++ b/recipes-devtools/go-1.20/go/0010-cmd-compile-re-compile-instantiated-generic-methods-.patch
@@ -0,0 +1,90 @@
+From 7a3bb16b43efba73674629eae4369f9004e37f22 Mon Sep 17 00:00:00 2001
+From: Cuong Manh Le <cuong.manhle.vn@gmail.com>
+Date: Sat, 18 Mar 2023 00:53:07 +0700
+Subject: [PATCH] cmd/compile: re-compile instantiated generic methods in
+ linkshared mode
+
+For G[T] that was seen and compiled in imported package, it is not added
+to typecheck.Target.Decls, prevent wasting compile time re-creating
+DUPOKS symbols. However, the linker do not support a type symbol
+referencing a method symbol across DSO boundary. That causes unreachable
+sym error when building under -linkshared mode.
+
+To fix it, always re-compile generic methods in linkshared mode.
+
+Fixes #58966
+
+Change-Id: I894b417cfe8234ae1fe809cc975889345df22cef
+Reviewed-on: https://go-review.googlesource.com/c/go/+/477375
+Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
+Reviewed-by: Cherry Mui <cherryyz@google.com>
+Reviewed-by: Matthew Dempsky <mdempsky@google.com>
+TryBot-Result: Gopher Robot <gobot@golang.org>
+
+Upstream-Status: Backport [https://github.com/golang/go/commit/bcd82125f85c7c552493e863fa1bb14e6c444557]
+
+Signed-off-by: Jose Quaresma <jose.quaresma@foundries.io>
+---
+ misc/cgo/testshared/shared_test.go | 7 ++++++-
+ misc/cgo/testshared/testdata/issue58966/main.go | 15 +++++++++++++++
+ src/cmd/compile/internal/noder/unified.go | 6 +++++-
+ 3 files changed, 26 insertions(+), 2 deletions(-)
+ create mode 100644 misc/cgo/testshared/testdata/issue58966/main.go
+
+diff --git a/misc/cgo/testshared/shared_test.go b/misc/cgo/testshared/shared_test.go
+index b14fb1cb3a..03da8f9435 100644
+--- a/misc/cgo/testshared/shared_test.go
++++ b/misc/cgo/testshared/shared_test.go
+@@ -1112,8 +1112,13 @@ func TestStd(t *testing.T) {
+ t.Skip("skip in short mode")
+ }
+ t.Parallel()
++ tmpDir := t.TempDir()
+ // Use a temporary pkgdir to not interfere with other tests, and not write to GOROOT.
+ // Cannot use goCmd as it runs with cloned GOROOT which is incomplete.
+ runWithEnv(t, "building std", []string{"GOROOT=" + oldGOROOT},
+- filepath.Join(oldGOROOT, "bin", "go"), "install", "-buildmode=shared", "-pkgdir="+t.TempDir(), "std")
++ filepath.Join(oldGOROOT, "bin", "go"), "install", "-buildmode=shared", "-pkgdir="+tmpDir, "std")
++
++ // Issue #58966.
++ runWithEnv(t, "testing issue #58966", []string{"GOROOT=" + oldGOROOT},
++ filepath.Join(oldGOROOT, "bin", "go"), "run", "-linkshared", "-pkgdir="+tmpDir, "./issue58966/main.go")
+ }
+diff --git a/misc/cgo/testshared/testdata/issue58966/main.go b/misc/cgo/testshared/testdata/issue58966/main.go
+new file mode 100644
+index 0000000000..2d923c3607
+--- /dev/null
++++ b/misc/cgo/testshared/testdata/issue58966/main.go
+@@ -0,0 +1,15 @@
++// Copyright 2023 The Go Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package main
++
++import "crypto/elliptic"
++
++var curve elliptic.Curve
++
++func main() {
++ switch curve {
++ case elliptic.P224():
++ }
++}
+diff --git a/src/cmd/compile/internal/noder/unified.go b/src/cmd/compile/internal/noder/unified.go
+index ed97a09302..25136e6aad 100644
+--- a/src/cmd/compile/internal/noder/unified.go
++++ b/src/cmd/compile/internal/noder/unified.go
+@@ -158,7 +158,11 @@ func readBodies(target *ir.Package, duringInlining bool) {
+ // Instantiated generic function: add to Decls for typechecking
+ // and compilation.
+ if fn.OClosure == nil && len(pri.dict.targs) != 0 {
+- if duringInlining {
++ // cmd/link does not support a type symbol referencing a method symbol
++ // across DSO boundary, so force re-compiling methods on a generic type
++ // even it was seen from imported package in linkshared mode, see #58966.
++ canSkipNonGenericMethod := !(base.Ctxt.Flag_linkshared && ir.IsMethod(fn))
++ if duringInlining && canSkipNonGenericMethod {
+ inlDecls = append(inlDecls, fn)
+ } else {
+ target.Decls = append(target.Decls, fn)
--
2.34.1
next prev parent reply other threads:[~2023-03-31 16:21 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-31 16:20 [[yocto][meta-lts-mixins][kirkstone/go] 01/16] Initial commit: add license, readme and layer config Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 02/16] make it kirkstone compatible Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 03/16] go-helloworld: add from openembedded-core master Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 04/16] go-helloworld: recipes-devtools -> recipes-extended Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 05/16] go-helloworld: update to latest revision Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 06/16] " Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 07/16] go-helloworld: remove unused GO_WORKDIR Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 08/16] go-1.18: import recipes from openembedded-core Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 09/16] go-1.19: " Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 10/16] go-1.20: " Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 11/16] go-cross-canadian: use gcc-crosssdk, not gcc-native Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 12/16] go: update 1.20 -> 1.20.1 Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 13/16] go: use go as CVE product for all golang recipe veriants Jose Quaresma
2023-03-31 16:20 ` Jose Quaresma [this message]
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 15/16] README: add note about backporting Jose Quaresma
2023-03-31 16:20 ` [[yocto][meta-lts-mixins][kirkstone/go] 16/16] README: add my self as maintainer Jose Quaresma
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230331162042.1801766-14-jose.quaresma@foundries.io \
--to=quaresma.jose@gmail.com \
--cc=jose.quaresma@foundries.io \
--cc=ricardo@foundries.io \
--cc=yocto@lists.yoctoproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).