From owner-freebsd-dtrace@FreeBSD.ORG Mon Oct 21 04:20:31 2013 Return-Path: Delivered-To: freebsd-dtrace@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id C283B2A7; Mon, 21 Oct 2013 04:20:31 +0000 (UTC) (envelope-from markjdb@gmail.com) Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 876E62889; Mon, 21 Oct 2013 04:20:31 +0000 (UTC) Received: by mail-ie0-f180.google.com with SMTP id e14so10335308iej.39 for ; Sun, 20 Oct 2013 21:20:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=1sBjIddx+gmdKFLBA9UvcOIpL7iyC18ZDGrl7Y+YLX4=; b=cmqoGDxBfej4/mNyqMnna9iuYXHgFsOiapF5iW7N2ku1jo3eBRon9dsRlpIJu5tEnf 0ymd77wVeCscgZ3HK1TMT/pbcTkbM/3QgLc0kdIQUPnqVFTM+9uQKtOwunMAF6P9HrTj H7ws6zWyw5Xh1PcZaRb6GwU2uqZrnRE3zZ78UUSK3qA1SlnAmGQSCWxwQTlghdp5QRtH sFPSVgidN/9smgkXvPVcilbR5xV1dOMIoznVyL6TRHNuJNcXEZolfVSkeA5iMltFFwUQ H2v2qBAMKCv9vrCGiyzX7occtZWlUov2uYpMPOpb1eNCCZNL5yJG6llHhjlWjhG/cVNE C07w== X-Received: by 10.50.153.50 with SMTP id vd18mr7934555igb.6.1382329230420; Sun, 20 Oct 2013 21:20:30 -0700 (PDT) Received: from raichu (24-212-218-13.cable.teksavvy.com. [24.212.218.13]) by mx.google.com with ESMTPSA id m1sm28358344igj.10.2013.10.20.21.20.29 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 20 Oct 2013 21:20:29 -0700 (PDT) Sender: Mark Johnston Date: Mon, 21 Oct 2013 00:20:27 -0400 From: Mark Johnston To: Adam Leventhal Subject: Re: Integration DTrace problems Message-ID: <20131021042027.GC13315@raichu> References: <6A174747-D855-481D-A191-67A2805BC9AE@freebsd.org> <20131020235216.GA13816@charmander> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Cc: Veniamin Gvozdikov , freebsd-dtrace@freebsd.org X-BeenThere: freebsd-dtrace@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "A discussion list for developers working on DTrace in FreeBSD." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Oct 2013 04:20:31 -0000 On Sun, Oct 20, 2013 at 09:29:06PM -0500, Adam Leventhal wrote: > Hey Mark, > > I'd go so far as to suggest you remove the #ifdef sun stuff and just > have your new logic replace what was there. As the original author of > that code (I think), it is more kludgy than clever in retrospect -- as > so many things are... Fair enough. I removed the #ifdefs and committed the change as r256822. Thanks! -Mark > > Thanks. > > Adam > > On Sun, Oct 20, 2013 at 6:52 PM, Mark Johnston wrote: > > On Wed, Oct 09, 2013 at 01:54:14AM +0400, Veniamin Gvozdikov wrote: > >> Hello, > >> > >> I have problems with integration DTrace: > >> > >> * Wildcard bug > >> * USDT at runtime works only with probes with arguments less than 5 > > > > The patch below should partly address this issue (which exists for the > > pid provider too). On amd64, the first six arguments are taken out of the > > trap frame with (roughly) the following line: > > > > val = regs->r_rdi[argno] > > > > where 0 <= argno <= 5 is the argument index. This works when the six > > argument registers correspond to consecutive of struct reg, which is not > > the case on FreeBSD. This bug only comes up when argno == 5 though, > > since the first _five_ arguments are passed directly to dtrace_probe() by > > the fasttrap trap handler. > > > > Arguments of index > 5 come from the stack and may still be incorrect > > with this patch. I'm not yet sure what the problem is - if the arguments > > are (4-byte) ints, some of the values are wrong, but when I change the > > types to long, the values are correct (up to arg9 at least). > > > >> * USDT depended by base src because need dtrace.h although It exists on OSX and Oracle Linux > >> * Bug with providers position in D file with multi link dtrace objects > >> * Bug with not used probes when all providers unavailable if doesn't use in code > >> * Inconvenient toolchains (need to see DTrace on OSX) > >> > >> For more details go to link http://zlonet.ru/page/dtrace-integration-features/ . > >> > >> > >> Any idea? > > > > diff --git a/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c b/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c > > index 65991af..8afc45a 100644 > > --- a/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c > > +++ b/sys/cddl/contrib/opensolaris/uts/intel/dtrace/fasttrap_isa.c > > @@ -271,8 +271,26 @@ fasttrap_anarg(struct reg *rp, int function_entry, int argno) > > * In 64-bit mode, the first six arguments are stored in > > * registers. > > */ > > - if (argno < 6) > > + if (argno < 6) { > > +#if !defined(sun) > > + switch (argno) { > > + case 0: > > + return (rp->r_rdi); > > + case 1: > > + return (rp->r_rsi); > > + case 2: > > + return (rp->r_rdx); > > + case 3: > > + return (rp->r_rcx); > > + case 4: > > + return (rp->r_r8); > > + case 5: > > + return (rp->r_r9); > > + } > > +#else > > return ((&rp->r_rdi)[argno]); > > +#endif > > + } > > > > stack = (uintptr_t *)rp->r_rsp; > > DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT); > > diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_isa.c b/sys/cddl/dev/dtrace/amd64/dtrace_isa.c > > index 34d6f33..b82b77f 100644 > > --- a/sys/cddl/dev/dtrace/amd64/dtrace_isa.c > > +++ b/sys/cddl/dev/dtrace/amd64/dtrace_isa.c > > @@ -367,7 +367,31 @@ dtrace_getarg(int arg, int aframes) > > sizeof (uintptr_t)); > > > > if (arg <= inreg) { > > +#if !defined(sun) > > + switch (arg) { > > + case 0: > > + stack = (uintptr_t *)&rp->r_rdi; > > + break; > > + case 1: > > + stack = (uintptr_t *)&rp->r_rsi; > > + break; > > + case 2: > > + stack = (uintptr_t *)&rp->r_rdx; > > + break; > > + case 3: > > + stack = (uintptr_t *)&rp->r_rcx; > > + break; > > + case 4: > > + stack = (uintptr_t *)&rp->r_r8; > > + break; > > + case 5: > > + stack = (uintptr_t *)&rp->r_r9; > > + break; > > + } > > + arg = 0; > > +#else > > stack = (uintptr_t *)&rp->r_rdi; > > +#endif > > } else { > > stack = (uintptr_t *)(rp->r_rsp); > > arg -= inreg; > > _______________________________________________ > > freebsd-dtrace@freebsd.org mailing list > > https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace > > To unsubscribe, send any mail to "freebsd-dtrace-unsubscribe@freebsd.org" > > > > -- > Adam Leventhal > CTO, Delphix > http://blog.delphix.com/ahl