vmcore file 0 size in x86_64

Ken'ichi Ohmichi oomichi at mxs.nes.nec.co.jp
Mon Aug 17 02:27:48 EDT 2009


Hi,

Chandan12 K wrote:
> I checked.. through and fond out that one of the following check condition 
> is failing
> 
>  516         if (memcmp(ehdr.e_ident, ELFMAG, SELFMAG) != 0 ||
>     517                 (ehdr.e_type != ET_CORE) ||
>     518                 !vmcore_elf_check_arch(&ehdr) ||
>     519                 ehdr.e_ident[EI_CLASS] != ELFCLASS64 ||
>     520                 ehdr.e_ident[EI_VERSION] != EV_CURRENT ||
>     521                 ehdr.e_version != EV_CURRENT ||
>     522                 ehdr.e_ehsize != sizeof(Elf64_Ehdr) ||
>     523                 ehdr.e_phentsize != sizeof(Elf64_Phdr) ||
>     524                 ehdr.e_phnum == 0) {
>     525                 printk(KERN_WARNING "Warning: Core image elf 
> header is not"
>     526 "sane:%ld\n",elfcorehdr_addr);
>     527               return -EINVAL
>     528         }
> 
> If I comment this return at line 527, then the code flows through and the 
> vmcore is getting generated. 
> 
> However, I am facing a new issue, my user space is 32 bit and the kernel 
> is 64 bit. And I want to access the high memory (high_memory - 
> BACK_UP_SIZE) area of the previous/primary kernel. Where some log data I 
> had saved. The toral RAM is 8GB.
> 
> As the 32 bit pointers could not reach there... means simple file 
> operations lseek() , read etc are not working.. to access some region 
> around 8GB.
> 
> Can you please suggest me some way to reach that memory and read my raw 
> data from the user space. 
> 
> I am able to read the data from kernel space( a simple kernel module via 
> /proc interface to transfer the data from kernel to user space using 
> physical address of the primary kernel).

If compiling your user space program with tree options
(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE),
it can access the high memory.


Thanks
Ken'ichi Ohmichi



More information about the kexec mailing list