[Lldb-commits] [lldb] r159322 - /lldb/trunk/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp
Enrico Granata
egranata at apple.com
Wed Jun 27 18:23:30 PDT 2012
Author: enrico
Date: Wed Jun 27 20:23:30 2012
New Revision: 159322
URL: http://llvm.org/viewvc/llvm-project?rev=159322&view=rev
Log:
<rdar://problem/11679380> Make sure we do not fallback to software stepping when hardware stepping should work but fails to get enabled. Also removing dead code paths
Modified:
lldb/trunk/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp
Modified: lldb/trunk/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp?rev=159322&r1=159321&r2=159322&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp Wed Jun 27 20:23:30 2012
@@ -62,8 +62,6 @@
// I'm seeing this, instead.
#define WATCHPOINT_OCCURRED ((uint32_t)(10u))
-//#define DNB_ARCH_MACH_ARM_DEBUG_SW_STEP 1
-
static const uint8_t g_arm_breakpoint_opcode[] = { 0xFE, 0xDE, 0xFF, 0xE7 };
static const uint8_t g_thumb_breakpooint_opcode[] = { 0xFE, 0xDE };
@@ -340,23 +338,20 @@
// Do we need to step this thread? If so, let the mach thread tell us so.
if (m_thread->IsStepping())
{
- bool step_handled = false;
// This is the primary thread, let the arch do anything it needs
if (NumSupportedHardwareBreakpoints() > 0)
{
-#if defined (DNB_ARCH_MACH_ARM_DEBUG_SW_STEP)
- bool half_step = m_hw_single_chained_step_addr != INVALID_NUB_ADDRESS;
-#endif
- step_handled = EnableHardwareSingleStep(true) == KERN_SUCCESS;
-#if defined (DNB_ARCH_MACH_ARM_DEBUG_SW_STEP)
- if (!half_step)
- step_handled = false;
-#endif
+ if (EnableHardwareSingleStep(true) != KERN_SUCCESS)
+ {
+ DNBLogThreaded("DNBArchMachARM::ThreadWillResume() failed to enable hardware single step");
+ }
}
-
- if (!step_handled)
+ else
{
- SetSingleStepSoftwareBreakpoints();
+ if (SetSingleStepSoftwareBreakpoints() != KERN_SUCCESS)
+ {
+ DNBLogThreaded("DNBArchMachARM::ThreadWillResume() failed to enable software single step");
+ }
}
}
@@ -434,32 +429,6 @@
// We are single stepping, was this the primary thread?
if (m_thread->IsStepping())
{
-#if defined (DNB_ARCH_MACH_ARM_DEBUG_SW_STEP)
- success = EnableHardwareSingleStep(false) == KERN_SUCCESS;
- // Hardware single step must work if we are going to test software
- // single step functionality
- assert(success);
- if (m_hw_single_chained_step_addr == INVALID_NUB_ADDRESS && m_sw_single_step_next_pc != INVALID_NUB_ADDRESS)
- {
- uint32_t sw_step_next_pc = m_sw_single_step_next_pc & 0xFFFFFFFEu;
- bool sw_step_next_pc_is_thumb = (m_sw_single_step_next_pc & 1) != 0;
- bool actual_next_pc_is_thumb = (m_state.context.gpr.__cpsr & 0x20) != 0;
- if (m_state.context.gpr.__pc != sw_step_next_pc)
- {
- DNBLogError("curr pc = 0x%8.8x - calculated single step target PC was incorrect: 0x%8.8x != 0x%8.8x", m_state.context.gpr.__pc, sw_step_next_pc, m_state.context.gpr.__pc);
- exit(1);
- }
- if (actual_next_pc_is_thumb != sw_step_next_pc_is_thumb)
- {
- DNBLogError("curr pc = 0x%8.8x - calculated single step calculated mode mismatch: sw single mode = %s != %s",
- m_state.context.gpr.__pc,
- actual_next_pc_is_thumb ? "Thumb" : "ARM",
- sw_step_next_pc_is_thumb ? "Thumb" : "ARM");
- exit(1);
- }
- m_sw_single_step_next_pc = INVALID_NUB_ADDRESS;
- }
-#else
// Are we software single stepping?
if (NUB_BREAK_ID_IS_VALID(m_sw_single_step_break_id) || m_sw_single_step_itblock_break_count)
{
@@ -512,7 +481,6 @@
}
else
success = EnableHardwareSingleStep(false) == KERN_SUCCESS;
-#endif
}
else
{
@@ -2153,11 +2121,6 @@
{
err = KERN_SUCCESS;
-#if defined DNB_ARCH_MACH_ARM_DEBUG_SW_STEP
- m_sw_single_step_next_pc = next_pc;
- if (next_pc_is_thumb)
- m_sw_single_step_next_pc |= 1; // Set bit zero if the next PC is expected to be Thumb
-#else
const DNBBreakpoint *bp = m_thread->Process()->Breakpoints().FindByAddress(next_pc);
if (bp == NULL)
@@ -2167,7 +2130,6 @@
err = KERN_INVALID_ARGUMENT;
DNBLogThreadedIf(LOG_STEP, "%s: software single step breakpoint with breakID=%d set at 0x%8.8x", __FUNCTION__, m_sw_single_step_break_id, next_pc);
}
-#endif
}
#else
err.LogThreaded("%s: ARMDisassembler.framework support is disabled", __FUNCTION__);
More information about the lldb-commits
mailing list