X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/113b02e6368a5f13ae3db49b9265246a138a852e..97c735054d7772a511a6933745ef9158e3b2b29d:/src/mc/Process.hpp diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index e3a11ccb8b..5d50961f0e 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -21,23 +21,22 @@ #include #ifdef HAVE_MC -#include "xbt/mmalloc/mmprivate.h" +#include "src/xbt/mmalloc/mmprivate.h" #endif #include -#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 +#include "ObjectInformation.hpp" // Those flags are used to track down which cached information // is still up to date and which information needs to be updated. @@ -57,16 +56,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, @@ -99,13 +97,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 const& ignored_regions() const @@ -126,17 +124,11 @@ public: return running_; } - void terminate(int status) + void terminate() { - status_ = status; running_ = false; } - int status() const - { - return status_; - } - template typename std::enable_if< std::is_class::value && std::is_trivial::value, int >::type send_message(M const& m) @@ -159,22 +151,31 @@ public: void reset_soft_dirty(); void read_pagemap(uint64_t* pagemap, size_t start_page, size_t page_count); + bool privatized(ObjectInformation const& info) const + { + return privatized_ && info.executable(); + } + bool privatized() const + { + return privatized_; + } + void privatized(bool privatized) { privatized_ = privatized; } + private: void init_memory_map_info(); 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 memory_map_; + std::vector memory_map_; remote_ptr maestro_stack_start_, maestro_stack_end_; int memory_file; std::vector ignored_regions_; int clear_refs_fd_; int pagemap_fd_; + bool privatized_; public: // object info // TODO, make private (first, objectify simgrid::mc::ObjectInformation*) std::vector> object_infos; @@ -206,7 +207,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 heap; /** Copy of the allocation info structure * @@ -214,7 +215,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 heap_info; public: // Libunwind-data