| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * Copyright (C) 2013 Google Inc. All rights reserved. |    2  * Copyright (C) 2013 Google Inc. All rights reserved. | 
|    3  * |    3  * | 
|    4  * Redistribution and use in source and binary forms, with or without |    4  * Redistribution and use in source and binary forms, with or without | 
|    5  * modification, are permitted provided that the following conditions are |    5  * modification, are permitted provided that the following conditions are | 
|    6  * met: |    6  * met: | 
|    7  * |    7  * | 
|    8  *     * Redistributions of source code must retain the above copyright |    8  *     * Redistributions of source code must retain the above copyright | 
|    9  * notice, this list of conditions and the following disclaimer. |    9  * notice, this list of conditions and the following disclaimer. | 
|   10  *     * Redistributions in binary form must reproduce the above |   10  *     * Redistributions in binary form must reproduce the above | 
| (...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  866  |  866  | 
|  867 inline HeapObjectHeader* HeapObjectHeader::fromPayload(const void* payload) { |  867 inline HeapObjectHeader* HeapObjectHeader::fromPayload(const void* payload) { | 
|  868   Address addr = reinterpret_cast<Address>(const_cast<void*>(payload)); |  868   Address addr = reinterpret_cast<Address>(const_cast<void*>(payload)); | 
|  869   HeapObjectHeader* header = |  869   HeapObjectHeader* header = | 
|  870       reinterpret_cast<HeapObjectHeader*>(addr - sizeof(HeapObjectHeader)); |  870       reinterpret_cast<HeapObjectHeader*>(addr - sizeof(HeapObjectHeader)); | 
|  871   ASSERT(header->checkHeader()); |  871   ASSERT(header->checkHeader()); | 
|  872   return header; |  872   return header; | 
|  873 } |  873 } | 
|  874  |  874  | 
|  875 #if CPU(64BIT) |  875 #if CPU(64BIT) | 
 |  876 ALWAYS_INLINE uint32_t RotateLeft16(uint32_t x) { | 
 |  877 #if COMPILER(MSVC) | 
 |  878   return _lrotr(x, 16); | 
 |  879 #else | 
 |  880   // http://blog.regehr.org/archives/1063 | 
 |  881   return (x << 16) | (x >> (-16 & 31)); | 
 |  882 #endif | 
 |  883 } | 
 |  884  | 
|  876 inline uint32_t HeapObjectHeader::getMagic() const { |  885 inline uint32_t HeapObjectHeader::getMagic() const { | 
|  877   const uintptr_t random1 = |  886 // Ignore C4319: It is OK to 0-extend into the high-order bits of the uintptr_t | 
|  878       ~(reinterpret_cast<uintptr_t>( |  887 // on 64-bit, in this case. | 
|  879             base::trace_event::MemoryAllocatorDump::kNameSize) >> |  888 #if COMPILER(MSVC) | 
|  880         16); |  889 #pragma warning(push) | 
 |  890 #pragma warning(disable : 4319) | 
 |  891 #endif | 
 |  892  | 
 |  893   const uintptr_t random1 = ~(RotateLeft16(reinterpret_cast<uintptr_t>( | 
 |  894       base::trace_event::MemoryAllocatorDump::kNameSize))); | 
|  881  |  895  | 
|  882 #if OS(WIN) |  896 #if OS(WIN) | 
|  883   const uintptr_t random2 = ~(reinterpret_cast<uintptr_t>(::ReadFile) << 16); |  897   const uintptr_t random2 = | 
 |  898       ~(RotateLeft16(reinterpret_cast<uintptr_t>(::ReadFile))); | 
|  884 #elif OS(POSIX) |  899 #elif OS(POSIX) | 
|  885   const uintptr_t random2 = ~(reinterpret_cast<uintptr_t>(::read) << 16); |  900   const uintptr_t random2 = | 
 |  901       ~(RotateLeft16(reinterpret_cast<uintptr_t>(::read))); | 
|  886 #else |  902 #else | 
|  887 #error OS not supported |  903 #error OS not supported | 
|  888 #endif |  904 #endif | 
|  889  |  905  | 
|  890 #if CPU(64BIT) |  906 #if CPU(64BIT) | 
|  891   static_assert(sizeof(uintptr_t) == sizeof(uint64_t), |  907   static_assert(sizeof(uintptr_t) == sizeof(uint64_t), | 
|  892                 "uintptr_t is not uint64_t"); |  908                 "uintptr_t is not uint64_t"); | 
|  893   const uint32_t random = static_cast<uint32_t>( |  909   const uint32_t random = static_cast<uint32_t>( | 
|  894       (random1 & 0x0FFFFULL) | ((random2 >> 32) & 0x0FFFF0000ULL)); |  910       (random1 & 0x0FFFFULL) | ((random2 >> 32) & 0x0FFFF0000ULL)); | 
|  895 #elif CPU(32BIT) |  911 #elif CPU(32BIT) | 
|  896   // Although we don't use heap metadata canaries on 32-bit due to memory |  912   // Although we don't use heap metadata canaries on 32-bit due to memory | 
|  897   // pressure, keep this code around just in case we do, someday. |  913   // pressure, keep this code around just in case we do, someday. | 
|  898   static_assert(sizeof(uintptr_t) == sizeof(uint32_t), |  914   static_assert(sizeof(uintptr_t) == sizeof(uint32_t), | 
|  899                 "uintptr_t is not uint32_t"); |  915                 "uintptr_t is not uint32_t"); | 
|  900   const uint32_t random = (random1 & 0x0FFFFUL) | (random2 & 0xFFFF0000UL); |  916   const uint32_t random = (random1 & 0x0FFFFUL) | (random2 & 0xFFFF0000UL); | 
|  901 #else |  917 #else | 
|  902 #error architecture not supported |  918 #error architecture not supported | 
|  903 #endif |  919 #endif | 
|  904  |  920  | 
 |  921 #if COMPILER(MSVC) | 
 |  922 #pragma warning(pop) | 
 |  923 #endif | 
 |  924  | 
|  905   return random; |  925   return random; | 
|  906 } |  926 } | 
|  907 #endif |  927 #endif  // CPU(64BIT) | 
|  908  |  928  | 
|  909 NO_SANITIZE_ADDRESS inline bool HeapObjectHeader::isWrapperHeaderMarked() |  929 NO_SANITIZE_ADDRESS inline bool HeapObjectHeader::isWrapperHeaderMarked() | 
|  910     const { |  930     const { | 
|  911   ASSERT(checkHeader()); |  931   ASSERT(checkHeader()); | 
|  912   return m_encoded & headerWrapperMarkBitMask; |  932   return m_encoded & headerWrapperMarkBitMask; | 
|  913 } |  933 } | 
|  914  |  934  | 
|  915 NO_SANITIZE_ADDRESS inline void HeapObjectHeader::markWrapperHeader() { |  935 NO_SANITIZE_ADDRESS inline void HeapObjectHeader::markWrapperHeader() { | 
|  916   ASSERT(checkHeader()); |  936   ASSERT(checkHeader()); | 
|  917   ASSERT(!isWrapperHeaderMarked()); |  937   ASSERT(!isWrapperHeaderMarked()); | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  959   return outOfLineAllocate(allocationSize, gcInfoIndex); |  979   return outOfLineAllocate(allocationSize, gcInfoIndex); | 
|  960 } |  980 } | 
|  961  |  981  | 
|  962 inline NormalPageArena* NormalPage::arenaForNormalPage() const { |  982 inline NormalPageArena* NormalPage::arenaForNormalPage() const { | 
|  963   return static_cast<NormalPageArena*>(arena()); |  983   return static_cast<NormalPageArena*>(arena()); | 
|  964 } |  984 } | 
|  965  |  985  | 
|  966 }  // namespace blink |  986 }  // namespace blink | 
|  967  |  987  | 
|  968 #endif  // HeapPage_h |  988 #endif  // HeapPage_h | 
| OLD | NEW |