1 #!/usr/bin/ksh 2 # 3 # CDDL HEADER START 4 # 5 # The contents of this file are subject to the terms of the 6 # Common Development and Distribution License (the "License"). 7 # You may not use this file except in compliance with the License. 8 # 9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 # or http://www.opensolaris.org/os/licensing. 11 # See the License for the specific language governing permissions 12 # and limitations under the License. 13 # 14 # When distributing Covered Code, include this CDDL HEADER in each 15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 # If applicable, add the following below this CDDL HEADER, with the 17 # fields enclosed by brackets "[]" replaced with your own identifying 18 # information: Portions Copyright [yyyy] [name of copyright owner] 19 # 20 # CDDL HEADER END 21 # 22 23 # 24 # Copyright 2008 Sun Microsystems, Inc. All rights reserved. 25 # Use is subject to license terms. 26 # 27 28 # 29 # This test verifies that a program that corrupts its own environment 30 # without inducing a crash does not crash solely due to drti.o's use of 31 # getenv(3C). 32 # 33 34 PATH=/usr/bin:/usr/sbin:$PATH 35 36 if (( $# != 1 )); then 37 print -u2 'expected one argument: <dtrace-path>' 38 exit 2 39 fi 40 41 # 42 # jdtrace does not implement the -h option that is required to generate 43 # C header files. 44 # 45 if [[ "$1" == */jdtrace ]]; then 46 exit 0 47 fi 48 49 dtrace="$1" 50 startdir="$PWD" 51 dir=$(mktemp -td drtiXXXXXX) 52 if (( $? != 0 )); then 53 print -u2 'Could not create safe temporary directory' 54 exit 2 55 fi 56 57 cd "$dir" 58 59 cat > Makefile <<EOF 60 all: main 61 62 main: main.o prov.o 63 gcc -m32 -o main main.o prov.o 64 65 main.o: main.c prov.h 66 gcc -m32 -c main.c 67 68 prov.h: prov.d 69 $dtrace -h -s prov.d 70 71 prov.o: prov.d main.o 72 $dtrace -G -32 -s prov.d main.o 73 EOF 74 75 cat > prov.d <<EOF 76 provider tester { 77 probe entry(); 78 }; 79 EOF 80 81 cat > main.c <<EOF 82 #include <stdlib.h> 83 #include <sys/sdt.h> 84 #include "prov.h" 85 86 int 87 main(int argc, char **argv, char **envp) 88 { 89 envp[0] = (char*)0xff; 90 TESTER_ENTRY(); 91 return 0; 92 } 93 EOF 94 95 make > /dev/null 96 status=$? 97 if (( $status != 0 )) ; then 98 print -u2 "failed to build" 99 else 100 ./main 101 status=$? 102 fi 103 104 cd "$startdir" 105 rm -rf "$dir" 106 107 exit $status