Home | History | Annotate | Download | only in usdt
      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 2007 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 # ident	"%Z%%M%	%I%	%E% SMI"
     27 
     28 #
     29 # ASSERTION: Make sure USDT probes work as tail-calls on SPARC.
     30 #
     31 
     32 if [ $# != 1 ]; then
     33 	echo expected one argument: '<'dtrace-path'>'
     34 	exit 2
     35 fi
     36 
     37 dtrace=$1
     38 DIR=/var/tmp/dtest.$$
     39 
     40 mkdir $DIR
     41 cd $DIR
     42 
     43 cat > test.s <<EOF
     44 #include <sys/asm_linkage.h>
     45 
     46 	DGDEF(__fsr_init_value)
     47 	.word 0
     48 
     49 	ENTRY(test)
     50 	save	%sp, -SA(MINFRAME + 4), %sp
     51 	mov	9, %i0
     52 	mov	19, %i1
     53 	mov	2006, %i2
     54 	call	__dtrace_test___fire
     55 	restore
     56 	SET_SIZE(test)
     57 
     58 	ENTRY(main)
     59 	save	%sp, -SA(MINFRAME + 4), %sp
     60 
     61 1:
     62 	call	test
     63 	nop
     64 
     65 	ba	1b
     66 	nop
     67 
     68 	ret
     69 	restore	%g0, %g0, %o0
     70 	SET_SIZE(main)
     71 EOF
     72 
     73 cat > prov.d <<EOF
     74 provider test {
     75 	probe fire(int, int, int);
     76 };
     77 EOF
     78 
     79 /usr/ccs/bin/as -xregsym=no -P -D_ASM -o test.o test.s
     80 if [ $? -ne 0 ]; then
     81 	print -u2 "failed to compile test.s"
     82 	exit 1
     83 fi
     84 
     85 $dtrace -G -32 -s prov.d test.o
     86 if [ $? -ne 0 ]; then
     87 	print -u2 "failed to create DOF"
     88 	exit 1
     89 fi
     90 
     91 cc -o test test.o prov.o
     92 if [ $? -ne 0 ]; then
     93 	print -u2 "failed to link final executable"
     94 	exit 1
     95 fi
     96 
     97 $dtrace -c ./test -s /dev/stdin <<EOF
     98 test\$target:::fire
     99 /arg0 == 9 && arg1 == 19 && arg2 == 2006/
    100 {
    101 	printf("%d/%d/%d", arg0, arg1, arg2);
    102 	exit(0);
    103 }
    104 
    105 test\$target:::fire
    106 {
    107 	printf("%d/%d/%d", arg0, arg1, arg2);
    108 	exit(1);
    109 }
    110 
    111 BEGIN
    112 {
    113 	/*
    114 	 * Let's just do this for 5 seconds.
    115 	 */
    116 	timeout = timestamp + 5000000000;
    117 }
    118 
    119 profile:::tick-4
    120 /timestamp > timeout/
    121 {
    122 	trace("test timed out");
    123 	exit(1);
    124 }
    125 EOF
    126 
    127 status=$?
    128 
    129 cd /
    130 /usr/bin/rm -rf $DIR
    131 
    132 exit $status
    133