Home | History | Annotate | Download | only in usdt
      1 #
      2 # CDDL HEADER START
      3 #
      4 # The contents of this file are subject to the terms of the
      5 # Common Development and Distribution License (the "License").
      6 # You may not use this file except in compliance with the License.
      7 #
      8 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9 # or http://www.opensolaris.org/os/licensing.
     10 # See the License for the specific language governing permissions
     11 # and limitations under the License.
     12 #
     13 # When distributing Covered Code, include this CDDL HEADER in each
     14 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15 # If applicable, add the following below this CDDL HEADER, with the
     16 # fields enclosed by brackets "[]" replaced with your own identifying
     17 # information: Portions Copyright [yyyy] [name of copyright owner]
     18 #
     19 # CDDL HEADER END
     20 #
     21 
     22 #
     23 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
     24 # Use is subject to license terms.
     25 #
     26 # ident	"%Z%%M%	%I%	%E% SMI"
     27 
     28 #
     29 # Make sure temporary symbols generated due to DTrace probes in static
     30 # functions are removed in the final link step.
     31 #
     32 
     33 if [ $# != 1 ]; then
     34 	echo expected one argument: '<'dtrace-path'>'
     35 	exit 2
     36 fi
     37 
     38 dtrace=$1
     39 DIR=/var/tmp/dtest.$$
     40 
     41 mkdir $DIR
     42 cd $DIR
     43 
     44 cat > prov.d <<EOF
     45 provider test_prov {
     46 	probe go();
     47 };
     48 EOF
     49 
     50 $dtrace -h -s prov.d
     51 if [ $? -ne 0 ]; then
     52 	print -u2 "failed to generate header file"
     53 	exit 1
     54 fi
     55 
     56 cat > test.c <<EOF
     57 #include <sys/types.h>
     58 #include "prov.h"
     59 
     60 static void
     61 foo(void)
     62 {
     63 	TEST_PROV_GO();
     64 }
     65 
     66 int
     67 main(int argc, char **argv)
     68 {
     69 	foo();
     70 
     71 	return (0);
     72 }
     73 EOF
     74 
     75 cc -c test.c
     76 if [ $? -ne 0 ]; then
     77 	print -u2 "failed to compile test.c"
     78 	exit 1
     79 fi
     80 $dtrace -G -32 -s prov.d test.o
     81 if [ $? -ne 0 ]; then
     82 	print -u2 "failed to create DOF"
     83 	exit 1
     84 fi
     85 cc -o test test.o prov.o
     86 if [ $? -ne 0 ]; then
     87 	print -u2 "failed to link final executable"
     88 	exit 1
     89 fi
     90 
     91 nm test.o | grep \$dtrace > /dev/null
     92 if [ $? -ne 0 ]; then
     93 	print -u2 "no temporary symbols in the object file"
     94 	exit 1
     95 fi
     96 
     97 nm test | grep \$dtrace > /dev/null
     98 if [ $? -eq 0 ]; then
     99 	print -u2 "failed to eliminate temporary symbols"
    100 	exit 1
    101 fi
    102 
    103 cd /
    104 /usr/bin/rm -rf $DIR
    105 
    106 exit 0
    107