diff options
author | Andrew Pinski <quic_apinski@quicinc.com> | 2024-04-16 12:06:51 -0700 |
---|---|---|
committer | Andrew Pinski <quic_apinski@quicinc.com> | 2024-08-30 07:10:13 -0700 |
commit | 3fb90724cec7e76b60fb910fa98b4ebec9912a31 (patch) | |
tree | 6648bd186f6c7dd939b08b976c665f8713406238 | |
parent | 4d2cbe2bbedbdbc609683f7fb491b3e02add15b3 (diff) | |
download | gcc-3fb90724cec7e76b60fb910fa98b4ebec9912a31.zip gcc-3fb90724cec7e76b60fb910fa98b4ebec9912a31.tar.gz gcc-3fb90724cec7e76b60fb910fa98b4ebec9912a31.tar.bz2 |
Don't remove /usr/lib and /lib from when passing to the linker [PR97304/104707]
With newer ld, the default search library path does not include /usr/lib nor /lib
but the driver decides to not pass -L down to the link for these and then in some/most
cases libc is not found.
This code dates from at least 1992 and it is done in a way which is not safe and
does not make sense. So let's remove it.
Bootstrapped and tested on x86_64-linux-gnu (which defaults to being a multilib).
gcc/ChangeLog:
PR driver/104707
PR driver/97304
* gcc.cc (is_directory): Don't not include /usr/lib and /lib
for library directory pathes. Remove library argument.
(add_to_obstack): Update call to is_directory.
(driver_handle_option): Likewise.
(spec_path): Likewise.
Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
-rw-r--r-- | gcc/gcc.cc | 24 |
1 files changed, 6 insertions, 18 deletions
@@ -409,7 +409,7 @@ static int do_spec_2 (const char *, const char *); static void do_option_spec (const char *, const char *); static void do_self_spec (const char *); static const char *find_file (const char *); -static int is_directory (const char *, bool); +static int is_directory (const char *); static const char *validate_switches (const char *, bool, bool); static void validate_all_switches (void); static inline void validate_switches_from_spec (const char *, bool); @@ -2941,7 +2941,7 @@ add_to_obstack (char *path, void *data) { struct add_to_obstack_info *info = (struct add_to_obstack_info *) data; - if (info->check_dir && !is_directory (path, false)) + if (info->check_dir && !is_directory (path)) return NULL; if (!info->first_time) @@ -4577,7 +4577,7 @@ driver_handle_option (struct gcc_options *opts, if appending a directory separator actually makes a valid directory name. */ if (!IS_DIR_SEPARATOR (arg[len - 1]) - && is_directory (arg, false)) + && is_directory (arg)) { char *tmp = XNEWVEC (char, len + 2); strcpy (tmp, arg); @@ -6020,7 +6020,7 @@ spec_path (char *path, void *data) memcpy (path + len, info->append, info->append_len + 1); } - if (!is_directory (path, true)) + if (!is_directory (path)) return NULL; do_spec_1 (info->option, 1, NULL); @@ -8042,11 +8042,10 @@ find_file (const char *name) return newname ? newname : name; } -/* Determine whether a directory exists. If LINKER, return 0 for - certain fixed names not needed by the linker. */ +/* Determine whether a directory exists. */ static int -is_directory (const char *path1, bool linker) +is_directory (const char *path1) { int len1; char *path; @@ -8064,17 +8063,6 @@ is_directory (const char *path1, bool linker) *cp++ = '.'; *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 - && filename_ncmp (path + 1, "usr", 3) == 0 - && IS_DIR_SEPARATOR (path[4]) - && filename_ncmp (path + 5, "lib", 3) == 0))) - return 0; - return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); } |