[PATCH] D5693: Implement argv0-less getMainExecutable for FreeBSD
Jan Beich via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 25 15:10:46 PDT 2019
jbeich added inline comments.
Herald added a subscriber: krytarowski.
================
Comment at: lib/Support/Unix/Path.inc:51
#endif
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__)
+#include <sys/sysctl.h>
----------------
Add `|| defined(__DragonFly__)` as it has `KERN_PROC_PATHNAME`.
================
Comment at: lib/Support/Unix/Path.inc:167
}
-#elif defined(__FreeBSD__) || defined (__NetBSD__) || defined(__Bitrig__) || \
- defined(__OpenBSD__) || defined(__minix) || defined(__DragonFly__) || \
- defined(__FreeBSD_kernel__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || \
+ defined(__NetBSD__)
----------------
Add `|| defined(__DragonFly__)` as its `KERN_PROC_PATHNAME` [is similar](https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/f849311b84a9) to FreeBSD.
================
Comment at: lib/Support/Unix/Path.inc:171
+ size_t len = sizeof(exe_path);
+ int name[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME };
+
----------------
Not valid on NetBSD, see [sysctl(7)](https://netbsd.gw.com/cgi-bin/man-cgi?sysctl+7+NetBSD-current). Try instead:
```lang=c
#if defined(__NetBSD__)
int name[4] = { CTL_KERN, KERN_PROC_ARGS, -1, KERN_PROC_PATHNAME};
#else
int name[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
#endif
```
================
Comment at: lib/Support/Unix/Path.inc:173
+
+ name[3] = getpid();
+ if (sysctl(name, 4, exe_path, &len, NULL, 0) == 0)
----------------
`getpid()` can be optimized to `-1`. Other LLVM consumers of `KERN_PROC_PATHNAME` already use `-1`.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D5693/new/
https://reviews.llvm.org/D5693
More information about the llvm-commits
mailing list