--- sys/imgact.h.orig Mon Sep 18 02:18:46 2000 +++ sys/imgact.h Mon Sep 18 02:19:25 2000 @@ -58,6 +58,7 @@ 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 --- kern/kern_exec.c.orig Fri Jul 14 15:44:45 2000 +++ kern/kern_exec.c Mon Sep 18 02:59:45 2000 @@ -127,6 +127,7 @@ imgp->vp = NULL; imgp->firstpage = NULL; imgp->ps_strings = 0; + imgp->auxarg_size=0; /* * Allocate temporary demand zeroed space for argument and @@ -613,14 +614,21 @@ * If we have a valid auxargs ptr, prepare some room * on the stack. */ - if (imgp->auxargs) + 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 'AT_COUNT*2' is room for the - * ELF Auxargs data. + * arg and env vector sets,and imgp->auxarg_size is room for argument + * of Runtime loader. */ vectp = (char **)(destp - (imgp->argc + imgp->envc + 2 + - AT_COUNT*2) * sizeof(char*)); + imgp->auxarg_size) * sizeof(char*)); + } else /* * The '+ 2' is for the null pointers at the end of each of the