[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