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 Birrelldir=`dirname $tst` 39*2be1a816SJohn Birrell 40*2be1a816SJohn Birrell$dtrace -o $file -c $dir/tst.spin.exe -s /dev/stdin <<EOF 41*2be1a816SJohn Birrell 42*2be1a816SJohn Birrell #pragma D option quiet 43*2be1a816SJohn Birrell #pragma D option destructive 44*2be1a816SJohn Birrell #pragma D option evaltime=main 45*2be1a816SJohn Birrell 46*2be1a816SJohn Birrell /* 47*2be1a816SJohn Birrell * Toss out the first 100 samples to wait for the program to enter 48*2be1a816SJohn Birrell * its steady state. 49*2be1a816SJohn Birrell */ 50*2be1a816SJohn Birrell 51*2be1a816SJohn Birrell profile-1999 52*2be1a816SJohn Birrell /pid == \$target && n++ > 100/ 53*2be1a816SJohn Birrell { 54*2be1a816SJohn Birrell @total = count(); 55*2be1a816SJohn Birrell @stacks[ustack(4)] = count(); 56*2be1a816SJohn Birrell } 57*2be1a816SJohn Birrell 58*2be1a816SJohn Birrell tick-1s 59*2be1a816SJohn Birrell { 60*2be1a816SJohn Birrell secs++; 61*2be1a816SJohn Birrell } 62*2be1a816SJohn Birrell 63*2be1a816SJohn Birrell tick-1s 64*2be1a816SJohn Birrell /secs > 5/ 65*2be1a816SJohn Birrell { 66*2be1a816SJohn Birrell done = 1; 67*2be1a816SJohn Birrell } 68*2be1a816SJohn Birrell 69*2be1a816SJohn Birrell tick-1s 70*2be1a816SJohn Birrell /secs > 10/ 71*2be1a816SJohn Birrell { 72*2be1a816SJohn Birrell trace("test timed out"); 73*2be1a816SJohn Birrell exit(1); 74*2be1a816SJohn Birrell } 75*2be1a816SJohn Birrell 76*2be1a816SJohn Birrell profile-1999 77*2be1a816SJohn Birrell /pid == \$target && done/ 78*2be1a816SJohn Birrell { 79*2be1a816SJohn Birrell raise(SIGINT); 80*2be1a816SJohn Birrell exit(0); 81*2be1a816SJohn Birrell } 82*2be1a816SJohn Birrell 83*2be1a816SJohn Birrell END 84*2be1a816SJohn Birrell { 85*2be1a816SJohn Birrell printa("TOTAL %@u\n", @total); 86*2be1a816SJohn Birrell printa("START%kEND\n", @stacks); 87*2be1a816SJohn Birrell } 88*2be1a816SJohn BirrellEOF 89*2be1a816SJohn Birrell 90*2be1a816SJohn Birrellstatus=$? 91*2be1a816SJohn Birrellif [ "$status" -ne 0 ]; then 92*2be1a816SJohn Birrell echo $tst: dtrace failed 93*2be1a816SJohn Birrell exit $status 94*2be1a816SJohn Birrellfi 95*2be1a816SJohn Birrell 96*2be1a816SJohn Birrellperl /dev/stdin $file <<EOF 97*2be1a816SJohn Birrell \$_ = <>; 98*2be1a816SJohn Birrell chomp; 99*2be1a816SJohn Birrell die "output problem\n" unless /^TOTAL (\d+)/; 100*2be1a816SJohn Birrell \$count = \$1; 101*2be1a816SJohn Birrell die "too few samples (\$count)\n" unless \$count >= 1000; 102*2be1a816SJohn Birrell 103*2be1a816SJohn Birrell while (<>) { 104*2be1a816SJohn Birrell chomp; 105*2be1a816SJohn Birrell 106*2be1a816SJohn Birrell last if /^$/; 107*2be1a816SJohn Birrell 108*2be1a816SJohn Birrell die "expected START at \$.\n" unless /^START/; 109*2be1a816SJohn Birrell 110*2be1a816SJohn Birrell 111*2be1a816SJohn Birrell \$_ = <>; 112*2be1a816SJohn Birrell chomp; 113*2be1a816SJohn Birrell die "expected END at \$.\n" unless /\`baz\+/; 114*2be1a816SJohn Birrell 115*2be1a816SJohn Birrell \$_ = <>; 116*2be1a816SJohn Birrell chomp; 117*2be1a816SJohn Birrell die "expected END at \$.\n" unless /\`bar\+/; 118*2be1a816SJohn Birrell 119*2be1a816SJohn Birrell \$_ = <>; 120*2be1a816SJohn Birrell chomp; 121*2be1a816SJohn Birrell die "expected END at \$.\n" unless /\`foo\+/; 122*2be1a816SJohn Birrell 123*2be1a816SJohn Birrell \$_ = <>; 124*2be1a816SJohn Birrell chomp; 125*2be1a816SJohn Birrell die "expected END at \$.\n" unless /\`main\+/; 126*2be1a816SJohn Birrell 127*2be1a816SJohn Birrell \$_ = <>; 128*2be1a816SJohn Birrell chomp; 129*2be1a816SJohn Birrell die "expected END at \$.\n" unless /^END\$/; 130*2be1a816SJohn Birrell } 131*2be1a816SJohn Birrell 132*2be1a816SJohn BirrellEOF 133*2be1a816SJohn Birrell 134*2be1a816SJohn Birrellstatus=$? 135*2be1a816SJohn Birrellif [ "$status" -eq 0 ]; then 136*2be1a816SJohn Birrell rm -f $file 137*2be1a816SJohn Birrellfi 138*2be1a816SJohn Birrell 139*2be1a816SJohn Birrellexit $status 140