-/********************************** DPOR for safety property **************************************/
-
-typedef enum {
- e_mc_reduce_unset,
- e_mc_reduce_none,
- e_mc_reduce_dpor
-} e_mc_reduce_t;
-
-extern e_mc_reduce_t mc_reduce_kind;
-extern mc_global_t initial_state_safety;
-extern xbt_fifo_t mc_stack_safety;
-extern xbt_dict_t first_enabled_state;
-
-void MC_dpor_init(void);
-void MC_dpor(void);
-
-typedef struct s_mc_visited_state{
- mc_snapshot_t system_state;
- size_t heap_bytes_used;
- int nb_processes;
- int num;
- int other_num; // dot_output for
-}s_mc_visited_state_t, *mc_visited_state_t;
-
-
-/********************************** Double-DFS for liveness property **************************************/
-
-extern xbt_fifo_t mc_stack_liveness;
-extern mc_global_t initial_state_liveness;
-extern xbt_automaton_t _mc_property_automaton;
-extern int compare;
-
-typedef struct s_mc_pair{
- int num;
- int search_cycle;
- mc_state_t graph_state; /* System state included */
- xbt_automaton_state_t automaton_state;
- xbt_dynar_t atomic_propositions;
- int requests;
-}s_mc_pair_t, *mc_pair_t;
-
-typedef struct s_mc_visited_pair{
- int num;
- int other_num; /* Dot output for */
- int acceptance_pair;
- mc_state_t graph_state; /* System state included */
- xbt_automaton_state_t automaton_state;
- xbt_dynar_t atomic_propositions;
- size_t heap_bytes_used;
- int nb_processes;
- int acceptance_removed;
- int visited_removed;
-}s_mc_visited_pair_t, *mc_visited_pair_t;
-
-mc_pair_t MC_pair_new(void);
-void MC_pair_delete(mc_pair_t);
-void mc_pair_free_voidp(void *p);
-mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions);
-void MC_visited_pair_delete(mc_visited_pair_t p);
-
-void MC_ddfs_init(void);
-void MC_ddfs(void);
-void MC_show_stack_liveness(xbt_fifo_t stack);
-void MC_dump_stack_liveness(xbt_fifo_t stack);
-
-
-/********************************** Variables with DWARF **********************************/
-
-#define MC_OBJECT_INFO_EXECUTABLE 1
-
-struct s_mc_object_info {
- size_t flags;
- char* file_name;
- char *start_exec, *end_exec; // Executable segment
- char *start_rw, *end_rw; // Read-write segment
- char *start_ro, *end_ro; // read-only segment
- xbt_dict_t local_variables; // xbt_dict_t<frame_name, dw_frame_t>
- xbt_dynar_t global_variables; // xbt_dynar_t<dw_variable_t>
- xbt_dict_t types; // xbt_dict_t<origin as hexadecimal string, dw_type_t>
- xbt_dict_t types_by_name; // xbt_dict_t<name, dw_type_t> (full defined type only)
-
- // Here we sort the minimal information for an efficient (and cache-efficient)
- // lookup of a function given an instruction pointer.
- // The entries are sorted by low_pc and a binary search can be used to look them up.
- xbt_dynar_t functions_index;
-};
-
-mc_object_info_t MC_new_object_info(void);
-mc_object_info_t MC_find_object_info(memory_map_t maps, char* name, int executable);
-void MC_free_object_info(mc_object_info_t* p);
-
-void MC_dwarf_get_variables(mc_object_info_t info);
-void MC_dwarf_get_variables_libdw(mc_object_info_t info);
-const char* MC_dwarf_attrname(int attr);
-const char* MC_dwarf_tagname(int tag);
-
-dw_frame_t MC_find_function_by_ip(void* ip);
-mc_object_info_t MC_ip_find_object_info(void* ip);
-
-extern mc_object_info_t mc_libsimgrid_info;
-extern mc_object_info_t mc_binary_info;
-
-void MC_find_object_address(memory_map_t maps, mc_object_info_t result);
-void MC_post_process_types(mc_object_info_t info);
-
-typedef enum {
- e_dw_loclist,
- e_dw_register,
- e_dw_bregister_op,
- e_dw_lit,
- e_dw_fbregister_op,
- e_dw_piece,
- e_dw_arithmetic,
- e_dw_plus_uconst,
- e_dw_compose,
- e_dw_deref,
- e_dw_uconstant,
- e_dw_sconstant,
- e_dw_unsupported
-} e_dw_location_type;
-
-typedef struct s_dw_location{
- e_dw_location_type type;
- union{
-
- xbt_dynar_t loclist;
-
- int reg;
-
- struct{
- unsigned int reg;
- int offset;
- }breg_op;
-
- unsigned int lit;
-
- int fbreg_op;
-
- int piece;
-
- unsigned short int deref_size;
-
- xbt_dynar_t compose;
-
- char *arithmetic;
-
- struct{
- int bytes;
- long unsigned int value;
- }uconstant;
-
- struct{
- int bytes;
- long signed int value;
- }sconstant;
-
- unsigned int plus_uconst;
-
- }location;
-}s_dw_location_t, *dw_location_t;
-
-typedef struct s_dw_location_entry{
- void* lowpc;
- void* highpc;
- dw_location_t location;
-}s_dw_location_entry_t, *dw_location_entry_t;
-
-typedef struct s_dw_variable{
- Dwarf_Off dwarf_offset; /* Global offset of the field. */
- int global;
- char *name;
- char *type_origin;
-
- // Use either of:
- dw_location_t location;
- void* address;
-
-}s_dw_variable_t, *dw_variable_t;
-
-struct s_dw_frame{
- char *name;
- void *low_pc;
- void *high_pc;
- dw_location_t frame_base;
- xbt_dynar_t /* <dw_variable_t> */ variables; /* Cannot use dict, there may be several variables with the same name (in different lexical blocks)*/
- unsigned long int start; /* DWARF offset of the subprogram */
- unsigned long int end; /* Dwarf offset of the next sibling */
-};
-
-struct s_mc_function_index_item {
- void* low_pc, *high_pc;
- dw_frame_t function;
-};
-
-void dw_type_free(dw_type_t t);
-void dw_variable_free(dw_variable_t v);
-void dw_variable_free_voidp(void *t);
-
-void MC_dwarf_register_global_variable(mc_object_info_t info, dw_variable_t variable);
-void MC_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void MC_dwarf_register_non_global_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void MC_dwarf_register_variable(mc_object_info_t info, dw_frame_t frame, dw_variable_t variable);
-void* MC_object_base_address(mc_object_info_t info);
-
-/********************************** DWARF **********************************/
-
-Dwarf_Off MC_dwarf_resolve_location(unw_cursor_t* c, dw_location_t location, void* frame_pointer_address);
-void* mc_find_frame_base(void* ip, dw_frame_t frame, unw_cursor_t* unw_cursor);
-