Remove warning about unknown abstract origin

Dwarf generated by Clang -g1 will not have DW_AT_inline attribute for some DW_TAG_subprograms even if they are inlined. This warning recently increased a lot (~ 3 million) due to DW_TAG_inlined_subroutine also complains about unknown abstract origin. It caused infra failure in building bots.

Bug: 1241579
Change-Id: I9b5135925b71aa915760c140bcf73fc603bb77d3
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3111782
Reviewed-by: Joshua Peraza <jperaza@chromium.org>
This commit is contained in:
Zequan Wu 2021-08-20 16:00:30 -07:00 committed by Joshua Peraza
parent 4959def222
commit 7933ec0a69

View file

@ -504,8 +504,6 @@ void DwarfCUToModule::GenericDIEHandler::ProcessAttributeReference(
abstract_origin_ = &(origin->second); abstract_origin_ = &(origin->second);
} else if (data > offset_) { } else if (data > offset_) {
forward_ref_die_offset_ = data; forward_ref_die_offset_ = data;
} else {
cu_context_->reporter->UnknownAbstractOrigin(offset_, data);
} }
specification_offset_ = data; specification_offset_ = data;
break; break;
@ -750,14 +748,6 @@ void DwarfCUToModule::InlineHandler::Finish() {
} }
} }
// Malformed DWARF may omit the name, but all Module::Functions must
// have names.
// If we have a forward reference to a DW_AT_specification or
// DW_AT_abstract_origin, then don't warn, the name will be fixed up
// later
if (name_.empty() && forward_ref_die_offset_ == 0)
cu_context_->reporter->UnnamedFunction(offset_);
// Every DW_TAG_inlined_subroutine should have a DW_AT_abstract_origin. // Every DW_TAG_inlined_subroutine should have a DW_AT_abstract_origin.
assert(specification_offset_ != 0); assert(specification_offset_ != 0);
@ -929,11 +919,6 @@ void DwarfCUToModule::FuncHandler::Finish() {
if (!name_.empty()) { if (!name_.empty()) {
name = name_; name = name_;
} else { } else {
// If we have a forward reference to a DW_AT_specification or
// DW_AT_abstract_origin, then don't warn, the name will be fixed up
// later
if (forward_ref_die_offset_ == 0)
cu_context_->reporter->UnnamedFunction(offset_);
name = "<name omitted>"; name = "<name omitted>";
} }