From owner-p4-projects@FreeBSD.ORG Mon Aug 14 12:42:58 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 021C916A4E6; Mon, 14 Aug 2006 12:42:58 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id AD95D16A4DF for ; Mon, 14 Aug 2006 12:42:57 +0000 (UTC) (envelope-from howardsu@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9A7B743D5C for ; Mon, 14 Aug 2006 12:42:54 +0000 (GMT) (envelope-from howardsu@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k7ECgrpX070087 for ; Mon, 14 Aug 2006 12:42:53 GMT (envelope-from howardsu@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k7ECgr0x070084 for perforce@freebsd.org; Mon, 14 Aug 2006 12:42:53 GMT (envelope-from howardsu@FreeBSD.org) Date: Mon, 14 Aug 2006 12:42:53 GMT Message-Id: <200608141242.k7ECgr0x070084@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to howardsu@FreeBSD.org using -f From: Howard Su To: Perforce Change Reviews Cc: Subject: PERFORCE change 103833 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Aug 2006 12:42:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=103833 Change 103833 by howardsu@su_vm on 2006/08/14 12:42:22 Change the behavir of SCE/SCX. It just set the flag of the p_stop. It will not change the state of tracing process anymore. Affected files ... .. //depot/projects/dtrace/src/sys/kern/sys_process.c#7 edit .. //depot/projects/dtrace/src/usr.bin/truss/setup.c#7 edit Differences ... ==== //depot/projects/dtrace/src/sys/kern/sys_process.c#7 (text+ko) ==== @@ -721,9 +721,6 @@ case PT_STEP: case PT_CONTINUE: - case PT_TO_SCE: - case PT_TO_SCX: - case PT_SYSCALL: case PT_DETACH: /* Zero means do not send any signal */ if (data < 0 || data > _SIG_MAXSIG) { @@ -731,21 +728,10 @@ break; } - switch (req) { - case PT_STEP: + if (req == PT_STEP) { error = ptrace_single_step(td2); if (error) goto out; - break; - case PT_TO_SCE: - p->p_stops |= S_PT_SCE; - break; - case PT_TO_SCX: - p->p_stops |= S_PT_SCX; - break; - case PT_SYSCALL: - p->p_stops |= S_PT_SCE | S_PT_SCX; - break; } if (addr != (void *)1) { @@ -817,6 +803,30 @@ break; + case PT_TO_SCE: + if (data == -1) + p->p_stops &= ~S_PT_SCE; + else + p->p_stops |= S_PT_SCE; + break; + case PT_TO_SCX: + if (data == -1) + p->p_stops &=~S_PT_SCE; + else + p->p_stops |= S_PT_SCX; + break; + case PT_SYSCALL: + if (data == -1) + p->p_stops &=~S_PT_SCE | ~S_PT_SCX; + else + p->p_stops |= S_PT_SCE | S_PT_SCX; + break; + case PT_FFORK: + if (data == -1) + p->p_stops &= ~S_PT_FFORK; + else + p->p_stops |= S_PT_FFORK; + break; case PT_WRITE_I: case PT_WRITE_D: write = 1; ==== //depot/projects/dtrace/src/usr.bin/truss/setup.c#7 (text+ko) ==== @@ -84,6 +84,7 @@ waitpid(pid, NULL, WNOHANG); /* Only in the parent here */ + ptrace(PT_SYSCALL, pid, NULL, 0); return (pid); } @@ -98,6 +99,7 @@ { if (ptrace(PT_ATTACH, pid, NULL, 0)) err(1, "can not attach to target process"); + ptrace(PT_SYSCALL, pid, NULL, 0); return (0); } @@ -118,14 +120,14 @@ int waitval; struct ptrace_lwpinfo lwpinfo; - ptrace(PT_SYSCALL, info->pid, (caddr_t)1, 0); - if (waitpid(info->pid, &waitval, WNOHANG) == -1) { + ptrace(PT_CONTINUE, info->pid, (caddr_t)1, 0); + if (waitpid(info->pid, &waitval, 0) == -1) { switch (errno) { case EINTR: break; default: - err(1, "failed"); + err(1, "failed wait pid"); } } if (WIFCONTINUED(waitval)) { @@ -144,17 +146,17 @@ switch(lwpinfo.pl_event) { case PL_EVENT_SYSENTER: info->pr_why = S_SCE; - break; - case PL_EVENT_SYSEXIT: - info->pr_why = S_SCX; - break; - case PL_EVENT_SIGNAL: - info->pr_why = S_SIG; - info->pr_data = lwpinfo.pl_signal; - break; - default: - info->pr_why = S_NONE; - } + break; + case PL_EVENT_SYSEXIT: + info->pr_why = S_SCX; + break; + case PL_EVENT_SIGNAL: + info->pr_why = S_SIG; + info->pr_data = lwpinfo.pl_signal; + break; + default: + info->pr_why = S_NONE; + } return; } }