*** empty log message ***
[binutils.git] / ld / ldmain.c
blobf47758ffed5930c3ceb9048cc5019a090d23e414
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
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)
12 any later version.
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, 51 Franklin Street - Fifth Floor, Boston, MA
22 02110-1301, USA. */
24 #include "bfd.h"
25 #include "sysdep.h"
26 #include <stdio.h>
27 #include "safe-ctype.h"
28 #include "libiberty.h"
29 #include "progress.h"
30 #include "bfdlink.h"
31 #include "filenames.h"
33 #include "ld.h"
34 #include "ldmain.h"
35 #include "ldmisc.h"
36 #include "ldwrite.h"
37 #include "ldexp.h"
38 #include "ldlang.h"
39 #include <ldgram.h>
40 #include "ldlex.h"
41 #include "ldfile.h"
42 #include "ldemul.h"
43 #include "ldctor.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)
48 #endif
50 #include <string.h>
52 #ifdef HAVE_SBRK
53 #if !HAVE_DECL_SBRK
54 extern void *sbrk ();
55 #endif
56 #endif
58 #ifndef TARGET_SYSTEM_ROOT
59 #define TARGET_SYSTEM_ROOT ""
60 #endif
62 /* EXPORTS */
64 char *default_target;
65 const char *output_filename = "a.out";
67 /* Name this program was invoked by. */
68 char *program_name;
70 /* The prefix for system library directories. */
71 const char *ld_sysroot;
73 /* The canonical representation of ld_sysroot. */
74 char * ld_canon_sysroot;
75 int ld_canon_sysroot_len;
77 /* The file that we're creating. */
78 bfd *output_bfd = 0;
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 ldlang_override_segment_assignment
168 struct bfd_link_info link_info;
170 static void
171 remove_output (void)
173 if (output_filename)
175 if (output_bfd)
176 bfd_cache_close (output_bfd);
177 if (delete_output_file_on_failure)
178 unlink_if_ordinary (output_filename);
183 main (int argc, char **argv)
185 char *emulation;
186 long start_time = get_run_time ();
188 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
189 setlocale (LC_MESSAGES, "");
190 #endif
191 #if defined (HAVE_SETLOCALE)
192 setlocale (LC_CTYPE, "");
193 #endif
194 bindtextdomain (PACKAGE, LOCALEDIR);
195 textdomain (PACKAGE);
197 program_name = argv[0];
198 xmalloc_set_program_name (program_name);
200 START_PROGRESS (program_name, 0);
202 expandargv (&argc, &argv);
204 bfd_init ();
206 bfd_set_error_program_name (program_name);
208 xatexit (remove_output);
210 /* Set up the sysroot directory. */
211 ld_sysroot = get_sysroot (argc, argv);
212 if (*ld_sysroot)
214 if (*TARGET_SYSTEM_ROOT == 0)
216 einfo ("%P%F: this linker was not configured to use sysroots\n");
217 ld_sysroot = "";
219 else
220 ld_canon_sysroot = lrealpath (ld_sysroot);
222 if (ld_canon_sysroot)
223 ld_canon_sysroot_len = strlen (ld_canon_sysroot);
224 else
225 ld_canon_sysroot_len = -1;
227 /* Set the default BFD target based on the configured target. Doing
228 this permits the linker to be configured for a particular target,
229 and linked against a shared BFD library which was configured for
230 a different target. The macro TARGET is defined by Makefile. */
231 if (! bfd_set_default_target (TARGET))
233 einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
234 xexit (1);
237 #if YYDEBUG
239 extern int yydebug;
240 yydebug = 1;
242 #endif
244 /* Initialize the data about options. */
245 trace_files = trace_file_tries = version_printed = FALSE;
246 whole_archive = FALSE;
247 config.build_constructors = TRUE;
248 config.dynamic_link = FALSE;
249 config.has_shared = FALSE;
250 config.split_by_reloc = (unsigned) -1;
251 config.split_by_file = (bfd_size_type) -1;
252 config.hash_table_size = 0;
253 command_line.force_common_definition = FALSE;
254 command_line.inhibit_common_definition = FALSE;
255 command_line.interpreter = NULL;
256 command_line.rpath = NULL;
257 command_line.warn_mismatch = TRUE;
258 command_line.check_section_addresses = TRUE;
259 command_line.accept_unknown_input_arch = FALSE;
260 command_line.symbolic = symbolic_unset;
261 command_line.dynamic_list = dynamic_list_unset;
263 sort_section = none;
265 /* We initialize DEMANGLING based on the environment variable
266 COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
267 output of the linker, unless COLLECT_NO_DEMANGLE is set in the
268 environment. Acting the same way here lets us provide the same
269 interface by default. */
270 demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
272 link_info.relocatable = FALSE;
273 link_info.emitrelocations = FALSE;
274 link_info.task_link = FALSE;
275 link_info.shared = FALSE;
276 link_info.pie = FALSE;
277 link_info.executable = FALSE;
278 link_info.symbolic = FALSE;
279 link_info.export_dynamic = FALSE;
280 link_info.static_link = FALSE;
281 link_info.traditional_format = FALSE;
282 link_info.optimize = FALSE;
283 link_info.unresolved_syms_in_objects = RM_NOT_YET_SET;
284 link_info.unresolved_syms_in_shared_libs = RM_NOT_YET_SET;
285 link_info.allow_multiple_definition = FALSE;
286 link_info.allow_undefined_version = TRUE;
287 link_info.create_default_symver = FALSE;
288 link_info.default_imported_symver = FALSE;
289 link_info.keep_memory = TRUE;
290 link_info.notice_all = FALSE;
291 link_info.nocopyreloc = FALSE;
292 link_info.new_dtags = FALSE;
293 link_info.combreloc = TRUE;
294 link_info.eh_frame_hdr = FALSE;
295 link_info.relro = FALSE;
296 link_info.strip_discarded = TRUE;
297 link_info.strip = strip_none;
298 link_info.discard = discard_sec_merge;
299 link_info.common_skip_ar_aymbols = bfd_link_common_skip_none;
300 link_info.callbacks = &link_callbacks;
301 link_info.hash = NULL;
302 link_info.keep_hash = NULL;
303 link_info.notice_hash = NULL;
304 link_info.wrap_hash = NULL;
305 link_info.input_bfds = NULL;
306 link_info.create_object_symbols_section = NULL;
307 link_info.gc_sym_list = NULL;
308 link_info.base_file = NULL;
309 link_info.emit_hash = TRUE;
310 link_info.emit_gnu_hash = FALSE;
311 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
312 and _fini symbols. We are compatible. */
313 link_info.init_function = "_init";
314 link_info.fini_function = "_fini";
315 link_info.pei386_auto_import = -1;
316 link_info.pei386_runtime_pseudo_reloc = FALSE;
317 link_info.spare_dynamic_tags = 5;
318 link_info.flags = 0;
319 link_info.flags_1 = 0;
320 link_info.relax_pass = 1;
321 link_info.warn_shared_textrel = FALSE;
322 link_info.gc_sections = FALSE;
323 link_info.print_gc_sections = FALSE;
324 link_info.dynamic = FALSE;
325 link_info.dynamic_list = NULL;
326 link_info.dynamic_data = FALSE;
327 link_info.reduce_memory_overheads = FALSE;
329 config.maxpagesize = 0;
330 config.commonpagesize = 0;
332 ldfile_add_arch ("");
334 config.make_executable = TRUE;
335 force_make_executable = FALSE;
336 config.magic_demand_paged = TRUE;
337 config.text_read_only = TRUE;
339 emulation = get_emulation (argc, argv);
340 ldemul_choose_mode (emulation);
341 default_target = ldemul_choose_target (argc, argv);
342 lang_init ();
343 ldemul_before_parse ();
344 lang_has_input_file = FALSE;
345 parse_args (argc, argv);
347 if (config.hash_table_size != 0)
348 bfd_hash_set_default_size (config.hash_table_size);
350 ldemul_set_symbols ();
352 if (link_info.relocatable)
354 if (link_info.gc_sections)
355 einfo ("%P%F: --gc-sections and -r may not be used together\n");
356 else if (command_line.relax)
357 einfo (_("%P%F: --relax and -r may not be used together\n"));
358 if (link_info.shared)
359 einfo (_("%P%F: -r and -shared may not be used together\n"));
362 /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data,
363 --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and
364 --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are
365 for shared libraries. -Bsymbolic overrides all others and vice
366 versa. */
367 switch (command_line.symbolic)
369 case symbolic_unset:
370 break;
371 case symbolic:
372 /* -Bsymbolic is for shared library only. */
373 if (link_info.shared)
375 link_info.symbolic = TRUE;
376 /* Should we free the unused memory? */
377 link_info.dynamic_list = NULL;
378 command_line.dynamic_list = dynamic_list_unset;
380 break;
381 case symbolic_functions:
382 /* -Bsymbolic-functions is for shared library only. */
383 if (link_info.shared)
384 command_line.dynamic_list = dynamic_list_data;
385 break;
388 switch (command_line.dynamic_list)
390 case dynamic_list_unset:
391 break;
392 case dynamic_list_data:
393 link_info.dynamic_data = TRUE;
394 case dynamic_list:
395 link_info.dynamic = TRUE;
396 break;
399 if (! link_info.shared)
401 if (command_line.filter_shlib)
402 einfo (_("%P%F: -F may not be used without -shared\n"));
403 if (command_line.auxiliary_filters)
404 einfo (_("%P%F: -f may not be used without -shared\n"));
407 if (! link_info.shared || link_info.pie)
408 link_info.executable = TRUE;
410 /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
411 don't see how else this can be handled, since in this case we
412 must preserve all externally visible symbols. */
413 if (link_info.relocatable && link_info.strip == strip_all)
415 link_info.strip = strip_debugger;
416 if (link_info.discard == discard_sec_merge)
417 link_info.discard = discard_all;
420 /* This essentially adds another -L directory so this must be done after
421 the -L's in argv have been processed. */
422 set_scripts_dir ();
424 /* If we have not already opened and parsed a linker script,
425 try the default script from command line first. */
426 if (saved_script_handle == NULL
427 && command_line.default_script != NULL)
429 ldfile_open_command_file (command_line.default_script);
430 parser_input = input_script;
431 yyparse ();
434 /* If we have not already opened and parsed a linker script
435 read the emulation's appropriate default script. */
436 if (saved_script_handle == NULL)
438 int isfile;
439 char *s = ldemul_get_script (&isfile);
441 if (isfile)
442 ldfile_open_command_file (s);
443 else
445 lex_string = s;
446 lex_redirect (s);
448 parser_input = input_script;
449 yyparse ();
450 lex_string = NULL;
453 if (trace_file_tries)
455 if (saved_script_handle)
456 info_msg (_("using external linker script:"));
457 else
458 info_msg (_("using internal linker script:"));
459 info_msg ("\n==================================================\n");
461 if (saved_script_handle)
463 static const int ld_bufsz = 8193;
464 size_t n;
465 char *buf = xmalloc (ld_bufsz);
467 rewind (saved_script_handle);
468 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
470 buf[n] = 0;
471 info_msg (buf);
473 rewind (saved_script_handle);
474 free (buf);
476 else
478 int isfile;
480 info_msg (ldemul_get_script (&isfile));
483 info_msg ("\n==================================================\n");
486 lang_final ();
488 if (!lang_has_input_file)
490 if (version_printed)
491 xexit (0);
492 einfo (_("%P%F: no input files\n"));
495 if (trace_files)
496 info_msg (_("%P: mode %s\n"), emulation);
498 ldemul_after_parse ();
500 if (config.map_filename)
502 if (strcmp (config.map_filename, "-") == 0)
504 config.map_file = stdout;
506 else
508 config.map_file = fopen (config.map_filename, FOPEN_WT);
509 if (config.map_file == (FILE *) NULL)
511 bfd_set_error (bfd_error_system_call);
512 einfo (_("%P%F: cannot open map file %s: %E\n"),
513 config.map_filename);
518 lang_process ();
520 /* Print error messages for any missing symbols, for any warning
521 symbols, and possibly multiple definitions. */
522 if (link_info.relocatable)
523 output_bfd->flags &= ~EXEC_P;
524 else
525 output_bfd->flags |= EXEC_P;
527 ldwrite ();
529 if (config.map_file != NULL)
530 lang_map ();
531 if (command_line.cref)
532 output_cref (config.map_file != NULL ? config.map_file : stdout);
533 if (nocrossref_list != NULL)
534 check_nocrossrefs ();
536 lang_finish ();
538 /* Even if we're producing relocatable output, some non-fatal errors should
539 be reported in the exit status. (What non-fatal errors, if any, do we
540 want to ignore for relocatable output?) */
541 if (!config.make_executable && !force_make_executable)
543 if (trace_files)
544 einfo (_("%P: link errors found, deleting executable `%s'\n"),
545 output_filename);
547 /* The file will be removed by remove_output. */
548 xexit (1);
550 else
552 if (! bfd_close (output_bfd))
553 einfo (_("%F%B: final close failed: %E\n"), output_bfd);
555 /* If the --force-exe-suffix is enabled, and we're making an
556 executable file and it doesn't end in .exe, copy it to one
557 which does. */
558 if (! link_info.relocatable && command_line.force_exe_suffix)
560 int len = strlen (output_filename);
562 if (len < 4
563 || (strcasecmp (output_filename + len - 4, ".exe") != 0
564 && strcasecmp (output_filename + len - 4, ".dll") != 0))
566 FILE *src;
567 FILE *dst;
568 const int bsize = 4096;
569 char *buf = xmalloc (bsize);
570 int l;
571 char *dst_name = xmalloc (len + 5);
573 strcpy (dst_name, output_filename);
574 strcat (dst_name, ".exe");
575 src = fopen (output_filename, FOPEN_RB);
576 dst = fopen (dst_name, FOPEN_WB);
578 if (!src)
579 einfo (_("%X%P: unable to open for source of copy `%s'\n"),
580 output_filename);
581 if (!dst)
582 einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
583 dst_name);
584 while ((l = fread (buf, 1, bsize, src)) > 0)
586 int done = fwrite (buf, 1, l, dst);
588 if (done != l)
589 einfo (_("%P: Error writing file `%s'\n"), dst_name);
592 fclose (src);
593 if (fclose (dst) == EOF)
594 einfo (_("%P: Error closing file `%s'\n"), dst_name);
595 free (dst_name);
596 free (buf);
601 END_PROGRESS (program_name);
603 if (config.stats)
605 #ifdef HAVE_SBRK
606 char *lim = sbrk (0);
607 #endif
608 long run_time = get_run_time () - start_time;
610 fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
611 program_name, run_time / 1000000, run_time % 1000000);
612 #ifdef HAVE_SBRK
613 fprintf (stderr, _("%s: data size %ld\n"), program_name,
614 (long) (lim - (char *) &environ));
615 #endif
618 /* Prevent remove_output from doing anything, after a successful link. */
619 output_filename = NULL;
621 xexit (0);
622 return 0;
625 /* If the configured sysroot is relocatable, try relocating it based on
626 default prefix FROM. Return the relocated directory if it exists,
627 otherwise return null. */
629 static char *
630 get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
632 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
633 char *path;
634 struct stat s;
636 path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
637 if (path)
639 if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
640 return path;
641 free (path);
643 #endif
644 return 0;
647 /* Return the sysroot directory. Return "" if no sysroot is being used. */
649 static const char *
650 get_sysroot (int argc, char **argv)
652 int i;
653 const char *path;
655 for (i = 1; i < argc; i++)
656 if (CONST_STRNEQ (argv[i], "--sysroot="))
657 return argv[i] + strlen ("--sysroot=");
659 path = get_relative_sysroot (BINDIR);
660 if (path)
661 return path;
663 path = get_relative_sysroot (TOOLBINDIR);
664 if (path)
665 return path;
667 return TARGET_SYSTEM_ROOT;
670 /* We need to find any explicitly given emulation in order to initialize the
671 state that's needed by the lex&yacc argument parser (parse_args). */
673 static char *
674 get_emulation (int argc, char **argv)
676 char *emulation;
677 int i;
679 emulation = getenv (EMULATION_ENVIRON);
680 if (emulation == NULL)
681 emulation = DEFAULT_EMULATION;
683 for (i = 1; i < argc; i++)
685 if (CONST_STRNEQ (argv[i], "-m"))
687 if (argv[i][2] == '\0')
689 /* -m EMUL */
690 if (i < argc - 1)
692 emulation = argv[i + 1];
693 i++;
695 else
696 einfo (_("%P%F: missing argument to -m\n"));
698 else if (strcmp (argv[i], "-mips1") == 0
699 || strcmp (argv[i], "-mips2") == 0
700 || strcmp (argv[i], "-mips3") == 0
701 || strcmp (argv[i], "-mips4") == 0
702 || strcmp (argv[i], "-mips5") == 0
703 || strcmp (argv[i], "-mips32") == 0
704 || strcmp (argv[i], "-mips32r2") == 0
705 || strcmp (argv[i], "-mips64") == 0
706 || strcmp (argv[i], "-mips64r2") == 0)
708 /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
709 passed to the linker by some MIPS compilers. They
710 generally tell the linker to use a slightly different
711 library path. Perhaps someday these should be
712 implemented as emulations; until then, we just ignore
713 the arguments and hope that nobody ever creates
714 emulations named ips1, ips2 or ips3. */
716 else if (strcmp (argv[i], "-m486") == 0)
718 /* FIXME: The argument -m486 is passed to the linker on
719 some Linux systems. Hope that nobody creates an
720 emulation named 486. */
722 else
724 /* -mEMUL */
725 emulation = &argv[i][2];
730 return emulation;
733 /* If directory DIR contains an "ldscripts" subdirectory,
734 add DIR to the library search path and return TRUE,
735 else return FALSE. */
737 static bfd_boolean
738 check_for_scripts_dir (char *dir)
740 size_t dirlen;
741 char *buf;
742 struct stat s;
743 bfd_boolean res;
745 dirlen = strlen (dir);
746 /* sizeof counts the terminating NUL. */
747 buf = xmalloc (dirlen + sizeof ("/ldscripts"));
748 sprintf (buf, "%s/ldscripts", dir);
750 res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
751 free (buf);
752 if (res)
753 ldfile_add_library_path (dir, FALSE);
754 return res;
757 /* Set the default directory for finding script files.
758 Libraries will be searched for here too, but that's ok.
759 We look for the "ldscripts" directory in:
761 SCRIPTDIR (passed from Makefile)
762 (adjusted according to the current location of the binary)
763 SCRIPTDIR (passed from Makefile)
764 the dir where this program is (for using it from the build tree)
765 the dir where this program is/../lib
766 (for installing the tool suite elsewhere). */
768 static void
769 set_scripts_dir (void)
771 char *end, *dir;
772 size_t dirlen;
773 bfd_boolean found;
775 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
776 if (dir)
778 found = check_for_scripts_dir (dir);
779 free (dir);
780 if (found)
781 return;
784 dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
785 if (dir)
787 found = check_for_scripts_dir (dir);
788 free (dir);
789 if (found)
790 return;
793 if (check_for_scripts_dir (SCRIPTDIR))
794 /* We've been installed normally. */
795 return;
797 /* Look for "ldscripts" in the dir where our binary is. */
798 end = strrchr (program_name, '/');
799 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
801 /* We could have \foo\bar, or /foo\bar. */
802 char *bslash = strrchr (program_name, '\\');
804 if (end == NULL || (bslash != NULL && bslash > end))
805 end = bslash;
807 #endif
809 if (end == NULL)
810 /* Don't look for ldscripts in the current directory. There is
811 too much potential for confusion. */
812 return;
814 dirlen = end - program_name;
815 /* Make a copy of program_name in dir.
816 Leave room for later "/../lib". */
817 dir = xmalloc (dirlen + 8);
818 strncpy (dir, program_name, dirlen);
819 dir[dirlen] = '\0';
821 if (check_for_scripts_dir (dir))
823 free (dir);
824 return;
827 /* Look for "ldscripts" in <the dir where our binary is>/../lib. */
828 strcpy (dir + dirlen, "/../lib");
829 check_for_scripts_dir (dir);
830 free (dir);
833 void
834 add_ysym (const char *name)
836 if (link_info.notice_hash == NULL)
838 link_info.notice_hash = xmalloc (sizeof (struct bfd_hash_table));
839 if (!bfd_hash_table_init_n (link_info.notice_hash,
840 bfd_hash_newfunc,
841 sizeof (struct bfd_hash_entry),
842 61))
843 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
846 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
847 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
850 /* Record a symbol to be wrapped, from the --wrap option. */
852 void
853 add_wrap (const char *name)
855 if (link_info.wrap_hash == NULL)
857 link_info.wrap_hash = xmalloc (sizeof (struct bfd_hash_table));
858 if (!bfd_hash_table_init_n (link_info.wrap_hash,
859 bfd_hash_newfunc,
860 sizeof (struct bfd_hash_entry),
861 61))
862 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
865 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
866 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
869 /* Handle the -retain-symbols-file option. */
871 void
872 add_keepsyms_file (const char *filename)
874 FILE *file;
875 char *buf;
876 size_t bufsize;
877 int c;
879 if (link_info.strip == strip_some)
880 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
882 file = fopen (filename, "r");
883 if (file == NULL)
885 bfd_set_error (bfd_error_system_call);
886 einfo ("%X%P: %s: %E\n", filename);
887 return;
890 link_info.keep_hash = xmalloc (sizeof (struct bfd_hash_table));
891 if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
892 sizeof (struct bfd_hash_entry)))
893 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
895 bufsize = 100;
896 buf = xmalloc (bufsize);
898 c = getc (file);
899 while (c != EOF)
901 while (ISSPACE (c))
902 c = getc (file);
904 if (c != EOF)
906 size_t len = 0;
908 while (! ISSPACE (c) && c != EOF)
910 buf[len] = c;
911 ++len;
912 if (len >= bufsize)
914 bufsize *= 2;
915 buf = xrealloc (buf, bufsize);
917 c = getc (file);
920 buf[len] = '\0';
922 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
923 einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
927 if (link_info.strip != strip_none)
928 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
930 free (buf);
931 link_info.strip = strip_some;
934 /* Callbacks from the BFD linker routines. */
936 /* This is called when BFD has decided to include an archive member in
937 a link. */
939 static bfd_boolean
940 add_archive_element (struct bfd_link_info *info,
941 bfd *abfd,
942 const char *name)
944 lang_input_statement_type *input;
946 input = xmalloc (sizeof (lang_input_statement_type));
947 input->filename = abfd->filename;
948 input->local_sym_name = abfd->filename;
949 input->the_bfd = abfd;
950 input->asymbols = NULL;
951 input->next = NULL;
952 input->just_syms_flag = FALSE;
953 input->loaded = FALSE;
954 input->search_dirs_flag = FALSE;
956 /* FIXME: The following fields are not set: header.next,
957 header.type, closed, passive_position, symbol_count,
958 next_real_file, is_archive, target, real. This bit of code is
959 from the old decode_library_subfile function. I don't know
960 whether any of those fields matters. */
962 ldlang_add_file (input);
964 if (config.map_file != NULL)
966 static bfd_boolean header_printed;
967 struct bfd_link_hash_entry *h;
968 bfd *from;
969 int len;
971 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
973 if (h == NULL)
974 from = NULL;
975 else
977 switch (h->type)
979 default:
980 from = NULL;
981 break;
983 case bfd_link_hash_defined:
984 case bfd_link_hash_defweak:
985 from = h->u.def.section->owner;
986 break;
988 case bfd_link_hash_undefined:
989 case bfd_link_hash_undefweak:
990 from = h->u.undef.abfd;
991 break;
993 case bfd_link_hash_common:
994 from = h->u.c.p->section->owner;
995 break;
999 if (! header_printed)
1001 char buf[100];
1003 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
1004 minfo ("%s", buf);
1005 header_printed = TRUE;
1008 if (bfd_my_archive (abfd) == NULL)
1010 minfo ("%s", bfd_get_filename (abfd));
1011 len = strlen (bfd_get_filename (abfd));
1013 else
1015 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
1016 bfd_get_filename (abfd));
1017 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
1018 + strlen (bfd_get_filename (abfd))
1019 + 2);
1022 if (len >= 29)
1024 print_nl ();
1025 len = 0;
1027 while (len < 30)
1029 print_space ();
1030 ++len;
1033 if (from != NULL)
1034 minfo ("%B ", from);
1035 if (h != NULL)
1036 minfo ("(%T)\n", h->root.string);
1037 else
1038 minfo ("(%s)\n", name);
1041 if (trace_files || trace_file_tries)
1042 info_msg ("%I\n", input);
1044 return TRUE;
1047 /* This is called when BFD has discovered a symbol which is defined
1048 multiple times. */
1050 static bfd_boolean
1051 multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1052 const char *name,
1053 bfd *obfd,
1054 asection *osec,
1055 bfd_vma oval,
1056 bfd *nbfd,
1057 asection *nsec,
1058 bfd_vma nval)
1060 /* If either section has the output_section field set to
1061 bfd_abs_section_ptr, it means that the section is being
1062 discarded, and this is not really a multiple definition at all.
1063 FIXME: It would be cleaner to somehow ignore symbols defined in
1064 sections which are being discarded. */
1065 if ((osec->output_section != NULL
1066 && ! bfd_is_abs_section (osec)
1067 && bfd_is_abs_section (osec->output_section))
1068 || (nsec->output_section != NULL
1069 && ! bfd_is_abs_section (nsec)
1070 && bfd_is_abs_section (nsec->output_section)))
1071 return TRUE;
1073 einfo (_("%X%C: multiple definition of `%T'\n"),
1074 nbfd, nsec, nval, name);
1075 if (obfd != NULL)
1076 einfo (_("%D: first defined here\n"), obfd, osec, oval);
1078 if (command_line.relax)
1080 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
1081 command_line.relax = 0;
1084 return TRUE;
1087 /* This is called when there is a definition of a common symbol, or
1088 when a common symbol is found for a symbol that is already defined,
1089 or when two common symbols are found. We only do something if
1090 -warn-common was used. */
1092 static bfd_boolean
1093 multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1094 const char *name,
1095 bfd *obfd,
1096 enum bfd_link_hash_type otype,
1097 bfd_vma osize,
1098 bfd *nbfd,
1099 enum bfd_link_hash_type ntype,
1100 bfd_vma nsize)
1102 if (! config.warn_common)
1103 return TRUE;
1105 if (ntype == bfd_link_hash_defined
1106 || ntype == bfd_link_hash_defweak
1107 || ntype == bfd_link_hash_indirect)
1109 ASSERT (otype == bfd_link_hash_common);
1110 einfo (_("%B: warning: definition of `%T' overriding common\n"),
1111 nbfd, name);
1112 if (obfd != NULL)
1113 einfo (_("%B: warning: common is here\n"), obfd);
1115 else if (otype == bfd_link_hash_defined
1116 || otype == bfd_link_hash_defweak
1117 || otype == bfd_link_hash_indirect)
1119 ASSERT (ntype == bfd_link_hash_common);
1120 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
1121 nbfd, name);
1122 if (obfd != NULL)
1123 einfo (_("%B: warning: defined here\n"), obfd);
1125 else
1127 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1128 if (osize > nsize)
1130 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
1131 nbfd, name);
1132 if (obfd != NULL)
1133 einfo (_("%B: warning: larger common is here\n"), obfd);
1135 else if (nsize > osize)
1137 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
1138 nbfd, name);
1139 if (obfd != NULL)
1140 einfo (_("%B: warning: smaller common is here\n"), obfd);
1142 else
1144 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
1145 if (obfd != NULL)
1146 einfo (_("%B: warning: previous common is here\n"), obfd);
1150 return TRUE;
1153 /* This is called when BFD has discovered a set element. H is the
1154 entry in the linker hash table for the set. SECTION and VALUE
1155 represent a value which should be added to the set. */
1157 static bfd_boolean
1158 add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1159 struct bfd_link_hash_entry *h,
1160 bfd_reloc_code_real_type reloc,
1161 bfd *abfd,
1162 asection *section,
1163 bfd_vma value)
1165 if (config.warn_constructors)
1166 einfo (_("%P: warning: global constructor %s used\n"),
1167 h->root.string);
1169 if (! config.build_constructors)
1170 return TRUE;
1172 ldctor_add_set_entry (h, reloc, NULL, section, value);
1174 if (h->type == bfd_link_hash_new)
1176 h->type = bfd_link_hash_undefined;
1177 h->u.undef.abfd = abfd;
1178 /* We don't call bfd_link_add_undef to add this to the list of
1179 undefined symbols because we are going to define it
1180 ourselves. */
1183 return TRUE;
1186 /* This is called when BFD has discovered a constructor. This is only
1187 called for some object file formats--those which do not handle
1188 constructors in some more clever fashion. This is similar to
1189 adding an element to a set, but less general. */
1191 static bfd_boolean
1192 constructor_callback (struct bfd_link_info *info,
1193 bfd_boolean constructor,
1194 const char *name,
1195 bfd *abfd,
1196 asection *section,
1197 bfd_vma value)
1199 char *s;
1200 struct bfd_link_hash_entry *h;
1201 char set_name[1 + sizeof "__CTOR_LIST__"];
1203 if (config.warn_constructors)
1204 einfo (_("%P: warning: global constructor %s used\n"), name);
1206 if (! config.build_constructors)
1207 return TRUE;
1209 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1210 useful error message. */
1211 if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL
1212 && (info->relocatable
1213 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1214 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1216 s = set_name;
1217 if (bfd_get_symbol_leading_char (abfd) != '\0')
1218 *s++ = bfd_get_symbol_leading_char (abfd);
1219 if (constructor)
1220 strcpy (s, "__CTOR_LIST__");
1221 else
1222 strcpy (s, "__DTOR_LIST__");
1224 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
1225 if (h == (struct bfd_link_hash_entry *) NULL)
1226 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1227 if (h->type == bfd_link_hash_new)
1229 h->type = bfd_link_hash_undefined;
1230 h->u.undef.abfd = abfd;
1231 /* We don't call bfd_link_add_undef to add this to the list of
1232 undefined symbols because we are going to define it
1233 ourselves. */
1236 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1237 return TRUE;
1240 /* A structure used by warning_callback to pass information through
1241 bfd_map_over_sections. */
1243 struct warning_callback_info
1245 bfd_boolean found;
1246 const char *warning;
1247 const char *symbol;
1248 asymbol **asymbols;
1251 /* This is called when there is a reference to a warning symbol. */
1253 static bfd_boolean
1254 warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1255 const char *warning,
1256 const char *symbol,
1257 bfd *abfd,
1258 asection *section,
1259 bfd_vma address)
1261 /* This is a hack to support warn_multiple_gp. FIXME: This should
1262 have a cleaner interface, but what? */
1263 if (! config.warn_multiple_gp
1264 && strcmp (warning, "using multiple gp values") == 0)
1265 return TRUE;
1267 if (section != NULL)
1268 einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
1269 else if (abfd == NULL)
1270 einfo ("%P: %s%s\n", _("warning: "), warning);
1271 else if (symbol == NULL)
1272 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1273 else
1275 lang_input_statement_type *entry;
1276 asymbol **asymbols;
1277 struct warning_callback_info info;
1279 /* Look through the relocs to see if we can find a plausible
1280 address. */
1281 entry = (lang_input_statement_type *) abfd->usrdata;
1282 if (entry != NULL && entry->asymbols != NULL)
1283 asymbols = entry->asymbols;
1284 else
1286 long symsize;
1287 long symbol_count;
1289 symsize = bfd_get_symtab_upper_bound (abfd);
1290 if (symsize < 0)
1291 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1292 asymbols = xmalloc (symsize);
1293 symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1294 if (symbol_count < 0)
1295 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1296 if (entry != NULL)
1298 entry->asymbols = asymbols;
1299 entry->symbol_count = symbol_count;
1303 info.found = FALSE;
1304 info.warning = warning;
1305 info.symbol = symbol;
1306 info.asymbols = asymbols;
1307 bfd_map_over_sections (abfd, warning_find_reloc, &info);
1309 if (! info.found)
1310 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1312 if (entry == NULL)
1313 free (asymbols);
1316 return TRUE;
1319 /* This is called by warning_callback for each section. It checks the
1320 relocs of the section to see if it can find a reference to the
1321 symbol which triggered the warning. If it can, it uses the reloc
1322 to give an error message with a file and line number. */
1324 static void
1325 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
1327 struct warning_callback_info *info = iarg;
1328 long relsize;
1329 arelent **relpp;
1330 long relcount;
1331 arelent **p, **pend;
1333 if (info->found)
1334 return;
1336 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1337 if (relsize < 0)
1338 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1339 if (relsize == 0)
1340 return;
1342 relpp = xmalloc (relsize);
1343 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1344 if (relcount < 0)
1345 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1347 p = relpp;
1348 pend = p + relcount;
1349 for (; p < pend && *p != NULL; p++)
1351 arelent *q = *p;
1353 if (q->sym_ptr_ptr != NULL
1354 && *q->sym_ptr_ptr != NULL
1355 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1357 /* We found a reloc for the symbol we are looking for. */
1358 einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1359 info->warning);
1360 info->found = TRUE;
1361 break;
1365 free (relpp);
1368 /* This is called when an undefined symbol is found. */
1370 static bfd_boolean
1371 undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1372 const char *name,
1373 bfd *abfd,
1374 asection *section,
1375 bfd_vma address,
1376 bfd_boolean error)
1378 static char *error_name;
1379 static unsigned int error_count;
1381 #define MAX_ERRORS_IN_A_ROW 5
1383 if (config.warn_once)
1385 static struct bfd_hash_table *hash;
1387 /* Only warn once about a particular undefined symbol. */
1388 if (hash == NULL)
1390 hash = xmalloc (sizeof (struct bfd_hash_table));
1391 if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
1392 sizeof (struct bfd_hash_entry)))
1393 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1396 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1397 return TRUE;
1399 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
1400 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1403 /* We never print more than a reasonable number of errors in a row
1404 for a single symbol. */
1405 if (error_name != NULL
1406 && strcmp (name, error_name) == 0)
1407 ++error_count;
1408 else
1410 error_count = 0;
1411 if (error_name != NULL)
1412 free (error_name);
1413 error_name = xstrdup (name);
1416 if (section != NULL)
1418 if (error_count < MAX_ERRORS_IN_A_ROW)
1420 if (error)
1421 einfo (_("%X%C: undefined reference to `%T'\n"),
1422 abfd, section, address, name);
1423 else
1424 einfo (_("%C: warning: undefined reference to `%T'\n"),
1425 abfd, section, address, name);
1427 else if (error_count == MAX_ERRORS_IN_A_ROW)
1429 if (error)
1430 einfo (_("%X%D: more undefined references to `%T' follow\n"),
1431 abfd, section, address, name);
1432 else
1433 einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1434 abfd, section, address, name);
1436 else if (error)
1437 einfo ("%X");
1439 else
1441 if (error_count < MAX_ERRORS_IN_A_ROW)
1443 if (error)
1444 einfo (_("%X%B: undefined reference to `%T'\n"),
1445 abfd, name);
1446 else
1447 einfo (_("%B: warning: undefined reference to `%T'\n"),
1448 abfd, name);
1450 else if (error_count == MAX_ERRORS_IN_A_ROW)
1452 if (error)
1453 einfo (_("%X%B: more undefined references to `%T' follow\n"),
1454 abfd, name);
1455 else
1456 einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1457 abfd, name);
1459 else if (error)
1460 einfo ("%X");
1463 return TRUE;
1466 /* Counter to limit the number of relocation overflow error messages
1467 to print. Errors are printed as it is decremented. When it's
1468 called and the counter is zero, a final message is printed
1469 indicating more relocations were omitted. When it gets to -1, no
1470 such errors are printed. If it's initially set to a value less
1471 than -1, all such errors will be printed (--verbose does this). */
1473 int overflow_cutoff_limit = 10;
1475 /* This is called when a reloc overflows. */
1477 static bfd_boolean
1478 reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1479 struct bfd_link_hash_entry *entry,
1480 const char *name,
1481 const char *reloc_name,
1482 bfd_vma addend,
1483 bfd *abfd,
1484 asection *section,
1485 bfd_vma address)
1487 if (overflow_cutoff_limit == -1)
1488 return TRUE;
1490 einfo ("%X%C:", abfd, section, address);
1492 if (overflow_cutoff_limit >= 0
1493 && overflow_cutoff_limit-- == 0)
1495 einfo (_(" additional relocation overflows omitted from the output\n"));
1496 return TRUE;
1499 if (entry)
1501 while (entry->type == bfd_link_hash_indirect
1502 || entry->type == bfd_link_hash_warning)
1503 entry = entry->u.i.link;
1504 switch (entry->type)
1506 case bfd_link_hash_undefined:
1507 case bfd_link_hash_undefweak:
1508 einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1509 reloc_name, entry->root.string);
1510 break;
1511 case bfd_link_hash_defined:
1512 case bfd_link_hash_defweak:
1513 einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1514 reloc_name, entry->root.string,
1515 entry->u.def.section,
1516 entry->u.def.section == bfd_abs_section_ptr
1517 ? output_bfd : entry->u.def.section->owner);
1518 break;
1519 default:
1520 abort ();
1521 break;
1524 else
1525 einfo (_(" relocation truncated to fit: %s against `%T'"),
1526 reloc_name, name);
1527 if (addend != 0)
1528 einfo ("+%v", addend);
1529 einfo ("\n");
1530 return TRUE;
1533 /* This is called when a dangerous relocation is made. */
1535 static bfd_boolean
1536 reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1537 const char *message,
1538 bfd *abfd,
1539 asection *section,
1540 bfd_vma address)
1542 einfo (_("%X%C: dangerous relocation: %s\n"),
1543 abfd, section, address, message);
1544 return TRUE;
1547 /* This is called when a reloc is being generated attached to a symbol
1548 that is not being output. */
1550 static bfd_boolean
1551 unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1552 const char *name,
1553 bfd *abfd,
1554 asection *section,
1555 bfd_vma address)
1557 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1558 abfd, section, address, name);
1559 return TRUE;
1562 /* This is called if link_info.notice_all is set, or when a symbol in
1563 link_info.notice_hash is found. Symbols are put in notice_hash
1564 using the -y option. */
1566 static bfd_boolean
1567 notice (struct bfd_link_info *info,
1568 const char *name,
1569 bfd *abfd,
1570 asection *section,
1571 bfd_vma value)
1573 if (name == NULL)
1575 if (command_line.cref || nocrossref_list != NULL)
1576 return handle_asneeded_cref (abfd, value);
1577 return TRUE;
1580 if (! info->notice_all
1581 || (info->notice_hash != NULL
1582 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
1584 if (bfd_is_und_section (section))
1585 einfo ("%B: reference to %s\n", abfd, name);
1586 else
1587 einfo ("%B: definition of %s\n", abfd, name);
1590 if (command_line.cref || nocrossref_list != NULL)
1591 add_cref (name, abfd, section, value);
1593 return TRUE;