import os
import config
import qemu_instr

_executor = qemu_instr.STDINExecutorQEMU(config.QEMU_BIN, config.LOCAL_UNINSTRUMENTED_EXEC_PATH)
qemu = qemu_instr.QEMUInstr(_executor, config.DUMPER_PATH, shm_key=config.SHM_KEY)
tests = list(filter(lambda x: "10000" not in x and not x.startswith("."), os.listdir("out/m/queue")))
qemu.build_execution_tree(["out/m/queue/" + x for x in tests])

tests = list(filter(lambda x: "10000" in x and not x.startswith("."), os.listdir("out/m/queue")))

for filename in ["out/m/queue/" + x for x in tests]:
    with open(filename, "rb") as fp:
        corpus_content = fp.read()
        qemu.executor.execute_test_case(corpus_content)
        try:
            trace = qemu.executor.dump_trace()
        except EOFError as e:
            print(f"[Crash] Found crash {filename} with error {e}, skipping")
            qemu.executor.restart_bin()
            continue
        for i in trace:
            if i not in qemu.execution_tree:
                print(i, filename)