From 6f27e4b3776c1adc7a0e3824376fff7815564c06 Mon Sep 17 00:00:00 2001 From: "jkummerow@chromium.org" Date: Thu, 31 Oct 2013 11:43:23 +0000 Subject: [PATCH] Avoid pre-aging when debugger is active BUG=None R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/47023003 Patch from Ross McIlroy . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17443 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/macro-assembler-arm.cc | 3 ++- src/ia32/macro-assembler-ia32.cc | 3 ++- src/isolate-inl.h | 5 +++++ src/isolate.h | 2 ++ src/mips/macro-assembler-mips.cc | 3 ++- src/x64/macro-assembler-x64.cc | 3 ++- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc index 8e187a4..d8771cb 100644 --- a/src/arm/macro-assembler-arm.cc +++ b/src/arm/macro-assembler-arm.cc @@ -35,6 +35,7 @@ #include "codegen.h" #include "cpu-profiler.h" #include "debug.h" +#include "isolate-inl.h" #include "runtime.h" namespace v8 { @@ -926,7 +927,7 @@ void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { this, kNoCodeAgeSequenceLength * Assembler::kInstrSize); // The following three instructions must remain together and unmodified // for code aging to work properly. - if (FLAG_optimize_for_size && FLAG_age_code) { + if (isolate()->IsCodePreAgingActive()) { // Pre-age the code. Code* stub = Code::GetPreAgedCodeAgeStub(isolate()); add(r0, pc, Operand(-8)); diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc index ed69fd0..025bd89 100644 --- a/src/ia32/macro-assembler-ia32.cc +++ b/src/ia32/macro-assembler-ia32.cc @@ -33,6 +33,7 @@ #include "codegen.h" #include "cpu-profiler.h" #include "debug.h" +#include "isolate-inl.h" #include "runtime.h" #include "serialize.h" @@ -1022,7 +1023,7 @@ void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { } else { PredictableCodeSizeScope predictible_code_size_scope(this, kNoCodeAgeSequenceLength); - if (FLAG_optimize_for_size && FLAG_age_code) { + if (isolate()->IsCodePreAgingActive()) { // Pre-age the code. call(isolate()->builtins()->MarkCodeAsExecutedOnce(), RelocInfo::CODE_AGE_SEQUENCE); diff --git a/src/isolate-inl.h b/src/isolate-inl.h index 45076f5..764bcb8 100644 --- a/src/isolate-inl.h +++ b/src/isolate-inl.h @@ -48,6 +48,11 @@ SaveContext::SaveContext(Isolate* isolate) } +bool Isolate::IsCodePreAgingActive() { + return FLAG_optimize_for_size && FLAG_age_code && !IsDebuggerActive(); +} + + bool Isolate::IsDebuggerActive() { #ifdef ENABLE_DEBUGGER_SUPPORT if (!NoBarrier_Load(&debugger_initialized_)) return false; diff --git a/src/isolate.h b/src/isolate.h index 6693b57..9aa14ee 100644 --- a/src/isolate.h +++ b/src/isolate.h @@ -994,6 +994,8 @@ class Isolate { void PreallocatedStorageDelete(void* p); void PreallocatedStorageInit(size_t size); + inline bool IsCodePreAgingActive(); + #ifdef ENABLE_DEBUGGER_SUPPORT Debugger* debugger() { if (!NoBarrier_Load(&debugger_initialized_)) InitializeDebugger(); diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index 52d8a4c..e0cb1ba 100644 --- a/src/mips/macro-assembler-mips.cc +++ b/src/mips/macro-assembler-mips.cc @@ -35,6 +35,7 @@ #include "codegen.h" #include "cpu-profiler.h" #include "debug.h" +#include "isolate-inl.h" #include "runtime.h" namespace v8 { @@ -4596,7 +4597,7 @@ void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { this, kNoCodeAgeSequenceLength * Assembler::kInstrSize); // The following three instructions must remain together and unmodified // for code aging to work properly. - if (FLAG_optimize_for_size && FLAG_age_code) { + if (isolate()->IsCodePreAgingActive()) { // Pre-age the code. Code* stub = Code::GetPreAgedCodeAgeStub(isolate()); nop(Assembler::CODE_AGE_MARKER_NOP); diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index 075f07c..a18ff0d 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -37,6 +37,7 @@ #include "serialize.h" #include "debug.h" #include "heap.h" +#include "isolate-inl.h" namespace v8 { namespace internal { @@ -3659,7 +3660,7 @@ void MacroAssembler::Prologue(PrologueFrameMode frame_mode) { } else { PredictableCodeSizeScope predictible_code_size_scope(this, kNoCodeAgeSequenceLength); - if (FLAG_optimize_for_size && FLAG_age_code) { + if (isolate()->IsCodePreAgingActive()) { // Pre-age the code. Call(isolate()->builtins()->MarkCodeAsExecutedOnce(), RelocInfo::CODE_AGE_SEQUENCE); -- 2.7.4