1
0
mirror of https://github.com/golang/go synced 2024-09-24 21:20:13 -06:00

cmd/ld: fix misgenerated pcln file numbers

The pcln file number was being encoded incorrectly. The recorded delta was always against -1, not against the previous value.

Update #7369

This CL fixes the bad DWARF file numbers. It does not, however, fix the gdb continue-to-end bug.

LGTM=iant
R=rsc, minux.ma, iant
CC=golang-codereviews, graham
https://golang.org/cl/68960046
This commit is contained in:
Josh Bleecher Snyder 2014-02-28 11:08:32 -08:00 committed by Ian Lance Taylor
parent 07e2b4049b
commit 91e3681105

View File

@ -89,6 +89,7 @@ renumberfiles(LSym **files, int nfiles, Pcdata *d)
val = files[oldval]->value;
}
dv = val - newval;
newval = val;
v = (uint32)(dv<<1) ^ (uint32)(int32)(dv>>31);
addvarint(&out, v);
@ -114,6 +115,7 @@ pclntab(void)
int32 off, end;
int64 funcdata_bytes;
Pcln *pcln;
Pciter it;
static Pcln zpcln;
funcdata_bytes = 0;
@ -173,8 +175,18 @@ pclntab(void)
// and then remove this.
off = setuint32(ctxt, ftab, off, ctxt->cursym->locals + PtrSize);
if(pcln != &zpcln)
if(pcln != &zpcln) {
renumberfiles(pcln->file, pcln->nfile, &pcln->pcfile);
if(0) {
// Sanity check the new numbering
for(pciterinit(&it, &pcln->pcfile); !it.done; pciternext(&it)) {
if(it.value < 1 || it.value > ctxt->nhistfile) {
diag("bad file number in pcfile: %d not in range [1, %d]\n", it.value, 1, ctxt->nhistfile);
errorexit();
}
}
}
}
// pcdata
off = addpctab(ftab, off, &pcln->pcsp);