1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright (c) 2013, Joyent, Inc. All rights reserved.
24#
25
26if [ $# != 1 ]; then
27	echo expected one argument: '<'dtrace-path'>'
28	exit 2
29fi
30
31dtrace=$1
32DIR=/var/tmp/dtest.$$
33
34mkdir $DIR
35cd $DIR
36
37echo '#pragma D option quiet' > test.d
38echo '#pragma D option aggsortkey' >> test.d
39
40cat > test.c <<EOF
41#include <unistd.h>
42
43void
44main()
45{
46EOF
47
48objs=
49
50for oogle in doogle bagnoogle; do
51	cat > $oogle.c <<EOF
52#include <sys/sdt.h>
53
54void
55$oogle()
56{
57	DTRACE_PROBE($oogle, knows);
58}
59EOF
60
61	cat > $oogle.d <<EOF
62provider $oogle {
63	probe knows();
64};
65EOF
66
67	gcc -m32 -c $oogle.c
68
69	if [ $? -ne 0 ]; then
70		print -u2 "failed to compile $oogle.c"
71		exit 1
72	fi
73
74	$dtrace -G -32 -s $oogle.d $oogle.o -o $oogle.d.o
75
76	if [ $? -ne 0 ]; then
77		print -u2 "failed to process $oogle.d"
78		exit 1
79	fi
80
81	objs="$objs $oogle.o $oogle.d.o"
82	echo $oogle'();' >> test.c
83	echo $oogle'$target:::{@[probefunc] = count()}' >> test.d
84done
85
86echo "}" >> test.c
87
88echo 'END{printa("%-10s %@d\\n", @)}' >> test.d
89
90gcc -m32 -o test test.c $objs
91
92if [ $? -ne 0 ]; then
93	print -u2 "failed to compile test.c"
94	exit 1
95fi
96
97$dtrace -s ./test.d -Zc ./test
98
99if [ $? -ne 0 ]; then
100	print -u2 "failed to execute test"
101	exit 1
102fi
103
104cd /
105/usr/bin/rm -rf $DIR
106exit 0
107