Home | History | Annotate | Line # | Download | only in ld
ldmain.c revision 1.1.1.3
      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 /* Record a symbol to be wrapped, from the --wrap option.  */
    647 
    648 void
    649 add_wrap (const char *name)
    650 {
    651   if (link_info.wrap_hash == NULL)
    652     {
    653       link_info.wrap_hash =
    654           (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
    655       if (!bfd_hash_table_init_n (link_info.wrap_hash,
    656 				  bfd_hash_newfunc,
    657 				  sizeof (struct bfd_hash_entry),
    658 				  61))
    659 	einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
    660     }
    661 
    662   if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
    663     einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
    664 }
    665 
    666 /* Handle the -retain-symbols-file option.  */
    667 
    668 void
    669 add_keepsyms_file (const char *filename)
    670 {
    671   FILE *file;
    672   char *buf;
    673   size_t bufsize;
    674   int c;
    675 
    676   if (link_info.strip == strip_some)
    677     einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
    678 
    679   file = fopen (filename, "r");
    680   if (file == NULL)
    681     {
    682       bfd_set_error (bfd_error_system_call);
    683       einfo ("%X%P: %s: %E\n", filename);
    684       return;
    685     }
    686 
    687   link_info.keep_hash = (struct bfd_hash_table *)
    688       xmalloc (sizeof (struct bfd_hash_table));
    689   if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
    690 			    sizeof (struct bfd_hash_entry)))
    691     einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
    692 
    693   bufsize = 100;
    694   buf = (char *) xmalloc (bufsize);
    695 
    696   c = getc (file);
    697   while (c != EOF)
    698     {
    699       while (ISSPACE (c))
    700 	c = getc (file);
    701 
    702       if (c != EOF)
    703 	{
    704 	  size_t len = 0;
    705 
    706 	  while (! ISSPACE (c) && c != EOF)
    707 	    {
    708 	      buf[len] = c;
    709 	      ++len;
    710 	      if (len >= bufsize)
    711 		{
    712 		  bufsize *= 2;
    713 		  buf = (char *) xrealloc (buf, bufsize);
    714 		}
    715 	      c = getc (file);
    716 	    }
    717 
    718 	  buf[len] = '\0';
    719 
    720 	  if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
    721 	    einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
    722 	}
    723     }
    724 
    725   if (link_info.strip != strip_none)
    726     einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
    727 
    728   free (buf);
    729   link_info.strip = strip_some;
    730 }
    731 
    732 /* Callbacks from the BFD linker routines.  */
    734 
    735 /* This is called when BFD has decided to include an archive member in
    736    a link.  */
    737 
    738 static bfd_boolean
    739 add_archive_element (struct bfd_link_info *info,
    740 		     bfd *abfd,
    741 		     const char *name,
    742 		     bfd **subsbfd ATTRIBUTE_UNUSED)
    743 {
    744   lang_input_statement_type *input;
    745   lang_input_statement_type orig_input;
    746 
    747   input = (lang_input_statement_type *)
    748       xcalloc (1, sizeof (lang_input_statement_type));
    749   input->filename = abfd->filename;
    750   input->local_sym_name = abfd->filename;
    751   input->the_bfd = abfd;
    752 
    753   /* Save the original data for trace files/tries below, as plugins
    754      (if enabled) may possibly alter it to point to a replacement
    755      BFD, but we still want to output the original BFD filename.  */
    756   orig_input = *input;
    757 #ifdef ENABLE_PLUGINS
    758   if (plugin_active_plugins_p () && !no_more_claiming)
    759     {
    760       /* We must offer this archive member to the plugins to claim.  */
    761       const char *filename = (bfd_my_archive (abfd) != NULL
    762 			      ? bfd_my_archive (abfd)->filename : abfd->filename);
    763       int fd = open (filename, O_RDONLY | O_BINARY);
    764       if (fd >= 0)
    765 	{
    766 	  struct ld_plugin_input_file file;
    767 
    768 	  /* Offset and filesize must refer to the individual archive
    769 	     member, not the whole file, and must exclude the header.
    770 	     Fortunately for us, that is how the data is stored in the
    771 	     origin field of the bfd and in the arelt_data.  */
    772 	  file.name = filename;
    773 	  file.offset = abfd->origin;
    774 	  file.filesize = arelt_size (abfd);
    775 	  file.fd = fd;
    776 	  plugin_maybe_claim (&file, input);
    777 	  if (input->flags.claimed)
    778 	    {
    779 	      input->flags.claim_archive = TRUE;
    780 	      *subsbfd = input->the_bfd;
    781 	    }
    782 	}
    783     }
    784 #endif /* ENABLE_PLUGINS */
    785 
    786   ldlang_add_file (input);
    787 
    788   if (config.map_file != NULL)
    789     {
    790       static bfd_boolean header_printed;
    791       struct bfd_link_hash_entry *h;
    792       bfd *from;
    793       int len;
    794 
    795       h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
    796 
    797       if (h == NULL)
    798 	from = NULL;
    799       else
    800 	{
    801 	  switch (h->type)
    802 	    {
    803 	    default:
    804 	      from = NULL;
    805 	      break;
    806 
    807 	    case bfd_link_hash_defined:
    808 	    case bfd_link_hash_defweak:
    809 	      from = h->u.def.section->owner;
    810 	      break;
    811 
    812 	    case bfd_link_hash_undefined:
    813 	    case bfd_link_hash_undefweak:
    814 	      from = h->u.undef.abfd;
    815 	      break;
    816 
    817 	    case bfd_link_hash_common:
    818 	      from = h->u.c.p->section->owner;
    819 	      break;
    820 	    }
    821 	}
    822 
    823       if (! header_printed)
    824 	{
    825 	  char buf[100];
    826 
    827 	  sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
    828 	  minfo ("%s", buf);
    829 	  header_printed = TRUE;
    830 	}
    831 
    832       if (bfd_my_archive (abfd) == NULL)
    833 	{
    834 	  minfo ("%s", bfd_get_filename (abfd));
    835 	  len = strlen (bfd_get_filename (abfd));
    836 	}
    837       else
    838 	{
    839 	  minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
    840 		 bfd_get_filename (abfd));
    841 	  len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
    842 		 + strlen (bfd_get_filename (abfd))
    843 		 + 2);
    844 	}
    845 
    846       if (len >= 29)
    847 	{
    848 	  print_nl ();
    849 	  len = 0;
    850 	}
    851       while (len < 30)
    852 	{
    853 	  print_space ();
    854 	  ++len;
    855 	}
    856 
    857       if (from != NULL)
    858 	minfo ("%B ", from);
    859       if (h != NULL)
    860 	minfo ("(%T)\n", h->root.string);
    861       else
    862 	minfo ("(%s)\n", name);
    863     }
    864 
    865   if (trace_files || verbose)
    866     info_msg ("%I\n", &orig_input);
    867   return TRUE;
    868 }
    869 
    870 /* This is called when BFD has discovered a symbol which is defined
    871    multiple times.  */
    872 
    873 static bfd_boolean
    874 multiple_definition (struct bfd_link_info *info,
    875 		     struct bfd_link_hash_entry *h,
    876 		     bfd *nbfd,
    877 		     asection *nsec,
    878 		     bfd_vma nval)
    879 {
    880   const char *name;
    881   bfd *obfd;
    882   asection *osec;
    883   bfd_vma oval;
    884 
    885   if (info->allow_multiple_definition)
    886     return TRUE;
    887 
    888   switch (h->type)
    889     {
    890     case bfd_link_hash_defined:
    891       osec = h->u.def.section;
    892       oval = h->u.def.value;
    893       obfd = h->u.def.section->owner;
    894       break;
    895     case bfd_link_hash_indirect:
    896       osec = bfd_ind_section_ptr;
    897       oval = 0;
    898       obfd = NULL;
    899       break;
    900     default:
    901       abort ();
    902     }
    903 
    904   /* Ignore a redefinition of an absolute symbol to the
    905      same value; it's harmless.  */
    906   if (h->type == bfd_link_hash_defined
    907       && bfd_is_abs_section (osec)
    908       && bfd_is_abs_section (nsec)
    909       && nval == oval)
    910     return TRUE;
    911 
    912   /* If either section has the output_section field set to
    913      bfd_abs_section_ptr, it means that the section is being
    914      discarded, and this is not really a multiple definition at all.
    915      FIXME: It would be cleaner to somehow ignore symbols defined in
    916      sections which are being discarded.  */
    917   if ((osec->output_section != NULL
    918        && ! bfd_is_abs_section (osec)
    919        && bfd_is_abs_section (osec->output_section))
    920       || (nsec->output_section != NULL
    921 	  && ! bfd_is_abs_section (nsec)
    922 	  && bfd_is_abs_section (nsec->output_section)))
    923     return TRUE;
    924 
    925   name = h->root.string;
    926   if (nbfd == NULL)
    927     {
    928       nbfd = obfd;
    929       nsec = osec;
    930       nval = oval;
    931       obfd = NULL;
    932     }
    933   einfo (_("%X%C: multiple definition of `%T'\n"),
    934 	 nbfd, nsec, nval, name);
    935   if (obfd != NULL)
    936     einfo (_("%D: first defined here\n"), obfd, osec, oval);
    937 
    938   if (RELAXATION_ENABLED)
    939     {
    940       einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
    941       command_line.disable_target_specific_optimizations = -1;
    942     }
    943 
    944   return TRUE;
    945 }
    946 
    947 /* This is called when there is a definition of a common symbol, or
    948    when a common symbol is found for a symbol that is already defined,
    949    or when two common symbols are found.  We only do something if
    950    -warn-common was used.  */
    951 
    952 static bfd_boolean
    953 multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
    954 		 struct bfd_link_hash_entry *h,
    955 		 bfd *nbfd,
    956 		 enum bfd_link_hash_type ntype,
    957 		 bfd_vma nsize)
    958 {
    959   const char *name;
    960   bfd *obfd;
    961   enum bfd_link_hash_type otype;
    962   bfd_vma osize;
    963 
    964   if (!config.warn_common)
    965     return TRUE;
    966 
    967   name = h->root.string;
    968   otype = h->type;
    969   if (otype == bfd_link_hash_common)
    970     {
    971       obfd = h->u.c.p->section->owner;
    972       osize = h->u.c.size;
    973     }
    974   else if (otype == bfd_link_hash_defined
    975 	   || otype == bfd_link_hash_defweak)
    976     {
    977       obfd = h->u.def.section->owner;
    978       osize = 0;
    979     }
    980   else
    981     {
    982       /* FIXME: It would nice if we could report the BFD which defined
    983 	 an indirect symbol, but we don't have anywhere to store the
    984 	 information.  */
    985       obfd = NULL;
    986       osize = 0;
    987     }
    988 
    989   if (ntype == bfd_link_hash_defined
    990       || ntype == bfd_link_hash_defweak
    991       || ntype == bfd_link_hash_indirect)
    992     {
    993       ASSERT (otype == bfd_link_hash_common);
    994       einfo (_("%B: warning: definition of `%T' overriding common\n"),
    995 	     nbfd, name);
    996       if (obfd != NULL)
    997 	einfo (_("%B: warning: common is here\n"), obfd);
    998     }
    999   else if (otype == bfd_link_hash_defined
   1000 	   || otype == bfd_link_hash_defweak
   1001 	   || otype == bfd_link_hash_indirect)
   1002     {
   1003       ASSERT (ntype == bfd_link_hash_common);
   1004       einfo (_("%B: warning: common of `%T' overridden by definition\n"),
   1005 	     nbfd, name);
   1006       if (obfd != NULL)
   1007 	einfo (_("%B: warning: defined here\n"), obfd);
   1008     }
   1009   else
   1010     {
   1011       ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
   1012       if (osize > nsize)
   1013 	{
   1014 	  einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
   1015 		 nbfd, name);
   1016 	  if (obfd != NULL)
   1017 	    einfo (_("%B: warning: larger common is here\n"), obfd);
   1018 	}
   1019       else if (nsize > osize)
   1020 	{
   1021 	  einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
   1022 		 nbfd, name);
   1023 	  if (obfd != NULL)
   1024 	    einfo (_("%B: warning: smaller common is here\n"), obfd);
   1025 	}
   1026       else
   1027 	{
   1028 	  einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
   1029 	  if (obfd != NULL)
   1030 	    einfo (_("%B: warning: previous common is here\n"), obfd);
   1031 	}
   1032     }
   1033 
   1034   return TRUE;
   1035 }
   1036 
   1037 /* This is called when BFD has discovered a set element.  H is the
   1038    entry in the linker hash table for the set.  SECTION and VALUE
   1039    represent a value which should be added to the set.  */
   1040 
   1041 static bfd_boolean
   1042 add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1043 	    struct bfd_link_hash_entry *h,
   1044 	    bfd_reloc_code_real_type reloc,
   1045 	    bfd *abfd,
   1046 	    asection *section,
   1047 	    bfd_vma value)
   1048 {
   1049   if (config.warn_constructors)
   1050     einfo (_("%P: warning: global constructor %s used\n"),
   1051 	   h->root.string);
   1052 
   1053   if (! config.build_constructors)
   1054     return TRUE;
   1055 
   1056   ldctor_add_set_entry (h, reloc, NULL, section, value);
   1057 
   1058   if (h->type == bfd_link_hash_new)
   1059     {
   1060       h->type = bfd_link_hash_undefined;
   1061       h->u.undef.abfd = abfd;
   1062       /* We don't call bfd_link_add_undef to add this to the list of
   1063 	 undefined symbols because we are going to define it
   1064 	 ourselves.  */
   1065     }
   1066 
   1067   return TRUE;
   1068 }
   1069 
   1070 /* This is called when BFD has discovered a constructor.  This is only
   1071    called for some object file formats--those which do not handle
   1072    constructors in some more clever fashion.  This is similar to
   1073    adding an element to a set, but less general.  */
   1074 
   1075 static bfd_boolean
   1076 constructor_callback (struct bfd_link_info *info,
   1077 		      bfd_boolean constructor,
   1078 		      const char *name,
   1079 		      bfd *abfd,
   1080 		      asection *section,
   1081 		      bfd_vma value)
   1082 {
   1083   char *s;
   1084   struct bfd_link_hash_entry *h;
   1085   char set_name[1 + sizeof "__CTOR_LIST__"];
   1086 
   1087   if (config.warn_constructors)
   1088     einfo (_("%P: warning: global constructor %s used\n"), name);
   1089 
   1090   if (! config.build_constructors)
   1091     return TRUE;
   1092 
   1093   /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
   1094      useful error message.  */
   1095   if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
   1096       && (info->relocatable
   1097 	  || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
   1098     einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
   1099 
   1100   s = set_name;
   1101   if (bfd_get_symbol_leading_char (abfd) != '\0')
   1102     *s++ = bfd_get_symbol_leading_char (abfd);
   1103   if (constructor)
   1104     strcpy (s, "__CTOR_LIST__");
   1105   else
   1106     strcpy (s, "__DTOR_LIST__");
   1107 
   1108   h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
   1109   if (h == (struct bfd_link_hash_entry *) NULL)
   1110     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
   1111   if (h->type == bfd_link_hash_new)
   1112     {
   1113       h->type = bfd_link_hash_undefined;
   1114       h->u.undef.abfd = abfd;
   1115       /* We don't call bfd_link_add_undef to add this to the list of
   1116 	 undefined symbols because we are going to define it
   1117 	 ourselves.  */
   1118     }
   1119 
   1120   ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
   1121   return TRUE;
   1122 }
   1123 
   1124 /* A structure used by warning_callback to pass information through
   1125    bfd_map_over_sections.  */
   1126 
   1127 struct warning_callback_info
   1128 {
   1129   bfd_boolean found;
   1130   const char *warning;
   1131   const char *symbol;
   1132   asymbol **asymbols;
   1133 };
   1134 
   1135 /* This is called when there is a reference to a warning symbol.  */
   1136 
   1137 static bfd_boolean
   1138 warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1139 		  const char *warning,
   1140 		  const char *symbol,
   1141 		  bfd *abfd,
   1142 		  asection *section,
   1143 		  bfd_vma address)
   1144 {
   1145   /* This is a hack to support warn_multiple_gp.  FIXME: This should
   1146      have a cleaner interface, but what?  */
   1147   if (! config.warn_multiple_gp
   1148       && strcmp (warning, "using multiple gp values") == 0)
   1149     return TRUE;
   1150 
   1151   if (section != NULL)
   1152     einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
   1153   else if (abfd == NULL)
   1154     einfo ("%P: %s%s\n", _("warning: "), warning);
   1155   else if (symbol == NULL)
   1156     einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
   1157   else
   1158     {
   1159       struct warning_callback_info cinfo;
   1160 
   1161       /* Look through the relocs to see if we can find a plausible
   1162 	 address.  */
   1163 
   1164       if (!bfd_generic_link_read_symbols (abfd))
   1165 	einfo (_("%B%F: could not read symbols: %E\n"), abfd);
   1166 
   1167       cinfo.found = FALSE;
   1168       cinfo.warning = warning;
   1169       cinfo.symbol = symbol;
   1170       cinfo.asymbols = bfd_get_outsymbols (abfd);
   1171       bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
   1172 
   1173       if (! cinfo.found)
   1174 	einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
   1175     }
   1176 
   1177   return TRUE;
   1178 }
   1179 
   1180 /* This is called by warning_callback for each section.  It checks the
   1181    relocs of the section to see if it can find a reference to the
   1182    symbol which triggered the warning.  If it can, it uses the reloc
   1183    to give an error message with a file and line number.  */
   1184 
   1185 static void
   1186 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
   1187 {
   1188   struct warning_callback_info *info = (struct warning_callback_info *) iarg;
   1189   long relsize;
   1190   arelent **relpp;
   1191   long relcount;
   1192   arelent **p, **pend;
   1193 
   1194   if (info->found)
   1195     return;
   1196 
   1197   relsize = bfd_get_reloc_upper_bound (abfd, sec);
   1198   if (relsize < 0)
   1199     einfo (_("%B%F: could not read relocs: %E\n"), abfd);
   1200   if (relsize == 0)
   1201     return;
   1202 
   1203   relpp = (arelent **) xmalloc (relsize);
   1204   relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
   1205   if (relcount < 0)
   1206     einfo (_("%B%F: could not read relocs: %E\n"), abfd);
   1207 
   1208   p = relpp;
   1209   pend = p + relcount;
   1210   for (; p < pend && *p != NULL; p++)
   1211     {
   1212       arelent *q = *p;
   1213 
   1214       if (q->sym_ptr_ptr != NULL
   1215 	  && *q->sym_ptr_ptr != NULL
   1216 	  && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
   1217 	{
   1218 	  /* We found a reloc for the symbol we are looking for.  */
   1219 	  einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
   1220 		 info->warning);
   1221 	  info->found = TRUE;
   1222 	  break;
   1223 	}
   1224     }
   1225 
   1226   free (relpp);
   1227 }
   1228 
   1229 /* This is called when an undefined symbol is found.  */
   1230 
   1231 static bfd_boolean
   1232 undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1233 		  const char *name,
   1234 		  bfd *abfd,
   1235 		  asection *section,
   1236 		  bfd_vma address,
   1237 		  bfd_boolean error)
   1238 {
   1239   static char *error_name;
   1240   static unsigned int error_count;
   1241 
   1242 #define MAX_ERRORS_IN_A_ROW 5
   1243 
   1244   if (config.warn_once)
   1245     {
   1246       static struct bfd_hash_table *hash;
   1247 
   1248       /* Only warn once about a particular undefined symbol.  */
   1249       if (hash == NULL)
   1250 	{
   1251 	  hash = (struct bfd_hash_table *)
   1252               xmalloc (sizeof (struct bfd_hash_table));
   1253 	  if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
   1254 				    sizeof (struct bfd_hash_entry)))
   1255 	    einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
   1256 	}
   1257 
   1258       if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
   1259 	return TRUE;
   1260 
   1261       if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
   1262 	einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
   1263     }
   1264 
   1265   /* We never print more than a reasonable number of errors in a row
   1266      for a single symbol.  */
   1267   if (error_name != NULL
   1268       && strcmp (name, error_name) == 0)
   1269     ++error_count;
   1270   else
   1271     {
   1272       error_count = 0;
   1273       if (error_name != NULL)
   1274 	free (error_name);
   1275       error_name = xstrdup (name);
   1276     }
   1277 
   1278   if (section != NULL)
   1279     {
   1280       if (error_count < MAX_ERRORS_IN_A_ROW)
   1281 	{
   1282 	  if (error)
   1283 	    einfo (_("%X%C: undefined reference to `%T'\n"),
   1284 		   abfd, section, address, name);
   1285 	  else
   1286 	    einfo (_("%C: warning: undefined reference to `%T'\n"),
   1287 		   abfd, section, address, name);
   1288 	}
   1289       else if (error_count == MAX_ERRORS_IN_A_ROW)
   1290 	{
   1291 	  if (error)
   1292 	    einfo (_("%X%D: more undefined references to `%T' follow\n"),
   1293 		   abfd, section, address, name);
   1294 	  else
   1295 	    einfo (_("%D: warning: more undefined references to `%T' follow\n"),
   1296 		   abfd, section, address, name);
   1297 	}
   1298       else if (error)
   1299 	einfo ("%X");
   1300     }
   1301   else
   1302     {
   1303       if (error_count < MAX_ERRORS_IN_A_ROW)
   1304 	{
   1305 	  if (error)
   1306 	    einfo (_("%X%B: undefined reference to `%T'\n"),
   1307 		   abfd, name);
   1308 	  else
   1309 	    einfo (_("%B: warning: undefined reference to `%T'\n"),
   1310 		   abfd, name);
   1311 	}
   1312       else if (error_count == MAX_ERRORS_IN_A_ROW)
   1313 	{
   1314 	  if (error)
   1315 	    einfo (_("%X%B: more undefined references to `%T' follow\n"),
   1316 		   abfd, name);
   1317 	  else
   1318 	    einfo (_("%B: warning: more undefined references to `%T' follow\n"),
   1319 		   abfd, name);
   1320 	}
   1321       else if (error)
   1322 	einfo ("%X");
   1323     }
   1324 
   1325   return TRUE;
   1326 }
   1327 
   1328 /* Counter to limit the number of relocation overflow error messages
   1329    to print.  Errors are printed as it is decremented.  When it's
   1330    called and the counter is zero, a final message is printed
   1331    indicating more relocations were omitted.  When it gets to -1, no
   1332    such errors are printed.  If it's initially set to a value less
   1333    than -1, all such errors will be printed (--verbose does this).  */
   1334 
   1335 int overflow_cutoff_limit = 10;
   1336 
   1337 /* This is called when a reloc overflows.  */
   1338 
   1339 static bfd_boolean
   1340 reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1341 		struct bfd_link_hash_entry *entry,
   1342 		const char *name,
   1343 		const char *reloc_name,
   1344 		bfd_vma addend,
   1345 		bfd *abfd,
   1346 		asection *section,
   1347 		bfd_vma address)
   1348 {
   1349   if (overflow_cutoff_limit == -1)
   1350     return TRUE;
   1351 
   1352   einfo ("%X%H:", abfd, section, address);
   1353 
   1354   if (overflow_cutoff_limit >= 0
   1355       && overflow_cutoff_limit-- == 0)
   1356     {
   1357       einfo (_(" additional relocation overflows omitted from the output\n"));
   1358       return TRUE;
   1359     }
   1360 
   1361   if (entry)
   1362     {
   1363       while (entry->type == bfd_link_hash_indirect
   1364 	     || entry->type == bfd_link_hash_warning)
   1365 	entry = entry->u.i.link;
   1366       switch (entry->type)
   1367 	{
   1368 	case bfd_link_hash_undefined:
   1369 	case bfd_link_hash_undefweak:
   1370 	  einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
   1371 		 reloc_name, entry->root.string);
   1372 	  break;
   1373 	case bfd_link_hash_defined:
   1374 	case bfd_link_hash_defweak:
   1375 	  einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
   1376 		 reloc_name, entry->root.string,
   1377 		 entry->u.def.section,
   1378 		 entry->u.def.section == bfd_abs_section_ptr
   1379 		 ? link_info.output_bfd : entry->u.def.section->owner);
   1380 	  break;
   1381 	default:
   1382 	  abort ();
   1383 	  break;
   1384 	}
   1385     }
   1386   else
   1387     einfo (_(" relocation truncated to fit: %s against `%T'"),
   1388 	   reloc_name, name);
   1389   if (addend != 0)
   1390     einfo ("+%v", addend);
   1391   einfo ("\n");
   1392   return TRUE;
   1393 }
   1394 
   1395 /* This is called when a dangerous relocation is made.  */
   1396 
   1397 static bfd_boolean
   1398 reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1399 		 const char *message,
   1400 		 bfd *abfd,
   1401 		 asection *section,
   1402 		 bfd_vma address)
   1403 {
   1404   einfo (_("%X%H: dangerous relocation: %s\n"),
   1405 	 abfd, section, address, message);
   1406   return TRUE;
   1407 }
   1408 
   1409 /* This is called when a reloc is being generated attached to a symbol
   1410    that is not being output.  */
   1411 
   1412 static bfd_boolean
   1413 unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
   1414 		  const char *name,
   1415 		  bfd *abfd,
   1416 		  asection *section,
   1417 		  bfd_vma address)
   1418 {
   1419   einfo (_("%X%H: reloc refers to symbol `%T' which is not being output\n"),
   1420 	 abfd, section, address, name);
   1421   return TRUE;
   1422 }
   1423 
   1424 /* This is called if link_info.notice_all is set, or when a symbol in
   1425    link_info.notice_hash is found.  Symbols are put in notice_hash
   1426    using the -y option, while notice_all is set if the --cref option
   1427    has been supplied, or if there are any NOCROSSREFS sections in the
   1428    linker script; and if plugins are active, since they need to monitor
   1429    all references from non-IR files.  */
   1430 
   1431 static bfd_boolean
   1432 notice (struct bfd_link_info *info,
   1433 	struct bfd_link_hash_entry *h,
   1434 	bfd *abfd,
   1435 	asection *section,
   1436 	bfd_vma value,
   1437 	flagword flags ATTRIBUTE_UNUSED,
   1438 	const char *string ATTRIBUTE_UNUSED)
   1439 {
   1440   const char *name;
   1441 
   1442   if (h == NULL)
   1443     {
   1444       if (command_line.cref || nocrossref_list != NULL)
   1445 	return handle_asneeded_cref (abfd, (enum notice_asneeded_action) value);
   1446       return TRUE;
   1447     }
   1448 
   1449   name = h->root.string;
   1450   if (info->notice_hash != NULL
   1451       && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL)
   1452     {
   1453       if (bfd_is_und_section (section))
   1454 	einfo ("%B: reference to %s\n", abfd, name);
   1455       else
   1456 	einfo ("%B: definition of %s\n", abfd, name);
   1457     }
   1458 
   1459   if (command_line.cref || nocrossref_list != NULL)
   1460     add_cref (name, abfd, section, value);
   1461 
   1462   return TRUE;
   1463 }
   1464