PR 3134
[binutils.git] / ld / ldmain.c
blobdd7b7fe171499a0d24983d37dbaf5d319e1bf571
1 /* Main program of GNU linker.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 Free Software Foundation, Inc.
5 Written by Steve Chamberlain steve@cygnus.com
7 This file is part of the GNU Binutils.
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.
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.
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. */
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"
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"
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
49 #include <string.h>
51 #ifdef HAVE_SBRK
52 #if !HAVE_DECL_SBRK
53 extern void *sbrk ();
54 #endif
55 #endif
57 #ifndef TARGET_SYSTEM_ROOT
58 #define TARGET_SYSTEM_ROOT ""
59 #endif
61 /* EXPORTS */
63 FILE *saved_script_handle = NULL;
64 FILE *previous_script_handle = NULL;
65 bfd_boolean force_make_executable = FALSE;
67 char *default_target;
68 const char *output_filename = "a.out";
70 /* Name this program was invoked by. */
71 char *program_name;
73 /* The prefix for system library directories. */
74 const char *ld_sysroot;
76 /* The canonical representation of ld_sysroot. */
77 char * ld_canon_sysroot;
78 int ld_canon_sysroot_len;
80 /* Set by -G argument, for MIPS ECOFF target. */
81 int g_switch_value = 8;
83 /* Nonzero means print names of input files as processed. */
84 bfd_boolean trace_files;
86 /* Nonzero means same, but note open failures, too. */
87 bfd_boolean trace_file_tries;
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;
93 /* Nonzero means link in every member of an archive. */
94 bfd_boolean whole_archive;
96 /* Nonzero means create DT_NEEDED entries only if a dynamic library
97 actually satisfies some reference in a regular object. */
98 bfd_boolean as_needed;
100 /* Nonzero means never create DT_NEEDED entries for dynamic libraries
101 in DT_NEEDED tags. */
102 bfd_boolean add_needed = TRUE;
104 /* TRUE if we should demangle symbol names. */
105 bfd_boolean demangling;
107 args_type command_line;
109 ld_config_type config;
111 sort_type sort_section;
113 static const char *get_sysroot
114 (int, char **);
115 static char *get_emulation
116 (int, char **);
117 static void set_scripts_dir
118 (void);
119 static bfd_boolean add_archive_element
120 (struct bfd_link_info *, bfd *, const char *);
121 static bfd_boolean multiple_definition
122 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
123 bfd *, asection *, bfd_vma);
124 static bfd_boolean multiple_common
125 (struct bfd_link_info *, const char *, bfd *, enum bfd_link_hash_type,
126 bfd_vma, bfd *, enum bfd_link_hash_type, bfd_vma);
127 static bfd_boolean add_to_set
128 (struct bfd_link_info *, struct bfd_link_hash_entry *,
129 bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
130 static bfd_boolean constructor_callback
131 (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
132 asection *, bfd_vma);
133 static bfd_boolean warning_callback
134 (struct bfd_link_info *, const char *, const char *, bfd *,
135 asection *, bfd_vma);
136 static void warning_find_reloc
137 (bfd *, asection *, void *);
138 static bfd_boolean undefined_symbol
139 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
140 bfd_boolean);
141 static bfd_boolean reloc_overflow
142 (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
143 const char *, bfd_vma, bfd *, asection *, bfd_vma);
144 static bfd_boolean reloc_dangerous
145 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
146 static bfd_boolean unattached_reloc
147 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
148 static bfd_boolean notice
149 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
151 static struct bfd_link_callbacks link_callbacks =
153 add_archive_element,
154 multiple_definition,
155 multiple_common,
156 add_to_set,
157 constructor_callback,
158 warning_callback,
159 undefined_symbol,
160 reloc_overflow,
161 reloc_dangerous,
162 unattached_reloc,
163 notice,
164 einfo,
165 info_msg,
166 minfo,
167 ldlang_override_segment_assignment
170 struct bfd_link_info link_info;
172 static void
173 remove_output (void)
175 if (output_filename)
177 if (link_info.output_bfd)
178 bfd_cache_close (link_info.output_bfd);
179 if (delete_output_file_on_failure)
180 unlink_if_ordinary (output_filename);
185 main (int argc, char **argv)
187 char *emulation;
188 long start_time = get_run_time ();
190 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
191 setlocale (LC_MESSAGES, "");
192 #endif
193 #if defined (HAVE_SETLOCALE)
194 setlocale (LC_CTYPE, "");
195 #endif
196 bindtextdomain (PACKAGE, LOCALEDIR);
197 textdomain (PACKAGE);
199 program_name = argv[0];
200 xmalloc_set_program_name (program_name);
202 START_PROGRESS (program_name, 0);
204 expandargv (&argc, &argv);
206 bfd_init ();
208 bfd_set_error_program_name (program_name);
210 xatexit (remove_output);
212 /* Set up the sysroot directory. */
213 ld_sysroot = get_sysroot (argc, argv);
214 if (*ld_sysroot)
216 if (*TARGET_SYSTEM_ROOT == 0)
218 einfo ("%P%F: this linker was not configured to use sysroots\n");
219 ld_sysroot = "";
221 else
222 ld_canon_sysroot = lrealpath (ld_sysroot);
224 if (ld_canon_sysroot)
225 ld_canon_sysroot_len = strlen (ld_canon_sysroot);
226 else
227 ld_canon_sysroot_len = -1;
229 /* Set the default BFD target based on the configured target. Doing
230 this permits the linker to be configured for a particular target,
231 and linked against a shared BFD library which was configured for
232 a different target. The macro TARGET is defined by Makefile. */
233 if (! bfd_set_default_target (TARGET))
235 einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
236 xexit (1);
239 #if YYDEBUG
241 extern int yydebug;
242 yydebug = 1;
244 #endif
246 config.build_constructors = TRUE;
247 config.rpath_separator = ':';
248 config.split_by_reloc = (unsigned) -1;
249 config.split_by_file = (bfd_size_type) -1;
250 config.make_executable = TRUE;
251 config.magic_demand_paged = TRUE;
252 config.text_read_only = TRUE;
254 command_line.warn_mismatch = TRUE;
255 command_line.warn_search_mismatch = TRUE;
256 command_line.check_section_addresses = TRUE;
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;
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;
280 ldfile_add_arch ("");
281 emulation = get_emulation (argc, argv);
282 ldemul_choose_mode (emulation);
283 default_target = ldemul_choose_target (argc, argv);
284 lang_init ();
285 ldemul_before_parse ();
286 lang_has_input_file = FALSE;
287 parse_args (argc, argv);
289 if (config.hash_table_size != 0)
290 bfd_hash_set_default_size (config.hash_table_size);
292 ldemul_set_symbols ();
294 if (link_info.relocatable)
296 if (command_line.relax)
297 einfo (_("%P%F: --relax and -r may not be used together\n"));
298 if (link_info.shared)
299 einfo (_("%P%F: -r and -shared may not be used together\n"));
302 /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data,
303 --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and
304 --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are
305 for shared libraries. -Bsymbolic overrides all others and vice
306 versa. */
307 switch (command_line.symbolic)
309 case symbolic_unset:
310 break;
311 case symbolic:
312 /* -Bsymbolic is for shared library only. */
313 if (link_info.shared)
315 link_info.symbolic = TRUE;
316 /* Should we free the unused memory? */
317 link_info.dynamic_list = NULL;
318 command_line.dynamic_list = dynamic_list_unset;
320 break;
321 case symbolic_functions:
322 /* -Bsymbolic-functions is for shared library only. */
323 if (link_info.shared)
324 command_line.dynamic_list = dynamic_list_data;
325 break;
328 switch (command_line.dynamic_list)
330 case dynamic_list_unset:
331 break;
332 case dynamic_list_data:
333 link_info.dynamic_data = TRUE;
334 case dynamic_list:
335 link_info.dynamic = TRUE;
336 break;
339 if (! link_info.shared)
341 if (command_line.filter_shlib)
342 einfo (_("%P%F: -F may not be used without -shared\n"));
343 if (command_line.auxiliary_filters)
344 einfo (_("%P%F: -f may not be used without -shared\n"));
347 if (! link_info.shared || link_info.pie)
348 link_info.executable = TRUE;
350 /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
351 don't see how else this can be handled, since in this case we
352 must preserve all externally visible symbols. */
353 if (link_info.relocatable && link_info.strip == strip_all)
355 link_info.strip = strip_debugger;
356 if (link_info.discard == discard_sec_merge)
357 link_info.discard = discard_all;
360 /* This essentially adds another -L directory so this must be done after
361 the -L's in argv have been processed. */
362 set_scripts_dir ();
364 /* If we have not already opened and parsed a linker script,
365 try the default script from command line first. */
366 if (saved_script_handle == NULL
367 && command_line.default_script != NULL)
369 ldfile_open_command_file (command_line.default_script);
370 parser_input = input_script;
371 yyparse ();
374 /* If we have not already opened and parsed a linker script
375 read the emulation's appropriate default script. */
376 if (saved_script_handle == NULL)
378 int isfile;
379 char *s = ldemul_get_script (&isfile);
381 if (isfile)
382 ldfile_open_command_file (s);
383 else
385 lex_string = s;
386 lex_redirect (s);
388 parser_input = input_script;
389 yyparse ();
390 lex_string = NULL;
393 if (trace_file_tries)
395 if (saved_script_handle)
396 info_msg (_("using external linker script:"));
397 else
398 info_msg (_("using internal linker script:"));
399 info_msg ("\n==================================================\n");
401 if (saved_script_handle)
403 static const int ld_bufsz = 8193;
404 size_t n;
405 char *buf = xmalloc (ld_bufsz);
407 rewind (saved_script_handle);
408 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
410 buf[n] = 0;
411 info_msg (buf);
413 rewind (saved_script_handle);
414 free (buf);
416 else
418 int isfile;
420 info_msg (ldemul_get_script (&isfile));
423 info_msg ("\n==================================================\n");
426 lang_final ();
428 if (!lang_has_input_file)
430 if (version_printed)
431 xexit (0);
432 einfo (_("%P%F: no input files\n"));
435 if (trace_files)
436 info_msg (_("%P: mode %s\n"), emulation);
438 ldemul_after_parse ();
440 if (config.map_filename)
442 if (strcmp (config.map_filename, "-") == 0)
444 config.map_file = stdout;
446 else
448 config.map_file = fopen (config.map_filename, FOPEN_WT);
449 if (config.map_file == (FILE *) NULL)
451 bfd_set_error (bfd_error_system_call);
452 einfo (_("%P%F: cannot open map file %s: %E\n"),
453 config.map_filename);
458 lang_process ();
460 /* Print error messages for any missing symbols, for any warning
461 symbols, and possibly multiple definitions. */
462 if (link_info.relocatable)
463 link_info.output_bfd->flags &= ~EXEC_P;
464 else
465 link_info.output_bfd->flags |= EXEC_P;
467 ldwrite ();
469 if (config.map_file != NULL)
470 lang_map ();
471 if (command_line.cref)
472 output_cref (config.map_file != NULL ? config.map_file : stdout);
473 if (nocrossref_list != NULL)
474 check_nocrossrefs ();
476 lang_finish ();
478 /* Even if we're producing relocatable output, some non-fatal errors should
479 be reported in the exit status. (What non-fatal errors, if any, do we
480 want to ignore for relocatable output?) */
481 if (!config.make_executable && !force_make_executable)
483 if (trace_files)
484 einfo (_("%P: link errors found, deleting executable `%s'\n"),
485 output_filename);
487 /* The file will be removed by remove_output. */
488 xexit (1);
490 else
492 if (! bfd_close (link_info.output_bfd))
493 einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd);
495 /* If the --force-exe-suffix is enabled, and we're making an
496 executable file and it doesn't end in .exe, copy it to one
497 which does. */
498 if (! link_info.relocatable && command_line.force_exe_suffix)
500 int len = strlen (output_filename);
502 if (len < 4
503 || (strcasecmp (output_filename + len - 4, ".exe") != 0
504 && strcasecmp (output_filename + len - 4, ".dll") != 0))
506 FILE *src;
507 FILE *dst;
508 const int bsize = 4096;
509 char *buf = xmalloc (bsize);
510 int l;
511 char *dst_name = xmalloc (len + 5);
513 strcpy (dst_name, output_filename);
514 strcat (dst_name, ".exe");
515 src = fopen (output_filename, FOPEN_RB);
516 dst = fopen (dst_name, FOPEN_WB);
518 if (!src)
519 einfo (_("%X%P: unable to open for source of copy `%s'\n"),
520 output_filename);
521 if (!dst)
522 einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
523 dst_name);
524 while ((l = fread (buf, 1, bsize, src)) > 0)
526 int done = fwrite (buf, 1, l, dst);
528 if (done != l)
529 einfo (_("%P: Error writing file `%s'\n"), dst_name);
532 fclose (src);
533 if (fclose (dst) == EOF)
534 einfo (_("%P: Error closing file `%s'\n"), dst_name);
535 free (dst_name);
536 free (buf);
541 END_PROGRESS (program_name);
543 if (config.stats)
545 #ifdef HAVE_SBRK
546 char *lim = sbrk (0);
547 #endif
548 long run_time = get_run_time () - start_time;
550 fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
551 program_name, run_time / 1000000, run_time % 1000000);
552 #ifdef HAVE_SBRK
553 fprintf (stderr, _("%s: data size %ld\n"), program_name,
554 (long) (lim - (char *) &environ));
555 #endif
558 /* Prevent remove_output from doing anything, after a successful link. */
559 output_filename = NULL;
561 xexit (0);
562 return 0;
565 /* If the configured sysroot is relocatable, try relocating it based on
566 default prefix FROM. Return the relocated directory if it exists,
567 otherwise return null. */
569 static char *
570 get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
572 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
573 char *path;
574 struct stat s;
576 path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
577 if (path)
579 if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
580 return path;
581 free (path);
583 #endif
584 return 0;
587 /* Return the sysroot directory. Return "" if no sysroot is being used. */
589 static const char *
590 get_sysroot (int argc, char **argv)
592 int i;
593 const char *path;
595 for (i = 1; i < argc; i++)
596 if (CONST_STRNEQ (argv[i], "--sysroot="))
597 return argv[i] + strlen ("--sysroot=");
599 path = get_relative_sysroot (BINDIR);
600 if (path)
601 return path;
603 path = get_relative_sysroot (TOOLBINDIR);
604 if (path)
605 return path;
607 return TARGET_SYSTEM_ROOT;
610 /* We need to find any explicitly given emulation in order to initialize the
611 state that's needed by the lex&yacc argument parser (parse_args). */
613 static char *
614 get_emulation (int argc, char **argv)
616 char *emulation;
617 int i;
619 emulation = getenv (EMULATION_ENVIRON);
620 if (emulation == NULL)
621 emulation = DEFAULT_EMULATION;
623 for (i = 1; i < argc; i++)
625 if (CONST_STRNEQ (argv[i], "-m"))
627 if (argv[i][2] == '\0')
629 /* -m EMUL */
630 if (i < argc - 1)
632 emulation = argv[i + 1];
633 i++;
635 else
636 einfo (_("%P%F: missing argument to -m\n"));
638 else if (strcmp (argv[i], "-mips1") == 0
639 || strcmp (argv[i], "-mips2") == 0
640 || strcmp (argv[i], "-mips3") == 0
641 || strcmp (argv[i], "-mips4") == 0
642 || strcmp (argv[i], "-mips5") == 0
643 || strcmp (argv[i], "-mips32") == 0
644 || strcmp (argv[i], "-mips32r2") == 0
645 || strcmp (argv[i], "-mips64") == 0
646 || strcmp (argv[i], "-mips64r2") == 0)
648 /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
649 passed to the linker by some MIPS compilers. They
650 generally tell the linker to use a slightly different
651 library path. Perhaps someday these should be
652 implemented as emulations; until then, we just ignore
653 the arguments and hope that nobody ever creates
654 emulations named ips1, ips2 or ips3. */
656 else if (strcmp (argv[i], "-m486") == 0)
658 /* FIXME: The argument -m486 is passed to the linker on
659 some Linux systems. Hope that nobody creates an
660 emulation named 486. */
662 else
664 /* -mEMUL */
665 emulation = &argv[i][2];
670 return emulation;
673 /* If directory DIR contains an "ldscripts" subdirectory,
674 add DIR to the library search path and return TRUE,
675 else return FALSE. */
677 static bfd_boolean
678 check_for_scripts_dir (char *dir)
680 size_t dirlen;
681 char *buf;
682 struct stat s;
683 bfd_boolean res;
685 dirlen = strlen (dir);
686 /* sizeof counts the terminating NUL. */
687 buf = xmalloc (dirlen + sizeof ("/ldscripts"));
688 sprintf (buf, "%s/ldscripts", dir);
690 res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
691 free (buf);
692 if (res)
693 ldfile_add_library_path (dir, FALSE);
694 return res;
697 /* Set the default directory for finding script files.
698 Libraries will be searched for here too, but that's ok.
699 We look for the "ldscripts" directory in:
701 SCRIPTDIR (passed from Makefile)
702 (adjusted according to the current location of the binary)
703 SCRIPTDIR (passed from Makefile)
704 the dir where this program is (for using it from the build tree)
705 the dir where this program is/../lib
706 (for installing the tool suite elsewhere). */
708 static void
709 set_scripts_dir (void)
711 char *end, *dir;
712 size_t dirlen;
713 bfd_boolean found;
715 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
716 if (dir)
718 found = check_for_scripts_dir (dir);
719 free (dir);
720 if (found)
721 return;
724 dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
725 if (dir)
727 found = check_for_scripts_dir (dir);
728 free (dir);
729 if (found)
730 return;
733 if (check_for_scripts_dir (SCRIPTDIR))
734 /* We've been installed normally. */
735 return;
737 /* Look for "ldscripts" in the dir where our binary is. */
738 end = strrchr (program_name, '/');
739 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
741 /* We could have \foo\bar, or /foo\bar. */
742 char *bslash = strrchr (program_name, '\\');
744 if (end == NULL || (bslash != NULL && bslash > end))
745 end = bslash;
747 #endif
749 if (end == NULL)
750 /* Don't look for ldscripts in the current directory. There is
751 too much potential for confusion. */
752 return;
754 dirlen = end - program_name;
755 /* Make a copy of program_name in dir.
756 Leave room for later "/../lib". */
757 dir = xmalloc (dirlen + 8);
758 strncpy (dir, program_name, dirlen);
759 dir[dirlen] = '\0';
761 if (check_for_scripts_dir (dir))
763 free (dir);
764 return;
767 /* Look for "ldscripts" in <the dir where our binary is>/../lib. */
768 strcpy (dir + dirlen, "/../lib");
769 check_for_scripts_dir (dir);
770 free (dir);
773 void
774 add_ysym (const char *name)
776 if (link_info.notice_hash == NULL)
778 link_info.notice_hash = xmalloc (sizeof (struct bfd_hash_table));
779 if (!bfd_hash_table_init_n (link_info.notice_hash,
780 bfd_hash_newfunc,
781 sizeof (struct bfd_hash_entry),
782 61))
783 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
786 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
787 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
790 /* Record a symbol to be wrapped, from the --wrap option. */
792 void
793 add_wrap (const char *name)
795 if (link_info.wrap_hash == NULL)
797 link_info.wrap_hash = xmalloc (sizeof (struct bfd_hash_table));
798 if (!bfd_hash_table_init_n (link_info.wrap_hash,
799 bfd_hash_newfunc,
800 sizeof (struct bfd_hash_entry),
801 61))
802 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
805 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
806 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
809 /* Handle the -retain-symbols-file option. */
811 void
812 add_keepsyms_file (const char *filename)
814 FILE *file;
815 char *buf;
816 size_t bufsize;
817 int c;
819 if (link_info.strip == strip_some)
820 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
822 file = fopen (filename, "r");
823 if (file == NULL)
825 bfd_set_error (bfd_error_system_call);
826 einfo ("%X%P: %s: %E\n", filename);
827 return;
830 link_info.keep_hash = xmalloc (sizeof (struct bfd_hash_table));
831 if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
832 sizeof (struct bfd_hash_entry)))
833 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
835 bufsize = 100;
836 buf = xmalloc (bufsize);
838 c = getc (file);
839 while (c != EOF)
841 while (ISSPACE (c))
842 c = getc (file);
844 if (c != EOF)
846 size_t len = 0;
848 while (! ISSPACE (c) && c != EOF)
850 buf[len] = c;
851 ++len;
852 if (len >= bufsize)
854 bufsize *= 2;
855 buf = xrealloc (buf, bufsize);
857 c = getc (file);
860 buf[len] = '\0';
862 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
863 einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
867 if (link_info.strip != strip_none)
868 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
870 free (buf);
871 link_info.strip = strip_some;
874 /* Callbacks from the BFD linker routines. */
876 /* This is called when BFD has decided to include an archive member in
877 a link. */
879 static bfd_boolean
880 add_archive_element (struct bfd_link_info *info,
881 bfd *abfd,
882 const char *name)
884 lang_input_statement_type *input;
886 input = xmalloc (sizeof (lang_input_statement_type));
887 input->filename = abfd->filename;
888 input->local_sym_name = abfd->filename;
889 input->the_bfd = abfd;
890 input->asymbols = NULL;
891 input->next = NULL;
892 input->just_syms_flag = FALSE;
893 input->loaded = FALSE;
894 input->search_dirs_flag = FALSE;
896 /* FIXME: The following fields are not set: header.next,
897 header.type, closed, passive_position, symbol_count,
898 next_real_file, is_archive, target, real. This bit of code is
899 from the old decode_library_subfile function. I don't know
900 whether any of those fields matters. */
902 ldlang_add_file (input);
904 if (config.map_file != NULL)
906 static bfd_boolean header_printed;
907 struct bfd_link_hash_entry *h;
908 bfd *from;
909 int len;
911 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
913 if (h == NULL)
914 from = NULL;
915 else
917 switch (h->type)
919 default:
920 from = NULL;
921 break;
923 case bfd_link_hash_defined:
924 case bfd_link_hash_defweak:
925 from = h->u.def.section->owner;
926 break;
928 case bfd_link_hash_undefined:
929 case bfd_link_hash_undefweak:
930 from = h->u.undef.abfd;
931 break;
933 case bfd_link_hash_common:
934 from = h->u.c.p->section->owner;
935 break;
939 if (! header_printed)
941 char buf[100];
943 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
944 minfo ("%s", buf);
945 header_printed = TRUE;
948 if (bfd_my_archive (abfd) == NULL)
950 minfo ("%s", bfd_get_filename (abfd));
951 len = strlen (bfd_get_filename (abfd));
953 else
955 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
956 bfd_get_filename (abfd));
957 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
958 + strlen (bfd_get_filename (abfd))
959 + 2);
962 if (len >= 29)
964 print_nl ();
965 len = 0;
967 while (len < 30)
969 print_space ();
970 ++len;
973 if (from != NULL)
974 minfo ("%B ", from);
975 if (h != NULL)
976 minfo ("(%T)\n", h->root.string);
977 else
978 minfo ("(%s)\n", name);
981 if (trace_files || trace_file_tries)
982 info_msg ("%I\n", input);
984 return TRUE;
987 /* This is called when BFD has discovered a symbol which is defined
988 multiple times. */
990 static bfd_boolean
991 multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
992 const char *name,
993 bfd *obfd,
994 asection *osec,
995 bfd_vma oval,
996 bfd *nbfd,
997 asection *nsec,
998 bfd_vma nval)
1000 /* If either section has the output_section field set to
1001 bfd_abs_section_ptr, it means that the section is being
1002 discarded, and this is not really a multiple definition at all.
1003 FIXME: It would be cleaner to somehow ignore symbols defined in
1004 sections which are being discarded. */
1005 if ((osec->output_section != NULL
1006 && ! bfd_is_abs_section (osec)
1007 && bfd_is_abs_section (osec->output_section))
1008 || (nsec->output_section != NULL
1009 && ! bfd_is_abs_section (nsec)
1010 && bfd_is_abs_section (nsec->output_section)))
1011 return TRUE;
1013 einfo (_("%X%C: multiple definition of `%T'\n"),
1014 nbfd, nsec, nval, name);
1015 if (obfd != NULL)
1016 einfo (_("%D: first defined here\n"), obfd, osec, oval);
1018 if (command_line.relax)
1020 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
1021 command_line.relax = 0;
1024 return TRUE;
1027 /* This is called when there is a definition of a common symbol, or
1028 when a common symbol is found for a symbol that is already defined,
1029 or when two common symbols are found. We only do something if
1030 -warn-common was used. */
1032 static bfd_boolean
1033 multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1034 const char *name,
1035 bfd *obfd,
1036 enum bfd_link_hash_type otype,
1037 bfd_vma osize,
1038 bfd *nbfd,
1039 enum bfd_link_hash_type ntype,
1040 bfd_vma nsize)
1042 if (! config.warn_common)
1043 return TRUE;
1045 if (ntype == bfd_link_hash_defined
1046 || ntype == bfd_link_hash_defweak
1047 || ntype == bfd_link_hash_indirect)
1049 ASSERT (otype == bfd_link_hash_common);
1050 einfo (_("%B: warning: definition of `%T' overriding common\n"),
1051 nbfd, name);
1052 if (obfd != NULL)
1053 einfo (_("%B: warning: common is here\n"), obfd);
1055 else if (otype == bfd_link_hash_defined
1056 || otype == bfd_link_hash_defweak
1057 || otype == bfd_link_hash_indirect)
1059 ASSERT (ntype == bfd_link_hash_common);
1060 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
1061 nbfd, name);
1062 if (obfd != NULL)
1063 einfo (_("%B: warning: defined here\n"), obfd);
1065 else
1067 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1068 if (osize > nsize)
1070 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
1071 nbfd, name);
1072 if (obfd != NULL)
1073 einfo (_("%B: warning: larger common is here\n"), obfd);
1075 else if (nsize > osize)
1077 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
1078 nbfd, name);
1079 if (obfd != NULL)
1080 einfo (_("%B: warning: smaller common is here\n"), obfd);
1082 else
1084 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
1085 if (obfd != NULL)
1086 einfo (_("%B: warning: previous common is here\n"), obfd);
1090 return TRUE;
1093 /* This is called when BFD has discovered a set element. H is the
1094 entry in the linker hash table for the set. SECTION and VALUE
1095 represent a value which should be added to the set. */
1097 static bfd_boolean
1098 add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1099 struct bfd_link_hash_entry *h,
1100 bfd_reloc_code_real_type reloc,
1101 bfd *abfd,
1102 asection *section,
1103 bfd_vma value)
1105 if (config.warn_constructors)
1106 einfo (_("%P: warning: global constructor %s used\n"),
1107 h->root.string);
1109 if (! config.build_constructors)
1110 return TRUE;
1112 ldctor_add_set_entry (h, reloc, NULL, section, value);
1114 if (h->type == bfd_link_hash_new)
1116 h->type = bfd_link_hash_undefined;
1117 h->u.undef.abfd = abfd;
1118 /* We don't call bfd_link_add_undef to add this to the list of
1119 undefined symbols because we are going to define it
1120 ourselves. */
1123 return TRUE;
1126 /* This is called when BFD has discovered a constructor. This is only
1127 called for some object file formats--those which do not handle
1128 constructors in some more clever fashion. This is similar to
1129 adding an element to a set, but less general. */
1131 static bfd_boolean
1132 constructor_callback (struct bfd_link_info *info,
1133 bfd_boolean constructor,
1134 const char *name,
1135 bfd *abfd,
1136 asection *section,
1137 bfd_vma value)
1139 char *s;
1140 struct bfd_link_hash_entry *h;
1141 char set_name[1 + sizeof "__CTOR_LIST__"];
1143 if (config.warn_constructors)
1144 einfo (_("%P: warning: global constructor %s used\n"), name);
1146 if (! config.build_constructors)
1147 return TRUE;
1149 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1150 useful error message. */
1151 if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
1152 && (info->relocatable
1153 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1154 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1156 s = set_name;
1157 if (bfd_get_symbol_leading_char (abfd) != '\0')
1158 *s++ = bfd_get_symbol_leading_char (abfd);
1159 if (constructor)
1160 strcpy (s, "__CTOR_LIST__");
1161 else
1162 strcpy (s, "__DTOR_LIST__");
1164 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
1165 if (h == (struct bfd_link_hash_entry *) NULL)
1166 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1167 if (h->type == bfd_link_hash_new)
1169 h->type = bfd_link_hash_undefined;
1170 h->u.undef.abfd = abfd;
1171 /* We don't call bfd_link_add_undef to add this to the list of
1172 undefined symbols because we are going to define it
1173 ourselves. */
1176 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1177 return TRUE;
1180 /* A structure used by warning_callback to pass information through
1181 bfd_map_over_sections. */
1183 struct warning_callback_info
1185 bfd_boolean found;
1186 const char *warning;
1187 const char *symbol;
1188 asymbol **asymbols;
1191 /* This is called when there is a reference to a warning symbol. */
1193 static bfd_boolean
1194 warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1195 const char *warning,
1196 const char *symbol,
1197 bfd *abfd,
1198 asection *section,
1199 bfd_vma address)
1201 /* This is a hack to support warn_multiple_gp. FIXME: This should
1202 have a cleaner interface, but what? */
1203 if (! config.warn_multiple_gp
1204 && strcmp (warning, "using multiple gp values") == 0)
1205 return TRUE;
1207 if (section != NULL)
1208 einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
1209 else if (abfd == NULL)
1210 einfo ("%P: %s%s\n", _("warning: "), warning);
1211 else if (symbol == NULL)
1212 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1213 else
1215 lang_input_statement_type *entry;
1216 asymbol **asymbols;
1217 struct warning_callback_info info;
1219 /* Look through the relocs to see if we can find a plausible
1220 address. */
1221 entry = (lang_input_statement_type *) abfd->usrdata;
1222 if (entry != NULL && entry->asymbols != NULL)
1223 asymbols = entry->asymbols;
1224 else
1226 long symsize;
1227 long symbol_count;
1229 symsize = bfd_get_symtab_upper_bound (abfd);
1230 if (symsize < 0)
1231 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1232 asymbols = xmalloc (symsize);
1233 symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1234 if (symbol_count < 0)
1235 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1236 if (entry != NULL)
1238 entry->asymbols = asymbols;
1239 entry->symbol_count = symbol_count;
1243 info.found = FALSE;
1244 info.warning = warning;
1245 info.symbol = symbol;
1246 info.asymbols = asymbols;
1247 bfd_map_over_sections (abfd, warning_find_reloc, &info);
1249 if (! info.found)
1250 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1252 if (entry == NULL)
1253 free (asymbols);
1256 return TRUE;
1259 /* This is called by warning_callback for each section. It checks the
1260 relocs of the section to see if it can find a reference to the
1261 symbol which triggered the warning. If it can, it uses the reloc
1262 to give an error message with a file and line number. */
1264 static void
1265 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
1267 struct warning_callback_info *info = iarg;
1268 long relsize;
1269 arelent **relpp;
1270 long relcount;
1271 arelent **p, **pend;
1273 if (info->found)
1274 return;
1276 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1277 if (relsize < 0)
1278 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1279 if (relsize == 0)
1280 return;
1282 relpp = xmalloc (relsize);
1283 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1284 if (relcount < 0)
1285 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1287 p = relpp;
1288 pend = p + relcount;
1289 for (; p < pend && *p != NULL; p++)
1291 arelent *q = *p;
1293 if (q->sym_ptr_ptr != NULL
1294 && *q->sym_ptr_ptr != NULL
1295 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1297 /* We found a reloc for the symbol we are looking for. */
1298 einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1299 info->warning);
1300 info->found = TRUE;
1301 break;
1305 free (relpp);
1308 /* This is called when an undefined symbol is found. */
1310 static bfd_boolean
1311 undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1312 const char *name,
1313 bfd *abfd,
1314 asection *section,
1315 bfd_vma address,
1316 bfd_boolean error)
1318 static char *error_name;
1319 static unsigned int error_count;
1321 #define MAX_ERRORS_IN_A_ROW 5
1323 if (config.warn_once)
1325 static struct bfd_hash_table *hash;
1327 /* Only warn once about a particular undefined symbol. */
1328 if (hash == NULL)
1330 hash = xmalloc (sizeof (struct bfd_hash_table));
1331 if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
1332 sizeof (struct bfd_hash_entry)))
1333 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1336 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1337 return TRUE;
1339 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
1340 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1343 /* We never print more than a reasonable number of errors in a row
1344 for a single symbol. */
1345 if (error_name != NULL
1346 && strcmp (name, error_name) == 0)
1347 ++error_count;
1348 else
1350 error_count = 0;
1351 if (error_name != NULL)
1352 free (error_name);
1353 error_name = xstrdup (name);
1356 if (section != NULL)
1358 if (error_count < MAX_ERRORS_IN_A_ROW)
1360 if (error)
1361 einfo (_("%X%C: undefined reference to `%T'\n"),
1362 abfd, section, address, name);
1363 else
1364 einfo (_("%C: warning: undefined reference to `%T'\n"),
1365 abfd, section, address, name);
1367 else if (error_count == MAX_ERRORS_IN_A_ROW)
1369 if (error)
1370 einfo (_("%X%D: more undefined references to `%T' follow\n"),
1371 abfd, section, address, name);
1372 else
1373 einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1374 abfd, section, address, name);
1376 else if (error)
1377 einfo ("%X");
1379 else
1381 if (error_count < MAX_ERRORS_IN_A_ROW)
1383 if (error)
1384 einfo (_("%X%B: undefined reference to `%T'\n"),
1385 abfd, name);
1386 else
1387 einfo (_("%B: warning: undefined reference to `%T'\n"),
1388 abfd, name);
1390 else if (error_count == MAX_ERRORS_IN_A_ROW)
1392 if (error)
1393 einfo (_("%X%B: more undefined references to `%T' follow\n"),
1394 abfd, name);
1395 else
1396 einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1397 abfd, name);
1399 else if (error)
1400 einfo ("%X");
1403 return TRUE;
1406 /* Counter to limit the number of relocation overflow error messages
1407 to print. Errors are printed as it is decremented. When it's
1408 called and the counter is zero, a final message is printed
1409 indicating more relocations were omitted. When it gets to -1, no
1410 such errors are printed. If it's initially set to a value less
1411 than -1, all such errors will be printed (--verbose does this). */
1413 int overflow_cutoff_limit = 10;
1415 /* This is called when a reloc overflows. */
1417 static bfd_boolean
1418 reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1419 struct bfd_link_hash_entry *entry,
1420 const char *name,
1421 const char *reloc_name,
1422 bfd_vma addend,
1423 bfd *abfd,
1424 asection *section,
1425 bfd_vma address)
1427 if (overflow_cutoff_limit == -1)
1428 return TRUE;
1430 einfo ("%X%C:", abfd, section, address);
1432 if (overflow_cutoff_limit >= 0
1433 && overflow_cutoff_limit-- == 0)
1435 einfo (_(" additional relocation overflows omitted from the output\n"));
1436 return TRUE;
1439 if (entry)
1441 while (entry->type == bfd_link_hash_indirect
1442 || entry->type == bfd_link_hash_warning)
1443 entry = entry->u.i.link;
1444 switch (entry->type)
1446 case bfd_link_hash_undefined:
1447 case bfd_link_hash_undefweak:
1448 einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1449 reloc_name, entry->root.string);
1450 break;
1451 case bfd_link_hash_defined:
1452 case bfd_link_hash_defweak:
1453 einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1454 reloc_name, entry->root.string,
1455 entry->u.def.section,
1456 entry->u.def.section == bfd_abs_section_ptr
1457 ? link_info.output_bfd : entry->u.def.section->owner);
1458 break;
1459 default:
1460 abort ();
1461 break;
1464 else
1465 einfo (_(" relocation truncated to fit: %s against `%T'"),
1466 reloc_name, name);
1467 if (addend != 0)
1468 einfo ("+%v", addend);
1469 einfo ("\n");
1470 return TRUE;
1473 /* This is called when a dangerous relocation is made. */
1475 static bfd_boolean
1476 reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1477 const char *message,
1478 bfd *abfd,
1479 asection *section,
1480 bfd_vma address)
1482 einfo (_("%X%C: dangerous relocation: %s\n"),
1483 abfd, section, address, message);
1484 return TRUE;
1487 /* This is called when a reloc is being generated attached to a symbol
1488 that is not being output. */
1490 static bfd_boolean
1491 unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1492 const char *name,
1493 bfd *abfd,
1494 asection *section,
1495 bfd_vma address)
1497 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1498 abfd, section, address, name);
1499 return TRUE;
1502 /* This is called if link_info.notice_all is set, or when a symbol in
1503 link_info.notice_hash is found. Symbols are put in notice_hash
1504 using the -y option. */
1506 static bfd_boolean
1507 notice (struct bfd_link_info *info,
1508 const char *name,
1509 bfd *abfd,
1510 asection *section,
1511 bfd_vma value)
1513 if (name == NULL)
1515 if (command_line.cref || nocrossref_list != NULL)
1516 return handle_asneeded_cref (abfd, value);
1517 return TRUE;
1520 if (! info->notice_all
1521 || (info->notice_hash != NULL
1522 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
1524 if (bfd_is_und_section (section))
1525 einfo ("%B: reference to %s\n", abfd, name);
1526 else
1527 einfo ("%B: definition of %s\n", abfd, name);
1530 if (command_line.cref || nocrossref_list != NULL)
1531 add_cref (name, abfd, section, value);
1533 return TRUE;