gcc/cmd-go-update-DGOPKGPATH-to...

70 lines
2.2 KiB
Diff

From 855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b Mon Sep 17 00:00:00 2001
From: Ian Lance Taylor <iant@golang.org>
Date: Mon, 17 Feb 2020 18:16:41 -0800
Subject: [PATCH] cmd/go: update -DGOPKGPATH to use current pkgpath encoding
This will need to be done in the gc version too, probably more cleverly.
This version will ensure that the next GCC release works correctly
when using the GCC version of the go tool.
Updates golang/go#37272
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219817
---
gcc/go/gofrontend/MERGE | 2 +-
libgo/go/cmd/go/internal/work/gccgo.go | 26 ++++++++++++++++++++------
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE
index 47dd5fb..ce10ee1 100644
--- a/gcc/go/gofrontend/MERGE
+++ b/gcc/go/gofrontend/MERGE
@@ -1,4 +1,4 @@
-8505defaa91ecc5b42afd02eb335981e8b02b288
+d5d00d310ec33aeb18f33f807956ec0c4eeea6bb
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
diff --git a/libgo/go/cmd/go/internal/work/gccgo.go b/libgo/go/cmd/go/internal/work/gccgo.go
index f6fa17d..63d5c62 100644
--- a/libgo/go/cmd/go/internal/work/gccgo.go
+++ b/libgo/go/cmd/go/internal/work/gccgo.go
@@ -596,14 +596,28 @@ func gccgoPkgpath(p *load.Package) string {
return p.ImportPath
}
+// gccgoCleanPkgpath returns the form of p's pkgpath that gccgo uses
+// for symbol names. This is like gccgoPkgpathToSymbolNew in cmd/cgo/out.go.
func gccgoCleanPkgpath(p *load.Package) string {
- clean := func(r rune) rune {
+ ppath := gccgoPkgpath(p)
+ bsl := []byte{}
+ changed := false
+ for _, c := range []byte(ppath) {
switch {
- case 'A' <= r && r <= 'Z', 'a' <= r && r <= 'z',
- '0' <= r && r <= '9':
- return r
+ case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z',
+ '0' <= c && c <= '9', c == '_':
+ bsl = append(bsl, c)
+ case c == '.':
+ bsl = append(bsl, ".x2e"...)
+ changed = true
+ default:
+ encbytes := []byte(fmt.Sprintf("..z%02x", c))
+ bsl = append(bsl, encbytes...)
+ changed = true
}
- return '_'
}
- return strings.Map(clean, gccgoPkgpath(p))
+ if !changed {
+ return ppath
+ }
+ return string(bsl)
}
--
2.9.3