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
28#
29# This test verifies that a regex in the provider name will match
30# USDT probes as well as pid probes (e.g., p*d$target matches both 
31# pid$target and pyramid$target.)
32#
33
34if [ $# != 1 ]; then
35	echo expected one argument: '<'dtrace-path'>'
36	exit 2
37fi
38
39dtrace=$1
40DIR=${TMPDIR:-/tmp}/dtest.$$
41
42mkdir $DIR
43cd $DIR
44
45cat > Makefile <<EOF
46all: main
47
48main: main.o prov.o
49	gcc -m32 -o main main.o prov.o
50
51main.o: main.c prov.h
52	gcc -m32 -c main.c
53
54prov.h: prov.d
55	$dtrace -h -s prov.d
56
57prov.o: prov.d main.o
58	$dtrace -G -32 -s prov.d main.o
59EOF
60
61cat > prov.d <<EOF
62provider pyramid {
63	probe entry();
64};
65EOF
66
67cat > main.c <<EOF
68#include <sys/sdt.h>
69#include "prov.h"
70
71int
72main(int argc, char **argv)
73{
74	PYRAMID_ENTRY();
75}
76EOF
77
78make > /dev/null
79if [ $? -ne 0 ]; then
80	print -u2 "failed to build"
81	exit 1
82fi
83
84cat > main.d <<'EOF'
85p*d$target::main:entry
86{
87	printf("%s:%s:%s\n", probemod, probefunc, probename);
88}
89EOF
90
91script() {
92	$dtrace -q -s ./main.d -c ./main
93}
94
95script
96status=$?
97
98cd /tmp
99/usr/bin/rm -rf $DIR
100
101exit $status
102