mirror of
https://github.com/kmc7468/cs420.git
synced 2025-12-15 06:58:50 +00:00
Add --skip-build option
This commit is contained in:
committed by
Jeehoon Kang
parent
7ffd357fde
commit
27f228a853
@@ -97,7 +97,7 @@ def install_csmith(tests_dir):
|
|||||||
|
|
||||||
return bin_path, inc_path
|
return bin_path, inc_path
|
||||||
|
|
||||||
def generate(tests_dir, bin_path, seed=None, easy=False):
|
def generate(tests_dir, bin_path, seed, easy):
|
||||||
"""Feeding options to built Csmith to randomly generate test case.
|
"""Feeding options to built Csmith to randomly generate test case.
|
||||||
|
|
||||||
For generality, I disabled most of the features that are enabled by default.
|
For generality, I disabled most of the features that are enabled by default.
|
||||||
@@ -111,9 +111,8 @@ def generate(tests_dir, bin_path, seed=None, easy=False):
|
|||||||
"--no-jumps", "--no-pointers",
|
"--no-jumps", "--no-pointers",
|
||||||
"--no-structs", "--no-unions",
|
"--no-structs", "--no-unions",
|
||||||
"--float", "--strict-float",
|
"--float", "--strict-float",
|
||||||
|
"--seed", str(seed),
|
||||||
]
|
]
|
||||||
if seed is not None:
|
|
||||||
options += ["--seed", str(seed)]
|
|
||||||
if easy:
|
if easy:
|
||||||
options += [
|
options += [
|
||||||
"--max-block-depth", "2",
|
"--max-block-depth", "2",
|
||||||
@@ -161,6 +160,8 @@ def make_reduce_criteria(tests_dir, fuzz_arg):
|
|||||||
arg_dict = {
|
arg_dict = {
|
||||||
"$PROJECT_DIR": str(Path(tests_dir).parent),
|
"$PROJECT_DIR": str(Path(tests_dir).parent),
|
||||||
"$FUZZ_ARG": fuzz_arg,
|
"$FUZZ_ARG": fuzz_arg,
|
||||||
|
"$KECC_BIN": str(os.path.abspath(os.path.join(tests_dir, "../target/release/kecc"))),
|
||||||
|
"$FUZZ_BIN": str(os.path.abspath(os.path.join(tests_dir, "../target/release/fuzz"))),
|
||||||
}
|
}
|
||||||
with open(os.path.join(tests_dir, "reduce-criteria-template.sh"), "r") as t:
|
with open(os.path.join(tests_dir, "reduce-criteria-template.sh"), "r") as t:
|
||||||
temp = t.read()
|
temp = t.read()
|
||||||
@@ -211,10 +212,11 @@ def creduce(tests_dir, fuzz_arg):
|
|||||||
proc.kill()
|
proc.kill()
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
def fuzz(tests_dir, fuzz_arg, num_iter, easy=False):
|
def fuzz(tests_dir, fuzz_arg, num_iter, easy):
|
||||||
global SKIP_TEST
|
global SKIP_TEST
|
||||||
|
|
||||||
csmith_bin, csmith_inc = install_csmith(tests_dir)
|
csmith_bin, csmith_inc = install_csmith(tests_dir)
|
||||||
|
fuzz_bin = os.path.abspath(os.path.join(tests_dir, "../target/release/fuzz"))
|
||||||
try:
|
try:
|
||||||
if num_iter is None:
|
if num_iter is None:
|
||||||
print("Fuzzing with infinitely many test cases. Please press [ctrl+C] to break.")
|
print("Fuzzing with infinitely many test cases. Please press [ctrl+C] to break.")
|
||||||
@@ -226,10 +228,7 @@ def fuzz(tests_dir, fuzz_arg, num_iter, easy=False):
|
|||||||
skip = 0
|
skip = 0
|
||||||
while True:
|
while True:
|
||||||
print("Test case #{} (skipped: {})".format(i, skip))
|
print("Test case #{} (skipped: {})".format(i, skip))
|
||||||
src = generate(
|
src = generate(tests_dir, csmith_bin, random.randint(1, 987654321), easy)
|
||||||
tests_dir, csmith_bin,
|
|
||||||
seed = random.randint(1, 987654321), easy=easy
|
|
||||||
)
|
|
||||||
with open(os.path.join(tests_dir, "test.c"), 'w') as dst:
|
with open(os.path.join(tests_dir, "test.c"), 'w') as dst:
|
||||||
dst.write(src)
|
dst.write(src)
|
||||||
|
|
||||||
@@ -238,7 +237,7 @@ def fuzz(tests_dir, fuzz_arg, num_iter, easy=False):
|
|||||||
dst.write(src_polished)
|
dst.write(src_polished)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
args = ["cargo", "run", "--features=build-bin", "--release", "--bin", "fuzz", "--", fuzz_arg, os.path.join(tests_dir, "test_polished.c")]
|
args = [fuzz_bin, fuzz_arg, os.path.join(tests_dir, "test_polished.c")]
|
||||||
proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tests_dir)
|
proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, cwd=tests_dir)
|
||||||
proc.communicate(timeout=60)
|
proc.communicate(timeout=60)
|
||||||
|
|
||||||
@@ -265,6 +264,7 @@ if __name__ == "__main__":
|
|||||||
parser.add_argument('-p', '--print', action='store_true', help='Fuzzing C AST printer')
|
parser.add_argument('-p', '--print', action='store_true', help='Fuzzing C AST printer')
|
||||||
parser.add_argument('-i', '--irgen', action='store_true', help='Fuzzing irgen')
|
parser.add_argument('-i', '--irgen', action='store_true', help='Fuzzing irgen')
|
||||||
parser.add_argument('-r', '--reduce', action='store_true', help="Reducing input file")
|
parser.add_argument('-r', '--reduce', action='store_true', help="Reducing input file")
|
||||||
|
parser.add_argument('--skip-build', action='store_true', help="Skipping cargo build")
|
||||||
parser.add_argument('--easy', action='store_true', help="Generate more easy code by csmith option")
|
parser.add_argument('--easy', action='store_true', help="Generate more easy code by csmith option")
|
||||||
parser.add_argument('--seed', type=int, help="Provide seed of fuzz generation", default=-1)
|
parser.add_argument('--seed', type=int, help="Provide seed of fuzz generation", default=-1)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
@@ -287,13 +287,16 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
tests_dir = os.path.abspath(os.path.dirname(__file__))
|
tests_dir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
print("Building KECC..")
|
if not args.skip_build:
|
||||||
try:
|
print("Building KECC..")
|
||||||
proc = subprocess.Popen(["cargo", "build", "--release"], cwd=tests_dir)
|
try:
|
||||||
proc.communicate()
|
proc = subprocess.Popen(["cargo", "build", "--features=build-bin", "--release", "--bin", "fuzz", "--bin", "kecc"], cwd=tests_dir)
|
||||||
except subprocess.TimeoutExpired as e:
|
proc.communicate()
|
||||||
proc.kill()
|
except subprocess.TimeoutExpired as e:
|
||||||
raise e
|
proc.kill()
|
||||||
|
raise e
|
||||||
|
else:
|
||||||
|
print("Skip building. Please run `cargo build --features=build-bin --release --bin fuzz --bin kecc` to manually build.")
|
||||||
|
|
||||||
if args.reduce:
|
if args.reduce:
|
||||||
creduce(tests_dir, fuzz_arg)
|
creduce(tests_dir, fuzz_arg)
|
||||||
|
|||||||
@@ -50,9 +50,9 @@ if
|
|||||||
grep 'comparison between pointer and integer' outa.txt ||\
|
grep 'comparison between pointer and integer' outa.txt ||\
|
||||||
! gcc -O1 test_reduced.c > cc_out1.txt 2>&1 ||\
|
! gcc -O1 test_reduced.c > cc_out1.txt 2>&1 ||\
|
||||||
! gcc -O2 test_reduced.c > cc_out2.txt 2>&1 ||\
|
! gcc -O2 test_reduced.c > cc_out2.txt 2>&1 ||\
|
||||||
! cargo run --manifest-path $PROJECT_DIR/Cargo.toml --features=build-bin --release -- --parse test_reduced.c >/dev/null 2>&1)
|
! $KECC_BIN --parse test_reduced.c >/dev/null 2>&1)
|
||||||
then
|
then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cargo run --manifest-path $PROJECT_DIR/Cargo.toml --features=build-bin --release --bin fuzz -- $FUZZ_ARG test_reduced.c 2>&1 | grep -q 'assertion failed'
|
$FUZZ_BIN $FUZZ_ARG test_reduced.c 2>&1 | grep -q 'assertion failed'
|
||||||
|
|||||||
Reference in New Issue
Block a user