diff options
author | Andreas Jaeger <aj@suse.de> | 2004-06-05 07:54:40 +0000 |
---|---|---|
committer | Andreas Jaeger <aj@suse.de> | 2004-06-05 07:54:40 +0000 |
commit | c2df18a9709c8d726dece41d5b1fee3bcdd0f2be (patch) | |
tree | e6238ec58452027a530168912ce13a89ce3fd52f /sysdeps | |
parent | 29762ba617ffcb44c583226fd19681e246fd074e (diff) | |
download | glibc-c2df18a9709c8d726dece41d5b1fee3bcdd0f2be.zip glibc-c2df18a9709c8d726dece41d5b1fee3bcdd0f2be.tar.gz glibc-c2df18a9709c8d726dece41d5b1fee3bcdd0f2be.tar.bz2 |
(__makecontext): Handle more than 6 args correctly. Based on a patch by Masahide Washizawa.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/x86_64/makecontext.c | 6 |
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 b112994..c763556 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); |