? sys/arch/amd64/conf/KUBSAN ? sys/external/bsd/drm2/include/asm/bug.h.2 Index: sys/arch/amd64/conf/GENERIC =================================================================== RCS file: /cvsroot/src/sys/arch/amd64/conf/GENERIC,v retrieving revision 1.535 diff -u -r1.535 GENERIC --- sys/arch/amd64/conf/GENERIC 14 Sep 2019 06:57:51 -0000 1.535 +++ sys/arch/amd64/conf/GENERIC 2 Oct 2019 22:17:22 -0000 @@ -104,7 +104,7 @@ # Because gcc omits the frame pointer for any -O level, the line below # is needed to make backtraces in DDB work. # -makeoptions COPTS="-O2 -fno-omit-frame-pointer" +makeoptions COPTS="-O0 -fno-inline -fno-omit-frame-pointer" options DDB # in-kernel debugger #options DDB_COMMANDONENTER="bt" # execute command when ddb is entered #options DDB_ONPANIC=1 # see also sysctl(7): `ddb.onpanic' Index: sys/compat/linux/common/linux_sched.c =================================================================== RCS file: /cvsroot/src/sys/compat/linux/common/linux_sched.c,v retrieving revision 1.71 diff -u -r1.71 linux_sched.c --- sys/compat/linux/common/linux_sched.c 16 Apr 2018 14:51:59 -0000 1.71 +++ sys/compat/linux/common/linux_sched.c 2 Oct 2019 22:17:42 -0000 @@ -255,7 +255,7 @@ mutex_enter(p->p_lock); lwp_lock(l2); spc = &l2->l_cpu->ci_schedstate; - if ((l->l_flag & (LW_WREBOOT | LW_WSUSPEND | LW_WEXIT)) == 0) { + if ((l->l_flag & (LW_WREBOOT | LW_DBGSUSPEND | LW_WSUSPEND | LW_WEXIT)) == 0) { if (p->p_stat == SSTOP || (p->p_sflag & PS_STOPPING) != 0) { KASSERT(l2->l_wchan == NULL); l2->l_stat = LSSTOP; Index: sys/kern/kern_exit.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_exit.c,v retrieving revision 1.276 diff -u -r1.276 kern_exit.c --- sys/kern/kern_exit.c 13 Jun 2019 20:20:18 -0000 1.276 +++ sys/kern/kern_exit.c 2 Oct 2019 22:17:52 -0000 @@ -617,6 +617,7 @@ l2->l_flag |= LW_WEXIT; if ((l2->l_stat == LSSLEEP && (l2->l_flag & LW_SINTR)) || l2->l_stat == LSSUSPENDED || l2->l_stat == LSSTOP) { + l2->l_flag &= ~LW_DBGSUSPEND; /* setrunnable() will release the lock. */ setrunnable(l2); continue; Index: sys/kern/kern_lwp.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_lwp.c,v retrieving revision 1.203 diff -u -r1.203 kern_lwp.c --- sys/kern/kern_lwp.c 30 Sep 2019 21:13:33 -0000 1.203 +++ sys/kern/kern_lwp.c 2 Oct 2019 22:17:52 -0000 @@ -408,6 +408,11 @@ return (EDEADLK); } + if ((t->l_flag & LW_DBGSUSPEND) != 0) { + lwp_unlock(t); + return 0; + } + error = 0; switch (t->l_stat) { @@ -472,7 +477,7 @@ l->l_flag &= ~LW_WSUSPEND; - if (l->l_stat != LSSUSPENDED) { + if (l->l_stat != LSSUSPENDED || (l->l_flag & LW_DBGSUSPEND) != 0) { lwp_unlock(l); return; } @@ -497,6 +502,8 @@ lwp_lock(l); + KASSERT((l->l_flag & LW_DBGSUSPEND) == 0); + /* If not stopped, then just bail out. */ if (l->l_stat != LSSTOP) { lwp_unlock(l); Index: sys/kern/kern_sig.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_sig.c,v retrieving revision 1.365 diff -u -r1.365 kern_sig.c --- sys/kern/kern_sig.c 30 Sep 2019 21:13:33 -0000 1.365 +++ sys/kern/kern_sig.c 2 Oct 2019 22:17:53 -0000 @@ -1171,6 +1171,13 @@ if ((prop & SA_STOP) != 0) break; + if ((l->l_flag & LW_DBGSUSPEND) != 0) { + if ((prop & SA_KILL) != 0) + l->l_flag &= ~LW_DBGSUSPEND; + else + break; + } + /* * If the LWP is stopped and we are sending a continue * signal, then start it again. @@ -2179,7 +2186,8 @@ LIST_FOREACH(t, &p->p_lwps, l_sibling) { lwp_lock(t); if (t == l) { - t->l_flag &= ~LW_WSUSPEND; + t->l_flag &= + ~(LW_WSUSPEND | LW_DBGSUSPEND); lwp_unlock(t); continue; } @@ -2376,7 +2384,7 @@ LIST_FOREACH(l, &p->p_lwps, l_sibling) { lwp_lock(l); - if (l->l_stat != LSSTOP) { + if (l->l_stat != LSSTOP || (l->l_flag & LW_DBGSUSPEND) != 0) { lwp_unlock(l); continue; } Index: sys/kern/kern_synch.c =================================================================== RCS file: /cvsroot/src/sys/kern/kern_synch.c,v retrieving revision 1.323 diff -u -r1.323 kern_synch.c --- sys/kern/kern_synch.c 3 Feb 2019 03:19:28 -0000 1.323 +++ sys/kern/kern_synch.c 2 Oct 2019 22:18:03 -0000 @@ -885,6 +885,7 @@ struct cpu_info *ci; KASSERT((l->l_flag & LW_IDLE) == 0); + KASSERT((l->l_flag & LW_DBGSUSPEND) == 0); KASSERT(mutex_owned(p->p_lock)); KASSERT(lwp_locked(l, NULL)); KASSERT(l->l_mutex != l->l_cpu->ci_schedstate.spc_mutex); Index: sys/kern/sys_ptrace_common.c =================================================================== RCS file: /cvsroot/src/sys/kern/sys_ptrace_common.c,v retrieving revision 1.61 diff -u -r1.61 sys_ptrace_common.c --- sys/kern/sys_ptrace_common.c 1 Oct 2019 21:49:50 -0000 1.61 +++ sys/kern/sys_ptrace_common.c 2 Oct 2019 22:18:04 -0000 @@ -787,9 +787,12 @@ DPRINTF(("%s: lwp=%d request=%d\n", __func__, (*lt)->l_lid, rq)); lwp_lock(*lt); if (rq == PT_SUSPEND) - (*lt)->l_flag |= LW_WSUSPEND; - else - (*lt)->l_flag &= ~LW_WSUSPEND; + (*lt)->l_flag |= LW_DBGSUSPEND; + else { + (*lt)->l_flag &= ~LW_DBGSUSPEND; + if ((*lt)->l_flag != LSSUSPENDED) + (*lt)->l_stat = LSSTOP; + } lwp_unlock(*lt); return 0; } Index: sys/sys/lwp.h =================================================================== RCS file: /cvsroot/src/sys/sys/lwp.h,v retrieving revision 1.186 diff -u -r1.186 lwp.h --- sys/sys/lwp.h 19 Jun 2019 21:39:53 -0000 1.186 +++ sys/sys/lwp.h 2 Oct 2019 22:18:07 -0000 @@ -236,6 +236,7 @@ #define LW_CVLOCKDEBUG 0x00000004 /* Waker does lockdebug */ #define LW_SINTR 0x00000080 /* Sleep is interruptible. */ #define LW_SYSTEM 0x00000200 /* Kernel thread */ +#define LW_DBGSUSPEND 0x00010000 /* Suspend by debugger */ #define LW_WSUSPEND 0x00020000 /* Suspend before return to user */ #define LW_BATCH 0x00040000 /* LWP tends to hog CPU */ #define LW_WCORE 0x00080000 /* Stop for core dump on return to user */