--- grub-0.96/stage2/boot.c 2004-03-30 13:44:08.000000000 +0200 +++ grub-0.96/stage2/boot.c 2006-08-26 05:22:38.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,14 @@ 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++); + } + /* 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 --- grub-0.96/stage2/shared.h 2004-06-19 19:40:09.000000000 +0300 +++ grub-0.96/stage2/shared.h 2006-08-26 05:22:24.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 /*