Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[smpi] Use virtual memory layout to find the data segment
[simgrid.git] / src / mc / Process.hpp
index 4c21485..6cc3cfd 100644 (file)
 #include <xbt/mmalloc.h>
 
 #ifdef HAVE_MC
-#include "xbt/mmalloc/mmprivate.h"
+#include "src/xbt/mmalloc/mmprivate.h"
 #endif
 
 #include <simgrid/simix.h>
-#include "simix/popping_private.h"
-#include "simix/smx_private.h"
+#include "src/simix/popping_private.h"
+#include "src/simix/smx_private.h"
+
+#include "../xbt/memory_map.hpp"
 
 #include "mc_forward.hpp"
 #include "mc_base.h"
 #include "mc_mmalloc.h" // std_heap
-#include "mc_memory_map.h"
 #include "AddressSpace.hpp"
 #include "mc_protocol.h"
 
-typedef int mc_process_flags_t;
-#define MC_PROCESS_NO_FLAG 0
-#define MC_PROCESS_SELF_FLAG 1
-
 // Those flags are used to track down which cached information
 // is still up to date and which information needs to be updated.
 typedef int mc_process_cache_flags_t;
@@ -47,8 +44,6 @@ typedef int mc_process_cache_flags_t;
 #define MC_PROCESS_CACHE_FLAG_MALLOC_INFO 2
 #define MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES 4
 
-typedef struct s_mc_smx_process_info s_mc_smx_process_info_t, *mc_smx_process_info_t;
-
 namespace simgrid {
 namespace mc {
 
@@ -59,16 +54,15 @@ struct IgnoredRegion {
 
 /** Representation of a process
  */
-class Process : public AddressSpace {
+class Process final : public AddressSpace {
 public:
   Process(pid_t pid, int sockfd);
   ~Process();
 
-
-  bool is_self() const
-  {
-    return this->process_flags & MC_PROCESS_SELF_FLAG;
-  }
+  Process(Process const&) = delete;
+  Process(Process &&) = delete;
+  Process& operator=(Process const&) = delete;
+  Process& operator=(Process &&) = delete;
 
   // Read memory:
   const void* read_bytes(void* buffer, std::size_t size,
@@ -101,13 +95,13 @@ public:
   {
     if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_HEAP))
       this->refresh_heap();
-    return this->heap;
+    return this->heap.get();
   }
   malloc_info* get_malloc_info()
   {
     if (!(this->cache_flags & MC_PROCESS_CACHE_FLAG_MALLOC_INFO))
       this->refresh_malloc_info();
-    return this->heap_info;
+    return this->heap_info.data();
   }
 
   std::vector<IgnoredRegion> const& ignored_regions() const
@@ -166,12 +160,11 @@ private:
   void refresh_heap();
   void refresh_malloc_info();
 private:
-  mc_process_flags_t process_flags;
   pid_t pid_;
   int socket_;
   int status_;
   bool running_;
-  std::vector<VmMap> memory_map_;
+  std::vector<simgrid::xbt::VmMap> memory_map_;
   remote_ptr<void> maestro_stack_start_, maestro_stack_end_;
   int memory_file;
   std::vector<IgnoredRegion> ignored_regions_;
@@ -208,7 +201,7 @@ public: // Copies of MCed SMX data structures
    *  This is not used if the process is the current one:
    *  use `get_heap_info()` in order to use it.
    */
-   xbt_mheap_t heap;
+   std::unique_ptr<s_xbt_mheap_t> heap;
 
   /** Copy of the allocation info structure
    *
@@ -216,7 +209,7 @@ public: // Copies of MCed SMX data structures
    *  This is not used if the process is the current one:
    *  use `get_malloc_info()` in order to use it.
    */
-  malloc_info* heap_info;
+  std::vector<malloc_info> heap_info;
 
 public: // Libunwind-data