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 diff -urNp grub-0.97/stage2/boot.c grub-0.97.new/stage2/boot.c --- grub-0.97/stage2/boot.c 2004-03-30 13:44:08.000000000 +0200 +++ grub-0.97.new/stage2/boot.c 2008-04-06 14:40:06.000000000 +0300 @@ -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 diff -urNp grub-0.97/stage2/shared.h grub-0.97.new/stage2/shared.h --- grub-0.97/stage2/shared.h 2004-06-19 19:40:09.000000000 +0300 +++ grub-0.97.new/stage2/shared.h 2008-04-06 11:42:12.000000000 +0300 @@ -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 /*