FreeBSD Bugzilla – Attachment 210610 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]
Updated patch for r356432 and later
D22929-2.diff (text/plain), 5.30 KB, created by
Tomoaki AOKI
on 2020-01-11 06:21:53 UTC
(
hide
)
Description:
Updated patch for r356432 and later
Filename:
MIME Type:
Creator:
Tomoaki AOKI
Created:
2020-01-11 06:21:53 UTC
Size:
5.30 KB
patch
obsolete
>Index: devel/libgtop/files/patch-sysdeps_freebsd_procmap.c >=================================================================== >--- devel/libgtop/files/patch-sysdeps_freebsd_procmap.c >+++ devel/libgtop/files/patch-sysdeps_freebsd_procmap.c >@@ -1,5 +1,5 @@ >---- sysdeps/freebsd/procmap.c.orig 2015-08-17 18:59:37 UTC >-+++ sysdeps/freebsd/procmap.c >+--- sysdeps/freebsd/procmap.c.orig 2017-08-07 18:43:41.000000000 -0400 >++++ sysdeps/freebsd/procmap.c 2020-01-10 22:59:48.661882000 +0900 > @@ -52,6 +52,8 @@ > #include <sys/mount.h> > #include <ufs/ufs/quota.h> >@@ -9,7 +9,7 @@ > #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 >+@@ -95,12 +97,14 @@ _glibtop_sysdeps_freebsd_dev_inode (glibtop *server, s > struct cdev_priv priv; > #if __FreeBSD_version < 800039 > struct cdev si; >@@ -18,14 +18,114 @@ > #endif > > *inum = 0; >-@@ -167,7 +171,9 @@ _glibtop_sysdeps_freebsd_dev_inode (glib >+ *dev = 0; > >+- if (kvm_read (server->machine->kd, (gulong) &vnode->v_tag, >++ if (kvm_read (server->machine->kd, (gulong) &vnode->v_lock.lock_object.lo_name, >+ (char *) &tagptr, sizeof (tagptr)) != sizeof (tagptr) || >+ kvm_read (server->machine->kd, (gulong) tagptr, >+ (char *) tagstr, sizeof (tagstr)) != sizeof (tagstr)) >+@@ -231,6 +235,32 @@ _glibtop_init_proc_map_p (glibtop *server) >+ server->sysdeps.proc_map = _glibtop_sysdeps_proc_map; >+ } > >- #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, >++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 (__FreeBSD_version < 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 >++ >+ /* Provides detailed information about a process. */ >+ >+ glibtop_map_entry * >+@@ -238,13 +268,12 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_ >+ 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; >+ >+ memset (buf, 0, sizeof (glibtop_proc_map)); >+ >+@@ -273,16 +302,6 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_ >+ 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 +311,17 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_ >+ 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; >+@@ -377,7 +392,7 @@ glibtop_get_proc_map_p (glibtop *server, glibtop_proc_ >+ if (entry.protection & VM_PROT_EXECUTE) >+ mentry->perm |= GLIBTOP_MAP_PERM_EXECUTE; >+ >+- } while (entry.next != first); >++ } >+ >+ glibtop_suid_leave (server); >+
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