summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurentiu Palcu <laurentiu.palcu@intel.com>2013-04-26 11:03:58 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2013-04-29 14:43:53 +0100
commit0c6ddb84043f0f917543cdaf4814efc15cd0273f (patch)
tree3c90c79f8916299807a65dd4f90e7c5a4de1d169
parent1acc6c60c39a6c8982b228ac8dbc85acc89a0032 (diff)
downloadopenembedded-core-0c6ddb84043f0f917543cdaf4814efc15cd0273f.tar.gz
openembedded-core-0c6ddb84043f0f917543cdaf4814efc15cd0273f.tar.bz2
openembedded-core-0c6ddb84043f0f917543cdaf4814efc15cd0273f.zip
qemuwrapper: use fallback in case the ELF binary is wrong
This wrapper script is called mainly from intercept hooks and allarch packages postinstalls. When multilib is used, the qemuwrapper script points to the binary that matches the MACHINE architecture. For example: if MACHINE=qemux86_64 and we activate multilib, then the postinstalls for lib32 packages would call qemu-x86_64 with 32 bit binaries and they would certainly fail. This patch adds just a fallback method if the exit code of the previous qemu call corresponds to "Invalid ELF image for this architecture" error. This will allow us to have all postinstalls run on host. Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com> Signed-off-by: Saul Wold <sgw@linux.intel.com>
-rw-r--r--meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb28
1 files changed, 27 insertions, 1 deletions
diff --git a/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb b/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb
index 41617a6b75..18f1892884 100644
--- a/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb
+++ b/meta/recipes-devtools/qemu/qemuwrapper-cross_1.0.bb
@@ -9,7 +9,33 @@ do_install () {
install -d ${D}${bindir_crossscripts}/
echo "#!/bin/sh" > ${D}${bindir_crossscripts}/qemuwrapper
- echo exec env ${@qemu_target_binary(d)} \"\$@\" >> ${D}${bindir_crossscripts}/qemuwrapper
+ qemu_binary=${@qemu_target_binary(d)}
+ echo "$qemu_binary \"\$@\"" >> ${D}${bindir_crossscripts}/qemuwrapper
+ fallback_qemu_bin=
+ case $qemu_binary in
+ "qemu-i386")
+ fallback_qemu_bin=qemu-x86_64
+ ;;
+ "qemu-x86_64")
+ fallback_qemu_bin=qemu-i386
+ ;;
+ *)
+ ;;
+ esac
+
+ if [ -n "$fallback_qemu_bin" ]; then
+
+ cat >> ${D}${bindir_crossscripts}/qemuwrapper << EOF
+rc=\$?
+if [ \$rc = 255 ]; then
+ $fallback_qemu_bin "\$@"
+ rc=\$?
+fi
+exit \$rc
+EOF
+
+ fi
+
chmod +x ${D}${bindir_crossscripts}/qemuwrapper
}