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:
parent
48366f7af9
commit
ce9a1341f2
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue