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 34PATH=/usr/bin:/usr/sbin:$PATH 35 36if (( $# != 1 )); then 37 print -u2 'expected one argument: <dtrace-path>' 38 exit 2 39fi 40 41# 42# jdtrace does not implement the -h option that is required to generate 43# C header files. 44# 45if [[ "$1" == */jdtrace ]]; then 46 exit 0 47fi 48 49dtrace="$1" 50startdir="$PWD" 51dir=$(mktemp -d -t drtiXXXXXX) 52if (( $? != 0 )); then 53 print -u2 'Could not create safe temporary directory' 54 exit 2 55fi 56 57cd "$dir" 58 59cat > Makefile <<EOF 60all: main 61 62main: main.o prov.o 63 \$(CC) -o main main.o prov.o 64 65main.o: main.c prov.h 66 \$(CC) -c main.c 67 68prov.h: prov.d 69 $dtrace -h -s prov.d 70 71prov.o: prov.d main.o 72 $dtrace -G -s prov.d main.o 73EOF 74 75cat > prov.d <<EOF 76provider tester { 77 probe entry(); 78}; 79EOF 80 81cat > main.c <<EOF 82#include <stdlib.h> 83#include <sys/sdt.h> 84#include "prov.h" 85 86int 87main(int argc, char **argv, char **envp) 88{ 89 envp[0] = (char*)0xff; 90 TESTER_ENTRY(); 91 return 0; 92} 93EOF 94 95make > /dev/null 96status=$? 97if (( $status != 0 )) ; then 98 print -u2 "failed to build" 99else 100 ./main 101 status=$? 102fi 103 104cd "$startdir" 105rm -rf "$dir" 106 107exit $status 108