Update copyright to LGPL on all files
[dyninst.git] / dyninstAPI / tests / src / test7.mutatee.c
1 /*
2  * Copyright (c) 1996-2009 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 /* Test application (Mutatee) */
33
34 /* $Id: test7.mutatee.c,v 1.8 2006/05/03 00:31:24 jodom Exp $ */
35
36 #include <stdio.h>
37 #include <assert.h>
38 #include <sys/types.h>
39 #include <signal.h>
40 #include <string.h>
41 #include <stdlib.h>
42 #include <sys/msg.h>
43 #include <stdarg.h>
44
45 #if defined(i386_unknown_nt4_0) && !defined(__GNUC__)
46 #define WIN32_LEAN_AND_MEAN
47 #include <windows.h>
48 #include <process.h>
49 #define getpid _getpid
50 #else
51 #include <unistd.h>
52 #endif
53
54 #ifdef __cplusplus
55 int mutateeCplusplus = 1;
56 #else
57 int mutateeCplusplus = 0;
58 #endif
59
60 #ifndef COMPILER
61 #define COMPILER ""
62 #endif
63 const char *Builder_id=COMPILER; /* defined on compile line */
64
65 int debugPrint = 0;
66
67 /* control debug printf statements */
68 void dprintf(const char *fmt, ...) {
69    va_list args;
70    va_start(args, fmt);
71
72    if(debugPrint)
73       vfprintf(stderr, fmt, args);
74
75    va_end(args);
76
77    fflush(stderr);
78 }
79
80
81 #define TRUE    1
82 #define FALSE   0
83
84 int globalVariable7_1 = 123;
85 int globalVariable7_2 = 159;
86 int globalVariable7_3 = 246;
87 int globalVariable7_4 = 789;
88 int globalVariable7_5 = 7;
89 int globalVariable7_6 = 21;
90 int globalVariable7_7 = 1;
91 int globalVariable7_8 = 1;
92 int globalVariable7_9 = 1;
93 int dummyVal = 0;
94
95 void func7_1() { 
96     dummyVal += 10;
97     
98 }
99
100 void func7_2() { 
101   dummyVal += 10;
102 }
103
104 void func7_3() { 
105   dummyVal += 10;
106 }
107
108 void func7_4() { 
109   dummyVal += 10;
110 }
111
112 void func7_5() { 
113   dummyVal += 10;
114 }
115
116 void func7_6() { 
117   dummyVal += 10;
118 }
119
120 void func7_7() { 
121   dummyVal += 10;
122 }
123
124 void func7_8() { 
125   dummyVal += 10;
126 }
127
128 void func7_9() { 
129   dummyVal += 10;
130 }
131
132
133 void delay(int m) {
134   int i,j;
135   for(i=0; i<m; i++)
136     for(j=0; j<m; j++) 
137       ;
138   assert(i>0 && j>0);
139 }
140
141 #define NUM_READS 9
142
143 void mutateeMAIN()
144 {
145 #if defined(i386_unknown_nt4_0)
146   return;
147 #endif
148   int pid;
149   /* fprintf(stderr, "mutatee:  starting fork\n"); */
150   pid = fork();
151   /* fprintf(stderr, "mutatee:  stopping fork\n"); */
152
153   /* mutatee will get paused here, temporarily, when the mutator receives
154      the postForkCallback */
155
156   if (pid == 0) {   /* child */
157       dprintf("Child: starting tests\n");
158       func7_1();
159     func7_2();
160     func7_3();
161     func7_4();
162     func7_5();
163     func7_6();
164     func7_7();
165     func7_8();
166     func7_9();
167     dprintf("Child: done with tests, exiting\n");
168   } else if(pid > 0) {
169       dprintf("Parent: starting tests\n");
170       func7_1();
171     func7_2();
172     func7_3();
173     func7_4();
174     func7_5();
175     func7_6();
176     func7_7();
177     func7_8();
178     func7_9();
179     dprintf("Parent: done with tests, exiting\n");
180   } else if(pid < 0) {
181     fprintf(stderr, "error on fork\n");
182     exit(pid);  /* error case */
183   }
184 }
185
186 int main(int argc, char *argv[])
187 {                                       
188     int i;
189
190     for (i=1; i < argc; i++) {
191       if (!strcmp(argv[i], "-verbose")) {
192         debugPrint = TRUE;
193       }
194     }
195     if(debugPrint) {
196         printf("Mutatee %s [%s]:\"%s\"\n", argv[0], 
197                 mutateeCplusplus ? "C++" : "C", Builder_id);
198     }
199     mutateeMAIN();
200     return 0;
201 }
202