[yocto] prelink & mklibs problem

Qiang Yu yuq825 at gmail.com
Sun Dec 14 23:39:10 PST 2014


Thanks, Mark. All points have been checked, prelink really works for my
armhf build.

       160:                 number of relocations: 0
       160:      number of relocations from cache: 157
       160:        number of relative relocations: 0

Regards,
Qiang

On Fri, Dec 12, 2014 at 11:43 PM, Mark Hatle <mark.hatle at windriver.com>
wrote:

> 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 at 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 at 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.hatle at windriver.com
>> <mailto:mark.hatle at 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.hatle at windriver.com <mailto:mark.hatle at windriver.com>
>>             <mailto:mark.hatle at windriver.__com
>>             <mailto:mark.hatle at 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 <
>> yuq825 at gmail.com
>>             <mailto:yuq825 at gmail.com>
>>                       <mailto:yuq825 at gmail.com <mailto:yuq825 at gmail.com>>
>>                       <mailto:yuq825 at gmail.com <mailto:yuq825 at gmail.com>
>>             <mailto:yuq825 at gmail.com <mailto:yuq825 at 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
>>             <pcjegan at gmail.com <mailto:pcjegan at gmail.com>
>>                       <mailto:pcjegan at gmail.com <mailto:pcjegan at gmail.com
>> >>
>>                            <mailto:pcjegan at gmail.com <mailto:
>> pcjegan at gmail.com>
>>             <mailto:pcjegan at gmail.com <mailto:pcjegan at 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
>>             <yuq825 at gmail.com <mailto:yuq825 at gmail.com>
>>                       <mailto:yuq825 at gmail.com <mailto:yuq825 at gmail.com>>
>>                                <mailto:yuq825 at gmail.com
>>             <mailto:yuq825 at gmail.com> <mailto:yuq825 at gmail.com
>>             <mailto:yuq825 at 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 at yoctoproject.org <mailto:yocto at yoctoproject.org>
>>             <mailto:yocto at yoctoproject.org <mailto:yocto at yoctoproject.org
>> >__>
>>                       <mailto:yocto at yoctoproject.org
>>             <mailto:yocto at yoctoproject.org> <mailto:
>> yocto at yoctoproject.org
>>             <mailto:yocto at 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 at yoctoproject.org <mailto:yocto at yoctoproject.org>
>>             <mailto:yocto at yoctoproject.org <mailto:yocto at yoctoproject.org
>> >__>
>>             https://lists.yoctoproject.____org/listinfo/yocto
>>                   <https://lists.yoctoproject.__org/listinfo/yocto
>>             <https://lists.yoctoproject.org/listinfo/yocto>>
>>
>>
>>
>>
>>     --
>>     _________________________________________________
>>     yocto mailing list
>>     yocto at yoctoproject.org <mailto:yocto at yoctoproject.org>
>>     https://lists.yoctoproject.__org/listinfo/yocto
>>     <https://lists.yoctoproject.org/listinfo/yocto>
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/yocto/attachments/20141215/88715810/attachment.html>


More information about the yocto mailing list