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