[Lldb-commits] [PATCH] D14633: [LLDB][MIPS] Clear bug 25194 - LLDB-Server Assertion raised when single stepping on MIPS

Sagar Thakur via lldb-commits lldb-commits at lists.llvm.org
Thu Nov 12 21:58:32 PST 2015


sagar created this revision.
sagar added reviewers: clayborg, tberghammer.
sagar added subscribers: nitesh.jain, jaydeep, bhushan, mohit.bhakkad, lldb-commits.
sagar set the repository for this revision to rL LLVM.
Herald added a subscriber: dsanders.

This patch will clear bug 25194 - LLDB-Server Assertion raised when single stepping on MIPS. The problem was that while emulating instructions, old and new pc values would have garbage value in their upper 32 bits. Therefore checking if pc was changed (old_pc == new_pc) would always return false, because of which pc was not getting updated.

>        /* If we haven't changed the PC, change it here */
>        if (old_pc == new_pc)
>        {
>            new_pc += 4;
>            Context context;
>            if (!WriteRegisterUnsigned (context, eRegisterKindDWARF, >dwarf_pc_mips, new_pc))
>                return false;
>        }


Repository:
  rL LLVM

http://reviews.llvm.org/D14633

Files:
  source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp
  source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h

Index: source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h
===================================================================
--- source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h
+++ source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.h
@@ -80,6 +80,12 @@
         return SupportsEmulatingInstructionsOfTypeStatic (inst_type);
     }
 
+    uint32_t
+    ReadRegisterUnsigned (lldb::RegisterKind reg_kind,
+                                          uint32_t reg_num,
+                                          uint32_t fail_value, 
+                                          bool *success_ptr);
+
     bool
     ReadInstruction () override;
     
Index: source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp
===================================================================
--- source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp
+++ source/Plugins/Instruction/MIPS/EmulateInstructionMIPS.cpp
@@ -760,6 +760,20 @@
     return false;
 }
 
+uint32_t
+EmulateInstructionMIPS::ReadRegisterUnsigned (lldb::RegisterKind reg_kind,
+                                          uint32_t reg_num,
+                                          uint32_t fail_value, 
+                                          bool *success_ptr)
+{
+    RegisterValue reg_value;
+    if (ReadRegister (reg_kind, reg_num, reg_value))
+        return reg_value.GetAsUInt32(fail_value, success_ptr);
+    if (success_ptr)
+        *success_ptr = false;
+    return fail_value;
+}
+
 bool 
 EmulateInstructionMIPS::ReadInstruction ()
 {
@@ -817,7 +831,7 @@
     if (opcode_data == NULL)
         return false;
 
-    uint64_t old_pc = 0, new_pc = 0;
+    uint32_t old_pc = 0, new_pc = 0;
     const bool auto_advance_pc = evaluate_options & eEmulateInstructionOptionAutoAdvancePC;
 
     if (auto_advance_pc)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14633.40108.patch
Type: text/x-patch
Size: 1802 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20151113/b5800ce6/attachment-0001.bin>


More information about the lldb-commits mailing list