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