diff -up kexec-tools-testing-20070330/kexec/arch/ia64/crashdump-ia64.c.orig kexec-tools-testing-20070330/kexec/arch/ia64/crashdump-ia64.c --- kexec-tools-testing-20070330/kexec/arch/ia64/crashdump-ia64.c.orig 2008-04-08 14:36:59.000000000 -0400 +++ kexec-tools-testing-20070330/kexec/arch/ia64/crashdump-ia64.c 2008-04-08 14:41:43.000000000 -0400 @@ -224,9 +224,22 @@ int load_crashdump_segments(struct kexec void *tmp; if (info->kexec_flags & KEXEC_ON_CRASH ) { if (get_crash_memory_ranges(&mem_range, &nr_ranges) == 0) { + int i; info->kern_paddr_start = kernel_code_start; - info->kern_vaddr_start = LOAD_OFFSET; + for (i=0; i < nr_ranges; i++) { + unsigned long long mstart = crash_memory_range[i].start; + unsigned long long mend = crash_memory_range[i].end; + if (!mstart && !mend) + continue; + if (kernel_code_start >= mstart && + kernel_code_start < mend) { + info->kern_vaddr_start = mstart + + LOAD_OFFSET; + break; + } + } + info->kern_size = kernel_code_end - kernel_code_start + 1; if (crash_create_elf64_headers(info, &elf_info, crash_memory_range,