--- libcoro/coro.c 2005/08/30 21:32:17 1.17 +++ libcoro/coro.c 2005/10/19 19:04:24 1.19 @@ -40,6 +40,9 @@ # elif __i386__ && CORO_LINUX # define STACK_ADJUST_PTR(sp,ss) ((char *)(sp) + (ss)) # define STACK_ADJUST_SIZE(sp,ss) (ss) +# elif __amd64__ && CORO_LINUX +# define STACK_ADJUST_PTR(sp,ss) ((char *)(sp) + (ss) - 8) +# define STACK_ADJUST_SIZE(sp,ss) (ss) # else # define STACK_ADJUST_PTR(sp,ss) (sp) # define STACK_ADJUST_SIZE(sp,ss) (ss) @@ -164,7 +167,7 @@ if (~ostk.ss_flags & SS_DISABLE) sigaltstack (&ostk, 0); - sigaction (SIGUSR1, &osa, 0); + sigaction (SIGUSR2, &osa, 0); sigprocmask (SIG_SETMASK, &osig, 0); @@ -190,7 +193,7 @@ ctx->env[0].__jmpbuf[0].__sp = (void *)((char *)sptr + ssize); #elif defined(__GNU_LIBRARY__) && defined(__amd64__) ctx->env[0].__jmpbuf[JB_PC] = (long)coro_init; - ctx->env[0].__jmpbuf[JB_RSP] = (long)((char *)sptr + ssize); + ctx->env[0].__jmpbuf[JB_RSP] = (long)STACK_ADJUST_PTR (sptr,ssize); #else #error "linux libc or architecture not supported" #endif