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