diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-03-04 16:27:11 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-03-07 00:11:39 +0000 |
commit | 0b84897ea813a4f7a8b198efcc7ac335debf19d9 (patch) | |
tree | ba827f0c0486936de4616efc8eeb24876e90474f /meta/classes | |
parent | 6b564ae35d35693476513141ab9ae49aa734c7eb (diff) | |
download | poky-0b84897ea813a4f7a8b198efcc7ac335debf19d9.tar.gz |
insane/prelink: Handle nonstandard library paths
Prelink contains some hardcoded assumptions about the path layout of
the target system. Unfortunately if the system doesn't match, prelink
doesn't work. This breaks:
a) prelink of those images
b) the unsafe-references-in-binaries QA test (which uses prelink-rtld)
One way to work around this is to construct an ld.so.conf file which
lists the library paths in question. We do this in sanity QA check and
in the rootfs prelink code, being careful not to trample any existing
target ld.so.conf.
There is an additional problem that $LIB references in RPATHs won't be
handled correctly, I've not see any system use these in reality though
so this change at least improves things.
(From OE-Core rev: 7fd1d7e639c2ed7e0699937a5cb245c187b7c811)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/image-prelink.bbclass | 19 | ||||
-rw-r--r-- | meta/classes/insane.bbclass | 5 |
2 files changed, 23 insertions, 1 deletions
diff --git a/meta/classes/image-prelink.bbclass b/meta/classes/image-prelink.bbclass index d4bb3aec39..53c4b0b112 100644 --- a/meta/classes/image-prelink.bbclass +++ b/meta/classes/image-prelink.bbclass | |||
@@ -1,6 +1,10 @@ | |||
1 | do_rootfs[depends] += "prelink-native:do_populate_sysroot" | 1 | do_rootfs[depends] += "prelink-native:do_populate_sysroot" |
2 | 2 | ||
3 | IMAGE_PREPROCESS_COMMAND += "prelink_image; " | 3 | IMAGE_PREPROCESS_COMMAND += "prelink_setup; prelink_image; " |
4 | |||
5 | python prelink_setup () { | ||
6 | oe.utils.write_ld_so_conf(d) | ||
7 | } | ||
4 | 8 | ||
5 | prelink_image () { | 9 | prelink_image () { |
6 | # export PSEUDO_DEBUG=4 | 10 | # export PSEUDO_DEBUG=4 |
@@ -20,6 +24,13 @@ prelink_image () { | |||
20 | dummy_prelink_conf=false; | 24 | dummy_prelink_conf=false; |
21 | fi | 25 | fi |
22 | 26 | ||
27 | # We need a ld.so.conf with pathnames in,prelink conf on the filesystem, add one if it's missing | ||
28 | ldsoconf=${IMAGE_ROOTFS}${sysconfdir}/ld.so.conf | ||
29 | if [ -e $ldsoconf ]; then | ||
30 | cp $ldsoconf $ldsoconf.prelink | ||
31 | fi | ||
32 | cat ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf >> $ldsoconf | ||
33 | |||
23 | # prelink! | 34 | # prelink! |
24 | ${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root ${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf | 35 | ${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root ${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf |
25 | 36 | ||
@@ -28,6 +39,12 @@ prelink_image () { | |||
28 | rm -f ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf | 39 | rm -f ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf |
29 | fi | 40 | fi |
30 | 41 | ||
42 | if [ -e $ldsoconf.prelink ]; then | ||
43 | mv $ldsoconf.prelink $ldsoconf | ||
44 | else | ||
45 | rm $ldsoconf | ||
46 | fi | ||
47 | |||
31 | pre_prelink_size=`du -ks ${IMAGE_ROOTFS} | awk '{size = $1 ; print size }'` | 48 | pre_prelink_size=`du -ks ${IMAGE_ROOTFS} | awk '{size = $1 ; print size }'` |
32 | echo "Size after prelinking $pre_prelink_size." | 49 | echo "Size after prelinking $pre_prelink_size." |
33 | } | 50 | } |
diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass index ebf92ac621..7ac945d4cd 100644 --- a/meta/classes/insane.bbclass +++ b/meta/classes/insane.bbclass | |||
@@ -1094,12 +1094,17 @@ python do_package_qa () { | |||
1094 | continue | 1094 | continue |
1095 | if w in testmatrix and testmatrix[w] in g: | 1095 | if w in testmatrix and testmatrix[w] in g: |
1096 | warnchecks.append(g[testmatrix[w]]) | 1096 | warnchecks.append(g[testmatrix[w]]) |
1097 | if w == 'unsafe-references-in-binaries': | ||
1098 | oe.utils.write_ld_so_conf(d) | ||
1099 | |||
1097 | errorchecks = [] | 1100 | errorchecks = [] |
1098 | for e in (d.getVar("ERROR_QA", True) or "").split(): | 1101 | for e in (d.getVar("ERROR_QA", True) or "").split(): |
1099 | if e in skip: | 1102 | if e in skip: |
1100 | continue | 1103 | continue |
1101 | if e in testmatrix and testmatrix[e] in g: | 1104 | if e in testmatrix and testmatrix[e] in g: |
1102 | errorchecks.append(g[testmatrix[e]]) | 1105 | errorchecks.append(g[testmatrix[e]]) |
1106 | if e == 'unsafe-references-in-binaries': | ||
1107 | oe.utils.write_ld_so_conf(d) | ||
1103 | 1108 | ||
1104 | bb.note("Checking Package: %s" % package) | 1109 | bb.note("Checking Package: %s" % package) |
1105 | # Check package name | 1110 | # Check package name |