WebKit Bugzilla
Attachment 357611 Details for
Bug 192823
: Update ARM64EHash
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
b-backup.diff (text/plain), 7.33 KB, created by
Saam Barati
on 2018-12-18 14:24:24 PST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Saam Barati
Created:
2018-12-18 14:24:24 PST
Size:
7.33 KB
patch
obsolete
>Index: Source/JavaScriptCore/ChangeLog >=================================================================== >--- Source/JavaScriptCore/ChangeLog (revision 239354) >+++ Source/JavaScriptCore/ChangeLog (working copy) >@@ -1,3 +1,26 @@ >+2018-12-18 Saam Barati <sbarati@apple.com> >+ >+ Update ARM64EHash >+ https://bugs.webkit.org/show_bug.cgi?id=192823 >+ <rdar://problem/45468257> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * assembler/ARM64Assembler.h: >+ (JSC::ARM64Assembler::ARM64Assembler): >+ * assembler/AbstractMacroAssembler.h: >+ (JSC::AbstractMacroAssembler::AbstractMacroAssembler): >+ * assembler/AssemblerBuffer.h: >+ (JSC::ARM64EHash::update): >+ (JSC::ARM64EHash::finalHash const): >+ (JSC::AssemblerBuffer::AssemblerBuffer): >+ (JSC::AssemblerBuffer::putIntegralUnchecked): >+ (JSC::ARM64EHash::ARM64EHash): Deleted. >+ (JSC::ARM64EHash::hash const): Deleted. >+ (JSC::ARM64EHash::randomSeed const): Deleted. >+ * assembler/LinkBuffer.cpp: >+ (JSC::LinkBuffer::copyCompactAndLinkCode): >+ > 2018-12-18 Ross Kirsling <ross.kirsling@sony.com> > > Redeclaration of var over let/const/class should be a syntax error. >Index: Source/JavaScriptCore/assembler/ARM64Assembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/ARM64Assembler.h (revision 239339) >+++ Source/JavaScriptCore/assembler/ARM64Assembler.h (working copy) >@@ -326,17 +326,9 @@ protected: > static constexpr bool isZr(RegisterID reg) { return ARM64Registers::isZr(reg); } > > public: >- ARM64Assembler( >-#if CPU(ARM64E) >- unsigned randomNumber >-#endif >- ) >+ ARM64Assembler() > : m_indexOfLastWatchpoint(INT_MIN) > , m_indexOfTailOfLastWatchpoint(INT_MIN) >-#if CPU(ARM64E) >- , m_buffer(randomNumber) >-#endif >- > { > } > >Index: Source/JavaScriptCore/assembler/AbstractMacroAssembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/AbstractMacroAssembler.h (revision 239339) >+++ Source/JavaScriptCore/assembler/AbstractMacroAssembler.h (working copy) >@@ -986,11 +986,7 @@ public: > protected: > AbstractMacroAssembler() > : m_randomSource(0) >-#if CPU(ARM64E) >- , m_assembler(random()) >-#else > , m_assembler() >-#endif > { > invalidateAllTempRegisters(); > } >Index: Source/JavaScriptCore/assembler/AssemblerBuffer.h >=================================================================== >--- Source/JavaScriptCore/assembler/AssemblerBuffer.h (revision 239339) >+++ Source/JavaScriptCore/assembler/AssemblerBuffer.h (working copy) >@@ -149,34 +149,31 @@ namespace JSC { > #if CPU(ARM64E) > class ARM64EHash { > public: >- ARM64EHash(unsigned randomNumber) >- : m_hash(randomNumber) >- , m_randomSeed(randomNumber) >- { } >- ALWAYS_INLINE void update(unsigned value, uintptr_t index) >+ ARM64EHash() = default; >+ ALWAYS_INLINE void update(uint32_t value) > { >- m_hash = tagInt((static_cast<uintptr_t>(value) + m_hash) ^ (m_hash >> 32), static_cast<PtrTag>(index)); >+ uint64_t input = value ^ m_hash; >+ uint64_t a = static_cast<uint32_t>(tagInt(input, static_cast<PtrTag>(0)) >> 39); >+ uint64_t b = tagInt(input, static_cast<PtrTag>(0xb7e151628aed2a6a)) >> 23; >+ m_hash = a | b; >+ } >+ uint32_t finalHash() const >+ { >+ uint64_t hash = m_hash; >+ uint64_t a = static_cast<uint32_t>(tagInt(hash, static_cast<PtrTag>(0xbf7158809cf4f3c7)) >> 39); >+ uint64_t b = tagInt(hash, static_cast<PtrTag>(0x62e7160f38b4da56)) >> 23; >+ return static_cast<uint32_t>(a | b); > } >- uintptr_t hash() const { return m_hash; } >- unsigned randomSeed() const { return m_randomSeed; } > private: >- uintptr_t m_hash; >- unsigned m_randomSeed; >+ uint32_t m_hash { 0 }; > }; > #endif > > class AssemblerBuffer { > public: >- AssemblerBuffer( >-#if CPU(ARM64E) >- unsigned randomNumber >-#endif >- ) >+ AssemblerBuffer() > : m_storage() > , m_index(0) >-#if CPU(ARM64E) >- , m_hash(randomNumber) >-#endif > { > } > >@@ -309,7 +306,7 @@ namespace JSC { > #if CPU(ARM64) > static_assert(sizeof(value) == 4, ""); > #if CPU(ARM64E) >- m_hash.update(value, m_index); >+ m_hash.update(value); > #endif > #endif > ASSERT(isAvailable(sizeof(IntegralType))); >Index: Source/JavaScriptCore/assembler/LinkBuffer.cpp >=================================================================== >--- Source/JavaScriptCore/assembler/LinkBuffer.cpp (revision 239339) >+++ Source/JavaScriptCore/assembler/LinkBuffer.cpp (working copy) >@@ -139,8 +139,8 @@ void LinkBuffer::copyCompactAndLinkCode( > > uint8_t* codeOutData = m_code.dataLocation<uint8_t*>(); > #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) >- const ARM64EHash assemblerBufferHash = macroAssembler.m_assembler.buffer().hash(); >- ARM64EHash verifyUncompactedHash(assemblerBufferHash.randomSeed()); >+ const uint32_t expectedFinalHash = macroAssembler.m_assembler.buffer().hash().finalHash(); >+ ARM64EHash verifyUncompactedHash; > uint8_t* outData = codeOutData; > #if ENABLE(SEPARATED_WX_HEAP) > AssemblerData outBuffer(m_size); >@@ -178,15 +178,11 @@ void LinkBuffer::copyCompactAndLinkCode( > ASSERT(!(regionSize % 2)); > ASSERT(!(readPtr % 2)); > ASSERT(!(writePtr % 2)); >-#if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) >- unsigned index = readPtr; >-#endif > while (copySource != copyEnd) { > InstructionType insn = *copySource++; > #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) > static_assert(sizeof(InstructionType) == 4, ""); >- verifyUncompactedHash.update(insn, index); >- index += sizeof(InstructionType); >+ verifyUncompactedHash.update(insn); > #endif > *copyDst++ = insn; > } >@@ -231,23 +227,18 @@ void LinkBuffer::copyCompactAndLinkCode( > RELEASE_ASSERT(bitwise_cast<uintptr_t>(src) % sizeof(InstructionType) == 0); > RELEASE_ASSERT(bytes % sizeof(InstructionType) == 0); > >-#if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) >- unsigned index = readPtr; >-#endif >- > for (size_t i = 0; i < bytes; i += sizeof(InstructionType)) { > InstructionType insn = *src++; > #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) >- verifyUncompactedHash.update(insn, index); >- index += sizeof(InstructionType); >+ verifyUncompactedHash.update(insn); > #endif > *dst++ = insn; > } > } > > #if CPU(ARM64E) && ENABLE(FAST_JIT_PERMISSIONS) >- if (verifyUncompactedHash.hash() != assemblerBufferHash.hash()) { >- dataLogLn("Hashes don't match: ", RawPointer(bitwise_cast<void*>(verifyUncompactedHash.hash())), " ", RawPointer(bitwise_cast<void*>(assemblerBufferHash.hash()))); >+ if (verifyUncompactedHash.finalHash() != expectedFinalHash) { >+ dataLogLn("Hashes don't match: ", RawPointer(bitwise_cast<void*>(static_cast<uintptr_t>(verifyUncompactedHash.finalHash()))), " ", RawPointer(bitwise_cast<void*>(static_cast<uintptr_t>(expectedFinalHash)))); > dataLogLn("Crashing!"); > CRASH(); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
mark.lam
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192823
: 357611