A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Align stack on a 16 bytes boundary in raw_makecontext.
[simgrid.git]
/
src
/
simix
/
smx_context_raw.c
diff --git
a/src/simix/smx_context_raw.c
b/src/simix/smx_context_raw.c
index
829f47e
..
f380e90
100644
(file)
--- a/
src/simix/smx_context_raw.c
+++ b/
src/simix/smx_context_raw.c
@@
-1,6
+1,6
@@
/* context_raw - fast context switching inspired from System V ucontexts */
/* context_raw - fast context switching inspired from System V ucontexts */
-/* Copyright (c) 2009-201
3
. The SimGrid Team.
+/* Copyright (c) 2009-201
4
. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
@@
-62,6
+62,7
@@
__asm__ (
#endif
" mov %rdi,%rax\n" /* stack */
" add %rsi,%rax\n" /* size */
#endif
" mov %rdi,%rax\n" /* stack */
" add %rsi,%rax\n" /* size */
+ " andq $-16, %rax\n" /* align stack */
" movq $0, -8(%rax)\n" /* @return for func */
" mov %rdx,-16(%rax)\n" /* func */
" mov %rcx,-24(%rax)\n" /* arg/rdi */
" movq $0, -8(%rax)\n" /* @return for func */
" mov %rdx,-16(%rax)\n" /* func */
" mov %rcx,-24(%rax)\n" /* arg/rdi */
@@
-137,6
+138,7
@@
__asm__ (
#endif
" movl 4(%esp),%eax\n" /* stack */
" addl 8(%esp),%eax\n" /* size */
#endif
" movl 4(%esp),%eax\n" /* stack */
" addl 8(%esp),%eax\n" /* size */
+ " andl $-16, %eax\n" /* align stack */
" movl 12(%esp),%ecx\n" /* func */
" movl 16(%esp),%edx\n" /* arg */
" movl %edx, -4(%eax)\n"
" movl 12(%esp),%ecx\n" /* func */
" movl 16(%esp),%edx\n" /* arg */
" movl %edx, -4(%eax)\n"
@@
-210,7
+212,7
@@
static char new_sr = 0;
static void smx_ctx_raw_wrapper(smx_ctx_raw_t context);
static int smx_ctx_raw_factory_finalize(smx_context_factory_t *factory);
static smx_context_t smx_ctx_raw_create_context(xbt_main_func_t code, int argc,
static void smx_ctx_raw_wrapper(smx_ctx_raw_t context);
static int smx_ctx_raw_factory_finalize(smx_context_factory_t *factory);
static smx_context_t smx_ctx_raw_create_context(xbt_main_func_t code, int argc,
- char **argv, void_pfn_smxprocess_t cleanup_func,
void *data
);
+ char **argv, void_pfn_smxprocess_t cleanup_func,
smx_process_t process
);
static void smx_ctx_raw_free(smx_context_t context);
static void smx_ctx_raw_wrapper(smx_ctx_raw_t context);
static void smx_ctx_raw_stop(smx_context_t context);
static void smx_ctx_raw_free(smx_context_t context);
static void smx_ctx_raw_wrapper(smx_ctx_raw_t context);
static void smx_ctx_raw_stop(smx_context_t context);
@@
-296,12
+298,12
@@
static int smx_ctx_raw_factory_finalize(smx_context_factory_t *factory)
* \param argv arguments to pass to the main function
* \param cleanup_func a function to call to free the user data when the
* context finished
* \param argv arguments to pass to the main function
* \param cleanup_func a function to call to free the user data when the
* context finished
- * \param
data user data
+ * \param
process SIMIX process
*/
static smx_context_t
smx_ctx_raw_create_context(xbt_main_func_t code, int argc, char **argv,
*/
static smx_context_t
smx_ctx_raw_create_context(xbt_main_func_t code, int argc, char **argv,
- void_pfn_smxprocess_t cleanup_func,
-
void *data
)
+
void_pfn_smxprocess_t cleanup_func,
+
smx_process_t process
)
{
smx_ctx_raw_t context =
{
smx_ctx_raw_t context =
@@
-311,12
+313,12
@@
smx_ctx_raw_create_context(xbt_main_func_t code, int argc, char **argv,
argc,
argv,
cleanup_func,
argc,
argv,
cleanup_func,
-
data
);
+
process
);
/* if the user provided a function for the process then use it,
otherwise it is the context for maestro */
if (code) {
/* if the user provided a function for the process then use it,
otherwise it is the context for maestro */
if (code) {
- context->malloced_stack =
xbt_malloc0(smx_context_stack_size
);
+ context->malloced_stack =
SIMIX_context_stack_new(
);
context->stack_top =
raw_makecontext(context->malloced_stack, smx_context_stack_size,
(void_f_pvoid_t) smx_ctx_raw_wrapper, context);
context->stack_top =
raw_makecontext(context->malloced_stack, smx_context_stack_size,
(void_f_pvoid_t) smx_ctx_raw_wrapper, context);
@@
-328,7
+330,7
@@
smx_ctx_raw_create_context(xbt_main_func_t code, int argc, char **argv,
#endif /* HAVE_VALGRIND_VALGRIND_H */
} else {
#endif /* HAVE_VALGRIND_VALGRIND_H */
} else {
- if(
data
!= NULL && raw_maestro_context==NULL)
+ if(
process
!= NULL && raw_maestro_context==NULL)
raw_maestro_context = context;
if(MC_is_active())
raw_maestro_context = context;
if(MC_is_active())
@@
-352,7
+354,8
@@
static void smx_ctx_raw_free(smx_context_t context)
context)->valgrind_stack_id);
#endif /* HAVE_VALGRIND_VALGRIND_H */
context)->valgrind_stack_id);
#endif /* HAVE_VALGRIND_VALGRIND_H */
- free(((smx_ctx_raw_t) context)->malloced_stack);
+ SIMIX_context_stack_delete(((smx_ctx_raw_t) context)->malloced_stack);
+
}
smx_ctx_base_free(context);
}
}
smx_ctx_base_free(context);
}