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