Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Jun 2015 12:39:21 +0200
From:      Oliver Pinter <oliver.pinter@hardenedbsd.org>
To:        John Baldwin <jhb@freebsd.org>
Cc:        "src-committers@freebsd.org" <src-committers@freebsd.org>,  "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   Re: svn commit: r284343 - in stable: 10/sys/kern 10/sys/sys 9/sys/kern 9/sys/sys
Message-ID:  <CAPQ4ffvZrCmUcEnqu0RC4KUFnpKbhFeNTTdUcLoV%2BXhEOoVW%2Bg@mail.gmail.com>
In-Reply-To: <201506131615.t5DGFhUm038534@svn.freebsd.org>
References:  <201506131615.t5DGFhUm038534@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Jun 13, 2015 at 6:15 PM, John Baldwin <jhb@freebsd.org> wrote:
> Author: jhb
> Date: Sat Jun 13 16:15:43 2015
> New Revision: 284343
> URL: https://svnweb.freebsd.org/changeset/base/284343
>
> Log:
>   MFC 283546:
>   Add KTR tracing for some MI ptrace events.
>
> Modified:
>   stable/10/sys/kern/kern_exit.c
>   stable/10/sys/kern/kern_fork.c
>   stable/10/sys/kern/kern_sig.c
>   stable/10/sys/kern/sys_process.c
>   stable/10/sys/sys/ktr.h
> Directory Properties:
>   stable/10/   (props changed)
>
> Changes in other areas also in this revision:
> Modified:
>   stable/9/sys/kern/kern_exit.c
>   stable/9/sys/kern/kern_fork.c
>   stable/9/sys/kern/kern_sig.c
>   stable/9/sys/kern/sys_process.c
>   stable/9/sys/sys/ktr.h
> Directory Properties:
>   stable/9/sys/   (props changed)
>   stable/9/sys/sys/   (props changed)
>
> Modified: stable/10/sys/kern/kern_exit.c
> ==============================================================================
> --- stable/10/sys/kern/kern_exit.c      Sat Jun 13 16:13:31 2015        (r284342)
> +++ stable/10/sys/kern/kern_exit.c      Sat Jun 13 16:15:43 2015        (r284343)
> @@ -531,6 +531,8 @@ exit1(struct thread *td, int rv)
>          */
>         while ((q = LIST_FIRST(&p->p_orphans)) != NULL) {
>                 PROC_LOCK(q);
> +               CTR2(KTR_PTRACE, "exit: pid %d, clearing orphan %d", p->p_pid,
> +                   q->p_pid);
>                 clear_orphan(q);
>                 PROC_UNLOCK(q);
>         }
> @@ -865,6 +867,9 @@ proc_reap(struct thread *td, struct proc
>                 t = proc_realparent(p);
>                 PROC_LOCK(t);
>                 PROC_LOCK(p);
> +               CTR2(KTR_PTRACE,
> +                   "wait: traced child %d moved back to parent %d", p->p_pid,
> +                   t->p_pid);
>                 proc_reparent(p, t);
>                 p->p_oppid = 0;
>                 PROC_UNLOCK(p);
> @@ -1219,6 +1224,10 @@ loop:
>                                 PROC_UNLOCK(q);
>                         }
>
> +                       CTR4(KTR_PTRACE,
> +           "wait: returning trapped pid %d status %#x (xstat %d) xthread %d",
> +                           p->p_pid, W_STOPCODE(p->p_xstat), p->p_xstat,
> +                           p->p_xthread != NULL ? p->p_xthread->td_tid : -1);
>                         PROC_UNLOCK(p);
>                         return (0);
>                 }
>
> Modified: stable/10/sys/kern/kern_fork.c
> ==============================================================================
> --- stable/10/sys/kern/kern_fork.c      Sat Jun 13 16:13:31 2015        (r284342)
> +++ stable/10/sys/kern/kern_fork.c      Sat Jun 13 16:15:43 2015        (r284343)
> @@ -1056,6 +1056,9 @@ fork_return(struct thread *td, struct tr
>                         dbg = p->p_pptr->p_pptr;
>                         p->p_flag |= P_TRACED;
>                         p->p_oppid = p->p_pptr->p_pid;
> +                       CTR2(KTR_PTRACE,
> +                   "fork_return: attaching to new child pid %d: oppid %d",
> +                           p->p_pid, p->p_oppid);
>                         proc_reparent(p, dbg);
>                         sx_xunlock(&proctree_lock);
>                         td->td_dbgflags |= TDB_CHILD;
>
> Modified: stable/10/sys/kern/kern_sig.c
> ==============================================================================
> --- stable/10/sys/kern/kern_sig.c       Sat Jun 13 16:13:31 2015        (r284342)
> +++ stable/10/sys/kern/kern_sig.c       Sat Jun 13 16:15:43 2015        (r284343)
> @@ -2484,6 +2484,8 @@ ptracestop(struct thread *td, int sig)
>
>         td->td_dbgflags |= TDB_XSIG;
>         td->td_xsig = sig;
> +       CTR4(KTR_PTRACE, "ptracestop: tid %d (pid %d) flags %#x sig %d",
> +           td->td_tid, p->p_pid, td->td_dbgflags, sig);
>         PROC_SLOCK(p);
>         while ((p->p_flag & P_TRACED) && (td->td_dbgflags & TDB_XSIG)) {
>                 if (p->p_flag & P_SINGLE_EXIT) {
>
> Modified: stable/10/sys/kern/sys_process.c
> ==============================================================================
> --- stable/10/sys/kern/sys_process.c    Sat Jun 13 16:13:31 2015        (r284342)
> +++ stable/10/sys/kern/sys_process.c    Sat Jun 13 16:15:43 2015        (r284343)
> @@ -432,6 +432,9 @@ ptrace_vm_entry(struct thread *td, struc
>                                 free(freepath, M_TEMP);
>                 }
>         }
> +       if (error == 0)
> +               CTR3(KTR_PTRACE, "PT_VM_ENTRY: pid %d, entry %d, start %p",
> +                   p->p_pid, pve->pve_entry, pve->pve_start);
>
>         return (error);
>  }
> @@ -826,6 +829,7 @@ kern_ptrace(struct thread *td, int req,
>                 if (p->p_flag & P_PPWAIT)
>                         p->p_flag |= P_PPTRACE;
>                 p->p_oppid = p->p_pptr->p_pid;
> +               CTR1(KTR_PTRACE, "PT_TRACE_ME: pid %d", p->p_pid);
>                 break;
>
>         case PT_ATTACH:
> @@ -845,17 +849,25 @@ kern_ptrace(struct thread *td, int req,
>                         proc_reparent(p, td->td_proc);
>                 }
>                 data = SIGSTOP;
> +               CTR2(KTR_PTRACE, "PT_ATTACH: pid %d, oppid %d", p->p_pid,
> +                   p->p_oppid);
>                 goto sendsig;   /* in PT_CONTINUE below */
>
>         case PT_CLEARSTEP:
> +               CTR2(KTR_PTRACE, "PT_CLEARSTEP: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 error = ptrace_clear_single_step(td2);
>                 break;
>
>         case PT_SETSTEP:
> +               CTR2(KTR_PTRACE, "PT_SETSTEP: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 error = ptrace_single_step(td2);
>                 break;
>
>         case PT_SUSPEND:
> +               CTR2(KTR_PTRACE, "PT_SUSPEND: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 td2->td_dbgflags |= TDB_SUSPEND;
>                 thread_lock(td2);
>                 td2->td_flags |= TDF_NEEDSUSPCHK;
> @@ -863,10 +875,15 @@ kern_ptrace(struct thread *td, int req,
>                 break;
>
>         case PT_RESUME:
> +               CTR2(KTR_PTRACE, "PT_RESUME: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 td2->td_dbgflags &= ~TDB_SUSPEND;
>                 break;
>
>         case PT_FOLLOW_FORK:
> +               CTR3(KTR_PTRACE, "PT_FOLLOW_FORK: pid %d %s -> %s", p->p_pid,
> +                   p->p_flag & P_FOLLOWFORK ? "enabled" : "disabled",
> +                   data ? "enabled" : "disabled");
>                 if (data)
>                         p->p_flag |= P_FOLLOWFORK;
>                 else
> @@ -887,6 +904,8 @@ kern_ptrace(struct thread *td, int req,
>
>                 switch (req) {
>                 case PT_STEP:
> +                       CTR2(KTR_PTRACE, "PT_STEP: tid %d (pid %d)",
> +                           td2->td_tid, p->p_pid);
>                         error = ptrace_single_step(td2);
>                         if (error)
>                                 goto out;
> @@ -904,12 +923,25 @@ kern_ptrace(struct thread *td, int req,
>                         switch (req) {
>                         case PT_TO_SCE:
>                                 p->p_stops |= S_PT_SCE;
> +                               CTR2(KTR_PTRACE,
> +                                   "PT_TO_SCE: pid %d, stops = %#x", p->p_pid,
> +                                   p->p_stops);
>                                 break;
>                         case PT_TO_SCX:
>                                 p->p_stops |= S_PT_SCX;
> +                               CTR2(KTR_PTRACE,
> +                                   "PT_TO_SCX: pid %d, stops = %#x", p->p_pid,
> +                                   p->p_stops);
>                                 break;
>                         case PT_SYSCALL:
>                                 p->p_stops |= S_PT_SCE | S_PT_SCX;
> +                               CTR2(KTR_PTRACE,
> +                                   "PT_SYSCALL: pid %d, stops = %#x", p->p_pid,
> +                                   p->p_stops);
> +                               break;
> +                       case PT_CONTINUE:
> +                               CTR1(KTR_PTRACE,
> +                                   "PT_CONTINUE: pid %d", p->p_pid);
>                                 break;
>                         }
>                         break;
> @@ -924,7 +956,11 @@ kern_ptrace(struct thread *td, int req,
>                                 proc_reparent(p, pp);
>                                 if (pp == initproc)
>                                         p->p_sigparent = SIGCHLD;
> -                       }
> +                               CTR2(KTR_PTRACE,
> +                                   "PT_DETACH: pid %d reparented to pid %d",
> +                                   p->p_pid, pp->p_pid);
> +                       } else
> +                               CTR1(KTR_PTRACE, "PT_DETACH: pid %d", p->p_pid);
>                         p->p_oppid = 0;
>                         p->p_flag &= ~(P_TRACED | P_WAITED | P_FOLLOWFORK);
>
> @@ -1001,6 +1037,14 @@ kern_ptrace(struct thread *td, int req,
>                 }
>                 if (!write)
>                         td->td_retval[0] = tmp;
> +               if (error == 0) {
> +                       if (write)
> +                               CTR3(KTR_PTRACE, "PT_WRITE: pid %d: %p <= %#x",
> +                                   p->p_pid, addr, data);
> +                       else
> +                               CTR3(KTR_PTRACE, "PT_READ: pid %d: %p >= %#x",
> +                                   p->p_pid, addr, tmp);
> +               }
>                 PROC_LOCK(p);
>                 break;
>
> @@ -1033,10 +1077,14 @@ kern_ptrace(struct thread *td, int req,
>                 switch (tmp) {
>                 case PIOD_READ_D:
>                 case PIOD_READ_I:
> +                       CTR3(KTR_PTRACE, "PT_IO: pid %d: READ (%p, %#x)",
> +                           p->p_pid, (uintptr_t)uio.uio_offset, uio.uio_resid);
>                         uio.uio_rw = UIO_READ;
>                         break;
>                 case PIOD_WRITE_D:
>                 case PIOD_WRITE_I:
> +                       CTR3(KTR_PTRACE, "PT_IO: pid %d: WRITE (%p, %#x)",
> +                           p->p_pid, (uintptr_t)uio.uio_offset, uio.uio_resid);
>                         td2->td_dbgflags |= TDB_USERWR;
>                         uio.uio_rw = UIO_WRITE;
>                         break;
> @@ -1056,33 +1104,46 @@ kern_ptrace(struct thread *td, int req,
>                 break;
>
>         case PT_KILL:
> +               CTR1(KTR_PTRACE, "PT_KILL: pid %d", p->p_pid);
>                 data = SIGKILL;
>                 goto sendsig;   /* in PT_CONTINUE above */
>
>         case PT_SETREGS:
> +               CTR2(KTR_PTRACE, "PT_SETREGS: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 td2->td_dbgflags |= TDB_USERWR;
>                 error = PROC_WRITE(regs, td2, addr);
>                 break;
>
>         case PT_GETREGS:
> +               CTR2(KTR_PTRACE, "PT_GETREGS: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 error = PROC_READ(regs, td2, addr);
>                 break;
>
>         case PT_SETFPREGS:
> +               CTR2(KTR_PTRACE, "PT_SETFPREGS: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 td2->td_dbgflags |= TDB_USERWR;
>                 error = PROC_WRITE(fpregs, td2, addr);
>                 break;
>
>         case PT_GETFPREGS:
> +               CTR2(KTR_PTRACE, "PT_GETFPREGS: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 error = PROC_READ(fpregs, td2, addr);
>                 break;
>
>         case PT_SETDBREGS:
> +               CTR2(KTR_PTRACE, "PT_SETDBREGS: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 td2->td_dbgflags |= TDB_USERWR;
>                 error = PROC_WRITE(dbregs, td2, addr);
>                 break;
>
>         case PT_GETDBREGS:
> +               CTR2(KTR_PTRACE, "PT_GETDBREGS: tid %d (pid %d)", td2->td_tid,
> +                   p->p_pid);
>                 error = PROC_READ(dbregs, td2, addr);
>                 break;
>
> @@ -1145,13 +1206,21 @@ kern_ptrace(struct thread *td, int req,
>                 if (wrap32)
>                         ptrace_lwpinfo_to32(pl, pl32);
>  #endif
> +               CTR5(KTR_PTRACE,
> +           "PT_LWPINFO: tid %d (pid %d) event %d flags %#x child pid %d",
> +                   td2->td_tid, p->p_pid, pl->pl_event, pl->pl_flags,
> +                   pl->pl_child_pid);
>                 break;
>
>         case PT_GETNUMLWPS:
> +               CTR2(KTR_PTRACE, "PT_GETNUMLWPS: pid %d: %d threads", p->p_pid,
> +                   p->p_numthreads);
>                 td->td_retval[0] = p->p_numthreads;
>                 break;
>
>         case PT_GETLWPLIST:
> +               CTR3(KTR_PTRACE, "PT_GETLWPLIST: pid %d: data %d, actual %d",
> +                   p->p_pid, data, p->p_numthreads);
>                 if (data <= 0) {
>                         error = EINVAL;
>                         break;
> @@ -1175,6 +1244,8 @@ kern_ptrace(struct thread *td, int req,
>                 break;
>
>         case PT_VM_TIMESTAMP:
> +               CTR2(KTR_PTRACE, "PT_VM_TIMESTAMP: pid %d: timestamp %d",
> +                   p->p_pid, p->p_vmspace->vm_map.timestamp);
>                 td->td_retval[0] = p->p_vmspace->vm_map.timestamp;
>                 break;
>
> @@ -1225,6 +1296,8 @@ stopevent(struct proc *p, unsigned int e
>
>         PROC_LOCK_ASSERT(p, MA_OWNED);
>         p->p_step = 1;
> +       CTR3(KTR_PTRACE, "stopevent: pid %d event %u val %u", p->p_pid, event,
> +           val);
>         do {
>                 p->p_xstat = val;
>                 p->p_xthread = NULL;
>
> Modified: stable/10/sys/sys/ktr.h
> ==============================================================================
> --- stable/10/sys/sys/ktr.h     Sat Jun 13 16:13:31 2015        (r284342)
> +++ stable/10/sys/sys/ktr.h     Sat Jun 13 16:15:43 2015        (r284343)
> @@ -75,7 +75,8 @@
>  #define        KTR_INET6       0x10000000              /* IPv6 stack */
>  #define        KTR_SCHED       0x20000000              /* Machine parsed sched info. */
>  #define        KTR_BUF         0x40000000              /* Buffer cache */
> -#define        KTR_ALL         0x7fffffff
> +#define        KTR_PTRACE      0x80000000              /* Process debugging. */
> +#define        KTR_ALL         0xffffffff
>
>  /* Trace classes to compile in */
>  #ifdef KTR

Hi John!

Could you please MFC this commit too:

commit 4331ca7813ee01d1745c6ff2ced7030329586b30
Author: jhb <jhb@FreeBSD.org>
Date:   Fri May 22 11:09:41 2015 +0000

    Expand ktr_mask to be a 64-bit unsigned integer.

    The mask does not really need to be updated with atomic operations and
    the downside of losing races during transitions is not great (it is
    not marked volatile, so those races are pretty wide open as it is).

    Differential Revision:      https://reviews.freebsd.org/D2595
    Reviewed by:        emaste, neel, rpaulo
    MFC after:  2 weeks
> _______________________________________________
> svn-src-stable-10@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
> To unsubscribe, send any mail to "svn-src-stable-10-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAPQ4ffvZrCmUcEnqu0RC4KUFnpKbhFeNTTdUcLoV%2BXhEOoVW%2Bg>