[Openmp-commits] [PATCH] D69816: [OpenMP] DragonflyBSD support

David CARLIER via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Mon Nov 4 12:22:41 PST 2019


devnexen created this revision.
devnexen added reviewers: AndreyChurbanov, Hahnfeld.
devnexen created this object with visibility "All Users".
Herald added subscribers: openmp-commits, guansong.
Herald added a reviewer: jdoerfert.
Herald added a project: OpenMP.

Repository:
  rOMP OpenMP

https://reviews.llvm.org/D69816

Files:
  openmp/runtime/src/kmp_wrapper_getpid.h
  openmp/runtime/src/z_Linux_util.cpp


Index: openmp/runtime/src/z_Linux_util.cpp
===================================================================
--- openmp/runtime/src/z_Linux_util.cpp
+++ openmp/runtime/src/z_Linux_util.cpp
@@ -31,6 +31,10 @@
 #include <sys/times.h>
 #include <unistd.h>
 
+#if KMP_OS_DRAGONFLY
+#include <kvm.h>
+#endif
+
 #if KMP_OS_LINUX && !KMP_OS_CNK
 #include <sys/sysinfo.h>
 #if KMP_USE_FUTEX
@@ -2159,8 +2163,36 @@
   }
 #elif KMP_OS_DRAGONFLY
 
-  // FIXME(DragonFly): Implement this
-  found = 1;
+  struct kinfo_proc *proc;
+  struct vmspace vm;
+  struct vm_map m;
+  struct vm_map_entry entry, *st;
+  struct proc p;
+  int nm;
+  char err[_POSIX2_LINE_MAX];
+
+  kvm_t *k = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, err);
+  KMP_ASSERT(k);
+
+  proc = kvm_getprocs (k, KERN_PROC_PID, getpid(), &nm);
+  rc = 0;
+
+  kvm_read (k, (uintptr_t)proc->kp_paddr, &p, sizeof (p));
+  kvm_read (k, (uintptr_t)p.p_vmspace, &vm, sizeof (vm));
+
+  m = vm.vm_map;
+
+  for (st = kvm_vm_map_entry_first(k, &m, &entry);
+       st; st = kvm_vm_map_entry_next(k, st, &entry)) {
+	  if (entry.maptype == VM_MAPTYPE_SUBMAP || entry.ba.object)
+		  continue;
+	  if (entry.ba.start >= (uint64_t)addr && entry.ba.end <= (uint64_t)addr) {
+		  found = 1;
+		  break;
+	  }
+  }
+
+  kvm_close (k);
 
 #else
 
Index: openmp/runtime/src/kmp_wrapper_getpid.h
===================================================================
--- openmp/runtime/src/kmp_wrapper_getpid.h
+++ openmp/runtime/src/kmp_wrapper_getpid.h
@@ -23,7 +23,7 @@
 #if KMP_OS_DARWIN
 // OS X
 #define __kmp_gettid() syscall(SYS_thread_selfid)
-#elif KMP_OS_FREEBSD
+#elif KMP_OS_FREEBSD || KMP_OS_DRAGONFLY
 #include <pthread_np.h>
 #define __kmp_gettid() pthread_getthreadid_np()
 #elif KMP_OS_NETBSD


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69816.227757.patch
Type: text/x-patch
Size: 1748 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20191104/36d2f822/attachment.bin>


More information about the Openmp-commits mailing list