[PATCH] D56975: [Support] Reimplement getMainExecutable() using sysctl on NetBSD
Michał Górny via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 20 05:14:00 PST 2019
mgorny created this revision.
mgorny added reviewers: krytarowski, dim, joerg.
Herald added subscribers: kristina, emaste.
Use sysctl() to implement getMainExecutable() on NetBSD, rather than
trying to guess the correct path from argv[0]. This is one
of the fixes to recent clang-check-mac-libcxx-fixed-compilation-db.cpp
test failure on NetBSD.
This has been historically done on both FreeBSD and NetBSD in r303015,
and reverted in r303285 due to buggy implementation on FreeBSD.
However, FWIK the NetBSD implementation does not suffer from the same
bugs and is more reliable than playing with argv[0].
Repository:
rL LLVM
https://reviews.llvm.org/D56975
Files:
lib/Support/Unix/Path.inc
Index: lib/Support/Unix/Path.inc
===================================================================
--- lib/Support/Unix/Path.inc
+++ lib/Support/Unix/Path.inc
@@ -90,6 +90,11 @@
#define STATVFS_F_FLAG(vfs) (vfs).f_flags
#endif
+#if defined(__NetBSD__)
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#endif
+
using namespace llvm;
namespace llvm {
@@ -98,7 +103,7 @@
const file_t kInvalidFile = -1;
-#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || \
defined(__minix) || defined(__FreeBSD_kernel__) || defined(__linux__) || \
defined(__CYGWIN__) || defined(__DragonFly__) || defined(_AIX) || defined(__GNU__)
static int
@@ -169,7 +174,14 @@
if (realpath(exe_path, link_path))
return link_path;
}
-#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || \
+#elif defined(__NetBSD__)
+ char exe_path[PATH_MAX];
+ int mib[4] = {CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME};
+ size_t len = sizeof(exe_path);
+
+ if (sysctl(mib, 4, exe_path, &len, nullptr, 0) == 0)
+ return exe_path;
+#elif defined(__FreeBSD__) || defined(__OpenBSD__) || \
defined(__minix) || defined(__DragonFly__) || \
defined(__FreeBSD_kernel__) || defined(_AIX)
char exe_path[PATH_MAX];
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56975.182696.patch
Type: text/x-patch
Size: 1368 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190120/99dc980d/attachment.bin>
More information about the llvm-commits
mailing list