X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fce872a4f145c997f146ea0d098a77549a47bd0b..27f768c6fbe663c6de000473c44a61222b77d481:/src/mc/Process.hpp diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index 7cb054d81c..62fad58620 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -7,17 +7,19 @@ #ifndef SIMGRID_MC_PROCESS_H #define SIMGRID_MC_PROCESS_H -#include - -#include +#include +#include +#include #include #include -#include "simgrid_config.h" #include +#include + #include +#include #include #ifdef HAVE_MC @@ -28,15 +30,13 @@ #include "src/simix/popping_private.h" #include "src/simix/smx_private.h" -#include "../xbt/memory_map.hpp" +#include "src/xbt/memory_map.hpp" -#include "mc_forward.hpp" -#include "mc_base.h" -#include "mc_mmalloc.h" // std_heap -#include "AddressSpace.hpp" -#include "mc_protocol.h" - -#include "ObjectInformation.hpp" +#include "src/mc/mc_forward.hpp" +#include "src/mc/mc_base.h" +#include "src/mc/AddressSpace.hpp" +#include "src/mc/mc_protocol.h" +#include "src/mc/ObjectInformation.hpp" // Those flags are used to track down which cached information // is still up to date and which information needs to be updated. @@ -51,7 +51,14 @@ namespace mc { struct IgnoredRegion { std::uint64_t addr; - size_t size; + std::size_t size; +}; + +struct IgnoredHeapRegion { + int block; + int fragment; + void *address; + std::size_t size; }; /** Representation of a process @@ -60,6 +67,7 @@ class Process final : public AddressSpace { public: Process(pid_t pid, int sockfd); ~Process(); + void init(); Process(Process const&) = delete; Process(Process &&) = delete; @@ -68,8 +76,8 @@ public: // Read memory: const void* read_bytes(void* buffer, std::size_t size, - remote_ptr address, int process_index = ProcessIndexAny, - ReadMode mode = Normal) const override; + RemotePtr address, int process_index = ProcessIndexAny, + ReadOptions options = ReadOptions::none()) const override; void read_variable(const char* name, void* target, size_t size) const; template T read_variable(const char *name) const @@ -79,17 +87,17 @@ public: read_variable(name, &res, sizeof(T)); return res; } - char* read_string(remote_ptr address) const; + char* read_string(RemotePtr address) const; // Write memory: - void write_bytes(const void* buffer, size_t len, remote_ptr address); - void clear_bytes(remote_ptr address, size_t len); + void write_bytes(const void* buffer, size_t len, RemotePtr address); + void clear_bytes(RemotePtr address, size_t len); // Debug information: - std::shared_ptr find_object_info(remote_ptr addr) const; - std::shared_ptr find_object_info_exec(remote_ptr addr) const; - std::shared_ptr find_object_info_rw(remote_ptr addr) const; - simgrid::mc::Frame* find_function(remote_ptr ip) const; + std::shared_ptr find_object_info(RemotePtr addr) const; + std::shared_ptr find_object_info_exec(RemotePtr addr) const; + std::shared_ptr find_object_info_rw(RemotePtr addr) const; + simgrid::mc::Frame* find_function(RemotePtr ip) const; simgrid::mc::Variable* find_variable(const char* name) const; // Heap access: @@ -114,7 +122,7 @@ public: pid_t pid() const { return pid_; } - bool in_maestro_stack(remote_ptr p) const + bool in_maestro_stack(RemotePtr p) const { return p >= this->maestro_stack_start_ && p < this->maestro_stack_end_; } @@ -168,21 +176,44 @@ public: info->remove_global_variable(name); } + std::vector& stack_areas() + { + return stack_areas_; + } + std::vector const& stack_areas() const + { + return stack_areas_; + } + + std::vector const& ignored_heap() const + { + return ignored_heap_; + } + void ignore_heap(IgnoredHeapRegion const& region); + void unignore_heap(void *address, size_t size); + + void ignore_local_variable(const char *var_name, const char *frame_name); + int socket() { return socket_; } + private: void init_memory_map_info(); void refresh_heap(); void refresh_malloc_info(); + private: - pid_t pid_; - int socket_; - bool running_; + pid_t pid_ = -1; + int socket_ = -1; + bool running_ = false; std::vector memory_map_; - remote_ptr maestro_stack_start_, maestro_stack_end_; - int memory_file; + RemotePtr maestro_stack_start_, maestro_stack_end_; + int memory_file = -1; std::vector ignored_regions_; - int clear_refs_fd_; - int pagemap_fd_; - bool privatized_; + int clear_refs_fd_ = -1; + int pagemap_fd_ = -1; + bool privatized_ = false; + std::vector stack_areas_; + std::vector ignored_heap_; + public: // object info // TODO, make private (first, objectify simgrid::mc::ObjectInformation*) std::vector> object_infos; @@ -194,16 +225,16 @@ public: // Copies of MCed SMX data structures * * See mc_smx.c. */ - xbt_dynar_t smx_process_infos; + xbt_dynar_t smx_process_infos = nullptr; /** Copy of `simix_global->process_to_destroy` * * See mc_smx.c. */ - xbt_dynar_t smx_old_process_infos; + xbt_dynar_t smx_old_process_infos = nullptr; /** State of the cache (which variables are up to date) */ - mc_process_cache_flags_t cache_flags; + mc_process_cache_flags_t cache_flags = MC_PROCESS_CACHE_FLAG_NONE; /** Address of the heap structure in the MCed process. */ void* heap_address;