xref: /onnv-gate/usr/src/cmd/dtrace/test/tst/common/pid/tst.provregex2.ksh (revision 5984:a183e54573d2)
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