diff --git a/Makefile b/Makefile index 648f684d74aa57..9722d80d96cec5 100644 --- a/Makefile +++ b/Makefile @@ -946,9 +946,6 @@ else ifeq ($(findstring s390x,$(UNAME_M)),s390x) DESTCPU ?= s390x else -ifeq ($(findstring s390,$(UNAME_M)),s390) -DESTCPU ?= s390 -else ifeq ($(findstring OS/390,$(shell uname -s)),OS/390) DESTCPU ?= s390x else @@ -982,7 +979,6 @@ endif endif endif endif -endif ifeq ($(DESTCPU),x64) ARCH=x64 else @@ -995,9 +991,6 @@ else ifeq ($(DESTCPU),ppc64) ARCH=ppc64 else -ifeq ($(DESTCPU),s390) -ARCH=s390 -else ifeq ($(DESTCPU),s390x) ARCH=s390x else @@ -1015,7 +1008,6 @@ endif endif endif endif -endif # node and v8 use different arch names (e.g. node 'x86' vs v8 'ia32'). # pass the proper v8 arch name to $V8_ARCH based on user-specified $DESTCPU. diff --git a/common.gypi b/common.gypi index 1ad3c30629f394..573fe25796dc19 100644 --- a/common.gypi +++ b/common.gypi @@ -37,7 +37,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.11', + 'v8_embedder_string': '-node.7', ##### V8 defaults for Node.js ##### diff --git a/configure.py b/configure.py index 66e1f83ec0570e..fee5e754835908 100755 --- a/configure.py +++ b/configure.py @@ -618,12 +618,6 @@ default=None, help='[Experimental] Enable V8 pointer compression (limits max heap to 4GB and breaks ABI compatibility)') -parser.add_argument('--disable-shared-readonly-heap', - action='store_true', - dest='disable_shared_ro_heap', - default=None, - help='Disable the shared read-only heap feature in V8') - parser.add_argument('--v8-options', action='store', dest='v8_options', @@ -1675,7 +1669,6 @@ def configure_v8(o, configs): o['variables']['v8_enable_pointer_compression'] = 1 if options.enable_pointer_compression else 0 o['variables']['v8_enable_sandbox'] = 1 if options.enable_pointer_compression else 0 o['variables']['v8_enable_31bit_smis_on_64bit_arch'] = 1 if options.enable_pointer_compression else 0 - o['variables']['v8_enable_shared_ro_heap'] = 0 if options.enable_pointer_compression or options.disable_shared_ro_heap else 1 o['variables']['v8_enable_extensible_ro_snapshot'] = 0 o['variables']['v8_trace_maps'] = 1 if options.trace_maps else 0 o['variables']['node_use_v8_platform'] = b(not options.without_v8_platform) diff --git a/deps/v8/.clang-tidy b/deps/v8/.clang-tidy index aa7d3813aa1d2f..fb769d9bf96e0d 100644 --- a/deps/v8/.clang-tidy +++ b/deps/v8/.clang-tidy @@ -9,7 +9,9 @@ modernize-redundant-void-arg, modernize-replace-random-shuffle, modernize-shrink-to-fit, + modernize-type-traits, # modernize-use-auto, + modernize-use-constraints, modernize-use-bool-literals, modernize-use-equals-default, # modernize-use-equals-delete, diff --git a/deps/v8/.gitignore b/deps/v8/.gitignore index 6ecb0ebecd7b0d..cf67080646b709 100644 --- a/deps/v8/.gitignore +++ b/deps/v8/.gitignore @@ -86,10 +86,16 @@ !/third_party/inspector_protocol !/third_party/jsoncpp /third_party/jsoncpp/source +!/third_party/llvm-libc +/third_party/llvm-libc/src !/third_party/re2 /third_party/re2/src !/third_party/test262-harness +!/third_party/siphash +!/third_party/utf8-decoder !/third_party/v8 +!/third_party/valgrind +!/third_party/vtune !/third_party/wasm-api /tools/builtins-pgo/profiles/* !/tools/builtins-pgo/profiles/.* diff --git a/deps/v8/AUTHORS b/deps/v8/AUTHORS index cc270445c5600c..43141dbafed3db 100644 --- a/deps/v8/AUTHORS +++ b/deps/v8/AUTHORS @@ -57,7 +57,7 @@ Alexander Botero-Lowry Alexander Karpinsky Alexander Neville Alexandre Vassalotti -Alexey Pavlyutkin +Alexey Pavlyutkin Alexis Campailla Allan Sandfeld Jensen Amos Lim @@ -210,11 +210,13 @@ Maxim Mazurok Maxim Mossienko Md Hasibul Hasan Meir Shpilraien +Meng Tan Michael Lutz Michael Mclaughlin Michael Smith Michaël Zasso Mihir Shah +Mika Fischer Mike Gilbert Mike Pennisi Mikhail Gusarov @@ -268,6 +270,7 @@ Sébastien Doeraene Seo Sanghyeon Shawn Anastasio Shawn Presser +Sho Miyamoto Stefan Penner Stefan Stojanovic Stephan Hartmann @@ -290,6 +293,7 @@ Varun Varada Victor Costan Victor Polevoy Vlad Burlik +Vladimir Kempik Vladimir Krivosheev Vladimir Shutoff Wael Almattar @@ -303,6 +307,7 @@ Wiktor Garbacz Wouter Vermeiren Xiaofang Zou Xiaoyin Liu +Yagiz Nizipli Yanbo Li Yannic Bonenberger Yi Wang @@ -317,6 +322,7 @@ Yuxiang Cao Zac Hansen Zeynep Cankara Zhao Jiazhong +Zhao Qin Zhaojun Meng Zheng Liu Zhongping Wang @@ -325,3 +331,4 @@ Yang Xiang Kotaro Ohsugi Jing Peiyang magic-akari +Ryuhei Shima diff --git a/deps/v8/BUILD.bazel b/deps/v8/BUILD.bazel index 1f269f9c149e56..6467518686d6e8 100644 --- a/deps/v8/BUILD.bazel +++ b/deps/v8/BUILD.bazel @@ -68,10 +68,12 @@ load(":bazel/v8-non-pointer-compression.bzl", "v8_binary_non_pointer_compression # v8_control_flow_integrity # v8_enable_sandbox # cppgc_enable_caged_heap +# cppgc_enable_api_checks # cppgc_enable_check_assignments_in_prefinalizers # cppgc_enable_slim_write_barrier # cppgc_enable_object_names # cppgc_enable_pointer_compression +# cppgc_enable_slow_api_checks # cppgc_enable_verify_heap # cppgc_enable_young_generation # v8_enable_zone_compression @@ -148,6 +150,8 @@ v8_flag(name = "v8_enable_verify_predictable") v8_flag(name = "v8_enable_test_features") +v8_flag(name = "v8_wasm_random_fuzzers") + v8_flag( name = "v8_enable_maglev", default = True, @@ -187,6 +191,14 @@ selects.config_setting_group( ], ) +selects.config_setting_group( + name = "enable_maglev_riscv", + match_all = [ + ":enable_maglev", + "@v8//bazel/config:v8_target_riscv64", + ], +) + selects.config_setting_group( name = "enable_maglev_arm", match_all = [ @@ -326,10 +338,10 @@ selects.config_setting_group( ], ) -# Enable isolated cage if v8_enable_pointer_compression and +# Enable multiple cages if v8_enable_pointer_compression and # NOT v8_enable_pointer_compression_shared_cage. selects.config_setting_group( - name = "enable_pointer_compression_isolated_cage", + name = "enable_pointer_compression_multiple_cages", match_all = [ ":is_v8_enable_pointer_compression", ":is_not_v8_enable_pointer_compression_shared_cage", @@ -463,6 +475,7 @@ v8_config( "V8_ENABLE_SPARKPLUG", "V8_ENABLE_EXTENSIBLE_RO_SNAPSHOT", "V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA", + "V8_TLS_USED_IN_LIBRARY", ] + select({ "@v8//bazel/config:is_debug": [ "DEBUG", @@ -480,8 +493,7 @@ v8_config( ], "@v8//bazel/config:v8_target_arm64": ["V8_TARGET_ARCH_ARM64"], "@v8//bazel/config:v8_target_s390x": [ - "V8_TARGET_ARCH_S390", - "V8_TARGET_ARCH_S390X", + "V8_TARGET_ARCH_S390X" ], "@v8//bazel/config:v8_target_riscv64": [ # NOTE: Bazel rules for riscv64 weren't tested on a real system. @@ -525,16 +537,8 @@ v8_config( ":enable_pointer_compression_shared_cage": [ "V8_COMPRESS_POINTERS_IN_SHARED_CAGE", ], - ":enable_pointer_compression_isolated_cage": [ - "V8_COMPRESS_POINTERS_IN_ISOLATE_CAGE", - ], - "//conditions:default": [], - }) + select({ - # Shared RO heap is unconfigurable in bazel. However, we - # still have to make sure that the flag is disabled when - # v8_enable_pointer_compression_shared_cage is set to false. - ":is_v8_enable_pointer_compression_shared_cage": [ - "V8_SHARED_RO_HEAP", + ":enable_pointer_compression_multiple_cages": [ + "V8_COMPRESS_POINTERS_IN_MULTIPLE_CAGES", ], "//conditions:default": [], }) + select({ @@ -667,6 +671,7 @@ filegroup( "include/v8-embedder-state-scope.h", "include/v8-exception.h", "include/v8-extension.h", + "include/v8-external-memory-accounter.h", "include/v8-external.h", "include/v8-fast-api-calls.h", "include/v8-forward.h", @@ -772,7 +777,7 @@ filegroup( "src/base/file-utils.h", "src/base/flags.h", "src/base/free_deleter.h", - "src/base/functional.h", + "src/base/hashing.h", "src/base/hashmap.h", "src/base/hashmap-entry.h", "src/base/ieee754.cc", @@ -835,9 +840,10 @@ filegroup( "src/base/string-format.h", "src/base/strings.cc", "src/base/strings.h", + "src/base/strong-alias.h", "src/base/sys-info.cc", "src/base/sys-info.h", - "src/base/template-meta-programming/algorithm.h", + "src/base/template-meta-programming/common.h", "src/base/template-meta-programming/functional.h", "src/base/template-meta-programming/list.h", "src/base/template-meta-programming/string-literal.h", @@ -1299,6 +1305,7 @@ filegroup( "src/base/sanitizer/lsan-virtual-address-space.h", "src/base/sanitizer/msan.h", "src/base/sanitizer/tsan.h", + "src/base/sanitizer/ubsan.h", "src/baseline/baseline.cc", "src/baseline/baseline.h", "src/baseline/baseline-assembler.h", @@ -1449,6 +1456,7 @@ filegroup( "src/common/ptr-compr.cc", "src/common/ptr-compr.h", "src/common/ptr-compr-inl.h", + "src/common/thread-local-storage.h", "src/common/segmented-table.h", "src/common/segmented-table-inl.h", "src/common/simd128.h", @@ -1628,6 +1636,8 @@ filegroup( "src/heap/combined-heap.h", "src/heap/concurrent-marking.cc", "src/heap/concurrent-marking.h", + "src/heap/conservative-stack-visitor.h", + "src/heap/conservative-stack-visitor-inl.h", "src/heap/cppgc-js/cpp-heap.cc", "src/heap/cppgc-js/cpp-heap.h", "src/heap/cppgc-js/cpp-marking-state.h", @@ -1674,8 +1684,13 @@ filegroup( "src/heap/heap-controller.cc", "src/heap/heap-controller.h", "src/heap/heap-inl.h", + "src/heap/heap-layout.cc", + "src/heap/heap-layout.h", + "src/heap/heap-layout-inl.h", "src/heap/heap-layout-tracer.cc", "src/heap/heap-layout-tracer.h", + "src/heap/heap-utils.h", + "src/heap/heap-utils-inl.h", "src/heap/heap-verifier.cc", "src/heap/heap-verifier.h", "src/heap/heap-write-barrier.cc", @@ -1695,6 +1710,8 @@ filegroup( "src/heap/large-spaces.h", "src/heap/linear-allocation-area.h", "src/heap/list.h", + "src/heap/live-object-range.h", + "src/heap/live-object-range-inl.h", "src/heap/local-factory.cc", "src/heap/local-factory.h", "src/heap/local-factory-inl.h", @@ -1718,6 +1735,7 @@ filegroup( "src/heap/marking-barrier.cc", "src/heap/marking-barrier.h", "src/heap/marking-barrier-inl.h", + "src/heap/marking-progress-tracker.h", "src/heap/marking-state.h", "src/heap/marking-state-inl.h", "src/heap/marking-visitor.h", @@ -1734,8 +1752,8 @@ filegroup( "src/heap/mutable-page-metadata-inl.h", "src/heap/memory-chunk.cc", "src/heap/memory-chunk.h", + "src/heap/memory-chunk-constants.h", "src/heap/memory-chunk-inl.h", - "src/heap/memory-chunk-layout.cc", "src/heap/memory-chunk-layout.h", "src/heap/memory-measurement.cc", "src/heap/memory-measurement.h", @@ -1751,9 +1769,9 @@ filegroup( "src/heap/object-lock-inl.h", "src/heap/object-stats.cc", "src/heap/object-stats.h", - "src/heap/objects-visiting.cc", - "src/heap/objects-visiting.h", - "src/heap/objects-visiting-inl.h", + "src/heap/heap-visitor.cc", + "src/heap/heap-visitor.h", + "src/heap/heap-visitor-inl.h", "src/heap/page-metadata.cc", "src/heap/page-metadata.h", "src/heap/page-metadata-inl.h", @@ -1766,7 +1784,6 @@ filegroup( "src/heap/pretenuring-handler.cc", "src/heap/pretenuring-handler.h", "src/heap/pretenuring-handler-inl.h", - "src/heap/progress-bar.h", "src/heap/read-only-heap.cc", "src/heap/read-only-heap.h", "src/heap/read-only-heap-inl.h", @@ -1792,6 +1809,8 @@ filegroup( "src/heap/sweeper.h", "src/heap/traced-handles-marking-visitor.cc", "src/heap/traced-handles-marking-visitor.h", + "src/heap/visit-object.cc", + "src/heap/visit-object.h", "src/heap/weak-object-worklists.cc", "src/heap/weak-object-worklists.h", "src/heap/young-generation-marking-visitor.h", @@ -1891,6 +1910,8 @@ filegroup( "src/numbers/conversions.h", "src/numbers/conversions-inl.h", "src/numbers/hash-seed-inl.h", + "src/numbers/ieee754.cc", + "src/numbers/ieee754.h", "src/numbers/integer-literal.h", "src/numbers/integer-literal-inl.h", "src/numbers/math-random.cc", @@ -1911,7 +1932,6 @@ filegroup( "src/objects/backing-store.h", "src/objects/bigint.cc", "src/objects/bigint.h", - "src/objects/bigint-inl.h", "src/objects/bytecode-array.cc", "src/objects/bytecode-array.h", "src/objects/bytecode-array-inl.h", @@ -1919,6 +1939,7 @@ filegroup( "src/objects/call-site-info.h", "src/objects/call-site-info-inl.h", "src/objects/casting.h", + "src/objects/casting-inl.h", "src/objects/cell.h", "src/objects/cell-inl.h", "src/objects/code.cc", @@ -2037,6 +2058,7 @@ filegroup( "src/objects/js-temporal-objects.cc", "src/objects/js-temporal-objects.h", "src/objects/js-temporal-objects-inl.h", + "src/objects/js-weak-refs.cc", "src/objects/js-weak-refs.h", "src/objects/js-weak-refs-inl.h", "src/objects/keys.cc", @@ -2193,8 +2215,8 @@ filegroup( "src/parsing/expression-scope.h", "src/parsing/func-name-inferrer.cc", "src/parsing/func-name-inferrer.h", - "src/parsing/import-assertions.cc", - "src/parsing/import-assertions.h", + "src/parsing/import-attributes.cc", + "src/parsing/import-attributes.h", "src/parsing/keywords-gen.h", "src/parsing/literal-buffer.cc", "src/parsing/literal-buffer.h", @@ -2291,6 +2313,8 @@ filegroup( "src/regexp/regexp-nodes.h", "src/regexp/regexp-parser.cc", "src/regexp/regexp-parser.h", + "src/regexp/regexp-result-vector.cc", + "src/regexp/regexp-result-vector.h", "src/regexp/regexp-stack.cc", "src/regexp/regexp-stack.h", "src/regexp/regexp-utils.cc", @@ -2365,12 +2389,6 @@ filegroup( "src/sandbox/indirect-pointer-tag.h", "src/sandbox/indirect-pointer-inl.h", "src/sandbox/code-entrypoint-tag.h", - "src/sandbox/external-buffer.h", - "src/sandbox/external-buffer-tag.h", - "src/sandbox/external-buffer-inl.h", - "src/sandbox/external-buffer-table.cc", - "src/sandbox/external-buffer-table-inl.h", - "src/sandbox/external-buffer-table.h", "src/sandbox/external-entity-table.h", "src/sandbox/external-entity-table-inl.h", "src/sandbox/hardware-support.cc", @@ -2456,9 +2474,6 @@ filegroup( "src/tasks/task-utils.h", "src/temporal/temporal-parser.cc", "src/temporal/temporal-parser.h", - "src/third_party/siphash/halfsiphash.cc", - "src/third_party/siphash/halfsiphash.h", - "src/third_party/utf8-decoder/utf8-decoder.h", "src/torque/runtime-macro-shims.h", "src/tracing/trace-event.cc", "src/tracing/trace-event.h", @@ -2514,6 +2529,9 @@ filegroup( "src/zone/zone-segment.h", "src/zone/zone-type-traits.h", "src/zone/zone-utils.h", + "third_party/siphash/halfsiphash.cc", + "third_party/siphash/halfsiphash.h", + "third_party/utf8-decoder/utf8-decoder.h", ":cppgc_base_files", ":generated_bytecode_builtins_list", ":v8_bigint", @@ -2817,6 +2835,13 @@ filegroup( "src/maglev/arm64/maglev-ir-arm64.cc", ], "//conditions:default": [], + }) + select({ + ":enable_maglev_riscv": [ + "src/maglev/riscv/maglev-assembler-riscv-inl.h", + "src/maglev/riscv/maglev-assembler-riscv.cc", + "src/maglev/riscv/maglev-ir-riscv.cc", + ], + "//conditions:default": [], }) + select({ ":enable_maglev_arm": [ "src/maglev/arm/maglev-assembler-arm-inl.h", @@ -2841,7 +2866,6 @@ filegroup( "src/debug/debug-wasm-objects-inl.h", "src/runtime/runtime-test-wasm.cc", "src/runtime/runtime-wasm.cc", - "src/third_party/utf8-decoder/generalized-utf8-decoder.h", "src/trap-handler/handler-inside.cc", "src/trap-handler/handler-inside-posix.h", "src/trap-handler/handler-outside.cc", @@ -2877,7 +2901,6 @@ filegroup( "src/wasm/function-body-decoder-impl.h", "src/wasm/function-compiler.cc", "src/wasm/function-compiler.h", - "src/wasm/fuzzing/random-module-generation.cc", "src/wasm/fuzzing/random-module-generation.h", "src/wasm/graph-builder-interface.cc", "src/wasm/graph-builder-interface.h", @@ -2900,7 +2923,6 @@ filegroup( "src/wasm/object-access.h", "src/wasm/pgo.cc", "src/wasm/pgo.h", - "src/wasm/serialized-signature-inl.h", "src/wasm/signature-hashing.h", "src/wasm/simd-shuffle.cc", "src/wasm/simd-shuffle.h", @@ -2966,6 +2988,7 @@ filegroup( "src/wasm/well-known-imports.cc", "src/wasm/well-known-imports.h", "src/wasm/wrappers.cc", + "third_party/utf8-decoder/generalized-utf8-decoder.h", ], "//conditions:default": [], }) + select({ @@ -2983,6 +3006,11 @@ filegroup( "src/wasm/interpreter/wasm-interpreter-simd.cc", ], "//conditions:default": [], + }) + select({ + ":is_v8_wasm_random_fuzzers": [ + "src/wasm/fuzzing/random-module-generation.cc", + ], + "//conditions:default": [], }), ) @@ -3097,6 +3125,7 @@ filegroup( "src/compiler/checkpoint-elimination.h", "src/compiler/code-assembler.cc", "src/compiler/code-assembler.h", + "src/compiler/code-assembler-compilation-job.h", "src/compiler/common-node-cache.cc", "src/compiler/common-node-cache.h", "src/compiler/common-operator.cc", @@ -3109,8 +3138,6 @@ filegroup( "src/compiler/compiler-source-position-table.h", "src/compiler/constant-folding-reducer.cc", "src/compiler/constant-folding-reducer.h", - "src/compiler/const-tracking-let-helpers.cc", - "src/compiler/const-tracking-let-helpers.h", "src/compiler/control-equivalence.cc", "src/compiler/control-equivalence.h", "src/compiler/control-path-state.h", @@ -3135,16 +3162,12 @@ filegroup( "src/compiler/frame-states.h", "src/compiler/functional-list.h", "src/compiler/globals.h", - "src/compiler/graph.cc", - "src/compiler/graph.h", "src/compiler/graph-assembler.cc", "src/compiler/graph-assembler.h", "src/compiler/graph-reducer.cc", "src/compiler/graph-reducer.h", "src/compiler/graph-trimmer.cc", "src/compiler/graph-trimmer.h", - "src/compiler/graph-visualizer.cc", - "src/compiler/graph-visualizer.h", "src/compiler/graph-zone-traits.h", "src/compiler/heap-refs.cc", "src/compiler/heap-refs.h", @@ -3268,6 +3291,14 @@ filegroup( "src/compiler/string-builder-optimizer.h", "src/compiler/turbofan.h", "src/compiler/turbofan-enabled.cc", + "src/compiler/turbofan-graph.cc", + "src/compiler/turbofan-graph.h", + "src/compiler/turbofan-graph-visualizer.cc", + "src/compiler/turbofan-graph-visualizer.h", + "src/compiler/turbofan-typer.cc", + "src/compiler/turbofan-typer.h", + "src/compiler/turbofan-types.cc", + "src/compiler/turbofan-types.h", "src/compiler/turboshaft/access-builder.h", "src/compiler/turboshaft/analyzer-iterator.cc", "src/compiler/turboshaft/analyzer-iterator.h", @@ -3282,7 +3313,6 @@ filegroup( "src/compiler/turboshaft/build-graph-phase.cc", "src/compiler/turboshaft/build-graph-phase.h", "src/compiler/turboshaft/builtin-call-descriptors.h", - "src/compiler/turboshaft/builtin-compiler.cc", "src/compiler/turboshaft/builtin-compiler.h", "src/compiler/turboshaft/csa-optimize-phase.cc", "src/compiler/turboshaft/csa-optimize-phase.h", @@ -3366,9 +3396,6 @@ filegroup( "src/compiler/turboshaft/select-lowering-reducer.h", "src/compiler/turboshaft/sidetable.cc", "src/compiler/turboshaft/sidetable.h", - "src/compiler/turboshaft/simplified-lowering-phase.cc", - "src/compiler/turboshaft/simplified-lowering-phase.h", - "src/compiler/turboshaft/simplified-lowering-reducer.h", "src/compiler/turboshaft/simplify-tf-loops.cc", "src/compiler/turboshaft/simplify-tf-loops.h", "src/compiler/turboshaft/snapshot-table.h", @@ -3377,6 +3404,8 @@ filegroup( "src/compiler/turboshaft/store-store-elimination-phase.cc", "src/compiler/turboshaft/store-store-elimination-phase.h", "src/compiler/turboshaft/store-store-elimination-reducer-inl.h", + "src/compiler/turboshaft/string-escape-analysis-reducer.cc", + "src/compiler/turboshaft/string-escape-analysis-reducer.h", "src/compiler/turboshaft/string-view.h", "src/compiler/turboshaft/structural-optimization-reducer.h", "src/compiler/turboshaft/tracing.h", @@ -3409,10 +3438,6 @@ filegroup( "src/compiler/type-narrowing-reducer.h", "src/compiler/typed-optimization.cc", "src/compiler/typed-optimization.h", - "src/compiler/typer.cc", - "src/compiler/typer.h", - "src/compiler/types.cc", - "src/compiler/types.h", "src/compiler/use-info.h", "src/compiler/value-numbering-reducer.cc", "src/compiler/value-numbering-reducer.h", @@ -3478,6 +3503,7 @@ filegroup( ":is_v8_enable_webassembly": [ "src/compiler/int64-lowering.cc", "src/compiler/int64-lowering.h", + "src/compiler/turboshaft/growable-stacks-reducer.h", "src/compiler/turboshaft/int64-lowering-phase.cc", "src/compiler/turboshaft/int64-lowering-phase.h", "src/compiler/turboshaft/int64-lowering-reducer.h", @@ -3626,6 +3652,8 @@ filegroup( "src/codegen/code-stub-assembler.h", "src/codegen/define-code-stub-assembler-macros.inc", "src/codegen/undef-code-stub-assembler-macros.inc", + "src/compiler/turboshaft/builtin-compiler.cc", + "src/compiler/turboshaft/builtin-compiler.h", "src/heap/setup-heap-internal.cc", "src/ic/accessor-assembler.cc", "src/ic/accessor-assembler.h", @@ -3979,10 +4007,8 @@ filegroup( "third_party/inspector_protocol/crdtp/export.h", "third_party/inspector_protocol/crdtp/find_by_first.h", "third_party/inspector_protocol/crdtp/frontend_channel.h", - "third_party/inspector_protocol/crdtp/glue.h", "third_party/inspector_protocol/crdtp/json.cc", "third_party/inspector_protocol/crdtp/json.h", - "third_party/inspector_protocol/crdtp/maybe.h", "third_party/inspector_protocol/crdtp/parser_handler.h", "third_party/inspector_protocol/crdtp/protocol_core.cc", "third_party/inspector_protocol/crdtp/protocol_core.h", @@ -4336,6 +4362,7 @@ v8_library( "//external:absl_btree", "//external:absl_flat_hash_map", "//external:absl_flat_hash_set", + "//external:hwy", ], ) @@ -4388,9 +4415,9 @@ alias( v8_library( name = "v8_vtune", srcs = [ - "src/third_party/vtune/v8-vtune.h", - "src/third_party/vtune/vtune-jit.cc", - "src/third_party/vtune/vtune-jit.h", + "third_party/vtune/v8-vtune.h", + "third_party/vtune/vtune-jit.cc", + "third_party/vtune/vtune-jit.h", ], copts = ["-I"], deps = [ diff --git a/deps/v8/BUILD.gn b/deps/v8/BUILD.gn index 87b212921bb8d5..f8a0507c92c019 100644 --- a/deps/v8/BUILD.gn +++ b/deps/v8/BUILD.gn @@ -38,9 +38,6 @@ declare_args() { # Sets -DENABLE_SYSTEM_INSTRUMENTATION. Enables OS-dependent event tracing v8_enable_system_instrumentation = (is_win || is_mac) && !v8_use_perfetto - # Sets -DV8_ENABLE_ETW_STACK_WALKING. Enables ETW Stack Walking - v8_enable_etw_stack_walking = is_win - # Sets the GUID for the ETW provider v8_etw_guid = "" @@ -62,7 +59,7 @@ declare_args() { # Allows the embedder to add a custom suffix to the version string. v8_embedder_string = "" - # Sets -dENABLE_DISASSEMBLER. + # Sets -DENABLE_DISASSEMBLER. v8_enable_disassembler = "" # Sets the number of internal fields on promise objects. @@ -74,19 +71,19 @@ declare_args() { # Sets the number of internal fields on array buffer view objects. v8_array_buffer_view_internal_field_count = 0 - # Sets -dENABLE_GDB_JIT_INTERFACE. + # Sets -DENABLE_GDB_JIT_INTERFACE. v8_enable_gdbjit = "" - # Sets -dENABLE_VTUNE_JIT_INTERFACE. + # Sets -DENABLE_VTUNE_JIT_INTERFACE. v8_enable_vtunejit = false - # Sets -dENABLE_VTUNE_TRACEMARK. + # Sets -DENABLE_VTUNE_TRACEMARK. v8_enable_vtunetracemark = false - # Sets -dENABLE_HUGEPAGE + # Sets -DENABLE_HUGEPAGE v8_enable_hugepage = false - # Sets -dV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION. + # Sets -DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION. # # This flag speeds up the performance of fork/execve on Linux systems for # embedders which use it (like Node.js). It works by marking the pages that @@ -97,7 +94,7 @@ declare_args() { # See v8:7381 for more details. v8_enable_private_mapping_fork_optimization = false - # Sets -dENABLE_HANDLE_ZAPPING. + # Sets -DENABLE_HANDLE_ZAPPING. v8_enable_handle_zapping = is_asan || is_debug # Enable slow dchecks. @@ -106,6 +103,9 @@ declare_args() { # Enable fast mksnapshot runs. v8_enable_fast_mksnapshot = false + # Enable using multiple threads to build builtins in mksnapshot. + v8_enable_concurrent_mksnapshot = true + # Optimize code for Torque executable, even during a debug build. v8_enable_fast_torque = "" @@ -118,16 +118,16 @@ declare_args() { # Allow runtime-enabled code comments (with --code-comments). Enabled by # default in debug builds. - # Sets -dV8_CODE_COMMENTS + # Sets -DV8_CODE_COMMENTS v8_code_comments = "" # Allow runtime-enabled debug code (with --debug-code). Enabled by default in # debug builds. - # Sets -dV8_ENABLE_DEBUG_CODE + # Sets -DV8_ENABLE_DEBUG_CODE v8_enable_debug_code = "" # Enable native counters from the snapshot (impacts performance, sets - # -dV8_SNAPSHOT_NATIVE_CODE_COUNTERS). + # -DV8_SNAPSHOT_NATIVE_CODE_COUNTERS). # This option will generate extra code in the snapshot to increment counters, # as per the --native-code-counters flag. v8_enable_snapshot_native_code_counters = "" @@ -142,24 +142,27 @@ declare_args() { # Enable code-generation-time checking of types in the CodeStubAssembler. v8_enable_verify_csa = false - # Sets -dOBJECT_PRINT. + # Sets -DOBJECT_PRINT. v8_enable_object_print = "" - # Sets -dV8_TRACE_MAPS. + # Sets -DV8_TRACE_MAPS. v8_enable_trace_maps = "" - # Sets -dV8_ENABLE_CHECKS. + # Sets -DV8_ENABLE_CHECKS. v8_enable_v8_checks = "" - # Sets -dV8_TRACE_UNOPTIMIZED. + # Sets -DV8_ENABLE_MEMORY_ACCOUNTING_CHECKS + v8_enable_memory_accounting_checks = "" + + # Sets -DV8_TRACE_UNOPTIMIZED. v8_enable_trace_unoptimized = "" v8_enable_trace_ignition = false v8_enable_trace_baseline_exec = false - # Sets -dV8_TRACE_FEEDBACK_UPDATES. + # Sets -DV8_TRACE_FEEDBACK_UPDATES. v8_enable_trace_feedback_updates = false - # Sets -dV8_ATOMIC_OBJECT_FIELD_WRITES and turns all field write operations + # Sets -DV8_ATOMIC_OBJECT_FIELD_WRITES and turns all field write operations # into relaxed atomic operations. v8_enable_atomic_object_field_writes = "" @@ -167,7 +170,7 @@ declare_args() { # default setting code below. v8_enable_concurrent_marking = true - # Sets -dV8_IGNITION_DISPATCH_COUNTING. + # Sets -DV8_IGNITION_DISPATCH_COUNTING. # Enables counting frequencies of bytecode dispatches. After building in this # configuration, subsequent runs of d8 can output frequencies for each pair # of (current, next) bytecode instructions executed if you specify @@ -219,12 +222,12 @@ declare_args() { v8_enable_test_features = "" # Enable short builtins call instruction sequences by un-embedding builtins. - # Sets -dV8_SHORT_BUILTIN_CALLS + # Sets -DV8_SHORT_BUILTIN_CALLS v8_enable_short_builtin_calls = "" # Enable support for external code range relative to the pointer compression # cage. - # Sets -dV8_EXTERNAL_CODE_SPACE + # Sets -DV8_EXTERNAL_CODE_SPACE v8_enable_external_code_space = "" # With post mortem support enabled, metadata is embedded into libv8 that @@ -259,10 +262,6 @@ declare_args() { # specific hook). v8_check_header_includes = false - # Enable sharing read-only space across isolates. - # Sets -DV8_SHARED_RO_HEAP. - v8_enable_shared_ro_heap = "" - # Enable lazy source positions by default. v8_enable_lazy_source_positions = true @@ -326,8 +325,8 @@ declare_args() { # Sets -DV8_ENABLE_SANDBOX. v8_enable_sandbox = "" - # Explicitly disable leaptiering (on builds where it would otherwise be enabled). - v8_disable_leaptiering = "" + # Enable leaptiering + v8_enable_leaptiering = "" # Enable the memory corruption API. Useful for testing the sandbox. # The memory corruption API is only exposed to JavaScript if sandbox testing @@ -354,7 +353,7 @@ declare_args() { # Sets -DV8_DICT_PROPERTY_CONST_TRACKING v8_dict_property_const_tracking = false - # Enable map packing & unpacking (sets -dV8_MAP_PACKING). + # Enable map packing & unpacking (sets -DV8_MAP_PACKING). v8_enable_map_packing = false # Allow for JS promise hooks (instead of just C++). @@ -365,7 +364,7 @@ declare_args() { # The flag enables disabling the feature, to test this data's overhead. v8_enable_continuation_preserved_embedder_data = true - # Enable allocation folding globally (sets -dV8_ALLOCATION_FOLDING). + # Enable allocation folding globally (sets -DV8_ALLOCATION_FOLDING). # When it's disabled, the --turbo-allocation-folding runtime flag will be ignored. v8_enable_allocation_folding = true @@ -389,10 +388,23 @@ declare_args() { # On non-Desktop platforms, enable explicit bounds checks in the Wasm # interpreter, where the bounds checking is done in the instruction handler, - # not using an unhandled exception filter (which also doesn't work with Win-ASAN). + # not using an unhandled exception filter (which also doesn't work with + # Win-ASAN). + # Also enables explicit bounds checks on component builds in platforms other + # than Windows because of a problem with function name mangling for vectorcall + # ABI on ELF (The vectorcall calling convention requires a mangling that + # includes @@, but on ELF an @ indicates that the part after it is the version + # of the symbol, with @@ indicating the default symbol version to link against + # when none is specified by the caller and this causes linker errors). As a + # workaround, we need to disable the vectorcall calling convention for + # component builds on Linux and Mac, which means that we cannot use DrumBrake + # builtins for Load/Store instruction handlers, because of the different + # calling convention. + # Windows component builds are also enabled to support cross-compilation. v8_drumbrake_bounds_checks = (is_win && (is_asan || is_ubsan || is_msan || is_tsan)) || - !(is_win || is_linux || is_mac) || v8_current_cpu != "x64" + !(is_win || is_linux || is_mac) || v8_current_cpu != "x64" || !is_clang || + is_component_build # Enables pointer compression for 8GB heaps. # Sets -DV8_COMPRESS_POINTERS_8GB. @@ -435,6 +447,9 @@ declare_args() { # Enable Turboshaft CSA pipeline. v8_enable_turboshaft_csa = false + # Black allocate objects on separate pages. + v8_enable_black_allocated_pages = "" + # Use sticky mark-bits for separating object generations. v8_enable_sticky_mark_bits = false @@ -448,6 +463,10 @@ declare_args() { # isn't present, which some embedders rely on. This option controls # the explicit dependency and allows the build to complete. v8_depend_on_icu_data_file = icu_use_data_file + + # Some fuzzers depend on fuzzing functionality linked into the v8 library. + # For binary size reasons this functionality is not always available. + v8_wasm_random_fuzzers = "" } # Derived defaults. @@ -472,6 +491,10 @@ if (v8_enable_test_features == "") { if (v8_enable_v8_checks == "") { v8_enable_v8_checks = v8_enable_debugging_features } +if (v8_enable_memory_accounting_checks == "") { + v8_enable_memory_accounting_checks = + v8_enable_debugging_features || v8_dcheck_always_on +} if (v8_enable_heap_snapshot_verify == "") { v8_enable_heap_snapshot_verify = v8_enable_debugging_features || v8_dcheck_always_on @@ -484,7 +507,7 @@ if (v8_enable_snapshot_code_comments) { v8_code_comments = v8_enable_debugging_features } if (v8_enable_debug_code == "") { - v8_enable_debug_code = v8_enable_debugging_features + v8_enable_debug_code = v8_enable_debugging_features || v8_dcheck_always_on } if (v8_enable_snapshot_native_code_counters == "") { v8_enable_snapshot_native_code_counters = v8_enable_debugging_features @@ -495,6 +518,9 @@ if (v8_enable_drumbrake && v8_enable_webassembly) { is_drumbrake_supported, "DrumBrake is only available on x64, arm64 on Windows, Linux and MacOS.") } +if (v8_enable_black_allocated_pages == "") { + v8_enable_black_allocated_pages = !v8_enable_sticky_mark_bits +} # Toggle pointer compression for correctness fuzzing when building the # clang_x64_pointer_compression toolchain. We'll correctness-compare the @@ -519,18 +545,23 @@ if (v8_enable_pointer_compression_8gb == "") { if (v8_enable_fast_torque == "") { v8_enable_fast_torque = v8_enable_fast_mksnapshot } +if (v8_enable_concurrent_mksnapshot == "") { + v8_enable_concurrent_mksnapshot = v8_enable_fast_mksnapshot +} if (v8_enable_zone_compression == "") { v8_enable_zone_compression = false } if (v8_enable_short_builtin_calls == "") { v8_enable_short_builtin_calls = - v8_current_cpu == "x64" || v8_current_cpu == "arm64" + v8_current_cpu == "x64" || v8_current_cpu == "arm64" || + v8_current_cpu == "loong64" || v8_current_cpu == "riscv64" } if (v8_enable_external_code_space == "") { v8_enable_external_code_space = v8_enable_pointer_compression && v8_enable_pointer_compression_shared_cage && - (v8_current_cpu == "x64" || v8_current_cpu == "arm64") + (v8_current_cpu == "x64" || v8_current_cpu == "arm64" || + v8_current_cpu == "loong64") } if (v8_enable_sparkplug == "") { v8_enable_sparkplug = !v8_jitless @@ -538,7 +569,8 @@ if (v8_enable_sparkplug == "") { if (v8_enable_maglev == "") { v8_enable_maglev = v8_enable_turbofan && (v8_current_cpu == "arm" || v8_current_cpu == "x64" || - v8_current_cpu == "arm64") + v8_current_cpu == "arm64" || v8_current_cpu == "s390x" || + v8_current_cpu == "riscv64") } assert(v8_enable_turbofan || !v8_enable_maglev, "Maglev is not available when Turbofan is disabled.") @@ -578,10 +610,6 @@ if (v8_enable_short_builtin_calls && # guaranteed to be close enough to embedded builtins. v8_enable_short_builtin_calls = false } -if (v8_enable_shared_ro_heap == "") { - v8_enable_shared_ro_heap = !v8_enable_pointer_compression || - v8_enable_pointer_compression_shared_cage -} if (v8_enable_sandbox == "") { # TODO(saelo, v8:11880) remove dependency on v8_enable_external_code_space @@ -591,9 +619,13 @@ if (v8_enable_sandbox == "") { v8_enable_sandbox = v8_enable_pointer_compression_shared_cage && v8_enable_external_code_space && target_os != "fuchsia" } - -if (v8_disable_leaptiering == "") { - v8_disable_leaptiering = false +if (v8_enable_leaptiering == "") { + # TODO(https://crbug.com/386194917): Enabling leaptiering when + # "v8_current_cpu == x64" is suspected of causing failures for the + # "chromium/ci/Deterministic Fuchsia (dbg)" bot. Re-enable support for this + # once the issue(s) leading to these failures is/are resolved. + v8_enable_leaptiering = v8_enable_sandbox || v8_current_cpu == "arm64" || + v8_current_cpu == "x86" || v8_current_cpu == "arm" } if (v8_enable_static_roots == "") { @@ -605,17 +637,13 @@ if (v8_enable_static_roots == "") { # without external code space allocate read only roots at a further # location relative to the cage base. v8_enable_static_roots = - v8_enable_pointer_compression && v8_enable_shared_ro_heap && - v8_enable_pointer_compression_shared_cage && - v8_enable_external_code_space && v8_enable_webassembly && - v8_enable_i18n_support + v8_enable_pointer_compression && v8_enable_external_code_space && + v8_enable_webassembly && v8_enable_i18n_support } assert(!v8_enable_static_roots || - (v8_enable_pointer_compression && v8_enable_shared_ro_heap && - v8_enable_pointer_compression_shared_cage && - v8_enable_external_code_space && v8_enable_webassembly && - v8_enable_i18n_support), + (v8_enable_pointer_compression && v8_enable_external_code_space && + v8_enable_webassembly && v8_enable_i18n_support), "Trying to enable static roots in a configuration that is not supported") assert( @@ -674,13 +702,6 @@ assert(!v8_disable_write_barriers || v8_enable_single_generation, assert(v8_current_cpu == "arm64" || !v8_control_flow_integrity, "Control-flow integrity is only supported on arm64") -if (v8_enable_shared_ro_heap && v8_enable_pointer_compression && - !v8_enable_pointer_compression_shared_cage) { - assert( - is_linux || is_chromeos || is_android, - "Sharing read-only heap with pointer compression is only supported on Linux or Android") -} - assert(!v8_enable_map_packing || !v8_enable_pointer_compression, "Map packing does not support pointer compression") @@ -693,12 +714,12 @@ assert(!v8_enable_external_code_space || v8_enable_pointer_compression, assert(!v8_enable_pointer_compression_8gb || v8_enable_pointer_compression, "Pointer compression for 8GB cages requires pointer compression") -assert(!v8_enable_sandbox || v8_enable_pointer_compression_shared_cage, - "The sandbox requires the shared pointer compression cage") - assert(!v8_enable_sandbox || v8_enable_external_code_space, "The sandbox requires the external code space") +assert(v8_enable_leaptiering || !v8_enable_sandbox, + "the sandbox requires leaptiering to be enabled") + assert(!v8_enable_memory_corruption_api || v8_enable_sandbox, "The Memory Corruption API requires the sandbox") @@ -740,10 +761,26 @@ assert(!v8_enable_cet_shadow_stack || (v8_target_cpu == "x64" && target_os == "win"), "CET shadow stack is supported only on x64 Windows") +if (v8_enable_sticky_mark_bits) { + # To support sticky mark bits, pretenured allocations must be allocated from + # a separate free-list and the atomic pause (or the sweeper) must fix up the + # mark bits. + assert(!v8_enable_black_allocated_pages, + "Black allocated pages are not yet supported with sticky mark bits") +} + if (v8_expose_public_symbols == "") { v8_expose_public_symbols = v8_expose_symbols } +# Some fuzzers depend on fuzzing functionality linked into the v8 library. +# For binary size reasons this functionality is not available for official +# builds, therefore these fuzzers do not function there and should be skipped +# instead. +if (v8_wasm_random_fuzzers == "") { + v8_wasm_random_fuzzers = !is_official_build +} + v8_random_seed = "314159265" v8_toolset_for_shell = "host" @@ -886,6 +923,7 @@ external_v8_defines = [ "V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT=${v8_array_buffer_view_internal_field_count}", "V8_PROMISE_INTERNAL_FIELD_COUNT=${v8_promise_internal_field_count}", "V8_ENABLE_CHECKS", + "V8_ENABLE_MEMORY_ACCOUNTING_CHECKS", "V8_COMPRESS_POINTERS", "V8_COMPRESS_POINTERS_IN_SHARED_CAGE", "V8_31BIT_SMIS_ON_64BIT_ARCH", @@ -918,6 +956,9 @@ enabled_external_v8_defines = [ if (v8_enable_v8_checks) { enabled_external_v8_defines += [ "V8_ENABLE_CHECKS" ] } +if (v8_enable_memory_accounting_checks) { + enabled_external_v8_defines += [ "V8_ENABLE_MEMORY_ACCOUNTING_CHECKS" ] +} if (v8_enable_pointer_compression) { enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS" ] if (v8_enable_pointer_compression_shared_cage) { @@ -1002,16 +1043,25 @@ config("v8_header_features") { # List of defines that can appear in externally visible cppgc header files and # that are controlled by args.gn. external_cppgc_defines = [ - "CPPGC_SUPPORTS_OBJECT_NAMES", "CPPGC_CAGED_HEAP", + "CPPGC_ENABLE_API_CHECKS", + "CPPGC_ENABLE_LARGER_CAGE", + "CPPGC_ENABLE_SLOW_API_CHECKS", + "CPPGC_POINTER_COMPRESSION", "CPPGC_SLIM_WRITE_BARRIER", + "CPPGC_SUPPORTS_OBJECT_NAMES", "CPPGC_YOUNG_GENERATION", - "CPPGC_POINTER_COMPRESSION", - "CPPGC_ENABLE_LARGER_CAGE", ] enabled_external_cppgc_defines = [] +if (cppgc_enable_api_checks) { + enabled_external_cppgc_defines += [ "CPPGC_ENABLE_API_CHECKS" ] +} +cppgc_enable_slow_api_checks = v8_enable_slow_dchecks +if (cppgc_enable_slow_api_checks) { + enabled_external_cppgc_defines += [ "CPPGC_ENABLE_SLOW_API_CHECKS" ] +} if (cppgc_enable_object_names) { enabled_external_cppgc_defines += [ "CPPGC_SUPPORTS_OBJECT_NAMES" ] } @@ -1032,9 +1082,6 @@ if (cppgc_enable_young_generation) { if (cppgc_enable_pointer_compression) { enabled_external_cppgc_defines += [ "CPPGC_POINTER_COMPRESSION" ] } -if (cppgc_enable_2gb_cage) { - enabled_external_cppgc_defines += [ "CPPGC_2GB_CAGE" ] -} if (cppgc_enable_larger_cage) { enabled_external_cppgc_defines += [ "CPPGC_ENABLE_LARGER_CAGE" ] } @@ -1151,6 +1198,9 @@ config("features") { } if (v8_enable_debug_code) { defines += [ "V8_ENABLE_DEBUG_CODE" ] + if (v8_enable_debugging_features) { + defines += [ "V8_ENABLE_SLOW_DEBUG_CODE_BY_DEFAULT" ] + } } if (v8_enable_heap_snapshot_verify) { defines += [ "V8_ENABLE_HEAP_SNAPSHOT_VERIFY" ] @@ -1179,9 +1229,6 @@ config("features") { if (v8_use_siphash) { defines += [ "V8_USE_SIPHASH" ] } - if (v8_enable_shared_ro_heap) { - defines += [ "V8_SHARED_RO_HEAP" ] - } if (v8_win64_unwinding_info) { defines += [ "V8_WIN64_UNWINDING_INFO" ] } @@ -1240,6 +1287,7 @@ config("features") { defines += [ "V8_ENABLE_SYSTEM_INSTRUMENTATION" ] } if (v8_enable_etw_stack_walking) { + assert(is_win) defines += [ "V8_ENABLE_ETW_STACK_WALKING" ] } if (v8_etw_guid != "") { @@ -1317,14 +1365,20 @@ config("features") { if (v8_enable_local_off_stack_check) { defines += [ "V8_ENABLE_LOCAL_OFF_STACK_CHECK" ] } + if (v8_enable_black_allocated_pages) { + defines += [ "V8_ENABLE_BLACK_ALLOCATED_PAGES" ] + } if (v8_enable_sticky_mark_bits) { defines += [ "V8_ENABLE_STICKY_MARK_BITS" ] } if (v8_enable_experimental_tsa_builtins) { defines += [ "V8_ENABLE_EXPERIMENTAL_TSA_BUILTINS" ] } - if (v8_disable_leaptiering) { - defines += [ "V8_DISABLE_LEAPTIERING" ] + if (v8_enable_leaptiering) { + defines += [ "V8_ENABLE_LEAPTIERING" ] + } + if (v8_wasm_random_fuzzers) { + defines += [ "V8_WASM_RANDOM_FUZZERS" ] } } @@ -1416,14 +1470,11 @@ config("toolchain") { defines += [ "V8_TARGET_ARCH_LOONG64" ] } - if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { - defines += [ "V8_TARGET_ARCH_S390" ] + if (v8_current_cpu == "s390x") { cflags += [ "-ffp-contract=off" ] - if (v8_current_cpu == "s390x") { - defines += [ "V8_TARGET_ARCH_S390X" ] - } + defines += [ "V8_TARGET_ARCH_S390X" ] if (host_byteorder == "little") { - defines += [ "V8_TARGET_ARCH_S390_LE_SIM" ] + defines += [ "V8_TARGET_ARCH_S390X_LE_SIM" ] } else if (current_os != "zos") { cflags += [ "-march=z196" ] } @@ -1445,10 +1496,22 @@ config("toolchain") { # Under simulator build, compiler will not provide __riscv_xlen. Define here if (v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") { + if (target_is_simulator) { + defines += [ "_RISCV_TARGET_SIMULATOR" ] + } if (riscv_use_rvv || target_is_simulator) { defines += [ "CAN_USE_RVV_INSTRUCTIONS" ] defines += [ "RVV_VLEN=${riscv_rvv_vlen}" ] } + if (riscv_use_zba) { + defines += [ "__riscv_zba" ] + } + if (riscv_use_zbb) { + defines += [ "__riscv_zbb" ] + } + if (riscv_use_zbs) { + defines += [ "__riscv_zbs" ] + } } if (v8_current_cpu == "riscv64") { defines += [ "V8_TARGET_ARCH_RISCV64" ] @@ -1837,6 +1900,7 @@ if (v8_postmortem_support) { "src/objects/instruction-stream.h", "src/objects/instruction-stream-inl.h", "src/objects/casting.h", + "src/objects/casting-inl.h", "src/objects/code.h", "src/objects/code-inl.h", "src/objects/data-handler.h", @@ -2617,6 +2681,15 @@ template("run_mksnapshot") { } } + if (v8_enable_concurrent_mksnapshot) { + args += [ + "--concurrent-builtin-generation", + + # Use all the cores for concurrent builtin generation. + "--concurrent-turbofan-max-threads=0", + ] + } + if (v8_enable_verify_heap) { args += [ "--verify-heap" ] } @@ -2748,16 +2821,11 @@ action("v8_dump_build_config") { mips_use_msa_var = mips_use_msa } - js_shared_memory = - v8_enable_shared_ro_heap && (!v8_enable_pointer_compression || - v8_enable_pointer_compression_shared_cage) && - !v8_disable_write_barriers + js_shared_memory = !v8_disable_write_barriers simd_mips = mips_arch_variant_var == "r6" && mips_use_msa simulator_run = target_cpu != v8_target_cpu use_sanitizer = is_asan || is_cfi || is_msan || is_tsan || is_ubsan - use_leaptiering = v8_enable_sandbox && !v8_disable_leaptiering - # This lists all build-time switches consumed by the test framework. All # switches can be used automatically in the status files as is - no # further files need to be modified. @@ -2812,7 +2880,6 @@ action("v8_dump_build_config") { "pointer_compression_shared_cage=$v8_enable_pointer_compression_shared_cage", "runtime_call_stats=$v8_enable_runtime_call_stats", "sandbox=$v8_enable_sandbox", - "shared_ro_heap=$v8_enable_shared_ro_heap", "simd_mips=$simd_mips", "simulator_run=$simulator_run", "single_generation=$v8_enable_single_generation", @@ -2827,8 +2894,9 @@ action("v8_dump_build_config") { "verify_csa=$v8_enable_verify_csa", "verify_heap=$v8_enable_verify_heap", "verify_predictable=$v8_enable_verify_predictable", + "wasm_random_fuzzers=$v8_wasm_random_fuzzers", "memory_corruption_api=$v8_enable_memory_corruption_api", - "leaptiering=$use_leaptiering", + "leaptiering=$v8_enable_leaptiering", # Please add new switches also in `build_config_content` in `bazel/defs.bzl` # so that the switches also work for tests triggered by bazel. @@ -2862,9 +2930,9 @@ generated_file("v8_generate_features_json") { v8_enable_pointer_compression_shared_cage = v8_enable_pointer_compression_shared_cage v8_enable_sandbox = v8_enable_sandbox - v8_enable_shared_ro_heap = v8_enable_shared_ro_heap v8_enable_short_builtin_calls = v8_enable_short_builtin_calls v8_enable_v8_checks = v8_enable_v8_checks + v8_enable_memory_accounting_checks = v8_enable_memory_accounting_checks v8_enable_webassembly = v8_enable_webassembly v8_enable_zone_compression = v8_enable_zone_compression v8_imminent_deprecation_warnings = v8_imminent_deprecation_warnings @@ -2900,9 +2968,6 @@ v8_source_set("v8_snapshot") { public = [] sources = [ "src/init/setup-isolate-deserialize.cc" ] - if (v8_control_flow_integrity) { - sources += [ "src/deoptimizer/deoptimizer-cfi-builtins.cc" ] - } if (emit_builtins_as_inline_asm) { deps += [ ":asm_to_inline_asm_default" ] sources += [ "$target_gen_dir/embedded.cc" ] @@ -3086,7 +3151,7 @@ v8_source_set("v8_initializers") { ### gcmole(ppc64) ### "src/builtins/ppc/builtins-ppc.cc", ] - } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { + } else if (v8_current_cpu == "s390x") { sources += [ ### gcmole(s390) ### "src/builtins/s390/builtins-s390.cc", @@ -3180,6 +3245,7 @@ v8_header_set("v8_headers") { "include/v8-embedder-state-scope.h", "include/v8-exception.h", "include/v8-extension.h", + "include/v8-external-memory-accounter.h", "include/v8-external.h", "include/v8-fast-api-calls.h", "include/v8-forward.h", @@ -3411,6 +3477,7 @@ v8_header_set("v8_internal_headers") { "src/common/segmented-table-inl.h", "src/common/segmented-table.h", "src/common/simd128.h", + "src/common/thread-local-storage.h", "src/compiler-dispatcher/lazy-compile-dispatcher.h", "src/compiler-dispatcher/optimizing-compile-dispatcher.h", "src/compiler/access-builder.h", @@ -3444,13 +3511,13 @@ v8_header_set("v8_internal_headers") { "src/compiler/bytecode-graph-builder.h", "src/compiler/bytecode-liveness-map.h", "src/compiler/checkpoint-elimination.h", + "src/compiler/code-assembler-compilation-job.h", "src/compiler/code-assembler.h", "src/compiler/common-node-cache.h", "src/compiler/common-operator-reducer.h", "src/compiler/common-operator.h", "src/compiler/compilation-dependencies.h", "src/compiler/compiler-source-position-table.h", - "src/compiler/const-tracking-let-helpers.h", "src/compiler/constant-folding-reducer.h", "src/compiler/control-equivalence.h", "src/compiler/control-path-state.h", @@ -3469,9 +3536,7 @@ v8_header_set("v8_internal_headers") { "src/compiler/graph-assembler.h", "src/compiler/graph-reducer.h", "src/compiler/graph-trimmer.h", - "src/compiler/graph-visualizer.h", "src/compiler/graph-zone-traits.h", - "src/compiler/graph.h", "src/compiler/heap-refs.h", "src/compiler/js-call-reducer.h", "src/compiler/js-context-specialization.h", @@ -3536,6 +3601,10 @@ v8_header_set("v8_internal_headers") { "src/compiler/simplified-operator.h", "src/compiler/state-values-utils.h", "src/compiler/string-builder-optimizer.h", + "src/compiler/turbofan-graph-visualizer.h", + "src/compiler/turbofan-graph.h", + "src/compiler/turbofan-typer.h", + "src/compiler/turbofan-types.h", "src/compiler/turbofan.h", "src/compiler/turboshaft/access-builder.h", "src/compiler/turboshaft/analyzer-iterator.h", @@ -3600,14 +3669,13 @@ v8_header_set("v8_internal_headers") { "src/compiler/turboshaft/runtime-call-descriptors.h", "src/compiler/turboshaft/select-lowering-reducer.h", "src/compiler/turboshaft/sidetable.h", - "src/compiler/turboshaft/simplified-lowering-phase.h", - "src/compiler/turboshaft/simplified-lowering-reducer.h", "src/compiler/turboshaft/simplify-tf-loops.h", "src/compiler/turboshaft/snapshot-table-opindex.h", "src/compiler/turboshaft/snapshot-table.h", "src/compiler/turboshaft/stack-check-lowering-reducer.h", "src/compiler/turboshaft/store-store-elimination-phase.h", "src/compiler/turboshaft/store-store-elimination-reducer-inl.h", + "src/compiler/turboshaft/string-escape-analysis-reducer.h", "src/compiler/turboshaft/string-view.h", "src/compiler/turboshaft/structural-optimization-reducer.h", "src/compiler/turboshaft/tracing.h", @@ -3630,8 +3698,6 @@ v8_header_set("v8_internal_headers") { "src/compiler/type-cache.h", "src/compiler/type-narrowing-reducer.h", "src/compiler/typed-optimization.h", - "src/compiler/typer.h", - "src/compiler/types.h", "src/compiler/use-info.h", "src/compiler/value-numbering-reducer.h", "src/compiler/verifier.h", @@ -3730,6 +3796,8 @@ v8_header_set("v8_internal_headers") { "src/heap/collection-barrier.h", "src/heap/combined-heap.h", "src/heap/concurrent-marking.h", + "src/heap/conservative-stack-visitor-inl.h", + "src/heap/conservative-stack-visitor.h", "src/heap/cppgc-js/cpp-heap.h", "src/heap/cppgc-js/cpp-marking-state-inl.h", "src/heap/cppgc-js/cpp-marking-state.h", @@ -3758,7 +3826,13 @@ v8_header_set("v8_internal_headers") { "src/heap/heap-allocator.h", "src/heap/heap-controller.h", "src/heap/heap-inl.h", + "src/heap/heap-layout-inl.h", "src/heap/heap-layout-tracer.h", + "src/heap/heap-layout.h", + "src/heap/heap-utils-inl.h", + "src/heap/heap-utils.h", + "src/heap/heap-visitor-inl.h", + "src/heap/heap-visitor.h", "src/heap/heap-write-barrier-inl.h", "src/heap/heap-write-barrier.h", "src/heap/heap.h", @@ -3771,6 +3845,8 @@ v8_header_set("v8_internal_headers") { "src/heap/large-spaces.h", "src/heap/linear-allocation-area.h", "src/heap/list.h", + "src/heap/live-object-range-inl.h", + "src/heap/live-object-range.h", "src/heap/local-factory-inl.h", "src/heap/local-factory.h", "src/heap/local-heap-inl.h", @@ -3783,6 +3859,7 @@ v8_header_set("v8_internal_headers") { "src/heap/marking-barrier-inl.h", "src/heap/marking-barrier.h", "src/heap/marking-inl.h", + "src/heap/marking-progress-tracker.h", "src/heap/marking-state-inl.h", "src/heap/marking-state.h", "src/heap/marking-visitor-inl.h", @@ -3792,6 +3869,7 @@ v8_header_set("v8_internal_headers") { "src/heap/marking.h", "src/heap/memory-allocator.h", "src/heap/memory-balancer.h", + "src/heap/memory-chunk-constants.h", "src/heap/memory-chunk-inl.h", "src/heap/memory-chunk-layout.h", "src/heap/memory-chunk-metadata-inl.h", @@ -3810,8 +3888,6 @@ v8_header_set("v8_internal_headers") { "src/heap/object-lock-inl.h", "src/heap/object-lock.h", "src/heap/object-stats.h", - "src/heap/objects-visiting-inl.h", - "src/heap/objects-visiting.h", "src/heap/page-metadata.h", "src/heap/paged-spaces-inl.h", "src/heap/paged-spaces.h", @@ -3820,7 +3896,6 @@ v8_header_set("v8_internal_headers") { "src/heap/parked-scope.h", "src/heap/pretenuring-handler-inl.h", "src/heap/pretenuring-handler.h", - "src/heap/progress-bar.h", "src/heap/read-only-heap-inl.h", "src/heap/read-only-heap.h", "src/heap/read-only-promotion.h", @@ -3836,6 +3911,7 @@ v8_header_set("v8_internal_headers") { "src/heap/sweeper.h", "src/heap/traced-handles-marking-visitor.h", "src/heap/trusted-range.h", + "src/heap/visit-object.h", "src/heap/weak-object-worklists.h", "src/heap/young-generation-marking-visitor-inl.h", "src/heap/young-generation-marking-visitor.h", @@ -3896,6 +3972,7 @@ v8_header_set("v8_internal_headers") { "src/numbers/conversions-inl.h", "src/numbers/conversions.h", "src/numbers/hash-seed-inl.h", + "src/numbers/ieee754.h", "src/numbers/math-random.h", "src/objects/all-objects-inl.h", "src/objects/allocation-site-inl.h", @@ -3907,7 +3984,6 @@ v8_header_set("v8_internal_headers") { "src/objects/arguments-inl.h", "src/objects/arguments.h", "src/objects/backing-store.h", - "src/objects/bigint-inl.h", "src/objects/bigint.h", "src/objects/call-site-info-inl.h", "src/objects/call-site-info.h", @@ -4123,7 +4199,7 @@ v8_header_set("v8_internal_headers") { "src/objects/waiter-queue-node.h", "src/parsing/expression-scope.h", "src/parsing/func-name-inferrer.h", - "src/parsing/import-assertions.h", + "src/parsing/import-attributes.h", "src/parsing/keywords-gen.h", "src/parsing/literal-buffer.h", "src/parsing/parse-info.h", @@ -4178,6 +4254,7 @@ v8_header_set("v8_internal_headers") { "src/regexp/regexp-macro-assembler.h", "src/regexp/regexp-nodes.h", "src/regexp/regexp-parser.h", + "src/regexp/regexp-result-vector.h", "src/regexp/regexp-stack.h", "src/regexp/regexp-utils.h", "src/regexp/regexp.h", @@ -4200,11 +4277,6 @@ v8_header_set("v8_internal_headers") { "src/sandbox/cppheap-pointer-inl.h", "src/sandbox/cppheap-pointer-table-inl.h", "src/sandbox/cppheap-pointer-table.h", - "src/sandbox/external-buffer-inl.h", - "src/sandbox/external-buffer-table-inl.h", - "src/sandbox/external-buffer-table.h", - "src/sandbox/external-buffer-tag.h", - "src/sandbox/external-buffer.h", "src/sandbox/external-entity-table-inl.h", "src/sandbox/external-entity-table.h", "src/sandbox/external-pointer-inl.h", @@ -4268,8 +4340,6 @@ v8_header_set("v8_internal_headers") { "src/tasks/operations-barrier.h", "src/tasks/task-utils.h", "src/temporal/temporal-parser.h", - "src/third_party/siphash/halfsiphash.h", - "src/third_party/utf8-decoder/utf8-decoder.h", "src/torque/runtime-macro-shims.h", "src/tracing/trace-event-no-perfetto.h", "src/tracing/trace-event.h", @@ -4307,6 +4377,8 @@ v8_header_set("v8_internal_headers") { "src/zone/zone-type-traits.h", "src/zone/zone-utils.h", "src/zone/zone.h", + "third_party/siphash/halfsiphash.h", + "third_party/utf8-decoder/utf8-decoder.h", ] if (v8_enable_snapshot_compression) { @@ -4365,6 +4437,8 @@ v8_header_set("v8_internal_headers") { sources += [ "src/maglev/arm/maglev-assembler-arm-inl.h" ] } else if (v8_current_cpu == "arm64") { sources += [ "src/maglev/arm64/maglev-assembler-arm64-inl.h" ] + } else if (v8_current_cpu == "riscv64") { + sources += [ "src/maglev/riscv/maglev-assembler-riscv-inl.h" ] } else if (v8_current_cpu == "x64") { sources += [ "src/maglev/x64/maglev-assembler-x64-inl.h" ] } else if (v8_current_cpu == "s390x") { @@ -4380,6 +4454,7 @@ v8_header_set("v8_internal_headers") { "src/asmjs/asm-scanner.h", "src/asmjs/asm-types.h", "src/compiler/int64-lowering.h", + "src/compiler/turboshaft/growable-stacks-reducer.h", "src/compiler/turboshaft/int64-lowering-phase.h", "src/compiler/turboshaft/int64-lowering-reducer.h", "src/compiler/turboshaft/wasm-assembler-helpers.h", @@ -4409,7 +4484,6 @@ v8_header_set("v8_internal_headers") { "src/compiler/wasm-typer.h", "src/debug/debug-wasm-objects-inl.h", "src/debug/debug-wasm-objects.h", - "src/third_party/utf8-decoder/generalized-utf8-decoder.h", "src/trap-handler/trap-handler-internal.h", "src/trap-handler/trap-handler.h", "src/wasm/baseline/liftoff-assembler-defs.h", @@ -4445,7 +4519,6 @@ v8_header_set("v8_internal_headers") { "src/wasm/names-provider.h", "src/wasm/object-access.h", "src/wasm/pgo.h", - "src/wasm/serialized-signature-inl.h", "src/wasm/signature-hashing.h", "src/wasm/simd-shuffle.h", "src/wasm/stacks.h", @@ -4486,6 +4559,7 @@ v8_header_set("v8_internal_headers") { "src/wasm/wasm-tier.h", "src/wasm/wasm-value.h", "src/wasm/well-known-imports.h", + "third_party/utf8-decoder/generalized-utf8-decoder.h", ] if (v8_enable_drumbrake) { @@ -4544,10 +4618,6 @@ v8_header_set("v8_internal_headers") { sources += [ "src/execution/pointer-authentication-dummy.h" ] } - if (v8_enable_conservative_stack_scanning) { - sources += [ "src/heap/conservative-stack-visitor.h" ] - } - if (v8_enable_wasm_gdb_remote_debugging) { sources += [ "src/debug/wasm/gdb-server/gdb-remote-util.h", @@ -4608,8 +4678,8 @@ v8_header_set("v8_internal_headers") { "src/compiler/backend/x64/unwinding-info-writer-x64.h", "src/execution/x64/frame-constants-x64.h", "src/regexp/x64/regexp-macro-assembler-x64.h", - "src/third_party/valgrind/valgrind.h", "src/wasm/baseline/x64/liftoff-assembler-x64-inl.h", + "third_party/valgrind/valgrind.h", ] if (is_win) { @@ -4781,7 +4851,7 @@ v8_header_set("v8_internal_headers") { "src/baseline/ppc/baseline-compiler-ppc-inl.h", ] } - } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { + } else if (v8_current_cpu == "s390x") { sources += [ ### gcmole(s390) ### "src/codegen/s390/assembler-s390-inl.h", @@ -4966,7 +5036,6 @@ v8_compiler_sources = [ "src/compiler/common-operator.cc", "src/compiler/compilation-dependencies.cc", "src/compiler/compiler-source-position-table.cc", - "src/compiler/const-tracking-let-helpers.cc", "src/compiler/constant-folding-reducer.cc", "src/compiler/control-equivalence.cc", "src/compiler/csa-load-elimination.cc", @@ -4981,8 +5050,6 @@ v8_compiler_sources = [ "src/compiler/graph-assembler.cc", "src/compiler/graph-reducer.cc", "src/compiler/graph-trimmer.cc", - "src/compiler/graph-visualizer.cc", - "src/compiler/graph.cc", "src/compiler/heap-refs.cc", "src/compiler/js-call-reducer.cc", "src/compiler/js-context-specialization.cc", @@ -5040,16 +5107,74 @@ v8_compiler_sources = [ "src/compiler/state-values-utils.cc", "src/compiler/string-builder-optimizer.cc", "src/compiler/turbofan-enabled.cc", + "src/compiler/turbofan-graph-visualizer.cc", + "src/compiler/turbofan-graph.cc", + "src/compiler/turbofan-typer.cc", + "src/compiler/turbofan-types.cc", + "src/compiler/turboshaft/analyzer-iterator.cc", + "src/compiler/turboshaft/assembler.cc", + "src/compiler/turboshaft/block-instrumentation-phase.cc", + "src/compiler/turboshaft/block-instrumentation-reducer.cc", + "src/compiler/turboshaft/build-graph-phase.cc", + "src/compiler/turboshaft/code-elimination-and-simplification-phase.cc", + "src/compiler/turboshaft/copying-phase.cc", + "src/compiler/turboshaft/csa-optimize-phase.cc", + "src/compiler/turboshaft/debug-feature-lowering-phase.cc", + "src/compiler/turboshaft/decompression-optimization-phase.cc", + "src/compiler/turboshaft/decompression-optimization.cc", + "src/compiler/turboshaft/graph-builder.cc", + "src/compiler/turboshaft/graph-visualizer.cc", + "src/compiler/turboshaft/graph.cc", + "src/compiler/turboshaft/instruction-selection-phase.cc", + "src/compiler/turboshaft/late-escape-analysis-reducer.cc", + "src/compiler/turboshaft/late-load-elimination-reducer.cc", + "src/compiler/turboshaft/loop-finder.cc", + "src/compiler/turboshaft/loop-peeling-phase.cc", + "src/compiler/turboshaft/loop-unrolling-phase.cc", + "src/compiler/turboshaft/loop-unrolling-reducer.cc", + "src/compiler/turboshaft/machine-lowering-phase.cc", + "src/compiler/turboshaft/maglev-graph-building-phase.cc", + "src/compiler/turboshaft/memory-optimization-reducer.cc", + "src/compiler/turboshaft/operations.cc", + "src/compiler/turboshaft/optimize-phase.cc", + "src/compiler/turboshaft/phase.cc", + "src/compiler/turboshaft/pipelines.cc", + "src/compiler/turboshaft/pretenuring-propagation-reducer.cc", + "src/compiler/turboshaft/recreate-schedule-phase.cc", + "src/compiler/turboshaft/recreate-schedule.cc", + "src/compiler/turboshaft/representations.cc", + "src/compiler/turboshaft/sidetable.cc", + "src/compiler/turboshaft/simplify-tf-loops.cc", + "src/compiler/turboshaft/store-store-elimination-phase.cc", + "src/compiler/turboshaft/string-escape-analysis-reducer.cc", + "src/compiler/turboshaft/type-assertions-phase.cc", + "src/compiler/turboshaft/type-parser.cc", + "src/compiler/turboshaft/typed-optimizations-phase.cc", + "src/compiler/turboshaft/typer.cc", + "src/compiler/turboshaft/types.cc", + "src/compiler/turboshaft/use-map.cc", + "src/compiler/turboshaft/utils.cc", "src/compiler/type-cache.cc", "src/compiler/type-narrowing-reducer.cc", "src/compiler/typed-optimization.cc", - "src/compiler/typer.cc", - "src/compiler/types.cc", "src/compiler/value-numbering-reducer.cc", "src/compiler/verifier.cc", "src/compiler/zone-stats.cc", ] +if (!v8_enable_maglev) { + # When Maglev is not enabled, Turboshaft still needs Maglev's graph builder. + v8_compiler_sources += [ + "src/maglev/maglev-compilation-info.cc", + "src/maglev/maglev-compilation-unit.cc", + "src/maglev/maglev-graph-builder.cc", + "src/maglev/maglev-graph-printer.cc", + "src/maglev/maglev-interpreter-frame-state.cc", + "src/maglev/maglev-ir.cc", + "src/maglev/maglev-phi-representation-selector.cc", + ] +} + if (v8_current_cpu == "x86") { v8_compiler_sources += [ ### gcmole(ia32) ### @@ -5103,7 +5228,7 @@ if (v8_current_cpu == "x86") { "src/compiler/backend/ppc/instruction-selector-ppc.cc", "src/compiler/backend/ppc/unwinding-info-writer-ppc.cc", ] -} else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { +} else if (v8_current_cpu == "s390x") { v8_compiler_sources += [ ### gcmole(s390) ### "src/compiler/backend/s390/code-generator-s390.cc", @@ -5229,86 +5354,6 @@ v8_source_set("v8_compiler") { configs = [ ":internal_config" ] } -# The src/compiler files with default optimization behavior. -v8_source_set("v8_turboshaft") { - visibility = [ ":*" ] # Only targets in this file can depend on this. - - sources = [ - "src/compiler/turboshaft/analyzer-iterator.cc", - "src/compiler/turboshaft/assembler.cc", - "src/compiler/turboshaft/block-instrumentation-phase.cc", - "src/compiler/turboshaft/block-instrumentation-reducer.cc", - "src/compiler/turboshaft/build-graph-phase.cc", - "src/compiler/turboshaft/code-elimination-and-simplification-phase.cc", - "src/compiler/turboshaft/copying-phase.cc", - "src/compiler/turboshaft/csa-optimize-phase.cc", - "src/compiler/turboshaft/debug-feature-lowering-phase.cc", - "src/compiler/turboshaft/decompression-optimization-phase.cc", - "src/compiler/turboshaft/decompression-optimization.cc", - "src/compiler/turboshaft/graph-builder.cc", - "src/compiler/turboshaft/graph-visualizer.cc", - "src/compiler/turboshaft/graph.cc", - "src/compiler/turboshaft/instruction-selection-phase.cc", - "src/compiler/turboshaft/late-escape-analysis-reducer.cc", - "src/compiler/turboshaft/late-load-elimination-reducer.cc", - "src/compiler/turboshaft/loop-finder.cc", - "src/compiler/turboshaft/loop-peeling-phase.cc", - "src/compiler/turboshaft/loop-unrolling-phase.cc", - "src/compiler/turboshaft/loop-unrolling-reducer.cc", - "src/compiler/turboshaft/machine-lowering-phase.cc", - "src/compiler/turboshaft/maglev-graph-building-phase.cc", - "src/compiler/turboshaft/memory-optimization-reducer.cc", - "src/compiler/turboshaft/operations.cc", - "src/compiler/turboshaft/optimize-phase.cc", - "src/compiler/turboshaft/phase.cc", - "src/compiler/turboshaft/pipelines.cc", - "src/compiler/turboshaft/pretenuring-propagation-reducer.cc", - "src/compiler/turboshaft/recreate-schedule-phase.cc", - "src/compiler/turboshaft/recreate-schedule.cc", - "src/compiler/turboshaft/representations.cc", - "src/compiler/turboshaft/sidetable.cc", - "src/compiler/turboshaft/simplified-lowering-phase.cc", - "src/compiler/turboshaft/simplify-tf-loops.cc", - "src/compiler/turboshaft/store-store-elimination-phase.cc", - "src/compiler/turboshaft/type-assertions-phase.cc", - "src/compiler/turboshaft/type-parser.cc", - "src/compiler/turboshaft/typed-optimizations-phase.cc", - "src/compiler/turboshaft/typer.cc", - "src/compiler/turboshaft/types.cc", - "src/compiler/turboshaft/use-map.cc", - "src/compiler/turboshaft/utils.cc", - ] - - if (!v8_enable_maglev) { - # When Maglev is not enabled, Turboshaft still needs Maglev's graph builder. - sources += [ - "src/maglev/maglev-compilation-info.cc", - "src/maglev/maglev-compilation-unit.cc", - "src/maglev/maglev-graph-builder.cc", - "src/maglev/maglev-graph-printer.cc", - "src/maglev/maglev-interpreter-frame-state.cc", - "src/maglev/maglev-ir.cc", - "src/maglev/maglev-phi-representation-selector.cc", - ] - } - - public_deps = [ - ":generate_bytecode_builtins_list", - ":run_torque", - ":v8_internal_headers", - ":v8_maybe_icu", - ":v8_tracing", - ] - - deps = [ - ":v8_base_without_compiler", - ":v8_libbase", - ":v8_shared_internal_headers", - ] - - configs = [ ":internal_config" ] -} - group("v8_compiler_for_mksnapshot") { if ((is_debug && !v8_optimized_debug && v8_enable_fast_mksnapshot) || !v8_enable_turbofan) { @@ -5515,7 +5560,9 @@ v8_source_set("v8_base_without_compiler") { "src/heap/heap-allocator.cc", "src/heap/heap-controller.cc", "src/heap/heap-layout-tracer.cc", + "src/heap/heap-layout.cc", "src/heap/heap-verifier.cc", + "src/heap/heap-visitor.cc", "src/heap/heap-write-barrier.cc", "src/heap/heap.cc", "src/heap/incremental-marking-job.cc", @@ -5533,7 +5580,6 @@ v8_source_set("v8_base_without_compiler") { "src/heap/marking.cc", "src/heap/memory-allocator.cc", "src/heap/memory-balancer.cc", - "src/heap/memory-chunk-layout.cc", "src/heap/memory-chunk-metadata.cc", "src/heap/memory-chunk.cc", "src/heap/memory-measurement.cc", @@ -5543,7 +5589,6 @@ v8_source_set("v8_base_without_compiler") { "src/heap/mutable-page-metadata.cc", "src/heap/new-spaces.cc", "src/heap/object-stats.cc", - "src/heap/objects-visiting.cc", "src/heap/page-metadata.cc", "src/heap/paged-spaces.cc", "src/heap/pretenuring-handler.cc", @@ -5558,6 +5603,7 @@ v8_source_set("v8_base_without_compiler") { "src/heap/sweeper.cc", "src/heap/traced-handles-marking-visitor.cc", "src/heap/trusted-range.cc", + "src/heap/visit-object.cc", "src/heap/weak-object-worklists.cc", "src/heap/zapping.cc", "src/ic/call-optimization.cc", @@ -5600,6 +5646,7 @@ v8_source_set("v8_base_without_compiler") { "src/logging/runtime-call-stats.cc", "src/logging/tracing-flags.cc", "src/numbers/conversions.cc", + "src/numbers/ieee754.cc", "src/numbers/math-random.cc", "src/objects/abstract-code.cc", "src/objects/backing-store.cc", @@ -5643,6 +5690,7 @@ v8_source_set("v8_base_without_compiler") { "src/objects/js-segments.cc", "src/objects/js-struct.cc", "src/objects/js-temporal-objects.cc", + "src/objects/js-weak-refs.cc", "src/objects/keys.cc", "src/objects/literal-objects.cc", "src/objects/lookup-cache.cc", @@ -5678,7 +5726,7 @@ v8_source_set("v8_base_without_compiler") { "src/objects/visitors.cc", "src/objects/waiter-queue-node.cc", "src/parsing/func-name-inferrer.cc", - "src/parsing/import-assertions.cc", + "src/parsing/import-attributes.cc", "src/parsing/literal-buffer.cc", "src/parsing/parse-info.cc", "src/parsing/parser.cc", @@ -5719,6 +5767,7 @@ v8_source_set("v8_base_without_compiler") { "src/regexp/regexp-macro-assembler-tracer.cc", "src/regexp/regexp-macro-assembler.cc", "src/regexp/regexp-parser.cc", + "src/regexp/regexp-result-vector.cc", "src/regexp/regexp-stack.cc", "src/regexp/regexp-utils.cc", "src/regexp/regexp.cc", @@ -5758,7 +5807,6 @@ v8_source_set("v8_base_without_compiler") { "src/runtime/runtime.cc", "src/sandbox/code-pointer-table.cc", "src/sandbox/cppheap-pointer-table.cc", - "src/sandbox/external-buffer-table.cc", "src/sandbox/external-pointer-table.cc", "src/sandbox/hardware-support.cc", "src/sandbox/js-dispatch-table.cc", @@ -5796,7 +5844,6 @@ v8_source_set("v8_base_without_compiler") { "src/tasks/operations-barrier.cc", "src/tasks/task-utils.cc", "src/temporal/temporal-parser.cc", - "src/third_party/siphash/halfsiphash.cc", "src/tracing/trace-event.cc", "src/tracing/traced-value.cc", "src/tracing/tracing-category-observer.cc", @@ -5815,6 +5862,7 @@ v8_source_set("v8_base_without_compiler") { "src/zone/type-stats.cc", "src/zone/zone-segment.cc", "src/zone/zone.cc", + "third_party/siphash/halfsiphash.cc", ] if (v8_enable_snapshot_compression) { @@ -5855,6 +5903,11 @@ v8_source_set("v8_base_without_compiler") { "src/maglev/arm64/maglev-assembler-arm64.cc", "src/maglev/arm64/maglev-ir-arm64.cc", ] + } else if (v8_current_cpu == "riscv64") { + sources += [ + "src/maglev/riscv/maglev-assembler-riscv.cc", + "src/maglev/riscv/maglev-ir-riscv.cc", + ] } else if (v8_current_cpu == "x64") { sources += [ "src/maglev/x64/maglev-assembler-x64.cc", @@ -5934,7 +5987,7 @@ v8_source_set("v8_base_without_compiler") { "src/wasm/well-known-imports.cc", "src/wasm/wrappers.cc", ] - if (!is_official_build) { + if (v8_wasm_random_fuzzers) { sources += [ ### gcmole(all) ### "src/wasm/fuzzing/random-module-generation.cc", @@ -5951,10 +6004,6 @@ v8_source_set("v8_base_without_compiler") { } } - if (v8_enable_conservative_stack_scanning) { - sources += [ "src/heap/conservative-stack-visitor.cc" ] - } - if (v8_enable_wasm_gdb_remote_debugging) { sources += [ "src/debug/wasm/gdb-server/gdb-remote-util.cc", @@ -6058,15 +6107,14 @@ v8_source_set("v8_base_without_compiler") { "src/regexp/arm64/regexp-macro-assembler-arm64.cc", ] if (v8_enable_webassembly) { - # Trap handling is enabled on arm64 Mac and Linux and in simulators on - # x64 on Linux, Mac, and Windows. + # Trap handling is enabled on arm64 and x64, on Linux, Mac and Windows. if ((current_cpu == "arm64" && (is_linux || is_chromeos || is_apple)) || (current_cpu == "x64" && (is_linux || is_chromeos || is_mac))) { sources += [ "src/trap-handler/handler-inside-posix.cc", "src/trap-handler/handler-outside-posix.cc", ] - } else if (current_cpu == "x64" && is_win) { + } else if ((current_cpu == "arm64" || current_cpu == "x64") && is_win) { sources += [ "src/trap-handler/handler-inside-win.cc", "src/trap-handler/handler-outside-win.cc", @@ -6139,7 +6187,7 @@ v8_source_set("v8_base_without_compiler") { "src/execution/ppc/simulator-ppc.cc", "src/regexp/ppc/regexp-macro-assembler-ppc.cc", ] - } else if (v8_current_cpu == "s390" || v8_current_cpu == "s390x") { + } else if (v8_current_cpu == "s390x") { sources += [ ### gcmole(s390) ### "src/codegen/s390/assembler-s390.cc", @@ -6226,6 +6274,16 @@ v8_source_set("v8_base_without_compiler") { if (is_win) { if (v8_enable_etw_stack_walking) { sources += [ + "src/diagnostics/etw-debug-win.cc", + "src/diagnostics/etw-debug-win.h", + "src/diagnostics/etw-isolate-capture-state-monitor-win.cc", + "src/diagnostics/etw-isolate-capture-state-monitor-win.h", + "src/diagnostics/etw-isolate-load-script-data-win.cc", + "src/diagnostics/etw-isolate-load-script-data-win.h", + "src/diagnostics/etw-isolate-operations-win.cc", + "src/diagnostics/etw-isolate-operations-win.h", + "src/diagnostics/etw-jit-metadata-win.cc", + "src/diagnostics/etw-jit-metadata-win.h", "src/diagnostics/etw-jit-win.cc", "src/diagnostics/etw-jit-win.h", ] @@ -6248,6 +6306,7 @@ v8_source_set("v8_base_without_compiler") { ":v8_version", "src/inspector:inspector", "//third_party/fast_float", + "//third_party/highway:libhwy", ] public_deps = [ @@ -6315,8 +6374,7 @@ v8_source_set("v8_base_without_compiler") { # to implement atomic memory access if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el" || v8_current_cpu == "ppc64" || - (current_os != "zos" && - (v8_current_cpu == "s390" || v8_current_cpu == "s390x")) || + (current_os != "zos" && v8_current_cpu == "s390x") || v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") { if (!is_clang) { libs += [ "atomic" ] @@ -6328,7 +6386,7 @@ v8_source_set("v8_base_without_compiler") { "src/extensions/vtunedomain-support-extension.cc", "src/extensions/vtunedomain-support-extension.h", ] - deps += [ "src/third_party/vtune:v8_vtune_trace_mark" ] + deps += [ "third_party/vtune:v8_vtune_trace_mark" ] } } @@ -6337,10 +6395,6 @@ group("v8_base") { ":v8_base_without_compiler", ":v8_compiler", ] - - if (v8_enable_turbofan) { - public_deps += [ ":v8_turboshaft" ] - } } v8_source_set("torque_base") { @@ -6497,7 +6551,7 @@ v8_component("v8_libbase") { "src/base/file-utils.h", "src/base/flags.h", "src/base/free_deleter.h", - "src/base/functional.h", + "src/base/hashing.h", "src/base/hashmap-entry.h", "src/base/hashmap.h", "src/base/ieee754.cc", @@ -6563,14 +6617,16 @@ v8_component("v8_libbase") { "src/base/sanitizer/lsan.h", "src/base/sanitizer/msan.h", "src/base/sanitizer/tsan.h", + "src/base/sanitizer/ubsan.h", "src/base/small-map.h", "src/base/small-vector.h", "src/base/string-format.h", "src/base/strings.cc", "src/base/strings.h", + "src/base/strong-alias.h", "src/base/sys-info.cc", "src/base/sys-info.h", - "src/base/template-meta-programming/algorithm.h", + "src/base/template-meta-programming/common.h", "src/base/template-meta-programming/functional.h", "src/base/template-meta-programming/list.h", "src/base/template-meta-programming/string-literal.h", @@ -6595,6 +6651,8 @@ v8_component("v8_libbase") { deps = [ ":v8_config_headers" ] + public_deps = [ ":v8_abseil" ] + if (current_os == "zos") { public_configs += [ ":zoslib_config" ] deps += [ ":zoslib" ] @@ -7239,7 +7297,7 @@ if (v8_enable_webassembly) { "//build/win:default_exe_manifest", ] if (v8_enable_vtunejit) { - deps += [ "src/third_party/vtune:v8_vtune" ] + deps += [ "third_party/vtune:v8_vtune" ] } # TODO: v8dll-main.cc equivalent for shared library builds @@ -7309,10 +7367,6 @@ if (current_toolchain == v8_snapshot_toolchain) { "src/snapshot/static-roots-gen.h", ] - if (v8_control_flow_integrity) { - sources += [ "src/deoptimizer/deoptimizer-cfi-empty.cc" ] - } - configs = [ ":internal_config", ":disable_icf", @@ -7327,7 +7381,6 @@ if (current_toolchain == v8_snapshot_toolchain) { ":v8_maybe_icu", ":v8_shared_internal_headers", ":v8_tracing", - ":v8_turboshaft", "//build/win:default_exe_manifest", ] } @@ -7561,7 +7614,7 @@ group("v8_fuzzers") { ] if (v8_enable_webassembly) { - if (!is_official_build) { + if (v8_wasm_random_fuzzers) { data_deps += [ ":v8_simple_wasm_compile_all_fuzzer", ":v8_simple_wasm_compile_fuzzer", @@ -7575,7 +7628,7 @@ group("v8_fuzzers") { ":v8_simple_multi_return_fuzzer", ":v8_simple_wasm_async_fuzzer", ":v8_simple_wasm_code_fuzzer", - ":v8_simple_wasm_fuzzer", + ":v8_simple_wasm_module_fuzzer", ":v8_simple_wasm_streaming_fuzzer", ] } @@ -7748,7 +7801,7 @@ v8_executable("d8") { defines = [] if (v8_enable_vtunejit) { - deps += [ "src/third_party/vtune:v8_vtune" ] + deps += [ "third_party/vtune:v8_vtune" ] } if (current_os == "zos" && is_component_build) { deps += [ ":zoslib" ] @@ -7926,8 +7979,8 @@ if (v8_enable_webassembly) { v8_source_set("wasm_fuzzer_common") { sources = [ - "test/fuzzer/wasm-fuzzer-common.cc", - "test/fuzzer/wasm-fuzzer-common.h", + "test/fuzzer/wasm/fuzzer-common.cc", + "test/fuzzer/wasm/fuzzer-common.h", "tools/wasm/mjsunit-module-disassembler-impl.h", ] @@ -7961,66 +8014,62 @@ if (v8_enable_webassembly) { } } - v8_wasm_fuzzer("wasm_fuzzer") { - sources = [ "test/fuzzer/wasm.cc" ] + v8_wasm_fuzzer("wasm_module_fuzzer") { + sources = [ "test/fuzzer/wasm/module.cc" ] } v8_wasm_fuzzer("wasm_async_fuzzer") { - sources = [ "test/fuzzer/wasm-async.cc" ] + sources = [ "test/fuzzer/wasm/async.cc" ] } v8_wasm_fuzzer("wasm_code_fuzzer") { sources = [ "test/common/wasm/test-signatures.h", - "test/fuzzer/wasm-code.cc", + "test/fuzzer/wasm/code.cc", ] } v8_wasm_fuzzer("wasm_streaming_fuzzer") { - sources = [ "test/fuzzer/wasm-streaming.cc" ] + sources = [ "test/fuzzer/wasm/streaming.cc" ] } - # Some fuzzers depend on fuzzing functionality linked into the v8 library. - # For binary size reasons this functionality is not available for official - # builds, therefore these fuzzers do not function there and should be skipped - # instead. - if (!is_official_build) { + if (v8_wasm_random_fuzzers) { v8_wasm_fuzzer("wasm_compile_all_fuzzer") { sources = [ "test/common/wasm/test-signatures.h", - "test/fuzzer/wasm-compile-all.cc", + "test/fuzzer/wasm/compile-all.cc", ] } v8_wasm_fuzzer("wasm_compile_fuzzer") { sources = [ "test/common/wasm/test-signatures.h", - "test/fuzzer/wasm-compile.cc", + "test/fuzzer/wasm/compile.cc", ] } v8_wasm_fuzzer("wasm_compile_simd_fuzzer") { sources = [ "test/common/wasm/test-signatures.h", - "test/fuzzer/wasm-compile-simd.cc", + "test/fuzzer/wasm/compile-simd.cc", ] } v8_wasm_fuzzer("wasm_compile_wasmgc_fuzzer") { sources = [ "test/common/wasm/test-signatures.h", - "test/fuzzer/wasm-compile-wasmgc.cc", + "test/fuzzer/wasm/compile-wasmgc.cc", ] } v8_wasm_fuzzer("wasm_init_expr_fuzzer") { - sources = [ "test/fuzzer/wasm-init-expr.cc" ] + sources = [ "test/fuzzer/wasm/init-expr.cc" ] } v8_wasm_fuzzer("wasm_deopt_fuzzer") { - sources = [ "test/fuzzer/wasm-deopt.cc" ] + sources = [ "test/fuzzer/wasm/deopt.cc" ] } - } # !is_official_build + } # v8_wasm_random_fuzzers } v8_fuzzer("inspector_fuzzer") { @@ -8064,3 +8113,17 @@ if (!build_with_chromium && v8_use_perfetto) { ] } } # if (!build_with_chromium && v8_use_perfetto) + +# GN evaluates each .gn file once per toolchain, so restricting to default +# toolchain will ensure write_file() is called only once. +if (current_toolchain == default_toolchain) { + import("//build/gn_logs.gni") + + # Write debug logs to gn_logs.txt. + _lines = [ + "Generated during 'gn gen' by //BUILD.gn.", + "", + ] + build_gn_logs + + write_file("$root_build_dir/gn_logs.txt", _lines) +} diff --git a/deps/v8/COMMON_OWNERS b/deps/v8/COMMON_OWNERS index acd008e3360eff..741ba62748faa6 100644 --- a/deps/v8/COMMON_OWNERS +++ b/deps/v8/COMMON_OWNERS @@ -5,7 +5,6 @@ bikineev@chromium.org bmeurer@chromium.org cbruni@chromium.org clemensb@chromium.org -danno@chromium.org dinfuehr@chromium.org dlehmann@chromium.org dmercadier@chromium.org diff --git a/deps/v8/DEPS b/deps/v8/DEPS index f4a74a3515ceae..f935e571a84de1 100644 --- a/deps/v8/DEPS +++ b/deps/v8/DEPS @@ -60,7 +60,7 @@ vars = { 'checkout_fuchsia_no_hooks': False, # reclient CIPD package version - 'reclient_version': 're_client_version:0.163.0.d27158ab-gomaip', + 'reclient_version': 're_client_version:0.172.0.3cf60ba5-gomaip', # Fetch configuration files required for the 'use_remoteexec' gn arg 'download_remoteexec_cfg': False, @@ -76,22 +76,19 @@ vars = { 'build_with_chromium': False, # GN CIPD package version. - 'gn_version': 'git_revision:20806f79c6b4ba295274e3a589d85db41a02fdaa', + 'gn_version': 'git_revision:c97a86a72105f3328a540f5a5ab17d11989ab7dd', # ninja CIPD package version # https://chrome-infra-packages.appspot.com/p/infra/3pp/tools/ninja - 'ninja_version': 'version:2@1.12.1.chromium.4', + 'ninja_version': 'version:3@1.12.1.chromium.4', # siso CIPD package version - 'siso_version': 'git_revision:eaee19cf51478b64614e2e8daad77378238a3c6c', - - # luci-go CIPD package version. - 'luci_go': 'git_revision:1aca70b6bf116c1bd8fbf0526c9a89e9be308718', + 'siso_version': 'git_revision:f9bfa081826a4ffb6f2a96b640d009cef900e69f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Fuchsia sdk # and whatever else without interference from each other. - 'fuchsia_version': 'version:24.20240913.4.1', + 'fuchsia_version': 'version:26.20241227.3.1', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_sdk_build-tools_version @@ -124,14 +121,14 @@ vars = { # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_sdk_tools-lint_version # and whatever else without interference from each other. - 'android_sdk_cmdline-tools_version': 'B4p95sDPpm34K8Cf4JcfTM-iYSglWko9qjWgbT9dxWQC', + 'android_sdk_cmdline-tools_version': 'OCGHZKTdjXjIELVI6FMAgcDkfnd_1ybB0_MtljPtz-8C', } deps = { 'build': - Var('chromium_url') + '/chromium/src/build.git' + '@' + '4bd877395d215d47c694a8383147eb158fafbbd6', + Var('chromium_url') + '/chromium/src/build.git' + '@' + '6b60728ea92e526ed2d577ff360d5beb95f87e6a', 'buildtools': - Var('chromium_url') + '/chromium/src/buildtools.git' + '@' + 'a7a84ac61eae5a8946807265a2fd8bd812daf384', + Var('chromium_url') + '/chromium/src/buildtools.git' + '@' + 'ffa2060a71c5b739018e3dcf7d8381ebd9102e40', 'buildtools/linux64': { 'packages': [ { @@ -177,9 +174,9 @@ deps = { 'test/mozilla/data': Var('chromium_url') + '/v8/deps/third_party/mozilla-tests.git' + '@' + 'f6c578a10ea707b1a8ab0b88943fe5115ce2b9be', 'test/test262/data': - Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + 'd62fa93c8f9ce5e687c0bbaa5d2b59670ab2ff60', + Var('chromium_url') + '/external/github.com/tc39/test262.git' + '@' + 'dad2774b2eab2119cc8390ae65db4a5016de2dfe', 'third_party/android_platform': { - 'url': Var('chromium_url') + '/chromium/src/third_party/android_platform.git' + '@' + '6337c445f9963ec3914e7e0c5787941d07b46509', + 'url': Var('chromium_url') + '/chromium/src/third_party/android_platform.git' + '@' + 'e96dafd97e013cc44ee83d9d3d5d322a1356c6ca', 'condition': 'checkout_android', }, 'third_party/android_sdk/public': { @@ -231,19 +228,19 @@ deps = { 'dep_type': 'cipd', }, 'third_party/boringssl': { - 'url': Var('chromium_url') + '/chromium/src/third_party/boringssl.git' + '@' + 'c79987a83ceaf2cf911f7d21bec621ddc90c45cc', + 'url': Var('chromium_url') + '/chromium/src/third_party/boringssl.git' + '@' + 'ec7942a871259187ad4f1de041487f064f497496', 'condition': "checkout_centipede_deps", }, 'third_party/boringssl/src': { - 'url': Var('boringssl_url') + '/boringssl.git' + '@' + '58f3bc83230d2958bb9710bc910972c4f5d382dc', + 'url': Var('boringssl_url') + '/boringssl.git' + '@' + '822902749a5956bba09c7e9e451104e8a74f02c5', 'condition': "checkout_centipede_deps", }, 'third_party/catapult': { - 'url': Var('chromium_url') + '/catapult.git' + '@' + '296226a4a0067c8cffeb8831fb87526a8035f3cc', + 'url': Var('chromium_url') + '/catapult.git' + '@' + '86d6f8ee6130eb3d6a43db7ac883c7d39df1c158', 'condition': 'checkout_android', }, 'third_party/clang-format/script': - Var('chromium_url') + '/external/github.com/llvm/llvm-project/clang/tools/clang-format.git' + '@' + '3c0acd2d4e73dd911309d9e970ba09d58bf23a62', + Var('chromium_url') + '/external/github.com/llvm/llvm-project/clang/tools/clang-format.git' + '@' + '37f6e68a107df43b7d7e044fd36a13cbae3413f2', 'third_party/colorama/src': { 'url': Var('chromium_url') + '/external/colorama.git' + '@' + '3de9f013df4b470069d03d250224062e8cf15c49', 'condition': 'checkout_android', @@ -253,13 +250,13 @@ deps = { 'condition': 'checkout_android', }, 'third_party/depot_tools': - Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + '22df6f8e622dc3e8df8dc8b5d3e3503b169af78e', + Var('chromium_url') + '/chromium/tools/depot_tools.git' + '@' + '58625e82c685426d441be5b422c9ad88e4867d20', 'third_party/fp16/src': Var('chromium_url') + '/external/github.com/Maratyszcza/FP16.git' + '@' + '0a92994d729ff76a58f692d3028ca1b64b145d91', 'third_party/fast_float/src': Var('chromium_url') + '/external/github.com/fastfloat/fast_float.git' + '@' + '3e57d8dcfb0a04b5a8a26b486b54490a2e9b310f', 'third_party/fuchsia-gn-sdk': { - 'url': Var('chromium_url') + '/chromium/src/third_party/fuchsia-gn-sdk.git' + '@' + '5086f6c9e4c6d3295a76fdb5d27209f2d6449c6a', + 'url': Var('chromium_url') + '/chromium/src/third_party/fuchsia-gn-sdk.git' + '@' + '1e538ac2d0583511f489a9f940a0b8a4f2a2f3ab', 'condition': 'checkout_fuchsia', }, # Exists for rolling the Fuchsia SDK. Check out of the SDK should always @@ -275,23 +272,23 @@ deps = { 'dep_type': 'cipd', }, 'third_party/google_benchmark_chrome': { - 'url': Var('chromium_url') + '/chromium/src/third_party/google_benchmark.git' + '@' + 'f049b96d7a50ae19f2748aae7fba7bde705bcd8c', + 'url': Var('chromium_url') + '/chromium/src/third_party/google_benchmark.git' + '@' + '917e1208b42fdce63511e401067677ffee3a5c7d', }, 'third_party/google_benchmark_chrome/src': { - 'url': Var('chromium_url') + '/external/github.com/google/benchmark.git' + '@' + '344117638c8ff7e239044fd0fa7085839fc03021', + 'url': Var('chromium_url') + '/external/github.com/google/benchmark.git' + '@' + '761305ec3b33abf30e08d50eb829e19a802581cc', }, 'third_party/fuzztest': - Var('chromium_url') + '/chromium/src/third_party/fuzztest.git' + '@' + '69fe98bf87d80fdc773481ae5180c63e431a13a1', + Var('chromium_url') + '/chromium/src/third_party/fuzztest.git' + '@' + '584c66b54e7f10fb0c95514cefb560c5a64828ba', 'third_party/fuzztest/src': - Var('chromium_url') + '/external/github.com/google/fuzztest.git' + '@' + '32eb84a95951fa3a0148fb3e6a1a02f830ded136', + Var('chromium_url') + '/external/github.com/google/fuzztest.git' + '@' + '3b4a590f7fc75a77823580c4c4e19d1c7bd6da52', 'third_party/googletest/src': - Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '0953a17a4281fc26831da647ad3fcd5e21e6473b', + Var('chromium_url') + '/external/github.com/google/googletest.git' + '@' + '7d76a231b0e29caf86e68d1df858308cd53b2a66', 'third_party/highway/src': - Var('chromium_url') + '/external/github.com/google/highway.git' + '@' + '8295336dd70f1201d42c22ab5b0861de38cf8fbf', + Var('chromium_url') + '/external/github.com/google/highway.git' + '@' + '00fe003dac355b979f36157f9407c7c46448958e', 'third_party/icu': - Var('chromium_url') + '/chromium/deps/icu.git' + '@' + '9408c6fd4a39e6fef0e1c4077602e1c83b15f3fb', + Var('chromium_url') + '/chromium/deps/icu.git' + '@' + 'bbccc2f6efc1b825de5f2c903c48be685cd0cf22', 'third_party/instrumented_libs': { - 'url': Var('chromium_url') + '/chromium/third_party/instrumented_libraries.git' + '@' + 'bb6dbcf2df7a9beb34c3773ef4df161800e3aed9', + 'url': Var('chromium_url') + '/chromium/third_party/instrumented_libraries.git' + '@' + '3cc43119a29158bcde39d288a8def4b8ec49baf8', 'condition': 'checkout_instrumented_libraries', }, 'third_party/ittapi': { @@ -301,157 +298,159 @@ deps = { 'condition': "checkout_ittapi or check_v8_header_includes", }, 'third_party/jinja2': - Var('chromium_url') + '/chromium/src/third_party/jinja2.git' + '@' + '2f6f2ff5e4c1d727377f5e1b9e1903d871f41e74', + Var('chromium_url') + '/chromium/src/third_party/jinja2.git' + '@' + '5e1ee241ab04b38889f8d517f2da8b3df7cfbd9a', 'third_party/jsoncpp/source': Var('chromium_url') + '/external/github.com/open-source-parsers/jsoncpp.git'+ '@' + '42e892d96e47b1f6e29844cc705e148ec4856448', 'third_party/libc++/src': - Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxx.git' + '@' + '50ab693ecb611942ce4440d8c9ed707ee65ed5e8', + Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxx.git' + '@' + 'b4511937e4e55617e26ba3912e0dc169443e0c00', 'third_party/libc++abi/src': - Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxxabi.git' + '@' + '29b2e9a0f48688da116692cb04758393053d269c', + Var('chromium_url') + '/external/github.com/llvm/llvm-project/libcxxabi.git' + '@' + '83dfa1f5bfce32d5f75695542468e37ead8163b8', 'third_party/libunwind/src': - Var('chromium_url') + '/external/github.com/llvm/llvm-project/libunwind.git' + '@' + 'dc70138c3e68e2f946585f134e20815851e26263', + Var('chromium_url') + '/external/github.com/llvm/llvm-project/libunwind.git' + '@' + 'd1e95b102f113ded38974cf06a65fe0457b6004b', + 'third_party/llvm-libc/src': + Var('chromium_url') + '/external/github.com/llvm/llvm-project/libc.git' + '@' + 'b0de9011b9f34818da12b1448f40e212f611afa3', 'third_party/llvm-build/Release+Asserts': { 'dep_type': 'gcs', 'bucket': 'chromium-browser-clang', 'objects': [ { - 'object_name': 'Linux_x64/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '6a30f7bc7c5f0eac02a40a4ec9a1ab906ddff2adacf2c9ff065916047c79f0fb', - 'size_bytes': 52892060, - 'generation': 1726118358890940, + 'object_name': 'Linux_x64/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': 'e2cc96aef6e4c90525bb47401e3310ab2012063e7090df609b6e7ee4e0cedcf5', + 'size_bytes': 54419828, + 'generation': 1733131121091279, 'condition': 'host_os == "linux"', }, { - 'object_name': 'Linux_x64/clang-tidy-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '35e00fc8f58cf7cd30f0ad27c2fdef56b677e287030072c46c0f024d23363ae4', - 'size_bytes': 13283180, - 'generation': 1726118359291453, + 'object_name': 'Linux_x64/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '6772829b59e79aae1e6f5d68c2be1d7d9610cbd879a0c02d132eda8bab224f5c', + 'size_bytes': 13097604, + 'generation': 1733131121366758, 'condition': 'host_os == "linux" and checkout_clang_tidy', }, { - 'object_name': 'Linux_x64/clangd-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '33e2276976dfeaf387f5ea16651ea591eebe3570a12469f3884c74f8079e88bf', - 'size_bytes': 26305668, - 'generation': 1726118359489734, + 'object_name': 'Linux_x64/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '63475ffe32d4ae2432d1dd1eeb48bb69794ddc4f78ff15a913f77019d5e5b365', + 'size_bytes': 27679064, + 'generation': 1733131121482543, 'condition': 'host_os == "linux" and checkout_clangd', }, { - 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '426c6bd378848de0817a7695fee821bece9efb51e3ed1d7b750a75bc17bf00eb', - 'size_bytes': 2370472, - 'generation': 1726118360237343, + 'object_name': 'Linux_x64/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': 'b7128ce662619356de464d1c37a70342707d23ca8549c34e8e487e2d5638deb4', + 'size_bytes': 2393880, + 'generation': 1733131121884494, 'condition': 'host_os == "linux" and checkout_clang_coverage_tools', }, { - 'object_name': 'Linux_x64/llvmobjdump-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'e11c3043e76c7c79fe7905861a11c78433c6d796d049f837eda0a2ce118f0793', - 'size_bytes': 5410724, - 'generation': 1726118359908897, + 'object_name': 'Linux_x64/llvmobjdump-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '1e13a5c0085db969256e237ea93e57b373589e3342a21f353444c7978ffe5392', + 'size_bytes': 5541520, + 'generation': 1733131121622535, 'condition': '(checkout_linux or checkout_mac or checkout_android and host_os != "mac")', }, { - 'object_name': 'Mac/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'cabfc7ca792ef13d3e665c3a7811f9a76cc39094059c11606cea1724f0394bbc', - 'size_bytes': 47551968, - 'generation': 1726118361528729, + 'object_name': 'Mac/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '319ece3dde9edc65dea6fd7ef12feb26c78c6c775749f0c66ef8da0c73bf02ea', + 'size_bytes': 48880736, + 'generation': 1733131123302515, 'condition': 'host_os == "mac" and host_cpu == "x64"', }, { - 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '50a618246d7fd23645640fc50ccb0d4684c1895def378b90963a289f920ea88a', - 'size_bytes': 879508, - 'generation': 1726118377526206, + 'object_name': 'Mac/clang-mac-runtime-library-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '3a564112c5d7174c036145052e88fba6b2bcd29f5818fba8a91ce0fce4688be7', + 'size_bytes': 977584, + 'generation': 1733131140922386, 'condition': 'checkout_mac and not host_os == "mac"', }, { - 'object_name': 'Mac/clang-tidy-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '2c325505ea43a8d8a14770890d62aba9af37b397e3063e3fb622cfd51d4706f6', - 'size_bytes': 12884412, - 'generation': 1726118361811669, + 'object_name': 'Mac/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '6a53994ba0a1681097218acc01530a021be8332aa7f6779be3fa7fe04f873a62', + 'size_bytes': 12673340, + 'generation': 1733131123665839, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_tidy', }, { - 'object_name': 'Mac/clangd-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '1c1a0965cc95053dec8c649a7b3bb627ad2300ad230eed97b52ee70a8a8edd85', - 'size_bytes': 26553148, - 'generation': 1726118361978146, + 'object_name': 'Mac/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '4e24ba1dcef6b0b59176167d8ef56d338fa86c97726ab4b9ab52db0950b99653', + 'size_bytes': 26074940, + 'generation': 1733131123670297, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clangd', }, { - 'object_name': 'Mac/llvm-code-coverage-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '9259bd27c19ca9662c70ffc2b42c10afb584e7c584470d6e656e164643614b50', - 'size_bytes': 2247028, - 'generation': 1726118362377026, + 'object_name': 'Mac/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': 'e228350dad97e33bcb9b5490d2b247284374d993bc383606a0dc01e77bf58457', + 'size_bytes': 2255152, + 'generation': 1733131124117880, 'condition': 'host_os == "mac" and host_cpu == "x64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Mac_arm64/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'e87eb4caa95c98ef36c40aec5b8cd07a6c4fb8959d3c7e7d452f6ed860c8c2bf', - 'size_bytes': 41352592, - 'generation': 1726118378868177, + 'object_name': 'Mac_arm64/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': 'de28b9321ac84ebcb122e9c2dd4d743efbb3812d19a45b465c3e86de448b2e26', + 'size_bytes': 42969444, + 'generation': 1733131142308815, 'condition': 'host_os == "mac" and host_cpu == "arm64"', }, { - 'object_name': 'Mac_arm64/clang-tidy-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'fcf8f25a8461db90686d0455bd8f195750a2cdc425cb03c48debe4d3e8bb9299', - 'size_bytes': 11476316, - 'generation': 1726118379144738, + 'object_name': 'Mac_arm64/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '8c6fad4b674772df164223546af7e37d64958a5d4ccf4c6a85310b82a2f8ad3b', + 'size_bytes': 11274400, + 'generation': 1733131142586873, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_tidy', }, { - 'object_name': 'Mac_arm64/clangd-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'cca4049d3362528511ebc603db05189c9bef406a80ae4fead22b1db0a4de83e6', - 'size_bytes': 22679568, - 'generation': 1726118379283835, + 'object_name': 'Mac_arm64/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': 'fa2bd872d38a92c5b5fb93d5fd2a6820d067096856abf3b0a0c129f81cc0f51b', + 'size_bytes': 22709972, + 'generation': 1733131142721437, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clangd', }, { - 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '001e8582de4bc7c434f321b5bacd2b0b45e553f3134cb7d78e1a4f62e2b97ac6', - 'size_bytes': 1969844, - 'generation': 1726118379757221, + 'object_name': 'Mac_arm64/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': 'a74fc47a3475e24898048155638a28db4c001cf88d1b3c072616b8aa13873ad5', + 'size_bytes': 1980832, + 'generation': 1733131143158718, 'condition': 'host_os == "mac" and host_cpu == "arm64" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/clang-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'cb416511e6379b7fd3f362f637ebb8a28957d0d2ff2dc6e2d9f4484a381f2885', - 'size_bytes': 44655000, - 'generation': 1726118399720986, + 'object_name': 'Win/clang-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '1a651c9c3e64ad8c1e2417c527226ef93ebf15a096b9daba2c92208137a9ef21', + 'size_bytes': 46202484, + 'generation': 1733131163286134, 'condition': 'host_os == "win"', }, { - 'object_name': 'Win/clang-tidy-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '15af2ae61dabdfe0ddbdd48f467b996855ba51d0ef633c5c0ac3c74cdc0d8f2c', - 'size_bytes': 13114928, - 'generation': 1726118400057660, + 'object_name': 'Win/clang-tidy-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '780c66e1c39c2cce937887944d32176483fd08b2f4990d20816293be5d95d37b', + 'size_bytes': 12901244, + 'generation': 1733131163613393, 'condition': 'host_os == "win" and checkout_clang_tidy', }, { - 'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '81d66840357d83ca1a2c85ebca5259a7a86d9e99c77b37727fbaee87ccacf675', - 'size_bytes': 2897452, - 'generation': 1726118416326356, + 'object_name': 'Win/clang-win-runtime-library-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '57dab4c3dc4f70b0249643979d40249f76cfe85c56c5773bbf65efd170f5e6b3', + 'size_bytes': 2477936, + 'generation': 1733131182887719, 'condition': 'checkout_win and not host_os == "win"', }, { - 'object_name': 'Win/clangd-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '1304718c221543b16465a4b6108572fa1ba9f2b75c4e4398bdb01fb983428c10', - 'size_bytes': 25169688, - 'generation': 1726118400193324, + 'object_name': 'Win/clangd-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '462df1784a09e1d7fd7c7ff62856c8bc9ab68c4ecb59de375c1cfcaaf88cc80f', + 'size_bytes': 25482156, + 'generation': 1733131163767856, 'condition': 'host_os == "win" and checkout_clangd', }, { - 'object_name': 'Win/llvm-code-coverage-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': 'e01b8fbca72fc1cca6988e359d9a0eea8fa5ccbaff8d41deffd62970c7f4fed5', - 'size_bytes': 2382756, - 'generation': 1726118400642803, + 'object_name': 'Win/llvm-code-coverage-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '10b8ec087f9bc4bd882134a33b71cbd315b5b65e615d1ec05abcf6ddda78f687', + 'size_bytes': 2402404, + 'generation': 1733131164203293, 'condition': 'host_os == "win" and checkout_clang_coverage_tools', }, { - 'object_name': 'Win/llvmobjdump-llvmorg-20-init-3847-g69c43468-28.tar.xz', - 'sha256sum': '2f837a21d910ad748666282d0c1da15a438d9aae4fc1bc85dab7313da6dfeb7b', - 'size_bytes': 5439736, - 'generation': 1726118400404099, + 'object_name': 'Win/llvmobjdump-llvmorg-20-init-13894-g8cb44859-1.tar.xz', + 'sha256sum': '6249c10ff32bdb66d02fe44b08d50ae7e83baaea9981f158c7f3e2cccb112ab0', + 'size_bytes': 5543640, + 'generation': 1733131163939384, 'condition': 'checkout_linux or checkout_mac or checkout_android and host_os == "win"', }, ], @@ -459,7 +458,7 @@ deps = { 'third_party/logdog/logdog': Var('chromium_url') + '/infra/luci/luci-py/client/libs/logdog' + '@' + '0b2078a90f7a638d576b3a7c407d136f2fb62399', 'third_party/markupsafe': - Var('chromium_url') + '/chromium/src/third_party/markupsafe.git' + '@' + '6638e9b0a79afc2ff7edd9e84b518fe7d5d5fea9', + Var('chromium_url') + '/chromium/src/third_party/markupsafe.git' + '@' + '9f8efc8637f847ab1ba984212598e6fb9cf1b3d4', 'third_party/ninja': { 'packages': [ { @@ -471,9 +470,9 @@ deps = { 'condition': 'host_cpu != "s390" and host_os != "zos" and host_cpu != "ppc"' }, 'third_party/perfetto': - Var('android_url') + '/platform/external/perfetto.git' + '@' + '6fc824d618d2f06b5d9cd8655ba0419b6b3b366e', + Var('android_url') + '/platform/external/perfetto.git' + '@' + '24764a1d9c2fce1e9816ffae691f00353ade330d', 'third_party/protobuf': - Var('chromium_url') + '/chromium/src/third_party/protobuf.git' + '@' + '37bbf271c62d6c01c58c66505b17c7dcf086371a', + Var('chromium_url') + '/chromium/src/third_party/protobuf.git' + '@' + '7938ad35f63a558bf94755cd33d40e79442a5930', 'third_party/re2/src': Var('chromium_url') + '/external/github.com/google/re2.git' + '@' + '6dcd83d60f7944926bfd308cc13979fc53dd69ca', 'third_party/requests': { @@ -491,27 +490,13 @@ deps = { 'condition': 'not build_with_chromium and host_cpu != "s390" and host_os != "zos" and host_cpu != "ppc"', }, 'third_party/zlib': - Var('chromium_url') + '/chromium/src/third_party/zlib.git'+ '@' + 'fa9f14143c7938e6a1d18443900efee7a1e5e669', + Var('chromium_url') + '/chromium/src/third_party/zlib.git'+ '@' + '82a5fecf8aae8f288267cfdb2d29c9ebf7b37e59', 'tools/clang': - Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + 'e47c184ec52d50c7aa2a99cd3bd26ebcafaa94b9', - 'tools/luci-go': { - 'packages': [ - { - 'package': 'infra/tools/luci/isolate/${{platform}}', - 'version': Var('luci_go'), - }, - { - 'package': 'infra/tools/luci/swarming/${{platform}}', - 'version': Var('luci_go'), - }, - ], - 'condition': 'host_cpu != "s390" and host_os != "zos" and host_os != "aix"', - 'dep_type': 'cipd', - }, + Var('chromium_url') + '/chromium/src/tools/clang.git' + '@' + '306a47aa4c73ded365fb503f4a00d12e47cce204', 'tools/protoc_wrapper': Var('chromium_url') + '/chromium/src/tools/protoc_wrapper.git' + '@' + 'dbcbea90c20ae1ece442d8ef64e61c7b10e2b013', 'third_party/abseil-cpp': { - 'url': Var('chromium_url') + '/chromium/src/third_party/abseil-cpp.git' + '@' + '1f7e21e34c3807a8841c9562cfc8b3213eb50bfc', + 'url': Var('chromium_url') + '/chromium/src/third_party/abseil-cpp.git' + '@' + '72093794ac42be8105817ae0b0569fb411a6ca9b', 'condition': 'not build_with_chromium', }, 'third_party/zoslib': { @@ -524,12 +509,14 @@ include_rules = [ # Everybody can use some things. '+include', '+unicode', - '+third_party/fdlibm', - '+third_party/ittapi/include', '+third_party/fast_float/src/include', + '+third_party/fdlibm', '+third_party/fp16/src/include', - '+third_party/v8/codegen', '+third_party/fuzztest', + '+third_party/ittapi/include', + '+third_party/v8/codegen', + '+third_party/vtune', + '+hwy/highway.h', # Abseil features are allow-listed. Please use your best judgement when adding # to this set -- if in doubt, email v8-dev@. For general guidance, refer to # the Chromium guidelines (though note that some requirements in V8 may be @@ -538,9 +525,8 @@ include_rules = [ '+absl/container/flat_hash_map.h', '+absl/container/flat_hash_set.h', '+absl/container/btree_map.h', - '+absl/types/optional.h', - '+absl/types/variant.h', '+absl/status', + '+absl/synchronization/mutex.h', # Some abseil features are explicitly banned. '-absl/types/any.h', # Requires RTTI. '-absl/types/flags', # Requires RTTI. @@ -755,16 +741,6 @@ hooks = [ '--quiet', ], }, - { - # Clean up build dirs for crbug.com/1337238. - # After a libc++ roll and revert, .ninja_deps would get into a state - # that breaks Ninja on Windows. - # TODO(crbug.com/1337238): Remove in a month or so. - 'name': 'del_ninja_deps_cache', - 'pattern': '.', - 'condition': 'host_os == "win"', - 'action': ['python3', 'build/del_ninja_deps_cache.py'], - }, # Configure remote exec cfg files { 'name': 'download_and_configure_reclient_cfgs', diff --git a/deps/v8/DIR_METADATA b/deps/v8/DIR_METADATA index 72c04a4d913880..bd04d34c15a77c 100644 --- a/deps/v8/DIR_METADATA +++ b/deps/v8/DIR_METADATA @@ -9,4 +9,7 @@ monorail { component: "Blink>JavaScript" } -team_email: "v8-dev@googlegroups.com" \ No newline at end of file +team_email: "v8-dev@googlegroups.com" +buganizer_public: { + component_id: 1456824 +} diff --git a/deps/v8/ENG_REVIEW_OWNERS b/deps/v8/ENG_REVIEW_OWNERS index 27a979ebaf9d9e..d601572c0b16d3 100644 --- a/deps/v8/ENG_REVIEW_OWNERS +++ b/deps/v8/ENG_REVIEW_OWNERS @@ -3,9 +3,8 @@ # directories. adamk@chromium.org -danno@chromium.org gdeepti@chromium.org -hpayer@chromium.org +hpayer@chromium.org #{LAST_RESORT_SUGGESTION} leszeks@chromium.org mlippautz@chromium.org syg@chromium.org diff --git a/deps/v8/LICENSE b/deps/v8/LICENSE index f665c480d2c169..9898b2d4833bfe 100644 --- a/deps/v8/LICENSE +++ b/deps/v8/LICENSE @@ -19,7 +19,7 @@ are: This code is copyrighted by Sun Microsystems Inc. and released under a 3-clause BSD license. - - Valgrind client API header, located at src/third_party/valgrind/valgrind.h + - Valgrind client API header, located at third_party/valgrind/valgrind.h This is released under the BSD license. - The Wasm C/C++ API headers, located at third_party/wasm-api/wasm.{h,hh} @@ -30,7 +30,7 @@ are: These libraries have their own licenses; we recommend you read them, as their terms may differ from the terms below. -Further license information can be found in LICENSE files located in +Further license information can be found in LICENSE files located in sub-directories. Copyright 2014, the V8 project authors. All rights reserved. diff --git a/deps/v8/WATCHLISTS b/deps/v8/WATCHLISTS index efde42b36b00c1..0e9e78b120c9eb 100644 --- a/deps/v8/WATCHLISTS +++ b/deps/v8/WATCHLISTS @@ -51,7 +51,7 @@ 'baseline': { 'filepath': 'src/baseline/', }, - 'feature_shipping_status': { + 'flags': { 'filepath': 'src/flags/flag-definitions.h', }, 'heap_changes': { @@ -128,8 +128,8 @@ 'leszeks+watch@chromium.org', 'verwaest+watch@chromium.org', ], - 'feature_shipping_status': [ - 'saelo+watch@chromium.org', + 'flags': [ + 'v8-flag-updates@chromium.org', ], 'heap_changes': [ 'hpayer@chromium.org', diff --git a/deps/v8/WORKSPACE b/deps/v8/WORKSPACE index 8692e456b9a87f..ea4f551b7f082a 100644 --- a/deps/v8/WORKSPACE +++ b/deps/v8/WORKSPACE @@ -59,6 +59,16 @@ bind( actual = "@com_google_absl//absl/container:flat_hash_set" ) +local_repository( + name = "highway", + path = "third_party/highway/src", +) + +bind( + name = "hwy", + actual = "@highway//:hwy" +) + new_local_repository( name = "com_googlesource_chromium_icu", build_file = ":bazel/BUILD.icu", diff --git a/deps/v8/bazel/defs.bzl b/deps/v8/bazel/defs.bzl index ba1716d9ad466a..16f2a61faa39bf 100644 --- a/deps/v8/bazel/defs.bzl +++ b/deps/v8/bazel/defs.bzl @@ -432,7 +432,7 @@ def _v8_target_cpu_transition_impl(settings, "armeabi-v7a": "arm32", "s390x": "s390x", "riscv64": "riscv64", - "ppc": "ppc64le", + "ppc64": "ppc64le", } v8_target_cpu = mapping[settings["//command_line_option:cpu"]] return {"@v8//bazel/config:v8_target_cpu": v8_target_cpu} @@ -535,6 +535,7 @@ def build_config_content(cpu, icu): ("arch", arch), ("asan", "false"), ("atomic_object_field_writes", "false"), + ("cet_shadow_stack", "false"), ("cfi", "false"), ("clang_coverage", "false"), ("clang", "true"), @@ -588,6 +589,7 @@ def build_config_content(cpu, icu): ("verify_csa", "false"), ("verify_heap", "false"), ("verify_predictable", "false"), + ("wasm_random_fuzzers", "false"), ("write_barriers", "false"), ]) diff --git a/deps/v8/gni/v8.gni b/deps/v8/gni/v8.gni index 09c3e7adec40a9..4efb4d6d8651ee 100644 --- a/deps/v8/gni/v8.gni +++ b/deps/v8/gni/v8.gni @@ -128,6 +128,12 @@ declare_args() { cppgc_is_standalone = false + # Enables certain checks on API level functionality. + cppgc_enable_api_checks = is_debug || dcheck_always_on + + # Enable slow checks on API level functionality. + cppgc_enable_slow_api_checks = false + # Enable object names in cppgc for profiling purposes. cppgc_enable_object_names = is_chrome_for_testing @@ -143,10 +149,6 @@ declare_args() { # Enable pointer compression in cppgc. cppgc_enable_pointer_compression = false - # Enable 2gb cage for fast compression/decompression. Currently disabled - # due to an increased number of OOMs. - cppgc_enable_2gb_cage = false - # Enable support for larger cages, up to 16GB. cppgc_enable_larger_cage = true @@ -179,6 +181,9 @@ declare_args() { # (experimental). # TODO(sroettger): enable by default once we have bot support for testing. v8_enable_memory_sealing = false + + # Sets -DV8_ENABLE_ETW_STACK_WALKING. Enables ETW Stack Walking + v8_enable_etw_stack_walking = is_win } if (v8_use_external_startup_data == "") { @@ -218,7 +223,8 @@ assert(!(v8_enable_webassembly && v8_enable_lite_mode), if (v8_enable_pointer_compression == "") { v8_enable_pointer_compression = - v8_current_cpu == "arm64" || v8_current_cpu == "x64" + v8_current_cpu == "arm64" || v8_current_cpu == "x64" || + v8_current_cpu == "loong64" } # The Wasm interpreter is currently supported only on arm64 and x64, on diff --git a/deps/v8/include/DIR_METADATA b/deps/v8/include/DIR_METADATA index a27ea1b53a3f53..d65ff2a39e5763 100644 --- a/deps/v8/include/DIR_METADATA +++ b/deps/v8/include/DIR_METADATA @@ -8,4 +8,7 @@ monorail { component: "Blink>JavaScript>API" -} \ No newline at end of file +} +buganizer_public: { + component_id: 1456124 +} diff --git a/deps/v8/include/cppgc/internal/api-constants.h b/deps/v8/include/cppgc/internal/api-constants.h index 8a0bb082fb9b20..6eb722bbe7e2b7 100644 --- a/deps/v8/include/cppgc/internal/api-constants.h +++ b/deps/v8/include/cppgc/internal/api-constants.h @@ -40,7 +40,7 @@ constexpr size_t kGuardPageSize = 0; #elif defined(V8_HOST_ARCH_LOONG64) || defined(V8_HOST_ARCH_MIPS64) constexpr size_t kGuardPageSize = 0; #else -constexpr size_t kGuardPageSize = 4096; +constexpr size_t kGuardPageSize = 0; #endif static constexpr size_t kLargeObjectSizeThreshold = kPageSize / 2; @@ -54,12 +54,6 @@ constexpr unsigned kPointerCompressionShift = 1; #endif // !defined(CPPGC_POINTER_COMPRESSION) #if defined(CPPGC_CAGED_HEAP) -#if defined(CPPGC_2GB_CAGE) -constexpr size_t kCagedHeapDefaultReservationSize = - static_cast(2) * kGB; -constexpr size_t kCagedHeapMaxReservationSize = - kCagedHeapDefaultReservationSize; -#else // !defined(CPPGC_2GB_CAGE) constexpr size_t kCagedHeapDefaultReservationSize = static_cast(4) * kGB; #if defined(CPPGC_POINTER_COMPRESSION) @@ -69,7 +63,6 @@ constexpr size_t kCagedHeapMaxReservationSize = constexpr size_t kCagedHeapMaxReservationSize = kCagedHeapDefaultReservationSize; #endif // !defined(CPPGC_POINTER_COMPRESSION) -#endif // !defined(CPPGC_2GB_CAGE) constexpr size_t kCagedHeapReservationAlignment = kCagedHeapMaxReservationSize; #endif // defined(CPPGC_CAGED_HEAP) diff --git a/deps/v8/include/cppgc/internal/caged-heap-local-data.h b/deps/v8/include/cppgc/internal/caged-heap-local-data.h index 1eb87dfb538955..ad717d74426aae 100644 --- a/deps/v8/include/cppgc/internal/caged-heap-local-data.h +++ b/deps/v8/include/cppgc/internal/caged-heap-local-data.h @@ -77,11 +77,7 @@ class V8_EXPORT AgeTable final { __builtin_ctz(static_cast(kCardSizeInBytes)); #else //! V8_HAS_BUILTIN_CTZ // Hardcode and check with assert. -#if defined(CPPGC_2GB_CAGE) - 11; -#else // !defined(CPPGC_2GB_CAGE) 12; -#endif // !defined(CPPGC_2GB_CAGE) #endif // !V8_HAS_BUILTIN_CTZ static_assert((1 << kGranularityBits) == kCardSizeInBytes); const size_t entry = offset >> kGranularityBits; diff --git a/deps/v8/include/cppgc/internal/caged-heap.h b/deps/v8/include/cppgc/internal/caged-heap.h index 0c987a95447cc6..46fb529f633928 100644 --- a/deps/v8/include/cppgc/internal/caged-heap.h +++ b/deps/v8/include/cppgc/internal/caged-heap.h @@ -32,16 +32,12 @@ class V8_EXPORT CagedHeapBase { } V8_INLINE static bool AreWithinCage(const void* addr1, const void* addr2) { -#if defined(CPPGC_2GB_CAGE) - static constexpr size_t kHeapBaseShift = sizeof(uint32_t) * CHAR_BIT - 1; -#else //! defined(CPPGC_2GB_CAGE) #if defined(CPPGC_POINTER_COMPRESSION) static constexpr size_t kHeapBaseShift = 31 + api_constants::kPointerCompressionShift; #else // !defined(CPPGC_POINTER_COMPRESSION) static constexpr size_t kHeapBaseShift = sizeof(uint32_t) * CHAR_BIT; #endif // !defined(CPPGC_POINTER_COMPRESSION) -#endif //! defined(CPPGC_2GB_CAGE) static_assert((static_cast(1) << kHeapBaseShift) == api_constants::kCagedHeapMaxReservationSize); CPPGC_DCHECK(g_heap_base_); diff --git a/deps/v8/include/cppgc/internal/logging.h b/deps/v8/include/cppgc/internal/logging.h index 3a279fe0bef839..2129e85f2406e0 100644 --- a/deps/v8/include/cppgc/internal/logging.h +++ b/deps/v8/include/cppgc/internal/logging.h @@ -20,18 +20,18 @@ FatalImpl(const char*, const SourceLocation& = SourceLocation::Current()); template struct EatParams {}; -#if defined(DEBUG) +#ifdef CPPGC_ENABLE_API_CHECKS #define CPPGC_DCHECK_MSG(condition, message) \ do { \ if (V8_UNLIKELY(!(condition))) { \ ::cppgc::internal::DCheckImpl(message); \ } \ } while (false) -#else // !defined(DEBUG) +#else // !CPPGC_ENABLE_API_CHECKS #define CPPGC_DCHECK_MSG(condition, message) \ (static_cast(::cppgc::internal::EatParams(condition), message)>{})) -#endif // !defined(DEBUG) +#endif // !CPPGC_ENABLE_API_CHECKS #define CPPGC_DCHECK(condition) CPPGC_DCHECK_MSG(condition, #condition) diff --git a/deps/v8/include/cppgc/internal/member-storage.h b/deps/v8/include/cppgc/internal/member-storage.h index 2b5bfec4ed5cc1..2f55fa298ce527 100644 --- a/deps/v8/include/cppgc/internal/member-storage.h +++ b/deps/v8/include/cppgc/internal/member-storage.h @@ -71,11 +71,17 @@ class V8_EXPORT CageBaseGlobal final { class V8_TRIVIAL_ABI CompressedPointer final { public: + struct AtomicInitializerTag {}; + using IntegralType = uint32_t; static constexpr auto kWriteBarrierSlotType = WriteBarrierSlotType::kCompressed; V8_INLINE CompressedPointer() : value_(0u) {} + V8_INLINE explicit CompressedPointer(const void* value, + AtomicInitializerTag) { + StoreAtomic(value); + } V8_INLINE explicit CompressedPointer(const void* ptr) : value_(Compress(ptr)) {} V8_INLINE explicit CompressedPointer(std::nullptr_t) : value_(0u) {} @@ -139,17 +145,12 @@ class V8_TRIVIAL_ABI CompressedPointer final { CPPGC_DCHECK( (reinterpret_cast(ptr) & kPointerCompressionShiftMask) == 0); -#if defined(CPPGC_2GB_CAGE) - // Truncate the pointer. - auto compressed = - static_cast(reinterpret_cast(ptr)); -#else // !defined(CPPGC_2GB_CAGE) const auto uptr = reinterpret_cast(ptr); // Shift the pointer and truncate. auto compressed = static_cast( uptr >> api_constants::kPointerCompressionShift); -#endif // !defined(CPPGC_2GB_CAGE) - // Normal compressed pointers must have the MSB set. + // Normal compressed pointers must have the MSB set. This is guaranteed by + // the cage alignment. CPPGC_DCHECK((!compressed || compressed == kCompressedSentinel) || (compressed & (1 << 31))); return compressed; @@ -164,28 +165,22 @@ class V8_TRIVIAL_ABI CompressedPointer final { static V8_INLINE void* Decompress(IntegralType ptr, uintptr_t base) { CPPGC_DCHECK(CageBaseGlobal::IsSet()); CPPGC_DCHECK(base == CageBaseGlobal::Get()); - // Treat compressed pointer as signed and cast it to uint64_t, which will - // sign-extend it. -#if defined(CPPGC_2GB_CAGE) - const uint64_t mask = static_cast(static_cast(ptr)); -#else // !defined(CPPGC_2GB_CAGE) - // Then, shift the result. It's important to shift the unsigned - // value, as otherwise it would result in undefined behavior. + // Sign-extend compressed pointer to full width. This ensure that normal + // pointers have only 1s in the base part of the address. It's also + // important to shift the unsigned value, as otherwise it would result in + // undefined behavior. const uint64_t mask = static_cast(static_cast(ptr)) << api_constants::kPointerCompressionShift; -#endif // !defined(CPPGC_2GB_CAGE) + // Set the base part of the address for normal compressed pointers. Note + // that nullptr and the sentinel value do not have 1s in the base part and + // remain as-is in this operation. return reinterpret_cast(mask & base); } private: -#if defined(CPPGC_2GB_CAGE) - static constexpr IntegralType kCompressedSentinel = - SentinelPointer::kSentinelValue; -#else // !defined(CPPGC_2GB_CAGE) static constexpr IntegralType kCompressedSentinel = SentinelPointer::kSentinelValue >> api_constants::kPointerCompressionShift; -#endif // !defined(CPPGC_2GB_CAGE) // All constructors initialize `value_`. Do not add a default value here as it // results in a non-atomic write on some builds, even when the atomic version // of the constructor is used. @@ -196,11 +191,16 @@ class V8_TRIVIAL_ABI CompressedPointer final { class V8_TRIVIAL_ABI RawPointer final { public: + struct AtomicInitializerTag {}; + using IntegralType = uintptr_t; static constexpr auto kWriteBarrierSlotType = WriteBarrierSlotType::kUncompressed; V8_INLINE RawPointer() : ptr_(nullptr) {} + V8_INLINE explicit RawPointer(const void* ptr, AtomicInitializerTag) { + StoreAtomic(ptr); + } V8_INLINE explicit RawPointer(const void* ptr) : ptr_(ptr) {} V8_INLINE const void* Load() const { return ptr_; } diff --git a/deps/v8/include/cppgc/internal/persistent-node.h b/deps/v8/include/cppgc/internal/persistent-node.h index d22692a768c49f..413ddd9189b049 100644 --- a/deps/v8/include/cppgc/internal/persistent-node.h +++ b/deps/v8/include/cppgc/internal/persistent-node.h @@ -18,6 +18,7 @@ namespace internal { class CrossThreadPersistentRegion; class FatalOutOfMemoryHandler; +class HeapBase; class RootVisitor; // PersistentNode represents a variant of two states: @@ -133,10 +134,14 @@ class V8_EXPORT PersistentRegionBase { }; // Variant of PersistentRegionBase that checks whether the allocation and -// freeing happens only on the thread that created the region. +// freeing happens only on the thread that created the heap. class V8_EXPORT PersistentRegion final : public PersistentRegionBase { public: - explicit PersistentRegion(const FatalOutOfMemoryHandler&); + V8_INLINE PersistentRegion(const HeapBase& heap, + const FatalOutOfMemoryHandler& oom_handler) + : PersistentRegionBase(oom_handler), heap_(heap) { + CPPGC_DCHECK(IsCreationThread()); + } // Clears Persistent fields to avoid stale pointers after heap teardown. ~PersistentRegion() = default; @@ -161,7 +166,7 @@ class V8_EXPORT PersistentRegion final : public PersistentRegionBase { private: bool IsCreationThread(); - int creation_thread_id_; + const HeapBase& heap_; }; // CrossThreadPersistent uses PersistentRegionBase but protects it using this diff --git a/deps/v8/include/cppgc/internal/pointer-policies.h b/deps/v8/include/cppgc/internal/pointer-policies.h index 06fa884f49f34b..bba484237da466 100644 --- a/deps/v8/include/cppgc/internal/pointer-policies.h +++ b/deps/v8/include/cppgc/internal/pointer-policies.h @@ -28,13 +28,19 @@ class WeakMemberTag; class UntracedMemberTag; struct DijkstraWriteBarrierPolicy { - V8_INLINE static void InitializingBarrier(const void*, const void*) { // Since in initializing writes the source object is always white, having no // barrier doesn't break the tri-color invariant. - } + V8_INLINE static void InitializingBarrier(const void*, const void*) {} + V8_INLINE static void InitializingBarrier(const void*, RawPointer storage) { + } +#if defined(CPPGC_POINTER_COMPRESSION) + V8_INLINE static void InitializingBarrier(const void*, + CompressedPointer storage) {} +#endif - template - V8_INLINE static void AssigningBarrier(const void* slot, const void* value) { + template + V8_INLINE static void AssigningBarrier(const void* slot, + const void* value) { #ifdef CPPGC_SLIM_WRITE_BARRIER if (V8_UNLIKELY(WriteBarrier::IsEnabled())) WriteBarrier::CombinedWriteBarrierSlow(slot); @@ -44,7 +50,7 @@ struct DijkstraWriteBarrierPolicy { WriteBarrier::GetWriteBarrierType(slot, value, params); WriteBarrier(type, params, slot, value); #endif // !CPPGC_SLIM_WRITE_BARRIER - } + } template V8_INLINE static void AssigningBarrier(const void* slot, RawPointer storage) { @@ -101,6 +107,11 @@ struct DijkstraWriteBarrierPolicy { struct NoWriteBarrierPolicy { V8_INLINE static void InitializingBarrier(const void*, const void*) {} + V8_INLINE static void InitializingBarrier(const void*, RawPointer storage) {} +#if defined(CPPGC_POINTER_COMPRESSION) + V8_INLINE static void InitializingBarrier(const void*, + CompressedPointer storage) {} +#endif template V8_INLINE static void AssigningBarrier(const void*, const void*) {} template @@ -119,10 +130,29 @@ template class V8_EXPORT SameThreadEnabledCheckingPolicy : private SameThreadEnabledCheckingPolicyBase { protected: + template + V8_INLINE void CheckPointer(RawPointer raw_pointer) { + if (raw_pointer.IsCleared() || raw_pointer.IsSentinel()) { + return; + } + CheckPointersImplTrampoline::Call( + this, static_cast(raw_pointer.Load())); + } +#if defined(CPPGC_POINTER_COMPRESSION) + template + V8_INLINE void CheckPointer(CompressedPointer compressed_pointer) { + if (compressed_pointer.IsCleared() || compressed_pointer.IsSentinel()) { + return; + } + CheckPointersImplTrampoline::Call( + this, static_cast(compressed_pointer.Load())); + } +#endif template void CheckPointer(const T* ptr) { - if (!ptr || (kSentinelPointer == ptr)) return; - + if (!ptr || (kSentinelPointer == ptr)) { + return; + } CheckPointersImplTrampoline::Call(this, ptr); } @@ -145,20 +175,27 @@ class V8_EXPORT SameThreadEnabledCheckingPolicy class DisabledCheckingPolicy { protected: - V8_INLINE void CheckPointer(const void*) {} + template + V8_INLINE void CheckPointer(T*) {} + template + V8_INLINE void CheckPointer(RawPointer) {} +#if defined(CPPGC_POINTER_COMPRESSION) + template + V8_INLINE void CheckPointer(CompressedPointer) {} +#endif }; -#ifdef DEBUG +#ifdef CPPGC_ENABLE_SLOW_API_CHECKS // Off heap members are not connected to object graph and thus cannot ressurect // dead objects. using DefaultMemberCheckingPolicy = SameThreadEnabledCheckingPolicy; using DefaultPersistentCheckingPolicy = SameThreadEnabledCheckingPolicy; -#else // !DEBUG +#else // !CPPGC_ENABLE_SLOW_API_CHECKS using DefaultMemberCheckingPolicy = DisabledCheckingPolicy; using DefaultPersistentCheckingPolicy = DisabledCheckingPolicy; -#endif // !DEBUG +#endif // !CPPGC_ENABLE_SLOW_API_CHECKS // For CT(W)P neither marking information (for value), nor objectstart bitmap // (for slot) are guaranteed to be present because there's no synchronization // between heaps after marking. diff --git a/deps/v8/include/cppgc/member.h b/deps/v8/include/cppgc/member.h index 457f163bc78eab..6a570bd5535fdf 100644 --- a/deps/v8/include/cppgc/member.h +++ b/deps/v8/include/cppgc/member.h @@ -38,9 +38,8 @@ class V8_TRIVIAL_ABI MemberBase { V8_INLINE MemberBase() = default; V8_INLINE explicit MemberBase(const void* value) : raw_(value) {} - V8_INLINE MemberBase(const void* value, AtomicInitializerTag) { - SetRawAtomic(value); - } + V8_INLINE MemberBase(const void* value, AtomicInitializerTag) + : raw_(value, typename RawStorage::AtomicInitializerTag{}) {} V8_INLINE explicit MemberBase(RawStorage raw) : raw_(raw) {} V8_INLINE explicit MemberBase(std::nullptr_t) : raw_(nullptr) {} @@ -87,7 +86,7 @@ class V8_TRIVIAL_ABI BasicMember final : private MemberBase, V8_INLINE BasicMember(SentinelPointer s) : Base(s) {} // NOLINT V8_INLINE BasicMember(T* raw) : Base(raw) { // NOLINT InitializingWriteBarrier(raw); - this->CheckPointer(Get()); + CheckPointer(raw); } V8_INLINE BasicMember(T& raw) // NOLINT : BasicMember(&raw) {} @@ -103,7 +102,7 @@ class V8_TRIVIAL_ABI BasicMember final : private MemberBase, V8_INLINE BasicMember(T* raw, AtomicInitializerTag atomic) : Base(raw, atomic) { InitializingWriteBarrier(raw); - this->CheckPointer(Get()); + CheckPointer(raw); } V8_INLINE BasicMember(T& raw, AtomicInitializerTag atomic) : BasicMember(&raw, atomic) {} @@ -231,7 +230,7 @@ class V8_TRIVIAL_ABI BasicMember final : private MemberBase, V8_INLINE BasicMember& operator=(T* other) { Base::SetRawAtomic(other); AssigningWriteBarrier(other); - this->CheckPointer(Get()); + CheckPointer(other); return *this; } @@ -290,14 +289,14 @@ class V8_TRIVIAL_ABI BasicMember final : private MemberBase, private: V8_INLINE explicit BasicMember(RawStorage raw) : Base(raw) { - InitializingWriteBarrier(Get()); - this->CheckPointer(Get()); + InitializingWriteBarrier(); + CheckPointer(); } V8_INLINE BasicMember& operator=(RawStorage other) { Base::SetRawStorageAtomic(other); AssigningWriteBarrier(); - this->CheckPointer(Get()); + CheckPointer(); return *this; } @@ -308,6 +307,10 @@ class V8_TRIVIAL_ABI BasicMember final : private MemberBase, V8_INLINE void InitializingWriteBarrier(T* value) const { WriteBarrierPolicy::InitializingBarrier(Base::GetRawSlot(), value); } + V8_INLINE void InitializingWriteBarrier() const { + WriteBarrierPolicy::InitializingBarrier(Base::GetRawSlot(), + Base::GetRawStorage()); + } V8_INLINE void AssigningWriteBarrier(T* value) const { WriteBarrierPolicy::template AssigningBarrier< StorageType::kWriteBarrierSlotType>(Base::GetRawSlot(), value); @@ -317,6 +320,12 @@ class V8_TRIVIAL_ABI BasicMember final : private MemberBase, StorageType::kWriteBarrierSlotType>(Base::GetRawSlot(), Base::GetRawStorage()); } + V8_INLINE void CheckPointer(T* value) { + CheckingPolicy::template CheckPointer(value); + } + V8_INLINE void CheckPointer() { + CheckingPolicy::template CheckPointer(Base::GetRawStorage()); + } V8_INLINE void ClearFromGC() const { Base::ClearFromGC(); } diff --git a/deps/v8/include/cppgc/name-provider.h b/deps/v8/include/cppgc/name-provider.h index ec512441472d47..849176fde0fc45 100644 --- a/deps/v8/include/cppgc/name-provider.h +++ b/deps/v8/include/cppgc/name-provider.h @@ -55,6 +55,9 @@ class V8_EXPORT NameProvider { * Specifies a name for the garbage-collected object. Such names will never * be hidden, as they are explicitly specified by the user of this API. * + * Implementations of this function must not allocate garbage-collected + * objects or otherwise modify the cppgc heap. + * * V8 may call this function while generating a heap snapshot or at other * times. If V8 is currently generating a heap snapshot (according to * HeapProfiler::IsTakingSnapshot), then the returned string must stay alive diff --git a/deps/v8/include/cppgc/type-traits.h b/deps/v8/include/cppgc/type-traits.h index c595deca7f2520..1685c31dfda5ec 100644 --- a/deps/v8/include/cppgc/type-traits.h +++ b/deps/v8/include/cppgc/type-traits.h @@ -9,6 +9,7 @@ // against Oilpan types without including any other parts. #include #include +#include namespace cppgc { diff --git a/deps/v8/include/js_protocol.pdl b/deps/v8/include/js_protocol.pdl index 8dad9c98de9f6e..52f3b02ceb80b5 100644 --- a/deps/v8/include/js_protocol.pdl +++ b/deps/v8/include/js_protocol.pdl @@ -369,6 +369,14 @@ domain Debugger # call stacks (default). integer maxDepth + # Replace previous blackbox execution contexts with passed ones. Forces backend to skip + # stepping/pausing in scripts in these execution contexts. VM will try to leave blackboxed script by + # performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + experimental command setBlackboxExecutionContexts + parameters + # Array of execution context unique ids for the debugger to ignore. + array of string uniqueIds + # Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in # scripts with url matching one of the patterns. VM will try to leave blackboxed script by # performing 'step in' several times, finally resorting to 'step out' if unsuccessful. @@ -376,6 +384,8 @@ domain Debugger parameters # Array of regexps that will be used to check script url for blackbox state. array of string patterns + # If true, also ignore scripts with no source url. + optional boolean skipAnonymous # Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted # scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. @@ -606,7 +616,6 @@ domain Debugger properties # Type of the debug symbols. enum type - None SourceMap EmbeddedDWARF ExternalDWARF @@ -632,6 +641,8 @@ domain Debugger Runtime.ExecutionContextId executionContextId # Content hash of the script, SHA-256. string hash + # For Wasm modules, the content of the `build_id` custom section. + string buildId # Embedder-specific auxiliary data likely matching {isDefault: boolean, type: 'default'|'isolated'|'worker', frameId: string} optional object executionContextAuxData # URL of source map associated with script (if any). @@ -671,6 +682,8 @@ domain Debugger Runtime.ExecutionContextId executionContextId # Content hash of the script, SHA-256. string hash + # For Wasm modules, the content of the `build_id` custom section. + string buildId # Embedder-specific auxiliary data likely matching {isDefault: boolean, type: 'default'|'isolated'|'worker', frameId: string} optional object executionContextAuxData # True, if this script is generated as a result of the live edit operation. @@ -689,8 +702,8 @@ domain Debugger experimental optional integer codeOffset # The language of the script. experimental optional Debugger.ScriptLanguage scriptLanguage - # If the scriptLanguage is WebASsembly, the source of debug symbols for the module. - experimental optional Debugger.DebugSymbols debugSymbols + # If the scriptLanguage is WebAssembly, the source of debug symbols for the module. + experimental optional array of Debugger.DebugSymbols debugSymbols # The name the embedder supplied for this script. experimental optional string embedderName diff --git a/deps/v8/include/v8-array-buffer.h b/deps/v8/include/v8-array-buffer.h index 0a3d8170f68214..511ef3901ba29f 100644 --- a/deps/v8/include/v8-array-buffer.h +++ b/deps/v8/include/v8-array-buffer.h @@ -10,6 +10,7 @@ #include #include "v8-local-handle.h" // NOLINT(build/include_directory) +#include "v8-memory-span.h" // NOLINT(build/include_directory) #include "v8-object.h" // NOLINT(build/include_directory) #include "v8config.h" // NOLINT(build/include_directory) @@ -217,6 +218,18 @@ class V8_EXPORT ArrayBuffer : public Object { */ size_t MaxByteLength() const; + /** + * Attempt to create a new ArrayBuffer. Allocate |byte_length| bytes. + * Allocated memory will be owned by a created ArrayBuffer and + * will be deallocated when it is garbage-collected, + * unless the object is externalized. If allocation fails, the Maybe + * returned will be empty. + */ + static MaybeLocal MaybeNew( + Isolate* isolate, size_t byte_length, + BackingStoreInitializationMode initialization_mode = + BackingStoreInitializationMode::kZeroInitialized); + /** * Create a new ArrayBuffer. Allocate |byte_length| bytes, which are either * zero-initialized or uninitialized. Allocated memory will be owned by a @@ -394,6 +407,16 @@ class V8_EXPORT ArrayBufferView : public Object { */ size_t CopyContents(void* dest, size_t byte_length); + /** + * Returns the contents of the ArrayBufferView's buffer as a MemorySpan. If + * the contents are on the V8 heap, they get copied into `storage`. Otherwise + * a view into the off-heap backing store is returned. The provided storage + * should be at least as large as the maximum on-heap size of a TypedArray, + * was defined in gn with `typed_array_max_size_in_heap`. The default value is + * 64 bytes. + */ + v8::MemorySpan GetContents(v8::MemorySpan storage); + /** * Returns true if ArrayBufferView's backing ArrayBuffer has already been * allocated. diff --git a/deps/v8/include/v8-callbacks.h b/deps/v8/include/v8-callbacks.h index 567b36faf63ddb..a86f2f4344fd3f 100644 --- a/deps/v8/include/v8-callbacks.h +++ b/deps/v8/include/v8-callbacks.h @@ -369,6 +369,47 @@ using HostImportModuleDynamicallyCallback = MaybeLocal (*)( Local resource_name, Local specifier, Local import_attributes); +/** + * HostImportModuleWithPhaseDynamicallyCallback is called when we + * require the embedder to load a module with a specific phase. This is used + * as part of the dynamic import syntax. + * + * The referrer contains metadata about the script/module that calls + * import. + * + * The specifier is the name of the module that should be imported. + * + * The phase is the phase of the import requested. + * + * The import_attributes are import attributes for this request in the form: + * [key1, value1, key2, value2, ...] where the keys and values are of type + * v8::String. Note, unlike the FixedArray passed to ResolveModuleCallback and + * returned from ModuleRequest::GetImportAttributes(), this array does not + * contain the source Locations of the attributes. + * + * The Promise returned from this function is forwarded to userland + * JavaScript. The embedder must resolve this promise according to the phase + * requested: + * - For ModuleImportPhase::kSource, the promise must be resolved with a + * compiled ModuleSource object, or rejected with a SyntaxError if the + * module does not support source representation. + * - For ModuleImportPhase::kEvaluation, the promise must be resolved with a + * ModuleNamespace object of a module that has been compiled, instantiated, + * and evaluated. + * + * In case of an exception, the embedder must reject this promise with the + * exception. If the promise creation itself fails (e.g. due to stack + * overflow), the embedder must propagate that exception by returning an empty + * MaybeLocal. + * + * This callback is still experimental and is only invoked for source phase + * imports. + */ +using HostImportModuleWithPhaseDynamicallyCallback = MaybeLocal (*)( + Local context, Local host_defined_options, + Local resource_name, Local specifier, + ModuleImportPhase phase, Local import_attributes); + /** * Callback for requesting a compile hint for a function from the embedder. The * first parameter is the position of the function in source code and the second @@ -404,6 +445,14 @@ using HostInitializeImportMetaObjectCallback = void (*)(Local context, using HostCreateShadowRealmContextCallback = MaybeLocal (*)(Local initiator_context); +/** + * IsJSApiWrapperNativeErrorCallback is called on an JSApiWrapper object to + * determine if Error.isError should return true or false. For instance, in an + * HTML embedder, DOMExceptions return true when passed to Error.isError. + */ +using IsJSApiWrapperNativeErrorCallback = bool (*)(Isolate* isolate, + Local obj); + /** * PrepareStackTraceCallback is called when the stack property of an error is * first accessed. The return value will be used as the stack value. If this @@ -444,14 +493,26 @@ using PrepareStackTraceCallback = MaybeLocal (*)(Local context, * with a list of regular expressions that should match the document URL * in order to enable ETW tracing: * { - * "version": "1.0", + * "version": "2.0", * "filtered_urls": [ * "https:\/\/.*\.chromium\.org\/.*", "https://v8.dev/";, "..." - * ] + * ], + * "trace_interpreter_frames": true * } */ + using FilterETWSessionByURLCallback = bool (*)(Local context, const std::string& etw_filter_payload); + +struct FilterETWSessionByURLResult { + // If true, enable ETW tracing for the current isolate. + bool enable_etw_tracing; + + // If true, also enables ETW tracing for interpreter stack frames. + bool trace_interpreter_frames; +}; +using FilterETWSessionByURL2Callback = FilterETWSessionByURLResult (*)( + Local context, const std::string& etw_filter_payload); #endif // V8_OS_WIN } // namespace v8 diff --git a/deps/v8/include/v8-context.h b/deps/v8/include/v8-context.h index 0861d66493bd2d..43dadadeabff59 100644 --- a/deps/v8/include/v8-context.h +++ b/deps/v8/include/v8-context.h @@ -427,7 +427,8 @@ class V8_EXPORT Context : public Data { static void CheckCast(Data* obj); - internal::Address* GetDataFromSnapshotOnce(size_t index); + internal::ValueHelper::InternalRepresentationType GetDataFromSnapshotOnce( + size_t index); Local SlowGetEmbedderData(int index); void* SlowGetAlignedPointerFromEmbedderData(int index); }; @@ -497,10 +498,10 @@ void* Context::GetAlignedPointerFromEmbedderData(int index) { template MaybeLocal Context::GetDataFromSnapshotOnce(size_t index) { - if (auto slot = GetDataFromSnapshotOnce(index); slot) { - internal::PerformCastCheck( - internal::ValueHelper::SlotAsValue(slot)); - return Local::FromSlot(slot); + if (auto repr = GetDataFromSnapshotOnce(index); + repr != internal::ValueHelper::kEmpty) { + internal::PerformCastCheck(internal::ValueHelper::ReprAsValue(repr)); + return Local::FromRepr(repr); } return {}; } diff --git a/deps/v8/include/v8-debug.h b/deps/v8/include/v8-debug.h index 52255f3700cb73..23b392c7dca0b1 100644 --- a/deps/v8/include/v8-debug.h +++ b/deps/v8/include/v8-debug.h @@ -42,6 +42,12 @@ class V8_EXPORT StackFrame { */ int GetColumn() const { return GetLocation().GetColumnNumber() + 1; } + /** + * Returns zero based source position (character offset) for the associated + * function. + */ + int GetSourcePosition() const; + /** * Returns the id of the script for the function for this StackFrame. * This method will return Message::kNoScriptIdInfo if it is unable to @@ -130,6 +136,11 @@ class V8_EXPORT StackTrace { kDetailed = kOverview | kIsEval | kIsConstructor | kScriptNameOrSourceURL }; + /** + * Returns the (unique) ID of this stack trace. + */ + int GetID() const; + /** * Returns a StackFrame at a particular index. */ diff --git a/deps/v8/include/v8-embedder-heap.h b/deps/v8/include/v8-embedder-heap.h index 7cc9aa0e637b75..2ecfe5250bf5fb 100644 --- a/deps/v8/include/v8-embedder-heap.h +++ b/deps/v8/include/v8-embedder-heap.h @@ -21,37 +21,10 @@ class Value; */ class V8_EXPORT EmbedderRootsHandler { public: - enum class RootHandling { - kQueryEmbedderForNonDroppableReferences, - kDontQueryEmbedderForAnyReference, - }; - virtual ~EmbedderRootsHandler() = default; EmbedderRootsHandler() = default; - V8_DEPRECATED("Use the default constructor instead.") - explicit EmbedderRootsHandler(RootHandling default_traced_reference_handling) - : default_traced_reference_handling_(default_traced_reference_handling) {} - - /** - * Returns true if the |TracedReference| handle should be considered as root - * for the currently running non-tracing garbage collection and false - * otherwise. The default implementation will keep all |TracedReference| - * references as roots. - * - * If this returns false, then V8 may decide that the object referred to by - * such a handle is reclaimed. In that case, V8 calls |ResetRoot()| for the - * |TracedReference|. - * - * Note that the `handle` is different from the handle that the embedder holds - * for retaining the object. - * - * The concrete implementations must be thread-safe. - */ - V8_DEPRECATED("Use TracedReferenceHandling::kDroppable instead.") - virtual bool IsRoot(const v8::TracedReference& handle) = 0; - /** * Used in combination with |IsRoot|. Called by V8 when an * object that is backed by a handle is reclaimed by a non-tracing garbage @@ -74,9 +47,6 @@ class V8_EXPORT EmbedderRootsHandler { } private: - const RootHandling default_traced_reference_handling_ = - RootHandling::kDontQueryEmbedderForAnyReference; - friend class internal::TracedHandles; }; diff --git a/deps/v8/include/v8-exception.h b/deps/v8/include/v8-exception.h index a7f49b6c71b43c..5441a0ab6a403c 100644 --- a/deps/v8/include/v8-exception.h +++ b/deps/v8/include/v8-exception.h @@ -45,6 +45,8 @@ class V8_EXPORT Exception { Local options = {}); static Local WasmRuntimeError(Local message, Local options = {}); + static Local WasmSuspendError(Local message, + Local options = {}); static Local Error(Local message, Local options = {}); /** diff --git a/deps/v8/include/v8-external-memory-accounter.h b/deps/v8/include/v8-external-memory-accounter.h new file mode 100644 index 00000000000000..70df8f4a89dbd5 --- /dev/null +++ b/deps/v8/include/v8-external-memory-accounter.h @@ -0,0 +1,60 @@ +// Copyright 2024 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 INCLUDE_EXTERNAL_MEMORY_ACCOUNTER_H_ +#define INCLUDE_EXTERNAL_MEMORY_ACCOUNTER_H_ + +#include + +#include "v8-isolate.h" + +namespace v8 { + +/** + * This class is used to give V8 an indication of the amount of externally + * allocated memory that is kept alive by JavaScript objects. V8 uses this to + * decide when to perform garbage collections. Registering externally allocated + * memory will trigger garbage collections more often than it would otherwise in + * an attempt to garbage collect the JavaScript objects that keep the externally + * allocated memory alive. Instances of ExternalMemoryAccounter check that the + * reported external memory is back to 0 on destruction. + */ +class V8_EXPORT ExternalMemoryAccounter { + public: + /** + * Returns the amount of external memory registered for `isolate`. + */ + static int64_t GetTotalAmountOfExternalAllocatedMemoryForTesting( + const Isolate* isolate); + + ExternalMemoryAccounter() = default; + ~ExternalMemoryAccounter(); + ExternalMemoryAccounter(ExternalMemoryAccounter&&); + ExternalMemoryAccounter& operator=(ExternalMemoryAccounter&&); + ExternalMemoryAccounter(const ExternalMemoryAccounter&) = delete; + ExternalMemoryAccounter& operator=(const ExternalMemoryAccounter&) = delete; + + /** + * Reports an increase of `size` bytes of external memory. + */ + void Increase(Isolate* isolate, size_t size); + /** + * Reports an update of `delta` bytes of external memory. + */ + void Update(Isolate* isolate, int64_t delta); + /** + * Reports an decrease of `size` bytes of external memory. + */ + void Decrease(Isolate* isolate, size_t size); + + private: +#ifdef V8_ENABLE_MEMORY_ACCOUNTING_CHECKS + size_t amount_of_external_memory_ = 0; + v8::Isolate* isolate_ = nullptr; +#endif +}; + +} // namespace v8 + +#endif // INCLUDE_EXTERNAL_MEMORY_ACCOUNTER_H_ diff --git a/deps/v8/include/v8-fast-api-calls.h b/deps/v8/include/v8-fast-api-calls.h index 18466688cf90cb..12ef5e4f7e66f1 100644 --- a/deps/v8/include/v8-fast-api-calls.h +++ b/deps/v8/include/v8-fast-api-calls.h @@ -270,9 +270,10 @@ class CTypeInfo { enum class SequenceType : uint8_t { kScalar, - kIsSequence, // sequence - kIsTypedArray, // TypedArray of T or any ArrayBufferView if T - // is void + kIsSequence, // sequence + kIsTypedArray V8_DEPRECATED( + "TypedArrays are not supported directly anymore."), + // is void kIsArrayBuffer // ArrayBuffer }; @@ -325,7 +326,9 @@ class CTypeInfo { Flags flags_; }; -struct FastApiTypedArrayBase { +struct V8_DEPRECATED( + "With the removal of FastApiTypedArray this type is not needed " + "anymore.") FastApiTypedArrayBase { public: // Returns the length in number of elements. size_t V8_EXPORT length() const { return length_; } @@ -336,54 +339,12 @@ struct FastApiTypedArrayBase { size_t length_ = 0; }; -template -struct V8_DEPRECATE_SOON( - "When an API function expects a TypedArray as a parameter, the type in the " - "signature should be `v8::Local` instead of " - "FastApiTypedArray<>. The API function then has to type-check the " - "parameter and convert it to a `v8::Local(reinterpret_cast(data_) + index), - sizeof(T)); - return tmp; - } - - bool getStorageIfAligned(T** elements) const { - if (reinterpret_cast(data_) % alignof(T) != 0) { - return false; - } - *elements = reinterpret_cast(data_); - return true; - } - - private: - // This pointer should include the typed array offset applied. - // It's not guaranteed that it's aligned to sizeof(T), it's only - // guaranteed that it's 4-byte aligned, so for 8-byte types we need to - // provide a special implementation for reading from it, which hides - // the possibly unaligned read in the `get` method. - void* data_; -}; - -// Any TypedArray. It uses kTypedArrayBit with base type void -// Overloaded args of ArrayBufferView and TypedArray are not supported -// (for now) because the generic “any” ArrayBufferView doesn’t have its -// own instance type. It could be supported if we specify that -// TypedArray always has precedence over the generic ArrayBufferView, -// but this complicates overload resolution. -struct FastApiArrayBufferView { +struct V8_DEPRECATED("This API is dead within V8") FastApiArrayBufferView { void* data; size_t byte_length; }; -struct FastApiArrayBuffer { +struct V8_DEPRECATED("This API is dead within V8") FastApiArrayBuffer { void* data; size_t byte_length; }; @@ -496,6 +457,10 @@ class V8_EXPORT CFunction { // Returns whether an overload between this and the given CFunction can // be resolved at runtime by the RTTI available for the arguments or at // compile time for functions with different number of arguments. + V8_DEPRECATED( + "Overload resolution is only based on the parameter count. If the " + "parameter count is different, overload resolution is possible and " + "happens at compile time. Otherwise overload resolution is impossible.") OverloadResolution GetOverloadResolution(const CFunction* other) { // Runtime overload resolution can only deal with functions with the // same number of arguments. Functions with different arity are handled @@ -699,30 +664,6 @@ PRIMITIVE_C_TYPES(DEFINE_TYPE_INFO_TRAITS) #undef PRIMITIVE_C_TYPES #undef ALL_C_TYPES -#define SPECIALIZE_GET_TYPE_INFO_HELPER_FOR_TA(T, Enum) \ - template <> \ - struct TypeInfoHelper&> { \ - static constexpr CTypeInfo::Flags Flags() { \ - return CTypeInfo::Flags::kNone; \ - } \ - \ - static constexpr CTypeInfo::Type Type() { return CTypeInfo::Type::Enum; } \ - static constexpr CTypeInfo::SequenceType SequenceType() { \ - return CTypeInfo::SequenceType::kIsTypedArray; \ - } \ - }; - -#define TYPED_ARRAY_C_TYPES(V) \ - V(uint8_t, kUint8) \ - V(int32_t, kInt32) \ - V(uint32_t, kUint32) \ - V(int64_t, kInt64) \ - V(uint64_t, kUint64) \ - V(float, kFloat32) \ - V(double, kFloat64) - -TYPED_ARRAY_C_TYPES(SPECIALIZE_GET_TYPE_INFO_HELPER_FOR_TA) - #undef TYPED_ARRAY_C_TYPES template <> @@ -736,7 +677,9 @@ struct TypeInfoHelper> { }; template <> -struct TypeInfoHelper> { +struct V8_DEPRECATED( + "TypedArrays are not supported directly anymore. Use Local instead.") + TypeInfoHelper> { static constexpr CTypeInfo::Flags Flags() { return CTypeInfo::Flags::kNone; } static constexpr CTypeInfo::Type Type() { return CTypeInfo::Type::kUint32; } @@ -779,6 +722,7 @@ class V8_EXPORT CTypeInfoBuilder { public: using BaseType = T; + START_ALLOW_USE_DEPRECATED() static constexpr CTypeInfo Build() { constexpr CTypeInfo::Flags kFlags = MergeFlags(internal::TypeInfoHelper::Flags(), Flags...); @@ -815,6 +759,7 @@ class V8_EXPORT CTypeInfoBuilder { return CTypeInfo(internal::TypeInfoHelper::Type(), internal::TypeInfoHelper::SequenceType(), kFlags); } + END_ALLOW_USE_DEPRECATED() private: template diff --git a/deps/v8/include/v8-handle-base.h b/deps/v8/include/v8-handle-base.h index 3075441e997910..9149f8fb0fe1c2 100644 --- a/deps/v8/include/v8-handle-base.h +++ b/deps/v8/include/v8-handle-base.h @@ -43,7 +43,11 @@ class V8_TRIVIAL_ABI StackAllocated : public StackAllocated { no_checking_tag tag) : StackAllocated(other, tag) {} +#ifdef ENABLE_SLOW_DCHECKS V8_EXPORT void VerifyOnStack() const; +#else + V8_INLINE V8_EXPORT void VerifyOnStack() const {} +#endif }; /** @@ -86,6 +90,16 @@ class IndirectHandleBase { return internal::ValueHelper::SlotAsValue(slot()); } +#ifdef V8_ENABLE_DIRECT_HANDLE + V8_INLINE internal::ValueHelper::InternalRepresentationType repr() const { + return location_ ? *location_ : internal::ValueHelper::kEmpty; + } +#else + V8_INLINE internal::ValueHelper::InternalRepresentationType repr() const { + return location_; + } +#endif // V8_ENABLE_DIRECT_HANDLE + private: internal::Address* location_ = nullptr; }; @@ -126,6 +140,10 @@ class DirectHandleBase { return reinterpret_cast(ptr_); } + V8_INLINE internal::ValueHelper::InternalRepresentationType repr() const { + return ptr_; + } + private: internal::Address ptr_ = internal::ValueHelper::kEmpty; }; diff --git a/deps/v8/include/v8-initialization.h b/deps/v8/include/v8-initialization.h index c3984668bb1100..46a21a02cbcdd6 100644 --- a/deps/v8/include/v8-initialization.h +++ b/deps/v8/include/v8-initialization.h @@ -112,11 +112,18 @@ class V8_EXPORT V8 { const bool kV8TargetOsIsAndroid = false; #endif +#ifdef V8_ENABLE_CHECKS + const bool kV8EnableChecks = true; +#else + const bool kV8EnableChecks = false; +#endif + const int kBuildConfiguration = (internal::PointerCompressionIsEnabled() ? kPointerCompression : 0) | (internal::SmiValuesAre31Bits() ? k31BitSmis : 0) | (internal::SandboxIsEnabled() ? kSandbox : 0) | - (kV8TargetOsIsAndroid ? kTargetOsIsAndroid : 0); + (kV8TargetOsIsAndroid ? kTargetOsIsAndroid : 0) | + (kV8EnableChecks ? kEnableChecks : 0); return Initialize(kBuildConfiguration); } @@ -288,6 +295,7 @@ class V8_EXPORT V8 { k31BitSmis = 1 << 1, kSandbox = 1 << 2, kTargetOsIsAndroid = 1 << 3, + kEnableChecks = 1 << 4, }; /** diff --git a/deps/v8/include/v8-inspector.h b/deps/v8/include/v8-inspector.h index 89bb0bbd539b28..dc6a548570c7df 100644 --- a/deps/v8/include/v8-inspector.h +++ b/deps/v8/include/v8-inspector.h @@ -139,6 +139,7 @@ struct V8_EXPORT V8StackFrame { StringView functionName; int lineNumber; int columnNumber; + int scriptId; }; class V8_EXPORT V8StackTrace { @@ -297,11 +298,11 @@ class V8_EXPORT V8InspectorClient { return v8::MaybeLocal(); } - virtual void consoleTime(v8::Isolate* isolate, v8::Local label); + virtual void consoleTime(v8::Isolate* isolate, v8::Local label) {} virtual void consoleTimeEnd(v8::Isolate* isolate, - v8::Local label); + v8::Local label) {} virtual void consoleTimeStamp(v8::Isolate* isolate, - v8::Local label); + v8::Local label) {} virtual void consoleClear(int contextGroupId) {} virtual double currentTimeMS() { return 0; } diff --git a/deps/v8/include/v8-internal.h b/deps/v8/include/v8-internal.h index a13db2bd74ad4b..b56e67375dab7b 100644 --- a/deps/v8/include/v8-internal.h +++ b/deps/v8/include/v8-internal.h @@ -44,7 +44,10 @@ class Isolate; namespace internal { class Heap; +class LocalHeap; class Isolate; +class IsolateGroup; +class LocalIsolate; typedef uintptr_t Address; static constexpr Address kNullAddress = 0; @@ -160,15 +163,15 @@ struct SmiTagging<8> { std::is_signed_v>* = nullptr> V8_INLINE static constexpr bool IsValidSmi(T value) { // To be representable as a long smi, the value must be a 32-bit integer. - return (value == static_cast(value)); + return std::numeric_limits::min() <= value && + value <= std::numeric_limits::max(); } template && std::is_unsigned_v>* = nullptr> V8_INLINE static constexpr bool IsValidSmi(T value) { - return (static_cast(value) == - static_cast(static_cast(value))); + return value <= std::numeric_limits::max(); } }; @@ -234,10 +237,6 @@ using SandboxedPointer_t = Address; // virtual address space for userspace. As such, limit the sandbox to 128GB (a // quarter of the total available address space). constexpr size_t kSandboxSizeLog2 = 37; // 128 GB -#elif defined(V8_TARGET_ARCH_LOONG64) -// Some Linux distros on LoongArch64 configured with only 40 bits of virtual -// address space for userspace. Limit the sandbox to 256GB here. -constexpr size_t kSandboxSizeLog2 = 38; // 256 GB #else // Everywhere else use a 1TB sandbox. constexpr size_t kSandboxSizeLog2 = 40; // 1 TB @@ -258,9 +257,12 @@ constexpr size_t kSandboxAlignment = kPtrComprCageBaseAlignment; constexpr uint64_t kSandboxedPointerShift = 64 - kSandboxSizeLog2; // Size of the guard regions surrounding the sandbox. This assumes a worst-case -// scenario of a 32-bit unsigned index used to access an array of 64-bit -// values. -constexpr size_t kSandboxGuardRegionSize = 32ULL * GB; +// scenario of a 32-bit unsigned index used to access an array of 64-bit values +// with an additional 4GB (compressed pointer) offset. In particular, accesses +// to TypedArrays are effectively computed as +// `entry_pointer = array->base + array->offset + index * array->element_size`. +// See also https://crbug.com/40070746 for more details. +constexpr size_t kSandboxGuardRegionSize = 32ULL * GB + 4ULL * GB; static_assert((kSandboxGuardRegionSize % kSandboxAlignment) == 0, "The size of the guard regions around the sandbox must be a " @@ -403,48 +405,6 @@ constexpr size_t kMaxCppHeapPointers = 0; #endif // V8_COMPRESS_POINTERS -// See `ExternalPointerHandle` for the main documentation. The difference to -// `ExternalPointerHandle` is that the handle always refers to a -// (external pointer, size) tuple. The handles are used in combination with a -// dedicated external buffer table (EBT). -using ExternalBufferHandle = uint32_t; - -// ExternalBuffer point to buffer located outside the sandbox. When the V8 -// sandbox is enabled, these are stored on heap as ExternalBufferHandles, -// otherwise they are simply raw pointers. -#ifdef V8_ENABLE_SANDBOX -using ExternalBuffer_t = ExternalBufferHandle; -#else -using ExternalBuffer_t = Address; -#endif - -#ifdef V8_TARGET_OS_ANDROID -// The size of the virtual memory reservation for the external buffer table. -// As with the external pointer table, a maximum table size in combination with -// shifted indices allows omitting bounds checks. -constexpr size_t kExternalBufferTableReservationSize = 64 * MB; - -// The external buffer handles are stores shifted to the left by this amount -// to guarantee that they are smaller than the maximum table size. -constexpr uint32_t kExternalBufferHandleShift = 10; -#else -constexpr size_t kExternalBufferTableReservationSize = 128 * MB; -constexpr uint32_t kExternalBufferHandleShift = 9; -#endif // V8_TARGET_OS_ANDROID - -// A null handle always references an entry that contains nullptr. -constexpr ExternalBufferHandle kNullExternalBufferHandle = 0; - -// The maximum number of entries in an external buffer table. -constexpr int kExternalBufferTableEntrySize = 16; -constexpr int kExternalBufferTableEntrySizeLog2 = 4; -constexpr size_t kMaxExternalBufferPointers = - kExternalBufferTableReservationSize / kExternalBufferTableEntrySize; -static_assert((1 << (32 - kExternalBufferHandleShift)) == - kMaxExternalBufferPointers, - "kExternalBufferTableReservationSize and " - "kExternalBufferHandleShift don't match"); - // // External Pointers. // @@ -822,29 +782,6 @@ constexpr bool kAllCodeObjectsLiveInTrustedSpace = kRuntimeGeneratedCodeObjectsLiveInTrustedSpace && kBuiltinCodeObjectsLiveInTrustedSpace; -// -// JavaScript Dispatch Table -// -// A JSDispatchHandle represents a 32-bit index into a JSDispatchTable. -using JSDispatchHandle = uint32_t; - -constexpr JSDispatchHandle kNullJSDispatchHandle = 0; - -// The size of the virtual memory reservation for the JSDispatchTable. -// As with the other tables, a maximum table size in combination with shifted -// indices allows omitting bounds checks. -constexpr size_t kJSDispatchTableReservationSize = 128 * MB; -constexpr uint32_t kJSDispatchHandleShift = 9; - -// The maximum number of entries in a JSDispatchTable. -constexpr int kJSDispatchTableEntrySize = 16; -constexpr int kJSDispatchTableEntrySizeLog2 = 4; -constexpr size_t kMaxJSDispatchEntries = - kJSDispatchTableReservationSize / kJSDispatchTableEntrySize; -static_assert((1 << (32 - kJSDispatchHandleShift)) == kMaxJSDispatchEntries, - "kJSDispatchTableReservationSize and kJSDispatchEntryHandleShift " - "don't match"); - // {obj} must be the raw tagged pointer representation of a HeapObject // that's guaranteed to never be in ReadOnlySpace. V8_EXPORT internal::Isolate* IsolateFromNeverReadOnlySpaceObject(Address obj); @@ -902,6 +839,7 @@ class Internals { static const int kNumberOfBooleanFlags = 6; static const int kErrorMessageParamSize = 1; static const int kTablesAlignmentPaddingSize = 1; + static const int kRegExpStaticResultOffsetsVectorSize = kApiSystemPointerSize; static const int kBuiltinTier0EntryTableSize = 7 * kApiSystemPointerSize; static const int kBuiltinTier0TableSize = 7 * kApiSystemPointerSize; static const int kLinearAllocationAreaSize = 3 * kApiSystemPointerSize; @@ -912,7 +850,6 @@ class Internals { // ExternalPointerTable and TrustedPointerTable layout guarantees. static const int kExternalPointerTableBasePointerOffset = 0; static const int kExternalPointerTableSize = 2 * kApiSystemPointerSize; - static const int kExternalBufferTableSize = 2 * kApiSystemPointerSize; static const int kTrustedPointerTableSize = 2 * kApiSystemPointerSize; static const int kTrustedPointerTableBasePointerOffset = 0; @@ -924,9 +861,9 @@ class Internals { kIsolateStackGuardOffset + kStackGuardSize; static const int kErrorMessageParamOffset = kVariousBooleanFlagsOffset + kNumberOfBooleanFlags; - static const int kBuiltinTier0EntryTableOffset = kErrorMessageParamOffset + - kErrorMessageParamSize + - kTablesAlignmentPaddingSize; + static const int kBuiltinTier0EntryTableOffset = + kErrorMessageParamOffset + kErrorMessageParamSize + + kTablesAlignmentPaddingSize + kRegExpStaticResultOffsetsVectorSize; static const int kBuiltinTier0TableOffset = kBuiltinTier0EntryTableOffset + kBuiltinTier0EntryTableSize; static const int kNewAllocationInfoOffset = @@ -935,7 +872,8 @@ class Internals { kNewAllocationInfoOffset + kLinearAllocationAreaSize; static const int kFastCCallAlignmentPaddingSize = - kApiSystemPointerSize == 8 ? 0 : kApiSystemPointerSize; + kApiSystemPointerSize == 8 ? 5 * kApiSystemPointerSize + : 1 * kApiSystemPointerSize; static const int kIsolateFastCCallCallerFpOffset = kOldAllocationInfoOffset + kLinearAllocationAreaSize + kFastCCallAlignmentPaddingSize; @@ -963,8 +901,10 @@ class Internals { kIsolateCppHeapPointerTableOffset + kExternalPointerTableSize; static const int kIsolateTrustedPointerTableOffset = kIsolateTrustedCageBaseOffset + kApiSystemPointerSize; - static const int kIsolateApiCallbackThunkArgumentOffset = + static const int kIsolateSharedTrustedPointerTableAddressOffset = kIsolateTrustedPointerTableOffset + kTrustedPointerTableSize; + static const int kIsolateApiCallbackThunkArgumentOffset = + kIsolateSharedTrustedPointerTableAddressOffset + kApiSystemPointerSize; #else static const int kIsolateApiCallbackThunkArgumentOffset = kIsolateCppHeapPointerTableOffset + kExternalPointerTableSize; @@ -973,8 +913,10 @@ class Internals { static const int kIsolateApiCallbackThunkArgumentOffset = kIsolateEmbedderDataOffset + kNumIsolateDataSlots * kApiSystemPointerSize; #endif // V8_COMPRESS_POINTERS - static const int kContinuationPreservedEmbedderDataOffset = + static const int kIsolateRegexpExecVectorArgumentOffset = kIsolateApiCallbackThunkArgumentOffset + kApiSystemPointerSize; + static const int kContinuationPreservedEmbedderDataOffset = + kIsolateRegexpExecVectorArgumentOffset + kApiSystemPointerSize; static const int kIsolateRootsOffset = kContinuationPreservedEmbedderDataOffset + kApiSystemPointerSize; @@ -986,12 +928,12 @@ class Internals { // These constants are copied from static-roots.h and guarded by static asserts. #define EXPORTED_STATIC_ROOTS_PTR_LIST(V) \ - V(UndefinedValue, 0x69) \ - V(NullValue, 0x85) \ - V(TrueValue, 0xc9) \ - V(FalseValue, 0xad) \ - V(EmptyString, 0xa1) \ - V(TheHoleValue, 0x791) + V(UndefinedValue, 0x11) \ + V(NullValue, 0x2d) \ + V(TrueValue, 0x71) \ + V(FalseValue, 0x55) \ + V(EmptyString, 0x49) \ + V(TheHoleValue, 0x761) using Tagged_t = uint32_t; struct StaticReadOnlyRoot { @@ -1001,7 +943,7 @@ class Internals { // Use 0 for kStringMapLowerBound since string maps are the first maps. static constexpr Tagged_t kStringMapLowerBound = 0; - static constexpr Tagged_t kStringMapUpperBound = 0x47d; + static constexpr Tagged_t kStringMapUpperBound = 0x425; #define PLUSONE(...) +1 static constexpr size_t kNumberOfExportedStaticRoots = @@ -1047,7 +989,7 @@ class Internals { // Soft limit for AdjustAmountofExternalAllocatedMemory. Trigger an // incremental GC once the external memory reaches this limit. - static constexpr int kExternalAllocationSoftLimit = 64 * 1024 * 1024; + static constexpr size_t kExternalAllocationSoftLimit = 64 * 1024 * 1024; #ifdef V8_MAP_PACKING static const uintptr_t kMapWordMetadataMask = 0xffffULL << 48; @@ -1377,7 +1319,10 @@ class V8_EXPORT StrongRootAllocatorBase { protected: explicit StrongRootAllocatorBase(Heap* heap) : heap_(heap) {} + explicit StrongRootAllocatorBase(LocalHeap* heap); explicit StrongRootAllocatorBase(Isolate* isolate); + explicit StrongRootAllocatorBase(v8::Isolate* isolate); + explicit StrongRootAllocatorBase(LocalIsolate* isolate); // Allocate/deallocate a range of n elements of type internal::Address. Address* allocate_impl(size_t n); @@ -1397,9 +1342,8 @@ class StrongRootAllocator : private std::allocator { public: using value_type = T; - explicit StrongRootAllocator(Heap* heap) {} - explicit StrongRootAllocator(Isolate* isolate) {} - explicit StrongRootAllocator(v8::Isolate* isolate) {} + template + explicit StrongRootAllocator(HeapOrIsolateT*) {} template StrongRootAllocator(const StrongRootAllocator& other) noexcept {} @@ -1430,7 +1374,7 @@ struct MaybeDefineIteratorConcept {}; template struct MaybeDefineIteratorConcept< Iterator, std::enable_if_t>> { - using iterator_concept = Iterator::iterator_concept; + using iterator_concept = typename Iterator::iterator_concept; }; // Otherwise fall back to `std::iterator_traits` if possible. template @@ -1443,7 +1387,8 @@ struct MaybeDefineIteratorConcept< // TODO(pkasting): Add this unconditionally after dropping support for old // libstdc++ versions. #if __has_include() - using iterator_concept = std::iterator_traits::iterator_concept; + using iterator_concept = + typename std::iterator_traits::iterator_concept; #endif }; @@ -1623,16 +1568,25 @@ class WrappedIterator : public MaybeDefineIteratorConcept { // whether direct local support is enabled. class ValueHelper final { public: + // ValueHelper::InternalRepresentationType is an abstract type that + // corresponds to the internal representation of v8::Local and essentially + // to what T* really is (these two are always in sync). This type is used in + // methods like GetDataFromSnapshotOnce that need access to a handle's + // internal representation. In particular, if `x` is a `v8::Local`, then + // `v8::Local::FromRepr(x.repr())` gives exactly the same handle as `x`. #ifdef V8_ENABLE_DIRECT_HANDLE static constexpr Address kTaggedNullAddress = 1; - static constexpr Address kEmpty = kTaggedNullAddress; + + using InternalRepresentationType = internal::Address; + static constexpr InternalRepresentationType kEmpty = kTaggedNullAddress; #else - static constexpr Address kEmpty = kNullAddress; + using InternalRepresentationType = internal::Address*; + static constexpr InternalRepresentationType kEmpty = nullptr; #endif // V8_ENABLE_DIRECT_HANDLE template V8_INLINE static bool IsEmpty(T* value) { - return reinterpret_cast
(value) == kEmpty; + return ValueAsRepr(value) == kEmpty; } // Returns a handle's "value" for all kinds of abstract handles. For Local, @@ -1659,6 +1613,16 @@ class ValueHelper final { return *reinterpret_cast(slot); } + template + V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { + return reinterpret_cast(value); + } + + template + V8_INLINE static T* ReprAsValue(InternalRepresentationType repr) { + return reinterpret_cast(repr); + } + #else // !V8_ENABLE_DIRECT_HANDLE template @@ -1671,6 +1635,17 @@ class ValueHelper final { return reinterpret_cast(slot); } + template + V8_INLINE static InternalRepresentationType ValueAsRepr(const T* value) { + return const_cast( + reinterpret_cast(value)); + } + + template + V8_INLINE static T* ReprAsValue(InternalRepresentationType repr) { + return reinterpret_cast(repr); + } + #endif // V8_ENABLE_DIRECT_HANDLE }; diff --git a/deps/v8/include/v8-isolate.h b/deps/v8/include/v8-isolate.h index 54571391fb8227..f070682c798c73 100644 --- a/deps/v8/include/v8-isolate.h +++ b/deps/v8/include/v8-isolate.h @@ -164,28 +164,6 @@ class V8_EXPORT ResourceConstraints { uint32_t* stack_limit_ = nullptr; }; -/** - * Option flags passed to the SetRAILMode function. - * See documentation https://developers.google.com/web/tools/chrome-devtools/ - * profile/evaluate-performance/rail - */ -enum RAILMode : unsigned { - // Response performance mode: In this mode very low virtual machine latency - // is provided. V8 will try to avoid JavaScript execution interruptions. - // Throughput may be throttled. - PERFORMANCE_RESPONSE, - // Animation performance mode: In this mode low virtual machine latency is - // provided. V8 will try to avoid as many JavaScript execution interruptions - // as possible. Throughput may be throttled. This is the default mode. - PERFORMANCE_ANIMATION, - // Idle performance mode: The embedder is idle. V8 can complete deferred work - // in this mode. - PERFORMANCE_IDLE, - // Load performance mode: In this mode high throughput is provided. V8 may - // turn off latency optimizations. - PERFORMANCE_LOAD -}; - /** * Memory pressure level for the MemoryPressureNotification. * kNone hints V8 that there is no memory pressure. @@ -201,6 +179,77 @@ enum class MemoryPressureLevel { kNone, kModerate, kCritical }; */ using StackState = cppgc::EmbedderStackState; +/** + * The set of V8 isolates in a process is partitioned into groups. Each group + * has its own sandbox (if V8 was configured with support for the sandbox) and + * pointer-compression cage (if configured with pointer compression). + * + * By default, all isolates are placed in the same group. This is the most + * efficient configuration in terms of speed and memory use. However, with + * pointer compression enabled, total heap usage of isolates in a group + * cannot exceed 4 GB, not counting array buffers and other off-heap storage. + * Using multiple isolate groups can allow embedders to allocate more than 4GB + * of objects with pointer compression enabled, if the embedder's use case can + * span multiple isolates. + * + * Creating an isolate group reserves a range of virtual memory addresses. A + * group's memory mapping will be released when the last isolate in the group is + * disposed, and there are no more live IsolateGroup objects that refer to it. + * + * Note that Isolate groups are reference counted, and + * the IsolateGroup type is a reference to one. + * + * Note that it's not going to be possible to pass shared JS objects + * across IsolateGroup boundary. + * + */ +class V8_EXPORT IsolateGroup { + public: + /** + * Get the default isolate group. If this V8's build configuration only + * supports a single group, this is a reference to that single group. + * Otherwise this is a group like any other, distinguished only + * in that it is the first group. + */ + static IsolateGroup GetDefault(); + + /** + * Return true if new isolate groups can be created at run-time, or false if + * all isolates must be in the same group. + */ + static bool CanCreateNewGroups(); + + /** + * Create a new isolate group. If this V8's build configuration only supports + * a single group, abort. + */ + static IsolateGroup Create(); + + IsolateGroup(IsolateGroup&& other); + IsolateGroup& operator=(IsolateGroup&& other); + + IsolateGroup(const IsolateGroup&) = delete; + IsolateGroup& operator=(const IsolateGroup&) = delete; + + ~IsolateGroup(); + + bool operator==(const IsolateGroup& other) const { + return isolate_group_ == other.isolate_group_; + } + + bool operator!=(const IsolateGroup& other) const { + return !operator==(other); + } + + private: + friend class Isolate; + + // The isolate_group pointer should be already acquired. + explicit IsolateGroup(internal::IsolateGroup*&& isolate_group); + + internal::IsolateGroup* isolate_group_; +}; + /** * Isolate represents an isolated instance of the V8 engine. V8 isolates have * completely separate states. Objects from one isolate must not be used in @@ -524,7 +573,7 @@ class V8_EXPORT Isolate { kDurationFormat = 117, kInvalidatedNumberStringNotRegexpLikeProtector = 118, kOBSOLETE_RegExpUnicodeSetIncompatibilitiesWithUnicodeMode = 119, - kImportAssertionDeprecatedSyntax = 120, + kOBSOLETE_ImportAssertionDeprecatedSyntax = 120, kLocaleInfoObsoletedGetters = 121, kLocaleInfoFunctions = 122, kCompileHintsMagicAll = 123, @@ -549,6 +598,24 @@ class V8_EXPORT Isolate { kDocumentAllLegacyConstruct = 142, kConsoleContext = 143, kWasmImportedStringsUtf8 = 144, + kResizableArrayBuffer = 145, + kGrowableSharedArrayBuffer = 146, + kArrayByCopy = 147, + kArrayFromAsync = 148, + kIteratorMethods = 149, + kPromiseAny = 150, + kSetMethods = 151, + kArrayFindLast = 152, + kArrayGroup = 153, + kArrayBufferTransfer = 154, + kPromiseWithResolvers = 155, + kAtomicsWaitAsync = 156, + kExtendingNonExtensibleWithPrivate = 157, + kPromiseTry = 158, + kStringReplaceAll = 159, + kStringWellFormed = 160, + kWeakReferences = 161, + kErrorIsError = 162, // If you add new values here, you'll also need to update Chromium's: // web_feature.mojom, use_counter_callback.cc, and enums.xml. V8 changes to @@ -589,9 +656,9 @@ class V8_EXPORT Isolate { * currently entered isolate. * * Only Isolate::GetData() and Isolate::SetData(), which access the - * embedder-controlled parts of the isolate, are allowed to be called on the - * uninitialized isolate. To initialize the isolate, call - * `Isolate::Initialize()` or initialize a `SnapshotCreator`. + * embedder-controlled parts of the isolate, as well as Isolate::GetGroup(), + * are allowed to be called on the uninitialized isolate. To initialize the + * isolate, call `Isolate::Initialize()` or initialize a `SnapshotCreator`. * * When an isolate is no longer used its resources should be freed * by calling Dispose(). Using the delete operator is not allowed. @@ -599,6 +666,12 @@ class V8_EXPORT Isolate { * V8::Initialize() must have run prior to this. */ static Isolate* Allocate(); + static Isolate* Allocate(const IsolateGroup& group); + + /** + * Return the group for this isolate. + */ + IsolateGroup GetGroup() const; /** * Initialize an Isolate previously allocated by Isolate::Allocate(). @@ -615,6 +688,7 @@ class V8_EXPORT Isolate { * V8::Initialize() must have run prior to this. */ static Isolate* New(const CreateParams& params); + static Isolate* New(const IsolateGroup& group, const CreateParams& params); /** * Returns the entered isolate for the current thread or NULL in @@ -672,6 +746,18 @@ class V8_EXPORT Isolate { void SetHostImportModuleDynamicallyCallback( HostImportModuleDynamicallyCallback callback); + /** + * This specifies the callback called by the upcoming dynamic + * import() and import.source() language feature to load modules. + * + * This API is experimental and is expected to be changed or removed in the + * future. The callback is currently only called when for source-phase + * imports. Evaluation-phase imports use the existing + * HostImportModuleDynamicallyCallback callback. + */ + void SetHostImportModuleWithPhaseDynamicallyCallback( + HostImportModuleWithPhaseDynamicallyCallback callback); + /** * This specifies the callback called by the upcoming import.meta * language feature to retrieve host-defined meta data for a module. @@ -686,6 +772,14 @@ class V8_EXPORT Isolate { void SetHostCreateShadowRealmContextCallback( HostCreateShadowRealmContextCallback callback); + /** + * Set the callback that checks whether a Error.isError should return true for + * a JSApiWrapper object, i.e. whether it represents a native JS error. For + * example, in an HTML embedder, DOMExceptions are considered native errors. + */ + void SetIsJSApiWrapperNativeErrorCallback( + IsJSApiWrapperNativeErrorCallback callback); + /** * This specifies the callback called when the stack property of Error * is accessed. @@ -701,7 +795,10 @@ class V8_EXPORT Isolate { /** * This specifies the callback called when an ETW tracing session starts. */ + V8_DEPRECATE_SOON("Use SetFilterETWSessionByURL2Callback instead") void SetFilterETWSessionByURLCallback(FilterETWSessionByURLCallback callback); + void SetFilterETWSessionByURL2Callback( + FilterETWSessionByURL2Callback callback); #endif // V8_OS_WIN /** @@ -887,18 +984,13 @@ class V8_EXPORT Isolate { size_t frames_limit, SampleInfo* sample_info); /** - * Adjusts the amount of registered external memory. Used to give V8 an - * indication of the amount of externally allocated memory that is kept alive - * by JavaScript objects. V8 uses this to decide when to perform global - * garbage collections. Registering externally allocated memory will trigger - * global garbage collections more often than it would otherwise in an attempt - * to garbage collect the JavaScript objects that keep the externally - * allocated memory alive. + * Adjusts the amount of registered external memory. * * \param change_in_bytes the change in externally allocated memory that is * kept alive by JavaScript objects. * \returns the adjusted value. */ + V8_DEPRECATE_SOON("Use ExternalMemoryAccounter instead.") int64_t AdjustAmountOfExternalAllocatedMemory(int64_t change_in_bytes); /** @@ -963,6 +1055,14 @@ class V8_EXPORT Isolate { */ Local ThrowException(Local exception); + /** + * Returns true if an exception was thrown but not processed yet by an + * exception handler on JavaScript side or by v8::TryCatch handler. + * + * This is an experimental feature and may still change significantly. + */ + bool HasPendingException(); + using GCCallback = void (*)(Isolate* isolate, GCType type, GCCallbackFlags flags); using GCCallbackWithData = void (*)(Isolate* isolate, GCType type, @@ -1421,18 +1521,18 @@ class V8_EXPORT Isolate { void SetPriority(Priority priority); /** - * Optional notification to tell V8 the current performance requirements - * of the embedder based on RAIL. + * Optional notification to tell V8 whether the embedder is currently loading + * resources. If the embedder uses this notification, it should call + * SetIsLoading(true) when loading starts and SetIsLoading(false) when it + * ends. + * It's valid to call SetIsLoading(true) again while loading, which will + * update the timestamp when V8 considers the load started. Calling + * SetIsLoading(false) while not loading does nothing. * V8 uses these notifications to guide heuristics. * This is an unfinished experimental feature. Semantics and implementation * may change frequently. */ - void SetRAILMode(RAILMode rail_mode); - - /** - * Update load start time of the RAIL mode - */ - void UpdateLoadStartTime(); + void SetIsLoading(bool is_loading); /** * Optional notification to tell V8 the current isolate is used for debugging @@ -1665,14 +1765,6 @@ class V8_EXPORT Isolate { bool capture, int frame_limit = 10, StackTrace::StackTraceOptions options = StackTrace::kOverview); - /** - * Iterates through all external resources referenced from current isolate - * heap. GC is not invoked prior to iterating, therefore there is no - * guarantee that visited objects are still alive. - */ - V8_DEPRECATED("Will be removed without replacement. crbug.com/v8/14172") - void VisitExternalResources(ExternalResourceVisitor* visitor); - /** * Check if this isolate is in use. * True if at least one thread Enter'ed this isolate. @@ -1745,8 +1837,11 @@ class V8_EXPORT Isolate { private: template friend class PersistentValueMapBase; + friend class ExternalMemoryAccounter; - internal::Address* GetDataFromSnapshotOnce(size_t index); + internal::ValueHelper::InternalRepresentationType GetDataFromSnapshotOnce( + size_t index); + int64_t AdjustAmountOfExternalAllocatedMemoryImpl(int64_t change_in_bytes); void HandleExternalMemoryInterrupt(); }; @@ -1767,10 +1862,10 @@ uint32_t Isolate::GetNumberOfDataSlots() { template MaybeLocal Isolate::GetDataFromSnapshotOnce(size_t index) { - if (auto slot = GetDataFromSnapshotOnce(index); slot) { - internal::PerformCastCheck( - internal::ValueHelper::SlotAsValue(slot)); - return Local::FromSlot(slot); + if (auto repr = GetDataFromSnapshotOnce(index); + repr != internal::ValueHelper::kEmpty) { + internal::PerformCastCheck(internal::ValueHelper::ReprAsValue(repr)); + return Local::FromRepr(repr); } return {}; } diff --git a/deps/v8/include/v8-local-handle.h b/deps/v8/include/v8-local-handle.h index ef110a083dc3d6..4d15a7043cecfa 100644 --- a/deps/v8/include/v8-local-handle.h +++ b/deps/v8/include/v8-local-handle.h @@ -181,6 +181,11 @@ class LocalBase : public api_internal::DirectHandleBase { V8_INLINE static LocalBase FromSlot(internal::Address* slot) { return LocalBase(*slot); } + + V8_INLINE static LocalBase FromRepr( + internal::ValueHelper::InternalRepresentationType repr) { + return LocalBase(repr); + } }; #else // !V8_ENABLE_DIRECT_HANDLE @@ -213,6 +218,11 @@ class LocalBase : public api_internal::IndirectHandleBase { V8_INLINE static LocalBase FromSlot(internal::Address* slot) { return LocalBase(slot); } + + V8_INLINE static LocalBase FromRepr( + internal::ValueHelper::InternalRepresentationType repr) { + return LocalBase(repr); + } }; #endif // V8_ENABLE_DIRECT_HANDLE @@ -396,6 +406,11 @@ class V8_TRIVIAL_ABI Local : public LocalBase, V8_INLINE explicit Local(const LocalBase& other) : LocalBase(other) {} + V8_INLINE static Local FromRepr( + internal::ValueHelper::InternalRepresentationType repr) { + return Local(LocalBase::FromRepr(repr)); + } + V8_INLINE static Local FromSlot(internal::Address* slot) { return Local(LocalBase::FromSlot(slot)); } @@ -434,8 +449,9 @@ class V8_TRIVIAL_ABI LocalUnchecked : public Local { #if defined(V8_ENABLE_LOCAL_OFF_STACK_CHECK) && V8_HAS_ATTRIBUTE_TRIVIAL_ABI // In this case, the check is also enforced in the copy constructor and we // need to suppress it. - LocalUnchecked(const LocalUnchecked& other) - : Local(other, Local::do_not_check) noexcept {} + LocalUnchecked( + const LocalUnchecked& other) noexcept // NOLINT(runtime/explicit) + : Local(other, Local::do_not_check) {} LocalUnchecked& operator=(const LocalUnchecked&) noexcept = default; #endif @@ -455,11 +471,9 @@ class StrongRootAllocator> : public StrongRootAllocatorBase { static_assert(std::is_standard_layout_v); static_assert(sizeof(value_type) == sizeof(Address)); - explicit StrongRootAllocator(Heap* heap) : StrongRootAllocatorBase(heap) {} - explicit StrongRootAllocator(Isolate* isolate) - : StrongRootAllocatorBase(isolate) {} - explicit StrongRootAllocator(v8::Isolate* isolate) - : StrongRootAllocatorBase(reinterpret_cast(isolate)) {} + template + explicit StrongRootAllocator(HeapOrIsolateT* heap_or_isolate) + : StrongRootAllocatorBase(heap_or_isolate) {} template StrongRootAllocator(const StrongRootAllocator& other) noexcept : StrongRootAllocatorBase(other) {} @@ -565,7 +579,11 @@ class LocalVector { void push_back(const Local& x) { backing_.push_back(x); } void pop_back() { backing_.pop_back(); } - void emplace_back(const Local& x) { backing_.emplace_back(x); } + + template + void emplace_back(Args&&... args) { + backing_.push_back(value_type{std::forward(args)...}); + } void clear() noexcept { backing_.clear(); } void resize(size_t n) { backing_.resize(n); } diff --git a/deps/v8/include/v8-memory-span.h b/deps/v8/include/v8-memory-span.h index 7556b20fa949cb..5916cdfe06bb5e 100644 --- a/deps/v8/include/v8-memory-span.h +++ b/deps/v8/include/v8-memory-span.h @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -229,7 +230,7 @@ class V8_EXPORT MemorySpan { constexpr Iterator& operator+=(difference_type rhs) { ptr_ += rhs; - return this; + return *this; } [[nodiscard]] friend constexpr Iterator operator+(Iterator lhs, @@ -245,7 +246,7 @@ class V8_EXPORT MemorySpan { constexpr Iterator& operator-=(difference_type rhs) { ptr_ -= rhs; - return this; + return *this; } [[nodiscard]] friend constexpr Iterator operator-(Iterator lhs, diff --git a/deps/v8/include/v8-metrics.h b/deps/v8/include/v8-metrics.h index 9e77744bb29d68..bf19dead0e6120 100644 --- a/deps/v8/include/v8-metrics.h +++ b/deps/v8/include/v8-metrics.h @@ -8,9 +8,11 @@ #include #include +#include #include #include "v8-internal.h" // NOLINT(build/include_directory) +#include "v8-isolate.h" // NOLINT(build/include_directory) #include "v8-local-handle.h" // NOLINT(build/include_directory) #include "v8config.h" // NOLINT(build/include_directory) @@ -37,6 +39,10 @@ struct GarbageCollectionSizes { struct GarbageCollectionFullCycle { int reason = -1; + // The priority of the isolate during the GC cycle. A nullopt value denotes a + // mixed priority cycle, meaning the Isolate's priority was changed while the + // cycle was in progress. + std::optional priority = std::nullopt; GarbageCollectionPhases total; GarbageCollectionPhases total_cpp; GarbageCollectionPhases main_thread; @@ -86,6 +92,10 @@ using GarbageCollectionFullMainThreadBatchedIncrementalSweep = struct GarbageCollectionYoungCycle { int reason = -1; + // The priority of the isolate during the GC cycle. A nullopt value denotes a + // mixed priority cycle, meaning the Isolate's priority was changed while the + // cycle was in progress. + std::optional priority = std::nullopt; int64_t total_wall_clock_duration_in_us = -1; int64_t main_thread_wall_clock_duration_in_us = -1; double collection_rate_in_percent = -1.0; diff --git a/deps/v8/include/v8-object.h b/deps/v8/include/v8-object.h index 71a6c2c9c14911..3e57ae8efe33f3 100644 --- a/deps/v8/include/v8-object.h +++ b/deps/v8/include/v8-object.h @@ -704,6 +704,7 @@ class V8_EXPORT Object : public Value { * Prefer using version with Isolate parameter. */ MaybeLocal GetCreationContext(v8::Isolate* isolate); + V8_DEPRECATE_SOON("Use the version with the isolate argument.") MaybeLocal GetCreationContext(); /** @@ -712,13 +713,17 @@ class V8_EXPORT Object : public Value { * Prefer using version with Isolate parameter. **/ Local GetCreationContextChecked(v8::Isolate* isolate); + V8_DEPRECATE_SOON("Use the version with the isolate argument.") Local GetCreationContextChecked(); /** Same as above, but works for Persistents */ V8_INLINE static MaybeLocal GetCreationContext( - const PersistentBase& object) { - return object.template value()->GetCreationContext(); + v8::Isolate* isolate, const PersistentBase& object) { + return object.template value()->GetCreationContext(isolate); } + V8_DEPRECATE_SOON("Use the version with the isolate argument.") + V8_INLINE static MaybeLocal GetCreationContext( + const PersistentBase& object); /** * Gets the context in which the object was created (see GetCreationContext()) diff --git a/deps/v8/include/v8-platform.h b/deps/v8/include/v8-platform.h index a3a939729c9b14..aeeffbc317ca54 100644 --- a/deps/v8/include/v8-platform.h +++ b/deps/v8/include/v8-platform.h @@ -1116,6 +1116,7 @@ class Platform { * Embedders should override PostTaskOnWorkerThreadImpl() instead of * CallOnWorkerThread(). */ + V8_DEPRECATE_SOON("Use PostTaskOnWorkerThread instead.") void CallOnWorkerThread( std::unique_ptr task, const SourceLocation& location = SourceLocation::Current()) { @@ -1129,6 +1130,7 @@ class Platform { * Embedders should override PostTaskOnWorkerThreadImpl() instead of * CallBlockingTaskOnWorkerThread(). */ + V8_DEPRECATE_SOON("Use PostTaskOnWorkerThread instead.") void CallBlockingTaskOnWorkerThread( std::unique_ptr task, const SourceLocation& location = SourceLocation::Current()) { @@ -1143,6 +1145,7 @@ class Platform { * Embedders should override PostTaskOnWorkerThreadImpl() instead of * CallLowPriorityTaskOnWorkerThread(). */ + V8_DEPRECATE_SOON("Use PostTaskOnWorkerThread instead.") void CallLowPriorityTaskOnWorkerThread( std::unique_ptr task, const SourceLocation& location = SourceLocation::Current()) { @@ -1158,6 +1161,7 @@ class Platform { * Embedders should override PostDelayedTaskOnWorkerThreadImpl() instead of * CallDelayedOnWorkerThread(). */ + V8_DEPRECATE_SOON("Use PostDelayedTaskOnWorkerThread instead.") void CallDelayedOnWorkerThread( std::unique_ptr task, double delay_in_seconds, const SourceLocation& location = SourceLocation::Current()) { @@ -1166,6 +1170,31 @@ class Platform { location); } + /** + * Schedules a task to be invoked on a worker thread. + * Embedders should override PostTaskOnWorkerThreadImpl() instead of + * PostTaskOnWorkerThread(). + */ + void PostTaskOnWorkerThread( + TaskPriority priority, std::unique_ptr task, + const SourceLocation& location = SourceLocation::Current()) { + PostTaskOnWorkerThreadImpl(priority, std::move(task), location); + } + + /** + * Schedules a task to be invoked on a worker thread after |delay_in_seconds| + * expires. + * Embedders should override PostDelayedTaskOnWorkerThreadImpl() instead of + * PostDelayedTaskOnWorkerThread(). + */ + void PostDelayedTaskOnWorkerThread( + TaskPriority priority, std::unique_ptr task, + double delay_in_seconds, + const SourceLocation& location = SourceLocation::Current()) { + PostDelayedTaskOnWorkerThreadImpl(priority, std::move(task), + delay_in_seconds, location); + } + /** * Returns true if idle tasks are enabled for the given |isolate|. */ diff --git a/deps/v8/include/v8-primitive.h b/deps/v8/include/v8-primitive.h index 426bb379099e26..a5d149b9c2884e 100644 --- a/deps/v8/include/v8-primitive.h +++ b/deps/v8/include/v8-primitive.h @@ -140,8 +140,14 @@ class V8_EXPORT String : public Name { * Returns the number of bytes in the UTF-8 encoded * representation of this string. */ + V8_DEPRECATE_SOON("Use Utf8LengthV2 instead.") int Utf8Length(Isolate* isolate) const; + /** + * Returns the number of bytes needed for the Utf8 encoding of this string. + */ + size_t Utf8LengthV2(Isolate* isolate) const; + /** * Returns whether this string is known to contain only one byte data, * i.e. ISO-8859-1 code points. @@ -194,15 +200,69 @@ class V8_EXPORT String : public Name { }; // 16-bit character codes. + V8_DEPRECATE_SOON("Use WriteV2 instead.") int Write(Isolate* isolate, uint16_t* buffer, int start = 0, int length = -1, int options = NO_OPTIONS) const; // One byte characters. + V8_DEPRECATE_SOON("Use WriteOneByteV2 instead.") int WriteOneByte(Isolate* isolate, uint8_t* buffer, int start = 0, int length = -1, int options = NO_OPTIONS) const; // UTF-8 encoded characters. + V8_DEPRECATE_SOON("Use WriteUtf8V2 instead.") int WriteUtf8(Isolate* isolate, char* buffer, int length = -1, int* nchars_ref = nullptr, int options = NO_OPTIONS) const; + struct WriteFlags { + enum { + kNone = 0, + // Indicates that the output string should be null-terminated. In that + // case, the output buffer must include sufficient space for the + // additional null character. + kNullTerminate = 1, + // Used by WriteUtf8 to replace orphan surrogate code units with the + // unicode replacement character. Needs to be set to guarantee valid UTF-8 + // output. + kReplaceInvalidUtf8 = 2 + }; + }; + + /** + * Write the contents of the string to an external buffer. + * + * Copies length characters into the output buffer starting at offset. The + * output buffer must have sufficient space for all characters and the null + * terminator if null termination is requested through the flags. + * + * \param offset The position within the string at which copying begins. + * \param length The number of characters to copy from the string. + * \param buffer The buffer into which the string will be copied. + * \param flags Various flags that influence the behavior of this operation. + */ + void WriteV2(Isolate* isolate, uint32_t offset, uint32_t length, + uint16_t* buffer, int flags = WriteFlags::kNone) const; + void WriteOneByteV2(Isolate* isolate, uint32_t offset, uint32_t length, + uint8_t* buffer, int flags = WriteFlags::kNone) const; + + /** + * Encode the contents of the string as Utf8 into an external buffer. + * + * Encodes the characters of this string as Utf8 and writes them into the + * output buffer until either all characters were encoded or the buffer is + * full. Will not write partial UTF-8 sequences, preferring to stop before + * the end of the buffer. If null termination is requested, the output buffer + * will always be null terminated even if not all characters fit. In that + * case, the capacity must be at least one. The required size of the output + * buffer can be determined using Utf8Length(). + * + * \param buffer The buffer into which the string will be written. + * \param capacity The number of bytes available in the output buffer. + * \param flags Various flags that influence the behavior of this operation. + * \return The number of bytes copied to the buffer including the null + * terminator (if written). + */ + size_t WriteUtf8V2(Isolate* isolate, char* buffer, size_t capacity, + int flags = WriteFlags::kNone) const; + /** * A zero length string. */ @@ -240,6 +300,13 @@ class V8_EXPORT String : public Name { */ virtual bool IsCacheable() const { return true; } + /** + * Internally V8 will call this Unaccount method when the external string + * resource should be unaccounted for. This method can be overridden in + * subclasses to control how allocated external bytes are accounted. + */ + virtual void Unaccount(Isolate* isolate) {} + // Disallow copying and assigning. ExternalStringResourceBase(const ExternalStringResourceBase&) = delete; void operator=(const ExternalStringResourceBase&) = delete; @@ -474,8 +541,20 @@ class V8_EXPORT String : public Name { * The string is not modified if the operation fails. See NewExternal for * information on the lifetime of the resource. */ + V8_DEPRECATE_SOON("Use the version with the isolate argument instead.") bool MakeExternal(ExternalStringResource* resource); + /** + * Associate an external string resource with this string by transforming it + * in place so that existing references to this string in the JavaScript heap + * will use the external string resource. The external string resource's + * character contents need to be equivalent to this string. + * Returns true if the string has been changed to be an external string. + * The string is not modified if the operation fails. See NewExternal for + * information on the lifetime of the resource. + */ + bool MakeExternal(Isolate* isolate, ExternalStringResource* resource); + /** * Creates a new external string using the one-byte data defined in the given * resource. When the external string is no longer live on V8's heap the @@ -496,8 +575,20 @@ class V8_EXPORT String : public Name { * The string is not modified if the operation fails. See NewExternal for * information on the lifetime of the resource. */ + V8_DEPRECATE_SOON("Use the version with the isolate argument instead.") bool MakeExternal(ExternalOneByteStringResource* resource); + /** + * Associate an external string resource with this string by transforming it + * in place so that existing references to this string in the JavaScript heap + * will use the external string resource. The external string resource's + * character contents need to be equivalent to this string. + * Returns true if the string has been changed to be an external string. + * The string is not modified if the operation fails. See NewExternal for + * information on the lifetime of the resource. + */ + bool MakeExternal(Isolate* isolate, ExternalOneByteStringResource* resource); + /** * Returns true if this string can be made external, given the encoding for * the external string resource. @@ -527,7 +618,7 @@ class V8_EXPORT String : public Name { ~Utf8Value(); char* operator*() { return str_; } const char* operator*() const { return str_; } - int length() const { return length_; } + size_t length() const { return length_; } // Disallow copying and assigning. Utf8Value(const Utf8Value&) = delete; @@ -535,7 +626,7 @@ class V8_EXPORT String : public Name { private: char* str_; - int length_; + size_t length_; }; /** @@ -557,7 +648,7 @@ class V8_EXPORT String : public Name { ~Value(); uint16_t* operator*() { return str_; } const uint16_t* operator*() const { return str_; } - int length() const { return length_; } + uint32_t length() const { return length_; } // Disallow copying and assigning. Value(const Value&) = delete; @@ -565,7 +656,7 @@ class V8_EXPORT String : public Name { private: uint16_t* str_; - int length_; + uint32_t length_; }; /** @@ -594,7 +685,7 @@ class V8_EXPORT String : public Name { #endif return data16_; } - int length() const { return length_; } + uint32_t length() const { return length_; } bool is_one_byte() const { return is_one_byte_; } // Disallow copying and assigning. @@ -609,7 +700,7 @@ class V8_EXPORT String : public Name { const uint8_t* data8_; const uint16_t* data16_; }; - int length_; + uint32_t length_; bool is_one_byte_; // Avoid exposing the internal DisallowGarbageCollection scope. alignas(internal::Internals:: diff --git a/deps/v8/include/v8-sandbox.h b/deps/v8/include/v8-sandbox.h index 6e93d4ae62167c..4c4602e2777a8b 100644 --- a/deps/v8/include/v8-sandbox.h +++ b/deps/v8/include/v8-sandbox.h @@ -23,15 +23,14 @@ namespace v8 { * type check for a supertype must succeed for any subtype. * * The tag is currently in practice limited to 15 bits since it needs to fit - * together with a marking bit into the unused parts of a pointer (the top 16 - * bits). + * together with a marking bit into the unused parts of a pointer. */ enum class CppHeapPointerTag : uint16_t { kFirstTag = 0, kNullTag = 0, /** - * The lower type ids are reserved for the embedder to assign. For that, the + * The lower type ids are reserved for the embedder to assign. For that, the * main requirement is that all (transitive) child classes of a given parent * class have type ids in the same range, and that there are no unrelated * types in that range. For example, given the following type hierarchy: diff --git a/deps/v8/include/v8-script.h b/deps/v8/include/v8-script.h index 9d3556e222253a..244a5a77815c0f 100644 --- a/deps/v8/include/v8-script.h +++ b/deps/v8/include/v8-script.h @@ -155,7 +155,7 @@ class V8_EXPORT ModuleRequest : public Data { */ Local GetImportAttributes() const; - V8_DEPRECATE_SOON("Use GetImportAttributes instead") + V8_DEPRECATED("Use GetImportAttributes instead") Local GetImportAssertions() const { return GetImportAttributes(); } @@ -273,6 +273,13 @@ class V8_EXPORT Module : public Data { */ bool IsGraphAsync() const; + /** + * Returns whether this module is individually asynchronous (for example, + * if it's a Source Text Module Record containing a top-level await). + * See [[HasTLA]] in https://tc39.es/ecma262/#sec-cyclic-module-records + */ + bool HasTopLevelAwait() const; + /** * Returns whether the module is a SourceTextModule. */ diff --git a/deps/v8/include/v8-source-location.h b/deps/v8/include/v8-source-location.h index 92216ef2fa6152..eb307099c5f922 100644 --- a/deps/v8/include/v8-source-location.h +++ b/deps/v8/include/v8-source-location.h @@ -76,7 +76,12 @@ class V8_EXPORT SourceLocation final { * * \returns a human-readable string representing source location information. */ - std::string ToString() const; + std::string ToString() const { + if (!file_) { + return {}; + } + return std::string(function_) + "@" + file_ + ":" + std::to_string(line_); + } private: constexpr SourceLocation(const char* function, const char* file, size_t line) diff --git a/deps/v8/include/v8-unwinder-state.h b/deps/v8/include/v8-unwinder-state.h index 235211e3abeb2b..084692f3a4d5f8 100644 --- a/deps/v8/include/v8-unwinder-state.h +++ b/deps/v8/include/v8-unwinder-state.h @@ -19,7 +19,7 @@ struct CalleeSavedRegisters { }; #elif V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM64 || \ V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_PPC64 || V8_TARGET_ARCH_RISCV64 || \ - V8_TARGET_ARCH_S390 || V8_TARGET_ARCH_LOONG64 || V8_TARGET_ARCH_RISCV32 + V8_TARGET_ARCH_S390X || V8_TARGET_ARCH_LOONG64 || V8_TARGET_ARCH_RISCV32 struct CalleeSavedRegisters {}; #else #error Target architecture was not detected as supported by v8 diff --git a/deps/v8/include/v8-value.h b/deps/v8/include/v8-value.h index 656b5719eff748..76d947817be101 100644 --- a/deps/v8/include/v8-value.h +++ b/deps/v8/include/v8-value.h @@ -346,6 +346,11 @@ class V8_EXPORT Value : public Data { */ bool IsWasmMemoryObject() const; + /** + * Returns true if this value is a WasmMemoryMapDescriptor. + */ + bool IsWasmMemoryMapDescriptor() const; + /** * Returns true if this value is a WasmModuleObject. */ diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 4750214ffe3f3d..9ebb8ea69490e9 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -9,9 +9,9 @@ // NOTE these macros are used by some of the tool scripts and the build // system so their names cannot be changed without changing the scripts. #define V8_MAJOR_VERSION 13 -#define V8_MINOR_VERSION 0 -#define V8_BUILD_NUMBER 245 -#define V8_PATCH_LEVEL 25 +#define V8_MINOR_VERSION 3 +#define V8_BUILD_NUMBER 415 +#define V8_PATCH_LEVEL 20 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/include/v8-wasm.h b/deps/v8/include/v8-wasm.h index f8e406c737e1cf..3afaab9aa00830 100644 --- a/deps/v8/include/v8-wasm.h +++ b/deps/v8/include/v8-wasm.h @@ -199,6 +199,30 @@ class V8_EXPORT WasmStreaming final { std::unique_ptr impl_; }; +/** + * The V8 interface for a WebAssembly memory map descriptor. This is an + * experimental feature that may change and be removed without further + * communication. + */ +class V8_EXPORT WasmMemoryMapDescriptor : public Object { + public: + WasmMemoryMapDescriptor() = delete; + + V8_INLINE static WasmMemoryMapDescriptor* Cast(Value* value) { +#ifdef V8_ENABLE_CHECKS + CheckCast(value); +#endif + return static_cast(value); + } + + using WasmFileDescriptor = int32_t; + + static Local New(Isolate* isolate, + WasmFileDescriptor fd); + + private: + static void CheckCast(Value* object); +}; } // namespace v8 #endif // INCLUDE_V8_WASM_H_ diff --git a/deps/v8/include/v8config.h b/deps/v8/include/v8config.h index 008abc0beceb77..04f61126a2841b 100644 --- a/deps/v8/include/v8config.h +++ b/deps/v8/include/v8config.h @@ -833,13 +833,9 @@ V8 shared library set USING_V8_SHARED. #elif defined(__PPC64__) || defined(_ARCH_PPC64) #define V8_HOST_ARCH_PPC64 1 #define V8_HOST_ARCH_64_BIT 1 -#elif defined(__s390__) || defined(__s390x__) -#define V8_HOST_ARCH_S390 1 -#if defined(__s390x__) +#elif defined(__s390x__) +#define V8_HOST_ARCH_S390X 1 #define V8_HOST_ARCH_64_BIT 1 -#else -#define V8_HOST_ARCH_32_BIT 1 -#endif #elif defined(__riscv) || defined(__riscv__) #if __riscv_xlen == 64 #define V8_HOST_ARCH_RISCV64 1 @@ -861,7 +857,7 @@ V8 shared library set USING_V8_SHARED. // compiler. #if !V8_TARGET_ARCH_X64 && !V8_TARGET_ARCH_IA32 && !V8_TARGET_ARCH_ARM && \ !V8_TARGET_ARCH_ARM64 && !V8_TARGET_ARCH_MIPS64 && \ - !V8_TARGET_ARCH_PPC64 && !V8_TARGET_ARCH_S390 && \ + !V8_TARGET_ARCH_PPC64 && !V8_TARGET_ARCH_S390X && \ !V8_TARGET_ARCH_RISCV64 && !V8_TARGET_ARCH_LOONG64 && \ !V8_TARGET_ARCH_RISCV32 #if defined(_M_X64) || defined(__x86_64__) @@ -878,11 +874,8 @@ V8 shared library set USING_V8_SHARED. #define V8_TARGET_ARCH_LOONG64 1 #elif defined(_ARCH_PPC64) #define V8_TARGET_ARCH_PPC64 1 -#elif defined(__s390__) -#define V8_TARGET_ARCH_S390 1 -#if defined(__s390x__) +#elif defined(__s390x__) #define V8_TARGET_ARCH_S390X 1 -#endif #elif defined(__riscv) || defined(__riscv__) #if __riscv_xlen == 64 #define V8_TARGET_ARCH_RISCV64 1 @@ -917,12 +910,8 @@ V8 shared library set USING_V8_SHARED. #define V8_TARGET_ARCH_64_BIT 1 #elif V8_TARGET_ARCH_PPC64 #define V8_TARGET_ARCH_64_BIT 1 -#elif V8_TARGET_ARCH_S390 -#if V8_TARGET_ARCH_S390X +#elif V8_TARGET_ARCH_S390X #define V8_TARGET_ARCH_64_BIT 1 -#else -#define V8_TARGET_ARCH_32_BIT 1 -#endif #elif V8_TARGET_ARCH_RISCV64 #define V8_TARGET_ARCH_64_BIT 1 #elif V8_TARGET_ARCH_RISCV32 @@ -985,8 +974,8 @@ V8 shared library set USING_V8_SHARED. #else #define V8_TARGET_LITTLE_ENDIAN 1 #endif -#elif V8_TARGET_ARCH_S390 -#if V8_TARGET_ARCH_S390_LE_SIM +#elif V8_TARGET_ARCH_S390X +#if V8_TARGET_ARCH_S390X_LE_SIM #define V8_TARGET_LITTLE_ENDIAN 1 #else #define V8_TARGET_BIG_ENDIAN 1 diff --git a/deps/v8/infra/mb/mb_config.pyl b/deps/v8/infra/mb/mb_config.pyl index ce26b4df0a1c91..d256f81e041778 100644 --- a/deps/v8/infra/mb/mb_config.pyl +++ b/deps/v8/infra/mb/mb_config.pyl @@ -72,7 +72,6 @@ 'V8 Linux64 - debug builder': 'debug_x64', 'V8 Linux64 - no leaptiering - debug builder': 'debug_x64_no_leaptiering', 'V8 Linux64 - no shared cage - debug builder': 'debug_x64_no_shared_cage', - 'V8 Linux64 - external code space - debug - builder': 'debug_x64_external_code_space', 'V8 Linux64 - custom snapshot - debug builder': 'debug_x64_custom', 'V8 Linux64 - internal snapshot - builder': 'release_x64_internal', 'V8 Linux64 - debug - header includes - builder': 'debug_x64_header_includes', @@ -118,7 +117,6 @@ # FYI. 'V8 iOS - sim - builder': 'release_x64_ios_simulator', 'V8 Linux64 - arm64 - builder': 'release_arm64', - 'V8 Linux64 - arm64 - no pointer compression - builder': 'release_arm64_no_pointer_compression', 'V8 Linux64 - arm64 - debug builder': 'debug_arm64', 'V8 Linux64 - arm64 - sim - no pointer compression - builder': 'release_simulate_arm64_no_pointer_compression', @@ -233,6 +231,7 @@ 'V8 Linux - arm64 - sim - builder': 'release_simulate_arm64_gcmole', 'V8 Linux - arm64 - sim - debug builder': 'debug_simulate_arm64', 'V8 Linux - arm64 - sim - gc stress - builder': 'debug_simulate_arm64', + 'V8 Linux64 - arm64 - no pointer compression - builder': 'release_arm64_no_pointer_compression', 'V8 Linux64 - arm64 - no wasm - debug builder': 'debug_arm64_webassembly_disabled', # Mips. 'V8 Linux - mips64el - sim - builder': 'release_simulate_mips64el', @@ -250,8 +249,9 @@ 'v8_android_arm_compile_rel': 'release_android_arm', 'v8_android_arm_verify_deterministic_dbg': 'debug_android_arm_verify_deterministic', 'v8_android_arm64_compile_dbg': 'debug_android_arm64', - 'v8_android_arm64_n5x_compile_rel': 'release_android_arm64', 'v8_android_arm64_d8_compile_rel': 'release_android_arm64', + 'v8_android_arm64_n5x_compile_rel': 'release_android_arm64', + 'v8_android_arm64_p7_compile_rel': 'release_android_arm64', 'v8_fuchsia_compile_rel': 'release_x64_fuchsia_trybot', 'v8_ios_simulator': 'release_x64_ios_simulator', 'v8_linux_compile_rel': 'release_x86_gcmole_trybot', @@ -281,7 +281,6 @@ 'v8_linux64_no_sandbox_compile_dbg': 'debug_x64_no_sandbox', 'v8_linux64_dict_tracking_compile_dbg': 'debug_x64_dict_tracking_trybot', 'v8_linux64_disable_runtime_call_stats_compile_rel': 'release_x64_disable_runtime_call_stats', - 'v8_linux64_external_code_space_compile_dbg': 'debug_x64_external_code_space', 'v8_linux64_css_compile_dbg': 'debug_x64_conservative_stack_scanning', 'v8_linux64_gc_stress_custom_snapshot_compile_dbg': 'debug_x64_trybot_custom', 'v8_linux64_gc_stress_compile_dbg': 'debug_x64_trybot', @@ -300,6 +299,7 @@ 'v8_linux64_no_sandbox_compile_rel': 'release_x64_no_sandbox', 'v8_linux64_official_compile_rel': 'official_x64_on_release_branch', 'v8_linux64_predictable_compile_rel': 'release_x64_predictable', + 'v8_linux64_pku_compile_dbg': 'debug_x64', 'v8_linux64_pku_compile_rel': 'release_x64', 'v8_linux64_shared_compile_rel': 'release_x64_shared_verify_heap', 'v8_linux64_single_generation_compile_dbg': 'debug_x64_single_generation', @@ -337,6 +337,7 @@ 'v8_win64_drumbrake_compile_dbg': 'debug_x64_drumbrake', 'v8_win64_msvc_compile_rel': 'release_x64_msvc', 'v8_win64_compile_rel': 'release_x64_trybot', + 'v8_win64_nodcheck_compile_rel': 'release_x64_minimal_symbols', 'v8_mac_arm64_compile_rel': 'release_arm64', 'v8_mac_arm64_compile_dbg': 'debug_arm64', 'v8_mac_arm64_full_compile_dbg': 'full_debug_arm64', @@ -358,6 +359,7 @@ 'v8_linux_arm64_compile_dbg': 'debug_simulate_arm64', 'v8_linux_arm64_gc_stress_compile_dbg': 'debug_simulate_arm64', 'v8_linux_mips64el_compile_rel': 'release_simulate_mips64el', + 'v8_numfuzz_asan_compile_rel': 'release_x64_asan_symbolized_verify_heap_turboshaft_csa', 'v8_numfuzz_compile_rel': 'release_x64', 'v8_numfuzz_compile_dbg': 'debug_x64', 'v8_numfuzz_tsan_compile_rel': 'release_x64_tsan', @@ -593,7 +595,7 @@ 'release_bot', 'x64', 'asan', 'dcheck_always_on', 'v8_enable_slow_dchecks', 'v8_verify_heap', 'v8_enable_turboshaft_csa'], 'release_x64_sandbox_testing_turboshaft_csa': [ - 'release_bot', 'x64', 'symbolized', 'v8_enable_memory_corruption_api', + 'release_bot', 'x64', 'symbolized', 'backtrace', 'v8_enable_memory_corruption_api', 'v8_enable_turboshaft_csa'], 'release_x64_asan_sandbox_testing_turboshaft_csa': [ 'release_bot', 'x64', 'asan', 'symbolized', @@ -700,8 +702,6 @@ 'debug_bot', 'x64', 'v8_snapshot_custom'], 'debug_x64_drumbrake': [ 'debug_bot', 'x64', 'v8_enable_drumbrake'], - 'debug_x64_external_code_space': [ - 'debug_bot', 'x64', 'external_code_space'], 'debug_x64_fuchsia': [ 'debug_bot', 'x64', 'fuchsia'], 'debug_x64_gcc': [ @@ -896,10 +896,6 @@ 'gn_args': 'chrome_pgo_phase=0', }, - 'external_code_space': { - 'gn_args': 'v8_enable_external_code_space=true', - }, - 'fuchsia': { 'gn_args': 'target_os="fuchsia"', }, @@ -922,7 +918,8 @@ }, 'ios_simulator': { - 'gn_args': 'target_cpu="x64" target_os="ios" use_blink=true', + 'gn_args': 'target_cpu="x64" target_os="ios" ' + 'target_environment="simulator" use_blink=true', }, 'lld': { @@ -980,6 +977,10 @@ 'gn_args': 'is_debug=false dcheck_always_on=false', }, + 'backtrace': { + 'gn_args': 'v8_enable_backtrace=true', + }, + 'release_bot': { 'mixins': ['release', 'static', 'reclient', 'v8_enable_google_benchmark'], }, @@ -1082,7 +1083,7 @@ }, 'v8_disable_leaptiering': { - 'gn_args': 'v8_disable_leaptiering=true', + 'gn_args': 'v8_enable_leaptiering=false v8_enable_sandbox=false', }, 'v8_disable_runtime_call_stats': { diff --git a/deps/v8/infra/testing/builders.pyl b/deps/v8/infra/testing/builders.pyl index 1afe45582fefbb..088abd3d3faa85 100644 --- a/deps/v8/infra/testing/builders.pyl +++ b/deps/v8/infra/testing/builders.pyl @@ -44,22 +44,16 @@ {'name': 'v8testing', 'variant': 'default', 'shards': 4}, ], }, - ############################################################################## - # Fuchsia - 'v8_fuchsia_rel': { - 'swarming_dimensions' : { - 'os': 'Ubuntu-22.04', - }, - 'tests': [ - {'name': 'fuchsia-unittests'}, - ], - }, - 'V8 Fuchsia': { + 'v8_android_arm64_p7_rel': { 'swarming_dimensions' : { - 'os': 'Ubuntu-22.04', + 'device_os': 'AP2A.240705.004', + 'device_type': 'panther', + 'os': 'Android', }, 'tests': [ - {'name': 'fuchsia-unittests'}, + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262', 'variant': 'default', 'shards': 12}, + {'name': 'v8testing', 'variant': 'default', 'shards': 4}, ], }, ############################################################################## @@ -431,6 +425,7 @@ {'name': 'v8testing', 'shards': 5}, {'name': 'v8testing', 'variant': 'extra', 'shards': 5}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, {'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, {'name': 'v8testing', 'variant': 'stress_concurrent_allocation'}, @@ -444,7 +439,7 @@ {'name': 'benchmarks', 'variant': 'code_serializer', 'shards': 1}, {'name': 'd8testing', 'variant': 'code_serializer', 'shards': 1}, {'name': 'mozilla', 'variant': 'code_serializer', 'shards': 1}, - {'name': 'test262', 'variant': 'code_serializer', 'shards': 3}, + {'name': 'test262', 'variant': 'code_serializer', 'shards': 5}, # GC stress { 'name': 'd8testing', @@ -471,15 +466,6 @@ {'name': 'v8testing'}, ], }, - 'v8_linux64_external_code_space_dbg': { - 'swarming_dimensions' : { - 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-22.04', - }, - 'tests': [ - {'name': 'v8testing', 'shards': 3}, - ], - }, 'v8_linux64_fuzzilli_rel': { 'swarming_dimensions' : { 'os': 'Ubuntu-22.04', @@ -515,7 +501,7 @@ { 'name': 'mjsunit', 'test_args': ['--gc-stress', '--no-harness'], - 'shards': 3, + 'shards': 5, }, ], }, @@ -544,6 +530,12 @@ 'test_args': ['--gc-stress'], 'shards': 2 }, + { + 'name': 'mjsunit', + 'variant': 'stress_pinning_scavenger', + 'test_args': ['--gc-stress'], + 'shards': 2 + }, ], }, 'v8_linux64_gcc_rel': { @@ -611,6 +603,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_linux64_perfetto_dbg': { @@ -626,7 +619,7 @@ 'os': 'Ubuntu-22.04', }, 'tests': [ - {'name': 'v8testing', 'shards': 3}, + {'name': 'v8testing', 'shards': 5}, ], }, 'v8_linux64_no_shared_cage_dbg': { @@ -663,6 +656,16 @@ {'name': 'v8testing', 'shards': 2}, ], }, + 'v8_linux64_pku_dbg': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-22.04', + 'cpu': 'x86-64-avx2', + 'pool': 'v8.tests', + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default'}, + ], + }, 'v8_linux64_pku_rel': { 'swarming_dimensions' : { 'os': 'Ubuntu-22.04', @@ -708,12 +711,13 @@ {'name': 'benchmarks', 'shards': 1}, {'name': 'mozilla', 'shards': 1}, {'name': 'optimize_for_size'}, - {'name': 'test262', 'shards': 4}, - {'name': 'test262', 'variant': 'extra', 'shards': 4}, + {'name': 'test262', 'shards': 6}, + {'name': 'test262', 'variant': 'extra', 'shards': 6}, {'name': 'v8initializers'}, {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, {'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'slow_path'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, @@ -776,6 +780,7 @@ {'name': 'v8testing', 'variant': 'slow_path', 'shards': 2}, {'name': 'v8testing', 'variant': 'stress_concurrent_allocation', 'shards': 2}, {'name': 'v8testing', 'variant': 'minor_ms', 'shards': 2}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger', 'shards': 2}, ], }, 'v8_linux64_tsan_dbg': { @@ -956,6 +961,7 @@ {'name': 'v8testing', 'shards': 4}, {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_win64_drumbrake_dbg': { @@ -979,6 +985,20 @@ {'name': 'v8testing', 'shards': 2}, ], }, + 'v8_win64_nodcheck_rel': { + 'swarming_dimensions' : { + 'cpu': 'x86-64', + 'os': 'Windows-10-19045', + }, + 'tests': [ + {'name': 'mozilla'}, + {'name': 'test262', 'variant': 'default', 'shards': 2}, + {'name': 'v8testing', 'shards': 2}, + {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, + {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, + ], + }, 'v8_win64_rel': { 'swarming_dimensions' : { 'cpu': 'x86-64', @@ -990,6 +1010,7 @@ {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, ############################################################################## @@ -1014,6 +1035,7 @@ {'name': 'v8testing', 'shards': 6}, {'name': 'v8testing', 'variant': 'extra', 'shards': 6}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_mac_arm64_gc_stress_dbg': { @@ -1045,6 +1067,7 @@ {'name': 'v8testing', 'shards': 3}, {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_mac_arm64_rel': { @@ -1061,6 +1084,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_mac_arm64_dbg': { @@ -1077,6 +1101,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_mac_arm64_full_dbg': { @@ -1093,6 +1118,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'v8_mac_arm64_no_pointer_compression_dbg': { @@ -1394,6 +1420,7 @@ {'name': 'v8testing', 'variant': 'assert_types'}, {'name': 'v8testing', 'variant': 'extra'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, {'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, # Maglev -- move to extra once more architectures are supported. @@ -1497,6 +1524,7 @@ {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra', 'shards': 4}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, {'name': 'v8testing', 'variant': 'no_lfa'}, {'name': 'v8testing', 'variant': 'slow_path'}, {'name': 'v8testing', 'variant': 'stress_instruction_scheduling'}, @@ -1530,7 +1558,7 @@ {'name': 'benchmarks', 'variant': 'code_serializer', 'shards': 1}, {'name': 'd8testing', 'variant': 'code_serializer', 'shards': 1}, {'name': 'mozilla', 'variant': 'code_serializer', 'shards': 1}, - {'name': 'test262', 'variant': 'code_serializer', 'shards': 2}, + {'name': 'test262', 'variant': 'code_serializer', 'shards': 3}, ], }, 'V8 Linux64 - minor mc - debug': { @@ -1608,15 +1636,6 @@ {'name': 'v8testing', 'shards': 3}, ], }, - 'V8 Linux64 - external code space - debug': { - 'swarming_dimensions' : { - 'cpu': 'x86-64-avx2', - 'os': 'Ubuntu-22.04', - }, - 'tests': [ - {'name': 'v8testing', 'shards': 3}, - ], - }, 'V8 Linux64 - fyi': { 'swarming_dimensions' : { 'os': 'Ubuntu-22.04', @@ -1647,6 +1666,16 @@ {'name': 'v8testing', 'variant': 'default'}, ], }, + 'V8 Linux64 - PKU - debug': { + 'swarming_dimensions' : { + 'os': 'Ubuntu-22.04', + 'cpu': 'x86-64-avx2', + 'pool': 'v8.tests', + }, + 'tests': [ + {'name': 'v8testing', 'variant': 'default'}, + ], + }, 'V8 Linux64 gcc': { 'swarming_dimensions' : { 'os': 'Ubuntu-20.04', @@ -1692,6 +1721,12 @@ 'test_args': ['--gc-stress'], 'shards': 2 }, + { + 'name': 'mjsunit', + 'variant': 'stress_pinning_scavenger', + 'test_args': ['--gc-stress'], + 'shards': 2 + }, ], }, 'V8 Linux64 - internal snapshot': { @@ -1707,7 +1742,7 @@ 'os': 'Ubuntu-22.04', }, 'tests': [ - {'name': 'v8testing', 'shards': 2}, + {'name': 'v8testing', 'shards': 5}, ], }, 'V8 Linux64 - no shared cage - debug': { @@ -1815,7 +1850,7 @@ { 'name': 'mjsunit', 'test_args': ['--gc-stress', '--no-harness'], - 'shards': 3, + 'shards': 5, }, ], }, @@ -1840,6 +1875,7 @@ {'name': 'v8testing', 'variant': 'slow_path', 'shards': 2}, {'name': 'v8testing', 'variant': 'stress_concurrent_allocation', 'shards': 2}, {'name': 'v8testing', 'variant': 'minor_ms', 'shards': 2}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger', 'shards': 2}, ], }, 'V8 Linux64 TSAN - debug': { @@ -1926,6 +1962,7 @@ {'name': 'v8testing', 'shards': 3}, {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Mac64 - debug': { @@ -1939,6 +1976,7 @@ {'name': 'v8testing', 'shards': 6}, {'name': 'v8testing', 'variant': 'extra', 'shards': 6}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Mac64 ASAN': { @@ -1974,6 +2012,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Mac - arm64 - release': { @@ -1991,6 +2030,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Mac - arm64 - debug': { @@ -2008,6 +2048,7 @@ {'name': 'v8testing', 'variant': 'stress_maglev'}, {'name': 'v8testing', 'variant': 'stress_maglev_future'}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Mac - arm64 - no pointer compression debug': { @@ -2061,6 +2102,7 @@ {'name': 'v8testing', 'shards': 2}, {'name': 'v8testing', 'variant': 'extra', 'shards': 2}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Win64 - debug': { @@ -2073,6 +2115,7 @@ {'name': 'v8testing', 'shards': 4}, {'name': 'v8testing', 'variant': 'extra', 'shards': 3}, {'name': 'v8testing', 'variant': 'minor_ms'}, + {'name': 'v8testing', 'variant': 'stress_pinning_scavenger'}, ], }, 'V8 Win64 - drumbrake - debug': { @@ -2130,6 +2173,18 @@ {'name': 'v8testing', 'variant': 'default', 'shards': 4}, ], }, + 'V8 Android Arm64 - P7': { + 'swarming_dimensions': { + 'device_os': 'AP2A.240705.004', + 'device_type': 'panther', + 'os': 'Android', + }, + 'tests': [ + {'name': 'mozilla', 'variant': 'default'}, + {'name': 'test262', 'variant': 'default', 'shards': 12}, + {'name': 'v8testing', 'variant': 'default', 'shards': 4}, + ], + }, 'V8 Linux - arm - sim': { 'swarming_dimensions': { 'os': 'Ubuntu-22.04', @@ -2442,6 +2497,66 @@ }, ], }, + 'V8 NumFuzz - ASAN': { + 'swarming_dimensions': { + 'os': 'Ubuntu-22.04', + }, + 'swarming_task_attrs': { + 'expiration': 13800, + 'hard_timeout': 4200, + 'priority': 35, + }, + 'tests': [ + {'name': 'd8testing_random_gc', 'shards': 2}, + { + 'name': 'numfuzz', + 'suffix': 'marking', + 'test_args': ['--total-timeout-sec=2100', '--stress-marking=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'delay', + 'test_args': ['--total-timeout-sec=2100', '--stress-delay-tasks=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'interrupt', + 'test_args': ['--total-timeout-sec=2100', '--stress-interrupt-budget=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'threads', + 'test_args': ['--total-timeout-sec=2100', '--stress-thread-pool-size=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'stack', + 'test_args': ['--total-timeout-sec=2100', '--stress-stack-size=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'combined', + 'test_args': [ + '--total-timeout-sec=2100', + '--stress-delay-tasks=4', + '--stress-deopt=2', + '--stress-compaction=2', + '--stress-gc=4', + '--stress-marking=4', + '--stress-scavenge=4', + '--stress-thread-pool-size=2', + '--stress-stack-size=1', + '--stress-interrupt-budget=1', + ], + 'shards': 4 + }, + { + 'name': 'numfuzz', + 'suffix': 'scavenge', + 'test_args': ['--total-timeout-sec=2100', '--stress-scavenge=1'] + }, + ], + }, 'V8 NumFuzz - TSAN': { 'swarming_dimensions': { 'os': 'Ubuntu-22.04', @@ -2586,6 +2701,59 @@ }, ], }, + 'v8_numfuzz_asan_rel': { + 'swarming_dimensions': { + 'os': 'Ubuntu-22.04', + }, + 'tests': [ + { + 'name': 'numfuzz', + 'suffix': 'marking', + 'test_args': ['--total-timeout-sec=900', '--stress-marking=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'delay', + 'test_args': ['--total-timeout-sec=900', '--stress-delay-tasks=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'interrupt', + 'test_args': ['--total-timeout-sec=900', '--stress-interrupt-budget=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'threads', + 'test_args': ['--total-timeout-sec=900', '--stress-thread-pool-size=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'stack', + 'test_args': ['--total-timeout-sec=900', '--stress-stack-size=1'] + }, + { + 'name': 'numfuzz', + 'suffix': 'combined', + 'test_args': [ + '--total-timeout-sec=900', + '--stress-delay-tasks=4', + '--stress-deopt=2', + '--stress-compaction=2', + '--stress-gc=4', + '--stress-marking=4', + '--stress-scavenge=4', + '--stress-thread-pool-size=2', + '--stress-stack-size=1', + '--stress-interrupt-budget=1', + ], + }, + { + 'name': 'numfuzz', + 'suffix': 'scavenge', + 'test_args': ['--total-timeout-sec=900', '--stress-scavenge=1'] + }, + ], + }, 'v8_numfuzz_tsan_rel': { 'swarming_dimensions': { 'os': 'Ubuntu-22.04', diff --git a/deps/v8/pyrightconfig.json b/deps/v8/pyrightconfig.json new file mode 100644 index 00000000000000..eac5d8f4376896 --- /dev/null +++ b/deps/v8/pyrightconfig.json @@ -0,0 +1,4 @@ +{ + "include": ["tools"], + "exclude": ["tools/gcmole/bootstrap"] +} diff --git a/deps/v8/src/DEPS b/deps/v8/src/DEPS index 8cd950b5d1f5ea..b4ebd621f95769 100644 --- a/deps/v8/src/DEPS +++ b/deps/v8/src/DEPS @@ -16,8 +16,10 @@ include_rules = [ "+src/compiler/wasm-compiler.h", "-src/flags/flags-impl.h", "-src/heap", + "+src/heap/memory-chunk-constants.h", "+src/heap/memory-chunk-metadata.h", "+src/heap/code-range.h", + "+src/heap/read-only-spaces.h", "+src/heap/trusted-range.h", "+src/heap/combined-heap.h", "+src/heap/factory.h", @@ -29,6 +31,8 @@ include_rules = [ "+src/heap/heap.h", "+src/heap/heap-verifier.h", "+src/heap/heap-inl.h", + "+src/heap/heap-layout-inl.h", + "+src/heap/heap-layout.h", "+src/heap/heap-write-barrier-inl.h", "+src/heap/heap-write-barrier.h", "+src/heap/local-factory-inl.h", @@ -50,6 +54,7 @@ include_rules = [ "+src/heap/safepoint.h", "+src/heap/base/stack.h", "+src/heap/conservative-stack-visitor.h", + "+src/heap/visit-object.h", "-src/inspector", "-src/interpreter", "+src/interpreter/bytecode-array-iterator.h", @@ -67,6 +72,7 @@ include_rules = [ "-src/regexp", "+src/regexp/regexp.h", "+src/regexp/regexp-flags.h", + "+src/regexp/regexp-result-vector.h", "+src/regexp/regexp-stack.h", "+src/regexp/regexp-utils.h", "+src/tracing/trace-event-no-perfetto.h", @@ -121,6 +127,9 @@ specific_include_rules = { "+src/heap/factory-base.h", "+src/heap/local-factory.h", ], + "setup-builtins-internal\.cc": [ + "+src/compiler/pipeline.h", + ], "snapshot\.cc": [ "+src/heap/read-only-promotion.h", ], diff --git a/deps/v8/src/api/DIR_METADATA b/deps/v8/src/api/DIR_METADATA index a27ea1b53a3f53..d65ff2a39e5763 100644 --- a/deps/v8/src/api/DIR_METADATA +++ b/deps/v8/src/api/DIR_METADATA @@ -8,4 +8,7 @@ monorail { component: "Blink>JavaScript>API" -} \ No newline at end of file +} +buganizer_public: { + component_id: 1456124 +} diff --git a/deps/v8/src/api/api-arguments-inl.h b/deps/v8/src/api/api-arguments-inl.h index 651c13dcf2caf5..ba68bad4dd99c3 100644 --- a/deps/v8/src/api/api-arguments-inl.h +++ b/deps/v8/src/api/api-arguments-inl.h @@ -150,7 +150,7 @@ Maybe PropertyCallbackArguments::GetBooleanReturnValue( // Named Interceptor callbacks. Handle PropertyCallbackArguments::CallNamedEnumerator( - Handle interceptor) { + DirectHandle interceptor) { DCHECK(interceptor->is_named()); RCS_SCOPE(isolate(), RuntimeCallCounterId::kNamedEnumeratorCallback); return CallPropertyEnumerator(interceptor); @@ -158,7 +158,7 @@ Handle PropertyCallbackArguments::CallNamedEnumerator( // TODO(ishell): return std::optional. Handle PropertyCallbackArguments::CallNamedQuery( - Handle interceptor, Handle name) { + DirectHandle interceptor, DirectHandle name) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedQueryCallback); @@ -175,7 +175,7 @@ Handle PropertyCallbackArguments::CallNamedQuery( } Handle PropertyCallbackArguments::CallNamedGetter( - Handle interceptor, Handle name) { + DirectHandle interceptor, DirectHandle name) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedGetterCallback); @@ -192,7 +192,7 @@ Handle PropertyCallbackArguments::CallNamedGetter( } Handle PropertyCallbackArguments::CallNamedDescriptor( - Handle interceptor, Handle name) { + DirectHandle interceptor, DirectHandle name) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedDescriptorCallback); @@ -210,8 +210,8 @@ Handle PropertyCallbackArguments::CallNamedDescriptor( } v8::Intercepted PropertyCallbackArguments::CallNamedSetter( - DirectHandle interceptor, Handle name, - Handle value) { + DirectHandle interceptor, DirectHandle name, + DirectHandle value) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedSetterCallback); @@ -220,7 +220,7 @@ v8::Intercepted PropertyCallbackArguments::CallNamedSetter( NamedPropertySetterCallback f = ToCData( isolate, interceptor->setter()); - Handle has_side_effects; + DirectHandle has_side_effects; PREPARE_CALLBACK_INFO_INTERCEPTOR(isolate, f, void, has_side_effects, ExceptionContext::kNamedSetter); v8::Intercepted intercepted = @@ -229,7 +229,7 @@ v8::Intercepted PropertyCallbackArguments::CallNamedSetter( } v8::Intercepted PropertyCallbackArguments::CallNamedDefiner( - DirectHandle interceptor, Handle name, + DirectHandle interceptor, DirectHandle name, const v8::PropertyDescriptor& desc) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); @@ -239,7 +239,7 @@ v8::Intercepted PropertyCallbackArguments::CallNamedDefiner( NamedPropertyDefinerCallback f = ToCData( isolate, interceptor->definer()); - Handle has_side_effects; + DirectHandle has_side_effects; PREPARE_CALLBACK_INFO_INTERCEPTOR(isolate, f, void, has_side_effects, ExceptionContext::kNamedDefiner); v8::Intercepted intercepted = @@ -248,7 +248,7 @@ v8::Intercepted PropertyCallbackArguments::CallNamedDefiner( } v8::Intercepted PropertyCallbackArguments::CallNamedDeleter( - DirectHandle interceptor, Handle name) { + DirectHandle interceptor, DirectHandle name) { DCHECK_NAME_COMPATIBLE(interceptor, name); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedDeleterCallback); @@ -257,7 +257,7 @@ v8::Intercepted PropertyCallbackArguments::CallNamedDeleter( NamedPropertyDeleterCallback f = ToCData( isolate, interceptor->deleter()); - Handle has_side_effects; + DirectHandle has_side_effects; PREPARE_CALLBACK_INFO_INTERCEPTOR(isolate, f, v8::Boolean, has_side_effects, ExceptionContext::kNamedDeleter); v8::Intercepted intercepted = f(v8::Utils::ToLocal(name), callback_info); @@ -268,7 +268,7 @@ v8::Intercepted PropertyCallbackArguments::CallNamedDeleter( // Indexed Interceptor callbacks. Handle PropertyCallbackArguments::CallIndexedEnumerator( - Handle interceptor) { + DirectHandle interceptor) { DCHECK(!interceptor->is_named()); RCS_SCOPE(isolate(), RuntimeCallCounterId::kIndexedEnumeratorCallback); return CallPropertyEnumerator(interceptor); @@ -276,7 +276,7 @@ Handle PropertyCallbackArguments::CallIndexedEnumerator( // TODO(ishell): return std::optional. Handle PropertyCallbackArguments::CallIndexedQuery( - Handle interceptor, uint32_t index) { + DirectHandle interceptor, uint32_t index) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedQueryCallback); @@ -295,7 +295,7 @@ Handle PropertyCallbackArguments::CallIndexedQuery( } Handle PropertyCallbackArguments::CallIndexedGetter( - Handle interceptor, uint32_t index) { + DirectHandle interceptor, uint32_t index) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kNamedGetterCallback); @@ -314,7 +314,7 @@ Handle PropertyCallbackArguments::CallIndexedGetter( } Handle PropertyCallbackArguments::CallIndexedDescriptor( - Handle interceptor, uint32_t index) { + DirectHandle interceptor, uint32_t index) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedDescriptorCallback); @@ -334,7 +334,7 @@ Handle PropertyCallbackArguments::CallIndexedDescriptor( v8::Intercepted PropertyCallbackArguments::CallIndexedSetter( DirectHandle interceptor, uint32_t index, - Handle value) { + DirectHandle value) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedSetterCallback); @@ -345,7 +345,7 @@ v8::Intercepted PropertyCallbackArguments::CallIndexedSetter( ToCData(isolate, interceptor->setter()); - Handle has_side_effects; + DirectHandle has_side_effects; PREPARE_CALLBACK_INFO_INTERCEPTOR(isolate, f, void, has_side_effects, ExceptionContext::kIndexedSetter); v8::Intercepted intercepted = @@ -366,7 +366,7 @@ v8::Intercepted PropertyCallbackArguments::CallIndexedDefiner( ToCData(isolate, interceptor->definer()); - Handle has_side_effects; + DirectHandle has_side_effects; PREPARE_CALLBACK_INFO_INTERCEPTOR(isolate, f, void, has_side_effects, ExceptionContext::kIndexedDefiner); v8::Intercepted intercepted = f(index, desc, callback_info); @@ -374,7 +374,7 @@ v8::Intercepted PropertyCallbackArguments::CallIndexedDefiner( } v8::Intercepted PropertyCallbackArguments::CallIndexedDeleter( - Handle interceptor, uint32_t index) { + DirectHandle interceptor, uint32_t index) { DCHECK(!interceptor->is_named()); Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kIndexedDeleterCallback); @@ -392,7 +392,7 @@ v8::Intercepted PropertyCallbackArguments::CallIndexedDeleter( } Handle PropertyCallbackArguments::CallPropertyEnumerator( - Handle interceptor) { + DirectHandle interceptor) { // Named and indexed enumerator callbacks have same signatures. static_assert(std::is_same::value); @@ -419,7 +419,7 @@ Handle PropertyCallbackArguments::CallPropertyEnumerator( // Accessors Handle PropertyCallbackArguments::CallAccessorGetter( - DirectHandle info, Handle name) { + DirectHandle info, DirectHandle name) { Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kAccessorGetterCallback); // Unlike interceptor callbacks we know that the property exists, so @@ -430,16 +430,16 @@ Handle PropertyCallbackArguments::CallAccessorGetter( slot_at(kReturnValueIndex).store(ReadOnlyRoots(isolate).undefined_value()); AccessorNameGetterCallback f = reinterpret_cast(info->getter(isolate)); - PREPARE_CALLBACK_INFO_ACCESSOR(isolate, f, v8::Value, info, - handle(receiver(), isolate), ACCESSOR_GETTER, - ExceptionContext::kAttributeGet); + PREPARE_CALLBACK_INFO_ACCESSOR( + isolate, f, v8::Value, info, direct_handle(receiver(), isolate), + ACCESSOR_GETTER, ExceptionContext::kAttributeGet); f(v8::Utils::ToLocal(name), callback_info); return GetReturnValue(isolate); } bool PropertyCallbackArguments::CallAccessorSetter( - DirectHandle accessor_info, Handle name, - Handle value) { + DirectHandle accessor_info, DirectHandle name, + DirectHandle value) { Isolate* isolate = this->isolate(); RCS_SCOPE(isolate, RuntimeCallCounterId::kAccessorSetterCallback); // Unlike interceptor callbacks we know that the property exists, so @@ -459,9 +459,9 @@ bool PropertyCallbackArguments::CallAccessorSetter( // the result of [[Set]] operation according to JavaScript semantics. AccessorNameSetterCallback f = reinterpret_cast( accessor_info->setter(isolate)); - PREPARE_CALLBACK_INFO_ACCESSOR(isolate, f, void, accessor_info, - handle(receiver(), isolate), ACCESSOR_SETTER, - ExceptionContext::kAttributeSet); + PREPARE_CALLBACK_INFO_ACCESSOR( + isolate, f, void, accessor_info, direct_handle(receiver(), isolate), + ACCESSOR_SETTER, ExceptionContext::kAttributeSet); f(v8::Utils::ToLocal(name), v8::Utils::ToLocal(value), callback_info); // Historically, in case of v8::AccessorNameSetterCallback it wasn't allowed // to set the result and not setting the result was treated as successful diff --git a/deps/v8/src/api/api-arguments.h b/deps/v8/src/api/api-arguments.h index 22f583585edf6c..38b4915f43b61a 100644 --- a/deps/v8/src/api/api-arguments.h +++ b/deps/v8/src/api/api-arguments.h @@ -105,52 +105,53 @@ class PropertyCallbackArguments final // In case of exception empty handle is returned. // TODO(ishell, 328490288): stop returning empty handles. inline Handle CallAccessorGetter(DirectHandle info, - Handle name); + DirectHandle name); // Returns the result of [[Set]] operation or throws an exception. V8_WARN_UNUSED_RESULT inline bool CallAccessorSetter(DirectHandle info, - Handle name, Handle value); + DirectHandle name, + DirectHandle value); // ------------------------------------------------------------------------- // Named Interceptor Callbacks // Empty handle means that the request was not intercepted. // Pending exception handling should be done by the caller. - inline Handle CallNamedQuery(Handle interceptor, - Handle name); - inline Handle CallNamedGetter(Handle interceptor, - Handle name); + inline Handle CallNamedQuery( + DirectHandle interceptor, DirectHandle name); + inline Handle CallNamedGetter( + DirectHandle interceptor, DirectHandle name); // Calls Setter/Definer/Deleter callback and returns whether the request // was intercepted. // Pending exception handling and interpretation of the result should be // done by the caller using GetBooleanReturnValue(..). inline v8::Intercepted CallNamedSetter( - DirectHandle interceptor, Handle name, - Handle value); + DirectHandle interceptor, DirectHandle name, + DirectHandle value); inline v8::Intercepted CallNamedDefiner( - DirectHandle interceptor, Handle name, + DirectHandle interceptor, DirectHandle name, const v8::PropertyDescriptor& desc); inline v8::Intercepted CallNamedDeleter( - DirectHandle interceptor, Handle name); + DirectHandle interceptor, DirectHandle name); // Empty handle means that the request was not intercepted. // Pending exception handling should be done by the caller. - inline Handle CallNamedDescriptor(Handle interceptor, - Handle name); + inline Handle CallNamedDescriptor( + DirectHandle interceptor, DirectHandle name); // Returns JSArray-like object with property names or undefined. inline Handle CallNamedEnumerator( - Handle interceptor); + DirectHandle interceptor); // ------------------------------------------------------------------------- // Indexed Interceptor Callbacks // Empty handle means that the request was not intercepted. // Pending exception handling should be done by the caller. - inline Handle CallIndexedQuery(Handle interceptor, - uint32_t index); - inline Handle CallIndexedGetter(Handle interceptor, - uint32_t index); + inline Handle CallIndexedQuery( + DirectHandle interceptor, uint32_t index); + inline Handle CallIndexedGetter( + DirectHandle interceptor, uint32_t index); // Calls Setter/Definer/Deleter callback and returns whether the request // was intercepted. @@ -158,20 +159,20 @@ class PropertyCallbackArguments final // done by the caller using GetBooleanReturnValue(..). inline v8::Intercepted CallIndexedSetter( DirectHandle interceptor, uint32_t index, - Handle value); + DirectHandle value); inline v8::Intercepted CallIndexedDefiner( DirectHandle interceptor, uint32_t index, const v8::PropertyDescriptor& desc); - inline v8::Intercepted CallIndexedDeleter(Handle interceptor, - uint32_t index); + inline v8::Intercepted CallIndexedDeleter( + DirectHandle interceptor, uint32_t index); // Empty handle means that the request was not intercepted. // Pending exception handling should be done by the caller. inline Handle CallIndexedDescriptor( - Handle interceptor, uint32_t index); + DirectHandle interceptor, uint32_t index); // Returns JSArray-like object with property names or undefined. inline Handle CallIndexedEnumerator( - Handle interceptor); + DirectHandle interceptor); // Accept potential JavaScript side effects that might occur during life // time of this object. @@ -233,7 +234,7 @@ class PropertyCallbackArguments final private: // Returns JSArray-like object with property names or undefined. inline Handle CallPropertyEnumerator( - Handle interceptor); + DirectHandle interceptor); inline Tagged holder() const; inline Tagged receiver() const; @@ -264,7 +265,7 @@ class FunctionCallbackArguments static constexpr int kTargetIndex = T::kTargetIndex; static constexpr int kNewTargetIndex = T::kNewTargetIndex; - static_assert(T::kThisValuesIndex == BuiltinArguments::kReceiverArgsOffset); + static_assert(T::kThisValuesIndex == BuiltinArguments::kReceiverArgsIndex); static constexpr int kSize = T::kSize; static constexpr int kImplicitArgsOffset = T::kImplicitArgsOffset; @@ -309,7 +310,7 @@ class FunctionCallbackArguments }; static_assert(BuiltinArguments::kNumExtraArgs == - BuiltinExitFrameConstants::kNumExtraArgsWithoutReceiver); + BuiltinExitFrameConstants::kNumExtraArgs); static_assert(BuiltinArguments::kNumExtraArgsWithReceiver == BuiltinExitFrameConstants::kNumExtraArgsWithReceiver); diff --git a/deps/v8/src/api/api-inl.h b/deps/v8/src/api/api-inl.h index 32e3e476826de3..f4637098010ce7 100644 --- a/deps/v8/src/api/api-inl.h +++ b/deps/v8/src/api/api-inl.h @@ -60,16 +60,18 @@ inline Local Utils::Convert(v8::internal::DirectHandle obj) { if (obj.is_null()) return Local(); return Local::FromAddress(obj.address()); #else - return Local::FromSlot(obj.location()); + // This simply uses the location of the indirect handle wrapped inside a + // "fake" direct handle. + return Local::FromSlot(indirect_handle(obj).location()); #endif } // Implementations of ToLocal -#define MAKE_TO_LOCAL(Name) \ - template