From 638d55dcb8d944f7c74127725f1acb7b8e1449de Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 27 Apr 2015 12:58:15 +0200 Subject: [PATCH] [mc] Move stacks_areas code in mcer_ignore --- src/include/mc/mc.h | 2 +- src/mc/mc_ignore.cpp | 45 ++++++++++++------------------------ src/mc/mcer_ignore.cpp | 9 ++++++++ src/simix/smx_context_sysv.c | 2 +- 4 files changed, 26 insertions(+), 32 deletions(-) diff --git a/src/include/mc/mc.h b/src/include/mc/mc.h index 7cce56c32e..a4d5c274e3 100644 --- a/src/include/mc/mc.h +++ b/src/include/mc/mc.h @@ -83,7 +83,7 @@ XBT_PUBLIC(void) MC_ignore_heap(void *address, size_t size); XBT_PUBLIC(void) MC_remove_ignore_heap(void *address, size_t size); XBT_PUBLIC(void) MC_ignore_local_variable(const char *var_name, const char *frame); XBT_PUBLIC(void) MC_ignore_global_variable(const char *var_name); -XBT_PUBLIC(void) MC_new_stack_area(void *stack, smx_process_t process, void *context, size_t size); +XBT_PUBLIC(void) MC_register_stack_area(void *stack, smx_process_t process, void *context, size_t size); /********************************* Memory *************************************/ XBT_PUBLIC(void) MC_memory_init(void); /* Initialize the memory subsystem */ diff --git a/src/mc/mc_ignore.cpp b/src/mc/mc_ignore.cpp index a9f49f2c86..250c9e4b87 100644 --- a/src/mc/mc_ignore.cpp +++ b/src/mc/mc_ignore.cpp @@ -67,17 +67,6 @@ void MC_ignore_global_variable(const char *name) xbt_die("Unimplemented"); } -// ***** - -extern xbt_dynar_t stacks_areas; - -void MC_stack_area_add(stack_region_t stack_area) -{ - if (stacks_areas == NULL) - stacks_areas = xbt_dynar_new(sizeof(stack_region_t), NULL); - xbt_dynar_push(stacks_areas, &stack_area); -} - /** @brief Register a stack in the model checker * * The stacks are allocated in the heap. The MC handle them especially @@ -89,34 +78,30 @@ void MC_stack_area_add(stack_region_t stack_area) * @param context * @param size Size of the stack */ -void MC_new_stack_area(void *stack, smx_process_t process, void *context, size_t size) +void MC_register_stack_area(void *stack, smx_process_t process, void *context, size_t size) { - xbt_mheap_t heap = mmalloc_set_current_heap(mc_heap); + if (mc_mode != MC_MODE_CLIENT) + return; - stack_region_t region = xbt_new0(s_stack_region_t, 1); - region->address = stack; - region->context = context; - region->size = size; - region->block = + s_stack_region_t region; + memset(®ion, 0, sizeof(region)); + region.address = stack; + region.context = context; + region.size = size; + region.block = ((char *) stack - (char *) std_heap->heapbase) / BLOCKSIZE + 1; #ifdef HAVE_SMPI if (smpi_privatize_global_variables && process) { - region->process_index = smpi_process_index_of_smx_process(process); + region.process_index = smpi_process_index_of_smx_process(process); } else #endif - region->process_index = -1; + region.process_index = -1; - if (mc_mode == MC_MODE_CLIENT) { - s_mc_stack_region_message_t message; - message.type = MC_MESSAGE_STACK_REGION; - message.stack_region = *region; - MC_client_send_message(&message, sizeof(message)); - } - - MC_stack_area_add(region); - - mmalloc_set_current_heap(heap); + s_mc_stack_region_message_t message; + message.type = MC_MESSAGE_STACK_REGION; + message.stack_region = region; + MC_client_send_message(&message, sizeof(message)); } } diff --git a/src/mc/mcer_ignore.cpp b/src/mc/mcer_ignore.cpp index 7e04041f8d..3e8b3bf870 100644 --- a/src/mc/mcer_ignore.cpp +++ b/src/mc/mcer_ignore.cpp @@ -316,4 +316,13 @@ void MC_process_ignore_memory(mc_process_t process, void *addr, size_t size) } } +extern xbt_dynar_t stacks_areas; + +void MC_stack_area_add(stack_region_t stack_area) +{ + if (stacks_areas == NULL) + stacks_areas = xbt_dynar_new(sizeof(stack_region_t), NULL); + xbt_dynar_push(stacks_areas, &stack_area); +} + } diff --git a/src/simix/smx_context_sysv.c b/src/simix/smx_context_sysv.c index 61445553b9..cedbd5164f 100644 --- a/src/simix/smx_context_sysv.c +++ b/src/simix/smx_context_sysv.c @@ -154,7 +154,7 @@ smx_ctx_sysv_create_context(xbt_main_func_t code, int argc, char **argv, #ifdef HAVE_MC if (MC_is_active() && code) { - MC_new_stack_area(context->stack, ((smx_context_t)context)->process, + MC_register_stack_area(context->stack, ((smx_context_t)context)->process, &(context->uc), smx_context_usable_stack_size); } #endif -- 2.20.1