From owner-svn-src-stable-10@FreeBSD.ORG Sun Jun 14 10:39:30 2015 Return-Path: Delivered-To: svn-src-stable-10@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 1B43AB6 for ; Sun, 14 Jun 2015 10:39:30 +0000 (UTC) (envelope-from oliver.pinter@hardenedbsd.org) Received: from mail-wi0-f173.google.com (mail-wi0-f173.google.com [209.85.212.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A3791943 for ; Sun, 14 Jun 2015 10:39:29 +0000 (UTC) (envelope-from oliver.pinter@hardenedbsd.org) Received: by wifx6 with SMTP id x6so51237302wif.0 for ; Sun, 14 Jun 2015 03:39:21 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=tfLrXrwA8AiGlFt+4TBIu6F/iwHH8njy8W2MPL+mU+g=; b=bI5vnaAkieaYxPM4B7yEiq53QT3uGu18OAoEU/xm08m2ip+oSIErQne+L8uzY9LZe+ L17A2XuDWJWjQU366PULr463Y5DfnFZMeIgacreSjp9EBmBknMPsRl0g0XSh3X9hrq5g YzIDGkU1iWzBjBexJegVVxI/IK2hYqBi2lkieslbg7RTHhpGZ4grcJe0gHrO0SxjK2ni s7GqGA8Rbz7ReDGM31ZOIo3PA1eZpuDnsWeolBy2jHbW6arxGyBLPwhsQZhjSu/gFFOe 7cAqvMKb+kfUlDLaM6AzFSdcLzmN4KVJL9pzZwcHafG2tiwG/gcaqbK9Z7SD7pvjJ1/N koQw== X-Gm-Message-State: ALoCoQk2/QMVuszpAtS7OEeIAOKHv1Hkv64Rj4ezlmUCDHanK6hHA2Ha6LhMKrkbRxx0QWTP2wu+ MIME-Version: 1.0 X-Received: by 10.180.102.227 with SMTP id fr3mr21794009wib.19.1434278361658; Sun, 14 Jun 2015 03:39:21 -0700 (PDT) Received: by 10.194.162.225 with HTTP; Sun, 14 Jun 2015 03:39:21 -0700 (PDT) In-Reply-To: <201506131615.t5DGFhUm038534@svn.freebsd.org> References: <201506131615.t5DGFhUm038534@svn.freebsd.org> Date: Sun, 14 Jun 2015 12:39:21 +0200 Message-ID: Subject: Re: svn commit: r284343 - in stable: 10/sys/kern 10/sys/sys 9/sys/kern 9/sys/sys From: Oliver Pinter To: John Baldwin Cc: "src-committers@freebsd.org" , "svn-src-all@freebsd.org" , svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org Content-Type: text/plain; charset=UTF-8 X-BeenThere: svn-src-stable-10@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for only the 10-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2015 10:39:30 -0000 On Sat, Jun 13, 2015 at 6:15 PM, John Baldwin 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 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"