# 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. */
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 ();
}
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. */
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