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