summaryrefslogtreecommitdiff
path: root/boot
diff options
context:
space:
mode:
authorJustus Winter <justus@gnupg.org>2017-02-28 17:57:37 +0100
committerJustus Winter <justus@gnupg.org>2017-02-28 18:02:40 +0100
commit5ac0c5c8e2e13217aabe7dd6e91ff218d0db6346 (patch)
tree7f6da331d141f618c13c6862843d394776dff3cd /boot
parent9beba9b6d168f59eeb74859ab5d88d9cabfe6f37 (diff)
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.c19
-rw-r--r--boot/private.h25
-rw-r--r--boot/userland-boot.c15
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);