Title: [135466] trunk/Source/_javascript_Core
Revision
135466
Author
[email protected]
Date
2012-11-21 19:47:23 -0800 (Wed, 21 Nov 2012)

Log Message

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):

Modified Paths

Added Paths

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
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to