1 //===-- ItaniumABILanguageRuntime.h -----------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_ItaniumABILanguageRuntime_h_
11 #define liblldb_ItaniumABILanguageRuntime_h_
19 // Other libraries and framework includes
21 #include "lldb/Breakpoint/BreakpointResolver.h"
22 #include "lldb/Core/Value.h"
23 #include "lldb/Symbol/Type.h"
24 #include "lldb/Target/CPPLanguageRuntime.h"
25 #include "lldb/Target/LanguageRuntime.h"
26 #include "lldb/lldb-private.h"
28 namespace lldb_private {
30 class ItaniumABILanguageRuntime : public lldb_private::CPPLanguageRuntime {
32 ~ItaniumABILanguageRuntime() override = default;
34 //------------------------------------------------------------------
36 //------------------------------------------------------------------
37 static void Initialize();
39 static void Terminate();
41 static lldb_private::LanguageRuntime *
42 CreateInstance(Process *process, lldb::LanguageType language);
44 static lldb_private::ConstString GetPluginNameStatic();
46 bool IsVTableName(const char *name) override;
48 bool GetDynamicTypeAndAddress(ValueObject &in_value,
49 lldb::DynamicValueType use_dynamic,
50 TypeAndOrName &class_type_or_name,
52 Value::ValueType &value_type) override;
54 TypeAndOrName FixUpDynamicType(const TypeAndOrName &type_and_or_name,
55 ValueObject &static_value) override;
57 bool CouldHaveDynamicValue(ValueObject &in_value) override;
59 void SetExceptionBreakpoints() override;
61 void ClearExceptionBreakpoints() override;
63 bool ExceptionBreakpointsAreSet() override;
65 bool ExceptionBreakpointsExplainStop(lldb::StopInfoSP stop_reason) override;
67 lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt,
69 bool throw_bp) override;
71 lldb::SearchFilterSP CreateExceptionSearchFilter() override;
73 //------------------------------------------------------------------
74 // PluginInterface protocol
75 //------------------------------------------------------------------
76 lldb_private::ConstString GetPluginName() override;
78 uint32_t GetPluginVersion() override;
81 lldb::BreakpointResolverSP CreateExceptionResolver(Breakpoint *bkpt,
84 bool for_expressions);
86 lldb::BreakpointSP CreateExceptionBreakpoint(bool catch_bp, bool throw_bp,
91 typedef std::map<lldb_private::Address, TypeAndOrName> DynamicTypeCache;
93 ItaniumABILanguageRuntime(Process *process)
94 : // Call CreateInstance instead.
95 lldb_private::CPPLanguageRuntime(process),
96 m_cxx_exception_bp_sp(), m_dynamic_type_map(),
97 m_dynamic_type_map_mutex() {}
99 lldb::BreakpointSP m_cxx_exception_bp_sp;
100 DynamicTypeCache m_dynamic_type_map;
101 std::mutex m_dynamic_type_map_mutex;
103 TypeAndOrName GetTypeInfoFromVTableAddress(ValueObject &in_value,
104 lldb::addr_t original_ptr,
105 lldb::addr_t vtable_addr);
107 TypeAndOrName GetDynamicTypeInfo(const lldb_private::Address &vtable_addr);
109 void SetDynamicTypeInfo(const lldb_private::Address &vtable_addr,
110 const TypeAndOrName &type_info);
113 } // namespace lldb_private
115 #endif // liblldb_ItaniumABILanguageRuntime_h_