diff options
Diffstat (limited to 'deps/v8/src/log.cc')
-rw-r--r-- | deps/v8/src/log.cc | 317 |
1 files changed, 192 insertions, 125 deletions
diff --git a/deps/v8/src/log.cc b/deps/v8/src/log.cc index da9e126879..77d68ef94e 100644 --- a/deps/v8/src/log.cc +++ b/deps/v8/src/log.cc @@ -114,7 +114,7 @@ class CodeEventLogger::NameBuffer { } else { Symbol* symbol = Symbol::cast(name); AppendBytes("symbol("); - if (!symbol->name()->IsUndefined(symbol->GetIsolate())) { + if (!symbol->name()->IsUndefined()) { AppendBytes("\""); AppendString(String::cast(symbol->name())); AppendBytes("\" "); @@ -191,8 +191,8 @@ class CodeEventLogger::NameBuffer { uc16 utf16_buffer[kUtf16BufferSize]; }; - -CodeEventLogger::CodeEventLogger() : name_buffer_(new NameBuffer) { } +CodeEventLogger::CodeEventLogger(Isolate* isolate) + : isolate_(isolate), name_buffer_(new NameBuffer) {} CodeEventLogger::~CodeEventLogger() { delete name_buffer_; } @@ -267,10 +267,10 @@ void CodeEventLogger::RegExpCodeCreateEvent(AbstractCode* code, // Linux perf tool logging support class PerfBasicLogger : public CodeEventLogger { public: - PerfBasicLogger(); + explicit PerfBasicLogger(Isolate* isolate); ~PerfBasicLogger() override; - void CodeMoveEvent(AbstractCode* from, AbstractCode* to) override {} + void CodeMoveEvent(AbstractCode* from, Address to) override {} void CodeDisableOptEvent(AbstractCode* code, SharedFunctionInfo* shared) override {} @@ -293,7 +293,8 @@ const char PerfBasicLogger::kFilenameFormatString[] = "/tmp/perf-%d.map"; // Extra space for the PID in the filename const int PerfBasicLogger::kFilenameBufferPadding = 16; -PerfBasicLogger::PerfBasicLogger() : perf_output_handle_(nullptr) { +PerfBasicLogger::PerfBasicLogger(Isolate* isolate) + : CodeEventLogger(isolate), perf_output_handle_(nullptr) { // Open the perf JIT dump file. int bufferSize = sizeof(kFilenameFormatString) + kFilenameBufferPadding; ScopedVector<char> perf_dump_name(bufferSize); @@ -405,7 +406,8 @@ void ExternalCodeEventListener::CodeCreateEvent( void ExternalCodeEventListener::CodeCreateEvent( CodeEventListener::LogEventsAndTags tag, AbstractCode* code, Name* name) { Handle<String> name_string = - Name::ToFunctionName(Handle<Name>(name, isolate_)).ToHandleChecked(); + Name::ToFunctionName(isolate_, Handle<Name>(name, isolate_)) + .ToHandleChecked(); CodeEvent code_event; code_event.code_start_address = @@ -425,7 +427,8 @@ void ExternalCodeEventListener::CodeCreateEvent( CodeEventListener::LogEventsAndTags tag, AbstractCode* code, SharedFunctionInfo* shared, Name* name) { Handle<String> name_string = - Name::ToFunctionName(Handle<Name>(name, isolate_)).ToHandleChecked(); + Name::ToFunctionName(isolate_, Handle<Name>(name, isolate_)) + .ToHandleChecked(); CodeEvent code_event; code_event.code_start_address = @@ -445,10 +448,11 @@ void ExternalCodeEventListener::CodeCreateEvent( CodeEventListener::LogEventsAndTags tag, AbstractCode* code, SharedFunctionInfo* shared, Name* source, int line, int column) { Handle<String> name_string = - Name::ToFunctionName(Handle<Name>(shared->Name(), isolate_)) + Name::ToFunctionName(isolate_, Handle<Name>(shared->Name(), isolate_)) .ToHandleChecked(); Handle<String> source_string = - Name::ToFunctionName(Handle<Name>(source, isolate_)).ToHandleChecked(); + Name::ToFunctionName(isolate_, Handle<Name>(source, isolate_)) + .ToHandleChecked(); CodeEvent code_event; code_event.code_start_address = @@ -489,10 +493,10 @@ void ExternalCodeEventListener::RegExpCodeCreateEvent(AbstractCode* code, // Low-level logging support. class LowLevelLogger : public CodeEventLogger { public: - explicit LowLevelLogger(const char* file_name); + LowLevelLogger(Isolate* isolate, const char* file_name); ~LowLevelLogger() override; - void CodeMoveEvent(AbstractCode* from, AbstractCode* to) override; + void CodeMoveEvent(AbstractCode* from, Address to) override; void CodeDisableOptEvent(AbstractCode* code, SharedFunctionInfo* shared) override {} void SnapshotPositionEvent(HeapObject* obj, int pos); @@ -543,7 +547,8 @@ class LowLevelLogger : public CodeEventLogger { const char LowLevelLogger::kLogExt[] = ".ll"; -LowLevelLogger::LowLevelLogger(const char* name) : ll_output_handle_(nullptr) { +LowLevelLogger::LowLevelLogger(Isolate* isolate, const char* name) + : CodeEventLogger(isolate), ll_output_handle_(nullptr) { // Open the low-level log file. size_t len = strlen(name); ScopedVector<char> ll_name(static_cast<int>(len + sizeof(kLogExt))); @@ -610,10 +615,11 @@ void LowLevelLogger::LogRecordedBuffer(const wasm::WasmCode* code, code->instructions().length()); } -void LowLevelLogger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) { +void LowLevelLogger::CodeMoveEvent(AbstractCode* from, Address to) { CodeMoveStruct event; event.from_address = from->InstructionStart(); - event.to_address = to->InstructionStart(); + size_t header_size = from->InstructionStart() - from->address(); + event.to_address = to + header_size; LogWriteStruct(event); } @@ -633,9 +639,9 @@ void LowLevelLogger::CodeMovingGCEvent() { class JitLogger : public CodeEventLogger { public: - explicit JitLogger(JitCodeEventHandler code_event_handler); + JitLogger(Isolate* isolate, JitCodeEventHandler code_event_handler); - void CodeMoveEvent(AbstractCode* from, AbstractCode* to) override; + void CodeMoveEvent(AbstractCode* from, Address to) override; void CodeDisableOptEvent(AbstractCode* code, SharedFunctionInfo* shared) override {} void AddCodeLinePosInfoEvent(void* jit_handler_data, int pc_offset, @@ -655,10 +661,8 @@ class JitLogger : public CodeEventLogger { base::Mutex logger_mutex_; }; - -JitLogger::JitLogger(JitCodeEventHandler code_event_handler) - : code_event_handler_(code_event_handler) { -} +JitLogger::JitLogger(Isolate* isolate, JitCodeEventHandler code_event_handler) + : CodeEventLogger(isolate), code_event_handler_(code_event_handler) {} void JitLogger::LogRecordedBuffer(AbstractCode* code, SharedFunctionInfo* shared, const char* name, @@ -672,11 +676,13 @@ void JitLogger::LogRecordedBuffer(AbstractCode* code, event.code_len = code->InstructionSize(); Handle<SharedFunctionInfo> shared_function_handle; if (shared && shared->script()->IsScript()) { - shared_function_handle = Handle<SharedFunctionInfo>(shared); + shared_function_handle = + Handle<SharedFunctionInfo>(shared, shared->GetIsolate()); } event.script = ToApiHandle<v8::UnboundScript>(shared_function_handle); event.name.str = name; event.name.len = length; + event.isolate = reinterpret_cast<v8::Isolate*>(isolate_); code_event_handler_(&event); } @@ -690,10 +696,11 @@ void JitLogger::LogRecordedBuffer(const wasm::WasmCode* code, const char* name, event.code_len = code->instructions().length(); event.name.str = name; event.name.len = length; + event.isolate = reinterpret_cast<v8::Isolate*>(isolate_); code_event_handler_(&event); } -void JitLogger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) { +void JitLogger::CodeMoveEvent(AbstractCode* from, Address to) { base::LockGuard<base::Mutex> guard(&logger_mutex_); JitCodeEvent event; @@ -702,7 +709,13 @@ void JitLogger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) { from->IsCode() ? JitCodeEvent::JIT_CODE : JitCodeEvent::BYTE_CODE; event.code_start = reinterpret_cast<void*>(from->InstructionStart()); event.code_len = from->InstructionSize(); - event.new_code_start = reinterpret_cast<void*>(to->InstructionStart()); + + // Calculate the header size. + const size_t header_size = from->InstructionStart() - from->address(); + + // Calculate the new start address of the instructions. + event.new_code_start = reinterpret_cast<void*>(to + header_size); + event.isolate = reinterpret_cast<v8::Isolate*>(isolate_); code_event_handler_(&event); } @@ -719,6 +732,7 @@ void JitLogger::AddCodeLinePosInfoEvent( event.line_info.offset = pc_offset; event.line_info.pos = position; event.line_info.position_type = position_type; + event.isolate = reinterpret_cast<v8::Isolate*>(isolate_); code_event_handler_(&event); } @@ -728,6 +742,7 @@ void* JitLogger::StartCodePosInfoEvent() { JitCodeEvent event; memset(&event, 0, sizeof(event)); event.type = JitCodeEvent::CODE_START_LINE_INFO_RECORDING; + event.isolate = reinterpret_cast<v8::Isolate*>(isolate_); code_event_handler_(&event); return event.user_data; @@ -740,6 +755,7 @@ void JitLogger::EndCodePosInfoEvent(Address start_address, event.type = JitCodeEvent::CODE_END_LINE_INFO_RECORDING; event.code_start = reinterpret_cast<void*>(start_address); event.user_data = jit_handler_data; + event.isolate = reinterpret_cast<v8::Isolate*>(isolate_); code_event_handler_(&event); } @@ -1044,7 +1060,7 @@ void Logger::SharedLibraryEvent(const std::string& library_path, msg.WriteToLogFile(); } -void Logger::CodeDeoptEvent(Code* code, DeoptKind kind, Address pc, +void Logger::CodeDeoptEvent(Code* code, DeoptimizeKind kind, Address pc, int fp_to_sp_delta) { if (!log_->IsEnabled()) return; Deoptimizer::DeoptInfo info = Deoptimizer::GetDeoptInfo(code, pc); @@ -1065,17 +1081,7 @@ void Logger::CodeDeoptEvent(Code* code, DeoptKind kind, Address pc, deopt_location << "<unknown>"; } msg << kNext << inlining_id << kNext << script_offset << kNext; - switch (kind) { - case kLazy: - msg << "lazy" << kNext; - break; - case kSoft: - msg << "soft" << kNext; - break; - case kEager: - msg << "eager" << kNext; - break; - } + msg << Deoptimizer::MessageFor(kind) << kNext; msg << deopt_location.str().c_str() << kNext << DeoptimizeReasonToString(info.deopt_reason); msg.WriteToLogFile(); @@ -1304,40 +1310,20 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, Name* source, int line, int column) { if (!is_listening_to_code_events()) return; if (!FLAG_log_code || !log_->IsEnabled()) return; - - Log::MessageBuilder msg(log_); - AppendCodeCreateHeader(msg, tag, code, &timer_); - msg << shared->DebugName() << " " << source << ":" << line << ":" << column - << kNext << reinterpret_cast<void*>(shared->address()) << kNext - << ComputeMarker(shared, code); - msg.WriteToLogFile(); + { + Log::MessageBuilder msg(log_); + AppendCodeCreateHeader(msg, tag, code, &timer_); + msg << shared->DebugName() << " " << source << ":" << line << ":" << column + << kNext << reinterpret_cast<void*>(shared->address()) << kNext + << ComputeMarker(shared, code); + msg.WriteToLogFile(); + } if (!FLAG_log_source_code) return; Object* script_object = shared->script(); if (!script_object->IsScript()) return; - // Make sure the script is written to the log file. Script* script = Script::cast(script_object); - int script_id = script->id(); - if (logged_source_code_.find(script_id) == logged_source_code_.end()) { - // This script has not been logged yet. - logged_source_code_.insert(script_id); - Object* source_object = script->source(); - if (source_object->IsString()) { - String* source_code = String::cast(source_object); - msg << "script" << kNext << script_id << kNext; - - // Log the script name. - if (script->name()->IsString()) { - msg << String::cast(script->name()) << kNext; - } else { - msg << "<unknown>" << kNext; - } - - // Log the source code. - msg << source_code; - msg.WriteToLogFile(); - } - } + if (!EnsureLogScriptSource(script)) return; // We log source code information in the form: // @@ -1360,10 +1346,11 @@ void Logger::CodeCreateEvent(CodeEventListener::LogEventsAndTags tag, // <function-id> is an index into the <fns> function table // <fns> is the function table encoded as a sequence of strings // S<shared-function-info-address> + Log::MessageBuilder msg(log_); msg << "code-source-info" << kNext - << reinterpret_cast<void*>(code->InstructionStart()) << kNext << script_id - << kNext << shared->StartPosition() << kNext << shared->EndPosition() - << kNext; + << reinterpret_cast<void*>(code->InstructionStart()) << kNext + << script->id() << kNext << shared->StartPosition() << kNext + << shared->EndPosition() << kNext; SourcePositionTableIterator iterator(code->source_position_table()); bool is_first = true; @@ -1444,10 +1431,9 @@ void Logger::RegExpCodeCreateEvent(AbstractCode* code, String* source) { msg.WriteToLogFile(); } -void Logger::CodeMoveEvent(AbstractCode* from, AbstractCode* to) { +void Logger::CodeMoveEvent(AbstractCode* from, Address to) { if (!is_listening_to_code_events()) return; - MoveEventInternal(CodeEventListener::CODE_MOVE_EVENT, from->address(), - to->address()); + MoveEventInternal(CodeEventListener::CODE_MOVE_EVENT, from->address(), to); } namespace { @@ -1527,57 +1513,135 @@ void Logger::SuspectReadEvent(Name* name, Object* obj) { if (!log_->IsEnabled() || !FLAG_log_suspect) return; Log::MessageBuilder msg(log_); String* class_name = obj->IsJSObject() - ? JSObject::cast(obj)->class_name() - : isolate_->heap()->empty_string(); + ? JSObject::cast(obj)->class_name() + : ReadOnlyRoots(isolate_).empty_string(); msg << "suspect-read" << kNext << class_name << kNext << name; msg.WriteToLogFile(); } namespace { void AppendFunctionMessage(Log::MessageBuilder& msg, const char* reason, - Script* script, int script_id, double time_delta, - int start_position, int end_position, - base::ElapsedTimer* timer) { - msg << "function" << Logger::kNext << reason << Logger::kNext; - if (script) { - if (script->name()->IsString()) { - msg << String::cast(script->name()); - } - msg << Logger::kNext << script->id(); - } else { - msg << Logger::kNext << script_id; - } - msg << Logger::kNext << start_position << Logger::kNext << end_position + int script_id, double time_delta, int start_position, + int end_position, base::ElapsedTimer* timer) { + msg << "function" << Logger::kNext << reason << Logger::kNext << script_id + << Logger::kNext << start_position << Logger::kNext << end_position << Logger::kNext << time_delta << Logger::kNext << timer->Elapsed().InMicroseconds() << Logger::kNext; } } // namespace -void Logger::FunctionEvent(const char* reason, Script* script, int script_id, - double time_delta, int start_position, - int end_position, String* function_name) { +void Logger::FunctionEvent(const char* reason, int script_id, double time_delta, + int start_position, int end_position, + String* function_name) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; Log::MessageBuilder msg(log_); - AppendFunctionMessage(msg, reason, script, script_id, time_delta, - start_position, end_position, &timer_); + AppendFunctionMessage(msg, reason, script_id, time_delta, start_position, + end_position, &timer_); if (function_name) msg << function_name; msg.WriteToLogFile(); } -void Logger::FunctionEvent(const char* reason, Script* script, int script_id, - double time_delta, int start_position, - int end_position, const char* function_name, +void Logger::FunctionEvent(const char* reason, int script_id, double time_delta, + int start_position, int end_position, + const char* function_name, size_t function_name_length) { if (!log_->IsEnabled() || !FLAG_log_function_events) return; Log::MessageBuilder msg(log_); - AppendFunctionMessage(msg, reason, script, script_id, time_delta, - start_position, end_position, &timer_); + AppendFunctionMessage(msg, reason, script_id, time_delta, start_position, + end_position, &timer_); if (function_name_length > 0) { msg.AppendStringPart(function_name, function_name_length); } msg.WriteToLogFile(); } +void Logger::CompilationCacheEvent(const char* action, const char* cache_type, + SharedFunctionInfo* sfi) { + if (!log_->IsEnabled() || !FLAG_log_function_events) return; + Log::MessageBuilder msg(log_); + int script_id = -1; + if (sfi->script()->IsScript()) { + script_id = Script::cast(sfi->script())->id(); + } + msg << "compilation-cache" << Logger::kNext << action << Logger::kNext + << cache_type << Logger::kNext << script_id << Logger::kNext + << sfi->StartPosition() << Logger::kNext << sfi->EndPosition() + << Logger::kNext << timer_.Elapsed().InMicroseconds(); + msg.WriteToLogFile(); +} + +void Logger::ScriptEvent(ScriptEventType type, int script_id) { + if (!log_->IsEnabled() || !FLAG_log_function_events) return; + Log::MessageBuilder msg(log_); + msg << "script" << Logger::kNext; + switch (type) { + case ScriptEventType::kReserveId: + msg << "reserve-id"; + break; + case ScriptEventType::kCreate: + msg << "create"; + break; + case ScriptEventType::kDeserialize: + msg << "deserialize"; + break; + case ScriptEventType::kBackgroundCompile: + msg << "background-compile"; + break; + case ScriptEventType::kStreamingCompile: + msg << "streaming-compile"; + break; + } + msg << Logger::kNext << script_id << Logger::kNext + << timer_.Elapsed().InMicroseconds(); + msg.WriteToLogFile(); +} + +void Logger::ScriptDetails(Script* script) { + if (!log_->IsEnabled() || !FLAG_log_function_events) return; + { + Log::MessageBuilder msg(log_); + msg << "script-details" << Logger::kNext << script->id() << Logger::kNext; + if (script->name()->IsString()) { + msg << String::cast(script->name()); + } + msg << Logger::kNext << script->line_offset() << Logger::kNext + << script->column_offset() << Logger::kNext; + if (script->source_mapping_url()->IsString()) { + msg << String::cast(script->source_mapping_url()); + } + msg.WriteToLogFile(); + } + EnsureLogScriptSource(script); +} + +bool Logger::EnsureLogScriptSource(Script* script) { + if (!log_->IsEnabled()) return false; + Log::MessageBuilder msg(log_); + // Make sure the script is written to the log file. + int script_id = script->id(); + if (logged_source_code_.find(script_id) != logged_source_code_.end()) { + return false; + } + // This script has not been logged yet. + logged_source_code_.insert(script_id); + Object* source_object = script->source(); + if (!source_object->IsString()) return false; + String* source_code = String::cast(source_object); + msg << "script-source" << kNext << script_id << kNext; + + // Log the script name. + if (script->name()->IsString()) { + msg << String::cast(script->name()) << kNext; + } else { + msg << "<unknown>" << kNext; + } + + // Log the source code. + msg << source_code; + msg.WriteToLogFile(); + return true; +} + void Logger::RuntimeCallTimerEvent() { RuntimeCallStats* stats = isolate_->counters()->runtime_call_stats(); RuntimeCallCounter* counter = stats->current_counter(); @@ -1715,10 +1779,10 @@ static void AddFunctionAndCode(SharedFunctionInfo* sfi, Handle<SharedFunctionInfo>* sfis, Handle<AbstractCode>* code_objects, int offset) { if (sfis != nullptr) { - sfis[offset] = Handle<SharedFunctionInfo>(sfi); + sfis[offset] = Handle<SharedFunctionInfo>(sfi, sfi->GetIsolate()); } if (code_objects != nullptr) { - code_objects[offset] = Handle<AbstractCode>(code_object); + code_objects[offset] = Handle<AbstractCode>(code_object, sfi->GetIsolate()); } } @@ -1765,23 +1829,23 @@ static int EnumerateCompiledFunctions(Heap* heap, return compiled_funcs_count; } -static int EnumerateWasmModules(Heap* heap, - Handle<WasmCompiledModule>* modules) { +static int EnumerateWasmModuleObjects( + Heap* heap, Handle<WasmModuleObject>* module_objects) { HeapIterator iterator(heap); DisallowHeapAllocation no_gc; - int wasm_modules_count = 0; + int module_objects_count = 0; for (HeapObject* obj = iterator.next(); obj != nullptr; obj = iterator.next()) { - if (obj->IsWasmCompiledModule()) { - WasmCompiledModule* module = WasmCompiledModule::cast(obj); - if (modules != nullptr) { - modules[wasm_modules_count] = Handle<WasmCompiledModule>(module); + if (obj->IsWasmModuleObject()) { + WasmModuleObject* module = WasmModuleObject::cast(obj); + if (module_objects != nullptr) { + module_objects[module_objects_count] = handle(module, heap->isolate()); } - wasm_modules_count++; + module_objects_count++; } } - return wasm_modules_count; + return module_objects_count; } void Logger::LogCodeObject(Object* object) { @@ -1909,17 +1973,17 @@ bool Logger::SetUp(Isolate* isolate) { log_ = new Log(this, log_file_name.str().c_str()); if (FLAG_perf_basic_prof) { - perf_basic_logger_ = new PerfBasicLogger(); + perf_basic_logger_ = new PerfBasicLogger(isolate); AddCodeEventListener(perf_basic_logger_); } if (FLAG_perf_prof) { - perf_jit_logger_ = new PerfJitLogger(); + perf_jit_logger_ = new PerfJitLogger(isolate); AddCodeEventListener(perf_jit_logger_); } if (FLAG_ll_prof) { - ll_logger_ = new LowLevelLogger(log_file_name.str().c_str()); + ll_logger_ = new LowLevelLogger(isolate, log_file_name.str().c_str()); AddCodeEventListener(ll_logger_); } @@ -1954,7 +2018,7 @@ void Logger::SetCodeEventHandler(uint32_t options, } if (event_handler) { - jit_logger_ = new JitLogger(event_handler); + jit_logger_ = new JitLogger(isolate_, event_handler); AddCodeEventListener(jit_logger_); if (options & kJitCodeEventEnumExisting) { HandleScope scope(isolate_); @@ -2090,21 +2154,24 @@ void ExistingCodeLogger::LogCompiledFunctions() { // GetScriptLineNumber call. for (int i = 0; i < compiled_funcs_count; ++i) { if (sfis[i]->function_data()->IsInterpreterData()) { - LogExistingFunction(sfis[i], - Handle<AbstractCode>(AbstractCode::cast( - sfis[i]->InterpreterTrampoline())), - CodeEventListener::INTERPRETED_FUNCTION_TAG); + LogExistingFunction( + sfis[i], + Handle<AbstractCode>( + AbstractCode::cast(sfis[i]->InterpreterTrampoline()), isolate_), + CodeEventListener::INTERPRETED_FUNCTION_TAG); } if (code_objects[i].is_identical_to(BUILTIN_CODE(isolate_, CompileLazy))) continue; LogExistingFunction(sfis[i], code_objects[i]); } - const int compiled_wasm_modules_count = EnumerateWasmModules(heap, nullptr); - ScopedVector<Handle<WasmCompiledModule>> modules(compiled_wasm_modules_count); - EnumerateWasmModules(heap, modules.start()); - for (int i = 0; i < compiled_wasm_modules_count; ++i) { - modules[i]->LogWasmCodes(isolate_); + const int wasm_module_objects_count = + EnumerateWasmModuleObjects(heap, nullptr); + std::unique_ptr<Handle<WasmModuleObject>[]> module_objects( + new Handle<WasmModuleObject>[wasm_module_objects_count]); + EnumerateWasmModuleObjects(heap, module_objects.get()); + for (int i = 0; i < wasm_module_objects_count; ++i) { + module_objects[i]->native_module()->LogWasmCodes(isolate_); } } @@ -2143,12 +2210,12 @@ void ExistingCodeLogger::LogExistingFunction( Handle<SharedFunctionInfo> shared, Handle<AbstractCode> code, CodeEventListener::LogEventsAndTags tag) { if (shared->script()->IsScript()) { - Handle<Script> script(Script::cast(shared->script())); + Handle<Script> script(Script::cast(shared->script()), isolate_); int line_num = Script::GetLineNumber(script, shared->StartPosition()) + 1; int column_num = Script::GetColumnNumber(script, shared->StartPosition()) + 1; if (script->name()->IsString()) { - Handle<String> script_name(String::cast(script->name())); + Handle<String> script_name(String::cast(script->name()), isolate_); if (line_num > 0) { CALL_CODE_EVENT_HANDLER( CodeCreateEvent(Logger::ToNativeByScript(tag, *script), *code, @@ -2162,7 +2229,7 @@ void ExistingCodeLogger::LogExistingFunction( } else { CALL_CODE_EVENT_HANDLER(CodeCreateEvent( Logger::ToNativeByScript(tag, *script), *code, *shared, - isolate_->heap()->empty_string(), line_num, column_num)) + ReadOnlyRoots(isolate_).empty_string(), line_num, column_num)) } } else if (shared->IsApiFunction()) { // API function. @@ -2178,8 +2245,8 @@ void ExistingCodeLogger::LogExistingFunction( CALL_CODE_EVENT_HANDLER(CallbackEvent(shared->DebugName(), entry_point)) } } else { - CALL_CODE_EVENT_HANDLER( - CodeCreateEvent(tag, *code, *shared, isolate_->heap()->empty_string())) + CALL_CODE_EVENT_HANDLER(CodeCreateEvent( + tag, *code, *shared, ReadOnlyRoots(isolate_).empty_string())) } } |