diff options
Diffstat (limited to 'gcc-7/files/0028-13185-zassert-deflib-does-not-work-for-64-bit-object.patch')
| -rw-r--r-- | gcc-7/files/0028-13185-zassert-deflib-does-not-work-for-64-bit-object.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/gcc-7/files/0028-13185-zassert-deflib-does-not-work-for-64-bit-object.patch b/gcc-7/files/0028-13185-zassert-deflib-does-not-work-for-64-bit-object.patch new file mode 100644 index 0000000..03d38d5 --- /dev/null +++ b/gcc-7/files/0028-13185-zassert-deflib-does-not-work-for-64-bit-object.patch @@ -0,0 +1,55 @@ +From 2cc1e414c8baf7d2e2b9492d3343b0e84508c186 Mon Sep 17 00:00:00 2001 +From: Andy Fiddaman <omnios@citrus-it.co.uk> +Date: Mon, 11 Jan 2021 14:09:40 +0000 +Subject: 13185 -zassert-deflib does not work for 64-bit objects + +--- + gcc/gcc.c | 33 ++++++++++++++++++++++++++------- + 1 file changed, 26 insertions(+), 7 deletions(-) + +diff --git a/gcc/gcc.c b/gcc/gcc.c +index eced0d53aae..3b74f3c2970 100644 +--- a/gcc/gcc.c ++++ b/gcc/gcc.c +@@ -7017,15 +7017,34 @@ is_directory (const char *path1, bool linker) + *cp = '\0'; + + /* Exclude directories that the linker is known to search. */ +- if (linker +- && IS_DIR_SEPARATOR (path[0]) +- && ((cp - path == 6 +- && filename_ncmp (path + 1, "lib", 3) == 0) +- || (cp - path == 10 ++ if (linker && IS_DIR_SEPARATOR (path[0])) { ++ size_t len = cp - path; ++ ++ if (len >= 6 && filename_ncmp (path + 1, "lib", 3) == 0) { ++ if (len == 6) ++ return 0; ++ if (multilib_os_dir != NULL ++ && len == 6 + strlen(multilib_os_dir) + 1 ++ && filename_ncmp(path + 5, multilib_os_dir, ++ strlen(multilib_os_dir)) == 0) { ++ return 0; ++ } ++ } ++ ++ if (len >= 10 + && filename_ncmp (path + 1, "usr", 3) == 0 + && IS_DIR_SEPARATOR (path[4]) +- && filename_ncmp (path + 5, "lib", 3) == 0))) +- return 0; ++ && filename_ncmp (path + 5, "lib", 3) == 0) { ++ if (len == 10) ++ return 0; ++ if (multilib_os_dir != NULL ++ && len == 10 + strlen(multilib_os_dir) + 1 ++ && filename_ncmp(path + 9, multilib_os_dir, ++ strlen(multilib_os_dir)) == 0) { ++ return 0; ++ } ++ } ++ } + + return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); + } |
