User mode emulation binaries are linked using a local linker script. The
nativesdk ones were not used and the resulting binaries did not have the
interp section resized. Hence, those binaries could not be relocated.

[YOCTO #3083]

Signed-off-by: Laurentiu Palcu <laurentiu.pa...@intel.com>
---
 .../qemu/qemu-1.2.0/relocatable_sdk.patch          |   34 ++++++++++++++++++++
 meta/recipes-devtools/qemu/qemu_1.2.0.bb           |    4 +++
 2 files changed, 38 insertions(+)
 create mode 100644 meta/recipes-devtools/qemu/qemu-1.2.0/relocatable_sdk.patch

diff --git a/meta/recipes-devtools/qemu/qemu-1.2.0/relocatable_sdk.patch 
b/meta/recipes-devtools/qemu/qemu-1.2.0/relocatable_sdk.patch
new file mode 100644
index 0000000..0a01a8a
--- /dev/null
+++ b/meta/recipes-devtools/qemu/qemu-1.2.0/relocatable_sdk.patch
@@ -0,0 +1,34 @@
+Upstream-Status: Inappropriate [SDK specific]
+
+In order to be able to change the dynamic loader path when relocating
+binaries, the interp section has to be made big enough to accomodate
+the new path (4096 is the maximum path length in Linux).
+
+Signed-off-by: Laurentiu Palcu <laurentiu.pa...@intel.com>
+
+Index: qemu-1.2.0/i386.ld
+===================================================================
+--- qemu-1.2.0.orig/i386.ld
++++ qemu-1.2.0/i386.ld
+@@ -8,7 +8,7 @@ SECTIONS
+ {
+   /* Read-only sections, merged into text segment: */
+   . = 0x60000000 + SIZEOF_HEADERS;
+-  .interp     : { *(.interp)  }
++  .interp     : { *(.interp); . = 0x1000; }
+   .hash          : { *(.hash)         }
+   .dynsym        : { *(.dynsym)               }
+   .dynstr        : { *(.dynstr)               }
+Index: qemu-1.2.0/x86_64.ld
+===================================================================
+--- qemu-1.2.0.orig/x86_64.ld
++++ qemu-1.2.0/x86_64.ld
+@@ -6,7 +6,7 @@ SECTIONS
+ {
+   /* Read-only sections, merged into text segment: */
+   . = 0x60000000 + SIZEOF_HEADERS;
+-  .interp         : { *(.interp) }
++  .interp         : { *(.interp); . = 0x1000; }
+   .hash           : { *(.hash) }
+   .dynsym         : { *(.dynsym) }
+   .dynstr         : { *(.dynstr) }
diff --git a/meta/recipes-devtools/qemu/qemu_1.2.0.bb 
b/meta/recipes-devtools/qemu/qemu_1.2.0.bb
index 55ac532..636a666 100644
--- a/meta/recipes-devtools/qemu/qemu_1.2.0.bb
+++ b/meta/recipes-devtools/qemu/qemu_1.2.0.bb
@@ -17,6 +17,10 @@ SRC_URI = "\
 SRC_URI[md5sum] = "78eb1e984f4532aa9f2bdd3c127b5b61"
 SRC_URI[sha256sum] = 
"c8b84420d9f4869397f84cad2dabd9a475b7723d619a924a873740353e9df936"
 
+SRC_URI_append_virtclass-nativesdk = "\
+    file://relocatable_sdk.patch \
+    "
+
 do_configure_prepend_virtclass-nativesdk() {
        if [ "${@base_contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}" = "" ] 
; then
                # Undo the -lX11 added by linker-flags.patch
-- 
1.7.9.5


_______________________________________________
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core

Reply via email to