#! /usr/bin/python import sys import re args = sys.argv[1:] assert len(args) == 2, "usage is " print args def make_bpl_c_mapping(bpl_filename): linenum = 0 bpl_c_mapping = {} current_bb_line = -1 with open(bpl_filename) as bpl_file: for line in bpl_file: linenum += 1 if re.match(r'\$bb\d+', line): current_bb_line = linenum bpl_c_mapping[current_bb_line] = [] matchObj = re.match(r' assume {:sourceloc "(.+)", (\d+), (\d+)} true;', line) if matchObj: matched_filename = matchObj.group(1) matched_fileline = matchObj.group(2) bpl_c_mapping[current_bb_line].append((matched_filename, matched_fileline)) return bpl_c_mapping def convert_trace_to_c(trace_filename, bpl_c_mapping): with open(trace_filename) as tracefile: for line in tracefile: matchObj = re.match(r'.*\.bpl\((\d+),\d+\).*', line) if matchObj: bpl_line = int(matchObj.group(1)) if bpl_line in bpl_c_mapping: mapping = bpl_c_mapping[bpl_line] if len(mapping) > 0: print mapping[0] else: print "No Source Loc" else: print "unknown basic block" print "\t\t", matchObj.group(0), matchObj.group(1) bpl_c_mapping = make_bpl_c_mapping(args[0]) convert_trace_to_c(args[1], bpl_c_mapping)