[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