summaryrefslogtreecommitdiffstats
path: root/meta/classes/image-mklibs.bbclass
diff options
context:
space:
mode:
authorTyler Hall <tylerwhall@gmail.com>2016-03-08 21:07:40 -0500
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-03-10 23:13:54 +0000
commitb578a06564599969891b7ba1274d6b3bb363b27c (patch)
treef7a9bcd76d330efc89f827203990a0383523f193 /meta/classes/image-mklibs.bbclass
parentc706b5efb6470101a103762511b52112c444f799 (diff)
downloadpoky-b578a06564599969891b7ba1274d6b3bb363b27c.tar.gz
image-mklibs: handle position independent binaries
Executables built with -fpie have the ELF type DYN rather than EXEC which makes them difficult to distinguish from shared libraries. Currently when building the list of executables we omit these binaries so they might fail to run on the resultant rootfs due to missing symbols. One of these is systemd which builds -fpie unconditionally, so mklibs breaks images containing systemd. Modify the search to catch all executable files that are ELF and have an interpreter set. Omit libc and libpthread as special cases because they have an interpreter and are directly executable but treating them as such is antithetical to the pupose of mklibs. (From OE-Core rev: 30da34ef032d5b4b2f694743715f2c8d64dd9849) Signed-off-by: Tyler Hall <tylerwhall@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes/image-mklibs.bbclass')
-rw-r--r--meta/classes/image-mklibs.bbclass16
1 files changed, 9 insertions, 7 deletions
diff --git a/meta/classes/image-mklibs.bbclass b/meta/classes/image-mklibs.bbclass
index 6c0e8dcf35..5f6df1b17f 100644
--- a/meta/classes/image-mklibs.bbclass
+++ b/meta/classes/image-mklibs.bbclass
@@ -9,13 +9,15 @@ mklibs_optimize_image_doit() {
9 mkdir -p ${WORKDIR}/mklibs/dest 9 mkdir -p ${WORKDIR}/mklibs/dest
10 cd ${IMAGE_ROOTFS} 10 cd ${IMAGE_ROOTFS}
11 du -bs > ${WORKDIR}/mklibs/du.before.mklibs.txt 11 du -bs > ${WORKDIR}/mklibs/du.before.mklibs.txt
12 for i in `find .`; do file $i; done \ 12
13 | grep ELF \ 13 # Build a list of dynamically linked executable ELF files.
14 | grep "LSB *executable" \ 14 # Omit libc/libpthread as a special case because it has an interpreter
15 | grep "dynamically linked" \ 15 # but is primarily what we intend to strip down.
16 | sed "s/:.*//" \ 16 for i in `find . -type f -executable ! -name 'libc-*' ! -name 'libpthread-*'`; do
17 | sed "s+^\./++" \ 17 file $i | grep -q ELF || continue
18 > ${WORKDIR}/mklibs/executables.list 18 ${HOST_PREFIX}readelf -l $i | grep -q INTERP || continue
19 echo $i
20 done > ${WORKDIR}/mklibs/executables.list
19 21
20 dynamic_loader=$(linuxloader) 22 dynamic_loader=$(linuxloader)
21 23