summaryrefslogtreecommitdiff
path: root/sys/kern/kern_exec.c
diff options
context:
space:
mode:
authorTakanori Watanabe <takawata@FreeBSD.org>2000-09-26 05:09:21 +0000
committerTakanori Watanabe <takawata@FreeBSD.org>2000-09-26 05:09:21 +0000
commitb9a22da4cf6842ae1cace8518e6b77f2a94055d4 (patch)
tree49c7d4fb0b94269c311c756ce17f7b9c07ecee36 /sys/kern/kern_exec.c
parente500f61fde2d6647507a91af013a4dc30f248920 (diff)
Notes
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r--sys/kern/kern_exec.c36
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