- ctx_addr.addr = context;
- makecontext(&context->uc, (void (*)())smx_ctx_sysv_wrapper,
- CTX_ADDR_LEN, CTX_ADDR_SPLIT(ctx_addr));
+ 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);
+ }