X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b5788f3fc1569b77ba50a00e66fc37cb352f2717..49514a74128a35ed4c0ba6dc190d70d35dd9fd7a:/src/mc/mc_private.h?ds=sidebyside diff --git a/src/mc/mc_private.h b/src/mc/mc_private.h index a73fb2ba38..134824356f 100644 --- a/src/mc/mc_private.h +++ b/src/mc/mc_private.h @@ -16,6 +16,7 @@ #include #include "mc/mc.h" +#include "mc_base.h" #include "mc/datatypes.h" #include "xbt/fifo.h" #include "xbt/config.h" @@ -95,6 +96,13 @@ typedef struct s_mc_snapshot_ignored_data { void* data; } s_mc_snapshot_ignored_data_t, *mc_snapshot_ignored_data_t; +typedef struct s_fd_infos{ + char *filename; + int number; + off_t current_position; + int flags; +}s_fd_infos_t, *fd_infos_t; + typedef struct s_mc_snapshot{ size_t heap_bytes_used; mc_mem_region_t regions[NB_REGIONS]; @@ -106,8 +114,11 @@ typedef struct s_mc_snapshot{ xbt_dynar_t to_ignore; uint64_t hash; xbt_dynar_t ignored_data; + int total_fd; + fd_infos_t *current_fd; } s_mc_snapshot_t; + /** @brief Process index used when no process is available * * The expected behaviour is that if a process index is needed it will fail. @@ -213,8 +224,11 @@ typedef struct s_mc_model_checker { mc_pages_store_t pages; int fd_clear_refs; int fd_pagemap; + xbt_dynar_t record; } s_mc_model_checker_t, *mc_model_checker_t; +mc_model_checker_t MC_model_checker_new(void); +void MC_model_checker_delete(mc_model_checker_t mc); extern mc_model_checker_t mc_model_checker; extern xbt_dynar_t mc_checkpoint_ignore; @@ -231,14 +245,18 @@ extern int user_max_depth_reached; int MC_deadlock_check(void); void MC_replay(xbt_fifo_t stack, int start); void MC_replay_liveness(xbt_fifo_t stack, int all_stack); -void MC_wait_for_requests(void); void MC_show_deadlock(smx_simcall_t req); void MC_show_stack_safety(xbt_fifo_t stack); void MC_dump_stack_safety(xbt_fifo_t stack); +/** Stack (of `mc_state_t`) representing the current position of the + * the MC in the exploration graph + * + * It is managed by its head (`xbt_fifo_shift` and `xbt_fifo_unshift`). + */ extern xbt_fifo_t mc_stack; -int get_search_interval(xbt_dynar_t list, void *ref, int *min, int *max); +int get_search_interval(xbt_dynar_t list, void *ref, int *min, int *max); /********************************* Requests ***********************************/ @@ -286,11 +304,16 @@ typedef struct mc_procstate{ interleaved */ } s_mc_procstate_t, *mc_procstate_t; -/* An exploration state is composed of: */ +/* An exploration state. + * + * The `executed_state` is sometimes transformed into another `internal_req`. + * For example WAITANY is transformes into a WAIT and TESTANY into TEST. + * See `MC_state_set_executed_request()`. + */ typedef struct mc_state { unsigned long max_pid; /* Maximum pid at state's creation time */ mc_procstate_t proc_status; /* State's exploration status by process */ - s_smx_action_t internal_comm; /* To be referenced by the internal_req */ + s_smx_synchro_t internal_comm; /* To be referenced by the internal_req */ s_smx_simcall_t internal_req; /* Internal translation of request */ s_smx_simcall_t executed_req; /* The executed request of the state */ int req_num; /* The request number (in the case of a @@ -513,7 +536,6 @@ extern mc_object_info_t mc_object_infos[2]; extern size_t mc_object_infos_size; void MC_find_object_address(memory_map_t maps, mc_object_info_t result); -void MC_post_process_types(mc_object_info_t info); void MC_post_process_object_info(mc_object_info_t info); // ***** Expressions @@ -709,7 +731,7 @@ typedef struct s_local_variable{ typedef struct s_mc_comm_pattern{ int num; - smx_action_t comm; + smx_synchro_t comm; e_smx_comm_type_t type; unsigned long src_proc; unsigned long dst_proc; @@ -750,7 +772,7 @@ static inline mc_call_type mc_get_call_type(smx_simcall_t req) { void get_comm_pattern(xbt_dynar_t communications_pattern, smx_simcall_t request, mc_call_type call_type); void mc_update_comm_pattern(mc_call_type call_type, smx_simcall_t request, int value, xbt_dynar_t current_pattern); -void complete_comm_pattern(xbt_dynar_t list, smx_action_t comm); +void complete_comm_pattern(xbt_dynar_t list, smx_synchro_t comm); void MC_pre_modelcheck_comm_determinism(void); void MC_modelcheck_comm_determinism(void); @@ -900,6 +922,15 @@ void* mc_snapshot_read_pointer_region(void* addr, mc_mem_region_t region) xbt_free(req_str); \ } +/** @brief Dump the stacks of the application processes + * + * This functions is currently not used but it is quite convenient + * to call from the debugger. + * + * Does not work when an application thread is running. + */ +void MC_dump_stacks(FILE* file); + SG_END_DECL() #endif