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