Commit 060b2400 authored by Ian Lance Taylor's avatar Ian Lance Taylor

cmd/ld: don't add line number info for the final address of an FDE

This makes dwardump --verify happy.

Update #8846

LGTM=r
R=golang-codereviews, r
CC=golang-codereviews
https://golang.org/cl/150370043
parent 14cd40d9
...@@ -1733,6 +1733,7 @@ writeframes(void) ...@@ -1733,6 +1733,7 @@ writeframes(void)
LSym *s; LSym *s;
vlong fdeo, fdesize, pad; vlong fdeo, fdesize, pad;
Pciter pcsp; Pciter pcsp;
uint32 nextpc;
if(framesec == S) if(framesec == S)
framesec = linklookup(ctxt, ".dwarfframe", 0); framesec = linklookup(ctxt, ".dwarfframe", 0);
...@@ -1775,8 +1776,17 @@ writeframes(void) ...@@ -1775,8 +1776,17 @@ writeframes(void)
addrput(0); // initial location addrput(0); // initial location
addrput(0); // address range addrput(0); // address range
for(pciterinit(ctxt, &pcsp, &s->pcln->pcsp); !pcsp.done; pciternext(&pcsp)) for(pciterinit(ctxt, &pcsp, &s->pcln->pcsp); !pcsp.done; pciternext(&pcsp)) {
putpccfadelta(pcsp.nextpc - pcsp.pc, PtrSize + pcsp.value); nextpc = pcsp.nextpc;
// pciterinit goes up to the end of the function,
// but DWARF expects us to stop just before the end.
if(nextpc == s->size) {
nextpc--;
if(nextpc < pcsp.pc)
continue;
}
putpccfadelta(nextpc - pcsp.pc, PtrSize + pcsp.value);
}
fdesize = cpos() - fdeo - 4; // exclude the length field. fdesize = cpos() - fdeo - 4; // exclude the length field.
pad = rnd(fdesize, PtrSize) - fdesize; pad = rnd(fdesize, PtrSize) - fdesize;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment