aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2023-06-21 15:27:20 -0700
committerGopher Robot <gobot@golang.org>2023-06-27 21:15:37 +0000
commit6691f438c38d103e9399cd203286642b68257230 (patch)
treedbaa088831509ca28f4020bcf8909b3b80071e18
parent942c1c12d89a53071ccd883e16d84af2001f2557 (diff)
downloadgo-6691f438c38d103e9399cd203286642b68257230.tar.gz
go-6691f438c38d103e9399cd203286642b68257230.zip
cmd/dist, internal/abi: support bootstrapping with gccgo
The required gc bootstrap compiler, 1.17, has an internal/lazyregexp package. It permits that package to be imported by internal/profile while bootstrapping. The gccgo compiler also has an internal/lazyregexp package, but it does not permit the gc compiler to import it. Permit bootstrapping with gccgo by adding internal/lazyregexp to the list of bootstrap directories. The gccgo compiler recognizes the magic functions internal/abi.FuncPCABI0 and FuncPCABIInternal, but only in the internal/abi package, not in the bootstrapping internal/abi package. Permit bootstrapping with gccgo by adding definitions of those functions with build tags so that they are only used by gccgo. Fixes #60913 Change-Id: I3a78848d545db13314409d170d63f4cc737ca12e Reviewed-on: https://go-review.googlesource.com/c/go/+/505036 Reviewed-by: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> Auto-Submit: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com>
-rw-r--r--src/cmd/dist/buildtool.go5
-rw-r--r--src/internal/abi/funcpc.go2
-rw-r--r--src/internal/abi/funcpc_gccgo.go21
3 files changed, 28 insertions, 0 deletions
diff --git a/src/cmd/dist/buildtool.go b/src/cmd/dist/buildtool.go
index e638d51af7..a528d7aa76 100644
--- a/src/cmd/dist/buildtool.go
+++ b/src/cmd/dist/buildtool.go
@@ -70,6 +70,11 @@ var bootstrapDirs = []string{
"internal/goexperiment",
"internal/goroot",
"internal/goversion",
+ // internal/lazyregexp is provided by Go 1.17, which permits it to
+ // be imported by other packages in this list, but is not provided
+ // by the Go 1.17 version of gccgo. It's on this list only to
+ // support gccgo, and can be removed if we require gccgo 14 or later.
+ "internal/lazyregexp",
"internal/pkgbits",
"internal/platform",
"internal/profile",
diff --git a/src/internal/abi/funcpc.go b/src/internal/abi/funcpc.go
index 4db848ee15..e038d36584 100644
--- a/src/internal/abi/funcpc.go
+++ b/src/internal/abi/funcpc.go
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
+//go:build !gccgo
+
package abi
// FuncPC* intrinsics.
diff --git a/src/internal/abi/funcpc_gccgo.go b/src/internal/abi/funcpc_gccgo.go
new file mode 100644
index 0000000000..ad5fa52c54
--- /dev/null
+++ b/src/internal/abi/funcpc_gccgo.go
@@ -0,0 +1,21 @@
+// 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.
+
+// For bootstrapping with gccgo.
+
+//go:build gccgo
+
+package abi
+
+import "unsafe"
+
+func FuncPCABI0(f interface{}) uintptr {
+ words := (*[2]unsafe.Pointer)(unsafe.Pointer(&f))
+ return *(*uintptr)(unsafe.Pointer(words[1]))
+}
+
+func FuncPCABIInternal(f interface{}) uintptr {
+ words := (*[2]unsafe.Pointer)(unsafe.Pointer(&f))
+ return *(*uintptr)(unsafe.Pointer(words[1]))
+}