Commit Diff


commit - a16e9f2de75587a89515697be0256847ab2a3907
commit + ebd395452e7f81ece3d3877a04fbe26a324f6a3d
blob - de342cd7046fa7e1e038b53504538097415e0b73
blob + d09edcb38edf4505497fbc1ebc055fe716a7b805
--- src/libmach/dwarfcfa.c
+++ src/libmach/dwarfcfa.c
@@ -110,6 +110,10 @@ findfde(Dwarf *d, ulong pc, State *s, DwarfBuf *fde)
 	ulong len, id, base, size;
 	DwarfBuf b;
 
+	if(d->frame.data == nil){
+		werrstr("no frame debugging information");
+		return -1;
+	}
 	b.d = d;
 	b.p = d->frame.data;
 	b.ep = b.p + d->frame.len;
blob - 6122ae683c887f471fa6fa84449a1749812a1f4e
blob + 728944f42a94e33c9f364817c1c28393ea87046e
--- src/libmach/dwarfopen.c
+++ src/libmach/dwarfopen.c
@@ -58,13 +58,13 @@ dwarfopen(Elf *elf)
 	d->elf = elf;
 	if(loadsection(elf, ".debug_abbrev", &d->abbrev) < 0
 	|| loadsection(elf, ".debug_aranges", &d->aranges) < 0
-	|| loadsection(elf, ".debug_frame", &d->frame) < 0
 	|| loadsection(elf, ".debug_line", &d->line) < 0
 	|| loadsection(elf, ".debug_pubnames", &d->pubnames) < 0
-	|| loadsection(elf, ".debug_ranges", &d->ranges) < 0
-	|| loadsection(elf, ".debug_str", &d->str) < 0
 	|| loadsection(elf, ".debug_info", &d->info) < 0)
 		goto err;
+	loadsection(elf, ".debug_frame", &d->frame);
+	loadsection(elf, ".debug_ranges", &d->ranges);
+	loadsection(elf, ".debug_str", &d->str);
 
 	/* make this a table once there are more */
 	switch(d->elf->hdr.machine){