File grub-long-commandline of Package grub
Gentoo bug #183443, #216307
Upstream: http://savannah.gnu.org/bugs/?13606
Support commandlines with >255 characters. Common in manual netboot and
root-on-iSCSI setups. Usable for kernels >2.6.21_rc1
Acked-by: Bernhard Walle <bwalle@suse.de>
---
stage2/boot.c | 11 ++++++++++-
stage2/shared.h | 4 +++-
2 files changed, 13 insertions(+), 2 deletions(-)
--- a/stage2/boot.c
+++ b/stage2/boot.c
@@ -241,7 +241,7 @@ load_image (char *kernel, char *arg, ker
}
if (lh->version >= 0x0202)
- lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET;
+ lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_0202_PRM_OFFSET;
else
{
lh->cl_magic = LINUX_CL_MAGIC;
@@ -407,6 +407,15 @@ load_image (char *kernel, char *arg, ker
while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
*(dest++) = *(src++);
+ {
+ char *src = skip_to (0, arg);
+ char *dest = linux_data_tmp_addr + LINUX_CL_0202_PRM_OFFSET;
+
+ while (dest < linux_data_tmp_addr + LINUX_CL_0202_PRM_END_OFFSET && *src)
+ *(dest++) = *(src++);
+ *dest = 0;
+ }
+
/* Old Linux kernels have problems determining the amount of
the available memory. To work around this problem, we add
the "mem" option to the kernel command line. This has its
--- a/stage2/shared.h
+++ b/stage2/shared.h
@@ -161,7 +161,9 @@ extern char *grub_scratch_mem;
#define LINUX_CL_OFFSET 0x9000
#define LINUX_CL_END_OFFSET 0x90FF
-#define LINUX_SETUP_MOVE_SIZE 0x9100
+#define LINUX_CL_0202_PRM_OFFSET 0x9500
+#define LINUX_CL_0202_PRM_END_OFFSET 0x9FFF
+#define LINUX_SETUP_MOVE_SIZE 0xA000
#define LINUX_CL_MAGIC 0xA33F
/*