summaryrefslogtreecommitdiff
path: root/exec/exec.c
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2014-02-21 14:58:21 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2014-02-23 14:35:41 +0100
commit4473d16e7cdad08eccad95f5920e1aa171d5512d (patch)
treeda7d02778bdbd10503e0326909b6691114564883 /exec/exec.c
parentc3936e8c1b40cbe2e88c7930a99728cab95d2528 (diff)
exec: provide a meaningful name for new tasks
The name will be used in error messages printed by the kernel. This makes attributing the errors to processes possible. * exec/exec.c (do_exec): Set the name of the new task.
Diffstat (limited to 'exec/exec.c')
-rw-r--r--exec/exec.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/exec/exec.c b/exec/exec.c
index fad94926..e693f633 100644
--- a/exec/exec.c
+++ b/exec/exec.c
@@ -1151,14 +1151,29 @@ do_exec (file_t file,
}
boot->user_entry = e.entry; /* already adjusted in `load' */
- /* Set the start_code and end_code values for this process.
- /hurd/exec is used to start /hurd/proc, so at this point there is
+ /* /hurd/exec is used to start /hurd/proc, so at this point there is
no proc server, so we need to be careful here. */
if (boot->portarray[INIT_PORT_PROC] != MACH_PORT_NULL)
- e.error = proc_set_code (boot->portarray[INIT_PORT_PROC],
- e.start_code, e.end_code);
- if (e.error)
- goto out;
+ {
+ /* Set the start_code and end_code values for this process. */
+ e.error = proc_set_code (boot->portarray[INIT_PORT_PROC],
+ e.start_code, e.end_code);
+ if (e.error)
+ goto out;
+
+ pid_t pid;
+ e.error = proc_task2pid (boot->portarray[INIT_PORT_PROC],
+ newtask, &pid);
+ if (e.error)
+ goto out;
+
+ char *name;
+ if (asprintf (&name, "%s(%d)", argv, pid) > 0)
+ {
+ task_set_name (newtask, name);
+ free (name);
+ }
+ }
/* Create the initial thread. */
e.error = thread_create (newtask, &thread);