From ce9a1341f2146d75767f950bbb23dd866690be38 Mon Sep 17 00:00:00 2001 From: Jim Ingham Date: Fri, 22 Mar 2013 01:28:17 +0000 Subject: [PATCH] Change the AppleObjCTrampolineHandler to always run all threads when resolving the target of an ObjC method call. Add a StopOthers method to AppleThreadPlanStepThroughObjCTrampoline, don't rely on the setting in the ThreadPlanToCallFunction, since that gets pushed too late to determine which threads will continue. llvm-svn: 177691 --- .../ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp | 6 +++++- .../AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp index 5cc611e..f548758 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp @@ -1106,12 +1106,16 @@ AppleObjCTrampolineHandler::GetStepThroughDispatchPlan (Thread &thread, bool sto flag_value.GetScalar() = 0; // FIXME - Set to 0 when debugging is done. dispatch_values.PushValue (flag_value); + + // The step through code might have to fill in the cache, so it is not safe to run only one thread. + // So we override the stop_others value passed in to us here: + const bool trampoline_stop_others = false; ret_plan_sp.reset (new AppleThreadPlanStepThroughObjCTrampoline (thread, this, dispatch_values, isa_addr, sel_addr, - stop_others)); + trampoline_stop_others)); if (log) { StreamString s; diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h index 241462a..32c47de0 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleThreadPlanStepThroughObjCTrampoline.h @@ -54,6 +54,12 @@ public: virtual bool ShouldStop (Event *event_ptr); + + virtual bool + StopOthers() + { + return m_stop_others; + } // The base class MischiefManaged does some cleanup - so you have to call it // in your MischiefManaged derived class. -- 2.7.4