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