Skip to content

Commit

Permalink
ld.so load fix
Browse files Browse the repository at this point in the history
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@47 c046a42c-6fe2-441c-8c8c-71466251a162
  • Loading branch information
bellard committed Mar 24, 2003
1 parent d691f66 commit 644c433
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 8 deletions.
8 changes: 6 additions & 2 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,12 @@ libraries installed on your PC. For example:
./qemu -L / /bin/ls

* On non x86 CPUs, you need first to download at least an x86 glibc
(qemu-i386-glibc21.tar.gz on the qemu web page). Then you can launch
the precompiled 'ls' x86 executable:
(qemu-i386-glibc21.tar.gz on the qemu web page). Ensure that
LD_LIBRARY_PATH is not set:

unset LD_LIBRARY_PATH

Then you can launch the precompiled 'ls' x86 executable:

./qemu /usr/local/qemu-i386/bin/ls

Expand Down
8 changes: 4 additions & 4 deletions linux-user/elfload.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,9 +360,6 @@ static unsigned int * create_elf_tables(char *p, int argc, int envc,
put_user (tswapl(val), dlinfo++)

if (exec) { /* Put this here for an ELF program interpreter */
struct elf_phdr * eppnt;
eppnt = (struct elf_phdr *)((unsigned long)exec->e_phoff);

NEW_AUX_ENT (AT_PHDR, (unsigned int)(load_addr + exec->e_phoff));
NEW_AUX_ENT (AT_PHENT, (unsigned int)(sizeof (struct elf_phdr)));
NEW_AUX_ENT (AT_PHNUM, (unsigned int)(exec->e_phnum));
Expand Down Expand Up @@ -418,13 +415,17 @@ static unsigned long load_elf_interp(struct elfhdr * interp_elf_ex,
*/
load_addr = INTERP_LOADADDR;

#ifdef BSWAP_NEEDED
bswap_ehdr(interp_elf_ex);
#endif
/* First of all, some simple consistency checks */
if ((interp_elf_ex->e_type != ET_EXEC &&
interp_elf_ex->e_type != ET_DYN) ||
!elf_check_arch(interp_elf_ex->e_machine)) {
return ~0UL;
}


/* Now read in all of the header information */

if (sizeof(struct elf_phdr) * interp_elf_ex->e_phnum > X86_PAGE_SIZE)
Expand Down Expand Up @@ -452,7 +453,6 @@ static unsigned long load_elf_interp(struct elfhdr * interp_elf_ex,
(char *) elf_phdata,
sizeof(struct elf_phdr) * interp_elf_ex->e_phnum);
}

if (retval < 0) {
perror("load_elf_interp");
exit(-1);
Expand Down
11 changes: 9 additions & 2 deletions qemu-doc.texi
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,15 @@ qemu -L / /bin/ls


@item On non x86 CPUs, you need first to download at least an x86 glibc
(@file{qemu-i386-glibc21.tar.gz} on the QEMU web page). Then you can
launch the precompiled @file{ls} x86 executable:
(@file{qemu-i386-glibc21.tar.gz} on the QEMU web page). Ensure that
@code{LD_LIBRARY_PATH} is not set:

@example
unset LD_LIBRARY_PATH
@end example

Then you can launch the precompiled @file{ls} x86 executable:

@example
qemu /usr/local/qemu-i386/bin/ls
@end example
Expand Down

0 comments on commit 644c433

Please sign in to comment.