diff options
| -rw-r--r-- | coro.c | 9 | ||||
| -rw-r--r-- | coro.h | 1 | 
2 files changed, 8 insertions, 2 deletions
| @@ -326,9 +326,14 @@ void coro_create (coro_context *ctx,  # elif CORO_ASM    ctx->sp = (volatile void **)(ssize + (char *)sptr); +  /* we try to allow for both functions with and without frame pointers */    *--ctx->sp = (void *)coro_init; -  *--ctx->sp = (void *)coro_init; // this is needed when the prologue saves ebp -  ctx->sp -= NUM_SAVED; +  { +    void **frame = ctx->sp - 1; +    int i; +    for (i = NUM_SAVED; i--; ) +      *--ctx->sp = frame; +  }  # endif @@ -55,6 +55,7 @@   * 2008-03-02 Switched to 2-clause BSD license with GPL exception.   * 2008-04-04 New (but highly unrecommended) pthreads backend.   * 2008-04-24 Reinstate CORO_LOSER (had wrong stack adjustments). + * 2008-10-30 Support assembly method on x86 with and without frame pointer.   */  #ifndef CORO_H | 
