From owner-freebsd-dtrace@FreeBSD.ORG Wed Oct 23 03:13:51 2013 Return-Path: Delivered-To: freebsd-dtrace@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 0D31B1B5; Wed, 23 Oct 2013 03:13:51 +0000 (UTC) (envelope-from markjdb@gmail.com) Received: from mail-ie0-x233.google.com (mail-ie0-x233.google.com [IPv6:2607:f8b0:4001:c03::233]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C65562C3F; Wed, 23 Oct 2013 03:13:50 +0000 (UTC) Received: by mail-ie0-f179.google.com with SMTP id aq17so350083iec.38 for ; Tue, 22 Oct 2013 20:13:50 -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=T78s73LimSO7Ml6VHpzxdvMnCsf6VvWonHto4bHAAkc=; b=snbGgBtfPCAvhvKsjd5hCmCY3j8YSPkRuiFU7tNFvYyTQBUM/W8DdWafjfzdQEYKyI wbatawToxxEDLr9bnbAaKWKiZggKFZjTQaTvUmJQFTgWtfnZdCM0p6gRPdxtzePzxhYy w/E4UR4VLAMLCj8YMHfZYTH5qeoM5PNw4ywh068I8wIcNIQ+R8OsKhltvdD81Mr+hQhn cppSx+/ZTlgCqnEDtgyeIVGF6zizs6S/2Bim3R3QADnAR81FOV9sgV5gzv+v+ctorO+Q AuXztlWtSIIaYPqxEdaWpnr+gzGXg2HaJ3XPFgQzCAs4U8PltyRvOtTsrrihBL+lpfGL 916g== X-Received: by 10.50.106.20 with SMTP id gq20mr61611igb.36.1382498030107; Tue, 22 Oct 2013 20:13:50 -0700 (PDT) Received: from raichu (24-212-218-13.cable.teksavvy.com. [24.212.218.13]) by mx.google.com with ESMTPSA id yt10sm5913570igb.9.2013.10.22.20.13.48 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 22 Oct 2013 20:13:49 -0700 (PDT) Sender: Mark Johnston Date: Tue, 22 Oct 2013 23:13:44 -0400 From: Mark Johnston To: freebsd-dtrace@freebsd.org Subject: Re: Integration DTrace problems Message-ID: <20131023031344.GA8033@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: <20131020235216.GA13816@charmander> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: Veniamin Gvozdikov 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: Wed, 23 Oct 2013 03:13:51 -0000 On Sun, Oct 20, 2013 at 07:52:16PM -0400, 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 > > ... > > 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). This comment can be ignored - I had forgotten that the argN variables are always 64 bits wide and so may give incorrect results when trying to print a 32-bit function argument. Switching to args[N] gives me correct results. So with r256822, argument fetching seems to be working properly with USDT and PID probes. :) -Mark > > > * 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;