19512fe85Sahl#
29512fe85Sahl# CDDL HEADER START
39512fe85Sahl#
49512fe85Sahl# The contents of this file are subject to the terms of the
59512fe85Sahl# Common Development and Distribution License (the "License").
69512fe85Sahl# You may not use this file except in compliance with the License.
79512fe85Sahl#
89512fe85Sahl# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99512fe85Sahl# or http://www.opensolaris.org/os/licensing.
109512fe85Sahl# See the License for the specific language governing permissions
119512fe85Sahl# and limitations under the License.
129512fe85Sahl#
139512fe85Sahl# When distributing Covered Code, include this CDDL HEADER in each
149512fe85Sahl# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159512fe85Sahl# If applicable, add the following below this CDDL HEADER, with the
169512fe85Sahl# fields enclosed by brackets "[]" replaced with your own identifying
179512fe85Sahl# information: Portions Copyright [yyyy] [name of copyright owner]
189512fe85Sahl#
199512fe85Sahl# CDDL HEADER END
209512fe85Sahl#
219512fe85Sahl
229512fe85Sahl#
239512fe85Sahl# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
249512fe85Sahl# Use is subject to license terms.
259512fe85Sahl#
269512fe85Sahl
2723b5c241Stomeeif [ $# != 1 ]; then
2823b5c241Stomee	echo expected one argument: '<'dtrace-path'>'
2923b5c241Stomee	exit 2
3023b5c241Stomeefi
3123b5c241Stomee
3223b5c241Stomeedtrace=$1
3323b5c241Stomee
3423b5c241Stomee#
35*c090e5dfSBryan Cantrill# Some variants of nm may exec a 64-bit version of themselves. DTrace uses
36*c090e5dfSBryan Cantrill# libproc (which uses /proc) to find out when the traced process exits, but a
37*c090e5dfSBryan Cantrill# 32-bit process can't examine a 64-bit one with libproc. The LD_NOEXEC_64
38*c090e5dfSBryan Cantrill# variable prevents nm from re-execing itself.
3923b5c241Stomee#
40*c090e5dfSBryan CantrillLD_NOEXEC_64=nono $dtrace -F -s /dev/stdin -c 'nm /bin/ls' stat <<EOF
4123b5c241Stomee
429512fe85Sahlpid\$target::\$1:entry
439512fe85Sahl{
449512fe85Sahl	self->start = vtimestamp;
459512fe85Sahl}
469512fe85Sahl
479512fe85Sahlpid\$target:::entry
489512fe85Sahl/self->start/
499512fe85Sahl{
509512fe85Sahl	trace(vtimestamp - self->start);
519512fe85Sahl}
529512fe85Sahl
539512fe85Sahlpid\$target:::return
549512fe85Sahl/self->start/
559512fe85Sahl{
569512fe85Sahl	trace(vtimestamp - self->start);
579512fe85Sahl}
589512fe85Sahl
599512fe85Sahlpid\$target::\$1:return
609512fe85Sahl/self->start/
619512fe85Sahl{
629512fe85Sahl	self->start = 0;
639512fe85Sahl	exit(0);
649512fe85Sahl}
659512fe85Sahl
669512fe85Sahlsyscall:::
679512fe85Sahl/self->start/
689512fe85Sahl{
699512fe85Sahl	trace(vtimestamp - self->start);
709512fe85Sahl}
719512fe85Sahl
729512fe85Sahlfbt:::
739512fe85Sahl/self->start/
749512fe85Sahl{
759512fe85Sahl	trace(vtimestamp - self->start);
769512fe85Sahl}
779512fe85SahlEOF
78