Title: [158975] trunk/Source/_javascript_Core
Revision
158975
Author
[email protected]
Date
2013-11-08 16:39:03 -0800 (Fri, 08 Nov 2013)

Log Message

It should be easy to disable blinding on a per-architecture basis
https://bugs.webkit.org/show_bug.cgi?id=124083

Reviewed by Michael Saboff.

* assembler/AbstractMacroAssembler.h:
(JSC::AbstractMacroAssembler::haveScratchRegisterForBlinding):
(JSC::AbstractMacroAssembler::scratchRegisterForBlinding):
(JSC::AbstractMacroAssembler::canBlind):
(JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
* assembler/MacroAssembler.h:
(JSC::MacroAssembler::shouldBlind):
(JSC::MacroAssembler::store32):
(JSC::MacroAssembler::branch32):
(JSC::MacroAssembler::branchAdd32):
(JSC::MacroAssembler::branchMul32):
* assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::canBlind):
* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::haveScratchRegisterForBlinding):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (158974 => 158975)


--- trunk/Source/_javascript_Core/ChangeLog	2013-11-09 00:32:37 UTC (rev 158974)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-11-09 00:39:03 UTC (rev 158975)
@@ -1,3 +1,26 @@
+2013-11-08  Filip Pizlo  <[email protected]>
+
+        It should be easy to disable blinding on a per-architecture basis
+        https://bugs.webkit.org/show_bug.cgi?id=124083
+
+        Reviewed by Michael Saboff.
+
+        * assembler/AbstractMacroAssembler.h:
+        (JSC::AbstractMacroAssembler::haveScratchRegisterForBlinding):
+        (JSC::AbstractMacroAssembler::scratchRegisterForBlinding):
+        (JSC::AbstractMacroAssembler::canBlind):
+        (JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
+        * assembler/MacroAssembler.h:
+        (JSC::MacroAssembler::shouldBlind):
+        (JSC::MacroAssembler::store32):
+        (JSC::MacroAssembler::branch32):
+        (JSC::MacroAssembler::branchAdd32):
+        (JSC::MacroAssembler::branchMul32):
+        * assembler/MacroAssemblerX86Common.h:
+        (JSC::MacroAssemblerX86Common::canBlind):
+        * assembler/MacroAssemblerX86_64.h:
+        (JSC::MacroAssemblerX86_64::haveScratchRegisterForBlinding):
+
 2013-11-08  Oliver Hunt  <[email protected]>
 
         Remove more accidentally added files.

Modified: trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h (158974 => 158975)


--- trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h	2013-11-09 00:32:37 UTC (rev 158974)
+++ trunk/Source/_javascript_Core/assembler/AbstractMacroAssembler.h	2013-11-09 00:39:03 UTC (rev 158975)
@@ -836,9 +836,18 @@
     Vector<RegisterAllocationOffset, 10> m_registerAllocationForOffsets;
 #endif
 
-    static bool scratchRegisterForBlinding() { return false; }
-    static bool shouldBlindForSpecificArch(uint32_t) { return true; }
-    static bool shouldBlindForSpecificArch(uint64_t) { return true; }
+    static bool haveScratchRegisterForBlinding()
+    {
+        return false;
+    }
+    static RegisterID scratchRegisterForBlinding()
+    {
+        UNREACHABLE_FOR_PLATFORM();
+        return firstRegister();
+    }
+    static bool canBlind() { return false; }
+    static bool shouldBlindForSpecificArch(uint32_t) { return false; }
+    static bool shouldBlindForSpecificArch(uint64_t) { return false; }
 
     class CachedTempRegister {
         friend class DataLabelPtr;

Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (158974 => 158975)


--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2013-11-09 00:32:37 UTC (rev 158974)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2013-11-09 00:39:03 UTC (rev 158975)
@@ -986,12 +986,15 @@
     }
     
     bool shouldBlind(ImmPtr imm)
-    { 
+    {
+        if (!canBlind())
+            return false;
+        
 #if ENABLE(FORCED_JIT_BLINDING)
         UNUSED_PARAM(imm);
         // Debug always blind all constants, if only so we know
         // if we've broken blinding during patch development.
-        return true;        
+        return true;
 #endif
 
         // First off we'll special case common, "safe" values to avoid hurting
@@ -1389,9 +1392,9 @@
             store32(blind.value1, dest);
             xor32(blind.value2, dest);
 #else // CPU(X86) || CPU(X86_64)
-            if (RegisterID scratchRegister = (RegisterID)scratchRegisterForBlinding()) {
-                loadXorBlindedConstant(xorBlindConstant(imm), scratchRegister);
-                store32(scratchRegister, dest);
+            if (haveScratchRegisterForBlinding()) {
+                loadXorBlindedConstant(xorBlindConstant(imm), scratchRegisterForBlinding());
+                store32(scratchRegisterForBlinding(), dest);
             } else {
                 // If we don't have a scratch register available for use, we'll just 
                 // place a random number of nops.
@@ -1448,9 +1451,9 @@
     Jump branch32(RelationalCondition cond, RegisterID left, Imm32 right)
     {
         if (shouldBlind(right)) {
-            if (RegisterID scratchRegister = (RegisterID)scratchRegisterForBlinding()) {
-                loadXorBlindedConstant(xorBlindConstant(right), scratchRegister);
-                return branch32(cond, left, scratchRegister);
+            if (haveScratchRegisterForBlinding()) {
+                loadXorBlindedConstant(xorBlindConstant(right), scratchRegisterForBlinding());
+                return branch32(cond, left, scratchRegisterForBlinding());
             }
             // If we don't have a scratch register available for use, we'll just 
             // place a random number of nops.
@@ -1466,14 +1469,12 @@
     Jump branchAdd32(ResultCondition cond, RegisterID src, Imm32 imm, RegisterID dest)
     {
         if (src == dest)
-            ASSERT(scratchRegisterForBlinding());
+            ASSERT(haveScratchRegisterForBlinding());
 
         if (shouldBlind(imm)) {
             if (src == dest) {
-                if (RegisterID scratchRegister = (RegisterID)scratchRegisterForBlinding()) {
-                    move(src, scratchRegister);
-                    src = ""
-                }
+                move(src, scratchRegisterForBlinding());
+                src = ""
             }
             loadXorBlindedConstant(xorBlindConstant(imm), dest);
             return branchAdd32(cond, src, dest);  
@@ -1484,14 +1485,12 @@
     Jump branchMul32(ResultCondition cond, Imm32 imm, RegisterID src, RegisterID dest)
     {
         if (src == dest)
-            ASSERT(scratchRegisterForBlinding());
+            ASSERT(haveScratchRegisterForBlinding());
 
         if (shouldBlind(imm)) {
             if (src == dest) {
-                if (RegisterID scratchRegister = (RegisterID)scratchRegisterForBlinding()) {
-                    move(src, scratchRegister);
-                    src = ""
-                }
+                move(src, scratchRegisterForBlinding());
+                src = ""
             }
             loadXorBlindedConstant(xorBlindConstant(imm), dest);
             return branchMul32(cond, src, dest);  

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h (158974 => 158975)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h	2013-11-09 00:32:37 UTC (rev 158974)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h	2013-11-09 00:39:03 UTC (rev 158975)
@@ -95,6 +95,7 @@
     static const RegisterID stackPointerRegister = X86Registers::esp;
     static const RegisterID framePointerRegister = X86Registers::ebp;
     
+    static bool canBlind() { return true; }
     static bool shouldBlindForSpecificArch(uint32_t value) { return value >= 0x00ffffff; }
 #if CPU(X86_64)
     static bool shouldBlindForSpecificArch(uint64_t value) { return value >= 0x00ffffff; }

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h (158974 => 158975)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h	2013-11-09 00:32:37 UTC (rev 158974)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h	2013-11-09 00:39:03 UTC (rev 158975)
@@ -641,6 +641,7 @@
         return FunctionPtr(X86Assembler::readPointer(call.dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11).dataLocation()));
     }
 
+    static bool haveScratchRegisterForBlinding() { return true; }
     static RegisterID scratchRegisterForBlinding() { return scratchRegister; }
 
     static bool canJumpReplacePatchableBranchPtrWithPatch() { return true; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to