]> granicus.if.org Git - llvm/commitdiff
[llvm] [Support] Revert "Reimplement getMainExecutable() using sysctl on NetBSD"
authorMichal Gorny <mgorny@gentoo.org>
Mon, 4 Mar 2019 04:53:50 +0000 (04:53 +0000)
committerMichal Gorny <mgorny@gentoo.org>
Mon, 4 Mar 2019 04:53:50 +0000 (04:53 +0000)
This apparently does not work reliably after all (non-reentrant?)
and causes test failures such as:

http://lab.llvm.org:8011/builders/netbsd-amd64/builds/19254/steps/run%20unit%20tests/logs/FAIL%3A%20libc%2B%2B%3A%3Asize.pass.cpp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355302 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Unix/Path.inc

index d1f82bc9e72f001dd705fc3928932d4fa873a46d..5eba86d2077d9da6d50dad4ed516c2564f600efb 100644 (file)
 #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 {
@@ -103,7 +98,7 @@ namespace fs {
 
 const file_t kInvalidFile = -1;
 
-#if defined(__FreeBSD__) || defined(__OpenBSD__) ||     \
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||     \
     defined(__minix) || defined(__FreeBSD_kernel__) || defined(__linux__) ||   \
     defined(__CYGWIN__) || defined(__DragonFly__) || defined(_AIX) || defined(__GNU__)
 static int
@@ -174,18 +169,7 @@ std::string getMainExecutable(const char *argv0, void *MainAddr) {
     if (realpath(exe_path, link_path))
       return link_path;
   }
-#elif defined(__NetBSD__)
-  // NB: sysctl() solution can't be used on FreeBSD since it may return
-  // a wrong path when a file is hardlinked in multiple locations.
-  // See r303285 for an earlier revert.
-
-  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__) ||   \
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) ||   \
     defined(__minix) || defined(__DragonFly__) ||                              \
     defined(__FreeBSD_kernel__) || defined(_AIX)
   char exe_path[PATH_MAX];