X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/95bcda88a7fcfa168381cba0eedadb1e4937d0b3..26af220e017a088b56105b2f21fadecf7d6e2a88:/src/mc/mc_process.h diff --git a/src/mc/mc_process.h b/src/mc/mc_process.h index 762cb695e3..d10a28c744 100644 --- a/src/mc/mc_process.h +++ b/src/mc/mc_process.h @@ -11,12 +11,15 @@ #include #include "simgrid_config.h" - #include #include + +#ifdef HAVE_MC #include "xbt/mmalloc/mmprivate.h" +#endif +#include #include "simix/popping_private.h" #include "simix/smx_private.h" @@ -30,23 +33,17 @@ SG_BEGIN_DECL() int MC_process_vm_open(pid_t pid, int flags); -typedef enum { - MC_PROCESS_NO_FLAG = 0, - MC_PROCESS_SELF_FLAG = 1, -} e_mc_process_flags_t; +typedef int mc_process_flags_t; +#define MC_PROCESS_NO_FLAG 0 +#define MC_PROCESS_SELF_FLAG 1 // Those flags are used to track down which cached information // is still up to date and which information needs to be updated. -typedef enum { - MC_PROCESS_CACHE_FLAG_HEAP = 1, - MC_PROCESS_CACHE_FLAG_MALLOC_INFO = 2, - MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES = 4, -} e_mc_process_cache_flags_t ; - -struct s_mc_smx_process_info { - void* address; - struct s_smx_process copy; -}; +typedef int mc_process_cache_flags_t; +#define MC_PROCESS_CACHE_FLAG_NONE 0 +#define MC_PROCESS_CACHE_FLAG_HEAP 1 +#define MC_PROCESS_CACHE_FLAG_MALLOC_INFO 2 +#define MC_PROCESS_CACHE_FLAG_SIMIX_PROCESSES 4 typedef struct s_mc_smx_process_info s_mc_smx_process_info_t, *mc_smx_process_info_t; @@ -54,7 +51,7 @@ typedef struct s_mc_smx_process_info s_mc_smx_process_info_t, *mc_smx_process_in */ struct s_mc_process { s_mc_address_space_t address_space; - e_mc_process_flags_t process_flags; + mc_process_flags_t process_flags; pid_t pid; int socket; int status; @@ -67,11 +64,20 @@ struct s_mc_process { size_t object_infos_size; int memory_file; + /** Copy of `simix_global->process_list` + * + * See mc_smx.c. + */ xbt_dynar_t smx_process_infos; + + /** Copy of `simix_global->process_to_destroy` + * + * See mc_smx.c. + */ xbt_dynar_t smx_old_process_infos; /** State of the cache (which variables are up to date) */ - e_mc_process_cache_flags_t cache_flags; + mc_process_cache_flags_t cache_flags; /** Address of the heap structure in the MCed process. */ void* heap_address; @@ -135,8 +141,6 @@ void MC_process_refresh_heap(mc_process_t process); * */ void MC_process_refresh_malloc_info(mc_process_t process); -void MC_process_refresh_simix_processes(mc_process_t process); - static inline bool MC_process_is_self(mc_process_t process) { @@ -153,10 +157,17 @@ bool MC_process_is_self(mc_process_t process) * @param len data size */ const void* MC_process_read(mc_process_t process, - e_adress_space_read_flags_t flags, + adress_space_read_flags_t flags, void* local, const void* remote, size_t len, int process_index); +// Simplified versions/wrappers (whould be moved in mc_address_space): +const void* MC_process_read_simple(mc_process_t process, + void* local, const void* remote, size_t len); +const void* MC_process_read_dynar_element(mc_process_t process, + void* local, const void* remote_dynar, size_t i, size_t len); +unsigned long MC_process_read_dynar_length(mc_process_t process, const void* remote_dynar); + /** Write data to a process memory * * @param process the process @@ -177,6 +188,7 @@ mc_object_info_t MC_process_find_object_info_rw(mc_process_t process, const void dw_frame_t MC_process_find_function(mc_process_t process, const void* ip); void MC_process_read_variable(mc_process_t process, const char* name, void* target, size_t size); +char* MC_process_read_string(mc_process_t, void* address); static inline xbt_mheap_t MC_process_get_heap(mc_process_t process) { @@ -200,20 +212,7 @@ static inline malloc_info* MC_process_get_malloc_info(mc_process_t process) */ dw_variable_t MC_process_find_variable_by_name(mc_process_t process, const char* name); -// ***** Things to move somewhere else: - -smx_process_t MC_process_get_issuer(mc_process_t process, smx_simcall_t req); - -void MC_simcall_handle(smx_simcall_t req, int value); - -void mc_smx_process_info_clear(mc_smx_process_info_t p); - -static inline -xbt_dynar_t mc_smx_process_info_list_new() -{ - return xbt_dynar_new( - sizeof(s_mc_smx_process_info_t), (void_f_pvoid_t) &mc_smx_process_info_clear); -} +void MC_invalidate_cache(void); SG_END_DECL()