Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Add comments on ObjectInformation
[simgrid.git] / src / mc / mc_object_info.h
index b195d47..b175daf 100644 (file)
@@ -113,7 +113,6 @@ public:
 
   size_t start_scope;
   mc_object_info_t object_info;
-
 };
 
 class Frame {
@@ -132,10 +131,37 @@ public:
   mc_object_info_t object_info;
 };
 
+/** An entry in the functions index
+ *
+ *  See the code of ObjectInformation::find_function.
+ */
+struct FunctionIndexEntry {
+  void* low_pc;
+  mc_frame_t function;
+};
+
+/** Information about an (ELF) executable/sharedobject
+ *
+ *  This contain sall the information we have at runtime about an
+ *  executable/shared object in the target (modelchecked) process:
+ *  - where it is located in the virtual address space;
+ *  - where are located it's different memory mapping in the the
+ *    virtual address space ;
+ *  - all the debugging (DWARF) information,
+ *    - location of the functions,
+ *    - types
+ *  - etc.
+ *
+ *  It is not copyable because we are taking pointers to Types/Frames.
+ *  We'd have to update/rebuild some data structures in order to copy
+ *  successfully.
+ */
+
 class ObjectInformation {
 public:
   ObjectInformation();
-  ~ObjectInformation();
+
+  // Not copyable:
   ObjectInformation(ObjectInformation const&) = delete;
   ObjectInformation& operator=(ObjectInformation const&) = delete;
 
@@ -155,10 +181,12 @@ public:
   std::unordered_map<std::uint64_t, simgrid::mc::Type> types;
   std::unordered_map<std::string, simgrid::mc::Type*> full_types_by_name;
 
-  // Here we sort the minimal information for an efficient (and cache-efficient)
-  // lookup of a function given an instruction pointer.
-  // The entries are sorted by low_pc and a binary search can be used to look them up.
-  xbt_dynar_t functions_index;
+  /** Index of functions by IP
+   *
+   * The entries are sorted by low_pc and a binary search can be used to look
+   * them up. Should we used a binary tree instead?
+   */
+  std::vector<FunctionIndexEntry> functions_index;
 
   bool executable() const
   {
@@ -195,10 +223,4 @@ XBT_INTERNAL void* mc_member_resolve(
   const void* base, mc_type_t type, mc_type_t member,
   mc_address_space_t snapshot, int process_index);
 
-
-struct s_mc_function_index_item {
-  void* low_pc, *high_pc;
-  mc_frame_t function;
-};
-
 #endif