include/
[external/binutils.git] / ld / ldmain.c
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@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 void set_scripts_dir
118   (void);
119 static bfd_boolean add_archive_element
120   (struct bfd_link_info *, bfd *, const char *);
121 static bfd_boolean multiple_definition
122   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
123    bfd *, asection *, bfd_vma);
124 static bfd_boolean multiple_common
125   (struct bfd_link_info *, const char *, bfd *, enum bfd_link_hash_type,
126    bfd_vma, bfd *, enum bfd_link_hash_type, bfd_vma);
127 static bfd_boolean add_to_set
128   (struct bfd_link_info *, struct bfd_link_hash_entry *,
129    bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
130 static bfd_boolean constructor_callback
131   (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
132    asection *, bfd_vma);
133 static bfd_boolean warning_callback
134   (struct bfd_link_info *, const char *, const char *, bfd *,
135    asection *, bfd_vma);
136 static void warning_find_reloc
137   (bfd *, asection *, void *);
138 static bfd_boolean undefined_symbol
139   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
140    bfd_boolean);
141 static bfd_boolean reloc_overflow
142   (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
143    const char *, bfd_vma, bfd *, asection *, bfd_vma);
144 static bfd_boolean reloc_dangerous
145   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
146 static bfd_boolean unattached_reloc
147   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
148 static bfd_boolean notice
149   (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
150
151 static struct bfd_link_callbacks link_callbacks =
152 {
153   add_archive_element,
154   multiple_definition,
155   multiple_common,
156   add_to_set,
157   constructor_callback,
158   warning_callback,
159   undefined_symbol,
160   reloc_overflow,
161   reloc_dangerous,
162   unattached_reloc,
163   notice,
164   einfo,
165   info_msg,
166   minfo,
167   ldlang_override_segment_assignment
168 };
169
170 struct bfd_link_info link_info;
171 \f
172 static void
173 remove_output (void)
174 {
175   if (output_filename)
176     {
177       if (link_info.output_bfd)
178         bfd_cache_close (link_info.output_bfd);
179       if (delete_output_file_on_failure)
180         unlink_if_ordinary (output_filename);
181     }
182 }
183
184 int
185 main (int argc, char **argv)
186 {
187   char *emulation;
188   long start_time = get_run_time ();
189
190 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
191   setlocale (LC_MESSAGES, "");
192 #endif
193 #if defined (HAVE_SETLOCALE)
194   setlocale (LC_CTYPE, "");
195 #endif
196   bindtextdomain (PACKAGE, LOCALEDIR);
197   textdomain (PACKAGE);
198
199   program_name = argv[0];
200   xmalloc_set_program_name (program_name);
201
202   START_PROGRESS (program_name, 0);
203
204   expandargv (&argc, &argv);
205
206   bfd_init ();
207
208   bfd_set_error_program_name (program_name);
209
210   xatexit (remove_output);
211
212   /* Set up the sysroot directory.  */
213   ld_sysroot = get_sysroot (argc, argv);
214   if (*ld_sysroot)
215     {
216       if (*TARGET_SYSTEM_ROOT == 0)
217         {
218           einfo ("%P%F: this linker was not configured to use sysroots\n");
219           ld_sysroot = "";
220         }
221       else
222         ld_canon_sysroot = lrealpath (ld_sysroot);
223     }
224   if (ld_canon_sysroot)
225     ld_canon_sysroot_len = strlen (ld_canon_sysroot);
226   else
227     ld_canon_sysroot_len = -1;
228
229   /* Set the default BFD target based on the configured target.  Doing
230      this permits the linker to be configured for a particular target,
231      and linked against a shared BFD library which was configured for
232      a different target.  The macro TARGET is defined by Makefile.  */
233   if (! bfd_set_default_target (TARGET))
234     {
235       einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
236       xexit (1);
237     }
238
239 #if YYDEBUG
240   {
241     extern int yydebug;
242     yydebug = 1;
243   }
244 #endif
245
246   config.build_constructors = TRUE;
247   config.rpath_separator = ':';
248   config.split_by_reloc = (unsigned) -1;
249   config.split_by_file = (bfd_size_type) -1;
250   config.make_executable = TRUE;
251   config.magic_demand_paged = TRUE;
252   config.text_read_only = TRUE;
253
254   command_line.warn_mismatch = TRUE;
255   command_line.warn_search_mismatch = TRUE;
256   command_line.check_section_addresses = TRUE;
257
258   /* We initialize DEMANGLING based on the environment variable
259      COLLECT_NO_DEMANGLE.  The gcc collect2 program will demangle the
260      output of the linker, unless COLLECT_NO_DEMANGLE is set in the
261      environment.  Acting the same way here lets us provide the same
262      interface by default.  */
263   demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
264
265   link_info.allow_undefined_version = TRUE;
266   link_info.keep_memory = TRUE;
267   link_info.combreloc = TRUE;
268   link_info.strip_discarded = TRUE;
269   link_info.emit_hash = TRUE;
270   link_info.callbacks = &link_callbacks;
271   link_info.input_bfds_tail = &link_info.input_bfds;
272   /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
273      and _fini symbols.  We are compatible.  */
274   link_info.init_function = "_init";
275   link_info.fini_function = "_fini";
276   link_info.relax_pass = 1;
277   link_info.pei386_auto_import = -1;
278   link_info.spare_dynamic_tags = 5;
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   /* This essentially adds another -L directory so this must be done after
361      the -L's in argv have been processed.  */
362   set_scripts_dir ();
363
364   /* If we have not already opened and parsed a linker script,
365      try the default script from command line first.  */
366   if (saved_script_handle == NULL
367       && command_line.default_script != NULL)
368     {
369       ldfile_open_command_file (command_line.default_script);
370       parser_input = input_script;
371       yyparse ();
372     }
373
374   /* If we have not already opened and parsed a linker script
375      read the emulation's appropriate default script.  */
376   if (saved_script_handle == NULL)
377     {
378       int isfile;
379       char *s = ldemul_get_script (&isfile);
380
381       if (isfile)
382         ldfile_open_command_file (s);
383       else
384         {
385           lex_string = s;
386           lex_redirect (s);
387         }
388       parser_input = input_script;
389       yyparse ();
390       lex_string = NULL;
391     }
392
393   if (trace_file_tries)
394     {
395       if (saved_script_handle)
396         info_msg (_("using external linker script:"));
397       else
398         info_msg (_("using internal linker script:"));
399       info_msg ("\n==================================================\n");
400
401       if (saved_script_handle)
402         {
403           static const int ld_bufsz = 8193;
404           size_t n;
405           char *buf = xmalloc (ld_bufsz);
406
407           rewind (saved_script_handle);
408           while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
409             {
410               buf[n] = 0;
411               info_msg (buf);
412             }
413           rewind (saved_script_handle);
414           free (buf);
415         }
416       else
417         {
418           int isfile;
419
420           info_msg (ldemul_get_script (&isfile));
421         }
422
423       info_msg ("\n==================================================\n");
424     }
425
426   lang_final ();
427
428   if (!lang_has_input_file)
429     {
430       if (version_printed)
431         xexit (0);
432       einfo (_("%P%F: no input files\n"));
433     }
434
435   if (trace_files)
436     info_msg (_("%P: mode %s\n"), emulation);
437
438   ldemul_after_parse ();
439
440   if (config.map_filename)
441     {
442       if (strcmp (config.map_filename, "-") == 0)
443         {
444           config.map_file = stdout;
445         }
446       else
447         {
448           config.map_file = fopen (config.map_filename, FOPEN_WT);
449           if (config.map_file == (FILE *) NULL)
450             {
451               bfd_set_error (bfd_error_system_call);
452               einfo (_("%P%F: cannot open map file %s: %E\n"),
453                      config.map_filename);
454             }
455         }
456     }
457
458   lang_process ();
459
460   /* Print error messages for any missing symbols, for any warning
461      symbols, and possibly multiple definitions.  */
462   if (link_info.relocatable)
463     link_info.output_bfd->flags &= ~EXEC_P;
464   else
465     link_info.output_bfd->flags |= EXEC_P;
466
467   ldwrite ();
468
469   if (config.map_file != NULL)
470     lang_map ();
471   if (command_line.cref)
472     output_cref (config.map_file != NULL ? config.map_file : stdout);
473   if (nocrossref_list != NULL)
474     check_nocrossrefs ();
475
476   lang_finish ();
477
478   /* Even if we're producing relocatable output, some non-fatal errors should
479      be reported in the exit status.  (What non-fatal errors, if any, do we
480      want to ignore for relocatable output?)  */
481   if (!config.make_executable && !force_make_executable)
482     {
483       if (trace_files)
484         einfo (_("%P: link errors found, deleting executable `%s'\n"),
485                output_filename);
486
487       /* The file will be removed by remove_output.  */
488       xexit (1);
489     }
490   else
491     {
492       if (! bfd_close (link_info.output_bfd))
493         einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd);
494
495       /* If the --force-exe-suffix is enabled, and we're making an
496          executable file and it doesn't end in .exe, copy it to one
497          which does.  */
498       if (! link_info.relocatable && command_line.force_exe_suffix)
499         {
500           int len = strlen (output_filename);
501
502           if (len < 4
503               || (strcasecmp (output_filename + len - 4, ".exe") != 0
504                   && strcasecmp (output_filename + len - 4, ".dll") != 0))
505             {
506               FILE *src;
507               FILE *dst;
508               const int bsize = 4096;
509               char *buf = xmalloc (bsize);
510               int l;
511               char *dst_name = xmalloc (len + 5);
512
513               strcpy (dst_name, output_filename);
514               strcat (dst_name, ".exe");
515               src = fopen (output_filename, FOPEN_RB);
516               dst = fopen (dst_name, FOPEN_WB);
517
518               if (!src)
519                 einfo (_("%X%P: unable to open for source of copy `%s'\n"),
520                        output_filename);
521               if (!dst)
522                 einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
523                        dst_name);
524               while ((l = fread (buf, 1, bsize, src)) > 0)
525                 {
526                   int done = fwrite (buf, 1, l, dst);
527
528                   if (done != l)
529                     einfo (_("%P: Error writing file `%s'\n"), dst_name);
530                 }
531
532               fclose (src);
533               if (fclose (dst) == EOF)
534                 einfo (_("%P: Error closing file `%s'\n"), dst_name);
535               free (dst_name);
536               free (buf);
537             }
538         }
539     }
540
541   END_PROGRESS (program_name);
542
543   if (config.stats)
544     {
545 #ifdef HAVE_SBRK
546       char *lim = sbrk (0);
547 #endif
548       long run_time = get_run_time () - start_time;
549
550       fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
551                program_name, run_time / 1000000, run_time % 1000000);
552 #ifdef HAVE_SBRK
553       fprintf (stderr, _("%s: data size %ld\n"), program_name,
554                (long) (lim - (char *) &environ));
555 #endif
556     }
557
558   /* Prevent remove_output 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;
594
595   for (i = 1; i < argc; i++)
596     if (CONST_STRNEQ (argv[i], "--sysroot="))
597       return argv[i] + strlen ("--sysroot=");
598
599   path = get_relative_sysroot (BINDIR);
600   if (path)
601     return path;
602
603   path = get_relative_sysroot (TOOLBINDIR);
604   if (path)
605     return path;
606
607   return TARGET_SYSTEM_ROOT;
608 }
609
610 /* We need to find any explicitly given emulation in order to initialize the
611    state that's needed by the lex&yacc argument parser (parse_args).  */
612
613 static char *
614 get_emulation (int argc, char **argv)
615 {
616   char *emulation;
617   int i;
618
619   emulation = getenv (EMULATION_ENVIRON);
620   if (emulation == NULL)
621     emulation = DEFAULT_EMULATION;
622
623   for (i = 1; i < argc; i++)
624     {
625       if (CONST_STRNEQ (argv[i], "-m"))
626         {
627           if (argv[i][2] == '\0')
628             {
629               /* -m EMUL */
630               if (i < argc - 1)
631                 {
632                   emulation = argv[i + 1];
633                   i++;
634                 }
635               else
636                 einfo (_("%P%F: missing argument to -m\n"));
637             }
638           else if (strcmp (argv[i], "-mips1") == 0
639                    || strcmp (argv[i], "-mips2") == 0
640                    || strcmp (argv[i], "-mips3") == 0
641                    || strcmp (argv[i], "-mips4") == 0
642                    || strcmp (argv[i], "-mips5") == 0
643                    || strcmp (argv[i], "-mips32") == 0
644                    || strcmp (argv[i], "-mips32r2") == 0
645                    || strcmp (argv[i], "-mips64") == 0
646                    || strcmp (argv[i], "-mips64r2") == 0)
647             {
648               /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
649                  passed to the linker by some MIPS compilers.  They
650                  generally tell the linker to use a slightly different
651                  library path.  Perhaps someday these should be
652                  implemented as emulations; until then, we just ignore
653                  the arguments and hope that nobody ever creates
654                  emulations named ips1, ips2 or ips3.  */
655             }
656           else if (strcmp (argv[i], "-m486") == 0)
657             {
658               /* FIXME: The argument -m486 is passed to the linker on
659                  some Linux systems.  Hope that nobody creates an
660                  emulation named 486.  */
661             }
662           else
663             {
664               /* -mEMUL */
665               emulation = &argv[i][2];
666             }
667         }
668     }
669
670   return emulation;
671 }
672
673 /* If directory DIR contains an "ldscripts" subdirectory,
674    add DIR to the library search path and return TRUE,
675    else return FALSE.  */
676
677 static bfd_boolean
678 check_for_scripts_dir (char *dir)
679 {
680   size_t dirlen;
681   char *buf;
682   struct stat s;
683   bfd_boolean res;
684
685   dirlen = strlen (dir);
686   /* sizeof counts the terminating NUL.  */
687   buf = xmalloc (dirlen + sizeof ("/ldscripts"));
688   sprintf (buf, "%s/ldscripts", dir);
689
690   res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
691   free (buf);
692   if (res)
693     ldfile_add_library_path (dir, FALSE);
694   return res;
695 }
696
697 /* Set the default directory for finding script files.
698    Libraries will be searched for here too, but that's ok.
699    We look for the "ldscripts" directory in:
700
701    SCRIPTDIR (passed from Makefile)
702              (adjusted according to the current location of the binary)
703    SCRIPTDIR (passed from Makefile)
704    the dir where this program is (for using it from the build tree)
705    the dir where this program is/../lib
706              (for installing the tool suite elsewhere).  */
707
708 static void
709 set_scripts_dir (void)
710 {
711   char *end, *dir;
712   size_t dirlen;
713   bfd_boolean found;
714
715   dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
716   if (dir)
717     {
718       found = check_for_scripts_dir (dir);
719       free (dir);
720       if (found)
721         return;
722     }
723
724   dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
725   if (dir)
726     {
727       found = check_for_scripts_dir (dir);
728       free (dir);
729       if (found)
730         return;
731     }
732
733   if (check_for_scripts_dir (SCRIPTDIR))
734     /* We've been installed normally.  */
735     return;
736
737   /* Look for "ldscripts" in the dir where our binary is.  */
738   end = strrchr (program_name, '/');
739 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
740   {
741     /* We could have \foo\bar, or /foo\bar.  */
742     char *bslash = strrchr (program_name, '\\');
743
744     if (end == NULL || (bslash != NULL && bslash > end))
745       end = bslash;
746   }
747 #endif
748
749   if (end == NULL)
750     /* Don't look for ldscripts in the current directory.  There is
751        too much potential for confusion.  */
752     return;
753
754   dirlen = end - program_name;
755   /* Make a copy of program_name in dir.
756      Leave room for later "/../lib".  */
757   dir = xmalloc (dirlen + 8);
758   strncpy (dir, program_name, dirlen);
759   dir[dirlen] = '\0';
760
761   if (check_for_scripts_dir (dir))
762     {
763       free (dir);
764       return;
765     }
766
767   /* Look for "ldscripts" in <the dir where our binary is>/../lib.  */
768   strcpy (dir + dirlen, "/../lib");
769   check_for_scripts_dir (dir);
770   free (dir);
771 }
772
773 void
774 add_ysym (const char *name)
775 {
776   if (link_info.notice_hash == NULL)
777     {
778       link_info.notice_hash = xmalloc (sizeof (struct bfd_hash_table));
779       if (!bfd_hash_table_init_n (link_info.notice_hash,
780                                   bfd_hash_newfunc,
781                                   sizeof (struct bfd_hash_entry),
782                                   61))
783         einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
784     }
785
786   if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
787     einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
788 }
789
790 /* Record a symbol to be wrapped, from the --wrap option.  */
791
792 void
793 add_wrap (const char *name)
794 {
795   if (link_info.wrap_hash == NULL)
796     {
797       link_info.wrap_hash = xmalloc (sizeof (struct bfd_hash_table));
798       if (!bfd_hash_table_init_n (link_info.wrap_hash,
799                                   bfd_hash_newfunc,
800                                   sizeof (struct bfd_hash_entry),
801                                   61))
802         einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
803     }
804
805   if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
806     einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
807 }
808
809 /* Handle the -retain-symbols-file option.  */
810
811 void
812 add_keepsyms_file (const char *filename)
813 {
814   FILE *file;
815   char *buf;
816   size_t bufsize;
817   int c;
818
819   if (link_info.strip == strip_some)
820     einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
821
822   file = fopen (filename, "r");
823   if (file == NULL)
824     {
825       bfd_set_error (bfd_error_system_call);
826       einfo ("%X%P: %s: %E\n", filename);
827       return;
828     }
829
830   link_info.keep_hash = xmalloc (sizeof (struct bfd_hash_table));
831   if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
832                             sizeof (struct bfd_hash_entry)))
833     einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
834
835   bufsize = 100;
836   buf = xmalloc (bufsize);
837
838   c = getc (file);
839   while (c != EOF)
840     {
841       while (ISSPACE (c))
842         c = getc (file);
843
844       if (c != EOF)
845         {
846           size_t len = 0;
847
848           while (! ISSPACE (c) && c != EOF)
849             {
850               buf[len] = c;
851               ++len;
852               if (len >= bufsize)
853                 {
854                   bufsize *= 2;
855                   buf = xrealloc (buf, bufsize);
856                 }
857               c = getc (file);
858             }
859
860           buf[len] = '\0';
861
862           if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
863             einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
864         }
865     }
866
867   if (link_info.strip != strip_none)
868     einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
869
870   free (buf);
871   link_info.strip = strip_some;
872 }
873 \f
874 /* Callbacks from the BFD linker routines.  */
875
876 /* This is called when BFD has decided to include an archive member in
877    a link.  */
878
879 static bfd_boolean
880 add_archive_element (struct bfd_link_info *info,
881                      bfd *abfd,
882                      const char *name)
883 {
884   lang_input_statement_type *input;
885
886   input = xmalloc (sizeof (lang_input_statement_type));
887   input->filename = abfd->filename;
888   input->local_sym_name = abfd->filename;
889   input->the_bfd = abfd;
890   input->asymbols = NULL;
891   input->next = NULL;
892   input->just_syms_flag = FALSE;
893   input->loaded = FALSE;
894   input->search_dirs_flag = FALSE;
895
896   /* FIXME: The following fields are not set: header.next,
897      header.type, closed, passive_position, symbol_count,
898      next_real_file, is_archive, target, real.  This bit of code is
899      from the old decode_library_subfile function.  I don't know
900      whether any of those fields matters.  */
901
902   ldlang_add_file (input);
903
904   if (config.map_file != NULL)
905     {
906       static bfd_boolean header_printed;
907       struct bfd_link_hash_entry *h;
908       bfd *from;
909       int len;
910
911       h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
912
913       if (h == NULL)
914         from = NULL;
915       else
916         {
917           switch (h->type)
918             {
919             default:
920               from = NULL;
921               break;
922
923             case bfd_link_hash_defined:
924             case bfd_link_hash_defweak:
925               from = h->u.def.section->owner;
926               break;
927
928             case bfd_link_hash_undefined:
929             case bfd_link_hash_undefweak:
930               from = h->u.undef.abfd;
931               break;
932
933             case bfd_link_hash_common:
934               from = h->u.c.p->section->owner;
935               break;
936             }
937         }
938
939       if (! header_printed)
940         {
941           char buf[100];
942
943           sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
944           minfo ("%s", buf);
945           header_printed = TRUE;
946         }
947
948       if (bfd_my_archive (abfd) == NULL)
949         {
950           minfo ("%s", bfd_get_filename (abfd));
951           len = strlen (bfd_get_filename (abfd));
952         }
953       else
954         {
955           minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
956                  bfd_get_filename (abfd));
957           len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
958                  + strlen (bfd_get_filename (abfd))
959                  + 2);
960         }
961
962       if (len >= 29)
963         {
964           print_nl ();
965           len = 0;
966         }
967       while (len < 30)
968         {
969           print_space ();
970           ++len;
971         }
972
973       if (from != NULL)
974         minfo ("%B ", from);
975       if (h != NULL)
976         minfo ("(%T)\n", h->root.string);
977       else
978         minfo ("(%s)\n", name);
979     }
980
981   if (trace_files || trace_file_tries)
982     info_msg ("%I\n", input);
983
984   return TRUE;
985 }
986
987 /* This is called when BFD has discovered a symbol which is defined
988    multiple times.  */
989
990 static bfd_boolean
991 multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
992                      const char *name,
993                      bfd *obfd,
994                      asection *osec,
995                      bfd_vma oval,
996                      bfd *nbfd,
997                      asection *nsec,
998                      bfd_vma nval)
999 {
1000   /* If either section has the output_section field set to
1001      bfd_abs_section_ptr, it means that the section is being
1002      discarded, and this is not really a multiple definition at all.
1003      FIXME: It would be cleaner to somehow ignore symbols defined in
1004      sections which are being discarded.  */
1005   if ((osec->output_section != NULL
1006        && ! bfd_is_abs_section (osec)
1007        && bfd_is_abs_section (osec->output_section))
1008       || (nsec->output_section != NULL
1009           && ! bfd_is_abs_section (nsec)
1010           && bfd_is_abs_section (nsec->output_section)))
1011     return TRUE;
1012
1013   einfo (_("%X%C: multiple definition of `%T'\n"),
1014          nbfd, nsec, nval, name);
1015   if (obfd != NULL)
1016     einfo (_("%D: first defined here\n"), obfd, osec, oval);
1017
1018   if (command_line.relax)
1019     {
1020       einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
1021       command_line.relax = 0;
1022     }
1023
1024   return TRUE;
1025 }
1026
1027 /* This is called when there is a definition of a common symbol, or
1028    when a common symbol is found for a symbol that is already defined,
1029    or when two common symbols are found.  We only do something if
1030    -warn-common was used.  */
1031
1032 static bfd_boolean
1033 multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1034                  const char *name,
1035                  bfd *obfd,
1036                  enum bfd_link_hash_type otype,
1037                  bfd_vma osize,
1038                  bfd *nbfd,
1039                  enum bfd_link_hash_type ntype,
1040                  bfd_vma nsize)
1041 {
1042   if (! config.warn_common)
1043     return TRUE;
1044
1045   if (ntype == bfd_link_hash_defined
1046       || ntype == bfd_link_hash_defweak
1047       || ntype == bfd_link_hash_indirect)
1048     {
1049       ASSERT (otype == bfd_link_hash_common);
1050       einfo (_("%B: warning: definition of `%T' overriding common\n"),
1051              nbfd, name);
1052       if (obfd != NULL)
1053         einfo (_("%B: warning: common is here\n"), obfd);
1054     }
1055   else if (otype == bfd_link_hash_defined
1056            || otype == bfd_link_hash_defweak
1057            || otype == bfd_link_hash_indirect)
1058     {
1059       ASSERT (ntype == bfd_link_hash_common);
1060       einfo (_("%B: warning: common of `%T' overridden by definition\n"),
1061              nbfd, name);
1062       if (obfd != NULL)
1063         einfo (_("%B: warning: defined here\n"), obfd);
1064     }
1065   else
1066     {
1067       ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1068       if (osize > nsize)
1069         {
1070           einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
1071                  nbfd, name);
1072           if (obfd != NULL)
1073             einfo (_("%B: warning: larger common is here\n"), obfd);
1074         }
1075       else if (nsize > osize)
1076         {
1077           einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
1078                  nbfd, name);
1079           if (obfd != NULL)
1080             einfo (_("%B: warning: smaller common is here\n"), obfd);
1081         }
1082       else
1083         {
1084           einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
1085           if (obfd != NULL)
1086             einfo (_("%B: warning: previous common is here\n"), obfd);
1087         }
1088     }
1089
1090   return TRUE;
1091 }
1092
1093 /* This is called when BFD has discovered a set element.  H is the
1094    entry in the linker hash table for the set.  SECTION and VALUE
1095    represent a value which should be added to the set.  */
1096
1097 static bfd_boolean
1098 add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1099             struct bfd_link_hash_entry *h,
1100             bfd_reloc_code_real_type reloc,
1101             bfd *abfd,
1102             asection *section,
1103             bfd_vma value)
1104 {
1105   if (config.warn_constructors)
1106     einfo (_("%P: warning: global constructor %s used\n"),
1107            h->root.string);
1108
1109   if (! config.build_constructors)
1110     return TRUE;
1111
1112   ldctor_add_set_entry (h, reloc, NULL, section, value);
1113
1114   if (h->type == bfd_link_hash_new)
1115     {
1116       h->type = bfd_link_hash_undefined;
1117       h->u.undef.abfd = abfd;
1118       /* We don't call bfd_link_add_undef to add this to the list of
1119          undefined symbols because we are going to define it
1120          ourselves.  */
1121     }
1122
1123   return TRUE;
1124 }
1125
1126 /* This is called when BFD has discovered a constructor.  This is only
1127    called for some object file formats--those which do not handle
1128    constructors in some more clever fashion.  This is similar to
1129    adding an element to a set, but less general.  */
1130
1131 static bfd_boolean
1132 constructor_callback (struct bfd_link_info *info,
1133                       bfd_boolean constructor,
1134                       const char *name,
1135                       bfd *abfd,
1136                       asection *section,
1137                       bfd_vma value)
1138 {
1139   char *s;
1140   struct bfd_link_hash_entry *h;
1141   char set_name[1 + sizeof "__CTOR_LIST__"];
1142
1143   if (config.warn_constructors)
1144     einfo (_("%P: warning: global constructor %s used\n"), name);
1145
1146   if (! config.build_constructors)
1147     return TRUE;
1148
1149   /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1150      useful error message.  */
1151   if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
1152       && (info->relocatable
1153           || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1154     einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1155
1156   s = set_name;
1157   if (bfd_get_symbol_leading_char (abfd) != '\0')
1158     *s++ = bfd_get_symbol_leading_char (abfd);
1159   if (constructor)
1160     strcpy (s, "__CTOR_LIST__");
1161   else
1162     strcpy (s, "__DTOR_LIST__");
1163
1164   h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
1165   if (h == (struct bfd_link_hash_entry *) NULL)
1166     einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1167   if (h->type == bfd_link_hash_new)
1168     {
1169       h->type = bfd_link_hash_undefined;
1170       h->u.undef.abfd = abfd;
1171       /* We don't call bfd_link_add_undef to add this to the list of
1172          undefined symbols because we are going to define it
1173          ourselves.  */
1174     }
1175
1176   ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1177   return TRUE;
1178 }
1179
1180 /* A structure used by warning_callback to pass information through
1181    bfd_map_over_sections.  */
1182
1183 struct warning_callback_info
1184 {
1185   bfd_boolean found;
1186   const char *warning;
1187   const char *symbol;
1188   asymbol **asymbols;
1189 };
1190
1191 /* This is called when there is a reference to a warning symbol.  */
1192
1193 static bfd_boolean
1194 warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1195                   const char *warning,
1196                   const char *symbol,
1197                   bfd *abfd,
1198                   asection *section,
1199                   bfd_vma address)
1200 {
1201   /* This is a hack to support warn_multiple_gp.  FIXME: This should
1202      have a cleaner interface, but what?  */
1203   if (! config.warn_multiple_gp
1204       && strcmp (warning, "using multiple gp values") == 0)
1205     return TRUE;
1206
1207   if (section != NULL)
1208     einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
1209   else if (abfd == NULL)
1210     einfo ("%P: %s%s\n", _("warning: "), warning);
1211   else if (symbol == NULL)
1212     einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1213   else
1214     {
1215       lang_input_statement_type *entry;
1216       asymbol **asymbols;
1217       struct warning_callback_info info;
1218
1219       /* Look through the relocs to see if we can find a plausible
1220          address.  */
1221       entry = (lang_input_statement_type *) abfd->usrdata;
1222       if (entry != NULL && entry->asymbols != NULL)
1223         asymbols = entry->asymbols;
1224       else
1225         {
1226           long symsize;
1227           long symbol_count;
1228
1229           symsize = bfd_get_symtab_upper_bound (abfd);
1230           if (symsize < 0)
1231             einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1232           asymbols = xmalloc (symsize);
1233           symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1234           if (symbol_count < 0)
1235             einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1236           if (entry != NULL)
1237             {
1238               entry->asymbols = asymbols;
1239               entry->symbol_count = symbol_count;
1240             }
1241         }
1242
1243       info.found = FALSE;
1244       info.warning = warning;
1245       info.symbol = symbol;
1246       info.asymbols = asymbols;
1247       bfd_map_over_sections (abfd, warning_find_reloc, &info);
1248
1249       if (! info.found)
1250         einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1251
1252       if (entry == NULL)
1253         free (asymbols);
1254     }
1255
1256   return TRUE;
1257 }
1258
1259 /* This is called by warning_callback for each section.  It checks the
1260    relocs of the section to see if it can find a reference to the
1261    symbol which triggered the warning.  If it can, it uses the reloc
1262    to give an error message with a file and line number.  */
1263
1264 static void
1265 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
1266 {
1267   struct warning_callback_info *info = iarg;
1268   long relsize;
1269   arelent **relpp;
1270   long relcount;
1271   arelent **p, **pend;
1272
1273   if (info->found)
1274     return;
1275
1276   relsize = bfd_get_reloc_upper_bound (abfd, sec);
1277   if (relsize < 0)
1278     einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1279   if (relsize == 0)
1280     return;
1281
1282   relpp = xmalloc (relsize);
1283   relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1284   if (relcount < 0)
1285     einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1286
1287   p = relpp;
1288   pend = p + relcount;
1289   for (; p < pend && *p != NULL; p++)
1290     {
1291       arelent *q = *p;
1292
1293       if (q->sym_ptr_ptr != NULL
1294           && *q->sym_ptr_ptr != NULL
1295           && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1296         {
1297           /* We found a reloc for the symbol we are looking for.  */
1298           einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1299                  info->warning);
1300           info->found = TRUE;
1301           break;
1302         }
1303     }
1304
1305   free (relpp);
1306 }
1307
1308 /* This is called when an undefined symbol is found.  */
1309
1310 static bfd_boolean
1311 undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1312                   const char *name,
1313                   bfd *abfd,
1314                   asection *section,
1315                   bfd_vma address,
1316                   bfd_boolean error)
1317 {
1318   static char *error_name;
1319   static unsigned int error_count;
1320
1321 #define MAX_ERRORS_IN_A_ROW 5
1322
1323   if (config.warn_once)
1324     {
1325       static struct bfd_hash_table *hash;
1326
1327       /* Only warn once about a particular undefined symbol.  */
1328       if (hash == NULL)
1329         {
1330           hash = xmalloc (sizeof (struct bfd_hash_table));
1331           if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
1332                                     sizeof (struct bfd_hash_entry)))
1333             einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1334         }
1335
1336       if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1337         return TRUE;
1338
1339       if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
1340         einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1341     }
1342
1343   /* We never print more than a reasonable number of errors in a row
1344      for a single symbol.  */
1345   if (error_name != NULL
1346       && strcmp (name, error_name) == 0)
1347     ++error_count;
1348   else
1349     {
1350       error_count = 0;
1351       if (error_name != NULL)
1352         free (error_name);
1353       error_name = xstrdup (name);
1354     }
1355
1356   if (section != NULL)
1357     {
1358       if (error_count < MAX_ERRORS_IN_A_ROW)
1359         {
1360           if (error)
1361             einfo (_("%X%C: undefined reference to `%T'\n"),
1362                    abfd, section, address, name);
1363           else
1364             einfo (_("%C: warning: undefined reference to `%T'\n"),
1365                    abfd, section, address, name);
1366         }
1367       else if (error_count == MAX_ERRORS_IN_A_ROW)
1368         {
1369           if (error)
1370             einfo (_("%X%D: more undefined references to `%T' follow\n"),
1371                    abfd, section, address, name);
1372           else
1373             einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1374                    abfd, section, address, name);
1375         }
1376       else if (error)
1377         einfo ("%X");
1378     }
1379   else
1380     {
1381       if (error_count < MAX_ERRORS_IN_A_ROW)
1382         {
1383           if (error)
1384             einfo (_("%X%B: undefined reference to `%T'\n"),
1385                    abfd, name);
1386           else
1387             einfo (_("%B: warning: undefined reference to `%T'\n"),
1388                    abfd, name);
1389         }
1390       else if (error_count == MAX_ERRORS_IN_A_ROW)
1391         {
1392           if (error)
1393             einfo (_("%X%B: more undefined references to `%T' follow\n"),
1394                    abfd, name);
1395           else
1396             einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1397                    abfd, name);
1398         }
1399       else if (error)
1400         einfo ("%X");
1401     }
1402
1403   return TRUE;
1404 }
1405
1406 /* Counter to limit the number of relocation overflow error messages
1407    to print.  Errors are printed as it is decremented.  When it's
1408    called and the counter is zero, a final message is printed
1409    indicating more relocations were omitted.  When it gets to -1, no
1410    such errors are printed.  If it's initially set to a value less
1411    than -1, all such errors will be printed (--verbose does this).  */
1412
1413 int overflow_cutoff_limit = 10;
1414
1415 /* This is called when a reloc overflows.  */
1416
1417 static bfd_boolean
1418 reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1419                 struct bfd_link_hash_entry *entry,
1420                 const char *name,
1421                 const char *reloc_name,
1422                 bfd_vma addend,
1423                 bfd *abfd,
1424                 asection *section,
1425                 bfd_vma address)
1426 {
1427   if (overflow_cutoff_limit == -1)
1428     return TRUE;
1429
1430   einfo ("%X%C:", abfd, section, address);
1431
1432   if (overflow_cutoff_limit >= 0
1433       && overflow_cutoff_limit-- == 0)
1434     {
1435       einfo (_(" additional relocation overflows omitted from the output\n"));
1436       return TRUE;
1437     }
1438
1439   if (entry)
1440     {
1441       while (entry->type == bfd_link_hash_indirect
1442              || entry->type == bfd_link_hash_warning)
1443         entry = entry->u.i.link;
1444       switch (entry->type)
1445         {
1446         case bfd_link_hash_undefined:
1447         case bfd_link_hash_undefweak:
1448           einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1449                  reloc_name, entry->root.string);
1450           break;
1451         case bfd_link_hash_defined:
1452         case bfd_link_hash_defweak:
1453           einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1454                  reloc_name, entry->root.string,
1455                  entry->u.def.section,
1456                  entry->u.def.section == bfd_abs_section_ptr
1457                  ? link_info.output_bfd : entry->u.def.section->owner);
1458           break;
1459         default:
1460           abort ();
1461           break;
1462         }
1463     }
1464   else
1465     einfo (_(" relocation truncated to fit: %s against `%T'"),
1466            reloc_name, name);
1467   if (addend != 0)
1468     einfo ("+%v", addend);
1469   einfo ("\n");
1470   return TRUE;
1471 }
1472
1473 /* This is called when a dangerous relocation is made.  */
1474
1475 static bfd_boolean
1476 reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1477                  const char *message,
1478                  bfd *abfd,
1479                  asection *section,
1480                  bfd_vma address)
1481 {
1482   einfo (_("%X%C: dangerous relocation: %s\n"),
1483          abfd, section, address, message);
1484   return TRUE;
1485 }
1486
1487 /* This is called when a reloc is being generated attached to a symbol
1488    that is not being output.  */
1489
1490 static bfd_boolean
1491 unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1492                   const char *name,
1493                   bfd *abfd,
1494                   asection *section,
1495                   bfd_vma address)
1496 {
1497   einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1498          abfd, section, address, name);
1499   return TRUE;
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.  */
1505
1506 static bfd_boolean
1507 notice (struct bfd_link_info *info,
1508         const char *name,
1509         bfd *abfd,
1510         asection *section,
1511         bfd_vma value)
1512 {
1513   if (name == NULL)
1514     {
1515       if (command_line.cref || nocrossref_list != NULL)
1516         return handle_asneeded_cref (abfd, value);
1517       return TRUE;
1518     }
1519
1520   if (! info->notice_all
1521       || (info->notice_hash != NULL
1522           && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
1523     {
1524       if (bfd_is_und_section (section))
1525         einfo ("%B: reference to %s\n", abfd, name);
1526       else
1527         einfo ("%B: definition of %s\n", abfd, name);
1528     }
1529
1530   if (command_line.cref || nocrossref_list != NULL)
1531     add_cref (name, abfd, section, value);
1532
1533   return TRUE;
1534 }