]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/usdt/tst.corruptenv.ksh
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / cddl / contrib / opensolaris / cmd / dtrace / test / tst / common / usdt / tst.corruptenv.ksh
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         \$(CC) -o main main.o prov.o
64
65 main.o: main.c prov.h
66         \$(CC) -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