From 67d461a1ed9f312b771fc755de7575e7faa49bf1 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Sun, 12 Nov 2017 17:31:22 +0100 Subject: [PATCH] Add dbcheck.py, split seg_int.segbits Signed-off-by: Clifford Wolf Signed-off-by: Tim 'mithro' Ansell --- fuzzers/013-intpips/.gitignore | 3 ++- fuzzers/013-intpips/Makefile | 11 +++++---- htmlgen/htmlgen.py | 21 +++++++++-------- utils/dbcheck.py | 43 ++++++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 utils/dbcheck.py diff --git a/fuzzers/013-intpips/.gitignore b/fuzzers/013-intpips/.gitignore index 6fb5047a..0539c342 100644 --- a/fuzzers/013-intpips/.gitignore +++ b/fuzzers/013-intpips/.gitignore @@ -1,2 +1,3 @@ /specimen_[0-9][0-9][0-9]/ -/seg_int.segbits +/seg_clbll_int.segbits +/seg_clblm_int.segbits diff --git a/fuzzers/013-intpips/Makefile b/fuzzers/013-intpips/Makefile index ec76de7f..7e32973f 100644 --- a/fuzzers/013-intpips/Makefile +++ b/fuzzers/013-intpips/Makefile @@ -4,13 +4,16 @@ SPECIMENS := $(addprefix specimen_,$(shell seq -f '%03.0f' $(N))) SPECIMENS_OK := $(addsuffix /OK,$(SPECIMENS)) database: $(SPECIMENS_OK) - ../../tools/segmatch -m 5 -M 15 -o seg_int.segbits \ - $(addsuffix /segdata_clbll.txt,$(SPECIMENS)) \ + ../../tools/segmatch -m 5 -M 15 -o seg_clbll_int.segbits \ + $(addsuffix /segdata_clbll.txt,$(SPECIMENS)) + ../../tools/segmatch -m 5 -M 15 -o seg_clblm_int.segbits \ $(addsuffix /segdata_clblm.txt,$(SPECIMENS)) pushdb: - bash ../../utils/mergedb.sh seg_int.segbits \ - ../../database/$(XRAY_DATABASE)/seg_int.segbits + bash ../../utils/mergedb.sh seg_clbll_int.segbits \ + ../../database/$(XRAY_DATABASE)/seg_clbll_int.segbits + bash ../../utils/mergedb.sh seg_clblm_int.segbits \ + ../../database/$(XRAY_DATABASE)/seg_clblm_int.segbits $(SPECIMENS_OK): bash generate.sh $(subst /OK,,$@) diff --git a/htmlgen/htmlgen.py b/htmlgen/htmlgen.py index bebcdd1a..ced07634 100644 --- a/htmlgen/htmlgen.py +++ b/htmlgen/htmlgen.py @@ -23,6 +23,7 @@ for segname, segdata in grid["segments"].items(): if segtype not in segbits: segbits[segtype] = dict() segbits_r[segtype] = dict() + routebits[segtype] = dict() segframes[segtype] = segdata["frames"] print("Loading %s segbits." % segtype) @@ -32,14 +33,14 @@ for segname, segdata in grid["segments"].items(): segbits[segtype][bit_name] = bit_pos segbits_r[segtype][bit_pos] = bit_name -print("Loading routing segbits.") -with open("../database/%s/seg_int.segbits" % os.getenv("XRAY_DATABASE")) as f: - for line in f: - bit_name, *bit_pos = line.split() - for bit in bit_pos: - if bit not in routebits: - routebits[bit] = set() - routebits[bit].add(bit_name) + print("Loading %s_int segbits." % segtype) + with open("../database/%s/seg_%s_int.segbits" % (os.getenv("XRAY_DATABASE"), segtype)) as f: + for line in f: + bit_name, *bit_pos = line.split() + for bit in bit_pos: + if bit not in routebits[segtype]: + routebits[segtype][bit] = set() + routebits[segtype][bit].add(bit_name) ################################################# @@ -169,8 +170,8 @@ for segtype in segbits.keys(): bgcolor = "#cccc88" label = bit_name[-5] + "5" - elif bit_pos in routebits: - title += list(routebits[bit_pos]) + elif bit_pos in routebits[segtype]: + title += list(routebits[segtype][bit_pos]) bgcolor = "#6666cc" label = "R" diff --git a/utils/dbcheck.py b/utils/dbcheck.py new file mode 100644 index 00000000..6034176d --- /dev/null +++ b/utils/dbcheck.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +import sys, re + +database = dict() +database_r = dict() + +for arg in sys.argv[1:]: + with open(arg, "r") as f: + for line in f: + if "<" in line: + raise Exception("Found '<' in this line: %s" % line) + + line = line.split() + key = line[0] + bits = tuple(sorted(set(line[1:]))) + + if key in database: + raise Exception("Duplicate key: %s %s" % (key, bits)) + + if bits in database_r: + raise Exception("Duplicate bits: %s %s" % (key, bits)) + + database[key] = bits + database_r[bits] = key + +def get_subsets(bits): + retval = list() + retval.append(bits) + for i in range(len(bits)): + for s in get_subsets(bits[i+1:]): + retval.append(bits[0:i] + s); + return retval + +def check_subsets(bits): + for sub_bits in sorted(get_subsets(bits)): + if sub_bits != bits and sub_bits != (): + if sub_bits in database_r: + raise Exception("Entry %s %s is a subset of entry %s %s." % (database_r[sub_bits], sub_bits, database_r[bits], bits)) + +for key, bits in database.items(): + check_subsets(bits) +