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