All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] Don't pass filename in multiboot command line
@ 2009-08-01 13:23 Vladimir 'phcoder' Serbinenko
  2009-08-01 14:34 ` Robert Millan
  0 siblings, 1 reply; 17+ messages in thread
From: Vladimir 'phcoder' Serbinenko @ 2009-08-01 13:23 UTC (permalink / raw)
  To: The development of GRUB 2

[-- Attachment #1: Type: text/plain, Size: 1377 bytes --]

According to multiboot specification "It should be possible to write
compliant boot loaders that load the OS image from a variety of
sources, including floppy disk, hard disk, and across a network. "
It implicitly says that kernel shouldn't care about filename used by
bootloader. About commandline it's only said:
"If bit 2 of the `flags' longword is set, the `cmdline' field is
valid, and contains the physical address of the command line to be
passed to the kernel. The command line is a normal C-style
zero-terminated string"
Currently grub however passes filename as first argument of command line.
Felix Zielcke did a series of tests and it revealed that OSes
subdivide into two categories:
1) Ones that don't care whether this argument is omitted altogether or
not (e.g. the don't ignore second argument even if filename is
omitted)
2) Solaris (for kernel name) and AROS (for module name) both assume
that filename is the same under grub and OS. This assumption isn't
necessarily true. These OSes are broken one way or another. If we omit
the first argument user can workaround the problem by supplying
kernel/module OS  image name as first argument of multiboot/module
command line
E.g.
multiboot /RPOOL/opensolaris/@/platform/i86pc/kernel /platform/i86pc/kernel
-- 
Regards
Vladimir 'phcoder' Serbinenko

Personal git repository: http://repo.or.cz/w/grub2/phcoder.git

[-- Attachment #2: mbcmd.diff --]
[-- Type: text/plain, Size: 2003 bytes --]

diff --git a/ChangeLog b/ChangeLog
index e553828..429bb75 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-08-01  Vladimir Serbinenko  <phcoder@gmail.com>
+
+	* loader/i386/multiboot.c (grub_multiboot): Don't pass filename to
+	payload.
+	(grub_module): Likewise.
+
 2009-07-31  Vladimir Serbinenko  <phcoder@gmail.com>
 
 	* partmap/pc.c (pc_partition_map_iterate): Check that boot flags are
diff --git a/loader/i386/multiboot.c b/loader/i386/multiboot.c
index 87ffcae..f25f77b 100644
--- a/loader/i386/multiboot.c
+++ b/loader/i386/multiboot.c
@@ -257,9 +257,12 @@ grub_multiboot (int argc, char *argv[])
   mmap_length = grub_get_multiboot_mmap_len ();
 
   /* Figure out cmdline length.  */
-  for (i = 0, cmdline_length = 0; i < argc; i++)
+  for (i = 1, cmdline_length = 0; i < argc; i++)
     cmdline_length += grub_strlen (argv[i]) + 1;
 
+  if (cmdline_length == 0)
+    cmdline_length = 1;
+
   boot_loader_name_length = sizeof(PACKAGE_STRING);
 
 #define cmdline_addr(x)		((void *) ((x) + code_size))
@@ -351,14 +354,16 @@ grub_multiboot (int argc, char *argv[])
   if (! cmdline)
     goto fail;
 
-  for (i = 0; i < argc; i++)
+  for (i = 1; i < argc; i++)
     {
       p = grub_stpcpy (p, argv[i]);
       *(p++) = ' ';
     }
 
   /* Remove the space after the last word.  */
-  *(--p) = '\0';
+  if (p != cmdline)
+    p--;
+  *p = 0;
 
   mbi->flags |= MULTIBOOT_INFO_CMDLINE;
   mbi->cmdline = (grub_uint32_t) cmdline_addr (grub_multiboot_payload_dest);
@@ -422,9 +427,12 @@ grub_module  (int argc, char *argv[])
       goto fail;
     }
 
-  for (i = 0; i < argc; i++)
+  for (i = 1; i < argc; i++)
     len += grub_strlen (argv[i]) + 1;
 
+  if (len == 0)
+    len = 1;
+
   cmdline = p = grub_malloc (len);
   if (! cmdline)
     goto fail;
@@ -436,7 +444,9 @@ grub_module  (int argc, char *argv[])
     }
 
   /* Remove the space after the last word.  */
-  *(--p) = '\0';
+  if (p != cmdline)
+    p--;
+  *p = '\0';
 
   if (mbi->flags & MULTIBOOT_INFO_MODS)
     {

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2009-11-24 13:02 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-01 13:23 [RFC] Don't pass filename in multiboot command line Vladimir 'phcoder' Serbinenko
2009-08-01 14:34 ` Robert Millan
2009-08-01 14:37   ` Vladimir 'phcoder' Serbinenko
2009-08-01 15:05     ` Robert Millan
2009-08-01 15:13       ` Vladimir 'phcoder' Serbinenko
2009-08-02 21:38         ` Robert Millan
2009-08-02 21:42           ` Vladimir 'phcoder' Serbinenko
2009-08-02 22:41             ` Robert Millan
2009-08-14 15:20               ` Vladimir 'phcoder' Serbinenko
2009-08-27  1:58                 ` Seth Goldberg
2009-08-27  2:38                   ` Seth Goldberg
2009-08-27 10:55                     ` Michal Suchanek
2009-08-28 12:51                       ` Robert Millan
2009-11-24 11:21                 ` Thomas Schwinge
2009-11-24 11:34                   ` Robert Millan
2009-11-24 11:48                     ` Robert Millan
2009-11-24 13:02                       ` Samuel Thibault

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.