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