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
This commit is contained in:
Jim Ingham 2013-03-22 01:28:17 +00:00
parent 48366f7af9
commit ce9a1341f2
2 changed files with 11 additions and 1 deletions

View File

@ -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;

View File

@ -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.