Module Name: src
Committed By: rin
Date: Mon Nov 18 10:14:52 UTC 2019
Modified Files:
src/sys/compat/netbsd32: netbsd32_signal.c
Log Message:
Provide _ptrace_state for SIGTRAP with TRAP_EXEC, TRAP_CHLD, or TRAP_LWP.
Pointed out by kamil. Thanks!
XXX
pullup to netbsd-9
To generate a diff of this commit:
cvs rdiff -u -r1.47 -r1.48 src/sys/compat/netbsd32/netbsd32_signal.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/compat/netbsd32/netbsd32_signal.c
diff -u src/sys/compat/netbsd32/netbsd32_signal.c:1.47 src/sys/compat/netbsd32/netbsd32_signal.c:1.48
--- src/sys/compat/netbsd32/netbsd32_signal.c:1.47 Mon Nov 18 04:58:42 2019
+++ src/sys/compat/netbsd32/netbsd32_signal.c Mon Nov 18 10:14:52 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_signal.c,v 1.47 2019/11/18 04:58:42 rin Exp $ */
+/* $NetBSD: netbsd32_signal.c,v 1.48 2019/11/18 10:14:52 rin Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.47 2019/11/18 04:58:42 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_signal.c,v 1.48 2019/11/18 10:14:52 rin Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ktrace.h"
@@ -206,17 +206,35 @@ fill_fault:
si->_reason._fault._trap = si32->_reason._fault._trap;
break;
case SIGTRAP:
- if (si32->_code != TRAP_SCE && si32->_code != TRAP_SCX)
+ switch (si32->_code) {
+ case TRAP_EXEC:
+ case TRAP_CHLD:
+ case TRAP_LWP:
+ si->_reason._ptrace_state._pe_report_event =
+ si32->_reason._ptrace_state._pe_report_event;
+CTASSERT(sizeof(si->_reason._ptrace_state._option._pe_other_pid) ==
+ sizeof(si->_reason._ptrace_state._option._pe_lwp));
+ si->_reason._ptrace_state._option._pe_other_pid =
+ si32->_reason._ptrace_state._option._pe_other_pid;
+ break;
+ case TRAP_SCE:
+ case TRAP_SCX:
+ si->_reason._syscall._sysnum =
+ si32->_reason._syscall._sysnum;
+ si->_reason._syscall._retval[0] =
+ si32->_reason._syscall._retval[0];
+ si->_reason._syscall._retval[1] =
+ si32->_reason._syscall._retval[1];
+ si->_reason._syscall._error =
+ si32->_reason._syscall._error;
+ for (i = 0;
+ i < __arraycount(si->_reason._syscall._args); i++)
+ si->_reason._syscall._args[i] =
+ si32->_reason._syscall._args[i];
+ break;
+ default:
goto fill_fault;
- si->_reason._syscall._sysnum = si32->_reason._syscall._sysnum;
- si->_reason._syscall._retval[0] =
- si32->_reason._syscall._retval[0];
- si->_reason._syscall._retval[1] =
- si32->_reason._syscall._retval[1];
- si->_reason._syscall._error = si32->_reason._syscall._error;
- for (i = 0; i < __arraycount(si->_reason._syscall._args); i++)
- si->_reason._syscall._args[i] =
- si32->_reason._syscall._args[i];
+ }
break;
case SIGALRM:
case SIGVTALRM:
@@ -271,17 +289,35 @@ fill_fault:
si32->_reason._fault._trap = si->_reason._fault._trap;
break;
case SIGTRAP:
- if (si->_code != TRAP_SCE && si->_code != TRAP_SCX)
+ switch (si->_code) {
+ case TRAP_EXEC:
+ case TRAP_CHLD:
+ case TRAP_LWP:
+ si32->_reason._ptrace_state._pe_report_event =
+ si->_reason._ptrace_state._pe_report_event;
+CTASSERT(sizeof(si32->_reason._ptrace_state._option._pe_other_pid) ==
+ sizeof(si32->_reason._ptrace_state._option._pe_lwp));
+ si32->_reason._ptrace_state._option._pe_other_pid =
+ si->_reason._ptrace_state._option._pe_other_pid;
+ break;
+ case TRAP_SCE:
+ case TRAP_SCX:
+ si32->_reason._syscall._sysnum =
+ si->_reason._syscall._sysnum;
+ si32->_reason._syscall._retval[0] =
+ si->_reason._syscall._retval[0];
+ si32->_reason._syscall._retval[1] =
+ si->_reason._syscall._retval[1];
+ si32->_reason._syscall._error =
+ si->_reason._syscall._error;
+ for (i = 0;
+ i < __arraycount(si->_reason._syscall._args); i++)
+ si32->_reason._syscall._args[i] =
+ si->_reason._syscall._args[i];
+ break;
+ default:
goto fill_fault;
- si32->_reason._syscall._sysnum = si->_reason._syscall._sysnum;
- si32->_reason._syscall._retval[0] =
- si->_reason._syscall._retval[0];
- si32->_reason._syscall._retval[1] =
- si->_reason._syscall._retval[1];
- si32->_reason._syscall._error = si->_reason._syscall._error;
- for (i = 0; i < __arraycount(si32->_reason._syscall._args); i++)
- si32->_reason._syscall._args[i] =
- si->_reason._syscall._args[i];
+ }
break;
case SIGALRM:
case SIGVTALRM: