summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools
diff options
context:
space:
mode:
authorRoss Burton <ross.burton@intel.com>2016-10-03 15:16:32 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-10-04 16:29:04 +0100
commit0c9ba38d929ebe5da2c2e0b2a605e6d12cc57266 (patch)
tree098197e66b8fa810ffd0dd3e3719fcefc6cd8674 /meta/recipes-devtools
parent55e8c3a9f98b91be7b619042969f63459832610e (diff)
downloadpoky-0c9ba38d929ebe5da2c2e0b2a605e6d12cc57266.tar.gz
binutils: apply RPATH fixes from our libtool patches
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 ] (From OE-Core rev: 6b201081b622cc083cc2b1a8ad99d6f7d2bea480) Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools')
-rw-r--r--meta/recipes-devtools/binutils/binutils-2.27.inc1
-rw-r--r--meta/recipes-devtools/binutils/binutils/0014-libtool-remove-rpath.patch100
2 files changed, 101 insertions, 0 deletions
diff --git a/meta/recipes-devtools/binutils/binutils-2.27.inc b/meta/recipes-devtools/binutils/binutils-2.27.inc
index 9cc57fcdea..03b7bedd25 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 = "\
33 file://0011-Change-default-emulation-for-mips64-linux.patch \ 33 file://0011-Change-default-emulation-for-mips64-linux.patch \
34 file://0012-Add-support-for-Netlogic-XLP.patch \ 34 file://0012-Add-support-for-Netlogic-XLP.patch \
35 file://0013-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch \ 35 file://0013-fix-the-incorrect-assembling-for-ppc-wait-mnemonic.patch \
36 file://0014-libtool-remove-rpath.patch \
36" 37"
37S = "${WORKDIR}/git" 38S = "${WORKDIR}/git"
38 39
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 0000000000..d56948f15d
--- /dev/null
+++ b/meta/recipes-devtools/binutils/binutils/0014-libtool-remove-rpath.patch
@@ -0,0 +1,100 @@
1Apply these patches from our libtool patches as not only are redundant RPATHs a
2waste of space but they can cause incorrect linking when native packages are
3restored from sstate.
4
5fix-rpath.patch:
6We don't want to add RPATHS which match default linker
7search paths, they're a waste of space. This patch
8filters libtools list and removes the ones we don't need.
9
10norm-rpath.patch:
11Libtool may be passed link paths of the form "/usr/lib/../lib", which
12fool its detection code into thinking it should be included as an
13RPATH in the generated binary. Normalize before comparision.
14
15Upstream-Status: Inappropriate
16Signed-off-by: Ross Burton <ross.burton@intel.com>
17
18diff --git a/ltmain.sh b/ltmain.sh
19index 683317c..860a16a 100644
20--- a/ltmain.sh
21+++ b/ltmain.sh
22@@ -8053,8 +8053,14 @@ EOF
23 esac
24 fi
25 else
26- eval flag=\"$hardcode_libdir_flag_spec\"
27- func_append dep_rpath " $flag"
28+ # We only want to hardcode in an rpath if it isn't in the
29+ # default dlsearch path.
30+ case " $sys_lib_dlsearch_path " in
31+ *" $libdir "*) ;;
32+ *) eval flag=\"$hardcode_libdir_flag_spec\"
33+ func_append dep_rpath " $flag"
34+ ;;
35+ esac
36 fi
37 elif test -n "$runpath_var"; then
38 case "$perm_rpath " in
39@@ -8790,8 +8796,14 @@ EOF
40 esac
41 fi
42 else
43- eval flag=\"$hardcode_libdir_flag_spec\"
44- func_append rpath " $flag"
45+ # We only want to hardcode in an rpath if it isn't in the
46+ # default dlsearch path.
47+ case " $sys_lib_dlsearch_path " in
48+ *" $libdir "*) ;;
49+ *) eval flag=\"$hardcode_libdir_flag_spec\"
50+ rpath+=" $flag"
51+ ;;
52+ esac
53 fi
54 elif test -n "$runpath_var"; then
55 case "$perm_rpath " in
56@@ -8841,8 +8853,14 @@ EOF
57 esac
58 fi
59 else
60- eval flag=\"$hardcode_libdir_flag_spec\"
61- func_append rpath " $flag"
62+ # We only want to hardcode in an rpath if it isn't in the
63+ # default dlsearch path.
64+ case " $sys_lib_dlsearch_path " in
65+ *" $libdir "*) ;;
66+ *) eval flag=\"$hardcode_libdir_flag_spec\"
67+ func_append rpath " $flag"
68+ ;;
69+ esac
70 fi
71 elif test -n "$runpath_var"; then
72 case "$finalize_perm_rpath " in
73diff --git a/ltmain.sh b/ltmain.sh
74index 683317c..860a16a 100644
75--- a/ltmain.sh
76+++ b/ltmain.sh
77@@ -8055,8 +8055,10 @@ EOF
78 else
79 # We only want to hardcode in an rpath if it isn't in the
80 # default dlsearch path.
81+ func_normal_abspath "$libdir"
82+ libdir_norm=$func_normal_abspath_result
83 case " $sys_lib_dlsearch_path " in
84- *" $libdir "*) ;;
85+ *" $libdir_norm "*) ;;
86 *) eval flag=\"$hardcode_libdir_flag_spec\"
87 func_append dep_rpath " $flag"
88 ;;
89@@ -8798,8 +8800,10 @@ EOF
90 else
91 # We only want to hardcode in an rpath if it isn't in the
92 # default dlsearch path.
93+ func_normal_abspath "$libdir"
94+ libdir_norm=$func_normal_abspath_result
95 case " $sys_lib_dlsearch_path " in
96- *" $libdir "*) ;;
97+ *" $libdir_norm "*) ;;
98 *) eval flag=\"$hardcode_libdir_flag_spec\"
99 rpath+=" $flag"
100 ;;