From: Cherry Zhang Date: Wed, 9 Oct 2019 19:37:46 +0000 (-0400) Subject: [dev.link] cmd/link: escape package path in objByPkg map X-Git-Tag: go1.14beta1~292^2^2~65 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e44dfa1f2b322537ce3ee1f589af1082748accc5;p=gostls13.git [dev.link] cmd/link: escape package path in objByPkg map The package references recorded in the object file, which are obtained from the compiler, are escaped. We should also use the escaped package paths in the linker for resolving package references. Change-Id: I42eb12df6ff24330e6dc7bed1dc8224bb3b8a106 Reviewed-on: https://go-review.googlesource.com/c/go/+/200158 Run-TryBot: Cherry Zhang TryBot-Result: Gobot Gobot Reviewed-by: Than McIntosh --- diff --git a/src/cmd/link/internal/objfile/objfile2.go b/src/cmd/link/internal/objfile/objfile2.go index 2be34b823e..96d9ad1bd7 100644 --- a/src/cmd/link/internal/objfile/objfile2.go +++ b/src/cmd/link/internal/objfile/objfile2.go @@ -103,6 +103,7 @@ func (l *Loader) AddObj(pkg string, r *oReader) Sym { if _, ok := l.start[r]; ok { panic("already added") } + pkg = objabi.PathToPrefix(pkg) // the object file contains escaped package path if _, ok := l.objByPkg[pkg]; !ok { l.objByPkg[pkg] = r } @@ -189,7 +190,11 @@ func (l *Loader) Resolve(r *oReader, s goobj2.SymRef) Sym { rr = r default: pkg := r.Pkg(int(p)) - rr = l.objByPkg[pkg] + var ok bool + rr, ok = l.objByPkg[pkg] + if !ok { + log.Fatalf("reference of nonexisted package %s, from %v", pkg, r.unit.Lib) + } } return l.ToGlobal(rr, int(s.SymIdx)) }