diff options
Diffstat (limited to 'deps/v8/test/common/assembler-tester.h')
-rw-r--r-- | deps/v8/test/common/assembler-tester.h | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/deps/v8/test/common/assembler-tester.h b/deps/v8/test/common/assembler-tester.h index 0291e48efb..eca34c5521 100644 --- a/deps/v8/test/common/assembler-tester.h +++ b/deps/v8/test/common/assembler-tester.h @@ -17,7 +17,8 @@ static inline uint8_t* AllocateAssemblerBuffer( size_t page_size = v8::internal::AllocatePageSize(); size_t alloc_size = RoundUp(requested, page_size); void* result = v8::internal::AllocatePages( - address, alloc_size, page_size, v8::PageAllocator::kReadWriteExecute); + GetPlatformPageAllocator(), address, alloc_size, page_size, + v8::PageAllocator::kReadWriteExecute); CHECK(result); *allocated = alloc_size; return static_cast<uint8_t*>(result); @@ -25,18 +26,24 @@ static inline uint8_t* AllocateAssemblerBuffer( static inline void MakeAssemblerBufferExecutable(uint8_t* buffer, size_t allocated) { - bool result = v8::internal::SetPermissions(buffer, allocated, - v8::PageAllocator::kReadExecute); - CHECK(result); - // Flush the instruction cache as part of making the buffer executable. + // Note: we do this before setting permissions to ReadExecute because on + // some older Arm64 kernels there is a bug which causes an access error on + // cache flush instructions to trigger access error on non-writable memory. + // See https://bugs.chromium.org/p/v8/issues/detail?id=8157 Assembler::FlushICache(buffer, allocated); + + bool result = + v8::internal::SetPermissions(GetPlatformPageAllocator(), buffer, + allocated, v8::PageAllocator::kReadExecute); + CHECK(result); } static inline void MakeAssemblerBufferWritable(uint8_t* buffer, size_t allocated) { - bool result = v8::internal::SetPermissions(buffer, allocated, - v8::PageAllocator::kReadWrite); + bool result = + v8::internal::SetPermissions(GetPlatformPageAllocator(), buffer, + allocated, v8::PageAllocator::kReadWrite); CHECK(result); } |