[lldb] Prevent underflow in crashlog.py

Avoid a OverflowError (an underflow really) when the pc is zero. This
can happen for "unknown frames" where the crashlog generator reports a
zero pc. We could omit them altogether, but if they're part of the
crashlog it seems fair to display them in lldb as well.

rdar://92686666

Differential revision: https://reviews.llvm.org/D125716
This commit is contained in:
Jonas Devlieghere 2022-05-16 14:51:27 -07:00
parent 07d549bce9
commit 9defb3b4b4
No known key found for this signature in database
GPG Key ID: 49CC0BD90FDEED4D
1 changed files with 6 additions and 8 deletions

View File

@ -114,14 +114,12 @@ class CrashLog(symbolication.Symbolicator):
for frame_idx, frame in enumerate(self.frames):
disassemble = (
this_thread_crashed or options.disassemble_all_threads) and frame_idx < options.disassemble_depth
if frame_idx == 0:
symbolicated_frame_addresses = crash_log.symbolicate(
frame.pc & crash_log.addr_mask, options.verbose)
else:
# Any frame above frame zero and we have to subtract one to
# get the previous line entry
symbolicated_frame_addresses = crash_log.symbolicate(
(frame.pc & crash_log.addr_mask) - 1, options.verbose)
# Any frame above frame zero and we have to subtract one to
# get the previous line entry.
pc = frame.pc & crash_log.addr_mask
pc = pc if frame_idx == 0 or pc == 0 else pc - 1
symbolicated_frame_addresses = crash_log.symbolicate(pc, options.verbose)
if symbolicated_frame_addresses:
symbolicated_frame_address_idx = 0