FreeBSD Bugzilla – Attachment 210019 Details for
Bug 242533
devel/libgtop: error: no member named 'next' in 'struct vm_map_entry
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch: make devel/libgtop use right instead of next in struct vm_map_entry (Revision 6)
libgtop-6.patch (text/plain), 4.80 KB, created by
Neel Chauhan
on 2019-12-18 00:23:16 UTC
(
hide
)
Description:
Patch: make devel/libgtop use right instead of next in struct vm_map_entry (Revision 6)
Filename:
MIME Type:
Creator:
Neel Chauhan
Created:
2019-12-18 00:23:16 UTC
Size:
4.80 KB
patch
obsolete
>Index: files/patch-sysdeps_freebsd_procmap.c >=================================================================== >--- files/patch-sysdeps_freebsd_procmap.c (revision 520332) >+++ files/patch-sysdeps_freebsd_procmap.c (working copy) >@@ -1,31 +1,109 @@ >---- sysdeps/freebsd/procmap.c.orig 2015-08-17 18:59:37 UTC >-+++ sysdeps/freebsd/procmap.c >-@@ -52,6 +52,8 @@ >- #include <sys/mount.h> >- #include <ufs/ufs/quota.h> >- #include <ufs/ufs/inode.h> >-+#include <ufs/ufs/extattr.h> >-+#include <ufs/ufs/ufsmount.h> >- #include <fs/devfs/devfs.h> >- #if (__FreeBSD_version >= 600006) || defined(__FreeBSD_kernel__) >- #include <fs/devfs/devfs_int.h> >-@@ -86,6 +88,8 @@ _glibtop_sysdeps_freebsd_dev_inode (glib >- struct cdev_priv priv; >- #if __FreeBSD_version < 800039 >- struct cdev si; >-+#else >-+ struct ufsmount um; >- #endif >+--- sysdeps/freebsd/procmap.c.orig 2017-08-07 18:43:41.000000000 -0400 >++++ sysdeps/freebsd/procmap.c 2019-12-17 19:20:59.044661000 -0500 >+@@ -231,6 +231,33 @@ >+ server->sysdeps.proc_map = _glibtop_sysdeps_proc_map; >+ } > >- *inum = 0; >-@@ -167,7 +171,9 @@ _glibtop_sysdeps_freebsd_dev_inode (glib >++static int >++vm_map_reader(void *token, vm_map_entry_t addr, vm_map_entry_t dest) >++{ >++ kvm_t kd; >++ >++ kd = (kvm_t *)token; >++ return (kvm_read(kd, (gulong)addr, dest, sizeof(*dest)) == >++ sizeof(*dest)); >++} >++ >++#if FREEBSDV<1300062 >++typedef int vm_map_entry_reader(void *token, vm_map_entry_t addr, >++ vm_map_entry_t dest); >++ >++static inline vm_map_entry_t >++vm_map_entry_read_succ(void *token, struct vm_map_entry *const clone, >++ vm_map_entry_reader reader) >++{ >++ vm_map_entry_t next; >++ >++ next = clone->next; >++ if (!reader(token, next, clone)) >++ return (NULL); >++ return (next); >++} >++#endif /* FREEBSD<1300062 */ >++ >+ /* Provides detailed information about a process. */ > >+ glibtop_map_entry * >+@@ -238,13 +265,12 @@ >+ pid_t pid) >+ { >+ struct kinfo_proc *pinfo; >+- struct vm_map_entry entry, *first; >++ struct vm_map_entry entry; >+ struct vmspace vmspace; >+ struct vm_object object; >+ GArray *maps; >+ struct vnode vnode; >+- int count; >+- int update = 0; >++ int i, count; > >- #if (__FreeBSD_version >= 800039) || (__FreeBSD_kernel_version >= 800039) >-- if (kvm_read (server->machine->kd, (gulong) cdev2priv(inode.i_dev), (char *) &priv, >-+ if (kvm_read (server->machine->kd, (gulong) inode.i_ump, (char *) &um, >-+ sizeof (um)) != sizeof (um) || >-+ kvm_read (server->machine->kd, (gulong) cdev2priv(um.um_dev), (char *) &priv, >- sizeof (priv)) >- #else >- if (kvm_read (server->machine->kd, (gulong) inode.i_dev, (char *) &si, >+ memset (buf, 0, sizeof (glibtop_proc_map)); >+ >+@@ -273,16 +299,6 @@ >+ return NULL; >+ } >+ >+- first = vmspace.vm_map.header.next; >+- >+- if (kvm_read (server->machine->kd, >+- (gulong) vmspace.vm_map.header.next, >+- (char *) &entry, sizeof (entry)) != sizeof (entry)) { >+- glibtop_warn_io_r (server, "kvm_read (entry)"); >+- glibtop_suid_leave (server); >+- return NULL; >+- } >+- >+ /* Walk through the `vm_map_entry' list ... */ >+ >+ /* I tested this a few times with `mmap'; as soon as you write >+@@ -292,21 +308,17 @@ >+ maps = g_array_sized_new(FALSE, FALSE, sizeof(glibtop_map_entry), >+ vmspace.vm_map.nentries); >+ >+- do { >++ entry = vmspace.vm_map.header; >++ for (i = 0; i < vmspace.vm_map.nentries; i++) { >+ glibtop_map_entry *mentry; >+ guint64 inum, dev; >+ guint len; >+ >+- if (update) { >+- if (kvm_read (server->machine->kd, >+- (gulong) entry.next, >+- (char *) &entry, sizeof (entry)) != sizeof (entry)) { >+- glibtop_warn_io_r (server, "kvm_read (entry)"); >+- continue; >+- } >+- } else { >+- update = 1; >+- } >++ if (!vm_map_entry_read_succ(server->machine->kd, &entry, vm_map_reader)) { >++ glibtop_warn_io_r (server, "kvm_read (entry)"); >++ glibtop_suid_leave (server); >++ return NULL; >++ } >+ >+ if (entry.eflags & (MAP_ENTRY_IS_SUB_MAP)) >+ continue; >+@@ -376,9 +388,7 @@ >+ mentry->perm |= GLIBTOP_MAP_PERM_WRITE; >+ if (entry.protection & VM_PROT_EXECUTE) >+ mentry->perm |= GLIBTOP_MAP_PERM_EXECUTE; >+- >+- } while (entry.next != first); >+- >++ } >+ glibtop_suid_leave (server); >+ >+ buf->flags = _glibtop_sysdeps_proc_map;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 242533
:
209816
|
209828
|
209957
|
209975
|
210008
|
210013
| 210019 |
210610
|
210676