From 91e3681105912bf39404be544c6d5a41ce2b789a Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Fri, 28 Feb 2014 11:08:32 -0800 Subject: [PATCH] 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 --- src/cmd/ld/pcln.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/cmd/ld/pcln.c b/src/cmd/ld/pcln.c index 71587f7784..42916ed093 100644 --- a/src/cmd/ld/pcln.c +++ b/src/cmd/ld/pcln.c @@ -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); -- 2.48.1