174462Salfred//===-- ThreadPlanStepInRange.h ---------------------------------*- C++ -*-===// 274462Salfred// 3261046Smav// The LLVM Compiler Infrastructure 4261046Smav// 5261046Smav// This file is distributed under the University of Illinois Open Source 6261046Smav// License. See LICENSE.TXT for details. 7261046Smav// 8261046Smav//===----------------------------------------------------------------------===// 9261046Smav 10261046Smav#ifndef liblldb_ThreadPlanStepInRange_h_ 11261046Smav#define liblldb_ThreadPlanStepInRange_h_ 12261046Smav 13261046Smav// C Includes 14261046Smav// C++ Includes 15261046Smav// Other libraries and framework includes 16261046Smav// Project includes 1774462Salfred#include "lldb/Core/AddressRange.h" 18261046Smav#include "lldb/Target/StackID.h" 19261046Smav#include "lldb/Target/Thread.h" 20261046Smav#include "lldb/Target/ThreadPlanStepRange.h" 21261046Smav#include "lldb/Target/ThreadPlanShouldStopHere.h" 22261046Smav 23261046Smavnamespace lldb_private { 24261046Smav 25261046Smavclass ThreadPlanStepInRange : 26261046Smav public ThreadPlanStepRange, 27261046Smav public ThreadPlanShouldStopHere 28261046Smav{ 2974462Salfredpublic: 3074462Salfred ThreadPlanStepInRange (Thread &thread, 3174462Salfred const AddressRange &range, 3274462Salfred const SymbolContext &addr_context, 3374462Salfred lldb::RunMode stop_others); 3474462Salfred 3574462Salfred ThreadPlanStepInRange (Thread &thread, 3674462Salfred const AddressRange &range, 3774462Salfred const SymbolContext &addr_context, 3874462Salfred const char *step_into_function_name, 3974462Salfred lldb::RunMode stop_others); 40136581Sobrien 4174462Salfred virtual 4274462Salfred ~ThreadPlanStepInRange (); 4392990Sobrien 4492990Sobrien virtual void 4574462Salfred GetDescription (Stream *s, lldb::DescriptionLevel level); 4674462Salfred 4774462Salfred virtual bool 4874462Salfred ShouldStop (Event *event_ptr); 4974462Salfred 5074462Salfred void SetAvoidRegexp(const char *name); 5174462Salfred 5274462Salfred void SetStepInTarget (const char *target) 5374462Salfred { 5474462Salfred m_step_into_target.SetCString(target); 5574462Salfred } 5675094Siedowse 5774462Salfred static lldb::ThreadPlanSP 5874462Salfred DefaultShouldStopHereCallback (ThreadPlan *current_plan, Flags &flags, void *baton); 5974462Salfred 6074462Salfred static void 6174462Salfred SetDefaultFlagValue (uint32_t new_value); 6274462Salfred 6374462Salfred bool 6474462Salfred IsVirtualStep(); 6574462Salfred 6674462Salfredprotected: 6774462Salfred virtual bool DoWillResume (lldb::StateType resume_state, bool current_plan); 6874462Salfred 6974462Salfred virtual bool 7074462Salfred DoPlanExplainsStop (Event *event_ptr); 7174462Salfred 7274462Salfred virtual void 7374462Salfred SetFlagsToDefault (); 7474462Salfred 7574462Salfred bool 76156090Sdeischen FrameMatchesAvoidCriteria (); 7774462Salfred 7892941Sobrienprivate: 7992941Sobrien 8092905Sobrien friend lldb::ThreadPlanSP 8192905Sobrien Thread::QueueThreadPlanForStepOverRange (bool abort_other_plans, 8274462Salfred const AddressRange &range, 8374462Salfred const SymbolContext &addr_context, 8474462Salfred lldb::RunMode stop_others); 8574462Salfred friend lldb::ThreadPlanSP 8674462Salfred Thread::QueueThreadPlanForStepInRange (bool abort_other_plans, 8774462Salfred const AddressRange &range, 8874462Salfred const SymbolContext &addr_context, 8974462Salfred const char *step_in_target, 9074462Salfred lldb::RunMode stop_others, 91309489Sngie bool avoid_code_without_debug_info); 92309489Sngie 9374462Salfred 9474462Salfred // Need an appropriate marker for the current stack so we can tell step out 9574462Salfred // from step in. 9674462Salfred 9774462Salfred static uint32_t s_default_flag_values; 9874462Salfred lldb::ThreadPlanSP m_sub_plan_sp; // Keep track of the last plan we were running. If it fails, we should stop. 9974462Salfred std::unique_ptr<RegularExpression> m_avoid_regexp_ap; 10074462Salfred bool m_step_past_prologue; // FIXME: For now hard-coded to true, we could put a switch in for this if there's 10174462Salfred // demand for that. 10274462Salfred bool m_virtual_step; // true if we've just done a "virtual step", i.e. just moved the inline stack depth. 10374462Salfred ConstString m_step_into_target; 10474462Salfred DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepInRange); 10574462Salfred 10674462Salfred}; 10774462Salfred 10874462Salfred} // namespace lldb_private 10974462Salfred 11074462Salfred#endif // liblldb_ThreadPlanStepInRange_h_ 11174462Salfred