blob: 6a4ae0c30f27a6a7f9622c6d9635c0a48bc8bee5 [file] [log] [blame]
Greg Clayton8badcb22011-04-25 21:14:26 +00001//===-- UnwindAssembly.h --------------------------------*- C++ -*-===//
Jason Molenda3a4ea242010-09-10 07:49:16 +00002//
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
Greg Clayton8badcb22011-04-25 21:14:26 +000010#ifndef utility_UnwindAssembly_h_
11#define utility_UnwindAssembly_h_
Jason Molenda3a4ea242010-09-10 07:49:16 +000012
Johnny Chenff7c3e92010-12-20 21:45:22 +000013#include "lldb/lldb-private.h"
Greg Clayton888a7332011-04-26 04:39:08 +000014#include "lldb/Core/ArchSpec.h"
Jason Molenda3a4ea242010-09-10 07:49:16 +000015#include "lldb/Core/PluginInterface.h"
16
17namespace lldb_private {
18
Greg Clayton8badcb22011-04-25 21:14:26 +000019class UnwindAssembly :
Jason Molenda3a4ea242010-09-10 07:49:16 +000020 public PluginInterface
21{
22public:
Greg Clayton8badcb22011-04-25 21:14:26 +000023 static UnwindAssembly*
Greg Clayton97eecb12011-04-25 18:36:36 +000024 FindPlugin (const ArchSpec &arch);
Jason Molenda3a4ea242010-09-10 07:49:16 +000025
26 virtual
Greg Clayton8badcb22011-04-25 21:14:26 +000027 ~UnwindAssembly();
Jason Molenda3a4ea242010-09-10 07:49:16 +000028
29 virtual bool
Greg Clayton97eecb12011-04-25 18:36:36 +000030 GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func,
31 Thread& thread,
32 UnwindPlan& unwind_plan) = 0;
Jason Molenda3a4ea242010-09-10 07:49:16 +000033
34 virtual bool
Greg Clayton97eecb12011-04-25 18:36:36 +000035 GetFastUnwindPlan (AddressRange& func,
36 Thread& thread,
37 UnwindPlan &unwind_plan) = 0;
Jason Molenda3a4ea242010-09-10 07:49:16 +000038
39 // thread may be NULL in which case we only use the Target (e.g. if this is called pre-process-launch).
40 virtual bool
Greg Clayton97eecb12011-04-25 18:36:36 +000041 FirstNonPrologueInsn (AddressRange& func,
Greg Claytonf4124de2012-02-21 00:09:25 +000042 const lldb_private::ExecutionContext &exe_ctx,
Greg Clayton97eecb12011-04-25 18:36:36 +000043 Address& first_non_prologue_insn) = 0;
Jason Molenda3a4ea242010-09-10 07:49:16 +000044
45protected:
Greg Clayton888a7332011-04-26 04:39:08 +000046 UnwindAssembly (const ArchSpec &arch);
47 ArchSpec m_arch;
48
Jason Molenda3a4ea242010-09-10 07:49:16 +000049private:
Greg Clayton888a7332011-04-26 04:39:08 +000050 UnwindAssembly(); // Outlaw default constructor
Greg Clayton8badcb22011-04-25 21:14:26 +000051 DISALLOW_COPY_AND_ASSIGN (UnwindAssembly);
Jason Molenda3a4ea242010-09-10 07:49:16 +000052};
53
54} // namespace lldb_private
55
Greg Clayton8badcb22011-04-25 21:14:26 +000056#endif //utility_UnwindAssembly_h_
Jason Molenda3a4ea242010-09-10 07:49:16 +000057
58