On 12/12/14, 12:57 AM, Qiang Yu wrote:
Hi Mark,

I have used the 81bab23a4661fdaaa859325d6d3603__811ecf1849 version prelink to
build my image.
Prelink run smoothly without output like before, the image is also modified, so
the prelink works.
My application also run correctly. But how can I make sure the prelink take
effect when I start an
executable?

Here attaches the do_rootfs log:
NOTE: ###### Generate images #######
NOTE: Executing mklibs_optimize_image ...
DEBUG: Executing shell function mklibs_optimize_image
DEBUG: Shell function mklibs_optimize_image finished
NOTE: Executing prelink_image ...
DEBUG: Executing shell function prelink_image
Size before prelinking 49340.
Size after prelinking 49592.
DEBUG: Shell function prelink_image finished

You can verify the binary has been prelinked via a number of steps:

*) Start with the size comparison, you should see it change. (It did, so thats good)

*) Look at a binary in your image, such as /bin/busybox, look for the '.gnu.prelink_undo' section:

  objdump -x bin/busybox

 29 .gnu.prelink_undo 00000900  0000000000000000  0000000000000000  000b1b48  
2**3
                  CONTENTS, READONLY


*) Switch to comparing a library, i.e. /lib64/libc.so.6:

readelf -S bin/libc.so.6

Compare the original to the rootfs filesystem. You'll see the Address values have changed. On the target system you can look at "/proc/self/maps" and grep 'libc' You'll see the load range, it should match the one from the readelf -S output.

*) Actually gather load time statistics from ld.so:

Probably the easiest of the methods.. but requires you to actually run the binaries in question to check behavior. On the target:

LD_DEBUG=statistics <binary>

With prelink working the result will be something like:

root@qemu12:~# LD_DEBUG=statistics /bin/busybox
       126:                      number of relocations: 0
       126:           number of relocations from cache: 21
       126:             number of relative relocations: 0

(output)

       126:
       126:     runtime linker statistics:
       126:                final number of relocations: 0
       126:     final number of relocations from cache: 21

vs w/o prelink:

root@qemu12:~# LD_DEBUG=statistics /bin/busybox
       174:                      number of relocations: 126
       174:           number of relocations from cache: 0
       174:             number of relative relocations: 0

(output)

       174:
       174:     runtime linker statistics:
       174:                final number of relocations: 140
       174:     final number of relocations from cache: 0

--Mark


Regards,
Qiang




On Thu, Dec 11, 2014 at 7:09 AM, Mark Hatle <mark.ha...@windriver.com
<mailto:mark.ha...@windriver.com>> wrote:

    On 12/9/14, 9:01 PM, Mark Hatle wrote:

        On 12/9/14, 8:41 PM, Qiang Yu wrote:

            I have submitted a bug here:
            https://bugzilla.yoctoproject.__org/show_bug.cgi?id=7056
            <https://bugzilla.yoctoproject.org/show_bug.cgi?id=7056>


        (Responded in the bug as well...)  I have a test version of the cross
        prelink
        with the ARM HF patch available, as commit:

        2cde4ff118b5244f5577d9bc585c1e__e521740af0

        To enable it, use the following in your local.conf:

        SRCREV_pn-prelink = "__2cde4ff118b5244f5577d9bc585c1e__e521740af0"


    That link breaks regular arm prelink, it also missed a patch for the
    prelink-rtld.

    Got a new one:

    SRCREV_pn-prelink = "__81bab23a4661fdaaa859325d6d3603__811ecf1849"

    --Mark


        If this works for you, I'll finish the patch and submit the changes.

        --Mark

            Regards,
            Qiang

            On Tue, Dec 9, 2014 at 11:51 PM, Mark Hatle
            <mark.ha...@windriver.com <mailto:mark.ha...@windriver.com>
            <mailto:mark.hatle@windriver.__com
            <mailto:mark.ha...@windriver.com>>> wrote:

                  On 12/8/14, 3:55 AM, Jegan Chandru wrote:

                      I recommend you to file a bug here
            https://bugzilla.yoctoproject.____org/
                      <https://bugzilla.__yoctoproject.org/
            <https://bugzilla.yoctoproject.org/>> if not
                      done already. You may get a proper answer on armhf support
            there. From
                      what I
                      see, (someone please correct me if I am wrong), there is
            no prelink
                      dynamic link
                      armhf patch. You can also create and submit the patch for
            review. AFAIK,
                      you are
                      gonna need to something like below,

                      .dynamic_linker = "/lib/ld-linux-armhf.so.3" in 
arch-arm.c.

                      This is not tested though. Please do a test yourselves.


                  See: http://marc.info/?l=fedora-____arm&m=135417053128837&w=2
            <http://marc.info/?l=fedora-__arm&m=135417053128837&w=2>
                  <http://marc.info/?l=fedora-__arm&m=135417053128837&w=2
            <http://marc.info/?l=fedora-arm&m=135417053128837&w=2>>

                  Nobody had requested prelink support for armhf up to this 
point.

                  Open an enhancement / bug and assign it to me.  I'll do what I
            can to
                  integrate the patch officially.

                  I had been waiting for the prelink upstream to merge this, but
            they never
                  bothered to, so I'll have to make it a Yocto Project
            'cross-prelink'
                  specific path.

                  --Mark

                      -JC

                      On Mon, Dec 8, 2014 at 1:52 PM, Qiang Yu <yuq...@gmail.com
            <mailto:yuq...@gmail.com>
                      <mailto:yuq...@gmail.com <mailto:yuq...@gmail.com>>
                      <mailto:yuq...@gmail.com <mailto:yuq...@gmail.com>
            <mailto:yuq...@gmail.com <mailto:yuq...@gmail.com>>>> wrote:

                           Thanks for your reply. I almost give up.

                           You mean that current yocto build doesn't support
            hard float ABI
                      prelink,
                           and the prelink source code needs to
                           be modified to use ld-linux-armhf.so.3?

                           So this problem affect all armhf build of yocto, in
            other words prelink
                           doesn't work for yocto armhf at all now?

                           Regards,
                           Qiang

                           On Mon, Dec 8, 2014 at 3:28 PM, Jegan Chandru
            <pcje...@gmail.com <mailto:pcje...@gmail.com>
                      <mailto:pcje...@gmail.com <mailto:pcje...@gmail.com>>
                           <mailto:pcje...@gmail.com <mailto:pcje...@gmail.com>
            <mailto:pcje...@gmail.com <mailto:pcje...@gmail.com>>>> wrote:

                               Hi,

                               I think it has to do with the
            ld-linux-armhf.so.3. May be you
                      should
                               tell prelink that you have hard float ARM ABI to
            prelink for, than
                               ld-linux.so.3 . It means you need to add
            ld-linux-armhf.so.3 as a
                               dynamic linker.
                               You should patch the prelink source to get this 
done.

                               HTH.

                               -JC



                               On Fri, Dec 5, 2014 at 7:41 AM, Qiang Yu
            <yuq...@gmail.com <mailto:yuq...@gmail.com>
                      <mailto:yuq...@gmail.com <mailto:yuq...@gmail.com>>
                               <mailto:yuq...@gmail.com
            <mailto:yuq...@gmail.com> <mailto:yuq...@gmail.com
            <mailto:yuq...@gmail.com>>>> wrote:

                                   Hi all,

                                   I'm building a image with local.conf:
                                   USER_CLASSES ?= "buildstats image-mklibs
            image-prelink"

                                   but I think prelink does nothing on my image,
            because the
                      MD5SUM is
                                   the same before and after
                                   the prelink stage. The mklibs stage is also
            strange not print
                                   anything. How to make prelink and
                                   mklibs really work?

                                   Here is the log of log.do_rootfs:

                                   NOTE: ###### Generate images #######
                                   NOTE: Executing mklibs_optimize_image ...
                                   DEBUG: Executing shell function
            mklibs_optimize_image
                                   DEBUG: Shell function mklibs_optimize_image
            finished
                                   NOTE: Executing prelink_image ...
                                   DEBUG: Executing shell function prelink_image
                                   Size before prelinking 49304.


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/fstab-decode: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/bootlogd: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/killall5: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/init.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/halt.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/shutdown.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /sbin/runlevel.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/sbin/dropbearmulti: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /bin/mountpoint.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /bin/busybox.suid: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /bin/busybox.nosuid: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/bin/utmpdump.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/bin/mesg.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/bin/last.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/bin/opkg-cl: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/bin/bmw: Using 
/lib/ld-linux-armhf.so.3, not
                      /lib/ld-linux.so.3
                                   as dynamic linker


              
/opt/yocto/rootfs/tmp/____sysroots/x86_64-linux/usr/____sbin/prelink:
                                   /usr/bin/wall.sysvinit: Using
            /lib/ld-linux-armhf.so.3, not
                                   /lib/ld-linux.so.3 as dynamic linker
                                   Size after prelinking 49304.
                                   DEBUG: Shell function prelink_image finished

                                   Regards,
                                   Qiang


                                   --

            ___________________________________________________
                                   yocto mailing list
            yocto@yoctoproject.org <mailto:yocto@yoctoproject.org>
            <mailto:yocto@yoctoproject.org <mailto:yocto@yoctoproject.org>__>
                      <mailto:yocto@yoctoproject.org
            <mailto:yocto@yoctoproject.org> <mailto:yocto@yoctoproject.org
            <mailto:yocto@yoctoproject.org>__>__>
            https://lists.yoctoproject.____org/listinfo/yocto
                      <https://lists.yoctoproject.__org/listinfo/yocto
            <https://lists.yoctoproject.org/listinfo/yocto>>




                               --
                               JCP





                      --
                      JCP



                  --
                  ___________________________________________________
                  yocto mailing list
            yocto@yoctoproject.org <mailto:yocto@yoctoproject.org>
            <mailto:yocto@yoctoproject.org <mailto:yocto@yoctoproject.org>__>
            https://lists.yoctoproject.____org/listinfo/yocto
                  <https://lists.yoctoproject.__org/listinfo/yocto
            <https://lists.yoctoproject.org/listinfo/yocto>>




    --
    _________________________________________________
    yocto mailing list
    yocto@yoctoproject.org <mailto:yocto@yoctoproject.org>
    https://lists.yoctoproject.__org/listinfo/yocto
    <https://lists.yoctoproject.org/listinfo/yocto>



--
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to