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 2006 Sun Microsystems, Inc. All rights reserved.
24 # Use is subject to license terms.
25 #
26
27 if [ $# != 1 ]; then
28 echo expected one argument: '<'dtrace-path'>'
29 exit 2
30 fi
31
32 dtrace=$1
33 DIR=/var/tmp/dtest.$$
34
35 mkdir $DIR
36 cd $DIR
37
38 cat > test.c <<EOF
39 #include <unistd.h>
40 #include <sys/sdt.h>
41
42 int
43 main(int argc, char **argv)
44 {
45 DTRACE_PROBE(test_prov, probe1);
46 sleep(600);
47 }
48 EOF
49
50 cat > prov.dtrace <<EOF # Oddly named, so this isn't a library
51 provider test_prov {
52 probe probe1();
53 };
54 EOF
55
56 cat > random.d <<EOF # A library with a conflicting probename
57 provider some_other_prov {
58 probe probe1();
59 };
60 EOF
61
62 gcc -c test.c
63 if [ $? -ne 0 ]; then
64 print -u2 "failed to compile test.c"
65 exit 1
66 fi
67 $dtrace -G -32 -s prov.dtrace test.o -o prov.o
68 if [ $? -ne 0 ]; then
69 print -u2 "failed to create DOF"
70 exit 1
71 fi
72 gcc -o test test.o prov.o
73 if [ $? -ne 0 ]; then
74 print -u2 "failed to link final executable"
75 exit 1
76 fi
77
78 script()
79 {
80 ./test &
81 pid=$!
82 $dtrace -L. -qn 'BEGIN { exit(0); }'
83 ret=$?
84 kill $pid
85 return $ret
86 }
87
88 script
89 status=$?
90
91 cd /
92 /usr/bin/rm -rf $DIR
93
94 exit $status