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