1642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===-- ItaniumABILanguageRuntime.h ----------------------------------------*- C++ -*-===//
2642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//
3642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//                     The LLVM Compiler Infrastructure
4642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//
5642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// This file is distributed under the University of Illinois Open Source
6642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// License. See LICENSE.TXT for details.
7642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//
8642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham//===----------------------------------------------------------------------===//
9642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
10642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#ifndef liblldb_ItaniumABILanguageRuntime_h_
11642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#define liblldb_ItaniumABILanguageRuntime_h_
12642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
13642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C Includes
14642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// C++ Includes
15642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Other libraries and framework includes
16642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham// Project includes
17642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/lldb-private.h"
18c105362e1fd33664939811569dc4a540959e7db7Jim Ingham#include "lldb/Breakpoint/BreakpointResolver.h"
19642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Target/LanguageRuntime.h"
20642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Target/CPPLanguageRuntime.h"
21642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#include "lldb/Core/Value.h"
22642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
23642036f22366d47ea8e6f8498bedb92b88f7f79fJim Inghamnamespace lldb_private {
24642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
25642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    class ItaniumABILanguageRuntime :
26642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    public lldb_private::CPPLanguageRuntime
27642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    {
28642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    public:
29642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        ~ItaniumABILanguageRuntime() { }
30642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
31642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        virtual bool
32642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        IsVTableName (const char *name);
33642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
34e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham        virtual bool
3510de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham        GetDynamicTypeAndAddress (ValueObject &in_value,
3610de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham                                  lldb::DynamicValueType use_dynamic,
3710de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham                                  TypeAndOrName &class_type_or_name,
3810de7d1db3ec782ea2ccda1f39c0a40b9c301594Jim Ingham                                  Address &address);
39e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham
40e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham        virtual bool
41e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham        CouldHaveDynamicValue (ValueObject &in_value);
42e41494a9092e15192012a5e0a8a1ffd66c70b8bbJim Ingham
43642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        //------------------------------------------------------------------
44642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        // Static Functions
45642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        //------------------------------------------------------------------
46642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        static void
47642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        Initialize();
48642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
49642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        static void
50642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        Terminate();
51642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
52642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        static lldb_private::LanguageRuntime *
53642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        CreateInstance (Process *process, lldb::LanguageType language);
54642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
550e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        static lldb_private::ConstString
560e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        GetPluginNameStatic();
570e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton
58642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        //------------------------------------------------------------------
59642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        // PluginInterface protocol
60642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        //------------------------------------------------------------------
610e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        virtual lldb_private::ConstString
62642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        GetPluginName();
63642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
64642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        virtual uint32_t
65642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        GetPluginVersion();
66642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
67642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        virtual void
6829756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        SetExceptionBreakpoints ();
6929756d452be39535ded2cff50d9db4df46fe6400Sean Callanan
7029756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        virtual void
7129756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        ClearExceptionBreakpoints ();
7229756d452be39535ded2cff50d9db4df46fe6400Sean Callanan
7329756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        virtual bool
7429756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        ExceptionBreakpointsExplainStop (lldb::StopInfoSP stop_reason);
7519784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton
763df164e694d4e03905f8725c46b68b8dcc104debJim Ingham        virtual lldb::BreakpointResolverSP
773df164e694d4e03905f8725c46b68b8dcc104debJim Ingham        CreateExceptionResolver (Breakpoint *bkpt, bool catch_bp, bool throw_bp);
7819784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton
79d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton        virtual lldb::SearchFilterSP
80d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton        CreateExceptionSearchFilter ();
81d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton
8219784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton    protected:
8319784bd12a0beae5b7930d51dcd9ded53cb08470Greg Clayton
84d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton        lldb::BreakpointResolverSP
8596ccc33f541ca8cafa42f777f1f24247bdf8173aJim Ingham        CreateExceptionResolver (Breakpoint *bkpt, bool catch_bp, bool throw_bp, bool for_expressions);
8696ccc33f541ca8cafa42f777f1f24247bdf8173aJim Ingham
87d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton        lldb::BreakpointSP
88d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton        CreateExceptionBreakpoint(bool catch_bp,
89d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton                                  bool throw_bp,
90d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton                                  bool for_expressions,
91d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton                                  bool is_internal);
92d96df0a55f0a6e19af3d61d3f7ab5103ff96c543Greg Clayton
93642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    private:
94642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham        ItaniumABILanguageRuntime(Process *process) : lldb_private::CPPLanguageRuntime(process) { } // Call CreateInstance instead.
9529756d452be39535ded2cff50d9db4df46fe6400Sean Callanan
9629756d452be39535ded2cff50d9db4df46fe6400Sean Callanan        lldb::BreakpointSP                              m_cxx_exception_bp_sp;
97642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham    };
98642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
99642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham} // namespace lldb_private
100642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham
101642036f22366d47ea8e6f8498bedb92b88f7f79fJim Ingham#endif  // liblldb_ItaniumABILanguageRuntime_h_
102