[OE-core] [PATCH] linuxloader/image-prelink/image-mklibs: Fix non-standard path prelinking

Dan McGregor danismostlikely at gmail.com
Fri Mar 4 22:09:29 UTC 2016


On 4 Mar 2016 11:23 a.m., "Christopher Larson" <clarson at kergoth.com> wrote:
>
>
>
> On Tue, Sep 29, 2015 at 10:09 AM Khem Raj <raj.khem at gmail.com> wrote:
>>
>>
>> > On Sep 29, 2015, at 6:27 AM, Richard Purdie <
richard.purdie at linuxfoundation.org> wrote:
>> >
>> > Prelinking on x86-64 wasn't working out the box as it uses /lib and
>> > not /lib64 for libs. Prelink was refusing to link as the dynamic loader
>> > didn't match its idea of the right path. Passing in the
--dyanmic-linker
>> > option avoids this.
>> >
>> > We can share code from image-mklibs so abstract that into a new class,
>> > linuxloader.bbclass.
>> >
>> > Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
>> >
>> > diff --git a/meta/classes/image-mklibs.bbclass
b/meta/classes/image-mklibs.bbclass
>> > index c455a8e..45a66fb 100644
>> > --- a/meta/classes/image-mklibs.bbclass
>> > +++ b/meta/classes/image-mklibs.bbclass
>> > @@ -2,6 +2,8 @@ do_rootfs[depends] +=
"mklibs-native:do_populate_sysroot"
>> >
>> > IMAGE_PREPROCESS_COMMAND += "mklibs_optimize_image; "
>> >
>> > +inherit linuxloader
>> > +
>> > mklibs_optimize_image_doit() {
>> >       rm -rf ${WORKDIR}/mklibs
>> >       mkdir -p ${WORKDIR}/mklibs/dest
>> > @@ -15,26 +17,8 @@ mklibs_optimize_image_doit() {
>> >               | sed "s+^\./++" \
>> >               > ${WORKDIR}/mklibs/executables.list
>> >
>> > -     case ${TARGET_ARCH} in
>> > -             powerpc | mips | mipsel | microblaze )
>> > -                     dynamic_loader="${base_libdir}/ld.so.1"
>> > -                     ;;
>> > -             powerpc64)
>> > -                     dynamic_loader="${base_libdir}/ld64.so.1"
>> > -                     ;;
>> > -             x86_64)
>> > -
 dynamic_loader="${base_libdir}/ld-linux-x86-64.so.2"
>> > -                     ;;
>> > -             i586 )
>> > -                     dynamic_loader="${base_libdir}/ld-linux.so.2"
>> > -                     ;;
>> > -             arm )
>> > -                     dynamic_loader="${base_libdir}/ld-linux.so.3"
>> > -                     ;;
>> > -             * )
>> > -                     dynamic_loader="/unknown_dynamic_linker"
>> > -                     ;;
>> > -     esac
>> > +     # Set $dynamic_loader
>> > +        linuxloader
>> >
>> >       mklibs -v \
>> >               --ldlib ${dynamic_loader} \
>> > diff --git a/meta/classes/image-prelink.bbclass
b/meta/classes/image-prelink.bbclass
>> > index d4bb3ae..4bb090d 100644
>> > --- a/meta/classes/image-prelink.bbclass
>> > +++ b/meta/classes/image-prelink.bbclass
>> > @@ -2,6 +2,8 @@ do_rootfs[depends] +=
"prelink-native:do_populate_sysroot"
>> >
>> > IMAGE_PREPROCESS_COMMAND += "prelink_image; "
>> >
>> > +inherit linuxloader
>> > +
>> > prelink_image () {
>> > #     export PSEUDO_DEBUG=4
>> > #     /bin/env | /bin/grep PSEUDO
>> > @@ -20,8 +22,11 @@ prelink_image () {
>> >               dummy_prelink_conf=false;
>> >       fi
>> >
>> > +     # Set $dynamic_loader
>> > +     linuxloader
>> > +
>> >       # prelink!
>> > -     ${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root
${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf
>> > +     ${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root
${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf --dynamic-linker
$dynamic_loader
>> >
>> >       # Remove the prelink.conf if we had to add it.
>> >       if [ "$dummy_prelink_conf" = "true" ]; then
>> > diff --git a/meta/classes/linuxloader.bbclass
b/meta/classes/linuxloader.bbclass
>> > new file mode 100644
>> > index 0000000..578df14
>> > --- /dev/null
>> > +++ b/meta/classes/linuxloader.bbclass
>> > @@ -0,0 +1,23 @@
>> > +
>> > +linuxloader () {
>> > +     case ${TARGET_ARCH} in
>> > +             powerpc | mips | mipsel | microblaze )
>> > +                     dynamic_loader="${base_libdir}/ld.so.1"
>> > +                     ;;
>> > +             powerpc64)
>> > +                     dynamic_loader="${base_libdir}/ld64.so.1"
>> > +                     ;;
>> > +             x86_64)
>> > +
 dynamic_loader="${base_libdir}/ld-linux-x86-64.so.2"
>> > +                     ;;
>> > +             i586 )
>> > +                     dynamic_loader="${base_libdir}/ld-linux.so.2"
>> > +                     ;;
>> > +             arm )
>> > +                     dynamic_loader="${base_libdir}/ld-linux.so.3"
>> > +                     ;;
>> > +             * )
>> > +                     dynamic_loader="/unknown_dynamic_linker"
>> > +                     ;;
>> > +     esac
>> > +}
>> >
>> >
>>
>> For readability it would have been nice if it was returning the value
from function so it could be used
>>
>> myloader = call this function
>
>
> Agreed, I was just thinking this could be used for UNINATIVE_LOADER in
uninative.bbclass.
>
> --
>

This would also be handy for the go stuff I'm writing at $work.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20160304/17c0f515/attachment-0002.html>


More information about the Openembedded-core mailing list