+ context->uc.uc_link = NULL;
+
+ context->uc.uc_stack.ss_sp =
+ pth_skaddr_makecontext(context->stack, smx_context_stack_size);
+
+ context->uc.uc_stack.ss_size =
+ pth_sksize_makecontext(context->stack, smx_context_stack_size);
+
+#ifdef HAVE_VALGRIND_VALGRIND_H
+ context->valgrind_stack_id =
+ VALGRIND_STACK_REGISTER(context->uc.uc_stack.ss_sp,
+ ((char *) context->uc.uc_stack.ss_sp) +
+ context->uc.uc_stack.ss_size);
+#endif /* HAVE_VALGRIND_VALGRIND_H */
+ memcpy(ctx_addr, &context, sizeof(smx_ctx_sysv_t));
+ switch (CTX_ADDR_LEN) {
+ case 1:
+ makecontext(&context->uc, (void (*)())smx_ctx_sysv_wrapper,
+ 1, ctx_addr[0]);
+ break;
+ case 2:
+ makecontext(&context->uc, (void (*)())smx_ctx_sysv_wrapper,
+ 2, ctx_addr[0], ctx_addr[1]);
+ break;
+ default:
+ xbt_die("Ucontexts are not supported on this arch yet (addr len = %zu/%zu = %zu)",
+ sizeof(smx_ctx_sysv_t), sizeof(int), CTX_ADDR_LEN);
+ }
+ } else {
+ sysv_maestro_context = context;
+ }
+
+ if(MC_is_active() && code)
+ MC_new_stack_area(context, ((smx_process_t)((smx_context_t)context)->data)->name, &(context->uc), size);
+
+ return (smx_context_t) context;