/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Core/LoadedModuleInfoList.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- LoadedModuleInfoList.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_CORE_LOADEDMODULEINFOLIST_H |
10 | | #define LLDB_CORE_LOADEDMODULEINFOLIST_H |
11 | | |
12 | | #include <cassert> |
13 | | #include <string> |
14 | | #include <vector> |
15 | | |
16 | | #include "lldb/lldb-defines.h" |
17 | | #include "lldb/lldb-private-forward.h" |
18 | | #include "lldb/lldb-types.h" |
19 | | |
20 | | namespace lldb_private { |
21 | | class LoadedModuleInfoList { |
22 | | public: |
23 | | class LoadedModuleInfo { |
24 | | public: |
25 | | enum e_data_point { |
26 | | e_has_name = 0, |
27 | | e_has_base, |
28 | | e_has_dynamic, |
29 | | e_has_link_map, |
30 | | e_num |
31 | | }; |
32 | | |
33 | 10 | LoadedModuleInfo() { |
34 | 50 | for (uint32_t i = 0; i < e_num; ++i40 ) |
35 | 40 | m_has[i] = false; |
36 | 10 | }; |
37 | | |
38 | 10 | void set_name(const std::string &name) { |
39 | 10 | m_name = name; |
40 | 10 | m_has[e_has_name] = true; |
41 | 10 | } |
42 | 5 | bool get_name(std::string &out) const { |
43 | 5 | out = m_name; |
44 | 5 | return m_has[e_has_name]; |
45 | 5 | } |
46 | | |
47 | 10 | void set_base(const lldb::addr_t base) { |
48 | 10 | m_base = base; |
49 | 10 | m_has[e_has_base] = true; |
50 | 10 | } |
51 | 5 | bool get_base(lldb::addr_t &out) const { |
52 | 5 | out = m_base; |
53 | 5 | return m_has[e_has_base]; |
54 | 5 | } |
55 | | |
56 | 10 | void set_base_is_offset(bool is_offset) { m_base_is_offset = is_offset; } |
57 | 3 | bool get_base_is_offset(bool &out) const { |
58 | 3 | out = m_base_is_offset; |
59 | 3 | return m_has[e_has_base]; |
60 | 3 | } |
61 | | |
62 | 4 | void set_link_map(const lldb::addr_t addr) { |
63 | 4 | m_link_map = addr; |
64 | 4 | m_has[e_has_link_map] = true; |
65 | 4 | } |
66 | 5 | bool get_link_map(lldb::addr_t &out) const { |
67 | 5 | out = m_link_map; |
68 | 5 | return m_has[e_has_link_map]; |
69 | 5 | } |
70 | | |
71 | 4 | void set_dynamic(const lldb::addr_t addr) { |
72 | 4 | m_dynamic = addr; |
73 | 4 | m_has[e_has_dynamic] = true; |
74 | 4 | } |
75 | 2 | bool get_dynamic(lldb::addr_t &out) const { |
76 | 2 | out = m_dynamic; |
77 | 2 | return m_has[e_has_dynamic]; |
78 | 2 | } |
79 | | |
80 | 0 | bool has_info(e_data_point datum) const { |
81 | 0 | assert(datum < e_num); |
82 | 0 | return m_has[datum]; |
83 | 0 | } |
84 | | |
85 | 0 | bool operator==(LoadedModuleInfo const &rhs) const { |
86 | 0 | for (size_t i = 0; i < e_num; ++i) { |
87 | 0 | if (m_has[i] != rhs.m_has[i]) |
88 | 0 | return false; |
89 | 0 | } |
90 | 0 |
|
91 | 0 | return (m_base == rhs.m_base) && (m_link_map == rhs.m_link_map) && |
92 | 0 | (m_dynamic == rhs.m_dynamic) && (m_name == rhs.m_name); |
93 | 0 | } |
94 | | |
95 | | protected: |
96 | | bool m_has[e_num]; |
97 | | std::string m_name; |
98 | | lldb::addr_t m_link_map = LLDB_INVALID_ADDRESS; |
99 | | lldb::addr_t m_base = LLDB_INVALID_ADDRESS; |
100 | | bool m_base_is_offset = false; |
101 | | lldb::addr_t m_dynamic = LLDB_INVALID_ADDRESS; |
102 | | }; |
103 | | |
104 | 169 | LoadedModuleInfoList() = default; |
105 | | |
106 | 10 | void add(const LoadedModuleInfo &mod) { m_list.push_back(mod); } |
107 | | |
108 | 0 | void clear() { m_list.clear(); } |
109 | | |
110 | | std::vector<LoadedModuleInfo> m_list; |
111 | | lldb::addr_t m_link_map = LLDB_INVALID_ADDRESS; |
112 | | }; |
113 | | } // namespace lldb_private |
114 | | |
115 | | #endif // LLDB_CORE_LOADEDMODULEINFOLIST_H |