From c2df18a9709c8d726dece41d5b1fee3bcdd0f2be Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Sat, 5 Jun 2004 07:54:40 +0000 Subject: (__makecontext): Handle more than 6 args correctly. Based on a patch by Masahide Washizawa. --- sysdeps/unix/sysv/linux/x86_64/makecontext.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/unix/sysv/linux/x86_64/makecontext.c b/sysdeps/unix/sysv/linux/x86_64/makecontext.c index b1129943ab..c763556b93 100644 --- a/sysdeps/unix/sysv/linux/x86_64/makecontext.c +++ b/sysdeps/unix/sysv/linux/x86_64/makecontext.c @@ -58,11 +58,11 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) /* Generate room on stack for parameter if needed and uc_link. */ sp = (long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); - sp -= (argc > 6 ? argc : 0) + 1; + sp -= (argc > 6 ? argc - 6 : 0) + 1; /* Align stack and make space for trampoline address. */ sp = (long *) ((((long) sp) & -16L) - 8); - idx_uc_link = (argc > 6 ? argc : 0) + 1; + idx_uc_link = (argc > 6 ? argc - 6 : 0) + 1; /* Setup context ucp. */ /* Address to jump to. */ @@ -100,7 +100,7 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) break; default: /* Put value on stack. */ - sp[8 + (i - 5)] = va_arg (ap, int); + sp[(i - 5)] = va_arg (ap, int); break; } va_end (ap); -- cgit 1.4.1