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