--- /dev/null
+#!/usr/bin/python
+
+import json
+import sys
+
+if len(sys.argv) < 2:
+ print "Usage: {} <symcov1> <symcov2> ... <out_symcov>".format(sys.argv[0])
+ exit(0)
+
+smcs = []
+output_file = sys.argv[-1]
+
+for sc in sys.argv[1:-1]:
+ print sc
+ with open(sc) as f:
+ smcs.append(json.load(f))
+
+
+check_fields_names = ("binary-hash", "covered-points", "point-symbol-info")
+
+for i in xrange(len(smcs)):
+ for field in check_fields_names:
+ if field not in smcs[i]:
+ print "{} has no {} field".format(sys.argv[1 + i], field)
+ exit(1)
+
+for s in smcs[1:]:
+ # merge binary-hash
+ smcs[0]["binary-hash"] =\
+ list(set(smcs[0]["binary-hash"] + s["binary-hash"]))
+ # merge covered-points
+ smcs[0]["covered-points"] =\
+ list(set(smcs[0]["covered-points"] + s["covered-points"]))
+
+ # merge point-symbol-info
+ for file_psi in s["point-symbol-info"]:
+ if file_psi not in smcs[0]["point-symbol-info"]:
+ smcs[0]["point-symbol-info"][file_psi] = {}
+ for func_psi in s["point-symbol-info"][file_psi]:
+ if func_psi not in smcs[0]["point-symbol-info"][file_psi]:
+ smcs[0]["point-symbol-info"][file_psi][func_psi] = {}
+ for point in s["point-symbol-info"][file_psi][func_psi]:
+ smcs[0]["point-symbol-info"][file_psi][func_psi][point] =\
+ s["point-symbol-info"][file_psi][func_psi][point]
+
+with open(output_file, 'w') as f:
+ json.dump(smcs[0], f)