123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- From 33a1f07a4417247dc24819d4e583ca09f56d5a7b Mon Sep 17 00:00:00 2001
- From: Khem Raj <raj.khem@gmail.com>
- Date: Mon, 7 Dec 2015 23:41:45 +0000
- Subject: [PATCH] Search target sysroot gcc version specific dirs with
- multilib.
- We install the gcc libraries (such as crtbegin.p) into
- <sysroot><libdir>/<target-sys>/5.2.0/
- which is a default search path for GCC (aka multi_suffix in the
- code below). <target-sys> is 'machine' in gcc's terminology. We use
- these directories so that multiple gcc versions could in theory
- co-exist on target.
- We only want to build one gcc-cross-canadian per arch and have this work
- for all multilibs. <target-sys> can be handled by mapping the multilib
- <target-sys> to the one used by gcc-cross-canadian, e.g.
- mips64-polkmllib32-linux
- is symlinked to by mips64-poky-linux.
- The default gcc search path in the target sysroot for a "lib64" mutlilib
- is:
- <sysroot>/lib32/mips64-poky-linux/5.2.0/
- <sysroot>/lib32/../lib64/
- <sysroot>/usr/lib32/mips64-poky-linux/5.2.0/
- <sysroot>/usr/lib32/../lib64/
- <sysroot>/lib32/
- <sysroot>/usr/lib32/
- which means that the lib32 crtbegin.o will be found and the lib64 ones
- will not which leads to compiler failures.
- This patch injects a multilib version of that path first so the lib64
- binaries can be found first. With this change the search path becomes:
- <sysroot>/lib32/../lib64/mips64-poky-linux/5.2.0/
- <sysroot>/lib32/mips64-poky-linux/5.2.0/
- <sysroot>/lib32/../lib64/
- <sysroot>/usr/lib32/../lib64/mips64-poky-linux/5.2.0/
- <sysroot>/usr/lib32/mips64-poky-linux/5.2.0/
- <sysroot>/usr/lib32/../lib64/
- <sysroot>/lib32/
- <sysroot>/usr/lib32/
- Upstream-Status: Pending
- RP 2015/7/31
- Signed-off-by: Khem Raj <raj.khem@gmail.com>
- ---
- gcc/gcc.cc | 29 ++++++++++++++++++++++++++++-
- 1 file changed, 28 insertions(+), 1 deletion(-)
- diff --git a/gcc/gcc.cc b/gcc/gcc.cc
- index 5569a39a14a..4598f6cd7c9 100644
- --- a/gcc/gcc.cc
- +++ b/gcc/gcc.cc
- @@ -2817,7 +2817,7 @@ for_each_path (const struct path_prefix *paths,
- if (path == NULL)
- {
- len = paths->max_len + extra_space + 1;
- - len += MAX (MAX (suffix_len, multi_os_dir_len), multiarch_len);
- + len += MAX ((suffix_len + multi_os_dir_len), multiarch_len);
- path = XNEWVEC (char, len);
- }
-
- @@ -2829,6 +2829,33 @@ for_each_path (const struct path_prefix *paths,
- /* Look first in MACHINE/VERSION subdirectory. */
- if (!skip_multi_dir)
- {
- + if (!(pl->os_multilib ? skip_multi_os_dir : skip_multi_dir))
- + {
- + const char *this_multi;
- + size_t this_multi_len;
- +
- + if (pl->os_multilib)
- + {
- + this_multi = multi_os_dir;
- + this_multi_len = multi_os_dir_len;
- + }
- + else
- + {
- + this_multi = multi_dir;
- + this_multi_len = multi_dir_len;
- + }
- +
- + /* Look in multilib MACHINE/VERSION subdirectory first */
- + if (this_multi_len)
- + {
- + memcpy (path + len, this_multi, this_multi_len + 1);
- + memcpy (path + len + this_multi_len, multi_suffix, suffix_len + 1);
- + ret = callback (path, callback_info);
- + if (ret)
- + break;
- + }
- + }
- +
- memcpy (path + len, multi_suffix, suffix_len + 1);
- ret = callback (path, callback_info);
- if (ret)
|