mc_region_type_t region_type, void *start_addr, void* permanent_addr, size_t size,
mc_mem_region_t ref_reg)
{
- size_t process_count = smpi_process_count();
+ size_t process_count = MC_smpi_process_count();
mc_mem_region_t region = xbt_new(s_mc_mem_region_t, 1);
region->region_type = region_type;
region->storage_type = MC_REGION_STORAGE_TYPE_PRIVATIZED;
mc_mem_region_t region;
const bool privatization_aware = MC_object_info_is_privatized(object_info);
- if (privatization_aware && smpi_process_count())
+ if (privatization_aware && MC_smpi_process_count())
region = MC_region_new_privatized(type, start_addr, permanent_addr, size, ref_reg);
else
region = MC_region_new(type, start_addr, permanent_addr, size, ref_reg);
MC_process_get_malloc_info(process));
#ifdef HAVE_SMPI
- if (smpi_privatize_global_variables && smpi_process_count()) {
+ if (smpi_privatize_global_variables && MC_smpi_process_count()) {
// FIXME, cross-process
snapshot->privatization_index = smpi_loaded_page;
} else
#include "mc_safety.h"
#include "mc_liveness.h"
#include "mc_private.h"
+#include "mc_smx.h"
#ifdef HAVE_SMPI
#include "smpi/private.h"
return 1;
}
- size_t process_count = smpi_process_count();
+ size_t process_count = MC_smpi_process_count();
xbt_assert(process_count == r1->privatized.regions_count
&& process_count == r2->privatized.regions_count);
}
return info->name;
}
+
+int MC_smpi_process_count(void)
+{
+ if (MC_process_is_self(&mc_model_checker->process))
+ return smpi_process_count();
+ else {
+ int res;
+ MC_process_read_variable(&mc_model_checker->process, "process_count",
+ &res, sizeof(res));
+ return res;
+ }
+}
#include <xbt/log.h>
#include <simgrid/simix.h>
+#include "smpi/private.h"
+
#include "mc_process.h"
#include "mc_protocol.h"
/** Execute a given simcall */
void MC_simcall_handle(smx_simcall_t req, int value);
+int MC_smpi_process_count(void);
/* ***** Resolve (local/MCer structure from remote/MCed addresses) ***** */