Home | History | Annotate | Line # | Download | only in ld
ldmain.c revision 1.3.8.1
      1 /* Main program of GNU linker.
      2    Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
      3    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
      4    Free Software Foundation, Inc.
      5    Written by Steve Chamberlain steve (at) cygnus.com
      6 
      7    This file is part of the GNU Binutils.
      8 
      9    This program is free software; you can redistribute it and/or modify
     10    it under the terms of the GNU General Public License as published by
     11    the Free Software Foundation; either version 3 of the License, or
     12    (at your option) any later version.
     13 
     14    This program is distributed in the hope that it will be useful,
     15    but WITHOUT ANY WARRANTY; without even the implied warranty of
     16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17    GNU General Public License for more details.
     18 
     19    You should have received a copy of the GNU General Public License
     20    along with this program; if not, write to the Free Software
     21    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     22    MA 02110-1301, USA.  */
     23 
     24 #include "sysdep.h"
     25 #include "bfd.h"
     26 #include "safe-ctype.h"
     27 #include "libiberty.h"
     28 #include "progress.h"
     29 #include "bfdlink.h"
     30 #include "filenames.h"
     31 
     32 #include "ld.h"
     33 #include "ldmain.h"
     34 #include "ldmisc.h"
     35 #include "ldwrite.h"
     36 #include "ldexp.h"
     37 #include "ldlang.h"
     38 #include <ldgram.h>
     39 #include "ldlex.h"
     40 #include "ldfile.h"
     41 #include "ldemul.h"
     42 #include "ldctor.h"
     43 #ifdef ENABLE_PLUGINS
     44 #include "plugin.h"
     45 #include "plugin-api.h"
     46 #include "libbfd.h"
     47 #endif /* ENABLE_PLUGINS */
     48 
     49 /* Somewhere above, sys/stat.h got included.  */
     50 #if !defined(S_ISDIR) && defined(S_IFDIR)
     51 #define	S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
     52 #endif
     53 
     54 #include <string.h>
     55 
     56 #ifdef HAVE_SBRK
     57 #if !HAVE_DECL_SBRK
     58 extern void *sbrk ();
     59 #endif
     60 #endif
     61 
     62 #ifndef TARGET_SYSTEM_ROOT
     63 #define TARGET_SYSTEM_ROOT ""
     64 #endif
     65 
     66 /* EXPORTS */
     67 
     68 FILE *saved_script_handle = NULL;
     69 FILE *previous_script_handle = NULL;
     70 bfd_boolean force_make_executable = FALSE;
     71 
     72 char *default_target;
     73 const char *output_filename = "a.out";
     74 
     75 /* Name this program was invoked by.  */
     76 char *program_name;
     77 
     78 /* The prefix for system library directories.  */
     79 const char *ld_sysroot;
     80 
     81 /* The canonical representation of ld_sysroot.  */
     82 char * ld_canon_sysroot;
     83 int ld_canon_sysroot_len;
     84 
     85 /* Set by -G argument, for MIPS ECOFF target.  */
     86 int g_switch_value = 8;
     87 
     88 /* Nonzero means print names of input files as processed.  */
     89 bfd_boolean trace_files;
     90 
     91 /* Nonzero means report actions taken by the linker, and describe the linker script in use.  */
     92 bfd_boolean verbose;
     93 
     94 /* Nonzero means version number was printed, so exit successfully
     95    instead of complaining if no input files are given.  */
     96 bfd_boolean version_printed;
     97 
     98 /* TRUE if we should demangle symbol names.  */
     99 bfd_boolean demangling;
    100 
    101 args_type command_line;
    102 
    103 ld_config_type config;
    104 
    105 sort_type sort_section;
    106 
    107 static const char *get_sysroot
    108   (int, char **);
    109 static char *get_emulation
    110   (int, char **);
    111 static bfd_boolean add_archive_element
    112   (struct bfd_link_info *, bfd *, const char *, bfd **);
    113 static bfd_boolean multiple_definition
    114   (struct bfd_link_info *, struct bfd_link_hash_entry *,
    115    bfd *, asection *, bfd_vma);
    116 static bfd_boolean multiple_common
    117   (struct bfd_link_info *, struct bfd_link_hash_entry *,
    118    bfd *, enum bfd_link_hash_type, bfd_vma);
    119 static bfd_boolean add_to_set
    120   (struct bfd_link_info *, struct bfd_link_hash_entry *,
    121    bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
    122 static bfd_boolean constructor_callback
    123   (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
    124    asection *, bfd_vma);
    125 static bfd_boolean warning_callback
    126   (struct bfd_link_info *, const char *, const char *, bfd *,
    127    asection *, bfd_vma);
    128 static void warning_find_reloc
    129   (bfd *, asection *, void *);
    130 static bfd_boolean undefined_symbol
    131   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
    132    bfd_boolean);
    133 static bfd_boolean reloc_overflow
    134   (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
    135    const char *, bfd_vma, bfd *, asection *, bfd_vma);
    136 static bfd_boolean reloc_dangerous
    137   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
    138 static bfd_boolean unattached_reloc
    139   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
    140 static bfd_boolean notice
    141   (struct bfd_link_info *, struct bfd_link_hash_entry *,
    142    bfd *, asection *, bfd_vma, flagword, const char *);
    143 
    144 static struct bfd_link_callbacks link_callbacks =
    145 {
    146   add_archive_element,
    147   multiple_definition,
    148   multiple_common,
    149   add_to_set,
    150   constructor_callback,
    151   warning_callback,
    152   undefined_symbol,
    153   reloc_overflow,
    154   reloc_dangerous,
    155   unattached_reloc,
    156   notice,
    157   einfo,
    158   info_msg,
    159   minfo,
    160   ldlang_override_segment_assignment
    161 };
    162 
    163 static bfd_assert_handler_type default_bfd_assert_handler;
    164 
    165 struct bfd_link_info link_info;
    166 
    167 static void
    169 ld_cleanup (void)
    170 {
    171   bfd_cache_close_all ();
    172 #ifdef ENABLE_PLUGINS
    173   plugin_call_cleanup ();
    174 #endif
    175   if (output_filename && delete_output_file_on_failure)
    176     unlink_if_ordinary (output_filename);
    177 }
    178 
    179 /* If there's a BFD assertion, we'll notice and exit with an error
    180    unless otherwise instructed.  */
    181 
    182 static void
    183 ld_bfd_assert_handler (const char *fmt, const char *bfdver,
    184 		       const char *file, int line)
    185 {
    186   (*default_bfd_assert_handler) (fmt, bfdver, file, line);
    187   config.make_executable = FALSE;
    188 }
    189 
    190 int
    191 main (int argc, char **argv)
    192 {
    193   char *emulation;
    194   long start_time = get_run_time ();
    195 
    196 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
    197   setlocale (LC_MESSAGES, "");
    198 #endif
    199 #if defined (HAVE_SETLOCALE)
    200   setlocale (LC_CTYPE, "");
    201 #endif
    202   bindtextdomain (PACKAGE, LOCALEDIR);
    203   textdomain (PACKAGE);
    204 
    205   program_name = argv[0];
    206   xmalloc_set_program_name (program_name);
    207 
    208   START_PROGRESS (program_name, 0);
    209 
    210   expandargv (&argc, &argv);
    211 
    212   bfd_init ();
    213 
    214   bfd_set_error_program_name (program_name);
    215 
    216   /* We want to notice and fail on those nasty BFD assertions which are
    217      likely to signal incorrect output being generated but otherwise may
    218      leave no trace.  */
    219   default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler);
    220 
    221   xatexit (ld_cleanup);
    222 
    223   /* Set up the sysroot directory.  */
    224   ld_sysroot = get_sysroot (argc, argv);
    225   if (*ld_sysroot)
    226     {
    227       if (*TARGET_SYSTEM_ROOT == 0)
    228 	{
    229 	  einfo ("%P%F: this linker was not configured to use sysroots\n");
    230 	  ld_sysroot = "";
    231 	}
    232       else
    233 	ld_canon_sysroot = lrealpath (ld_sysroot);
    234     }
    235   if (ld_canon_sysroot)
    236     ld_canon_sysroot_len = strlen (ld_canon_sysroot);
    237   else
    238     ld_canon_sysroot_len = -1;
    239 
    240   /* Set the default BFD target based on the configured target.  Doing
    241      this permits the linker to be configured for a particular target,
    242      and linked against a shared BFD library which was configured for
    243      a different target.  The macro TARGET is defined by Makefile.  */
    244   if (! bfd_set_default_target (TARGET))
    245     {
    246       einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
    247       xexit (1);
    248     }
    249 
    250 #if YYDEBUG
    251   {
    252     extern int yydebug;
    253     yydebug = 1;
    254   }
    255 #endif
    256 
    257   config.build_constructors = TRUE;
    258   config.rpath_separator = ':';
    259   config.split_by_reloc = (unsigned) -1;
    260   config.split_by_file = (bfd_size_type) -1;
    261   config.make_executable = TRUE;
    262   config.magic_demand_paged = TRUE;
    263   config.text_read_only = TRUE;
    264 
    265   command_line.warn_mismatch = TRUE;
    266   command_line.warn_search_mismatch = TRUE;
    267   command_line.check_section_addresses = -1;
    268   command_line.disable_target_specific_optimizations = -1;
    269 
    270   /* We initialize DEMANGLING based on the environment variable
    271      COLLECT_NO_DEMANGLE.  The gcc collect2 program will demangle the
    272      output of the linker, unless COLLECT_NO_DEMANGLE is set in the
    273      environment.  Acting the same way here lets us provide the same
    274      interface by default.  */
    275   demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
    276 
    277   link_info.allow_undefined_version = TRUE;
    278   link_info.keep_memory = TRUE;
    279   link_info.combreloc = TRUE;
    280   link_info.strip_discarded = TRUE;
    281   link_info.emit_hash = TRUE;
    282   link_info.callbacks = &link_callbacks;
    283   link_info.input_bfds_tail = &link_info.input_bfds;
    284   /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
    285      and _fini symbols.  We are compatible.  */
    286   link_info.init_function = "_init";
    287   link_info.fini_function = "_fini";
    288   link_info.relax_pass = 1;
    289   link_info.pei386_auto_import = -1;
    290   link_info.spare_dynamic_tags = 5;
    291   link_info.path_separator = ':';
    292 
    293   ldfile_add_arch ("");
    294   emulation = get_emulation (argc, argv);
    295   ldemul_choose_mode (emulation);
    296   default_target = ldemul_choose_target (argc, argv);
    297   config.maxpagesize = bfd_emul_get_maxpagesize (default_target);
    298   config.commonpagesize = bfd_emul_get_commonpagesize (default_target);
    299   lang_init ();
    300   ldemul_before_parse ();
    301   lang_has_input_file = FALSE;
    302   parse_args (argc, argv);
    303 
    304   if (config.hash_table_size != 0)
    305     bfd_hash_set_default_size (config.hash_table_size);
    306 
    307 #ifdef ENABLE_PLUGINS
    308   /* Now all the plugin arguments have been gathered, we can load them.  */
    309   plugin_load_plugins ();
    310 #endif /* ENABLE_PLUGINS */
    311 
    312   ldemul_set_symbols ();
    313 
    314   /* If we have not already opened and parsed a linker script,
    315      try the default script from command line first.  */
    316   if (saved_script_handle == NULL
    317       && command_line.default_script != NULL)
    318     {
    319       ldfile_open_command_file (command_line.default_script);
    320       parser_input = input_script;
    321       yyparse ();
    322     }
    323 
    324   /* If we have not already opened and parsed a linker script
    325      read the emulation's appropriate default script.  */
    326   if (saved_script_handle == NULL)
    327     {
    328       int isfile;
    329       char *s = ldemul_get_script (&isfile);
    330 
    331       if (isfile)
    332 	ldfile_open_default_command_file (s);
    333       else
    334 	{
    335 	  lex_string = s;
    336 	  lex_redirect (s, _("built in linker script"), 1);
    337 	}
    338       parser_input = input_script;
    339       yyparse ();
    340       lex_string = NULL;
    341     }
    342 
    343   if (verbose)
    344     {
    345       if (saved_script_handle)
    346 	info_msg (_("using external linker script:"));
    347       else
    348 	info_msg (_("using internal linker script:"));
    349       info_msg ("\n==================================================\n");
    350 
    351       if (saved_script_handle)
    352 	{
    353 	  static const int ld_bufsz = 8193;
    354 	  size_t n;
    355 	  char *buf = (char *) xmalloc (ld_bufsz);
    356 
    357 	  rewind (saved_script_handle);
    358 	  while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
    359 	    {
    360 	      buf[n] = 0;
    361 	      info_msg (buf);
    362 	    }
    363 	  rewind (saved_script_handle);
    364 	  free (buf);
    365 	}
    366       else
    367 	{
    368 	  int isfile;
    369 
    370 	  info_msg (ldemul_get_script (&isfile));
    371 	}
    372 
    373       info_msg ("\n==================================================\n");
    374     }
    375 
    376   if (command_line.print_output_format)
    377     info_msg ("%s\n", lang_get_output_target ());
    378 
    379   lang_final ();
    380 
    381   if (!lang_has_input_file)
    382     {
    383       if (version_printed || command_line.print_output_format)
    384 	xexit (0);
    385       einfo (_("%P%F: no input files\n"));
    386     }
    387 
    388   if (trace_files)
    389     info_msg (_("%P: mode %s\n"), emulation);
    390 
    391   ldemul_after_parse ();
    392 
    393   if (config.map_filename)
    394     {
    395       if (strcmp (config.map_filename, "-") == 0)
    396 	{
    397 	  config.map_file = stdout;
    398 	}
    399       else
    400 	{
    401 	  config.map_file = fopen (config.map_filename, FOPEN_WT);
    402 	  if (config.map_file == (FILE *) NULL)
    403 	    {
    404 	      bfd_set_error (bfd_error_system_call);
    405 	      einfo (_("%P%F: cannot open map file %s: %E\n"),
    406 		     config.map_filename);
    407 	    }
    408 	}
    409     }
    410 
    411   lang_process ();
    412 
    413   /* Print error messages for any missing symbols, for any warning
    414      symbols, and possibly multiple definitions.  */
    415   if (link_info.relocatable)
    416     link_info.output_bfd->flags &= ~EXEC_P;
    417   else
    418     link_info.output_bfd->flags |= EXEC_P;
    419 
    420   ldwrite ();
    421 
    422   if (config.map_file != NULL)
    423     lang_map ();
    424   if (command_line.cref)
    425     output_cref (config.map_file != NULL ? config.map_file : stdout);
    426   if (nocrossref_list != NULL)
    427     check_nocrossrefs ();
    428 
    429   lang_finish ();
    430 
    431   /* Even if we're producing relocatable output, some non-fatal errors should
    432      be reported in the exit status.  (What non-fatal errors, if any, do we
    433      want to ignore for relocatable output?)  */
    434   if (!config.make_executable && !force_make_executable)
    435     {
    436       if (trace_files)
    437 	einfo (_("%P: link errors found, deleting executable `%s'\n"),
    438 	       output_filename);
    439 
    440       /* The file will be removed by ld_cleanup.  */
    441       xexit (1);
    442     }
    443   else
    444     {
    445       if (! bfd_close (link_info.output_bfd))
    446 	einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd);
    447 
    448       /* If the --force-exe-suffix is enabled, and we're making an
    449 	 executable file and it doesn't end in .exe, copy it to one
    450 	 which does.  */
    451       if (! link_info.relocatable && command_line.force_exe_suffix)
    452 	{
    453 	  int len = strlen (output_filename);
    454 
    455 	  if (len < 4
    456 	      || (strcasecmp (output_filename + len - 4, ".exe") != 0
    457 		  && strcasecmp (output_filename + len - 4, ".dll") != 0))
    458 	    {
    459 	      FILE *src;
    460 	      FILE *dst;
    461 	      const int bsize = 4096;
    462 	      char *buf = (char *) xmalloc (bsize);
    463 	      int l;
    464 	      char *dst_name = (char *) xmalloc (len + 5);
    465 
    466 	      strcpy (dst_name, output_filename);
    467 	      strcat (dst_name, ".exe");
    468 	      src = fopen (output_filename, FOPEN_RB);
    469 	      dst = fopen (dst_name, FOPEN_WB);
    470 
    471 	      if (!src)
    472 		einfo (_("%X%P: unable to open for source of copy `%s'\n"),
    473 		       output_filename);
    474 	      if (!dst)
    475 		einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
    476 		       dst_name);
    477 	      while ((l = fread (buf, 1, bsize, src)) > 0)
    478 		{
    479 		  int done = fwrite (buf, 1, l, dst);
    480 
    481 		  if (done != l)
    482 		    einfo (_("%P: Error writing file `%s'\n"), dst_name);
    483 		}
    484 
    485 	      fclose (src);
    486 	      if (fclose (dst) == EOF)
    487 		einfo (_("%P: Error closing file `%s'\n"), dst_name);
    488 	      free (dst_name);
    489 	      free (buf);
    490 	    }
    491 	}
    492     }
    493 
    494   END_PROGRESS (program_name);
    495 
    496   if (config.stats)
    497     {
    498 #ifdef HAVE_SBRK
    499       char *lim = (char *) sbrk (0);
    500 #endif
    501       long run_time = get_run_time () - start_time;
    502 
    503       fflush (stdout);
    504       fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
    505 	       program_name, run_time / 1000000, run_time % 1000000);
    506 #ifdef HAVE_SBRK
    507       fprintf (stderr, _("%s: data size %ld\n"), program_name,
    508 	       (long) (lim - (char *) &environ));
    509 #endif
    510       fflush (stderr);
    511     }
    512 
    513   /* Prevent ld_cleanup from doing anything, after a successful link.  */
    514   output_filename = NULL;
    515 
    516   xexit (0);
    517   return 0;
    518 }
    519 
    520 /* If the configured sysroot is relocatable, try relocating it based on
    521    default prefix FROM.  Return the relocated directory if it exists,
    522    otherwise return null.  */
    523 
    524 static char *
    525 get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
    526 {
    527 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
    528   char *path;
    529   struct stat s;
    530 
    531   path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
    532   if (path)
    533     {
    534       if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
    535 	return path;
    536       free (path);
    537     }
    538 #endif
    539   return 0;
    540 }
    541 
    542 /* Return the sysroot directory.  Return "" if no sysroot is being used.  */
    543 
    544 static const char *
    545 get_sysroot (int argc, char **argv)
    546 {
    547   int i;
    548   const char *path;
    549 
    550   for (i = 1; i < argc; i++)
    551     if (CONST_STRNEQ (argv[i], "--sysroot="))
    552       return argv[i] + strlen ("--sysroot=");
    553 
    554   path = get_relative_sysroot (BINDIR);
    555   if (path)
    556     return path;
    557 
    558   path = get_relative_sysroot (TOOLBINDIR);
    559   if (path)
    560     return path;
    561 
    562   return TARGET_SYSTEM_ROOT;
    563 }
    564 
    565 /* We need to find any explicitly given emulation in order to initialize the
    566    state that's needed by the lex&yacc argument parser (parse_args).  */
    567 
    568 static char *
    569 get_emulation (int argc, char **argv)
    570 {
    571   char *emulation;
    572   int i;
    573 
    574   emulation = getenv (EMULATION_ENVIRON);
    575   if (emulation == NULL)
    576     emulation = DEFAULT_EMULATION;
    577 
    578   for (i = 1; i < argc; i++)
    579     {
    580       if (CONST_STRNEQ (argv[i], "-m"))
    581 	{
    582 	  if (argv[i][2] == '\0')
    583 	    {
    584 	      /* -m EMUL */
    585 	      if (i < argc - 1)
    586 		{
    587 		  emulation = argv[i + 1];
    588 		  i++;
    589 		}
    590 	      else
    591 		einfo (_("%P%F: missing argument to -m\n"));
    592 	    }
    593 	  else if (strcmp (argv[i], "-mips1") == 0
    594 		   || strcmp (argv[i], "-mips2") == 0
    595 		   || strcmp (argv[i], "-mips3") == 0
    596 		   || strcmp (argv[i], "-mips4") == 0
    597 		   || strcmp (argv[i], "-mips5") == 0
    598 		   || strcmp (argv[i], "-mips32") == 0
    599 		   || strcmp (argv[i], "-mips32r2") == 0
    600 		   || strcmp (argv[i], "-mips64") == 0
    601 		   || strcmp (argv[i], "-mips64r2") == 0)
    602 	    {
    603 	      /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
    604 		 passed to the linker by some MIPS compilers.  They
    605 		 generally tell the linker to use a slightly different
    606 		 library path.  Perhaps someday these should be
    607 		 implemented as emulations; until then, we just ignore
    608 		 the arguments and hope that nobody ever creates
    609 		 emulations named ips1, ips2 or ips3.  */
    610 	    }
    611 	  else if (strcmp (argv[i], "-m486") == 0)
    612 	    {
    613 	      /* FIXME: The argument -m486 is passed to the linker on
    614 		 some Linux systems.  Hope that nobody creates an
    615 		 emulation named 486.  */
    616 	    }
    617 	  else
    618 	    {
    619 	      /* -mEMUL */
    620 	      emulation = &argv[i][2];
    621 	    }
    622 	}
    623     }
    624 
    625   return emulation;
    626 }
    627 
    628 void
    629 add_ysym (const char *name)
    630 {
    631   if (link_info.notice_hash == NULL)
    632     {
    633       link_info.notice_hash =
    634           (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
    635       if (!bfd_hash_table_init_n (link_info.notice_hash,
    636 				  bfd_hash_newfunc,
    637 				  sizeof (struct bfd_hash_entry),
    638 				  61))
    639 	einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
    640     }
    641 
    642   if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
    643     einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
    644 }
    645 
    646 void
    647 add_ignoresym (const char *name)
    648 {
    649   if (link_info.ignore_hash == NULL)
    650     {
    651       link_info.ignore_hash = xmalloc (sizeof (struct bfd_hash_table));
    652       if (! bfd_hash_table_init_n (link_info.ignore_hash,
    653 				   bfd_hash_newfunc,
    654 				   sizeof (struct bfd_hash_entry),
    655 				   61))
    656 	einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
    657     }
    658 
    659   if (bfd_hash_lookup (link_info.ignore_hash, name, TRUE, TRUE) == NULL)
    660     einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
    661 }
    662 
    663 /* Record a symbol to be wrapped, from the --wrap option.  */
    664 
    665 void
    666 add_wrap (const char *name)
    667 {
    668   if (link_info.wrap_hash == NULL)
    669     {
    670       link_info.wrap_hash =
    671           (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
    672       if (!bfd_hash_table_init_n (link_info.wrap_hash,
    673 				  bfd_hash_newfunc,
    674 				  sizeof (struct bfd_hash_entry),
    675 				  61))
    676 	einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
    677     }
    678 
    679   if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
    680     einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
    681 }
    682 
    683 /* Handle the -retain-symbols-file option.  */
    684 
    685 void
    686 add_keepsyms_file (const char *filename)
    687 {
    688   FILE *file;
    689   char *buf;
    690   size_t bufsize;
    691   int c;
    692 
    693   if (link_info.strip == strip_some)
    694     einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
    695 
    696   file = fopen (filename, "r");
    697   if (file == NULL)
    698     {
    699       bfd_set_error (bfd_error_system_call);
    700       einfo ("%X%P: %s: %E\n", filename);
    701       return;
    702     }
    703 
    704   link_info.keep_hash = (struct bfd_hash_table *)
    705       xmalloc (sizeof (struct bfd_hash_table));
    706   if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
    707 			    sizeof (struct bfd_hash_entry)))
    708     einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
    709 
    710   bufsize = 100;
    711   buf = (char *) xmalloc (bufsize);
    712 
    713   c = getc (file);
    714   while (c != EOF)
    715     {
    716       while (ISSPACE (c))
    717 	c = getc (file);
    718 
    719       if (c != EOF)
    720 	{
    721 	  size_t len = 0;
    722 
    723 	  while (! ISSPACE (c) && c != EOF)
    724 	    {
    725 	      buf[len] = c;
    726 	      ++len;
    727 	      if (len >= bufsize)
    728 		{
    729 		  bufsize *= 2;
    730 		  buf = (char *) xrealloc (buf, bufsize);
    731 		}
    732 	      c = getc (file);
    733 	    }
    734 
    735 	  buf[len] = '\0';
    736 
    737 	  if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
    738 	    einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
    739 	}
    740     }
    741 
    742   if (link_info.strip != strip_none)
    743     einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
    744 
    745   free (buf);
    746   link_info.strip = strip_some;
    747 }
    748 
    749 /* Callbacks from the BFD linker routines.  */
    751 
    752 /* This is called when BFD has decided to include an archive member in
    753    a link.  */
    754 
    755 static bfd_boolean
    756 add_archive_element (struct bfd_link_info *info,
    757 		     bfd *abfd,
    758 		     const char *name,
    759 		     bfd **subsbfd ATTRIBUTE_UNUSED)
    760 {
    761   lang_input_statement_type *input;
    762   lang_input_statement_type orig_input;
    763 
    764   input = (lang_input_statement_type *)
    765       xcalloc (1, sizeof (lang_input_statement_type));
    766   input->filename = abfd->filename;
    767   input->local_sym_name = abfd->filename;
    768   input->the_bfd = abfd;
    769 
    770   /* Save the original data for trace files/tries below, as plugins
    771      (if enabled) may possibly alter it to point to a replacement
    772      BFD, but we still want to output the original BFD filename.  */
    773   orig_input = *input;
    774 #ifdef ENABLE_PLUGINS
    775   if (plugin_active_plugins_p () && !no_more_claiming)
    776     {
    777       /* We must offer this archive member to the plugins to claim.  */
    778       const char *filename = (bfd_my_archive (abfd) != NULL
    779 			      ? bfd_my_archive (abfd)->filename : abfd->filename);
    780       int fd = open (filename, O_RDONLY | O_BINARY);
    781       if (fd >= 0)
    782 	{
    783 	  struct ld_plugin_input_file file;
    784 
    785 	  /* Offset and filesize must refer to the individual archive
    786 	     member, not the whole file, and must exclude the header.
    787 	     Fortunately for us, that is how the data is stored in the
    788 	     origin field of the bfd and in the arelt_data.  */
    789 	  file.name = filename;
    790 	  file.offset = abfd->origin;
    791 	  file.filesize = arelt_size (abfd);
    792 	  file.fd = fd;
    793 	  plugin_maybe_claim (&file, input);
    794 	  if (input->flags.claimed)
    795 	    {
    796 	      input->flags.claim_archive = TRUE;
    797 	      *subsbfd = input->the_bfd;
    798 	    }
    799 	}
    800     }
    801 #endif /* ENABLE_PLUGINS */
    802 
    803   ldlang_add_file (input);
    804 
    805   if (config.map_file != NULL)
    806     {
    807       static bfd_boolean header_printed;
    808       struct bfd_link_hash_entry *h;
    809       bfd *from;
    810       int len;
    811 
    812       h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
    813 
    814       if (h == NULL)
    815 	from = NULL;
    816       else
    817 	{
    818 	  switch (h->type)
    819 	    {
    820 	    default:
    821 	      from = NULL;
    822 	      break;
    823 
    824 	    case bfd_link_hash_defined:
    825 	    case bfd_link_hash_defweak:
    826 	      from = h->u.def.section->owner;
    827 	      break;
    828 
    829 	    case bfd_link_hash_undefined:
    830 	    case bfd_link_hash_undefweak:
    831 	      from = h->u.undef.abfd;
    832 	      break;
    833 
    834 	    case bfd_link_hash_common:
    835 	      from = h->u.c.p->section->owner;
    836 	      break;
    837 	    }
    838 	}
    839 
    840       if (! header_printed)
    841 	{
    842 	  char buf[100];
    843 
    844 	  sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
    845 	  minfo ("%s", buf);
    846 	  header_printed = TRUE;
    847 	}
    848 
    849       if (bfd_my_archive (abfd) == NULL)
    850 	{
    851 	  minfo ("%s", bfd_get_filename (abfd));
    852 	  len = strlen (bfd_get_filename (abfd));
    853 	}
    854       else
    855 	{
    856 	  minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
    857 		 bfd_get_filename (abfd));
    858 	  len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
    859 		 + strlen (bfd_get_filename (abfd))
    860 		 + 2);
    861 	}
    862 
    863       if (len >= 29)
    864 	{
    865 	  print_nl ();
    866 	  len = 0;
    867 	}
    868       while (len < 30)
    869 	{
    870 	  print_space ();
    871 	  ++len;
    872 	}
    873 
    874       if (from != NULL)
    875 	minfo ("%B ", from);
    876       if (h != NULL)
    877 	minfo ("(%T)\n", h->root.string);
    878       else
    879 	minfo ("(%s)\n", name);
    880     }
    881 
    882   if (trace_files || verbose)
    883     info_msg ("%I\n", &orig_input);
    884   return TRUE;
    885 }
    886 
    887 /* This is called when BFD has discovered a symbol which is defined
    888    multiple times.  */
    889 
    890 static bfd_boolean
    891 multiple_definition (struct bfd_link_info *info,
    892 		     struct bfd_link_hash_entry *h,
    893 		     bfd *nbfd,
    894 		     asection *nsec,
    895 		     bfd_vma nval)
    896 {
    897   const char *name;
    898   bfd *obfd;
    899   asection *osec;
    900   bfd_vma oval;
    901 
    902   if (info->allow_multiple_definition)
    903     return TRUE;
    904 
    905   switch (h->type)
    906     {
    907     case bfd_link_hash_defined:
    908       osec = h->u.def.section;
    909       oval = h->u.def.value;
    910       obfd = h->u.def.section->owner;
    911       break;
    912     case bfd_link_hash_indirect:
    913       osec = bfd_ind_section_ptr;
    914       oval = 0;
    915       obfd = NULL;
    916       break;
    917     default:
    918       abort ();
    919     }
    920 
    921   /* Ignore a redefinition of an absolute symbol to the
    922      same value; it's harmless.  */
    923   if (h->type == bfd_link_hash_defined
    924       && bfd_is_abs_section (osec)
    925       && bfd_is_abs_section (nsec)
    926       && nval == oval)
    927     return TRUE;
    928 
    929   /* If either section has the output_section field set to
    930      bfd_abs_section_ptr, it means that the section is being
    931      discarded, and this is not really a multiple definition at all.
    932      FIXME: It would be cleaner to somehow ignore symbols defined in
    933      sections which are being discarded.  */
    934   if ((osec->output_section != NULL
    935        && ! bfd_is_abs_section (osec)
    936        && bfd_is_abs_section (osec->output_section))
    937       || (nsec->output_section != NULL
    938 	  && ! bfd_is_abs_section (nsec)
    939 	  && bfd_is_abs_section (nsec->output_section)))
    940     return TRUE;
    941 
    942   name = h->root.string;
    943   if (nbfd == NULL)
    944     {
    945       nbfd = obfd;
    946       nsec = osec;
    947       nval = oval;
    948       obfd = NULL;
    949     }
    950   einfo (_("%X%C: multiple definition of `%T'\n"),
    951 	 nbfd, nsec, nval, name);
    952   if (obfd != NULL)
    953     einfo (_("%D: first defined here\n"), obfd, osec, oval);
    954 
    955   if (RELAXATION_ENABLED)
    956     {
    957       einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
    958       command_line.disable_target_specific_optimizations = -1;
    959     }
    960 
    961   return TRUE;
    962 }
    963 
    964 /* This is called when there is a definition of a common symbol, or
    965    when a common symbol is found for a symbol that is already defined,
    966    or when two common symbols are found.  We only do something if
    967    -warn-common was used.  */
    968 
    969 static bfd_boolean
    970 multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
    971 		 struct bfd_link_hash_entry *h,
    972 		 bfd *nbfd,
    973 		 enum bfd_link_hash_type ntype,
    974 		 bfd_vma nsize)
    975 {
    976   const char *name;
    977   bfd *obfd;
    978   enum bfd_link_hash_type otype;
    979   bfd_vma osize;
    980 
    981   if (!config.warn_common)
    982     return TRUE;
    983 
    984   name = h->root.string;
    985   otype = h->type;
    986   if (otype == bfd_link_hash_common)
    987     {
    988       obfd = h->u.c.p->section->owner;
    989       osize = h->u.c.size;
    990     }
    991   else if (otype == bfd_link_hash_defined
    992 	   || otype == bfd_link_hash_defweak)
    993     {
    994       obfd = h->u.def.section->owner;
    995       osize = 0;
    996     }
    997   else
    998     {
    999       /* FIXME: It would nice if we could report the BFD which defined
   1000 	 an indirect symbol, but we don't have anywhere to store the
   1001 	 information.  */
   1002       obfd = NULL;
   1003       osize = 0;
   1004     }
   1005 
   1006   if (ntype == bfd_link_hash_defined
   1007       || ntype == bfd_link_hash_defweak
   1008       || ntype == bfd_link_hash_indirect)
   1009     {
   1010       ASSERT (otype == bfd_link_hash_common);
   1011       einfo (_("%B: warning: definition of `%T' overriding common\n"),
   1012 	     nbfd, name);
   1013       if (obfd != NULL)
   1014 	einfo (_("%B: warning: common is here\n"), obfd);
   1015     }
   1016   else if (otype == bfd_link_hash_defined
   1017 	   || otype == bfd_link_hash_defweak
   1018 	   || otype == bfd_link_hash_indirect)
   1019     {
   1020       ASSERT (ntype == bfd_link_hash_common);
   1021       einfo (_("%B: warning: common of `%T' overridden by definition\n"),
   1022 	     nbfd, name);
   1023       if (obfd != NULL)
   1024 	einfo (_("%B: warning: defined here\n"), obfd);
   1025     }
   1026   else
   1027     {
   1028       ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
   1029       if (osize > nsize)
   1030 	{
   1031 	  einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
   1032 		 nbfd, name);
   1033 	  if (obfd != NULL)
   1034 	    einfo (_("%B: warning: larger common is here\n"), obfd);
   1035 	}
   1036       else if (nsize > osize)
   1037 	{
   1038 	  einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
   1039 		 nbfd, name);
   1040 	  if (obfd != NULL)
   1041 	    einfo (_("%B: warning: smaller common is here\n"), obfd);
   1042 	}
   1043       else
   1044 	{
   1045 	  einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
   1046 	  if (obfd != NULL)
   1047 	    einfo (_("%B: warning: previous common is here\n"), obfd);
   1048 	}
   1049     }
   1050 
   1051   return TRUE;
   1052 }
   1053 
   1054 /* This is called when BFD has discovered a set element.  H is the
   1055    entry in the linker hash table for the set.  SECTION and VALUE
   1056    represent a value which should be added to the set.  */
   1057 
   1058 static bfd_boolean
   1059 add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1060 	    struct bfd_link_hash_entry *h,
   1061 	    bfd_reloc_code_real_type reloc,
   1062 	    bfd *abfd,
   1063 	    asection *section,
   1064 	    bfd_vma value)
   1065 {
   1066   if (config.warn_constructors)
   1067     einfo (_("%P: warning: global constructor %s used\n"),
   1068 	   h->root.string);
   1069 
   1070   if (! config.build_constructors)
   1071     return TRUE;
   1072 
   1073   ldctor_add_set_entry (h, reloc, NULL, section, value);
   1074 
   1075   if (h->type == bfd_link_hash_new)
   1076     {
   1077       h->type = bfd_link_hash_undefined;
   1078       h->u.undef.abfd = abfd;
   1079       /* We don't call bfd_link_add_undef to add this to the list of
   1080 	 undefined symbols because we are going to define it
   1081 	 ourselves.  */
   1082     }
   1083 
   1084   return TRUE;
   1085 }
   1086 
   1087 /* This is called when BFD has discovered a constructor.  This is only
   1088    called for some object file formats--those which do not handle
   1089    constructors in some more clever fashion.  This is similar to
   1090    adding an element to a set, but less general.  */
   1091 
   1092 static bfd_boolean
   1093 constructor_callback (struct bfd_link_info *info,
   1094 		      bfd_boolean constructor,
   1095 		      const char *name,
   1096 		      bfd *abfd,
   1097 		      asection *section,
   1098 		      bfd_vma value)
   1099 {
   1100   char *s;
   1101   struct bfd_link_hash_entry *h;
   1102   char set_name[1 + sizeof "__CTOR_LIST__"];
   1103 
   1104   if (config.warn_constructors)
   1105     einfo (_("%P: warning: global constructor %s used\n"), name);
   1106 
   1107   if (! config.build_constructors)
   1108     return TRUE;
   1109 
   1110   /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
   1111      useful error message.  */
   1112   if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
   1113       && (info->relocatable
   1114 	  || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
   1115     einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
   1116 
   1117   s = set_name;
   1118   if (bfd_get_symbol_leading_char (abfd) != '\0')
   1119     *s++ = bfd_get_symbol_leading_char (abfd);
   1120   if (constructor)
   1121     strcpy (s, "__CTOR_LIST__");
   1122   else
   1123     strcpy (s, "__DTOR_LIST__");
   1124 
   1125   h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
   1126   if (h == (struct bfd_link_hash_entry *) NULL)
   1127     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
   1128   if (h->type == bfd_link_hash_new)
   1129     {
   1130       h->type = bfd_link_hash_undefined;
   1131       h->u.undef.abfd = abfd;
   1132       /* We don't call bfd_link_add_undef to add this to the list of
   1133 	 undefined symbols because we are going to define it
   1134 	 ourselves.  */
   1135     }
   1136 
   1137   ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
   1138   return TRUE;
   1139 }
   1140 
   1141 /* A structure used by warning_callback to pass information through
   1142    bfd_map_over_sections.  */
   1143 
   1144 struct warning_callback_info
   1145 {
   1146   bfd_boolean found;
   1147   const char *warning;
   1148   const char *symbol;
   1149   asymbol **asymbols;
   1150 };
   1151 
   1152 /* This is called when there is a reference to a warning symbol.  */
   1153 
   1154 static bfd_boolean
   1155 warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1156 		  const char *warning,
   1157 		  const char *symbol,
   1158 		  bfd *abfd,
   1159 		  asection *section,
   1160 		  bfd_vma address)
   1161 {
   1162   /* This is a hack to support warn_multiple_gp.  FIXME: This should
   1163      have a cleaner interface, but what?  */
   1164   if (! config.warn_multiple_gp
   1165       && strcmp (warning, "using multiple gp values") == 0)
   1166     return TRUE;
   1167 
   1168   if (section != NULL)
   1169     einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
   1170   else if (abfd == NULL)
   1171     einfo ("%P: %s%s\n", _("warning: "), warning);
   1172   else if (symbol == NULL)
   1173     einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
   1174   else
   1175     {
   1176       struct warning_callback_info cinfo;
   1177 
   1178       /* Look through the relocs to see if we can find a plausible
   1179 	 address.  */
   1180 
   1181       if (!bfd_generic_link_read_symbols (abfd))
   1182 	einfo (_("%B%F: could not read symbols: %E\n"), abfd);
   1183 
   1184       cinfo.found = FALSE;
   1185       cinfo.warning = warning;
   1186       cinfo.symbol = symbol;
   1187       cinfo.asymbols = bfd_get_outsymbols (abfd);
   1188       bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
   1189 
   1190       if (! cinfo.found)
   1191 	einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
   1192     }
   1193 
   1194   return TRUE;
   1195 }
   1196 
   1197 /* This is called by warning_callback for each section.  It checks the
   1198    relocs of the section to see if it can find a reference to the
   1199    symbol which triggered the warning.  If it can, it uses the reloc
   1200    to give an error message with a file and line number.  */
   1201 
   1202 static void
   1203 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
   1204 {
   1205   struct warning_callback_info *info = (struct warning_callback_info *) iarg;
   1206   long relsize;
   1207   arelent **relpp;
   1208   long relcount;
   1209   arelent **p, **pend;
   1210 
   1211   if (info->found)
   1212     return;
   1213 
   1214   relsize = bfd_get_reloc_upper_bound (abfd, sec);
   1215   if (relsize < 0)
   1216     einfo (_("%B%F: could not read relocs: %E\n"), abfd);
   1217   if (relsize == 0)
   1218     return;
   1219 
   1220   relpp = (arelent **) xmalloc (relsize);
   1221   relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
   1222   if (relcount < 0)
   1223     einfo (_("%B%F: could not read relocs: %E\n"), abfd);
   1224 
   1225   p = relpp;
   1226   pend = p + relcount;
   1227   for (; p < pend && *p != NULL; p++)
   1228     {
   1229       arelent *q = *p;
   1230 
   1231       if (q->sym_ptr_ptr != NULL
   1232 	  && *q->sym_ptr_ptr != NULL
   1233 	  && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
   1234 	{
   1235 	  /* We found a reloc for the symbol we are looking for.  */
   1236 	  einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
   1237 		 info->warning);
   1238 	  info->found = TRUE;
   1239 	  break;
   1240 	}
   1241     }
   1242 
   1243   free (relpp);
   1244 }
   1245 
   1246 /* This is called when an undefined symbol is found.  */
   1247 
   1248 static bfd_boolean
   1249 undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1250 		  const char *name,
   1251 		  bfd *abfd,
   1252 		  asection *section,
   1253 		  bfd_vma address,
   1254 		  bfd_boolean error)
   1255 {
   1256   static char *error_name;
   1257   static unsigned int error_count;
   1258 
   1259 #define MAX_ERRORS_IN_A_ROW 5
   1260 
   1261   if (info->ignore_hash != NULL
   1262       && bfd_hash_lookup (info->ignore_hash, name, FALSE, FALSE) != NULL)
   1263     return TRUE;
   1264 
   1265   if (config.warn_once)
   1266     {
   1267       /* Only warn once about a particular undefined symbol.  */
   1268       if (info->ignore_hash == NULL)
   1269 	{
   1270 	  info->ignore_hash = xmalloc (sizeof (struct bfd_hash_table));
   1271 	  if (!bfd_hash_table_init (info->ignore_hash, bfd_hash_newfunc,
   1272 				    sizeof (struct bfd_hash_entry)))
   1273 	    einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
   1274 	}
   1275 
   1276       if (bfd_hash_lookup (info->ignore_hash, name, FALSE, FALSE) != NULL)
   1277 	return TRUE;
   1278 
   1279       if (bfd_hash_lookup (info->ignore_hash, name, TRUE, TRUE) == NULL)
   1280 	einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
   1281     }
   1282 
   1283   /* We never print more than a reasonable number of errors in a row
   1284      for a single symbol.  */
   1285   if (error_name != NULL
   1286       && strcmp (name, error_name) == 0)
   1287     ++error_count;
   1288   else
   1289     {
   1290       error_count = 0;
   1291       if (error_name != NULL)
   1292 	free (error_name);
   1293       error_name = xstrdup (name);
   1294     }
   1295 
   1296   if (section != NULL)
   1297     {
   1298       if (error_count < MAX_ERRORS_IN_A_ROW)
   1299 	{
   1300 	  if (error)
   1301 	    einfo (_("%X%C: undefined reference to `%T'\n"),
   1302 		   abfd, section, address, name);
   1303 	  else
   1304 	    einfo (_("%C: warning: undefined reference to `%T'\n"),
   1305 		   abfd, section, address, name);
   1306 	}
   1307       else if (error_count == MAX_ERRORS_IN_A_ROW)
   1308 	{
   1309 	  if (error)
   1310 	    einfo (_("%X%D: more undefined references to `%T' follow\n"),
   1311 		   abfd, section, address, name);
   1312 	  else
   1313 	    einfo (_("%D: warning: more undefined references to `%T' follow\n"),
   1314 		   abfd, section, address, name);
   1315 	}
   1316       else if (error)
   1317 	einfo ("%X");
   1318     }
   1319   else
   1320     {
   1321       if (error_count < MAX_ERRORS_IN_A_ROW)
   1322 	{
   1323 	  if (error)
   1324 	    einfo (_("%X%B: undefined reference to `%T'\n"),
   1325 		   abfd, name);
   1326 	  else
   1327 	    einfo (_("%B: warning: undefined reference to `%T'\n"),
   1328 		   abfd, name);
   1329 	}
   1330       else if (error_count == MAX_ERRORS_IN_A_ROW)
   1331 	{
   1332 	  if (error)
   1333 	    einfo (_("%X%B: more undefined references to `%T' follow\n"),
   1334 		   abfd, name);
   1335 	  else
   1336 	    einfo (_("%B: warning: more undefined references to `%T' follow\n"),
   1337 		   abfd, name);
   1338 	}
   1339       else if (error)
   1340 	einfo ("%X");
   1341     }
   1342 
   1343   return TRUE;
   1344 }
   1345 
   1346 /* Counter to limit the number of relocation overflow error messages
   1347    to print.  Errors are printed as it is decremented.  When it's
   1348    called and the counter is zero, a final message is printed
   1349    indicating more relocations were omitted.  When it gets to -1, no
   1350    such errors are printed.  If it's initially set to a value less
   1351    than -1, all such errors will be printed (--verbose does this).  */
   1352 
   1353 int overflow_cutoff_limit = 10;
   1354 
   1355 /* This is called when a reloc overflows.  */
   1356 
   1357 static bfd_boolean
   1358 reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1359 		struct bfd_link_hash_entry *entry,
   1360 		const char *name,
   1361 		const char *reloc_name,
   1362 		bfd_vma addend,
   1363 		bfd *abfd,
   1364 		asection *section,
   1365 		bfd_vma address)
   1366 {
   1367   if (overflow_cutoff_limit == -1)
   1368     return TRUE;
   1369 
   1370   einfo ("%X%H:", abfd, section, address);
   1371 
   1372   if (overflow_cutoff_limit >= 0
   1373       && overflow_cutoff_limit-- == 0)
   1374     {
   1375       einfo (_(" additional relocation overflows omitted from the output\n"));
   1376       return TRUE;
   1377     }
   1378 
   1379   if (entry)
   1380     {
   1381       while (entry->type == bfd_link_hash_indirect
   1382 	     || entry->type == bfd_link_hash_warning)
   1383 	entry = entry->u.i.link;
   1384       switch (entry->type)
   1385 	{
   1386 	case bfd_link_hash_undefined:
   1387 	case bfd_link_hash_undefweak:
   1388 	  einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
   1389 		 reloc_name, entry->root.string);
   1390 	  break;
   1391 	case bfd_link_hash_defined:
   1392 	case bfd_link_hash_defweak:
   1393 	  einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
   1394 		 reloc_name, entry->root.string,
   1395 		 entry->u.def.section,
   1396 		 entry->u.def.section == bfd_abs_section_ptr
   1397 		 ? link_info.output_bfd : entry->u.def.section->owner);
   1398 	  break;
   1399 	default:
   1400 	  abort ();
   1401 	  break;
   1402 	}
   1403     }
   1404   else
   1405     einfo (_(" relocation truncated to fit: %s against `%T'"),
   1406 	   reloc_name, name);
   1407   if (addend != 0)
   1408     einfo ("+%v", addend);
   1409   einfo ("\n");
   1410   return TRUE;
   1411 }
   1412 
   1413 /* This is called when a dangerous relocation is made.  */
   1414 
   1415 static bfd_boolean
   1416 reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1417 		 const char *message,
   1418 		 bfd *abfd,
   1419 		 asection *section,
   1420 		 bfd_vma address)
   1421 {
   1422   einfo (_("%X%H: dangerous relocation: %s\n"),
   1423 	 abfd, section, address, message);
   1424   return TRUE;
   1425 }
   1426 
   1427 /* This is called when a reloc is being generated attached to a symbol
   1428    that is not being output.  */
   1429 
   1430 static bfd_boolean
   1431 unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1432 		  const char *name,
   1433 		  bfd *abfd,
   1434 		  asection *section,
   1435 		  bfd_vma address)
   1436 {
   1437   einfo (_("%X%H: reloc refers to symbol `%T' which is not being output\n"),
   1438 	 abfd, section, address, name);
   1439   return TRUE;
   1440 }
   1441 
   1442 /* This is called if link_info.notice_all is set, or when a symbol in
   1443    link_info.notice_hash is found.  Symbols are put in notice_hash
   1444    using the -y option, while notice_all is set if the --cref option
   1445    has been supplied, or if there are any NOCROSSREFS sections in the
   1446    linker script; and if plugins are active, since they need to monitor
   1447    all references from non-IR files.  */
   1448 
   1449 static bfd_boolean
   1450 notice (struct bfd_link_info *info,
   1451 	struct bfd_link_hash_entry *h,
   1452 	bfd *abfd,
   1453 	asection *section,
   1454 	bfd_vma value,
   1455 	flagword flags ATTRIBUTE_UNUSED,
   1456 	const char *string ATTRIBUTE_UNUSED)
   1457 {
   1458   const char *name;
   1459 
   1460   if (h == NULL)
   1461     {
   1462       if (command_line.cref || nocrossref_list != NULL)
   1463 	return handle_asneeded_cref (abfd, (enum notice_asneeded_action) value);
   1464       return TRUE;
   1465     }
   1466 
   1467   name = h->root.string;
   1468   if (info->notice_hash != NULL
   1469       && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL)
   1470     {
   1471       if (bfd_is_und_section (section))
   1472 	einfo ("%B: reference to %s\n", abfd, name);
   1473       else
   1474 	einfo ("%B: definition of %s\n", abfd, name);
   1475     }
   1476 
   1477   if (command_line.cref || nocrossref_list != NULL)
   1478     add_cref (name, abfd, section, value);
   1479 
   1480   return TRUE;
   1481 }
   1482