[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-ia64-devel] Progress on RHEL4, but blocked at xlilo?
Akio, I just remembered xlilo doesn't support compressed guest linux kernel, so you should use compressed xen.gz and uncompressed guest linux kernel vmlinux, and compressed initrd. Thanks Anthony >-----Original Message----- >From: xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx >[mailto:xen-ia64-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of >takebe_akio@xxxxxxxxxxxxxx >Sent: 2005年11月8日 10:51 >To: takebe_akio@xxxxxxxxxxxxxx; Magenheimer, Dan (HP Labs Fort Collins); >xen-ia64-devel@xxxxxxxxxxxxxxxxxxx >Subject: Re: [Xen-ia64-devel] Progress on RHEL4, but blocked at xlilo? > >Hi All, > >I'm still tried to boot RHEL4 + Xen. >But I have not been able to boot yet. > >I confirmed to boot until the following point. > >fs/binfmt_elf.c >------------------------- > static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) > { > > snip... > > for (i = 0; i < loc->elf_ex.e_phnum; i++) { > if (elf_ppnt->p_type == PT_INTERP) { > /* This is the program interpreter used for > * shared libraries - for now assume that this > * is an a.out format binary > */ > > retval = -ENOEXEC; > if (elf_ppnt->p_filesz > PATH_MAX || > elf_ppnt->p_filesz < 2) > goto out_free_file; > retval = -ENOMEM; > elf_interpreter = (char *) >kmalloc(elf_ppnt->p_filesz, > GFP_KERNEL); > if (!elf_interpreter) > goto out_free_file; > > retval = kernel_read(bprm->file, >elf_ppnt->p_offset, > elf_interpreter, > elf_ppnt->p_filesz); > if (retval != elf_ppnt->p_filesz) { > if (retval >= 0) > retval = -EIO; > goto out_free_interp; > } > /* make sure path is NULL terminated */ > retval = -ENOEXEC; > if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0') > goto out_free_interp; > > /* If the program interpreter is one of these two, > * then assume an iBCS2 image. Otherwise assume > * a native linux image. > */ > if (strcmp(elf_interpreter,"/usr/lib/libc.so.1") == >0 || > strcmp(elf_interpreter,"/usr/lib/ld.so.1") == >0) > ibcs2_interpreter = 1; > > /* > * The early SET_PERSONALITY here is so that the >lookup > * for the interpreter happens in the namespace of the > * to-be-execed image. SET_PERSONALITY can select >an > * alternate root. > * > * However, SET_PERSONALITY is NOT allowed to switch > * this task into the new images's memory mapping > * policy - that is, TASK_SIZE must still evaluate to > * that which is appropriate to the execing >application. > * This is because exit_mmap() needs to have TASK_SIZE > * evaluate to the size of the old image. > * > * So if (say) a 64-bit application is execing a > 32-bit > * application it is the architecture's >responsibility > * to defer changing the value of TASK_SIZE until the > * switch really is going to happen - do this in > * flush_thread(). - akpm > */ > SET_PERSONALITY(loc->elf_ex, ibcs2_interpreter); > > interpreter = open_exec(elf_interpreter); > retval = PTR_ERR(interpreter); > if (IS_ERR(interpreter)) > goto out_free_interp; > retval = kernel_read(interpreter, 0, bprm->buf, >BINPRM_BUF_SIZE); <---HERE !!!!! > if (retval != BINPRM_BUF_SIZE) { > if (retval >= 0) > retval = -EIO; > goto out_free_dentry; > } > > /* Get the exec headers */ > loc->interp_ex = *((struct exec *) bprm->buf); > loc->interp_elf_ex = *((struct elfhdr *) bprm->buf); > break; > } > elf_ppnt++; > } > snip... >------------- > >The above for loop is available when there is .interp section in ELF binary. >.interp section is found, then enter if section and the following operation do. > 1. Check "if (elf_ppnt->p_filesz > PATH_MAX || elf_ppnt->p_filesz < 2)" > 2. Alloc memory for pasting a library path by using kmalloc(). > 3. Read a library path from /sbin/init by using kernel_read() > 4. Check wheather /usr/lib/libc.so.1 or /usr/lib/ld.so.1 > 5. Open the library by using open_exec() > 6. Read the library from head to BINPRM_BUF_SIZE(128) > 7. Substitute the library header and Break > >contents of .interp section are below. >===================== ># LANG=C objdump -s -j .interp /sbin/init > >/sbin/init: file format elf64-ia64-little > >Contents of section .interp: > 4000000000000200 2f6c6962 2f6c642d 6c696e75 782d6961 /lib/ld-linux-ia > 4000000000000210 36342e73 6f2e3200 64.so.2. >===================== > > /lib/ld-linux-ia64.so.2 is symbolic link >===================== ># LANG=C ls -l /lib/ld-linux-ia64.so.2 >lrwxrwxrwx 1 root root 11 Oct 25 23:27 /lib/ld-linux-ia64.so.2 -> ld-2.3.4.so >===================== > >I think 0 -> 128 byte of the ld-2.3.4.so is ELF header. >The header of the ld-2.3.4.so is the below. >===================== ># readelf -h /lib/ld-2.3.4.so |less >ELF Header: > Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 > Class: ELF64 > Data: 2's complement, little endian > Version: 1 (current) > OS/ABI: UNIX - System V > ABI Version: 0 > Type: DYN (Shared object file) > Machine: Intel IA-64 > Version: 0x1 > Entry point address: 0x2c90 > Start of program headers: 64 (bytes into file) > Start of section headers: 205448 (bytes into file) > Flags: 0x10, 64-bit > Size of this header: 64 (bytes) > Size of program headers: 56 (bytes) > Number of program headers: 5 > Size of section headers: 64 (bytes) > Number of section headers: 25 > Section header string table index: 22 >===================== > >Why the header cannot be read? >Any idea? It's very difficult. Hmmm.... :< > >Best Regards, > >Akio takebe > > >_______________________________________________ >Xen-ia64-devel mailing list >Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx >http://lists.xensource.com/xen-ia64-devel _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |