Module Name: src
Committed By: uebayasi
Date: Fri Apr 11 02:27:20 UTC 2014
Modified Files:
src/sys/kern: kern_exec.c
Log Message:
Cache struct exec_package * for readability. No functional changes.
To generate a diff of this commit:
cvs rdiff -u -r1.377 -r1.378 src/sys/kern/kern_exec.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/kern_exec.c
diff -u src/sys/kern/kern_exec.c:1.377 src/sys/kern/kern_exec.c:1.378
--- src/sys/kern/kern_exec.c:1.377 Wed Feb 19 15:23:20 2014
+++ src/sys/kern/kern_exec.c Fri Apr 11 02:27:20 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: kern_exec.c,v 1.377 2014/02/19 15:23:20 maxv Exp $ */
+/* $NetBSD: kern_exec.c,v 1.378 2014/04/11 02:27:20 uebayasi Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.377 2014/02/19 15:23:20 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_exec.c,v 1.378 2014/04/11 02:27:20 uebayasi Exp $");
#include "opt_exec.h"
#include "opt_execfmt.h"
@@ -583,6 +583,7 @@ execve_loadvm(struct lwp *l, const char
char * const *envs, execve_fetch_element_t fetch_element,
struct execve_data * restrict data)
{
+ struct exec_package * const epp = &data->ed_pack;
int error;
struct proc *p;
char *dp, *sp;
@@ -650,29 +651,28 @@ execve_loadvm(struct lwp *l, const char
/*
* initialize the fields of the exec package.
*/
- data->ed_pack.ep_name = path;
- data->ed_pack.ep_kname = data->ed_pathstring;
- data->ed_pack.ep_resolvedname = data->ed_resolvedpathbuf;
- data->ed_pack.ep_hdr = kmem_alloc(exec_maxhdrsz, KM_SLEEP);
- data->ed_pack.ep_hdrlen = exec_maxhdrsz;
- data->ed_pack.ep_hdrvalid = 0;
- data->ed_pack.ep_emul_arg = NULL;
- data->ed_pack.ep_emul_arg_free = NULL;
- memset(&data->ed_pack.ep_vmcmds, 0, sizeof(data->ed_pack.ep_vmcmds));
- data->ed_pack.ep_vap = &data->ed_attr;
- data->ed_pack.ep_flags = 0;
- MD_TOPDOWN_INIT(&data->ed_pack);
- data->ed_pack.ep_emul_root = NULL;
- data->ed_pack.ep_interp = NULL;
- data->ed_pack.ep_esch = NULL;
- data->ed_pack.ep_pax_flags = 0;
- memset(data->ed_pack.ep_machine_arch, 0,
- sizeof(data->ed_pack.ep_machine_arch));
+ epp->ep_name = path;
+ epp->ep_kname = data->ed_pathstring;
+ epp->ep_resolvedname = data->ed_resolvedpathbuf;
+ epp->ep_hdr = kmem_alloc(exec_maxhdrsz, KM_SLEEP);
+ epp->ep_hdrlen = exec_maxhdrsz;
+ epp->ep_hdrvalid = 0;
+ epp->ep_emul_arg = NULL;
+ epp->ep_emul_arg_free = NULL;
+ memset(&epp->ep_vmcmds, 0, sizeof(epp->ep_vmcmds));
+ epp->ep_vap = &data->ed_attr;
+ epp->ep_flags = 0;
+ MD_TOPDOWN_INIT(epp);
+ epp->ep_emul_root = NULL;
+ epp->ep_interp = NULL;
+ epp->ep_esch = NULL;
+ epp->ep_pax_flags = 0;
+ memset(epp->ep_machine_arch, 0, sizeof(epp->ep_machine_arch));
rw_enter(&exec_lock, RW_READER);
/* see if we can run it. */
- if ((error = check_exec(l, &data->ed_pack, data->ed_pathbuf)) != 0) {
+ if ((error = check_exec(l, epp, data->ed_pathbuf)) != 0) {
if (error != ENOENT) {
DPRINTF(("%s: check exec failed %d\n",
__func__, error));
@@ -689,8 +689,8 @@ execve_loadvm(struct lwp *l, const char
data->ed_argc = 0;
/* copy the fake args list, if there's one, freeing it as we go */
- if (data->ed_pack.ep_flags & EXEC_HASARGL) {
- tmpfap = data->ed_pack.ep_fa;
+ if (epp->ep_flags & EXEC_HASARGL) {
+ tmpfap = epp->ep_fa;
while (tmpfap->fa_arg != NULL) {
const char *cp;
@@ -703,8 +703,8 @@ execve_loadvm(struct lwp *l, const char
kmem_free(tmpfap->fa_arg, tmpfap->fa_len);
tmpfap++; data->ed_argc++;
}
- kmem_free(data->ed_pack.ep_fa, data->ed_pack.ep_fa_len);
- data->ed_pack.ep_flags &= ~EXEC_HASARGL;
+ kmem_free(epp->ep_fa, epp->ep_fa_len);
+ epp->ep_flags &= ~EXEC_HASARGL;
}
/* Now get argv & environment */
@@ -715,7 +715,7 @@ execve_loadvm(struct lwp *l, const char
}
/* 'i' will index the argp/envp element to be retrieved */
i = 0;
- if (data->ed_pack.ep_flags & EXEC_SKIPARG)
+ if (epp->ep_flags & EXEC_SKIPARG)
i++;
while (1) {
@@ -769,8 +769,8 @@ execve_loadvm(struct lwp *l, const char
dp = (char *) ALIGN(dp);
- data->ed_szsigcode = data->ed_pack.ep_esch->es_emul->e_esigcode -
- data->ed_pack.ep_esch->es_emul->e_sigcode;
+ data->ed_szsigcode = epp->ep_esch->es_emul->e_esigcode -
+ epp->ep_esch->es_emul->e_sigcode;
#ifdef __MACHINE_STACK_GROWS_UP
/* See big comment lower down */
@@ -780,17 +780,17 @@ execve_loadvm(struct lwp *l, const char
#endif
/* Now check if args & environ fit into new stack */
- if (data->ed_pack.ep_flags & EXEC_32) {
+ if (epp->ep_flags & EXEC_32) {
data->ed_ps_strings_sz = sizeof(struct ps_strings32);
len = ((data->ed_argc + data->ed_envc + 2 +
- data->ed_pack.ep_esch->es_arglen) *
+ epp->ep_esch->es_arglen) *
sizeof(int) + sizeof(int) + dp + RTLD_GAP +
data->ed_szsigcode + data->ed_ps_strings_sz + STACK_PTHREADSPACE)
- data->ed_argp;
} else {
data->ed_ps_strings_sz = sizeof(struct ps_strings);
len = ((data->ed_argc + data->ed_envc + 2 +
- data->ed_pack.ep_esch->es_arglen) *
+ epp->ep_esch->es_arglen) *
sizeof(char *) + sizeof(int) + dp + RTLD_GAP +
data->ed_szsigcode + data->ed_ps_strings_sz + STACK_PTHREADSPACE)
- data->ed_argp;
@@ -804,36 +804,36 @@ execve_loadvm(struct lwp *l, const char
/* make the stack "safely" aligned */
len = STACK_LEN_ALIGN(len, STACK_ALIGNBYTES);
- if (len > data->ed_pack.ep_ssize) {
+ if (len > epp->ep_ssize) {
/* in effect, compare to initial limit */
DPRINTF(("%s: stack limit exceeded %zu\n", __func__, len));
goto bad;
}
/* adjust "active stack depth" for process VSZ */
- data->ed_pack.ep_ssize = len;
+ epp->ep_ssize = len;
return 0;
bad:
/* free the vmspace-creation commands, and release their references */
- kill_vmcmds(&data->ed_pack.ep_vmcmds);
+ kill_vmcmds(&epp->ep_vmcmds);
/* kill any opened file descriptor, if necessary */
- if (data->ed_pack.ep_flags & EXEC_HASFD) {
- data->ed_pack.ep_flags &= ~EXEC_HASFD;
- fd_close(data->ed_pack.ep_fd);
+ if (epp->ep_flags & EXEC_HASFD) {
+ epp->ep_flags &= ~EXEC_HASFD;
+ fd_close(epp->ep_fd);
}
/* close and put the exec'd file */
- vn_lock(data->ed_pack.ep_vp, LK_EXCLUSIVE | LK_RETRY);
- VOP_CLOSE(data->ed_pack.ep_vp, FREAD, l->l_cred);
- vput(data->ed_pack.ep_vp);
+ vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
+ VOP_CLOSE(epp->ep_vp, FREAD, l->l_cred);
+ vput(epp->ep_vp);
pool_put(&exec_pool, data->ed_argp);
freehdr:
- kmem_free(data->ed_pack.ep_hdr, data->ed_pack.ep_hdrlen);
- if (data->ed_pack.ep_emul_root != NULL)
- vrele(data->ed_pack.ep_emul_root);
- if (data->ed_pack.ep_interp != NULL)
- vrele(data->ed_pack.ep_interp);
+ kmem_free(epp->ep_hdr, epp->ep_hdrlen);
+ if (epp->ep_emul_root != NULL)
+ vrele(epp->ep_emul_root);
+ if (epp->ep_interp != NULL)
+ vrele(epp->ep_interp);
rw_exit(&exec_lock);
@@ -857,26 +857,27 @@ execve_loadvm(struct lwp *l, const char
static void
execve_free_data(struct execve_data *data)
{
+ struct exec_package * const epp = &data->ed_pack;
/* free the vmspace-creation commands, and release their references */
- kill_vmcmds(&data->ed_pack.ep_vmcmds);
+ kill_vmcmds(&epp->ep_vmcmds);
/* kill any opened file descriptor, if necessary */
- if (data->ed_pack.ep_flags & EXEC_HASFD) {
- data->ed_pack.ep_flags &= ~EXEC_HASFD;
- fd_close(data->ed_pack.ep_fd);
+ if (epp->ep_flags & EXEC_HASFD) {
+ epp->ep_flags &= ~EXEC_HASFD;
+ fd_close(epp->ep_fd);
}
/* close and put the exec'd file */
- vn_lock(data->ed_pack.ep_vp, LK_EXCLUSIVE | LK_RETRY);
- VOP_CLOSE(data->ed_pack.ep_vp, FREAD, curlwp->l_cred);
- vput(data->ed_pack.ep_vp);
+ vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
+ VOP_CLOSE(epp->ep_vp, FREAD, curlwp->l_cred);
+ vput(epp->ep_vp);
pool_put(&exec_pool, data->ed_argp);
- kmem_free(data->ed_pack.ep_hdr, data->ed_pack.ep_hdrlen);
- if (data->ed_pack.ep_emul_root != NULL)
- vrele(data->ed_pack.ep_emul_root);
- if (data->ed_pack.ep_interp != NULL)
- vrele(data->ed_pack.ep_interp);
+ kmem_free(epp->ep_hdr, epp->ep_hdrlen);
+ if (epp->ep_emul_root != NULL)
+ vrele(epp->ep_emul_root);
+ if (epp->ep_interp != NULL)
+ vrele(epp->ep_interp);
pathbuf_stringcopy_put(data->ed_pathbuf, data->ed_pathstring);
pathbuf_destroy(data->ed_pathbuf);
@@ -887,6 +888,7 @@ static int
execve_runproc(struct lwp *l, struct execve_data * restrict data,
bool no_local_exec_lock, bool is_spawn)
{
+ struct exec_package * const epp = &data->ed_pack;
int error = 0;
struct proc *p;
size_t i;
@@ -915,7 +917,7 @@ execve_runproc(struct lwp *l, struct exe
base_vcp = NULL;
- if (data->ed_pack.ep_flags & EXEC_32)
+ if (epp->ep_flags & EXEC_32)
aip = &arginfo32;
else
aip = &data->ed_arginfo;
@@ -941,30 +943,30 @@ execve_runproc(struct lwp *l, struct exe
* vmspace with another!
*/
if (is_spawn)
- uvmspace_spawn(l, data->ed_pack.ep_vm_minaddr,
- data->ed_pack.ep_vm_maxaddr,
- data->ed_pack.ep_flags & EXEC_TOPDOWN_VM);
+ uvmspace_spawn(l, epp->ep_vm_minaddr,
+ epp->ep_vm_maxaddr,
+ epp->ep_flags & EXEC_TOPDOWN_VM);
else
- uvmspace_exec(l, data->ed_pack.ep_vm_minaddr,
- data->ed_pack.ep_vm_maxaddr,
- data->ed_pack.ep_flags & EXEC_TOPDOWN_VM);
+ uvmspace_exec(l, epp->ep_vm_minaddr,
+ epp->ep_vm_maxaddr,
+ epp->ep_flags & EXEC_TOPDOWN_VM);
/* record proc's vnode, for use by procfs and others */
if (p->p_textvp)
vrele(p->p_textvp);
- vref(data->ed_pack.ep_vp);
- p->p_textvp = data->ed_pack.ep_vp;
+ vref(epp->ep_vp);
+ p->p_textvp = epp->ep_vp;
/* Now map address space */
vm = p->p_vmspace;
- vm->vm_taddr = (void *)data->ed_pack.ep_taddr;
- vm->vm_tsize = btoc(data->ed_pack.ep_tsize);
- vm->vm_daddr = (void*)data->ed_pack.ep_daddr;
- vm->vm_dsize = btoc(data->ed_pack.ep_dsize);
- vm->vm_ssize = btoc(data->ed_pack.ep_ssize);
+ vm->vm_taddr = (void *)epp->ep_taddr;
+ vm->vm_tsize = btoc(epp->ep_tsize);
+ vm->vm_daddr = (void*)epp->ep_daddr;
+ vm->vm_dsize = btoc(epp->ep_dsize);
+ vm->vm_ssize = btoc(epp->ep_ssize);
vm->vm_issize = 0;
- vm->vm_maxsaddr = (void *)data->ed_pack.ep_maxsaddr;
- vm->vm_minsaddr = (void *)data->ed_pack.ep_minsaddr;
+ vm->vm_maxsaddr = (void *)epp->ep_maxsaddr;
+ vm->vm_minsaddr = (void *)epp->ep_minsaddr;
#ifdef PAX_ASLR
pax_aslr_init(l, vm);
@@ -972,16 +974,16 @@ execve_runproc(struct lwp *l, struct exe
/* create the new process's VM space by running the vmcmds */
#ifdef DIAGNOSTIC
- if (data->ed_pack.ep_vmcmds.evs_used == 0)
+ if (epp->ep_vmcmds.evs_used == 0)
panic("%s: no vmcmds", __func__);
#endif
#ifdef DEBUG_EXEC
{
size_t j;
- struct exec_vmcmd *vp = &data->ed_pack.ep_vmcmds.evs_cmds[0];
- DPRINTF(("vmcmds %u\n", data->ed_pack.ep_vmcmds.evs_used));
- for (j = 0; j < data->ed_pack.ep_vmcmds.evs_used; j++) {
+ struct exec_vmcmd *vp = &epp->ep_vmcmds.evs_cmds[0];
+ DPRINTF(("vmcmds %u\n", epp->ep_vmcmds.evs_used));
+ for (j = 0; j < epp->ep_vmcmds.evs_used; j++) {
DPRINTF(("vmcmd[%zu] = vmcmd_map_%s %#"
PRIxVADDR"/%#"PRIxVSIZE" fd@%#"
PRIxVSIZE" prot=0%o flags=%d\n", j,
@@ -998,10 +1000,10 @@ execve_runproc(struct lwp *l, struct exe
}
#endif /* DEBUG_EXEC */
- for (i = 0; i < data->ed_pack.ep_vmcmds.evs_used && !error; i++) {
+ for (i = 0; i < epp->ep_vmcmds.evs_used && !error; i++) {
struct exec_vmcmd *vcp;
- vcp = &data->ed_pack.ep_vmcmds.evs_cmds[i];
+ vcp = &epp->ep_vmcmds.evs_cmds[i];
if (vcp->ev_flags & VMCMD_RELATIVE) {
#ifdef DIAGNOSTIC
if (base_vcp == NULL)
@@ -1018,10 +1020,10 @@ execve_runproc(struct lwp *l, struct exe
if (error) {
size_t j;
struct exec_vmcmd *vp =
- &data->ed_pack.ep_vmcmds.evs_cmds[0];
+ &epp->ep_vmcmds.evs_cmds[0];
DPRINTF(("vmcmds %zu/%u, error %d\n", i,
- data->ed_pack.ep_vmcmds.evs_used, error));
- for (j = 0; j < data->ed_pack.ep_vmcmds.evs_used; j++) {
+ epp->ep_vmcmds.evs_used, error));
+ for (j = 0; j < epp->ep_vmcmds.evs_used; j++) {
DPRINTF(("vmcmd[%zu] = vmcmd_map_%s %#"
PRIxVADDR"/%#"PRIxVSIZE" fd@%#"
PRIxVSIZE" prot=0%o flags=%d\n", j,
@@ -1044,11 +1046,11 @@ execve_runproc(struct lwp *l, struct exe
}
/* free the vmspace-creation commands, and release their references */
- kill_vmcmds(&data->ed_pack.ep_vmcmds);
+ kill_vmcmds(&epp->ep_vmcmds);
- vn_lock(data->ed_pack.ep_vp, LK_EXCLUSIVE | LK_RETRY);
- VOP_CLOSE(data->ed_pack.ep_vp, FREAD, l->l_cred);
- vput(data->ed_pack.ep_vp);
+ vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
+ VOP_CLOSE(epp->ep_vp, FREAD, l->l_cred);
+ vput(epp->ep_vp);
/* if an error happened, deallocate and punt */
if (error) {
@@ -1061,11 +1063,11 @@ execve_runproc(struct lwp *l, struct exe
data->ed_arginfo.ps_nenvstr = data->ed_envc;
/* set command name & other accounting info */
- commandname = strrchr(data->ed_pack.ep_resolvedname, '/');
+ commandname = strrchr(epp->ep_resolvedname, '/');
if (commandname != NULL) {
commandname++;
} else {
- commandname = data->ed_pack.ep_resolvedname;
+ commandname = epp->ep_resolvedname;
}
i = min(strlen(commandname), MAXCOMLEN);
(void)memcpy(p->p_comm, commandname, i);
@@ -1078,7 +1080,7 @@ execve_runproc(struct lwp *l, struct exe
* In the future perhaps we could canonicalize it?
*/
if (data->ed_pathstring[0] == '/')
- (void)strlcpy(data->ed_pack.ep_path = dp, data->ed_pathstring,
+ (void)strlcpy(epp->ep_path = dp, data->ed_pathstring,
MAXPATHLEN);
#ifdef notyet
/*
@@ -1090,20 +1092,20 @@ execve_runproc(struct lwp *l, struct exe
* this can be changed to use the appropriate function.
*/
else if (!(error = vnode_to_path(dp, MAXPATHLEN, p->p_textvp, l, p)))
- data->ed_pack.ep_path = dp;
+ epp->ep_path = dp;
#endif
else {
#ifdef notyet
printf("Cannot get path for pid %d [%s] (error %d)\n",
(int)p->p_pid, p->p_comm, error);
#endif
- data->ed_pack.ep_path = NULL;
+ epp->ep_path = NULL;
PNBUF_PUT(dp);
}
stack = (char *)STACK_ALLOC(STACK_GROW(vm->vm_minsaddr,
STACK_PTHREADSPACE + data->ed_ps_strings_sz + data->ed_szsigcode),
- data->ed_pack.ep_ssize - (data->ed_ps_strings_sz + data->ed_szsigcode));
+ epp->ep_ssize - (data->ed_ps_strings_sz + data->ed_szsigcode));
#ifdef __MACHINE_STACK_GROWS_UP
/*
@@ -1132,25 +1134,25 @@ execve_runproc(struct lwp *l, struct exe
#endif /* __MACHINE_STACK_GROWS_UP */
/* Now copy argc, args & environ to new stack */
- error = (*data->ed_pack.ep_esch->es_copyargs)(l, &data->ed_pack,
+ error = (*epp->ep_esch->es_copyargs)(l, epp,
&data->ed_arginfo, &stack, data->ed_argp);
- if (data->ed_pack.ep_path) {
- PNBUF_PUT(data->ed_pack.ep_path);
- data->ed_pack.ep_path = NULL;
+ if (epp->ep_path) {
+ PNBUF_PUT(epp->ep_path);
+ epp->ep_path = NULL;
}
if (error) {
DPRINTF(("%s: copyargs failed %d\n", __func__, error));
goto exec_abort;
}
/* Move the stack back to original point */
- stack = (char *)STACK_GROW(vm->vm_minsaddr, data->ed_pack.ep_ssize);
+ stack = (char *)STACK_GROW(vm->vm_minsaddr, epp->ep_ssize);
/* fill process ps_strings info */
p->p_psstrp = (vaddr_t)STACK_ALLOC(STACK_GROW(vm->vm_minsaddr,
STACK_PTHREADSPACE), data->ed_ps_strings_sz);
- if (data->ed_pack.ep_flags & EXEC_32) {
+ if (epp->ep_flags & EXEC_32) {
arginfo32.ps_argvstr = (vaddr_t)data->ed_arginfo.ps_argvstr;
arginfo32.ps_nargvstr = data->ed_arginfo.ps_nargvstr;
arginfo32.ps_envstr = (vaddr_t)data->ed_arginfo.ps_envstr;
@@ -1305,10 +1307,10 @@ execve_runproc(struct lwp *l, struct exe
doexechooks(p);
/* setup new registers and do misc. setup. */
- (*data->ed_pack.ep_esch->es_emul->e_setregs)(l, &data->ed_pack,
+ (*epp->ep_esch->es_emul->e_setregs)(l, epp,
(vaddr_t)stack);
- if (data->ed_pack.ep_esch->es_setregs)
- (*data->ed_pack.ep_esch->es_setregs)(l, &data->ed_pack,
+ if (epp->ep_esch->es_setregs)
+ (*epp->ep_esch->es_setregs)(l, epp,
(vaddr_t)stack);
/* Provide a consistent LWP private setting */
@@ -1318,7 +1320,7 @@ execve_runproc(struct lwp *l, struct exe
pcu_discard_all(l);
/* map the process's signal trampoline code */
- if ((error = exec_sigcode_map(p, data->ed_pack.ep_esch->es_emul)) != 0) {
+ if ((error = exec_sigcode_map(p, epp->ep_esch->es_emul)) != 0) {
DPRINTF(("%s: map sigcode failed %d\n", __func__, error));
goto exec_abort;
}
@@ -1328,23 +1330,23 @@ execve_runproc(struct lwp *l, struct exe
/* notify others that we exec'd */
KNOTE(&p->p_klist, NOTE_EXEC);
- kmem_free(data->ed_pack.ep_hdr, data->ed_pack.ep_hdrlen);
+ kmem_free(epp->ep_hdr, epp->ep_hdrlen);
- SDT_PROBE(proc,,,exec_success, data->ed_pack.ep_name, 0, 0, 0, 0);
+ SDT_PROBE(proc,,,exec_success, epp->ep_name, 0, 0, 0, 0);
/* The emulation root will usually have been found when we looked
* for the elf interpreter (or similar), if not look now. */
- if (data->ed_pack.ep_esch->es_emul->e_path != NULL &&
- data->ed_pack.ep_emul_root == NULL)
- emul_find_root(l, &data->ed_pack);
+ if (epp->ep_esch->es_emul->e_path != NULL &&
+ epp->ep_emul_root == NULL)
+ emul_find_root(l, epp);
/* Any old emulation root got removed by fdcloseexec */
rw_enter(&p->p_cwdi->cwdi_lock, RW_WRITER);
- p->p_cwdi->cwdi_edir = data->ed_pack.ep_emul_root;
+ p->p_cwdi->cwdi_edir = epp->ep_emul_root;
rw_exit(&p->p_cwdi->cwdi_lock);
- data->ed_pack.ep_emul_root = NULL;
- if (data->ed_pack.ep_interp != NULL)
- vrele(data->ed_pack.ep_interp);
+ epp->ep_emul_root = NULL;
+ if (epp->ep_interp != NULL)
+ vrele(epp->ep_interp);
/*
* Call emulation specific exec hook. This can setup per-process
@@ -1357,7 +1359,7 @@ execve_runproc(struct lwp *l, struct exe
* resources held previously by this process.
*/
if (p->p_emul && p->p_emul->e_proc_exit
- && p->p_emul != data->ed_pack.ep_esch->es_emul)
+ && p->p_emul != epp->ep_esch->es_emul)
(*p->p_emul->e_proc_exit)(p);
/*
@@ -1372,14 +1374,14 @@ execve_runproc(struct lwp *l, struct exe
* Call exec hook. Emulation code may NOT store reference to anything
* from &pack.
*/
- if (data->ed_pack.ep_esch->es_emul->e_proc_exec)
- (*data->ed_pack.ep_esch->es_emul->e_proc_exec)(p, &data->ed_pack);
+ if (epp->ep_esch->es_emul->e_proc_exec)
+ (*epp->ep_esch->es_emul->e_proc_exec)(p, epp);
/* update p_emul, the old value is no longer needed */
- p->p_emul = data->ed_pack.ep_esch->es_emul;
+ p->p_emul = epp->ep_esch->es_emul;
/* ...and the same for p_execsw */
- p->p_execsw = data->ed_pack.ep_esch;
+ p->p_execsw = epp->ep_esch;
#ifdef __HAVE_SYSCALL_INTERN
(*p->p_emul->e_syscall_intern)(p);
@@ -1446,13 +1448,13 @@ execve_runproc(struct lwp *l, struct exe
uvm_deallocate(&vm->vm_map, VM_MIN_ADDRESS,
VM_MAXUSER_ADDRESS - VM_MIN_ADDRESS);
- exec_free_emul_arg(&data->ed_pack);
+ exec_free_emul_arg(epp);
pool_put(&exec_pool, data->ed_argp);
- kmem_free(data->ed_pack.ep_hdr, data->ed_pack.ep_hdrlen);
- if (data->ed_pack.ep_emul_root != NULL)
- vrele(data->ed_pack.ep_emul_root);
- if (data->ed_pack.ep_interp != NULL)
- vrele(data->ed_pack.ep_interp);
+ kmem_free(epp->ep_hdr, epp->ep_hdrlen);
+ if (epp->ep_emul_root != NULL)
+ vrele(epp->ep_emul_root);
+ if (epp->ep_interp != NULL)
+ vrele(epp->ep_interp);
/* Acquire the sched-state mutex (exit1() will release it). */
if (!is_spawn) {