diff options
| -rw-r--r-- | lldb/test/tools/lldb-mi/TestMiData.py | 2 | ||||
| -rw-r--r-- | lldb/tools/lldb-mi/MICmdCmdData.cpp | 9 |
2 files changed, 8 insertions, 3 deletions
diff --git a/lldb/test/tools/lldb-mi/TestMiData.py b/lldb/test/tools/lldb-mi/TestMiData.py index 58a1d303268..8d59197eca8 100644 --- a/lldb/test/tools/lldb-mi/TestMiData.py +++ b/lldb/test/tools/lldb-mi/TestMiData.py @@ -33,7 +33,7 @@ class MiDataTestCase(lldbmi_testcase.MiTestCaseBase): # Test -data-disassemble: try to disassemble some address self.runCmd("-data-disassemble -s %#x -e %#x -- 0" % (addr, addr + 0x10)) - self.expect("\^done,asm_insns=\[{address=\"%#x\",func-name=\"main\",offset=\"0x0\",size=\"[1-9]\",inst=\".+\"}," % addr) + self.expect("\^done,asm_insns=\[{address=\"0x%08x\",func-name=\"main\",offset=\"0\",size=\"[1-9]+\",inst=\".+\"}," % addr) @lldbmi_test @expectedFailureWindows("llvm.org/pr22274: need a pexpect replacement for windows") diff --git a/lldb/tools/lldb-mi/MICmdCmdData.cpp b/lldb/tools/lldb-mi/MICmdCmdData.cpp index 92e41907333..5ef97a4915c 100644 --- a/lldb/tools/lldb-mi/MICmdCmdData.cpp +++ b/lldb/tools/lldb-mi/MICmdCmdData.cpp @@ -408,6 +408,11 @@ CMICmdCmdDataDisassemble::Execute(void) lldb::addr_t lldbStartAddr = static_cast<lldb::addr_t>(nAddrStart); lldb::SBInstructionList instructions = sbTarget.ReadInstructions(lldb::SBAddress(lldbStartAddr, sbTarget), nAddrEnd - nAddrStart); const MIuint nInstructions = instructions.GetSize(); + // Calculate the offset of first instruction so that we can generate offset starting at 0 + lldb::addr_t start_offset = 0; + if(nInstructions > 0) + start_offset = instructions.GetInstructionAtIndex(0).GetAddress().GetOffset(); + for (size_t i = 0; i < nInstructions; i++) { const MIchar *pUnknown = "??"; @@ -418,7 +423,7 @@ CMICmdCmdDataDisassemble::Execute(void) lldb::addr_t addr = address.GetLoadAddress(sbTarget); const MIchar *pFnName = address.GetFunction().GetName(); pFnName = (pFnName != nullptr) ? pFnName : pUnknown; - lldb::addr_t addrOffSet = address.GetOffset(); + lldb::addr_t addrOffSet = address.GetOffset() - start_offset; const MIchar *pStrOperands = instrt.GetOperands(sbTarget); pStrOperands = (pStrOperands != nullptr) ? pStrOperands : pUnknown; const size_t instrtSize = instrt.GetByteSize(); @@ -430,7 +435,7 @@ CMICmdCmdDataDisassemble::Execute(void) const CMICmnMIValueConst miValueConst2(pFnName); const CMICmnMIValueResult miValueResult2("func-name", miValueConst2); miValueTuple.Add(miValueResult2); - const CMICmnMIValueConst miValueConst3(CMIUtilString::Format("0x%lld", addrOffSet)); + const CMICmnMIValueConst miValueConst3(CMIUtilString::Format("%lld", addrOffSet)); const CMICmnMIValueResult miValueResult3("offset", miValueConst3); miValueTuple.Add(miValueResult3); const CMICmnMIValueConst miValueConst4(CMIUtilString::Format("%d", instrtSize)); |

