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