Home | History | Annotate | Download | only in pid
      1  5984  jhaslam #!/bin/ksh -p
      2  5984  jhaslam #
      3  5984  jhaslam # CDDL HEADER START
      4  5984  jhaslam #
      5  5984  jhaslam # The contents of this file are subject to the terms of the
      6  5984  jhaslam # Common Development and Distribution License (the "License").
      7  5984  jhaslam # You may not use this file except in compliance with the License.
      8  5984  jhaslam #
      9  5984  jhaslam # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  5984  jhaslam # or http://www.opensolaris.org/os/licensing.
     11  5984  jhaslam # See the License for the specific language governing permissions
     12  5984  jhaslam # and limitations under the License.
     13  5984  jhaslam #
     14  5984  jhaslam # When distributing Covered Code, include this CDDL HEADER in each
     15  5984  jhaslam # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  5984  jhaslam # If applicable, add the following below this CDDL HEADER, with the
     17  5984  jhaslam # fields enclosed by brackets "[]" replaced with your own identifying
     18  5984  jhaslam # information: Portions Copyright [yyyy] [name of copyright owner]
     19  5984  jhaslam #
     20  5984  jhaslam # CDDL HEADER END
     21  5984  jhaslam #
     22  5984  jhaslam 
     23  5984  jhaslam #
     24  5984  jhaslam # Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     25  5984  jhaslam # Use is subject to license terms.
     26  5984  jhaslam #
     27  5984  jhaslam # ident	"%Z%%M%	%I%	%E% SMI"
     28  5984  jhaslam 
     29  5984  jhaslam #
     30  5984  jhaslam # This test verifies that probes will be picked up after a dlopen(3C)
     31  5984  jhaslam # when the pid provider is specified as a glob (e.g., p*d$target.)
     32  5984  jhaslam #
     33  5984  jhaslam 
     34  5984  jhaslam if [ $# != 1 ]; then
     35  5984  jhaslam 	echo expected one argument: '<'dtrace-path'>'
     36  5984  jhaslam 	exit 2
     37  5984  jhaslam fi
     38  5984  jhaslam 
     39  5984  jhaslam dtrace=$1
     40  5984  jhaslam DIR=${TMPDIR:-/tmp}/dtest.$$
     41  5984  jhaslam 
     42  5984  jhaslam mkdir $DIR
     43  5984  jhaslam cd $DIR
     44  5984  jhaslam 
     45  5984  jhaslam cat > Makefile <<EOF
     46  5984  jhaslam all: main altlib.so
     47  5984  jhaslam 
     48  5984  jhaslam main: main.o
     49  5984  jhaslam 	cc -o main main.o
     50  5984  jhaslam 
     51  5984  jhaslam main.o: main.c
     52  5984  jhaslam 	cc -c main.c
     53  5984  jhaslam 
     54  5984  jhaslam altlib.so: altlib.o
     55  5984  jhaslam 	cc -z defs -G -o altlib.so altlib.o -lc
     56  5984  jhaslam 
     57  5984  jhaslam altlib.o: altlib.c
     58  5984  jhaslam 	cc -c altlib.c
     59  5984  jhaslam EOF
     60  5984  jhaslam 
     61  5984  jhaslam cat > altlib.c <<EOF
     62  5984  jhaslam void
     63  5984  jhaslam go(void)
     64  5984  jhaslam {
     65  5984  jhaslam }
     66  5984  jhaslam EOF
     67  5984  jhaslam 
     68  5984  jhaslam cat > main.c <<EOF
     69  5984  jhaslam #include <dlfcn.h>
     70  5984  jhaslam #include <unistd.h>
     71  5984  jhaslam #include <stdio.h>
     72  5984  jhaslam 
     73  5984  jhaslam void
     74  5984  jhaslam go(void)
     75  5984  jhaslam {
     76  5984  jhaslam }
     77  5984  jhaslam 
     78  5984  jhaslam int
     79  5984  jhaslam main(int argc, char **argv)
     80  5984  jhaslam {
     81  5984  jhaslam 	void *alt;
     82  5984  jhaslam 	void *alt_go;
     83  5984  jhaslam 
     84  5984  jhaslam 	go();
     85  5984  jhaslam 
     86  5984  jhaslam 	if ((alt = dlopen("./altlib.so", RTLD_LAZY | RTLD_LOCAL)) 
     87  5984  jhaslam 	    == NULL) {
     88  5984  jhaslam 		printf("dlopen of altlib.so failed: %s\n", dlerror());
     89  5984  jhaslam 		return (1);
     90  5984  jhaslam 	}
     91  5984  jhaslam 
     92  5984  jhaslam 	if ((alt_go = dlsym(alt, "go")) == NULL) {
     93  5984  jhaslam 		printf("failed to lookup 'go' in altlib.so\n");
     94  5984  jhaslam 		return (1);
     95  5984  jhaslam 	}
     96  5984  jhaslam 
     97  5984  jhaslam 	((void (*)(void))alt_go)();
     98  5984  jhaslam 
     99  5984  jhaslam 	return (0);
    100  5984  jhaslam }
    101  5984  jhaslam EOF
    102  5984  jhaslam 
    103  5984  jhaslam make > /dev/null
    104  5984  jhaslam if [ $? -ne 0 ]; then
    105  5984  jhaslam 	print -u2 "failed to build"
    106  5984  jhaslam 	exit 1
    107  5984  jhaslam fi
    108  5984  jhaslam 
    109  5984  jhaslam cat > main.d <<'EOF'
    110  5984  jhaslam p*d$target::go:entry
    111  5984  jhaslam {
    112  5984  jhaslam 	@foo[probemod, probefunc, probename] = count();
    113  5984  jhaslam }
    114  5984  jhaslam 
    115  5984  jhaslam END
    116  5984  jhaslam {
    117  5984  jhaslam 	printa("%s:%s:%s %@u\n",@foo);
    118  5984  jhaslam }
    119  5984  jhaslam EOF
    120  5984  jhaslam 
    121  5984  jhaslam script() {
    122  5984  jhaslam 	$dtrace -q -s ./main.d -c ./main
    123  5984  jhaslam }
    124  5984  jhaslam 
    125  5984  jhaslam script
    126  5984  jhaslam status=$?
    127  5984  jhaslam 
    128  5984  jhaslam cd /tmp
    129  5984  jhaslam /usr/bin/rm -rf $DIR
    130  5984  jhaslam 
    131  5984  jhaslam exit $status
    132