aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/yosys.cc
diff options
context:
space:
mode:
authorChristian Krämer <uddka@student.kit.edu>2018-05-05 13:02:44 +0200
committerClifford Wolf <clifford@clifford.at>2018-05-13 13:08:26 +0200
commitc1ecb1b2f1427e5d8616c9177c6962ebf1449a47 (patch)
treef92b046759de2cc9ab0ff68ab2e1d850ae4f7de3 /kernel/yosys.cc
parent1167538d265b634d6d4d825e9d92d2211f7beee9 (diff)
downloadyosys-c1ecb1b2f1427e5d8616c9177c6962ebf1449a47.tar.gz
yosys-c1ecb1b2f1427e5d8616c9177c6962ebf1449a47.tar.bz2
yosys-c1ecb1b2f1427e5d8616c9177c6962ebf1449a47.zip
Add "#ifdef __FreeBSD__"
(Re-commit e3575a8 with corrected author field)
Diffstat (limited to 'kernel/yosys.cc')
-rw-r--r--kernel/yosys.cc27
1 files changed, 26 insertions, 1 deletions
diff --git a/kernel/yosys.cc b/kernel/yosys.cc
index 49d644548..aa5901271 100644
--- a/kernel/yosys.cc
+++ b/kernel/yosys.cc
@@ -46,10 +46,15 @@
# include <unistd.h>
# include <dirent.h>
# include <sys/types.h>
+# include <sys/wait.h>
# include <sys/stat.h>
# include <glob.h>
#endif
+#ifdef __FreeBSD__
+# include <sys/sysctl.h>
+#endif
+
#include <limits.h>
#include <errno.h>
@@ -72,7 +77,7 @@ std::vector<void*> memhasher_store;
void memhasher_on()
{
-#ifdef __linux__
+#if defined(__linux__) || defined(__FreeBSD__)
memhasher_rng += time(NULL) << 16 ^ getpid();
#endif
memhasher_store.resize(0x10000);
@@ -667,6 +672,26 @@ std::string proc_self_dirname()
buflen--;
return std::string(path, buflen);
}
+#elif defined(__FreeBSD__)
+std::string proc_self_dirname()
+{
+ int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
+ size_t buflen;
+ char *buffer;
+ std::string path;
+ if (sysctl(mib, 4, NULL, &buflen, NULL, 0) != 0)
+ log_error("sysctl failed: %s\n", strerror(errno));
+ buffer = (char*)malloc(buflen);
+ if (buffer == NULL)
+ log_error("malloc failed: %s\n", strerror(errno));
+ if (sysctl(mib, 4, buffer, &buflen, NULL, 0) != 0)
+ log_error("sysctl failed: %s\n", strerror(errno));
+ while (buflen > 0 && buffer[buflen-1] != '/')
+ buflen--;
+ path.assign(buffer, buflen);
+ free(buffer);
+ return path;
+}
#elif defined(__APPLE__)
std::string proc_self_dirname()
{