diff options
author | Justus Winter <justus@gnupg.org> | 2017-02-28 17:57:37 +0100 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2017-02-28 18:02:40 +0100 |
commit | 5ac0c5c8e2e13217aabe7dd6e91ff218d0db6346 (patch) | |
tree | 7f6da331d141f618c13c6862843d394776dff3cd /boot | |
parent | 9beba9b6d168f59eeb74859ab5d88d9cabfe6f37 (diff) | |
download | hurd-5ac0c5c8e2e13217aabe7dd6e91ff218d0db6346.tar.gz hurd-5ac0c5c8e2e13217aabe7dd6e91ff218d0db6346.tar.bz2 hurd-5ac0c5c8e2e13217aabe7dd6e91ff218d0db6346.zip |
boot: Add a verbose option.
* boot/boot.c (verbose): New variable.
(options): New option.
(parse_opt): Handle new option.
(ds_device_open): Be verbose if so desired.
(task_died): Likewise.
(S_mach_notify_new_task): Likewise.
* boot/userland-boot.c (boot_script_task_create): Likewise.
(boot_script_task_resume): Likewise.
* boot/private.h: New file.
Diffstat (limited to 'boot')
-rw-r--r-- | boot/boot.c | 19 | ||||
-rw-r--r-- | boot/private.h | 25 | ||||
-rw-r--r-- | boot/userland-boot.c | 15 |
3 files changed, 57 insertions, 2 deletions
diff --git a/boot/boot.c b/boot/boot.c index 2fe1688e..78bd1838 100644 --- a/boot/boot.c +++ b/boot/boot.c @@ -68,6 +68,8 @@ #include <hurd.h> #include <assert.h> +#include "private.h" + /* We support two modes of operation. Traditionally, Subhurds were privileged, i.e. they had the privileged kernel ports. This has a few drawbacks. Privileged subhurds can manipulate all tasks on the @@ -113,6 +115,8 @@ host_exit (int status) exit (status); } +int verbose; + mach_port_t privileged_host_port, master_device_port; mach_port_t pseudo_privileged_host_port; mach_port_t pseudo_master_device_port; @@ -230,6 +234,8 @@ static struct argp_option options[] = "Boot in single user mode" }, { "kernel-command-line", 'c', "COMMAND LINE", 0, "Simulated multiboot command line to supply" }, + { "verbose", 'v', 0, 0, + "Be verbose" }, { "pause" , 'd', 0, 0, "Pause for user confirmation at various times during booting" }, { "isig", 'I', 0, 0, @@ -305,6 +311,10 @@ parse_opt (int key, char *arg, struct argp_state *state) case 'I': isig = 1; break; + case 'v': + verbose += 1; + break; + case 's': case 'd': len = strlen (bootstrap_args); if (len >= sizeof bootstrap_args - 1) @@ -883,6 +893,9 @@ ds_device_open (mach_port_t master_port, if (master_port != pseudo_master_device_port) return D_INVALID_OPERATION; + if (verbose > 1) + fprintf (stderr, "Device '%s' being opened.\r\n", name); + if (!strcmp (name, "console")) { #if 0 @@ -1940,6 +1953,9 @@ static struct hurd_ihash task_ihash = static void task_died (mach_port_t name) { + if (verbose > 1) + fprintf (stderr, "Task '%u' died.\r\n", name); + hurd_ihash_remove (&task_ihash, (hurd_ihash_key_t) name); } @@ -1955,6 +1971,9 @@ S_mach_notify_new_task (mach_port_t notify, if (notify != task_notification_port) return EOPNOTSUPP; + if (verbose > 1) + fprintf (stderr, "Task '%u' created by task '%u'.\r\n", task, parent); + err = mach_port_request_notification (mach_task_self (), task, MACH_NOTIFY_DEAD_NAME, 0, dead_task_notification_port, diff --git a/boot/private.h b/boot/private.h new file mode 100644 index 00000000..46362521 --- /dev/null +++ b/boot/private.h @@ -0,0 +1,25 @@ +/* Boot boots Subhurds. + + Copyright (C) 2017 Free Software Foundation, Inc. + + This file is part of the GNU Hurd. + + The GNU Hurd is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2, or (at + your option) any later version. + + The GNU Hurd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the GNU Hurd. If not, see <http://www.gnu.org/licenses/>. */ + +#ifndef BOOT_PRIVATE_H +#define BOOT_PRIVATE_H + +int verbose; + +#endif /* BOOT_PRIVATE_H */ diff --git a/boot/userland-boot.c b/boot/userland-boot.c index 583078f1..2f9bd8cd 100644 --- a/boot/userland-boot.c +++ b/boot/userland-boot.c @@ -31,6 +31,7 @@ #include <error.h> #include "boot_script.h" +#include "private.h" void * boot_script_malloc (unsigned int size) @@ -48,7 +49,12 @@ boot_script_free (void *ptr, unsigned int size) int boot_script_task_create (struct cmd *cmd) { - error_t err = task_create (mach_task_self (), 0, &cmd->task); + error_t err; + + if (verbose) + fprintf (stderr, "Creating task '%s'.\r\n", cmd->path); + + err = task_create (mach_task_self (), 0, &cmd->task); if (err) { error (0, err, "%s: task_create", cmd->path); @@ -66,7 +72,12 @@ boot_script_task_create (struct cmd *cmd) int boot_script_task_resume (struct cmd *cmd) { - error_t err = task_resume (cmd->task); + error_t err; + + if (verbose) + fprintf (stderr, "Resuming task '%s'.\r\n", cmd->path); + + err = task_resume (cmd->task); if (err) { error (0, err, "%s: task_resume", cmd->path); |