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