summaryrefslogtreecommitdiff
path: root/deps/v8/src/base/platform/platform-posix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/base/platform/platform-posix.cc')
-rw-r--r--deps/v8/src/base/platform/platform-posix.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/deps/v8/src/base/platform/platform-posix.cc b/deps/v8/src/base/platform/platform-posix.cc
index 664ed301c8..280d7f88f8 100644
--- a/deps/v8/src/base/platform/platform-posix.cc
+++ b/deps/v8/src/base/platform/platform-posix.cc
@@ -581,7 +581,25 @@ void OS::FreeAddressSpaceReservation(AddressSpaceReservation reservation) {
// Need to disable CFI_ICALL due to the indirect call to memfd_create.
DISABLE_CFI_ICALL
PlatformSharedMemoryHandle OS::CreateSharedMemoryHandleForTesting(size_t size) {
+#if V8_OS_LINUX && !V8_OS_ANDROID
+ // Use memfd_create if available, otherwise mkstemp.
+ using memfd_create_t = int (*)(const char*, unsigned int);
+ memfd_create_t memfd_create =
+ reinterpret_cast<memfd_create_t>(dlsym(RTLD_DEFAULT, "memfd_create"));
+ int fd = -1;
+ if (memfd_create) {
+ fd = memfd_create("V8MemFDForTesting", MFD_CLOEXEC);
+ } else {
+ char filename[] = "/tmp/v8_tmp_file_for_testing_XXXXXX";
+ fd = mkstemp(filename);
+ if (fd != -1) CHECK_EQ(0, unlink(filename));
+ }
+ if (fd == -1) return kInvalidSharedMemoryHandle;
+ CHECK_EQ(0, ftruncate(fd, size));
+ return SharedMemoryHandleFromFileDescriptor(fd);
+#else
return kInvalidSharedMemoryHandle;
+#endif
}
// static