]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: fix size of filetab slice
authorMichael Hudson-Doyle <michael.hudson@canonical.com>
Tue, 27 Oct 2015 01:49:51 +0000 (14:49 +1300)
committerMichael Hudson-Doyle <michael.hudson@canonical.com>
Wed, 11 Nov 2015 23:17:25 +0000 (23:17 +0000)
The linker writes the number of file symbols (Nhistfile) to the filetab slice
and then Nhistfile offsets -- which means the slice contains Nhistfile+1
entries, not just Nhistfile.

I think this bug has been around since at least 1.4 but it's easier to trigger
with shared libraries and a tiny binary that only has a couple of functions in
it -- try go install -buildmode=shared std && go run -linkshared test/fixedbugs/issue4388.go.

Change-Id: I6c0f01f1e607b9b2b96872e37ffce81281911504
Reviewed-on: https://go-review.googlesource.com/16342
Run-TryBot: Michael Hudson-Doyle <michael.hudson@canonical.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/internal/ld/symtab.go

index 005e876d288fa4553b02c4dbd4c4d42b166857d0..646968f584ae133be088d8b9b862ca41f56c84aa 100644 (file)
@@ -498,8 +498,8 @@ func symtab() {
        adduint(Ctxt, moduledata, uint64(pclntabNfunc+1))
        // The filetab slice
        Addaddrplus(Ctxt, moduledata, Linklookup(Ctxt, "runtime.pclntab", 0), int64(pclntabFiletabOffset))
-       adduint(Ctxt, moduledata, uint64(Ctxt.Nhistfile))
-       adduint(Ctxt, moduledata, uint64(Ctxt.Nhistfile))
+       adduint(Ctxt, moduledata, uint64(Ctxt.Nhistfile)+1)
+       adduint(Ctxt, moduledata, uint64(Ctxt.Nhistfile)+1)
        // findfunctab
        Addaddr(Ctxt, moduledata, Linklookup(Ctxt, "runtime.findfunctab", 0))
        // minpc, maxpc