OSDN Git Service

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