]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/ThreadPlanTracer.h
Import DTS from Linux 4.20
[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 // C Includes
15 // C++ Includes
16 // Other libraries and framework includes
17 // Project includes
18 #include "lldb/Core/RegisterValue.h"
19 #include "lldb/Symbol/TaggedASTType.h"
20 #include "lldb/Target/Thread.h"
21 #include "lldb/lldb-private.h"
22
23 namespace lldb_private {
24
25 class ThreadPlanTracer {
26   friend class ThreadPlan;
27
28 public:
29   typedef enum ThreadPlanTracerStyle {
30     eLocation = 0,
31     eStateChange,
32     eCheckFrames,
33     ePython
34   } ThreadPlanTracerStyle;
35
36   ThreadPlanTracer(Thread &thread, lldb::StreamSP &stream_sp);
37   ThreadPlanTracer(Thread &thread);
38
39   virtual ~ThreadPlanTracer() = default;
40
41   virtual void TracingStarted() {}
42
43   virtual void TracingEnded() {}
44
45   bool EnableTracing(bool value) {
46     bool old_value = m_enabled;
47     m_enabled = value;
48     if (old_value == false && value == true)
49       TracingStarted();
50     else if (old_value == true && value == false)
51       TracingEnded();
52
53     return old_value;
54   }
55
56   bool TracingEnabled() { return m_enabled; }
57
58   bool EnableSingleStep(bool value) {
59     bool old_value = m_single_step;
60     m_single_step = value;
61     return old_value;
62   }
63
64   bool SingleStepEnabled() { return m_single_step; }
65
66 protected:
67   Thread &m_thread;
68
69   Stream *GetLogStream();
70
71   virtual void Log();
72
73 private:
74   bool TracerExplainsStop();
75
76   bool m_single_step;
77   bool m_enabled;
78   lldb::StreamSP m_stream_sp;
79 };
80
81 class ThreadPlanAssemblyTracer : public ThreadPlanTracer {
82 public:
83   ThreadPlanAssemblyTracer(Thread &thread, lldb::StreamSP &stream_sp);
84   ThreadPlanAssemblyTracer(Thread &thread);
85   ~ThreadPlanAssemblyTracer() override;
86
87   void TracingStarted() override;
88   void TracingEnded() override;
89   void Log() override;
90
91 private:
92   Disassembler *GetDisassembler();
93
94   TypeFromUser GetIntPointerType();
95
96   lldb::DisassemblerSP m_disassembler_sp;
97   TypeFromUser m_intptr_type;
98   std::vector<RegisterValue> m_register_values;
99   lldb::DataBufferSP m_buffer_sp;
100 };
101
102 } // namespace lldb_private
103
104 #endif // liblldb_ThreadPlanTracer_h_