mirror of
https://github.com/golang/go
synced 2024-11-11 18:21:40 -07:00
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>
This commit is contained in:
parent
942c1c12d8
commit
6691f438c3
5
src/cmd/dist/buildtool.go
vendored
5
src/cmd/dist/buildtool.go
vendored
@ -70,6 +70,11 @@ var bootstrapDirs = []string{
|
|||||||
"internal/goexperiment",
|
"internal/goexperiment",
|
||||||
"internal/goroot",
|
"internal/goroot",
|
||||||
"internal/goversion",
|
"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/pkgbits",
|
||||||
"internal/platform",
|
"internal/platform",
|
||||||
"internal/profile",
|
"internal/profile",
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build !gccgo
|
||||||
|
|
||||||
package abi
|
package abi
|
||||||
|
|
||||||
// FuncPC* intrinsics.
|
// FuncPC* intrinsics.
|
||||||
|
21
src/internal/abi/funcpc_gccgo.go
Normal file
21
src/internal/abi/funcpc_gccgo.go
Normal file
@ -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]))
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user