1*7bd3c1d1SBryan Cantrill# 2*7bd3c1d1SBryan Cantrill# This file and its contents are supplied under the terms of the 3*7bd3c1d1SBryan Cantrill# Common Development and Distribution License ("CDDL"), version 1.0. 4*7bd3c1d1SBryan Cantrill# You may only use this file in accordance with the terms of version 5*7bd3c1d1SBryan Cantrill# 1.0 of the CDDL. 6*7bd3c1d1SBryan Cantrill# 7*7bd3c1d1SBryan Cantrill# A full copy of the text of the CDDL should have accompanied this 8*7bd3c1d1SBryan Cantrill# source. A copy of the CDDL is also available via the Internet at 9*7bd3c1d1SBryan Cantrill# http://www.illumos.org/license/CDDL. 10*7bd3c1d1SBryan Cantrill# 11*7bd3c1d1SBryan Cantrill 12*7bd3c1d1SBryan Cantrill# 13*7bd3c1d1SBryan Cantrill# Copyright (c) 2015, Joyent, Inc. All rights reserved. 14*7bd3c1d1SBryan Cantrill# 15*7bd3c1d1SBryan Cantrill 16*7bd3c1d1SBryan Cantrill# 17*7bd3c1d1SBryan Cantrill# This test assures that we can have the same provider name across multiple 18*7bd3c1d1SBryan Cantrill# probe definitions, and that the result will be the union of those 19*7bd3c1d1SBryan Cantrill# definitions. In particular, libusdt depends on this when (for example) 20*7bd3c1d1SBryan Cantrill# node modules that create a provider are loaded multiple times due to 21*7bd3c1d1SBryan Cantrill# being included by different modules. 22*7bd3c1d1SBryan Cantrill# 23*7bd3c1d1SBryan Cantrill 24*7bd3c1d1SBryan Cantrillif [ $# != 1 ]; then 25*7bd3c1d1SBryan Cantrill echo expected one argument: '<'dtrace-path'>' 26*7bd3c1d1SBryan Cantrill exit 2 27*7bd3c1d1SBryan Cantrillfi 28*7bd3c1d1SBryan Cantrill 29*7bd3c1d1SBryan Cantrilldtrace=$1 30*7bd3c1d1SBryan CantrillDIR=/var/tmp/dtest.$$ 31*7bd3c1d1SBryan Cantrill 32*7bd3c1d1SBryan Cantrillmkdir $DIR 33*7bd3c1d1SBryan Cantrillcd $DIR 34*7bd3c1d1SBryan Cantrill 35*7bd3c1d1SBryan Cantrillcat > test.c <<EOF 36*7bd3c1d1SBryan Cantrill#include <unistd.h> 37*7bd3c1d1SBryan Cantrill 38*7bd3c1d1SBryan Cantrillvoid 39*7bd3c1d1SBryan Cantrillmain() 40*7bd3c1d1SBryan Cantrill{ 41*7bd3c1d1SBryan CantrillEOF 42*7bd3c1d1SBryan Cantrill 43*7bd3c1d1SBryan Cantrillobjs= 44*7bd3c1d1SBryan Cantrill 45*7bd3c1d1SBryan Cantrillfor oogle in bagnoogle stalloogle cockoogle; do 46*7bd3c1d1SBryan Cantrill cat > $oogle.c <<EOF 47*7bd3c1d1SBryan Cantrill#include <sys/sdt.h> 48*7bd3c1d1SBryan Cantrill 49*7bd3c1d1SBryan Cantrillvoid 50*7bd3c1d1SBryan Cantrill$oogle() 51*7bd3c1d1SBryan Cantrill{ 52*7bd3c1d1SBryan Cantrill DTRACE_PROBE(doogle, $oogle); 53*7bd3c1d1SBryan Cantrill} 54*7bd3c1d1SBryan CantrillEOF 55*7bd3c1d1SBryan Cantrill 56*7bd3c1d1SBryan Cantrill cat > $oogle.d <<EOF 57*7bd3c1d1SBryan Cantrillprovider doogle { 58*7bd3c1d1SBryan Cantrill probe $oogle(); 59*7bd3c1d1SBryan Cantrill}; 60*7bd3c1d1SBryan CantrillEOF 61*7bd3c1d1SBryan Cantrill 62*7bd3c1d1SBryan Cantrill gcc -m32 -c $oogle.c 63*7bd3c1d1SBryan Cantrill 64*7bd3c1d1SBryan Cantrill if [ $? -ne 0 ]; then 65*7bd3c1d1SBryan Cantrill print -u2 "failed to compile $oogle.c" 66*7bd3c1d1SBryan Cantrill exit 1 67*7bd3c1d1SBryan Cantrill fi 68*7bd3c1d1SBryan Cantrill 69*7bd3c1d1SBryan Cantrill $dtrace -G -32 -s $oogle.d $oogle.o -o $oogle.d.o 70*7bd3c1d1SBryan Cantrill 71*7bd3c1d1SBryan Cantrill if [ $? -ne 0 ]; then 72*7bd3c1d1SBryan Cantrill print -u2 "failed to process $oogle.d" 73*7bd3c1d1SBryan Cantrill exit 1 74*7bd3c1d1SBryan Cantrill fi 75*7bd3c1d1SBryan Cantrill 76*7bd3c1d1SBryan Cantrill objs="$objs $oogle.o $oogle.d.o" 77*7bd3c1d1SBryan Cantrill echo $oogle'();' >> test.c 78*7bd3c1d1SBryan Cantrilldone 79*7bd3c1d1SBryan Cantrill 80*7bd3c1d1SBryan Cantrillecho "}" >> test.c 81*7bd3c1d1SBryan Cantrill 82*7bd3c1d1SBryan Cantrillgcc -m32 -o test test.c $objs 83*7bd3c1d1SBryan Cantrill 84*7bd3c1d1SBryan Cantrillif [ $? -ne 0 ]; then 85*7bd3c1d1SBryan Cantrill print -u2 "failed to compile test.c" 86*7bd3c1d1SBryan Cantrill exit 1 87*7bd3c1d1SBryan Cantrillfi 88*7bd3c1d1SBryan Cantrill 89*7bd3c1d1SBryan Cantrill$dtrace -n 'doogle$target:::{@[probename] = count()}' \ 90*7bd3c1d1SBryan Cantrill -n 'END{printa("%-10s %@d\n", @)}' -x quiet -x aggsortkey -Zc ./test 91*7bd3c1d1SBryan Cantrill 92*7bd3c1d1SBryan Cantrillif [ $? -ne 0 ]; then 93*7bd3c1d1SBryan Cantrill print -u2 "failed to execute test" 94*7bd3c1d1SBryan Cantrill exit 1 95*7bd3c1d1SBryan Cantrillfi 96*7bd3c1d1SBryan Cantrill 97*7bd3c1d1SBryan Cantrillcd / 98*7bd3c1d1SBryan Cantrill/usr/bin/rm -rf $DIR 99*7bd3c1d1SBryan Cantrillexit 0 100