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 --- |