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