Skip to content

Commit 9d9ffee

Browse files
committed
fix wrong assembly line number when debugging assembly with different sized instructions
1 parent 11d5c4d commit 9d9ffee

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

lldb/tools/lldb-dap/JSONUtils.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include "lldb/API/SBFileSpec.h"
2020
#include "lldb/API/SBFrame.h"
2121
#include "lldb/API/SBFunction.h"
22+
#include "lldb/API/SBInstruction.h"
23+
#include "lldb/API/SBInstructionList.h"
2224
#include "lldb/API/SBLineEntry.h"
2325
#include "lldb/API/SBModule.h"
2426
#include "lldb/API/SBQueue.h"
@@ -776,10 +778,12 @@ llvm::json::Value CreateStackFrame(lldb::SBFrame &frame,
776778

777779
// Calculate the line of the current PC from the start of the current
778780
// symbol.
779-
lldb::addr_t inst_offset = frame.GetPCAddress().GetOffset() -
780-
frame.GetSymbol().GetStartAddress().GetOffset();
781-
lldb::addr_t inst_line =
782-
inst_offset / (frame.GetThread().GetProcess().GetAddressByteSize() / 2);
781+
lldb::SBAddress current_address = frame.GetPCAddress();
782+
lldb::SBTarget target = frame.GetThread().GetProcess().GetTarget();
783+
lldb::SBInstructionList inst_list =
784+
target.ReadInstructions(frame.GetSymbol().GetStartAddress(), current_address, nullptr);
785+
size_t inst_line = inst_list.GetSize();
786+
783787
// Line numbers are 1-based.
784788
object.try_emplace("line", inst_line + 1);
785789
object.try_emplace("column", 1);

0 commit comments

Comments
 (0)