Skip to content

Commit bbb1cbb

Browse files
author
Matheus Marchini
committed
deps: cherry-pick 3dfb90b from upstream V8
Original commit message: [arm64] Mark std::printf as an external reference Arm64's implementation of `TurboAssembler::Abort()` supports printing the bailout reason to the standard output without calling to the runtime. For this to work, we need access to the host's printf function so we can call it directly. In the general case, `Abort` does call the runtime, however, we cannot do it if we want to abort from inside CEntryStub. Bug: v8:6939 Change-Id: I2a57603cdc182a45cf770f405bd6ae449f40a047 Reviewed-on: https://chromium-review.googlesource.com/730746 Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Pierre Langlois <pierre.langlois@arm.com> Cr-Commit-Position: refs/heads/master@{#48790} Refs: v8/v8@3dfb90b
1 parent 1385e1b commit bbb1cbb

File tree

6 files changed

+19
-2
lines changed

6 files changed

+19
-2
lines changed

common.gypi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
# Reset this number to 0 on major V8 upgrades.
2929
# Increment by one for each non-official patch applied to deps/v8.
30-
'v8_embedder_string': '-node.5',
30+
'v8_embedder_string': '-node.6',
3131

3232
# Enable disassembler for `--print-code` v8 options
3333
'v8_enable_disassembler': 1,

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1958,6 +1958,15 @@ void TurboAssembler::Call(Handle<Code> code, RelocInfo::Mode rmode) {
19581958
#endif
19591959
}
19601960

1961+
void TurboAssembler::Call(ExternalReference target) {
1962+
UseScratchRegisterScope temps(this);
1963+
Register temp = temps.AcquireX();
1964+
// Immediate is in charge of setting the relocation mode to
1965+
// EXTERNAL_REFERENCE.
1966+
Ldr(temp, Immediate(target));
1967+
Call(temp);
1968+
}
1969+
19611970
int TurboAssembler::CallSize(Register target) {
19621971
USE(target);
19631972
return kInstructionSize;
@@ -3399,7 +3408,7 @@ void TurboAssembler::CallPrintf(int arg_count, const CPURegister* args) {
33993408
dc32(arg_pattern_list); // kPrintfArgPatternListOffset
34003409
}
34013410
#else
3402-
Call(FUNCTION_ADDR(printf), RelocInfo::EXTERNAL_REFERENCE);
3411+
Call(ExternalReference::printf_function(isolate()));
34033412
#endif
34043413
}
34053414

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -884,6 +884,7 @@ class TurboAssembler : public Assembler {
884884
void Call(Label* target);
885885
void Call(Address target, RelocInfo::Mode rmode);
886886
void Call(Handle<Code> code, RelocInfo::Mode rmode = RelocInfo::CODE_TARGET);
887+
void Call(ExternalReference target);
887888

888889
void CallForDeoptimization(Address target, RelocInfo::Mode rmode) {
889890
Call(target, rmode);

deps/v8/src/assembler.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1397,6 +1397,10 @@ ExternalReference ExternalReference::libc_memset_function(Isolate* isolate) {
13971397
return ExternalReference(Redirect(isolate, FUNCTION_ADDR(libc_memset)));
13981398
}
13991399

1400+
ExternalReference ExternalReference::printf_function(Isolate* isolate) {
1401+
return ExternalReference(Redirect(isolate, FUNCTION_ADDR(std::printf)));
1402+
}
1403+
14001404
template <typename SubjectChar, typename PatternChar>
14011405
ExternalReference ExternalReference::search_string_raw(Isolate* isolate) {
14021406
auto f = SearchStringRaw<SubjectChar, PatternChar>;

deps/v8/src/assembler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,8 @@ class ExternalReference BASE_EMBEDDED {
969969
static ExternalReference libc_memmove_function(Isolate* isolate);
970970
static ExternalReference libc_memset_function(Isolate* isolate);
971971

972+
static ExternalReference printf_function(Isolate* isolate);
973+
972974
static ExternalReference try_internalize_string_function(Isolate* isolate);
973975

974976
static ExternalReference check_object_type(Isolate* isolate);

deps/v8/src/external-reference-table.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@ void ExternalReferenceTable::AddReferences(Isolate* isolate) {
241241
"libc_memmove");
242242
Add(ExternalReference::libc_memset_function(isolate).address(),
243243
"libc_memset");
244+
Add(ExternalReference::printf_function(isolate).address(), "printf");
244245
Add(ExternalReference::try_internalize_string_function(isolate).address(),
245246
"try_internalize_string_function");
246247
Add(ExternalReference::check_object_type(isolate).address(),

0 commit comments

Comments
 (0)