#!/usr/bin/env python import argparse import os import sys import string import rcs_utils import dynaa_utils if __name__ == '__main__': parser = argparse.ArgumentParser( description = 'Check the call graph generated based on the ' \ 'specified AA') parser.add_argument('bc', help = 'the bitcode of the program') parser.add_argument('log', help = 'the point-to log') parser.add_argument('aa', help = 'the underlying alias analysis: ' + \ str(dynaa_utils.get_aa_choices()), metavar = 'aa', choices = dynaa_utils.get_aa_choices()) args = parser.parse_args() cmd = dynaa_utils.load_all_plugins('opt') cmd = dynaa_utils.load_aa(cmd, args.aa) cmd = string.join((cmd, '-fpcg')) cmd = string.join((cmd, '-check-cg')) cmd = string.join((cmd, '-log-file', args.log)) cmd = string.join((cmd, '-disable-output', '<', args.bc)) rcs_utils.invoke(cmd)
'correct: ' + str(dynaa_utils.get_aa_choices()), metavar = 'baseline_aa', choices = ['no-aa', 'basicaa', 'tbaa']) args = parser.parse_args() cmd = dynaa_utils.load_all_plugins('opt') # Load the baseline AA if specified if args.baseline is not None: if args.baseline == args.aa: sys.stderr.write('\033[1;31m') print >> sys.stderr, 'Error: Baseline and the checked AA', print >> sys.stderr, 'must be different' sys.stderr.write('\033[m') sys.exit(1) # baseline need be put before aa cmd = dynaa_utils.load_aa(cmd, args.baseline) cmd = ' '.join((cmd, '-baseline-aa-name', args.baseline)) # Load the checked AA cmd = dynaa_utils.load_aa(cmd, args.aa) # Some AAs don't support inter-procedural alias queries. # Add -intra or -baseline-intra option for them. if dynaa_utils.supports_intra_proc_queries_only(args.aa): cmd = ' '.join((cmd, '-intra')) if dynaa_utils.supports_intra_proc_queries_only(args.baseline): cmd = ' '.join((cmd, '-baseline-intra')) cmd = ' '.join((cmd, '-check-aa')) cmd = ' '.join((cmd, '-log-file', args.log)) # cmd = ' '.join((cmd, '-output-dyn-aliases', '/tmp/dyn-aliases'))