Skip site navigation (1)Skip section navigation (2)
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>