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