1 /* Main program of GNU linker.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
4 Free Software Foundation, Inc.
5 Written by Steve Chamberlain steve@cygnus.com
7 This file is part of GLD, the Gnu Linker.
9 GLD 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 2, or (at your option)
14 GLD 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 GLD; see the file COPYING. If not, write to the Free
21 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
27 #include "safe-ctype.h"
28 #include "libiberty.h"
31 #include "filenames.h"
45 /* Somewhere above, sys/stat.h got included . . . . */
46 #if !defined(S_ISDIR) && defined(S_IFDIR)
47 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
53 #ifdef NEED_DECLARATION_SBRK
58 #ifndef TARGET_SYSTEM_ROOT
59 #define TARGET_SYSTEM_ROOT ""
62 int main PARAMS ((int, char **));
64 static char *get_emulation PARAMS ((int, char **));
65 static void set_scripts_dir PARAMS ((void));
70 const char *output_filename = "a.out";
72 /* Name this program was invoked by. */
75 /* The prefix for system library directories. */
78 /* The file that we're creating. */
81 /* Set by -G argument, for MIPS ECOFF target. */
82 int g_switch_value = 8;
84 /* Nonzero means print names of input files as processed. */
85 bfd_boolean trace_files;
87 /* Nonzero means same, but note open failures, too. */
88 bfd_boolean trace_file_tries;
90 /* Nonzero means version number was printed, so exit successfully
91 instead of complaining if no input files are given. */
92 bfd_boolean version_printed;
94 /* Nonzero means link in every member of an archive. */
95 bfd_boolean whole_archive;
97 /* TRUE if we should demangle symbol names. */
98 bfd_boolean demangling;
100 args_type command_line;
102 ld_config_type config;
104 static void remove_output PARAMS ((void));
105 static bfd_boolean check_for_scripts_dir PARAMS ((char *dir));
106 static bfd_boolean add_archive_element PARAMS ((struct bfd_link_info *, bfd *,
108 static bfd_boolean multiple_definition PARAMS ((struct bfd_link_info *,
110 bfd *, asection *, bfd_vma,
111 bfd *, asection *, bfd_vma));
112 static bfd_boolean multiple_common PARAMS ((struct bfd_link_info *,
114 enum bfd_link_hash_type, bfd_vma,
115 bfd *, enum bfd_link_hash_type,
117 static bfd_boolean add_to_set PARAMS ((struct bfd_link_info *,
118 struct bfd_link_hash_entry *,
119 bfd_reloc_code_real_type,
120 bfd *, asection *, bfd_vma));
121 static bfd_boolean constructor_callback PARAMS ((struct bfd_link_info *,
122 bfd_boolean constructor,
124 bfd *, asection *, bfd_vma));
125 static bfd_boolean warning_callback PARAMS ((struct bfd_link_info *,
126 const char *, const char *, bfd *,
127 asection *, bfd_vma));
128 static void warning_find_reloc PARAMS ((bfd *, asection *, PTR));
129 static bfd_boolean undefined_symbol PARAMS ((struct bfd_link_info *,
131 asection *, bfd_vma, bfd_boolean));
132 static bfd_boolean reloc_overflow PARAMS ((struct bfd_link_info *, const char *,
133 const char *, bfd_vma,
134 bfd *, asection *, bfd_vma));
135 static bfd_boolean reloc_dangerous PARAMS ((struct bfd_link_info *, const char *,
136 bfd *, asection *, bfd_vma));
137 static bfd_boolean unattached_reloc PARAMS ((struct bfd_link_info *,
138 const char *, bfd *, asection *,
140 static bfd_boolean notice PARAMS ((struct bfd_link_info *, const char *,
141 bfd *, asection *, bfd_vma));
143 static struct bfd_link_callbacks link_callbacks = {
148 constructor_callback,
157 struct bfd_link_info link_info;
164 if (output_bfd && output_bfd->iostream)
165 fclose ((FILE *) (output_bfd->iostream));
166 if (delete_output_file_on_failure)
167 unlink (output_filename);
177 long start_time = get_run_time ();
179 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
180 setlocale (LC_MESSAGES, "");
182 #if defined (HAVE_SETLOCALE)
183 setlocale (LC_CTYPE, "");
185 bindtextdomain (PACKAGE, LOCALEDIR);
186 textdomain (PACKAGE);
188 program_name = argv[0];
189 xmalloc_set_program_name (program_name);
191 START_PROGRESS (program_name, 0);
195 bfd_set_error_program_name (program_name);
197 xatexit (remove_output);
199 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
200 ld_sysroot = make_relative_prefix (program_name, BINDIR,
205 int res = stat (ld_sysroot, &s) == 0 && S_ISDIR (s.st_mode);
209 ld_sysroot = TARGET_SYSTEM_ROOT;
213 ld_sysroot = TARGET_SYSTEM_ROOT;
216 /* Set the default BFD target based on the configured target. Doing
217 this permits the linker to be configured for a particular target,
218 and linked against a shared BFD library which was configured for
219 a different target. The macro TARGET is defined by Makefile. */
220 if (! bfd_set_default_target (TARGET))
222 einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
233 /* Initialize the data about options. */
234 trace_files = trace_file_tries = version_printed = FALSE;
235 whole_archive = FALSE;
236 config.build_constructors = TRUE;
237 config.dynamic_link = FALSE;
238 config.has_shared = FALSE;
239 config.split_by_reloc = (unsigned) -1;
240 config.split_by_file = (bfd_size_type) -1;
241 command_line.force_common_definition = FALSE;
242 command_line.inhibit_common_definition = FALSE;
243 command_line.interpreter = NULL;
244 command_line.rpath = NULL;
245 command_line.warn_mismatch = TRUE;
246 command_line.check_section_addresses = TRUE;
247 command_line.accept_unknown_input_arch = FALSE;
249 /* We initialize DEMANGLING based on the environment variable
250 COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
251 output of the linker, unless COLLECT_NO_DEMANGLE is set in the
252 environment. Acting the same way here lets us provide the same
253 interface by default. */
254 demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
256 link_info.relocateable = FALSE;
257 link_info.emitrelocations = FALSE;
258 link_info.task_link = FALSE;
259 link_info.shared = FALSE;
260 link_info.symbolic = FALSE;
261 link_info.export_dynamic = FALSE;
262 link_info.static_link = FALSE;
263 link_info.traditional_format = FALSE;
264 link_info.optimize = FALSE;
265 link_info.no_undefined = FALSE;
266 link_info.allow_shlib_undefined = FALSE;
267 link_info.allow_multiple_definition = FALSE;
268 link_info.allow_undefined_version = TRUE;
269 link_info.keep_memory = TRUE;
270 link_info.notice_all = FALSE;
271 link_info.nocopyreloc = FALSE;
272 link_info.new_dtags = FALSE;
273 link_info.combreloc = TRUE;
274 link_info.eh_frame_hdr = FALSE;
275 link_info.strip_discarded = TRUE;
276 link_info.strip = strip_none;
277 link_info.discard = discard_sec_merge;
278 link_info.common_skip_ar_aymbols = bfd_link_common_skip_none;
279 link_info.callbacks = &link_callbacks;
280 link_info.hash = NULL;
281 link_info.keep_hash = NULL;
282 link_info.notice_hash = NULL;
283 link_info.wrap_hash = NULL;
284 link_info.input_bfds = NULL;
285 link_info.create_object_symbols_section = NULL;
286 link_info.gc_sym_list = NULL;
287 link_info.base_file = NULL;
288 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
289 and _fini symbols. We are compatible. */
290 link_info.init_function = "_init";
291 link_info.fini_function = "_fini";
292 link_info.mpc860c0 = 0;
293 link_info.pei386_auto_import = -1;
294 link_info.pei386_runtime_pseudo_reloc = FALSE;
295 link_info.spare_dynamic_tags = 5;
296 link_info.flags = (bfd_vma) 0;
297 link_info.flags_1 = (bfd_vma) 0;
299 ldfile_add_arch ("");
301 config.make_executable = TRUE;
302 force_make_executable = FALSE;
303 config.magic_demand_paged = TRUE;
304 config.text_read_only = TRUE;
306 emulation = get_emulation (argc, argv);
307 ldemul_choose_mode (emulation);
308 default_target = ldemul_choose_target (argc, argv);
310 ldemul_before_parse ();
311 lang_has_input_file = FALSE;
312 parse_args (argc, argv);
314 ldemul_set_symbols ();
316 if (link_info.relocateable)
318 if (command_line.gc_sections)
319 einfo ("%P%F: --gc-sections and -r may not be used together\n");
320 if (link_info.mpc860c0)
321 einfo (_("%P%F: -r and --mpc860c0 may not be used together\n"));
322 else if (command_line.relax)
323 einfo (_("%P%F: --relax and -r may not be used together\n"));
324 if (link_info.shared)
325 einfo (_("%P%F: -r and -shared may not be used together\n"));
328 if (! link_info.shared)
330 if (command_line.filter_shlib)
331 einfo (_("%P%F: -F may not be used without -shared\n"));
332 if (command_line.auxiliary_filters)
333 einfo (_("%P%F: -f may not be used without -shared\n"));
336 /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
337 don't see how else this can be handled, since in this case we
338 must preserve all externally visible symbols. */
339 if (link_info.relocateable && link_info.strip == strip_all)
341 link_info.strip = strip_debugger;
342 if (link_info.discard == discard_sec_merge)
343 link_info.discard = discard_all;
346 /* This essentially adds another -L directory so this must be done after
347 the -L's in argv have been processed. */
350 /* If we have not already opened and parsed a linker script
351 read the emulation's appropriate default script. */
352 if (saved_script_handle == NULL)
355 char *s = ldemul_get_script (&isfile);
358 ldfile_open_command_file (s);
364 parser_input = input_script;
369 if (trace_file_tries)
371 if (saved_script_handle)
372 info_msg (_("using external linker script:"));
374 info_msg (_("using internal linker script:"));
375 info_msg ("\n==================================================\n");
377 if (saved_script_handle)
379 static const int ld_bufsz = 8193;
381 char *buf = xmalloc (ld_bufsz);
383 rewind (saved_script_handle);
384 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
389 rewind (saved_script_handle);
396 info_msg (ldemul_get_script (&isfile));
399 info_msg ("\n==================================================\n");
404 if (!lang_has_input_file)
408 einfo (_("%P%F: no input files\n"));
413 info_msg (_("%P: mode %s\n"), emulation);
416 ldemul_after_parse ();
418 if (config.map_filename)
420 if (strcmp (config.map_filename, "-") == 0)
422 config.map_file = stdout;
426 config.map_file = fopen (config.map_filename, FOPEN_WT);
427 if (config.map_file == (FILE *) NULL)
429 bfd_set_error (bfd_error_system_call);
430 einfo (_("%P%F: cannot open map file %s: %E\n"),
431 config.map_filename);
438 /* Print error messages for any missing symbols, for any warning
439 symbols, and possibly multiple definitions. */
441 if (link_info.relocateable)
442 output_bfd->flags &= ~EXEC_P;
444 output_bfd->flags |= EXEC_P;
448 if (config.map_file != NULL)
450 if (command_line.cref)
451 output_cref (config.map_file != NULL ? config.map_file : stdout);
452 if (nocrossref_list != NULL)
453 check_nocrossrefs ();
455 /* Even if we're producing relocateable output, some non-fatal errors should
456 be reported in the exit status. (What non-fatal errors, if any, do we
457 want to ignore for relocateable output?) */
459 if (!config.make_executable && !force_make_executable)
463 einfo (_("%P: link errors found, deleting executable `%s'\n"),
467 /* The file will be removed by remove_output. */
473 if (! bfd_close (output_bfd))
474 einfo (_("%F%B: final close failed: %E\n"), output_bfd);
476 /* If the --force-exe-suffix is enabled, and we're making an
477 executable file and it doesn't end in .exe, copy it to one
479 if (! link_info.relocateable && command_line.force_exe_suffix)
481 int len = strlen (output_filename);
483 || (strcasecmp (output_filename + len - 4, ".exe") != 0
484 && strcasecmp (output_filename + len - 4, ".dll") != 0))
488 const int bsize = 4096;
489 char *buf = xmalloc (bsize);
491 char *dst_name = xmalloc (len + 5);
492 strcpy (dst_name, output_filename);
493 strcat (dst_name, ".exe");
494 src = fopen (output_filename, FOPEN_RB);
495 dst = fopen (dst_name, FOPEN_WB);
498 einfo (_("%X%P: unable to open for source of copy `%s'\n"), output_filename);
500 einfo (_("%X%P: unable to open for destination of copy `%s'\n"), dst_name);
501 while ((l = fread (buf, 1, bsize, src)) > 0)
503 int done = fwrite (buf, 1, l, dst);
506 einfo (_("%P: Error writing file `%s'\n"), dst_name);
510 if (fclose (dst) == EOF)
512 einfo (_("%P: Error closing file `%s'\n"), dst_name);
520 END_PROGRESS (program_name);
525 char *lim = (char *) sbrk (0);
527 long run_time = get_run_time () - start_time;
529 fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
530 program_name, run_time / 1000000, run_time % 1000000);
532 fprintf (stderr, _("%s: data size %ld\n"), program_name,
533 (long) (lim - (char *) &environ));
537 /* Prevent remove_output from doing anything, after a successful link. */
538 output_filename = NULL;
544 /* We need to find any explicitly given emulation in order to initialize the
545 state that's needed by the lex&yacc argument parser (parse_args). */
548 get_emulation (argc, argv)
555 emulation = getenv (EMULATION_ENVIRON);
556 if (emulation == NULL)
557 emulation = DEFAULT_EMULATION;
559 for (i = 1; i < argc; i++)
561 if (!strncmp (argv[i], "-m", 2))
563 if (argv[i][2] == '\0')
568 emulation = argv[i + 1];
573 einfo (_("%P%F: missing argument to -m\n"));
576 else if (strcmp (argv[i], "-mips1") == 0
577 || strcmp (argv[i], "-mips2") == 0
578 || strcmp (argv[i], "-mips3") == 0
579 || strcmp (argv[i], "-mips32") == 0
580 || strcmp (argv[i], "-mips64") == 0
581 || strcmp (argv[i], "-mips4") == 0
582 || strcmp (argv[i], "-mips5") == 0)
584 /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
585 passed to the linker by some MIPS compilers. They
586 generally tell the linker to use a slightly different
587 library path. Perhaps someday these should be
588 implemented as emulations; until then, we just ignore
589 the arguments and hope that nobody ever creates
590 emulations named ips1, ips2 or ips3. */
592 else if (strcmp (argv[i], "-m486") == 0)
594 /* FIXME: The argument -m486 is passed to the linker on
595 some Linux systems. Hope that nobody creates an
596 emulation named 486. */
601 emulation = &argv[i][2];
609 /* If directory DIR contains an "ldscripts" subdirectory,
610 add DIR to the library search path and return TRUE,
611 else return FALSE. */
614 check_for_scripts_dir (dir)
622 dirlen = strlen (dir);
623 /* sizeof counts the terminating NUL. */
624 buf = (char *) xmalloc (dirlen + sizeof ("/ldscripts"));
625 sprintf (buf, "%s/ldscripts", dir);
627 res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
630 ldfile_add_library_path (dir, FALSE);
634 /* Set the default directory for finding script files.
635 Libraries will be searched for here too, but that's ok.
636 We look for the "ldscripts" directory in:
638 SCRIPTDIR (passed from Makefile)
639 (adjusted according to the current location of the binary)
640 SCRIPTDIR (passed from Makefile)
641 the dir where this program is (for using it from the build tree)
642 the dir where this program is/../lib
643 (for installing the tool suite elsewhere) */
651 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
652 if (dir && check_for_scripts_dir (dir))
653 /* Success. Don't free dir. */
659 if (check_for_scripts_dir (SCRIPTDIR))
660 /* We've been installed normally. */
663 /* Look for "ldscripts" in the dir where our binary is. */
664 end = strrchr (program_name, '/');
665 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
667 /* We could have \foo\bar, or /foo\bar. */
668 char *bslash = strrchr (program_name, '\\');
669 if (end == NULL || (bslash != NULL && bslash > end))
676 /* Don't look for ldscripts in the current directory. There is
677 too much potential for confusion. */
681 dirlen = end - program_name;
682 /* Make a copy of program_name in dir.
683 Leave room for later "/../lib". */
684 dir = (char *) xmalloc (dirlen + 8);
685 strncpy (dir, program_name, dirlen);
688 if (check_for_scripts_dir (dir))
689 /* Don't free dir. */
692 /* Look for "ldscripts" in <the dir where our binary is>/../lib. */
693 strcpy (dir + dirlen, "/../lib");
694 if (check_for_scripts_dir (dir))
697 /* Well, we tried. */
705 if (link_info.notice_hash == (struct bfd_hash_table *) NULL)
707 link_info.notice_hash = ((struct bfd_hash_table *)
708 xmalloc (sizeof (struct bfd_hash_table)));
709 if (! bfd_hash_table_init_n (link_info.notice_hash,
712 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
715 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE)
716 == (struct bfd_hash_entry *) NULL)
717 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
720 /* Record a symbol to be wrapped, from the --wrap option. */
726 if (link_info.wrap_hash == NULL)
728 link_info.wrap_hash = ((struct bfd_hash_table *)
729 xmalloc (sizeof (struct bfd_hash_table)));
730 if (! bfd_hash_table_init_n (link_info.wrap_hash,
733 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
735 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
736 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
739 /* Handle the -retain-symbols-file option. */
742 add_keepsyms_file (filename)
743 const char *filename;
750 if (link_info.strip == strip_some)
751 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
753 file = fopen (filename, "r");
754 if (file == (FILE *) NULL)
756 bfd_set_error (bfd_error_system_call);
757 einfo ("%X%P: %s: %E\n", filename);
761 link_info.keep_hash = ((struct bfd_hash_table *)
762 xmalloc (sizeof (struct bfd_hash_table)));
763 if (! bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc))
764 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
767 buf = (char *) xmalloc (bufsize);
779 while (! ISSPACE (c) && c != EOF)
786 buf = xrealloc (buf, bufsize);
793 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE)
794 == (struct bfd_hash_entry *) NULL)
795 einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
799 if (link_info.strip != strip_none)
800 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
802 link_info.strip = strip_some;
805 /* Callbacks from the BFD linker routines. */
807 /* This is called when BFD has decided to include an archive member in
811 add_archive_element (info, abfd, name)
812 struct bfd_link_info *info ATTRIBUTE_UNUSED;
816 lang_input_statement_type *input;
818 input = ((lang_input_statement_type *)
819 xmalloc (sizeof (lang_input_statement_type)));
820 input->filename = abfd->filename;
821 input->local_sym_name = abfd->filename;
822 input->the_bfd = abfd;
823 input->asymbols = NULL;
825 input->just_syms_flag = FALSE;
826 input->loaded = FALSE;
827 input->search_dirs_flag = FALSE;
829 /* FIXME: The following fields are not set: header.next,
830 header.type, closed, passive_position, symbol_count,
831 next_real_file, is_archive, target, real. This bit of code is
832 from the old decode_library_subfile function. I don't know
833 whether any of those fields matters. */
835 ldlang_add_file (input);
837 if (config.map_file != (FILE *) NULL)
839 static bfd_boolean header_printed;
840 struct bfd_link_hash_entry *h;
844 h = bfd_link_hash_lookup (link_info.hash, name, FALSE, FALSE, TRUE);
856 case bfd_link_hash_defined:
857 case bfd_link_hash_defweak:
858 from = h->u.def.section->owner;
861 case bfd_link_hash_undefined:
862 case bfd_link_hash_undefweak:
863 from = h->u.undef.abfd;
866 case bfd_link_hash_common:
867 from = h->u.c.p->section->owner;
872 if (! header_printed)
876 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
878 header_printed = TRUE;
881 if (bfd_my_archive (abfd) == NULL)
883 minfo ("%s", bfd_get_filename (abfd));
884 len = strlen (bfd_get_filename (abfd));
888 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
889 bfd_get_filename (abfd));
890 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
891 + strlen (bfd_get_filename (abfd))
909 minfo ("(%T)\n", h->root.string);
911 minfo ("(%s)\n", name);
914 if (trace_files || trace_file_tries)
915 info_msg ("%I\n", input);
920 /* This is called when BFD has discovered a symbol which is defined
924 multiple_definition (info, name, obfd, osec, oval, nbfd, nsec, nval)
925 struct bfd_link_info *info ATTRIBUTE_UNUSED;
934 /* If either section has the output_section field set to
935 bfd_abs_section_ptr, it means that the section is being
936 discarded, and this is not really a multiple definition at all.
937 FIXME: It would be cleaner to somehow ignore symbols defined in
938 sections which are being discarded. */
939 if ((osec->output_section != NULL
940 && ! bfd_is_abs_section (osec)
941 && bfd_is_abs_section (osec->output_section))
942 || (nsec->output_section != NULL
943 && ! bfd_is_abs_section (nsec)
944 && bfd_is_abs_section (nsec->output_section)))
947 einfo (_("%X%C: multiple definition of `%T'\n"),
948 nbfd, nsec, nval, name);
949 if (obfd != (bfd *) NULL)
950 einfo (_("%D: first defined here\n"), obfd, osec, oval);
952 if (command_line.relax)
954 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
955 command_line.relax = 0;
961 /* This is called when there is a definition of a common symbol, or
962 when a common symbol is found for a symbol that is already defined,
963 or when two common symbols are found. We only do something if
964 -warn-common was used. */
967 multiple_common (info, name, obfd, otype, osize, nbfd, ntype, nsize)
968 struct bfd_link_info *info ATTRIBUTE_UNUSED;
971 enum bfd_link_hash_type otype;
974 enum bfd_link_hash_type ntype;
977 if (! config.warn_common)
980 if (ntype == bfd_link_hash_defined
981 || ntype == bfd_link_hash_defweak
982 || ntype == bfd_link_hash_indirect)
984 ASSERT (otype == bfd_link_hash_common);
985 einfo (_("%B: warning: definition of `%T' overriding common\n"),
988 einfo (_("%B: warning: common is here\n"), obfd);
990 else if (otype == bfd_link_hash_defined
991 || otype == bfd_link_hash_defweak
992 || otype == bfd_link_hash_indirect)
994 ASSERT (ntype == bfd_link_hash_common);
995 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
998 einfo (_("%B: warning: defined here\n"), obfd);
1002 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1005 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
1008 einfo (_("%B: warning: larger common is here\n"), obfd);
1010 else if (nsize > osize)
1012 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
1015 einfo (_("%B: warning: smaller common is here\n"), obfd);
1019 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
1021 einfo (_("%B: warning: previous common is here\n"), obfd);
1028 /* This is called when BFD has discovered a set element. H is the
1029 entry in the linker hash table for the set. SECTION and VALUE
1030 represent a value which should be added to the set. */
1033 add_to_set (info, h, reloc, abfd, section, value)
1034 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1035 struct bfd_link_hash_entry *h;
1036 bfd_reloc_code_real_type reloc;
1041 if (config.warn_constructors)
1042 einfo (_("%P: warning: global constructor %s used\n"),
1045 if (! config.build_constructors)
1048 ldctor_add_set_entry (h, reloc, (const char *) NULL, section, value);
1050 if (h->type == bfd_link_hash_new)
1052 h->type = bfd_link_hash_undefined;
1053 h->u.undef.abfd = abfd;
1054 /* We don't call bfd_link_add_undef to add this to the list of
1055 undefined symbols because we are going to define it
1062 /* This is called when BFD has discovered a constructor. This is only
1063 called for some object file formats--those which do not handle
1064 constructors in some more clever fashion. This is similar to
1065 adding an element to a set, but less general. */
1068 constructor_callback (info, constructor, name, abfd, section, value)
1069 struct bfd_link_info *info;
1070 bfd_boolean constructor;
1077 struct bfd_link_hash_entry *h;
1078 char set_name[1 + sizeof "__CTOR_LIST__"];
1080 if (config.warn_constructors)
1081 einfo (_("%P: warning: global constructor %s used\n"), name);
1083 if (! config.build_constructors)
1086 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1087 useful error message. */
1088 if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL
1089 && (link_info.relocateable
1090 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1091 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1094 if (bfd_get_symbol_leading_char (abfd) != '\0')
1095 *s++ = bfd_get_symbol_leading_char (abfd);
1097 strcpy (s, "__CTOR_LIST__");
1099 strcpy (s, "__DTOR_LIST__");
1101 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
1102 if (h == (struct bfd_link_hash_entry *) NULL)
1103 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1104 if (h->type == bfd_link_hash_new)
1106 h->type = bfd_link_hash_undefined;
1107 h->u.undef.abfd = abfd;
1108 /* We don't call bfd_link_add_undef to add this to the list of
1109 undefined symbols because we are going to define it
1113 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1117 /* A structure used by warning_callback to pass information through
1118 bfd_map_over_sections. */
1120 struct warning_callback_info {
1122 const char *warning;
1127 /* This is called when there is a reference to a warning symbol. */
1130 warning_callback (info, warning, symbol, abfd, section, address)
1131 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1132 const char *warning;
1138 /* This is a hack to support warn_multiple_gp. FIXME: This should
1139 have a cleaner interface, but what? */
1140 if (! config.warn_multiple_gp
1141 && strcmp (warning, "using multiple gp values") == 0)
1144 if (section != NULL)
1145 einfo ("%C: %s\n", abfd, section, address, warning);
1146 else if (abfd == NULL)
1147 einfo ("%P: %s\n", warning);
1148 else if (symbol == NULL)
1149 einfo ("%B: %s\n", abfd, warning);
1152 lang_input_statement_type *entry;
1154 struct warning_callback_info info;
1156 /* Look through the relocs to see if we can find a plausible
1159 entry = (lang_input_statement_type *) abfd->usrdata;
1160 if (entry != NULL && entry->asymbols != NULL)
1161 asymbols = entry->asymbols;
1167 symsize = bfd_get_symtab_upper_bound (abfd);
1169 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1170 asymbols = (asymbol **) xmalloc (symsize);
1171 symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1172 if (symbol_count < 0)
1173 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1176 entry->asymbols = asymbols;
1177 entry->symbol_count = symbol_count;
1182 info.warning = warning;
1183 info.symbol = symbol;
1184 info.asymbols = asymbols;
1185 bfd_map_over_sections (abfd, warning_find_reloc, (PTR) &info);
1188 einfo ("%B: %s\n", abfd, warning);
1197 /* This is called by warning_callback for each section. It checks the
1198 relocs of the section to see if it can find a reference to the
1199 symbol which triggered the warning. If it can, it uses the reloc
1200 to give an error message with a file and line number. */
1203 warning_find_reloc (abfd, sec, iarg)
1208 struct warning_callback_info *info = (struct warning_callback_info *) iarg;
1212 arelent **p, **pend;
1217 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1219 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1223 relpp = (arelent **) xmalloc (relsize);
1224 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1226 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1229 pend = p + relcount;
1230 for (; p < pend && *p != NULL; p++)
1234 if (q->sym_ptr_ptr != NULL
1235 && *q->sym_ptr_ptr != NULL
1236 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1238 /* We found a reloc for the symbol we are looking for. */
1239 einfo ("%C: %s\n", abfd, sec, q->address, info->warning);
1248 /* This is called when an undefined symbol is found. */
1251 undefined_symbol (info, name, abfd, section, address, fatal)
1252 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1257 bfd_boolean fatal ATTRIBUTE_UNUSED;
1259 static char *error_name;
1260 static unsigned int error_count;
1262 #define MAX_ERRORS_IN_A_ROW 5
1264 if (config.warn_once)
1266 static struct bfd_hash_table *hash;
1268 /* Only warn once about a particular undefined symbol. */
1272 hash = ((struct bfd_hash_table *)
1273 xmalloc (sizeof (struct bfd_hash_table)));
1274 if (! bfd_hash_table_init (hash, bfd_hash_newfunc))
1275 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1278 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1281 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
1282 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1285 /* We never print more than a reasonable number of errors in a row
1286 for a single symbol. */
1287 if (error_name != (char *) NULL
1288 && strcmp (name, error_name) == 0)
1293 if (error_name != (char *) NULL)
1295 error_name = xstrdup (name);
1298 if (section != NULL)
1300 if (error_count < MAX_ERRORS_IN_A_ROW)
1302 einfo (_("%C: undefined reference to `%T'\n"),
1303 abfd, section, address, name);
1307 else if (error_count == MAX_ERRORS_IN_A_ROW)
1308 einfo (_("%D: more undefined references to `%T' follow\n"),
1309 abfd, section, address, name);
1313 if (error_count < MAX_ERRORS_IN_A_ROW)
1315 einfo (_("%B: undefined reference to `%T'\n"),
1320 else if (error_count == MAX_ERRORS_IN_A_ROW)
1321 einfo (_("%B: more undefined references to `%T' follow\n"),
1328 /* This is called when a reloc overflows. */
1331 reloc_overflow (info, name, reloc_name, addend, abfd, section, address)
1332 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1334 const char *reloc_name;
1340 if (abfd == (bfd *) NULL)
1341 einfo (_("%P%X: generated"));
1343 einfo ("%X%C:", abfd, section, address);
1344 einfo (_(" relocation truncated to fit: %s %T"), reloc_name, name);
1346 einfo ("+%v", addend);
1351 /* This is called when a dangerous relocation is made. */
1354 reloc_dangerous (info, message, abfd, section, address)
1355 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1356 const char *message;
1361 if (abfd == (bfd *) NULL)
1362 einfo (_("%P%X: generated"));
1364 einfo ("%X%C:", abfd, section, address);
1365 einfo (_("dangerous relocation: %s\n"), message);
1369 /* This is called when a reloc is being generated attached to a symbol
1370 that is not being output. */
1373 unattached_reloc (info, name, abfd, section, address)
1374 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1380 if (abfd == (bfd *) NULL)
1381 einfo (_("%P%X: generated"));
1383 einfo ("%X%C:", abfd, section, address);
1384 einfo (_(" reloc refers to symbol `%T' which is not being output\n"), name);
1388 /* This is called if link_info.notice_all is set, or when a symbol in
1389 link_info.notice_hash is found. Symbols are put in notice_hash
1390 using the -y option. */
1393 notice (info, name, abfd, section, value)
1394 struct bfd_link_info *info;
1400 if (! info->notice_all
1401 || (info->notice_hash != NULL
1402 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
1404 if (bfd_is_und_section (section))
1405 einfo ("%B: reference to %s\n", abfd, name);
1407 einfo ("%B: definition of %s\n", abfd, name);
1410 if (command_line.cref || nocrossref_list != NULL)
1411 add_cref (name, abfd, section, value);