Skip to content

Commit d221cdc

Browse files
committed
deps: V8: cherry-pick d2283ba066ba
Original commit message: [macro-assembler] Avoid using the isolate in CallRecordWriteStub CallRecordWriteStub is used in a background compile thread for JS-to-Wasm wrapper compilation, so it should avoid accessing the isolate. Call the builtin using CallBuiltin which does not require a Handle<Code> object and instead gets the call target directly from the embedded data. R=​[email protected] (cherry picked from commit 6b3994e8507b32dfb956329395dbe33a2a8fee14) No-Try: true No-Presubmit: true No-Tree-Checks: true Bug: chromium:1146813 Change-Id: I4ee59084e4184f2e9039208e4e6db43482cefde6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2593333 Reviewed-by: Clemens Backes <[email protected]> Commit-Queue: Thibaud Michaud <[email protected]> Cr-Original-Commit-Position: refs/heads/master@{#71785} Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2731535 Commit-Queue: Victor-Gabriel Savu <[email protected]> Reviewed-by: Jana Grill <[email protected]> Cr-Commit-Position: refs/branch-heads/8.6@{#66} Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1} Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472} Refs: v8/v8@d2283ba PR-URL: #38275 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: Jiawen Geng <[email protected]> Reviewed-By: Shelley Vohr <[email protected]>
1 parent 26cc160 commit d221cdc

9 files changed

+49
-37
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
# Reset this number to 0 on major V8 upgrades.
3838
# Increment by one for each non-official patch applied to deps/v8.
39-
'v8_embedder_string': '-node.45',
39+
'v8_embedder_string': '-node.46',
4040

4141
##### V8 defaults for Node.js #####
4242

deps/v8/src/codegen/arm/macro-assembler-arm.cc

+11-8
Original file line numberDiff line numberDiff line change
@@ -722,23 +722,22 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Operand offset,
722722
void TurboAssembler::CallRecordWriteStub(
723723
Register object, Operand offset, RememberedSetAction remembered_set_action,
724724
SaveFPRegsMode fp_mode) {
725-
CallRecordWriteStub(
726-
object, offset, remembered_set_action, fp_mode,
727-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
728-
kNullAddress);
725+
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
726+
Builtins::kRecordWrite, kNullAddress);
729727
}
730728

731729
void TurboAssembler::CallRecordWriteStub(
732730
Register object, Operand offset, RememberedSetAction remembered_set_action,
733731
SaveFPRegsMode fp_mode, Address wasm_target) {
734732
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
735-
Handle<Code>::null(), wasm_target);
733+
Builtins::kNoBuiltinId, wasm_target);
736734
}
737735

738736
void TurboAssembler::CallRecordWriteStub(
739737
Register object, Operand offset, RememberedSetAction remembered_set_action,
740-
SaveFPRegsMode fp_mode, Handle<Code> code_target, Address wasm_target) {
741-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
738+
SaveFPRegsMode fp_mode, int builtin_index, Address wasm_target) {
739+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
740+
wasm_target == kNullAddress);
742741
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
743742
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
744743
// large performance regression is observed, we should use these values to
@@ -762,9 +761,13 @@ void TurboAssembler::CallRecordWriteStub(
762761

763762
Move(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
764763
Move(fp_mode_parameter, Smi::FromEnum(fp_mode));
765-
if (code_target.is_null()) {
764+
if (builtin_index == Builtins::kNoBuiltinId) {
766765
Call(wasm_target, RelocInfo::WASM_STUB_CALL);
766+
} else if (options().inline_offheap_trampolines) {
767+
CallBuiltin(builtin_index);
767768
} else {
769+
Handle<Code> code_target =
770+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
768771
Call(code_target, RelocInfo::CODE_TARGET);
769772
}
770773

deps/v8/src/codegen/arm/macro-assembler-arm.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
588588

589589
void CallRecordWriteStub(Register object, Operand offset,
590590
RememberedSetAction remembered_set_action,
591-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
591+
SaveFPRegsMode fp_mode, int builtin_index,
592592
Address wasm_target);
593593
};
594594

deps/v8/src/codegen/arm64/macro-assembler-arm64.cc

+11-8
Original file line numberDiff line numberDiff line change
@@ -2738,23 +2738,22 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Operand offset,
27382738
void TurboAssembler::CallRecordWriteStub(
27392739
Register object, Operand offset, RememberedSetAction remembered_set_action,
27402740
SaveFPRegsMode fp_mode) {
2741-
CallRecordWriteStub(
2742-
object, offset, remembered_set_action, fp_mode,
2743-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
2744-
kNullAddress);
2741+
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
2742+
Builtins::kRecordWrite, kNullAddress);
27452743
}
27462744

27472745
void TurboAssembler::CallRecordWriteStub(
27482746
Register object, Operand offset, RememberedSetAction remembered_set_action,
27492747
SaveFPRegsMode fp_mode, Address wasm_target) {
27502748
CallRecordWriteStub(object, offset, remembered_set_action, fp_mode,
2751-
Handle<Code>::null(), wasm_target);
2749+
Builtins::kNoBuiltinId, wasm_target);
27522750
}
27532751

27542752
void TurboAssembler::CallRecordWriteStub(
27552753
Register object, Operand offset, RememberedSetAction remembered_set_action,
2756-
SaveFPRegsMode fp_mode, Handle<Code> code_target, Address wasm_target) {
2757-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
2754+
SaveFPRegsMode fp_mode, int builtin_index, Address wasm_target) {
2755+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
2756+
wasm_target == kNullAddress);
27582757
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
27592758
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
27602759
// large performance regression is observed, we should use these values to
@@ -2778,9 +2777,13 @@ void TurboAssembler::CallRecordWriteStub(
27782777

27792778
Mov(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
27802779
Mov(fp_mode_parameter, Smi::FromEnum(fp_mode));
2781-
if (code_target.is_null()) {
2780+
if (builtin_index == Builtins::kNoBuiltinId) {
27822781
Call(wasm_target, RelocInfo::WASM_STUB_CALL);
2782+
} else if (options().inline_offheap_trampolines) {
2783+
CallBuiltin(builtin_index);
27832784
} else {
2785+
Handle<Code> code_target =
2786+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
27842787
Call(code_target, RelocInfo::CODE_TARGET);
27852788
}
27862789

deps/v8/src/codegen/arm64/macro-assembler-arm64.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -1419,7 +1419,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
14191419

14201420
void CallRecordWriteStub(Register object, Operand offset,
14211421
RememberedSetAction remembered_set_action,
1422-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
1422+
SaveFPRegsMode fp_mode, int builtin_index,
14231423
Address wasm_target);
14241424
};
14251425

deps/v8/src/codegen/ia32/macro-assembler-ia32.cc

+11-8
Original file line numberDiff line numberDiff line change
@@ -415,25 +415,24 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Register address,
415415
void TurboAssembler::CallRecordWriteStub(
416416
Register object, Register address,
417417
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode) {
418-
CallRecordWriteStub(
419-
object, address, remembered_set_action, fp_mode,
420-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
421-
kNullAddress);
418+
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
419+
Builtins::kRecordWrite, kNullAddress);
422420
}
423421

424422
void TurboAssembler::CallRecordWriteStub(
425423
Register object, Register address,
426424
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
427425
Address wasm_target) {
428426
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
429-
Handle<Code>::null(), wasm_target);
427+
Builtins::kNoBuiltinId, wasm_target);
430428
}
431429

432430
void TurboAssembler::CallRecordWriteStub(
433431
Register object, Register address,
434432
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
435-
Handle<Code> code_target, Address wasm_target) {
436-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
433+
int builtin_index, Address wasm_target) {
434+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
435+
wasm_target == kNullAddress);
437436
// TODO(albertnetymk): For now we ignore remembered_set_action and fp_mode,
438437
// i.e. always emit remember set and save FP registers in RecordWriteStub. If
439438
// large performance regression is observed, we should use these values to
@@ -461,10 +460,14 @@ void TurboAssembler::CallRecordWriteStub(
461460

462461
Move(remembered_set_parameter, Smi::FromEnum(remembered_set_action));
463462
Move(fp_mode_parameter, Smi::FromEnum(fp_mode));
464-
if (code_target.is_null()) {
463+
if (builtin_index == Builtins::kNoBuiltinId) {
465464
// Use {wasm_call} for direct Wasm call within a module.
466465
wasm_call(wasm_target, RelocInfo::WASM_STUB_CALL);
466+
} else if (options().inline_offheap_trampolines) {
467+
CallBuiltin(builtin_index);
467468
} else {
469+
Handle<Code> code_target =
470+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
468471
Call(code_target, RelocInfo::CODE_TARGET);
469472
}
470473

deps/v8/src/codegen/ia32/macro-assembler-ia32.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
567567

568568
void CallRecordWriteStub(Register object, Register address,
569569
RememberedSetAction remembered_set_action,
570-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
570+
SaveFPRegsMode fp_mode, int builtin_index,
571571
Address wasm_target);
572572
};
573573

deps/v8/src/codegen/x64/macro-assembler-x64.cc

+11-8
Original file line numberDiff line numberDiff line change
@@ -385,25 +385,24 @@ void TurboAssembler::CallEphemeronKeyBarrier(Register object, Register address,
385385
void TurboAssembler::CallRecordWriteStub(
386386
Register object, Register address,
387387
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode) {
388-
CallRecordWriteStub(
389-
object, address, remembered_set_action, fp_mode,
390-
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite),
391-
kNullAddress);
388+
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
389+
Builtins::kRecordWrite, kNullAddress);
392390
}
393391

394392
void TurboAssembler::CallRecordWriteStub(
395393
Register object, Register address,
396394
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
397395
Address wasm_target) {
398396
CallRecordWriteStub(object, address, remembered_set_action, fp_mode,
399-
Handle<Code>::null(), wasm_target);
397+
Builtins::kNoBuiltinId, wasm_target);
400398
}
401399

402400
void TurboAssembler::CallRecordWriteStub(
403401
Register object, Register address,
404402
RememberedSetAction remembered_set_action, SaveFPRegsMode fp_mode,
405-
Handle<Code> code_target, Address wasm_target) {
406-
DCHECK_NE(code_target.is_null(), wasm_target == kNullAddress);
403+
int builtin_index, Address wasm_target) {
404+
DCHECK_NE(builtin_index == Builtins::kNoBuiltinId,
405+
wasm_target == kNullAddress);
407406

408407
RecordWriteDescriptor descriptor;
409408
RegList registers = descriptor.allocatable_registers();
@@ -432,10 +431,14 @@ void TurboAssembler::CallRecordWriteStub(
432431
} else {
433432
movq(fp_mode_parameter, remembered_set_parameter);
434433
}
435-
if (code_target.is_null()) {
434+
if (builtin_index == Builtins::kNoBuiltinId) {
436435
// Use {near_call} for direct Wasm call within a module.
437436
near_call(wasm_target, RelocInfo::WASM_STUB_CALL);
437+
} else if (options().inline_offheap_trampolines) {
438+
CallBuiltin(builtin_index);
438439
} else {
440+
Handle<Code> code_target =
441+
isolate()->builtins()->builtin_handle(Builtins::kRecordWrite);
439442
Call(code_target, RelocInfo::CODE_TARGET);
440443
}
441444

deps/v8/src/codegen/x64/macro-assembler-x64.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase {
693693

694694
void CallRecordWriteStub(Register object, Register address,
695695
RememberedSetAction remembered_set_action,
696-
SaveFPRegsMode fp_mode, Handle<Code> code_target,
696+
SaveFPRegsMode fp_mode, int builtin_index,
697697
Address wasm_target);
698698
};
699699

0 commit comments

Comments
 (0)