Title: [91405] branches/safari-534.51-branch/Source/_javascript_Core

Diff

Modified: branches/safari-534.51-branch/Source/_javascript_Core/ChangeLog (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/ChangeLog	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/ChangeLog	2011-07-20 21:17:13 UTC (rev 91405)
@@ -1,5 +1,42 @@
 2011-06-20  Lucas Forschler  <[email protected]>
 
+    Merged 86919. 
+
+    2011-05-19  Oliver Hunt  <[email protected]>
+
+        Reviewed by Gavin Barraclough.
+
+        Randomise code starting location a little
+        https://bugs.webkit.org/show_bug.cgi?id=61161
+
+        Add a nop() function to the Assemblers so that we
+        can randomise code offsets slightly at no real cost.
+
+        * assembler/ARMAssembler.h:
+        (JSC::ARMAssembler::nop):
+        * assembler/ARMv7Assembler.h:
+        (JSC::ARMv7Assembler::nop):
+        * assembler/MacroAssemblerARM.h:
+        (JSC::MacroAssemblerARM::nop):
+        * assembler/MacroAssemblerARMv7.h:
+        (JSC::MacroAssemblerARMv7::nop):
+        * assembler/MacroAssemblerMIPS.h:
+        (JSC::MacroAssemblerMIPS::nop):
+        * assembler/MacroAssemblerSH4.h:
+        (JSC::MacroAssemblerSH4::nop):
+        * assembler/MacroAssemblerX86Common.h:
+        (JSC::MacroAssemblerX86Common::nop):
+        * assembler/X86Assembler.h:
+        (JSC::X86Assembler::nop):
+        * jit/JIT.cpp:
+        (JSC::JIT::JIT):
+        (JSC::JIT::privateCompile):
+        * jit/JIT.h:
+        * runtime/WeakRandom.h:
+        (JSC::WeakRandom::getUint32):
+
+2011-06-20  Lucas Forschler  <[email protected]>
+
     Merged 90232. 
 
     2011-07-01  David Kilzer  <[email protected]>

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/ARMAssembler.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/ARMAssembler.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/ARMAssembler.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -167,6 +167,7 @@
             CLZ = 0x016f0f10,
             BKPT = 0xe1200070,
             BLX = 0x012fff30,
+            NOP_T2 = 0xf3af8000,
 #endif
 #if WTF_ARM_ARCH_AT_LEAST(7)
             MOVW = 0x03000000,
@@ -571,6 +572,11 @@
             dtr_dr(true, ARMRegisters::S0, ARMRegisters::S0, ARMRegisters::S0);
 #endif
         }
+        
+        void nop()
+        {
+            m_buffer.putInt(OP_NOP_T2);
+        }
 
         void bx(int rm, Condition cc = AL)
         {

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/ARMv7Assembler.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/ARMv7Assembler.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/ARMv7Assembler.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -1526,6 +1526,11 @@
         m_formatter.vfpOp(OP_VSUB_T2, OP_VSUB_T2b, true, rn, rd, rm);
     }
 
+    void nop()
+    {
+        m_formatter.oneWordOp8Imm8(OP_NOP_T1, 0);
+    }
+
     AssemblerLabel label()
     {
         return m_formatter.label();

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerARM.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -927,6 +927,11 @@
         return branchDouble(DoubleEqualOrUnordered, reg, scratch);
     }
 
+    void nop()
+    {
+        m_assembler.nop();
+    }
+
 protected:
     ARMAssembler::Condition ARMCondition(RelationalCondition cond)
     {

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -812,6 +812,10 @@
             move(src, dest);
     }
 
+    void nop()
+    {
+        m_assembler.nop();
+    }
 
     // Forwards / external control flow operations:
     //

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -1762,6 +1762,10 @@
         return branchDouble(DoubleEqualOrUnordered, reg, scratch);
     }
 
+    void nop()
+    {
+        m_assembler.nop();
+    }
 
 private:
     // If m_fixedWidth is true, we will generate a fixed number of instructions.

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerSH4.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerSH4.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerSH4.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -1721,6 +1721,12 @@
         oldJump.link(this);
         return tailRecursiveCall();
     }
+
+    void nop()
+    {
+        m_assembler.nop();
+    }
+
 protected:
     SH4Assembler::Condition SH4Condition(RelationalCondition cond)
     {

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/MacroAssemblerX86Common.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -1193,6 +1193,11 @@
         ASSERT(cond == Below || cond == BelowOrEqual || cond == Above || cond == AboveOrEqual);
         return static_cast<RelationalCondition>(X86Assembler::ConditionB + X86Assembler::ConditionA - cond);
     }
+    
+    void nop()
+    {
+        m_assembler.nop();
+    }
 
 protected:
     X86Assembler::Condition x86Condition(RelationalCondition cond)

Modified: branches/safari-534.51-branch/Source/_javascript_Core/assembler/X86Assembler.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/assembler/X86Assembler.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/assembler/X86Assembler.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -138,6 +138,7 @@
         OP_MOV_GvEv                     = 0x8B,
         OP_LEA                          = 0x8D,
         OP_GROUP1A_Ev                   = 0x8F,
+        OP_NOP                          = 0x90,
         OP_CDQ                          = 0x99,
         OP_MOV_EAXOv                    = 0xA1,
         OP_MOV_OvEAX                    = 0xA3,
@@ -1576,6 +1577,11 @@
     unsigned debugOffset() { return m_formatter.debugOffset(); }
 #endif
 
+    void nop()
+    {
+        m_formatter.oneByteOp(OP_NOP);
+    }
+
 private:
 
     static void setPointer(void* where, void* value)

Modified: branches/safari-534.51-branch/Source/_javascript_Core/jit/JIT.cpp (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/jit/JIT.cpp	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/jit/JIT.cpp	2011-07-20 21:17:13 UTC (rev 91405)
@@ -35,6 +35,7 @@
 #endif
 
 #include "CodeBlock.h"
+#include "CryptographicallyRandomNumber.h"
 #include "Interpreter.h"
 #include "JITInlineMethods.h"
 #include "JITStubCall.h"
@@ -86,6 +87,11 @@
     , m_lastResultBytecodeRegister(std::numeric_limits<int>::max())
     , m_jumpTargetsPosition(0)
 #endif
+#if USE(OS_RANDOMNESS)
+    , m_randomGenerator(cryptographicallyRandomNumber())
+#else
+    , m_randomGenerator(static_cast<unsigned>(randomNumber() * 0xFFFFFFF))
+#endif
 {
 }
 
@@ -458,6 +464,10 @@
 
 JITCode JIT::privateCompile(CodePtr* functionEntryArityCheck)
 {
+    // Just add a little bit of randomness to the codegen
+    if (m_randomGenerator.getUint32() & 1)
+        nop();
+
     // Could use a pop_m, but would need to offset the following instruction if so.
     preserveReturnAddressAfterCall(regT2);
     emitPutToCallFrameHeader(regT2, RegisterFile::ReturnPC);

Modified: branches/safari-534.51-branch/Source/_javascript_Core/jit/JIT.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/jit/JIT.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/jit/JIT.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -996,6 +996,7 @@
         int m_uninterruptedConstantSequenceBegin;
 #endif
 #endif
+        WeakRandom m_randomGenerator;
         static CodePtr stringGetByValStubGenerator(JSGlobalData* globalData, ExecutablePool* pool);
     } JIT_CLASS_ALIGNMENT;
 

Modified: branches/safari-534.51-branch/Source/_javascript_Core/runtime/WeakRandom.h (91404 => 91405)


--- branches/safari-534.51-branch/Source/_javascript_Core/runtime/WeakRandom.h	2011-07-20 21:12:30 UTC (rev 91404)
+++ branches/safari-534.51-branch/Source/_javascript_Core/runtime/WeakRandom.h	2011-07-20 21:17:13 UTC (rev 91405)
@@ -68,6 +68,11 @@
         return advance() / (UINT_MAX + 1.0);
     }
 
+    unsigned getUint32()
+    {
+        return advance();
+    }
+
 private:
     unsigned advance()
     {
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to