Diff
Modified: trunk/Source/_javascript_Core/CMakeLists.txt (183160 => 183161)
--- trunk/Source/_javascript_Core/CMakeLists.txt 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/CMakeLists.txt 2015-04-23 02:29:14 UTC (rev 183161)
@@ -80,6 +80,7 @@
bytecode/ConstantStructureCheck.cpp
bytecode/DFGExitProfile.cpp
bytecode/DeferredCompilationCallback.cpp
+ bytecode/DeferredSourceDump.cpp
bytecode/ExecutionCounter.cpp
bytecode/ExitKind.cpp
bytecode/ExitingJITType.cpp
Modified: trunk/Source/_javascript_Core/ChangeLog (183160 => 183161)
--- trunk/Source/_javascript_Core/ChangeLog 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-04-23 02:29:14 UTC (rev 183161)
@@ -1,3 +1,45 @@
+2015-04-22 Mark Lam <[email protected]>
+
+ Fix assertion failure and race condition in Options::dumpSourceAtDFGTime().
+ https://bugs.webkit.org/show_bug.cgi?id=143898
+
+ Reviewed by Filip Pizlo.
+
+ CodeBlock::dumpSource() will access SourceCode strings in a way that requires
+ ref'ing of the underlying StringImpls. This is unsafe to do from arbitrary
+ compilation threads because StringImpls are not thread safe. As a result, we get
+ an assertion failure when we run with JSC_dumpSourceAtDFGTime=true on a debug
+ build.
+
+ This patch fixes the issue by only collecting the CodeBlock (and associated info)
+ into a DeferredSourceDump record while compiling, and stashing it away in a
+ deferredSourceDump list in the DeferredCompilationCallback object to be dumped
+ later.
+
+ When compilation is done, the callback object will be notified that
+ compilationDidComplete(). We will dump the SourceCode strings from there.
+ Since compilationDidComplete() is guaranteed to only be called on the thread
+ doing JS execution, it is safe to access the SourceCode strings there and ref
+ their underlying StringImpls as needed.
+
+ * CMakeLists.txt:
+ * _javascript_Core.vcxproj/_javascript_Core.vcxproj:
+ * _javascript_Core.vcxproj/_javascript_Core.vcxproj.filters:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * bytecode/DeferredCompilationCallback.cpp:
+ (JSC::DeferredCompilationCallback::compilationDidComplete):
+ (JSC::DeferredCompilationCallback::sourceDumpInfo):
+ (JSC::DeferredCompilationCallback::dumpCompiledSources):
+ * bytecode/DeferredCompilationCallback.h:
+ * bytecode/DeferredSourceDump.cpp: Added.
+ (JSC::DeferredSourceDump::DeferredSourceDump):
+ (JSC::DeferredSourceDump::dump):
+ * bytecode/DeferredSourceDump.h: Added.
+ * dfg/DFGByteCodeParser.cpp:
+ (JSC::DFG::ByteCodeParser::parseCodeBlock):
+ * dfg/DFGDriver.cpp:
+ (JSC::DFG::compileImpl):
+
2015-04-22 Benjamin Poulain <[email protected]>
Implement String.codePointAt()
Modified: trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj (183160 => 183161)
--- trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj 2015-04-23 02:29:14 UTC (rev 183161)
@@ -326,6 +326,7 @@
<ClCompile Include="..\bytecode\ComplexGetStatus.cpp" />
<ClCompile Include="..\bytecode\ConstantStructureCheck.cpp" />
<ClCompile Include="..\bytecode\DeferredCompilationCallback.cpp" />
+ <ClCompile Include="..\bytecode\DeferredSourceDump.cpp" />
<ClCompile Include="..\bytecode\DFGExitProfile.cpp" />
<ClCompile Include="..\bytecode\ExecutionCounter.cpp" />
<ClCompile Include="..\bytecode\ExitKind.cpp" />
@@ -977,6 +978,7 @@
<ClInclude Include="..\bytecode\ConstantStructureCheck.h" />
<ClInclude Include="..\bytecode\DataFormat.h" />
<ClInclude Include="..\bytecode\DeferredCompilationCallback.h" />
+ <ClInclude Include="..\bytecode\DeferredSourceDump.h" />
<ClInclude Include="..\bytecode\DFGExitProfile.h" />
<ClInclude Include="..\bytecode\EvalCodeCache.h" />
<ClInclude Include="..\bytecode\ExecutionCounter.h" />
Modified: trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters (183160 => 183161)
--- trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters 2015-04-23 02:29:14 UTC (rev 183161)
@@ -1047,6 +1047,9 @@
<ClCompile Include="..\bytecode\DeferredCompilationCallback.cpp">
<Filter>bytecode</Filter>
</ClCompile>
+ <ClCompile Include="..\bytecode\DeferredSourceDump.cpp">
+ <Filter>bytecode</Filter>
+ </ClCompile>
<ClCompile Include="..\dfg\DFGCompilationKey.cpp">
<Filter>dfg</Filter>
</ClCompile>
@@ -3318,6 +3321,9 @@
<ClInclude Include="..\bytecode\DeferredCompilationCallback.h">
<Filter>bytecode</Filter>
</ClInclude>
+ <ClInclude Include="..\bytecode\DeferredSourceDump.h">
+ <Filter>bytecode</Filter>
+ </ClInclude>
<ClInclude Include="..\dfg\DFGCompilationKey.h">
<Filter>dfg</Filter>
</ClInclude>
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (183160 => 183161)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2015-04-23 02:29:14 UTC (rev 183161)
@@ -1661,6 +1661,8 @@
FE4BFF2B1AD476E700088F87 /* FunctionOverrides.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE4BFF291AD476E700088F87 /* FunctionOverrides.cpp */; };
FE4BFF2C1AD476E700088F87 /* FunctionOverrides.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4BFF2A1AD476E700088F87 /* FunctionOverrides.h */; };
FE4D55B81AE716CA0052E459 /* IterationStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4D55B71AE716CA0052E459 /* IterationStatus.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ FE5068651AE246390009DAB7 /* DeferredSourceDump.h in Headers */ = {isa = PBXBuildFile; fileRef = FE5068641AE246390009DAB7 /* DeferredSourceDump.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ FE5068671AE25E280009DAB7 /* DeferredSourceDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5068661AE25E280009DAB7 /* DeferredSourceDump.cpp */; };
FE5932A7183C5A2600A1ECCC /* VMEntryScope.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE5932A5183C5A2600A1ECCC /* VMEntryScope.cpp */; };
FE5932A8183C5A2600A1ECCC /* VMEntryScope.h in Headers */ = {isa = PBXBuildFile; fileRef = FE5932A6183C5A2600A1ECCC /* VMEntryScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE7BA60F1A1A7CEC00F1F7B4 /* HeapVerifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE7BA60D1A1A7CEC00F1F7B4 /* HeapVerifier.cpp */; };
@@ -3182,7 +3184,7 @@
A7C1E8C8112E701C00A37F98 /* JITPropertyAccess32_64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITPropertyAccess32_64.cpp; sourceTree = "<group>"; };
A7C1EAEA17987AB600299DB2 /* CallFrameInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallFrameInlines.h; sourceTree = "<group>"; };
A7C1EAEB17987AB600299DB2 /* JSStackInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStackInlines.h; sourceTree = "<group>"; };
- A7C1EAEC17987AB600299DB2 /* StackVisitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = StackVisitor.cpp; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.cpp; };
+ A7C1EAEC17987AB600299DB2 /* StackVisitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = StackVisitor.cpp; sourceTree = "<group>"; };
A7C1EAED17987AB600299DB2 /* StackVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StackVisitor.h; sourceTree = "<group>"; };
A7C225CC139981F100FF1662 /* KeywordLookupGenerator.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = KeywordLookupGenerator.py; sourceTree = "<group>"; };
A7C225CD1399849C00FF1662 /* KeywordLookup.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeywordLookup.h; sourceTree = "<group>"; };
@@ -3454,6 +3456,8 @@
FE4BFF291AD476E700088F87 /* FunctionOverrides.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FunctionOverrides.cpp; sourceTree = "<group>"; };
FE4BFF2A1AD476E700088F87 /* FunctionOverrides.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FunctionOverrides.h; sourceTree = "<group>"; };
FE4D55B71AE716CA0052E459 /* IterationStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IterationStatus.h; sourceTree = "<group>"; };
+ FE5068641AE246390009DAB7 /* DeferredSourceDump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeferredSourceDump.h; sourceTree = "<group>"; };
+ FE5068661AE25E280009DAB7 /* DeferredSourceDump.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeferredSourceDump.cpp; sourceTree = "<group>"; };
FE5932A5183C5A2600A1ECCC /* VMEntryScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VMEntryScope.cpp; sourceTree = "<group>"; };
FE5932A6183C5A2600A1ECCC /* VMEntryScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VMEntryScope.h; sourceTree = "<group>"; };
FE7BA60D1A1A7CEC00F1F7B4 /* HeapVerifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HeapVerifier.cpp; sourceTree = "<group>"; };
@@ -5306,6 +5310,8 @@
0FF60AC016740F8100029779 /* ReduceWhitespace.h */,
1429D8830ED21C3D00B89619 /* SamplingTool.cpp */,
1429D8840ED21C3D00B89619 /* SamplingTool.h */,
+ FE5068661AE25E280009DAB7 /* DeferredSourceDump.cpp */,
+ FE5068641AE246390009DAB7 /* DeferredSourceDump.h */,
0F5541AF1613C1FB00CE3E25 /* SpecialPointer.cpp */,
0F5541B01613C1FB00CE3E25 /* SpecialPointer.h */,
0FD82E84141F3FDA00179C94 /* SpeculatedType.cpp */,
@@ -5592,6 +5598,7 @@
0FE050281AA9095600D33B33 /* ScopedArguments.h in Headers */,
52C0611F1AA51E1C00B4ADBA /* RuntimeType.h in Headers */,
FE4D55B81AE716CA0052E459 /* IterationStatus.h in Headers */,
+ FE5068651AE246390009DAB7 /* DeferredSourceDump.h in Headers */,
C442CB251A6CDB8C005D3D7C /* JSInputs.json in Headers */,
52678F911A04177C006A306D /* ControlFlowProfiler.h in Headers */,
52678F8F1A031009006A306D /* BasicBlockLocation.h in Headers */,
@@ -7122,6 +7129,7 @@
A7D89CFD17A0B8CC00773AD8 /* DFGOSRAvailabilityAnalysisPhase.cpp in Sources */,
0FD82E56141DAF0800179C94 /* DFGOSREntry.cpp in Sources */,
0FD8A32517D51F5700CA2C40 /* DFGOSREntrypointCreationPhase.cpp in Sources */,
+ FE5068671AE25E280009DAB7 /* DeferredSourceDump.cpp in Sources */,
0FC09791146A6F7100CF2442 /* DFGOSRExit.cpp in Sources */,
0F235BEB17178E7300690C7F /* DFGOSRExitBase.cpp in Sources */,
0FC09792146A6F7300CF2442 /* DFGOSRExitCompiler.cpp in Sources */,
Modified: trunk/Source/_javascript_Core/bytecode/DeferredCompilationCallback.cpp (183160 => 183161)
--- trunk/Source/_javascript_Core/bytecode/DeferredCompilationCallback.cpp 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/bytecode/DeferredCompilationCallback.cpp 2015-04-23 02:29:14 UTC (rev 183161)
@@ -35,6 +35,8 @@
void DeferredCompilationCallback::compilationDidComplete(CodeBlock* codeBlock, CompilationResult result)
{
+ dumpCompiledSourcesIfNeeded();
+
switch (result) {
case CompilationFailed:
case CompilationInvalidated:
@@ -47,5 +49,25 @@
}
}
+Vector<DeferredSourceDump>& DeferredCompilationCallback::ensureDeferredSourceDump()
+{
+ if (!m_deferredSourceDump)
+ m_deferredSourceDump = std::make_unique<Vector<DeferredSourceDump>>();
+ return *m_deferredSourceDump;
+}
+
+void DeferredCompilationCallback::dumpCompiledSourcesIfNeeded()
+{
+ if (!m_deferredSourceDump)
+ return;
+
+ ASSERT(Options::dumpSourceAtDFGTime());
+ unsigned index = 0;
+ for (auto& info : *m_deferredSourceDump) {
+ dataLog("[", ++index, "] ");
+ info.dump();
+ }
+}
+
} // JSC
Modified: trunk/Source/_javascript_Core/bytecode/DeferredCompilationCallback.h (183160 => 183161)
--- trunk/Source/_javascript_Core/bytecode/DeferredCompilationCallback.h 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/bytecode/DeferredCompilationCallback.h 2015-04-23 02:29:14 UTC (rev 183161)
@@ -27,7 +27,9 @@
#define DeferredCompilationCallback_h
#include "CompilationResult.h"
+#include "DeferredSourceDump.h"
#include <wtf/RefCounted.h>
+#include <wtf/Vector.h>
namespace JSC {
@@ -42,6 +44,13 @@
virtual void compilationDidBecomeReadyAsynchronously(CodeBlock*) = 0;
virtual void compilationDidComplete(CodeBlock*, CompilationResult);
+
+ Vector<DeferredSourceDump>& ensureDeferredSourceDump();
+
+private:
+ void dumpCompiledSourcesIfNeeded();
+
+ std::unique_ptr<Vector<DeferredSourceDump>> m_deferredSourceDump;
};
} // namespace JSC
Added: trunk/Source/_javascript_Core/bytecode/DeferredSourceDump.cpp (0 => 183161)
--- trunk/Source/_javascript_Core/bytecode/DeferredSourceDump.cpp (rev 0)
+++ trunk/Source/_javascript_Core/bytecode/DeferredSourceDump.cpp 2015-04-23 02:29:14 UTC (rev 183161)
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "DeferredSourceDump.h"
+
+#include "CodeBlock.h"
+#include "CodeBlockWithJITType.h"
+
+namespace JSC {
+
+DeferredSourceDump::DeferredSourceDump(CodeBlock* codeBlock)
+ : m_codeBlock(codeBlock)
+ , m_rootCodeBlock(nullptr)
+ , m_rootJITType(JITCode::None)
+{
+}
+
+DeferredSourceDump::DeferredSourceDump(CodeBlock* codeBlock, CodeBlock* rootCodeBlock, JITCode::JITType rootJITType, CodeOrigin callerCodeOrigin)
+ : m_codeBlock(codeBlock)
+ , m_rootCodeBlock(rootCodeBlock)
+ , m_rootJITType(rootJITType)
+ , m_callerCodeOrigin(callerCodeOrigin)
+{
+}
+
+void DeferredSourceDump::dump()
+{
+ bool isInlinedFrame = !!m_rootCodeBlock;
+ if (isInlinedFrame)
+ dataLog("Inlined ");
+ else
+ dataLog("Compiled ");
+ dataLog(*m_codeBlock);
+
+ if (isInlinedFrame)
+ dataLog(" at ", CodeBlockWithJITType(m_rootCodeBlock, m_rootJITType), " ", m_callerCodeOrigin);
+
+ dataLog("\n'''");
+ m_codeBlock->dumpSource();
+ dataLog("'''\n");
+}
+
+} // namespace JSC
Added: trunk/Source/_javascript_Core/bytecode/DeferredSourceDump.h (0 => 183161)
--- trunk/Source/_javascript_Core/bytecode/DeferredSourceDump.h (rev 0)
+++ trunk/Source/_javascript_Core/bytecode/DeferredSourceDump.h 2015-04-23 02:29:14 UTC (rev 183161)
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DeferredSourceDump_h
+#define DeferredSourceDump_h
+
+#include "CodeOrigin.h"
+#include "JITCode.h"
+
+namespace JSC {
+
+class CodeBlock;
+
+class DeferredSourceDump {
+public:
+ DeferredSourceDump(CodeBlock*);
+ DeferredSourceDump(CodeBlock*, CodeBlock* rootCodeBlock, JITCode::JITType rootJITType, CodeOrigin callerCodeOrigin);
+
+ void dump();
+
+private:
+ CodeBlock* m_codeBlock;
+ CodeBlock* m_rootCodeBlock;
+ JITCode::JITType m_rootJITType;
+ CodeOrigin m_callerCodeOrigin;
+};
+
+} // namespace JSC
+
+#endif // DeferredSourceDump_h
Modified: trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp (183160 => 183161)
--- trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/dfg/DFGByteCodeParser.cpp 2015-04-23 02:29:14 UTC (rev 183161)
@@ -4051,9 +4051,16 @@
*m_vm->m_perBytecodeProfiler, m_inlineStackTop->m_profiledBlock);
}
- bool shouldDumpSource = Options::dumpSourceAtDFGTime();
- bool shouldDumpBytecode = Options::dumpBytecodeAtDFGTime();
- if (shouldDumpSource || shouldDumpBytecode) {
+ if (UNLIKELY(Options::dumpSourceAtDFGTime())) {
+ Vector<DeferredSourceDump>& deferredSourceDump = m_graph.m_plan.callback->ensureDeferredSourceDump();
+ if (inlineCallFrame()) {
+ DeferredSourceDump dump(codeBlock->baselineVersion(), m_codeBlock, JITCode::DFGJIT, inlineCallFrame()->caller);
+ deferredSourceDump.append(dump);
+ } else
+ deferredSourceDump.append(DeferredSourceDump(codeBlock->baselineVersion()));
+ }
+
+ if (Options::dumpBytecodeAtDFGTime()) {
dataLog("Parsing ", *codeBlock);
if (inlineCallFrame()) {
dataLog(
@@ -4063,17 +4070,9 @@
dataLog(
": needsActivation = ", codeBlock->needsActivation(),
", isStrictMode = ", codeBlock->ownerExecutable()->isStrictMode(), "\n");
+ codeBlock->baselineVersion()->dumpBytecode();
}
-
- if (shouldDumpSource) {
- dataLog("==== begin source ====\n");
- codeBlock->baselineVersion()->dumpSource();
- dataLog("\n==== end source ====\n\n");
- }
- if (shouldDumpBytecode)
- codeBlock->baselineVersion()->dumpBytecode();
-
Vector<unsigned, 32> jumpTargets;
computePreciseJumpTargets(codeBlock, jumpTargets);
if (Options::dumpBytecodeAtDFGTime()) {
Modified: trunk/Source/_javascript_Core/dfg/DFGDriver.cpp (183160 => 183161)
--- trunk/Source/_javascript_Core/dfg/DFGDriver.cpp 2015-04-23 02:16:52 UTC (rev 183160)
+++ trunk/Source/_javascript_Core/dfg/DFGDriver.cpp 2015-04-23 02:29:14 UTC (rev 183161)
@@ -101,9 +101,9 @@
RefPtr<Plan> plan = adoptRef(
new Plan(codeBlock, profiledDFGCodeBlock, mode, osrEntryBytecodeIndex, mustHandleValues));
+ plan->callback = callback;
if (Options::enableConcurrentJIT()) {
Worklist* worklist = ensureGlobalWorklistFor(mode);
- plan->callback = callback;
if (logCompilationChanges(mode))
dataLog("Deferring DFG compilation of ", *codeBlock, " with queue length ", worklist->queueLength(), ".\n");
worklist->enqueue(plan);