diff options
author | Michaël Zasso <targos@protonmail.com> | 2021-07-14 11:30:07 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2021-07-20 15:24:51 +0200 |
commit | 6cdd310275bb0f8056aa0ae6d95614e9ca5b70c7 (patch) | |
tree | 9ed37b19cd668894854b7f469010f7621e63ef81 /deps/v8/tools | |
parent | c0f10006c82d2d9896a552de98ed146f9542720d (diff) | |
download | node-new-6cdd310275bb0f8056aa0ae6d95614e9ca5b70c7.tar.gz |
deps: update V8 to 9.2.230.21
PR-URL: https://github.com/nodejs/node/pull/38990
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/tools')
61 files changed, 1125 insertions, 1119 deletions
diff --git a/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py b/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py index 4a3d008077..cd729b9cf7 100644 --- a/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py +++ b/deps/v8/tools/clusterfuzz/testdata/baseline/d8.py @@ -5,6 +5,8 @@ # for py2/py3 compatibility from __future__ import print_function +import sys + print(""" 1 v8-foozzie source: name/to/a/file.js @@ -15,3 +17,6 @@ v8-foozzie source: name/to/file.js 3 unknown """) + +if '--bad-flag' in sys.argv: + print('bad behavior') diff --git a/deps/v8/tools/clusterfuzz/testdata/build3/d8.py b/deps/v8/tools/clusterfuzz/testdata/build3/d8.py index 824b222485..a48a591d1e 100644 --- a/deps/v8/tools/clusterfuzz/testdata/build3/d8.py +++ b/deps/v8/tools/clusterfuzz/testdata/build3/d8.py @@ -5,6 +5,8 @@ # for py2/py3 compatibility from __future__ import print_function +import sys + print(""" 1 v8-foozzie source: name/to/a/file.js @@ -15,3 +17,8 @@ v8-foozzie source: name/to/file.js 3 unknown """) + +if '--bad-flag' in sys.argv: + print('bad behavior') +if '--very-bad-flag' in sys.argv: + print('very bad behavior') diff --git a/deps/v8/tools/clusterfuzz/testdata/failure_output_arch.txt b/deps/v8/tools/clusterfuzz/testdata/failure_output_arch.txt new file mode 100644 index 0000000000..bf72649c3e --- /dev/null +++ b/deps/v8/tools/clusterfuzz/testdata/failure_output_arch.txt @@ -0,0 +1,50 @@ +# +# V8 correctness failure +# V8 correctness configs: x64,ignition:x64,ignition_turbo +# V8 correctness sources: f60 +# V8 correctness suppression: +# +# CHECK +# +# Compared x64,ignition with x64,ignition_turbo +# +# Flags of x64,ignition: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --turbo-filter=~ --noopt --liftoff --no-wasm-tier-up +# Flags of x64,ignition_turbo: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --bad-flag +# +# Difference: ++ bad behavior +# +# Source file: +name/to/file.js +# +### Start of configuration x64,ignition: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird error + ^ +3 +unknown + + +### End of configuration x64,ignition +# +### Start of configuration x64,ignition_turbo: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird error + ^ +3 +unknown + +bad behavior + +### End of configuration x64,ignition_turbo + diff --git a/deps/v8/tools/clusterfuzz/testdata/failure_output_second.txt b/deps/v8/tools/clusterfuzz/testdata/failure_output_second.txt new file mode 100644 index 0000000000..030168884f --- /dev/null +++ b/deps/v8/tools/clusterfuzz/testdata/failure_output_second.txt @@ -0,0 +1,50 @@ +# +# V8 correctness failure +# V8 correctness configs: x64,ignition:ia32,ignition_turbo +# V8 correctness sources: f60 +# V8 correctness suppression: +# +# CHECK +# +# Compared x64,ignition with ia32,ignition_turbo +# +# Flags of x64,ignition: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --turbo-filter=~ --noopt --liftoff --no-wasm-tier-up +# Flags of ia32,ignition_turbo: +--correctness-fuzzer-suppressions --expose-gc --fuzzing --allow-natives-for-differential-fuzzing --invoke-weak-callbacks --omit-quit --es-staging --wasm-staging --no-wasm-async-compilation --suppress-asm-messages --random-seed 12345 --very-bad-flag +# +# Difference: ++ very bad behavior +# +# Source file: +name/to/file.js +# +### Start of configuration x64,ignition: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird error + ^ +3 +unknown + + +### End of configuration x64,ignition +# +### Start of configuration ia32,ignition_turbo: + +1 +v8-foozzie source: name/to/a/file.js +2 +v8-foozzie source: name/to/file.js + weird other error +^ +3 +unknown + +very bad behavior + +### End of configuration ia32,ignition_turbo + diff --git a/deps/v8/tools/clusterfuzz/v8_foozzie.py b/deps/v8/tools/clusterfuzz/v8_foozzie.py index 9f3810c9f5..52b7954093 100755 --- a/deps/v8/tools/clusterfuzz/v8_foozzie.py +++ b/deps/v8/tools/clusterfuzz/v8_foozzie.py @@ -211,14 +211,14 @@ class ExecutionArgumentsConfig(object): 'default: bundled in the directory of this script', default=DEFAULT_D8) - def make_options(self, options, default_config=None): + def make_options(self, options, default_config=None, default_d8=None): def get(name): return getattr(options, '%s_%s' % (self.label, name)) config = default_config or get('config') assert config in CONFIGS - d8 = get('d8') + d8 = default_d8 or get('d8') if not os.path.isabs(d8): d8 = os.path.join(BASE_PATH, d8) assert os.path.exists(d8) @@ -239,6 +239,13 @@ class ExecutionConfig(object): flags = getattr(options, label).flags self.command = Command(options, label, d8, flags) + # Options for a fallback configuration only exist when comparing + # different architectures. + fallback_label = label + '_fallback' + self.fallback = None + if getattr(options, fallback_label, None): + self.fallback = ExecutionConfig(options, fallback_label) + @property def flags(self): return self.command.flags @@ -278,7 +285,15 @@ def parse_args(): options.first = first_config_arguments.make_options(options) options.second = second_config_arguments.make_options(options) options.default = second_config_arguments.make_options( - options, DEFAULT_CONFIG) + options, default_config=DEFAULT_CONFIG) + + # Use fallback configurations only on diffrent architectures. In this + # case we are going to re-test against the first architecture. + if options.first.arch != options.second.arch: + options.second_fallback = second_config_arguments.make_options( + options, default_d8=options.first.d8) + options.default_fallback = second_config_arguments.make_options( + options, default_config=DEFAULT_CONFIG, default_d8=options.first.d8) # Ensure we make a valid comparison. if (options.first.d8 == options.second.d8 and @@ -315,10 +330,12 @@ def fail_bailout(output, ignore_by_output_fun): def format_difference( - source_key, first_config, second_config, - first_config_output, second_config_output, difference, source=None): + first_config, second_config, + first_config_output, second_config_output, + difference, source_key=None, source=None): # The first three entries will be parsed by clusterfuzz. Format changes # will require changes on the clusterfuzz side. + source_key = source_key or cluster_failures(source) first_config_label = '%s,%s' % (first_config.arch, first_config.config) second_config_label = '%s,%s' % (second_config.arch, second_config.config) source_file_text = SOURCE_FILE_TEMPLATE % source if source else '' @@ -376,6 +393,29 @@ def cluster_failures(source, known_failures=None): return long_key[:ORIGINAL_SOURCE_HASH_LENGTH] +class RepeatedRuns(object): + """Helper class for storing statistical data from repeated runs.""" + def __init__(self, test_case, timeout, verbose): + self.test_case = test_case + self.timeout = timeout + self.verbose = verbose + + # Stores if any run has crashed or was simulated. + self.has_crashed = False + self.simulated = False + + def run(self, config): + comparison_output = config.command.run( + self.test_case, timeout=self.timeout, verbose=self.verbose) + self.has_crashed = self.has_crashed or comparison_output.HasCrashed() + self.simulated = self.simulated or config.is_error_simulation + return comparison_output + + @property + def crash_state(self): + return '_simulated_crash_' if self.simulated else '_unexpected_crash_' + + def run_comparisons(suppress, execution_configs, test_case, timeout, verbose=True, ignore_crashes=True, source_key=None): """Runs different configurations and bails out on output difference. @@ -393,20 +433,15 @@ def run_comparisons(suppress, execution_configs, test_case, timeout, source_key: A fixed source key. If not given, it will be inferred from the output. """ - run_test_case = lambda config: config.command.run( - test_case, timeout=timeout, verbose=verbose) + runner = RepeatedRuns(test_case, timeout, verbose) # Run the baseline configuration. baseline_config = execution_configs[0] - baseline_output = run_test_case(baseline_config) - has_crashed = baseline_output.HasCrashed() - simulated = baseline_config.is_error_simulation + baseline_output = runner.run(baseline_config) # Iterate over the remaining configurations, run and compare. for comparison_config in execution_configs[1:]: - comparison_output = run_test_case(comparison_config) - has_crashed = has_crashed or comparison_output.HasCrashed() - simulated = simulated or comparison_config.is_error_simulation + comparison_output = runner.run(comparison_config) difference, source = suppress.diff(baseline_output, comparison_output) if difference: @@ -416,12 +451,25 @@ def run_comparisons(suppress, execution_configs, test_case, timeout, fail_bailout(baseline_output, suppress.ignore_by_output) fail_bailout(comparison_output, suppress.ignore_by_output) - source_key = source_key or cluster_failures(source) + # Check if a difference also occurs with the fallback configuration and + # give it precedence. E.g. we always prefer x64 differences. + if comparison_config.fallback: + fallback_output = runner.run(comparison_config.fallback) + fallback_difference, fallback_source = suppress.diff( + baseline_output, fallback_output) + if fallback_difference: + fail_bailout(fallback_output, suppress.ignore_by_output) + source = fallback_source + comparison_config = comparison_config.fallback + comparison_output = fallback_output + difference = fallback_difference + raise FailException(format_difference( - source_key, baseline_config, comparison_config, - baseline_output, comparison_output, difference, source)) + baseline_config, comparison_config, + baseline_output, comparison_output, + difference, source_key, source)) - if has_crashed: + if runner.has_crashed: if ignore_crashes: # Show if a crash has happened in one of the runs and no difference was # detected. This is only for the statistics during experiments. @@ -429,9 +477,8 @@ def run_comparisons(suppress, execution_configs, test_case, timeout, else: # Subsume simulated and unexpected crashes (e.g. during smoke tests) # with one failure state. - crash_state = '_simulated_crash_' if simulated else '_unexpected_crash_' raise FailException(FAILURE_HEADER_TEMPLATE % dict( - configs='', source_key='', suppression=crash_state)) + configs='', source_key='', suppression=runner.crash_state)) def main(): @@ -448,7 +495,7 @@ def main(): content_bailout(content, suppress.ignore_by_content) # Prepare the baseline, default and a secondary configuration to compare to. - # The baseline (turbofan) takes precedence as many of the secondary configs + # The default (turbofan) takes precedence as many of the secondary configs # are based on the turbofan config with additional parameters. execution_configs = [ ExecutionConfig(options, 'first'), diff --git a/deps/v8/tools/clusterfuzz/v8_foozzie_test.py b/deps/v8/tools/clusterfuzz/v8_foozzie_test.py index eb8322ce62..a8ba74364b 100755 --- a/deps/v8/tools/clusterfuzz/v8_foozzie_test.py +++ b/deps/v8/tools/clusterfuzz/v8_foozzie_test.py @@ -263,7 +263,7 @@ class SystemTest(unittest.TestCase): Overview of fakes: baseline: Example foozzie output including a syntax error. - build1: Difference to baseline is a stack trace differece expected to + build1: Difference to baseline is a stack trace difference expected to be suppressed. build2: Difference to baseline is a non-suppressed output difference causing the script to fail. @@ -312,6 +312,36 @@ class SystemTest(unittest.TestCase): self.assertIn('v8_mock_archs.js', lines[1]) self.assertIn('v8_mock_archs.js', lines[3]) + def testDifferentArchFailFirst(self): + """Test that we re-test against x64. This tests the path that also fails + on x64 and then reports the error as x64. + """ + with open(os.path.join(TEST_DATA, 'failure_output_arch.txt')) as f: + expected_output = f.read() + # Build 3 simulates x86 and produces a difference on --bad-flag, but + # the baseline build shows the same difference when --bad-flag is passed. + with self.assertRaises(subprocess.CalledProcessError) as ctx: + run_foozzie('build3', '--skip-smoke-tests', + '--second-config-extra-flags=--bad-flag') + e = ctx.exception + self.assertEqual(v8_foozzie.RETURN_FAIL, e.returncode) + self.assertEqual(expected_output, cut_verbose_output(e.output, 3)) + + def testDifferentArchFailSecond(self): + """As above, but we test the path that only fails in the second (ia32) + run and not with x64 and then reports the error as ia32. + """ + with open(os.path.join(TEST_DATA, 'failure_output_second.txt')) as f: + expected_output = f.read() + # Build 3 simulates x86 and produces a difference on --very-bad-flag, + # which the baseline build doesn't. + with self.assertRaises(subprocess.CalledProcessError) as ctx: + run_foozzie('build3', '--skip-smoke-tests', + '--second-config-extra-flags=--very-bad-flag') + e = ctx.exception + self.assertEqual(v8_foozzie.RETURN_FAIL, e.returncode) + self.assertEqual(expected_output, cut_verbose_output(e.output, 3)) + def testJitless(self): """Test that webassembly is mocked out when comparing with jitless.""" stdout = run_foozzie( diff --git a/deps/v8/tools/clusterfuzz/v8_mock.js b/deps/v8/tools/clusterfuzz/v8_mock.js index be7a40b70f..41f1901d5d 100644 --- a/deps/v8/tools/clusterfuzz/v8_mock.js +++ b/deps/v8/tools/clusterfuzz/v8_mock.js @@ -99,7 +99,11 @@ Object.defineProperty( // Mock buffer access in float typed arrays because of varying NaN patterns. (function() { + const origArrayFrom = Array.from; + const origArrayIsArray = Array.isArray; + const origFunctionPrototype = Function.prototype; const origIsNaN = isNaN; + const origIterator = Symbol.iterator; const deNaNify = function(value) { return origIsNaN(value) ? 1 : value; }; const mock = function(type) { @@ -117,17 +121,17 @@ Object.defineProperty( construct: function(target, args) { for (let i = 0; i < args.length; i++) { if (args[i] != null && - typeof args[i][Symbol.iterator] === 'function') { + typeof args[i][origIterator] === 'function') { // Consume iterators. - args[i] = Array.from(args[i]); + args[i] = origArrayFrom(args[i]); } - if (Array.isArray(args[i])) { + if (origArrayIsArray(args[i])) { args[i] = args[i].map(deNaNify); } } const obj = new ( - Function.prototype.bind.call(type, null, ...args)); + origFunctionPrototype.bind.call(type, null, ...args)); return new Proxy(obj, { get: function(x, prop) { if (typeof x[prop] == "function") diff --git a/deps/v8/tools/codemap.mjs b/deps/v8/tools/codemap.mjs index 4986fbd3b0..5beeb3b1b6 100644 --- a/deps/v8/tools/codemap.mjs +++ b/deps/v8/tools/codemap.mjs @@ -252,11 +252,18 @@ export class CodeMap { } /** - * Returns an array of all libraries entries. + * Returns an array of all library entries. */ - getAllLibrariesEntries() { + getAllLibraryEntries() { return this.libraries_.exportValues(); } + + /** + * Returns an array of pairs of all library entries and their addresses. + */ + getAllLibraryEntriesWithAddresses() { + return this.libraries_.exportKeysAndValues(); + } } diff --git a/deps/v8/tools/cppgc/gen_cmake.py b/deps/v8/tools/cppgc/gen_cmake.py index 6fc1bc0b03..90eda1f3bb 100755 --- a/deps/v8/tools/cppgc/gen_cmake.py +++ b/deps/v8/tools/cppgc/gen_cmake.py @@ -244,6 +244,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) option(CPPGC_ENABLE_OBJECT_NAMES "Enable object names in cppgc for debug purposes" OFF) option(CPPGC_ENABLE_CAGED_HEAP "Enable heap reservation of size 4GB, only possible for 64bit archs" OFF) +option(CPPGC_ENABLE_VERIFY_LIVE_BYTES " Enable verification of live bytes in the marking verifier" OFF) option(CPPGC_ENABLE_YOUNG_GENERATION "Enable young generation in cppgc" OFF) set(CPPGC_TARGET_ARCH "x64" CACHE STRING "Target architecture, possible options: x64, x86, arm, arm64, ppc64, s390x, mipsel, mips64el") @@ -433,6 +434,9 @@ endif() if(CPPGC_ENABLE_CAGED_HEAP) target_compile_definitions({target.name} PRIVATE "-DCPPGC_CAGED_HEAP") endif() +if(CPPGC_ENABLE_VERIFY_LIVE_BYTES) + target_compile_definitions({target.name} PRIVATE "-DCPPGC_VERIFY_LIVE_BYTES") +endif() if(CPPGC_ENABLE_YOUNG_GENERATION) target_compile_definitions({target.name} PRIVATE "-DCPPGC_YOUNG_GENERATION") endif()""" diff --git a/deps/v8/tools/debug_helper/get-object-properties.cc b/deps/v8/tools/debug_helper/get-object-properties.cc index 7199bc51d2..b85bbc0590 100644 --- a/deps/v8/tools/debug_helper/get-object-properties.cc +++ b/deps/v8/tools/debug_helper/get-object-properties.cc @@ -316,7 +316,10 @@ class ReadStringVisitor : public TqObjectVisitor { bool IsExternalStringCached(const TqExternalString* object) { // The safest way to get the instance type is to use known map pointers, in // case the map data is not available. - uintptr_t map = GetOrFinish(object->GetMapValue(accessor_)); + Value<uintptr_t> map_ptr = object->GetMapValue(accessor_); + DCHECK_IMPLIES(map_ptr.validity == d::MemoryAccessResult::kOk, + !v8::internal::MapWord::IsPacked(map_ptr.value)); + uintptr_t map = GetOrFinish(map_ptr); if (done_) return false; auto instance_types = FindKnownMapInstanceTypes(map, heap_addresses_); // Exactly one of the matched instance types should be a string type, @@ -347,10 +350,10 @@ class ReadStringVisitor : public TqObjectVisitor { ExternalPointer_t resource_data = GetOrFinish(object->GetResourceDataValue(accessor_)); #ifdef V8_COMPRESS_POINTERS - uintptr_t data_address = static_cast<uintptr_t>( - DecodeExternalPointer(GetPtrComprCageBaseFromOnHeapAddress( - heap_addresses_.any_heap_pointer), - resource_data, kExternalStringResourceDataTag)); + Isolate* isolate = GetIsolateForHeapSandbox( + HeapObject::unchecked_cast(Object(heap_addresses_.any_heap_pointer))); + uintptr_t data_address = static_cast<uintptr_t>(DecodeExternalPointer( + isolate, resource_data, kExternalStringResourceDataTag)); #else uintptr_t data_address = static_cast<uintptr_t>(resource_data); #endif // V8_COMPRESS_POINTERS @@ -500,6 +503,7 @@ class AddInfoVisitor : public TqObjectVisitor { if (map_ptr.validity != d::MemoryAccessResult::kOk) { return; // Can't read the JSObject. Nothing useful to do. } + DCHECK(!v8::internal::MapWord::IsPacked(map_ptr.value)); TqMap map(map_ptr.value); // On JSObject instances, this value is the start of in-object properties. diff --git a/deps/v8/tools/dev/gm.py b/deps/v8/tools/dev/gm.py index 4e318f2f32..8a05da3cc9 100755 --- a/deps/v8/tools/dev/gm.py +++ b/deps/v8/tools/dev/gm.py @@ -262,10 +262,10 @@ class Config(object): cpu = "arm" elif self.arch == "android_arm64": cpu = "arm64" - elif self.arch == "arm64" and _GetMachine() == "aarch64": + elif self.arch == "arm64" and _GetMachine() in ("aarch64", "arm64"): # arm64 build host: cpu = "arm64" - elif self.arch == "arm" and _GetMachine() == "aarch64": + elif self.arch == "arm" and _GetMachine() in ("aarch64", "arm64"): cpu = "arm" elif "64" in self.arch or self.arch == "s390x": # Native x64 or simulator build. @@ -291,7 +291,8 @@ class Config(object): def GetSpecialCompiler(self): if _GetMachine() == "aarch64": - # We have no prebuilt Clang for arm64. Use the system Clang instead. + # We have no prebuilt Clang for arm64 on Linux, so use the system Clang + # instead. return ["clang_base_path = \"/usr\"", "clang_use_chrome_plugins = false"] return [] diff --git a/deps/v8/tools/dev/v8gen.py b/deps/v8/tools/dev/v8gen.py index 18abf8aa25..c6ba1d2174 100755 --- a/deps/v8/tools/dev/v8gen.py +++ b/deps/v8/tools/dev/v8gen.py @@ -121,7 +121,7 @@ class GenerateGnArgs(object): add_common_options(list_cmd) # Default to "gen" unless global help is requested. - if not args or args[0] not in subps.choices.keys() + ['-h', '--help']: + if not args or args[0] not in list(subps.choices) + ['-h', '--help']: args = ['gen'] + args return self.parser.parse_args(args) @@ -193,14 +193,16 @@ class GenerateGnArgs(object): return 0 def verbose_print_1(self, text): - if self._options.verbosity >= 1: + if self._options.verbosity and self._options.verbosity >= 1: print('#' * 80) print(text) def verbose_print_2(self, text): - if self._options.verbosity >= 2: + if self._options.verbosity and self._options.verbosity >= 2: indent = ' ' * 2 for l in text.splitlines(): + if type(l) == bytes: + l = l.decode() print(indent + l) def _call_cmd(self, args): @@ -306,7 +308,7 @@ if __name__ == "__main__": try: sys.exit(gen.main()) except Exception: - if gen._options.verbosity < 2: + if not gen._options.verbosity or gen._options.verbosity < 2: print ('\nHint: You can raise verbosity (-vv) to see the output of ' 'failed commands.\n') raise diff --git a/deps/v8/tools/generate-header-include-checks.py b/deps/v8/tools/generate-header-include-checks.py index 4e58a492de..2171ee8a0d 100755 --- a/deps/v8/tools/generate-header-include-checks.py +++ b/deps/v8/tools/generate-header-include-checks.py @@ -31,6 +31,8 @@ OUT_DIR = os.path.join(V8_DIR, 'check-header-includes') AUTO_EXCLUDE = [ # flag-definitions.h needs a mode set for being included. 'src/flags/flag-definitions.h', + # recorder.h should only be included conditionally. + 'src/libplatform/tracing/recorder.h', ] AUTO_EXCLUDE_PATTERNS = [ 'src/base/atomicops_internals_.*', diff --git a/deps/v8/tools/mb/mb.py b/deps/v8/tools/mb/mb.py index 8ca9089944..7031ba50db 100755 --- a/deps/v8/tools/mb/mb.py +++ b/deps/v8/tools/mb/mb.py @@ -27,7 +27,16 @@ import sys import subprocess import tempfile import traceback -import urllib2 + +# for py2/py3 compatibility +try: + from urllib.parse import quote +except ImportError: + from urllib2 import quote +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen from collections import OrderedDict @@ -869,7 +878,7 @@ class MetaBuildWrapper(object): return err, labels def GNCmd(self, subcommand, path, *args): - if self.platform == 'linux2': + if self.platform.startswith('linux'): subdir, exe = 'linux64', 'gn' elif self.platform == 'darwin': subdir, exe = 'mac', 'gn' @@ -1109,7 +1118,7 @@ class MetaBuildWrapper(object): def CheckCompile(self, builder_group, builder): url_template = self.args.url_template + '/{builder}/builds/_all?as_text=1' - url = urllib2.quote( + url = quote( url_template.format(builder_group=builder_group, builder=builder), safe=':/()?=') try: @@ -1201,7 +1210,7 @@ class MetaBuildWrapper(object): def Fetch(self, url): # This function largely exists so it can be overridden for testing. - f = urllib2.urlopen(url) + f = urlopen(url) contents = f.read() f.close() return contents diff --git a/deps/v8/tools/profile.mjs b/deps/v8/tools/profile.mjs index f4be41e2da..8001f4b5ae 100644 --- a/deps/v8/tools/profile.mjs +++ b/deps/v8/tools/profile.mjs @@ -151,6 +151,14 @@ export class Profile { scripts_ = []; urlToScript_ = new Map(); + serializeVMSymbols() { + let result = this.codeMap_.getAllStaticEntriesWithAddresses(); + result.concat(this.codeMap_.getAllLibraryEntriesWithAddresses()) + return result.map(([startAddress, codeEntry]) => { + return [codeEntry.getName(), startAddress, startAddress + codeEntry.size] + }); + } + /** * Returns whether a function with the specified name must be skipped. * Should be overriden by subclasses. @@ -182,7 +190,6 @@ export class Profile { COMPILED: 0, IGNITION: 1, BASELINE: 2, - NATIVE_CONTEXT_INDEPENDENT: 3, TURBOPROP: 4, TURBOFAN: 5, } @@ -198,8 +205,6 @@ export class Profile { return this.CodeState.IGNITION; case '^': return this.CodeState.BASELINE; - case '-': - return this.CodeState.NATIVE_CONTEXT_INDEPENDENT; case '+': return this.CodeState.TURBOPROP; case '*': @@ -215,8 +220,6 @@ export class Profile { return "Unopt"; } else if (state === this.CodeState.BASELINE) { return "Baseline"; - } else if (state === this.CodeState.NATIVE_CONTEXT_INDEPENDENT) { - return "NCI"; } else if (state === this.CodeState.TURBOPROP) { return "Turboprop"; } else if (state === this.CodeState.TURBOFAN) { diff --git a/deps/v8/tools/profview/profile-utils.js b/deps/v8/tools/profview/profile-utils.js index 35fe3d7cb2..bd9f248b54 100644 --- a/deps/v8/tools/profview/profile-utils.js +++ b/deps/v8/tools/profview/profile-utils.js @@ -6,11 +6,12 @@ let codeKinds = [ "UNKNOWN", - "CPPPARSE", - "CPPCOMPBC", - "CPPCOMP", - "CPPGC", - "CPPEXT", + "CPP_PARSE", + "CPP_COMP_BC", + "CPP_COMP_BASELINE", + "CPP_COMP", + "CPP_GC", + "CPP_EXT", "CPP", "LIB", "IC", @@ -18,11 +19,10 @@ let codeKinds = [ "STUB", "BUILTIN", "REGEXP", - "JSOPT", - "JSUNOPT", - "JSNCI", - "JSTURBOPROP", - "JSBASELINE", + "JS_OPT", + "JS_UNOPT", + "JS_TURBOPROP", + "JS_BASELINE", ]; function resolveCodeKind(code) { @@ -53,17 +53,15 @@ function resolveCodeKind(code) { return "CODE"; } else if (code.type === "JS") { if (code.kind === "Builtin") { - return "JSUNOPT"; + return "JS_UNOPT"; } else if (code.kind === "Opt") { - return "JSOPT"; + return "JS_OPT"; } else if (code.kind === "Unopt") { - return "JSUNOPT"; - } else if (code.kind === "NCI") { - return "JSNCI"; + return "JS_UNOPT"; } else if (code.kind === "Baseline") { - return "JSBASELINE"; + return "JS_BASELINE"; } else if (code.kind === "Turboprop") { - return "JSTURBOPROP"; + return "JS_TURBOPROP"; } } console.log("Unknown code type '" + type + "'."); @@ -73,16 +71,17 @@ function resolveCodeKindAndVmState(code, vmState) { let kind = resolveCodeKind(code); if (kind === "CPP") { if (vmState === 1) { - kind = "CPPGC"; + kind = "CPP_GC"; } else if (vmState === 2) { - kind = "CPPPARSE"; + kind = "CPP_PARSE"; } else if (vmState === 3) { - kind = "CPPCOMPBC"; + kind = "CPP_COMP_BC"; } else if (vmState === 4) { - kind = "CPPCOMP"; + kind = "CPP_COMP"; } else if (vmState === 6) { - kind = "CPPEXT"; + kind = "CPP_EXT"; } + // TODO(cbruni): add CPP_COMP_BASELINE } return kind; } @@ -272,20 +271,20 @@ function buildCategoryTreeAndLookup() { } root.children.push(n); } - addCategory("JS Optimized", [ "JSOPT" ]); - addCategory("JS NCI", [ "JSNCI" ]); - addCategory("JS Turboprop", [ "JSTURBOPROP" ]); - addCategory("JS Baseline", [ "JSBASELINE" ]); - addCategory("JS Unoptimized", [ "JSUNOPT", "BC" ]); + addCategory("JS Optimized", [ "JS_OPT" ]); + addCategory("JS Turboprop", [ "JS_TURBOPROP" ]); + addCategory("JS Baseline", [ "JS_BASELINE" ]); + addCategory("JS Unoptimized", [ "JS_UNOPT", "BC" ]); addCategory("IC", [ "IC" ]); addCategory("RegExp", [ "REGEXP" ]); addCategory("Other generated", [ "STUB", "BUILTIN" ]); addCategory("C++", [ "CPP", "LIB" ]); - addCategory("C++/GC", [ "CPPGC" ]); - addCategory("C++/Parser", [ "CPPPARSE" ]); - addCategory("C++/Bytecode compiler", [ "CPPCOMPBC" ]); - addCategory("C++/Compiler", [ "CPPCOMP" ]); - addCategory("C++/External", [ "CPPEXT" ]); + addCategory("C++/GC", [ "CPP_GC" ]); + addCategory("C++/Parser", [ "CPP_PARSE" ]); + addCategory("C++/Bytecode Compiler", [ "CPP_COMP_BC" ]); + addCategory("C++/Baseline Compiler", [ "CPP_COMP_BASELINE" ]); + addCategory("C++/Compiler", [ "CPP_COMP" ]); + addCategory("C++/External", [ "CPP_EXT" ]); addCategory("Unknown", [ "UNKNOWN" ]); return { categories, root }; diff --git a/deps/v8/tools/profview/profview.js b/deps/v8/tools/profview/profview.js index 15a74f7240..60fc05e727 100644 --- a/deps/v8/tools/profview/profview.js +++ b/deps/v8/tools/profview/profview.js @@ -212,63 +212,91 @@ let main = { const CATEGORY_COLOR = "#f5f5f5"; const bucketDescriptors = - [ { kinds : [ "JSOPT" ], - color : "#64dd17", - backgroundColor : "#80e27e", - text : "JS Optimized" }, - { kinds : [ "JSNCI" ], - color : "#3289a8", - backgroundColor : "#3289a8", - text : "JS NCI" }, - { kinds : [ "JSTURBOPROP" ], - color : "#693eb8", - backgroundColor : "#a6c452", - text : "JS Turboprop" }, - { kinds : [ "JSBASELINE" ], - color : "#b3005b", - backgroundColor : "#ff9e80", - text : "JS Baseline" }, - { kinds : [ "JSUNOPT", "BC" ], - color : "#dd2c00", - backgroundColor : "#ff9e80", - text : "JS Unoptimized" }, - { kinds : [ "IC" ], - color : "#ff6d00", - backgroundColor : "#ffab40", - text : "IC" }, - { kinds : [ "STUB", "BUILTIN", "REGEXP" ], - color : "#ffd600", - backgroundColor : "#ffea00", - text : "Other generated" }, - { kinds : [ "CPP", "LIB" ], - color : "#304ffe", - backgroundColor : "#6ab7ff", - text : "C++" }, - { kinds : [ "CPPEXT" ], - color : "#003c8f", - backgroundColor : "#c0cfff", - text : "C++/external" }, - { kinds : [ "CPPPARSE" ], - color : "#aa00ff", - backgroundColor : "#ffb2ff", - text : "C++/Parser" }, - { kinds : [ "CPPCOMPBC" ], - color : "#43a047", - backgroundColor : "#88c399", - text : "C++/Bytecode compiler" }, - { kinds : [ "CPPCOMP" ], - color : "#00e5ff", - backgroundColor : "#6effff", - text : "C++/Compiler" }, - { kinds : [ "CPPGC" ], - color : "#6200ea", - backgroundColor : "#e1bee7", - text : "C++/GC" }, - { kinds : [ "UNKNOWN" ], - color : "#bdbdbd", - backgroundColor : "#efefef", - text : "Unknown" } - ]; + [{ + kinds: ["JS_OPT"], + color: "#64dd17", + backgroundColor: "#80e27e", + text: "JS Optimized" + }, + { + kinds: ["JS_TURBOPROP"], + color: "#693eb8", + backgroundColor: "#a6c452", + text: "JS Turboprop" + }, + { + kinds: ["JS_BASELINE"], + color: "#b3005b", + backgroundColor: "#ff9e80", + text: "JS Baseline" + }, + { + kinds: ["JS_UNOPT", "BC"], + color: "#dd2c00", + backgroundColor: "#ff9e80", + text: "JS Unoptimized" + }, + { + kinds: ["IC"], + color: "#ff6d00", + backgroundColor: "#ffab40", + text: "IC" + }, + { + kinds: ["STUB", "BUILTIN", "REGEXP"], + color: "#ffd600", + backgroundColor: "#ffea00", + text: "Other generated" + }, + { + kinds: ["CPP", "LIB"], + color: "#304ffe", + backgroundColor: "#6ab7ff", + text: "C++" + }, + { + kinds: ["CPP_EXT"], + color: "#003c8f", + backgroundColor: "#c0cfff", + text: "C++/external" + }, + { + kinds: ["CPP_PARSE"], + color: "#aa00ff", + backgroundColor: "#ffb2ff", + text: "C++/Parser" + }, + { + kinds: ["CPP_COMP_BC"], + color: "#43a047", + backgroundColor: "#88c399", + text: "C++/Bytecode compiler" + }, + { + kinds: ["CPP_COMP_BASELINE"], + color: "#43a047", + backgroundColor: "#5a8000", + text: "C++/Baseline compiler" + }, + { + kinds: ["CPP_COMP"], + color: "#00e5ff", + backgroundColor: "#6effff", + text: "C++/Compiler" + }, + { + kinds: ["CPP_GC"], + color: "#6200ea", + backgroundColor: "#e1bee7", + text: "C++/GC" + }, + { + kinds: ["UNKNOWN"], + color: "#bdbdbd", + backgroundColor: "#efefef", + text: "Unknown" + } + ]; let kindToBucketDescriptor = {}; for (let i = 0; i < bucketDescriptors.length; i++) { @@ -294,15 +322,17 @@ function codeTypeToText(type) { switch (type) { case "UNKNOWN": return "Unknown"; - case "CPPPARSE": + case "CPP_PARSE": return "C++ Parser"; - case "CPPCOMPBC": - return "C++ Bytecode Compiler)"; - case "CPPCOMP": + case "CPP_COMP_BASELINE": + return "C++ Baseline Compiler"; + case "CPP_COMP_BC": + return "C++ Bytecode Compiler"; + case "CPP_COMP": return "C++ Compiler"; - case "CPPGC": + case "CPP_GC": return "C++ GC"; - case "CPPEXT": + case "CPP_EXT": return "C++ External"; case "CPP": return "C++"; @@ -318,13 +348,13 @@ function codeTypeToText(type) { return "Builtin"; case "REGEXP": return "RegExp"; - case "JSOPT": + case "JS_OPT": return "JS opt"; - case "JSNCI": - return "JS NCI"; - case "JSTURBOPROP": + case "JS_TURBOPROP": return "JS Turboprop"; - case "JSUNOPT": + case "JS_BASELINE": + return "JS Baseline"; + case "JS_UNOPT": return "JS unopt"; } console.error("Unknown type: " + type); diff --git a/deps/v8/tools/release/auto_roll.py b/deps/v8/tools/release/auto_roll.py index ffba545c8f..76247b1fb3 100755 --- a/deps/v8/tools/release/auto_roll.py +++ b/deps/v8/tools/release/auto_roll.py @@ -126,7 +126,7 @@ class UpdateChromiumCheckout(Step): def RunStep(self): self['json_output']['monitoring_state'] = 'update_chromium' cwd = self._options.chromium - self.GitCheckout("master", cwd=cwd) + self.GitCheckout("main", cwd=cwd) self.DeleteBranch("work-branch", cwd=cwd) self.GitPull(cwd=cwd) @@ -168,7 +168,7 @@ class UploadCL(Step): else: print("Dry run - don't upload.") - self.GitCheckout("master", cwd=cwd) + self.GitCheckout("main", cwd=cwd) self.GitDeleteBranch("work-branch", cwd=cwd) class CleanUp(Step): diff --git a/deps/v8/tools/release/test_scripts.py b/deps/v8/tools/release/test_scripts.py index bfac9a4a34..7cf5d14130 100755 --- a/deps/v8/tools/release/test_scripts.py +++ b/deps/v8/tools/release/test_scripts.py @@ -612,7 +612,7 @@ deps = { Cmd("git describe --tags roll_hsh", "3.22.4"), Cmd("git describe --tags last_roll_hsh", "3.22.2.1"), Cmd("git status -s -uno", "", cwd=chrome_dir), - Cmd("git checkout -f master", "", cwd=chrome_dir), + Cmd("git checkout -f main", "", cwd=chrome_dir), Cmd("git branch", "", cwd=chrome_dir), Cmd("git pull", "", cwd=chrome_dir), Cmd("git fetch origin", ""), @@ -626,7 +626,7 @@ deps = { Cmd("git cl upload --send-mail -f " "--cq-dry-run --set-bot-commit --bypass-hooks", "", cwd=chrome_dir), - Cmd("git checkout -f master", "", cwd=chrome_dir), + Cmd("git checkout -f main", "", cwd=chrome_dir), Cmd("git branch -D work-branch", "", cwd=chrome_dir), ] self.Expect(expectations) diff --git a/deps/v8/tools/system-analyzer/index.css b/deps/v8/tools/system-analyzer/index.css index ad3f24d27b..53110079b2 100644 --- a/deps/v8/tools/system-analyzer/index.css +++ b/deps/v8/tools/system-analyzer/index.css @@ -68,7 +68,7 @@ section { border-radius: 8px; cursor: pointer; } -::-webkit-scrollbar-thumb:hover { +::-webkit-scrollbar-thumb:hover { background-color: rgba(128, 128, 128, 0.8); } diff --git a/deps/v8/tools/system-analyzer/index.mjs b/deps/v8/tools/system-analyzer/index.mjs index 4b0ed9f9c5..550838118b 100644 --- a/deps/v8/tools/system-analyzer/index.mjs +++ b/deps/v8/tools/system-analyzer/index.mjs @@ -110,7 +110,7 @@ class App { entries = entry.entries.concat(entry.sourcePositions); break; default: - throw new Error('Unknown selection type!'); + throw new Error(`Unknown selection type: ${entry.constructor?.name}`); } if (entry.sourcePosition) { entries.push(entry.sourcePosition); @@ -134,7 +134,11 @@ class App { } selectEntriesOfSingleType(entries, type) { - switch (entries[0]?.constructor ?? type) { + const entryType = entries[0]?.constructor ?? type; + switch (entryType) { + case Script: + entries = entries.flatMap(script => script.sourcePositions); + return this.showSourcePositions(entries); case SourcePosition: return this.showSourcePositions(entries); case MapLogEntry: @@ -148,7 +152,7 @@ class App { case DeoptLogEntry: return this.showDeoptEntries(entries); default: - throw new Error('Unknown selection type!'); + throw new Error(`Unknown selection type: ${entryType?.name}`); } } @@ -205,6 +209,8 @@ class App { focusLogEntry(entry) { switch (entry.constructor) { + case Script: + return this.focusSourcePosition(entry.sourcePositions[0]); case SourcePosition: return this.focusSourcePosition(entry); case MapLogEntry: @@ -218,7 +224,7 @@ class App { case DeoptLogEntry: return this.focusDeoptLogEntry(entry); default: - throw new Error('Unknown selection type!'); + throw new Error(`Unknown selection type: ${entry.constructor?.name}`); } } diff --git a/deps/v8/tools/system-analyzer/processor.mjs b/deps/v8/tools/system-analyzer/processor.mjs index 9685e09ad6..806cba132c 100644 --- a/deps/v8/tools/system-analyzer/processor.mjs +++ b/deps/v8/tools/system-analyzer/processor.mjs @@ -230,17 +230,21 @@ export class Processor extends LogReader { this.addSourcePosition(codeEntry, logEntry); logEntry.functionSourcePosition = logEntry.sourcePosition; // custom parse deopt location - if (deoptLocation !== '<unknown>') { - const colSeparator = deoptLocation.lastIndexOf(':'); - const rowSeparator = deoptLocation.lastIndexOf(':', colSeparator - 1); - const script = this.getScript(deoptLocation.substring(1, rowSeparator)); - const line = - parseInt(deoptLocation.substring(rowSeparator + 1, colSeparator)); - const column = parseInt( - deoptLocation.substring(colSeparator + 1, deoptLocation.length - 1)); - logEntry.sourcePosition = - script.addSourcePosition(line, column, logEntry); + if (deoptLocation === '<unknown>') return; + // Handle deopt location for inlined code: <location> inlined at <location> + const inlinedPos = deoptLocation.indexOf(' inlined at '); + if (inlinedPos > 0) { + deoptLocation = deoptLocation.substring(0, inlinedPos) } + const colSeparator = deoptLocation.lastIndexOf(':'); + const rowSeparator = deoptLocation.lastIndexOf(':', colSeparator - 1); + const script = this.getScript(deoptLocation.substring(1, rowSeparator)); + if (!script) return; + const line = + parseInt(deoptLocation.substring(rowSeparator + 1, colSeparator)); + const column = parseInt( + deoptLocation.substring(colSeparator + 1, deoptLocation.length - 1)); + logEntry.sourcePosition = script.addSourcePosition(line, column, logEntry); } processScriptSource(scriptId, url, source) { diff --git a/deps/v8/tools/system-analyzer/view/code-panel-template.html b/deps/v8/tools/system-analyzer/view/code-panel-template.html index e04c6be8c1..3622c25062 100644 --- a/deps/v8/tools/system-analyzer/view/code-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/code-panel-template.html @@ -11,7 +11,9 @@ found in the LICENSE file. --> } </style> <div class="panel"> - <h2>Code Panel</h2> + <input type="checkbox" id="closer" class="panelCloserInput" checked> + <label class="panelCloserLabel" for="closer">▼</label> + <h2 class="title">Code Panel</h2> <div class="selection"> <select id="codeSelect"></select> <button id="selectedRelatedButton">Select Related Events</button> diff --git a/deps/v8/tools/system-analyzer/view/code-panel.mjs b/deps/v8/tools/system-analyzer/view/code-panel.mjs index 3b5261e03c..34e4ad300e 100644 --- a/deps/v8/tools/system-analyzer/view/code-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/code-panel.mjs @@ -5,11 +5,11 @@ import {IcLogEntry} from '../log/ic.mjs'; import {MapLogEntry} from '../log/map.mjs'; import {FocusEvent, SelectionEvent, ToolTipEvent} from './events.mjs'; -import {delay, DOM, formatBytes, formatMicroSeconds, V8CustomElement} from './helper.mjs'; +import {CollapsableElement, delay, DOM, formatBytes, formatMicroSeconds} from './helper.mjs'; DOM.defineCustomElement('view/code-panel', (templateText) => - class CodePanel extends V8CustomElement { + class CodePanel extends CollapsableElement { _timeline; _selectedEntries; _entry; @@ -24,19 +24,17 @@ DOM.defineCustomElement('view/code-panel', set timeline(timeline) { this._timeline = timeline; this.$('.panel').style.display = timeline.isEmpty() ? 'none' : 'inherit'; - this.update(); + this.requestUpdate(); } set selectedEntries(entries) { this._selectedEntries = entries; - // TODO: add code selection dropdown - this._updateSelect(); this.entry = entries.first(); } set entry(entry) { this._entry = entry; - this.update(); + this.requestUpdate(); } get _disassemblyNode() { @@ -52,12 +50,15 @@ DOM.defineCustomElement('view/code-panel', } _update() { + this._updateSelect(); this._disassemblyNode.innerText = this._entry?.disassemble ?? ''; this._sourceNode.innerText = this._entry?.source ?? ''; } _updateSelect() { const select = this._codeSelectNode; + if (select.data === this._selectedEntries) return; + select.data = this._selectedEntries; select.options.length = 0; const sorted = this._selectedEntries.slice().sort((a, b) => a.time - b.time); diff --git a/deps/v8/tools/system-analyzer/view/helper.mjs b/deps/v8/tools/system-analyzer/view/helper.mjs index 780864ef5a..44da06ced4 100644 --- a/deps/v8/tools/system-analyzer/view/helper.mjs +++ b/deps/v8/tools/system-analyzer/view/helper.mjs @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -class CSSColor { +export class CSSColor { static _cache = new Map(); static get(name) { @@ -121,7 +121,7 @@ class CSSColor { } } -class DOM { +export class DOM { static element(type, classes) { const node = document.createElement(type); if (classes === undefined) return node; @@ -185,19 +185,18 @@ class DOM { } } -function $(id) { +export function $(id) { return document.querySelector(id) } -class V8CustomElement extends HTMLElement { +export class V8CustomElement extends HTMLElement { _updateTimeoutId; - _updateCallback = this._update.bind(this); + _updateCallback = this.forceUpdate.bind(this); constructor(templateText) { super(); const shadowRoot = this.attachShadow({mode: 'open'}); shadowRoot.innerHTML = templateText; - this._updateCallback = this._update.bind(this); } $(id) { @@ -208,7 +207,7 @@ class V8CustomElement extends HTMLElement { return this.shadowRoot.querySelectorAll(query); } - update(useAnimation = false) { + requestUpdate(useAnimation = false) { if (useAnimation) { window.cancelAnimationFrame(this._updateTimeoutId); this._updateTimeoutId = @@ -221,12 +220,54 @@ class V8CustomElement extends HTMLElement { } } + forceUpdate() { + this._update(); + } + _update() { throw Error('Subclass responsibility'); } } -class Chunked { +export class CollapsableElement extends V8CustomElement { + constructor(templateText) { + super(templateText); + this._hasPendingUpdate = false; + this._closer.onclick = _ => this.tryUpdateOnVisibilityChange(); + } + + get _closer() { + return this.$('#closer'); + } + + _contentIsVisible() { + return !this._closer.checked; + } + + requestUpdate(useAnimation = false) { + // A pending update will be resolved later, no need to try again. + if (this._hasPendingUpdate) return; + this._hasPendingUpdate = true; + this.requestUpdateIfVisible(useAnimation); + } + + tryUpdateOnVisibilityChange() { + if (!this._hasPendingUpdate) return; + this.requestUpdateIfVisible(true); + } + + requestUpdateIfVisible(useAnimation) { + if (!this._contentIsVisible()) return; + return super.requestUpdate(useAnimation); + } + + forceUpdate() { + this._hasPendingUpdate = false; + super.forceUpdate(); + } +} + +export class Chunked { constructor(iterable, limit) { this._iterator = iterable[Symbol.iterator](); this._limit = limit; @@ -248,7 +289,7 @@ class Chunked { } } -class LazyTable { +export class LazyTable { constructor(table, rowData, rowElementCreator, limit = 100) { this._table = table; this._chunkedRowData = new Chunked(rowData, limit); @@ -258,22 +299,25 @@ class LazyTable { } else { table.replaceChild(DOM.tbody(), table.tBodies[0]); } - if (!table.tFoot) { - const td = table.appendChild(DOM.element('tfoot')) - .appendChild(DOM.tr()) - .appendChild(DOM.td()); - for (let count of [10, 100]) { - const button = DOM.element('button'); - button.innerText = `+${count}`; - button.onclick = (e) => this._addMoreRows(count); - td.appendChild(button); - } - td.setAttribute('colspan', 100); - } + if (!table.tFoot) this._addFooter(); table.tFoot.addEventListener('click', this._clickHandler); this._addMoreRows(); } + _addFooter() { + const td = DOM.td(); + td.setAttribute('colspan', 100); + for (let addCount of [10, 100, 250, 500]) { + const button = DOM.element('button'); + button.innerText = `+${addCount}`; + button.onclick = (e) => this._addMoreRows(addCount); + td.appendChild(button); + } + this._table.appendChild(DOM.element('tfoot')) + .appendChild(DOM.tr()) + .appendChild(td); + } + _addMoreRows(count = undefined) { const fragment = new DocumentFragment(); for (let row of this._chunkedRowData.next(count)) { @@ -304,11 +348,4 @@ export function gradientStopsFromGroups( return stops; } -export * from '../helper.mjs'; -export { - DOM, - $, - V8CustomElement, - CSSColor, - LazyTable, -}; +export * from '../helper.mjs';
\ No newline at end of file diff --git a/deps/v8/tools/system-analyzer/view/list-panel-template.html b/deps/v8/tools/system-analyzer/view/list-panel-template.html index 4714f97c02..fb38f5b459 100644 --- a/deps/v8/tools/system-analyzer/view/list-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/list-panel-template.html @@ -30,11 +30,13 @@ found in the LICENSE file. --> text-align: left; cursor: -webkit-zoom-in; color: rgba(var(--border-color), 1); + user-select: none; } .toggle::before { content: "▶"; } + .open .toggle::before { content: "▼"; } @@ -58,7 +60,7 @@ found in the LICENSE file. --> </style> <div class="panel"> - <input type="checkbox" id="closer" class="panelCloserInput"> + <input type="checkbox" id="closer" class="panelCloserInput" checked> <label class="panelCloserLabel" for="closer">▼</label> <h2 id="title"></h2> <div class="selection"> diff --git a/deps/v8/tools/system-analyzer/view/list-panel.mjs b/deps/v8/tools/system-analyzer/view/list-panel.mjs index 85e3cd47e2..bc3b2f89d5 100644 --- a/deps/v8/tools/system-analyzer/view/list-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/list-panel.mjs @@ -5,23 +5,24 @@ import {Script, SourcePosition} from '../../profile.mjs'; import {LogEntry} from '../log/log.mjs'; -import {FocusEvent} from './events.mjs'; +import {FocusEvent, ToolTipEvent} from './events.mjs'; import {groupBy, LazyTable} from './helper.mjs'; -import {DOM, V8CustomElement} from './helper.mjs'; +import {CollapsableElement, DOM} from './helper.mjs'; DOM.defineCustomElement('view/list-panel', (templateText) => - class ListPanel extends V8CustomElement { + class ListPanel extends CollapsableElement { _selectedLogEntries = []; _displayedLogEntries = []; _timeline; _detailsClickHandler = this._handleDetailsClick.bind(this); _logEntryClickHandler = this._handleLogEntryClick.bind(this); + _logEntryMouseOverHandler = this._logEntryMouseOverHandler.bind(this); constructor() { super(templateText); - this.groupKey.addEventListener('change', e => this.update()); + this.groupKey.addEventListener('change', e => this.requestUpdate()); this.showAllRadio.onclick = _ => this._showEntries(this._timeline); this.showTimerangeRadio.onclick = _ => this._showEntries(this._timeline.selectionOrSelf); @@ -72,9 +73,11 @@ DOM.defineCustomElement('view/list-panel', get showAllRadio() { return this.$('#show-all'); } + get showTimerangeRadio() { return this.$('#show-timerange'); } + get showSelectionRadio() { return this.$('#show-selection'); } @@ -95,7 +98,7 @@ DOM.defineCustomElement('view/list-panel', _showEntries(entries) { this._displayedLogEntries = entries; - this.update(); + this.requestUpdate(); } _update() { @@ -123,6 +126,12 @@ DOM.defineCustomElement('view/list-panel', this.dispatchEvent(new FocusEvent(group.key)); } + _logEntryMouseOverHandler(e) { + const group = e.currentTarget.group; + this.dispatchEvent( + new ToolTipEvent(group.key.toStringLong(), e.currentTarget)); + } + _handleDetailsClick(event) { event.stopPropagation(); const tr = event.target.parentNode; @@ -182,6 +191,7 @@ DOM.defineCustomElement('view/list-panel', const valueTd = tr.appendChild(DOM.td(`${group.key}`, 'key')); if (this._isClickable(group.key)) { tr.onclick = this._logEntryClickHandler; + tr.onmouseover = this._logEntryMouseOverHandler; valueTd.classList.add('clickable'); } return tr; diff --git a/deps/v8/tools/system-analyzer/view/map-panel-template.html b/deps/v8/tools/system-analyzer/view/map-panel-template.html index 8a2b23ee3d..4790e376f9 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/map-panel-template.html @@ -11,7 +11,7 @@ found in the LICENSE file. --> } </style> <div class="panel"> - <input type="checkbox" id="closer" class="panelCloserInput"> + <input type="checkbox" id="closer" class="panelCloserInput" checked> <label class="panelCloserLabel" for="closer">▼</label> <h2>Map Panel</h2> <div class="selection"> diff --git a/deps/v8/tools/system-analyzer/view/map-panel.mjs b/deps/v8/tools/system-analyzer/view/map-panel.mjs index 7ee2325f34..be00ef0124 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/map-panel.mjs @@ -7,100 +7,103 @@ import './map-panel/map-transitions.mjs'; import {MapLogEntry} from '../log/map.mjs'; import {FocusEvent} from './events.mjs'; -import {DOM, V8CustomElement} from './helper.mjs'; - -DOM.defineCustomElement( - 'view/map-panel', (templateText) => class MapPanel extends V8CustomElement { - _map; - _timeline; - _selectedLogEntries = []; - _displayedLogEntries = []; - - constructor() { - super(templateText); - this.searchBarBtn.addEventListener('click', e => this._handleSearch(e)); - this.showAllRadio.onclick = _ => this._showEntries(this._timeline); - this.showTimerangeRadio.onclick = _ => - this._showEntries(this._timeline.selectionOrSelf); - this.showSelectionRadio.onclick = _ => - this._showEntries(this._selectedLogEntries); - } - - get showAllRadio() { - return this.$('#show-all'); - } - get showTimerangeRadio() { - return this.$('#show-timerange'); - } - get showSelectionRadio() { - return this.$('#show-selection'); - } - - get mapTransitionsPanel() { - return this.$('#map-transitions'); - } - - get mapDetailsTransitionsPanel() { - return this.$('#map-details-transitions'); - } - - get mapDetailsPanel() { - return this.$('#map-details'); - } - - get searchBarBtn() { - return this.$('#searchBarBtn'); - } - - get searchBar() { - return this.$('#searchBar'); - } - - set timeline(timeline) { - console.assert(timeline !== undefined, 'timeline undefined!'); - this._timeline = timeline; - this.$('.panel').style.display = - timeline.isEmpty() ? 'none' : 'inherit'; - this.mapTransitionsPanel.timeline = timeline; - this.mapDetailsTransitionsPanel.timeline = timeline; - } - - set selectedLogEntries(entries) { - if (entries === this._timeline.selection) { - this.showTimerangeRadio.click(); - } else if (entries == this._timeline) { - this.showAllRadio.click(); - } else { - this._selectedLogEntries = entries; - this.showSelectionRadio.click(); - } - } - - set map(map) { - this._map = map; - this.mapDetailsTransitionsPanel.selectedLogEntries = [map]; - this.mapDetailsPanel.map = map; - } - - _showEntries(entries) { - this._displayedLogEntries = entries; - this.mapTransitionsPanel.selectedLogEntries = entries; - } - - update() { - // nothing to do - } - - _handleSearch(e) { - let searchBar = this.$('#searchBarInput'); - let searchBarInput = searchBar.value; - // access the map from model cache - let selectedMap = MapLogEntry.get(searchBarInput); - if (selectedMap) { - searchBar.className = 'success'; - this.dispatchEvent(new FocusEvent(selectedMap)); - } else { - searchBar.className = 'failure'; - } - } - }); +import {CollapsableElement, DOM} from './helper.mjs'; + +DOM.defineCustomElement('view/map-panel', + (templateText) => + class MapPanel extends CollapsableElement { + _map; + _timeline; + _selectedLogEntries = []; + _displayedLogEntries = []; + + constructor() { + super(templateText); + this.searchBarBtn.addEventListener('click', e => this._handleSearch(e)); + this.showAllRadio.onclick = _ => this._showEntries(this._timeline); + this.showTimerangeRadio.onclick = _ => + this._showEntries(this._timeline.selectionOrSelf); + this.showSelectionRadio.onclick = _ => + this._showEntries(this._selectedLogEntries); + } + + get showAllRadio() { + return this.$('#show-all'); + } + + get showTimerangeRadio() { + return this.$('#show-timerange'); + } + + get showSelectionRadio() { + return this.$('#show-selection'); + } + + get mapTransitionsPanel() { + return this.$('#map-transitions'); + } + + get mapDetailsTransitionsPanel() { + return this.$('#map-details-transitions'); + } + + get mapDetailsPanel() { + return this.$('#map-details'); + } + + get searchBarBtn() { + return this.$('#searchBarBtn'); + } + + get searchBar() { + return this.$('#searchBar'); + } + + set timeline(timeline) { + console.assert(timeline !== undefined, 'timeline undefined!'); + this._timeline = timeline; + this.$('.panel').style.display = timeline.isEmpty() ? 'none' : 'inherit'; + this.mapTransitionsPanel.timeline = timeline; + this.mapDetailsTransitionsPanel.timeline = timeline; + } + + set selectedLogEntries(entries) { + if (entries === this._timeline.selection) { + this.showTimerangeRadio.click(); + } else if (entries == this._timeline) { + this.showAllRadio.click(); + } else { + this._selectedLogEntries = entries; + this.showSelectionRadio.click(); + } + } + + set map(map) { + this._map = map; + this.requestUpdate(); + } + + _showEntries(entries) { + this._displayedLogEntries = entries; + this.requestUpdate(); + } + + _update() { + this.mapDetailsTransitionsPanel.selectedLogEntries = [this._map]; + this.mapDetailsPanel.map = this._map; + this.mapTransitionsPanel.selectedLogEntries = this._displayedLogEntries; + } + + _handleSearch(e) { + const searchBar = this.$('#searchBarInput'); + const searchBarInput = searchBar.value; + // access the map from model cache + const selectedMap = MapLogEntry.get(searchBarInput); + if (selectedMap) { + searchBar.className = 'success'; + this.dispatchEvent(new FocusEvent(selectedMap)); + } else { + searchBar.className = 'failure'; + } + } +}); diff --git a/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs b/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs index 446475a5b0..a8ea27e2e4 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs +++ b/deps/v8/tools/system-analyzer/view/map-panel/map-details.mjs @@ -25,7 +25,7 @@ DOM.defineCustomElement( set map(map) { if (this._map === map) return; this._map = map; - this.update(); + this.requestUpdate(); } _update() { diff --git a/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs b/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs index f60bd37d39..fbe78f9156 100644 --- a/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs +++ b/deps/v8/tools/system-analyzer/view/map-panel/map-transitions.mjs @@ -37,7 +37,7 @@ DOM.defineCustomElement( set selectedLogEntries(list) { this._selectedLogEntries = list; - this.update(); + this.requestUpdate(); } _update() { diff --git a/deps/v8/tools/system-analyzer/view/script-panel-template.html b/deps/v8/tools/system-analyzer/view/script-panel-template.html index 27fd3d83eb..ab5c3f95f3 100644 --- a/deps/v8/tools/system-analyzer/view/script-panel-template.html +++ b/deps/v8/tools/system-analyzer/view/script-panel-template.html @@ -40,11 +40,15 @@ found in the LICENSE file. --> .marked { background-color: var(--secondary-color); + box-shadow: 0px 0px 2px 3px var(--secondary-color); + animation-name: pulse; + animation-duration: 3s; + animation-delay: 500ms; } @keyframes pulse { 0% { - box-shadow: 0px 0px 0px 0px var(--secondary-color); + box-shadow: 0px 0px 0px 3px var(--secondary-color); } 5% { box-shadow: 0px 0px 0px 10px var(--secondary-color); @@ -56,11 +60,13 @@ found in the LICENSE file. --> box-shadow: 0px 0px 0px 10px var(--secondary-color); } 20% { - box-shadow: 0px 0px 0px 0px var(--secondary-color); + box-shadow: 0px 0px 2px 3px var(--secondary-color); } } </style> <div class="panel"> + <input type="checkbox" id="closer" class="panelCloserInput" checked> + <label class="panelCloserLabel" for="closer">▼</label> <h2>Source Panel</h2> <div class="selection"> <select id="script-dropdown"></select> diff --git a/deps/v8/tools/system-analyzer/view/script-panel.mjs b/deps/v8/tools/system-analyzer/view/script-panel.mjs index b0dac6960c..6f5befcc16 100644 --- a/deps/v8/tools/system-analyzer/view/script-panel.mjs +++ b/deps/v8/tools/system-analyzer/view/script-panel.mjs @@ -5,11 +5,11 @@ import {groupBy} from '../helper.mjs'; import {App} from '../index.mjs' import {SelectRelatedEvent, ToolTipEvent} from './events.mjs'; -import {CSSColor, delay, DOM, formatBytes, gradientStopsFromGroups, V8CustomElement} from './helper.mjs'; +import {CollapsableElement, CSSColor, delay, DOM, formatBytes, gradientStopsFromGroups} from './helper.mjs'; DOM.defineCustomElement('view/script-panel', (templateText) => - class SourcePanel extends V8CustomElement { + class SourcePanel extends CollapsableElement { _selectedSourcePositions = []; _sourcePositionsToMarkNodes = []; _scripts = []; @@ -110,7 +110,7 @@ DOM.defineCustomElement('view/script-panel', if (!sourcePosition) return; const markNode = this._sourcePositionsToMarkNodes.get(sourcePosition); markNode.scrollIntoView( - {behavior: 'smooth', block: 'nearest', inline: 'center'}); + {behavior: 'auto', block: 'center', inline: 'center'}); } _handleSelectScript(e) { diff --git a/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs b/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs index 60216af2ee..6f05b772d8 100644 --- a/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs +++ b/deps/v8/tools/system-analyzer/view/timeline/timeline-track.mjs @@ -112,7 +112,7 @@ DOM.defineCustomElement('view/timeline/timeline-track', _updateChunks() { this._chunks = this._timeline.chunks(this.nofChunks, this._legend.filterPredicate); - this.update(); + this.requestUpdate(); } get chunks() { @@ -180,7 +180,7 @@ DOM.defineCustomElement('view/timeline/timeline-track', node.ondblclick = this._chunkDoubleClickHandler; } const style = node.style; - style.left = `${((chunk.start - start) * this._timeToPixel) | 0}px`; + style.left = `${i * kChunkWidth}px`; style.height = `${height | 0}px`; style.backgroundImage = this._createBackgroundImage(chunk); node.chunk = chunk; diff --git a/deps/v8/tools/system-analyzer/view/tool-tip-template.html b/deps/v8/tools/system-analyzer/view/tool-tip-template.html index b0e9c72c45..dc56997825 100644 --- a/deps/v8/tools/system-analyzer/view/tool-tip-template.html +++ b/deps/v8/tools/system-analyzer/view/tool-tip-template.html @@ -24,6 +24,7 @@ found in the LICENSE file. --> .textContent { font-family: monospace; white-space: pre; + overflow-wrap: anywhere; overflow-x: hidden; max-width: 500px; } diff --git a/deps/v8/tools/system-analyzer/view/tool-tip.mjs b/deps/v8/tools/system-analyzer/view/tool-tip.mjs index 896c04dd29..a01ee1bdbf 100644 --- a/deps/v8/tools/system-analyzer/view/tool-tip.mjs +++ b/deps/v8/tools/system-analyzer/view/tool-tip.mjs @@ -16,9 +16,10 @@ DOM.defineCustomElement( this.hide(); } else { this.show(); - this.update(true); + this.requestUpdate(true); } }); + document.addEventListener('click', (e) => this.hide()); } _update() { @@ -31,7 +32,7 @@ DOM.defineCustomElement( rect.y += rect.height; } this._setPosition(rect, atRight, atBottom); - this.update(true); + this.requestUpdate(true); } set positionOrTargetNode(positionOrTargetNode) { @@ -47,7 +48,7 @@ DOM.defineCustomElement( this._targetNode = targetNode; if (targetNode) { this._intersectionObserver.observe(targetNode); - this.update(true); + this.requestUpdate(true); } } diff --git a/deps/v8/tools/testrunner/base_runner.py b/deps/v8/tools/testrunner/base_runner.py index 76aff630ff..b6889a3773 100644 --- a/deps/v8/tools/testrunner/base_runner.py +++ b/deps/v8/tools/testrunner/base_runner.py @@ -172,6 +172,7 @@ class BuildConfig(object): self.cfi_vptr = build_config['is_cfi'] self.control_flow_integrity = build_config['v8_control_flow_integrity'] self.concurrent_marking = build_config['v8_enable_concurrent_marking'] + self.single_generation = build_config['v8_enable_single_generation'] self.dcheck_always_on = build_config['dcheck_always_on'] self.gcov_coverage = build_config['is_gcov_coverage'] self.is_android = build_config['is_android'] @@ -189,6 +190,8 @@ class BuildConfig(object): self.verify_csa = build_config['v8_enable_verify_csa'] self.lite_mode = build_config['v8_enable_lite_mode'] self.pointer_compression = build_config['v8_enable_pointer_compression'] + self.pointer_compression_shared_cage = build_config['v8_enable_pointer_compression_shared_cage'] + self.third_party_heap = build_config['v8_enable_third_party_heap'] self.webassembly = build_config['v8_enable_webassembly'] # Export only for MIPS target if self.arch in ['mips', 'mipsel', 'mips64', 'mips64el']: @@ -229,6 +232,10 @@ class BuildConfig(object): detected_options.append('lite_mode') if self.pointer_compression: detected_options.append('pointer_compression') + if self.pointer_compression_shared_cage: + detected_options.append('pointer_compression_shared_cage') + if self.third_party_heap: + detected_options.append('third_party_heap') if self.webassembly: detected_options.append('webassembly') @@ -351,16 +358,13 @@ class BaseTestRunner(object): # Progress parser.add_option("-p", "--progress", - choices=PROGRESS_INDICATORS.keys(), default="mono", + choices=list(PROGRESS_INDICATORS), default="mono", help="The style of progress indicator (verbose, dots, " "color, mono)") parser.add_option("--json-test-results", help="Path to a file for storing json results.") parser.add_option('--slow-tests-cutoff', type="int", default=100, help='Collect N slowest tests') - parser.add_option("--junitout", help="File name of the JUnit output") - parser.add_option("--junittestsuite", default="v8tests", - help="The testsuite name in the JUnit output file") parser.add_option("--exit-after-n-failures", type="int", default=100, help="Exit after the first N failures instead of " "running all tests. Pass 0 to disable this feature.") @@ -641,7 +645,7 @@ class BaseTestRunner(object): self.build_config.arch in ['mipsel', 'mips', 'mips64', 'mips64el'] and self.build_config.mips_arch_variant) - no_simd_sse = any( + no_simd_hardware = any( i in options.extra_flags for i in ['--noenable-sse3', '--no-enable-sse3' '--noenable-ssse3', @@ -649,14 +653,16 @@ class BaseTestRunner(object): '--noenable-sse4-1', '--no-enable-sse4_1']) - # Set no_simd_sse on architectures without Simd enabled. + # Set no_simd_hardware on architectures without Simd enabled. if self.build_config.arch == 'mips64el' or \ self.build_config.arch == 'mipsel': - no_simd_sse = not simd_mips + no_simd_hardware = not simd_mips - # Set no_simd_sse on architectures without Simd enabled. - if self.build_config.arch == 'ppc64': - no_simd_sse = True + # Ppc64 processors earlier than POWER9 do not support Simd instructions + if self.build_config.arch == 'ppc64' and \ + not self.build_config.simulator_run and \ + utils.GuessPowerProcessorVersion() < 9: + no_simd_hardware = True return { "arch": self.build_config.arch, @@ -665,6 +671,7 @@ class BaseTestRunner(object): "cfi_vptr": self.build_config.cfi_vptr, "control_flow_integrity": self.build_config.control_flow_integrity, "concurrent_marking": self.build_config.concurrent_marking, + "single_generation": self.build_config.single_generation, "dcheck_always_on": self.build_config.dcheck_always_on, "deopt_fuzzer": False, "endurance_fuzzer": False, @@ -680,7 +687,7 @@ class BaseTestRunner(object): "msan": self.build_config.msan, "no_harness": options.no_harness, "no_i18n": self.build_config.no_i18n, - "no_simd_sse": no_simd_sse, + "no_simd_hardware": no_simd_hardware, "novfp3": False, "optimize_for_size": "--optimize-for-size" in options.extra_flags, "predictable": self.build_config.predictable, @@ -688,11 +695,13 @@ class BaseTestRunner(object): "simulator_run": self.build_config.simulator_run and not options.dont_skip_simulator_slow_tests, "system": self.target_os, + "third_party_heap": self.build_config.third_party_heap, "tsan": self.build_config.tsan, "ubsan_vptr": self.build_config.ubsan_vptr, "verify_csa": self.build_config.verify_csa, "lite_mode": self.build_config.lite_mode, "pointer_compression": self.build_config.pointer_compression, + "pointer_compression_shared_cage": self.build_config.pointer_compression_shared_cage, } def _runner_flags(self): @@ -725,6 +734,8 @@ class BaseTestRunner(object): factor *= 2 if self.build_config.predictable: factor *= 4 + if self.build_config.tsan: + factor *= 1.5 if self.build_config.use_sanitizer: factor *= 1.5 if self.build_config.is_full_debug: @@ -787,9 +798,6 @@ class BaseTestRunner(object): def _create_progress_indicators(self, test_count, options): procs = [PROGRESS_INDICATORS[options.progress]()] - if options.junitout: - procs.append(progress.JUnitTestProgressIndicator(options.junitout, - options.junittestsuite)) if options.json_test_results: procs.append(progress.JsonTestProgressIndicator(self.framework_name)) diff --git a/deps/v8/tools/testrunner/local/junit_output.py b/deps/v8/tools/testrunner/local/junit_output.py deleted file mode 100644 index 52f31ec422..0000000000 --- a/deps/v8/tools/testrunner/local/junit_output.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright 2013 the V8 project authors. All rights reserved. -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# * Neither the name of Google Inc. nor the names of its -# contributors may be used to endorse or promote products derived -# from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -import xml.etree.ElementTree as xml - - -class JUnitTestOutput: - def __init__(self, test_suite_name): - self.root = xml.Element("testsuite") - self.root.attrib["name"] = test_suite_name - - def HasRunTest(self, test_name, test_cmd, test_duration, test_failure): - testCaseElement = xml.Element("testcase") - testCaseElement.attrib["name"] = test_name - testCaseElement.attrib["cmd"] = test_cmd - testCaseElement.attrib["time"] = str(round(test_duration, 3)) - if len(test_failure): - failureElement = xml.Element("failure") - failureElement.text = test_failure - testCaseElement.append(failureElement) - self.root.append(testCaseElement) - - def FinishAndWrite(self, f): - xml.ElementTree(self.root).write(f, "UTF-8") diff --git a/deps/v8/tools/testrunner/local/statusfile.py b/deps/v8/tools/testrunner/local/statusfile.py index 6c2cc01fb8..b6f97cd564 100644 --- a/deps/v8/tools/testrunner/local/statusfile.py +++ b/deps/v8/tools/testrunner/local/statusfile.py @@ -282,7 +282,7 @@ def ReadStatusFile(content, variables): def _ReadSection(section, variables, rules, prefix_rules): assert type(section) == dict - for rule, outcome_list in section.iteritems(): + for rule, outcome_list in section.items(): assert type(rule) == str if rule[-1] == '*': diff --git a/deps/v8/tools/testrunner/local/utils.py b/deps/v8/tools/testrunner/local/utils.py index 8fdc16b4bb..94429a9fde 100644 --- a/deps/v8/tools/testrunner/local/utils.py +++ b/deps/v8/tools/testrunner/local/utils.py @@ -97,6 +97,58 @@ def GuessOS(): return None +# Returns power processor version, taking compatibility mode into account. +# (Power9 running in Power8 compatibility mode returns 8) +# Only useful if arch is ppc64 +def GuessPowerProcessorVersion(): + import ctypes, ctypes.util + os = GuessOS() + if os == 'linux': + AT_PLATFORM = 15 # from linux/auxvec.h + _LIBC = ctypes.CDLL(ctypes.util.find_library('c')) + _LIBC.getauxval.argtypes = [ctypes.c_ulong] + _LIBC.getauxval.restype = ctypes.c_char_p + at_platform = _LIBC.getauxval(AT_PLATFORM).decode('utf-8').lower() + if at_platform.startswith('power6'): + return 6 + elif at_platform.startswith('power7'): + return 7 + elif at_platform.startswith('power8'): + return 8 + elif at_platform.startswith('power9'): + return 9 + elif at_platform.startswith('power10'): + return 10 + else: + raise Exception('Unable to guess power processor version') + elif os == 'aix': + # covers aix and os400 + RTLD_MEMBER = 0x00040000 + _LIBC = ctypes.CDLL(ctypes.util.find_library('c'), + ctypes.DEFAULT_MODE | RTLD_MEMBER) + class _system_configuration(ctypes.Structure): + _fields_ = [ + ('architecture', ctypes.c_int), + ('implementation', ctypes.c_int), + ] + cfg = _system_configuration.in_dll(_LIBC, '_system_configuration') + # Values found in sys/systemcfg.h + if cfg.implementation == 0x4000: + return 6 + elif cfg.implementation == 0x8000: + return 7 + elif cfg.implementation == 0x10000: + return 8 + elif cfg.implementation == 0x20000: + return 9 + elif cfg.implementation == 0x40000: + return 10 + else: + raise Exception('Unable to guess power processor version') + else: + raise Exception('Unable to guess power processor version') + + def UseSimulator(arch): machine = platform.machine() return (machine and diff --git a/deps/v8/tools/testrunner/local/variants.py b/deps/v8/tools/testrunner/local/variants.py index 0af6d3ab0e..e214de0540 100644 --- a/deps/v8/tools/testrunner/local/variants.py +++ b/deps/v8/tools/testrunner/local/variants.py @@ -44,6 +44,7 @@ ALL_VARIANT_FLAGS = { "instruction_scheduling": [["--turbo-instruction-scheduling"]], "stress_instruction_scheduling": [["--turbo-stress-instruction-scheduling"]], "top_level_await": [["--harmony-top-level-await"]], + "wasm_write_protect_code": [["--wasm-write-protect-code-memory"]], } # Flags that lead to a contradiction with the flags provided by the respective @@ -59,9 +60,9 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = { "slow_path": ["--no-force-slow-path"], "stress_concurrent_allocation": ["--single-threaded-gc", "--predictable"], "stress_concurrent_inlining": ["--single-threaded", "--predictable", - "--no-turbo-direct-heap-access"], + "--no-concurrent-inlining"], + "concurrent_inlining": ["--no-concurrent-inlining"], "stress_incremental_marking": ["--no-stress-incremental-marking"], - "future": ["--no-turbo-direct-heap-access"], "stress_js_bg_compile_wasm_code_gc": ["--no-stress-background-compile"], "stress": ["--no-stress-opt", "--always-opt", "--no-always-opt", "--liftoff", "--max-inlined-bytecode-size=*", @@ -69,16 +70,17 @@ INCOMPATIBLE_FLAGS_PER_VARIANT = { "--wasm-generic-wrapper"], "sparkplug": ["--jitless", "--no-sparkplug" ], "always_sparkplug": ["--jitless", "--no-sparkplug", "--no-always-sparkplug"], - "turboprop": ["--interrupt-budget=*", "--no-turbo-direct-heap-access", - "--no-turboprop"], - "turboprop_as_toptier": ["--interrupt-budget=*", - "--no-turbo-direct-heap-access", "--no-turboprop", + "turboprop": ["--interrupt-budget=*", "--no-turboprop"], + "turboprop_as_toptier": ["--interrupt-budget=*", "--no-turboprop", "--no-turboprop-as-toptier"], "code_serializer": ["--cache=after-execute", "--cache=full-code-cache", "--cache=none"], "no_local_heaps": ["--concurrent-inlining", "--turboprop"], "experimental_regexp": ["--no-enable-experimental-regexp-engine", "--no-default-to-experimental-regexp-engine"], + # There is a negative implication: --perf-prof disables + # --wasm-write-protect-code-memory. + "wasm_write_protect_code": ["--perf-prof"], } # Flags that lead to a contradiction under certain build variables. @@ -101,6 +103,8 @@ INCOMPATIBLE_FLAGS_PER_BUILD_VARIABLE = { # The conflicts might be directly contradictory flags or be caused by the # implications defined in flag-definitions.h. INCOMPATIBLE_FLAGS_PER_EXTRA_FLAG = { + "--concurrent-inlining": + INCOMPATIBLE_FLAGS_PER_VARIANT["concurrent_inlining"], "--concurrent-recompilation": ["--no-concurrent-recompilation", "--predictable"], "--enable-armv8": ["--no-enable-armv8"], "--gc-interval=*": ["--gc-interval=*"], @@ -109,9 +113,9 @@ INCOMPATIBLE_FLAGS_PER_EXTRA_FLAG = { "--no-enable-sse4-1": ["--enable-sse4-1"], "--optimize-for-size": ["--max-semi-space-size=*"], "--stress_concurrent_allocation": ["--single-threaded-gc", "--predictable"], - "--stress_concurrent_inlining": ["--single-threaded", "--predictable"], + "--stress-concurrent-inlining": + INCOMPATIBLE_FLAGS_PER_VARIANT["stress_concurrent_inlining"], "--stress-flush-bytecode": ["--no-stress-flush-bytecode"], - "--future": ["--no-turbo-direct-heap-access"], "--stress-incremental-marking": INCOMPATIBLE_FLAGS_PER_VARIANT["stress_incremental_marking"], } diff --git a/deps/v8/tools/testrunner/outproc/message.py b/deps/v8/tools/testrunner/outproc/message.py index c253b6f8e0..c301529eb7 100644 --- a/deps/v8/tools/testrunner/outproc/message.py +++ b/deps/v8/tools/testrunner/outproc/message.py @@ -9,9 +9,11 @@ import re from . import base -class OutProc(base.OutProc): - def __init__(self, expected_outcomes, basepath, expected_fail): - super(OutProc, self).__init__(expected_outcomes) +class OutProc(base.ExpectedOutProc): + def __init__(self, expected_outcomes, basepath, expected_fail, + expected_filename, regenerate_expected_files): + super(OutProc, self).__init__(expected_outcomes, expected_filename, + regenerate_expected_files) self._basepath = basepath self._expected_fail = expected_fail diff --git a/deps/v8/tools/testrunner/standard_runner.py b/deps/v8/tools/testrunner/standard_runner.py index f3551d01b8..94c2576682 100755 --- a/deps/v8/tools/testrunner/standard_runner.py +++ b/deps/v8/tools/testrunner/standard_runner.py @@ -46,7 +46,7 @@ VARIANT_ALIASES = { 'exhaustive': MORE_VARIANTS + VARIANTS, # Additional variants, run on a subset of bots. 'extra': ['nooptimization', 'future', 'no_wasm_traps', 'turboprop', - 'instruction_scheduling', 'turboprop_as_toptier'], + 'instruction_scheduling', 'always_sparkplug'], } # Extra flags passed to all tests using the standard test runner. diff --git a/deps/v8/tools/testrunner/testproc/fuzzer.py b/deps/v8/tools/testrunner/testproc/fuzzer.py index 965ba23d04..1237da56b2 100644 --- a/deps/v8/tools/testrunner/testproc/fuzzer.py +++ b/deps/v8/tools/testrunner/testproc/fuzzer.py @@ -43,6 +43,7 @@ EXTRA_FLAGS = [ (0.1, '--regexp-tier-up-ticks=10'), (0.1, '--regexp-tier-up-ticks=100'), (0.1, '--stress-background-compile'), + (0.1, '--stress-concurrent-inlining'), (0.1, '--stress-lazy-source-positions'), (0.1, '--stress-wasm-code-gc'), (0.1, '--turbo-instruction-scheduling'), diff --git a/deps/v8/tools/testrunner/testproc/progress.py b/deps/v8/tools/testrunner/testproc/progress.py index 634ef7c2f2..9ff943a5c2 100644 --- a/deps/v8/tools/testrunner/testproc/progress.py +++ b/deps/v8/tools/testrunner/testproc/progress.py @@ -15,7 +15,6 @@ import time from . import base from . import util -from ..local import junit_output def print_failure_header(test): @@ -349,45 +348,6 @@ class MonochromeProgressIndicator(CompactProgressIndicator): print(("\r" + (" " * last_length) + "\r"), end='') -class JUnitTestProgressIndicator(ProgressIndicator): - def __init__(self, junitout, junittestsuite): - super(JUnitTestProgressIndicator, self).__init__() - self._requirement = base.DROP_PASS_STDOUT - - self.outputter = junit_output.JUnitTestOutput(junittestsuite) - if junitout: - self.outfile = open(junitout, "w") - else: - self.outfile = sys.stdout - - def _on_result_for(self, test, result): - # TODO(majeski): Support for dummy/grouped results - fail_text = "" - output = result.output - if result.has_unexpected_output: - stdout = output.stdout.strip() - if len(stdout): - fail_text += "stdout:\n%s\n" % stdout - stderr = output.stderr.strip() - if len(stderr): - fail_text += "stderr:\n%s\n" % stderr - fail_text += "Command: %s" % result.cmd.to_string() - if output.HasCrashed(): - fail_text += "exit code: %d\n--- CRASHED ---" % output.exit_code - if output.HasTimedOut(): - fail_text += "--- TIMEOUT ---" - self.outputter.HasRunTest( - test_name=str(test), - test_cmd=result.cmd.to_string(relative=True), - test_duration=output.duration, - test_failure=fail_text) - - def finished(self): - self.outputter.FinishAndWrite(self.outfile) - if self.outfile != sys.stdout: - self.outfile.close() - - class JsonTestProgressIndicator(ProgressIndicator): def __init__(self, framework_name): super(JsonTestProgressIndicator, self).__init__() diff --git a/deps/v8/tools/tickprocessor-driver.mjs b/deps/v8/tools/tickprocessor-driver.mjs index e7020e388d..c0507bfffe 100644 --- a/deps/v8/tools/tickprocessor-driver.mjs +++ b/deps/v8/tools/tickprocessor-driver.mjs @@ -73,6 +73,7 @@ const tickProcessor = new TickProcessor( params.separateBytecodes, params.separateBuiltins, params.separateStubs, + params.separateBaselineHandlers, params.callGraphSize, params.ignoreUnknown, params.stateFilter, @@ -85,4 +86,9 @@ const tickProcessor = new TickProcessor( params.runtimeTimerFilter, params.preprocessJson); tickProcessor.processLogFile(params.logFileName); -tickProcessor.printStatistics(); + +if (params.serializeVMSymbols) { + tickProcessor.printVMSymbols(); +} else { + tickProcessor.printStatistics(); +} diff --git a/deps/v8/tools/tickprocessor.mjs b/deps/v8/tools/tickprocessor.mjs index 1ad67e22c0..8b59e57335 100644 --- a/deps/v8/tools/tickprocessor.mjs +++ b/deps/v8/tools/tickprocessor.mjs @@ -35,10 +35,12 @@ class V8Profile extends Profile { static IC_RE = /^(LoadGlobalIC: )|(Handler: )|(?:CallIC|LoadIC|StoreIC)|(?:Builtin: (?:Keyed)?(?:Load|Store)IC_)/; static BYTECODES_RE = /^(BytecodeHandler: )/; + static BASELINE_HANDLERS_RE = /^(Builtin: .*Baseline.*)/; static BUILTINS_RE = /^(Builtin: )/; static STUBS_RE = /^(Stub: )/; - constructor(separateIc, separateBytecodes, separateBuiltins, separateStubs) { + constructor(separateIc, separateBytecodes, separateBuiltins, separateStubs, + separateBaselineHandlers) { super(); const regexps = []; if (!separateIc) regexps.push(V8Profile.IC_RE); @@ -46,7 +48,7 @@ class V8Profile extends Profile { if (!separateBuiltins) regexps.push(V8Profile.BUILTINS_RE); if (!separateStubs) regexps.push(V8Profile.STUBS_RE); if (regexps.length > 0) { - this.skipThisFunction = function (name) { + this.skipThisFunction = function(name) { for (let i = 0; i < regexps.length; i++) { if (regexps[i].test(name)) return true; } @@ -64,7 +66,7 @@ export function readFile(fileName) { try { return read(fileName); } catch (e) { - printErr(`${fileName}: ${e.message || e}`); + printErr(`file="${fileName}": ${e.message || e}`); throw e; } } @@ -77,6 +79,7 @@ export class TickProcessor extends LogReader { separateBytecodes, separateBuiltins, separateStubs, + separateBaselineHandlers, callGraphSize, ignoreUnknown, stateFilter, @@ -211,7 +214,7 @@ export class TickProcessor extends LogReader { this.profile_ = new JsonProfile(); } else { this.profile_ = new V8Profile(separateIc, separateBytecodes, - separateBuiltins, separateStubs); + separateBuiltins, separateStubs, separateBaselineHandlers); } this.codeTypes_ = {}; // Count each tick as a time unit. @@ -228,6 +231,7 @@ export class TickProcessor extends LogReader { GC: 1, PARSER: 2, BYTECODE_COMPILER: 3, + // TODO(cbruni): add BASELINE_COMPILER COMPILER: 4, OTHER: 5, EXTERNAL: 6, @@ -285,7 +289,7 @@ export class TickProcessor extends LogReader { processSharedLibrary(name, startAddr, endAddr, aslrSlide) { const entry = this.profile_.addLibrary(name, startAddr, endAddr, aslrSlide); this.setCodeType(entry.getName(), 'SHARED_LIB'); - const libFuncs = this.cppEntriesProvider_.parseVmSymbols( + this.cppEntriesProvider_.parseVmSymbols( name, startAddr, endAddr, aslrSlide, (fName, fStart, fEnd) => { this.profile_.addStaticCode(fName, fStart, fEnd); this.setCodeType(fName, 'CPP'); @@ -409,6 +413,11 @@ export class TickProcessor extends LogReader { this.generation_++; } + printVMSymbols() { + console.log( + JSON.stringify(this.profile_.serializeVMSymbols())); + } + printStatistics() { if (this.preprocessJson) { this.profile_.writeJson(); @@ -854,6 +863,8 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { 'Separate Builtin entries'], '--separate-stubs': ['separateStubs', parseBool, 'Separate Stub entries'], + '--separate-baseline-handlers': ['separateBaselineHandlers', parseBool, + 'Separate Baseline Handler entries'], '--unix': ['platform', 'unix', 'Specify that we are running on *nix platform'], '--windows': ['platform', 'windows', @@ -880,6 +891,8 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { 'Ignore ticks outside pairs of Date.now() calls'], '--only-summary': ['onlySummary', true, 'Print only tick summary, exclude other information'], + '--serialize-vm-symbols': ['serializeVMSymbols', true, + 'Print all C++ symbols and library addresses as JSON data'], '--preprocess': ['preprocessJson', true, 'Preprocess for consumption with web interface'] }; @@ -903,6 +916,7 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { separateBytecodes: false, separateBuiltins: true, separateStubs: true, + separateBaselineHandlers: false, preprocessJson: null, targetRootFS: '', nm: 'nm', @@ -913,6 +927,7 @@ export class ArgumentsProcessor extends BaseArgumentsProcessor { pairwiseTimedRange: false, onlySummary: false, runtimeTimerFilter: null, + serializeVMSymbols: false, }; } } diff --git a/deps/v8/tools/ubsan/blacklist.txt b/deps/v8/tools/ubsan/ignorelist.txt index ea4e79bf52..4e476abe49 100644 --- a/deps/v8/tools/ubsan/blacklist.txt +++ b/deps/v8/tools/ubsan/ignorelist.txt @@ -1,5 +1,5 @@ ############################################################################# -# UBSan blacklist. +# UBSan ignorelist. # Bug 8735: PropertyCallbackInfo<void> vs PropertyCallbackInfo<T>. fun:*v8*internal*PropertyCallbackArguments*CallAccessorSetter* diff --git a/deps/v8/tools/ubsan/vptr_blacklist.txt b/deps/v8/tools/ubsan/vptr_ignorelist.txt index ccad5b1061..26c30ed02d 100644 --- a/deps/v8/tools/ubsan/vptr_blacklist.txt +++ b/deps/v8/tools/ubsan/vptr_ignorelist.txt @@ -1,9 +1,9 @@ ############################################################################# -# UBSan vptr blacklist. -# Function and type based blacklisting use a mangled name, and it is especially +# UBSan vptr ignorelist. +# Function and type based ignorelisting use a mangled name, and it is especially # tricky to represent C++ types. For now, any possible changes by name manglings # are simply represented as wildcard expressions of regexp, and thus it might be -# over-blacklisted. +# over-ignorelisted. ############################################################################# # UBsan goes into an infinite recursion when __dynamic_cast instrumented with diff --git a/deps/v8/tools/unittests/run_tests_test.py b/deps/v8/tools/unittests/run_tests_test.py index f174a239bf..ae3833abc8 100755 --- a/deps/v8/tools/unittests/run_tests_test.py +++ b/deps/v8/tools/unittests/run_tests_test.py @@ -334,7 +334,8 @@ class SystemTest(unittest.TestCase): is_msan=True, is_tsan=True, is_ubsan_vptr=True, target_cpu='x86', v8_enable_i18n_support=False, v8_target_cpu='x86', v8_enable_verify_csa=False, v8_enable_lite_mode=False, - v8_enable_pointer_compression=False) + v8_enable_pointer_compression=False, + v8_enable_pointer_compression_shared_cage=False) result = run_tests( basedir, '--progress=verbose', diff --git a/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json b/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json index eb30c4d28f..04ccbb1600 100644 --- a/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json +++ b/deps/v8/tools/unittests/testdata/testroot1/v8_build_config.json @@ -21,6 +21,9 @@ "v8_enable_verify_csa": false, "v8_enable_lite_mode": false, "v8_enable_pointer_compression": true, + "v8_enable_pointer_compression_shared_cage": true, "v8_control_flow_integrity": false, + "v8_enable_single_generation": false, + "v8_enable_third_party_heap": false, "v8_enable_webassembly": true } diff --git a/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json b/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json index e6d5b52942..b3e36ef6de 100644 --- a/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json +++ b/deps/v8/tools/unittests/testdata/testroot2/v8_build_config.json @@ -21,6 +21,9 @@ "v8_enable_verify_csa": false, "v8_enable_lite_mode": false, "v8_enable_pointer_compression": false, + "v8_enable_pointer_compression_shared_cage": false, "v8_control_flow_integrity": false, + "v8_enable_single_generation": false, + "v8_enable_third_party_heap": false, "v8_enable_webassembly": true } diff --git a/deps/v8/tools/v8.xcodeproj/README.txt b/deps/v8/tools/v8.xcodeproj/README.txt new file mode 100644 index 0000000000..e064ff6bf1 --- /dev/null +++ b/deps/v8/tools/v8.xcodeproj/README.txt @@ -0,0 +1,11 @@ +The Xcode project for V8 has been retired. If an Xcode project +is needed for building on a Mac there is the option of using GYP to +generate it. Please look in the build directory in the root of the +V8 project. It contains the required infrastructure and a README.txt +file explaining how to get started. + +Generating Xcode projects using GYP is how the Chromium +project integrated V8 into the Mac build. + +The main build system for V8 is still SCons, see +http://code.google.com/apis/v8/build.html for details. diff --git a/deps/v8/tools/v8_presubmit.py b/deps/v8/tools/v8_presubmit.py index db008aabf1..f421279451 100755 --- a/deps/v8/tools/v8_presubmit.py +++ b/deps/v8/tools/v8_presubmit.py @@ -63,6 +63,8 @@ from testrunner.local import utils # runtime/references: As of May 2020 the C++ style guide suggests using # references for out parameters, see # https://google.github.io/styleguide/cppguide.html#Inputs_and_Outputs. +# whitespace/braces: Doesn't handle {}-initialization for custom types +# well; also should be subsumed by clang-format. LINT_RULES = """ -build/header_guard @@ -70,6 +72,7 @@ LINT_RULES = """ -readability/fn_size -readability/multiline_comment -runtime/references +-whitespace/braces -whitespace/comments """.split() diff --git a/deps/v8/tools/v8heapconst.py b/deps/v8/tools/v8heapconst.py index f0cc6481a8..c28123dcec 100644 --- a/deps/v8/tools/v8heapconst.py +++ b/deps/v8/tools/v8heapconst.py @@ -32,126 +32,128 @@ INSTANCE_TYPES = { 68: "ABSTRACT_INTERNAL_CLASS_SUBCLASS1_TYPE", 69: "ABSTRACT_INTERNAL_CLASS_SUBCLASS2_TYPE", 70: "FOREIGN_TYPE", - 71: "WASM_TYPE_INFO_TYPE", - 72: "PROMISE_FULFILL_REACTION_JOB_TASK_TYPE", - 73: "PROMISE_REJECT_REACTION_JOB_TASK_TYPE", - 74: "CALLABLE_TASK_TYPE", - 75: "CALLBACK_TASK_TYPE", - 76: "PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE", - 77: "LOAD_HANDLER_TYPE", - 78: "STORE_HANDLER_TYPE", - 79: "FUNCTION_TEMPLATE_INFO_TYPE", - 80: "OBJECT_TEMPLATE_INFO_TYPE", - 81: "ACCESS_CHECK_INFO_TYPE", - 82: "ACCESSOR_INFO_TYPE", - 83: "ACCESSOR_PAIR_TYPE", - 84: "ALIASED_ARGUMENTS_ENTRY_TYPE", - 85: "ALLOCATION_MEMENTO_TYPE", - 86: "ALLOCATION_SITE_TYPE", - 87: "ARRAY_BOILERPLATE_DESCRIPTION_TYPE", - 88: "ASM_WASM_DATA_TYPE", - 89: "ASYNC_GENERATOR_REQUEST_TYPE", - 90: "BASELINE_DATA_TYPE", - 91: "BREAK_POINT_TYPE", - 92: "BREAK_POINT_INFO_TYPE", - 93: "CACHED_TEMPLATE_OBJECT_TYPE", - 94: "CALL_HANDLER_INFO_TYPE", - 95: "CLASS_POSITIONS_TYPE", - 96: "DEBUG_INFO_TYPE", - 97: "ENUM_CACHE_TYPE", - 98: "FEEDBACK_CELL_TYPE", - 99: "FUNCTION_TEMPLATE_RARE_DATA_TYPE", - 100: "INTERCEPTOR_INFO_TYPE", - 101: "INTERPRETER_DATA_TYPE", - 102: "MODULE_REQUEST_TYPE", - 103: "PROMISE_CAPABILITY_TYPE", - 104: "PROMISE_REACTION_TYPE", - 105: "PROPERTY_DESCRIPTOR_OBJECT_TYPE", - 106: "PROTOTYPE_INFO_TYPE", - 107: "REG_EXP_BOILERPLATE_DESCRIPTION_TYPE", - 108: "SCRIPT_TYPE", - 109: "SOURCE_TEXT_MODULE_INFO_ENTRY_TYPE", - 110: "STACK_FRAME_INFO_TYPE", - 111: "TEMPLATE_OBJECT_DESCRIPTION_TYPE", - 112: "TUPLE2_TYPE", - 113: "WASM_EXCEPTION_TAG_TYPE", - 114: "WASM_EXPORTED_FUNCTION_DATA_TYPE", - 115: "WASM_INDIRECT_FUNCTION_TABLE_TYPE", - 116: "WASM_JS_FUNCTION_DATA_TYPE", - 117: "FIXED_ARRAY_TYPE", - 118: "HASH_TABLE_TYPE", - 119: "EPHEMERON_HASH_TABLE_TYPE", - 120: "GLOBAL_DICTIONARY_TYPE", - 121: "NAME_DICTIONARY_TYPE", - 122: "NUMBER_DICTIONARY_TYPE", - 123: "ORDERED_HASH_MAP_TYPE", - 124: "ORDERED_HASH_SET_TYPE", - 125: "ORDERED_NAME_DICTIONARY_TYPE", - 126: "SIMPLE_NUMBER_DICTIONARY_TYPE", - 127: "CLOSURE_FEEDBACK_CELL_ARRAY_TYPE", - 128: "OBJECT_BOILERPLATE_DESCRIPTION_TYPE", - 129: "SCRIPT_CONTEXT_TABLE_TYPE", - 130: "BYTE_ARRAY_TYPE", - 131: "BYTECODE_ARRAY_TYPE", - 132: "FIXED_DOUBLE_ARRAY_TYPE", - 133: "INTERNAL_CLASS_WITH_SMI_ELEMENTS_TYPE", - 134: "SLOPPY_ARGUMENTS_ELEMENTS_TYPE", - 135: "AWAIT_CONTEXT_TYPE", - 136: "BLOCK_CONTEXT_TYPE", - 137: "CATCH_CONTEXT_TYPE", - 138: "DEBUG_EVALUATE_CONTEXT_TYPE", - 139: "EVAL_CONTEXT_TYPE", - 140: "FUNCTION_CONTEXT_TYPE", - 141: "MODULE_CONTEXT_TYPE", - 142: "NATIVE_CONTEXT_TYPE", - 143: "SCRIPT_CONTEXT_TYPE", - 144: "WITH_CONTEXT_TYPE", - 145: "EXPORTED_SUB_CLASS_BASE_TYPE", - 146: "EXPORTED_SUB_CLASS_TYPE", - 147: "EXPORTED_SUB_CLASS2_TYPE", - 148: "SMALL_ORDERED_HASH_MAP_TYPE", - 149: "SMALL_ORDERED_HASH_SET_TYPE", - 150: "SMALL_ORDERED_NAME_DICTIONARY_TYPE", - 151: "DESCRIPTOR_ARRAY_TYPE", - 152: "STRONG_DESCRIPTOR_ARRAY_TYPE", - 153: "SOURCE_TEXT_MODULE_TYPE", - 154: "SYNTHETIC_MODULE_TYPE", - 155: "UNCOMPILED_DATA_WITH_PREPARSE_DATA_TYPE", - 156: "UNCOMPILED_DATA_WITHOUT_PREPARSE_DATA_TYPE", - 157: "WEAK_FIXED_ARRAY_TYPE", - 158: "TRANSITION_ARRAY_TYPE", - 159: "CELL_TYPE", - 160: "CODE_TYPE", - 161: "CODE_DATA_CONTAINER_TYPE", - 162: "COVERAGE_INFO_TYPE", - 163: "EMBEDDER_DATA_ARRAY_TYPE", - 164: "FEEDBACK_METADATA_TYPE", - 165: "FEEDBACK_VECTOR_TYPE", - 166: "FILLER_TYPE", - 167: "FREE_SPACE_TYPE", - 168: "INTERNAL_CLASS_TYPE", - 169: "INTERNAL_CLASS_WITH_STRUCT_ELEMENTS_TYPE", - 170: "MAP_TYPE", - 171: "ON_HEAP_BASIC_BLOCK_PROFILER_DATA_TYPE", - 172: "PREPARSE_DATA_TYPE", - 173: "PROPERTY_ARRAY_TYPE", - 174: "PROPERTY_CELL_TYPE", - 175: "SCOPE_INFO_TYPE", - 176: "SHARED_FUNCTION_INFO_TYPE", - 177: "SMI_BOX_TYPE", - 178: "SMI_PAIR_TYPE", - 179: "SORT_STATE_TYPE", - 180: "SWISS_NAME_DICTIONARY_TYPE", - 181: "WASM_ARRAY_TYPE", - 182: "WASM_CAPI_FUNCTION_DATA_TYPE", - 183: "WASM_STRUCT_TYPE", - 184: "WEAK_ARRAY_LIST_TYPE", - 185: "WEAK_CELL_TYPE", - 186: "JS_PROXY_TYPE", + 71: "WASM_FUNCTION_DATA_TYPE", + 72: "WASM_EXPORTED_FUNCTION_DATA_TYPE", + 73: "WASM_JS_FUNCTION_DATA_TYPE", + 74: "WASM_TYPE_INFO_TYPE", + 75: "PROMISE_FULFILL_REACTION_JOB_TASK_TYPE", + 76: "PROMISE_REJECT_REACTION_JOB_TASK_TYPE", + 77: "CALLABLE_TASK_TYPE", + 78: "CALLBACK_TASK_TYPE", + 79: "PROMISE_RESOLVE_THENABLE_JOB_TASK_TYPE", + 80: "LOAD_HANDLER_TYPE", + 81: "STORE_HANDLER_TYPE", + 82: "FUNCTION_TEMPLATE_INFO_TYPE", + 83: "OBJECT_TEMPLATE_INFO_TYPE", + 84: "ACCESS_CHECK_INFO_TYPE", + 85: "ACCESSOR_INFO_TYPE", + 86: "ACCESSOR_PAIR_TYPE", + 87: "ALIASED_ARGUMENTS_ENTRY_TYPE", + 88: "ALLOCATION_MEMENTO_TYPE", + 89: "ALLOCATION_SITE_TYPE", + 90: "ARRAY_BOILERPLATE_DESCRIPTION_TYPE", + 91: "ASM_WASM_DATA_TYPE", + 92: "ASYNC_GENERATOR_REQUEST_TYPE", + 93: "BASELINE_DATA_TYPE", + 94: "BREAK_POINT_TYPE", + 95: "BREAK_POINT_INFO_TYPE", + 96: "CACHED_TEMPLATE_OBJECT_TYPE", + 97: "CALL_HANDLER_INFO_TYPE", + 98: "CLASS_POSITIONS_TYPE", + 99: "DEBUG_INFO_TYPE", + 100: "ENUM_CACHE_TYPE", + 101: "FEEDBACK_CELL_TYPE", + 102: "FUNCTION_TEMPLATE_RARE_DATA_TYPE", + 103: "INTERCEPTOR_INFO_TYPE", + 104: "INTERPRETER_DATA_TYPE", + 105: "MODULE_REQUEST_TYPE", + 106: "PROMISE_CAPABILITY_TYPE", + 107: "PROMISE_REACTION_TYPE", + 108: "PROPERTY_DESCRIPTOR_OBJECT_TYPE", + 109: "PROTOTYPE_INFO_TYPE", + 110: "REG_EXP_BOILERPLATE_DESCRIPTION_TYPE", + 111: "SCRIPT_TYPE", + 112: "SOURCE_TEXT_MODULE_INFO_ENTRY_TYPE", + 113: "STACK_FRAME_INFO_TYPE", + 114: "TEMPLATE_OBJECT_DESCRIPTION_TYPE", + 115: "TUPLE2_TYPE", + 116: "WASM_EXCEPTION_TAG_TYPE", + 117: "WASM_INDIRECT_FUNCTION_TABLE_TYPE", + 118: "FIXED_ARRAY_TYPE", + 119: "HASH_TABLE_TYPE", + 120: "EPHEMERON_HASH_TABLE_TYPE", + 121: "GLOBAL_DICTIONARY_TYPE", + 122: "NAME_DICTIONARY_TYPE", + 123: "NUMBER_DICTIONARY_TYPE", + 124: "ORDERED_HASH_MAP_TYPE", + 125: "ORDERED_HASH_SET_TYPE", + 126: "ORDERED_NAME_DICTIONARY_TYPE", + 127: "SIMPLE_NUMBER_DICTIONARY_TYPE", + 128: "CLOSURE_FEEDBACK_CELL_ARRAY_TYPE", + 129: "OBJECT_BOILERPLATE_DESCRIPTION_TYPE", + 130: "SCRIPT_CONTEXT_TABLE_TYPE", + 131: "BYTE_ARRAY_TYPE", + 132: "BYTECODE_ARRAY_TYPE", + 133: "FIXED_DOUBLE_ARRAY_TYPE", + 134: "INTERNAL_CLASS_WITH_SMI_ELEMENTS_TYPE", + 135: "SLOPPY_ARGUMENTS_ELEMENTS_TYPE", + 136: "AWAIT_CONTEXT_TYPE", + 137: "BLOCK_CONTEXT_TYPE", + 138: "CATCH_CONTEXT_TYPE", + 139: "DEBUG_EVALUATE_CONTEXT_TYPE", + 140: "EVAL_CONTEXT_TYPE", + 141: "FUNCTION_CONTEXT_TYPE", + 142: "MODULE_CONTEXT_TYPE", + 143: "NATIVE_CONTEXT_TYPE", + 144: "SCRIPT_CONTEXT_TYPE", + 145: "WITH_CONTEXT_TYPE", + 146: "EXPORTED_SUB_CLASS_BASE_TYPE", + 147: "EXPORTED_SUB_CLASS_TYPE", + 148: "EXPORTED_SUB_CLASS2_TYPE", + 149: "SMALL_ORDERED_HASH_MAP_TYPE", + 150: "SMALL_ORDERED_HASH_SET_TYPE", + 151: "SMALL_ORDERED_NAME_DICTIONARY_TYPE", + 152: "DESCRIPTOR_ARRAY_TYPE", + 153: "STRONG_DESCRIPTOR_ARRAY_TYPE", + 154: "SOURCE_TEXT_MODULE_TYPE", + 155: "SYNTHETIC_MODULE_TYPE", + 156: "UNCOMPILED_DATA_WITH_PREPARSE_DATA_TYPE", + 157: "UNCOMPILED_DATA_WITHOUT_PREPARSE_DATA_TYPE", + 158: "WEAK_FIXED_ARRAY_TYPE", + 159: "TRANSITION_ARRAY_TYPE", + 160: "CELL_TYPE", + 161: "CODE_TYPE", + 162: "CODE_DATA_CONTAINER_TYPE", + 163: "COVERAGE_INFO_TYPE", + 164: "EMBEDDER_DATA_ARRAY_TYPE", + 165: "FEEDBACK_METADATA_TYPE", + 166: "FEEDBACK_VECTOR_TYPE", + 167: "FILLER_TYPE", + 168: "FREE_SPACE_TYPE", + 169: "INTERNAL_CLASS_TYPE", + 170: "INTERNAL_CLASS_WITH_STRUCT_ELEMENTS_TYPE", + 171: "MAP_TYPE", + 172: "MEGA_DOM_HANDLER_TYPE", + 173: "ON_HEAP_BASIC_BLOCK_PROFILER_DATA_TYPE", + 174: "PREPARSE_DATA_TYPE", + 175: "PROPERTY_ARRAY_TYPE", + 176: "PROPERTY_CELL_TYPE", + 177: "SCOPE_INFO_TYPE", + 178: "SHARED_FUNCTION_INFO_TYPE", + 179: "SMI_BOX_TYPE", + 180: "SMI_PAIR_TYPE", + 181: "SORT_STATE_TYPE", + 182: "SWISS_NAME_DICTIONARY_TYPE", + 183: "WASM_ARRAY_TYPE", + 184: "WASM_CAPI_FUNCTION_DATA_TYPE", + 185: "WASM_STRUCT_TYPE", + 186: "WEAK_ARRAY_LIST_TYPE", + 187: "WEAK_CELL_TYPE", + 188: "JS_PROXY_TYPE", 1057: "JS_OBJECT_TYPE", - 187: "JS_GLOBAL_OBJECT_TYPE", - 188: "JS_GLOBAL_PROXY_TYPE", - 189: "JS_MODULE_NAMESPACE_TYPE", + 189: "JS_GLOBAL_OBJECT_TYPE", + 190: "JS_GLOBAL_PROXY_TYPE", + 191: "JS_MODULE_NAMESPACE_TYPE", 1040: "JS_SPECIAL_API_OBJECT_TYPE", 1041: "JS_PRIMITIVE_WRAPPER_TYPE", 1042: "JS_ARRAY_ITERATOR_PROTOTYPE_TYPE", @@ -233,159 +235,160 @@ INSTANCE_TYPES = { # List of known V8 maps. KNOWN_MAPS = { - ("read_only_space", 0x02119): (170, "MetaMap"), + ("read_only_space", 0x02119): (171, "MetaMap"), ("read_only_space", 0x02141): (67, "NullMap"), - ("read_only_space", 0x02169): (152, "StrongDescriptorArrayMap"), - ("read_only_space", 0x02191): (157, "WeakFixedArrayMap"), - ("read_only_space", 0x021d1): (97, "EnumCacheMap"), - ("read_only_space", 0x02205): (117, "FixedArrayMap"), + ("read_only_space", 0x02169): (153, "StrongDescriptorArrayMap"), + ("read_only_space", 0x02191): (158, "WeakFixedArrayMap"), + ("read_only_space", 0x021d1): (100, "EnumCacheMap"), + ("read_only_space", 0x02205): (118, "FixedArrayMap"), ("read_only_space", 0x02251): (8, "OneByteInternalizedStringMap"), - ("read_only_space", 0x0229d): (167, "FreeSpaceMap"), - ("read_only_space", 0x022c5): (166, "OnePointerFillerMap"), - ("read_only_space", 0x022ed): (166, "TwoPointerFillerMap"), + ("read_only_space", 0x0229d): (168, "FreeSpaceMap"), + ("read_only_space", 0x022c5): (167, "OnePointerFillerMap"), + ("read_only_space", 0x022ed): (167, "TwoPointerFillerMap"), ("read_only_space", 0x02315): (67, "UninitializedMap"), ("read_only_space", 0x0238d): (67, "UndefinedMap"), ("read_only_space", 0x023d1): (66, "HeapNumberMap"), ("read_only_space", 0x02405): (67, "TheHoleMap"), ("read_only_space", 0x02465): (67, "BooleanMap"), - ("read_only_space", 0x02509): (130, "ByteArrayMap"), - ("read_only_space", 0x02531): (117, "FixedCOWArrayMap"), - ("read_only_space", 0x02559): (118, "HashTableMap"), + ("read_only_space", 0x02509): (131, "ByteArrayMap"), + ("read_only_space", 0x02531): (118, "FixedCOWArrayMap"), + ("read_only_space", 0x02559): (119, "HashTableMap"), ("read_only_space", 0x02581): (64, "SymbolMap"), ("read_only_space", 0x025a9): (40, "OneByteStringMap"), - ("read_only_space", 0x025d1): (175, "ScopeInfoMap"), - ("read_only_space", 0x025f9): (176, "SharedFunctionInfoMap"), - ("read_only_space", 0x02621): (160, "CodeMap"), - ("read_only_space", 0x02649): (159, "CellMap"), - ("read_only_space", 0x02671): (174, "GlobalPropertyCellMap"), + ("read_only_space", 0x025d1): (177, "ScopeInfoMap"), + ("read_only_space", 0x025f9): (178, "SharedFunctionInfoMap"), + ("read_only_space", 0x02621): (161, "CodeMap"), + ("read_only_space", 0x02649): (160, "CellMap"), + ("read_only_space", 0x02671): (176, "GlobalPropertyCellMap"), ("read_only_space", 0x02699): (70, "ForeignMap"), - ("read_only_space", 0x026c1): (158, "TransitionArrayMap"), + ("read_only_space", 0x026c1): (159, "TransitionArrayMap"), ("read_only_space", 0x026e9): (45, "ThinOneByteStringMap"), - ("read_only_space", 0x02711): (165, "FeedbackVectorMap"), + ("read_only_space", 0x02711): (166, "FeedbackVectorMap"), ("read_only_space", 0x02749): (67, "ArgumentsMarkerMap"), ("read_only_space", 0x027a9): (67, "ExceptionMap"), ("read_only_space", 0x02805): (67, "TerminationExceptionMap"), ("read_only_space", 0x0286d): (67, "OptimizedOutMap"), ("read_only_space", 0x028cd): (67, "StaleRegisterMap"), - ("read_only_space", 0x0292d): (129, "ScriptContextTableMap"), - ("read_only_space", 0x02955): (127, "ClosureFeedbackCellArrayMap"), - ("read_only_space", 0x0297d): (164, "FeedbackMetadataArrayMap"), - ("read_only_space", 0x029a5): (117, "ArrayListMap"), + ("read_only_space", 0x0292d): (130, "ScriptContextTableMap"), + ("read_only_space", 0x02955): (128, "ClosureFeedbackCellArrayMap"), + ("read_only_space", 0x0297d): (165, "FeedbackMetadataArrayMap"), + ("read_only_space", 0x029a5): (118, "ArrayListMap"), ("read_only_space", 0x029cd): (65, "BigIntMap"), - ("read_only_space", 0x029f5): (128, "ObjectBoilerplateDescriptionMap"), - ("read_only_space", 0x02a1d): (131, "BytecodeArrayMap"), - ("read_only_space", 0x02a45): (161, "CodeDataContainerMap"), - ("read_only_space", 0x02a6d): (162, "CoverageInfoMap"), - ("read_only_space", 0x02a95): (132, "FixedDoubleArrayMap"), - ("read_only_space", 0x02abd): (120, "GlobalDictionaryMap"), - ("read_only_space", 0x02ae5): (98, "ManyClosuresCellMap"), - ("read_only_space", 0x02b0d): (117, "ModuleInfoMap"), - ("read_only_space", 0x02b35): (121, "NameDictionaryMap"), - ("read_only_space", 0x02b5d): (98, "NoClosuresCellMap"), - ("read_only_space", 0x02b85): (122, "NumberDictionaryMap"), - ("read_only_space", 0x02bad): (98, "OneClosureCellMap"), - ("read_only_space", 0x02bd5): (123, "OrderedHashMapMap"), - ("read_only_space", 0x02bfd): (124, "OrderedHashSetMap"), - ("read_only_space", 0x02c25): (125, "OrderedNameDictionaryMap"), - ("read_only_space", 0x02c4d): (172, "PreparseDataMap"), - ("read_only_space", 0x02c75): (173, "PropertyArrayMap"), - ("read_only_space", 0x02c9d): (94, "SideEffectCallHandlerInfoMap"), - ("read_only_space", 0x02cc5): (94, "SideEffectFreeCallHandlerInfoMap"), - ("read_only_space", 0x02ced): (94, "NextCallSideEffectFreeCallHandlerInfoMap"), - ("read_only_space", 0x02d15): (126, "SimpleNumberDictionaryMap"), - ("read_only_space", 0x02d3d): (148, "SmallOrderedHashMapMap"), - ("read_only_space", 0x02d65): (149, "SmallOrderedHashSetMap"), - ("read_only_space", 0x02d8d): (150, "SmallOrderedNameDictionaryMap"), - ("read_only_space", 0x02db5): (153, "SourceTextModuleMap"), - ("read_only_space", 0x02ddd): (180, "SwissNameDictionaryMap"), - ("read_only_space", 0x02e05): (154, "SyntheticModuleMap"), - ("read_only_space", 0x02e2d): (71, "WasmTypeInfoMap"), - ("read_only_space", 0x02e55): (184, "WeakArrayListMap"), - ("read_only_space", 0x02e7d): (119, "EphemeronHashTableMap"), - ("read_only_space", 0x02ea5): (163, "EmbedderDataArrayMap"), - ("read_only_space", 0x02ecd): (185, "WeakCellMap"), - ("read_only_space", 0x02ef5): (32, "StringMap"), - ("read_only_space", 0x02f1d): (41, "ConsOneByteStringMap"), - ("read_only_space", 0x02f45): (33, "ConsStringMap"), - ("read_only_space", 0x02f6d): (37, "ThinStringMap"), - ("read_only_space", 0x02f95): (35, "SlicedStringMap"), - ("read_only_space", 0x02fbd): (43, "SlicedOneByteStringMap"), - ("read_only_space", 0x02fe5): (34, "ExternalStringMap"), - ("read_only_space", 0x0300d): (42, "ExternalOneByteStringMap"), - ("read_only_space", 0x03035): (50, "UncachedExternalStringMap"), - ("read_only_space", 0x0305d): (0, "InternalizedStringMap"), - ("read_only_space", 0x03085): (2, "ExternalInternalizedStringMap"), - ("read_only_space", 0x030ad): (10, "ExternalOneByteInternalizedStringMap"), - ("read_only_space", 0x030d5): (18, "UncachedExternalInternalizedStringMap"), - ("read_only_space", 0x030fd): (26, "UncachedExternalOneByteInternalizedStringMap"), - ("read_only_space", 0x03125): (58, "UncachedExternalOneByteStringMap"), - ("read_only_space", 0x0314d): (67, "SelfReferenceMarkerMap"), - ("read_only_space", 0x03175): (67, "BasicBlockCountersMarkerMap"), - ("read_only_space", 0x031b9): (87, "ArrayBoilerplateDescriptionMap"), - ("read_only_space", 0x032b9): (100, "InterceptorInfoMap"), - ("read_only_space", 0x05401): (72, "PromiseFulfillReactionJobTaskMap"), - ("read_only_space", 0x05429): (73, "PromiseRejectReactionJobTaskMap"), - ("read_only_space", 0x05451): (74, "CallableTaskMap"), - ("read_only_space", 0x05479): (75, "CallbackTaskMap"), - ("read_only_space", 0x054a1): (76, "PromiseResolveThenableJobTaskMap"), - ("read_only_space", 0x054c9): (79, "FunctionTemplateInfoMap"), - ("read_only_space", 0x054f1): (80, "ObjectTemplateInfoMap"), - ("read_only_space", 0x05519): (81, "AccessCheckInfoMap"), - ("read_only_space", 0x05541): (82, "AccessorInfoMap"), - ("read_only_space", 0x05569): (83, "AccessorPairMap"), - ("read_only_space", 0x05591): (84, "AliasedArgumentsEntryMap"), - ("read_only_space", 0x055b9): (85, "AllocationMementoMap"), - ("read_only_space", 0x055e1): (88, "AsmWasmDataMap"), - ("read_only_space", 0x05609): (89, "AsyncGeneratorRequestMap"), - ("read_only_space", 0x05631): (90, "BaselineDataMap"), - ("read_only_space", 0x05659): (91, "BreakPointMap"), - ("read_only_space", 0x05681): (92, "BreakPointInfoMap"), - ("read_only_space", 0x056a9): (93, "CachedTemplateObjectMap"), - ("read_only_space", 0x056d1): (95, "ClassPositionsMap"), - ("read_only_space", 0x056f9): (96, "DebugInfoMap"), - ("read_only_space", 0x05721): (99, "FunctionTemplateRareDataMap"), - ("read_only_space", 0x05749): (101, "InterpreterDataMap"), - ("read_only_space", 0x05771): (102, "ModuleRequestMap"), - ("read_only_space", 0x05799): (103, "PromiseCapabilityMap"), - ("read_only_space", 0x057c1): (104, "PromiseReactionMap"), - ("read_only_space", 0x057e9): (105, "PropertyDescriptorObjectMap"), - ("read_only_space", 0x05811): (106, "PrototypeInfoMap"), - ("read_only_space", 0x05839): (107, "RegExpBoilerplateDescriptionMap"), - ("read_only_space", 0x05861): (108, "ScriptMap"), - ("read_only_space", 0x05889): (109, "SourceTextModuleInfoEntryMap"), - ("read_only_space", 0x058b1): (110, "StackFrameInfoMap"), - ("read_only_space", 0x058d9): (111, "TemplateObjectDescriptionMap"), - ("read_only_space", 0x05901): (112, "Tuple2Map"), - ("read_only_space", 0x05929): (113, "WasmExceptionTagMap"), - ("read_only_space", 0x05951): (114, "WasmExportedFunctionDataMap"), - ("read_only_space", 0x05979): (115, "WasmIndirectFunctionTableMap"), - ("read_only_space", 0x059a1): (116, "WasmJSFunctionDataMap"), - ("read_only_space", 0x059c9): (134, "SloppyArgumentsElementsMap"), - ("read_only_space", 0x059f1): (151, "DescriptorArrayMap"), - ("read_only_space", 0x05a19): (156, "UncompiledDataWithoutPreparseDataMap"), - ("read_only_space", 0x05a41): (155, "UncompiledDataWithPreparseDataMap"), - ("read_only_space", 0x05a69): (171, "OnHeapBasicBlockProfilerDataMap"), - ("read_only_space", 0x05a91): (168, "InternalClassMap"), - ("read_only_space", 0x05ab9): (178, "SmiPairMap"), - ("read_only_space", 0x05ae1): (177, "SmiBoxMap"), - ("read_only_space", 0x05b09): (145, "ExportedSubClassBaseMap"), - ("read_only_space", 0x05b31): (146, "ExportedSubClassMap"), - ("read_only_space", 0x05b59): (68, "AbstractInternalClassSubclass1Map"), - ("read_only_space", 0x05b81): (69, "AbstractInternalClassSubclass2Map"), - ("read_only_space", 0x05ba9): (133, "InternalClassWithSmiElementsMap"), - ("read_only_space", 0x05bd1): (169, "InternalClassWithStructElementsMap"), - ("read_only_space", 0x05bf9): (147, "ExportedSubClass2Map"), - ("read_only_space", 0x05c21): (179, "SortStateMap"), - ("read_only_space", 0x05c49): (182, "WasmCapiFunctionDataMap"), - ("read_only_space", 0x05c71): (86, "AllocationSiteWithWeakNextMap"), - ("read_only_space", 0x05c99): (86, "AllocationSiteWithoutWeakNextMap"), - ("read_only_space", 0x05cc1): (77, "LoadHandler1Map"), - ("read_only_space", 0x05ce9): (77, "LoadHandler2Map"), - ("read_only_space", 0x05d11): (77, "LoadHandler3Map"), - ("read_only_space", 0x05d39): (78, "StoreHandler0Map"), - ("read_only_space", 0x05d61): (78, "StoreHandler1Map"), - ("read_only_space", 0x05d89): (78, "StoreHandler2Map"), - ("read_only_space", 0x05db1): (78, "StoreHandler3Map"), + ("read_only_space", 0x029f5): (129, "ObjectBoilerplateDescriptionMap"), + ("read_only_space", 0x02a1d): (132, "BytecodeArrayMap"), + ("read_only_space", 0x02a45): (162, "CodeDataContainerMap"), + ("read_only_space", 0x02a6d): (163, "CoverageInfoMap"), + ("read_only_space", 0x02a95): (133, "FixedDoubleArrayMap"), + ("read_only_space", 0x02abd): (121, "GlobalDictionaryMap"), + ("read_only_space", 0x02ae5): (101, "ManyClosuresCellMap"), + ("read_only_space", 0x02b0d): (172, "MegaDomHandlerMap"), + ("read_only_space", 0x02b35): (118, "ModuleInfoMap"), + ("read_only_space", 0x02b5d): (122, "NameDictionaryMap"), + ("read_only_space", 0x02b85): (101, "NoClosuresCellMap"), + ("read_only_space", 0x02bad): (123, "NumberDictionaryMap"), + ("read_only_space", 0x02bd5): (101, "OneClosureCellMap"), + ("read_only_space", 0x02bfd): (124, "OrderedHashMapMap"), + ("read_only_space", 0x02c25): (125, "OrderedHashSetMap"), + ("read_only_space", 0x02c4d): (126, "OrderedNameDictionaryMap"), + ("read_only_space", 0x02c75): (174, "PreparseDataMap"), + ("read_only_space", 0x02c9d): (175, "PropertyArrayMap"), + ("read_only_space", 0x02cc5): (97, "SideEffectCallHandlerInfoMap"), + ("read_only_space", 0x02ced): (97, "SideEffectFreeCallHandlerInfoMap"), + ("read_only_space", 0x02d15): (97, "NextCallSideEffectFreeCallHandlerInfoMap"), + ("read_only_space", 0x02d3d): (127, "SimpleNumberDictionaryMap"), + ("read_only_space", 0x02d65): (149, "SmallOrderedHashMapMap"), + ("read_only_space", 0x02d8d): (150, "SmallOrderedHashSetMap"), + ("read_only_space", 0x02db5): (151, "SmallOrderedNameDictionaryMap"), + ("read_only_space", 0x02ddd): (154, "SourceTextModuleMap"), + ("read_only_space", 0x02e05): (182, "SwissNameDictionaryMap"), + ("read_only_space", 0x02e2d): (155, "SyntheticModuleMap"), + ("read_only_space", 0x02e55): (72, "WasmExportedFunctionDataMap"), + ("read_only_space", 0x02e7d): (73, "WasmJSFunctionDataMap"), + ("read_only_space", 0x02ea5): (74, "WasmTypeInfoMap"), + ("read_only_space", 0x02ecd): (186, "WeakArrayListMap"), + ("read_only_space", 0x02ef5): (120, "EphemeronHashTableMap"), + ("read_only_space", 0x02f1d): (164, "EmbedderDataArrayMap"), + ("read_only_space", 0x02f45): (187, "WeakCellMap"), + ("read_only_space", 0x02f6d): (32, "StringMap"), + ("read_only_space", 0x02f95): (41, "ConsOneByteStringMap"), + ("read_only_space", 0x02fbd): (33, "ConsStringMap"), + ("read_only_space", 0x02fe5): (37, "ThinStringMap"), + ("read_only_space", 0x0300d): (35, "SlicedStringMap"), + ("read_only_space", 0x03035): (43, "SlicedOneByteStringMap"), + ("read_only_space", 0x0305d): (34, "ExternalStringMap"), + ("read_only_space", 0x03085): (42, "ExternalOneByteStringMap"), + ("read_only_space", 0x030ad): (50, "UncachedExternalStringMap"), + ("read_only_space", 0x030d5): (0, "InternalizedStringMap"), + ("read_only_space", 0x030fd): (2, "ExternalInternalizedStringMap"), + ("read_only_space", 0x03125): (10, "ExternalOneByteInternalizedStringMap"), + ("read_only_space", 0x0314d): (18, "UncachedExternalInternalizedStringMap"), + ("read_only_space", 0x03175): (26, "UncachedExternalOneByteInternalizedStringMap"), + ("read_only_space", 0x0319d): (58, "UncachedExternalOneByteStringMap"), + ("read_only_space", 0x031c5): (67, "SelfReferenceMarkerMap"), + ("read_only_space", 0x031ed): (67, "BasicBlockCountersMarkerMap"), + ("read_only_space", 0x03231): (90, "ArrayBoilerplateDescriptionMap"), + ("read_only_space", 0x03331): (103, "InterceptorInfoMap"), + ("read_only_space", 0x05639): (75, "PromiseFulfillReactionJobTaskMap"), + ("read_only_space", 0x05661): (76, "PromiseRejectReactionJobTaskMap"), + ("read_only_space", 0x05689): (77, "CallableTaskMap"), + ("read_only_space", 0x056b1): (78, "CallbackTaskMap"), + ("read_only_space", 0x056d9): (79, "PromiseResolveThenableJobTaskMap"), + ("read_only_space", 0x05701): (82, "FunctionTemplateInfoMap"), + ("read_only_space", 0x05729): (83, "ObjectTemplateInfoMap"), + ("read_only_space", 0x05751): (84, "AccessCheckInfoMap"), + ("read_only_space", 0x05779): (85, "AccessorInfoMap"), + ("read_only_space", 0x057a1): (86, "AccessorPairMap"), + ("read_only_space", 0x057c9): (87, "AliasedArgumentsEntryMap"), + ("read_only_space", 0x057f1): (88, "AllocationMementoMap"), + ("read_only_space", 0x05819): (91, "AsmWasmDataMap"), + ("read_only_space", 0x05841): (92, "AsyncGeneratorRequestMap"), + ("read_only_space", 0x05869): (93, "BaselineDataMap"), + ("read_only_space", 0x05891): (94, "BreakPointMap"), + ("read_only_space", 0x058b9): (95, "BreakPointInfoMap"), + ("read_only_space", 0x058e1): (96, "CachedTemplateObjectMap"), + ("read_only_space", 0x05909): (98, "ClassPositionsMap"), + ("read_only_space", 0x05931): (99, "DebugInfoMap"), + ("read_only_space", 0x05959): (102, "FunctionTemplateRareDataMap"), + ("read_only_space", 0x05981): (104, "InterpreterDataMap"), + ("read_only_space", 0x059a9): (105, "ModuleRequestMap"), + ("read_only_space", 0x059d1): (106, "PromiseCapabilityMap"), + ("read_only_space", 0x059f9): (107, "PromiseReactionMap"), + ("read_only_space", 0x05a21): (108, "PropertyDescriptorObjectMap"), + ("read_only_space", 0x05a49): (109, "PrototypeInfoMap"), + ("read_only_space", 0x05a71): (110, "RegExpBoilerplateDescriptionMap"), + ("read_only_space", 0x05a99): (111, "ScriptMap"), + ("read_only_space", 0x05ac1): (112, "SourceTextModuleInfoEntryMap"), + ("read_only_space", 0x05ae9): (113, "StackFrameInfoMap"), + ("read_only_space", 0x05b11): (114, "TemplateObjectDescriptionMap"), + ("read_only_space", 0x05b39): (115, "Tuple2Map"), + ("read_only_space", 0x05b61): (116, "WasmExceptionTagMap"), + ("read_only_space", 0x05b89): (117, "WasmIndirectFunctionTableMap"), + ("read_only_space", 0x05bb1): (135, "SloppyArgumentsElementsMap"), + ("read_only_space", 0x05bd9): (152, "DescriptorArrayMap"), + ("read_only_space", 0x05c01): (157, "UncompiledDataWithoutPreparseDataMap"), + ("read_only_space", 0x05c29): (156, "UncompiledDataWithPreparseDataMap"), + ("read_only_space", 0x05c51): (173, "OnHeapBasicBlockProfilerDataMap"), + ("read_only_space", 0x05c79): (169, "InternalClassMap"), + ("read_only_space", 0x05ca1): (180, "SmiPairMap"), + ("read_only_space", 0x05cc9): (179, "SmiBoxMap"), + ("read_only_space", 0x05cf1): (146, "ExportedSubClassBaseMap"), + ("read_only_space", 0x05d19): (147, "ExportedSubClassMap"), + ("read_only_space", 0x05d41): (68, "AbstractInternalClassSubclass1Map"), + ("read_only_space", 0x05d69): (69, "AbstractInternalClassSubclass2Map"), + ("read_only_space", 0x05d91): (134, "InternalClassWithSmiElementsMap"), + ("read_only_space", 0x05db9): (170, "InternalClassWithStructElementsMap"), + ("read_only_space", 0x05de1): (148, "ExportedSubClass2Map"), + ("read_only_space", 0x05e09): (181, "SortStateMap"), + ("read_only_space", 0x05e31): (184, "WasmCapiFunctionDataMap"), + ("read_only_space", 0x05e59): (89, "AllocationSiteWithWeakNextMap"), + ("read_only_space", 0x05e81): (89, "AllocationSiteWithoutWeakNextMap"), + ("read_only_space", 0x05ea9): (80, "LoadHandler1Map"), + ("read_only_space", 0x05ed1): (80, "LoadHandler2Map"), + ("read_only_space", 0x05ef9): (80, "LoadHandler3Map"), + ("read_only_space", 0x05f21): (81, "StoreHandler0Map"), + ("read_only_space", 0x05f49): (81, "StoreHandler1Map"), + ("read_only_space", 0x05f71): (81, "StoreHandler2Map"), + ("read_only_space", 0x05f99): (81, "StoreHandler3Map"), ("map_space", 0x02119): (1057, "ExternalMap"), ("map_space", 0x02141): (1098, "JSMessageObjectMap"), } @@ -411,32 +414,32 @@ KNOWN_OBJECTS = { ("read_only_space", 0x0282d): "TerminationException", ("read_only_space", 0x02895): "OptimizedOut", ("read_only_space", 0x028f5): "StaleRegister", - ("read_only_space", 0x0319d): "EmptyPropertyArray", - ("read_only_space", 0x031a5): "EmptyByteArray", - ("read_only_space", 0x031ad): "EmptyObjectBoilerplateDescription", - ("read_only_space", 0x031e1): "EmptyArrayBoilerplateDescription", - ("read_only_space", 0x031ed): "EmptyClosureFeedbackCellArray", - ("read_only_space", 0x031f5): "EmptySlowElementDictionary", - ("read_only_space", 0x03219): "EmptyOrderedHashMap", - ("read_only_space", 0x0322d): "EmptyOrderedHashSet", - ("read_only_space", 0x03241): "EmptyFeedbackMetadata", - ("read_only_space", 0x0324d): "EmptyPropertyDictionary", - ("read_only_space", 0x03275): "EmptyOrderedPropertyDictionary", - ("read_only_space", 0x0328d): "EmptySwissPropertyDictionary", - ("read_only_space", 0x032e1): "NoOpInterceptorInfo", - ("read_only_space", 0x03309): "EmptyWeakArrayList", - ("read_only_space", 0x03315): "InfinityValue", - ("read_only_space", 0x03321): "MinusZeroValue", - ("read_only_space", 0x0332d): "MinusInfinityValue", - ("read_only_space", 0x03339): "SelfReferenceMarker", - ("read_only_space", 0x03379): "BasicBlockCountersMarker", - ("read_only_space", 0x033bd): "OffHeapTrampolineRelocationInfo", - ("read_only_space", 0x033c9): "TrampolineTrivialCodeDataContainer", - ("read_only_space", 0x033d5): "TrampolinePromiseRejectionCodeDataContainer", - ("read_only_space", 0x033e1): "GlobalThisBindingScopeInfo", - ("read_only_space", 0x03415): "EmptyFunctionScopeInfo", - ("read_only_space", 0x03439): "NativeScopeInfo", - ("read_only_space", 0x03451): "HashSeed", + ("read_only_space", 0x03215): "EmptyPropertyArray", + ("read_only_space", 0x0321d): "EmptyByteArray", + ("read_only_space", 0x03225): "EmptyObjectBoilerplateDescription", + ("read_only_space", 0x03259): "EmptyArrayBoilerplateDescription", + ("read_only_space", 0x03265): "EmptyClosureFeedbackCellArray", + ("read_only_space", 0x0326d): "EmptySlowElementDictionary", + ("read_only_space", 0x03291): "EmptyOrderedHashMap", + ("read_only_space", 0x032a5): "EmptyOrderedHashSet", + ("read_only_space", 0x032b9): "EmptyFeedbackMetadata", + ("read_only_space", 0x032c5): "EmptyPropertyDictionary", + ("read_only_space", 0x032ed): "EmptyOrderedPropertyDictionary", + ("read_only_space", 0x03305): "EmptySwissPropertyDictionary", + ("read_only_space", 0x03359): "NoOpInterceptorInfo", + ("read_only_space", 0x03381): "EmptyWeakArrayList", + ("read_only_space", 0x0338d): "InfinityValue", + ("read_only_space", 0x03399): "MinusZeroValue", + ("read_only_space", 0x033a5): "MinusInfinityValue", + ("read_only_space", 0x033b1): "SelfReferenceMarker", + ("read_only_space", 0x033f1): "BasicBlockCountersMarker", + ("read_only_space", 0x03435): "OffHeapTrampolineRelocationInfo", + ("read_only_space", 0x03441): "TrampolineTrivialCodeDataContainer", + ("read_only_space", 0x0344d): "TrampolinePromiseRejectionCodeDataContainer", + ("read_only_space", 0x03459): "GlobalThisBindingScopeInfo", + ("read_only_space", 0x0348d): "EmptyFunctionScopeInfo", + ("read_only_space", 0x034b1): "NativeScopeInfo", + ("read_only_space", 0x034c9): "HashSeed", ("old_space", 0x02119): "ArgumentsIteratorAccessor", ("old_space", 0x0215d): "ArrayLengthAccessor", ("old_space", 0x021a1): "BoundFunctionLengthAccessor", @@ -453,52 +456,53 @@ KNOWN_OBJECTS = { ("old_space", 0x0244d): "ManyClosuresCell", ("old_space", 0x02459): "ArrayConstructorProtector", ("old_space", 0x0246d): "NoElementsProtector", - ("old_space", 0x02481): "IsConcatSpreadableProtector", - ("old_space", 0x02495): "ArraySpeciesProtector", - ("old_space", 0x024a9): "TypedArraySpeciesProtector", - ("old_space", 0x024bd): "PromiseSpeciesProtector", - ("old_space", 0x024d1): "RegExpSpeciesProtector", - ("old_space", 0x024e5): "StringLengthProtector", - ("old_space", 0x024f9): "ArrayIteratorProtector", - ("old_space", 0x0250d): "ArrayBufferDetachingProtector", - ("old_space", 0x02521): "PromiseHookProtector", - ("old_space", 0x02535): "PromiseResolveProtector", - ("old_space", 0x02549): "MapIteratorProtector", - ("old_space", 0x0255d): "PromiseThenProtector", - ("old_space", 0x02571): "SetIteratorProtector", - ("old_space", 0x02585): "StringIteratorProtector", - ("old_space", 0x02599): "SingleCharacterStringCache", - ("old_space", 0x029a1): "StringSplitCache", - ("old_space", 0x02da9): "RegExpMultipleCache", - ("old_space", 0x031b1): "BuiltinsConstantsTable", - ("old_space", 0x035b1): "AsyncFunctionAwaitRejectSharedFun", - ("old_space", 0x035d5): "AsyncFunctionAwaitResolveSharedFun", - ("old_space", 0x035f9): "AsyncGeneratorAwaitRejectSharedFun", - ("old_space", 0x0361d): "AsyncGeneratorAwaitResolveSharedFun", - ("old_space", 0x03641): "AsyncGeneratorYieldResolveSharedFun", - ("old_space", 0x03665): "AsyncGeneratorReturnResolveSharedFun", - ("old_space", 0x03689): "AsyncGeneratorReturnClosedRejectSharedFun", - ("old_space", 0x036ad): "AsyncGeneratorReturnClosedResolveSharedFun", - ("old_space", 0x036d1): "AsyncIteratorValueUnwrapSharedFun", - ("old_space", 0x036f5): "PromiseAllResolveElementSharedFun", - ("old_space", 0x03719): "PromiseAllSettledResolveElementSharedFun", - ("old_space", 0x0373d): "PromiseAllSettledRejectElementSharedFun", - ("old_space", 0x03761): "PromiseAnyRejectElementSharedFun", - ("old_space", 0x03785): "PromiseCapabilityDefaultRejectSharedFun", - ("old_space", 0x037a9): "PromiseCapabilityDefaultResolveSharedFun", - ("old_space", 0x037cd): "PromiseCatchFinallySharedFun", - ("old_space", 0x037f1): "PromiseGetCapabilitiesExecutorSharedFun", - ("old_space", 0x03815): "PromiseThenFinallySharedFun", - ("old_space", 0x03839): "PromiseThrowerFinallySharedFun", - ("old_space", 0x0385d): "PromiseValueThunkFinallySharedFun", - ("old_space", 0x03881): "ProxyRevokeSharedFun", + ("old_space", 0x02481): "MegaDOMProtector", + ("old_space", 0x02495): "IsConcatSpreadableProtector", + ("old_space", 0x024a9): "ArraySpeciesProtector", + ("old_space", 0x024bd): "TypedArraySpeciesProtector", + ("old_space", 0x024d1): "PromiseSpeciesProtector", + ("old_space", 0x024e5): "RegExpSpeciesProtector", + ("old_space", 0x024f9): "StringLengthProtector", + ("old_space", 0x0250d): "ArrayIteratorProtector", + ("old_space", 0x02521): "ArrayBufferDetachingProtector", + ("old_space", 0x02535): "PromiseHookProtector", + ("old_space", 0x02549): "PromiseResolveProtector", + ("old_space", 0x0255d): "MapIteratorProtector", + ("old_space", 0x02571): "PromiseThenProtector", + ("old_space", 0x02585): "SetIteratorProtector", + ("old_space", 0x02599): "StringIteratorProtector", + ("old_space", 0x025ad): "SingleCharacterStringCache", + ("old_space", 0x029b5): "StringSplitCache", + ("old_space", 0x02dbd): "RegExpMultipleCache", + ("old_space", 0x031c5): "BuiltinsConstantsTable", + ("old_space", 0x035d1): "AsyncFunctionAwaitRejectSharedFun", + ("old_space", 0x035f5): "AsyncFunctionAwaitResolveSharedFun", + ("old_space", 0x03619): "AsyncGeneratorAwaitRejectSharedFun", + ("old_space", 0x0363d): "AsyncGeneratorAwaitResolveSharedFun", + ("old_space", 0x03661): "AsyncGeneratorYieldResolveSharedFun", + ("old_space", 0x03685): "AsyncGeneratorReturnResolveSharedFun", + ("old_space", 0x036a9): "AsyncGeneratorReturnClosedRejectSharedFun", + ("old_space", 0x036cd): "AsyncGeneratorReturnClosedResolveSharedFun", + ("old_space", 0x036f1): "AsyncIteratorValueUnwrapSharedFun", + ("old_space", 0x03715): "PromiseAllResolveElementSharedFun", + ("old_space", 0x03739): "PromiseAllSettledResolveElementSharedFun", + ("old_space", 0x0375d): "PromiseAllSettledRejectElementSharedFun", + ("old_space", 0x03781): "PromiseAnyRejectElementSharedFun", + ("old_space", 0x037a5): "PromiseCapabilityDefaultRejectSharedFun", + ("old_space", 0x037c9): "PromiseCapabilityDefaultResolveSharedFun", + ("old_space", 0x037ed): "PromiseCatchFinallySharedFun", + ("old_space", 0x03811): "PromiseGetCapabilitiesExecutorSharedFun", + ("old_space", 0x03835): "PromiseThenFinallySharedFun", + ("old_space", 0x03859): "PromiseThrowerFinallySharedFun", + ("old_space", 0x0387d): "PromiseValueThunkFinallySharedFun", + ("old_space", 0x038a1): "ProxyRevokeSharedFun", } # Lower 32 bits of first page addresses for various heap spaces. HEAP_FIRST_PAGES = { - 0x08100000: "old_space", - 0x08140000: "map_space", - 0x08040000: "read_only_space", + 0x080c0000: "old_space", + 0x08100000: "map_space", + 0x08000000: "read_only_space", } # List of known V8 Frame Markers. diff --git a/deps/v8/tools/v8windbg/BUILD.gn b/deps/v8/tools/v8windbg/BUILD.gn index 5618d2d945..e30b826b0f 100644 --- a/deps/v8/tools/v8windbg/BUILD.gn +++ b/deps/v8/tools/v8windbg/BUILD.gn @@ -42,8 +42,6 @@ v8_shared_library("v8windbg") { "src/cur-isolate.h", "src/js-stack.cc", "src/js-stack.h", - "src/list-chunks.cc", - "src/list-chunks.h", "src/local-variables.cc", "src/local-variables.h", "src/object-inspection.cc", @@ -56,6 +54,9 @@ v8_shared_library("v8windbg") { deps = [ ":v8windbg_base", + "../../:v8_flags", + "../../:v8_libbase", + "../../:v8_shared_internal_headers", "../debug_helper:v8_debug_helper", ] } diff --git a/deps/v8/tools/v8windbg/README.md b/deps/v8/tools/v8windbg/README.md index de6638e4d4..887f437b0d 100644 --- a/deps/v8/tools/v8windbg/README.md +++ b/deps/v8/tools/v8windbg/README.md @@ -41,8 +41,6 @@ functions that can be called from within `dx` commands: like `dx @$v8object(0x34f49880471, "v8::internal::JSArray")`. - `@$curisolate()` gets the Isolate pointer for the current thread, if the current thread has a JavaScript Isolate associated. -- `@$listchunks()` returns a list of the memory chunks in the Heap for the - current Isolate. - `@$jsstack()` returns a list of the JS stack frames, including information about script and function. @@ -67,8 +65,6 @@ functions declared in `dbgext.h` to create and destroy the extension instance. `./src` file index: - `cur-isolate.{cc,h}` implements the `IModelMethod` for `@$curisolate()`. -- `list-chunks.{cc,h}` implements the `IModelMethod` for `@$listchunks()`. Its - result is a custom object that supports iteration and indexing. - `js-stack.{cc,h}` implements the `IModelMethod` for `@$jsstack()`. Its result is a custom object that supports iteration and indexing. - `local-variables.{cc,h}` implements the `IModelPropertyAccessor` that provides diff --git a/deps/v8/tools/v8windbg/src/list-chunks.cc b/deps/v8/tools/v8windbg/src/list-chunks.cc deleted file mode 100644 index 90b3ff6af6..0000000000 --- a/deps/v8/tools/v8windbg/src/list-chunks.cc +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2020 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. - -#include "tools/v8windbg/src/list-chunks.h" - -#include "tools/v8windbg/src/cur-isolate.h" - -// v8windbg!ListChunksAlias::Call -IFACEMETHODIMP ListChunksAlias::Call(IModelObject* p_context_object, - ULONG64 arg_count, - _In_reads_(arg_count) - IModelObject** pp_arguments, - IModelObject** pp_result, - IKeyStore** pp_metadata) noexcept { - WRL::ComPtr<IDebugHostContext> sp_ctx; - RETURN_IF_FAIL(sp_debug_host->GetCurrentContext(&sp_ctx)); - - WRL::ComPtr<IModelObject> result; - RETURN_IF_FAIL( - sp_data_model_manager->CreateSyntheticObject(sp_ctx.Get(), &result)); - - auto sp_iterator{WRL::Make<MemoryChunks>()}; - - RETURN_IF_FAIL(result->SetConcept( - __uuidof(IIndexableConcept), - static_cast<IIndexableConcept*>(sp_iterator.Get()), nullptr)); - RETURN_IF_FAIL(result->SetConcept( - __uuidof(IIterableConcept), - static_cast<IIterableConcept*>(sp_iterator.Get()), nullptr)); - - *pp_result = result.Detach(); - if (pp_metadata) { - *pp_metadata = nullptr; - } - return S_OK; -} - -ChunkData::ChunkData() = default; -ChunkData::~ChunkData() = default; -ChunkData::ChunkData(const ChunkData&) = default; -ChunkData::ChunkData(ChunkData&&) = default; -ChunkData& ChunkData::operator=(const ChunkData&) = default; -ChunkData& ChunkData::operator=(ChunkData&&) = default; - -MemoryChunkIterator::MemoryChunkIterator( - WRL::ComPtr<IDebugHostContext>& host_context) - : sp_ctx_(host_context) {} -MemoryChunkIterator::~MemoryChunkIterator() = default; - -HRESULT MemoryChunkIterator::PopulateChunkData() { - WRL::ComPtr<IModelObject> sp_isolate, sp_heap, sp_space; - chunks_.clear(); - - RETURN_IF_FAIL(GetCurrentIsolate(sp_isolate)); - - RETURN_IF_FAIL( - sp_isolate->GetRawValue(SymbolField, L"heap_", RawSearchNone, &sp_heap)); - RETURN_IF_FAIL( - sp_heap->GetRawValue(SymbolField, L"space_", RawSearchNone, &sp_space)); - - WRL::ComPtr<IDebugHostType> sp_space_type; - RETURN_IF_FAIL(sp_space->GetTypeInfo(&sp_space_type)); - - // Iterate over the array of Space pointers - WRL::ComPtr<IIterableConcept> sp_iterable; - RETURN_IF_FAIL( - sp_space->GetConcept(__uuidof(IIterableConcept), &sp_iterable, nullptr)); - - WRL::ComPtr<IModelIterator> sp_space_iterator; - RETURN_IF_FAIL(sp_iterable->GetIterator(sp_space.Get(), &sp_space_iterator)); - - // Loop through all the spaces in the array - WRL::ComPtr<IModelObject> sp_space_ptr; - while (sp_space_iterator->GetNext(&sp_space_ptr, 0, nullptr, nullptr) != - E_BOUNDS) { - // Should have gotten a "v8::internal::Space *". Dereference, then get field - // "memory_chunk_list_" [Type: v8::base::List<v8::internal::MemoryChunk>] - WRL::ComPtr<IModelObject> sp_space, sp_chunk_list, sp_mem_chunk_ptr, - sp_mem_chunk; - RETURN_IF_FAIL(sp_space_ptr->Dereference(&sp_space)); - RETURN_IF_FAIL(sp_space->GetRawValue(SymbolField, L"memory_chunk_list_", - RawSearchNone, &sp_chunk_list)); - - // Then get field "front_" [Type: v8::internal::MemoryChunk *] - RETURN_IF_FAIL(sp_chunk_list->GetRawValue( - SymbolField, L"front_", RawSearchNone, &sp_mem_chunk_ptr)); - - // Loop here on the list of MemoryChunks for the space - while (true) { - // See if it is a nullptr (i.e. no chunks in this space) - uint64_t front_val; - RETURN_IF_FAIL( - UnboxULong64(sp_mem_chunk_ptr.Get(), &front_val, true /*convert*/)); - if (front_val == 0) { - break; - } - - // Dereference and get fields "area_start_" and "area_end_" (both uint64) - RETURN_IF_FAIL(sp_mem_chunk_ptr->Dereference(&sp_mem_chunk)); - - WRL::ComPtr<IModelObject> sp_start, sp_end; - RETURN_IF_FAIL(sp_mem_chunk->GetRawValue(SymbolField, L"area_start_", - RawSearchNone, &sp_start)); - RETURN_IF_FAIL(sp_mem_chunk->GetRawValue(SymbolField, L"area_end_", - RawSearchNone, &sp_end)); - - ChunkData chunk_entry; - chunk_entry.area_start = sp_start; - chunk_entry.area_end = sp_end; - chunk_entry.space = sp_space; - chunks_.push_back(chunk_entry); - - // Follow the list_node_.next_ to the next memory chunk - WRL::ComPtr<IModelObject> sp_list_node; - RETURN_IF_FAIL(sp_mem_chunk->GetRawValue(SymbolField, L"list_node_", - RawSearchNone, &sp_list_node)); - - sp_mem_chunk_ptr = nullptr; - sp_mem_chunk = nullptr; - RETURN_IF_FAIL(sp_list_node->GetRawValue( - SymbolField, L"next_", RawSearchNone, &sp_mem_chunk_ptr)); - // Top of the loop will check if this is a nullptr and exit if so - } - sp_space_ptr = nullptr; - } - - return S_OK; -} - -IFACEMETHODIMP MemoryChunkIterator::Reset() noexcept { - position_ = 0; - return S_OK; -} - -IFACEMETHODIMP MemoryChunkIterator::GetNext(IModelObject** object, - ULONG64 dimensions, - IModelObject** indexers, - IKeyStore** metadata) noexcept { - if (dimensions > 1) return E_INVALIDARG; - - if (position_ == 0) { - RETURN_IF_FAIL(PopulateChunkData()); - } - - if (metadata != nullptr) *metadata = nullptr; - - WRL::ComPtr<IModelObject> sp_index, sp_value; - - if (dimensions == 1) { - RETURN_IF_FAIL(CreateULong64(position_, &sp_index)); - } - - RETURN_IF_FAIL(GetAt(position_, &sp_value)); - - // Now update counter and transfer ownership of results, because nothing can - // fail from this point onward. - ++position_; - if (dimensions == 1) { - *indexers = sp_index.Detach(); - } - *object = sp_value.Detach(); - return S_OK; -} - -HRESULT MemoryChunkIterator::GetAt(uint64_t index, - IModelObject** result) const { - if (index >= chunks_.size()) return E_BOUNDS; - - // Create the synthetic object representing the chunk here - const ChunkData& curr_chunk = chunks_.at(index); - WRL::ComPtr<IModelObject> sp_value; - RETURN_IF_FAIL( - sp_data_model_manager->CreateSyntheticObject(sp_ctx_.Get(), &sp_value)); - RETURN_IF_FAIL( - sp_value->SetKey(L"area_start", curr_chunk.area_start.Get(), nullptr)); - RETURN_IF_FAIL( - sp_value->SetKey(L"area_end", curr_chunk.area_end.Get(), nullptr)); - RETURN_IF_FAIL(sp_value->SetKey(L"space", curr_chunk.space.Get(), nullptr)); - - *result = sp_value.Detach(); - return S_OK; -} - -MemoryChunks::MemoryChunks() = default; -MemoryChunks::~MemoryChunks() = default; - -IFACEMETHODIMP MemoryChunks::GetDimensionality( - IModelObject* context_object, ULONG64* dimensionality) noexcept { - *dimensionality = 1; - return S_OK; -} - -IFACEMETHODIMP MemoryChunks::GetAt(IModelObject* context_object, - ULONG64 indexer_count, - IModelObject** indexers, - IModelObject** object, - IKeyStore** metadata) noexcept { - if (indexer_count != 1) return E_INVALIDARG; - if (metadata != nullptr) *metadata = nullptr; - WRL::ComPtr<IDebugHostContext> sp_ctx; - RETURN_IF_FAIL(context_object->GetContext(&sp_ctx)); - - // This should be instantiated once for each synthetic object returned, - // so should be able to cache/reuse an iterator - if (opt_chunks_ == nullptr) { - opt_chunks_ = WRL::Make<MemoryChunkIterator>(sp_ctx); - _ASSERT(opt_chunks_ != nullptr); - RETURN_IF_FAIL(opt_chunks_->PopulateChunkData()); - } - - uint64_t index; - RETURN_IF_FAIL(UnboxULong64(indexers[0], &index, true /*convert*/)); - - return opt_chunks_->GetAt(index, object); -} - -IFACEMETHODIMP MemoryChunks::SetAt(IModelObject* context_object, - ULONG64 indexer_count, - IModelObject** indexers, - IModelObject* value) noexcept { - return E_NOTIMPL; -} - -IFACEMETHODIMP MemoryChunks::GetDefaultIndexDimensionality( - IModelObject* context_object, ULONG64* dimensionality) noexcept { - *dimensionality = 1; - return S_OK; -} - -IFACEMETHODIMP MemoryChunks::GetIterator(IModelObject* context_object, - IModelIterator** iterator) noexcept { - WRL::ComPtr<IDebugHostContext> sp_ctx; - RETURN_IF_FAIL(context_object->GetContext(&sp_ctx)); - auto sp_memory_iterator{WRL::Make<MemoryChunkIterator>(sp_ctx)}; - *iterator = sp_memory_iterator.Detach(); - return S_OK; -} diff --git a/deps/v8/tools/v8windbg/src/list-chunks.h b/deps/v8/tools/v8windbg/src/list-chunks.h deleted file mode 100644 index 10eec100d1..0000000000 --- a/deps/v8/tools/v8windbg/src/list-chunks.h +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2020 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. - -#ifndef V8_TOOLS_V8WINDBG_SRC_LIST_CHUNKS_H_ -#define V8_TOOLS_V8WINDBG_SRC_LIST_CHUNKS_H_ - -#include <crtdbg.h> -#include <wrl/implements.h> - -#include <optional> -#include <string> -#include <vector> - -#include "src/base/optional.h" -#include "tools/v8windbg/base/utilities.h" -#include "tools/v8windbg/src/v8-debug-helper-interop.h" -#include "tools/v8windbg/src/v8windbg-extension.h" - -class ListChunksAlias - : public WRL::RuntimeClass< - WRL::RuntimeClassFlags<WRL::RuntimeClassType::ClassicCom>, - IModelMethod> { - public: - IFACEMETHOD(Call) - (IModelObject* p_context_object, ULONG64 arg_count, - _In_reads_(arg_count) IModelObject** pp_arguments, IModelObject** pp_result, - IKeyStore** pp_metadata); -}; - -struct ChunkData { - ChunkData(); - ~ChunkData(); - ChunkData(const ChunkData&); - ChunkData(ChunkData&&); - ChunkData& operator=(const ChunkData&); - ChunkData& operator=(ChunkData&&); - WRL::ComPtr<IModelObject> area_start; - WRL::ComPtr<IModelObject> area_end; - WRL::ComPtr<IModelObject> space; -}; - -class MemoryChunkIterator - : public WRL::RuntimeClass< - WRL::RuntimeClassFlags<WRL::RuntimeClassType::ClassicCom>, - IModelIterator> { - public: - MemoryChunkIterator(WRL::ComPtr<IDebugHostContext>& host_context); - ~MemoryChunkIterator() override; - - HRESULT PopulateChunkData(); - - IFACEMETHOD(Reset)(); - - IFACEMETHOD(GetNext) - (IModelObject** object, ULONG64 dimensions, IModelObject** indexers, - IKeyStore** metadata); - - const std::vector<ChunkData>& GetChunks() const { return chunks_; } - - HRESULT GetAt(uint64_t index, IModelObject** result) const; - - private: - ULONG position_ = 0; - std::vector<ChunkData> chunks_; - WRL::ComPtr<IDebugHostContext> sp_ctx_; -}; - -class MemoryChunks - : public WRL::RuntimeClass< - WRL::RuntimeClassFlags<WRL::RuntimeClassType::ClassicCom>, - IIndexableConcept, IIterableConcept> { - public: - MemoryChunks(); - ~MemoryChunks() override; - - // IIndexableConcept members - IFACEMETHOD(GetDimensionality) - (IModelObject* context_object, ULONG64* dimensionality); - - IFACEMETHOD(GetAt) - (IModelObject* context_object, ULONG64 indexer_count, IModelObject** indexers, - IModelObject** object, IKeyStore** metadata); - - IFACEMETHOD(SetAt) - (IModelObject* context_object, ULONG64 indexer_count, IModelObject** indexers, - IModelObject* value); - - // IIterableConcept - IFACEMETHOD(GetDefaultIndexDimensionality) - (IModelObject* context_object, ULONG64* dimensionality); - - IFACEMETHOD(GetIterator) - (IModelObject* context_object, IModelIterator** iterator); - - private: - WRL::ComPtr<MemoryChunkIterator> opt_chunks_; -}; - -#endif // V8_TOOLS_V8WINDBG_SRC_LIST_CHUNKS_H_ diff --git a/deps/v8/tools/v8windbg/src/v8windbg-extension.cc b/deps/v8/tools/v8windbg/src/v8windbg-extension.cc index 7fbe39d192..55014cfc8e 100644 --- a/deps/v8/tools/v8windbg/src/v8windbg-extension.cc +++ b/deps/v8/tools/v8windbg/src/v8windbg-extension.cc @@ -9,14 +9,12 @@ #include "tools/v8windbg/base/utilities.h" #include "tools/v8windbg/src/cur-isolate.h" #include "tools/v8windbg/src/js-stack.h" -#include "tools/v8windbg/src/list-chunks.h" #include "tools/v8windbg/src/local-variables.h" #include "tools/v8windbg/src/object-inspection.h" std::unique_ptr<Extension> Extension::current_extension_ = nullptr; const wchar_t* pcur_isolate = L"curisolate"; const wchar_t* pjs_stack = L"jsstack"; -const wchar_t* plist_chunks = L"listchunks"; const wchar_t* pv8_object = L"v8object"; HRESULT CreateExtension() { @@ -263,7 +261,6 @@ HRESULT Extension::Initialize() { std::vector<std::pair<const wchar_t*, WRL::ComPtr<IModelMethod>>> functions = {{pcur_isolate, WRL::Make<CurrIsolateAlias>()}, {pjs_stack, WRL::Make<JSStackAlias>()}, - {plist_chunks, WRL::Make<ListChunksAlias>()}, {pv8_object, WRL::Make<InspectV8ObjectMethod>()}}; for (const auto& function : functions) { WRL::ComPtr<IModelObject> method; @@ -375,7 +372,6 @@ Extension::RegistrationType& Extension::RegistrationType::operator=( Extension::~Extension() { sp_debug_host_extensibility->DestroyFunctionAlias(pcur_isolate); sp_debug_host_extensibility->DestroyFunctionAlias(pjs_stack); - sp_debug_host_extensibility->DestroyFunctionAlias(plist_chunks); sp_debug_host_extensibility->DestroyFunctionAlias(pv8_object); for (const auto& registered : registered_types_) { diff --git a/deps/v8/tools/whitespace.txt b/deps/v8/tools/whitespace.txt index 61fd2e9486..f890e67970 100644 --- a/deps/v8/tools/whitespace.txt +++ b/deps/v8/tools/whitespace.txt @@ -6,9 +6,9 @@ A Smi balks into a war and says: "I'm so deoptimized today!" The doubles heard this and started to unbox. The Smi looked at them when a crazy v8-autoroll account showed up... -The autoroller bought a round of Himbeerbrause. Suddenly..... +The autoroller bought a round of Himbeerbrause. Suddenly....... The bartender starts to shake the bottles........................... -I can't add trailing whitespaces, so I'm adding this line........... +I can't add trailing whitespaces, so I'm adding this line............ I'm starting to think that just adding trailing whitespaces might not be bad. Because whitespaces are not that funny...... |