summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2004-06-05 07:54:40 +0000
committerAndreas Jaeger <aj@suse.de>2004-06-05 07:54:40 +0000
commitc2df18a9709c8d726dece41d5b1fee3bcdd0f2be (patch)
treee6238ec58452027a530168912ce13a89ce3fd52f
parent29762ba617ffcb44c583226fd19681e246fd074e (diff)
downloadglibc-c2df18a9709c8d726dece41d5b1fee3bcdd0f2be.tar.gz
(__makecontext): Handle more than 6 args correctly. Based on a patch by Masahide Washizawa.
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/makecontext.c6
1 files changed, 3 insertions, 3 deletions
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);