LibDebug: Tolerate missing debug information

We previously crashed when programs were missing certain debug information.
This commit is contained in:
Itamar 2020-05-23 14:55:39 +03:00 committed by Andreas Kling
parent 58480a510f
commit 2686957836
Notes: sideshowbarker 2024-07-19 06:11:29 +09:00
2 changed files with 11 additions and 3 deletions

View file

@ -69,6 +69,10 @@ void DebugInfo::parse_scopes_impl(const Dwarf::DIE& die)
if (name.has_value())
scope.name = name.value().data.as_string;
if (!child.get_attribute(Dwarf::Attribute::LowPc).has_value()) {
dbg() << "DWARF: Couldn't find attribtue LowPc for scope";
return;
}
scope.address_low = child.get_attribute(Dwarf::Attribute::LowPc).value().data.as_u32;
// The attribute name HighPc is confusing. In this context, it seems to actually be a positive offset from LowPc
scope.address_high = scope.address_low + child.get_attribute(Dwarf::Attribute::HighPc).value().data.as_u32;
@ -88,9 +92,10 @@ void DebugInfo::parse_scopes_impl(const Dwarf::DIE& die)
void DebugInfo::prepare_lines()
{
auto section = m_elf->image().lookup_section(".debug_line");
ASSERT(!section.is_undefined());
if (section.is_undefined())
return;
auto buffer = ByteBuffer::wrap(reinterpret_cast<const u8*>(section.raw_data()), section.size());
auto buffer = section.wrapping_byte_buffer();
BufferStream stream(buffer);
Vector<LineProgram::LineInfo> all_lines;

View file

@ -41,12 +41,15 @@ DwarfInfo::DwarfInfo(NonnullRefPtr<const ELF::Loader> elf)
ByteBuffer DwarfInfo::section_data(const String& section_name)
{
auto section = m_elf->image().lookup_section(section_name);
ASSERT(!section.is_undefined());
if (section.is_undefined())
return {};
return section.wrapping_byte_buffer();
}
void DwarfInfo::populate_compilation_units()
{
if (m_debug_info_data.is_null())
return;
// We have to const_cast here because there isn't a version of
// BufferStream that accepts a const ByteStream
// We take care not to use BufferStream operations that modify the underlying buffer