On Tue, Sep 29, 2015 at 10:09 AM Khem Raj wrote: > > > On Sep 29, 2015, at 6:27 AM, Richard Purdie < > richard.purdie@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 > > > > 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.