diff options
author | Jim Ingham <jingham@apple.com> | 2013-03-22 01:28:17 +0000 |
---|---|---|
committer | Jim Ingham <jingham@apple.com> | 2013-03-22 01:28:17 +0000 |
commit | ce9a1341f2146d75767f950bbb23dd866690be38 (patch) | |
tree | 0a1451b6698431888933ea9c38b4db4e2e43b9ef | |
parent | 48366f7af9eedd5bc00f46cd6ad8882d7816b8ed (diff) | |
download | bcm5719-llvm-ce9a1341f2146d75767f950bbb23dd866690be38.tar.gz bcm5719-llvm-ce9a1341f2146d75767f950bbb23dd866690be38.zip |
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.
<rdar://problem/13447638>
llvm-svn: 177691
2 files changed, 11 insertions, 1 deletions
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTrampolineHandler.cpp index 5cc611eeae9..f54875857d1 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 241462aee6d..32c47de0068 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. |