Make size of dynamic loader argument variable to support

various executable file format.

Reviewed by:	peter
This commit is contained in:
Takanori Watanabe 2000-09-26 05:09:21 +00:00
parent e500f61fde
commit b9a22da4cf
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=66379
2 changed files with 23 additions and 14 deletions

View File

@ -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

View File

@ -58,6 +58,7 @@ struct image_params {
struct vm_page *firstpage; /* first page that we mapped */
char *fname; /* pointer to filename of executable (user space) */
unsigned long ps_strings; /* PS_STRINGS for BSD/OS binaries */
size_t auxarg_size;
};
#ifdef _KERNEL