Skip to content

Commit a8a0667

Browse files
committed
Update V8 to 5945e1ccd0
1 parent d29e988 commit a8a0667

File tree

113 files changed

+3269
-2768
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

113 files changed

+3269
-2768
lines changed

deps/v8/BUILD.gn

Lines changed: 64 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ declare_args() {
7070

7171
# Enable embedded builtins.
7272
# TODO(jgruber,v8:6666): Support ia32 and maybe MSVC.
73-
v8_enable_embedded_builtins = v8_current_cpu != "x86" && (!is_win || is_clang)
73+
# TODO(jgruber,v8:6666): Re-enable.
74+
v8_enable_embedded_builtins = false
7475

7576
# Enable code-generation-time checking of types in the CodeStubAssembler.
7677
v8_enable_verify_csa = false
@@ -841,6 +842,18 @@ action("postmortem-metadata") {
841842
rebase_path(sources, root_build_dir)
842843
}
843844

845+
torque_files = [
846+
"src/builtins/base.tq",
847+
"src/builtins/array.tq",
848+
"src/builtins/typed-array.tq",
849+
]
850+
851+
torque_modules = [
852+
"base",
853+
"array",
854+
"typed-array",
855+
]
856+
844857
action("run_torque") {
845858
visibility = [
846859
":*",
@@ -862,32 +875,61 @@ action("run_torque") {
862875

863876
script = "tools/run.py"
864877

865-
inputs = [
866-
"src/builtins/base.tq",
867-
"src/builtins/array.tq",
868-
"src/builtins/typed-array.tq",
869-
]
878+
sources = torque_files
870879

871880
outputs = [
872-
"$target_gen_dir/builtin-definitions-from-dsl.h",
873-
"$target_gen_dir/builtins-array-from-dsl-gen.cc",
874-
"$target_gen_dir/builtins-array-from-dsl-gen.h",
875-
"$target_gen_dir/builtins-base-from-dsl-gen.cc",
876-
"$target_gen_dir/builtins-base-from-dsl-gen.h",
877-
"$target_gen_dir/builtins-typed-array-from-dsl-gen.cc",
878-
"$target_gen_dir/builtins-typed-array-from-dsl-gen.h",
881+
"$target_gen_dir/torque-generated/builtin-definitions-from-dsl.h",
879882
]
883+
foreach(module, torque_modules) {
884+
outputs += [
885+
"$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.cc",
886+
"$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.h",
887+
]
888+
}
880889

881890
args = [
882891
"./" + rebase_path(get_label_info(":torque($v8_torque_toolchain)",
883892
"root_out_dir") + "/torque",
884893
root_build_dir),
885894
"-o",
886-
rebase_path("$target_gen_dir", root_build_dir),
887-
rebase_path("src/builtins/base.tq", root_build_dir),
888-
rebase_path("src/builtins/array.tq", root_build_dir),
889-
rebase_path("src/builtins/typed-array.tq", root_build_dir),
895+
rebase_path("$target_gen_dir/torque-generated", root_build_dir),
896+
]
897+
898+
foreach(file, torque_files) {
899+
args += [ rebase_path(file, root_build_dir) ]
900+
}
901+
}
902+
903+
v8_source_set("torque_generated_core") {
904+
visibility = [ ":*" ] # Only targets in this file can depend on this.
905+
906+
deps = [
907+
":run_torque",
908+
]
909+
910+
sources = [
911+
"$target_gen_dir/torque-generated/builtin-definitions-from-dsl.h",
912+
]
913+
914+
configs = [ ":internal_config" ]
915+
}
916+
917+
v8_source_set("torque_generated_initializers") {
918+
visibility = [ ":*" ] # Only targets in this file can depend on this.
919+
920+
deps = [
921+
":run_torque",
890922
]
923+
924+
sources = []
925+
foreach(module, torque_modules) {
926+
sources += [
927+
"$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.cc",
928+
"$target_gen_dir/torque-generated/builtins-$module-from-dsl-gen.h",
929+
]
930+
}
931+
932+
configs = [ ":internal_config" ]
891933
}
892934

893935
# Template to generate different V8 snapshots based on different runtime flags.
@@ -1199,15 +1241,11 @@ v8_source_set("v8_initializers") {
11991241
]
12001242

12011243
deps = [
1202-
":run_torque",
1244+
":torque_generated_initializers",
12031245
":v8_base",
12041246
]
12051247

12061248
sources = [
1207-
"$target_gen_dir/builtins-array-from-dsl-gen.cc",
1208-
"$target_gen_dir/builtins-base-from-dsl-gen.cc",
1209-
"$target_gen_dir/builtins-typed-array-from-dsl-gen.cc",
1210-
12111249
### gcmole(all) ###
12121250
"src/builtins/builtins-arguments-gen.cc",
12131251
"src/builtins/builtins-arguments-gen.h",
@@ -1388,7 +1426,6 @@ v8_source_set("v8_base") {
13881426
split_count = 2
13891427

13901428
sources = [
1391-
"$target_gen_dir/builtin-definitions-from-dsl.h",
13921429
"//base/trace_event/common/trace_event_common.h",
13931430

13941431
### gcmole(all) ###
@@ -1415,6 +1452,7 @@ v8_source_set("v8_base") {
14151452
"src/api.h",
14161453
"src/arguments.cc",
14171454
"src/arguments.h",
1455+
"src/asan.h",
14181456
"src/asmjs/asm-js.cc",
14191457
"src/asmjs/asm-js.h",
14201458
"src/asmjs/asm-names.h",
@@ -2698,7 +2736,7 @@ v8_source_set("v8_base") {
26982736

26992737
defines = []
27002738
deps = [
2701-
":run_torque",
2739+
":torque_generated_core",
27022740
":v8_headers",
27032741
":v8_libbase",
27042742
":v8_libsampler",
@@ -3449,7 +3487,7 @@ v8_source_set("wasm_module_runner") {
34493487
]
34503488

34513489
deps = [
3452-
":run_torque",
3490+
":torque_generated_core",
34533491
]
34543492

34553493
configs = [
@@ -3526,7 +3564,7 @@ v8_source_set("lib_wasm_fuzzer_common") {
35263564
]
35273565

35283566
deps = [
3529-
":run_torque",
3567+
":torque_generated_core",
35303568
]
35313569

35323570
configs = [

deps/v8/include/v8.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4272,8 +4272,6 @@ class V8_EXPORT WasmModuleObjectBuilderStreaming final {
42724272
~WasmModuleObjectBuilderStreaming();
42734273

42744274
private:
4275-
typedef std::pair<std::unique_ptr<const uint8_t[]>, size_t> Buffer;
4276-
42774275
WasmModuleObjectBuilderStreaming(const WasmModuleObjectBuilderStreaming&) =
42784276
delete;
42794277
WasmModuleObjectBuilderStreaming(WasmModuleObjectBuilderStreaming&&) =
@@ -4296,8 +4294,6 @@ class V8_EXPORT WasmModuleObjectBuilderStreaming final {
42964294
#else
42974295
Persistent<Promise> promise_;
42984296
#endif
4299-
std::vector<Buffer> received_buffers_;
4300-
size_t total_size_ = 0;
43014297
std::shared_ptr<internal::wasm::StreamingDecoder> streaming_decoder_;
43024298
};
43034299

deps/v8/infra/mb/mb_config.pyl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,8 @@
417417
'release_x64_gcc_coverage': [
418418
'release_bot', 'x64', 'coverage', 'gcc'],
419419
'release_x64_internal': [
420-
'release_bot', 'x64', 'v8_snapshot_internal'],
420+
'release_bot', 'x64', 'v8_enable_embedded_builtins',
421+
'v8_snapshot_internal'],
421422
'release_x64_jumbo': [
422423
'release_bot', 'x64', 'jumbo'],
423424
'release_x64_jumbo_trybot': [
@@ -451,7 +452,7 @@
451452
'release_bot', 'x64', 'ubsan_vptr', 'minimal_symbols'],
452453
'release_x64_verify_csa': [
453454
'release_bot', 'x64', 'dcheck_always_on',
454-
'v8_enable_slow_dchecks', 'v8_verify_csa'],
455+
'v8_enable_slow_dchecks', 'v8_enable_embedded_builtins', 'v8_verify_csa'],
455456

456457
# Debug configs for x64.
457458
'debug_x64': [
@@ -758,6 +759,10 @@
758759
'gn_args': 'v8_correctness_fuzzer=true v8_multi_arch_build=true',
759760
},
760761

762+
'v8_enable_embedded_builtins': {
763+
'gn_args': 'v8_enable_embedded_builtins=true',
764+
},
765+
761766
'v8_enable_slow_dchecks': {
762767
'gn_args': 'v8_enable_slow_dchecks=true',
763768
},

deps/v8/src/DEPS

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ include_rules = [
2727
"+src/trap-handler/trap-handler.h",
2828
"+testing/gtest/include/gtest/gtest_prod.h",
2929
"-src/libplatform",
30-
"-include/libplatform"
30+
"-include/libplatform",
31+
"+torque-generated"
3132
]
3233

3334
specific_include_rules = {

deps/v8/src/api.cc

Lines changed: 16 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
#include "src/api.h"
66

77
#include <string.h> // For memcpy, strlen.
8-
#ifdef V8_USE_ADDRESS_SANITIZER
9-
#include <sanitizer/asan_interface.h>
10-
#endif // V8_USE_ADDRESS_SANITIZER
11-
#include <cmath> // For isnan.
8+
#include <cmath> // For isnan.
129
#include <limits>
1310
#include <vector>
1411
#include "include/v8-profiler.h"
@@ -740,6 +737,8 @@ StartupData SnapshotCreator::CreateBlob(
740737
i::GarbageCollectionReason::kSnapshotCreator);
741738
isolate->heap()->CompactFixedArraysOfWeakCells();
742739

740+
isolate->heap()->read_only_space()->ClearStringPaddingIfNeeded();
741+
743742
i::DisallowHeapAllocation no_gc_from_here_on;
744743

745744
int num_contexts = num_additional_contexts + 1;
@@ -6768,8 +6767,9 @@ bool v8::String::CanMakeExternal() {
67686767
if (obj->IsExternalString()) return false;
67696768

67706769
// Old space strings should be externalized.
6771-
i::Isolate* isolate = obj->GetIsolate();
6772-
return !isolate->heap()->new_space()->Contains(*obj);
6770+
i::Heap* heap = obj->GetIsolate()->heap();
6771+
return !heap->new_space()->Contains(*obj) &&
6772+
!heap->read_only_space()->Contains(*obj);
67736773
}
67746774

67756775

@@ -7514,15 +7514,13 @@ WasmModuleObjectBuilderStreaming::WasmModuleObjectBuilderStreaming(
75147514
Local<Promise::Resolver> resolver = maybe_resolver.ToLocalChecked();
75157515
promise_.Reset(isolate, resolver->GetPromise());
75167516

7517-
if (i::FLAG_wasm_stream_compilation) {
7518-
i::Handle<i::JSPromise> promise = Utils::OpenHandle(*GetPromise());
7519-
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
7520-
streaming_decoder_ =
7521-
i_isolate->wasm_engine()
7522-
->compilation_manager()
7523-
->StartStreamingCompilation(i_isolate, handle(i_isolate->context()),
7524-
promise);
7525-
}
7517+
i::Handle<i::JSPromise> promise = Utils::OpenHandle(*GetPromise());
7518+
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
7519+
streaming_decoder_ =
7520+
i_isolate->wasm_engine()
7521+
->compilation_manager()
7522+
->StartStreamingCompilation(i_isolate, handle(i_isolate->context()),
7523+
promise);
75267524
}
75277525

75287526
Local<Promise> WasmModuleObjectBuilderStreaming::GetPromise() {
@@ -7531,46 +7529,19 @@ Local<Promise> WasmModuleObjectBuilderStreaming::GetPromise() {
75317529

75327530
void WasmModuleObjectBuilderStreaming::OnBytesReceived(const uint8_t* bytes,
75337531
size_t size) {
7534-
if (i::FLAG_wasm_stream_compilation) {
7535-
streaming_decoder_->OnBytesReceived(i::Vector<const uint8_t>(bytes, size));
7536-
return;
7537-
}
7538-
std::unique_ptr<uint8_t[]> cloned_bytes(new uint8_t[size]);
7539-
memcpy(cloned_bytes.get(), bytes, size);
7540-
received_buffers_.push_back(
7541-
Buffer(std::unique_ptr<const uint8_t[]>(
7542-
const_cast<const uint8_t*>(cloned_bytes.release())),
7543-
size));
7544-
total_size_ += size;
7532+
streaming_decoder_->OnBytesReceived(i::Vector<const uint8_t>(bytes, size));
75457533
}
75467534

75477535
void WasmModuleObjectBuilderStreaming::Finish() {
7548-
if (i::FLAG_wasm_stream_compilation) {
7549-
streaming_decoder_->Finish();
7550-
return;
7551-
}
7552-
std::unique_ptr<uint8_t[]> wire_bytes(new uint8_t[total_size_]);
7553-
uint8_t* insert_at = wire_bytes.get();
7554-
7555-
for (size_t i = 0; i < received_buffers_.size(); ++i) {
7556-
const Buffer& buff = received_buffers_[i];
7557-
memcpy(insert_at, buff.first.get(), buff.second);
7558-
insert_at += buff.second;
7559-
}
7560-
// AsyncCompile makes its own copy of the wire bytes. This inefficiency
7561-
// will be resolved when we move to true streaming compilation.
7562-
auto i_isolate = reinterpret_cast<i::Isolate*>(isolate_);
7563-
i_isolate->wasm_engine()->AsyncCompile(
7564-
i_isolate, Utils::OpenHandle(*promise_.Get(isolate_)),
7565-
{wire_bytes.get(), wire_bytes.get() + total_size_}, false);
7536+
streaming_decoder_->Finish();
75667537
}
75677538

75687539
void WasmModuleObjectBuilderStreaming::Abort(MaybeLocal<Value> exception) {
75697540
Local<Promise> promise = GetPromise();
75707541
// The promise has already been resolved, e.g. because of a compilation
75717542
// error.
75727543
if (promise->State() != v8::Promise::kPending) return;
7573-
if (i::FLAG_wasm_stream_compilation) streaming_decoder_->Abort();
7544+
streaming_decoder_->Abort();
75747545

75757546
// If no exception value is provided, we do not reject the promise. This can
75767547
// happen when streaming compilation gets aborted when no script execution is

deps/v8/src/asan.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copyright 2018 the V8 project authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// AddressSanitizer support.
6+
7+
#ifndef V8_ASAN_H_
8+
#define V8_ASAN_H_
9+
10+
#include "src/base/macros.h"
11+
#include "src/globals.h"
12+
13+
#ifdef V8_USE_ADDRESS_SANITIZER
14+
15+
#include <sanitizer/asan_interface.h>
16+
17+
#else // !V8_USE_ADDRESS_SANITIZER
18+
19+
#define ASAN_POISON_MEMORY_REGION(start, size) \
20+
static_assert( \
21+
(std::is_pointer<decltype(start)>::value || \
22+
std::is_same<v8::internal::Address, decltype(start)>::value) && \
23+
std::is_convertible<decltype(size), size_t>::value, \
24+
"static type violation")
25+
#define ASAN_UNPOISON_MEMORY_REGION(start, size) \
26+
ASAN_POISON_MEMORY_REGION(start, size)
27+
28+
#endif // V8_USE_ADDRESS_SANITIZER
29+
30+
#endif // V8_ASAN_H_

deps/v8/src/base/macros.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,20 +149,27 @@ V8_INLINE Dest bit_cast(Source const& source) {
149149
#define INLINE(declarator) V8_INLINE declarator
150150
#define NO_INLINE(declarator) V8_NOINLINE declarator
151151

152-
// Define V8_USE_ADDRESS_SANITIZER macros.
152+
// Define V8_USE_ADDRESS_SANITIZER macro.
153153
#if defined(__has_feature)
154154
#if __has_feature(address_sanitizer)
155155
#define V8_USE_ADDRESS_SANITIZER 1
156156
#endif
157157
#endif
158158

159-
// Define DISABLE_ASAN macros.
159+
// Define DISABLE_ASAN macro.
160160
#ifdef V8_USE_ADDRESS_SANITIZER
161161
#define DISABLE_ASAN __attribute__((no_sanitize_address))
162162
#else
163163
#define DISABLE_ASAN
164164
#endif
165165

166+
// Define V8_USE_MEMORY_SANITIZER macro.
167+
#if defined(__has_feature)
168+
#if __has_feature(memory_sanitizer)
169+
#define V8_USE_MEMORY_SANITIZER 1
170+
#endif
171+
#endif
172+
166173
// Helper macro to define no_sanitize attributes only with clang.
167174
#if defined(__clang__) && defined(__has_attribute)
168175
#if __has_attribute(no_sanitize)

0 commit comments

Comments
 (0)