Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Initial support MC record/replay
[simgrid.git] / src / mc / mc_private.h
index a73fb2b..1348243 100644 (file)
@@ -16,6 +16,7 @@
 #include <elfutils/libdw.h>
 
 #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