Commit Diff


commit - ae12b879721b02b79a2a2457b36627d24147e74f
commit + eaf56db5bc78cfec908db84dc792c53ac8ffb90e
blob - d5cc9b7113a4b8002fd5c520cd875ff2536ec297
blob + 3cefeea2f8d1258016466fcf953d50957bcacffa
--- src/libmach/dwarf386.c
+++ src/libmach/dwarf386.c
@@ -15,10 +15,8 @@ dwarf386regs[] = 
 	"BP",
 	"SI",
 	"DI",
-	"LR",
-	"CFA",
 };
 
-int dwarf386nregs = 10;
+int dwarf386nregs = nelem(dwarf386regs);
 
 
blob - 2db418ddb852364c99e64ed1029145c7ad9e62dc
blob + 503d51492ae6dc694bdd624d9b35c8797978a267
--- src/libmach/dwarfabbrev.c
+++ 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);
 }
 
blob - ef994ec5456ddcdc52439cc06cdf9ad31c7b37e6
blob + 61c58dd4f77dd2775281a67b9bec738362de591c
--- src/libmach/dwarfinfo.c
+++ 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)
blob - 8c41d127c605b0f15d0d9c401715ff3cc748dc7a
blob + eeafa8dccb8bc755aac55f482ffa3ab7242e896b
--- src/libmach/symdwarf.c
+++ src/libmach/symdwarf.c
@@ -112,6 +112,9 @@ dwarflenum(Fhdr *fhdr, Symbol *p, char *name, uint j, 
 	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;