[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/7] procfs: implement /proc/N/maps
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/7] procfs: implement /proc/N/maps |
Date: |
Mon, 29 Sep 2014 01:06:31 +0200 |
User-agent: |
Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30) |
Justus Winter, le Mon 22 Sep 2014 11:38:38 +0200, a écrit :
> Fixes https://savannah.gnu.org/bugs/?32770 .
Ack.
> * procfs/process.c (process_file_gc_maps): New function.
> (entries): Use the new function to implement /proc/N/maps.
> ---
> procfs/process.c | 104
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 103 insertions(+), 1 deletion(-)
>
> diff --git a/procfs/process.c b/procfs/process.c
> index 4854148..a9b1a59 100644
> --- a/procfs/process.c
> +++ b/procfs/process.c
> @@ -1,5 +1,5 @@
> /* Hurd /proc filesystem, implementation of process directories.
> - Copyright (C) 2010 Free Software Foundation, Inc.
> + Copyright (C) 2010,14 Free Software Foundation, Inc.
>
> This file is part of the GNU Hurd.
>
> @@ -109,6 +109,100 @@ process_file_gc_environ (struct proc_stat *ps, char
> **contents)
> }
>
> static ssize_t
> +process_file_gc_maps (struct proc_stat *ps, char **contents)
> +{
> + error_t err;
> + FILE *s;
> + size_t contents_len;
> + vm_offset_t addr = 0;
> + vm_size_t size;
> + vm_prot_t prot, max_prot;
> + mach_port_t obj;
> + vm_offset_t offs;
> + vm_inherit_t inh;
> + int shared;
> +
> + /* Unfortunately we cannot resolve memory objects to their backing
> + file (yet), so we use the port name as identifier. To avoid the
> + same name from being used again and again, we defer the
> + deallocation until the end of the function. We use a simple
> + linked list for this purpose. */
> + struct mem_obj
> + {
> + mach_port_t port;
> + struct mem_obj *next;
> + };
> + struct mem_obj *objects = NULL;
> +
> + s = open_memstream (contents, &contents_len);
> + if (s == NULL)
> + {
> + *contents = NULL;
> + return 0;
> + }
> +
> + while (1)
> + {
> + err =
> + vm_region (ps->task, &addr, &size, &prot, &max_prot, &inh,
> + &shared, &obj, &offs);
> + if (err)
> + break;
> +
> + fprintf (s, "%0*x-%0*x %c%c%c%c %0*x %s %d ",
> + /* Address range. */
> + 2*sizeof s, addr,
> + 2*sizeof s, addr + size,
> + /* Permissions. */
> + prot & VM_PROT_READ? 'r': '-',
> + prot & VM_PROT_WRITE? 'w': '-',
> + prot & VM_PROT_EXECUTE? 'x': '-',
> + shared? 's': 'p',
> + /* Offset. */
> + 2*sizeof s, offs,
> + /* Device. */
> + "00:00",
> + /* Inode. */
> + 0);
> +
> + /* Pathname. */
> + if (MACH_PORT_VALID (obj))
> + {
> + struct mem_obj *o = malloc (sizeof *o);
> + if (o)
> + {
> + o->port = obj;
> + o->next = objects;
> + objects = o;
> + }
> + else
> + mach_port_deallocate (mach_task_self (), obj);
> +
> + fprintf (s, "[mem_obj=%d]\n", obj);
> + }
> + else
> + fprintf (s, "\n");
> +
> + addr += size;
> + }
> +
> + while (objects)
> + {
> + struct mem_obj *o = objects;
> + mach_port_deallocate (mach_task_self (), o->port);
> + objects = o->next;
> + free (o);
> + }
> +
> + /* This is a bit awkward, fortunately vm_region should not fail. */
> + if (err != KERN_NO_SPACE)
> + fprintf (s, "%s\n", strerror (err));
> +
> + fclose (s);
> + return contents_len;
> +}
> +
> +static ssize_t
> process_file_gc_stat (struct proc_stat *ps, char **contents)
> {
> struct procinfo *pi = proc_stat_proc_info (ps);
> @@ -348,6 +442,14 @@ static struct procfs_dir_entry entries[] = {
> },
> },
> {
> + .name = "maps",
> + .hook = & (struct process_file_desc) {
> + .get_contents = process_file_gc_maps,
> + .needs = PSTAT_TASK,
> + .mode = 0400,
> + },
> + },
> + {
> .name = "stat",
> .hook = & (struct process_file_desc) {
> .get_contents = process_file_gc_stat,
> --
> 2.1.0
>
--
Samuel
FYLG> Tiens, vlà une URL qui va bien :
FYLG> ftp://127.0.0.1/WaReZ/NiouZeS/WinDoZe/NeWSMoNGeR/SuPeR
c'est gentil sauf que l'adresse ne fonctionne pas sa me fais une erreur
-+- Furtif in Guide du Neuneu Usenet : <MODE CERVEAU OFF> -+-
- [PATCH 2/7] procfs: implement /proc/filesystems, (continued)
- [PATCH 5/7] procfs: generalize the translator linkage code, Justus Winter, 2014/09/22
- Re: [PATCH 5/7] procfs: generalize the translator linkage code, Samuel Thibault, 2014/09/28
- [PATCH 6/7] procfs: reorganize rootdir.c, Justus Winter, 2014/09/22
- Re: [PATCH 6/7] procfs: reorganize rootdir.c, Samuel Thibault, 2014/09/28
- [PATCH 7/7] procfs: provide magic retry response for /proc/self, Justus Winter, 2014/09/22
- Re: [PATCH 7/7] procfs: provide magic retry response for /proc/self, Samuel Thibault, 2014/09/30
- And the libc patch, Justus Winter, 2014/09/22
- [PATCH] hurd: Handle `proc/self' magical lookup retry, Justus Winter, 2014/09/22
- Re: [PATCH 1/7] procfs: implement /proc/N/maps,
Samuel Thibault <=
- [PATCH 5/6] procfs: reorganize rootdir.c, Justus Winter, 2014/09/21
- [PATCH 6/6] procfs: provide magic retry response for /proc/self, Justus Winter, 2014/09/21