| #!/usr/bin/python |
| from __future__ import print_function |
| |
| import os |
| import sys |
| |
| DBG_OUTPUT_FILE = "Output/" + sys.argv[1] + ".dbg.out" |
| OPT_DBG_OUTPUT_FILE = "Output/" + sys.argv[1] + ".dbg.opt.out" |
| LOG_FILE = "Output/" + sys.argv[1] + ".log" |
| NATIVE_DBG_OUTPUT_FILE = "Output/" + sys.argv[1] + ".native.dbg.out" |
| NATIVE_OPT_DBG_OUTPUT_FILE = "Output/" + sys.argv[1] + ".native.dbg.opt.out" |
| NATIVE_LOG_FILE = "Output/" + sys.argv[1] + ".native.log" |
| REPORT_FILE = "Output/" + sys.argv[1] + ".dbg.report.txt" |
| |
| |
| class BreakPoint: |
| def __init__(self, bp_name): |
| self.name = bp_name |
| self.values = {} |
| self.missing_args = [] |
| self.matching_args = [] |
| self.notmatching_args = [] |
| self.missing_bp = False |
| |
| def setMissing(self): |
| self.missing_bp = True |
| |
| def getArgCount(self): |
| return len(self.values) |
| |
| def getMissingArgCount(self): |
| if self.missing_bp == True: |
| return len(self.values) |
| return len(self.missing_args) |
| |
| def getMatchingArgCount(self): |
| if self.missing_bp == True: |
| return 0 |
| return len(self.matching_args) |
| |
| def getNotMatchingArgCount(self): |
| if self.missing_bp == True: |
| return 0 |
| return len(self.notmatching_args) |
| |
| def recordArgument(self, arg_name, value): |
| self.values[arg_name] = value |
| |
| def __repr__(self): |
| print(self.name) |
| for k, v in self.values.items(): |
| print(k, "=", v) |
| return "" |
| |
| def compare_args(self, other, file): |
| myitems = self.values.items() |
| otheritems = list(other.values.items()) |
| match = False |
| for i, my_item in enumerate(my_items): |
| if i >= len(otheritems): |
| match = True |
| self.missing_args.append(myitem[0]) |
| elif cmp(myitem[1], otheritems[i][1]): |
| match = True |
| self.notmatching_args.append(myitem[0]) |
| else: |
| self.matching_args.append(myitem[0]) |
| |
| self.print_list(self.matching_args, " Matching arguments ", file) |
| self.print_list(self.notmatching_args, " Not Matching arguments ", file) |
| self.print_list(self.missing_args, " Missing arguments ", file) |
| return match |
| |
| def print_list(self, items, txt, pfile): |
| if len(items) == 0: |
| return |
| pfile.write(self.name) |
| pfile.write(txt) |
| for e in items: |
| pfile.write(e) |
| pfile.write(" ") |
| pfile.write("\n") |
| |
| |
| def read_input(filename, dict): |
| f = open(filename, "r") |
| lines = f.readlines() |
| for l in range(len(lines)): |
| c = lines[l].split() |
| if c[0] == "#Breakpoint": |
| bp = dict.get(c[2]) |
| if bp is None: |
| bp = BreakPoint(c[1]) |
| dict[c[2]] = bp |
| if c[0] == "#Argument": |
| bp = dict.get(c[2]) |
| if bp is None: |
| bp = BreakPoint(c[1]) |
| dict[c[2]] = bp |
| bp.recordArgument(c[3], c[4]) |
| return |
| |
| |
| f1_breakpoints = {} |
| read_input(DBG_OUTPUT_FILE, f1_breakpoints) |
| f1_items = f1_breakpoints.items() |
| |
| f2_breakpoints = {} |
| read_input(OPT_DBG_OUTPUT_FILE, f2_breakpoints) |
| f2_items = f2_breakpoints.items() |
| |
| f = open(LOG_FILE, "w") |
| f.write("Log output\n") |
| for id, bp in f2_items: |
| bp1 = f1_breakpoints.get(id) |
| if bp1 is None: |
| bp.setMissing() |
| else: |
| bp1.compare_args(bp, f) |
| f.close() |
| |
| nf1_breakpoints = {} |
| read_input(NATIVE_DBG_OUTPUT_FILE, nf1_breakpoints) |
| nf1_items = nf1_breakpoints.items() |
| |
| nf2_breakpoints = {} |
| read_input(NATIVE_OPT_DBG_OUTPUT_FILE, nf2_breakpoints) |
| nf2_items = nf2_breakpoints.items() |
| |
| nfl = open(NATIVE_LOG_FILE, "w") |
| for id, bp in nf2_items: |
| bp1 = nf1_breakpoints.get(id) |
| if bp1 is None: |
| bp.setMissing() |
| else: |
| bp1.compare_args(bp, nfl) |
| nfl.close() |
| |
| f1_arg_count = 0 |
| f1_matching_arg_count = 0 |
| f1_notmatching_arg_count = 0 |
| f1_missing_arg_count = 0 |
| for f1_item in f1_items: |
| bp = f1_item[1] |
| f1_arg_count = f1_arg_count + bp.getArgCount() |
| f1_matching_arg_count = f1_matching_arg_count + bp.getMatchingArgCount() |
| f1_notmatching_arg_count = f1_notmatching_arg_count + bp.getNotMatchingArgCount() |
| f1_missing_arg_count = f1_missing_arg_count + bp.getMissingArgCount() |
| |
| nf1_arg_count = 0 |
| nf1_matching_arg_count = 0 |
| nf1_notmatching_arg_count = 0 |
| nf1_missing_arg_count = 0 |
| for nf1_item in nf1_items: |
| bp = nf1_item[1] |
| nf1_arg_count = nf1_arg_count + bp.getArgCount() |
| nf1_matching_arg_count = nf1_matching_arg_count + bp.getMatchingArgCount() |
| nf1_notmatching_arg_count = nf1_notmatching_arg_count + bp.getNotMatchingArgCount() |
| nf1_missing_arg_count = nf1_missing_arg_count + bp.getMissingArgCount() |
| |
| rf = open(REPORT_FILE, "w") |
| rf.write("---------------------------------------------------------------\n") |
| rf.write(">>> ========= '") |
| rf.write(sys.argv[1]) |
| rf.write("'") |
| rf.write(" Program\n") |
| rf.write("---------------------------------------------------------------\n\n") |
| rf.write("GCC Total Arguments: ") |
| rf.write(str(nf1_arg_count)) |
| rf.write("\n") |
| rf.write("GCC Matching Arguments: ") |
| rf.write(str(nf1_matching_arg_count)) |
| rf.write("\n") |
| rf.write("GCC Not Matching Arguments: ") |
| rf.write(str(nf1_notmatching_arg_count)) |
| rf.write("\n") |
| rf.write("GCC Missing Arguments: ") |
| rf.write(str(nf1_missing_arg_count)) |
| rf.write("\n") |
| rf.write("LLVM Total Arguments: ") |
| rf.write(str(f1_arg_count)) |
| rf.write("\n") |
| rf.write("LLVM Matching Arguments: ") |
| rf.write(str(f1_matching_arg_count)) |
| rf.write("\n") |
| rf.write("LLVM Not Matching Arguments: ") |
| rf.write(str(f1_notmatching_arg_count)) |
| rf.write("\n") |
| rf.write("LLVM Missing Arguments: ") |
| rf.write(str(f1_missing_arg_count)) |
| rf.write("\n") |
| rf.close() |