[OE-core] [PATCH 4/4] binutils: apply RPATH fixes from our libtool patches
Khem Raj
raj.khem at gmail.com
Mon Oct 3 16:25:16 UTC 2016
This looks fine
On Oct 3, 2016 7:17 AM, "Ross Burton" <ross.burton at intel.com> wrote:
> We don't autoreconf/libtoolize binutils as it has very strict
> requirements, so
> extend our patching of the stock libtool to include two fixes to RPATH
> behaviour, as part of the solution to ensure that native binaries don't
> have
> RPATHs pointing at the host system's /usr/lib.
>
> This generally doesn't cause a problem but it can cause some binaries
> (such as
> ar) to abort on startup:
>
> ./x86_64-pokysdk-linux-ar: relocation error: /usr/lib/libc.so.6: symbol
> _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux.so.2
> with
> link time reference
>
> The situation here is that ar is built and as it links to the host
> libc/loader
> has an RPATH for /usr/lib. If tmp is wiped and then binutils is installed
> from
> sstate relocation occurs and the loader changed to the sysroot, but there
> remains a RPATH for /usr/lib. This means that the sysroot loader is used
> with
> the host libc, which can be incompatible. By telling libtool that the host
> library paths are in the default search path, and ensuring that all default
> search paths are not added as RPATHs by libtool, the result is a binary
> that
> links to what it should be linking to and nothing else.
>
> [ YOCTO #9287 ]
>
> Signed-off-by: Ross Burton <ross.burton at intel.com>
> ---
> meta/recipes-devtools/binutils/binutils-2.27.inc | 1 +
> .../binutils/0014-libtool-remove-rpath.patch | 100
> +++++++++++++++++++++
> 2 files changed, 101 insertions(+)
> create mode 100644 meta/recipes-devtools/binutils/binutils/0014-
> libtool-remove-rpath.patch
>
> diff --git a/meta/recipes-devtools/binutils/binutils-2.27.inc
> b/meta/recipes-devtools/binutils/binutils-2.27.inc
> index 9cc57fc..03b7bed 100644
> --- a/meta/recipes-devtools/binutils/binutils-2.27.inc
> +++ b/meta/recipes-devtools/binutils/binutils-2.27.inc
> @@ -33,6 +33,7 @@ SRC_URI = "\
> file://0011-Change-default-emulation-for-mips64-linux.patch \
> file://0012-Add-support-for-Netlogic-XLP.patch \
> file://0013-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch
> \
> + file://0014-libtool-remove-rpath.patch \
> "
> S = "${WORKDIR}/git"
>
> diff --git a/meta/recipes-devtools/binutils/binutils/0014-libtool-remove-rpath.patch
> b/meta/recipes-devtools/binutils/binutils/0014-libtool-remove-rpath.patch
> new file mode 100644
> index 0000000..d56948f
> --- /dev/null
> +++ b/meta/recipes-devtools/binutils/binutils/0014-
> libtool-remove-rpath.patch
> @@ -0,0 +1,100 @@
> +Apply these patches from our libtool patches as not only are redundant
> RPATHs a
> +waste of space but they can cause incorrect linking when native packages
> are
> +restored from sstate.
> +
> +fix-rpath.patch:
> +We don't want to add RPATHS which match default linker
> +search paths, they're a waste of space. This patch
> +filters libtools list and removes the ones we don't need.
> +
> +norm-rpath.patch:
> +Libtool may be passed link paths of the form "/usr/lib/../lib", which
> +fool its detection code into thinking it should be included as an
> +RPATH in the generated binary. Normalize before comparision.
> +
> +Upstream-Status: Inappropriate
> +Signed-off-by: Ross Burton <ross.burton at intel.com>
> +
> +diff --git a/ltmain.sh b/ltmain.sh
> +index 683317c..860a16a 100644
> +--- a/ltmain.sh
> ++++ b/ltmain.sh
> +@@ -8053,8 +8053,14 @@ EOF
> + esac
> + fi
> + else
> +- eval flag=\"$hardcode_libdir_flag_spec\"
> +- func_append dep_rpath " $flag"
> ++ # We only want to hardcode in an rpath if it isn't in the
> ++ # default dlsearch path.
> ++ case " $sys_lib_dlsearch_path " in
> ++ *" $libdir "*) ;;
> ++ *) eval flag=\"$hardcode_libdir_flag_spec\"
> ++ func_append dep_rpath " $flag"
> ++ ;;
> ++ esac
> + fi
> + elif test -n "$runpath_var"; then
> + case "$perm_rpath " in
> +@@ -8790,8 +8796,14 @@ EOF
> + esac
> + fi
> + else
> +- eval flag=\"$hardcode_libdir_flag_spec\"
> +- func_append rpath " $flag"
> ++ # We only want to hardcode in an rpath if it isn't in the
> ++ # default dlsearch path.
> ++ case " $sys_lib_dlsearch_path " in
> ++ *" $libdir "*) ;;
> ++ *) eval flag=\"$hardcode_libdir_flag_spec\"
> ++ rpath+=" $flag"
> ++ ;;
> ++ esac
> + fi
> + elif test -n "$runpath_var"; then
> + case "$perm_rpath " in
> +@@ -8841,8 +8853,14 @@ EOF
> + esac
> + fi
> + else
> +- eval flag=\"$hardcode_libdir_flag_spec\"
> +- func_append rpath " $flag"
> ++ # We only want to hardcode in an rpath if it isn't in the
> ++ # default dlsearch path.
> ++ case " $sys_lib_dlsearch_path " in
> ++ *" $libdir "*) ;;
> ++ *) eval flag=\"$hardcode_libdir_flag_spec\"
> ++ func_append rpath " $flag"
> ++ ;;
> ++ esac
> + fi
> + elif test -n "$runpath_var"; then
> + case "$finalize_perm_rpath " in
> +diff --git a/ltmain.sh b/ltmain.sh
> +index 683317c..860a16a 100644
> +--- a/ltmain.sh
> ++++ b/ltmain.sh
> +@@ -8055,8 +8055,10 @@ EOF
> + else
> + # We only want to hardcode in an rpath if it isn't in the
> + # default dlsearch path.
> ++ func_normal_abspath "$libdir"
> ++ libdir_norm=$func_normal_abspath_result
> + case " $sys_lib_dlsearch_path " in
> +- *" $libdir "*) ;;
> ++ *" $libdir_norm "*) ;;
> + *) eval flag=\"$hardcode_libdir_flag_spec\"
> + func_append dep_rpath " $flag"
> + ;;
> +@@ -8798,8 +8800,10 @@ EOF
> + else
> + # We only want to hardcode in an rpath if it isn't in the
> + # default dlsearch path.
> ++ func_normal_abspath "$libdir"
> ++ libdir_norm=$func_normal_abspath_result
> + case " $sys_lib_dlsearch_path " in
> +- *" $libdir "*) ;;
> ++ *" $libdir_norm "*) ;;
> + *) eval flag=\"$hardcode_libdir_flag_spec\"
> + rpath+=" $flag"
> + ;;
> --
> 2.8.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20161003/0f86f661/attachment-0002.html>
More information about the Openembedded-core
mailing list