]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/Thread.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Target / Thread.h
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_