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

Christopher Larson clarson at kergoth.com
Fri Mar 4 17:23:14 UTC 2016


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20160304/dc46b250/attachment-0002.html>


More information about the Openembedded-core mailing list