Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Nov 2013 12:03:05 +0800 (SGT)
From:      Prashanth Kumar <pra_udupi@yahoo.co.in>
To:        "freebsd-dtrace@freebsd.org" <freebsd-dtrace@freebsd.org>
Message-ID:  <1384228985.51085.YahooMailNeo@web192604.mail.sg3.yahoo.com>

index | next in thread | raw e-mail

Hello, 

I had been doing some work on the pid provider in Dtrace.I have made a few modification
 so that it will list all the functions used in the program as seen in Solaris or MacOSX.
 Presently in FreeBSD, you have to name each functions you have to probe in the program. For
 example "dtrace -n 'pid$target:program::entry' -c ./program" will list all the functions called
 in the program.This modification was made in libproc library(proc_sym.c).

            Also while creating probe points for return probe type, any function with more than one return
 path will fail.This is because "fasttrap_probe_spec_t" type variable is not fully copied into the
 kernel in fasttrap_ioctl() function.I have modified in line with Solaris code where the copying  is
 done manually by Dtrace, rather than the kernel.(fasttap.c, fasttrap.h)
 Also in "fasttrap_pid_probe()" (fasttrap_isa.c) for the case of "FASTTRAP_T_PUSHL_EBP", the ebp register
 has to be copied to the stack not esp.
        I had attached the patch files for review.

 One other issue i noticed is that if the program being traced uses Thread Local Storage than
 for the case of entry probe, it will hang in ___tls_get_addr function in ld-elf.so.
 If you use scanf or fscanf in your program you can notice this behaviour. This i believe is due to
 Dtrace using gs segment register to point to the scratch space, and TLS also loading the thread variable
 from gs register.

 if you change the following code in fasttrap_isa.c
 <code>
 #ifdef __i386__
         addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd);
 #else
         addr = curthread->td_pcb->pcb_gsbase;
 #endif
         addr += sizeof (void *);   
 </code>

 to

 <code>
 #ifdef __i386__
         addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd);
 #else
         addr = curthread->td_pcb->pcb_gsbase;
 #endif
         addr += sizeof (void *) * 3;   
 </code>

 the Dtrace will not hang. I am not sure what is happening here and
 whether this is the correct solution.
 This changes were made in FreeBSD 9.2-386-RELEASE. I applied the above patches on
 FreeBSD 10-BETA (with some manual work) and it was still working.
From owner-freebsd-dtrace@FreeBSD.ORG  Tue Nov 12 04:18:13 2013
Return-Path: <owner-freebsd-dtrace@FreeBSD.ORG>
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 ESMTPS id B2CC5D4C
 for <freebsd-dtrace@freebsd.org>; Tue, 12 Nov 2013 04:18:13 +0000 (UTC)
Received: from mail-ie0-x231.google.com (mail-ie0-x231.google.com
 [IPv6:2607:f8b0:4001:c03::231])
 (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits))
 (No client certificate requested)
 by mx1.freebsd.org (Postfix) with ESMTPS id 845853D3F
 for <freebsd-dtrace@freebsd.org>; Tue, 12 Nov 2013 04:18:13 +0000 (UTC)
Received: by mail-ie0-f177.google.com with SMTP id qd12so947086ieb.22
 for <freebsd-dtrace@freebsd.org>; Mon, 11 Nov 2013 20:18:13 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s 120113;
 h=sender:date:from:to:cc:subject:message-id:references:mime-version
 :content-type:content-disposition:content-transfer-encoding
 :in-reply-to:user-agent;
 bh=K9/zTXZiKhtFrdh1zM1tEgAsiuDWS01LH5rLiNeeKoE=;
 b=bvy9BLdr4YGADQVKruRDCfVcjhn5za24raEja10ijhO/P2SqvL3k2pzsxpxU6jWo7C
 aBc9qOsMYJ3Vyuq1/BvyOAPhLW42Nw72WnS+CsOlasGNfw6FMPQTDmOZQGJuQL1zOk9A
 AEmvRWG2wIupOoRqN9fDmgvEP8IKTOmsWuVpdD3ob+vn0o7qrjJYEYJrrr4oEJGs3xsl
 3m/sW9vUFpovroZdHyoTAaM1a8mtivbikGjOTuVOeWG32V5vJCXsSTJ/TIV3s4Rqs+Hc
 tex3lqAUpzT1Z4t2lu48qksZyjXl6FsqeyHWxfoNWcpZHclkJk7qEnUxl4OQtm0OfqFd
 gZiQ=X-Received: by 10.50.82.41 with SMTP id f9mr14755179igy.26.1384229893024;
 Mon, 11 Nov 2013 20:18:13 -0800 (PST)
Received: from raichu (24-212-218-13.cable.teksavvy.com. [24.212.218.13])
 by mx.google.com with ESMTPSA id f5sm22528908igc.4.2013.11.11.20.18.09
 for <multiple recipients>
 (version=TLSv1 cipherìDHE-RSA-RC4-SHA bits8/128);
 Mon, 11 Nov 2013 20:18:10 -0800 (PST)
Sender: Mark Johnston <markjdb@gmail.com>
Date: Mon, 11 Nov 2013 23:18:05 -0500
From: Mark Johnston <markj@freebsd.org>
To: Prashanth Kumar <pra_udupi@yahoo.co.in>
Subject: Re: your mail
Message-ID: <20131112041805.GA76413@raichu>
References: <1384228985.51085.YahooMailNeo@web192604.mail.sg3.yahoo.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <1384228985.51085.YahooMailNeo@web192604.mail.sg3.yahoo.com>
User-Agent: Mutt/1.5.21 (2010-09-15)
Cc: "freebsd-dtrace@freebsd.org" <freebsd-dtrace@freebsd.org>
X-BeenThere: freebsd-dtrace@freebsd.org
X-Mailman-Version: 2.1.16
Precedence: list
List-Id: "A discussion list for developers working on DTrace in FreeBSD."
 <freebsd-dtrace.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/freebsd-dtrace>,
 <mailto:freebsd-dtrace-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/freebsd-dtrace/>;
List-Post: <mailto:freebsd-dtrace@freebsd.org>
List-Help: <mailto:freebsd-dtrace-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/freebsd-dtrace>,
 <mailto:freebsd-dtrace-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 12 Nov 2013 04:18:13 -0000

On Tue, Nov 12, 2013 at 12:03:05PM +0800, Prashanth Kumar wrote:
> Hello,
>
> I had been doing some work on the pid provider in Dtrace.

Hi Prashanth,

I've been going through your patches and committing them as time permits.

>  I have made a few modification
>  so that it will list all the functions used in the program as seen in Solaris or MacOSX.
>  Presently in FreeBSD, you have to name each functions you have to probe in the program. For
>  example "dtrace -n 'pid$target:program::entry' -c ./program" will list all the functions called
>  in the program.This modification was made in libproc library(proc_sym.c).

This has been fixed:

http://svnweb.freebsd.org/base?view=revision&revision%7300
http://svnweb.freebsd.org/base?view=revision&revision%8000

>
>             Also while creating probe points for return probe type, any function with more than one return
>  path will fail.This is because "fasttrap_probe_spec_t" type variable is not fully copied into the
>  kernel in fasttrap_ioctl() function.I have modified in line with Solaris code where the copying  is
>  done manually by Dtrace, rather than the kernel.(fasttap.c, fasttrap.h)

I'm working on this one.

>  Also in "fasttrap_pid_probe()" (fasttrap_isa.c) for the case of "FASTTRAP_T_PUSHL_EBP", the ebp register
>  has to be copied to the stack not esp.
>         I had attached the patch files for review.

This has been fixed:

http://svnweb.freebsd.org/base?view=revision&revision%7679
http://svnweb.freebsd.org/base?view=revision&revision%7143

>
>  One other issue i noticed is that if the program being traced uses Thread Local Storage than
>  for the case of entry probe, it will hang in ___tls_get_addr function in ld-elf.so.
>  If you use scanf or fscanf in your program you can notice this behaviour. This i believe is due to
>  Dtrace using gs segment register to point to the scratch space, and TLS also loading the thread variable
>  from gs register.

I haven't been able to reproduce this one yet. If you can send me a
program and D script that does the trick, that'd be very helpful.

>
>  if you change the following code in fasttrap_isa.c
>  <code>
>  #ifdef __i386__
>          addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd);
>  #else
>          addr = curthread->td_pcb->pcb_gsbase;
>  #endif
>          addr += sizeof (void *);   
>  </code>
>
>  to
>
>  <code>
>  #ifdef __i386__
>          addr = USD_GETBASE(&curthread->td_pcb->pcb_gsd);
>  #else
>          addr = curthread->td_pcb->pcb_gsbase;
>  #endif
>          addr += sizeof (void *) * 3;   
>  </code>
>
>  the Dtrace will not hang. I am not sure what is happening here and
>  whether this is the correct solution.

Neither am I. :)

>  This changes were made in FreeBSD 9.2-386-RELEASE. I applied the above patches on
>  FreeBSD 10-BETA (with some manual work) and it was still working.
> _______________________________________________
> 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"


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1384228985.51085.YahooMailNeo>