From 31349e224576f1846a900958c9fecf566d07a04c Mon Sep 17 00:00:00 2001 From: ochang Date: Fri, 5 May 2017 09:00:27 -0700 Subject: [PATCH] deps: cherry-pick 3f4536894ac from V8 upstream Original commit message: d8: Make in process stack dumping optional Adds a flag (--disable-in-process-stack-traces) to not install signal handlers so that e.g. ASan signal handlers will work. This flag mirrors chromium's one. R=jochen@chromium.org BUG=chromium:716235 Review-Url: https://codereview.chromium.org/2854173002 Cr-Commit-Position: refs/heads/master@{#45142} PR-URL: https://github.com/nodejs/node/pull/13985 Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- deps/v8/include/libplatform/libplatform.h | 5 ++++- deps/v8/src/d8.cc | 12 +++++++++++- deps/v8/src/d8.h | 4 +++- deps/v8/src/libplatform/default-platform.cc | 9 ++++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/deps/v8/include/libplatform/libplatform.h b/deps/v8/include/libplatform/libplatform.h index 55a10204ee2c11..f77742f0f6b00d 100644 --- a/deps/v8/include/libplatform/libplatform.h +++ b/deps/v8/include/libplatform/libplatform.h @@ -13,6 +13,7 @@ namespace v8 { namespace platform { enum class IdleTaskSupport { kDisabled, kEnabled }; +enum class InProcessStackDumping { kDisabled, kEnabled }; /** * Returns a new instance of the default v8::Platform implementation. @@ -27,7 +28,9 @@ enum class IdleTaskSupport { kDisabled, kEnabled }; */ V8_PLATFORM_EXPORT v8::Platform* CreateDefaultPlatform( int thread_pool_size = 0, - IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled); + IdleTaskSupport idle_task_support = IdleTaskSupport::kDisabled, + InProcessStackDumping in_process_stack_dumping = + InProcessStackDumping::kEnabled); /** * Pumps the message loop for the given isolate. diff --git a/deps/v8/src/d8.cc b/deps/v8/src/d8.cc index cb29f4fd303726..62a6518d683e22 100644 --- a/deps/v8/src/d8.cc +++ b/deps/v8/src/d8.cc @@ -2575,6 +2575,9 @@ bool Shell::SetOptions(int argc, char* argv[]) { } else if (strncmp(argv[i], "--lcov=", 7) == 0) { options.lcov_file = argv[i] + 7; argv[i] = NULL; + } else if (strcmp(argv[i], "--disable-in-process-stack-traces") == 0) { + options.disable_in_process_stack_traces = true; + argv[i] = NULL; } } @@ -2998,10 +3001,17 @@ int Shell::Main(int argc, char* argv[]) { #endif // defined(_WIN32) || defined(_WIN64) if (!SetOptions(argc, argv)) return 1; v8::V8::InitializeICUDefaultLocation(argv[0], options.icu_data_file); + + v8::platform::InProcessStackDumping in_process_stack_dumping = + options.disable_in_process_stack_traces + ? v8::platform::InProcessStackDumping::kDisabled + : v8::platform::InProcessStackDumping::kEnabled; + g_platform = i::FLAG_verify_predictable ? new PredictablePlatform() : v8::platform::CreateDefaultPlatform( - 0, v8::platform::IdleTaskSupport::kEnabled); + 0, v8::platform::IdleTaskSupport::kEnabled, + in_process_stack_dumping); platform::tracing::TracingController* tracing_controller; if (options.trace_enabled) { diff --git a/deps/v8/src/d8.h b/deps/v8/src/d8.h index 8e0a8f615f3efd..d885817f7ec046 100644 --- a/deps/v8/src/d8.h +++ b/deps/v8/src/d8.h @@ -304,7 +304,8 @@ class ShellOptions { snapshot_blob(NULL), trace_enabled(false), trace_config(NULL), - lcov_file(NULL) {} + lcov_file(NULL), + disable_in_process_stack_traces(false) {} ~ShellOptions() { delete[] isolate_sources; @@ -336,6 +337,7 @@ class ShellOptions { bool trace_enabled; const char* trace_config; const char* lcov_file; + bool disable_in_process_stack_traces; }; class Shell : public i::AllStatic { diff --git a/deps/v8/src/libplatform/default-platform.cc b/deps/v8/src/libplatform/default-platform.cc index 5cd80ad316dd2f..93dff69709b9e4 100644 --- a/deps/v8/src/libplatform/default-platform.cc +++ b/deps/v8/src/libplatform/default-platform.cc @@ -29,9 +29,12 @@ void PrintStackTrace() { } // namespace -v8::Platform* CreateDefaultPlatform(int thread_pool_size, - IdleTaskSupport idle_task_support) { - v8::base::debug::EnableInProcessStackDumping(); +v8::Platform* CreateDefaultPlatform( + int thread_pool_size, IdleTaskSupport idle_task_support, + InProcessStackDumping in_process_stack_dumping) { + if (in_process_stack_dumping == InProcessStackDumping::kEnabled) { + v8::base::debug::EnableInProcessStackDumping(); + } DefaultPlatform* platform = new DefaultPlatform(idle_task_support); platform->SetThreadPoolSize(thread_pool_size); platform->EnsureInitialized();