[OE-core] [PATCH] linuxloader/image-prelink/image-mklibs: Fix non-standard path prelinking

Khem Raj raj.khem at gmail.com
Tue Sep 29 17:09:48 UTC 2015


> On Sep 29, 2015, at 6:27 AM, Richard Purdie <richard.purdie at linuxfoundation.org> wrote:
> 
> Prelinking on x86-64 wasn't working out the box as it uses /lib and
> not /lib64 for libs. Prelink was refusing to link as the dynamic loader
> didn't match its idea of the right path. Passing in the --dyanmic-linker
> option avoids this.
> 
> We can share code from image-mklibs so abstract that into a new class,
> linuxloader.bbclass.
> 
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> 
> diff --git a/meta/classes/image-mklibs.bbclass b/meta/classes/image-mklibs.bbclass
> index c455a8e..45a66fb 100644
> --- a/meta/classes/image-mklibs.bbclass
> +++ b/meta/classes/image-mklibs.bbclass
> @@ -2,6 +2,8 @@ do_rootfs[depends] += "mklibs-native:do_populate_sysroot"
> 
> IMAGE_PREPROCESS_COMMAND += "mklibs_optimize_image; "
> 
> +inherit linuxloader
> +
> mklibs_optimize_image_doit() {
> 	rm -rf ${WORKDIR}/mklibs
> 	mkdir -p ${WORKDIR}/mklibs/dest
> @@ -15,26 +17,8 @@ mklibs_optimize_image_doit() {
> 		| sed "s+^\./++" \
> 		> ${WORKDIR}/mklibs/executables.list
> 
> -	case ${TARGET_ARCH} in
> -		powerpc | mips | mipsel | microblaze )
> -			dynamic_loader="${base_libdir}/ld.so.1"
> -			;;
> -		powerpc64)
> -			dynamic_loader="${base_libdir}/ld64.so.1"
> -			;;
> -		x86_64)
> -			dynamic_loader="${base_libdir}/ld-linux-x86-64.so.2"
> -			;;
> -		i586 )
> -			dynamic_loader="${base_libdir}/ld-linux.so.2"
> -			;;
> -		arm )
> -			dynamic_loader="${base_libdir}/ld-linux.so.3"
> -			;;
> -		* )
> -			dynamic_loader="/unknown_dynamic_linker"
> -			;;
> -	esac
> +	# Set $dynamic_loader
> +        linuxloader
> 
> 	mklibs -v \
> 		--ldlib ${dynamic_loader} \
> diff --git a/meta/classes/image-prelink.bbclass b/meta/classes/image-prelink.bbclass
> index d4bb3ae..4bb090d 100644
> --- a/meta/classes/image-prelink.bbclass
> +++ b/meta/classes/image-prelink.bbclass
> @@ -2,6 +2,8 @@ do_rootfs[depends] += "prelink-native:do_populate_sysroot"
> 
> IMAGE_PREPROCESS_COMMAND += "prelink_image; "
> 
> +inherit linuxloader
> +
> prelink_image () {
> #	export PSEUDO_DEBUG=4
> #	/bin/env | /bin/grep PSEUDO
> @@ -20,8 +22,11 @@ prelink_image () {
> 		dummy_prelink_conf=false;
> 	fi
> 
> +	# Set $dynamic_loader
> +	linuxloader
> +
> 	# prelink!
> -	${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root ${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf
> +	${STAGING_DIR_NATIVE}${sbindir_native}/prelink --root ${IMAGE_ROOTFS} -amR -N -c ${sysconfdir}/prelink.conf --dynamic-linker $dynamic_loader
> 
> 	# Remove the prelink.conf if we had to add it.
> 	if [ "$dummy_prelink_conf" = "true" ]; then
> diff --git a/meta/classes/linuxloader.bbclass b/meta/classes/linuxloader.bbclass
> new file mode 100644
> index 0000000..578df14
> --- /dev/null
> +++ b/meta/classes/linuxloader.bbclass
> @@ -0,0 +1,23 @@
> +
> +linuxloader () {
> +	case ${TARGET_ARCH} in
> +		powerpc | mips | mipsel | microblaze )
> +			dynamic_loader="${base_libdir}/ld.so.1"
> +			;;
> +		powerpc64)
> +			dynamic_loader="${base_libdir}/ld64.so.1"
> +			;;
> +		x86_64)
> +			dynamic_loader="${base_libdir}/ld-linux-x86-64.so.2"
> +			;;
> +		i586 )
> +			dynamic_loader="${base_libdir}/ld-linux.so.2"
> +			;;
> +		arm )
> +			dynamic_loader="${base_libdir}/ld-linux.so.3"
> +			;;
> +		* )
> +			dynamic_loader="/unknown_dynamic_linker"
> +			;;
> +	esac
> +}
> 
> 

For readability it would have been nice if it was returning the value from function so it could be used

myloader = call this function



> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 204 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20150929/7399e443/attachment-0002.sig>


More information about the Openembedded-core mailing list