This is an automated email from the git hooks/post-receive script. sthibault pushed a commit to branch master in repository hurd.
commit 7fb464e167c632a62a98272f127c457d7955091f Author: Samuel Thibault <[email protected]> Date: Sun Jan 8 16:16:46 2017 +0000 patches/exec_set_exe.patch: New patch to implement /proc/<pid>/exe --- debian/changelog | 6 + debian/patches/exec_set_exe.patch | 330 +++++++++++++++++++------------------- debian/patches/newRPC.patch | 26 +++ debian/patches/series | 2 +- 4 files changed, 198 insertions(+), 166 deletions(-) diff --git a/debian/changelog b/debian/changelog index d5a3fa9..7c01919 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +hurd (1:0.9.git20170102-2) UNRELEASED; urgency=medium + + * patches/exec_set_exe.patch: New patch to implement /proc/<pid>/exe. + + -- Samuel Thibault <[email protected]> Sun, 08 Jan 2017 15:39:20 +0000 + hurd (1:0.9.git20170102-1) unstable; urgency=medium * New upstream snapshot. diff --git a/debian/patches/exec_set_exe.patch b/debian/patches/exec_set_exe.patch index 0bab9dd..0972661 100644 --- a/debian/patches/exec_set_exe.patch +++ b/debian/patches/exec_set_exe.patch @@ -1,17 +1,28 @@ -Index: hurd-debian/exec/exec.c -=================================================================== ---- hurd-debian.orig/exec/exec.c -+++ hurd-debian/exec/exec.c -@@ -1312,6 +1312,9 @@ do_exec (file_t file, - if (e.error) - goto out; - -+ if (filename) -+ proc_set_exe (boot->portarray[INIT_PORT_PROC], filename); -+ - set_name (newtask, argv, pid); - } - else +Implement /proc/<pid>/exe by adding proc_set/get_exe to the proc server, making +exec call proc_set_exe, and libps call proc_get_exe. procfs can then just +retrieve the information to make the "exe" symlink. + +* hurd/process.defs (proc_set_exe, proc_get_exe): New RPCs. +* hurd/process_request.defs: Likewise. +* hurd/process_reply.defs: Add skips for proc_set_exe and proc_get_exe RPCs. +* proc/proc.h (struct proc): Add `exe' field. +* proc/info.c (S_proc_set_exe, S_proc_get_exe): New functions. +* proc/mgt.c (process_has_exited): Free p->exe. +* exec/exec.c (do_exec): Call proc_set_exe when a filename is available. +* libps/ps.h (struct proc_stat): Add `exe_vm_alloced', `exe', and `exe_len' +field. +(PSTAT_EXE): New macro. +(PSTAT_USER_BASE): Change value to make room. +(proc_stat_exe, proc_stat_exe_len): New macros. +* libps/procstat.c (proc_stat_set_flags): Handle PSTAT_EXE case by calling +proc_get_exe. +* libps/spec.c (ps_get_exe): New function. +(ps_exe_getter): New structure. +(ps_fmt_spec): Add "Exe" specification. +* procfs/process.c (process_file_symlink_make_node, process_file_gc_exe): New +functions. +(procfs_dir_entry): Add "exe" entry. + Index: hurd-debian/hurd/process.defs =================================================================== --- hurd-debian.orig/hurd/process.defs @@ -30,12 +41,53 @@ Index: hurd-debian/hurd/process.defs +routine proc_get_exe ( + process: process_t; + which: pid_t; -+ out path: data_t, dealloc); ++ out path: string_t); +Index: hurd-debian/hurd/process_request.defs +=================================================================== +--- hurd-debian.orig/hurd/process_request.defs ++++ hurd-debian/hurd/process_request.defs +@@ -417,3 +417,6 @@ simpleroutine proc_make_task_namespace_r + process: process_t; + ureplyport reply: reply_port_t; + notify: mach_port_send_t); ++ ++skip; /* proc_set_exe */ ++skip; /* proc_get_exe */ +Index: hurd-debian/hurd/process_reply.defs +=================================================================== +--- hurd-debian.orig/hurd/process_reply.defs ++++ hurd-debian/hurd/process_reply.defs +@@ -194,3 +194,5 @@ simpleroutine proc_get_code_reply ( + end_code: vm_address_t); + + skip; /* proc_make_task_namespace */ ++skip; /* proc_set_exe */ ++skip; /* proc_get_exe */ +Index: hurd-debian/proc/proc.h +=================================================================== +--- hurd-debian.orig/proc/proc.h ++++ hurd-debian/proc/proc.h +@@ -68,6 +68,7 @@ struct proc + pthread_cond_t p_wakeup; + + /* Miscellaneous information */ ++ char *exe; /* path to binary executable */ + vm_address_t p_argv, p_envp; + vm_address_t start_code; /* all executable segments are in this range */ + vm_address_t end_code; Index: hurd-debian/proc/info.c =================================================================== --- hurd-debian.orig/proc/info.c +++ hurd-debian/proc/info.c -@@ -799,3 +799,46 @@ S_proc_getnports (struct proc *callerp, +@@ -24,6 +24,7 @@ + #include <sys/mman.h> + #include <hurd/hurd_types.h> + #include <stdlib.h> ++#include <stdio.h> + #include <errno.h> + #include <string.h> + #include <sys/resource.h> +@@ -799,3 +800,43 @@ S_proc_getnports (struct proc *callerp, return err; } @@ -63,8 +115,7 @@ Index: hurd-debian/proc/info.c +kern_return_t +S_proc_get_exe (struct proc *callerp, + pid_t pid, -+ char **path, -+ size_t *pathlen) ++ char *path) +{ + struct proc *p = pid_find (pid); + @@ -72,111 +123,41 @@ Index: hurd-debian/proc/info.c + + if (!p) + return ESRCH; -+ if (!*pathlen) -+ return 0; + + if (p->exe) -+ snprintf (*path, *pathlen, "%s", p->exe); ++ snprintf (path, 1024 /* XXX */, "%s", p->exe); + else -+ **path = 0; ++ path[0] = 0; + return 0; +} + -Index: hurd-debian/proc/proc.h -=================================================================== ---- hurd-debian.orig/proc/proc.h -+++ hurd-debian/proc/proc.h -@@ -68,6 +68,7 @@ struct proc - pthread_cond_t p_wakeup; - - /* Miscellaneous information */ -+ char *exe; /* path to binary executable */ - vm_address_t p_argv, p_envp; - vm_address_t start_code; /* all executable segments are in this range */ - vm_address_t end_code; -Index: hurd-debian/procfs/process.c +Index: hurd-debian/proc/mgt.c =================================================================== ---- hurd-debian.orig/procfs/process.c -+++ hurd-debian/procfs/process.c -@@ -95,6 +95,13 @@ static int args_filename_length (const c - /* Actual content generators */ +--- hurd-debian.orig/proc/mgt.c ++++ hurd-debian/proc/mgt.c +@@ -770,6 +770,8 @@ process_has_exited (struct proc *p) - static ssize_t -+process_file_gc_exe (struct proc_stat *ps, char **contents) -+{ -+ *contents = proc_stat_exe(ps); -+ return proc_stat_exe_len(ps); -+} -+ -+static ssize_t - process_file_gc_cmdline (struct proc_stat *ps, char **contents) - { - *contents = proc_stat_args(ps); -@@ -410,6 +417,14 @@ process_file_make_node (void *dir_hook, - return np; - } + if (!--p->p_login->l_refcnt) + free (p->p_login); ++ free (p->exe); ++ p->exe = NULL; -+static struct node * -+process_file_symlink_make_node (void *dir_hook, const void *entry_hook) -+{ -+ struct node *np = process_file_make_node (dir_hook, entry_hook); -+ if (np) procfs_node_chtype (np, S_IFLNK); -+ return np; -+} -+ - /* Stat needs its own constructor in order to set its mode according to - the --stat-mode command-line option. */ - static struct node * -@@ -425,6 +440,17 @@ process_stat_make_node (void *dir_hook, + ids_rele (p->p_id); - static struct procfs_dir_entry entries[] = { - { -+ .name = "exe", -+ .hook = & (struct process_file_desc) { -+ .get_contents = process_file_gc_exe, -+ .needs = PSTAT_EXE, -+ .no_cleanup = 1, -+ }, -+ .ops = { -+ .make_node = process_file_symlink_make_node, -+ }, -+ }, -+ { - .name = "cmdline", - .hook = & (struct process_file_desc) { - .get_contents = process_file_gc_cmdline, -Index: hurd-debian/libps/procstat.c +Index: hurd-debian/exec/exec.c =================================================================== ---- hurd-debian.orig/libps/procstat.c -+++ hurd-debian/libps/procstat.c -@@ -956,6 +956,27 @@ proc_stat_set_flags (struct proc_stat *p - } - } +--- hurd-debian.orig/exec/exec.c ++++ hurd-debian/exec/exec.c +@@ -1312,6 +1312,9 @@ do_exec (file_t file, + if (e.error) + goto out; -+ /* The process's path to binary executable */ -+ if (NEED (PSTAT_EXE, PSTAT_PID)) -+ { -+ char *buf = malloc (100); -+ ps->exe_len = 100; -+ ps->exe = buf; -+ if (ps->exe) -+ { -+ error_t err; -+ if (err = proc_get_exe (server, ps->pid, &ps->exe, &ps->exe_len)) -+ free (buf); -+ else -+ { -+ have |= PSTAT_EXE; -+ ps->exe_vm_alloced = (ps->exe != buf); -+ if (ps->exe_vm_alloced) -+ free (buf); -+ } -+ } -+ } ++ if (filename) ++ proc_set_exe (boot->portarray[INIT_PORT_PROC], filename); + - /* The ctty id port; note that this is just a magic cookie; - we use it to fetch a port to the actual terminal -- it's not useful for - much else. */ + set_name (newtask, argv, pid); + } + else Index: hurd-debian/libps/ps.h =================================================================== --- hurd-debian.orig/libps/ps.h @@ -225,6 +206,34 @@ Index: hurd-debian/libps/ps.h #define proc_stat_has(ps, needs) (((ps)->flags & needs) == needs) /* True if PS refers to a thread and not a process. */ +Index: hurd-debian/libps/procstat.c +=================================================================== +--- hurd-debian.orig/libps/procstat.c ++++ hurd-debian/libps/procstat.c +@@ -956,6 +956,23 @@ proc_stat_set_flags (struct proc_stat *p + } + } + ++ /* The process's path to binary executable */ ++ if (NEED (PSTAT_EXE, PSTAT_PID)) ++ { ++ ps->exe = malloc (sizeof(string_t)); ++ if (ps->exe) ++ { ++ if (proc_get_exe (server, ps->pid, ps->exe)) ++ free (ps->exe); ++ else ++ { ++ ps->exe_len = strlen(ps->exe); ++ have |= PSTAT_EXE; ++ ps->exe_vm_alloced = 0; ++ } ++ } ++ } ++ + /* The ctty id port; note that this is just a magic cookie; + we use it to fetch a port to the actual terminal -- it's not useful for + much else. */ Index: hurd-debian/libps/spec.c =================================================================== --- hurd-debian.orig/libps/spec.c @@ -253,63 +262,54 @@ Index: hurd-debian/libps/spec.c {0} }; -Index: hurd-debian/exec/Makefile -=================================================================== ---- hurd-debian.orig/exec/Makefile -+++ hurd-debian/exec/Makefile -@@ -22,7 +22,7 @@ makemode := server - - SRCS = exec.c main.c hashexec.c hostarch.c - OBJS = main.o hostarch.o exec.o hashexec.o \ -- execServer.o exec_startupServer.o exec_experimentalServer.o -+ execServer.o exec_startupServer.o exec_experimentalServer.o processUser.o - - target = exec exec.static - HURDLIBS = trivfs fshelp iohelp ports ihash shouldbeinlibc -Index: hurd-debian/libps/Makefile -=================================================================== ---- hurd-debian.orig/libps/Makefile -+++ hurd-debian/libps/Makefile -@@ -29,7 +29,7 @@ installhdrs = ps.h - installhdrsubdir = . - - HURDLIBS=ihash shouldbeinlibc --OBJS = $(SRCS:.c=.o) msgUser.o termUser.o -+OBJS = $(SRCS:.c=.o) msgUser.o termUser.o processUser.o - - msg-MIGUFLAGS = -D'MSG_IMPORTS=waittime 1000;' -DUSERPREFIX=ps_ - term-MIGUFLAGS = -D'TERM_IMPORTS=waittime 1000;' -DUSERPREFIX=ps_ -Index: hurd-debian/hurd/process_reply.defs +Index: hurd-debian/procfs/process.c =================================================================== ---- hurd-debian.orig/hurd/process_reply.defs -+++ hurd-debian/hurd/process_reply.defs -@@ -194,3 +194,5 @@ simpleroutine proc_get_code_reply ( - end_code: vm_address_t); +--- hurd-debian.orig/procfs/process.c ++++ hurd-debian/procfs/process.c +@@ -95,6 +95,13 @@ static int args_filename_length (const c + /* Actual content generators */ - skip; /* proc_make_task_namespace */ -+skip; /* proc_set_exe */ -+skip; /* proc_get_exe */ -Index: hurd-debian/hurd/process_request.defs -=================================================================== ---- hurd-debian.orig/hurd/process_request.defs -+++ hurd-debian/hurd/process_request.defs -@@ -417,3 +417,6 @@ simpleroutine proc_make_task_namespace_r - process: process_t; - ureplyport reply: reply_port_t; - notify: mach_port_send_t); + static ssize_t ++process_file_gc_exe (struct proc_stat *ps, char **contents) ++{ ++ *contents = proc_stat_exe(ps); ++ return proc_stat_exe_len(ps); ++} + -+skip; /* proc_set_exe */ -+skip; /* proc_get_exe */ -Index: hurd-debian/proc/mgt.c -=================================================================== ---- hurd-debian.orig/proc/mgt.c -+++ hurd-debian/proc/mgt.c -@@ -770,6 +770,8 @@ process_has_exited (struct proc *p) - - if (!--p->p_login->l_refcnt) - free (p->p_login); -+ free (p->exe); -+ p->exe = NULL; ++static ssize_t + process_file_gc_cmdline (struct proc_stat *ps, char **contents) + { + *contents = proc_stat_args(ps); +@@ -410,6 +417,14 @@ process_file_make_node (void *dir_hook, + return np; + } - ids_rele (p->p_id); ++static struct node * ++process_file_symlink_make_node (void *dir_hook, const void *entry_hook) ++{ ++ struct node *np = process_file_make_node (dir_hook, entry_hook); ++ if (np) procfs_node_chtype (np, S_IFLNK); ++ return np; ++} ++ + /* Stat needs its own constructor in order to set its mode according to + the --stat-mode command-line option. */ + static struct node * +@@ -425,6 +440,17 @@ process_stat_make_node (void *dir_hook, + static struct procfs_dir_entry entries[] = { + { ++ .name = "exe", ++ .hook = & (struct process_file_desc) { ++ .get_contents = process_file_gc_exe, ++ .needs = PSTAT_EXE, ++ .no_cleanup = 1, ++ }, ++ .ops = { ++ .make_node = process_file_symlink_make_node, ++ }, ++ }, ++ { + .name = "cmdline", + .hook = & (struct process_file_desc) { + .get_contents = process_file_gc_cmdline, diff --git a/debian/patches/newRPC.patch b/debian/patches/newRPC.patch index 856a300..eecfc37 100644 --- a/debian/patches/newRPC.patch +++ b/debian/patches/newRPC.patch @@ -23,3 +23,29 @@ index 3b8ce58e0..3cb506a27 100644 HURDLIBS:= ihash LDLIBS:= -lpthread +Index: hurd-debian/exec/Makefile +=================================================================== +--- hurd-debian.orig/exec/Makefile ++++ hurd-debian/exec/Makefile +@@ -22,7 +22,7 @@ makemode := server + + SRCS = exec.c main.c hashexec.c hostarch.c + OBJS = main.o hostarch.o exec.o hashexec.o \ +- execServer.o exec_startupServer.o exec_experimentalServer.o ++ execServer.o exec_startupServer.o exec_experimentalServer.o processUser.o + + target = exec exec.static + HURDLIBS = trivfs fshelp iohelp ports ihash shouldbeinlibc +Index: hurd-debian/libps/Makefile +=================================================================== +--- hurd-debian.orig/libps/Makefile ++++ hurd-debian/libps/Makefile +@@ -29,7 +29,7 @@ installhdrs = ps.h + installhdrsubdir = . + + HURDLIBS=ihash shouldbeinlibc +-OBJS = $(SRCS:.c=.o) msgUser.o termUser.o ++OBJS = $(SRCS:.c=.o) msgUser.o termUser.o processUser.o + + msg-MIGUFLAGS = -D'MSG_IMPORTS=waittime 1000;' -DUSERPREFIX=ps_ + term-MIGUFLAGS = -D'TERM_IMPORTS=waittime 1000;' -DUSERPREFIX=ps_ diff --git a/debian/patches/series b/debian/patches/series index 5c519d2..48b02d0 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -29,4 +29,4 @@ netdde_log.patch libports-iterate-refcount.patch exec_filename_rpctrace.patch procfs -#exec_set_exe.patch +exec_set_exe.patch -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hurd/hurd.git
