Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mc: move some files related to ELF, DWARF or unwind reading into their own directory
[simgrid.git] / src / mc / remote / RemoteClient.hpp
index 34c31b6..994b88b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2008-2019. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -6,37 +6,11 @@
 #ifndef SIMGRID_MC_PROCESS_H
 #define SIMGRID_MC_PROCESS_H
 
-#include <cstddef>
-#include <cstdint>
-
-#include <memory>
-#include <string>
-#include <type_traits>
-#include <vector>
-
-#include <sys/types.h>
-
-#include <simgrid_config.h>
-
-#include "xbt/base.h"
-#include <xbt/mmalloc.h>
-
-#include "src/xbt/mmalloc/mmprivate.h"
-
+#include "src/mc/inspect/ObjectInformation.hpp"
 #include "src/mc/remote/Channel.hpp"
-#include "src/mc/remote/RemotePtr.hpp"
-
-#include "src/simix/popping_private.h"
-#include "src/simix/smx_private.h"
-#include <simgrid/simix.h>
-
-#include "src/xbt/memory_map.hpp"
+#include "src/xbt/mmalloc/mmprivate.h"
 
-#include "src/mc/AddressSpace.hpp"
-#include "src/mc/ObjectInformation.hpp"
-#include "src/mc/mc_base.h"
-#include "src/mc/mc_forward.hpp"
-#include "src/mc/remote/mc_protocol.h"
+#include <vector>
 
 namespace simgrid {
 namespace mc {
@@ -44,8 +18,8 @@ namespace mc {
 class ActorInformation {
 public:
   /** MCed address of the process */
-  RemotePtr<simgrid::simix::ActorImpl> address = nullptr;
-  Remote<simgrid::simix::ActorImpl> copy;
+  RemotePtr<simgrid::kernel::actor::ActorImpl> address{nullptr};
+  Remote<simgrid::kernel::actor::ActorImpl> copy;
 
   /** Hostname (owned by `mc_modelchecker->hostnames`) */
   const char* hostname = nullptr;
@@ -122,10 +96,7 @@ public:
   }
 
   std::string read_string(RemotePtr<char> address) const;
-  std::string read_string(RemotePtr<char> address, std::size_t len) const
-  {
-    return AddressSpace::read_string(address, len);
-  }
+  using AddressSpace::read_string;
 
   // Write memory:
   void write_bytes(const void* buffer, size_t len, RemotePtr<void> address);
@@ -136,7 +107,7 @@ public:
   std::shared_ptr<simgrid::mc::ObjectInformation> find_object_info_exec(RemotePtr<void> addr) const;
   std::shared_ptr<simgrid::mc::ObjectInformation> find_object_info_rw(RemotePtr<void> addr) const;
   simgrid::mc::Frame* find_function(RemotePtr<void> ip) const;
-  simgrid::mc::Variable* find_variable(const char* name) const;
+  const simgrid::mc::Variable* find_variable(const char* name) const;
 
   // Heap access:
   xbt_mheap_t get_heap()
@@ -193,7 +164,7 @@ public:
   std::vector<simgrid::mc::ActorInformation>& dead_actors();
 
   /** Get a local description of a remote SIMIX actor */
-  simgrid::mc::ActorInformation* resolveActorInfo(simgrid::mc::RemotePtr<simgrid::simix::ActorImpl> actor)
+  simgrid::mc::ActorInformation* resolveActorInfo(simgrid::mc::RemotePtr<simgrid::kernel::actor::ActorImpl> actor)
   {
     xbt_assert(mc_model_checker != nullptr);
     if (not actor)
@@ -209,7 +180,7 @@ public:
   }
 
   /** Get a local copy of the SIMIX actor structure */
-  simgrid::simix::ActorImpl* resolveActor(simgrid::mc::RemotePtr<simgrid::simix::ActorImpl> process)
+  simgrid::kernel::actor::ActorImpl* resolveActor(simgrid::mc::RemotePtr<simgrid::kernel::actor::ActorImpl> process)
   {
     simgrid::mc::ActorInformation* actor_info = this->resolveActorInfo(process);
     if (actor_info)
@@ -226,7 +197,6 @@ private:
   void refresh_malloc_info();
   void refresh_simix();
 
-private:
   pid_t pid_ = -1;
   Channel channel_;
   bool running_ = false;
@@ -239,20 +209,21 @@ private:
   std::vector<s_stack_region_t> stack_areas_;
   std::vector<IgnoredHeapRegion> ignored_heap_;
 
-public: // object info
+public:
+  // object info
   // TODO, make private (first, objectify simgrid::mc::ObjectInformation*)
   std::vector<std::shared_ptr<simgrid::mc::ObjectInformation>> object_infos;
   std::shared_ptr<simgrid::mc::ObjectInformation> libsimgrid_info;
   std::shared_ptr<simgrid::mc::ObjectInformation> binary_info;
 
-public: // Copies of MCed SMX data structures
-        /** Copy of `simix_global->process_list`
-         *
-         *  See mc_smx.c.
-         */
+  // Copies of MCed SMX data structures
+  /** Copy of `simix_global->process_list`
+   *
+   *  See mc_smx.c.
+   */
   std::vector<ActorInformation> smx_actors_infos;
 
-  /** Copy of `simix_global->process_to_destroy`
+  /** Copy of `simix_global->actors_to_destroy`
    *
    *  See mc_smx.c.
    */
@@ -282,13 +253,13 @@ public:
    */
   std::vector<malloc_info> heap_info;
 
-public: // Libunwind-data
-        /** Full-featured MC-aware libunwind address space for the process
-         *
-         *  This address space is using a simgrid::mc::UnwindContext*
-         *  (with simgrid::mc::Process* / simgrid::mc::AddressSpace*
-         *  and unw_context_t).
-         */
+  // Libunwind-data
+  /** Full-featured MC-aware libunwind address space for the process
+   *
+   *  This address space is using a simgrid::mc::UnwindContext*
+   *  (with simgrid::mc::Process* / simgrid::mc::AddressSpace*
+   *  and unw_context_t).
+   */
   unw_addr_space_t unw_addr_space;
 
   /** Underlying libunwind address-space
@@ -302,6 +273,9 @@ public: // Libunwind-data
   /** The corresponding context
    */
   void* unw_underlying_context;
+
+  /* Check whether the given actor is enabled */
+  bool actor_is_enabled(aid_t pid);
 };
 
 /** Open a FD to a remote process memory (`/dev/$pid/mem`)