1 //===-- LoadedModuleInfoList.h ----------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_LoadedModuleInfoList_h_ 11 #define liblldb_LoadedModuleInfoList_h_ 12 13 14 #include <cassert> 15 #include <string> 16 #include <vector> 17 18 #include "lldb/lldb-defines.h" 19 #include "lldb/lldb-private-forward.h" 20 #include "lldb/lldb-types.h" 21 22 namespace lldb_private { 23 class LoadedModuleInfoList { 24 public: 25 class LoadedModuleInfo { 26 public: 27 enum e_data_point { 28 e_has_name = 0, 29 e_has_base, 30 e_has_dynamic, 31 e_has_link_map, 32 e_num 33 }; 34 LoadedModuleInfo()35 LoadedModuleInfo() { 36 for (uint32_t i = 0; i < e_num; ++i) 37 m_has[i] = false; 38 }; 39 set_name(const std::string & name)40 void set_name(const std::string &name) { 41 m_name = name; 42 m_has[e_has_name] = true; 43 } get_name(std::string & out)44 bool get_name(std::string &out) const { 45 out = m_name; 46 return m_has[e_has_name]; 47 } 48 set_base(const lldb::addr_t base)49 void set_base(const lldb::addr_t base) { 50 m_base = base; 51 m_has[e_has_base] = true; 52 } get_base(lldb::addr_t & out)53 bool get_base(lldb::addr_t &out) const { 54 out = m_base; 55 return m_has[e_has_base]; 56 } 57 set_base_is_offset(bool is_offset)58 void set_base_is_offset(bool is_offset) { m_base_is_offset = is_offset; } get_base_is_offset(bool & out)59 bool get_base_is_offset(bool &out) const { 60 out = m_base_is_offset; 61 return m_has[e_has_base]; 62 } 63 set_link_map(const lldb::addr_t addr)64 void set_link_map(const lldb::addr_t addr) { 65 m_link_map = addr; 66 m_has[e_has_link_map] = true; 67 } get_link_map(lldb::addr_t & out)68 bool get_link_map(lldb::addr_t &out) const { 69 out = m_link_map; 70 return m_has[e_has_link_map]; 71 } 72 set_dynamic(const lldb::addr_t addr)73 void set_dynamic(const lldb::addr_t addr) { 74 m_dynamic = addr; 75 m_has[e_has_dynamic] = true; 76 } get_dynamic(lldb::addr_t & out)77 bool get_dynamic(lldb::addr_t &out) const { 78 out = m_dynamic; 79 return m_has[e_has_dynamic]; 80 } 81 has_info(e_data_point datum)82 bool has_info(e_data_point datum) const { 83 assert(datum < e_num); 84 return m_has[datum]; 85 } 86 87 bool operator==(LoadedModuleInfo const &rhs) const { 88 if (e_num != rhs.e_num) 89 return false; 90 91 for (size_t i = 0; i < e_num; ++i) { 92 if (m_has[i] != rhs.m_has[i]) 93 return false; 94 } 95 96 return (m_base == rhs.m_base) && (m_link_map == rhs.m_link_map) && 97 (m_dynamic == rhs.m_dynamic) && (m_name == rhs.m_name); 98 } 99 100 protected: 101 bool m_has[e_num]; 102 std::string m_name; 103 lldb::addr_t m_link_map; 104 lldb::addr_t m_base; 105 bool m_base_is_offset; 106 lldb::addr_t m_dynamic; 107 }; 108 LoadedModuleInfoList()109 LoadedModuleInfoList() : m_list(), m_link_map(LLDB_INVALID_ADDRESS) {} 110 add(const LoadedModuleInfo & mod)111 void add(const LoadedModuleInfo &mod) { m_list.push_back(mod); } 112 clear()113 void clear() { m_list.clear(); } 114 115 std::vector<LoadedModuleInfo> m_list; 116 lldb::addr_t m_link_map; 117 }; 118 } // namespace lldb_private 119 120 #endif // liblldb_LoadedModuleInfoList_h_ 121