Commit 5897739e by Jeffrey Oldham Committed by Jeffrey D. Oldham

*** empty log message ***

From-SVN: r41645
parent 994682b9
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> 2001-04-27 Andreas Jaeger <aj@suse.de>
Richard Henderson <rth@redhat.com> Richard Henderson <rth@redhat.com>
......
...@@ -292,6 +292,9 @@ static void scan_prog_file PARAMS ((const char *, enum pass)); ...@@ -292,6 +292,9 @@ static void scan_prog_file PARAMS ((const char *, enum pass));
#ifdef SCAN_LIBRARIES #ifdef SCAN_LIBRARIES
static void scan_libraries PARAMS ((const char *)); static void scan_libraries PARAMS ((const char *));
#endif #endif
#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
static int is_in_args PARAMS ((const char *, const char **, const char **));
#endif
#ifdef COLLECT_EXPORT_LIST #ifdef COLLECT_EXPORT_LIST
static int is_in_list PARAMS ((const char *, struct id *)); static int is_in_list PARAMS ((const char *, struct id *));
static void write_aix_file PARAMS ((FILE *, struct id *)); static void write_aix_file PARAMS ((FILE *, struct id *));
...@@ -1177,6 +1180,13 @@ main (argc, argv) ...@@ -1177,6 +1180,13 @@ main (argc, argv)
case 'L': case 'L':
add_prefix (&cmdline_lib_dirs, arg+2); add_prefix (&cmdline_lib_dirs, arg+2);
break; 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 #endif
case 'o': case 'o':
...@@ -1756,6 +1766,24 @@ write_list (stream, prefix, list) ...@@ -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 #ifdef COLLECT_EXPORT_LIST
/* This function is really used only on AIX, but may be useful. */ /* This function is really used only on AIX, but may be useful. */
static int static int
......
...@@ -204,6 +204,10 @@ Boston, MA 02111-1307, USA. */ ...@@ -204,6 +204,10 @@ Boston, MA 02111-1307, USA. */
#undef SUPPORTS_INIT_PRIORITY #undef SUPPORTS_INIT_PRIORITY
#define SUPPORTS_INIT_PRIORITY 0 #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 POPSECTION_ASM_OP "\t.popsection"
#define DEBUG_INFO_SECTION ".debug_info,0x7000001e,0,0,1" #define DEBUG_INFO_SECTION ".debug_info,0x7000001e,0,0,1"
......
...@@ -170,6 +170,13 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0) ...@@ -170,6 +170,13 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
#define SUPPORTS_INIT_PRIORITY 1 #define SUPPORTS_INIT_PRIORITY 1
#endif /* SUPPORTS_INIT_PRIORITY */ #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 /* If we have a definition of INCOMING_RETURN_ADDR_RTX, assume that
the rest of the DWARF 2 frame unwind support is also provided. */ the rest of the DWARF 2 frame unwind support is also provided. */
#if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX) #if !defined (DWARF2_UNWIND_INFO) && defined (INCOMING_RETURN_ADDR_RTX)
......
...@@ -325,6 +325,12 @@ define this macro only if you need to completely redefine the command ...@@ -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 line for invoking the linker and there is no other way to accomplish
the effect you need. 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 @findex MULTILIB_DEFAULTS
@item MULTILIB_DEFAULTS @item MULTILIB_DEFAULTS
Define this macro as a C expression for the initializer of an array of Define this macro as a C expression for the initializer of an array of
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment