From 2cc4f5c9231b0e41f3d03bc426b57d7704954eb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Wed, 24 Oct 2018 15:30:26 +0200 Subject: [PATCH] deps: patch V8 to 7.0.276.32 Refs: https://github.com/v8/v8/compare/7.0.276.28...7.0.276.32 PR-URL: https://github.com/nodejs/node/pull/23851 Reviewed-By: Ali Ijaz Sheikh Reviewed-By: Colin Ihrig Reviewed-By: Refael Ackermann --- deps/v8/include/v8-version.h | 2 +- deps/v8/infra/testing/PRESUBMIT.py | 4 +- deps/v8/infra/testing/builders.pyl | 1337 ++++++++++++++++- deps/v8/src/debug/debug-coverage.cc | 39 + deps/v8/src/debug/debug-evaluate.cc | 7 +- deps/v8/src/debug/debug.cc | 15 +- .../interpreter/bytecode-array-accessor.cc | 13 + .../src/interpreter/bytecode-array-accessor.h | 2 + deps/v8/src/value-serializer.cc | 14 +- .../debugger/regress/regress-crbug-882664.js | 41 + deps/v8/test/mjsunit/code-coverage-block.js | 44 +- 11 files changed, 1471 insertions(+), 47 deletions(-) create mode 100644 deps/v8/test/debugger/regress/regress-crbug-882664.js diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 500576281862bb..360d80865ca427 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 7 #define V8_MINOR_VERSION 0 #define V8_BUILD_NUMBER 276 -#define V8_PATCH_LEVEL 28 +#define V8_PATCH_LEVEL 32 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/infra/testing/PRESUBMIT.py b/deps/v8/infra/testing/PRESUBMIT.py index e145534e6ea15c..d8047bc244c1ac 100644 --- a/deps/v8/infra/testing/PRESUBMIT.py +++ b/deps/v8/infra/testing/PRESUBMIT.py @@ -115,9 +115,9 @@ def _check_test(error_msg, test): if not all(isinstance(x, basestring) for x in test_args): errors += error_msg('If specified, all test_args must be strings') - # Limit shards to 10 to avoid erroneous resource exhaustion. + # Limit shards to 12 to avoid erroneous resource exhaustion. errors += _check_int_range( - error_msg, test, 'shards', lower_bound=1, upper_bound=10) + error_msg, test, 'shards', lower_bound=1, upper_bound=12) variant = test.get('variant', 'default') if not variant or not isinstance(variant, basestring): diff --git a/deps/v8/infra/testing/builders.pyl b/deps/v8/infra/testing/builders.pyl index b2cd7618170c39..bf24d2c9954131 100644 --- a/deps/v8/infra/testing/builders.pyl +++ b/deps/v8/infra/testing/builders.pyl @@ -8,10 +8,10 @@ # come last. Test definitions must have keys in the following order, but omit # optional fields: # * name (required) +# * suffix # * variant # * test_args # * shards -# * suffix # * swarming_dimensions # * swarming_task_attrs # @@ -39,7 +39,10 @@ 'os': 'Android', }, 'tests': [ - {'name': 'mjsunit', 'variant': 'default', 'shards': 2}, + {'name': 'benchmarks', 'variant': 'default'}, + {'name': 'v8testing', 'variant': 'default', 'shards': 4}, + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262_variants', 'variant': 'default', 'shards': 6}, ], }, ############################################################################## @@ -82,10 +85,15 @@ {'name': 'mozilla', 'variant': 'extra'}, {'name': 'test262_variants', 'shards': 2}, {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra'}, ], }, + 'v8_linux_noembed_rel_ng_triggered': { + 'tests': [ + {'name': 'v8testing', 'shards': 2}, + ], + }, 'v8_linux_noi18n_rel_ng_triggered': { 'tests': [ {'name': 'mozilla', 'variant': 'default'}, @@ -120,14 +128,69 @@ {'name': 'optimize_for_size'}, {'name': 'test262_variants', 'shards': 4}, {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'suffix': 'isolates', 'test_args': ['--isolates'], 'shards': 2}, {'name': 'v8testing', 'variant': 'extra'}, ], }, + 'v8_linux_optional_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + # Code serializer. + {'name': 'benchmarks', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'd8testing', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'mozilla', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'test262_variants', 'variant': 'code_serializer', 'shards': 1}, + # No SSE3. + { + 'name': 'mozilla', + 'suffix': 'nosse3', + 'test_args': [ + '--extra-flags', + '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx', + ], + }, + { + 'name': 'test262', + 'suffix': 'nosse3', + 'test_args': [ + '--extra-flags', + '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx', + ], + }, + { + 'name': 'v8testing', + 'suffix': 'nosse3', + 'test_args': [ + '--extra-flags', + '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx', + ], + 'shards': 3, + }, + # No SSE4. + { + 'name': 'mozilla', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'], + }, + { + 'name': 'test262', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'], + }, + { + 'name': 'v8testing', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'], + 'shards': 3, + }, + ], + }, 'v8_linux_verify_csa_rel_ng_triggered': { 'tests': [ - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, ], }, ############################################################################## @@ -141,12 +204,17 @@ {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, ], }, + 'v8_linux_arm_lite_rel_ng_triggered': { + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 4}, + ], + }, 'v8_linux_arm_rel_ng_triggered': { 'tests': [ {'name': 'mjsunit_sp_frame_access'}, - {'name': 'mozilla'}, - {'name': 'test262'}, - {'name': 'v8testing', 'shards': 7}, + {'name': 'mozilla', 'shards': 2}, + {'name': 'test262', 'shards': 2}, + {'name': 'v8testing', 'shards': 8}, {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, ], }, @@ -214,12 +282,23 @@ {'name': 'test262_variants', 'shards': 4}, {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, {'name': 'v8initializers'}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra'}, {'name': 'v8testing', 'variant': 'minor_mc'}, {'name': 'v8testing', 'variant': 'slow_path'}, ], }, + # TODO(machenbach): Experimental builder with incomplete configs. Should be + # similar to v8_linux64_rel_ng_triggered after testing. + 'v8_linux64_rel_xg': { + 'swarming_dimensions' : { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + {'name': 'v8initializers'}, + {'name': 'v8testing', 'shards': 2}, + ], + }, 'v8_linux64_tsan_rel': { 'tests': [ {'name': 'benchmarks'}, @@ -242,7 +321,7 @@ }, 'v8_linux64_verify_csa_rel_ng_triggered': { 'tests': [ - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, ], }, ############################################################################## @@ -258,16 +337,34 @@ }, 'v8_linux_arm64_gc_stress_dbg': { 'tests': [ - {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 8}, + {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 10}, ], }, 'v8_linux_arm64_rel_ng_triggered': { 'tests': [ {'name': 'mjsunit_sp_frame_access'}, - {'name': 'mozilla'}, - {'name': 'test262'}, + {'name': 'mozilla', 'shards': 2}, + {'name': 'test262', 'shards': 2}, {'name': 'v8testing', 'shards': 9}, - {'name': 'v8testing', 'variant': 'extra', 'shards': 4}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 6}, + ], + }, + ############################################################################## + # Odroids with native arm + 'v8_odroid_arm_rel_ng_triggered': { + 'swarming_dimensions' : { + 'cores': '8', + 'cpu': 'armv7l-32-ODROID-XU4', + 'os': 'Ubuntu-16.04', + }, + 'swarming_task_attrs': { + # Use same prio as CI due to limited resources. + 'priority': 25, + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'optimize_for_size'}, + {'name': 'v8testing', 'shards': 2}, ], }, ############################################################################## @@ -298,7 +395,7 @@ }, 'tests': [ {'name': 'test262'}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, ], }, ############################################################################## @@ -331,7 +428,7 @@ 'tests': [ {'name': 'mozilla'}, {'name': 'test262'}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, ], }, 'v8_win64_rel_ng_triggered': { @@ -341,7 +438,7 @@ }, 'tests': [ {'name': 'test262'}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra'}, ], }, @@ -385,44 +482,319 @@ 'tests': [ {'name': 'mozilla'}, {'name': 'test262'}, - {'name': 'v8testing'}, + {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra'}, ], }, ############################################################################## ### luci.v8.ci ############################################################################## - # Linux32 + # Main. + 'V8 Fuzzer': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'jsfunfuzz'}, + ], + }, + 'V8 Linux': { + 'swarming_dimensions': { + 'cpu': 'x86-64-avx2', + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'gcmole'}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'optimize_for_size'}, + {'name': 'test262_variants', 'shards': 2}, + {'name': 'test262_variants', 'variant': 'extra'}, + {'name': 'v8initializers'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'suffix': 'isolates', 'test_args': ['--isolates']}, + {'name': 'v8testing', 'variant': 'extra'}, + # Nosse3. + { + 'name': 'mozilla', + 'suffix': 'nosse3', + 'test_args': ['--extra-flags', '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx'] + }, + { + 'name': 'v8testing', + 'suffix': 'nosse3', + 'test_args': ['--extra-flags', '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx'] + }, + # Nosse4. + { + 'name': 'mozilla', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'] + }, + { + 'name': 'v8testing', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'] + }, + ], + }, + 'V8 Linux - arm64 - sim - MSAN': { + 'tests': [ + {'name': 'test262', 'shards': 3}, + {'name': 'v8testing', 'shards': 4}, + ], + }, 'V8 Linux - debug': { + 'swarming_dimensions': { + 'cpu': 'x86-64-avx2', + }, 'tests': [ + {'name': 'benchmarks'}, {'name': 'benchmarks', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'benchmarks', 'variant': 'extra'}, {'name': 'd8testing', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, {'name': 'mozilla', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'optimize_for_size'}, + {'name': 'test262_variants', 'shards': 6}, {'name': 'test262_variants', 'variant': 'code_serializer', 'shards': 1}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing', 'shards': 3}, + { + 'name': 'v8testing', + 'suffix': 'isolates', + 'test_args': ['--isolates'], + 'shards': 4 + }, + {'name': 'v8testing', 'variant': 'extra'}, + # Nosse3. + { + 'name': 'mozilla', + 'suffix': 'nosse3', + 'test_args': ['--extra-flags', '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx'] + }, + { + 'name': 'test262', + 'suffix': 'nosse3', + 'test_args': ['--extra-flags', '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx'] + }, + { + 'name': 'v8testing', + 'suffix': 'nosse3', + 'test_args': ['--extra-flags', '--noenable-sse3 --noenable-ssse3 --noenable-sse4-1 --noenable-avx'], + 'shards': 3 + }, + # Nosse4. + { + 'name': 'mozilla', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'] + }, + { + 'name': 'test262', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'] + }, + { + 'name': 'v8testing', + 'suffix': 'nosse4', + 'test_args': ['--extra-flags', '--noenable-sse4-1 --noenable-avx'], + 'shards': 3 + }, + ], + }, + 'V8 Linux - noembed': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Linux - noembed - debug': { + 'tests': [ + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 Linux - full debug': { + 'tests': [ + {'name': 'v8testing', 'variant': 'default'}, ], }, 'V8 Linux - gc stress': { 'tests': [ - {'name': 'mjsunit', 'variant': 'slow_path', 'shards': 2}, + { + 'name': 'd8testing', + 'test_args': ['--gc-stress'], + 'shards': 5, + }, + { + 'name': 'mjsunit', + 'variant': 'slow_path', + 'test_args': ['--gc-stress'], + 'shards': 2, + }, + ], + }, + 'V8 Linux - interpreted regexp': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Linux - noi18n - debug': { + 'tests': [ + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262', 'variant': 'default'}, + {'name': 'v8testing', 'variant': 'default'}, + ], + }, + 'V8 Linux - nosnap': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262', 'variant': 'default', 'shards': 2}, + {'name': 'v8testing', 'variant': 'default', 'shards': 3}, + ], + }, + 'V8 Linux - nosnap - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 12}, + ], + }, + 'V8 Linux - predictable': { + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'd8testing'}, + {'name': 'mozilla'}, + ], + }, + 'V8 Linux - presubmit': { + 'tests': [ + {'name': 'presubmit'}, + ], + }, + 'V8 Linux - shared': { + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Linux - verify csa': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Linux gcc 4.8': { + 'tests': [ + {'name': 'v8testing'}, ], }, - ############################################################################## - # Linux64 'V8 Linux64': { + 'swarming_dimensions': { + 'cpu': 'x86-64-avx2', + }, 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'optimize_for_size'}, + {'name': 'test262_variants', 'shards': 2}, + {'name': 'test262_variants', 'variant': 'extra'}, + {'name': 'v8initializers'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, + # Noavx. + { + 'name': 'mozilla', + 'suffix': 'noavx', + 'test_args': ['--extra-flags', '--noenable-avx'] + }, + { + 'name': 'test262', + 'suffix': 'noavx', + 'test_args': ['--extra-flags', '--noenable-avx'] + }, + { + 'name': 'v8testing', + 'suffix': 'noavx', + 'test_args': ['--extra-flags', '--noenable-avx'] + }, + ], + }, + 'V8 Linux64 - cfi': { + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'mozilla'}, + {'name': 'optimize_for_size'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Linux64 - custom snapshot - debug': { + 'tests': [ + {'name': 'mjsunit', 'test_args': ['--no-harness']}, ], }, 'V8 Linux64 - debug': { + 'swarming_dimensions': { + 'cpu': 'x86-64-avx2', + }, 'tests': [ + {'name': 'benchmarks'}, + {'name': 'benchmarks', 'variant': 'extra'}, + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'mozilla', 'variant': 'extra'}, + {'name': 'optimize_for_size'}, + {'name': 'test262_variants', 'shards': 5}, + {'name': 'test262_variants', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing', 'shards': 2}, + {'name': 'v8testing', 'variant': 'extra'}, {'name': 'v8testing', 'variant': 'minor_mc', 'shards': 1}, {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, + # Noavx. + { + 'name': 'mozilla', + 'suffix': 'noavx', + 'test_args': ['--extra-flags', '--noenable-avx'] + }, + { + 'name': 'test262', + 'suffix': 'noavx', + 'test_args': ['--extra-flags', '--noenable-avx'] + }, + { + 'name': 'v8testing', + 'suffix': 'noavx', + 'test_args': ['--extra-flags', '--noenable-avx'], + 'shards': 2 + }, ], }, 'V8 Linux64 - debug - fyi': { 'tests': [ # Infra staging. - {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 3}, {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 2}, # Stress sampling. {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, @@ -431,20 +803,935 @@ }, 'V8 Linux64 - fyi': { 'tests': [ - {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, - {'name': 'test262_variants', 'variant': 'infra_staging', 'shards': 2}, + # Infra staging. {'name': 'v8testing', 'variant': 'infra_staging', 'shards': 1}, + # Stress sampling. + {'name': 'mjsunit', 'variant': 'stress_sampling', 'shards': 1}, {'name': 'webkit', 'variant': 'stress_sampling', 'shards': 1}, ], }, + 'V8 Linux64 - gcov coverage': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Linux64 - internal snapshot': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Linux64 - verify csa': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, 'V8 Linux64 ASAN': { 'tests': [ + {'name': 'test262_variants', 'shards': 5}, + {'name': 'v8testing', 'shards': 2}, + {'name': 'v8testing', 'variant': 'extra'}, {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, ], }, + 'V8 Linux64 GC Stress - custom snapshot': { + 'tests': [ + { + 'name': 'mjsunit', + 'test_args': ['--gc-stress', '--no-harness'], + 'shards': 3, + }, + ], + }, 'V8 Linux64 TSAN': { 'tests': [ + {'name': 'benchmarks'}, + {'name': 'mozilla'}, + {'name': 'test262', 'shards': 3}, + {'name': 'v8testing', 'shards': 5}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, {'name': 'v8testing', 'variant': 'slow_path', 'shards': 1}, ], }, + 'V8 Linux64 TSAN - concurrent marking': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + { + 'name': 'benchmarks', + 'test_args': ['--extra-flags=--stress-incremental-marking'], + }, + { + 'name': 'mozilla', + 'test_args': ['--extra-flags=--stress-incremental-marking'], + }, + { + 'name': 'test262', + 'test_args': ['--extra-flags=--stress-incremental-marking'], + 'shards': 4, + }, + { + 'name': 'v8testing', + 'test_args': ['--extra-flags=--stress-incremental-marking'], + 'shards': 4, + }, + ], + }, + 'V8 Linux64 TSAN - isolates': { + 'tests': [ + {'name': 'v8testing', 'test_args': ['--isolates'], 'shards': 5}, + ], + }, + 'V8 Linux64 UBSan': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Linux64 UBSanVptr': { + 'tests': [ + {'name': 'v8testing'}, + ], + }, + 'V8 Mac64': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + 'V8 Mac64 - debug': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + 'V8 Mac64 ASAN': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 5}, + ], + }, + 'V8 Mac64 GC Stress': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Mac-10.13', + }, + 'tests': [ + {'name': 'd8testing', 'test_args': ['--gc-stress'], 'shards': 4}, + ], + }, + 'V8 Win32': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Win32 - debug': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 5}, + ], + }, + 'V8 Win32 - nosnap - shared': { + 'swarming_dimensions': { + 'cpu': 'x86-64', + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 2}, + ], + }, + 'V8 Win64': { + 'swarming_dimensions': { + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + 'V8 Win64 - debug': { + 'swarming_dimensions': { + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 4}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + ], + }, + 'V8 Win64 - msvc': { + 'swarming_dimensions': { + 'os': 'Windows-7-SP1', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Win64 ASAN': { + 'swarming_dimensions': { + 'os': 'Windows-10', + }, + 'tests': [ + {'name': 'v8testing', 'shards': 5}, + ], + }, + ############################################################################## + # Ports. + 'V8 Android Arm64 - N5X': { + 'swarming_dimensions': { + 'device_os': 'MMB29Q', + 'device_type': 'bullhead', + 'os': 'Android', + }, + 'tests': [ + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262', 'variant': 'default', 'shards': 5}, + {'name': 'v8testing', 'variant': 'default', 'shards': 3}, + ], + }, + 'V8 Arm': { + 'swarming_dimensions': { + 'cores': '2', + 'cpu': 'armv7l', + }, + 'swarming_task_attrs': { + 'expiration': 21600, + 'hard_timeout': 5400, + }, + 'tests': [ + {'name': 'benchmarks'}, + {'name': 'optimize_for_size'}, + {'name': 'v8testing', 'shards': 2}, + # Odroid. + { + 'name': 'benchmarks', + 'suffix': 'ODROID', + 'swarming_dimensions': { + 'cores': '8', + 'os': 'Ubuntu-16.04', + 'cpu': 'armv7l-32-ODROID-XU4', + } + }, + { + 'name': 'optimize_for_size', + 'suffix': 'ODROID', + 'swarming_dimensions': { + 'cores': '8', + 'os': 'Ubuntu-16.04', + 'cpu': 'armv7l-32-ODROID-XU4', + } + }, + { + 'name': 'v8testing', + 'suffix': 'ODROID', + 'shards': 2, + 'swarming_dimensions': { + 'cores': '8', + 'os': 'Ubuntu-16.04', + 'cpu': 'armv7l-32-ODROID-XU4', + } + }, + ], + }, + 'V8 Arm - debug': { + 'swarming_dimensions': { + 'cores': '2', + 'cpu': 'armv7l', + }, + 'swarming_task_attrs': { + 'expiration': 21600, + 'hard_timeout': 3600, + }, + 'tests': [ + { + 'name': 'optimize_for_size', + 'variant': 'default', + 'test_args': ['--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 2 + }, + { + 'name': 'v8testing', + 'variant': 'default', + 'test_args': ['--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 3 + }, + # Odroid. + { + 'name': 'optimize_for_size', + 'suffix': 'ODROID', + 'variant': 'default', + 'test_args': ['--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 2, + 'swarming_dimensions': { + 'cores': '8', + 'os': 'Ubuntu-16.04', + 'cpu': 'armv7l-32-ODROID-XU4', + } + }, + { + 'name': 'v8testing', + 'suffix': 'ODROID', + 'variant': 'default', + 'test_args': ['--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 3, + 'swarming_dimensions': { + 'cores': '8', + 'os': 'Ubuntu-16.04', + 'cpu': 'armv7l-32-ODROID-XU4', + } + }, + ], + }, + 'V8 Arm GC Stress': { + 'swarming_dimensions': { + 'cores': '2', + 'cpu': 'armv7l', + }, + 'swarming_task_attrs': { + 'expiration': 21600, + 'hard_timeout': 7200, + }, + 'tests': [ + { + 'name': 'd8testing', + 'variant': 'default', + 'test_args': ['--gc-stress', '--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 3 + }, + { + 'name': 'd8testing', + 'suffix': 'ODROID', + 'variant': 'default', + 'test_args': ['--gc-stress', '--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 3, + 'swarming_dimensions': { + 'cores': '8', + 'os': 'Ubuntu-16.04', + 'cpu': 'armv7l-32-ODROID-XU4', + } + }, + ], + }, + 'V8 Linux - arm - sim': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 4}, + {'name': 'v8testing', 'variant': 'extra'}, + # Armv8-a. + { + 'name': 'mozilla', + 'suffix': 'armv8-a', + 'test_args': ['--extra-flags', '--enable-armv8'] + }, + { + 'name': 'test262', + 'suffix': 'armv8-a', + 'test_args': ['--extra-flags', '--enable-armv8'] + }, + { + 'name': 'v8testing', + 'suffix': 'armv8-a', + 'test_args': ['--extra-flags', '--enable-armv8'], + 'shards': 4 + }, + # Novfp3. + {'name': 'mozilla', 'suffix': 'novfp3', 'test_args': ['--novfp3']}, + {'name': 'test262', 'suffix': 'novfp3', 'test_args': ['--novfp3']}, + { + 'name': 'v8testing', + 'suffix': 'novfp3', + 'test_args': ['--novfp3'], + 'shards': 4 + }, + ], + }, + 'V8 Linux - arm - sim - debug': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 7}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, + # Armv8-a. + { + 'name': 'mozilla', + 'suffix': 'armv8-a', + 'test_args': ['--extra-flags', '--enable-armv8'] + }, + { + 'name': 'test262', + 'suffix': 'armv8-a', + 'test_args': ['--extra-flags', '--enable-armv8'] + }, + { + 'name': 'v8testing', + 'suffix': 'armv8-a', + 'test_args': ['--extra-flags', '--enable-armv8'], + 'shards': 7 + }, + # Novfp3. + { + 'name': 'mozilla', + 'suffix': 'novfp3', + 'variant': 'default', + 'test_args': ['--novfp3'] + }, + { + 'name': 'test262', + 'suffix': 'novfp3', + 'variant': 'default', + 'test_args': ['--novfp3'] + }, + { + 'name': 'v8testing', + 'suffix': 'novfp3', + 'variant': 'default', + 'test_args': ['--novfp3'], + 'shards': 7 + }, + ], + }, + 'V8 Linux - arm - sim - lite': { + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 2}, + ], + }, + 'V8 Linux - arm - sim - lite - debug': { + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 4}, + ], + }, + 'V8 Linux - arm64 - sim': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'variant': 'extra'}, + ], + }, + 'V8 Linux - arm64 - sim - debug': { + 'tests': [ + {'name': 'mjsunit_sp_frame_access'}, + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 10}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 6}, + ], + }, + 'V8 Linux - arm64 - sim - gc stress': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 7200, + 'priority': 35, + }, + 'tests': [ + { + 'name': 'd8testing', + 'test_args': ['--gc-stress', '--extra-flags=--verify-heap-skip-remembered-set'], + 'shards': 5 + }, + ], + }, + 'V8 Linux - mips64el - sim': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 4}, + ], + }, + 'V8 Linux - mipsel - sim': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 4}, + ], + }, + 'V8 Linux - ppc64 - sim': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 Linux - s390x - sim': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 Mips - big endian - nosnap': { + 'swarming_dimensions': { + 'cpu': 'mips-32', + 'os': 'Debian-8.7', + }, + 'swarming_task_attrs': { + 'expiration': 18000, + 'hard_timeout': 18000, + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default', 'shards': 2}, + ], + }, + ############################################################################## + # Clusterfuzz. + 'V8 NumFuzz': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + { + 'name': 'numfuzz', + 'suffix': 'deopt', + 'test_args': ['--total-timeout-sec=2100', '--stress-deopt=1'] + }, + ], + }, + 'V8 NumFuzz - TSAN': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'd8testing_random_gc', 'shards': 2}, + { + 'name': 'numfuzz', + 'suffix': 'marking', + 'test_args': ['--total-timeout-sec=2100', '--stress-marking=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'endurance', + 'test_args': [ + '--total-timeout-sec=1200', + '--combine-tests', + '--combine-min=10', + '--combine-max=30', + '--stress-delay-tasks=1', + '--stress-compaction=2', + '--stress-gc=6', + '--stress-marking=6', + '--stress-scavenge=4', + '--stress-thread-pool-size=1', + ], + }, + { + 'name': 'numfuzz', + 'suffix': 'delay', + 'test_args': ['--total-timeout-sec=2100', '--stress-delay-tasks=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'threads', + 'test_args': ['--total-timeout-sec=2100', '--stress-thread-pool-size=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'combined', + 'test_args': [ + '--total-timeout-sec=2100', + '--stress-delay-tasks=4', + '--stress-deopt=2', + '--stress-compaction=2', + '--stress-gc=4', + '--stress-marking=4', + '--stress-scavenge=4', + '--stress-thread-pool-size=2', + ], + 'shards': 4 + }, + { + 'name': 'numfuzz', + 'suffix': 'scavenge', + 'test_args': ['--total-timeout-sec=2100', '--stress-scavenge=1'] + }, + ], + }, + 'V8 NumFuzz - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + {'name': 'd8testing_random_gc'}, + { + 'name': 'numfuzz', + 'suffix': 'marking', + 'test_args': ['--total-timeout-sec=2100', '--stress-marking=1'], + 'shards': 2 + }, + { + 'name': 'numfuzz', + 'suffix': 'endurance', + 'test_args': [ + '--total-timeout-sec=1200', + '--combine-tests', + '--combine-min=30', + '--combine-max=50', + '--stress-delay-tasks=1', + '--stress-deopt=2', + '--stress-compaction=2', + '--stress-gc=6', + '--stress-marking=6', + '--stress-scavenge=4', + '--stress-thread-pool-size=1', + ], + }, + { + 'name': 'numfuzz', + 'suffix': 'delay', + 'test_args': ['--total-timeout-sec=2100', '--stress-delay-tasks=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'threads', + 'test_args': ['--total-timeout-sec=2100', '--stress-thread-pool-size=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'combined', + 'test_args': [ + '--total-timeout-sec=2100', + '--stress-delay-tasks=4', + '--stress-deopt=2', + '--stress-compaction=2', + '--stress-gc=4', + '--stress-marking=4', + '--stress-scavenge=4', + '--stress-thread-pool-size=2', + ], + 'shards': 3 + }, + { + 'name': 'numfuzz', + 'suffix': 'scavenge', + 'test_args': ['--total-timeout-sec=2100', '--stress-scavenge=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'deopt', + 'test_args': ['--total-timeout-sec=2100', '--stress-deopt=1'], + 'shards': 2 + }, + ], + }, + 'V8 NumFuzz - nosnap': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + { + 'name': 'numfuzz', + 'suffix': 'interrupt-budget', + 'test_args': [ + '--total-timeout-sec=2100', + '--stress-interrupt-budget=10', + '--stress-deopt=5', + ] + }, + ], + }, + 'V8 NumFuzz - nosnap debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 3600, + 'priority': 35, + }, + 'tests': [ + { + 'name': 'numfuzz', + 'suffix': 'interrupt-budget', + 'test_args': [ + '--total-timeout-sec=2100', + '--stress-interrupt-budget=10', + '--stress-deopt=5', + ] + }, + ], + }, + ############################################################################## + # Clusterfuzz. + 'V8 Linux - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'presubmit'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Linux - beta branch - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'presubmit'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 Linux - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'presubmit'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Linux - stable branch - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'presubmit'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 Linux64 - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Linux64 - beta branch - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 Linux64 - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing'}, + ], + }, + 'V8 Linux64 - stable branch - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 arm - sim - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 2}, + ], + }, + 'V8 arm - sim - beta branch - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 arm - sim - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 2}, + ], + }, + 'V8 arm - sim - stable branch - debug': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262'}, + {'name': 'v8testing', 'shards': 3}, + ], + }, + 'V8 mips64el - sim - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'unittests'}, + ], + }, + 'V8 mips64el - sim - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'unittests'}, + ], + }, + 'V8 mipsel - sim - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing', 'shards': 4}, + ], + }, + 'V8 mipsel - sim - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'v8testing', 'shards': 4}, + ], + }, + 'V8 ppc64 - sim - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'unittests'}, + ], + }, + 'V8 ppc64 - sim - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'unittests'}, + ], + }, + 'V8 s390x - sim - beta branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'unittests'}, + ], + }, + 'V8 s390x - sim - stable branch': { + 'swarming_task_attrs': { + 'expiration': 14400, + 'hard_timeout': 5400, + 'priority': 35, + }, + 'tests': [ + {'name': 'unittests'}, + ], + }, } diff --git a/deps/v8/src/debug/debug-coverage.cc b/deps/v8/src/debug/debug-coverage.cc index a71c9e572b4ed8..f8b716f7c910e9 100644 --- a/deps/v8/src/debug/debug-coverage.cc +++ b/deps/v8/src/debug/debug-coverage.cc @@ -171,6 +171,12 @@ class CoverageBlockIterator final { return function_->blocks[read_index_ + 1]; } + CoverageBlock& GetPreviousBlock() { + DCHECK(IsActive()); + DCHECK_GT(read_index_, 0); + return function_->blocks[read_index_ - 1]; + } + CoverageBlock& GetParent() { DCHECK(IsActive()); return nesting_stack_.back(); @@ -325,6 +331,30 @@ void MergeNestedRanges(CoverageFunction* function) { } } +void FilterAliasedSingletons(CoverageFunction* function) { + CoverageBlockIterator iter(function); + + iter.Next(); // Advance once since we reference the previous block later. + + while (iter.Next()) { + CoverageBlock& previous_block = iter.GetPreviousBlock(); + CoverageBlock& block = iter.GetBlock(); + + bool is_singleton = block.end == kNoSourcePosition; + bool aliases_start = block.start == previous_block.start; + + if (is_singleton && aliases_start) { + // The previous block must have a full range since duplicate singletons + // have already been merged. + DCHECK_NE(previous_block.end, kNoSourcePosition); + // Likewise, the next block must have another start position since + // singletons are sorted to the end. + DCHECK_IMPLIES(iter.HasNext(), iter.GetNextBlock().start != block.start); + iter.DeleteBlock(); + } + } +} + void FilterUncoveredRanges(CoverageFunction* function) { CoverageBlockIterator iter(function); @@ -397,6 +427,15 @@ void CollectBlockCoverage(CoverageFunction* function, SharedFunctionInfo* info, // Remove duplicate singleton ranges, keeping the max count. MergeDuplicateSingletons(function); + // Remove singleton ranges with the same start position as a full range and + // throw away their counts. + // Singleton ranges are only intended to split existing full ranges and should + // never expand into a full range. Consider 'if (cond) { ... } else { ... }' + // as a problematic example; if the then-block produces a continuation + // singleton, it would incorrectly expand into the else range. + // For more context, see https://crbug.com/v8/8237. + FilterAliasedSingletons(function); + // Rewrite all singletons (created e.g. by continuations and unconditional // control flow) to ranges. RewritePositionSingletonsToRanges(function); diff --git a/deps/v8/src/debug/debug-evaluate.cc b/deps/v8/src/debug/debug-evaluate.cc index 5466ca050b3efb..583b41f1b2879c 100644 --- a/deps/v8/src/debug/debug-evaluate.cc +++ b/deps/v8/src/debug/debug-evaluate.cc @@ -995,12 +995,7 @@ void DebugEvaluate::ApplySideEffectChecks( for (interpreter::BytecodeArrayIterator it(bytecode_array); !it.done(); it.Advance()) { interpreter::Bytecode bytecode = it.current_bytecode(); - if (BytecodeRequiresRuntimeCheck(bytecode)) { - interpreter::Bytecode debugbreak = - interpreter::Bytecodes::GetDebugBreak(bytecode); - bytecode_array->set(it.current_offset(), - interpreter::Bytecodes::ToByte(debugbreak)); - } + if (BytecodeRequiresRuntimeCheck(bytecode)) it.ApplyDebugBreak(); } } diff --git a/deps/v8/src/debug/debug.cc b/deps/v8/src/debug/debug.cc index a7114b14347c6b..3a3a48b699a017 100644 --- a/deps/v8/src/debug/debug.cc +++ b/deps/v8/src/debug/debug.cc @@ -279,15 +279,12 @@ void BreakIterator::SkipToPosition(int position) { void BreakIterator::SetDebugBreak() { DebugBreakType debug_break_type = GetDebugBreakType(); if (debug_break_type == DEBUGGER_STATEMENT) return; + HandleScope scope(isolate()); DCHECK(debug_break_type >= DEBUG_BREAK_SLOT); - BytecodeArray* bytecode_array = debug_info_->DebugBytecodeArray(); - interpreter::Bytecode bytecode = - interpreter::Bytecodes::FromByte(bytecode_array->get(code_offset())); - if (interpreter::Bytecodes::IsDebugBreak(bytecode)) return; - interpreter::Bytecode debugbreak = - interpreter::Bytecodes::GetDebugBreak(bytecode); - bytecode_array->set(code_offset(), - interpreter::Bytecodes::ToByte(debugbreak)); + Handle bytecode_array(debug_info_->DebugBytecodeArray(), + isolate()); + interpreter::BytecodeArrayAccessor(bytecode_array, code_offset()) + .ApplyDebugBreak(); } void BreakIterator::ClearDebugBreak() { @@ -2127,6 +2124,8 @@ void Debug::ClearSideEffectChecks(Handle debug_info) { Handle original(debug_info->OriginalBytecodeArray(), isolate_); for (interpreter::BytecodeArrayIterator it(debug_bytecode); !it.done(); it.Advance()) { + // Restore from original. This may copy only the scaling prefix, which is + // correct, since we patch scaling prefixes to debug breaks if exists. debug_bytecode->set(it.current_offset(), original->get(it.current_offset())); } diff --git a/deps/v8/src/interpreter/bytecode-array-accessor.cc b/deps/v8/src/interpreter/bytecode-array-accessor.cc index ef6bdd30a171f0..3ec2cc595b170f 100644 --- a/deps/v8/src/interpreter/bytecode-array-accessor.cc +++ b/deps/v8/src/interpreter/bytecode-array-accessor.cc @@ -28,6 +28,19 @@ void BytecodeArrayAccessor::SetOffset(int offset) { UpdateOperandScale(); } +void BytecodeArrayAccessor::ApplyDebugBreak() { + // Get the raw bytecode from the bytecode array. This may give us a + // scaling prefix, which we can patch with the matching debug-break + // variant. + interpreter::Bytecode bytecode = + interpreter::Bytecodes::FromByte(bytecode_array_->get(bytecode_offset_)); + if (interpreter::Bytecodes::IsDebugBreak(bytecode)) return; + interpreter::Bytecode debugbreak = + interpreter::Bytecodes::GetDebugBreak(bytecode); + bytecode_array_->set(bytecode_offset_, + interpreter::Bytecodes::ToByte(debugbreak)); +} + void BytecodeArrayAccessor::UpdateOperandScale() { if (OffsetInBounds()) { uint8_t current_byte = bytecode_array()->get(bytecode_offset_); diff --git a/deps/v8/src/interpreter/bytecode-array-accessor.h b/deps/v8/src/interpreter/bytecode-array-accessor.h index 443929aefe075a..e36eed8ade96ae 100644 --- a/deps/v8/src/interpreter/bytecode-array-accessor.h +++ b/deps/v8/src/interpreter/bytecode-array-accessor.h @@ -70,6 +70,8 @@ class V8_EXPORT_PRIVATE BytecodeArrayAccessor { void SetOffset(int offset); + void ApplyDebugBreak(); + Bytecode current_bytecode() const; int current_bytecode_size() const; int current_offset() const { return bytecode_offset_; } diff --git a/deps/v8/src/value-serializer.cc b/deps/v8/src/value-serializer.cc index 26ab746e8cc626..0633d19a2ae559 100644 --- a/deps/v8/src/value-serializer.cc +++ b/deps/v8/src/value-serializer.cc @@ -517,12 +517,14 @@ Maybe ValueSerializer::WriteJSReceiver(Handle receiver) { case JS_TYPED_ARRAY_TYPE: case JS_DATA_VIEW_TYPE: return WriteJSArrayBufferView(JSArrayBufferView::cast(*receiver)); - case WASM_MODULE_TYPE: - if (!FLAG_wasm_disable_structured_cloning) { + case WASM_MODULE_TYPE: { + auto enabled_features = wasm::WasmFeaturesFromIsolate(isolate_); + if (!FLAG_wasm_disable_structured_cloning || enabled_features.threads) { // Only write WebAssembly modules if not disabled by a flag. return WriteWasmModule(Handle::cast(receiver)); } break; + } case WASM_MEMORY_TYPE: { auto enabled_features = wasm::WasmFeaturesFromIsolate(isolate_); if (enabled_features.threads) { @@ -1753,7 +1755,9 @@ MaybeHandle ValueDeserializer::ReadJSArrayBufferView( } MaybeHandle ValueDeserializer::ReadWasmModuleTransfer() { - if (FLAG_wasm_disable_structured_cloning || expect_inline_wasm()) { + auto enabled_features = wasm::WasmFeaturesFromIsolate(isolate_); + if ((FLAG_wasm_disable_structured_cloning && !enabled_features.threads) || + expect_inline_wasm()) { return MaybeHandle(); } @@ -1775,7 +1779,9 @@ MaybeHandle ValueDeserializer::ReadWasmModuleTransfer() { } MaybeHandle ValueDeserializer::ReadWasmModule() { - if (FLAG_wasm_disable_structured_cloning || !expect_inline_wasm()) { + auto enabled_features = wasm::WasmFeaturesFromIsolate(isolate_); + if ((FLAG_wasm_disable_structured_cloning && !enabled_features.threads) || + !expect_inline_wasm()) { return MaybeHandle(); } diff --git a/deps/v8/test/debugger/regress/regress-crbug-882664.js b/deps/v8/test/debugger/regress/regress-crbug-882664.js new file mode 100644 index 00000000000000..399cfba9e27c48 --- /dev/null +++ b/deps/v8/test/debugger/regress/regress-crbug-882664.js @@ -0,0 +1,41 @@ +// Copyright 2018 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +function provoke_scaling_prefix() { + var a = [0]; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; a[0]++; + return a; +} + +Debug = debug.Debug; + +function success(expectation, source) { + const result = Debug.evaluateGlobal(source, true).value(); + assertEquals(expectation, result); +} + +success([216], "provoke_scaling_prefix()"); diff --git a/deps/v8/test/mjsunit/code-coverage-block.js b/deps/v8/test/mjsunit/code-coverage-block.js index 2ecd1b0d1e15dd..8cbb2969f7d050 100644 --- a/deps/v8/test/mjsunit/code-coverage-block.js +++ b/deps/v8/test/mjsunit/code-coverage-block.js @@ -847,7 +847,49 @@ Util.escape("foo.bar"); // 0400 [{"start":0,"end":449,"count":1}, {"start":64,"end":351,"count":1}, {"start":112,"end":203,"count":0}, - {"start":303,"end":350,"count":0}] + {"start":268,"end":350,"count":0}] +); + +TestCoverage( +"https://crbug.com/v8/8237", +` +!function() { // 0000 + if (true) // 0050 + while (false) return; else nop(); // 0100 +}(); // 0150 +!function() { // 0200 + if (true) l0: { break l0; } else // 0250 + if (nop()) { } // 0300 +}(); // 0350 +!function() { // 0400 + if (true) { if (false) { return; } // 0450 + } else if (nop()) { } }(); // 0500 +!function(){ // 0550 + if(true)while(false)return;else nop() // 0600 +}(); // 0650 +!function(){ // 0700 + if(true) l0:{break l0}else if (nop()){} // 0750 +}(); // 0800 +!function(){ // 0850 + if(true){if(false){return}}else // 0900 + if(nop()){} // 0950 +}(); // 1000 +`, +[{"start":0,"end":1049,"count":1}, + {"start":1,"end":151,"count":1}, + {"start":118,"end":137,"count":0}, + {"start":201,"end":351,"count":1}, + {"start":277,"end":318,"count":0}, + {"start":401,"end":525,"count":1}, + {"start":475,"end":486,"count":0}, + {"start":503,"end":523,"count":0}, + {"start":551,"end":651,"count":1}, + {"start":622,"end":639,"count":0}, + {"start":701,"end":801,"count":1}, + {"start":773,"end":791,"count":0}, + {"start":851,"end":1001,"count":1}, + {"start":920,"end":928,"count":0}, + {"start":929,"end":965,"count":0}] ); %DebugToggleBlockCoverage(false);