[llvm] [orc-rt] Drop reserveMemory's /dev/zero fallback. (PR #219656)

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 29 01:38:44 PDT 2026


https://github.com/lhames created https://github.com/llvm/llvm-project/pull/219656

Just use MAP_ANON / MAP_ANONYMOUS as available.

Also replaces <sys/errno.h> with <errno.h> and drops the now-unused <fcntl.h>.

>From 59a58cfe4af4acd5dd6cea6bd70b78e4e1096f00 Mon Sep 17 00:00:00 2001
From: Lang Hames <lhames at gmail.com>
Date: Sat, 29 Aug 2026 18:35:01 +1000
Subject: [PATCH] [orc-rt] Drop reserveMemory's /dev/zero fallback.

Just use MAP_ANON / MAP_ANONYMOUS as available.

Also replaces <sys/errno.h> with <errno.h> and drops the now-unused
<fcntl.h>.
---
 orc-rt/lib/bedrock/posix/Memory.cpp | 32 ++++++++++-------------------
 1 file changed, 11 insertions(+), 21 deletions(-)

diff --git a/orc-rt/lib/bedrock/posix/Memory.cpp b/orc-rt/lib/bedrock/posix/Memory.cpp
index 06028f129fc81..b96b0805eddb4 100644
--- a/orc-rt/lib/bedrock/posix/Memory.cpp
+++ b/orc-rt/lib/bedrock/posix/Memory.cpp
@@ -15,15 +15,22 @@
 
 #include "orc-rt-internal/support/sys/CacheControl.h"
 
-#include <fcntl.h>
+#include <errno.h>
 #include <string.h>
-#include <sys/errno.h>
 #include <sys/mman.h>
 
 namespace orc_rt::sys {
 
 namespace {
 
+#if defined(MAP_ANON)
+constexpr int MapAnonFlag = MAP_ANON;
+#elif defined(MAP_ANONYMOUS)
+constexpr int MapAnonFlag = MAP_ANONYMOUS;
+#else
+#error "orc-rt requires anonymous mmap (MAP_ANON / MAP_ANONYMOUS)"
+#endif
+
 int toNativeProtFlags(MemProt MP) {
   int Prot = PROT_NONE;
   if ((MP & MemProt::Read) != MemProt::None)
@@ -41,25 +48,8 @@ Expected<void *> reserveMemory(size_t Size) {
   if (Size == 0)
     return nullptr;
 
-  int FD = 0;
-  int MapFlags = MAP_PRIVATE;
-
-#if defined(MAP_ANON)
-  // If MAP_ANON is available then use it.
-  FD = -1;
-  MapFlags |= MAP_ANON;
-#else // !defined(MAP_ANON)
-  // Fall back to /dev/zero for strict POSIX.
-  FD = open("/dev/zero", O_RDWR);
-  if (FD == -1) {
-    auto ErrNum = errno;
-    return make_error<StringError>(
-        std::string("Could not open /dev/zero for memory reserve: ") +
-        strerror(ErrNum));
-  }
-#endif
-
-  void *Addr = mmap(nullptr, Size, PROT_READ | PROT_WRITE, MapFlags, FD, 0);
+  void *Addr = mmap(nullptr, Size, PROT_READ | PROT_WRITE,
+                    MAP_PRIVATE | MapAnonFlag, -1, 0);
   if (Addr == MAP_FAILED) {
     auto ErrNum = errno;
     return make_error<StringError>(



More information about the llvm-commits mailing list