xref: /freebsd-src/cddl/contrib/opensolaris/cmd/dtrace/test/tst/sparc/ustack/tst.trapstat.ksh (revision 2be1a816b9ff69588e55be0a84cbe2a31efc0f2f)
1*2be1a816SJohn Birrell#/bin/ksh -p
2*2be1a816SJohn Birrell#
3*2be1a816SJohn Birrell# CDDL HEADER START
4*2be1a816SJohn Birrell#
5*2be1a816SJohn Birrell# The contents of this file are subject to the terms of the
6*2be1a816SJohn Birrell# Common Development and Distribution License (the "License").
7*2be1a816SJohn Birrell# You may not use this file except in compliance with the License.
8*2be1a816SJohn Birrell#
9*2be1a816SJohn Birrell# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*2be1a816SJohn Birrell# or http://www.opensolaris.org/os/licensing.
11*2be1a816SJohn Birrell# See the License for the specific language governing permissions
12*2be1a816SJohn Birrell# and limitations under the License.
13*2be1a816SJohn Birrell#
14*2be1a816SJohn Birrell# When distributing Covered Code, include this CDDL HEADER in each
15*2be1a816SJohn Birrell# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*2be1a816SJohn Birrell# If applicable, add the following below this CDDL HEADER, with the
17*2be1a816SJohn Birrell# fields enclosed by brackets "[]" replaced with your own identifying
18*2be1a816SJohn Birrell# information: Portions Copyright [yyyy] [name of copyright owner]
19*2be1a816SJohn Birrell#
20*2be1a816SJohn Birrell# CDDL HEADER END
21*2be1a816SJohn Birrell#
22*2be1a816SJohn Birrell
23*2be1a816SJohn Birrell#
24*2be1a816SJohn Birrell# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
25*2be1a816SJohn Birrell# Use is subject to license terms.
26*2be1a816SJohn Birrell#
27*2be1a816SJohn Birrell# ident	"%Z%%M%	%I%	%E% SMI"
28*2be1a816SJohn Birrell
29*2be1a816SJohn Birrell#
30*2be1a816SJohn Birrell# This script verifies that user-land stacks can be walked safely
31*2be1a816SJohn Birrell# when the trapstat(1M) utility is running. An arbitrary program, w(1),
32*2be1a816SJohn Birrell# is started once a second to ensure stacks can be walked at all stages
33*2be1a816SJohn Birrell# of the process lifecycle.
34*2be1a816SJohn Birrell#
35*2be1a816SJohn Birrell
36*2be1a816SJohn Birrellscript()
37*2be1a816SJohn Birrell{
38*2be1a816SJohn Birrell        $dtrace -o $dtraceout -s /dev/stdin <<EOF
39*2be1a816SJohn Birrell        fbt:::
40*2be1a816SJohn Birrell        {
41*2be1a816SJohn Birrell                @[ustackdepth] = count();
42*2be1a816SJohn Birrell        }
43*2be1a816SJohn BirrellEOF
44*2be1a816SJohn Birrell}
45*2be1a816SJohn Birrell
46*2be1a816SJohn Birrellrun_commands()
47*2be1a816SJohn Birrell{
48*2be1a816SJohn Birrell	cnt=0
49*2be1a816SJohn Birrell
50*2be1a816SJohn Birrell	while [ $cnt -lt 10 ]; do
51*2be1a816SJohn Birrell		w > /dev/null
52*2be1a816SJohn Birrell		sleep 1
53*2be1a816SJohn Birrell		cnt=$(($cnt+1))
54*2be1a816SJohn Birrell	done
55*2be1a816SJohn Birrell}
56*2be1a816SJohn Birrell
57*2be1a816SJohn Birrellif [ $# != 1 ]; then
58*2be1a816SJohn Birrell        echo expected one argument: '<'dtrace-path'>'
59*2be1a816SJohn Birrell        exit 2
60*2be1a816SJohn Birrellfi
61*2be1a816SJohn Birrell
62*2be1a816SJohn Birrelldtrace=$1
63*2be1a816SJohn Birrelldtraceout=/tmp/dtrace.out.$$
64*2be1a816SJohn Birrellscript 2>/dev/null &
65*2be1a816SJohn Birrelltimeout=15
66*2be1a816SJohn Birrell
67*2be1a816SJohn Birrell#
68*2be1a816SJohn Birrell# Sleep while the above script fires into life. To guard against dtrace dying
69*2be1a816SJohn Birrell# and us sleeping forever we allow 15 secs for this to happen. This should be
70*2be1a816SJohn Birrell# enough for even the slowest systems.
71*2be1a816SJohn Birrell#
72*2be1a816SJohn Birrellwhile [ ! -f $dtraceout ]; do
73*2be1a816SJohn Birrell        sleep 1
74*2be1a816SJohn Birrell        timeout=$(($timeout-1))
75*2be1a816SJohn Birrell        if [ $timeout -eq 0 ]; then
76*2be1a816SJohn Birrell                echo "dtrace failed to start. Exiting."
77*2be1a816SJohn Birrell                exit 1
78*2be1a816SJohn Birrell        fi
79*2be1a816SJohn Birrelldone
80*2be1a816SJohn Birrell
81*2be1a816SJohn Birrellrun_commands &
82*2be1a816SJohn Birrelltrapstat -t 1 10
83*2be1a816SJohn Birrellstatus=$?
84*2be1a816SJohn Birrell
85*2be1a816SJohn Birrellrm $dtraceout
86*2be1a816SJohn Birrell
87*2be1a816SJohn Birrellexit $status
88