From: Laurentiu Palcu <laurentiu.palcu@intel.com>
To: Richard Purdie <richard.purdie@linuxfoundation.org>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] postinst-intercepts, qemu.bbclass: fix segfaults in postinstalls
Date: Wed, 10 Apr 2013 10:38:27 +0300 [thread overview]
Message-ID: <516516F3.5000401@intel.com> (raw)
In-Reply-To: <1365544739.12407.115.camel@ted>
On 04/10/2013 12:58 AM, Richard Purdie wrote:
> On Tue, 2013-04-09 at 18:53 +0300, Laurentiu Palcu wrote:
>> Postinstalls that use qemu are throwing a segmentation fault when
>> building for qemux86-64 on a 64bit host (it might also happen for
>> qemux86 if building on a 32bit host but I didn't test). It looks like
>> qemu looks for ld.so.cache which is not found because it is generated
>> after rootfs_(rpm|ipk|deb)_do_rootfs is called and then it tries to load
>> libraries from the default paths (which are the host's). In order to
>> avoid this, pass the LD_LIBRARY_PATH explicitly to the target's dynamic
>> loader.
>>
>> Signed-off-by: Laurentiu Palcu <laurentiu.palcu@intel.com>
>> ---
>> meta/classes/qemu.bbclass | 4 +++-
>> scripts/postinst-intercepts/update_font_cache | 3 ++-
>> scripts/postinst-intercepts/update_pixbuf_cache | 3 ++-
>> 3 files changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/meta/classes/qemu.bbclass b/meta/classes/qemu.bbclass
>> index 0e71d6a..6881826 100644
>> --- a/meta/classes/qemu.bbclass
>> +++ b/meta/classes/qemu.bbclass
>> @@ -29,4 +29,6 @@ def qemu_run_binary(data, rootfs_path, binary):
>> if qemu_binary == "qemu-allarch":
>> qemu_binary = "qemuwrapper"
>>
>> - return "PSEUDO_UNLOAD=1 " + qemu_binary + " -L " + rootfs_path + " " + rootfs_path + binary
>> + return "PSEUDO_UNLOAD=1 " + qemu_binary + " -L " + rootfs_path\
>> + + " -E LD_LIBRARY_PATH=" + rootfs_path + "/lib:" + rootfs_path\
>> + + "/usr/lib " + rootfs_path + binary
>
> This isn't going to work with multilibs. Can we reorder the rootfs code
> so the ld.so.cache piece happens before the intercepts?
I keep forgetting about multilib... :( I'll find another way.
Unfortunately, it's not enough to generate ld.so.cache before running
the intercept hooks because there are other package postinstalls that
need qemu and those will be run before that. What if, instead of
hardcoding, we use ${libdir} and ${base_libdir}?. These should always
point to the right locations even when working with multilib.
Thanks,
Laurentiu
>
> Cheers,
>
> Richard
>
>> diff --git a/scripts/postinst-intercepts/update_font_cache b/scripts/postinst-intercepts/update_font_cache
>> index ad1bab3..fa2c0ef 100644
>> --- a/scripts/postinst-intercepts/update_font_cache
>> +++ b/scripts/postinst-intercepts/update_font_cache
>> @@ -1,5 +1,6 @@
>> #!/bin/sh
>>
>> -PSEUDO_UNLOAD=1 qemuwrapper -L $D $D${bindir}/fc-cache --sysroot=$D >/dev/null 2>&1
>> +PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D/lib:$D/usr/lib\
>> + $D${bindir}/fc-cache --sysroot=$D >/dev/null 2>&1
>>
>>
>> diff --git a/scripts/postinst-intercepts/update_pixbuf_cache b/scripts/postinst-intercepts/update_pixbuf_cache
>> index 9134529..fbb6fd1 100644
>> --- a/scripts/postinst-intercepts/update_pixbuf_cache
>> +++ b/scripts/postinst-intercepts/update_pixbuf_cache
>> @@ -2,7 +2,8 @@
>>
>> export GDK_PIXBUF_MODULEDIR=$D${libdir}/gdk-pixbuf-2.0/2.10.0/loaders
>>
>> -PSEUDO_UNLOAD=1 qemuwrapper -L $D $D${bindir}/gdk-pixbuf-query-loaders \
>> +PSEUDO_UNLOAD=1 qemuwrapper -L $D -E LD_LIBRARY_PATH=$D/lib:$D/usr/lib\
>> + $D${bindir}/gdk-pixbuf-query-loaders \
>> >$GDK_PIXBUF_MODULEDIR/../loaders.cache 2>/dev/null && \
>> sed -i -e "s:$D::g" $GDK_PIXBUF_MODULEDIR/../loaders.cache
>>
>
>
next prev parent reply other threads:[~2013-04-10 7:56 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-09 15:53 [PATCH] postinst-intercepts, qemu.bbclass: fix segfaults in postinstalls Laurentiu Palcu
2013-04-09 21:58 ` Richard Purdie
2013-04-10 7:38 ` Laurentiu Palcu [this message]
2013-04-10 8:03 ` Richard Purdie
2013-04-10 11:25 ` [PATCH v2] " Laurentiu Palcu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=516516F3.5000401@intel.com \
--to=laurentiu.palcu@intel.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=richard.purdie@linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox