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