diff options
| author | Takanori Watanabe <takawata@FreeBSD.org> | 2000-09-26 05:09:21 +0000 |
|---|---|---|
| committer | Takanori Watanabe <takawata@FreeBSD.org> | 2000-09-26 05:09:21 +0000 |
| commit | b9a22da4cf6842ae1cace8518e6b77f2a94055d4 (patch) | |
| tree | 49c7d4fb0b94269c311c756ce17f7b9c07ecee36 /sys/kern/kern_exec.c | |
| parent | e500f61fde2d6647507a91af013a4dc30f248920 (diff) | |
Notes
Diffstat (limited to 'sys/kern/kern_exec.c')
| -rw-r--r-- | sys/kern/kern_exec.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index d4f2b480c24c..3403e2f3227a 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -128,6 +128,7 @@ execve(p, uap) imgp->vp = NULL; imgp->firstpage = NULL; imgp->ps_strings = 0; + imgp->auxarg_size = 0; /* * Allocate temporary demand zeroed space for argument and @@ -614,21 +615,28 @@ exec_copyout_strings(imgp) * If we have a valid auxargs ptr, prepare some room * on the stack. */ - if (imgp->auxargs) - /* - * The '+ 2' is for the null pointers at the end of each of the - * arg and env vector sets, and 'AT_COUNT*2' is room for the - * ELF Auxargs data. - */ - vectp = (char **)(destp - (imgp->argc + imgp->envc + 2 + - AT_COUNT*2) * sizeof(char*)); - else - /* - * The '+ 2' is for the null pointers at the end of each of the - * arg and env vector sets - */ + if (imgp->auxargs) { + /* + * 'AT_COUNT*2' is size for the ELF Auxargs data. This is for + * lower compatibility. + */ + imgp->auxarg_size = (imgp->auxarg_size) ? imgp->auxarg_size + : (AT_COUNT * 2); + /* + * The '+ 2' is for the null pointers at the end of each of + * the arg and env vector sets,and imgp->auxarg_size is room + * for argument of Runtime loader. + */ + vectp = (char **) (destp - (imgp->argc + imgp->envc + 2 + + imgp->auxarg_size) * sizeof(char *)); + + } else + /* + * The '+ 2' is for the null pointers at the end of each of + * the arg and env vector sets + */ vectp = (char **) - (destp - (imgp->argc + imgp->envc + 2) * sizeof(char*)); + (destp - (imgp->argc + imgp->envc + 2) * sizeof(char *)); /* * vectp also becomes our initial stack base |
