From 76c57b56307c9ba3ee8f923ebf001a811ec3b301 Mon Sep 17 00:00:00 2001 From: Michael Achenbach Date: Fri, 8 Nov 2019 13:57:47 +0100 Subject: [PATCH] [numfuzz] Add cpu-features extra flags to numfuzz This combines flags switching off CPU-features randomly with all other flags on the numfuzz fuzzers. In a follow up we can add also other interesting flags for testing more features. Bug: chromium:1021463 No-Try: true Change-Id: Ia27d1b8b82dff2bf497242b30ec0b6ef2dfd722d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1905846 Commit-Queue: Michael Achenbach Reviewed-by: Clemens Backes Cr-Commit-Position: refs/heads/master@{#64858} --- tools/testrunner/testproc/fuzzer.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/tools/testrunner/testproc/fuzzer.py b/tools/testrunner/testproc/fuzzer.py index 8aec28f57c..c110c4a166 100644 --- a/tools/testrunner/testproc/fuzzer.py +++ b/tools/testrunner/testproc/fuzzer.py @@ -8,6 +8,29 @@ import time from . import base +# Extra flags randomly added to all fuzz tests with numfuzz. List of tuples +# (probability, flag). +EXTRA_FLAGS = [ + (0.1, '--no-enable-sse3'), + (0.1, '--no-enable-ssse3'), + (0.1, '--no-enable-sse4_1'), + (0.1, '--no-enable-sse4_2'), + (0.1, '--no-enable-sahf'), + (0.1, '--no-enable-avx'), + (0.1, '--no-enable-fma3'), + (0.1, '--no-enable-bmi1'), + (0.1, '--no-enable-bmi2'), + (0.1, '--no-enable-lzcnt'), + (0.1, '--no-enable-popcnt'), +] + +def random_extra_flags(rng): + """Returns a random list of flags chosen from the configurations in + EXTRA_FLAGS. + """ + return [flag for prob, flag in EXTRA_FLAGS if rng.random() < prob] + + class FuzzerConfig(object): def __init__(self, probability, analyzer, fuzzer): """ @@ -92,7 +115,6 @@ class FuzzerProc(base.TestProcProducer): return self._create_subtest(test, 'analysis', flags=analysis_flags, keep_output=True) - def _result_for(self, test, subtest, result): if not self._disable_analysis: if result is not None: @@ -110,7 +132,7 @@ class FuzzerProc(base.TestProcProducer): # analysis phase at all, so no fuzzer has it's own analyzer. gens = [] indexes = [] - for i, fuzzer_config in enumerate(self._fuzzer_configs): + for fuzzer_config in self._fuzzer_configs: analysis_value = None if analysis_result and fuzzer_config.analyzer: analysis_value = fuzzer_config.analyzer.do_analysis(analysis_result) @@ -132,7 +154,7 @@ class FuzzerProc(base.TestProcProducer): main_index = self._rng.choice(indexes) _, main_gen = gens[main_index] - flags = next(main_gen) + flags = random_extra_flags(self._rng) + next(main_gen) for index, (p, gen) in enumerate(gens): if index == main_index: continue