Skip to contentSkip to conversation

Access dump file in elf format (/proc/vmcore)

PATCH In review Vivek Goyal 1 participant 1 message Mar 28, 2005

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 14/17 Access dump file in elf format (/proc/vmcore)

From: "Vivek Goyal" <[email protected]>

o Support for /proc/vmcore interface. This interface exports elf core image either in ELF32 or ELF64 format, depending on the format in which elf headers have been stored by crashed kernel.
o Added support for CONFIG_VMCORE config option.
o Removed the dependency on /proc/kcore.

From: "Eric W. Biederman" <[email protected]>

This patch has been refactored to more closely match the prevailing style in the affected files. And to clearly indicate the dependency between /proc/kcore and proc/vmcore.c

From: Hariprasad Nellitheertha <[email protected]>

This patch contains the code that provides an ELF format interface to the previous kernel's memory post kexec reboot.

Signed off by Hariprasad Nellitheertha <[email protected]>

---

 linux-2.6.12-rc1-mm1-16M-root/fs/Kconfig                 |    6 
 linux-2.6.12-rc1-mm1-16M-root/fs/proc/Makefile           |    1 
 linux-2.6.12-rc1-mm1-16M-root/fs/proc/proc_misc.c        |    6 
 linux-2.6.12-rc1-mm1-16M-root/fs/proc/vmcore.c           |  451 +++++++++++++++
 linux-2.6.12-rc1-mm1-16M-root/include/linux/crash_dump.h |    4 
 linux-2.6.12-rc1-mm1-16M-root/include/linux/proc_fs.h    |    7 
 linux-2.6.12-rc1-mm1-16M-root/kernel/crash_dump.c        |    2 
 7 files changed, 476 insertions(+), 1 deletion(-)
fs/Kconfig renamed from fs/Kconfig~crashdump-elf-format-dump-file-access +6 -0
diff -puN fs/Kconfig~crashdump-elf-format-dump-file-access fs/Kconfig
@@ -779,6 +779,12 @@ config PROC_KCORE
 	bool "/proc/kcore support" if !ARM
 	depends on PROC_FS && MMU
 
+config PROC_VMCORE
+        bool "/proc/vmcore support (EXPERIMENTAL)"
+        depends on PROC_FS && EMBEDDED && EXPERIMENTAL && CRASH_DUMP
+        help
+        Exports the dump image of crashed kernel in ELF format.
+
 config SYSFS
 	bool "sysfs file system support" if EMBEDDED
 	default y
fs/proc/Makefile renamed from fs/proc/Makefile~crashdump-elf-format-dump-file-access +1 -0
diff -puN fs/proc/Makefile~crashdump-elf-format-dump-file-access fs/proc/Makefile
@@ -11,4 +11,5 @@ proc-y       += inode.o root.o base.o ge
 		kmsg.o proc_tty.o proc_misc.o
 
 proc-$(CONFIG_PROC_KCORE)	+= kcore.o
+proc-$(CONFIG_PROC_VMCORE)	+= vmcore.o
 proc-$(CONFIG_PROC_DEVICETREE)	+= proc_devtree.o
fs/proc/proc_misc.c renamed from fs/proc/proc_misc.c~crashdump-elf-format-dump-file-access +6 -0
diff -puN fs/proc/proc_misc.c~crashdump-elf-format-dump-file-access fs/proc/proc_misc.c
@@ -44,6 +44,7 @@
 #include <linux/jiffies.h>
 #include <linux/sysrq.h>
 #include <linux/vmalloc.h>
+#include <linux/crash_dump.h>
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
 #include <asm/io.h>
@@ -660,6 +661,11 @@ void __init proc_misc_init(void)
 				(size_t)high_memory - PAGE_OFFSET + PAGE_SIZE;
 	}
 #endif
+#ifdef CONFIG_PROC_VMCORE
+	proc_vmcore = create_proc_entry("vmcore", S_IRUSR, NULL);
+	if (proc_vmcore)
+		proc_vmcore->proc_fops = &proc_vmcore_operations;
+#endif
 #ifdef CONFIG_MAGIC_SYSRQ
 	entry = create_proc_entry("sysrq-trigger", S_IWUSR, NULL);
 	if (entry)
fs/proc/vmcore.c new file +451 -0

451 lines not on this page · raw message

include/linux/crash_dump.h renamed from include/linux/crash_dump.h~crashdump-elf-format-dump-file-access +4 -0
diff -puN include/linux/crash_dump.h~crashdump-elf-format-dump-file-access include/linux/crash_dump.h
@@ -7,8 +7,12 @@
 #include <linux/device.h>
 #include <linux/proc_fs.h>
 
+#define ELFCORE_ADDR_MAX	(-1ULL)
 extern unsigned long long elfcorehdr_addr;
 extern ssize_t copy_oldmem_page(unsigned long, char *, size_t,
 						unsigned long, int);
+extern struct file_operations proc_vmcore_operations;
+extern struct proc_dir_entry *proc_vmcore;
+
 #endif /* CONFIG_CRASH_DUMP */
 #endif /* LINUX_CRASHDUMP_H */
include/linux/proc_fs.h renamed from include/linux/proc_fs.h~crashdump-elf-format-dump-file-access +7 -0
diff -puN include/linux/proc_fs.h~crashdump-elf-format-dump-file-access include/linux/proc_fs.h
@@ -74,6 +74,13 @@ struct kcore_list {
 	size_t size;
 };
 
+struct vmcore {
+	struct list_head list;
+	unsigned long long paddr;
+	unsigned long size;
+	loff_t offset;
+};
+
 #ifdef CONFIG_PROC_FS
 
 extern struct proc_dir_entry proc_root;
kernel/crash_dump.c renamed from kernel/crash_dump.c~crashdump-elf-format-dump-file-access +1 -1
diff -puN kernel/crash_dump.c~crashdump-elf-format-dump-file-access kernel/crash_dump.c
@@ -16,7 +16,7 @@
 #include <asm/uaccess.h>
 
 /* Stores the physical address of elf header of crash image. */
-unsigned long long elfcorehdr_addr;
+unsigned long long elfcorehdr_addr = ELFCORE_ADDR_MAX;
 
 /*
  * Copy a page from "oldmem". For this page, there is no pte mapped

_