From: oldham Date: Fri, 27 Apr 2001 19:59:53 +0000 (+0000) Subject: *** empty log message *** X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=8ae48c7c11d761464a83964d0e9bb8d0ebd7d39e *** empty log message *** git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41645 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 18c671c9c81..1ec2cfd7266 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2001-04-27 Jeffrey Oldham + + * 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 Richard Henderson diff --git a/gcc/collect2.c b/gcc/collect2.c index 4757b9fb688..83ed200da4f 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 1540c743472..e9b594f8cb0 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 008fa90cf78..4ed35f2a242 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 4e8eb5ebb92..bf4c1a71147 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 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