Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:42:45

0001 //===-- LoadedModuleInfoList.h ----------------------------------*- C++ -*-===//
0002 //
0003 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0004 // See https://llvm.org/LICENSE.txt for license information.
0005 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
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 } // namespace lldb_private
0114 
0115 #endif // LLDB_CORE_LOADEDMODULEINFOLIST_H