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; }