Module Name: src
Committed By: rin
Date: Mon Aug 10 10:51:21 UTC 2020
Modified Files:
src/sys/arch/amiga/amiga: trap.c
src/sys/arch/mac68k/mac68k: trap.c
src/sys/arch/sun3/sun3: trap.c
Log Message:
Fix siginfo support for amiga, mac68k, and sun3:
- T_ZERODIV is integer divide by zero. Therefore, ksi_code should be
FPE_INTDIV, not FPE_FLTDIV.
- Set ksi_addr for SIGTRAP. Also, set TRAP_BRKPT or TRAP_TRACE to
ksi_code appropriately.
This fixes some tests in lib/libc/sys and lib/libc/gen.
XXX
Apply similar fixes to other m68k ports.
To generate a diff of this commit:
cvs rdiff -u -r1.138 -r1.139 src/sys/arch/amiga/amiga/trap.c
cvs rdiff -u -r1.150 -r1.151 src/sys/arch/mac68k/mac68k/trap.c
cvs rdiff -u -r1.146 -r1.147 src/sys/arch/sun3/sun3/trap.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amiga/amiga/trap.c
diff -u src/sys/arch/amiga/amiga/trap.c:1.138 src/sys/arch/amiga/amiga/trap.c:1.139
--- src/sys/arch/amiga/amiga/trap.c:1.138 Thu Nov 21 19:23:58 2019
+++ src/sys/arch/amiga/amiga/trap.c Mon Aug 10 10:51:21 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.138 2019/11/21 19:23:58 ad Exp $ */
+/* $NetBSD: trap.c,v 1.139 2020/08/10 10:51:21 rin Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -45,7 +45,7 @@
#include "opt_m68k_arch.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.138 2019/11/21 19:23:58 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.139 2020/08/10 10:51:21 rin Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -573,7 +573,7 @@ trap(struct frame *fp, int type, u_int c
* divde by zero, CHK/TRAPV inst
*/
case T_ZERODIV|T_USER:
- ksi.ksi_code = FPE_FLTDIV;
+ ksi.ksi_code = FPE_INTDIV;
case T_CHKINST|T_USER:
case T_TRAPVINST|T_USER:
ksi.ksi_addr = (void *)(int)fp->f_format;
@@ -674,7 +674,12 @@ trap(struct frame *fp, int type, u_int c
}
#endif
fp->f_sr &= ~PSL_T;
+ ksi.ksi_addr = (void *)fp->f_pc;
ksi.ksi_signo = SIGTRAP;
+ if (type == (T_TRAP15|T_USER))
+ ksi.ksi_code = TRAP_BRKPT;
+ else
+ ksi.ksi_code = TRAP_TRACE;
break;
/*
* Kernel AST (should not happen)
Index: src/sys/arch/mac68k/mac68k/trap.c
diff -u src/sys/arch/mac68k/mac68k/trap.c:1.150 src/sys/arch/mac68k/mac68k/trap.c:1.151
--- src/sys/arch/mac68k/mac68k/trap.c:1.150 Thu Nov 21 19:24:00 2019
+++ src/sys/arch/mac68k/mac68k/trap.c Mon Aug 10 10:51:21 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.150 2019/11/21 19:24:00 ad Exp $ */
+/* $NetBSD: trap.c,v 1.151 2020/08/10 10:51:21 rin Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.150 2019/11/21 19:24:00 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.151 2020/08/10 10:51:21 rin Exp $");
#include "opt_ddb.h"
#include "opt_execfmt.h"
@@ -332,8 +332,8 @@ copyfault:
/*
* divde by zero, CHK/TRAPV inst
*/
- case T_ZERODIV|T_USER: /* Divide by zero trap */
- ksi.ksi_code = FPE_FLTDIV;
+ case T_ZERODIV|T_USER: /* Integer divide by zero trap */
+ ksi.ksi_code = FPE_INTDIV;
case T_CHKINST|T_USER: /* CHK instruction trap */
case T_TRAPVINST|T_USER: /* TRAPV instruction trap */
ksi.ksi_addr = (void *)(int)fp->f_format;
@@ -457,7 +457,12 @@ copyfault:
case T_TRACE: /* tracing a trap instruction */
case T_TRAP15|T_USER: /* SUN user trace trap */
fp->f_sr &= ~PSL_T;
+ ksi.ksi_addr = (void *)fp->f_pc;
ksi.ksi_signo = SIGTRAP;
+ if (type == (T_TRAP15|T_USER))
+ ksi.ksi_code = TRAP_BRKPT;
+ else
+ ksi.ksi_code = TRAP_TRACE;
break;
case T_ASTFLT: /* System async trap, cannot happen */
Index: src/sys/arch/sun3/sun3/trap.c
diff -u src/sys/arch/sun3/sun3/trap.c:1.146 src/sys/arch/sun3/sun3/trap.c:1.147
--- src/sys/arch/sun3/sun3/trap.c:1.146 Thu Nov 21 19:24:01 2019
+++ src/sys/arch/sun3/sun3/trap.c Mon Aug 10 10:51:21 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.146 2019/11/21 19:24:01 ad Exp $ */
+/* $NetBSD: trap.c,v 1.147 2020/08/10 10:51:21 rin Exp $ */
/*
* Copyright (c) 1982, 1986, 1990, 1993
@@ -78,7 +78,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.146 2019/11/21 19:24:01 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.147 2020/08/10 10:51:21 rin Exp $");
#include "opt_ddb.h"
#include "opt_execfmt.h"
@@ -404,8 +404,8 @@ trap(struct trapframe *tf, int type, u_i
ILL_PRVOPC : ILL_ILLOPC;
break;
- case T_ZERODIV|T_USER: /* Divide by zero */
- ksi.ksi_code = FPE_FLTDIV;
+ case T_ZERODIV|T_USER: /* Integer divide by zero */
+ ksi.ksi_code = FPE_INTDIV;
case T_CHKINST|T_USER: /* CHK instruction trap */
case T_TRAPVINST|T_USER: /* TRAPV instruction trap */
ksi.ksi_addr = (void *)(int)tf->tf_format;
@@ -450,7 +450,12 @@ trap(struct trapframe *tf, int type, u_i
case T_TRACE: /* tracing a trap instruction */
case T_TRAP15|T_USER: /* SUN user trace trap */
tf->tf_sr &= ~PSL_T;
+ ksi.ksi_addr = (void *)tf->tf_pc;
ksi.ksi_signo = SIGTRAP;
+ if (type == (T_TRAP15|T_USER))
+ ksi.ksi_code = TRAP_BRKPT;
+ else
+ ksi.ksi_code = TRAP_TRACE;
break;
case T_ASTFLT: /* system async trap, cannot happen */