[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