Subject: Re: port-mips/26410: fp.S not updated for siginfo
To: None <gnats-bugs@netbsd.org, port-mips-maintainer@netbsd.org,>
From: Christos Zoulas <christos@zoulas.com>
List: netbsd-bugs
Date: 03/24/2006 12:06:16
On Mar 24,  4:30pm, tsutsui@ceres.dti.ne.jp (Izumi Tsutsui) wrote:
-- Subject: Re: port-mips/26410: fp.S not updated for siginfo


Looks fine to me.

christos

| The following reply was made to PR port-mips/26410; it has been noted by GNATS.
| 
| From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
| To: port-mips@NetBSD.org
| Cc: gnats-bugs@netbsd.org, tsutsui@ceres.dti.ne.jp
| Subject: Re: port-mips/26410: fp.S not updated for siginfo 
| Date: Sat, 25 Mar 2006 01:25:58 +0900
| 
|  In article <Pine.BSF.4.51.0407231351310.74810@vegeta.city-net.com>
|  darkstar@city-net.com wrote:
|  
|  > On 2004-07-23 simonb@wasabisystems.com wrote:
|  > 
|  > > Is this easily reproducable?  If so, can you see if the patches in
|  > >
|  > >    http://mail-index.netbsd.org/port-mips/2004/07/03/0002.html
|  > >
|  > > from Matthias Drochner fixes your problem?
|  > 
|  >   Doh.  I even saved that message, but forgot all about it when I
|  > encountered the bug :(.
|  > 
|  >   It is actually reproducible.  I'll send another PR for that.  Presumably
|  > this is a SOFTFLOAT bug.  I am doing:
|  > ftp -o /dev/null ftp://192.168.0.51/stuff
|  > then cancelling the transfer (^C twice).
|  > 
|  >   It seems mips_fputrap.c is not built for SOFTFLOAT.  Moving that code to
|  > trap.c makes it work as expected.
|  
|  Any progress on this PR?
|  Is it okay to commit the attached patch to close it?
|  ---
|  Izumi Tsutsui
|  
|  
|  Index: arch/mips/conf/files.mips
|  ===================================================================
|  RCS file: /cvsroot/src/sys/arch/mips/conf/files.mips,v
|  retrieving revision 1.53
|  diff -u -r1.53 files.mips
|  --- arch/mips/conf/files.mips	11 Dec 2005 12:18:09 -0000	1.53
|  +++ arch/mips/conf/files.mips	24 Mar 2006 16:24:40 -0000
|  @@ -55,7 +55,7 @@
|   file	arch/mips/mips/in_cksum.c		inet
|   file	netns/ns_cksum.c			ns
|   
|  -file	arch/mips/mips/mips_fputrap.c		!softfloat & !nofpu
|  +file	arch/mips/mips/mips_fputrap.c		softfloat | !nofpu
|   file	arch/mips/mips/mips_emul.c
|   file	arch/mips/mips/fp.S			softfloat | !nofpu
|   
|  Index: arch/mips/mips/fp.S
|  ===================================================================
|  RCS file: /cvsroot/src/sys/arch/mips/mips/fp.S,v
|  retrieving revision 1.30
|  diff -u -r1.30 fp.S
|  --- arch/mips/mips/fp.S	23 Mar 2006 16:16:46 -0000	1.30
|  +++ arch/mips/mips/fp.S	24 Mar 2006 16:24:41 -0000
|  @@ -4967,7 +4967,7 @@
|   	move	a2, a0				# code = instruction
|   	lw	a0, _C_LABEL(curlwp)		# get current process
|   	li	a1, SIGILL
|  -	j	_C_LABEL(trapsignal)
|  +	j	_C_LABEL(fpemul_trapsignal)
|   END(fpemul_sigill)
|   
|   STATIC_LEAF(fpemul_sigfpe)
|  @@ -4981,7 +4981,7 @@
|   	move	a2, a0				# code = instruction
|   	lw	a0, _C_LABEL(curlwp)		# get current process
|   	li	a1, SIGFPE
|  -	j	_C_LABEL(trapsignal)
|  +	j	_C_LABEL(fpemul_trapsignal)
|   END(fpemul_sigfpe)
|   
|   #ifdef SOFTFLOAT
|  @@ -4996,6 +4996,6 @@
|   	move	a2, a0				# code = instruction
|   	lw	a0, _C_LABEL(curlwp)		# get current process
|   	li	a1, SIGFPE
|  -	j	_C_LABEL(trapsignal)
|  +	j	_C_LABEL(fpemul_trapsignal)
|   END(bcemul_sigfpe)
|   #endif
|  Index: arch/mips/mips/mips_fputrap.c
|  ===================================================================
|  RCS file: /cvsroot/src/sys/arch/mips/mips/mips_fputrap.c,v
|  retrieving revision 1.2
|  diff -u -r1.2 mips_fputrap.c
|  --- arch/mips/mips/mips_fputrap.c	11 Dec 2005 12:18:09 -0000	1.2
|  +++ arch/mips/mips/mips_fputrap.c	24 Mar 2006 16:24:41 -0000
|  @@ -33,6 +33,7 @@
|   #include <sys/siginfo.h>
|   #include <mips/cpuregs.h>
|   
|  +#ifndef SOFTFLOAT
|   void mips_fpuexcept(struct lwp *, unsigned int);
|   void mips_fpuillinst(struct lwp *, unsigned int, unsigned long);
|   static int fpustat2sicode(unsigned int);
|  @@ -84,3 +85,20 @@
|   			return (fpecodes[i].code);
|   	return (FPE_FLTINV);
|   }
|  +#endif /* !SOFTFLOAT */
|  +
|  +void fpemul_trapsignal(struct lwp *, unsigned int, unsigned int);
|  +
|  +void
|  +fpemul_trapsignal(struct lwp *l, unsigned int sig, unsigned int code)
|  +{
|  +	ksiginfo_t ksi;
|  +
|  +	printf("emul_trapsignal(%x,%x)\n", sig, code);
|  +
|  +	KSI_INIT_TRAP(&ksi);
|  +	ksi.ksi_signo = sig;
|  +	ksi.ksi_code = 1; /* XXX */
|  +	ksi.ksi_trap = code;
|  +	(*l->l_proc->p_emul->e_trapsignal)(l, &ksi);
|  +}
|  
-- End of excerpt from Izumi Tsutsui