154a20ab4SBryan Cantrill#
254a20ab4SBryan Cantrill# CDDL HEADER START
354a20ab4SBryan Cantrill#
454a20ab4SBryan Cantrill# The contents of this file are subject to the terms of the
554a20ab4SBryan Cantrill# Common Development and Distribution License (the "License").
654a20ab4SBryan Cantrill# You may not use this file except in compliance with the License.
754a20ab4SBryan Cantrill#
854a20ab4SBryan Cantrill# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
954a20ab4SBryan Cantrill# or http://www.opensolaris.org/os/licensing.
1054a20ab4SBryan Cantrill# See the License for the specific language governing permissions
1154a20ab4SBryan Cantrill# and limitations under the License.
1254a20ab4SBryan Cantrill#
1354a20ab4SBryan Cantrill# When distributing Covered Code, include this CDDL HEADER in each
1454a20ab4SBryan Cantrill# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1554a20ab4SBryan Cantrill# If applicable, add the following below this CDDL HEADER, with the
1654a20ab4SBryan Cantrill# fields enclosed by brackets "[]" replaced with your own identifying
1754a20ab4SBryan Cantrill# information: Portions Copyright [yyyy] [name of copyright owner]
1854a20ab4SBryan Cantrill#
1954a20ab4SBryan Cantrill# CDDL HEADER END
2054a20ab4SBryan Cantrill#
2154a20ab4SBryan Cantrill
2254a20ab4SBryan Cantrill#
2354a20ab4SBryan Cantrill# Copyright (c) 2013, Joyent, Inc. All rights reserved.
2454a20ab4SBryan Cantrill#
2554a20ab4SBryan Cantrill
2654a20ab4SBryan Cantrillif [ $# != 1 ]; then
2754a20ab4SBryan Cantrill	echo expected one argument: '<'dtrace-path'>'
2854a20ab4SBryan Cantrill	exit 2
2954a20ab4SBryan Cantrillfi
3054a20ab4SBryan Cantrill
3154a20ab4SBryan Cantrilldtrace=$1
3254a20ab4SBryan CantrillDIR=/var/tmp/dtest.$$
3354a20ab4SBryan Cantrill
3454a20ab4SBryan Cantrillmkdir $DIR
3554a20ab4SBryan Cantrillcd $DIR
3654a20ab4SBryan Cantrill
3754a20ab4SBryan Cantrillecho '#pragma D option quiet' > test.d
3854a20ab4SBryan Cantrillecho '#pragma D option aggsortkey' >> test.d
3954a20ab4SBryan Cantrill
4054a20ab4SBryan Cantrillcat > test.c <<EOF
4154a20ab4SBryan Cantrill#include <unistd.h>
4254a20ab4SBryan Cantrill
4354a20ab4SBryan Cantrillvoid
4454a20ab4SBryan Cantrillmain()
4554a20ab4SBryan Cantrill{
4654a20ab4SBryan CantrillEOF
4754a20ab4SBryan Cantrill
4854a20ab4SBryan Cantrillobjs=
4954a20ab4SBryan Cantrill
5054a20ab4SBryan Cantrillfor oogle in doogle bagnoogle; do
5154a20ab4SBryan Cantrill	cat > $oogle.c <<EOF
5254a20ab4SBryan Cantrill#include <sys/sdt.h>
5354a20ab4SBryan Cantrill
5454a20ab4SBryan Cantrillvoid
5554a20ab4SBryan Cantrill$oogle()
5654a20ab4SBryan Cantrill{
5754a20ab4SBryan Cantrill	DTRACE_PROBE($oogle, knows);
5854a20ab4SBryan Cantrill}
5954a20ab4SBryan CantrillEOF
6054a20ab4SBryan Cantrill
6154a20ab4SBryan Cantrill	cat > $oogle.d <<EOF
6254a20ab4SBryan Cantrillprovider $oogle {
6354a20ab4SBryan Cantrill	probe knows();
6454a20ab4SBryan Cantrill};
6554a20ab4SBryan CantrillEOF
6654a20ab4SBryan Cantrill
67*a386cc11SRobert Mustacchi	gcc -m32 -c $oogle.c
6854a20ab4SBryan Cantrill
6954a20ab4SBryan Cantrill	if [ $? -ne 0 ]; then
7054a20ab4SBryan Cantrill		print -u2 "failed to compile $oogle.c"
7154a20ab4SBryan Cantrill		exit 1
7254a20ab4SBryan Cantrill	fi
7354a20ab4SBryan Cantrill
7454a20ab4SBryan Cantrill	$dtrace -G -32 -s $oogle.d $oogle.o -o $oogle.d.o
7554a20ab4SBryan Cantrill
7654a20ab4SBryan Cantrill	if [ $? -ne 0 ]; then
7754a20ab4SBryan Cantrill		print -u2 "failed to process $oogle.d"
7854a20ab4SBryan Cantrill		exit 1
7954a20ab4SBryan Cantrill	fi
8054a20ab4SBryan Cantrill
8154a20ab4SBryan Cantrill	objs="$objs $oogle.o $oogle.d.o"
8254a20ab4SBryan Cantrill	echo $oogle'();' >> test.c
8354a20ab4SBryan Cantrill	echo $oogle'$target:::{@[probefunc] = count()}' >> test.d
8454a20ab4SBryan Cantrilldone
8554a20ab4SBryan Cantrill
8654a20ab4SBryan Cantrillecho "}" >> test.c
8754a20ab4SBryan Cantrill
8854a20ab4SBryan Cantrillecho 'END{printa("%-10s %@d\\n", @)}' >> test.d
8954a20ab4SBryan Cantrill
90*a386cc11SRobert Mustacchigcc -m32 -o test test.c $objs
9154a20ab4SBryan Cantrill
9254a20ab4SBryan Cantrillif [ $? -ne 0 ]; then
9354a20ab4SBryan Cantrill	print -u2 "failed to compile test.c"
9454a20ab4SBryan Cantrill	exit 1
9554a20ab4SBryan Cantrillfi
9654a20ab4SBryan Cantrill
9754a20ab4SBryan Cantrill$dtrace -s ./test.d -Zc ./test
9854a20ab4SBryan Cantrill
9954a20ab4SBryan Cantrillif [ $? -ne 0 ]; then
10054a20ab4SBryan Cantrill	print -u2 "failed to execute test"
10154a20ab4SBryan Cantrill	exit 1
10254a20ab4SBryan Cantrillfi
10354a20ab4SBryan Cantrill
10454a20ab4SBryan Cantrillcd /
10554a20ab4SBryan Cantrill/usr/bin/rm -rf $DIR
10654a20ab4SBryan Cantrillexit 0
107