X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ba9a4cfeba4eb00e84cd17603fc9654e81445655..3db47603316610f1878cb48634c357b75bbbed9d:/src/mc/Process.hpp diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index 4ab4e06ef9..a2cef8542e 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -22,7 +22,7 @@ #include #include -#ifdef HAVE_MC +#if HAVE_MC #include "src/xbt/mmalloc/mmprivate.h" #endif @@ -49,6 +49,26 @@ typedef int mc_process_cache_flags_t; namespace simgrid { namespace mc { +class SimixProcessInformation { +public: + /** MCed address of the process */ + void* address = nullptr; + union { + /** (Flat) Copy of the process data structure */ + struct s_smx_process copy; + }; + /** Hostname (owned by `mc_modelchecker->hostnames`) */ + const char* hostname = nullptr; + std::string name; + + void clear() + { + name.clear(); + address = nullptr; + hostname = nullptr; + } +}; + struct IgnoredRegion { std::uint64_t addr; std::size_t size; @@ -62,6 +82,19 @@ struct IgnoredHeapRegion { }; /** Representation of a process + * + * This class is mixing a lot of differents responsabilities and is tied + * to SIMIX. It should probably split into different classes. + * + * Responsabilities: + * + * - reading from the process memory (`AddressSpace`); + * - accessing the system state of the porcess (heap, …); + * - storing the SIMIX state of the process; + * - privatization; + * - communication with the model-checked process; + * - stack unwinding; + * - etc. */ class Process final : public AddressSpace { public: @@ -76,7 +109,7 @@ public: // Read memory: const void* read_bytes(void* buffer, std::size_t size, - remote_ptr address, int process_index = ProcessIndexAny, + 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 @@ -87,17 +120,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: @@ -122,7 +155,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_; } @@ -194,18 +227,21 @@ public: void ignore_local_variable(const char *var_name, const char *frame_name); int socket() { return socket_; } + std::vector& simix_processes(); + std::vector& old_simix_processes(); private: void init_memory_map_info(); void refresh_heap(); void refresh_malloc_info(); + void refresh_simix(); private: pid_t pid_ = -1; int socket_ = -1; bool running_ = false; std::vector memory_map_; - remote_ptr maestro_stack_start_, maestro_stack_end_; + RemotePtr maestro_stack_start_, maestro_stack_end_; int memory_file = -1; std::vector ignored_regions_; int clear_refs_fd_ = -1; @@ -225,13 +261,13 @@ public: // Copies of MCed SMX data structures * * See mc_smx.c. */ - xbt_dynar_t smx_process_infos = nullptr; + std::vector smx_process_infos; /** Copy of `simix_global->process_to_destroy` * * See mc_smx.c. */ - xbt_dynar_t smx_old_process_infos = nullptr; + std::vector smx_old_process_infos; /** State of the cache (which variables are up to date) */ mc_process_cache_flags_t cache_flags = MC_PROCESS_CACHE_FLAG_NONE;