Deleted Added
full compact
linux_sysvec.c (111797) linux_sysvec.c (111798)
1/*-
2 * Copyright (c) 1994-1996 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
1/*-
2 * Copyright (c) 1994-1996 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer
9 * notice, this list of conditions and the following disclaimer
10 * in this position and unchanged.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
10 * in this position and unchanged.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD: head/sys/i386/linux/linux_sysvec.c 111797 2003-03-03 09:14:26Z des $
28 * $FreeBSD: head/sys/i386/linux/linux_sysvec.c 111798 2003-03-03 09:17:12Z des $
29 */
30
31/* XXX we use functions that might not exist. */
32#include "opt_compat.h"
33
34#ifndef COMPAT_43
35#error "Unable to compile Linux-emulator due to missing COMPAT_43 option!"
36#endif

--- 73 unchanged lines hidden (view full) ---

110 caddr_t *params);
111static void linux_sendsig(sig_t catcher, int sig, sigset_t *mask,
112 u_long code);
113
114/*
115 * Linux syscalls return negative errno's, we do positive and map them
116 */
117static int bsd_to_linux_errno[ELAST + 1] = {
29 */
30
31/* XXX we use functions that might not exist. */
32#include "opt_compat.h"
33
34#ifndef COMPAT_43
35#error "Unable to compile Linux-emulator due to missing COMPAT_43 option!"
36#endif

--- 73 unchanged lines hidden (view full) ---

110 caddr_t *params);
111static void linux_sendsig(sig_t catcher, int sig, sigset_t *mask,
112 u_long code);
113
114/*
115 * Linux syscalls return negative errno's, we do positive and map them
116 */
117static int bsd_to_linux_errno[ELAST + 1] = {
118 -0, -1, -2, -3, -4, -5, -6, -7, -8, -9,
119 -10, -35, -12, -13, -14, -15, -16, -17, -18, -19,
120 -20, -21, -22, -23, -24, -25, -26, -27, -28, -29,
121 -30, -31, -32, -33, -34, -11,-115,-114, -88, -89,
122 -90, -91, -92, -93, -94, -95, -96, -97, -98, -99,
118 -0, -1, -2, -3, -4, -5, -6, -7, -8, -9,
119 -10, -35, -12, -13, -14, -15, -16, -17, -18, -19,
120 -20, -21, -22, -23, -24, -25, -26, -27, -28, -29,
121 -30, -31, -32, -33, -34, -11,-115,-114, -88, -89,
122 -90, -91, -92, -93, -94, -95, -96, -97, -98, -99,
123 -100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
124 -110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
125 -116, -66, -6, -6, -6, -6, -6, -37, -38, -9,
123 -100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
124 -110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
125 -116, -66, -6, -6, -6, -6, -6, -37, -38, -9,
126 -6, -6, -43, -42, -75, -6, -84
126 -6, -6, -43, -42, -75, -6, -84
127};
128
129int bsd_to_linux_signal[LINUX_SIGTBLSZ] = {
130 LINUX_SIGHUP, LINUX_SIGINT, LINUX_SIGQUIT, LINUX_SIGILL,
131 LINUX_SIGTRAP, LINUX_SIGABRT, 0, LINUX_SIGFPE,
132 LINUX_SIGKILL, LINUX_SIGBUS, LINUX_SIGSEGV, LINUX_SIGSYS,
133 LINUX_SIGPIPE, LINUX_SIGALRM, LINUX_SIGTERM, LINUX_SIGURG,
134 LINUX_SIGSTOP, LINUX_SIGTSTP, LINUX_SIGCONT, LINUX_SIGCHLD,

--- 90 unchanged lines hidden (view full) ---

225 return 0;
226}
227
228static int
229elf_linux_fixup(register_t **stack_base, struct image_params *imgp)
230{
231 Elf32_Auxargs *args = (Elf32_Auxargs *)imgp->auxargs;
232 register_t *pos;
127};
128
129int bsd_to_linux_signal[LINUX_SIGTBLSZ] = {
130 LINUX_SIGHUP, LINUX_SIGINT, LINUX_SIGQUIT, LINUX_SIGILL,
131 LINUX_SIGTRAP, LINUX_SIGABRT, 0, LINUX_SIGFPE,
132 LINUX_SIGKILL, LINUX_SIGBUS, LINUX_SIGSEGV, LINUX_SIGSYS,
133 LINUX_SIGPIPE, LINUX_SIGALRM, LINUX_SIGTERM, LINUX_SIGURG,
134 LINUX_SIGSTOP, LINUX_SIGTSTP, LINUX_SIGCONT, LINUX_SIGCHLD,

--- 90 unchanged lines hidden (view full) ---

225 return 0;
226}
227
228static int
229elf_linux_fixup(register_t **stack_base, struct image_params *imgp)
230{
231 Elf32_Auxargs *args = (Elf32_Auxargs *)imgp->auxargs;
232 register_t *pos;
233
234 pos = *stack_base + (imgp->argc + imgp->envc + 2);
235
233
234 pos = *stack_base + (imgp->argc + imgp->envc + 2);
235
236 if (args->trace)
237 AUXARGS_ENTRY(pos, AT_DEBUG, 1);
238 if (args->execfd != -1)
239 AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd);
240 AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
241 AUXARGS_ENTRY(pos, AT_PHENT, args->phent);
242 AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum);
243 AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz);
244 AUXARGS_ENTRY(pos, AT_FLAGS, args->flags);
245 AUXARGS_ENTRY(pos, AT_ENTRY, args->entry);
246 AUXARGS_ENTRY(pos, AT_BASE, args->base);
247 PROC_LOCK(imgp->proc);
248 AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid);
249 AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid);
250 AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid);
251 AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid);
252 PROC_UNLOCK(imgp->proc);
253 AUXARGS_ENTRY(pos, AT_NULL, 0);
236 if (args->trace)
237 AUXARGS_ENTRY(pos, AT_DEBUG, 1);
238 if (args->execfd != -1)
239 AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd);
240 AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
241 AUXARGS_ENTRY(pos, AT_PHENT, args->phent);
242 AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum);
243 AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz);
244 AUXARGS_ENTRY(pos, AT_FLAGS, args->flags);
245 AUXARGS_ENTRY(pos, AT_ENTRY, args->entry);
246 AUXARGS_ENTRY(pos, AT_BASE, args->base);
247 PROC_LOCK(imgp->proc);
248 AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid);
249 AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid);
250 AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid);
251 AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid);
252 PROC_UNLOCK(imgp->proc);
253 AUXARGS_ENTRY(pos, AT_NULL, 0);
254
255 free(imgp->auxargs, M_TEMP);
254
255 free(imgp->auxargs, M_TEMP);
256 imgp->auxargs = NULL;
257
258 (*stack_base)--;
259 **stack_base = (long)imgp->argc;
260 return 0;
261}
262
263extern int _ucodesel, _udatasel;
264extern unsigned long linux_sznonrtsigcode;
265
266static void
267linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
268{
256 imgp->auxargs = NULL;
257
258 (*stack_base)--;
259 **stack_base = (long)imgp->argc;
260 return 0;
261}
262
263extern int _ucodesel, _udatasel;
264extern unsigned long linux_sznonrtsigcode;
265
266static void
267linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
268{
269 register struct thread *td = curthread;
270 register struct proc *p = td->td_proc;
271 register struct trapframe *regs;
269 struct thread *td = curthread;
270 struct proc *p = td->td_proc;
271 struct trapframe *regs;
272 struct l_rt_sigframe *fp, frame;
273 int oonstack;
274
275 PROC_LOCK_ASSERT(p, MA_OWNED);
276 regs = td->td_frame;
277 oonstack = sigonstack(regs->tf_esp);
278
279#ifdef DEBUG

--- 86 unchanged lines hidden (view full) ---

366 PROC_LOCK(p);
367 sigexit(td, SIGILL);
368 }
369
370 /*
371 * Build context to run handler in.
372 */
373 regs->tf_esp = (int)fp;
272 struct l_rt_sigframe *fp, frame;
273 int oonstack;
274
275 PROC_LOCK_ASSERT(p, MA_OWNED);
276 regs = td->td_frame;
277 oonstack = sigonstack(regs->tf_esp);
278
279#ifdef DEBUG

--- 86 unchanged lines hidden (view full) ---

366 PROC_LOCK(p);
367 sigexit(td, SIGILL);
368 }
369
370 /*
371 * Build context to run handler in.
372 */
373 regs->tf_esp = (int)fp;
374 regs->tf_eip = PS_STRINGS - *(p->p_sysent->sv_szsigcode) +
374 regs->tf_eip = PS_STRINGS - *(p->p_sysent->sv_szsigcode) +
375 linux_sznonrtsigcode;
376 regs->tf_eflags &= ~(PSL_T | PSL_VM);
377 regs->tf_cs = _ucodesel;
378 regs->tf_ds = _udatasel;
379 regs->tf_es = _udatasel;
380 regs->tf_fs = _udatasel;
381 regs->tf_ss = _udatasel;
382 PROC_LOCK(p);

--- 8 unchanged lines hidden (view full) ---

391 * to sigreturn routine below. After sigreturn
392 * resets the signal mask, the stack, and the
393 * frame pointer, it returns to the user
394 * specified pc, psl.
395 */
396static void
397linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
398{
375 linux_sznonrtsigcode;
376 regs->tf_eflags &= ~(PSL_T | PSL_VM);
377 regs->tf_cs = _ucodesel;
378 regs->tf_ds = _udatasel;
379 regs->tf_es = _udatasel;
380 regs->tf_fs = _udatasel;
381 regs->tf_ss = _udatasel;
382 PROC_LOCK(p);

--- 8 unchanged lines hidden (view full) ---

391 * to sigreturn routine below. After sigreturn
392 * resets the signal mask, the stack, and the
393 * frame pointer, it returns to the user
394 * specified pc, psl.
395 */
396static void
397linux_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
398{
399 register struct thread *td = curthread;
400 register struct proc *p = td->td_proc;
401 register struct trapframe *regs;
399 struct thread *td = curthread;
400 struct proc *p = td->td_proc;
401 struct trapframe *regs;
402 struct l_sigframe *fp, frame;
403 l_sigset_t lmask;
404 int oonstack, i;
405
406 PROC_LOCK_ASSERT(p, MA_OWNED);
407 if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
408 /* Signal handler installed with SA_SIGINFO. */
409 linux_rt_sendsig(catcher, sig, mask, code);

--- 93 unchanged lines hidden (view full) ---

503 * psl to gain improper privileges or to cause
504 * a machine fault.
505 */
506int
507linux_sigreturn(struct thread *td, struct linux_sigreturn_args *args)
508{
509 struct proc *p = td->td_proc;
510 struct l_sigframe frame;
402 struct l_sigframe *fp, frame;
403 l_sigset_t lmask;
404 int oonstack, i;
405
406 PROC_LOCK_ASSERT(p, MA_OWNED);
407 if (SIGISMEMBER(p->p_sigacts->ps_siginfo, sig)) {
408 /* Signal handler installed with SA_SIGINFO. */
409 linux_rt_sendsig(catcher, sig, mask, code);

--- 93 unchanged lines hidden (view full) ---

503 * psl to gain improper privileges or to cause
504 * a machine fault.
505 */
506int
507linux_sigreturn(struct thread *td, struct linux_sigreturn_args *args)
508{
509 struct proc *p = td->td_proc;
510 struct l_sigframe frame;
511 register struct trapframe *regs;
511 struct trapframe *regs;
512 l_sigset_t lmask;
513 int eflags, i;
514
515 regs = td->td_frame;
516
517#ifdef DEBUG
518 if (ldebug(sigreturn))
519 printf(ARGS(sigreturn, "%p"), (void *)args->sfp);

--- 17 unchanged lines hidden (view full) ---

537 * sometimes set it there too. tf_eflags is kept in the signal
538 * context during signal handling and there is no other place
539 * to remember it, so the PSL_RF bit may be corrupted by the
540 * signal handler without us knowing. Corruption of the PSL_RF
541 * bit at worst causes one more or one less debugger trap, so
542 * allowing it is fairly harmless.
543 */
544 if (!EFLAGS_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF))
512 l_sigset_t lmask;
513 int eflags, i;
514
515 regs = td->td_frame;
516
517#ifdef DEBUG
518 if (ldebug(sigreturn))
519 printf(ARGS(sigreturn, "%p"), (void *)args->sfp);

--- 17 unchanged lines hidden (view full) ---

537 * sometimes set it there too. tf_eflags is kept in the signal
538 * context during signal handling and there is no other place
539 * to remember it, so the PSL_RF bit may be corrupted by the
540 * signal handler without us knowing. Corruption of the PSL_RF
541 * bit at worst causes one more or one less debugger trap, so
542 * allowing it is fairly harmless.
543 */
544 if (!EFLAGS_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF))
545 return(EINVAL);
545 return(EINVAL);
546
547 /*
548 * Don't allow users to load a valid privileged %cs. Let the
549 * hardware check for invalid selectors, excess privilege in
550 * other selectors, invalid %eip's and invalid %esp's.
551 */
552#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
553 if (!CS_SECURE(frame.sf_sc.sc_cs)) {

--- 46 unchanged lines hidden (view full) ---

600int
601linux_rt_sigreturn(struct thread *td, struct linux_rt_sigreturn_args *args)
602{
603 struct proc *p = td->td_proc;
604 struct l_ucontext uc;
605 struct l_sigcontext *context;
606 l_stack_t *lss;
607 stack_t ss;
546
547 /*
548 * Don't allow users to load a valid privileged %cs. Let the
549 * hardware check for invalid selectors, excess privilege in
550 * other selectors, invalid %eip's and invalid %esp's.
551 */
552#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
553 if (!CS_SECURE(frame.sf_sc.sc_cs)) {

--- 46 unchanged lines hidden (view full) ---

600int
601linux_rt_sigreturn(struct thread *td, struct linux_rt_sigreturn_args *args)
602{
603 struct proc *p = td->td_proc;
604 struct l_ucontext uc;
605 struct l_sigcontext *context;
606 l_stack_t *lss;
607 stack_t ss;
608 register struct trapframe *regs;
608 struct trapframe *regs;
609 int eflags;
610
611 regs = td->td_frame;
612
613#ifdef DEBUG
614 if (ldebug(rt_sigreturn))
615 printf(ARGS(rt_sigreturn, "%p"), (void *)args->ucp);
616#endif

--- 18 unchanged lines hidden (view full) ---

635 * sometimes set it there too. tf_eflags is kept in the signal
636 * context during signal handling and there is no other place
637 * to remember it, so the PSL_RF bit may be corrupted by the
638 * signal handler without us knowing. Corruption of the PSL_RF
639 * bit at worst causes one more or one less debugger trap, so
640 * allowing it is fairly harmless.
641 */
642 if (!EFLAGS_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF))
609 int eflags;
610
611 regs = td->td_frame;
612
613#ifdef DEBUG
614 if (ldebug(rt_sigreturn))
615 printf(ARGS(rt_sigreturn, "%p"), (void *)args->ucp);
616#endif

--- 18 unchanged lines hidden (view full) ---

635 * sometimes set it there too. tf_eflags is kept in the signal
636 * context during signal handling and there is no other place
637 * to remember it, so the PSL_RF bit may be corrupted by the
638 * signal handler without us knowing. Corruption of the PSL_RF
639 * bit at worst causes one more or one less debugger trap, so
640 * allowing it is fairly harmless.
641 */
642 if (!EFLAGS_SECURE(eflags & ~PSL_RF, regs->tf_eflags & ~PSL_RF))
643 return(EINVAL);
643 return(EINVAL);
644
645 /*
646 * Don't allow users to load a valid privileged %cs. Let the
647 * hardware check for invalid selectors, excess privilege in
648 * other selectors, invalid %eip's and invalid %esp's.
649 */
650#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
651 if (!CS_SECURE(context->sc_cs)) {

--- 100 unchanged lines hidden (view full) ---

752 (int)ctob(vm->vm_dsize),
753 (off_t)ctob(uarea_pages + kstack_pages), UIO_USERSPACE,
754 IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td);
755 if (error == 0)
756 error = vn_rdwr_inchunks(UIO_WRITE, vp,
757 (caddr_t)trunc_page(USRSTACK - ctob(vm->vm_ssize)),
758 round_page(ctob(vm->vm_ssize)),
759 (off_t)ctob(uarea_pages + kstack_pages) +
644
645 /*
646 * Don't allow users to load a valid privileged %cs. Let the
647 * hardware check for invalid selectors, excess privilege in
648 * other selectors, invalid %eip's and invalid %esp's.
649 */
650#define CS_SECURE(cs) (ISPL(cs) == SEL_UPL)
651 if (!CS_SECURE(context->sc_cs)) {

--- 100 unchanged lines hidden (view full) ---

752 (int)ctob(vm->vm_dsize),
753 (off_t)ctob(uarea_pages + kstack_pages), UIO_USERSPACE,
754 IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td);
755 if (error == 0)
756 error = vn_rdwr_inchunks(UIO_WRITE, vp,
757 (caddr_t)trunc_page(USRSTACK - ctob(vm->vm_ssize)),
758 round_page(ctob(vm->vm_ssize)),
759 (off_t)ctob(uarea_pages + kstack_pages) +
760 ctob(vm->vm_dsize), UIO_USERSPACE,
760 ctob(vm->vm_dsize), UIO_USERSPACE,
761 IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td);
762 return (error);
763}
764/*
761 IO_UNIT | IO_DIRECT, cred, NOCRED, (int *) NULL, td);
762 return (error);
763}
764/*
765 * If a linux binary is exec'ing something, try this image activator
765 * If a linux binary is exec'ing something, try this image activator
766 * first. We override standard shell script execution in order to
767 * be able to modify the interpreter path. We only do this if a linux
768 * binary is doing the exec, so we do not create an EXEC module for it.
769 */
770static int exec_linux_imgact_try(struct image_params *iparams);
771
772static int
773exec_linux_imgact_try(struct image_params *imgp)

--- 31 unchanged lines hidden (view full) ---

805}
806
807struct sysentvec linux_sysvec = {
808 LINUX_SYS_MAXSYSCALL,
809 linux_sysent,
810 0xff,
811 LINUX_SIGTBLSZ,
812 bsd_to_linux_signal,
766 * first. We override standard shell script execution in order to
767 * be able to modify the interpreter path. We only do this if a linux
768 * binary is doing the exec, so we do not create an EXEC module for it.
769 */
770static int exec_linux_imgact_try(struct image_params *iparams);
771
772static int
773exec_linux_imgact_try(struct image_params *imgp)

--- 31 unchanged lines hidden (view full) ---

805}
806
807struct sysentvec linux_sysvec = {
808 LINUX_SYS_MAXSYSCALL,
809 linux_sysent,
810 0xff,
811 LINUX_SIGTBLSZ,
812 bsd_to_linux_signal,
813 ELAST + 1,
813 ELAST + 1,
814 bsd_to_linux_errno,
815 translate_traps,
816 linux_fixup,
817 linux_sendsig,
814 bsd_to_linux_errno,
815 translate_traps,
816 linux_fixup,
817 linux_sendsig,
818 linux_sigcode,
818 linux_sigcode,
819 &linux_szsigcode,
820 linux_prepsyscall,
821 "Linux a.out",
822 linux_aout_coredump,
823 exec_linux_imgact_try,
824 LINUX_MINSIGSTKSZ,
825 PAGE_SIZE,
826 VM_MIN_ADDRESS,

--- 115 unchanged lines hidden ---
819 &linux_szsigcode,
820 linux_prepsyscall,
821 "Linux a.out",
822 linux_aout_coredump,
823 exec_linux_imgact_try,
824 LINUX_MINSIGSTKSZ,
825 PAGE_SIZE,
826 VM_MIN_ADDRESS,

--- 115 unchanged lines hidden ---