summaryrefslogtreecommitdiffstats
path: root/dwflpp.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'dwflpp.cxx')
-rw-r--r--dwflpp.cxx13
1 files changed, 12 insertions, 1 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index 867fcef2..636cd38d 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -1467,10 +1467,21 @@ dwflpp::die_entrypc (Dwarf_Die * die, Dwarf_Addr * addr)
}
}
+ // PR10574: reject subprograms where the entrypc address turns out
+ // to be 0, since they tend to correspond to duplicate-eliminated
+ // COMDAT copies of C++ functions.
+ if (rc == 0 && *addr == 0)
+ {
+ lookup_method += " (skip comdat)";
+ rc = 1;
+ }
+
if (sess.verbose > 2)
- clog << "entry-pc lookup (" << lookup_method << ") = 0x" << hex << *addr << dec
+ clog << "entry-pc lookup (" << lookup_method << " dieoffset: " << lex_cast_hex(dwarf_dieoffset (die))
+ << ") = 0x" << hex << *addr << dec
<< " (rc " << rc << ")"
<< endl;
+
return (rc == 0);
}