[lldb/crashlog] Fix line entries resolution in interactive mode

This patch subtracts 1 to the pc of any frame above frame 0 to get the
previous line entry and display the right line in the debugger.

This also rephrase some old comment from `48d157dd4`.

rdar://92686666

Differential Revision: https://reviews.llvm.org/D125928

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
This commit is contained in:
Med Ismail Bennani 2022-05-18 14:18:14 -07:00
parent 051a5ae998
commit 3e54ea0cfa
2 changed files with 7 additions and 4 deletions

View File

@ -115,8 +115,8 @@ class CrashLog(symbolication.Symbolicator):
disassemble = (
this_thread_crashed or options.disassemble_all_threads) and frame_idx < options.disassemble_depth
# Any frame above frame zero and we have to subtract one to
# get the previous line entry.
# Except for the zeroth frame, we should subtract 1 from every
# frame pc 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)

View File

@ -16,6 +16,7 @@ class CrashLogScriptedProcess(ScriptedProcess):
return
self.pid = crash_log.process_id
self.addr_mask = crash_log.addr_mask
self.crashed_thread_idx = crash_log.crashed_thread_idx
self.loaded_images = []
@ -122,11 +123,13 @@ class CrashLogScriptedThread(ScriptedThread):
return None
for frame in self.backing_thread.frames:
frame_pc = frame.pc & self.scripted_process.addr_mask
pc = frame_pc if frame.index == 0 or frame_pc == 0 else frame_pc - 1
sym_addr = lldb.SBAddress()
sym_addr.SetLoadAddress(frame.pc, self.target)
sym_addr.SetLoadAddress(pc, self.target)
if not sym_addr.IsValid():
continue
self.frames.append({"idx": frame.index, "pc": frame.pc})
self.frames.append({"idx": frame.index, "pc": pc})
return self.frames