Date: Wed, 22 Apr 1998 17:00:01 -0700 (PDT) From: Eivind Eklund <eivind@yes.no> To: freebsd-bugs Subject: Re: kern/6389: Need to be able to access trap-to-signal mapping to for Linux emulation to allow Allegro Common Lisp (and maybe other apps) to run. Message-ID: <199804230000.RAA07381@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/6389; it has been noted by GNATS. From: Eivind Eklund <eivind@yes.no> To: gilham@csl.sri.com, freebsd-gnats-submit@FreeBSD.ORG Cc: msmith@FreeBSD.ORG Subject: Re: kern/6389: Need to be able to access trap-to-signal mapping to for Linux emulation to allow Allegro Common Lisp (and maybe other apps) to run. Date: Thu, 23 Apr 1998 01:56:22 +0200 I've gone through these changes and fixed style-problems; here are the changes as diffs against today's current with hopefully OK stule. This pass a LINT compile (I've not yet tested running with a new kernel on my own machine; I'll do this in a few minutes). Index: i386/i386/trap.c =================================================================== RCS file: /home/ncvs/src/sys/i386/i386/trap.c,v retrieving revision 1.126 diff -u -r1.126 trap.c --- trap.c 1998/04/15 17:45:07 1.126 +++ trap.c 1998/04/22 23:31:20 @@ -545,6 +545,9 @@ return; } + if (*p->p_sysent->sv_transtrap) + i = (*p->p_sysent->sv_transtrap)(i, type); + trapsignal(p, i, ucode); #ifdef DEBUG Index: i386/ibcs2/ibcs2_sysvec.c =================================================================== RCS file: /home/ncvs/src/sys/i386/ibcs2/ibcs2_sysvec.c,v retrieving revision 1.6 diff -u -r1.6 ibcs2_sysvec.c --- ibcs2_sysvec.c 1997/02/22 09:33:28 1.6 +++ ibcs2_sysvec.c 1998/04/22 02:59:52 @@ -49,6 +49,7 @@ bsd_to_ibcs2_sig, ELAST, bsd_to_ibcs2_errno, + 0, /* Trap-to-signal translation function */ 0, /* fixup */ sendsig, sigcode, /* use generic trampoline */ Index: i386/linux/linux_sysvec.c =================================================================== RCS file: /home/ncvs/src/sys/i386/linux/linux_sysvec.c,v retrieving revision 1.27 diff -u -r1.27 linux_sysvec.c --- linux_sysvec.c 1998/04/13 17:49:51 1.27 +++ linux_sysvec.c 1998/04/22 23:21:09 @@ -98,6 +98,31 @@ SIGXCPU, SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH, SIGURG, SIGURG, 0 }; + +/* + If FreeBSD & Linux have a difference of opinion about what a trap + means, deal with it here. + */ +static int +translate_traps(int signal, int trap_code) +{ + switch(signal) { + case SIGBUS: + switch(trap_code) { + + case T_PROTFLT: + return SIGSEGV; + + default: + return signal; + } + + default: + return signal; + } +} + + static int linux_fixup(int **stack_base, struct image_params *imgp) { @@ -374,6 +399,7 @@ bsd_to_linux_signal, ELAST, bsd_to_linux_errno, + translate_traps, linux_fixup, linux_sendsig, linux_sigcode, @@ -390,6 +416,7 @@ bsd_to_linux_signal, ELAST, bsd_to_linux_errno, + translate_traps, elf_linux_fixup, linux_sendsig, linux_sigcode, Index: kern/imgact_elf.c =================================================================== RCS file: /home/ncvs/src/sys/kern/imgact_elf.c,v retrieving revision 1.23 diff -u -r1.23 imgact_elf.c --- imgact_elf.c 1998/03/28 13:24:52 1.23 +++ imgact_elf.c 1998/04/22 23:22:31 @@ -78,6 +78,7 @@ 0, 0, 0, + 0, elf_freebsd_fixup, sendsig, sigcode, Index: kern/init_sysvec.c =================================================================== RCS file: /home/ncvs/src/sys/kern/init_sysvec.c,v retrieving revision 1.5 diff -u -r1.5 init_sysvec.c --- init_sysvec.c 1997/08/02 14:31:26 1.5 +++ init_sysvec.c 1998/04/22 02:57:51 @@ -19,6 +19,7 @@ 0, 0, 0, + 0, sendsig, sigcode, &szsigcode, Index: sys/sysent.h =================================================================== RCS file: /home/ncvs/src/sys/sys/sysent.h,v retrieving revision 1.16 diff -u -r1.16 sysent.h --- sysent.h 1998/02/03 21:51:57 1.16 +++ sysent.h 1998/04/22 23:32:51 @@ -58,6 +58,8 @@ int *sv_sigtbl; /* signal translation table */ int sv_errsize; /* size of errno translation table */ int *sv_errtbl; /* errno translation table */ + int (*sv_transtrap) __P((int, int)); + /* translate trap-to-signal mapping */ int (*sv_fixup) __P((int **, struct image_params *)); /* stack fixup function */ void (*sv_sendsig) __P((void (*)(int), int, int, u_long)); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804230000.RAA07381>