This looks fine On Oct 3, 2016 7:17 AM, "Ross Burton" <[email protected]> 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 <[email protected]> > --- > 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 <[email protected]> > + > +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 > [email protected] > http://lists.openembedded.org/mailman/listinfo/openembedded-core >
-- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
