diff -Nrup kexec-tools-2.0.0.orig/kexec/crashdump.h kexec-tools-2.0.0/kexec/crashdump.h --- kexec-tools-2.0.0.orig/kexec/crashdump.h 2010-11-03 14:10:58.000000000 +0800 +++ kexec-tools-2.0.0/kexec/crashdump.h 2010-11-03 14:12:06.000000000 +0800 @@ -7,8 +7,8 @@ extern int get_xen_vmcoreinfo(uint64_t * /* Need to find a better way to determine per cpu notes section size. */ #define MAX_NOTE_BYTES 1024 -/* Expecting ELF headers to fit in 4K. Increase it if you need more. */ -#define KCORE_ELF_HEADERS_SIZE 4096 +/* Expecting ELF headers to fit in 16K. Increase it if you need more. */ +#define KCORE_ELF_HEADERS_SIZE 16384 /* The address of the ELF header is passed to the secondary kernel * using the kernel command line option memmap=nnn. * The smallest unit the kernel accepts is in kilobytes, diff -Nrup kexec-tools-2.0.0.orig/kexec/kexec-elf.c kexec-tools-2.0.0/kexec/kexec-elf.c --- kexec-tools-2.0.0.orig/kexec/kexec-elf.c 2010-11-03 14:10:58.000000000 +0800 +++ kexec-tools-2.0.0/kexec/kexec-elf.c 2010-11-03 14:19:18.000000000 +0800 @@ -8,6 +8,7 @@ #include #include "kexec.h" #include "kexec-elf.h" +#include "crashdump.h" static const int probe_debug = 0; @@ -392,6 +393,9 @@ static int build_mem_phdrs(const char *b phdr_size *= ehdr->e_phnum; if (ehdr->e_phoff + phdr_size > len) { /* The program header did not fit in the file buffer */ + fprintf(stderr, "%d segments require a %ld-byte buffer\n", + ehdr->e_phnum, ehdr->e_phoff + phdr_size); + fprintf(stderr, "KCORE_ELF_HEADERS_SIZE %d too small\n", KCORE_ELF_HEADERS_SIZE); if (probe_debug) { fprintf(stderr, "ELF program segment truncated\n"); }