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