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