LLDB mainline
ItaniumABILanguageRuntime.h
Go to the documentation of this file.
1//===-- ItaniumABILanguageRuntime.h -----------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_ITANIUMABI_ITANIUMABILANGUAGERUNTIME_H
10#define LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_ITANIUMABI_ITANIUMABILANGUAGERUNTIME_H
11
12#include <map>
13#include <mutex>
14#include <vector>
15
17#include "lldb/Core/Value.h"
18#include "lldb/Symbol/Type.h"
20#include "lldb/lldb-private.h"
21
23
24namespace lldb_private {
25
27public:
28 ~ItaniumABILanguageRuntime() override = default;
29
30 // Static Functions
31 static void Initialize();
32
33 static void Terminate();
34
36 CreateInstance(Process *process, lldb::LanguageType language);
37
38 static llvm::StringRef GetPluginNameStatic() { return "itanium"; }
39
40 static char ID;
41
42 bool isA(const void *ClassID) const override {
43 return ClassID == &ID || CPPLanguageRuntime::isA(ClassID);
44 }
45
46 static bool classof(const LanguageRuntime *runtime) {
47 return runtime->isA(&ID);
48 }
49
51 lldb::DynamicValueType use_dynamic,
52 TypeAndOrName &class_type_or_name,
53 Address &address,
54 Value::ValueType &value_type) override;
55
56 TypeAndOrName FixUpDynamicType(const TypeAndOrName &type_and_or_name,
57 ValueObject &static_value) override;
58
59 bool CouldHaveDynamicValue(ValueObject &in_value) override;
60
61 void SetExceptionBreakpoints() override;
62
63 void ClearExceptionBreakpoints() override;
64
65 bool ExceptionBreakpointsAreSet() override;
66
67 bool ExceptionBreakpointsExplainStop(lldb::StopInfoSP stop_reason) override;
68
69 lldb::BreakpointResolverSP
70 CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
71 bool catch_bp, bool throw_bp) override;
72
73 lldb::SearchFilterSP CreateExceptionSearchFilter() override;
74
75 lldb::ValueObjectSP GetExceptionObjectForThread(
76 lldb::ThreadSP thread_sp) override;
77
78 // PluginInterface protocol
79 llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
80
81protected:
82 lldb::BreakpointResolverSP
83 CreateExceptionResolver(const lldb::BreakpointSP &bkpt,
84 bool catch_bp, bool throw_bp, bool for_expressions);
85
86 lldb::BreakpointSP CreateExceptionBreakpoint(bool catch_bp, bool throw_bp,
87 bool for_expressions,
88 bool is_internal);
89
90private:
91 typedef std::map<lldb_private::Address, TypeAndOrName> DynamicTypeCache;
92
94 : // Call CreateInstance instead.
97
98 lldb::BreakpointSP m_cxx_exception_bp_sp;
101
103 lldb::addr_t original_ptr,
104 lldb::addr_t vtable_addr);
105
107
108 void SetDynamicTypeInfo(const lldb_private::Address &vtable_addr,
109 const TypeAndOrName &type_info);
110};
111
112} // namespace lldb_private
113
114#endif // LLDB_SOURCE_PLUGINS_LANGUAGERUNTIME_CPLUSPLUS_ITANIUMABI_ITANIUMABILANGUAGERUNTIME_H
A section + offset based address class.
Definition: Address.h:59
bool isA(const void *ClassID) const override
lldb::BreakpointResolverSP CreateExceptionResolver(const lldb::BreakpointSP &bkpt, bool catch_bp, bool throw_bp, bool for_expressions)
lldb::BreakpointResolverSP CreateExceptionResolver(const lldb::BreakpointSP &bkpt, bool catch_bp, bool throw_bp) override
bool GetDynamicTypeAndAddress(ValueObject &in_value, lldb::DynamicValueType use_dynamic, TypeAndOrName &class_type_or_name, Address &address, Value::ValueType &value_type) override
bool isA(const void *ClassID) const override
lldb::BreakpointSP CreateExceptionBreakpoint(bool catch_bp, bool throw_bp, bool for_expressions, bool is_internal)
static lldb_private::LanguageRuntime * CreateInstance(Process *process, lldb::LanguageType language)
lldb::SearchFilterSP CreateExceptionSearchFilter() override
TypeAndOrName FixUpDynamicType(const TypeAndOrName &type_and_or_name, ValueObject &static_value) override
TypeAndOrName GetTypeInfoFromVTableAddress(ValueObject &in_value, lldb::addr_t original_ptr, lldb::addr_t vtable_addr)
void SetDynamicTypeInfo(const lldb_private::Address &vtable_addr, const TypeAndOrName &type_info)
bool CouldHaveDynamicValue(ValueObject &in_value) override
std::map< lldb_private::Address, TypeAndOrName > DynamicTypeCache
bool ExceptionBreakpointsExplainStop(lldb::StopInfoSP stop_reason) override
~ItaniumABILanguageRuntime() override=default
static bool classof(const LanguageRuntime *runtime)
TypeAndOrName GetDynamicTypeInfo(const lldb_private::Address &vtable_addr)
lldb::ValueObjectSP GetExceptionObjectForThread(lldb::ThreadSP thread_sp) override
virtual bool isA(const void *ClassID) const
A plug-in interface definition class for debugging a process.
Definition: Process.h:335
Sometimes you can find the name of the type corresponding to an object, but we don't have debug infor...
Definition: Type.h:410
ValueType
Type that describes Value::m_value.
Definition: Value.h:41
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
LanguageType
Programming language type.
uint64_t addr_t
Definition: lldb-types.h:79