mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:37:35 +00:00
LibDebug: Propagate errors throughout DWARF parsing
Splitting this into a separate commit was an afterthought, so this does not yet feature any fallible operations.
This commit is contained in:
parent
e235c42e4d
commit
e62269650a
17 changed files with 243 additions and 204 deletions
|
@ -34,13 +34,13 @@ ErrorOr<void> AddressRangesV5::for_each_range(Function<void(Range)> callback)
|
|||
case RangeListEntryType::BaseAddressX: {
|
||||
FlatPtr index;
|
||||
LEB128::read_unsigned(wrapped_range_lists_stream, index);
|
||||
current_base_address = m_compilation_unit.get_address(index);
|
||||
current_base_address = TRY(m_compilation_unit.get_address(index));
|
||||
break;
|
||||
}
|
||||
case RangeListEntryType::OffsetPair: {
|
||||
Optional<FlatPtr> base_address = current_base_address;
|
||||
if (!base_address.has_value()) {
|
||||
base_address = m_compilation_unit.base_address();
|
||||
base_address = TRY(m_compilation_unit.base_address());
|
||||
}
|
||||
|
||||
if (!base_address.has_value())
|
||||
|
@ -63,14 +63,14 @@ ErrorOr<void> AddressRangesV5::for_each_range(Function<void(Range)> callback)
|
|||
size_t start, end;
|
||||
LEB128::read_unsigned(wrapped_range_lists_stream, start);
|
||||
LEB128::read_unsigned(wrapped_range_lists_stream, end);
|
||||
callback(Range { m_compilation_unit.get_address(start), m_compilation_unit.get_address(end) });
|
||||
callback(Range { TRY(m_compilation_unit.get_address(start)), TRY(m_compilation_unit.get_address(end)) });
|
||||
break;
|
||||
}
|
||||
case RangeListEntryType::StartXLength: {
|
||||
size_t start, length;
|
||||
LEB128::read_unsigned(wrapped_range_lists_stream, start);
|
||||
LEB128::read_unsigned(wrapped_range_lists_stream, length);
|
||||
auto start_addr = m_compilation_unit.get_address(start);
|
||||
auto start_addr = TRY(m_compilation_unit.get_address(start));
|
||||
callback(Range { start_addr, start_addr + length });
|
||||
break;
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ ErrorOr<void> AddressRangesV4::for_each_range(Function<void(Range)> callback)
|
|||
} else if (begin == explode_byte(0xff)) {
|
||||
current_base_address = end;
|
||||
} else {
|
||||
FlatPtr base = current_base_address.value_or(m_compilation_unit.base_address().value_or(0));
|
||||
FlatPtr base = current_base_address.value_or(TRY(m_compilation_unit.base_address()).value_or(0));
|
||||
callback({ base + begin, base + end });
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue