fixing stuff
[dyninst.git] / testsuite / src / specification / spec-ungrouped.pl
1 % Dyninst test suite specification file
2
3 %%%%%%%%%%
4 %
5 % DO NOT EDIT ANYTHING UNTIL YOU REACH THE 'SAFE TO EDIT' MARK
6 %
7 %%%%%%%%%%
8
9 % Include some utility definitions
10 :- include('test.pl').
11
12 % Allow the user to specify new clauses as they want throughout this file
13 :- discontiguous([library/2, object_suffix/2, library_suffix/2,
14                   library_prefix/2, test_plat/2, mutator/2,
15                   mutator_requires_libs/2, mutator_comp/1, mutatee/2,
16                   mutatee/3, mutatee_requires_libs/2, mutatee_comp/1, lang/1,
17                   comp_lang/2, platform/4, compiler_opt_trans/3,
18                   comp_mut/2, compiler_platform/2,
19                   mcomp_plat/2, test_runmode/2, comp_std_flags_str/2,
20                   comp_mutatee_flags_str/2, test_runs_everywhere/1,
21                   mutatee_special_make_str/2, mutatee_special_requires/2,
22                   groupable_test/1, test_platform/2,
23                   compiler_for_mutatee/2, test_start_state/2,
24                   compiler_define_string/2, compiler_s/2,
25                   mutatee_link_options/2, mutatee_peer/2,
26                   compiler_parm_trans/3, test/3, test_description/2,
27                   optimization_for_mutatee/3, spec_exception/3,
28                   spec_object_file/6, fortran_c_component/1,
29                   whitelist/1, parameter/1, parameter_values/2,
30                   mutatee_abi/1, platform_abi/2,
31                   compiler_platform_abi_s/4, test_platform_abi/3,
32                   restricted_amd64_abi/1, compiler_presence_def/2,
33                   restricted_abi_for_arch/3, insane/2, module/1,
34                   tests_module/2, mutator_requires_libs/2]).
35
36 %%%%%%%%%%
37 %
38 % SAFE TO EDIT
39 % It is safe to add new clauses and edit the clauses in the section below
40 %
41 %%%%%%%%%%
42
43 % Some tests require shared libraries as well as mutatees
44 %mutator('test_requireslib', ['test_requireslib.C']).
45 % We need to specify that 'test_requireslib' requires the library 'requireslib'
46 %mutator_library('test_requireslib', 'requireslib').
47 % And then we need to provide a definition of the library and the source files
48 % it reqires if we haven't already done so.
49 % NOTE TO SELF:
50 % So we want Windows to compile the following file to 'requireslib.dll' and
51 % Unix to compile it to 'librequireslib.so'
52 %library('requireslib', ['requireslib.C']).
53
54 % Mutatees can require that they're linked with certain libraries.  Here's
55 % how to specify that
56 %mutatee_requires_libs('test_threaded_mutatee', ['pthread']).
57
58 module('dyninst').
59 module('symtab').
60 module('stackwalker').
61 module('instructionapi').
62
63 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 % Below are specifications for the standard Dyninst test suite
65 %
66 % DO NOT EDIT ANYTHING BELOW THIS MARK UNLESS YOU'RE SURE YOU KNOW
67 % WHAT YOU'RE DOING
68 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69
70 % This is a dummy mutatee definition that's used by some tests that check that
71 % we correctly identify error conditions
72 mutatee('none', []).
73 compiler_for_mutatee('none', '').
74 compiler_platform('', P) :- platform(P).
75 % Also a dummy compiler for our dummy mutatee
76 compiler_define_string('', '').
77 mutatee_comp('').
78 mutatee_link_options('', '').
79 comp_std_flags_str('', '').
80 comp_mutatee_flags_str('', '').
81
82 mutatee('dyninst_group_test', ['test1_1_mutatee.c', 
83         'test1_2_mutatee.c',
84         'test1_3_mutatee.c', 
85         'test1_4_mutatee.c',
86         'test1_5_mutatee.c', 
87         'test1_6_mutatee.c',
88         'test1_7_mutatee.c', 
89         'test1_8_mutatee.c',
90         'test1_9_mutatee.c', 
91         'test1_10_mutatee.c',
92         'test1_11_mutatee.c',
93         'test1_13_mutatee.c',
94         'test1_16_mutatee.c',
95         'test1_17_mutatee.c',
96         'test1_18_mutatee.c',
97         'test1_19_mutatee.c',
98         'test1_20_mutatee.c',
99         'test1_21_mutatee.c',
100         'test1_22_mutatee.c',
101         'test1_23_mutatee.c',
102         'test1_24_mutatee.c',
103         'test1_25_mutatee.c',
104         'test1_26_mutatee.c',
105         'test1_27_mutatee.c',
106         'test1_28_mutatee.c',
107         'test1_30_mutatee.c',
108         'test1_31_mutatee.c',
109         'test1_32_mutatee.c',
110         'test1_33_mutatee.c',
111         'test1_34_mutatee.c',
112         'test1_36_mutatee.c',
113         'test1_37_mutatee.c',
114         'test1_38_mutatee.c',
115         'test1_39_mutatee.c',
116         'test1_41_mutatee.c',
117         'test2_5_mutatee.c',
118         'test2_7_mutatee.c',
119         'test2_9_mutatee.c',
120         'test2_10_mutatee.c',
121         'test2_11_mutatee.c',
122         'test2_12_mutatee.c',
123         'test2_13_mutatee.c',
124         'test5_1_mutatee.c',
125         'test5_2_mutatee.c',
126         'test5_3_mutatee.c',
127         'test5_4_mutatee.c',
128         'test5_5_mutatee.c',
129         'test5_6_mutatee.c',
130         'test5_7_mutatee.c',
131         'test5_8_mutatee.c',
132         'test5_9_mutatee.c'
133     
134     ]).
135 compiler_for_mutatee('dyninst_group_test', Compiler) :-
136     comp_lang(Compiler, 'c').
137
138 mutatee('dyninst_cxx_group_test', ['test5_1_mutatee.C',
139         'test5_2_mutatee.c',
140         'test5_3_mutatee.c',
141         'test5_4_mutatee.c',
142         'test5_5_mutatee.c',
143         'test5_6_mutatee.c',
144         'test5_7_mutatee.c',
145         'test5_8_mutatee.c',
146         'test5_9_mutatee.c'
147     ], ['cpp_test.C']).
148 compiler_for_mutatee('dyninst_cxx_group_test', Compiler) :-
149     comp_lang(Compiler, 'c++').
150
151 test('test1_1', 'test1_1', 'dyninst_group_test').
152 test_description('test1_1', 'instrument with zero-arg function call').
153 test_runs_everywhere('test1_1').
154 groupable_test('test1_1').
155 mutator('test1_1', ['test1_1.C']).
156 test_runmode('test1_1', 'both').
157 test_start_state('test1_1', 'stopped').
158 tests_module('test1_1', 'dyninst').
159
160 test('test1_2', 'test1_2', 'dyninst_group_test').
161 test_description('test1_2', 'instrument with four-arg function call').
162 test_runs_everywhere('test1_2').
163 groupable_test('test1_2').
164 mutator('test1_2', ['test1_2.C']).
165 mutatee('test1_2', ['test1_2_mutatee.c']).
166 compiler_for_mutatee('test1_2', Compiler) :-
167     comp_lang(Compiler, 'c').
168 test_runmode('test1_2', 'both').
169 test_start_state('test1_2', 'stopped').
170 tests_module('test1_2', 'dyninst').
171
172 test('test1_3', 'test1_3', 'dyninst_group_test').
173 test_description('test1_3', 'passing variables to a function').
174 test_runs_everywhere('test1_3').
175 groupable_test('test1_3').
176 mutator('test1_3', ['test1_3.C']).
177 test_runmode('test1_3', 'both').
178 test_start_state('test1_3', 'stopped').
179 tests_module('test1_3', 'dyninst').
180
181 test('test1_4', 'test1_4', 'dyninst_group_test').
182 test_description('test1_4', 'instrument with a sequence').
183 test_runs_everywhere('test1_4').
184 groupable_test('test1_4').
185 mutator('test1_4', ['test1_4.C']).
186 test_runmode('test1_4', 'both').
187 test_start_state('test1_4', 'stopped').
188 tests_module('test1_4', 'dyninst').
189
190 test('test1_5', 'test1_5', 'dyninst_group_test').
191 test_description('test1_5', 'instrument with if clause (no else)').
192 test_runs_everywhere('test1_5').
193 groupable_test('test1_5').
194 mutator('test1_5', ['test1_5.C']).
195 test_runmode('test1_5', 'both').
196 test_start_state('test1_5', 'stopped').
197 tests_module('test1_5', 'dyninst').
198
199 test('test1_6', 'test1_6', 'dyninst_group_test').
200 test_description('test1_6', 'arithmetic operators').
201 test_runs_everywhere('test1_6').
202 groupable_test('test1_6').
203 mutator('test1_6', ['test1_6.C']).
204 test_runmode('test1_6', 'both').
205 test_start_state('test1_6', 'stopped').
206 tests_module('test1_6', 'dyninst').
207
208 test('test1_7', 'test1_7', 'dyninst_group_test').
209 test_description('test1_7', 'relational operators').
210 test_runs_everywhere('test1_7').
211 groupable_test('test1_7').
212 mutator('test1_7', ['test1_7.C']).
213 test_runmode('test1_7', 'both').
214 test_start_state('test1_7', 'stopped').
215 tests_module('test1_7', 'dyninst').
216
217 test('test1_8', 'test1_8', 'dyninst_group_test').
218 test_description('test1_8', 'verify that registers are preserved across inserted expression').
219 test_runs_everywhere('test1_8').
220 groupable_test('test1_8').
221 mutator('test1_8', ['test1_8.C']).
222 test_runmode('test1_8', 'both').
223 test_start_state('test1_8', 'stopped').
224 tests_module('test1_8', 'dyninst').
225
226 test('test1_9', 'test1_9', 'dyninst_group_test').
227 test_description('test1_9', 'verify that registers are preserved across inserted function call').
228 test_runs_everywhere('test1_9').
229 groupable_test('test1_9').
230 mutator('test1_9', ['test1_9.C']).
231 test_runmode('test1_9', 'both').
232 test_start_state('test1_9', 'stopped').
233 tests_module('test1_9', 'dyninst').
234
235 test('test1_10', 'test1_10', 'dyninst_group_test').
236 test_description('test1_10', 'inserted snippet order').
237 test_runs_everywhere('test1_10').
238 groupable_test('test1_10').
239 mutator('test1_10', ['test1_10.C']).
240 test_runmode('test1_10', 'both').
241 test_start_state('test1_10', 'stopped').
242 tests_module('test1_10', 'dyninst').
243
244 test('test1_11', 'test1_11', 'dyninst_group_test').
245 test_description('test1_11', 'insert snippets at entry, exit, and call points').
246 test_runs_everywhere('test1_11').
247 groupable_test('test1_11').
248 mutator('test1_11', ['test1_11.C']).
249 test_runmode('test1_11', 'both').
250 test_start_state('test1_11', 'stopped').
251 tests_module('test1_11', 'dyninst').
252
253 test('test1_12', 'test1_12', 'test1_12').
254 test_description('test1_12', 'insert/remove and malloc/free').
255 test_runs_everywhere('test1_12').
256 mutator('test1_12', ['test1_12.C']).
257 mutatee('test1_12', ['test1_12_mutatee.c']).
258 compiler_for_mutatee('test1_12', Compiler) :-
259     comp_lang(Compiler, 'c').
260 test_runmode('test1_12', 'both').
261 test_start_state('test1_12', 'stopped').
262 tests_module('test1_12', 'dyninst').
263
264 test('test1_13', 'test1_13', 'dyninst_group_test').
265 test_description('test1_13', 'paramExpr,retExpr,nullExpr').
266 test_runs_everywhere('test1_13').
267 groupable_test('test1_13').
268 mutator('test1_13', ['test1_13.C']).
269 test_runmode('test1_13', 'both').
270 test_start_state('test1_13', 'stopped').
271 tests_module('test1_13', 'dyninst').
272
273 test('test1_14', 'test1_14', 'test1_14').
274 test_description('test1_14', 'Replace/Remove Function Call').
275 test_runs_everywhere('test1_14').
276 mutator('test1_14', ['test1_14.C']).
277 mutatee('test1_14', ['test1_14_mutatee.c']).
278 % test1_14's mutatee can be compiled with any C or Fortran compiler
279 compiler_for_mutatee('test1_14', Compiler) :-
280     comp_lang(Compiler, 'c').
281 test_runmode('test1_14', 'both').
282 test_start_state('test1_14', 'stopped').
283 tests_module('test1_14', 'dyninst').
284
285 test('test1_15', 'test1_15', 'test1_15').
286 test_description('test1_15', 'setMutationsActive').
287 test_runs_everywhere('test1_15').
288 mutator('test1_15', ['test1_15.C']).
289 mutatee('test1_15', ['test1_15_mutatee.c']).
290 compiler_for_mutatee('test1_15', Compiler) :-
291     comp_lang(Compiler, 'c').
292 test_runmode('test1_15', 'both').
293 test_start_state('test1_15', 'stopped').
294 tests_module('test1_15', 'dyninst').
295
296 test('test1_16', 'test1_16', 'dyninst_group_test').
297 test_description('test1_16', 'If else').
298 test_runs_everywhere('test1_16').
299 groupable_test('test1_16').
300 mutator('test1_16', ['test1_16.C']).
301 test_runmode('test1_16', 'both').
302 test_start_state('test1_16', 'stopped').
303 tests_module('test1_16', 'dyninst').
304
305 test('test1_17', 'test1_17', 'dyninst_group_test').
306 test_description('test1_17', 'Verifies that instrumentation inserted at exit point doesn\'t clobber return value').
307 test_runs_everywhere('test1_17').
308 groupable_test('test1_17').
309 mutator('test1_17', ['test1_17.C']).
310 test_runmode('test1_17', 'both').
311 test_start_state('test1_17', 'stopped').
312 tests_module('test1_17', 'dyninst').
313
314 test('test1_18', 'test1_18', 'dyninst_group_test').
315 test_description('test1_18', 'Read/Write a variable in the mutatee').
316 test_runs_everywhere('test1_18').
317 groupable_test('test1_18').
318 mutator('test1_18', ['test1_18.C']).
319 test_runmode('test1_18', 'both').
320 test_start_state('test1_18', 'stopped').
321 tests_module('test1_18', 'dyninst').
322
323 test('test1_19', 'test1_19', 'test1_19').
324 test_description('test1_19', 'oneTimeCode').
325 test_runs_everywhere('test1_19').
326 mutator('test1_19', ['test1_19.C']).
327 mutatee('test1_19', ['test1_19_mutatee.c']).
328 compiler_for_mutatee('test1_19', Compiler) :-
329     comp_lang(Compiler, 'c').
330 test_runmode('test1_19', 'both').
331 test_start_state('test1_19', 'stopped').
332 tests_module('test1_19', 'dyninst').
333
334 test('test1_20', 'test1_20', 'dyninst_group_test').
335 test_description('test1_20', 'Instrumentation at arbitrary points').
336 test_runs_everywhere('test1_20').
337 groupable_test('test1_20').
338 mutator('test1_20', ['test1_20.C']).
339 test_runmode('test1_20', 'both').
340 test_start_state('test1_20', 'stopped').
341 tests_module('test1_20', 'dyninst').
342
343 test('test1_21', 'test1_21', 'dyninst_group_test').
344 test_description('test1_21', 'findFunction in module').
345 test_runs_everywhere('test1_21').
346 groupable_test('test1_21').
347 mutator('test1_21', ['test1_21.C']).
348 test_runmode('test1_21', 'both').
349 test_start_state('test1_21', 'stopped').
350 tests_module('test1_21', 'dyninst').
351
352 test('test1_22', 'test1_22', 'dyninst_group_test').
353 test_description('test1_22', 'Replace Function').
354 test_runs_everywhere('test1_22').
355 groupable_test('test1_22').
356 mutator('test1_22', ['test1_22.C']).
357 mutatee_requires_libs('test1_22', ['dl']).
358 test_runmode('test1_22', 'both').
359 test_start_state('test1_22', 'stopped').
360 tests_module('test1_22', 'dyninst').
361
362 test('test1_23', 'test1_23', 'dyninst_group_test').
363 test_description('test1_23', 'Local Variables').
364 test_runs_everywhere('test1_23').
365 groupable_test('test1_23').
366 mutator('test1_23', ['test1_23.C']).
367 test_runmode('test1_23', 'both').
368 test_start_state('test1_23', 'stopped').
369 tests_module('test1_23', 'dyninst').
370
371 test('test1_24', 'test1_24', 'dyninst_group_test').
372 test_description('test1_24', 'Array Variables').
373 test_runs_everywhere('test1_24').
374 groupable_test('test1_24').
375 mutator('test1_24', ['test1_24.C']).
376 test_runmode('test1_24', 'both').
377 test_start_state('test1_24', 'stopped').
378 tests_module('test1_24', 'dyninst').
379
380 test('test1_25', 'test1_25', 'dyninst_group_test').
381 test_description('test1_25', 'Unary Operators').
382 test_runs_everywhere('test1_25').
383 groupable_test('test1_25').
384 mutator('test1_25', ['test1_25.C']).
385 test_runmode('test1_25', 'both').
386 test_start_state('test1_25', 'stopped').
387 tests_module('test1_25', 'dyninst').
388
389 test('test1_26', 'test1_26', 'dyninst_group_test').
390 test_description('test1_26', 'Struct Elements').
391 test_runs_everywhere('test1_26').
392 groupable_test('test1_26').
393 mutator('test1_26', ['test1_26.C']).
394 test_runmode('test1_26', 'both').
395 test_start_state('test1_26', 'stopped').
396 tests_module('test1_26', 'dyninst').
397
398 test('test1_27', 'test1_27', 'dyninst_group_test').
399 test_description('test1_27', 'Type compatibility').
400 test_runs_everywhere('test1_27').
401 groupable_test('test1_27').
402 mutator('test1_27', ['test1_27.C']).
403 test_runmode('test1_27', 'both').
404 test_start_state('test1_27', 'stopped').
405 tests_module('test1_27', 'dyninst').
406
407 test('test1_28', 'test1_28', 'dyninst_group_test').
408 test_description('test1_28', 'User Defined Fields').
409 test_runs_everywhere('test1_28').
410 groupable_test('test1_28').
411 mutator('test1_28', ['test1_28.C']).
412 test_runmode('test1_28', 'both').
413 test_start_state('test1_28', 'stopped').
414 tests_module('test1_28', 'dyninst').
415
416 test('test1_29', 'test1_29', 'test1_29').
417 test_description('test1_29', 'BPatch_srcObj class').
418 test_runs_everywhere('test1_29').
419 groupable_test('test1_29').
420 mutator('test1_29', ['test1_29.C']).
421 mutatee('test1_29', ['test1_29_mutatee.c']).
422 % test1_29's mutatee can be compiled with any C compiler or Fortran compiler
423 compiler_for_mutatee('test1_29', Compiler) :-
424     comp_lang(Compiler, 'c').
425 test_runmode('test1_29', 'both').
426 test_start_state('test1_29', 'stopped').
427 tests_module('test1_29', 'dyninst').
428
429 test('test1_30', 'test1_30', 'dyninst_group_test').
430 test_description('test1_30', 'Line Information').
431 test_runs_everywhere('test1_30').
432 groupable_test('test1_30').
433 mutator('test1_30', ['test1_30.C']).
434 test_runmode('test1_30', 'both').
435 test_start_state('test1_30', 'stopped').
436 tests_module('test1_30', 'dyninst').
437
438 test('test1_31', 'test1_31', 'dyninst_group_test').
439 test_description('test1_31', 'Non-Recursive Base Tramp').
440 test_runs_everywhere('test1_31').
441 groupable_test('test1_31').
442 mutator('test1_31', ['test1_31.C']).
443 test_runmode('test1_31', 'both').
444 test_start_state('test1_31', 'stopped').
445 tests_module('test1_31', 'dyninst').
446
447 test('test1_32', 'test1_32', 'dyninst_group_test').
448 test_description('test1_32', 'Recursive Base Tramp').
449 test_runs_everywhere('test1_32').
450 groupable_test('test1_32').
451 mutator('test1_32', ['test1_32.C']).
452 test_runmode('test1_32', 'both').
453 test_start_state('test1_32', 'stopped').
454 tests_module('test1_32', 'dyninst').
455
456 test('test1_33', 'test1_33', 'dyninst_group_test').
457 test_description('test1_33', 'Control Flow Graphs').
458 test_runs_everywhere('test1_33').
459 groupable_test('test1_33').
460 mutator('test1_33', ['test1_33.C']).
461 test_runmode('test1_33', 'both').
462 test_start_state('test1_33', 'stopped').
463 tests_module('test1_33', 'dyninst').
464
465 test('test1_34', 'test1_34', 'dyninst_group_test').
466 test_description('test1_34', 'Loop Information').
467 test_runs_everywhere('test1_34').
468 groupable_test('test1_34').
469 mutator('test1_34', ['test1_34.C']).
470 test_runmode('test1_34', 'both').
471 test_start_state('test1_34', 'stopped').
472 tests_module('test1_34', 'dyninst').
473
474 test('test1_35', 'test1_35', 'test1_35').
475 test_description('test1_35', 'Function Relocation').
476 test_platform('test1_35', 'i386-unknown-linux2.4').
477 test_platform('test1_35', 'i386-unknown-linux2.6').
478 test_platform('test1_35', 'x86_64-unknown-linux2.4').
479 test_platform('test1_35', 'sparc-sun-solaris2.8').
480 test_platform('test1_35', 'sparc-sun-solaris2.9').
481 groupable_test('test1_35').
482 mutator('test1_35', ['test1_35.C']).
483 mutatee('test1_35', ['test1_35_mutatee.c'], Sources) :-
484     current_platform(Plat), platform(Arch, OS, _, Plat),
485     (
486         (Arch = 'sparc', OS = 'solaris') ->
487             Sources = ['call35_1_sparc_solaris.s'];
488         (Arch = 'x86_64', OS = 'linux') ->
489             Sources = ['call35_1_x86_64_linux.s'];
490         (Arch = 'i386', OS = 'linux') ->
491             Sources = ['call35_1_x86_linux.s'];
492         (Arch = 'i386', OS = 'solaris') ->
493             Sources = ['call35_1_x86_solaris.s'];
494         Sources = ['call35_1.c']
495     ).
496 % Special flags for building the assembly file on Solaris
497 spec_object_file(OFile, 'gcc',
498                  ['call35_1_sparc_solaris.s'], [], [],
499                  ['-P -Wa,-xarch=v8plus']) :-
500     current_platform('sparc-sun-solaris2.8'),
501     member(OFile, ['call35_1_sparc_solaris_gcc_none',
502                    'call35_1_sparc_solaris_gcc_low',
503                    'call35_1_sparc_solaris_gcc_high',
504                    'call35_1_sparc_solaris_gcc_max']).
505 % test1_35's mutatee can be compiled with any C compiler
506 compiler_for_mutatee('test1_35', Compiler) :-
507     comp_lang(Compiler, 'c').
508 test_runmode('test1_35', 'both').
509 test_start_state('test1_35', 'stopped').
510 restricted_amd64_abi('test1_35').
511 tests_module('test1_35', 'dyninst').
512
513 test('test1_36', 'test1_36', 'dyninst_group_test').
514 test_description('test1_36', 'Callsite Parameter Referencing').
515 test_runs_everywhere('test1_36').
516 groupable_test('test1_36').
517 mutator('test1_36', ['test1_36.C']).
518 test_runmode('test1_36', 'both').
519 test_start_state('test1_36', 'stopped').
520 tests_module('test1_36', 'dyninst').
521
522 test('test1_37', 'test1_37', 'dyninst_group_test').
523 test_description('test1_37', 'Instrument Loops').
524 test_runs_everywhere('test1_37').
525 groupable_test('test1_37').
526 mutator('test1_37', ['test1_37.C']).
527 test_runmode('test1_37', 'both').
528 test_start_state('test1_37', 'stopped').
529 tests_module('test1_37', 'dyninst').
530
531 % FIXME I don't think test1_38 runs on all platforms
532 test('test1_38', 'test1_38', 'dyninst_group_test').
533 test_description('test1_38', 'CFG Loop Callee Tree').
534 test_runs_everywhere('test1_38').
535 groupable_test('test1_38').
536 mutator('test1_38', ['test1_38.C']).
537 test_runmode('test1_38', 'both').
538 test_start_state('test1_38', 'stopped').
539 tests_module('test1_38', 'dyninst').
540
541 test('test1_39', 'test1_39', 'dyninst_group_test').
542 test_description('test1_39', 'Regex search').
543 % test1_39 doesn't run on Windows
544 test_platform('test1_39', Platform) :-
545     platform(_, OS, _, Platform),
546     OS \= 'windows'.
547 groupable_test('test1_39').
548 mutator('test1_39', ['test1_39.C']).
549 test_runmode('test1_39', 'both').
550 test_start_state('test1_39', 'stopped').
551 tests_module('test1_39', 'dyninst').
552
553 test('test1_40', 'test1_40', 'test1_40').
554 test_description('test1_40', 'Verify that we can monitor call sites').
555 % test1_40 should not run on Windows or IA64 Linux
556 test_platform('test1_40', Platform) :-
557         platform(Platform),
558         \+ platform('ia64', 'linux', _, Platform),
559         \+ platform(_, 'windows', _, Platform).
560 groupable_test('test1_40').
561 mutator('test1_40', ['test1_40.C']).
562 mutatee('test1_40', ['test1_40_mutatee.c']).
563 % test1_40's mutatee can be compiled with any C compiler except xlc/xlC
564 compiler_for_mutatee('test1_40', Compiler) :-
565     comp_lang(Compiler, 'c'),
566     \+ member(Compiler, ['xlc', 'xlC']).
567 test_runmode('test1_40', 'both').
568 test_start_state('test1_40', 'stopped').
569 tests_module('test1_40', 'dyninst').
570
571 test('test1_41', 'test1_41', 'test1_41').
572 test_description('test1_41', 'Tests whether we lose line information running a mutatee twice').
573 % test1_41 doesn't run on Windows
574 test_platform('test1_41', Platform) :-
575     platform(_, OS, _, Platform),
576     OS \= 'windows'.
577 mutator('test1_41', ['test1_41.C']).
578 mutatee('test1_41', ['test1_41_mutatee.c']).
579 compiler_for_mutatee('test1_41', Compiler) :-
580     comp_lang(Compiler, 'c').
581 test_runmode('test1_41', 'createProcess').
582 test_start_state('test1_41', 'selfstart').
583 tests_module('test1_41', 'dyninst').
584
585 test('test2_1', 'test2_1', none).
586 test_description('test2_1', 'Run an executable that does not exist').
587 test_runs_everywhere('test2_1').
588 mutator('test2_1', ['test2_1.C']).
589 test_runmode('test2_1', 'createProcess').
590 test_start_state('test2_1', 'selfstart').
591 restricted_amd64_abi('test2_1').
592 tests_module('test2_1', 'dyninst').
593
594 test('test2_2', 'test2_2', none).
595 test_description('test2_2', 'Try to run a createProcess on a file that is not an executable file').
596 test_runs_everywhere('test2_2').
597 mutator('test2_2', ['test2_2.C']).
598 test_runmode('test2_2', 'createProcess').
599 test_start_state('test2_2', 'selfstart').
600 restricted_amd64_abi('test2_2').
601 tests_module('test2_2', 'dyninst').
602
603 test('test2_3', 'test2_3', none).
604 test_description('test2_3', 'Attatch to an invalid pid').
605 test_runs_everywhere('test2_3').
606 mutator('test2_3', ['test2_3.C']).
607 test_runmode('test2_3', 'useAttach').
608 test_start_state('test2_3', 'selfstart').
609 restricted_amd64_abi('test2_3').
610 tests_module('test2_3', 'dyninst').
611
612 test('test2_4', 'test2_4', none).
613 test_description('test2_4', 'Attach to a protected pid').
614 test_runs_everywhere('test2_4').
615 mutator('test2_4', ['test2_4.C']).
616 test_runmode('test2_4', 'useAttach').
617 test_start_state('test2_4', 'selfstart').
618 restricted_amd64_abi('test2_4').
619 tests_module('test2_4', 'dyninst').
620
621 test('test2_5', 'test2_5', 'dyninst_group_test').
622 test_description('test2_5', 'Look up nonexistent function').
623 test_runs_everywhere('test2_5').
624 groupable_test('test2_5').
625 mutator('test2_5', ['test2_5.C']).
626 test_runmode('test2_5', 'both').
627 test_start_state('test2_5', 'stopped').
628 tests_module('test2_5', 'dyninst').
629
630 test('test2_6', 'test2_6', 'test2_6').
631 test_description('test2_6', 'Load a dynamically linked library from the mutatee').
632 % test2_6 doesn't run on Windows
633 test_platform('test2_6', Platform) :-
634     platform(_, OS, _, Platform),
635     OS \= 'windows'.
636 mutator('test2_6', ['test2_6.C']).
637 mutatee('test2_6', ['test2_6_mutatee.c']).
638 compiler_for_mutatee('test2_6', Compiler) :-
639     comp_lang(Compiler, 'c').
640 mutatee_requires_libs('test2_6', ['dl']).
641 test_runmode('test2_6', 'both').
642 test_start_state('test2_6', 'stopped').
643 tests_module('test2_6', 'dyninst').
644
645 test('test2_7', 'test2_7', 'dyninst_group_test').
646 test_description('test2_7', '').
647 % test2_7 runs on Solaris, Linux, AIX, and Windows
648 test_platform('test2_7', Platform) :-
649     platform(_, OS, _, Platform),
650     member(OS, ['solaris', 'linux', 'aix', 'windows']).
651 mutator('test2_7', ['test2_7.C']).
652 test_runmode('test2_7', 'both').
653 test_start_state('test2_7', 'stopped').
654 groupable_test('test2_7').
655 tests_module('test2_7', 'dyninst').
656
657 test('test2_8', 'test2_8', 'test2_8').
658 test_runs_everywhere('test2_8').
659 mutator('test2_8', ['test2_8.C']).
660 mutatee('test2_8', ['test2_8_mutatee.c']).
661 compiler_for_mutatee('test2_8', Compiler) :-
662     comp_lang(Compiler, 'c').
663 test_runmode('test2_8', 'both').
664 test_start_state('test2_8', 'stopped').
665 tests_module('test2_8', 'dyninst').
666
667 test('test2_9', 'test2_9', 'dyninst_group_test').
668 % test2_9 only runs on Sparc Solaris
669 test_platform('test2_9', Platform) :-
670     platform('sparc', 'solaris', _, Platform).
671 mutator('test2_9', ['test2_9.C']).
672 test_runmode('test2_9', 'both'). % Is this correct?
673 test_start_state('test2_9', 'stopped').
674 groupable_test('test2_9').
675 tests_module('test2_9', 'dyninst').
676
677 test('test2_10', 'test2_10', 'dyninst_group_test').
678 % test2_10 runs on everything but Windows
679 test_platform('test2_10', Platform) :-
680     platform(Platform), \+ platform(_, 'windows', _, Platform).
681 mutator('test2_10', ['test2_10.C']).
682 test_runmode('test2_10', 'both').
683 test_start_state('test2_10', 'stopped').
684 groupable_test('test2_10').
685 tests_module('test2_10', 'dyninst').
686
687 test('test2_11', 'test2_11', 'dyninst_group_test').
688 test_runs_everywhere('test2_11').
689 mutator('test2_11', ['test2_11.C']).
690 test_runmode('test2_11', 'both').
691 test_start_state('test2_11', 'stopped').
692 groupable_test('test2_11').
693 tests_module('test2_11', 'dyninst').
694
695 test('test2_12', 'test2_12', 'dyninst_group_test').
696 test_runs_everywhere('test2_12').
697 mutator('test2_12', ['test2_12.C']).
698 test_runmode('test2_12', 'both').
699 test_start_state('test2_12', 'stopped').
700 groupable_test('test2_12').
701 tests_module('test2_12', 'dyninst').
702
703 test('test2_13', 'test2_13', 'dyninst_group_test').
704 % test2_13 doesn't run on Alpha, but we're not supporting Alpha any more, so we
705 % don't need to bother checking for it
706 test_runs_everywhere('test2_13').
707 mutator('test2_13', ['test2_13.C']).
708 test_runmode('test2_13', 'both').
709 test_start_state('test2_13', 'stopped').
710 groupable_test('test2_13').
711 tests_module('test2_13', 'dyninst').
712
713 test('test2_14', 'test2_14', 'test2_14').
714 test_runs_everywhere('test2_14').
715 mutator('test2_14', ['test2_14.C']).
716 mutatee('test2_14', ['test2_14_mutatee.c']).
717 compiler_for_mutatee('test2_14', Compiler) :- comp_lang(Compiler, 'c').
718 test_runmode('test2_14', 'both').
719 test_start_state('test2_14', 'stopped').
720 tests_module('test2_14', 'dyninst').
721
722 test('test3_1', 'test3_1', 'test3_1').
723 test_runs_everywhere('test3_1').
724 mutator('test3_1', ['test3_1.C']).
725 mutatee('test3_1', ['test3_1_mutatee.c']).
726 compiler_for_mutatee('test3_1', Compiler) :- comp_lang(Compiler, 'c').
727 test_runmode('test3_1', 'createProcess').
728 test_start_state('test3_1', 'selfstart').
729 tests_module('test3_1', 'dyninst').
730
731 test('test3_2', 'test3_2', 'test3_2').
732 test_runs_everywhere('test3_2').
733 mutator('test3_2', ['test3_2.C']).
734 mutatee('test3_2', ['test3_2_mutatee.c']).
735 compiler_for_mutatee('test3_2', C) :- comp_lang(C, 'c').
736 test_runmode('test3_2', 'createProcess').
737 test_start_state('test3_2', 'selfstart').
738 tests_module('test3_2', 'dyninst').
739
740 test('test3_3', 'test3_3', 'test3_3').
741 test_runs_everywhere('test3_3').
742 mutator('test3_3', ['test3_3.C']).
743 mutatee('test3_3', ['test3_3_mutatee.c']).
744 compiler_for_mutatee('test3_3', C) :- comp_lang(C, 'c').
745 test_runmode('test3_3', 'createProcess').
746 test_start_state('test3_3', 'selfstart').
747 tests_module('test3_3', 'dyninst').
748
749 test('test3_4', 'test3_4', 'test3_4').
750 test_runs_everywhere('test3_4').
751 mutator('test3_4', ['test3_4.C']).
752 mutatee('test3_4', ['test3_4_mutatee.c']).
753 compiler_for_mutatee('test3_4', C) :- comp_lang(C, 'c').
754 test_runmode('test3_4', 'createProcess').
755 test_start_state('test3_4', 'selfstart').
756 tests_module('test3_4', 'dyninst').
757
758 test('test3_5', 'test3_5', 'test3_5').
759 test_runs_everywhere('test3_5').
760 mutator('test3_5', ['test3_5.C']).
761 mutatee('test3_5', ['test3_5_mutatee.c']).
762 compiler_for_mutatee('test3_5', C) :- comp_lang(C, 'c').
763 test_runmode('test3_5', 'createProcess').
764 test_start_state('test3_5', 'selfstart').
765 tests_module('test3_5', 'dyninst').
766
767 test('test3_6', 'test3_6', 'test3_6').
768 test_description('test3_6', 'simultaneous multiple-process management - terminate (fork)').
769 % test3_6 doesn't run on Windows
770 test_platform('test3_6', Platform) :-
771     platform(_, OS, _, Platform), OS \= 'windows'.
772 mutator('test3_6', ['test3_6.C']).
773 mutatee('test3_6', ['test3_6_mutatee.c']).
774 compiler_for_mutatee('test3_6', Compiler) :- comp_lang(Compiler, 'c').
775 test_runmode('test3_6', 'createProcess').
776 test_start_state('test3_6', 'selfstart').
777 tests_module('test3_6', 'dyninst').
778
779 test('test3_7', 'test3_7', 'test3_7').
780 test_runs_everywhere('test3_7').
781 mutator('test3_7', ['test3_7.C']).
782 mutatee('test3_7', ['test3_7_mutatee.c']).
783 compiler_for_mutatee('test3_7', Compiler) :- comp_lang(Compiler, 'c').
784 test_runmode('test3_7', 'createProcess').
785 test_start_state('test3_7', 'selfstart').
786 tests_module('test3_7', 'dyninst').
787
788 test('test4_1', 'test4_1', 'test4_1').
789 % Mutator claims test doesn't run on Alpha or Windows, but there were no
790 % checks to make sure it wasn't running on Windows..
791 test_runs_everywhere('test4_1').
792 mutator('test4_1', ['test4_1.C']).
793 mutatee('test4_1', ['test4_1_mutatee.c']).
794 compiler_for_mutatee('test4_1', Compiler) :- comp_lang(Compiler, 'c').
795 test_runmode('test4_1', 'createProcess').
796 test_start_state('test4_1', 'selfstart').
797 tests_module('test4_1', 'dyninst').
798
799 test('test4_2', 'test4_2', 'test4_2').
800 % test4_2 doesn't run on Windows
801 test_platform('test4_2', Platform) :-
802     platform(_, OS, _, Platform), OS \= 'windows'.
803 mutator('test4_2', ['test4_2.C']).
804 mutatee('test4_2', ['test4_2_mutatee.c']).
805 compiler_for_mutatee('test4_2', Compiler) :- comp_lang(Compiler, 'c').
806 test_runmode('test4_2', 'createProcess').
807 test_start_state('test4_2', 'selfstart').
808 tests_module('test4_2', 'dyninst').
809
810 test('test4_3', 'test4_3', 'test4_3').
811 % test4_3 doesn't run on Windows
812 test_platform('test4_3', Platform) :-
813     platform(_, OS, _, Platform), OS \= 'windows'.
814 mutator('test4_3', ['test4_3.C']).
815 mutatee('test4_3', ['test4_3_mutatee.c']).
816 compiler_for_mutatee('test4_3', Compiler) :- comp_lang(Compiler, 'c').
817 test_runmode('test4_3', 'createProcess').
818 test_start_state('test4_3', 'selfstart').
819 mutatee('test4_3b', ['test4_3b_mutatee.c']).
820 mutatee_peer('test4_3', 'test4_3b').
821 compiler_for_mutatee('test4_3b', Compiler) :- comp_lang(Compiler, 'c').
822 tests_module('test4_3', 'dyninst').
823
824 test('test4_4', 'test4_4', 'test4_4').
825 % test4_4 doesn't run on Windows
826 test_platform('test4_4', Platform) :-
827     platform(_, OS, _, Platform), OS \= 'windows'.
828 mutator('test4_4', ['test4_4.C']).
829 mutatee('test4_4', ['test4_4_mutatee.c']).
830 compiler_for_mutatee('test4_4', Compiler) :-
831     comp_lang(Compiler, 'c').
832 test_runmode('test4_4', 'createProcess').
833 test_start_state('test4_4', 'selfstart').
834 mutatee('test4_4b', ['test4_4b_mutatee.c']).
835 mutatee_peer('test4_4', 'test4_4b').
836 compiler_for_mutatee('test4_4b', Compiler) :-
837     comp_lang(Compiler, 'c').
838 tests_module('test4_4', 'dyninst').
839
840 test('test5_1', 'test5_1', 'dyninst_cxx_group_test').
841 % test5_1 only runs on Linux, Solaris, and Windows
842 test_platform('test5_1', Platform) :-
843     platform(_, OS, _, Platform),
844     member(OS, ['linux', 'solaris', 'windows']).
845 mutator('test5_1', ['test5_1.C']).
846 test_runmode('test5_1', 'createProcess').
847 test_start_state('test5_1', 'stopped').
848 groupable_test('test5_1').
849 restricted_amd64_abi('test5_1').
850 tests_module('test5_1', 'dyninst').
851
852 test('test5_2', 'test5_2', 'dyninst_cxx_group_test').
853 % test5_2 only runs on Linux, Solaris, and Windows
854 test_platform('test5_2', Platform) :-
855     platform(_, OS, _, Platform),
856     member(OS, ['linux', 'solaris', 'windows']).
857 mutator('test5_2', ['test5_2.C']).
858 test_runmode('test5_2', 'createProcess').
859 test_start_state('test5_2', 'stopped').
860 groupable_test('test5_2').
861 restricted_amd64_abi('test5_2').
862 tests_module('test5_2', 'dyninst').
863
864 test('test5_3', 'test5_3', 'dyninst_cxx_group_test').
865 test_runs_everywhere('test5_3').
866 mutator('test5_3', ['test5_3.C']).
867 test_runmode('test5_3', 'createProcess').
868 test_start_state('test5_3', 'stopped').
869 groupable_test('test5_3').
870 restricted_amd64_abi('test5_3').
871 tests_module('test5_3', 'dyninst').
872
873 test('test5_4', 'test5_4', 'dyninst_cxx_group_test').
874 % test5_4 only runs on Linux, Solaris, and Windows
875 test_platform('test5_4', Platform) :-
876     platform(_, OS, _, Platform),
877     member(OS, ['linux', 'solaris', 'windows']).
878 mutator('test5_4', ['test5_4.C']).
879 test_runmode('test5_4', 'createProcess').
880 test_start_state('test5_4', 'stopped').
881 groupable_test('test5_4').
882 restricted_amd64_abi('test5_4').
883 tests_module('test5_4', 'dyninst').
884
885 test('test5_5', 'test5_5', 'dyninst_cxx_group_test').
886 % test5_5 only runs on Linux, Solaris, and Windows
887 test_platform('test5_5', Platform) :-
888     platform(_, OS, _, Platform),
889     member(OS, ['linux', 'solaris', 'windows']).
890 mutator('test5_5', ['test5_5.C']).
891 test_runmode('test5_5', 'createProcess').
892 test_start_state('test5_5', 'stopped').
893 groupable_test('test5_5').
894 restricted_amd64_abi('test5_5').
895 tests_module('test5_5', 'dyninst').
896
897 test('test5_6', 'test5_6', 'dyninst_cxx_group_test').
898 % test5_6 only runs on x86 Linux
899 test_platform('test5_6', Platform) :-
900     platform('i386', 'linux', _, Platform).
901 mutator('test5_6', ['test5_6.C']).
902 test_runmode('test5_6', 'createProcess').
903 test_start_state('test5_6', 'stopped').
904 groupable_test('test5_6').
905 restricted_amd64_abi('test5_6').
906 tests_module('test5_6', 'dyninst').
907
908 test('test5_7', 'test5_7', 'dyninst_cxx_group_test').
909 % test5_7 only runs on Linux, Solaris, and Windows
910 test_platform('test5_7', Platform) :-
911     platform(_, OS, _, Platform),
912     member(OS, ['linux', 'solaris', 'windows']).
913 mutator('test5_7', ['test5_7.C']).
914 test_runmode('test5_7', 'createProcess').
915 test_start_state('test5_7', 'stopped').
916 groupable_test('test5_7').
917 restricted_amd64_abi('test5_7').
918 tests_module('test5_7', 'dyninst').
919
920 test('test5_8', 'test5_8', 'dyninst_cxx_group_test').
921 % test5_8 only runs on Linux, Solaris, and Windows
922 test_platform('test5_8', Platform) :-
923     platform(_, OS, _, Platform),
924     member(OS, ['linux', 'solaris', 'windows']).
925 mutator('test5_8', ['test5_8.C']).
926 test_runmode('test5_8', 'createProcess').
927 test_start_state('test5_8', 'stopped').
928 groupable_test('test5_8').
929 restricted_amd64_abi('test5_8').
930 tests_module('test5_8', 'dyninst').
931
932 test('test5_9', 'test5_9', 'dyninst_cxx_group_test').
933 % test5_9 only runs on Linus, Solaris, and Windows
934 test_platform('test5_9', Platform) :-
935     platform(_, OS, _, Platform),
936     member(OS, ['linux', 'solaris', 'windows']).
937 mutator('test5_9', ['test5_9.C']).
938 test_runmode('test5_9', 'createProcess').
939 test_start_state('test5_9', 'stopped').
940 groupable_test('test5_9').
941 restricted_amd64_abi('test5_9').
942 tests_module('test5_9', 'dyninst').
943
944 % Convenience rule for mapping platforms to the asm sources for test_mem
945 test_mem_mutatee_aux(P, Aux) :-
946     (
947         platform('sparc', 'solaris', _, P) -> Aux = ['test_mem_util.c',
948                                                      'test6LS-sparc.S'];
949         platform('power', 'aix', _, P) -> Aux = ['test_mem_util.c',
950                                                  'test6LS-power.s'];
951         platform('i386', 'linux', _, P) -> Aux = ['test_mem_util.c',
952                                                   'test6LS-x86.asm'];
953         platform('i386', 'windows', _, P) -> Aux = ['test_mem_util.c',
954                                                     'test6LS-masm.asm'];
955         platform('ia64', 'linux', _, P) -> Aux = ['test_mem_util.c',
956                                                   'test6LS-ia64.s'];
957         platform('x86_64', 'linux', _, P) -> Aux = ['test_mem_util.c',
958                                                     'test6LS-x86_64.s'];
959         platform('power', 'linux', _, P) -> Aux = ['test_mem_util.c',
960                                                    'test6LS-powerpc.S']
961     ).
962
963 % Convenience rule for checking platforms for test_mem_*
964 test_mem_platform(Platform) :-
965         platform('sparc', 'solaris', _, Platform);
966         platform('power', 'aix', _, Platform);
967         platform('i386', 'linux', _, Platform);
968         platform('i386', 'windows', _, Platform);
969         platform('ia64', 'linux', _, Platform);
970         platform('x86_64', 'linux', _, Platform).
971
972 % Special flags for asm files on Solaris
973 spec_object_file(OFile, 'gcc', ['test6LS-sparc.S'], [], [],
974                  ['-P -Wa,-xarch=v8plus']) :-
975     current_platform('sparc-sun-solaris2.8'),
976     member(OFile, ['test6LS-sparc_gcc_32_none', 'test6LS-sparc_gcc_32_low',
977                    'test6LS-sparc_gcc_32_high', 'test6LS-sparc_gcc_32_max']).
978
979 spec_object_file(OFile, 'ibm_as', ['test6LS-power.s'], [], [], []) :-
980         current_platform(P),
981         platform('power', 'aix', _, P),
982         member(OFile, ['test6LS-power_gcc_32_none', 'test6LS-power_gcc_32_low',
983                        'test6LS-power_gcc_32_high', 'test6LS-power_gcc_32_max']).
984
985 % test_mem_1, formerly test6_1
986 test('test_mem_1', 'test_mem_1', 'test_mem_1').
987 % test_mem_1 runs on some specific platforms (asm code)
988 test_platform('test_mem_1', Platform) :-
989     test_mem_platform(Platform).
990 mutator('test_mem_1', ['test_mem_1.C']).
991 mutatee('test_mem_1', ['test_mem_1_mutatee.c'], Aux) :-
992     current_platform(P),
993     test_mem_mutatee_aux(P, Aux).
994 compiler_for_mutatee('test_mem_1', Compiler) :-
995     comp_lang(Compiler, 'c').
996 test_runmode('test_mem_1', 'createProcess').
997 test_start_state('test_mem_1', 'stopped').
998 % I don't think these memory tests should be groupable
999 % groupable_test('test_mem_1').
1000 restricted_amd64_abi('test_mem_1').
1001 tests_module('test_mem_1', 'dyninst').
1002
1003 % test_mem_2, formerly test6_2
1004 test('test_mem_2', 'test_mem_2', 'test_mem_2').
1005 % test_mem_2 runs on specified platforms (assembly code)
1006 test_platform('test_mem_2', Platform) :-
1007     test_mem_platform(Platform).
1008 mutator('test_mem_2', ['test_mem_2.C']).
1009 mutatee('test_mem_2', ['test_mem_2_mutatee.c'], Aux) :-
1010     current_platform(Plat),
1011     test_mem_mutatee_aux(Plat, Aux).
1012 compiler_for_mutatee('test_mem_2', Compiler) :-
1013     comp_lang(Compiler, 'c').
1014 test_runmode('test_mem_2', 'createProcess').
1015 test_start_state('test_mem_2', 'stopped').
1016 restricted_amd64_abi('test_mem_2').
1017 tests_module('test_mem_2', 'dyninst').
1018
1019 % test_mem_3, formerly test6_3
1020 test('test_mem_3', 'test_mem_3', 'test_mem_3').
1021 test_platform('test_mem_3', Platform) :-
1022     test_mem_platform(Platform).
1023 mutator('test_mem_3', ['test_mem_3.C']).
1024 mutatee('test_mem_3', ['test_mem_3_mutatee.c'], Aux) :-
1025     current_platform(Plat),
1026     test_mem_mutatee_aux(Plat, Aux).
1027 compiler_for_mutatee('test_mem_3', Compiler) :-
1028     comp_lang(Compiler, 'c').
1029 test_runmode('test_mem_3', 'createProcess').
1030 test_start_state('test_mem_3', 'stopped').
1031 restricted_amd64_abi('test_mem_3').
1032 tests_module('test_mem_3', 'dyninst').
1033
1034 % test_mem_4, formerly test6_4
1035 test('test_mem_4', 'test_mem_4', 'test_mem_4').
1036 test_platform('test_mem_4', Platform) :-
1037     test_mem_platform(Platform).
1038 mutator('test_mem_4', ['test_mem_4.C']).
1039 mutatee('test_mem_4', ['test_mem_4_mutatee.c'], Aux) :-
1040     current_platform(Platform),
1041     test_mem_mutatee_aux(Platform, Aux).
1042 compiler_for_mutatee('test_mem_4', Compiler) :-
1043     comp_lang(Compiler, 'c').
1044 test_runmode('test_mem_4', 'createProcess').
1045 test_start_state('test_mem_4', 'stopped').
1046 restricted_amd64_abi('test_mem_4').
1047 tests_module('test_mem_4', 'dyninst').
1048
1049 % test_mem_5, formerly test6_5
1050 test('test_mem_5', 'test_mem_5', 'test_mem_5').
1051 test_platform('test_mem_5', Platform) :-
1052     test_mem_platform(Platform).
1053 mutator('test_mem_5', ['test_mem_5.C']).
1054 mutatee('test_mem_5', ['test_mem_5_mutatee.c'], Aux) :-
1055     current_platform(Platform),
1056     test_mem_mutatee_aux(Platform, Aux).
1057 compiler_for_mutatee('test_mem_5', Compiler) :-
1058     comp_lang(Compiler, 'c').
1059 test_runmode('test_mem_5', 'createProcess').
1060 test_start_state('test_mem_5', 'stopped').
1061 restricted_amd64_abi('test_mem_5').
1062 tests_module('test_mem_5', 'dyninst').
1063
1064 % test_mem_6, formerly test6_6
1065 test('test_mem_6', 'test_mem_6', 'test_mem_6').
1066 test_platform('test_mem_6', Platform) :-
1067     test_mem_platform(Platform).
1068 mutator('test_mem_6', ['test_mem_6.C']).
1069 mutatee('test_mem_6', ['test_mem_6_mutatee.c'], Aux) :-
1070     current_platform(Platform),
1071     test_mem_mutatee_aux(Platform, Aux).
1072 compiler_for_mutatee('test_mem_6', Compiler) :-
1073     comp_lang(Compiler, 'c').
1074 test_runmode('test_mem_6', 'createProcess').
1075 test_start_state('test_mem_6', 'stopped').
1076 restricted_amd64_abi('test_mem_6').
1077 tests_module('test_mem_6', 'dyninst').
1078
1079 % test_mem_7, formerly test6_7
1080 test('test_mem_7', 'test_mem_7', 'test_mem_7').
1081 test_platform('test_mem_7', Platform) :-
1082     test_mem_platform(Platform).
1083 mutator('test_mem_7', ['test_mem_7.C']).
1084 mutatee('test_mem_7', ['test_mem_7_mutatee.c'], Aux) :-
1085     current_platform(Platform),
1086     test_mem_mutatee_aux(Platform, Aux).
1087 compiler_for_mutatee('test_mem_7', Compiler) :-
1088     comp_lang(Compiler, 'c').
1089 test_runmode('test_mem_7', 'createProcess').
1090 test_start_state('test_mem_7', 'stopped').
1091 restricted_amd64_abi('test_mem_7').
1092 tests_module('test_mem_7', 'dyninst').
1093
1094 % test_mem_8, formerly test6_8
1095 test('test_mem_8', 'test_mem_8', 'test_mem_8').
1096 test_platform('test_mem_8', Platform) :-
1097     test_mem_platform(Platform).
1098 mutator('test_mem_8', ['test_mem_8.C']).
1099 mutatee('test_mem_8', ['test_mem_8_mutatee.c'], Aux) :-
1100     current_platform(Platform),
1101     test_mem_mutatee_aux(Platform, Aux).
1102 compiler_for_mutatee('test_mem_8', Compiler) :-
1103     comp_lang(Compiler, 'c').
1104 test_runmode('test_mem_8', 'createProcess').
1105 test_start_state('test_mem_8', 'stopped').
1106 restricted_amd64_abi('test_mem_8').
1107 tests_module('test_mem_8', 'dyninst').
1108
1109 test('test_fork_5', 'test_fork_5', 'test_fork_5'). % Formerly test7_1
1110 % No fork() on Windows
1111 test_platform('test_fork_5', Platform) :-
1112     platform(_, OS, _, Platform),
1113     OS \= 'windows'.
1114 mutator('test_fork_5', ['test_fork_5.C']).
1115 mutatee('test_fork_5', ['test_fork_5_mutatee.c']).
1116 compiler_for_mutatee('test_fork_5', Compiler) :-
1117     comp_lang(Compiler, 'c').
1118 test_runmode('test_fork_5', 'createProcess').
1119 test_start_state('test_fork_5', 'stopped').
1120 tests_module('test_fork_5', 'dyninst').
1121
1122 test('test_fork_6', 'test_fork_6', 'test_fork_6'). % Formerly test7_2
1123 % No fork() on Windows
1124 test_platform('test_fork_6', Platform) :-
1125     platform(_, OS, _, Platform),
1126     OS \= 'windows'.
1127 mutator('test_fork_6', ['test_fork_6.C']).
1128 mutatee('test_fork_6', ['test_fork_6_mutatee.c']).
1129 compiler_for_mutatee('test_fork_6', Compiler) :-
1130     comp_lang(Compiler, 'c').
1131 test_runmode('test_fork_6', 'createProcess').
1132 test_start_state('test_fork_6', 'stopped').
1133 tests_module('test_fork_6', 'dyninst').
1134
1135 test('test_fork_7', 'test_fork_7', 'test_fork_7'). % Formerly test7_3
1136 % No fork() on Windows
1137 test_platform('test_fork_7', Platform) :-
1138     platform(_, OS, _, Platform),
1139     OS \= 'windows'.
1140 mutator('test_fork_7', ['test_fork_7.C']).
1141 mutatee('test_fork_7', ['test_fork_7_mutatee.c']).
1142 compiler_for_mutatee('test_fork_7', Compiler) :-
1143     comp_lang(Compiler, 'c').
1144 test_runmode('test_fork_7', 'createProcess').
1145 test_start_state('test_fork_7', 'stopped').
1146 tests_module('test_fork_7', 'dyninst').
1147
1148 test('test_fork_8', 'test_fork_8', 'test_fork_8'). % Formerly test7_4
1149 % No fork() on Windows
1150 test_platform('test_fork_8', Platform) :-
1151     platform(_, OS, _, Platform),
1152     OS \= 'windows'.
1153 mutator('test_fork_8', ['test_fork_8.C']).
1154 mutatee('test_fork_8', ['test_fork_8_mutatee.c']).
1155 compiler_for_mutatee('test_fork_8', Compiler) :-
1156     comp_lang(Compiler, 'c').
1157 test_runmode('test_fork_8', 'createProcess').
1158 test_start_state('test_fork_8', 'stopped').
1159 tests_module('test_fork_8', 'dyninst').
1160
1161 test('test_fork_9', 'test_fork_9', 'test_fork_9'). % Formerly test7_5
1162 % No fork() on Windows
1163 test_platform('test_fork_9', Platform) :-
1164     platform(_, OS, _, Platform),
1165     OS \= 'windows'.
1166 mutator('test_fork_9', ['test_fork_9.C']).
1167 mutatee('test_fork_9', ['test_fork_9_mutatee.c']).
1168 compiler_for_mutatee('test_fork_9', Compiler) :-
1169     comp_lang(Compiler, 'c').
1170 test_runmode('test_fork_9', 'createProcess').
1171 test_start_state('test_fork_9', 'stopped').
1172 tests_module('test_fork_9', 'dyninst').
1173
1174 test('test_fork_10', 'test_fork_10', 'test_fork_10'). % Formerly test7_6
1175 % No fork() on Windows
1176 test_platform('test_fork_10', Platform) :-
1177     platform(_, OS, _, Platform),
1178     OS \= 'windows'.
1179 mutator('test_fork_10', ['test_fork_10.C']).
1180 mutatee('test_fork_10', ['test_fork_10_mutatee.c']).
1181 compiler_for_mutatee('test_fork_10', Compiler) :-
1182     comp_lang(Compiler, 'c').
1183 test_runmode('test_fork_10', 'createProcess').
1184 test_start_state('test_fork_10', 'stopped').
1185 tests_module('test_fork_10', 'dyninst').
1186
1187 test('test_fork_11', 'test_fork_11', 'test_fork_11'). % Formerly test7_7
1188 % No fork() on Windows
1189 test_platform('test_fork_11', Platform) :-
1190     platform(_, OS, _, Platform),
1191     OS \= 'windows'.
1192 mutator('test_fork_11', ['test_fork_11.C']).
1193 mutatee('test_fork_11', ['test_fork_11_mutatee.c']).
1194 compiler_for_mutatee('test_fork_11', Compiler) :-
1195     comp_lang(Compiler, 'c').
1196 test_runmode('test_fork_11', 'createProcess').
1197 test_start_state('test_fork_11', 'stopped').
1198 tests_module('test_fork_11', 'dyninst').
1199
1200 test('test_fork_12', 'test_fork_12', 'test_fork_12'). % Formerly test7_8
1201 % No fork() on Windows
1202 test_platform('test_fork_12', Platform) :-
1203     platform(_, OS, _, Platform),
1204     OS \= 'windows'.
1205 mutator('test_fork_12', ['test_fork_12.C']).
1206 mutatee('test_fork_12', ['test_fork_12_mutatee.c']).
1207 compiler_for_mutatee('test_fork_12', Compiler) :-
1208     comp_lang(Compiler, 'c').
1209 test_runmode('test_fork_12', 'createProcess').
1210 test_start_state('test_fork_12', 'stopped').
1211 tests_module('test_fork_12', 'dyninst').
1212
1213 test('test_fork_13', 'test_fork_13', 'test_fork_13'). % Formerly test7_9
1214 % No fork() on Windows
1215 test_platform('test_fork_13', Platform) :-
1216     platform(_, OS, _, Platform),
1217     OS \= 'windows'.
1218 mutator('test_fork_13', ['test_fork_13.C']).
1219 mutatee('test_fork_13', ['test_fork_13_mutatee.c']).
1220 compiler_for_mutatee('test_fork_13', Compiler) :-
1221     comp_lang(Compiler, 'c').
1222 test_runmode('test_fork_13', 'createProcess').
1223 test_start_state('test_fork_13', 'stopped').
1224 tests_module('test_fork_13', 'dyninst').
1225
1226 % test_stack_1 (formerly test8_1)
1227 test('test_stack_1', 'test_stack_1', 'test_stack_1').
1228 test_description('test_stack_1', 'Basic getCallStack test').
1229 test_runs_everywhere('test_stack_1').
1230 mutator('test_stack_1', ['test_stack_1.C']).
1231 mutatee('test_stack_1', ['test_stack_1_mutatee.c']).
1232 compiler_for_mutatee('test_stack_1', Compiler) :-
1233     comp_lang(Compiler, 'c').
1234 test_runmode('test_stack_1', 'createProcess').
1235 test_start_state('test_stack_1', 'stopped').
1236 tests_module('test_stack_1', 'dyninst').
1237
1238 % test_stack_2 (formerly test8_2)
1239 test('test_stack_2', 'test_stack_2', 'test_stack_2').
1240 test_description('test_stack_2', 'Test getCallStack when the mutatee stops in a signal handler').
1241 % test_stack_2 doesn't run on Windows
1242 test_platform('test_stack_2', Platform) :-
1243     platform(_, OS, _, Platform),
1244     OS \= 'windows'.
1245 mutator('test_stack_2', ['test_stack_2.C']).
1246 mutatee('test_stack_2', ['test_stack_2_mutatee.c']).
1247 compiler_for_mutatee('test_stack_2', Compiler) :-
1248     comp_lang(Compiler, 'c').
1249 test_runmode('test_stack_2', 'createProcess').
1250 test_start_state('test_stack_2', 'stopped').
1251 tests_module('test_stack_2', 'dyninst').
1252
1253 % test_stack_3 (formerly test8_3)
1254 test('test_stack_3', 'test_stack_3', 'test_stack_3').
1255 test_description('test_stack_3', 'Test getCallStack through instrumentation').
1256 test_runs_everywhere('test_stack_3').
1257 mutator('test_stack_3', ['test_stack_3.C']).
1258 mutatee('test_stack_3', ['test_stack_3_mutatee.c']).
1259 compiler_for_mutatee('test_stack_3', Compiler) :-
1260     comp_lang(Compiler, 'c').
1261 test_runmode('test_stack_3', 'createProcess').
1262 test_start_state('test_stack_3', 'stopped').
1263 tests_module('test_stack_3', 'dyninst').
1264
1265 % test_callback_1 (formerly test12_2)
1266 test('test_callback_1', 'test_callback_1', 'test_callback_1').
1267 test_description('test_callback_1', 'dynamic callsite callbacks').
1268 % Why doesn't this test run on Windows?
1269 test_platform('test_callback_1', Platform) :-
1270     platform(_, OS, _, Platform),
1271     OS \= 'windows'.
1272 mutator('test_callback_1', ['test_callback_1.C']).
1273 mutatee('test_callback_1', ['test_callback_1_mutatee.c']).
1274 compiler_for_mutatee('test_callback_1', Compiler) :-
1275     comp_lang(Compiler, 'c').
1276 test_runmode('test_callback_1', 'createProcess').
1277 test_start_state('test_callback_1', 'stopped').
1278 tests_module('test_callback_1', 'dyninst').
1279
1280 % test_callback_2 (formerly test12_7)
1281 test('test_callback_2', 'test_callback_2', 'test_callback_2').
1282 test_description('test_callback_2', 'user defined message callback -- st').
1283 % Is there really any reason why this test *can't* run on Windows?
1284 test_platform('test_callback_2', Platform) :-
1285     platform(_, OS, _, Platform),
1286     OS \= 'windows'.
1287 mutator('test_callback_2', ['test_callback_2.C']).
1288 mutatee('test_callback_2', ['test_callback_2_mutatee.c']).
1289 compiler_for_mutatee('test_callback_2', Compiler) :-
1290     comp_lang(Compiler, 'c').
1291 test_runmode('test_callback_2', 'createProcess').
1292 test_start_state('test_callback_2', 'stopped').
1293 tests_module('test_callback_2', 'dyninst').
1294
1295 % test_thread_1 (Formerly test12_1)
1296 test('test_thread_1', 'test_thread_1', 'test_thread_1').
1297 test_description('test_thread_1', 'rtlib spinlocks').
1298 % test_thread_* doesn't run on Windows
1299 test_platform('test_thread_1', Platform) :-
1300     platform(_, OS, _, Platform),
1301     OS \= 'windows'.
1302 mutator('test_thread_1', ['test_thread_1.C']).
1303 mutatee('test_thread_1', ['test_thread_1_mutatee.c'], ['test_thread.c']).
1304 compiler_for_mutatee('test_thread_1', Compiler) :-
1305     comp_lang(Compiler, 'c').
1306 % Requires an additional library on Solaris
1307 mutatee_requires_libs('test_thread_1', Libs) :-
1308     current_platform(P),
1309     platform(_, OS, _, P),
1310     (
1311         OS = 'solaris' -> Libs = ['dl', 'pthread', 'rt'];
1312         Libs = ['dl', 'pthread']
1313     ).
1314 test_runmode('test_thread_1', 'createProcess').
1315 test_start_state('test_thread_1', 'stopped').
1316 tests_module('test_thread_1', 'dyninst').
1317
1318 % test_thread_2 (formerly test12_3)
1319 mutator('test_thread_2', ['test_thread_2.C']).
1320 mutatee('test_thread_2', ['test_thread_2_mutatee.c'], ['test_thread.c']).
1321 compiler_for_mutatee('test_thread_2', Compiler) :-
1322     comp_lang(Compiler, 'c').
1323 % Requires an additional library on Solaris
1324 mutatee_requires_libs('test_thread_2', Libs) :-
1325     current_platform(P),
1326     platform(_, OS, _, P),
1327     (
1328         OS = 'solaris' -> Libs = ['dl', 'pthread', 'rt'];
1329         Libs = ['dl', 'pthread']
1330     ).
1331 test('test_thread_2', 'test_thread_2', 'test_thread_2').
1332 % Does this test fall under callback tests or thread tests?
1333 test_description('test_thread_2', 'thread create callback').
1334 test_platform('test_thread_2', Platform) :-
1335     platform(_, OS, _, Platform),
1336     OS \= 'windows'.
1337 test_runmode('test_thread_2', 'createProcess').
1338 test_start_state('test_thread_2', 'stopped').
1339 tests_module('test_thread_2', 'dyninst').
1340
1341 % test_thread_3 (formerly test12_4)
1342 mutator('test_thread_3', ['test_thread_3.C']).
1343 mutatee('test_thread_3', ['test_thread_3_mutatee.c'], ['test_thread.c']).
1344 compiler_for_mutatee('test_thread_3', Compiler) :-
1345     comp_lang(Compiler, 'c').
1346 % Requires an additional library on Solaris
1347 mutatee_requires_libs('test_thread_3', Libs) :-
1348     current_platform(P),
1349     platform(_, OS, _, P),
1350     (
1351         OS = 'solaris' -> Libs = ['dl', 'pthread', 'rt'];
1352         Libs = ['dl', 'pthread']
1353     ).
1354 test('test_thread_3', 'test_thread_3', 'test_thread_3').
1355 test_description('test_thread_3', 'thread create callback - doa').
1356 test_platform('test_thread_3', Platform) :-
1357     platform(_, OS, _, Platform),
1358     OS \= 'windows'.
1359 test_runmode('test_thread_3', 'createProcess').
1360 test_start_state('test_thread_3', 'stopped').
1361 tests_module('test_thread_3', 'dyninst').
1362
1363 % test_thread_4 (formerly test12_5)
1364 % This test is disabled for all platforms via an #ifdef..
1365 test_description('test_thread_4', 'thread exit callback').
1366 tests_module('test_thread_4', 'dyninst').
1367
1368 % test_thread_5 (formerly test12_8)
1369 mutator('test_thread_5', ['test_thread_5.C']).
1370 mutatee('test_thread_5', ['test_thread_5_mutatee.c'], ['test_thread.c']).
1371 compiler_for_mutatee('test_thread_5', Compiler) :-
1372     comp_lang(Compiler, 'c').
1373 % Requires an additional library on Solaris
1374 mutatee_requires_libs('test_thread_5', Libs) :-
1375     current_platform(P),
1376     platform(_, OS, _, P),
1377     (
1378         OS = 'solaris' -> Libs = ['dl', 'pthread', 'rt'];
1379         Libs = ['dl', 'pthread']
1380     ).
1381 test('test_thread_5', 'test_thread_5', 'test_thread_5').
1382 test_description('test_thread_5', 'user defined message callback -- mt').
1383 test_platform('test_thread_5', Platform) :-
1384     platform(_, OS, _, Platform),
1385     OS \= 'windows'.
1386 test_runmode('test_thread_5', 'createProcess').
1387 test_start_state('test_thread_5', 'stopped').
1388 tests_module('test_thread_5', 'dyninst').
1389
1390 % test_thread_6 (formerly test13_1)
1391 mutator('test_thread_6', ['test_thread_6.C']).
1392 mutatee('test_thread_6', ['test_thread_6_mutatee.c'], ['mutatee_util_mt.c']).
1393 compiler_for_mutatee('test_thread_6', Compiler) :-
1394     comp_lang(Compiler, 'c').
1395 % Mutatee needs to be linked with libpthread everywhere but on Windows
1396 mutatee_requires_libs('test_thread_6', Libs) :-
1397     current_platform(Platform),
1398     platform(_, OS, _, Platform),
1399     (
1400         OS = 'windows' -> Libs = [];
1401         OS = 'solaris' -> Libs = ['pthread', 'rt'];
1402         Libs = ['pthread']
1403     ).
1404 test('test_thread_6', 'test_thread_6', 'test_thread_6').
1405 test_description('test_thread_6', 'thread create and destroy callbacks?').
1406 test_runs_everywhere('test_thread_6').
1407 test_runmode('test_thread_6', 'both').
1408 test_start_state('test_thread_6', 'selfstart').
1409 tests_module('test_thread_6', 'dyninst').
1410
1411 % test_thread_7 (formerly test14_1)
1412 mutator('test_thread_7', ['test_thread_7.C']).
1413 mutatee('test_thread_7', ['test_thread_7_mutatee.c'], ['mutatee_util_mt.c']).
1414 compiler_for_mutatee('test_thread_7', Compiler) :-
1415     comp_lang(Compiler, 'c').
1416 % gcc/g++ with max optimization do some weird recursive call unrolling that
1417 % breaks this test
1418 optimization_for_mutatee('test_thread_7', GNU, Opt) :-
1419     member(GNU, ['gcc', 'g++']),
1420     member(Opt, ['none', 'low', 'high']).
1421 optimization_for_mutatee('test_thread_7', NonGNU, Opt) :-
1422     comp_lang(NonGNU, 'c'),
1423     \+ member(NonGNU, ['gcc', 'g++']),
1424     compiler_opt_trans(NonGNU, Opt, _).
1425 % Mutatee needs to be linked with libpthread everywhere but on Windows
1426 mutatee_requires_libs('test_thread_7', Libs) :-
1427     current_platform(Platform),
1428     platform(_, OS, _, Platform),
1429     (
1430         OS = 'windows' -> Libs = [];
1431         OS = 'solaris' -> Libs = ['pthread', 'rt'];
1432         Libs = ['pthread']
1433     ).
1434 test('test_thread_7', 'test_thread_7', 'test_thread_7').
1435 test_description('test_thread_7', 'multithreaded tramp guards').
1436 test_runs_everywhere('test_thread_7').
1437 test_runmode('test_thread_7', 'both').
1438 test_start_state('test_thread_7', 'selfstart').
1439 tests_module('test_thread_7', 'dyninst').
1440
1441 % test_thread_8 (formerly test15_1)
1442 % This test tests both synchronous and asynchronous one time codes..
1443 mutator('test_thread_8', ['test_thread_8.C']).
1444 mutatee('test_thread_8', ['test_thread_8_mutatee.c'], ['mutatee_util_mt.c']).
1445 compiler_for_mutatee('test_thread_8', Compiler) :-
1446     comp_lang(Compiler, 'c').
1447 % Mutatee needs to be linked with libpthread everywhere but on Windows
1448 mutatee_requires_libs('test_thread_8', Libs) :-
1449     current_platform(Platform),
1450     platform(_, OS, _, Platform),
1451     (
1452         OS = 'windows' -> Libs = [];
1453         OS = 'solaris' -> Libs = ['pthread', 'rt'];
1454         Libs = ['pthread']
1455     ).
1456 test('test_thread_8', 'test_thread_8', 'test_thread_8').
1457 test_description('test_thread_8', 'thread-specific one time codes').
1458 test_runs_everywhere('test_thread_8').
1459 test_runmode('test_thread_8', 'both').
1460 test_start_state('test_thread_8', 'selfstart').
1461 tests_module('test_thread_8', 'dyninst').
1462
1463 % The Fortran tests
1464
1465 % convenience clause for C components of Fortran tests
1466 spec_object_file(Object, 'gcc', [], [Source], [], ['-DSOLO_MUTATEE $(MUTATEE_G77_CFLAGS) -I../src']) :-
1467     fortran_c_component(Testname),
1468     atom_concat(Testname, '_mutatee_solo_gcc_none', Object),
1469     atom_concat(Testname, '_solo_me.c', Source).
1470
1471 mutatee('test1_1F', ['test1_1F_mutatee.c'], ['test1_1F_fortran.F']).
1472 % TODO Make sure these are correct
1473 compiler_for_mutatee('test1_1F', Compiler) :-
1474     comp_lang(Compiler, 'fortran').
1475 optimization_for_mutatee('test1_1F', Compiler, 'none') :-
1476     compiler_for_mutatee('test1_1F', Compiler).
1477 % The C language components of the Fortran tests are compiled with different
1478 % options than the rest of the C files.  Regretably, this clause is very non-
1479 % intuitive..  I'm doing a hack here around the fact that the Python component
1480 % doesn't know that test1_1F_mutatee.c gets preprocessed and renamed.. This
1481 % sucks and I need to figure out a better way to do it.
1482 fortran_c_component('test1_1F').
1483 %spec_object_file('test1_1F_mutatee_solo_gcc_none', 'gcc',
1484 %   ['test1_1F_solo_me.c'], [], ['$(MUTATEE_G77_CFLAGS)']).
1485 % spec_exception('test1_1F_mutatee.c', 'mutatee_flags',
1486 %          ['gcc', '$(MUTATEE_G77_CFLAGS)']).
1487 % spec_exception('test1_1F_mutatee.c', 'mutatee_flags',
1488 %          ['g++', '$(MUTATEE_G77_CFLAGS)']).
1489 % First try at a test that uses a one-to-many mutator-mutatee mapping
1490 test('test1_1F', 'test1_1', 'test1_1F').
1491 test_description('test1_1F', 'instrument with zero-arg function call (Fortran)').
1492 test_runs_everywhere('test1_1F').
1493 test_runmode('test1_1F', 'both').
1494 test_start_state('test1_1F', 'stopped').
1495 groupable_test('test1_1F').
1496 tests_module('test1_1F', 'dyninst').
1497
1498 mutatee('test1_2F', ['test1_2F_mutatee.c'], ['test1_2F_fortran.F']).
1499 % TODO Make sure these are correct
1500 compiler_for_mutatee('test1_2F', Compiler) :-
1501     comp_lang(Compiler, 'fortran').
1502 optimization_for_mutatee('test1_2F', Compiler, 'none') :-
1503     compiler_for_mutatee('test1_2F', Compiler).
1504 % The C language components of the Fortran tests are compiled with different
1505 % options than the rest of the C files.  Regretably, this clause is very non-
1506 % intuitive..  I'm doing a hack here around the fact that the Python component
1507 % doesn't know that test1_2F_mutatee.c gets preprocessed and renamed.. This
1508 % sucks and I need to figure out a better way to do it.
1509 fortran_c_component('test1_2F').
1510 % First try at a test that uses a one-to-many mutator-mutatee mapping
1511 test('test1_2F', 'test1_2', 'test1_2F').
1512 test_description('test1_2F', 'instrument with four-arg function call (Fortran)').
1513 test_runs_everywhere('test1_2F').
1514 test_runmode('test1_2F', 'both').
1515 test_start_state('test1_2F', 'stopped').
1516 groupable_test('test1_2F').
1517 tests_module('test1_2F', 'dyninst').
1518
1519 mutatee('test1_3F', ['test1_3F_mutatee.c'], ['test1_3F_fortran.F']).
1520 % TODO Make sure these are correct
1521 compiler_for_mutatee('test1_3F', Compiler) :-
1522     comp_lang(Compiler, 'fortran').
1523 optimization_for_mutatee('test1_3F', Compiler, 'none') :-
1524     compiler_for_mutatee('test1_3F', Compiler).
1525 % The C language components of the Fortran tests are compiled with different
1526 % options than the rest of the C files.  Regretably, this clause is very non-
1527 % intuitive..  I'm doing a hack here around the fact that the Python component
1528 % doesn't know that test1_3F_mutatee.c gets preprocessed and renamed.. This
1529 % sucks and I need to figure out a better way to do it.
1530 fortran_c_component('test1_3F').
1531 % First try at a test that uses a one-to-many mutator-mutatee mapping
1532 test('test1_3F', 'test1_3', 'test1_3F').
1533 test_description('test1_3F', 'passing variables to a function (Fortran)').
1534 test_runs_everywhere('test1_3F').
1535 test_runmode('test1_3F', 'both').
1536 test_start_state('test1_3F', 'stopped').
1537 groupable_test('test1_3F').
1538 tests_module('test1_3F', 'dyninst').
1539
1540 mutatee('test1_4F', ['test1_4F_mutatee.c'], ['test1_4F_fortran.F']).
1541 % TODO Make sure these are correct
1542 compiler_for_mutatee('test1_4F', Compiler) :-
1543     comp_lang(Compiler, 'fortran').
1544 optimization_for_mutatee('test1_4F', Compiler, 'none') :-
1545     compiler_for_mutatee('test1_4F', Compiler).
1546 % The C language components of the Fortran tests are compiled with different
1547 % options than the rest of the C files.  Regretably, this clause is very non-
1548 % intuitive..  I'm doing a hack here around the fact that the Python component
1549 % doesn't know that test1_4F_mutatee.c gets preprocessed and renamed.. This
1550 % sucks and I need to figure out a better way to do it.
1551 fortran_c_component('test1_4F').
1552 % First try at a test that uses a one-to-many mutator-mutatee mapping
1553 test('test1_4F', 'test1_4', 'test1_4F').
1554 test_description('test1_4F', 'instrument with a sequence (Fortran)').
1555 test_runs_everywhere('test1_4F').
1556 test_runmode('test1_4F', 'both').
1557 test_start_state('test1_4F', 'stopped').
1558 groupable_test('test1_4F').
1559 tests_module('test1_4F', 'dyninst').
1560
1561 mutatee('test1_5F', ['test1_5F_mutatee.c'], ['test1_5F_fortran.F']).
1562 % TODO Make sure these are correct
1563 compiler_for_mutatee('test1_5F', Compiler) :-
1564     comp_lang(Compiler, 'fortran').
1565 optimization_for_mutatee('test1_5F', Compiler, 'none') :-
1566     compiler_for_mutatee('test1_5F', Compiler).
1567 % The C language components of the Fortran tests are compiled with different
1568 % options than the rest of the C files.  Regretably, this clause is very non-
1569 % intuitive..  I'm doing a hack here around the fact that the Python component
1570 % doesn't know that test1_5F_mutatee.c gets preprocessed and renamed.. This
1571 % sucks and I need to figure out a better way to do it.
1572 fortran_c_component('test1_5F').
1573 % First try at a test that uses a one-to-many mutator-mutatee mapping
1574 test('test1_5F', 'test1_5', 'test1_5F').
1575 test_description('test1_5F', 'instrument with if clause (no else) (Fortran)').
1576 test_runs_everywhere('test1_5F').
1577 test_runmode('test1_5F', 'both').
1578 test_start_state('test1_5F', 'stopped').
1579 groupable_test('test1_5F').
1580 tests_module('test1_5F', 'dyninst').
1581
1582 mutatee('test1_6F', ['test1_6F_mutatee.c'], ['test1_6F_fortran.F']).
1583 % TODO Make sure these are correct
1584 compiler_for_mutatee('test1_6F', Compiler) :-
1585     comp_lang(Compiler, 'fortran').
1586 optimization_for_mutatee('test1_6F', Compiler, 'none') :-
1587     compiler_for_mutatee('test1_6F', Compiler).
1588 % The C language components of the Fortran tests are compiled with different
1589 % options than the rest of the C files.  Regretably, this clause is very non-
1590 % intuitive..  I'm doing a hack here around the fact that the Python component
1591 % doesn't know that test1_6F_mutatee.c gets preprocessed and renamed.. This
1592 % sucks and I need to figure out a better way to do it.
1593 fortran_c_component('test1_6F').
1594 % First try at a test that uses a one-to-many mutator-mutatee mapping
1595 test('test1_6F', 'test1_6', 'test1_6F').
1596 test_description('test1_6F', 'arithmetic operators (Fortran)').
1597 test_runs_everywhere('test1_6F').
1598 test_runmode('test1_6F', 'both').
1599 test_start_state('test1_6F', 'stopped').
1600 groupable_test('test1_6F').
1601 tests_module('test1_6F', 'dyninst').
1602
1603 mutatee('test1_7F', ['test1_7F_mutatee.c'], ['test1_7F_fortran.F']).
1604 % TODO Make sure these are correct
1605 compiler_for_mutatee('test1_7F', Compiler) :-
1606     comp_lang(Compiler, 'fortran').
1607 optimization_for_mutatee('test1_7F', Compiler, 'none') :-
1608     compiler_for_mutatee('test1_7F', Compiler).
1609 % The C language components of the Fortran tests are compiled with different
1610 % options than the rest of the C files.  Regretably, this clause is very non-
1611 % intuitive..  I'm doing a hack here around the fact that the Python component
1612 % doesn't know that test1_7F_mutatee.c gets preprocessed and renamed.. This
1613 % sucks and I need to figure out a better way to do it.
1614 fortran_c_component('test1_7F').
1615 % First try at a test that uses a one-to-many mutator-mutatee mapping
1616 test('test1_7F', 'test1_7', 'test1_7F').
1617 test_description('test1_7F', 'relational operators (Fortran)').
1618 test_runs_everywhere('test1_7F').
1619 test_runmode('test1_7F', 'both').
1620 test_start_state('test1_7F', 'stopped').
1621 groupable_test('test1_7F').
1622 tests_module('test1_7F', 'dyninst').
1623
1624 mutatee('test1_8F', ['test1_8F_mutatee.c'], ['test1_8F_fortran.F']).
1625 % TODO Make sure these are correct
1626 compiler_for_mutatee('test1_8F', Compiler) :-
1627     comp_lang(Compiler, 'fortran').
1628 optimization_for_mutatee('test1_8F', Compiler, 'none') :-
1629     compiler_for_mutatee('test1_8F', Compiler).
1630 % The C language components of the Fortran tests are compiled with different
1631 % options than the rest of the C files.  Regretably, this clause is very non-
1632 % intuitive..  I'm doing a hack here around the fact that the Python component
1633 % doesn't know that test1_8F_mutatee.c gets preprocessed and renamed.. This
1634 % sucks and I need to figure out a better way to do it.
1635 fortran_c_component('test1_8F').
1636 % First try at a test that uses a one-to-many mutator-mutatee mapping
1637 test('test1_8F', 'test1_8', 'test1_8F').
1638 test_description('test1_8F', 'verify that registers are preserved across inserted expression (Fortran)').
1639 test_runs_everywhere('test1_8F').
1640 test_runmode('test1_8F', 'both').
1641 test_start_state('test1_8F', 'stopped').
1642 groupable_test('test1_8F').
1643 tests_module('test1_8F', 'dyninst').
1644
1645 mutatee('test1_9F', ['test1_9F_mutatee.c'], ['test1_9F_fortran.F']).
1646 % TODO Make sure these are correct
1647 compiler_for_mutatee('test1_9F', Compiler) :-
1648     comp_lang(Compiler, 'fortran').
1649 optimization_for_mutatee('test1_9F', Compiler, 'none') :-
1650     compiler_for_mutatee('test1_9F', Compiler).
1651 % The C language components of the Fortran tests are compiled with different
1652 % options than the rest of the C files.  Regretably, this clause is very non-
1653 % intuitive..  I'm doing a hack here around the fact that the Python component
1654 % doesn't know that test1_9F_mutatee.c gets preprocessed and renamed.. This
1655 % sucks and I need to figure out a better way to do it.
1656 fortran_c_component('test1_9F').
1657 % First try at a test that uses a one-to-many mutator-mutatee mapping
1658 test('test1_9F', 'test1_9', 'test1_9F').
1659 test_description('test1_9F', 'verify that registers are preserved across inserted function call (Fortran)').
1660 test_runs_everywhere('test1_9F').
1661 test_runmode('test1_9F', 'both').
1662 test_start_state('test1_9F', 'stopped').
1663 groupable_test('test1_9F').
1664 tests_module('test1_9F', 'dyninst').
1665
1666 mutatee('test1_10F', ['test1_10F_mutatee.c'], ['test1_10F_fortran.F']).
1667 % TODO Make sure these are correct
1668 compiler_for_mutatee('test1_10F', Compiler) :-
1669     comp_lang(Compiler, 'fortran').
1670 optimization_for_mutatee('test1_10F', Compiler, 'none') :-
1671     compiler_for_mutatee('test1_10F', Compiler).
1672 % The C language components of the Fortran tests are compiled with different
1673 % options than the rest of the C files.  Regretably, this clause is very non-
1674 % intuitive..  I'm doing a hack here around the fact that the Python component
1675 % doesn't know that test1_10F_mutatee.c gets preprocessed and renamed.. This
1676 % sucks and I need to figure out a better way to do it.
1677 fortran_c_component('test1_10F').
1678 % First try at a test that uses a one-to-many mutator-mutatee mapping
1679 test('test1_10F', 'test1_10', 'test1_10F').
1680 test_description('test1_10F', 'inserted snippet order (Fortran)').
1681 test_runs_everywhere('test1_10F').
1682 test_runmode('test1_10F', 'both').
1683 test_start_state('test1_10F', 'stopped').
1684 groupable_test('test1_10F').
1685 tests_module('test1_10F', 'dyninst').
1686
1687 mutatee('test1_11F', ['test1_11F_mutatee.c'], ['test1_11F_fortran.F']).
1688 % TODO Make sure these are correct
1689 compiler_for_mutatee('test1_11F', Compiler) :-
1690     comp_lang(Compiler, 'fortran').
1691 optimization_for_mutatee('test1_11F', Compiler, 'none') :-
1692     compiler_for_mutatee('test1_11F', Compiler).
1693 % The C language components of the Fortran tests are compiled with different
1694 % options than the rest of the C files.  Regretably, this clause is very non-
1695 % intuitive..  I'm doing a hack here around the fact that the Python component
1696 % doesn't know that test1_11F_mutatee.c gets preprocessed and renamed.. This
1697 % sucks and I need to figure out a better way to do it.
1698 fortran_c_component('test1_11F').
1699 % First try at a test that uses a one-to-many mutator-mutatee mapping
1700 test('test1_11F', 'test1_11', 'test1_11F').
1701 test_description('test1_11F', 'insert snippets at entry, exit, and call points (Fortran)').
1702 test_runs_everywhere('test1_11F').
1703 test_runmode('test1_11F', 'both').
1704 test_start_state('test1_11F', 'stopped').
1705 groupable_test('test1_11F').
1706 tests_module('test1_11F', 'dyninst').
1707
1708 mutatee('test1_12F', ['test1_12F_mutatee.c'], ['test1_12F_fortran.F']).
1709 % TODO Make sure these are correct
1710 compiler_for_mutatee('test1_12F', Compiler) :-
1711     comp_lang(Compiler, 'fortran').
1712 optimization_for_mutatee('test1_12F', Compiler, 'none') :-
1713     compiler_for_mutatee('test1_12F', Compiler).
1714 % The C language components of the Fortran tests are compiled with different
1715 % options than the rest of the C files.  Regretably, this clause is very non-
1716 % intuitive..  I'm doing a hack here around the fact that the Python component
1717 % doesn't know that test1_12F_mutatee.c gets preprocessed and renamed.. This
1718 % sucks and I need to figure out a better way to do it.
1719 fortran_c_component('test1_12F').
1720 % First try at a test that uses a one-to-many mutator-mutatee mapping
1721 test('test1_12F', 'test1_12', 'test1_12F').
1722 test_description('test1_12F', 'insert/remove and malloc/free (Fortran)').
1723 test_runs_everywhere('test1_12F').
1724 test_runmode('test1_12F', 'both').
1725 test_start_state('test1_12F', 'stopped').
1726 tests_module('test1_12F', 'dyninst').
1727
1728 mutatee('test1_13F', ['test1_13F_mutatee.c'], ['test1_13F_fortran.F']).
1729 % TODO Make sure these are correct
1730 compiler_for_mutatee('test1_13F', Compiler) :-
1731     comp_lang(Compiler, 'fortran').
1732 optimization_for_mutatee('test1_13F', Compiler, 'none') :-
1733     compiler_for_mutatee('test1_13F', Compiler).
1734 % The C language components of the Fortran tests are compiled with different
1735 % options than the rest of the C files.  Regretably, this clause is very non-
1736 % intuitive..  I'm doing a hack here around the fact that the Python component
1737 % doesn't know that test1_13F_mutatee.c gets preprocessed and renamed.. This
1738 % sucks and I need to figure out a better way to do it.
1739 fortran_c_component('test1_13F').
1740 % First try at a test that uses a one-to-many mutator-mutatee mapping
1741 test('test1_13F', 'test1_13', 'test1_13F').
1742 test_description('test1_13F', 'paramExpr,retExpr,nullExpr (Fortran)').
1743 test_runs_everywhere('test1_13F').
1744 test_runmode('test1_13F', 'both').
1745 test_start_state('test1_13F', 'stopped').
1746 groupable_test('test1_13F').
1747 tests_module('test1_13F', 'dyninst').
1748
1749 mutatee('test1_14F', ['test1_14F_mutatee.c'], ['test1_14F_fortran.F']).
1750 % TODO Make sure these are correct
1751 compiler_for_mutatee('test1_14F', Compiler) :-
1752     comp_lang(Compiler, 'fortran').
1753 optimization_for_mutatee('test1_14F', Compiler, 'none') :-
1754     compiler_for_mutatee('test1_14F', Compiler).
1755 % The C language components of the Fortran tests are compiled with different
1756 % options than the rest of the C files.  Regretably, this clause is very non-
1757 % intuitive..  I'm doing a hack here around the fact that the Python component
1758 % doesn't know that test1_14F_mutatee.c gets preprocessed and renamed.. This
1759 % sucks and I need to figure out a better way to do it.
1760 fortran_c_component('test1_14F').
1761 % First try at a test that uses a one-to-many mutator-mutatee mapping
1762 test('test1_14F', 'test1_14', 'test1_14F').
1763 test_description('test1_14F', 'Replace/Remove Function Call (Fortran)').
1764 test_runs_everywhere('test1_14F').
1765 test_runmode('test1_14F', 'both').
1766 test_start_state('test1_14F', 'stopped').
1767 groupable_test('test1_14F').
1768 tests_module('test1_14F', 'dyninst').
1769
1770 mutatee('test1_15F', ['test1_15F_mutatee.c'], ['test1_15F_fortran.F']).
1771 % TODO Make sure these are correct
1772 compiler_for_mutatee('test1_15F', Compiler) :-
1773     comp_lang(Compiler, 'fortran').
1774 optimization_for_mutatee('test1_15F', Compiler, 'none') :-
1775     compiler_for_mutatee('test1_15F', Compiler).
1776 % The C language components of the Fortran tests are compiled with different
1777 % options than the rest of the C files.  Regretably, this clause is very non-
1778 % intuitive..  I'm doing a hack here around the fact that the Python component
1779 % doesn't know that test1_15F_mutatee.c gets preprocessed and renamed.. This
1780 % sucks and I need to figure out a better way to do it.
1781 fortran_c_component('test1_15F').
1782 % First try at a test that uses a one-to-many mutator-mutatee mapping
1783 test('test1_15F', 'test1_15', 'test1_15F').
1784 test_description('test1_15F', 'setMutationsActive (Fortran)').
1785 test_runs_everywhere('test1_15F').
1786 test_runmode('test1_15F', 'both').
1787 test_start_state('test1_15F', 'stopped').
1788 tests_module('test1_15F', 'dyninst').
1789
1790 mutatee('test1_16F', ['test1_16F_mutatee.c'], ['test1_16F_fortran.F']).
1791 % TODO Make sure these are correct
1792 compiler_for_mutatee('test1_16F', Compiler) :-
1793     comp_lang(Compiler, 'fortran').
1794 optimization_for_mutatee('test1_16F', Compiler, 'none') :-
1795     compiler_for_mutatee('test1_16F', Compiler).
1796 % The C language components of the Fortran tests are compiled with different
1797 % options than the rest of the C files.  Regretably, this clause is very non-
1798 % intuitive..  I'm doing a hack here around the fact that the Python component
1799 % doesn't know that test1_16F_mutatee.c gets preprocessed and renamed.. This
1800 % sucks and I need to figure out a better way to do it.
1801 fortran_c_component('test1_16F').
1802 % First try at a test that uses a one-to-many mutator-mutatee mapping
1803 test('test1_16F', 'test1_16', 'test1_16F').
1804 test_description('test1_16F', 'If else (Fortran)').
1805 test_runs_everywhere('test1_16F').
1806 test_runmode('test1_16F', 'both').
1807 test_start_state('test1_16F', 'stopped').
1808 groupable_test('test1_16F').
1809 tests_module('test1_16F', 'dyninst').
1810
1811 mutatee('test1_17F', ['test1_17F_mutatee.c'], ['test1_17F_fortran.F']).
1812 % TODO Make sure these are correct
1813 compiler_for_mutatee('test1_17F', Compiler) :-
1814     comp_lang(Compiler, 'fortran').
1815 optimization_for_mutatee('test1_17F', Compiler, 'none') :-
1816     compiler_for_mutatee('test1_17F', Compiler).
1817 % The C language components of the Fortran tests are compiled with different
1818 % options than the rest of the C files.  Regretably, this clause is very non-
1819 % intuitive..  I'm doing a hack here around the fact that the Python component
1820 % doesn't know that test1_17F_mutatee.c gets preprocessed and renamed.. This
1821 % sucks and I need to figure out a better way to do it.
1822 fortran_c_component('test1_17F').
1823 % First try at a test that uses a one-to-many mutator-mutatee mapping
1824 test('test1_17F', 'test1_17', 'test1_17F').
1825 test_description('test1_17F', 'Verifies that instrumentation inserted at exit point doesn\'t clobber return value (Fortran)').
1826 test_runs_everywhere('test1_17F').
1827 test_runmode('test1_17F', 'both').
1828 test_start_state('test1_17F', 'stopped').
1829 groupable_test('test1_17F').
1830 tests_module('test1_17F', 'dyninst').
1831
1832 mutatee('test1_18F', ['test1_18F_mutatee.c'], ['test1_18F_fortran.F']).
1833 % TODO Make sure these are correct
1834 compiler_for_mutatee('test1_18F', Compiler) :-
1835     comp_lang(Compiler, 'fortran').
1836 optimization_for_mutatee('test1_18F', Compiler, 'none') :-
1837     compiler_for_mutatee('test1_18F', Compiler).
1838 % The C language components of the Fortran tests are compiled with different
1839 % options than the rest of the C files.  Regretably, this clause is very non-
1840 % intuitive..  I'm doing a hack here around the fact that the Python component
1841 % doesn't know that test1_18F_mutatee.c gets preprocessed and renamed.. This
1842 % sucks and I need to figure out a better way to do it.
1843 fortran_c_component('test1_18F').
1844 % First try at a test that uses a one-to-many mutator-mutatee mapping
1845 test('test1_18F', 'test1_18', 'test1_18F').
1846 test_description('test1_18F', 'Read/Write a variable in the mutatee (Fortran)').
1847 test_runs_everywhere('test1_18F').
1848 test_runmode('test1_18F', 'both').
1849 test_start_state('test1_18F', 'stopped').
1850 groupable_test('test1_18F').
1851 tests_module('test1_18F', 'dyninst').
1852
1853 mutatee('test1_19F', ['test1_19F_mutatee.c'], ['test1_19F_fortran.F']).
1854 % TODO Make sure these are correct
1855 compiler_for_mutatee('test1_19F', Compiler) :-
1856     comp_lang(Compiler, 'fortran').
1857 optimization_for_mutatee('test1_19F', Compiler, 'none') :-
1858     compiler_for_mutatee('test1_19F', Compiler).
1859 % The C language components of the Fortran tests are compiled with different
1860 % options than the rest of the C files.  Regretably, this clause is very non-
1861 % intuitive..  I'm doing a hack here around the fact that the Python component
1862 % doesn't know that test1_19F_mutatee.c gets preprocessed and renamed.. This
1863 % sucks and I need to figure out a better way to do it.
1864 fortran_c_component('test1_19F').
1865 % First try at a test that uses a one-to-many mutator-mutatee mapping
1866 test('test1_19F', 'test1_19', 'test1_19F').
1867 test_description('test1_19F', 'oneTimeCode (Fortran)').
1868 test_runs_everywhere('test1_19F').
1869 test_runmode('test1_19F', 'both').
1870 test_start_state('test1_19F', 'stopped').
1871 tests_module('test1_19F', 'dyninst').
1872
1873 mutatee('test1_20F', ['test1_20F_mutatee.c'], ['test1_20F_fortran.F']).
1874 % TODO Make sure these are correct
1875 compiler_for_mutatee('test1_20F', Compiler) :-
1876     comp_lang(Compiler, 'fortran').
1877 optimization_for_mutatee('test1_20F', Compiler, 'none') :-
1878     compiler_for_mutatee('test1_20F', Compiler).
1879 % The C language components of the Fortran tests are compiled with different
1880 % options than the rest of the C files.  Regretably, this clause is very non-
1881 % intuitive..  I'm doing a hack here around the fact that the Python component
1882 % doesn't know that test1_20F_mutatee.c gets preprocessed and renamed.. This
1883 % sucks and I need to figure out a better way to do it.
1884 fortran_c_component('test1_20F').
1885 % First try at a test that uses a one-to-many mutator-mutatee mapping
1886 test('test1_20F', 'test1_20', 'test1_20F').
1887 test_description('test1_20F', 'Instrumentation at arbitrary points (Fortran)').
1888 test_runs_everywhere('test1_20F').
1889 test_runmode('test1_20F', 'both').
1890 test_start_state('test1_20F', 'stopped').
1891 groupable_test('test1_20F').
1892 tests_module('test1_20F', 'dyninst').
1893
1894 mutatee('test1_25F', ['test1_25F_mutatee.c'], ['test1_25F_fortran.F']).
1895 % TODO Make sure these are correct
1896 compiler_for_mutatee('test1_25F', Compiler) :-
1897     comp_lang(Compiler, 'fortran').
1898 optimization_for_mutatee('test1_25F', Compiler, 'none') :-
1899     compiler_for_mutatee('test1_25F', Compiler).
1900 % The C language components of the Fortran tests are compiled with different
1901 % options than the rest of the C files.  Regretably, this clause is very non-
1902 % intuitive..  I'm doing a hack here around the fact that the Python component
1903 % doesn't know that test1_25F_mutatee.c gets preprocessed and renamed.. This
1904 % sucks and I need to figure out a better way to do it.
1905 fortran_c_component('test1_25F').
1906 % First try at a test that uses a one-to-many mutator-mutatee mapping
1907 test('test1_25F', 'test1_25', 'test1_25F').
1908 test_description('test1_25F', 'Unary Operators (Fortran)').
1909 test_runs_everywhere('test1_25F').
1910 test_runmode('test1_25F', 'both').
1911 test_start_state('test1_25F', 'stopped').
1912 groupable_test('test1_25F').
1913 tests_module('test1_25F', 'dyninst').
1914
1915 mutatee('test1_29F', ['test1_29F_mutatee.c'], ['test1_29F_fortran.F']).
1916 % TODO Make sure these are correct
1917 compiler_for_mutatee('test1_29F', Compiler) :-
1918     comp_lang(Compiler, 'fortran').
1919 optimization_for_mutatee('test1_29F', Compiler, 'none') :-
1920     compiler_for_mutatee('test1_29F', Compiler).
1921 % The C language components of the Fortran tests are compiled with different
1922 % options than the rest of the C files.  Regretably, this clause is very non-
1923 % intuitive..  I'm doing a hack here around the fact that the Python component
1924 % doesn't know that test1_29F_mutatee.c gets preprocessed and renamed.. This
1925 % sucks and I need to figure out a better way to do it.
1926 fortran_c_component('test1_29F').
1927 % First try at a test that uses a one-to-many mutator-mutatee mapping
1928 test('test1_29F', 'test1_29', 'test1_29F').
1929 test_description('test1_29F', 'BPatch_srcObj class (Fortran)').
1930 test_runs_everywhere('test1_29F').
1931 test_runmode('test1_29F', 'both').
1932 test_start_state('test1_29F', 'stopped').
1933 groupable_test('test1_29F').
1934 tests_module('test1_29F', 'dyninst').
1935
1936 mutatee('test1_31F', ['test1_31F_mutatee.c'], ['test1_31F_fortran.F']).
1937 % TODO Make sure these are correct
1938 compiler_for_mutatee('test1_31F', Compiler) :-
1939     comp_lang(Compiler, 'fortran').
1940 optimization_for_mutatee('test1_31F', Compiler, 'none') :-
1941     compiler_for_mutatee('test1_31F', Compiler).
1942 % The C language components of the Fortran tests are compiled with different
1943 % options than the rest of the C files.  Regretably, this clause is very non-
1944 % intuitive..  I'm doing a hack here around the fact that the Python component
1945 % doesn't know that test1_31F_mutatee.c gets preprocessed and renamed.. This
1946 % sucks and I need to figure out a better way to do it.
1947 fortran_c_component('test1_31F').
1948 % First try at a test that uses a one-to-many mutator-mutatee mapping
1949 test('test1_31F', 'test1_31', 'test1_31F').
1950 test_description('test1_31F', 'Non-Recursive Base Tramp (Fortran)').
1951 test_runs_everywhere('test1_31F').
1952 test_runmode('test1_31F', 'both').
1953 test_start_state('test1_31F', 'stopped').
1954 groupable_test('test1_31F').
1955 tests_module('test1_31F', 'dyninst').
1956
1957 mutatee('test1_32F', ['test1_32F_mutatee.c'], ['test1_32F_fortran.F']).
1958 % TODO Make sure these are correct
1959 compiler_for_mutatee('test1_32F', Compiler) :-
1960     comp_lang(Compiler, 'fortran').
1961 optimization_for_mutatee('test1_32F', Compiler, 'none') :-
1962     compiler_for_mutatee('test1_32F', Compiler).
1963 % The C language components of the Fortran tests are compiled with different
1964 % options than the rest of the C files.  Regretably, this clause is very non-
1965 % intuitive..  I'm doing a hack here around the fact that the Python component
1966 % doesn't know that test1_32F_mutatee.c gets preprocessed and renamed.. This
1967 % sucks and I need to figure out a better way to do it.
1968 fortran_c_component('test1_32F').
1969 % First try at a test that uses a one-to-many mutator-mutatee mapping
1970 test('test1_32F', 'test1_32', 'test1_32F').
1971 test_description('test1_32F', 'Recursive Base Tramp (Fortran)').
1972 test_runs_everywhere('test1_32F').
1973 test_runmode('test1_32F', 'both').
1974 test_start_state('test1_32F', 'stopped').
1975 groupable_test('test1_32F').
1976 tests_module('test1_32F', 'dyninst').
1977
1978 mutatee('test1_34F', ['test1_34F_mutatee.c'], ['test1_34F_fortran.F']).
1979 % TODO Make sure these are correct
1980 compiler_for_mutatee('test1_34F', Compiler) :-
1981     comp_lang(Compiler, 'fortran').
1982 optimization_for_mutatee('test1_34F', Compiler, 'none') :-
1983     compiler_for_mutatee('test1_34F', Compiler).
1984 % The C language components of the Fortran tests are compiled with different
1985 % options than the rest of the C files.  Regretably, this clause is very non-
1986 % intuitive..  I'm doing a hack here around the fact that the Python component
1987 % doesn't know that test1_34F_mutatee.c gets preprocessed and renamed.. This
1988 % sucks and I need to figure out a better way to do it.
1989 fortran_c_component('test1_34F').
1990 % First try at a test that uses a one-to-many mutator-mutatee mapping
1991 test('test1_34F', 'test1_34', 'test1_34F').
1992 test_description('test1_34F', 'Loop Information (Fortran)').
1993 test_runs_everywhere('test1_34F').
1994 test_runmode('test1_34F', 'both').
1995 test_start_state('test1_34F', 'stopped').
1996 groupable_test('test1_34F').
1997 tests_module('test1_34F', 'dyninst').
1998
1999 mutatee('test1_36F', ['test1_36F_mutatee.c'], ['test1_36F_fortran.F']).
2000 % TODO Make sure these are correct
2001 compiler_for_mutatee('test1_36F', Compiler) :-
2002     comp_lang(Compiler, 'fortran').
2003 optimization_for_mutatee('test1_36F', Compiler, 'none') :-
2004     compiler_for_mutatee('test1_36F', Compiler).
2005 % The C language components of the Fortran tests are compiled with different
2006 % options than the rest of the C files.  Regretably, this clause is very non-
2007 % intuitive..  I'm doing a hack here around the fact that the Python component
2008 % doesn't know that test1_36F_mutatee.c gets preprocessed and renamed.. This
2009 % sucks and I need to figure out a better way to do it.
2010 fortran_c_component('test1_36F').
2011 % First try at a test that uses a one-to-many mutator-mutatee mapping
2012 test('test1_36F', 'test1_36', 'test1_36F').
2013 test_description('test1_36F', 'Callsite Parameter Referencing (Fortran)').
2014 test_runs_everywhere('test1_36F').
2015 test_runmode('test1_36F', 'both').
2016 test_start_state('test1_36F', 'stopped').
2017 groupable_test('test1_36F').
2018 tests_module('test1_36F', 'dyninst').
2019
2020 % test_sparc_1, formerly test10_1
2021 test('test_sparc_1', 'test_sparc_1', 'test_sparc_1').
2022 mutator('test_sparc_1', ['test_sparc_1.C']).
2023 mutatee('test_sparc_1', ['test_sparc_1_mutatee.c']).
2024 compiler_for_mutatee('test_sparc_1', 'gcc').
2025 optimization_for_mutatee('test_sparc_1', 'gcc', 'none').
2026 test_platform('test_sparc_1', Platform) :-
2027         platform('sparc', _, _, Platform).
2028 test_runmode('test_sparc_1', 'both').
2029 test_start_state('test_sparc_1', 'stopped').
2030 groupable_test('test_sparc_1').
2031 tests_module('test_sparc_1', 'dyninst').
2032
2033 % test_sparc_2, formerly test10_2
2034 test('test_sparc_2', 'test_sparc_2', 'test_sparc_2').
2035 mutator('test_sparc_2', ['test_sparc_2.C']).
2036 mutatee('test_sparc_2', ['test_sparc_2_mutatee.c']).
2037 compiler_for_mutatee('test_sparc_2', 'gcc').
2038 optimization_for_mutatee('test_sparc_2', 'gcc', 'none').
2039 test_platform('test_sparc_2', Platform) :-
2040         platform('sparc', _, _, Platform).
2041 test_runmode('test_sparc_2', 'both').
2042 test_start_state('test_sparc_2', 'stopped').
2043 groupable_test('test_sparc_2').
2044 tests_module('test_sparc_2', 'dyninst').
2045
2046 % test_sparc_3, formerly test10_3
2047 test('test_sparc_3', 'test_sparc_3', 'test_sparc_3').
2048 mutator('test_sparc_3', ['test_sparc_3.C']).
2049 mutatee('test_sparc_3', ['test_sparc_3_mutatee.c']).
2050 compiler_for_mutatee('test_sparc_3', 'gcc').
2051 optimization_for_mutatee('test_sparc_3', 'gcc', 'none').
2052 test_platform('test_sparc_3', Platform) :-
2053         platform('sparc', _, _, Platform).
2054 test_runmode('test_sparc_3', 'both').
2055 test_start_state('test_sparc_3', 'stopped').
2056 groupable_test('test_sparc_3').
2057 tests_module('test_sparc_3', 'dyninst').
2058
2059 % test_sparc_4, formerly test10_4
2060 test('test_sparc_4', 'test_sparc_4', 'test_sparc_4').
2061 mutator('test_sparc_4', ['test_sparc_4.C']).
2062 mutatee('test_sparc_4', ['test_sparc_4_mutatee.c']).
2063 compiler_for_mutatee('test_sparc_4', 'gcc').
2064 optimization_for_mutatee('test_sparc_4', 'gcc', 'none').
2065 test_platform('test_sparc_4', Platform) :-
2066         platform('sparc', _, _, Platform).
2067 test_runmode('test_sparc_4', 'both').
2068 test_start_state('test_sparc_4', 'stopped').
2069 groupable_test('test_sparc_4').
2070 tests_module('test_sparc_4', 'dyninst').
2071
2072
2073 % test_start_state/2
2074 % test_start_state(?Test, ?State) specifies that Test should be run with its
2075 % mutatee in state State, with State in {stopped, running, selfstart}
2076
2077 % compiler_for_mutatee/2
2078 % compiler_for_mutatee(?Testname, ?Compiler)
2079 % Specifies that the mutatee for the test Testname can be compiled with the
2080 % compiler Compiler.
2081 % If nothing else is specified, a test's mutatee can be compiled with any C
2082 % compiler
2083 % Actually, I don't know how to specify this..
2084 % compiler_for_mutatee(Testname, Compiler) :- ...
2085     
2086
2087 % Specify libtestSuite
2088 library('testSuite', ['test_lib.C',
2089                       'test_lib_soExecution.C',
2090                       'test_lib_mutateeStart.C',
2091                       'test_lib_test7.C',
2092                       'test_lib_test9.C',
2093                       'Process_data.C',
2094                       'ParameterDict.C',
2095                       'Callbacks.C',
2096                       'TestData.C',
2097                       'TestMutator.C']).
2098 % All mutators require libtestSuite
2099 % mutator_library(Mutator, 'testSuite') :- mutator(Mutator, _).
2100
2101 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2102 % PLATFORM SPECIFICATIONS
2103 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2104
2105 % platform/4
2106 % platform(?Arch, ?OS_general, ?OS_specific, ?Platform)
2107 platform('i386', 'linux', 'linux2.4', 'i386-unknown-linux2.4').
2108 platform('i386', 'linux', 'linux2.6', 'i386-unknown-linux2.6').
2109 platform('sparc', 'solaris', 'solaris2.8', 'sparc-sun-solaris2.8').
2110 platform('sparc', 'solaris', 'solaris2.9', 'sparc-sun-solaris2.9').
2111 platform('i386', 'windows', 'nt4.0', 'i386-unknown-nt4.0').
2112 platform('i386', 'windows', 'winXP', 'i386-unknown-winXP').
2113 platform('power', 'aix', 'aix5.1', 'rs6000-ibm-aix5.1').
2114 platform('power', 'aix', 'aix5.2', 'rs6000-ibm-aix64-5.2').
2115 platform('alpha', 'osf', 'osf5.1', 'alpha-dec-osf5.1').
2116 platform('ia64', 'linux', 'linux2.4', 'ia64-unknown-linux2.4').
2117 platform('x86_64', 'linux', 'linux2.4', 'x86_64-unknown-linux2.4').
2118 platform('power', 'linux', 'linux2.6', 'ppc64_linux').
2119 platform('power', 'linux', 'linux2.6', 'ppc32_linux').
2120
2121 % Platform Defns
2122 % platform/1
2123 % Convenience thing.  Mostly used for verifying that a particular platform
2124 % exists.
2125 platform(P) :- platform(_, _, _, P).
2126
2127 % Mutatee ABI specifications
2128 % We're going to try out the new implementation idea here
2129 % NOTE: The parameter_values / whitelise / blacklist system has not been
2130 % implemented yet.
2131 parameter('mutatee_abi').
2132 parameter_values('mutatee_abi', Values) :-
2133     findall(V, mutatee_abi(V), Values_t),
2134     sort(Values_t, Values).
2135 mutatee_abi(32).
2136 mutatee_abi(64).
2137
2138 % Platform ABI support
2139 % Testing out how this looks with whitelist clauses
2140 % NOTE: The parameter_values / whitelise / blacklist system has not been
2141 % implemented yet.
2142 whitelist([['platform', Platform], ['mutatee_abi', ABI]]) :-
2143     platform_abi(Platform, ABI).
2144
2145 % platform_abi/2
2146 % All platforms support 32-bit mutatees except ia64
2147 % FIXME Does ppc64 support 32-bit mutatees?
2148 platform_abi(Platform, 32) :-
2149     platform(Arch, _, _, Platform),
2150     Arch \= 'ia64'.
2151
2152 % A smaller list of platforms with for 64-bit mutatees
2153 platform_abi('ia64-unknown-linux2.4', 64).
2154 platform_abi('x86_64-unknown-linux2.4', 64).
2155 platform_abi('ppc64_linux', 64).
2156 platform_abi('rs6000-ibm-aix64-5.2', 64).
2157
2158 % restricted_abi_for_arch(Test, Arch, ABI)
2159 % Limits the test Test to only running with mutatees compiled to ABI on the
2160 % architecture Arch
2161
2162 % restricted_amd64_abi(Test)
2163 % Define restricted_amd64_abi as a convenience clause for
2164 % restricted_abi_for_arch
2165 restricted_abi_for_arch(Test, 'x86_64', 64) :-
2166         restricted_amd64_abi(Test).
2167
2168 % object_suffix/2
2169 % Specifies the convention used for object files on a platform
2170 object_suffix(Platform, Suffix) :-
2171     platform(_, OS, _, Platform),
2172     (
2173         OS = 'windows' -> Suffix = '.obj';
2174         Suffix = '.o'
2175     ).
2176
2177 % executable_suffix/2
2178 % Specifies the convention used for executable files on a platform
2179 executable_suffix(Platform, Suffix) :-
2180     platform(_, OS, _, Platform),
2181     (
2182         OS = 'windows' -> Suffix = '.exe';
2183         Suffix = ''
2184     ).
2185
2186 % library_prefix/2
2187 % Specifies the convention used for shared library prefixes on a platform
2188 library_prefix(Platform, Prefix) :-
2189     platform(_, OS, _, Platform),
2190     (
2191         OS = 'windows' -> Prefix = '';
2192         Prefix = 'lib'
2193     ).
2194
2195 % library_suffix/2
2196 % Specifies the convention used for shared library suffixes on a platform
2197 library_suffix(Platform, Suffix) :-
2198     platform(_, OS, _, Platform),
2199     (
2200         OS = 'windows' -> Suffix = '.dll';
2201         Suffix = '.so'
2202     ).
2203
2204 % Platform Compilers Constraints
2205 % gcc and g++ run on everything but Windows
2206 compiler_platform('gcc', Plat) :- platform(_, OS, _, Plat), OS \= 'windows'.
2207 compiler_platform('g++', Plat) :- platform(_, OS, _, Plat), OS \= 'windows'.
2208 % g77 only runs on i386 Linux
2209 compiler_platform('g77', 'i386-unknown-linux2.4').
2210 compiler_platform('g77', 'i386-unknown-linux2.6').
2211 % Visual C/C++ only runs on Windows
2212 compiler_platform('VC', Plat) :- platform(_, OS, _, Plat), OS == 'windows'.
2213 compiler_platform('VC++', Plat) :- platform(_, OS, _, Plat), OS == 'windows'.
2214 % Portland Group compiler only runs on i386 Linux
2215 compiler_platform('pgcc', Plat) :-
2216     platform(Arch, OS, _, Plat), Arch == 'i386', OS == 'linux'.
2217 compiler_platform('pgCC', Plat) :-
2218     platform(Arch, OS, _, Plat), Arch == 'i386', OS == 'linux'.
2219 % Alpha's native compilers are cc & cxx
2220 compiler_platform('cc', 'alpha-dec-osf5.1').
2221 compiler_platform('cxx', 'alpha-dec-osf5.1').
2222 % AIX's native compilers are xlc & xlC
2223 compiler_platform('xlc', 'rs6000-ibm-aix5.1').
2224 compiler_platform('xlC', 'rs6000-ibm-aix5.1').
2225 % Solaris's native compilers are cc & CC
2226 compiler_platform('sun_cc', Plat) :- platform(_, OS, _, Plat), OS = 'solaris'.
2227 compiler_platform('CC', Plat) :- platform(_, OS, _, Plat), OS = 'solaris'.
2228
2229 % linker/2
2230 % linker(?Platform, ?Linker)
2231 % specifies the default linker to use for a given (platform, language) pair
2232 linker(Platform, Linker) :-
2233     platform(_, OS, _, Platform),
2234     (
2235         OS = 'windows' -> Linker = 'link';
2236         Linker = ''
2237     ).
2238
2239 % aux_compiler_for_platform/3
2240 % aux_compiler_for_platform(?Platform, ?Language, ?Compiler)
2241 % Specifies the default compiler to use for a given (platform, language) pair
2242 % for compiling files where we're not trying to test the output of the compiler
2243 aux_compiler_for_platform(Platform, 'c', 'gcc') :-
2244     platform(_, 'linux', _, Platform).
2245 aux_compiler_for_platform(Platform, 'fortran', 'g77') :-
2246     platform('i386', 'linux', _, Platform).
2247 aux_compiler_for_platform(Platform, 'nasm_asm', 'nasm') :-
2248     platform('i386', 'linux', _, Platform).
2249 aux_compiler_for_platform(Platform, 'masm_asm', 'masm') :-
2250     platform('i386', 'windows', _, Platform).
2251 aux_compiler_for_platform(Platform, 'att_asm', 'gcc') :-
2252     platform(_, OS, _, Platform),
2253     % AIX is excluded because both att_asm and power_asm use the '.s' extension
2254     % and we can't have multiple compilers use the same extension on a platform
2255     \+ member(OS, ['windows', 'aix']).
2256 aux_compiler_for_platform(Platform, 'power_asm', 'ibm_as') :-
2257         platform('power', 'aix', _, Platform).
2258
2259 % mcomp_plat/2
2260 % mcomp_plat(?Compiler, ?Platform)
2261 % Specifies that Compiler is used to compile mutators on Platform.  Eventually
2262 % we'll probably support more than one mutator compiler per platform.
2263 % Mutators are compiled with g++ on Unix
2264 mcomp_plat('g++',Plat) :- platform(_, OS, _, Plat), OS \= 'windows'.
2265 % Mutators are compiled with Visual C++ on Windows
2266 mcomp_plat('VC++', Plat) :- platform(_, 'windows', _, Plat).
2267
2268 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2269 % LANGUAGE SPECIFICATIONS
2270 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2271
2272 % Language Defns
2273 lang('fortran').
2274 lang('c').
2275 lang('c++').
2276 lang('att_asm').
2277 lang('masm_asm').
2278 lang('nasm_asm').
2279 lang('power_asm').
2280
2281 % Language-file extension mappings
2282 lang_ext('fortran', '.F').
2283 lang_ext('c', '.c').
2284 lang_ext('c++', '.C').
2285 lang_ext('att_asm', '.s').
2286 lang_ext('att_asm', '.S').
2287 lang_ext('power_asm', '.s'). % On POWER/AIX
2288 lang_ext('masm_asm', '.asm').
2289 lang_ext('nasm_asm', '.asm').
2290
2291 % lang_ext sanity checking
2292 % No platform should have compilers defined for multiple languages that share
2293 % the same extension.  e.g. POWER/AIX must not have compilers defined for both
2294 % att_asm and power_asm because they both use the '.s' extension for source
2295 % files
2296 insane('Too many compilers on platform P1 for extension P2',
2297        [Platform, Extension]) :-
2298     current_platform(Platform),
2299     compiler_platform(Compiler1, Platform),
2300     compiler_platform(Compiler2, Platform),
2301     lang_ext(Language1, Extension),
2302     lang_ext(Language2, Extension),
2303     Language1 \= Language2,
2304     comp_lang(Compiler1, Language1),
2305     comp_lang(Compiler2, Language2).
2306
2307
2308 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2309 % COMPILER SPECIFICATIONS
2310 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2311
2312 % Compiler/language constraints
2313 comp_lang('g77', 'fortran').
2314 comp_lang(Compiler, 'c') :-
2315     member(Compiler, ['gcc', 'pgcc', 'VC', 'cc', 'sun_cc', 'xlc']);
2316     member(Compiler, ['g++', 'pgCC', 'VC++', 'cxx', 'CC', 'xlC']).
2317 comp_lang(Compiler, 'c++') :-
2318     member(Compiler, ['g++', 'pgCC', 'VC++', 'cxx', 'CC', 'xlC']).
2319 comp_lang('gcc', 'att_asm') :-
2320     % We don't use gcc for assembly files on AIX
2321     current_platform(Platform),
2322     \+ platform(_, 'aix', _, Platform).
2323
2324 % Mutatee Compiler Defns
2325 % mutatee_comp(compiler name)
2326 mutatee_comp('gcc').
2327 mutatee_comp('g77').
2328 mutatee_comp('g++').
2329 mutatee_comp('pgcc').
2330 mutatee_comp('pgCC').
2331 mutatee_comp('VC').
2332 mutatee_comp('VC++').
2333 mutatee_comp('sun_cc').
2334 mutatee_comp('cc').
2335 mutatee_comp('cxx').
2336 mutatee_comp('CC').
2337 mutatee_comp('xlc').
2338 mutatee_comp('xlC').
2339
2340 % compiler_presence_def/2
2341 % compiler_presence_def(Compiler, EnvironmentVariable)
2342 % Before trying to build anything using Compiler, we need to check whether
2343 % EnvironmentVariable is set.  If it is not set, then we don't have access
2344 % to Compiler.
2345 % FIXME There's got to be a better way to do this.
2346 compiler_presence_def('pgcc', 'PGI').
2347 compiler_presence_def('pgCC', 'PGI').
2348
2349 % Translations between compiler names and compiler #defines
2350 compiler_define_string('gcc', 'gnu_cc').
2351 compiler_define_string('g++', 'gnu_cxx').
2352 compiler_define_string('pgcc', 'native_cc').
2353 compiler_define_string('VC', 'native_cc').
2354 compiler_define_string('cc', 'native_cc').
2355 compiler_define_string('sun_cc', 'native_cc').
2356 compiler_define_string('xlc', 'native_cc').
2357 compiler_define_string('pgCC', 'native_cxx').
2358 compiler_define_string('VC++', 'native_cxx').
2359 compiler_define_string('cxx', 'native_cxx').
2360 compiler_define_string('CC', 'native_cxx').
2361 compiler_define_string('xlC', 'native_cxx').
2362 compiler_define_string('g77', 'gnu_fc').
2363
2364 %%%%%%%%%%
2365 % *_s relations translate various internal atoms into strings than are
2366 % appropriate for writing out to makefiles, etc.
2367 %%%%%%%%%%
2368
2369 % compiler_s/2 translates from the name of a compiler to the executable name
2370 % HACK I think we're already using the executable names as our atoms
2371 compiler_s(Comp, Comp) :-
2372     % The next line contains a list of compilers whose executable names are
2373     % different from the name of the compiler that is used in this
2374     % specification system.
2375     \+ member(Comp, ['sun_cc', 'ibm_as', 'masm', 'VC', 'VC++']),
2376     findall(C, mutatee_comp(C), Me_comp),
2377     findall(C, mutator_comp(C), Mr_comp),
2378     findall(C, (member(C, Me_comp); member(C, Mr_comp)), All_comp),
2379     sort(All_comp, Comps),
2380     member(Comp, Comps).
2381 compiler_s('sun_cc', 'cc').
2382 compiler_s('VC', 'cl').
2383 compiler_s('VC++', 'cl').
2384
2385 % Translation for Optimization Level
2386 %compiler_opt_trans(compiler name, symbolic name, compiler argument).
2387 % FIXME(?) I think the Windows optimization strings should be with cap-O, not
2388 % zero
2389 % FIXME I'm also not sure that all these compilers default to no optimization
2390 compiler_opt_trans(_, 'none', '').
2391 compiler_opt_trans(Comp, 'low', '-O1') :-
2392     member(Comp, ['gcc', 'g++', 'pgcc', 'pgCC', 'cc', 'cxx', 'g77']).
2393 compiler_opt_trans(Comp, 'low', '/O1') :- Comp == 'VC++'; Comp == 'VC'.
2394 compiler_opt_trans(SunWorkshop, 'low', '-O') :-
2395     member(SunWorkshop, ['sun_cc', 'CC']).
2396 compiler_opt_trans(IBM, 'low', '-O') :-
2397     member(IBM, ['xlc', 'xlC']).
2398 compiler_opt_trans(Comp, 'high', '-O2') :-
2399     member(Comp, ['gcc', 'g++', 'pgcc', 'pgCC', 'cc', 'cxx', 'g77']).
2400 compiler_opt_trans(Comp, 'high', '/O2') :- Comp == 'VC++'; Comp == 'VC'.
2401 compiler_opt_trans(SunWorkshop, 'high', '-xO3') :-
2402     member(SunWorkshop, ['sun_cc', 'CC']).
2403 compiler_opt_trans(IBM, 'high', '-O3') :-
2404     member(IBM, ['xlc', 'xlC']).
2405 compiler_opt_trans(Comp, 'max', '-O3') :-
2406     member(Comp, ['gcc', 'g++', 'cc', 'cxx']).
2407 compiler_opt_trans(SunWorkshop, 'max', '-xO5') :-
2408     member(SunWorkshop, ['sun_cc', 'CC']).
2409 compiler_opt_trans(IBM, 'max', '-O5') :-
2410     member(IBM, ['xlc', 'xlC']).
2411 compiler_opt_trans(Comp, 'max', '/Ox') :- Comp == 'VC++'; Comp == 'VC'.
2412
2413 % Ensure that we're only defining translations for compilers that exist
2414 insane('P1 not defined as a compiler, but has optimization translation defined',
2415        [Compiler]) :-
2416     compiler_opt_trans(Compiler, _, _),
2417     \+ compiler_platform(Compiler, _).
2418
2419
2420 % Translation for parameter flags
2421 % partial_compile: compile to an object file rather than an executable
2422 compiler_parm_trans(Comp, 'partial_compile', '-c') :-
2423     member(Comp, ['gcc', 'g++', 'pgcc', 'pgCC', 'cc', 'sun_cc', 'CC',
2424                   'xlc', 'xlC', 'cxx', 'g77', 'VC', 'VC++']).
2425
2426 % Mutator compiler defns
2427 mutator_comp('g++').
2428 mutator_comp('pgCC').
2429 mutator_comp('VC++').
2430 mutator_comp('cxx').
2431 mutator_comp('CC').
2432 mutator_comp('xlC').
2433
2434 % Per-compiler link options for building mutatees
2435 mutatee_link_options('gcc', '$(MUTATEE_LDFLAGS_GNU)').
2436 mutatee_link_options('g++', '$(MUTATEE_LDFLAGS_GNU)').
2437 mutatee_link_options(Native_cc, '$(MUTATEE_CFLAGS_NATIVE) $(MUTATEE_LDFLAGS_NATIVE)') :-
2438     member(Native_cc, ['cc', 'sun_cc', 'xlc', 'pgcc']).
2439 mutatee_link_options(Native_cxx, '$(MUTATEE_CXXFLAGS_NATIVE) $(MUTATEE_LDFLAGS_NATIVE)') :-
2440     member(Native_cxx, ['cxx', 'CC', 'xlC', 'pgCC']).
2441 mutatee_link_options('VC', '$(LDFLAGS) $(MUTATEE_CFLAGS_NATIVE) $(MUTATEE_LDFLAGS_NATIVE)').
2442 mutatee_link_options('VC++', '$(LDFLAGS) $(MUTATEE_CXXFLAGS_NATIVE) $(MUTATEE_LDFLAGS_NATIVE)').
2443
2444 % Specify the standard flags for each compiler
2445 comp_std_flags_str('gcc', '$(CFLAGS)').
2446 comp_std_flags_str('g++', '$(CXXFLAGS)').
2447 comp_std_flags_str('cc', '$(CFLAGS_NATIVE)').
2448 comp_std_flags_str('sun_cc', '$(CFLAGS_NATIVE)').
2449 comp_std_flags_str('xlc', '$(CFLAGS_NATIVE)').
2450 comp_std_flags_str('pgcc', '$(CFLAGS_NATIVE)').
2451 comp_std_flags_str('CC', '$(CXXFLAGS_NATIVE)').
2452 % FIXME Make sure that these flags for cxx are correct, or tear out cxx (Alpha)
2453 comp_std_flags_str('cxx', '$(CXXFLAGS_NATIVE)').
2454 comp_std_flags_str('xlC', '$(CXXFLAGS_NATIVE)').
2455 comp_std_flags_str('pgCC', '$(CXXFLAGS_NATIVE)').
2456 % FIXME Tear out the '-DSOLO_MUTATEE' from these and make it its own thing
2457 comp_mutatee_flags_str('gcc', '-DSOLO_MUTATEE $(MUTATEE_CFLAGS_GNU) -I../src').
2458 comp_mutatee_flags_str('g++', '-DSOLO_MUTATEE $(MUTATEE_CXXFLAGS_GNU) -I../src').
2459 comp_mutatee_flags_str('cc', '$(MUTATEE_CFLAGS_NATIVE) -I../src').
2460 comp_mutatee_flags_str('sun_cc', '$(MUTATEE_CFLAGS_NATIVE) -I../src').
2461 comp_mutatee_flags_str('xlc', '$(MUTATEE_CFLAGS_NATIVE) -I../src').
2462 comp_mutatee_flags_str('pgcc', '-DSOLO_MUTATEE $(MUTATEE_CFLAGS_NATIVE) -I../src').
2463 comp_mutatee_flags_str('CC', '$(MUTATEE_CXXFLAGS_NATIVE) -I../src').
2464 % FIXME Make sure that these flags for cxx are correct, or tear out cxx (Alpha)
2465 comp_mutatee_flags_str('cxx', '$(MUTATEE_CXXFLAGS_NATIVE) -I../src').
2466 comp_mutatee_flags_str('xlC', '$(MUTATEE_CXXFLAGS_NATIVE) -I../src').
2467 comp_mutatee_flags_str('pgCC', '-DSOLO_MUTATEE $(MUTATEE_CXXFLAGS_NATIVE) -I../src').
2468 % FIXME What do I specify for the Windows compilers, if anything?
2469 comp_std_flags_str('VC', '-TC').
2470 comp_std_flags_str('VC++', '-TP').
2471 comp_mutatee_flags_str('VC', '$(CFLAGS)').
2472 comp_mutatee_flags_str('VC++', '$(CXXFLAGS_NORM)').
2473
2474 % g77 flags
2475 comp_std_flags_str('g77', '-g').
2476 comp_mutatee_flags_str('g77', '$(MUTATEE_G77_FFLAGS)').
2477 mutatee_link_options('g77', '$(MUTATEE_G77_LDFLAGS)').
2478
2479 % NASM (for test_mem (formerly test6))
2480 comp_lang('nasm', 'nasm_asm').
2481 compiler_define_string('nasm', 'nasm').
2482 compiler_platform('nasm', Platform) :-
2483     platform('i386', 'linux', _, Platform). % NASM runs on x86 Linux
2484 comp_std_flags_str('nasm', '-f elf -dPLATFORM=$(PLATFORM)').
2485 comp_mutatee_flags_str('nasm', '').
2486 mutatee_link_options('nasm', '').
2487 mutatee_comp('nasm'). % I think I want to reorganize so this isn't required
2488                       % for compilers that are only used for auxilliary files
2489 compiler_parm_trans('nasm', 'partial_compile', '').
2490
2491 % ml (masm) for test_mem (WINDOWS)
2492 comp_lang('masm', 'masm_asm').
2493 compiler_s('masm', 'ml').
2494 compiler_define_string('masm', 'masm').
2495 compiler_platform('masm', Platform) :-
2496   platform('i386', 'windows', _, Platform).
2497 comp_std_flags_str('masm', '-nologo').
2498 comp_mutatee_flags_str('masm', '').
2499 mutatee_link_options('masm', '').
2500 mutatee_comp('masm').
2501 compiler_parm_trans('masm', 'partial_compile', '-c').
2502
2503 % as for test_mem
2504 comp_lang('ibm_as', 'power_asm').
2505 compiler_s('ibm_as', 'as').
2506 compiler_define_string('ibm_as', 'ibm_as').
2507 compiler_platform('ibm_as', Platform) :-
2508     platform('power', 'aix', _, Platform).
2509 comp_std_flags_str('ibm_as', '').
2510 comp_mutatee_flags_str('ibm_as', '').
2511 mutatee_link_options('ibm_as', '').
2512 mutatee_comp('ibm_as').
2513 compiler_parm_trans('ibm_as', 'partial_compile', '').
2514
2515 % Compiler Optimization Level Defns
2516 optimization_level('none').
2517 optimization_level('low').
2518 optimization_level('high').
2519 optimization_level('max').
2520
2521 % ABI defns for compilers
2522 % compiler_platform_abi_s_default(FlagString)
2523 % The flags string for a platform's default ABI (Do we want this?)
2524 compiler_platform_abi_s_default('').
2525 % compiler_platform_abi_s(Compiler, Platform, ABI, FlagString)
2526 compiler_platform_abi_s(Compiler, Platform, ABI, '') :-
2527     mutatee_comp(Compiler),
2528     Compiler \= '',
2529     platform(Platform),
2530     compiler_platform(Compiler, Platform),
2531     mutatee_abi(ABI),
2532     platform_abi(Platform, ABI),
2533     \+ (member(Compiler, ['gcc', 'g++']), Platform = 'x86_64-unknown-linux2.4',
2534         ABI = 32).
2535 compiler_platform_abi_s(Compiler, 'x86_64-unknown-linux2.4', 32,
2536                         '-m32 -Di386_unknown_linux2_4 -Dm32_test') :-
2537     member(Compiler, ['gcc', 'g++']).
2538
2539
2540 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2541 % TEST SPECIFICATION GLUE
2542 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2543
2544 % Test / Platform constraints
2545
2546 % test_platform/2
2547 test_platform(Testname, Platform) :-
2548     test_runs_everywhere(Testname),
2549     platform(Platform).
2550
2551 % test_runs_everywhere/1
2552 % Specifies the tests that run on all platforms.
2553 % 'none' is a special atom that no test should match that stops the compiler
2554 % from complaining that test_runs_everywhere isn't defined.
2555 test_runs_everywhere(none).
2556
2557 % Test definitions
2558
2559 % test/3
2560 % test(?Name, ?Mutator, ?Mutatee)
2561 % Specifies that the test Name maps the mutator Mutator to the mutatee Mutatee.
2562 % This (hopefully) allows many-to-many mappings to exist, and lets us assign
2563 % a unique name to each mapping.
2564
2565 % Mutator Defns
2566 % mutator/2
2567 % mutator(+name, ?source list)
2568
2569 % Mutators can also require libraries to be linked with.
2570 % All mutators need to be linked with dyninstAPI and iberty
2571 % All mutators also need to be linked with testSuite, for the TestMutator
2572 % superclass if nothing else.
2573 all_mutators_require_libs(['iberty', 'testSuite']).
2574
2575 module_required_libs('dyninst', ['dyninstAPI']).
2576 module_required_libs('symtab', ['symtabAPI']).
2577 module_required_libs('stackwalker', ['stackwalkerAPI']).
2578 module_required_libs('instructionapi', ['instructionAPI']).
2579
2580 module_requires_libs_internal([], Output, Output).
2581 module_requires_libs_internal([Module | Tail], Acc, Output) :-
2582         module_required_libs(Module, Libs),
2583         append(Libs, Acc, NewAcc),
2584         module_requires_libs_internal(Tail, NewAcc, Output).
2585 module_requires_libs_internal(Module, Acc, Output) :-
2586         module_required_libs(Module, Libs),
2587         append(Libs, Acc, Output).
2588
2589 module_requires_libs(Modules, Output) :-
2590         module_requires_libs_internal(Modules, [], Libs),
2591         removedups(Libs, Output).
2592
2593 %module_requires_libs([Module | Rest], Output) :-
2594 %       module_required_libs(Module, Libs),
2595 %       \+ module_requires_libs(Rest, [Libs | Output]).
2596  
2597 % Those with no specific requirements don't require specific libraries
2598 mutator_requires_libs(Mutator, []) :-
2599     mutator(Mutator, _),
2600         test(Name, Mutator, _),
2601     \+ mutator_requires_libs(Mutator, [_|_]).
2602
2603 % Mutatee Defns
2604 % mutatee/2
2605 % mutatee(?name, ?source_list)
2606
2607 % mutatee/3
2608 % mutatee(?name, ?preprocessed_source, ?raw_source)
2609 % Specifies a mutatee that uses some auxilliary source files.  The files in
2610 % the preprocessed_source list have the the boilerplate transformation applied
2611 % to them, while the files in the raw_source list are compiled as-is
2612
2613 % Mutatees specified with mutatee/2 have no raw source files.
2614 mutatee(Name, PPSource, []) :- mutatee(Name, PPSource).
2615
2616 % forall_mutatees/1 defines a list of source files requires by all mutatees
2617 % FIXME mutatee_util is hardcoded into the makefile generator.  I need to
2618 % change that.
2619 % FIXME Once I implement group mutatees, this will need to be fixed
2620 forall_mutatees(['mutatee_util.c']).
2621
2622 % I don't think there are any libraries that all mutatees need to be linked to
2623 all_mutatees_require_libs([]).
2624 % mutatee_requires_libs/2
2625 % Allows the user to specify which libraries a mutatee needs to be linked with
2626 % Any mutatees with no specified required libraries don't require any.
2627 mutatee_requires_libs(Mutatee, []) :-
2628     mutatee(Mutatee, _, _),
2629     \+ mutatee_requires_libs(Mutatee, [_|_]).
2630 % The multithreaded mutatees are linked with pthreads
2631 %mutatee_requires_libs('test12.mutatee', ['dl', 'pthread']).
2632 %mutatee_requires_libs('test13.mutatee', ['pthread']).
2633 %mutatee_requires_libs('test14.mutatee', ['pthread']).
2634 %mutatee_requires_libs('test15.mutatee', ['pthread']).
2635 % Test 9's mutatee is linked with something, depending on the platform it is
2636 % run on.
2637 % FIXME is libInstMe required on other platforms?
2638 %mutatee_requires_libs('test9.mutatee', L) :-
2639 %    current_platform(P),
2640 %    (
2641 %        P = 'i386-unknown-linux2.4' -> L = ['InstMe'];
2642 %        L = []
2643 %    ).
2644
2645 % Mutatee, Compliers Constraints
2646 % Using compiler_for_mutatee(?Mutatee, ?Compiler) now
2647
2648 % optimization_for_mutatee/3
2649 % optimization_for_mutatee(?Mutatee, ?Compiler, ?OptimizationLevel)
2650 % Unifies a mutatee name with a valid compiler and optimization level for
2651 % building an object file for the mutatee
2652 % TODO Create some kind of default optimization_for_mutatee rule
2653
2654 % runmode/1
2655 % runmode(+RunMode)
2656 % Specifies the valid values for a test's run mode
2657 runmode('createProcess').
2658 runmode('useAttach').
2659
2660 % test_runmode/2
2661 % test_runmode(?Test, ?Runmode)
2662 % The atom 'both' as Runmode means the test can be run in either useAttach
2663 % or createProcess mode.
2664 test_runmode(Test, 'useAttach') :- test_runmode(Test, 'both').
2665 test_runmode(Test, 'createProcess') :- test_runmode(Test, 'both').
2666
2667 % mutatee_peers/2
2668 mutatee_peers(M, P) :-
2669     findall(N, mutatee_peer(M, N), Ps), sort(Ps, P).
2670
2671 %%%%%
2672 % Playing around with how to specify that some tests only run in 64-bit mode
2673 % on x86_64.
2674 %%%%%
2675 % blacklist([['test', 'test5_1'], ['platform', 'x86_64-unknown-linux2.4'],
2676 %            ['mutatee_abi', '32']]).
2677 %
2678 % I like this one the best:
2679 % blacklist([['test', Test], ['platform', 'x86_64-unknown-linux2.4'],
2680 %            ['mutatee_abi', '32']]) :-
2681 %     restricted_amd64_abi(Test).
2682 %
2683 % test_platform_abi(Test, Platform, ABI) :-
2684 %     test_platform(Test, Platform),
2685 %     platform_abi(Platform, ABI),
2686 %     \+ (Platform = 'x86_64-unknown-linux2.4', ABI = 32)
2687 %
2688 test_platform_abi(Test, Platform, ABI) :-
2689     test_platform(Test, Platform), platform_abi(Platform, ABI),
2690         platform(Arch, OS, _, Platform),
2691         (
2692         % If restricted_abi_for_arch is specified, follow its restrictions
2693             restricted_abi_for_arch(Test, Arch, ABI);
2694             % If restricted_abi_for_arch is not specified, there are no
2695             % restrictions
2696             \+ restricted_abi_for_arch(Test, Arch, _) -> true
2697         ).
2698
2699 % Sanity checking
2700 % Define
2701 % insane(Message) :- invalid condition.
2702 % to specify that build should fail if invalid condition is true.
2703
2704 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2705 % SPEC EXCEPTION GLUE
2706 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2707
2708 % spec_exception_type/3
2709 % spec_exception_type(?ExceptionType, ?ParamCount, ?Params)
2710 % Specifies a new type of exception to a specification rule.  This is where we
2711 % build a catalog of types of exceptions and their parameters
2712
2713 % mutatee_flags exception specifies an exception that overrides the
2714 % standard mutatee flags string for a compiler when compiling a particular
2715 % file.
2716 % OVERRIDES comp_mutatee_flags_str/2
2717 spec_exception_type('mutatee_flags', 2, ['compiler', 'flags']).
2718
2719 % spec_object_file/6
2720 % spec_object_file(?ObjectFile, ?Compiler, ?SourceList, ?IntermediateSourceList
2721 %                  ?DependencyList, ?FlagList)
2722 % This clause should contain everything necessary to generate a makefile rule
2723 % for an object file.  I don't want to do text processing in the Prolog
2724 % component of the spec compiler, so we'll pass along a main source file string
2725 % and let the Python component handle transforming that into an object file
2726 % name
2727