*** empty log message ***
authoroldham <oldham@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Apr 2001 19:59:53 +0000 (19:59 +0000)
committeroldham <oldham@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 27 Apr 2001 19:59:53 +0000 (19:59 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41645 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/collect2.c
gcc/config/mips/iris6.h
gcc/defaults.h
gcc/tm.texi

index 18c671c..1ec2cfd 100644 (file)
@@ -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>
 
index 4757b9f..83ed200 100644 (file)
@@ -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
index 1540c74..e9b594f 100644 (file)
@@ -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"
index 008fa90..4ed35f2 100644 (file)
@@ -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)
index 4e8eb5e..bf4c1a7 100644 (file)
@@ -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