aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <quic_apinski@quicinc.com>2024-04-16 12:06:51 -0700
committerAndrew Pinski <quic_apinski@quicinc.com>2024-08-30 07:10:13 -0700
commit3fb90724cec7e76b60fb910fa98b4ebec9912a31 (patch)
tree6648bd186f6c7dd939b08b976c665f8713406238
parent4d2cbe2bbedbdbc609683f7fb491b3e02add15b3 (diff)
downloadgcc-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.cc24
1 files changed, 6 insertions, 18 deletions
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index d07a8e1..ae1d80f 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -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));
}