Make size of dynamic loader argument variable to support
various executable file format. Reviewed by: peter
This commit is contained in:
parent
e500f61fde
commit
b9a22da4cf
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=66379
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user