]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanTracer.h
Integrate capsicum-test into the FreeBSD test suite
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Target / ThreadPlanTracer.h
1 //===-- ThreadPlanTracer.h --------------------------------------------*- C++
2 //-*-===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is distributed under the University of Illinois Open Source
7 // License. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef liblldb_ThreadPlanTracer_h_
12 #define liblldb_ThreadPlanTracer_h_
13
14 #include "lldb/Symbol/TaggedASTType.h"
15 #include "lldb/Target/Thread.h"
16 #include "lldb/Utility/RegisterValue.h"
17 #include "lldb/lldb-private.h"
18
19 namespace lldb_private {
20
21 class ThreadPlanTracer {
22   friend class ThreadPlan;
23
24 public:
25   typedef enum ThreadPlanTracerStyle {
26     eLocation = 0,
27     eStateChange,
28     eCheckFrames,
29     ePython
30   } ThreadPlanTracerStyle;
31
32   ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
33   ThreadPlanTracer(Thread &thread);
34
35   virtual ~ThreadPlanTracer() = default;
36
37   virtual void TracingStarted() {}
38
39   virtual void TracingEnded() {}
40
41   bool EnableTracing(bool value) {
42     bool old_value = m_enabled;
43     m_enabled = value;
44     if (old_value == false && value == true)
45       TracingStarted();
46     else if (old_value == true && value == false)
47       TracingEnded();
48
49     return old_value;
50   }
51
52   bool TracingEnabled() { return m_enabled; }
53
54   bool EnableSingleStep(bool value) {
55     bool old_value = m_single_step;
56     m_single_step = value;
57     return old_value;
58   }
59
60   bool SingleStepEnabled() { return m_single_step; }
61
62 protected:
63   Thread &m_thread;
64
65   Stream *GetLogStream();
66
67   virtual void Log();
68
69 private:
70   bool TracerExplainsStop();
71
72   bool m_single_step;
73   bool m_enabled;
74   lldb::StreamSP m_stream_sp;
75 };
76
77 class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
78 public:
79   ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
80   ThreadPlanAssemblyTracer(Thread &thread);
81   ~ThreadPlanAssemblyTracer() override;
82
83   void TracingStarted() override;
84   void TracingEnded() override;
85   void Log() override;
86
87 private:
88   Disassembler *GetDisassembler();
89
90   TypeFromUser GetIntPointerType();
91
92   lldb::DisassemblerSP m_disassembler_sp;
93   TypeFromUser m_intptr_type;
94   std::vector<RegisterValue> m_register_values;
95   lldb::DataBufferSP m_buffer_sp;
96 };
97
98 } // namespace lldb_private
99
100 #endif // liblldb_ThreadPlanTracer_h_