[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