From: bellard Date: Mon, 7 Apr 2003 21:31:06 +0000 (+0000) Subject: personality fix - i386 interpreter fix X-Git-Tag: v0.1.5~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f801f97e049b3cd832f50b9743184d0e87155193;p=thirdparty%2Fqemu.git personality fix - i386 interpreter fix git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@73 c046a42c-6fe2-441c-8c8c-71466251a162 --- diff --git a/linux-user/main.c b/linux-user/main.c index 5acfdde41ff..d7c68a9cd13 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -23,6 +23,9 @@ #include #include #include +#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) +#include +#endif #include "qemu.h" @@ -34,6 +37,12 @@ FILE *logfile = NULL; int loglevel; const char *interp_prefix = CONFIG_QEMU_PREFIX "/qemu-i386"; +#ifdef __i386__ +/* Force usage of an ELF interpreter even if it is an ELF shared + object ! */ +const char interp[] __attribute__((section(".interp"))) = "/lib/ld-linux.so.2"; +#endif + /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so we allocate a bigger stack. Need a better solution, for example by remapping the process stack directly at the right place */ @@ -370,6 +379,13 @@ int main(int argc, char **argv) if (argc <= 1) usage(); + + /* Set personality to X86_LINUX. May fail on unpatched kernels: + if so, they need to have munged paths themselves (eg. chroot, + hacked ld.so, whatever). */ + if (personality(0x11) >= 0) + interp_prefix = ""; + loglevel = 0; optind = 1; for(;;) {