16e0bee74Sjhaslam#!/bin/ksh -p
26e0bee74Sjhaslam#
36e0bee74Sjhaslam# CDDL HEADER START
46e0bee74Sjhaslam#
56e0bee74Sjhaslam# The contents of this file are subject to the terms of the
66e0bee74Sjhaslam# Common Development and Distribution License (the "License").
76e0bee74Sjhaslam# You may not use this file except in compliance with the License.
86e0bee74Sjhaslam#
96e0bee74Sjhaslam# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
106e0bee74Sjhaslam# or http://www.opensolaris.org/os/licensing.
116e0bee74Sjhaslam# See the License for the specific language governing permissions
126e0bee74Sjhaslam# and limitations under the License.
136e0bee74Sjhaslam#
146e0bee74Sjhaslam# When distributing Covered Code, include this CDDL HEADER in each
156e0bee74Sjhaslam# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
166e0bee74Sjhaslam# If applicable, add the following below this CDDL HEADER, with the
176e0bee74Sjhaslam# fields enclosed by brackets "[]" replaced with your own identifying
186e0bee74Sjhaslam# information: Portions Copyright [yyyy] [name of copyright owner]
196e0bee74Sjhaslam#
206e0bee74Sjhaslam# CDDL HEADER END
216e0bee74Sjhaslam#
226e0bee74Sjhaslam
236e0bee74Sjhaslam#
246e0bee74Sjhaslam# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
256e0bee74Sjhaslam# Use is subject to license terms.
266e0bee74Sjhaslam#
276e0bee74Sjhaslam
286e0bee74Sjhaslam#
296e0bee74Sjhaslam# This test verifies that a regex in the provider name will match
306e0bee74Sjhaslam# USDT probes as well as pid probes (e.g., p*d$target matches both
316e0bee74Sjhaslam# pid$target and pyramid$target.)
326e0bee74Sjhaslam#
336e0bee74Sjhaslam
346e0bee74Sjhaslamif [ $# != 1 ]; then
356e0bee74Sjhaslam	echo expected one argument: '<'dtrace-path'>'
366e0bee74Sjhaslam	exit 2
376e0bee74Sjhaslamfi
386e0bee74Sjhaslam
396e0bee74Sjhaslamdtrace=$1
406e0bee74SjhaslamDIR=${TMPDIR:-/tmp}/dtest.$$
416e0bee74Sjhaslam
426e0bee74Sjhaslammkdir $DIR
436e0bee74Sjhaslamcd $DIR
446e0bee74Sjhaslam
456e0bee74Sjhaslamcat > Makefile <<EOF
46c090e5dfSBryan Cantrillall: main
476e0bee74Sjhaslam
486e0bee74Sjhaslammain: main.o prov.o
49*a386cc11SRobert Mustacchi	gcc -m32 -o main main.o prov.o
506e0bee74Sjhaslam
516e0bee74Sjhaslammain.o: main.c prov.h
52*a386cc11SRobert Mustacchi	gcc -m32 -c main.c
536e0bee74Sjhaslam
546e0bee74Sjhaslamprov.h: prov.d
556e0bee74Sjhaslam	$dtrace -h -s prov.d
566e0bee74Sjhaslam
576e0bee74Sjhaslamprov.o: prov.d main.o
586e0bee74Sjhaslam	$dtrace -G -32 -s prov.d main.o
596e0bee74SjhaslamEOF
606e0bee74Sjhaslam
616e0bee74Sjhaslamcat > prov.d <<EOF
626e0bee74Sjhaslamprovider pyramid {
636e0bee74Sjhaslam	probe entry();
646e0bee74Sjhaslam};
656e0bee74SjhaslamEOF
666e0bee74Sjhaslam
676e0bee74Sjhaslamcat > main.c <<EOF
686e0bee74Sjhaslam#include <sys/sdt.h>
696e0bee74Sjhaslam#include "prov.h"
706e0bee74Sjhaslam
716e0bee74Sjhaslamint
726e0bee74Sjhaslammain(int argc, char **argv)
736e0bee74Sjhaslam{
746e0bee74Sjhaslam	PYRAMID_ENTRY();
756e0bee74Sjhaslam}
766e0bee74SjhaslamEOF
776e0bee74Sjhaslam
786e0bee74Sjhaslammake > /dev/null
796e0bee74Sjhaslamif [ $? -ne 0 ]; then
806e0bee74Sjhaslam	print -u2 "failed to build"
816e0bee74Sjhaslam	exit 1
826e0bee74Sjhaslamfi
836e0bee74Sjhaslam
846e0bee74Sjhaslamcat > main.d <<'EOF'
856e0bee74Sjhaslamp*d$target::main:entry
866e0bee74Sjhaslam{
876e0bee74Sjhaslam	printf("%s:%s:%s\n", probemod, probefunc, probename);
886e0bee74Sjhaslam}
896e0bee74SjhaslamEOF
906e0bee74Sjhaslam
916e0bee74Sjhaslamscript() {
926e0bee74Sjhaslam	$dtrace -q -s ./main.d -c ./main
936e0bee74Sjhaslam}
946e0bee74Sjhaslam
956e0bee74Sjhaslamscript
966e0bee74Sjhaslamstatus=$?
976e0bee74Sjhaslam
986e0bee74Sjhaslamcd /tmp
996e0bee74Sjhaslam/usr/bin/rm -rf $DIR
1006e0bee74Sjhaslam
1016e0bee74Sjhaslamexit $status
102