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