1178476Sjb#
2178476Sjb# CDDL HEADER START
3178476Sjb#
4178476Sjb# The contents of this file are subject to the terms of the
5178476Sjb# Common Development and Distribution License (the "License").
6178476Sjb# You may not use this file except in compliance with the License.
7178476Sjb#
8178476Sjb# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9178476Sjb# or http://www.opensolaris.org/os/licensing.
10178476Sjb# See the License for the specific language governing permissions
11178476Sjb# and limitations under the License.
12178476Sjb#
13178476Sjb# When distributing Covered Code, include this CDDL HEADER in each
14178476Sjb# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15178476Sjb# If applicable, add the following below this CDDL HEADER, with the
16178476Sjb# fields enclosed by brackets "[]" replaced with your own identifying
17178476Sjb# information: Portions Copyright [yyyy] [name of copyright owner]
18178476Sjb#
19178476Sjb# CDDL HEADER END
20178476Sjb#
21178476Sjb
22178476Sjb#
23178476Sjb# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24178476Sjb# Use is subject to license terms.
25178476Sjb#
26178476Sjb#ident	"%Z%%M%	%I%	%E% SMI"
27178476Sjb
28178476Sjbif [ $# != 1 ]; then
29178476Sjb	echo expected one argument: '<'dtrace-path'>'
30178476Sjb	exit 2
31178476Sjbfi
32178476Sjb
33178476Sjbdtrace=$1
34178476Sjb
35178476Sjb#
36178476Sjb# /usr/ccs/bin/nm execs a 64-bit version of itself. DTrace uses libproc
37178476Sjb# (which uses /proc) to find out when the traced process exits, but a
38178476Sjb# 32-bit process can't examine a 64-bit one with libproc. The
39178476Sjb# LD_NOEXEC_64 variable prevents nm from re-execing itself.
40178476Sjb#
41178476SjbLD_NOEXEC_64=tomeeisrad $dtrace -F -s /dev/stdin -c \
42211545Srpaulo    '/usr/bin/nm /bin/ls' stat <<EOF
43178476Sjb
44178476Sjbpid\$target::\$1:entry
45178476Sjb{
46178476Sjb	self->start = vtimestamp;
47178476Sjb}
48178476Sjb
49178476Sjbpid\$target:::entry
50178476Sjb/self->start/
51178476Sjb{
52178476Sjb	trace(vtimestamp - self->start);
53178476Sjb}
54178476Sjb
55178476Sjbpid\$target:::return
56178476Sjb/self->start/
57178476Sjb{
58178476Sjb	trace(vtimestamp - self->start);
59178476Sjb}
60178476Sjb
61178476Sjbpid\$target::\$1:return
62178476Sjb/self->start/
63178476Sjb{
64178476Sjb	self->start = 0;
65178476Sjb	exit(0);
66178476Sjb}
67178476Sjb
68178476Sjbsyscall:::
69178476Sjb/self->start/
70178476Sjb{
71178476Sjb	trace(vtimestamp - self->start);
72178476Sjb}
73178476Sjb
74178476Sjbfbt:::
75178476Sjb/self->start/
76178476Sjb{
77178476Sjb	trace(vtimestamp - self->start);
78178476Sjb}
79178476SjbEOF
80