[yocto] prelink & mklibs problem

Mark Hatle mark.hatle at windriver.com
Fri Dec 12 07:43:29 PST 2014


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>
>
>




More information about the yocto mailing list