Source/JavaScriptCore/ChangeLog

 12017-08-12 Filip Pizlo <fpizlo@apple.com>
 2
 3 FTL's compileGetTypedArrayByteOffset needs to do caging
 4 https://bugs.webkit.org/show_bug.cgi?id=175366
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 While implementing boxing in the DFG, I noticed that there was some missing boxing in the FTL. This
 9 fixes the case in GetTypedArrayByteOffset, and files FIXMEs for more such cases.
 10
 11 * dfg/DFGSpeculativeJIT.cpp:
 12 (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
 13 * ftl/FTLLowerDFGToB3.cpp:
 14 (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset):
 15 (JSC::FTL::DFG::LowerDFGToB3::cagedMayBeNull):
 16 * runtime/ArrayBuffer.h:
 17 * runtime/ArrayBufferView.h:
 18 * runtime/JSArrayBufferView.h:
 19
1202017-08-11 Filip Pizlo <fpizlo@apple.com>
221
322 Caging shouldn't have to use a patchpoint for adding
220625

Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp

@@void SpeculativeJIT::compileGetTypedArra
61986198 cageTypedArrayStorage(vectorGPR);
61996199 nullVector.link(&m_jit);
62006200 m_jit.loadPtr(MacroAssembler::Address(dataGPR, Butterfly::offsetOfArrayBuffer()), dataGPR);
 6201 // FIXME: This needs caging.
 6202 // https://bugs.webkit.org/show_bug.cgi?id=175515
62016203 m_jit.loadPtr(MacroAssembler::Address(dataGPR, ArrayBuffer::offsetOfData()), dataGPR);
62026204 m_jit.subPtr(dataGPR, vectorGPR);
62036205
220625

Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp

@@private:
33093309
33103310 m_out.appendTo(wastefulCase, continuation);
33113311
3312  // FIXME: This needs to do caging.
3313  // https://bugs.webkit.org/show_bug.cgi?id=175366
3314  LValue vectorPtr = m_out.loadPtr(basePtr, m_heaps.JSArrayBufferView_vector);
3315  LValue butterflyPtr = m_out.loadPtr(basePtr, m_heaps.JSObject_butterfly);
 3312 LValue vectorPtr = cagedMayBeNull(
 3313 Gigacage::Primitive,
 3314 m_out.loadPtr(basePtr, m_heaps.JSArrayBufferView_vector));
 3315 LValue butterflyPtr = caged(Gigacage::JSValue, m_out.loadPtr(basePtr, m_heaps.JSObject_butterfly));
33163316 LValue arrayBufferPtr = m_out.loadPtr(butterflyPtr, m_heaps.Butterfly_arrayBuffer);
 3317 // FIXME: This needs caging.
 3318 // https://bugs.webkit.org/show_bug.cgi?id=175515
33173319 LValue dataPtr = m_out.loadPtr(arrayBufferPtr, m_heaps.ArrayBuffer_data);
33183320
33193321 ValueFromBlock wastefulOut = m_out.anchor(m_out.sub(vectorPtr, dataPtr));

@@private:
1164311645 return m_out.opaque(result);
1164411646 }
1164511647
 11648 LValue cagedMayBeNull(Gigacage::Kind kind, LValue ptr)
 11649 {
 11650 LBasicBlock notNull = m_out.newBlock();
 11651 LBasicBlock continuation = m_out.newBlock();
 11652
 11653 LBasicBlock lastNext = m_out.insertNewBlocksBefore(notNull);
 11654
 11655 ValueFromBlock nullResult = m_out.anchor(ptr);
 11656 m_out.branch(ptr, unsure(notNull), unsure(continuation));
 11657
 11658 m_out.appendTo(notNull, continuation);
 11659 ValueFromBlock notNullResult = m_out.anchor(caged(kind, ptr));
 11660 m_out.jump(continuation);
 11661
 11662 m_out.appendTo(continuation, lastNext);
 11663 return m_out.phi(pointerType(), nullResult, notNullResult);
 11664 }
 11665
1164611666 void buildSwitch(SwitchData* data, LType type, LValue switchValue)
1164711667 {
1164811668 ASSERT(type == pointerType() || type == Int32);
220625

Source/JavaScriptCore/runtime/ArrayBuffer.h

@@public:
5050 void* data() const { return m_data; }
5151
5252private:
 53 // FIXME: This should be CagedPtr<>.
 54 // https://bugs.webkit.org/show_bug.cgi?id=175515
5355 void* m_data;
5456 ArrayBufferDestructorFunction m_destructor;
5557};

@@private:
9597
9698 ArrayBufferDestructorFunction m_destructor;
9799 RefPtr<SharedArrayBufferContents> m_shared;
 100 // FIXME: This should be CagedPtr<>.
 101 // https://bugs.webkit.org/show_bug.cgi?id=175515
98102 void* m_data;
99103 unsigned m_sizeInBytes;
100104};
220625

Source/JavaScriptCore/runtime/ArrayBufferView.h

@@protected:
147147 }
148148
149149 // This is the address of the ArrayBuffer's storage, plus the byte offset.
 150 // FIXME: This should be CagedPtr<>.
 151 // https://bugs.webkit.org/show_bug.cgi?id=175515
150152 void* m_baseAddress;
151153
152154 unsigned m_byteOffset : 31;
220625

Source/JavaScriptCore/runtime/JSArrayBufferView.h

@@protected:
140140
141141 private:
142142 Structure* m_structure;
 143 // FIXME: This should be CagedPtr<>.
 144 // https://bugs.webkit.org/show_bug.cgi?id=175515
143145 void* m_vector;
144146 uint32_t m_length;
145147 TypedArrayMode m_mode;

@@protected:
190192
191193 static String toStringName(const JSObject*, ExecState*);
192194
 195 // FIXME: This should be CagedBarrierPtr<>.
 196 // https://bugs.webkit.org/show_bug.cgi?id=175515
193197 AuxiliaryBarrier<void*> m_vector;
194198 uint32_t m_length;
195199 TypedArrayMode m_mode;
220625