Home | History | Annotate | Download | only in Target
      1 //===-- Thread.h ------------------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef liblldb_Thread_h_
     11 #define liblldb_Thread_h_
     12 
     13 #include "lldb/lldb-private.h"
     14 #include "lldb/Host/Mutex.h"
     15 #include "lldb/Core/Broadcaster.h"
     16 #include "lldb/Core/Event.h"
     17 #include "lldb/Core/UserID.h"
     18 #include "lldb/Core/UserSettingsController.h"
     19 #include "lldb/Target/ExecutionContextScope.h"
     20 #include "lldb/Target/StackFrameList.h"
     21 
     22 #define LLDB_THREAD_MAX_STOP_EXC_DATA 8
     23 
     24 namespace lldb_private {
     25 
     26 class ThreadProperties : public Properties
     27 {
     28 public:
     29     ThreadProperties(bool is_global);
     30 
     31     virtual
     32     ~ThreadProperties();
     33 
     34     //------------------------------------------------------------------
     35     /// The regular expression returned determines symbols that this
     36     /// thread won't stop in during "step-in" operations.
     37     ///
     38     /// @return
     39     ///    A pointer to a regular expression to compare against symbols,
     40     ///    or NULL if all symbols are allowed.
     41     ///
     42     //------------------------------------------------------------------
     43     const RegularExpression *
     44     GetSymbolsToAvoidRegexp();
     45 
     46     bool
     47     GetTraceEnabledState() const;
     48 };
     49 
     50 typedef std::shared_ptr<ThreadProperties> ThreadPropertiesSP;
     51 
     52 class Thread :
     53     public std::enable_shared_from_this<Thread>,
     54     public ThreadProperties,
     55     public UserID,
     56     public ExecutionContextScope,
     57     public Broadcaster
     58 {
     59 public:
     60     //------------------------------------------------------------------
     61     /// Broadcaster event bits definitions.
     62     //------------------------------------------------------------------
     63     enum
     64     {
     65         eBroadcastBitStackChanged           = (1 << 0),
     66         eBroadcastBitThreadSuspended        = (1 << 1),
     67         eBroadcastBitThreadResumed          = (1 << 2),
     68         eBroadcastBitSelectedFrameChanged   = (1 << 3),
     69         eBroadcastBitThreadSelected         = (1 << 4)
     70     };
     71 
     72     static ConstString &GetStaticBroadcasterClass ();
     73 
     74     virtual ConstString &GetBroadcasterClass() const
     75     {
     76         return GetStaticBroadcasterClass();
     77     }
     78 
     79     class ThreadEventData :
     80         public EventData
     81     {
     82     public:
     83         ThreadEventData (const lldb::ThreadSP thread_sp);
     84 
     85         ThreadEventData (const lldb::ThreadSP thread_sp, const StackID &stack_id);
     86 
     87         ThreadEventData();
     88 
     89         virtual ~ThreadEventData();
     90 
     91         static const ConstString &
     92         GetFlavorString ();
     93 
     94         virtual const ConstString &
     95         GetFlavor () const
     96         {
     97             return ThreadEventData::GetFlavorString ();
     98         }
     99 
    100         virtual void
    101         Dump (Stream *s) const;
    102 
    103         static const ThreadEventData *
    104         GetEventDataFromEvent (const Event *event_ptr);
    105 
    106         static lldb::ThreadSP
    107         GetThreadFromEvent (const Event *event_ptr);
    108 
    109         static StackID
    110         GetStackIDFromEvent (const Event *event_ptr);
    111 
    112         static lldb::StackFrameSP
    113         GetStackFrameFromEvent (const Event *event_ptr);
    114 
    115         lldb::ThreadSP
    116         GetThread () const
    117         {
    118             return m_thread_sp;
    119         }
    120 
    121         StackID
    122         GetStackID () const
    123         {
    124             return m_stack_id;
    125         }
    126 
    127     private:
    128         lldb::ThreadSP m_thread_sp;
    129         StackID        m_stack_id;
    130     DISALLOW_COPY_AND_ASSIGN (ThreadEventData);
    131     };
    132 
    133     // TODO: You shouldn't just checkpoint the register state alone, so this should get
    134     // moved to protected.  To do that ThreadStateCheckpoint needs to be returned as a token...
    135     class RegisterCheckpoint
    136     {
    137     public:
    138 
    139         RegisterCheckpoint() :
    140             m_stack_id (),
    141             m_data_sp ()
    142         {
    143         }
    144 
    145         RegisterCheckpoint (const StackID &stack_id) :
    146             m_stack_id (stack_id),
    147             m_data_sp ()
    148         {
    149         }
    150 
    151         ~RegisterCheckpoint()
    152         {
    153         }
    154 
    155         const RegisterCheckpoint&
    156         operator= (const RegisterCheckpoint &rhs)
    157         {
    158             if (this != &rhs)
    159             {
    160                 this->m_stack_id = rhs.m_stack_id;
    161                 this->m_data_sp  = rhs.m_data_sp;
    162             }
    163             return *this;
    164         }
    165 
    166         RegisterCheckpoint (const RegisterCheckpoint &rhs) :
    167             m_stack_id (rhs.m_stack_id),
    168             m_data_sp (rhs.m_data_sp)
    169         {
    170         }
    171 
    172         const StackID &
    173         GetStackID()
    174         {
    175             return m_stack_id;
    176         }
    177 
    178         void
    179         SetStackID (const StackID &stack_id)
    180         {
    181             m_stack_id = stack_id;
    182         }
    183 
    184         lldb::DataBufferSP &
    185         GetData()
    186         {
    187             return m_data_sp;
    188         }
    189 
    190         const lldb::DataBufferSP &
    191         GetData() const
    192         {
    193             return m_data_sp;
    194         }
    195 
    196     protected:
    197         StackID m_stack_id;
    198         lldb::DataBufferSP m_data_sp;
    199     };
    200 
    201     struct ThreadStateCheckpoint
    202     {
    203         uint32_t           orig_stop_id;  // Dunno if I need this yet but it is an interesting bit of data.
    204         lldb::StopInfoSP   stop_info_sp;  // You have to restore the stop info or you might continue with the wrong signals.
    205         RegisterCheckpoint register_backup;  // You need to restore the registers, of course...
    206         uint32_t           current_inlined_depth;
    207         lldb::addr_t       current_inlined_pc;
    208     };
    209 
    210     static void
    211     SettingsInitialize ();
    212 
    213     static void
    214     SettingsTerminate ();
    215 
    216     static const ThreadPropertiesSP &
    217     GetGlobalProperties();
    218 
    219     Thread (Process &process, lldb::tid_t tid);
    220     virtual ~Thread();
    221 
    222     lldb::ProcessSP
    223     GetProcess() const
    224     {
    225         return m_process_wp.lock();
    226     }
    227 
    228     int
    229     GetResumeSignal () const
    230     {
    231         return m_resume_signal;
    232     }
    233 
    234     void
    235     SetResumeSignal (int signal)
    236     {
    237         m_resume_signal = signal;
    238     }
    239 
    240     lldb::StateType
    241     GetState() const;
    242 
    243     void
    244     SetState (lldb::StateType state);
    245 
    246     lldb::StateType
    247     GetResumeState () const
    248     {
    249         return m_resume_state;
    250     }
    251 
    252     void
    253     SetResumeState (lldb::StateType state)
    254     {
    255         m_resume_state = state;
    256     }
    257 
    258     // This function is called on all the threads before "ShouldResume" and
    259     // "WillResume" in case a thread needs to change its state before the
    260     // ThreadList polls all the threads to figure out which ones actually
    261     // will get to run and how.
    262     void
    263     SetupForResume ();
    264 
    265     // Do not override this function, it is for thread plan logic only
    266     bool
    267     ShouldResume (lldb::StateType resume_state);
    268 
    269     // Override this to do platform specific tasks before resume.
    270     virtual void
    271     WillResume (lldb::StateType resume_state)
    272     {
    273     }
    274 
    275     // This clears generic thread state after a resume.  If you subclass this,
    276     // be sure to call it.
    277     virtual void
    278     DidResume ();
    279 
    280     // This notifies the thread when a private stop occurs.
    281     virtual void
    282     DidStop ();
    283 
    284     virtual void
    285     RefreshStateAfterStop() = 0;
    286 
    287     void
    288     WillStop ();
    289 
    290     bool
    291     ShouldStop (Event *event_ptr);
    292 
    293     Vote
    294     ShouldReportStop (Event *event_ptr);
    295 
    296     Vote
    297     ShouldReportRun (Event *event_ptr);
    298 
    299     void
    300     Flush ();
    301 
    302     // Return whether this thread matches the specification in ThreadSpec.  This is a virtual
    303     // method because at some point we may extend the thread spec with a platform specific
    304     // dictionary of attributes, which then only the platform specific Thread implementation
    305     // would know how to match.  For now, this just calls through to the ThreadSpec's
    306     // ThreadPassesBasicTests method.
    307     virtual bool
    308     MatchesSpec (const ThreadSpec *spec);
    309 
    310     lldb::StopInfoSP
    311     GetStopInfo ();
    312 
    313     lldb::StopReason
    314     GetStopReason();
    315 
    316     // This sets the stop reason to a "blank" stop reason, so you can call functions on the thread
    317     // without having the called function run with whatever stop reason you stopped with.
    318     void
    319     SetStopInfoToNothing();
    320 
    321     bool
    322     ThreadStoppedForAReason ();
    323 
    324     static const char *
    325     RunModeAsCString (lldb::RunMode mode);
    326 
    327     static const char *
    328     StopReasonAsCString (lldb::StopReason reason);
    329 
    330     virtual const char *
    331     GetInfo ()
    332     {
    333         return NULL;
    334     }
    335 
    336     virtual const char *
    337     GetName ()
    338     {
    339         return NULL;
    340     }
    341 
    342     virtual const char *
    343     GetQueueName ()
    344     {
    345         return NULL;
    346     }
    347 
    348     virtual uint32_t
    349     GetStackFrameCount()
    350     {
    351         return GetStackFrameList()->GetNumFrames();
    352     }
    353 
    354     virtual lldb::StackFrameSP
    355     GetStackFrameAtIndex (uint32_t idx)
    356     {
    357         return GetStackFrameList()->GetFrameAtIndex(idx);
    358     }
    359 
    360     virtual lldb::StackFrameSP
    361     GetFrameWithConcreteFrameIndex (uint32_t unwind_idx);
    362 
    363     bool
    364     DecrementCurrentInlinedDepth()
    365     {
    366         return GetStackFrameList()->DecrementCurrentInlinedDepth();
    367     }
    368 
    369     uint32_t
    370     GetCurrentInlinedDepth()
    371     {
    372         return GetStackFrameList()->GetCurrentInlinedDepth();
    373     }
    374 
    375     Error
    376     ReturnFromFrameWithIndex (uint32_t frame_idx, lldb::ValueObjectSP return_value_sp, bool broadcast = false);
    377 
    378     Error
    379     ReturnFromFrame (lldb::StackFrameSP frame_sp, lldb::ValueObjectSP return_value_sp, bool broadcast = false);
    380 
    381     virtual lldb::StackFrameSP
    382     GetFrameWithStackID (const StackID &stack_id)
    383     {
    384         if (stack_id.IsValid())
    385             return GetStackFrameList()->GetFrameWithStackID (stack_id);
    386         return lldb::StackFrameSP();
    387     }
    388 
    389     uint32_t
    390     GetSelectedFrameIndex ()
    391     {
    392         return GetStackFrameList()->GetSelectedFrameIndex();
    393     }
    394 
    395     lldb::StackFrameSP
    396     GetSelectedFrame ()
    397     {
    398         lldb::StackFrameListSP stack_frame_list_sp(GetStackFrameList());
    399         return stack_frame_list_sp->GetFrameAtIndex (stack_frame_list_sp->GetSelectedFrameIndex());
    400     }
    401 
    402     uint32_t
    403     SetSelectedFrame (lldb_private::StackFrame *frame, bool broadcast = false);
    404 
    405 
    406     bool
    407     SetSelectedFrameByIndex (uint32_t frame_idx, bool broadcast = false);
    408 
    409     bool
    410     SetSelectedFrameByIndexNoisily (uint32_t frame_idx, Stream &output_stream);
    411 
    412     void
    413     SetDefaultFileAndLineToSelectedFrame()
    414     {
    415         GetStackFrameList()->SetDefaultFileAndLineToSelectedFrame();
    416     }
    417 
    418     virtual lldb::RegisterContextSP
    419     GetRegisterContext () = 0;
    420 
    421     virtual lldb::RegisterContextSP
    422     CreateRegisterContextForFrame (StackFrame *frame) = 0;
    423 
    424     virtual void
    425     ClearStackFrames ();
    426 
    427     virtual bool
    428     SetBackingThread (const lldb::ThreadSP &thread_sp)
    429     {
    430         return false;
    431     }
    432 
    433     virtual lldb::ThreadSP
    434     GetBackingThread () const
    435     {
    436         return lldb::ThreadSP();
    437     }
    438 
    439     virtual void
    440     ClearBackingThread ()
    441     {
    442         // Subclasses can use this function if a thread is actually backed by
    443         // another thread. This is currently used for the OperatingSystem plug-ins
    444         // where they might have a thread that is in memory, yet its registers
    445         // are available through the lldb_private::Thread subclass for the current
    446         // lldb_private::Process class. Since each time the process stops the backing
    447         // threads for memory threads can change, we need a way to clear the backing
    448         // thread for all memory threads each time we stop.
    449     }
    450 
    451     void
    452     DumpUsingSettingsFormat (Stream &strm, uint32_t frame_idx);
    453 
    454     //------------------------------------------------------------------
    455     // Thread Plan Providers:
    456     // This section provides the basic thread plans that the Process control
    457     // machinery uses to run the target.  ThreadPlan.h provides more details on
    458     // how this mechanism works.
    459     // The thread provides accessors to a set of plans that perform basic operations.
    460     // The idea is that particular Platform plugins can override these methods to
    461     // provide the implementation of these basic operations appropriate to their
    462     // environment.
    463     //
    464     // NB: All the QueueThreadPlanXXX providers return Shared Pointers to
    465     // Thread plans.  This is useful so that you can modify the plans after
    466     // creation in ways specific to that plan type.  Also, it is often necessary for
    467     // ThreadPlans that utilize other ThreadPlans to implement their task to keep a shared
    468     // pointer to the sub-plan.
    469     // But besides that, the shared pointers should only be held onto by entities who live no longer
    470     // than the thread containing the ThreadPlan.
    471     // FIXME: If this becomes a problem, we can make a version that just returns a pointer,
    472     // which it is clearly unsafe to hold onto, and a shared pointer version, and only allow
    473     // ThreadPlan and Co. to use the latter.  That is made more annoying to do because there's
    474     // no elegant way to friend a method to all sub-classes of a given class.
    475     //
    476     //------------------------------------------------------------------
    477 
    478     //------------------------------------------------------------------
    479     /// Queues the base plan for a thread.
    480     /// The version returned by Process does some things that are useful,
    481     /// like handle breakpoints and signals, so if you return a plugin specific
    482     /// one you probably want to call through to the Process one for anything
    483     /// your plugin doesn't explicitly handle.
    484     ///
    485     /// @param[in] abort_other_plans
    486     ///    \b true if we discard the currently queued plans and replace them with this one.
    487     ///    Otherwise this plan will go on the end of the plan stack.
    488     ///
    489     /// @return
    490     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    491     //------------------------------------------------------------------
    492     virtual lldb::ThreadPlanSP
    493     QueueFundamentalPlan (bool abort_other_plans);
    494 
    495     //------------------------------------------------------------------
    496     /// Queues the plan used to step over a breakpoint at the current PC of \a thread.
    497     /// The default version returned by Process handles trap based breakpoints, and
    498     /// will disable the breakpoint, single step over it, then re-enable it.
    499     ///
    500     /// @param[in] abort_other_plans
    501     ///    \b true if we discard the currently queued plans and replace them with this one.
    502     ///    Otherwise this plan will go on the end of the plan stack.
    503     ///
    504     /// @return
    505     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    506     //------------------------------------------------------------------
    507     virtual lldb::ThreadPlanSP
    508     QueueThreadPlanForStepOverBreakpointPlan (bool abort_other_plans);
    509 
    510     //------------------------------------------------------------------
    511     /// Queues the plan used to step one instruction from the current PC of \a thread.
    512     ///
    513     /// @param[in] step_over
    514     ///    \b true if we step over calls to functions, false if we step in.
    515     ///
    516     /// @param[in] abort_other_plans
    517     ///    \b true if we discard the currently queued plans and replace them with this one.
    518     ///    Otherwise this plan will go on the end of the plan stack.
    519     ///
    520     /// @param[in] stop_other_threads
    521     ///    \b true if we will stop other threads while we single step this one.
    522     ///
    523     /// @return
    524     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    525     //------------------------------------------------------------------
    526     virtual lldb::ThreadPlanSP
    527     QueueThreadPlanForStepSingleInstruction (bool step_over,
    528                                              bool abort_other_plans,
    529                                              bool stop_other_threads);
    530 
    531     //------------------------------------------------------------------
    532     /// Queues the plan used to step through an address range, stepping  over
    533     /// function calls.
    534     ///
    535     /// @param[in] abort_other_plans
    536     ///    \b true if we discard the currently queued plans and replace them with this one.
    537     ///    Otherwise this plan will go on the end of the plan stack.
    538     ///
    539     /// @param[in] type
    540     ///    Type of step to do, only eStepTypeInto and eStepTypeOver are supported by this plan.
    541     ///
    542     /// @param[in] range
    543     ///    The address range to step through.
    544     ///
    545     /// @param[in] addr_context
    546     ///    When dealing with stepping through inlined functions the current PC is not enough information to know
    547     ///    what "step" means.  For instance a series of nested inline functions might start at the same address.
    548     //     The \a addr_context provides the current symbol context the step
    549     ///    is supposed to be out of.
    550     //   FIXME: Currently unused.
    551     ///
    552     /// @param[in] stop_other_threads
    553     ///    \b true if we will stop other threads while we single step this one.
    554     ///
    555     /// @return
    556     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    557     //------------------------------------------------------------------
    558     virtual lldb::ThreadPlanSP
    559     QueueThreadPlanForStepOverRange (bool abort_other_plans,
    560                                  const AddressRange &range,
    561                                  const SymbolContext &addr_context,
    562                                  lldb::RunMode stop_other_threads);
    563 
    564     //------------------------------------------------------------------
    565     /// Queues the plan used to step through an address range, stepping into functions.
    566     ///
    567     /// @param[in] abort_other_plans
    568     ///    \b true if we discard the currently queued plans and replace them with this one.
    569     ///    Otherwise this plan will go on the end of the plan stack.
    570     ///
    571     /// @param[in] type
    572     ///    Type of step to do, only eStepTypeInto and eStepTypeOver are supported by this plan.
    573     ///
    574     /// @param[in] range
    575     ///    The address range to step through.
    576     ///
    577     /// @param[in] addr_context
    578     ///    When dealing with stepping through inlined functions the current PC is not enough information to know
    579     ///    what "step" means.  For instance a series of nested inline functions might start at the same address.
    580     //     The \a addr_context provides the current symbol context the step
    581     ///    is supposed to be out of.
    582     //   FIXME: Currently unused.
    583     ///
    584     /// @param[in] step_in_target
    585     ///    Name if function we are trying to step into.  We will step out if we don't land in that function.
    586     ///
    587     /// @param[in] stop_other_threads
    588     ///    \b true if we will stop other threads while we single step this one.
    589     ///
    590     /// @param[in] avoid_code_without_debug_info
    591     ///    If \b true we will step out if we step into code with no debug info.
    592     ///
    593     /// @return
    594     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    595     //------------------------------------------------------------------
    596     virtual lldb::ThreadPlanSP
    597     QueueThreadPlanForStepInRange (bool abort_other_plans,
    598                                  const AddressRange &range,
    599                                  const SymbolContext &addr_context,
    600                                  const char *step_in_target,
    601                                  lldb::RunMode stop_other_threads,
    602                                  bool avoid_code_without_debug_info);
    603 
    604     //------------------------------------------------------------------
    605     /// Queue the plan used to step out of the function at the current PC of
    606     /// \a thread.
    607     ///
    608     /// @param[in] abort_other_plans
    609     ///    \b true if we discard the currently queued plans and replace them with this one.
    610     ///    Otherwise this plan will go on the end of the plan stack.
    611     ///
    612     /// @param[in] addr_context
    613     ///    When dealing with stepping through inlined functions the current PC is not enough information to know
    614     ///    what "step" means.  For instance a series of nested inline functions might start at the same address.
    615     //     The \a addr_context provides the current symbol context the step
    616     ///    is supposed to be out of.
    617     //   FIXME: Currently unused.
    618     ///
    619     /// @param[in] first_insn
    620     ///     \b true if this is the first instruction of a function.
    621     ///
    622     /// @param[in] stop_other_threads
    623     ///    \b true if we will stop other threads while we single step this one.
    624     ///
    625     /// @param[in] stop_vote
    626     /// @param[in] run_vote
    627     ///    See standard meanings for the stop & run votes in ThreadPlan.h.
    628     ///
    629     /// @return
    630     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    631     //------------------------------------------------------------------
    632     virtual lldb::ThreadPlanSP
    633     QueueThreadPlanForStepOut (bool abort_other_plans,
    634                                SymbolContext *addr_context,
    635                                bool first_insn,
    636                                bool stop_other_threads,
    637                                Vote stop_vote, // = eVoteYes,
    638                                Vote run_vote, // = eVoteNoOpinion);
    639                                uint32_t frame_idx);
    640 
    641     //------------------------------------------------------------------
    642     /// Gets the plan used to step through the code that steps from a function
    643     /// call site at the current PC into the actual function call.
    644     ///
    645     ///
    646     /// @param[in] return_stack_id
    647     ///    The stack id that we will return to (by setting backstop breakpoints on the return
    648     ///    address to that frame) if we fail to step through.
    649     ///
    650     /// @param[in] abort_other_plans
    651     ///    \b true if we discard the currently queued plans and replace them with this one.
    652     ///    Otherwise this plan will go on the end of the plan stack.
    653     ///
    654     /// @param[in] stop_other_threads
    655     ///    \b true if we will stop other threads while we single step this one.
    656     ///
    657     /// @return
    658     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    659     //------------------------------------------------------------------
    660     virtual lldb::ThreadPlanSP
    661     QueueThreadPlanForStepThrough (StackID &return_stack_id,
    662                                    bool abort_other_plans,
    663                                    bool stop_other_threads);
    664 
    665     //------------------------------------------------------------------
    666     /// Gets the plan used to continue from the current PC.
    667     /// This is a simple plan, mostly useful as a backstop when you are continuing
    668     /// for some particular purpose.
    669     ///
    670     /// @param[in] abort_other_plans
    671     ///    \b true if we discard the currently queued plans and replace them with this one.
    672     ///    Otherwise this plan will go on the end of the plan stack.
    673     ///
    674     /// @param[in] target_addr
    675     ///    The address to which we're running.
    676     ///
    677     /// @param[in] stop_other_threads
    678     ///    \b true if we will stop other threads while we single step this one.
    679     ///
    680     /// @return
    681     ///     A shared pointer to the newly queued thread plan, or NULL if the plan could not be queued.
    682     //------------------------------------------------------------------
    683     virtual lldb::ThreadPlanSP
    684     QueueThreadPlanForRunToAddress (bool abort_other_plans,
    685                                     Address &target_addr,
    686                                     bool stop_other_threads);
    687 
    688     virtual lldb::ThreadPlanSP
    689     QueueThreadPlanForStepUntil (bool abort_other_plans,
    690                                  lldb::addr_t *address_list,
    691                                  size_t num_addresses,
    692                                  bool stop_others,
    693                                  uint32_t frame_idx);
    694 
    695     virtual lldb::ThreadPlanSP
    696     QueueThreadPlanForCallFunction (bool abort_other_plans,
    697                                     Address& function,
    698                                     lldb::addr_t arg,
    699                                     bool stop_other_threads,
    700                                     bool unwind_on_error = false,
    701                                     bool ignore_breakpoints = true);
    702 
    703     //------------------------------------------------------------------
    704     // Thread Plan accessors:
    705     //------------------------------------------------------------------
    706 
    707     //------------------------------------------------------------------
    708     /// Gets the plan which will execute next on the plan stack.
    709     ///
    710     /// @return
    711     ///     A pointer to the next executed plan.
    712     //------------------------------------------------------------------
    713     ThreadPlan *
    714     GetCurrentPlan ();
    715 
    716     //------------------------------------------------------------------
    717     /// Unwinds the thread stack for the innermost expression plan currently
    718     /// on the thread plan stack.
    719     ///
    720     /// @return
    721     ///     An error if the thread plan could not be unwound.
    722     //------------------------------------------------------------------
    723 
    724     Error
    725     UnwindInnermostExpression();
    726 
    727 private:
    728     bool
    729     PlanIsBasePlan (ThreadPlan *plan_ptr);
    730 
    731     void
    732     BroadcastSelectedFrameChange(StackID &new_frame_id);
    733 
    734 public:
    735 
    736     //------------------------------------------------------------------
    737     /// Gets the outer-most plan that was popped off the plan stack in the
    738     /// most recent stop.  Useful for printing the stop reason accurately.
    739     ///
    740     /// @return
    741     ///     A pointer to the last completed plan.
    742     //------------------------------------------------------------------
    743     lldb::ThreadPlanSP
    744     GetCompletedPlan ();
    745 
    746     //------------------------------------------------------------------
    747     /// Gets the outer-most return value from the completed plans
    748     ///
    749     /// @return
    750     ///     A ValueObjectSP, either empty if there is no return value,
    751     ///     or containing the return value.
    752     //------------------------------------------------------------------
    753     lldb::ValueObjectSP
    754     GetReturnValueObject ();
    755 
    756     //------------------------------------------------------------------
    757     ///  Checks whether the given plan is in the completed plans for this
    758     ///  stop.
    759     ///
    760     /// @param[in] plan
    761     ///     Pointer to the plan you're checking.
    762     ///
    763     /// @return
    764     ///     Returns true if the input plan is in the completed plan stack,
    765     ///     false otherwise.
    766     //------------------------------------------------------------------
    767     bool
    768     IsThreadPlanDone (ThreadPlan *plan);
    769 
    770     //------------------------------------------------------------------
    771     ///  Checks whether the given plan is in the discarded plans for this
    772     ///  stop.
    773     ///
    774     /// @param[in] plan
    775     ///     Pointer to the plan you're checking.
    776     ///
    777     /// @return
    778     ///     Returns true if the input plan is in the discarded plan stack,
    779     ///     false otherwise.
    780     //------------------------------------------------------------------
    781     bool
    782     WasThreadPlanDiscarded (ThreadPlan *plan);
    783 
    784     //------------------------------------------------------------------
    785     /// Queues a generic thread plan.
    786     ///
    787     /// @param[in] plan_sp
    788     ///    The plan to queue.
    789     ///
    790     /// @param[in] abort_other_plans
    791     ///    \b true if we discard the currently queued plans and replace them with this one.
    792     ///    Otherwise this plan will go on the end of the plan stack.
    793     ///
    794     /// @return
    795     ///     A pointer to the last completed plan.
    796     //------------------------------------------------------------------
    797     void
    798     QueueThreadPlan (lldb::ThreadPlanSP &plan_sp, bool abort_other_plans);
    799 
    800 
    801     //------------------------------------------------------------------
    802     /// Discards the plans queued on the plan stack of the current thread.  This is
    803     /// arbitrated by the "Master" ThreadPlans, using the "OkayToDiscard" call.
    804     //  But if \a force is true, all thread plans are discarded.
    805     //------------------------------------------------------------------
    806     void
    807     DiscardThreadPlans (bool force);
    808 
    809     //------------------------------------------------------------------
    810     /// Discards the plans queued on the plan stack of the current thread up to and
    811     /// including up_to_plan_sp.
    812     //
    813     // @param[in] up_to_plan_sp
    814     //   Discard all plans up to and including this one.
    815     //------------------------------------------------------------------
    816     void
    817     DiscardThreadPlansUpToPlan (lldb::ThreadPlanSP &up_to_plan_sp);
    818 
    819     void
    820     DiscardThreadPlansUpToPlan (ThreadPlan *up_to_plan_ptr);
    821 
    822     //------------------------------------------------------------------
    823     /// Prints the current plan stack.
    824     ///
    825     /// @param[in] s
    826     ///    The stream to which to dump the plan stack info.
    827     ///
    828     //------------------------------------------------------------------
    829     void
    830     DumpThreadPlans (Stream *s) const;
    831 
    832     virtual bool
    833     CheckpointThreadState (ThreadStateCheckpoint &saved_state);
    834 
    835     virtual bool
    836     RestoreRegisterStateFromCheckpoint (ThreadStateCheckpoint &saved_state);
    837 
    838     virtual bool
    839     RestoreThreadStateFromCheckpoint (ThreadStateCheckpoint &saved_state);
    840 
    841     void
    842     EnableTracer (bool value, bool single_step);
    843 
    844     void
    845     SetTracer (lldb::ThreadPlanTracerSP &tracer_sp);
    846 
    847     //------------------------------------------------------------------
    848     // Get the thread index ID. The index ID that is guaranteed to not
    849     // be re-used by a process. They start at 1 and increase with each
    850     // new thread. This allows easy command line access by a unique ID
    851     // that is easier to type than the actual system thread ID.
    852     //------------------------------------------------------------------
    853     uint32_t
    854     GetIndexID () const;
    855 
    856 
    857     //------------------------------------------------------------------
    858     // The API ID is often the same as the Thread::GetID(), but not in
    859     // all cases. Thread::GetID() is the user visible thread ID that
    860     // clients would want to see. The API thread ID is the thread ID
    861     // that is used when sending data to/from the debugging protocol.
    862     //------------------------------------------------------------------
    863     virtual lldb::user_id_t
    864     GetProtocolID () const
    865     {
    866         return GetID();
    867     }
    868 
    869     //------------------------------------------------------------------
    870     // lldb::ExecutionContextScope pure virtual functions
    871     //------------------------------------------------------------------
    872     virtual lldb::TargetSP
    873     CalculateTarget ();
    874 
    875     virtual lldb::ProcessSP
    876     CalculateProcess ();
    877 
    878     virtual lldb::ThreadSP
    879     CalculateThread ();
    880 
    881     virtual lldb::StackFrameSP
    882     CalculateStackFrame ();
    883 
    884     virtual void
    885     CalculateExecutionContext (ExecutionContext &exe_ctx);
    886 
    887     lldb::StackFrameSP
    888     GetStackFrameSPForStackFramePtr (StackFrame *stack_frame_ptr);
    889 
    890     size_t
    891     GetStatus (Stream &strm,
    892                uint32_t start_frame,
    893                uint32_t num_frames,
    894                uint32_t num_frames_with_source);
    895 
    896     size_t
    897     GetStackFrameStatus (Stream& strm,
    898                          uint32_t first_frame,
    899                          uint32_t num_frames,
    900                          bool show_frame_info,
    901                          uint32_t num_frames_with_source);
    902 
    903     // We need a way to verify that even though we have a thread in a shared
    904     // pointer that the object itself is still valid. Currently this won't be
    905     // the case if DestroyThread() was called. DestroyThread is called when
    906     // a thread has been removed from the Process' thread list.
    907     bool
    908     IsValid () const
    909     {
    910         return !m_destroy_called;
    911     }
    912 
    913     // Sets and returns a valid stop info based on the process stop ID and the
    914     // current thread plan. If the thread stop ID does not match the process'
    915     // stop ID, the private stop reason is not set and an invalid StopInfoSP may
    916     // be returned.
    917     //
    918     // NOTE: This function must be called before the current thread plan is
    919     // moved to the completed plan stack (in Thread::ShouldStop()).
    920     //
    921     // NOTE: If subclasses override this function, ensure they do not overwrite
    922     // the m_actual_stop_info if it is valid.  The stop info may be a
    923     // "checkpointed and restored" stop info, so if it is still around it is
    924     // right even if you have not calculated this yourself, or if it disagrees
    925     // with what you might have calculated.
    926     virtual lldb::StopInfoSP
    927     GetPrivateStopInfo ();
    928 
    929     //----------------------------------------------------------------------
    930     // Ask the thread subclass to set its stop info.
    931     //
    932     // Thread subclasses should call Thread::SetStopInfo(...) with the
    933     // reason the thread stopped.
    934     //
    935     // @return
    936     //      True if Thread::SetStopInfo(...) was called, false otherwise.
    937     //----------------------------------------------------------------------
    938     virtual bool
    939     CalculateStopInfo () = 0;
    940 
    941     //----------------------------------------------------------------------
    942     // Gets the temporary resume state for a thread.
    943     //
    944     // This value gets set in each thread by complex debugger logic in
    945     // Thread::ShouldResume() and an appropriate thread resume state will get
    946     // set in each thread every time the process is resumed prior to calling
    947     // Process::DoResume(). The lldb_private::Process subclass should adhere
    948     // to the thread resume state request which will be one of:
    949     //
    950     //  eStateRunning   - thread will resume when process is resumed
    951     //  eStateStepping  - thread should step 1 instruction and stop when process
    952     //                    is resumed
    953     //  eStateSuspended - thread should not execute any instructions when
    954     //                    process is resumed
    955     //----------------------------------------------------------------------
    956     lldb::StateType
    957     GetTemporaryResumeState() const
    958     {
    959         return m_temporary_resume_state;
    960     }
    961 
    962     void
    963     SetStopInfo (const lldb::StopInfoSP &stop_info_sp);
    964 
    965     void
    966     SetShouldReportStop (Vote vote);
    967 
    968 protected:
    969 
    970     friend class ThreadPlan;
    971     friend class ThreadList;
    972     friend class ThreadEventData;
    973     friend class StackFrameList;
    974     friend class StackFrame;
    975     friend class OperatingSystem;
    976 
    977     // This is necessary to make sure thread assets get destroyed while the thread is still in good shape
    978     // to call virtual thread methods.  This must be called by classes that derive from Thread in their destructor.
    979     virtual void DestroyThread ();
    980 
    981     void
    982     PushPlan (lldb::ThreadPlanSP &plan_sp);
    983 
    984     void
    985     PopPlan ();
    986 
    987     void
    988     DiscardPlan ();
    989 
    990     ThreadPlan *GetPreviousPlan (ThreadPlan *plan);
    991 
    992     typedef std::vector<lldb::ThreadPlanSP> plan_stack;
    993 
    994     virtual bool
    995     SaveFrameZeroState (RegisterCheckpoint &checkpoint);
    996 
    997     virtual bool
    998     RestoreSaveFrameZero (const RegisterCheckpoint &checkpoint);
    999 
   1000     // register_data_sp must be a DataSP passed to ReadAllRegisterValues.
   1001     bool
   1002     ResetFrameZeroRegisters (lldb::DataBufferSP register_data_sp);
   1003 
   1004     virtual lldb_private::Unwind *
   1005     GetUnwinder ();
   1006 
   1007     // Check to see whether the thread is still at the last breakpoint hit that stopped it.
   1008     virtual bool
   1009     IsStillAtLastBreakpointHit();
   1010 
   1011     // Some threads are threads that are made up by OperatingSystem plugins that
   1012     // are threads that exist and are context switched out into memory. The
   1013     // OperatingSystem plug-in need a ways to know if a thread is "real" or made
   1014     // up.
   1015     virtual bool
   1016     IsOperatingSystemPluginThread () const
   1017     {
   1018         return false;
   1019     }
   1020 
   1021 
   1022     lldb::StackFrameListSP
   1023     GetStackFrameList ();
   1024 
   1025     struct ThreadState
   1026     {
   1027         uint32_t           orig_stop_id;
   1028         lldb::StopInfoSP   stop_info_sp;
   1029         RegisterCheckpoint register_backup;
   1030     };
   1031 
   1032     //------------------------------------------------------------------
   1033     // Classes that inherit from Process can see and modify these
   1034     //------------------------------------------------------------------
   1035     lldb::ProcessWP     m_process_wp;           ///< The process that owns this thread.
   1036     lldb::StopInfoSP    m_stop_info_sp;         ///< The private stop reason for this thread
   1037     uint32_t            m_stop_info_stop_id;    // This is the stop id for which the StopInfo is valid.  Can use this so you know that
   1038     // the thread's m_stop_info_sp is current and you don't have to fetch it again
   1039     const uint32_t      m_index_id;             ///< A unique 1 based index assigned to each thread for easy UI/command line access.
   1040     lldb::RegisterContextSP m_reg_context_sp;   ///< The register context for this thread's current register state.
   1041     lldb::StateType     m_state;                ///< The state of our process.
   1042     mutable Mutex       m_state_mutex;          ///< Multithreaded protection for m_state.
   1043     plan_stack          m_plan_stack;           ///< The stack of plans this thread is executing.
   1044     plan_stack          m_completed_plan_stack; ///< Plans that have been completed by this stop.  They get deleted when the thread resumes.
   1045     plan_stack          m_discarded_plan_stack; ///< Plans that have been discarded by this stop.  They get deleted when the thread resumes.
   1046     mutable Mutex       m_frame_mutex;          ///< Multithreaded protection for m_state.
   1047     lldb::StackFrameListSP m_curr_frames_sp;    ///< The stack frames that get lazily populated after a thread stops.
   1048     lldb::StackFrameListSP m_prev_frames_sp;    ///< The previous stack frames from the last time this thread stopped.
   1049     int                 m_resume_signal;        ///< The signal that should be used when continuing this thread.
   1050     lldb::StateType     m_resume_state;         ///< This state is used to force a thread to be suspended from outside the ThreadPlan logic.
   1051     lldb::StateType     m_temporary_resume_state; ///< This state records what the thread was told to do by the thread plan logic for the current resume.
   1052                                                   /// It gets set in Thread::ShoudResume.
   1053     std::unique_ptr<lldb_private::Unwind> m_unwinder_ap;
   1054     bool                m_destroy_called;       // This is used internally to make sure derived Thread classes call DestroyThread.
   1055     LazyBool            m_override_should_notify;
   1056 private:
   1057     //------------------------------------------------------------------
   1058     // For Thread only
   1059     //------------------------------------------------------------------
   1060 
   1061     DISALLOW_COPY_AND_ASSIGN (Thread);
   1062 
   1063 };
   1064 
   1065 } // namespace lldb_private
   1066 
   1067 #endif  // liblldb_Thread_h_
   1068