summaryrefslogtreecommitdiff
path: root/deps/v8/test/common/assembler-tester.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/common/assembler-tester.h')
-rw-r--r--deps/v8/test/common/assembler-tester.h21
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);
}