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