]> Savannah Git Hosting - gnulib.git/commitdiff
vma-iter: Prefer HP-UX specific API on HP-UX.
authorBruno Haible <bruno@clisp.org>
Sun, 19 Mar 2017 13:19:07 +0000 (14:19 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 19 Mar 2017 13:19:07 +0000 (14:19 +0100)
* lib/vma-iter.c (vma_iterate): Move HP-UX specific implementation up.
* lib/vma-iter.h: Update.
Just in case HP-UX ever implements mquery().

ChangeLog
lib/vma-iter.c
lib/vma-iter.h

index 396b0b8538511468ee538ce2c39ab7e28af6e38f..311d45c93e04e0b81381f0d31c2ef7d64ce40810 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-03-19  Bruno Haible  <bruno@clisp.org>
+
+       vma-iter: Prefer HP-UX specific API on HP-UX.
+       * lib/vma-iter.c (vma_iterate): Move HP-UX specific implementation up.
+       * lib/vma-iter.h: Update.
+       Just in case HP-UX ever implements mquery().
+
 2017-03-18  Paul Eggert  <eggert@cs.ucla.edu>
 
        stdalign: restore previous behavior for HP-UX IA64
index b9036ae4e631637f02c840147cc9e0607b7b9af3..2a12449a78afb4b89b5698ed2c868dee6badd6aa 100644 (file)
 # include <sys/procfs.h> /* PIOC*, prmap_t */
 #endif
 
+#if HAVE_PSTAT_GETPROCVM /* HP-UX */
+# include <sys/pstat.h> /* pstat_getprocvm */
+#endif
+
 #if defined __APPLE__ && defined __MACH__ /* Mac OS X */
 # include <mach/mach.h>
 #endif
 # include <sys/mman.h> /* mquery */
 #endif
 
-#if HAVE_PSTAT_GETPROCVM /* HP-UX */
-# include <sys/pstat.h> /* pstat_getprocvm */
-#endif
-
 /* Note: On AIX, there is a /proc/$pic/map file, that contains records of type
    prmap_t, defined in <sys/procfs.h>.  But it lists only the virtual memory
    areas that are connected to a file, not the anonymous ones.  */
@@ -369,6 +369,35 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
   close (fd);
   return -1;
 
+#elif HAVE_PSTAT_GETPROCVM /* HP-UX */
+
+  unsigned long pagesize = getpagesize ();
+  int i;
+
+  for (i = 0; ; i++)
+    {
+      struct pst_vm_status info;
+      int ret = pstat_getprocvm (&info, sizeof (info), 0, i);
+      if (ret < 0)
+        return -1;
+      if (ret == 0)
+        break;
+      {
+        unsigned long start = info.pst_vaddr;
+        unsigned long end = start + info.pst_length * pagesize;
+        unsigned int flags = 0;
+        if (info.pst_permission & PS_PROT_READ)
+          flags |= VMA_PROT_READ;
+        if (info.pst_permission & PS_PROT_WRITE)
+          flags |= VMA_PROT_WRITE;
+        if (info.pst_permission & PS_PROT_EXECUTE)
+          flags |= VMA_PROT_EXECUTE;
+
+        if (callback (data, start, end, flags))
+          break;
+      }
+    }
+
 #elif defined __APPLE__ && defined __MACH__ /* Mac OS X */
 
   task_t task = mach_task_self ();
@@ -602,35 +631,6 @@ vma_iterate (vma_iterate_callback_fn callback, void *data)
     }
   return 0;
 
-#elif HAVE_PSTAT_GETPROCVM /* HP-UX */
-
-  unsigned long pagesize = getpagesize ();
-  int i;
-
-  for (i = 0; ; i++)
-    {
-      struct pst_vm_status info;
-      int ret = pstat_getprocvm (&info, sizeof (info), 0, i);
-      if (ret < 0)
-        return -1;
-      if (ret == 0)
-        break;
-      {
-        unsigned long start = info.pst_vaddr;
-        unsigned long end = start + info.pst_length * pagesize;
-        unsigned int flags = 0;
-        if (info.pst_permission & PS_PROT_READ)
-          flags |= VMA_PROT_READ;
-        if (info.pst_permission & PS_PROT_WRITE)
-          flags |= VMA_PROT_WRITE;
-        if (info.pst_permission & PS_PROT_EXECUTE)
-          flags |= VMA_PROT_EXECUTE;
-
-        if (callback (data, start, end, flags))
-          break;
-      }
-    }
-
 #else
 
   /* Not implemented.  */
index c989e7f1ba7a1607951f2c5df917e1376fddea62..b1acaa2b549248026c9b98ecc4312b780fa7f22b 100644 (file)
@@ -52,7 +52,7 @@ extern int vma_iterate (vma_iterate_callback_fn callback, void *data);
    this platform.
    Note that even when this macro is defined, vma_iterate() may still fail to
    find any virtual memory area, for example if /proc is not mounted.  */
-#if defined __linux__ || defined __FreeBSD__ || defined __NetBSD__ || defined __sgi || defined __osf__ || (defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || HAVE_MQUERY || HAVE_PSTAT_GETPROCVM
+#if defined __linux__ || defined __FreeBSD__ || defined __NetBSD__ || defined __sgi || defined __osf__ || HAVE_PSTAT_GETPROCVM || (defined __APPLE__ && defined __MACH__) || (defined _WIN32 || defined __WIN32__) || defined __CYGWIN__ || defined __BEOS__ || defined __HAIKU__ || HAVE_MQUERY
 # define VMA_ITERATE_SUPPORTED 1
 #endif