aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeffrey Oldham <oldham@codesourcery.com>2001-04-27 19:59:53 +0000
committerJeffrey D. Oldham <oldham@gcc.gnu.org>2001-04-27 19:59:53 +0000
commit5897739e11e3ad849cacccce56f6b413a10bf04b (patch)
tree9549761c28ea76715ba53bb9ad4c9c4c578cd20e /gcc
parent994682b99a23470050f3f259ebae33207f672b99 (diff)
downloadgcc-5897739e11e3ad849cacccce56f6b413a10bf04b.zip
gcc-5897739e11e3ad849cacccce56f6b413a10bf04b.tar.gz
gcc-5897739e11e3ad849cacccce56f6b413a10bf04b.tar.bz2
*** empty log message ***
From-SVN: r41645
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/collect2.c28
-rw-r--r--gcc/config/mips/iris6.h4
-rw-r--r--gcc/defaults.h7
-rw-r--r--gcc/tm.texi6
5 files changed, 54 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 18c671c..1ec2cfd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2001-04-27 Jeffrey Oldham <oldham@codesourcery.com>
+
+ * collect2.c (main): Add `-L' case to remove duplicate entries.
+ (is_in_args): New function to check for a duplicate argument.
+ * defaults.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): New macro.
+ * tm.texi (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES): New documentation.
+ * config/mips/iris6.h (LINK_ELIMINATE_DUPLICATE_LDIRECTORIES):
+ Define to be nonzero.
+
2001-04-27 Andreas Jaeger <aj@suse.de>
Richard Henderson <rth@redhat.com>
diff --git a/gcc/collect2.c b/gcc/collect2.c
index 4757b9f..83ed200 100644
--- a/gcc/collect2.c
+++ b/gcc/collect2.c
@@ -292,6 +292,9 @@ static void scan_prog_file PARAMS ((const char *, enum pass));
#ifdef SCAN_LIBRARIES
static void scan_libraries PARAMS ((const char *));
#endif
+#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
+static int is_in_args PARAMS ((const char *, const char **, const char **));
+#endif
#ifdef COLLECT_EXPORT_LIST
static int is_in_list PARAMS ((const char *, struct id *));
static void write_aix_file PARAMS ((FILE *, struct id *));
@@ -1177,6 +1180,13 @@ main (argc, argv)
case 'L':
add_prefix (&cmdline_lib_dirs, arg+2);
break;
+#else
+#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
+ case 'L':
+ if (is_in_args (arg, (const char **) ld1_argv, ld1-1))
+ --ld1;
+ break;
+#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */
#endif
case 'o':
@@ -1756,6 +1766,24 @@ write_list (stream, prefix, list)
}
}
+#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
+/* Given a STRING, return nonzero if it occurs in the list in range
+ [ARGS_BEGIN,ARGS_END). */
+
+static int
+is_in_args (string, args_begin, args_end)
+ const char *string;
+ const char **args_begin;
+ const char **args_end;
+{
+ const char **args_pointer;
+ for (args_pointer = args_begin; args_pointer != args_end; ++args_pointer)
+ if (strcmp (string, *args_pointer) == 0)
+ return 1;
+ return 0;
+}
+#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */
+
#ifdef COLLECT_EXPORT_LIST
/* This function is really used only on AIX, but may be useful. */
static int
diff --git a/gcc/config/mips/iris6.h b/gcc/config/mips/iris6.h
index 1540c74..e9b594f 100644
--- a/gcc/config/mips/iris6.h
+++ b/gcc/config/mips/iris6.h
@@ -204,6 +204,10 @@ Boston, MA 02111-1307, USA. */
#undef SUPPORTS_INIT_PRIORITY
#define SUPPORTS_INIT_PRIORITY 0
+/* A linker error can empirically be avoided by removing duplicate
+ library search directories. */
+#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 1
+
#define POPSECTION_ASM_OP "\t.popsection"
#define DEBUG_INFO_SECTION ".debug_info,0x7000001e,0,0,1"
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 008fa90..4ed35f2 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -170,6 +170,13 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
#define SUPPORTS_INIT_PRIORITY 1
#endif /* SUPPORTS_INIT_PRIORITY */
+/* If duplicate library search directories can be removed from a
+ linker command without changing the linker's semantics, give this
+ symbol a nonzero. */
+#ifndef LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
+#define LINK_ELIMINATE_DUPLICATE_LDIRECTORIES 0
+#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */
+
/* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
the rest of the DWARF 2 frame unwind support is also provided. */
#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
diff --git a/gcc/tm.texi b/gcc/tm.texi
index 4e8eb5e..bf4c1a7 100644
--- a/gcc/tm.texi
+++ b/gcc/tm.texi
@@ -325,6 +325,12 @@ define this macro only if you need to completely redefine the command
line for invoking the linker and there is no other way to accomplish
the effect you need.
+@findex LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
+@item LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
+A nonzero value causes collect2 to remove duplicate -L<directory> search
+directories from linking commands. Do not give it a nonzero value if
+removing duplicate search directories changes the linker's semantics.
+
@findex MULTILIB_DEFAULTS
@item MULTILIB_DEFAULTS
Define this macro as a C expression for the initializer of an array of