7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# This file and its contents are supplied under the terms of the
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# Common Development and Distribution License ("CDDL"), version 1.0.
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# You may only use this file in accordance with the terms of version
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# 1.0 of the CDDL.
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# A full copy of the text of the CDDL should have accompanied this
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# source. A copy of the CDDL is also available via the Internet at
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# http://www.illumos.org/license/CDDL.
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# Copyright (c) 2015, Joyent, Inc. All rights reserved.
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# This test assures that we can have the same provider name across multiple
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# probe definitions, and that the result will be the union of those
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# definitions. In particular, libusdt depends on this when (for example)
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# node modules that create a provider are loaded multiple times due to
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill# being included by different modules.
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillif [ $# != 1 ]; then
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill echo expected one argument: '<'dtrace-path'>'
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill exit 2
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillfi
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrilldtrace=$1
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan CantrillDIR=/var/tmp/dtest.$$
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillmkdir $DIR
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillcd $DIR
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillcat > test.c <<EOF
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#include <unistd.h>
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillvoid
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillmain()
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill{
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan CantrillEOF
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillobjs=
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillfor oogle in bagnoogle stalloogle cockoogle; do
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill cat > $oogle.c <<EOF
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill#include <sys/sdt.h>
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillvoid
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill$oogle()
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill{
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill DTRACE_PROBE(doogle, $oogle);
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill}
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan CantrillEOF
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill cat > $oogle.d <<EOF
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillprovider doogle {
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill probe $oogle();
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill};
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan CantrillEOF
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill gcc -m32 -c $oogle.c
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill if [ $? -ne 0 ]; then
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill print -u2 "failed to compile $oogle.c"
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill exit 1
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill fi
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill $dtrace -G -32 -s $oogle.d $oogle.o -o $oogle.d.o
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill if [ $? -ne 0 ]; then
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill print -u2 "failed to process $oogle.d"
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill exit 1
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill fi
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill objs="$objs $oogle.o $oogle.d.o"
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill echo $oogle'();' >> test.c
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrilldone
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillecho "}" >> test.c
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillgcc -m32 -o test test.c $objs
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillif [ $? -ne 0 ]; then
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill print -u2 "failed to compile test.c"
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill exit 1
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillfi
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill$dtrace -n 'doogle$target:::{@[probename] = count()}' \
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill -n 'END{printa("%-10s %@d\n", @)}' -x quiet -x aggsortkey -Zc ./test
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillif [ $? -ne 0 ]; then
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill print -u2 "failed to execute test"
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill exit 1
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillfi
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillcd /
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrill/usr/bin/rm -rf $DIR
7bd3c1d12d0c764e1517c3aca62c634409356764Bryan Cantrillexit 0