[Lldb-commits] [PATCH] [MIPS] Emulation of MIPS64 floating-point branch instructions
Jaydeep Patil
jaydeep.patil at imgtec.com
Tue Jun 16 00:44:18 PDT 2015
Thanks for the comments.
REPOSITORY
rL LLVM
================
Comment at: source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp:640
@@ -639,2 +639,3 @@
- m_disasm_ap.reset (new LLVMCDisassembler(triple, flavor, *this));
+ const char *cpu;
+
----------------
clayborg wrote:
> Initialize this with "" for now and then remove the setting to "" in the default. Just in case someone later adds code and doesn't set cpu to something.
We would still need cpu = "" in the default case to avoid -Wswitch warning.
================
Comment at: source/Plugins/Process/Linux/NativeProcessLinux.cpp:3487-3505
@@ +3486,21 @@
+
+#if defined (__mips__)
+ /*
+ * The breakpoint might be in a delay slot. In this case PC points
+ * to the delayed branch instruction rather then the instruction
+ * in the delay slot. If the CAUSE.BD flag is set then adjust the
+ * PC based on the size of the branch instruction.
+ */
+ const RegisterInfo *cause_reg_info = context_sp->GetRegisterInfoByName ("cause");
+ uint32_t cause = context_sp->ReadRegisterAsUnsigned (cause_reg_info, 0);
+ if ((!error.Success () || !breakpoint_sp) && (cause >> 31))
+ {
+ uint64_t branch_delay = 0;
+ if (log)
+ log->Printf ("NativeProcessLinux::%s MIPS cause register 0x%" PRIx32, __FUNCTION__, cause);
+ branch_delay = 4; // FIXME - Adjust according to size of branch instruction at PC
+ breakpoint_addr = initial_pc_addr + branch_delay;
+ error = m_breakpoint_list.GetBreakpoint (breakpoint_addr, breakpoint_sp);
+ }
+#endif
+
----------------
clayborg wrote:
> This should probably be moved somewhere more generic so that this code doesn't get duplicated for each process plug-in.
We will remove it from this patch and submit a separate patch.
http://reviews.llvm.org/D10355
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
More information about the lldb-commits
mailing list