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