From: Vivek Goyal <vgoyal@in.ibm.com>

This patch adds support for retrieving the address of elf core header if one
is passed in command line.

Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 Documentation/kernel-parameters.txt |    4 ++++
 arch/i386/kernel/setup.c            |    8 ++++++++
 include/linux/crash_dump.h          |    1 +
 kernel/crash_dump.c                 |    3 +++
 4 files changed, 16 insertions(+)

diff -puN arch/i386/kernel/setup.c~kdump-retrieve-elfcorehdr-address-from-command arch/i386/kernel/setup.c
--- 25/arch/i386/kernel/setup.c~kdump-retrieve-elfcorehdr-address-from-command	2005-06-18 02:55:55.000000000 -0700
+++ 25-akpm/arch/i386/kernel/setup.c	2005-06-18 02:55:55.000000000 -0700
@@ -44,6 +44,7 @@
 #include <linux/edd.h>
 #include <linux/nodemask.h>
 #include <linux/kexec.h>
+#include <linux/crash_dump.h>
 
 #include <video/edid.h>
 
@@ -882,6 +883,13 @@ static void __init parse_cmdline_early (
 			}
 		}
 #endif
+#ifdef CONFIG_CRASH_DUMP
+		/* elfcorehdr= specifies the location of elf core header
+		 * stored by the crashed kernel.
+		 */
+		else if (!memcmp(from, "elfcorehdr=", 11))
+			elfcorehdr_addr = memparse(from+11, &from);
+#endif
 
 		/*
 		 * highmem=size forces highmem to be exactly 'size' bytes.
diff -puN Documentation/kernel-parameters.txt~kdump-retrieve-elfcorehdr-address-from-command Documentation/kernel-parameters.txt
--- 25/Documentation/kernel-parameters.txt~kdump-retrieve-elfcorehdr-address-from-command	2005-06-18 02:55:55.000000000 -0700
+++ 25-akpm/Documentation/kernel-parameters.txt	2005-06-18 02:55:55.000000000 -0700
@@ -455,6 +455,10 @@ running once the system is up.
 			Format: {"as"|"cfq"|"deadline"|"noop"}
 			See Documentation/block/as-iosched.txt
 			and Documentation/block/deadline-iosched.txt for details.
+	elfcorehdr=	[IA-32]
+			Specifies physical address of start of kernel core image
+			elf header.
+			See Documentation/kdump.txt for details.
 
 	enforcing	[SELINUX] Set initial enforcing status.
 			Format: {"0" | "1"}
diff -puN include/linux/crash_dump.h~kdump-retrieve-elfcorehdr-address-from-command include/linux/crash_dump.h
--- 25/include/linux/crash_dump.h~kdump-retrieve-elfcorehdr-address-from-command	2005-06-18 02:55:55.000000000 -0700
+++ 25-akpm/include/linux/crash_dump.h	2005-06-18 02:55:55.000000000 -0700
@@ -7,6 +7,7 @@
 #include <linux/device.h>
 #include <linux/proc_fs.h>
 
+extern unsigned long long elfcorehdr_addr;
 extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
 						unsigned long, int);
 #endif /* CONFIG_CRASH_DUMP */
diff -puN kernel/crash_dump.c~kdump-retrieve-elfcorehdr-address-from-command kernel/crash_dump.c
--- 25/kernel/crash_dump.c~kdump-retrieve-elfcorehdr-address-from-command	2005-06-18 02:55:55.000000000 -0700
+++ 25-akpm/kernel/crash_dump.c	2005-06-18 02:55:55.000000000 -0700
@@ -15,6 +15,9 @@
 #include <asm/io.h>
 #include <asm/uaccess.h>
 
+/* Stores the physical address of elf header of crash image. */
+unsigned long long elfcorehdr_addr;
+
 /*
  * Copy a page from "oldmem". For this page, there is no pte mapped
  * in the current kernel. We stitch up a pte, similar to kmap_atomic.
_