diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2003-03-21 19:49:34 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2003-03-21 19:49:34 +0000 |
| commit | 43cf129c99e75e559f33da20e0a1089e193033e0 (patch) | |
| tree | 43550d8fe91a41ee3225185c991b731b4201205e /sys/alpha/linux | |
| parent | 868d8b6286b3ef1e3a6d0912bdd3e775ff510397 (diff) | |
Notes
Diffstat (limited to 'sys/alpha/linux')
| -rw-r--r-- | sys/alpha/linux/linux_sysvec.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/sys/alpha/linux/linux_sysvec.c b/sys/alpha/linux/linux_sysvec.c index 9e9e1f97536b..40deced2cf01 100644 --- a/sys/alpha/linux/linux_sysvec.c +++ b/sys/alpha/linux/linux_sysvec.c @@ -81,25 +81,26 @@ SET_DECLARE(linux_ioctl_handler_set, struct linux_ioctl_handler); void osendsig(sig_t catcher, int sig, sigset_t *mask, u_long code); -static int elf_linux_fixup(long **stack_base, +static int elf_linux_fixup(register_t **stack_base, struct image_params *iparams); static int exec_linux_imgact_try(struct image_params *iparams); static int -elf_linux_fixup(long **stack_base, struct image_params *imgp) +elf_linux_fixup(register_t **stack_base, struct image_params *imgp) { - long *pos; Elf64_Auxargs *args; + register_t *pos; + KASSERT(curthread->td_proc == imgp->proc && + (curthread->td_proc->p_flag & P_THREADED) == 0, + ("unsafe elf_linux_fixup(), should be curproc")); args = (Elf64_Auxargs *)imgp->auxargs; pos = *stack_base + (imgp->argc + imgp->envc + 2); - if (args->trace) { + if (args->trace) AUXARGS_ENTRY(pos, AT_DEBUG, 1); - } - if (args->execfd != -1) { + if (args->execfd != -1) AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd); - } AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); AUXARGS_ENTRY(pos, AT_PHENT, args->phent); AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum); @@ -107,19 +108,17 @@ elf_linux_fixup(long **stack_base, struct image_params *imgp) AUXARGS_ENTRY(pos, AT_FLAGS, args->flags); AUXARGS_ENTRY(pos, AT_ENTRY, args->entry); AUXARGS_ENTRY(pos, AT_BASE, args->base); - PROC_LOCK(imgp->proc); AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid); AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid); AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid); AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid); - PROC_UNLOCK(imgp->proc); AUXARGS_ENTRY(pos, AT_NULL, 0); free(imgp->auxargs, M_TEMP); imgp->auxargs = NULL; (*stack_base)--; - **stack_base = (long)imgp->argc; + **stack_base = (register_t)imgp->argc; return 0; } |
