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