plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

commit eaf56db5bc78cfec908db84dc792c53ac8ffb90e
parent ae12b879721b02b79a2a2457b36627d24147e74f
Author: rsc <devnull@localhost>
Date:   Wed, 21 Apr 2004 05:34:10 +0000

Fix the bugs I introduced fixing the bug earlier tonight.

Diffstat:
Msrc/libmach/dwarf386.c | 4+---
Msrc/libmach/dwarfabbrev.c | 5++++-
Msrc/libmach/dwarfinfo.c | 3++-
Msrc/libmach/symdwarf.c | 5++++-
4 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/libmach/dwarf386.c b/src/libmach/dwarf386.c @@ -15,10 +15,8 @@ dwarf386regs[] = "BP", "SI", "DI", - "LR", - "CFA", }; -int dwarf386nregs = 10; +int dwarf386nregs = nelem(dwarf386regs); diff --git a/src/libmach/dwarfabbrev.c b/src/libmach/dwarfabbrev.c @@ -113,6 +113,7 @@ findabbrev(DwarfAbbrev *a, int na, ulong num) for(i=0; i<na; i++) if(a[i].num == num) return &a[i]; + werrstr("abbrev not found"); return nil; } @@ -122,8 +123,10 @@ dwarfgetabbrev(Dwarf *d, ulong off, ulong num) DwarfAbbrev *a; int na; - if((na = loadabbrevs(d, off, &a)) < 0) + if((na = loadabbrevs(d, off, &a)) < 0){ + werrstr("loadabbrevs: %r"); return nil; + } return findabbrev(a, na, num); } diff --git a/src/libmach/dwarfinfo.c b/src/libmach/dwarfinfo.c @@ -267,7 +267,8 @@ top: a = dwarfgetabbrev(d, s->aoff, num); if(a == nil){ - fprint(2, "getabbrev %ud: %r\n", num); + fprint(2, "getabbrev %ud %ud for %ud,%ud: %r\n", s->aoff, num, s->unit, s->uoff); + abort(); return -1; } if(parseattrs(&s->b, s->unit, a, &s->attrs) < 0) diff --git a/src/libmach/symdwarf.c b/src/libmach/symdwarf.c @@ -112,6 +112,9 @@ dwarflenum(Fhdr *fhdr, Symbol *p, char *name, uint j, Loc l, Symbol *s) if(p == nil) return -1; + if(p->u.dwarf.unit == 0 && p->u.dwarf.uoff == 0) + return -1; + if(dwarfseeksym(fhdr->dwarf, p->u.dwarf.unit, p->u.dwarf.uoff, &ds) < 0) return -1; @@ -200,7 +203,7 @@ dwarfsyminit(Fhdr *fp) if(dwarfenum(d, &s) < 0) return; - dwarfnextsymat(d, &s, 0); + while(dwarfnextsymat(d, &s, 0) == 1) while(dwarfnextsymat(d, &s, 1) == 1){ if(s.attrs.name == nil) continue;