Diff
Modified: trunk/Source/_javascript_Core/CMakeLists.txt (135465 => 135466)
--- trunk/Source/_javascript_Core/CMakeLists.txt 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/CMakeLists.txt 2012-11-22 03:47:23 UTC (rev 135466)
@@ -104,6 +104,8 @@
dfg/DFGVariableEventStream.cpp
dfg/DFGValidate.cpp
dfg/DFGVirtualRegisterAllocationPhase.cpp
+
+ disassembler/Disassembler.cpp
heap/BlockAllocator.cpp
heap/CopiedSpace.cpp
Modified: trunk/Source/_javascript_Core/ChangeLog (135465 => 135466)
--- trunk/Source/_javascript_Core/ChangeLog 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-11-22 03:47:23 UTC (rev 135466)
@@ -1,5 +1,35 @@
2012-11-21 Filip Pizlo <[email protected]>
+ It should be possible to say disassemble(stuff) instead of having to say if (!tryToDisassemble(stuff)) dataLog("I failed")
+ https://bugs.webkit.org/show_bug.cgi?id=103010
+
+ Reviewed by Anders Carlsson.
+
+ You can still say tryToDisassemble(), which will tell you if it failed; you can then
+ decide what to do instead. But it's better to say disassemble(), which will just print
+ the instruction ranges if tryToDisassemble() failed. This is particularly appropriate
+ since that's what all previous users of tryToDisassemble() would have done in some
+ form or another.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * _javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * Target.pri:
+ * assembler/LinkBuffer.cpp:
+ (JSC::LinkBuffer::finalizeCodeWithDisassembly):
+ * dfg/DFGDisassembler.cpp:
+ (JSC::DFG::Disassembler::dumpDisassembly):
+ * disassembler/Disassembler.cpp: Added.
+ (JSC):
+ (JSC::disassemble):
+ * disassembler/Disassembler.h:
+ (JSC):
+ * jit/JITDisassembler.cpp:
+ (JSC::JITDisassembler::dumpDisassembly):
+
+2012-11-21 Filip Pizlo <[email protected]>
+
dumpOperands() claims that it needs a non-const Operands& when that is completely false
https://bugs.webkit.org/show_bug.cgi?id=103005
Modified: trunk/Source/_javascript_Core/GNUmakefile.list.am (135465 => 135466)
--- trunk/Source/_javascript_Core/GNUmakefile.list.am 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/GNUmakefile.list.am 2012-11-22 03:47:23 UTC (rev 135466)
@@ -252,6 +252,7 @@
Source/_javascript_Core/dfg/DFGVariableAccessData.h \
Source/_javascript_Core/dfg/DFGVirtualRegisterAllocationPhase.cpp \
Source/_javascript_Core/dfg/DFGVirtualRegisterAllocationPhase.h \
+ Source/_javascript_Core/disassembler/Disassembler.cpp \
Source/_javascript_Core/disassembler/Disassembler.h \
Source/_javascript_Core/heap/CopiedAllocator.h \
Source/_javascript_Core/heap/CopiedBlock.h \
Modified: trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj (135465 => 135466)
--- trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.vcproj 2012-11-22 03:47:23 UTC (rev 135466)
@@ -2142,6 +2142,10 @@
Name="disassembler"
>
<File
+ RelativePath="..\..\disassembler\Disassembler.cpp"
+ >
+ </File>
+ <File
RelativePath="..\..\disassembler\Disassembler.h"
>
</File>
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (135465 => 135466)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2012-11-22 03:47:23 UTC (rev 135466)
@@ -185,6 +185,7 @@
0F9332A414CA7DD90085F3C6 /* PutByIdStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F9332A514CA7DDD0085F3C6 /* StructureSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F93329B14CA7DC10085F3C6 /* StructureSet.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F963B3813FC6FE90002D9B2 /* ValueProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F963B3613FC6FDE0002D9B2 /* ValueProfile.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 0F9D3370165DBB90005AD387 /* Disassembler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F9D336E165DBB8D005AD387 /* Disassembler.cpp */; };
0F9FC8C314E1B5FE00D52AE0 /* PolymorphicPutByIdList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F9FC8BF14E1B5FB00D52AE0 /* PolymorphicPutByIdList.cpp */; };
0F9FC8C414E1B60000D52AE0 /* PolymorphicPutByIdList.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9FC8C014E1B5FB00D52AE0 /* PolymorphicPutByIdList.h */; settings = {ATTRIBUTES = (Private, ); }; };
0F9FC8C514E1B60400D52AE0 /* PutKind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9FC8C114E1B5FB00D52AE0 /* PutKind.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -978,6 +979,7 @@
0F93329A14CA7DC10085F3C6 /* PutByIdStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PutByIdStatus.h; sourceTree = "<group>"; };
0F93329B14CA7DC10085F3C6 /* StructureSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureSet.h; sourceTree = "<group>"; };
0F963B3613FC6FDE0002D9B2 /* ValueProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValueProfile.h; sourceTree = "<group>"; };
+ 0F9D336E165DBB8D005AD387 /* Disassembler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Disassembler.cpp; path = disassembler/Disassembler.cpp; sourceTree = "<group>"; };
0F9FC8BF14E1B5FB00D52AE0 /* PolymorphicPutByIdList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PolymorphicPutByIdList.cpp; sourceTree = "<group>"; };
0F9FC8C014E1B5FB00D52AE0 /* PolymorphicPutByIdList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolymorphicPutByIdList.h; sourceTree = "<group>"; };
0F9FC8C114E1B5FB00D52AE0 /* PutKind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PutKind.h; sourceTree = "<group>"; };
@@ -1749,6 +1751,7 @@
isa = PBXGroup;
children = (
0FF42733158EBD64004CB9FF /* udis86 */,
+ 0F9D336E165DBB8D005AD387 /* Disassembler.cpp */,
0FF4272F158EBD44004CB9FF /* Disassembler.h */,
0FF42730158EBD44004CB9FF /* UDis86Disassembler.cpp */,
);
@@ -3617,6 +3620,7 @@
A77F1821164088B200640A47 /* CodeCache.cpp in Sources */,
0FAF7EFD165BA91B000C8455 /* JITDisassembler.cpp in Sources */,
0F73D7AE165A142D00ACAB71 /* ClosureCallStubRoutine.cpp in Sources */,
+ 0F9D3370165DBB90005AD387 /* Disassembler.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Modified: trunk/Source/_javascript_Core/Target.pri (135465 => 135466)
--- trunk/Source/_javascript_Core/Target.pri 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/Target.pri 2012-11-22 03:47:23 UTC (rev 135466)
@@ -140,6 +140,7 @@
dfg/DFGVariableEventStream.cpp \
dfg/DFGValidate.cpp \
dfg/DFGVirtualRegisterAllocationPhase.cpp \
+ disassembler/Disassembler.cpp \
interpreter/AbstractPC.cpp \
interpreter/CallFrame.cpp \
interpreter/Interpreter.cpp \
Modified: trunk/Source/_javascript_Core/assembler/LinkBuffer.cpp (135465 => 135466)
--- trunk/Source/_javascript_Core/assembler/LinkBuffer.cpp 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/assembler/LinkBuffer.cpp 2012-11-22 03:47:23 UTC (rev 135466)
@@ -53,8 +53,7 @@
dataLog(":\n");
dataLog(" Code at [%p, %p):\n", result.code().executableAddress(), static_cast<char*>(result.code().executableAddress()) + result.size());
- if (!tryToDisassemble(result.code(), m_size, " ", WTF::dataFile()))
- dataLog(" <no disassembly available>\n");
+ disassemble(result.code(), m_size, " ", WTF::dataFile());
return result;
}
Modified: trunk/Source/_javascript_Core/dfg/DFGDisassembler.cpp (135465 => 135466)
--- trunk/Source/_javascript_Core/dfg/DFGDisassembler.cpp 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/dfg/DFGDisassembler.cpp 2012-11-22 03:47:23 UTC (rev 135466)
@@ -104,10 +104,7 @@
CodeLocationLabel end = linkBuffer.locationOf(currentLabel);
previousLabel = currentLabel;
ASSERT(bitwise_cast<uintptr_t>(end.executableAddress()) >= bitwise_cast<uintptr_t>(start.executableAddress()));
- if (tryToDisassemble(start, bitwise_cast<uintptr_t>(end.executableAddress()) - bitwise_cast<uintptr_t>(start.executableAddress()), prefixBuffer.get(), WTF::dataFile()))
- return;
-
- dataLog("%s disassembly not available for range %p...%p\n", prefixBuffer.get(), start.executableAddress(), end.executableAddress());
+ disassemble(start, bitwise_cast<uintptr_t>(end.executableAddress()) - bitwise_cast<uintptr_t>(start.executableAddress()), prefixBuffer.get(), WTF::dataFile());
}
} } // namespace JSC::DFG
Added: trunk/Source/_javascript_Core/disassembler/Disassembler.cpp (0 => 135466)
--- trunk/Source/_javascript_Core/disassembler/Disassembler.cpp (rev 0)
+++ trunk/Source/_javascript_Core/disassembler/Disassembler.cpp 2012-11-22 03:47:23 UTC (rev 135466)
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2012 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 "Disassembler.h"
+
+#include "MacroAssemblerCodeRef.h"
+#include <wtf/DataLog.h>
+
+namespace JSC {
+
+void disassemble(const MacroAssemblerCodePtr& codePtr, size_t size, const char* prefix, FILE* out)
+{
+ if (tryToDisassemble(codePtr, size, prefix, out))
+ return;
+
+ fprintf(out, "%sdisassembly not available for range %p...%p\n", prefix, codePtr.executableAddress(), static_cast<char*>(codePtr.executableAddress()) + size);
+}
+
+} // namespace JSC
+
Modified: trunk/Source/_javascript_Core/disassembler/Disassembler.h (135465 => 135466)
--- trunk/Source/_javascript_Core/disassembler/Disassembler.h 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/disassembler/Disassembler.h 2012-11-22 03:47:23 UTC (rev 135466)
@@ -43,6 +43,10 @@
}
#endif
+// Prints either the disassembly, or a line of text indicating that disassembly failed and
+// the range of machine code addresses.
+void disassemble(const MacroAssemblerCodePtr&, size_t, const char* prefix, FILE* out);
+
} // namespace JSC
#endif // Disassembler_h
Modified: trunk/Source/_javascript_Core/jit/JITDisassembler.cpp (135465 => 135466)
--- trunk/Source/_javascript_Core/jit/JITDisassembler.cpp 2012-11-22 03:45:40 UTC (rev 135465)
+++ trunk/Source/_javascript_Core/jit/JITDisassembler.cpp 2012-11-22 03:47:23 UTC (rev 135466)
@@ -92,10 +92,7 @@
{
CodeLocationLabel fromLocation = linkBuffer.locationOf(from);
CodeLocationLabel toLocation = linkBuffer.locationOf(to);
- if (tryToDisassemble(fromLocation, bitwise_cast<uintptr_t>(toLocation.executableAddress()) - bitwise_cast<uintptr_t>(fromLocation.executableAddress()), " ", WTF::dataFile()))
- return;
-
- dataLog(" disassembly not available for range %p...%p\n", fromLocation.executableAddress(), toLocation.executableAddress());
+ disassemble(fromLocation, bitwise_cast<uintptr_t>(toLocation.executableAddress()) - bitwise_cast<uintptr_t>(fromLocation.executableAddress()), " ", WTF::dataFile());
}
} // namespace JSC