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