1*2be1a816SJohn Birrell# 2*2be1a816SJohn Birrell# CDDL HEADER START 3*2be1a816SJohn Birrell# 4*2be1a816SJohn Birrell# The contents of this file are subject to the terms of the 5*2be1a816SJohn Birrell# Common Development and Distribution License (the "License"). 6*2be1a816SJohn Birrell# You may not use this file except in compliance with the License. 7*2be1a816SJohn Birrell# 8*2be1a816SJohn Birrell# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*2be1a816SJohn Birrell# or http://www.opensolaris.org/os/licensing. 10*2be1a816SJohn Birrell# See the License for the specific language governing permissions 11*2be1a816SJohn Birrell# and limitations under the License. 12*2be1a816SJohn Birrell# 13*2be1a816SJohn Birrell# When distributing Covered Code, include this CDDL HEADER in each 14*2be1a816SJohn Birrell# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*2be1a816SJohn Birrell# If applicable, add the following below this CDDL HEADER, with the 16*2be1a816SJohn Birrell# fields enclosed by brackets "[]" replaced with your own identifying 17*2be1a816SJohn Birrell# information: Portions Copyright [yyyy] [name of copyright owner] 18*2be1a816SJohn Birrell# 19*2be1a816SJohn Birrell# CDDL HEADER END 20*2be1a816SJohn Birrell# 21*2be1a816SJohn Birrell 22*2be1a816SJohn Birrell# 23*2be1a816SJohn Birrell# Copyright 2006 Sun Microsystems, Inc. All rights reserved. 24*2be1a816SJohn Birrell# Use is subject to license terms. 25*2be1a816SJohn Birrell# 26*2be1a816SJohn Birrell#ident "%Z%%M% %I% %E% SMI" 27*2be1a816SJohn Birrell 28*2be1a816SJohn Birrellif [ $# != 1 ]; then 29*2be1a816SJohn Birrell echo expected one argument: '<'dtrace-path'>' 30*2be1a816SJohn Birrell exit 2 31*2be1a816SJohn Birrellfi 32*2be1a816SJohn Birrell 33*2be1a816SJohn Birrellfile=out.$$ 34*2be1a816SJohn Birrelldtrace=$1 35*2be1a816SJohn Birrell 36*2be1a816SJohn Birrellrm -f $file 37*2be1a816SJohn Birrell 38*2be1a816SJohn Birrell$dtrace -o $file -c date -s /dev/stdin <<EOF 39*2be1a816SJohn Birrell 40*2be1a816SJohn Birrell #pragma D option quiet 41*2be1a816SJohn Birrell #pragma D option bufsize=1M 42*2be1a816SJohn Birrell #pragma D option bufpolicy=fill 43*2be1a816SJohn Birrell 44*2be1a816SJohn Birrell pid\$target:::entry, 45*2be1a816SJohn Birrell pid\$target:::return, 46*2be1a816SJohn Birrell pid\$target:a.out::, 47*2be1a816SJohn Birrell syscall:::return, 48*2be1a816SJohn Birrell profile:::profile-997 49*2be1a816SJohn Birrell /pid == \$target/ 50*2be1a816SJohn Birrell { 51*2be1a816SJohn Birrell printf("START %s:%s:%s:%s\n", 52*2be1a816SJohn Birrell probeprov, probemod, probefunc, probename); 53*2be1a816SJohn Birrell trace(ustackdepth); 54*2be1a816SJohn Birrell ustack(100); 55*2be1a816SJohn Birrell trace("END\n"); 56*2be1a816SJohn Birrell } 57*2be1a816SJohn Birrell 58*2be1a816SJohn Birrell tick-1sec 59*2be1a816SJohn Birrell /n++ == 10/ 60*2be1a816SJohn Birrell { 61*2be1a816SJohn Birrell trace("test timed out..."); 62*2be1a816SJohn Birrell exit(1); 63*2be1a816SJohn Birrell } 64*2be1a816SJohn BirrellEOF 65*2be1a816SJohn Birrell 66*2be1a816SJohn Birrellstatus=$? 67*2be1a816SJohn Birrellif [ "$status" -ne 0 ]; then 68*2be1a816SJohn Birrell echo $tst: dtrace failed 69*2be1a816SJohn Birrell exit $status 70*2be1a816SJohn Birrellfi 71*2be1a816SJohn Birrell 72*2be1a816SJohn Birrellperl /dev/stdin $file <<EOF 73*2be1a816SJohn Birrell while (<>) { 74*2be1a816SJohn Birrell chomp; 75*2be1a816SJohn Birrell 76*2be1a816SJohn Birrell last if /^\$/; 77*2be1a816SJohn Birrell 78*2be1a816SJohn Birrell die "expected START at \$.\n" unless /^START/; 79*2be1a816SJohn Birrell 80*2be1a816SJohn Birrell \$_ = <>; 81*2be1a816SJohn Birrell chomp; 82*2be1a816SJohn Birrell die "expected depth (\$_) at \$.\n" unless /^(\d+)\$/; 83*2be1a816SJohn Birrell \$depth = \$1; 84*2be1a816SJohn Birrell 85*2be1a816SJohn Birrell for (\$i = 0; \$i < \$depth; \$i++) { 86*2be1a816SJohn Birrell \$_ = <>; 87*2be1a816SJohn Birrell chomp; 88*2be1a816SJohn Birrell die "unexpected END at \$.\n" if /^END/; 89*2be1a816SJohn Birrell } 90*2be1a816SJohn Birrell 91*2be1a816SJohn Birrell \$_ = <>; 92*2be1a816SJohn Birrell chomp; 93*2be1a816SJohn Birrell die "expected END at \$.\n" unless /^END\$/; 94*2be1a816SJohn Birrell } 95*2be1a816SJohn BirrellEOF 96*2be1a816SJohn Birrell 97*2be1a816SJohn Birrellstatus=$? 98*2be1a816SJohn Birrell 99*2be1a816SJohn Birrellcount=`wc -l $file | cut -f1 -do` 100*2be1a816SJohn Birrellif [ "$count" -lt 1000 ]; then 101*2be1a816SJohn Birrell echo $tst: output was too short 102*2be1a816SJohn Birrell status=1 103*2be1a816SJohn Birrellfi 104*2be1a816SJohn Birrell 105*2be1a816SJohn Birrell 106*2be1a816SJohn Birrellif [ "$status" -eq 0 ]; then 107*2be1a816SJohn Birrell rm -f $file 108*2be1a816SJohn Birrellfi 109*2be1a816SJohn Birrell 110*2be1a816SJohn Birrellexit $status 111