Fix the bugs I introduced fixing the bug earlier tonight.
diff --git a/src/libmach/dwarf386.c b/src/libmach/dwarf386.c index d5cc9b7..3cefeea 100644 --- a/src/libmach/dwarf386.c +++ b/src/libmach/dwarf386.c
@@ -15,10 +15,8 @@ "BP", "SI", "DI", - "LR", - "CFA", }; -int dwarf386nregs = 10; +int dwarf386nregs = nelem(dwarf386regs);
diff --git a/src/libmach/dwarfabbrev.c b/src/libmach/dwarfabbrev.c index 2db418d..503d514 100644 --- a/src/libmach/dwarfabbrev.c +++ b/src/libmach/dwarfabbrev.c
@@ -113,6 +113,7 @@ for(i=0; i<na; i++) if(a[i].num == num) return &a[i]; + werrstr("abbrev not found"); return nil; } @@ -122,8 +123,10 @@ 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 index ef994ec..61c58dd 100644 --- a/src/libmach/dwarfinfo.c +++ b/src/libmach/dwarfinfo.c
@@ -267,7 +267,8 @@ 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 index 8c41d12..eeafa8d 100644 --- a/src/libmach/symdwarf.c +++ b/src/libmach/symdwarf.c
@@ -112,6 +112,9 @@ 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 @@ 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;