#include "mc_object_info.h"
#include "mc_address_space.h"
#include "mc_unw.h"
+#include "mc_snapshot.h"
+#include "mc_ignore.h"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_process, mc,
"MC process information");
static void MC_process_init_memory_map_info(mc_process_t process);
static void MC_process_open_memory_file(mc_process_t process);
+// ***** Destructor callbacks
+
+// ***** mc_address_space methods for mc_process
+
static mc_process_t MC_process_get_process(mc_process_t p) {
return p;
}
return p->address_space_class == &mc_process_class;
}
-void MC_process_init(mc_process_t process, pid_t pid)
+// ***** mc_process
+
+void MC_process_init(mc_process_t process, pid_t pid, int sockfd)
{
process->address_space.address_space_class = &mc_process_class;
process->process_flags = MC_PROCESS_NO_FLAG;
+ process->socket = sockfd;
process->pid = pid;
if (pid==getpid())
process->process_flags |= MC_PROCESS_SELF_FLAG;
+ process->running = true;
+ process->status = 0;
process->memory_map = MC_get_memory_map(pid);
process->memory_file = -1;
process->cache_flags = 0;
&process->heap_address, std_heap_var->address, sizeof(struct mdesc*),
MC_PROCESS_INDEX_DISABLED);
+ process->checkpoint_ignore = MC_checkpoint_ignore_new();
+
process->unw_addr_space = unw_create_addr_space(&mc_unw_accessors , __BYTE_ORDER);
if (process->process_flags & MC_PROCESS_SELF_FLAG) {
process->unw_underlying_addr_space = unw_local_addr_space;
process->maestro_stack_start = NULL;
process->maestro_stack_end = NULL;
+ xbt_dynar_free(&process->checkpoint_ignore);
+
size_t i;
for (i=0; i!=process->object_infos_size; ++i) {
MC_free_object_info(&process->object_infos[i]);
/** @brief Finds the range of the different memory segments and binary paths */
static void MC_process_init_memory_map_info(mc_process_t process)
{
- XBT_INFO("Get debug information ...");
+ XBT_DEBUG("Get debug information ...");
process->maestro_stack_start = NULL;
process->maestro_stack_end = NULL;
process->object_infos = NULL;
for (i=0; i!=process->object_infos_size; ++i)
MC_post_process_object_info(process, process->object_infos[i]);
- xbt_assert(process->maestro_stack_start, "maestro_stack_start");
- xbt_assert(process->maestro_stack_end, "maestro_stack_end");
+ xbt_assert(process->maestro_stack_start, "Did not find maestro_stack_start");
+ xbt_assert(process->maestro_stack_end, "Did not find maestro_stack_end");
- XBT_INFO("Get debug information done !");
+ XBT_DEBUG("Get debug information done !");
}
mc_object_info_t MC_process_find_object_info(mc_process_t process, const void *addr)