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