[llvm] [llvm] Fix GNU/Hurd build (PR #184470)

Samuel Thibault via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 31 12:50:29 PDT 2026


https://github.com/sthibaul updated https://github.com/llvm/llvm-project/pull/184470

>From 262267104c41f5e5d009a7731756d3c0de35b5f2 Mon Sep 17 00:00:00 2001
From: Samuel Thibault <samuel.thibault at ens-lyon.org>
Date: Wed, 4 Mar 2026 01:39:03 +0100
Subject: [PATCH] [llvm] Fix GNU/Hurd build

GNU/Hurd does not put a PATH_MAX static constraint on path lengths. We can
instead check the symlink length.

Signed-off-by: Samuel Thibault <samuel.thibault at ens-lyon.org>
---
 .../Orc/TargetProcess/LibraryScanner.cpp             | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/LibraryScanner.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/LibraryScanner.cpp
index 5d5b2ae543e57..0cd53faf9c1b8 100644
--- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/LibraryScanner.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/LibraryScanner.cpp
@@ -439,11 +439,17 @@ std::optional<std::string> PathResolver::readlinkCached(StringRef Path) {
     return Cache;
 
   // If result not in cache - call system function and cache result
-  char buf[PATH_MAX];
+  struct stat st;
+  if (lstat(Path.str().c_str(), &st) == -1)
+    return std::nullopt;
+
+  size_t size = st.st_size + 1;
+  auto buf = std::make_unique<char[]>(size);
   ssize_t len;
-  if ((len = readlink(Path.str().c_str(), buf, sizeof(buf))) != -1) {
+  if ((len = readlink(Path.str().c_str(), buf.get(), size)) != -1 &&
+      (size_t)len < size) {
     buf[len] = '\0';
-    std::string s(buf);
+    std::string s(buf.get());
     LibPathCache->insert_link(Path, s);
     return s;
   }



More information about the llvm-commits mailing list