X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2211665cb451243f182fa49a18219331d9bf58d6..6e8589d6a8476d3d6dd2453d933ed9759cd215b0:/src/mc/Process.hpp diff --git a/src/mc/Process.hpp b/src/mc/Process.hpp index 223711acc2..2f51240fcf 100644 --- a/src/mc/Process.hpp +++ b/src/mc/Process.hpp @@ -28,12 +28,14 @@ #include "src/simix/popping_private.h" #include "src/simix/smx_private.h" -#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" +#include "src/xbt/memory_map.hpp" + +#include "src/mc/mc_forward.hpp" +#include "src/mc/mc_base.h" +#include "src/mc/mc_mmalloc.h" // std_heap +#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,6 +53,13 @@ struct IgnoredRegion { size_t size; }; +struct IgnoredHeapRegion { + int block; + int fragment; + void *address; + size_t size; +}; + /** Representation of a process */ class Process final : public AddressSpace { @@ -121,17 +130,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) @@ -154,6 +157,41 @@ 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; } + + void ignore_global_variable(const char* name) + { + for (std::shared_ptr const& info : + this->object_infos) + 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); + private: void init_memory_map_info(); void refresh_heap(); @@ -161,14 +199,17 @@ private: private: 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_; + std::vector stack_areas_; + std::vector ignored_heap_; + public: // object info // TODO, make private (first, objectify simgrid::mc::ObjectInformation*) std::vector> object_infos; @@ -240,10 +281,4 @@ XBT_PRIVATE int open_vm(pid_t pid, int flags); } } -SG_BEGIN_DECL() - -XBT_PRIVATE void MC_invalidate_cache(void); - -SG_END_DECL() - #endif