Checked DIEs for valid low_pc up front.
diff --git a/src/dwarf.cc b/src/dwarf.cc
index 7823e0b..938f20e 100644
--- a/src/dwarf.cc
+++ b/src/dwarf.cc
@@ -2162,10 +2162,13 @@
ReadGeneralDIEAttr(tag, value, &die);
});
- // low_pc == 0 is a signal that this routine was stripped out of the
- // final binary.
- bool is_stripped = die.low_pc && die.low_pc->IsUint() &&
- die.low_pc->GetUint(die_reader) == 0;
+ // If low_pc is present but not a valid address, it indicates this this
+ // entity was stripped from the binary, so we want to skip ti.
+ bool is_stripped =
+ die.low_pc && die.low_pc->IsUint() &&
+ !dwarf::IsValidDwarfAddress(die.low_pc->GetUint(die_reader),
+ die_reader.unit_sizes().address_size());
+
// A declaration is not a definition and should not be attributed to this
// compileunit.
bool is_decl = die.declaration && die.declaration->IsUint() &&