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