]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/ustack/tst.spin.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 / common / ustack / tst.spin.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 2006 Sun Microsystems, Inc.  All rights reserved.
24 # Use is subject to license terms.
25 #
26 #ident  "%Z%%M% %I%     %E% SMI"
27
28 if [ $# != 1 ]; then
29         echo expected one argument: '<'dtrace-path'>'
30         exit 2
31 fi
32
33 file=out.$$
34 dtrace=$1
35
36 rm -f $file
37
38 dir=`dirname $tst`
39
40 $dtrace -o $file -c $dir/tst.spin.exe -s /dev/stdin <<EOF
41
42         #pragma D option quiet
43         #pragma D option destructive
44         #pragma D option evaltime=main
45
46         /*
47          * Toss out the first 100 samples to wait for the program to enter
48          * its steady state.
49          */
50
51         profile-1999
52         /pid == \$target && n++ > 100/
53         {
54                 @total = count();
55                 @stacks[ustack(4)] = count();
56         }
57
58         tick-1s
59         {
60                 secs++;
61         }
62
63         tick-1s
64         /secs > 5/
65         {
66                 done = 1;
67         }
68
69         tick-1s
70         /secs > 10/
71         {
72                 trace("test timed out");
73                 exit(1);
74         }
75
76         profile-1999
77         /pid == \$target && done/
78         {
79                 raise(SIGINT);
80                 exit(0);
81         }
82
83         END
84         {
85                 printa("TOTAL %@u\n", @total);
86                 printa("START%kEND\n", @stacks);
87         }
88 EOF
89
90 status=$?
91 if [ "$status" -ne 0 ]; then
92         echo $tst: dtrace failed
93         exit $status
94 fi
95
96 perl /dev/stdin $file <<EOF
97         \$_ = <>;
98         chomp;
99         die "output problem\n" unless /^TOTAL (\d+)/;
100         \$count = \$1;
101         die "too few samples (\$count)\n" unless \$count >= 1000;
102
103         while (<>) {
104                 chomp;
105
106                 last if /^$/;
107
108                 die "expected START at \$.\n" unless /^START/;
109
110
111                 \$_ = <>;
112                 chomp;
113                 die "expected END at \$.\n" unless /\`baz\+/;
114
115                 \$_ = <>;
116                 chomp;
117                 die "expected END at \$.\n" unless /\`bar\+/;
118
119                 \$_ = <>;
120                 chomp;
121                 die "expected END at \$.\n" unless /\`foo\+/;
122
123                 \$_ = <>;
124                 chomp;
125                 die "expected END at \$.\n" unless /\`main\+/;
126
127                 \$_ = <>;
128                 chomp;
129                 die "expected END at \$.\n" unless /^END\$/;
130         }
131
132 EOF
133
134 status=$?
135 if [ "$status" -eq 0 ]; then
136         rm -f $file
137 fi
138
139 exit $status