Skip to contentSkip to conversation

Laurentiu Palcu : qemu: add wrapper for qemu-mips binary

oe-commits Martin Jansa 4 participants 5 messages Oct 6, 2012 – Oct 8, 2012 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 20121003114821.8D16410375@opal

#1 lore raw
Quoted 46 lines · On Wed, Oct 03, 2012 at 11:48:21AM +0000, [email protected] wrote:
Module: openembedded-core.git
Branch: master
Commit: 53b3103abdf21123b1c7be49b05cfe97a7cd9ed7
URL:    http://git.openembedded.org/?p=openembedded-core.git&a=commit;h=53b3103abdf21123b1c7be49b05cfe97a7cd9ed7
Author: Laurentiu Palcu <[email protected]>
Date:   Wed Oct  3 14:23:26 2012 +0300

qemu: add wrapper for qemu-mips binary

qemu-mips user emulation binary segfaults when running any kind of binary. This is due to a MMU access fault in the virtual CPU. This problem has been introduced in qemu when 4GB of vmem were reserved for 32-on-64 bit.

This workaround will need to be reverted once the proper fix is found.

[YOCTO #3143]

---

 meta/recipes-devtools/qemu/qemu_1.2.0.bb |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)
meta/recipes-devtools/qemu/qemu_1.2.0.bb +3 -1
index 191ee48..cbdb4d4 100644
@@ -17,7 +17,7 @@ SRC_URI = "\
 SRC_URI[md5sum] = "78eb1e984f4532aa9f2bdd3c127b5b61"
 SRC_URI[sha256sum] = "c8b84420d9f4869397f84cad2dabd9a475b7723d619a924a873740353e9df936"
 
-PR = "r2"
+PR = "r3"
 
 SRC_URI_append_virtclass-nativesdk = "\
     file://relocatable_sdk.patch \
@@ -29,6 +29,19 @@ do_configure_prepend_virtclass-nativesdk() {
 		sed -i 's/-lX11//g' Makefile.target
 	fi
 }
+
+# The following fragment will create a wrapper for qemu-mips user emulation

meta/recipes-devtools/qemu/qemu_1.2.0.bb do_configure_prepend_virtclass-nativesdk() { · line 43

Quoted 10 lines
meta/recipes-devtools/qemu/qemu_1.2.0.bb +10 -0
+# binary in order to work around a segmentation fault issue. Basically, by
+# default, the reserved virtual address space for 32-on-64 bit is set to 4GB.
+# This will trigger a MMU access fault in the virtual CPU. With this change,
+# the qemu-mips works fine.
+# IMPORTANT: This piece needs to be removed once the root cause is fixed!
+do_install_append() {
+	create_wrapper ${D}/${bindir}/qemu-mips \
+		QEMU_RESERVED_VA=0x0
+}
+# END of qemu-mips workaround

What about checking if mips is in QEMU_TARGETS before doing this?

Right now this breaks all distros without mips in QEMU_TARGETS.

Cheers,

Quoted 10 lines
meta/recipes-devtools/qemu/qemu_1.2.0.bb +1 -0
+
 do_configure_prepend_virtclass-native() {
 	# Undo the -lX11 added by linker-flags.patch, don't assume that host has libX11 installed
 	sed -i 's/-lX11//g' Makefile.target

_______________________________________________
Openembedded-commits mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-commits

Signature · 1 line
Martin 'JaMa' Jansa     jabber: [email protected]
#2 lore raw
Quoted 10 lines · Martin Jansa

Review

Quoted 7 lines
(quoted diff) +6 -0
+# IMPORTANT: This piece needs to be removed once the root cause is fixed!
+do_install_append() {
+     create_wrapper ${D}/${bindir}/qemu-mips \
+             QEMU_RESERVED_VA=0x0
+}
+# END of qemu-mips workaround

What about checking if mips is in QEMU_TARGETS before doing this?

or simply for check for existence of qemu-mips before creating the wrapper

Quoted 3 lines

Right now this breaks all distros without mips in QEMU_TARGETS.

Cheers,

#3 lore raw
Quoted 12 lines · Khem Raj
Quoted 10 lines · Martin Jansa

Review

Quoted 7 lines
(quoted diff) +6 -0
+# IMPORTANT: This piece needs to be removed once the root cause is fixed!
+do_install_append() {
+     create_wrapper ${D}/${bindir}/qemu-mips \
+             QEMU_RESERVED_VA=0x0
+}
+# END of qemu-mips workaround

What about checking if mips is in QEMU_TARGETS before doing this?

Quoted 1 line

or simply for check for existence of qemu-mips before creating the wrapper

I've added a patch in doing this.

Cheers,

Richard

#4 lore raw
In reply to Khem Raj
Quoted 12 lines · Khem Raj
Quoted 10 lines · Martin Jansa

Review

Quoted 7 lines
(quoted diff) +6 -0
+# IMPORTANT: This piece needs to be removed once the root cause is fixed!
+do_install_append() {
+     create_wrapper ${D}/${bindir}/qemu-mips \
+             QEMU_RESERVED_VA=0x0
+}
+# END of qemu-mips workaround

What about checking if mips is in QEMU_TARGETS before doing this?

Quoted 3 lines

or simply for check for existence of qemu-mips before creating the wrapper

Quoted 1 line

Right now this breaks all distros without mips in QEMU_TARGETS.

Sorry, I totally missed this. :| What about adding a simple check in the create_wrapper script itself? We create the wrapper only if the target binary exists. It sounds better this way and the user does not necessarily have to remember to check for the binary existence before creating the wrapper.

I'll prepare a patch.

Thanks,
Laurentiu

Quoted 2 lines
Quoted 2 lines

Cheers,

#5 lore raw
Quoted 16 lines · Laurentiu Palcu
Quoted 14 lines · Khem Raj
Quoted 10 lines · Martin Jansa

Review

Quoted 7 lines
(quoted diff) +6 -0
+# IMPORTANT: This piece needs to be removed once the root cause is fixed!
+do_install_append() {
+     create_wrapper ${D}/${bindir}/qemu-mips \
+             QEMU_RESERVED_VA=0x0
+}
+# END of qemu-mips workaround

What about checking if mips is in QEMU_TARGETS before doing this?

or simply for check for existence of qemu-mips before creating the wrapper

Quoted 8 lines
Quoted 1 line
Quoted 1 line

Right now this breaks all distros without mips in QEMU_TARGETS.

Sorry, I totally missed this. :| What about adding a simple check in the create_wrapper script itself? We create the wrapper only if the target binary exists. It sounds better this way and the user does not necessarily have to remember to check for the binary existence before creating the wrapper.

I'll prepare a patch.

In general I think we expect the target to exist. qemu is a little special since the user can configure it different ways. I therefore see qemu as being the exception in this case rather than the rule and think the default behaviour for create_wrapper should be to fail if it doesn't exist as there is likely some other issue.

Cheers.

Richard