diff --git a/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj b/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj index 62d6cd66619b..549f1dc5088c 100644 --- a/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj +++ b/lldb/tools/debugserver/debugserver.xcodeproj/project.pbxproj @@ -557,8 +557,6 @@ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = ( "-framework", SpringBoardServices, - "-framework", - ARMDisassembler, "-llockdown", ); OTHER_MIGFLAGS = "-I$(DERIVED_FILE_DIR)"; @@ -600,8 +598,6 @@ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = ( "-framework", SpringBoardServices, - "-framework", - ARMDisassembler, "-llockdown", ); OTHER_MIGFLAGS = "-I$(DERIVED_FILE_DIR)"; @@ -643,8 +639,6 @@ "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" = ( "-framework", SpringBoardServices, - "-framework", - ARMDisassembler, "-llockdown", ); OTHER_MIGFLAGS = "-I$(DERIVED_FILE_DIR)"; diff --git a/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp b/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp index 17ac762491a0..ba1133ca10a1 100644 --- a/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp +++ b/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.cpp @@ -423,10 +423,13 @@ DNBArchMachARM::ThreadDidStop() } m_sw_single_step_itblock_break_count = 0; +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) + // Decode instructions up to the current PC to ensure the internal decoder state is valid for the IT block // The decoder has to decode each instruction in the IT block even if it is not executed so that // the fields are correctly updated DecodeITBlockInstructions(m_state.context.gpr.__pc); +#endif } } @@ -466,6 +469,8 @@ DNBArchMachARM::StepNotComplete () } +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) + void DNBArchMachARM::DecodeITBlockInstructions(nub_addr_t curr_pc) @@ -520,7 +525,7 @@ DNBArchMachARM::DecodeITBlockInstructions(nub_addr_t curr_pc) DNBLogThreadedIf(LOG_STEP | LOG_VERBOSE, "%s: next_pc_in_itblock=0x%8.8x", __FUNCTION__, next_pc_in_itblock); } } - +#endif // Set the single step bit in the processor status register. kern_return_t @@ -685,6 +690,8 @@ DNBArchMachARM::ConditionPassed(uint8_t condition, uint32_t cpsr) return false; } +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) + bool DNBArchMachARM::ComputeNextPC(nub_addr_t currentPC, arm_decoded_instruction_t decodedInstruction, bool currentPCIsThumb, nub_addr_t *targetPC) { @@ -1830,6 +1837,8 @@ DNBArchMachARM::DecodeInstructionUsingDisassembler(nub_addr_t curr_pc, uint32_t return decodeReturnCode; } +#endif + nub_bool_t DNBArchMachARM::BreakpointHit (nub_process_t pid, nub_thread_t tid, nub_break_t breakID, void *baton) { @@ -1847,6 +1856,8 @@ kern_return_t DNBArchMachARM::SetSingleStepSoftwareBreakpoints() { DNBError err; + +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) err = GetGPRState(false); if (err.Fail()) @@ -2043,7 +2054,9 @@ DNBArchMachARM::SetSingleStepSoftwareBreakpoints() } #endif } - +#else + err.LogThreaded("%s: ARMDisassembler.framework support is disabled", __FUNCTION__); +#endif return err.Error(); } diff --git a/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.h b/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.h index 565ff083614a..cc6be259d867 100644 --- a/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.h +++ b/lldb/tools/debugserver/source/MacOSX/arm/DNBArchImpl.h @@ -17,7 +17,9 @@ #if defined (__arm__) #include "DNBArch.h" +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) #include +#endif class MachThread; @@ -36,7 +38,9 @@ public: m_last_decode_pc(INVALID_NUB_ADDRESS) { memset(&m_dbg_save, 0, sizeof(m_dbg_save)); +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) ThumbStaticsInit(&m_last_decode_thumb); +#endif for (int i = 0; i < kMaxNumThumbITBreakpoints; i++) m_sw_single_step_itblock_break_id[i] = INVALID_NUB_BREAK_ID; } @@ -85,10 +89,12 @@ protected: kern_return_t SetSingleStepSoftwareBreakpoints (); bool ConditionPassed(uint8_t condition, uint32_t cpsr); +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) bool ComputeNextPC(nub_addr_t currentPC, arm_decoded_instruction_t decodedInstruction, bool currentPCIsThumb, nub_addr_t *targetPC); - void EvaluateNextInstructionForSoftwareBreakpointSetup(nub_addr_t currentPC, uint32_t cpsr, bool currentPCIsThumb, nub_addr_t *nextPC, bool *nextPCIsThumb); - void DecodeITBlockInstructions(nub_addr_t curr_pc); arm_error_t DecodeInstructionUsingDisassembler(nub_addr_t curr_pc, uint32_t curr_cpsr, arm_decoded_instruction_t *decodedInstruction, thumb_static_data_t *thumbStaticData, nub_addr_t *next_pc); + void DecodeITBlockInstructions(nub_addr_t curr_pc); +#endif + void EvaluateNextInstructionForSoftwareBreakpointSetup(nub_addr_t currentPC, uint32_t cpsr, bool currentPCIsThumb, nub_addr_t *nextPC, bool *nextPCIsThumb); static nub_bool_t BreakpointHit (nub_process_t pid, nub_thread_t tid, nub_break_t breakID, void *baton); typedef enum RegisterSetTag @@ -233,8 +239,10 @@ protected: nub_break_t m_sw_single_step_itblock_break_id[kMaxNumThumbITBreakpoints]; nub_addr_t m_sw_single_step_itblock_break_count; // Disassembler state +#if defined (USE_ARM_DISASSEMBLER_FRAMEWORK) thumb_static_data_t m_last_decode_thumb; arm_decoded_instruction_t m_last_decode_arm; +#endif nub_addr_t m_last_decode_pc; };