Changeset 239364 in webkit
- Timestamp:
- Dec 18, 2018, 6:27:00 PM (8 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
assembler/ARM64Assembler.h (modified) (1 diff)
-
assembler/AbstractMacroAssembler.h (modified) (1 diff)
-
assembler/AssemblerBuffer.h (modified) (3 diffs)
-
assembler/LinkBuffer.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r239355 r239364 1 2018-12-18 Saam Barati <sbarati@apple.com> 2 3 Update ARM64EHash 4 https://bugs.webkit.org/show_bug.cgi?id=192823 5 <rdar://problem/45468257> 6 7 Reviewed by Mark Lam. 8 9 * assembler/ARM64Assembler.h: 10 (JSC::ARM64Assembler::ARM64Assembler): 11 * assembler/AbstractMacroAssembler.h: 12 (JSC::AbstractMacroAssembler::AbstractMacroAssembler): 13 * assembler/AssemblerBuffer.h: 14 (JSC::ARM64EHash::update): 15 (JSC::ARM64EHash::finalHash const): 16 (JSC::AssemblerBuffer::AssemblerBuffer): 17 (JSC::AssemblerBuffer::putIntegralUnchecked): 18 (JSC::ARM64EHash::ARM64EHash): Deleted. 19 (JSC::ARM64EHash::hash const): Deleted. 20 (JSC::ARM64EHash::randomSeed const): Deleted. 21 * assembler/LinkBuffer.cpp: 22 (JSC::LinkBuffer::copyCompactAndLinkCode): 23 1 24 2018-12-18 Mark Lam <mark.lam@apple.com> 2 25 -
trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h
r237266 r239364 327 327 328 328 public: 329 ARM64Assembler( 330 #if CPU(ARM64E) 331 unsigned randomNumber 332 #endif 333 ) 329 ARM64Assembler() 334 330 : m_indexOfLastWatchpoint(INT_MIN) 335 331 , m_indexOfTailOfLastWatchpoint(INT_MIN) 336 #if CPU(ARM64E)337 , m_buffer(randomNumber)338 #endif339 340 332 { 341 333 } -
trunk/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h
r236589 r239364 987 987 AbstractMacroAssembler() 988 988 : m_randomSource(0) 989 #if CPU(ARM64E)990 , m_assembler(random())991 #else992 989 , m_assembler() 993 #endif994 990 { 995 991 invalidateAllTempRegisters(); -
trunk/Source/JavaScriptCore/assembler/AssemblerBuffer.h
r236589 r239364 150 150 class ARM64EHash { 151 151 public: 152 ARM64EHash(unsigned randomNumber) 153 : m_hash(randomNumber) 154 , m_randomSeed(randomNumber) 155 { } 156 ALWAYS_INLINE void update(unsigned value, uintptr_t index) 157 { 158 m_hash = tagInt((static_cast<uintptr_t>(value) + m_hash) ^ (m_hash >> 32), static_cast<PtrTag>(index)); 159 } 160 uintptr_t hash() const { return m_hash; } 161 unsigned randomSeed() const { return m_randomSeed; } 152 ARM64EHash() = default; 153 ALWAYS_INLINE void update(uint32_t value) 154 { 155 uint64_t input = value ^ m_hash; 156 uint64_t a = static_cast<uint32_t>(tagInt(input, static_cast<PtrTag>(0)) >> 39); 157 uint64_t b = tagInt(input, static_cast<PtrTag>(0xb7e151628aed2a6a)) >> 23; 158 m_hash = a | b; 159 } 160 uint32_t finalHash() const 161 { 162 uint64_t hash = m_hash; 163 uint64_t a = static_cast<uint32_t>(tagInt(hash, static_cast<PtrTag>(0xbf7158809cf4f3c7)) >> 39); 164 uint64_t b = tagInt(hash, static_cast<PtrTag>(0x62e7160f38b4da56)) >> 23; 165 return static_cast<uint32_t>(a | b); 166 } 162 167 private: 163 uintptr_t m_hash; 164 unsigned m_randomSeed; 168 uint32_t m_hash { 0 }; 165 169 }; 166 170 #endif … … 168 172 class AssemblerBuffer { 169 173 public: 170 AssemblerBuffer( 171 #if CPU(ARM64E) 172 unsigned randomNumber 173 #endif 174 ) 174 AssemblerBuffer() 175 175 : m_storage() 176 176 , m_index(0) 177 #if CPU(ARM64E)178 , m_hash(randomNumber)179 #endif180 177 { 181 178 } … … 310 307 static_assert(sizeof(value) == 4, ""); 311 308 #if CPU(ARM64E) 312 m_hash.update(value , m_index);309 m_hash.update(value); 313 310 #endif 314 311 #endif -
trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp
r239055 r239364 140 140 uint8_t* codeOutData = m_code.dataLocation<uint8_t*>(); 141 141 #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) 142 const ARM64EHash assemblerBufferHash = macroAssembler.m_assembler.buffer().hash();143 ARM64EHash verifyUncompactedHash (assemblerBufferHash.randomSeed());142 const uint32_t expectedFinalHash = macroAssembler.m_assembler.buffer().hash().finalHash(); 143 ARM64EHash verifyUncompactedHash; 144 144 uint8_t* outData = codeOutData; 145 145 #if ENABLE(SEPARATED_WX_HEAP) … … 179 179 ASSERT(!(readPtr % 2)); 180 180 ASSERT(!(writePtr % 2)); 181 #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS)182 unsigned index = readPtr;183 #endif184 181 while (copySource != copyEnd) { 185 182 InstructionType insn = *copySource++; 186 183 #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) 187 184 static_assert(sizeof(InstructionType) == 4, ""); 188 verifyUncompactedHash.update(insn, index); 189 index += sizeof(InstructionType); 185 verifyUncompactedHash.update(insn); 190 186 #endif 191 187 *copyDst++ = insn; … … 232 228 RELEASE_ASSERT(bytes % sizeof(InstructionType) == 0); 233 229 234 #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS)235 unsigned index = readPtr;236 #endif237 238 230 for (size_t i = 0; i < bytes; i += sizeof(InstructionType)) { 239 231 InstructionType insn = *src++; 240 232 #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) 241 verifyUncompactedHash.update(insn, index); 242 index += sizeof(InstructionType); 233 verifyUncompactedHash.update(insn); 243 234 #endif 244 235 *dst++ = insn; … … 247 238 248 239 #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) 249 if (verifyUncompactedHash. hash() != assemblerBufferHash.hash()) {250 dataLogLn("Hashes don't match: ", RawPointer(bitwise_cast<void*>( verifyUncompactedHash.hash())), " ", RawPointer(bitwise_cast<void*>(assemblerBufferHash.hash())));240 if (verifyUncompactedHash.finalHash() != expectedFinalHash) { 241 dataLogLn("Hashes don't match: ", RawPointer(bitwise_cast<void*>(static_cast<uintptr_t>(verifyUncompactedHash.finalHash()))), " ", RawPointer(bitwise_cast<void*>(static_cast<uintptr_t>(expectedFinalHash)))); 251 242 dataLogLn("Crashing!"); 252 243 CRASH();
Note:
See TracChangeset
for help on using the changeset viewer.