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