Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/compat/netbsd32 Provide _ptrace_state for SIGTRAP with T...



details:   https://anonhg.NetBSD.org/src/rev/4a3f951a617a
branches:  trunk
changeset: 1004884:4a3f951a617a
user:      rin <rin%NetBSD.org@localhost>
date:      Mon Nov 18 10:14:52 2019 +0000

description:
Provide _ptrace_state for SIGTRAP with TRAP_EXEC, TRAP_CHLD, or TRAP_LWP.

Pointed out by kamil. Thanks!

XXX
pullup to netbsd-9

diffstat:

 sys/compat/netbsd32/netbsd32_signal.c |  80 +++++++++++++++++++++++++---------
 1 files changed, 58 insertions(+), 22 deletions(-)

diffs (110 lines):

diff -r ef8a167ad1c9 -r 4a3f951a617a sys/compat/netbsd32/netbsd32_signal.c
--- a/sys/compat/netbsd32/netbsd32_signal.c     Mon Nov 18 08:16:32 2019 +0000
+++ b/sys/compat/netbsd32/netbsd32_signal.c     Mon Nov 18 10:14:52 2019 +0000
@@ -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 @@
                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 @@
                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:



Home | Main Index | Thread Index | Old Index