aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/internal/obj/objfile.go
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2020-04-22 19:21:30 -0400
committerCherry Zhang <cherryyz@google.com>2020-04-24 17:47:14 +0000
commite08f10b8b5fbb82ff1e2c263ad57e19d2de1e323 (patch)
tree1a7332196907af1966807e1664e2734ba6bb41f7 /src/cmd/internal/obj/objfile.go
parent880ef2da7b81fe2e4e9fb75f4677377eeba70d1e (diff)
downloadgo-e08f10b8b5fbb82ff1e2c263ad57e19d2de1e323.tar.xz
[dev.link] cmd/internal/goobj2: add index fingerprint to object file
The new object files use indices for symbol references, instead of names. Fundamental to the design, it requires that the importing and imported packages have consistent view of symbol indices. The Go command should already ensure this, when using "go build". But in case it goes wrong, it could lead to obscure errors like run-time crashes. It would be better to check the index consistency at build time. To do that, we add a fingerprint to each object file, which is a hash of symbol indices. In the object file it records the fingerprints of all imported packages, as well as its own fingerprint. At link time, the linker checks that a package's fingerprint matches the fingerprint recorded in the importing packages, and issue an error if they don't match. This CL does the first part: introducing the fingerprint in the object file, and propagating fingerprints through importing/exporting by the compiler. It is not yet used by the linker. Next CL will do. Change-Id: I0aa372da652e4afb11f2867cb71689a3e3f9966e Reviewed-on: https://go-review.googlesource.com/c/go/+/229617 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Than McIntosh <thanm@google.com> Reviewed-by: Jeremy Faller <jeremy@golang.org>
Diffstat (limited to 'src/cmd/internal/obj/objfile.go')
-rw-r--r--src/cmd/internal/obj/objfile.go5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go
index 2b0c45d6b2..6d7f42ed0b 100644
--- a/src/cmd/internal/obj/objfile.go
+++ b/src/cmd/internal/obj/objfile.go
@@ -98,8 +98,9 @@ func WriteObjFile(ctxt *Link, bout *bio.Writer, pkgpath string) {
w.wr.WriteByte(1)
// Autolib
- for _, pkg := range ctxt.Imports {
- w.writeString(pkg)
+ for _, p := range ctxt.Imports {
+ w.writeString(p.Pkg)
+ // This object format ignores p.Fingerprint.
}
w.writeString("")