File indexing completed on 2026-05-10 08:42:45
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_CORE_LOADEDMODULEINFOLIST_H
0010 #define LLDB_CORE_LOADEDMODULEINFOLIST_H
0011
0012 #include <cassert>
0013 #include <string>
0014 #include <vector>
0015
0016 #include "lldb/lldb-defines.h"
0017 #include "lldb/lldb-private-forward.h"
0018 #include "lldb/lldb-types.h"
0019
0020 namespace lldb_private {
0021 class LoadedModuleInfoList {
0022 public:
0023 class LoadedModuleInfo {
0024 public:
0025 enum e_data_point {
0026 e_has_name = 0,
0027 e_has_base,
0028 e_has_dynamic,
0029 e_has_link_map,
0030 e_num
0031 };
0032
0033 LoadedModuleInfo() {
0034 for (uint32_t i = 0; i < e_num; ++i)
0035 m_has[i] = false;
0036 };
0037
0038 void set_name(const std::string &name) {
0039 m_name = name;
0040 m_has[e_has_name] = true;
0041 }
0042 bool get_name(std::string &out) const {
0043 out = m_name;
0044 return m_has[e_has_name];
0045 }
0046
0047 void set_base(const lldb::addr_t base) {
0048 m_base = base;
0049 m_has[e_has_base] = true;
0050 }
0051 bool get_base(lldb::addr_t &out) const {
0052 out = m_base;
0053 return m_has[e_has_base];
0054 }
0055
0056 void set_base_is_offset(bool is_offset) { m_base_is_offset = is_offset; }
0057 bool get_base_is_offset(bool &out) const {
0058 out = m_base_is_offset;
0059 return m_has[e_has_base];
0060 }
0061
0062 void set_link_map(const lldb::addr_t addr) {
0063 m_link_map = addr;
0064 m_has[e_has_link_map] = true;
0065 }
0066 bool get_link_map(lldb::addr_t &out) const {
0067 out = m_link_map;
0068 return m_has[e_has_link_map];
0069 }
0070
0071 void set_dynamic(const lldb::addr_t addr) {
0072 m_dynamic = addr;
0073 m_has[e_has_dynamic] = true;
0074 }
0075 bool get_dynamic(lldb::addr_t &out) const {
0076 out = m_dynamic;
0077 return m_has[e_has_dynamic];
0078 }
0079
0080 bool has_info(e_data_point datum) const {
0081 assert(datum < e_num);
0082 return m_has[datum];
0083 }
0084
0085 bool operator==(LoadedModuleInfo const &rhs) const {
0086 for (size_t i = 0; i < e_num; ++i) {
0087 if (m_has[i] != rhs.m_has[i])
0088 return false;
0089 }
0090
0091 return (m_base == rhs.m_base) && (m_link_map == rhs.m_link_map) &&
0092 (m_dynamic == rhs.m_dynamic) && (m_name == rhs.m_name);
0093 }
0094
0095 protected:
0096 bool m_has[e_num];
0097 std::string m_name;
0098 lldb::addr_t m_link_map = LLDB_INVALID_ADDRESS;
0099 lldb::addr_t m_base = LLDB_INVALID_ADDRESS;
0100 bool m_base_is_offset = false;
0101 lldb::addr_t m_dynamic = LLDB_INVALID_ADDRESS;
0102 };
0103
0104 LoadedModuleInfoList() = default;
0105
0106 void add(const LoadedModuleInfo &mod) { m_list.push_back(mod); }
0107
0108 void clear() { m_list.clear(); }
0109
0110 std::vector<LoadedModuleInfo> m_list;
0111 lldb::addr_t m_link_map = LLDB_INVALID_ADDRESS;
0112 };
0113 }
0114
0115 #endif