ThreadPlanStepThrough.h revision ad382c523709e86f01bfea27f1991df9afeef2dd
1221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom//===-- ThreadPlanStepThrough.h ---------------------------------*- C++ -*-===//
2e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu//
3e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu//                     The LLVM Compiler Infrastructure
4e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu//
5e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu// This file is distributed under the University of Illinois Open Source
6e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu// License. See LICENSE.TXT for details.
7e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu//
8e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu//===----------------------------------------------------------------------===//
9e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
10e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#ifndef liblldb_ThreadPlanStepThrough_h_
11e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#define liblldb_ThreadPlanStepThrough_h_
12e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
13e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu// C Includes
14e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu// C++ Includes
15e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu// Other libraries and framework includes
16e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu// Project includes
17e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#include "lldb/Target/Thread.h"
18e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu#include "lldb/Target/ThreadPlan.h"
19e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
20e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugunamespace lldb_private {
21e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
22e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modaduguclass ThreadPlanStepThrough : public ThreadPlan
23e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu{
24e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugupublic:
25e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual ~ThreadPlanStepThrough ();
26e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
27e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual void GetDescription (Stream *s, lldb::DescriptionLevel level);
28e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool ValidatePlan (Stream *error);
29e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool PlanExplainsStop ();
30e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool ShouldStop (Event *event_ptr);
31e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool StopOthers ();
32e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual lldb::StateType GetPlanRunState ();
33e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool WillResume (lldb::StateType resume_state, bool current_plan);
34e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool WillStop ();
35e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual bool MischiefManaged ();
36e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    virtual void DidPush();
37e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
38e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modaduguprotected:
39e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    ThreadPlanStepThrough (Thread &thread,
40e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu                           bool stop_others);
41e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
42e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    void
43e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    LookForPlanToStepThroughFromCurrentPC ();
44e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
45e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    bool
46e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    HitOurBackstopBreakpoint();
47e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
48e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modaduguprivate:
49e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    friend ThreadPlan *
50e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    Thread::QueueThreadPlanForStepThrough (bool abort_other_plans,
51e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu                                           bool stop_others);
52e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
53e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    lldb::ThreadPlanSP m_sub_plan_sp;
54e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    lldb::addr_t      m_start_address;
55e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    lldb::break_id_t  m_backstop_bkpt_id;
56e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    lldb::addr_t      m_backstop_addr;
57e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    size_t            m_stack_depth;
58e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu    bool              m_stop_others;
59e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu
60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    DISALLOW_COPY_AND_ASSIGN (ThreadPlanStepThrough);
61221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom};
63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
64e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu} // namespace lldb_private
65221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
66221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif  // liblldb_ThreadPlanStepThrough_h_
67221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom