mirror of
https://git.yoctoproject.org/poky
synced 2026-02-20 08:29:42 +01:00
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>
51 lines
1.5 KiB
Plaintext
51 lines
1.5 KiB
Plaintext
do_rootfs[depends] += "prelink-native:do_populate_sysroot"
|
|
|
|
IMAGE_PREPROCESS_COMMAND += "prelink_setup; prelink_image; "
|
|
|
|
python prelink_setup () {
|
|
oe.utils.write_ld_so_conf(d)
|
|
}
|
|
|
|
prelink_image () {
|
|
# export PSEUDO_DEBUG=4
|
|
# /bin/env | /bin/grep PSEUDO
|
|
# echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
|
|
# echo "LD_PRELOAD=$LD_PRELOAD"
|
|
|
|
pre_prelink_size=`du -ks ${IMAGE_ROOTFS} | awk '{size = $1 ; print size }'`
|
|
echo "Size before prelinking $pre_prelink_size."
|
|
|
|
# We need a prelink conf on the filesystem, add one if it's missing
|
|
if [ ! -e ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf ]; then
|
|
cp ${STAGING_DIR_NATIVE}${sysconfdir_native}/prelink.conf \
|
|
${IMAGE_ROOTFS}${sysconfdir}/prelink.conf
|
|
dummy_prelink_conf=true;
|
|
else
|
|
dummy_prelink_conf=false;
|
|
fi
|
|
|
|
# We need a ld.so.conf with pathnames in,prelink conf on the filesystem, add one if it's missing
|
|
ldsoconf=${IMAGE_ROOTFS}${sysconfdir}/ld.so.conf
|
|
if [ -e $ldsoconf ]; then
|
|
cp $ldsoconf $ldsoconf.prelink
|
|
fi
|
|
cat ${STAGING_DIR_TARGET}${sysconfdir}/ld.so.conf >> $ldsoconf
|
|
|
|
# prelink!
|
|
${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root ${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf
|
|
|
|
# Remove the prelink.conf if we had to add it.
|
|
if [ "$dummy_prelink_conf" = "true" ]; then
|
|
rm -f ${IMAGE_ROOTFS}${sysconfdir}/prelink.conf
|
|
fi
|
|
|
|
if [ -e $ldsoconf.prelink ]; then
|
|
mv $ldsoconf.prelink $ldsoconf
|
|
else
|
|
rm $ldsoconf
|
|
fi
|
|
|
|
pre_prelink_size=`du -ks ${IMAGE_ROOTFS} | awk '{size = $1 ; print size }'`
|
|
echo "Size after prelinking $pre_prelink_size."
|
|
}
|