Merge pull request #364 from mcmasterg/dbfixup_fix

Dbfixup fix
This commit is contained in:
John McMaster 2018-12-19 15:22:19 -08:00 committed by GitHub
commit c68ee2f004
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 62 additions and 15 deletions

View File

@ -26,13 +26,14 @@ database: $(SPECIMENS_OK)
${XRAY_MASKMERGE} build/mask_clbll_r.db $(shell find build -name segdata_int_r.txt)
${XRAY_MASKMERGE} build/mask_clblm_l.db $(shell find build -name segdata_int_l.txt)
${XRAY_MASKMERGE} build/mask_clblm_r.db $(shell find build -name segdata_int_r.txt)
# Keep a copy to track iter progress
# Also is pre-fixup, which drops and converts
cp build/segbits_int_l.db build/$(ITER)/segbits_int_l.db
cp build/segbits_int_r.db build/$(ITER)/segbits_int_r.db
# May be undersolved
ifneq ($(QUICK),Y)
${XRAY_DBFIXUP} --db-root build --clb-int
endif
# Keep a copy to track iter progress
cp build/segbits_int_l.db build/$(ITER)/segbits_int_l.db
cp build/segbits_int_r.db build/$(ITER)/segbits_int_r.db
pushdb:
${XRAY_MERGEDB} int_l build/segbits_int_l.db

View File

@ -27,13 +27,14 @@ export FUZDIR=$(shell pwd)
database: $(SPECIMENS_OK)
${XRAY_SEGMATCH} $(SEGMATCH_FLAGS) -o build/segbits_int_l.db $(shell find build -name segdata_int_l.txt)
${XRAY_SEGMATCH} $(SEGMATCH_FLAGS) -o build/segbits_int_r.db $(shell find build -name segdata_int_r.txt)
# Keep a copy to track iter progress
# Also is pre-fixup, which drops and converts
cp build/segbits_int_l.db build/$(ITER)/segbits_int_l.db
cp build/segbits_int_r.db build/$(ITER)/segbits_int_r.db
# May be undersolved
ifneq ($(QUICK),Y)
${XRAY_DBFIXUP} --db-root build --clb-int
endif
# Keep a copy to track iter progress
cp build/segbits_int_l.db build/$(ITER)/segbits_int_l.db
cp build/segbits_int_r.db build/$(ITER)/segbits_int_r.db
pushdb:
${XRAY_MERGEDB} int_l build/segbits_int_l.db

View File

@ -234,3 +234,12 @@ def gen_fuzz_states(nvals):
for i in range(nvals):
mask = (1 << i)
yield int(bool(bits & mask))
def add_bool_arg(parser, yes_arg, default=False, **kwargs):
dashed = yes_arg.replace('--', '')
dest = dashed.replace('-', '_')
parser.add_argument(
yes_arg, dest=dest, action='store_true', default=default, **kwargs)
parser.add_argument(
'--no-' + dashed, dest=dest, action='store_false', **kwargs)

View File

@ -104,7 +104,8 @@ def zero_groups(tag, bits, zero_db, strict=True, verbose=False):
len(a), len(bits), bits_str(bits))
def add_zero_bits(fn_in, fn_out, zero_db, clb_int=False, verbose=False):
def add_zero_bits(
fn_in, fn_out, zero_db, clb_int=False, strict=True, verbose=False):
'''
Add multibit entries
This requires adding some zero bits (ex: !31_09)
@ -115,6 +116,7 @@ def add_zero_bits(fn_in, fn_out, zero_db, clb_int=False, verbose=False):
changes = 0
llast = None
drops = 0
with open(fn_in, "r") as f:
for line in f:
# Hack: skip duplicate lines
@ -124,6 +126,14 @@ def add_zero_bits(fn_in, fn_out, zero_db, clb_int=False, verbose=False):
continue
tag, bits, mode = util.parse_db_line(line)
# an enum that needs masking
# check below asserts that a mask was actually applied
if mode and mode != "<0 candidates>" and not strict:
verbose and print(
"WARNING: dropping unresolved line: %s" % line)
drops += 1
continue
assert mode not in (
"<const0>",
"<const1>"), "Entries must be resolved. line: %s" % (line, )
@ -142,8 +152,7 @@ def add_zero_bits(fn_in, fn_out, zero_db, clb_int=False, verbose=False):
"""
if clb_int:
zero_range(tag, bits, 22, 25)
zero_groups(
tag, bits, zero_db, strict=not clb_int, verbose=verbose)
zero_groups(tag, bits, zero_db, strict=strict, verbose=verbose)
new_line = " ".join([tag] + sorted(bits))
@ -156,6 +165,9 @@ def add_zero_bits(fn_in, fn_out, zero_db, clb_int=False, verbose=False):
new_lines.add(new_line)
llast = line
if drops:
print("WARNING: %s dropped %s unresolved lines" % (fn_in, drops))
with open(fn_out, "w") as f:
for line in sorted(new_lines):
print(line, file=f)
@ -213,7 +225,8 @@ def load_zero_db(fn):
return ret
def update_seg_fns(fn_inouts, zero_db, clb_int, lazy=False, verbose=False):
def update_seg_fns(
fn_inouts, zero_db, clb_int, lazy=False, strict=True, verbose=False):
seg_files = 0
seg_lines = 0
for fn_in, fn_out in fn_inouts:
@ -222,7 +235,12 @@ def update_seg_fns(fn_inouts, zero_db, clb_int, lazy=False, verbose=False):
continue
changes = add_zero_bits(
fn_in, fn_out, zero_db, clb_int=clb_int, verbose=verbose)
fn_in,
fn_out,
zero_db,
clb_int=clb_int,
strict=strict,
verbose=verbose)
if changes is not None:
seg_files += 1
seg_lines += changes
@ -259,7 +277,13 @@ def update_masks(db_root):
def update_segs(
db_root, clb_int, seg_fn_in, seg_fn_out, zero_db_fn, verbose=False):
db_root,
clb_int,
seg_fn_in,
seg_fn_out,
zero_db_fn,
strict=True,
verbose=False):
if clb_int:
zero_db = clb_int_zero_db
lazy = True
@ -283,7 +307,8 @@ def update_segs(
zero_db = load_zero_db(zero_db_fn)
print("CLB INT mode: %s" % clb_int)
print("Segbit groups: %s" % len(zero_db))
update_seg_fns(fn_inouts, zero_db, clb_int, lazy=lazy, verbose=verbose)
update_seg_fns(
fn_inouts, zero_db, clb_int, lazy=lazy, strict=strict, verbose=verbose)
def run(
@ -292,8 +317,12 @@ def run(
zero_db_fn=None,
seg_fn_in=None,
seg_fn_out=None,
strict=None,
verbose=False):
if strict is None:
strict = not clb_int
# Probably should split this into two programs
update_segs(
db_root,
@ -301,6 +330,7 @@ def run(
seg_fn_in=seg_fn_in,
seg_fn_out=seg_fn_out,
zero_db_fn=zero_db_fn,
strict=strict,
verbose=verbose)
if clb_int:
update_masks(db_root)
@ -318,11 +348,17 @@ def main():
parser.add_argument('--zero-db', help='Apply custom patches')
parser.add_argument('--seg-fn-in', help='')
parser.add_argument('--seg-fn-out', help='')
util.add_bool_arg(parser, "--strict", default=None)
args = parser.parse_args()
run(
args.db_root, args.clb_int, args.zero_db, args.seg_fn_in,
args.seg_fn_out, args.verbose)
args.db_root,
args.clb_int,
args.zero_db,
args.seg_fn_in,
args.seg_fn_out,
strict=args.strict,
verbose=args.verbose)
if __name__ == '__main__':