From 0524c7ad5d2cb5630865bbcfc24f7a92b0be3490 Mon Sep 17 00:00:00 2001 From: Milad Farazmand Date: Tue, 2 Jun 2020 18:06:13 +0000 Subject: [PATCH] deps: V8: cherry-pick b5939c758924 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: Revert "s390: [arm] Add missing RELATIVE_CODE_TARGET iteration" This reverts commit 9d3cca1cd3ad7c6653cab1cdf111d356f33f77cd. Reason for revert: Only the test needs to be skipped on s390. Refer to this: https://crrev.com/c/1981505 Original change's description: > s390: [arm] Add missing RELATIVE_CODE_TARGET iteration > > Port b766299d2c382cc9817e73225bbebe29ce62b9d1 > Port 9592b043eed86db91a441d4bf78b7f0c8c2ce4dd > Port d915b8d668615a7d6d75cf7a61d3ca5a3d139799 > > Original Commit Message: > > Code object iteration was missing logic for RELATIVE_CODE_TARGET > reloc entries. Garbage collection could thus miss objects that were > referenced only as targets of pc-relative calls or jumps. > > RELATIVE_CODE_TARGETs are only used on arm, mips, and s390 and only > at mksnapshot-time. > > This exposed another issue in that the interpreter entry trampoline > copy we generate for profiling *did* contain relative calls in > runtime-accessible code. This is a problem, since code space on arm is, > by default, too large to be fully addressable through pc-relative > calls. This CL thus also disables the related > FLAG_interpreted_frames_native_stack feature on arm. > > objects. > > R=​jgruber@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com > BUG= > LOG=N > > Change-Id: Ifbcaed98d90a2730f0d6a8a7d32c621dab1ff5b2 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2087693 > Reviewed-by: Jakob Gruber > Reviewed-by: Junliang Yan > Commit-Queue: Milad Farazmand > Cr-Commit-Position: refs/heads/master@{#66644} TBR=michael_dawson@ca.ibm.com,mlippautz@chromium.org,jyan@ca.ibm.com,jgruber@chromium.org,joransiu@ca.ibm.com,miladfar@ca.ibm.com # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: Id645a9def23d278235ff77f25249d2187e8105ca Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2196521 Reviewed-by: Milad Farazmand Reviewed-by: Jakob Gruber Commit-Queue: Milad Farazmand Cr-Commit-Position: refs/heads/master@{#67751} Refs: https://github.com/v8/v8/commit/b5939c758924f56824ca137e3bdc47bb373443e9 PR-URL: https://github.com/nodejs/node/pull/33702 Reviewed-By: Richard Lau Reviewed-By: Michaël Zasso Reviewed-By: Michael Dawson --- deps/v8/src/execution/isolate.cc | 16 ++++++++-------- deps/v8/src/flags/flag-definitions.h | 4 ++-- deps/v8/src/snapshot/code-serializer.cc | 12 ++++++------ .../test/cctest/interpreter/test-interpreter.cc | 4 ++-- deps/v8/test/cctest/test-log.cc | 8 ++++---- deps/v8/test/cctest/test-serialize.cc | 2 +- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/deps/v8/src/execution/isolate.cc b/deps/v8/src/execution/isolate.cc index c9c6225eb8fd8b..5c21b0982e9315 100644 --- a/deps/v8/src/execution/isolate.cc +++ b/deps/v8/src/execution/isolate.cc @@ -3431,15 +3431,15 @@ bool Isolate::Init(ReadOnlyDeserializer* read_only_deserializer, setup_delegate_->SetupBuiltins(this); -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM // Store the interpreter entry trampoline on the root list. It is used as a // template for further copies that may later be created to help profile // interpreted code. - // We currently cannot do this on above architectures due to - // RELATIVE_CODE_TARGETs assuming that all possible Code targets may be - // addressed with an int24 offset, effectively limiting code space size to - // 32MB. We can guarantee this at mksnapshot-time, but not at runtime. See - // also: https://crbug.com/v8/8713. + // We currently cannot do this on arm due to RELATIVE_CODE_TARGETs + // assuming that all possible Code targets may be addressed with an int24 + // offset, effectively limiting code space size to 32MB. We can guarantee + // this at mksnapshot-time, but not at runtime. + // See also: https://crbug.com/v8/8713. heap_.SetInterpreterEntryTrampolineForProfiling( heap_.builtin(Builtins::kInterpreterEntryTrampoline)); #endif @@ -3514,11 +3514,11 @@ bool Isolate::Init(ReadOnlyDeserializer* read_only_deserializer, } #endif // DEBUG -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM // The IET for profiling should always be a full on-heap Code object. DCHECK(!Code::cast(heap_.interpreter_entry_trampoline_for_profiling()) .is_off_heap_trampoline()); -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM if (FLAG_print_builtin_code) builtins()->PrintBuiltinCode(); if (FLAG_print_builtin_size) builtins()->PrintBuiltinSize(); diff --git a/deps/v8/src/flags/flag-definitions.h b/deps/v8/src/flags/flag-definitions.h index c3f360cdf0d850..2384cf4a28f19c 100644 --- a/deps/v8/src/flags/flag-definitions.h +++ b/deps/v8/src/flags/flag-definitions.h @@ -1625,8 +1625,8 @@ DEFINE_BOOL(vtune_prof_annotate_wasm, false, DEFINE_BOOL(win64_unwinding_info, true, "Enable unwinding info for Windows/x64") -#if defined(V8_TARGET_ARCH_ARM) || defined(V8_TARGET_ARCH_S390X) -// Unsupported on above architectures. See https://crbug.com/v8/8713. +#ifdef V8_TARGET_ARCH_ARM +// Unsupported on arm. See https://crbug.com/v8/8713. DEFINE_BOOL_READONLY( interpreted_frames_native_stack, false, "Show interpreted frames on the native stack (useful for external " diff --git a/deps/v8/src/snapshot/code-serializer.cc b/deps/v8/src/snapshot/code-serializer.cc index d155313872f21e..b6e2ec65e31c89 100644 --- a/deps/v8/src/snapshot/code-serializer.cc +++ b/deps/v8/src/snapshot/code-serializer.cc @@ -190,12 +190,12 @@ void CodeSerializer::SerializeObject(HeapObject obj) { // bytecode array stored within the InterpreterData, which is the important // information. On deserialization we'll create our code objects again, if // --interpreted-frames-native-stack is on. See v8:9122 for more context -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM if (V8_UNLIKELY(FLAG_interpreted_frames_native_stack) && obj.IsInterpreterData()) { obj = InterpreterData::cast(obj).bytecode_array(); } -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM // Past this point we should not see any (context-specific) maps anymore. CHECK(!obj.IsMap()); @@ -215,7 +215,7 @@ void CodeSerializer::SerializeGeneric(HeapObject heap_object) { serializer.Serialize(); } -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM // NOTE(mmarchini): when FLAG_interpreted_frames_native_stack is on, we want to // create duplicates of InterpreterEntryTrampoline for the deserialized // functions, otherwise we'll call the builtin IET for those functions (which @@ -255,7 +255,7 @@ void CreateInterpreterDataForDeserializedCode(Isolate* isolate, column_num)); } } -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM MaybeHandle CodeSerializer::Deserialize( Isolate* isolate, ScriptData* cached_data, Handle source, @@ -301,11 +301,11 @@ MaybeHandle CodeSerializer::Deserialize( isolate->is_profiling() || isolate->code_event_dispatcher()->IsListeningToCodeEvents(); -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM if (V8_UNLIKELY(FLAG_interpreted_frames_native_stack)) CreateInterpreterDataForDeserializedCode(isolate, result, log_code_creation); -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM bool needs_source_positions = isolate->NeedsSourcePositionsForProfiling(); diff --git a/deps/v8/test/cctest/interpreter/test-interpreter.cc b/deps/v8/test/cctest/interpreter/test-interpreter.cc index 33daf581c7ce17..bd9edb127b28b6 100644 --- a/deps/v8/test/cctest/interpreter/test-interpreter.cc +++ b/deps/v8/test/cctest/interpreter/test-interpreter.cc @@ -5029,7 +5029,7 @@ TEST(InterpreterGenerators) { } } -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM TEST(InterpreterWithNativeStack) { i::FLAG_interpreted_frames_native_stack = true; @@ -5051,7 +5051,7 @@ TEST(InterpreterWithNativeStack) { CHECK(code.is_interpreter_trampoline_builtin()); CHECK_NE(code.address(), interpreter_entry_trampoline->address()); } -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM TEST(InterpreterGetBytecodeHandler) { HandleAndZoneScope handles; diff --git a/deps/v8/test/cctest/test-log.cc b/deps/v8/test/cctest/test-log.cc index 5531b7ec955ade..254fed7db2a115 100644 --- a/deps/v8/test/cctest/test-log.cc +++ b/deps/v8/test/cctest/test-log.cc @@ -565,7 +565,7 @@ UNINITIALIZED_TEST(LogAll) { isolate->Dispose(); } -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM UNINITIALIZED_TEST(LogInterpretedFramesNativeStack) { SETUP_FLAGS(); i::FLAG_interpreted_frames_native_stack = true; @@ -650,7 +650,7 @@ UNINITIALIZED_TEST(LogInterpretedFramesNativeStackWithSerialization) { } while (!has_cache); delete cache; } -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM UNINITIALIZED_TEST(ExternalCodeEventListener) { i::FLAG_log = false; @@ -753,7 +753,7 @@ UNINITIALIZED_TEST(ExternalCodeEventListenerInnerFunctions) { isolate2->Dispose(); } -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM UNINITIALIZED_TEST(ExternalCodeEventListenerWithInterpretedFramesNativeStack) { i::FLAG_log = false; i::FLAG_prof = false; @@ -803,7 +803,7 @@ UNINITIALIZED_TEST(ExternalCodeEventListenerWithInterpretedFramesNativeStack) { } isolate->Dispose(); } -#endif // !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_S390X +#endif // V8_TARGET_ARCH_ARM UNINITIALIZED_TEST(TraceMaps) { SETUP_FLAGS(); diff --git a/deps/v8/test/cctest/test-serialize.cc b/deps/v8/test/cctest/test-serialize.cc index b7590cd0217cff..d92d34faef4c75 100644 --- a/deps/v8/test/cctest/test-serialize.cc +++ b/deps/v8/test/cctest/test-serialize.cc @@ -1672,7 +1672,7 @@ void TestCodeSerializerOnePlusOneImpl(bool verify_builtins_count = true) { TEST(CodeSerializerOnePlusOne) { TestCodeSerializerOnePlusOneImpl(); } // See bug v8:9122 -#if !defined(V8_TARGET_ARCH_ARM) && !defined(V8_TARGET_ARCH_S390X) +#ifndef V8_TARGET_ARCH_ARM TEST(CodeSerializerOnePlusOneWithInterpretedFramesNativeStack) { FLAG_interpreted_frames_native_stack = true; // We pass false because this test will create IET copies (which are