tFix the bugs I introduced fixing the bug earlier tonight. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit eaf56db5bc78cfec908db84dc792c53ac8ffb90e
 (DIR) parent ae12b879721b02b79a2a2457b36627d24147e74f
 (HTM) Author: rsc <devnull@localhost>
       Date:   Wed, 21 Apr 2004 05:34:10 +0000
       
       Fix the bugs I introduced fixing the bug earlier tonight.
       
       Diffstat:
         M src/libmach/dwarf386.c              |       4 +---
         M src/libmach/dwarfabbrev.c           |       5 ++++-
         M src/libmach/dwarfinfo.c             |       3 ++-
         M src/libmach/symdwarf.c              |       5 ++++-
       
       4 files changed, 11 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/src/libmach/dwarf386.c b/src/libmach/dwarf386.c
       t@@ -15,10 +15,8 @@ dwarf386regs[] =
                "BP",
                "SI",
                "DI",
       -        "LR",
       -        "CFA",
        };
        
       -int dwarf386nregs = 10;
       +int dwarf386nregs = nelem(dwarf386regs);
        
        
 (DIR) diff --git a/src/libmach/dwarfabbrev.c b/src/libmach/dwarfabbrev.c
       t@@ -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;
        }
        
       t@@ -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);
        }
        
 (DIR) diff --git a/src/libmach/dwarfinfo.c b/src/libmach/dwarfinfo.c
       t@@ -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)
 (DIR) diff --git a/src/libmach/symdwarf.c b/src/libmach/symdwarf.c
       t@@ -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;
        
       t@@ -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;