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 2007 Sun Microsystems, Inc. All rights reserved.
24 # Use is subject to license terms.
25 #
26
27 #
28 # ASSERTION: Make sure USDT probes work as tail-calls on SPARC.
29 #
30
31 if [ $# != 1 ]; then
32 echo expected one argument: '<'dtrace-path'>'
33 exit 2
34 fi
35
36 dtrace=$1
37 DIR=/var/tmp/dtest.$$
38
39 mkdir $DIR
40 cd $DIR
41
42 cat > test.s <<EOF
43 #include <sys/asm_linkage.h>
44
45 DGDEF(__fsr_init_value)
46 .word 0
47
48 ENTRY(test)
49 save %sp, -SA(MINFRAME + 4), %sp
50 mov 9, %i0
51 mov 19, %i1
52 mov 2006, %i2
53 call __dtrace_test___fire
54 restore
55 SET_SIZE(test)
56
57 ENTRY(main)
58 save %sp, -SA(MINFRAME + 4), %sp
59
60 1:
61 call test
62 nop
63
64 ba 1b
65 nop
66
67 ret
68 restore %g0, %g0, %o0
69 SET_SIZE(main)
70 EOF
71
72 cat > prov.d <<EOF
73 provider test {
74 probe fire(int, int, int);
75 };
76 EOF
77
78 /usr/ccs/bin/as -xregsym=no -P -D_ASM -o test.o test.s
79 if [ $? -ne 0 ]; then
80 print -u2 "failed to compile test.s"
81 exit 1
82 fi
83
84 $dtrace -G -32 -s prov.d test.o
85 if [ $? -ne 0 ]; then
86 print -u2 "failed to create DOF"
87 exit 1
88 fi
89
90 gcc -m32 -o test test.o prov.o
91 if [ $? -ne 0 ]; then
92 print -u2 "failed to link final executable"
93 exit 1
94 fi
95
96 $dtrace -c ./test -s /dev/stdin <<EOF
97 test\$target:::fire
98 /arg0 == 9 && arg1 == 19 && arg2 == 2006/
99 {
100 printf("%d/%d/%d", arg0, arg1, arg2);
101 exit(0);
102 }
103
104 test\$target:::fire
105 {
106 printf("%d/%d/%d", arg0, arg1, arg2);
107 exit(1);
108 }
109
110 BEGIN
111 {
112 /*
113 * Let's just do this for 5 seconds.
114 */
115 timeout = timestamp + 5000000000;
116 }
117
118 profile:::tick-4
119 /timestamp > timeout/
120 {
121 trace("test timed out");
122 exit(1);
123 }
124 EOF
125
126 status=$?
127
128 cd /
129 /usr/bin/rm -rf $DIR
130
131 exit $status