70 lines
2.2 KiB
Diff
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
|
||
|
|