diff options
author | Ian Lance Taylor <iant@golang.org> | 2020-02-17 18:16:41 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2020-02-18 12:03:13 -0800 |
commit | 855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b (patch) | |
tree | 71d1ac4b10dc34681bd6a1d0598033ff59fa5615 /libgo | |
parent | ce7b39d0fc694e5ec80520b7cc76f91a5476d7db (diff) | |
download | gcc-855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b.zip gcc-855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b.tar.gz gcc-855b4aaeabdcddce04ff9295c4b0e6c7aa6db96b.tar.bz2 |
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
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/go/cmd/go/internal/work/gccgo.go | 26 |
1 files changed, 20 insertions, 6 deletions
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) } |