]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/UnwindAssembly/x86/UnwindAssembly-x86.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / UnwindAssembly / x86 / UnwindAssembly-x86.h
1 //===-- UnwindAssembly-x86.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_UnwindAssembly_x86_h_
11 #define liblldb_UnwindAssembly_x86_h_
12
13 #include "x86AssemblyInspectionEngine.h"
14
15 #include "lldb/Target/UnwindAssembly.h"
16 #include "lldb/lldb-private.h"
17
18 class UnwindAssembly_x86 : public lldb_private::UnwindAssembly {
19 public:
20   ~UnwindAssembly_x86() override;
21
22   bool GetNonCallSiteUnwindPlanFromAssembly(
23       lldb_private::AddressRange &func, lldb_private::Thread &thread,
24       lldb_private::UnwindPlan &unwind_plan) override;
25
26   bool
27   AugmentUnwindPlanFromCallSite(lldb_private::AddressRange &func,
28                                 lldb_private::Thread &thread,
29                                 lldb_private::UnwindPlan &unwind_plan) override;
30
31   bool GetFastUnwindPlan(lldb_private::AddressRange &func,
32                          lldb_private::Thread &thread,
33                          lldb_private::UnwindPlan &unwind_plan) override;
34
35   // thread may be NULL in which case we only use the Target (e.g. if this is
36   // called pre-process-launch).
37   bool
38   FirstNonPrologueInsn(lldb_private::AddressRange &func,
39                        const lldb_private::ExecutionContext &exe_ctx,
40                        lldb_private::Address &first_non_prologue_insn) override;
41
42   static lldb_private::UnwindAssembly *
43   CreateInstance(const lldb_private::ArchSpec &arch);
44
45   //------------------------------------------------------------------
46   // PluginInterface protocol
47   //------------------------------------------------------------------
48   static void Initialize();
49
50   static void Terminate();
51
52   static lldb_private::ConstString GetPluginNameStatic();
53
54   static const char *GetPluginDescriptionStatic();
55
56   lldb_private::ConstString GetPluginName() override;
57
58   uint32_t GetPluginVersion() override;
59
60 private:
61   UnwindAssembly_x86(const lldb_private::ArchSpec &arch);
62
63   lldb_private::ArchSpec m_arch;
64
65   lldb_private::x86AssemblyInspectionEngine *m_assembly_inspection_engine;
66 };
67
68 #endif // liblldb_UnwindAssembly_x86_h_