Home | History | Annotate | Download | only in pid
      1 #!/bin/ksh -p
      2 #
      3 # CDDL HEADER START
      4 #
      5 # The contents of this file are subject to the terms of the
      6 # Common Development and Distribution License (the "License").
      7 # You may not use this file except in compliance with the License.
      8 #
      9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10 # or http://www.opensolaris.org/os/licensing.
     11 # See the License for the specific language governing permissions
     12 # and limitations under the License.
     13 #
     14 # When distributing Covered Code, include this CDDL HEADER in each
     15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16 # If applicable, add the following below this CDDL HEADER, with the
     17 # fields enclosed by brackets "[]" replaced with your own identifying
     18 # information: Portions Copyright [yyyy] [name of copyright owner]
     19 #
     20 # CDDL HEADER END
     21 #
     22 
     23 #
     24 # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     25 # Use is subject to license terms.
     26 #
     27 # ident	"%Z%%M%	%I%	%E% SMI"
     28 
     29 #
     30 # This test verifies that a regex in the provider name will match
     31 # USDT probes as well as pid probes (e.g., p*d$target matches both 
     32 # pid$target and pyramid$target.)
     33 #
     34 
     35 if [ $# != 1 ]; then
     36 	echo expected one argument: '<'dtrace-path'>'
     37 	exit 2
     38 fi
     39 
     40 dtrace=$1
     41 DIR=${TMPDIR:-/tmp}/dtest.$$
     42 
     43 mkdir $DIR
     44 cd $DIR
     45 
     46 cat > Makefile <<EOF
     47 	all: main
     48 
     49 main: main.o prov.o
     50 	cc -o main main.o prov.o
     51 
     52 main.o: main.c prov.h
     53 	cc -c main.c
     54 
     55 prov.h: prov.d
     56 	$dtrace -h -s prov.d
     57 
     58 prov.o: prov.d main.o
     59 	$dtrace -G -32 -s prov.d main.o
     60 EOF
     61 
     62 cat > prov.d <<EOF
     63 provider pyramid {
     64 	probe entry();
     65 };
     66 EOF
     67 
     68 cat > main.c <<EOF
     69 #include <sys/sdt.h>
     70 #include "prov.h"
     71 
     72 int
     73 main(int argc, char **argv)
     74 {
     75 	PYRAMID_ENTRY();
     76 }
     77 EOF
     78 
     79 make > /dev/null
     80 if [ $? -ne 0 ]; then
     81 	print -u2 "failed to build"
     82 	exit 1
     83 fi
     84 
     85 cat > main.d <<'EOF'
     86 p*d$target::main:entry
     87 {
     88 	printf("%s:%s:%s\n", probemod, probefunc, probename);
     89 }
     90 EOF
     91 
     92 script() {
     93 	$dtrace -q -s ./main.d -c ./main
     94 }
     95 
     96 script
     97 status=$?
     98 
     99 cd /tmp
    100 /usr/bin/rm -rf $DIR
    101 
    102 exit $status
    103