5dd63a786e55049b44f06be8682570036f0ef328
[deliverable/binutils-gdb.git] / ld / ldmain.c
1 /* Main program of GNU linker.
2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005, 2006, 2007
4 Free Software Foundation, Inc.
5 Written by Steve Chamberlain steve@cygnus.com
6
7 This file is part of GLD, the Gnu Linker.
8
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.
13
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.
18
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. */
23
24 #include "sysdep.h"
25 #include "bfd.h"
26 #include "safe-ctype.h"
27 #include "libiberty.h"
28 #include "progress.h"
29 #include "bfdlink.h"
30 #include "filenames.h"
31
32 #include "ld.h"
33 #include "ldmain.h"
34 #include "ldmisc.h"
35 #include "ldwrite.h"
36 #include "ldexp.h"
37 #include "ldlang.h"
38 #include <ldgram.h>
39 #include "ldlex.h"
40 #include "ldfile.h"
41 #include "ldemul.h"
42 #include "ldctor.h"
43
44 /* Somewhere above, sys/stat.h got included. */
45 #if !defined(S_ISDIR) && defined(S_IFDIR)
46 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
47 #endif
48
49 #include <string.h>
50
51 #ifdef HAVE_SBRK
52 #if !HAVE_DECL_SBRK
53 extern void *sbrk ();
54 #endif
55 #endif
56
57 #ifndef TARGET_SYSTEM_ROOT
58 #define TARGET_SYSTEM_ROOT ""
59 #endif
60
61 /* EXPORTS */
62
63 char *default_target;
64 const char *output_filename = "a.out";
65
66 /* Name this program was invoked by. */
67 char *program_name;
68
69 /* The prefix for system library directories. */
70 const char *ld_sysroot;
71
72 /* The canonical representation of ld_sysroot. */
73 char * ld_canon_sysroot;
74 int ld_canon_sysroot_len;
75
76 /* The file that we're creating. */
77 bfd *output_bfd = 0;
78
79 /* Set by -G argument, for MIPS ECOFF target. */
80 int g_switch_value = 8;
81
82 /* Nonzero means print names of input files as processed. */
83 bfd_boolean trace_files;
84
85 /* Nonzero means same, but note open failures, too. */
86 bfd_boolean trace_file_tries;
87
88 /* Nonzero means version number was printed, so exit successfully
89 instead of complaining if no input files are given. */
90 bfd_boolean version_printed;
91
92 /* Nonzero means link in every member of an archive. */
93 bfd_boolean whole_archive;
94
95 /* Nonzero means create DT_NEEDED entries only if a dynamic library
96 actually satisfies some reference in a regular object. */
97 bfd_boolean as_needed;
98
99 /* Nonzero means never create DT_NEEDED entries for dynamic libraries
100 in DT_NEEDED tags. */
101 bfd_boolean add_needed = TRUE;
102
103 /* TRUE if we should demangle symbol names. */
104 bfd_boolean demangling;
105
106 args_type command_line;
107
108 ld_config_type config;
109
110 sort_type sort_section;
111
112 static const char *get_sysroot
113 (int, char **);
114 static char *get_emulation
115 (int, char **);
116 static void set_scripts_dir
117 (void);
118 static bfd_boolean add_archive_element
119 (struct bfd_link_info *, bfd *, const char *);
120 static bfd_boolean multiple_definition
121 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
122 bfd *, asection *, bfd_vma);
123 static bfd_boolean multiple_common
124 (struct bfd_link_info *, const char *, bfd *, enum bfd_link_hash_type,
125 bfd_vma, bfd *, enum bfd_link_hash_type, bfd_vma);
126 static bfd_boolean add_to_set
127 (struct bfd_link_info *, struct bfd_link_hash_entry *,
128 bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
129 static bfd_boolean constructor_callback
130 (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
131 asection *, bfd_vma);
132 static bfd_boolean warning_callback
133 (struct bfd_link_info *, const char *, const char *, bfd *,
134 asection *, bfd_vma);
135 static void warning_find_reloc
136 (bfd *, asection *, void *);
137 static bfd_boolean undefined_symbol
138 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
139 bfd_boolean);
140 static bfd_boolean reloc_overflow
141 (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
142 const char *, bfd_vma, bfd *, asection *, bfd_vma);
143 static bfd_boolean reloc_dangerous
144 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
145 static bfd_boolean unattached_reloc
146 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
147 static bfd_boolean notice
148 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
149
150 static struct bfd_link_callbacks link_callbacks =
151 {
152 add_archive_element,
153 multiple_definition,
154 multiple_common,
155 add_to_set,
156 constructor_callback,
157 warning_callback,
158 undefined_symbol,
159 reloc_overflow,
160 reloc_dangerous,
161 unattached_reloc,
162 notice,
163 einfo,
164 ldlang_override_segment_assignment
165 };
166
167 struct bfd_link_info link_info;
168 \f
169 static void
170 remove_output (void)
171 {
172 if (output_filename)
173 {
174 if (output_bfd)
175 bfd_cache_close (output_bfd);
176 if (delete_output_file_on_failure)
177 unlink_if_ordinary (output_filename);
178 }
179 }
180
181 int
182 main (int argc, char **argv)
183 {
184 char *emulation;
185 long start_time = get_run_time ();
186
187 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
188 setlocale (LC_MESSAGES, "");
189 #endif
190 #if defined (HAVE_SETLOCALE)
191 setlocale (LC_CTYPE, "");
192 #endif
193 bindtextdomain (PACKAGE, LOCALEDIR);
194 textdomain (PACKAGE);
195
196 program_name = argv[0];
197 xmalloc_set_program_name (program_name);
198
199 START_PROGRESS (program_name, 0);
200
201 expandargv (&argc, &argv);
202
203 bfd_init ();
204
205 bfd_set_error_program_name (program_name);
206
207 xatexit (remove_output);
208
209 /* Set up the sysroot directory. */
210 ld_sysroot = get_sysroot (argc, argv);
211 if (*ld_sysroot)
212 {
213 if (*TARGET_SYSTEM_ROOT == 0)
214 {
215 einfo ("%P%F: this linker was not configured to use sysroots\n");
216 ld_sysroot = "";
217 }
218 else
219 ld_canon_sysroot = lrealpath (ld_sysroot);
220 }
221 if (ld_canon_sysroot)
222 ld_canon_sysroot_len = strlen (ld_canon_sysroot);
223 else
224 ld_canon_sysroot_len = -1;
225
226 /* Set the default BFD target based on the configured target. Doing
227 this permits the linker to be configured for a particular target,
228 and linked against a shared BFD library which was configured for
229 a different target. The macro TARGET is defined by Makefile. */
230 if (! bfd_set_default_target (TARGET))
231 {
232 einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
233 xexit (1);
234 }
235
236 #if YYDEBUG
237 {
238 extern int yydebug;
239 yydebug = 1;
240 }
241 #endif
242
243 /* Initialize the data about options. */
244 trace_files = trace_file_tries = version_printed = FALSE;
245 whole_archive = FALSE;
246 config.build_constructors = TRUE;
247 config.dynamic_link = FALSE;
248 config.has_shared = FALSE;
249 config.rpath_separator = ':';
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;
262
263 sort_section = none;
264
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;
271
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;
328
329 config.maxpagesize = 0;
330 config.commonpagesize = 0;
331
332 ldfile_add_arch ("");
333
334 config.make_executable = TRUE;
335 force_make_executable = FALSE;
336 config.magic_demand_paged = TRUE;
337 config.text_read_only = TRUE;
338
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);
346
347 if (config.hash_table_size != 0)
348 bfd_hash_set_default_size (config.hash_table_size);
349
350 ldemul_set_symbols ();
351
352 if (link_info.relocatable)
353 {
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"));
360 }
361
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)
368 {
369 case symbolic_unset:
370 break;
371 case symbolic:
372 /* -Bsymbolic is for shared library only. */
373 if (link_info.shared)
374 {
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;
379 }
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;
386 }
387
388 switch (command_line.dynamic_list)
389 {
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;
397 }
398
399 if (! link_info.shared)
400 {
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"));
405 }
406
407 if (! link_info.shared || link_info.pie)
408 link_info.executable = TRUE;
409
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)
414 {
415 link_info.strip = strip_debugger;
416 if (link_info.discard == discard_sec_merge)
417 link_info.discard = discard_all;
418 }
419
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 ();
423
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)
428 {
429 ldfile_open_command_file (command_line.default_script);
430 parser_input = input_script;
431 yyparse ();
432 }
433
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)
437 {
438 int isfile;
439 char *s = ldemul_get_script (&isfile);
440
441 if (isfile)
442 ldfile_open_command_file (s);
443 else
444 {
445 lex_string = s;
446 lex_redirect (s);
447 }
448 parser_input = input_script;
449 yyparse ();
450 lex_string = NULL;
451 }
452
453 if (trace_file_tries)
454 {
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");
460
461 if (saved_script_handle)
462 {
463 static const int ld_bufsz = 8193;
464 size_t n;
465 char *buf = xmalloc (ld_bufsz);
466
467 rewind (saved_script_handle);
468 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
469 {
470 buf[n] = 0;
471 info_msg (buf);
472 }
473 rewind (saved_script_handle);
474 free (buf);
475 }
476 else
477 {
478 int isfile;
479
480 info_msg (ldemul_get_script (&isfile));
481 }
482
483 info_msg ("\n==================================================\n");
484 }
485
486 lang_final ();
487
488 if (!lang_has_input_file)
489 {
490 if (version_printed)
491 xexit (0);
492 einfo (_("%P%F: no input files\n"));
493 }
494
495 if (trace_files)
496 info_msg (_("%P: mode %s\n"), emulation);
497
498 ldemul_after_parse ();
499
500 if (config.map_filename)
501 {
502 if (strcmp (config.map_filename, "-") == 0)
503 {
504 config.map_file = stdout;
505 }
506 else
507 {
508 config.map_file = fopen (config.map_filename, FOPEN_WT);
509 if (config.map_file == (FILE *) NULL)
510 {
511 bfd_set_error (bfd_error_system_call);
512 einfo (_("%P%F: cannot open map file %s: %E\n"),
513 config.map_filename);
514 }
515 }
516 }
517
518 lang_process ();
519
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;
526
527 ldwrite ();
528
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 ();
535
536 lang_finish ();
537
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)
542 {
543 if (trace_files)
544 einfo (_("%P: link errors found, deleting executable `%s'\n"),
545 output_filename);
546
547 /* The file will be removed by remove_output. */
548 xexit (1);
549 }
550 else
551 {
552 if (! bfd_close (output_bfd))
553 einfo (_("%F%B: final close failed: %E\n"), output_bfd);
554
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)
559 {
560 int len = strlen (output_filename);
561
562 if (len < 4
563 || (strcasecmp (output_filename + len - 4, ".exe") != 0
564 && strcasecmp (output_filename + len - 4, ".dll") != 0))
565 {
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);
572
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);
577
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)
585 {
586 int done = fwrite (buf, 1, l, dst);
587
588 if (done != l)
589 einfo (_("%P: Error writing file `%s'\n"), dst_name);
590 }
591
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);
597 }
598 }
599 }
600
601 END_PROGRESS (program_name);
602
603 if (config.stats)
604 {
605 #ifdef HAVE_SBRK
606 char *lim = sbrk (0);
607 #endif
608 long run_time = get_run_time () - start_time;
609
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
616 }
617
618 /* Prevent remove_output from doing anything, after a successful link. */
619 output_filename = NULL;
620
621 xexit (0);
622 return 0;
623 }
624
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. */
628
629 static char *
630 get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
631 {
632 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
633 char *path;
634 struct stat s;
635
636 path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
637 if (path)
638 {
639 if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
640 return path;
641 free (path);
642 }
643 #endif
644 return 0;
645 }
646
647 /* Return the sysroot directory. Return "" if no sysroot is being used. */
648
649 static const char *
650 get_sysroot (int argc, char **argv)
651 {
652 int i;
653 const char *path;
654
655 for (i = 1; i < argc; i++)
656 if (CONST_STRNEQ (argv[i], "--sysroot="))
657 return argv[i] + strlen ("--sysroot=");
658
659 path = get_relative_sysroot (BINDIR);
660 if (path)
661 return path;
662
663 path = get_relative_sysroot (TOOLBINDIR);
664 if (path)
665 return path;
666
667 return TARGET_SYSTEM_ROOT;
668 }
669
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). */
672
673 static char *
674 get_emulation (int argc, char **argv)
675 {
676 char *emulation;
677 int i;
678
679 emulation = getenv (EMULATION_ENVIRON);
680 if (emulation == NULL)
681 emulation = DEFAULT_EMULATION;
682
683 for (i = 1; i < argc; i++)
684 {
685 if (CONST_STRNEQ (argv[i], "-m"))
686 {
687 if (argv[i][2] == '\0')
688 {
689 /* -m EMUL */
690 if (i < argc - 1)
691 {
692 emulation = argv[i + 1];
693 i++;
694 }
695 else
696 einfo (_("%P%F: missing argument to -m\n"));
697 }
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)
707 {
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. */
715 }
716 else if (strcmp (argv[i], "-m486") == 0)
717 {
718 /* FIXME: The argument -m486 is passed to the linker on
719 some Linux systems. Hope that nobody creates an
720 emulation named 486. */
721 }
722 else
723 {
724 /* -mEMUL */
725 emulation = &argv[i][2];
726 }
727 }
728 }
729
730 return emulation;
731 }
732
733 /* If directory DIR contains an "ldscripts" subdirectory,
734 add DIR to the library search path and return TRUE,
735 else return FALSE. */
736
737 static bfd_boolean
738 check_for_scripts_dir (char *dir)
739 {
740 size_t dirlen;
741 char *buf;
742 struct stat s;
743 bfd_boolean res;
744
745 dirlen = strlen (dir);
746 /* sizeof counts the terminating NUL. */
747 buf = xmalloc (dirlen + sizeof ("/ldscripts"));
748 sprintf (buf, "%s/ldscripts", dir);
749
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;
755 }
756
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:
760
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). */
767
768 static void
769 set_scripts_dir (void)
770 {
771 char *end, *dir;
772 size_t dirlen;
773 bfd_boolean found;
774
775 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
776 if (dir)
777 {
778 found = check_for_scripts_dir (dir);
779 free (dir);
780 if (found)
781 return;
782 }
783
784 dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
785 if (dir)
786 {
787 found = check_for_scripts_dir (dir);
788 free (dir);
789 if (found)
790 return;
791 }
792
793 if (check_for_scripts_dir (SCRIPTDIR))
794 /* We've been installed normally. */
795 return;
796
797 /* Look for "ldscripts" in the dir where our binary is. */
798 end = strrchr (program_name, '/');
799 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
800 {
801 /* We could have \foo\bar, or /foo\bar. */
802 char *bslash = strrchr (program_name, '\\');
803
804 if (end == NULL || (bslash != NULL && bslash > end))
805 end = bslash;
806 }
807 #endif
808
809 if (end == NULL)
810 /* Don't look for ldscripts in the current directory. There is
811 too much potential for confusion. */
812 return;
813
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';
820
821 if (check_for_scripts_dir (dir))
822 {
823 free (dir);
824 return;
825 }
826
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);
831 }
832
833 void
834 add_ysym (const char *name)
835 {
836 if (link_info.notice_hash == NULL)
837 {
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"));
844 }
845
846 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
847 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
848 }
849
850 /* Record a symbol to be wrapped, from the --wrap option. */
851
852 void
853 add_wrap (const char *name)
854 {
855 if (link_info.wrap_hash == NULL)
856 {
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"));
863 }
864
865 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
866 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
867 }
868
869 /* Handle the -retain-symbols-file option. */
870
871 void
872 add_keepsyms_file (const char *filename)
873 {
874 FILE *file;
875 char *buf;
876 size_t bufsize;
877 int c;
878
879 if (link_info.strip == strip_some)
880 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
881
882 file = fopen (filename, "r");
883 if (file == NULL)
884 {
885 bfd_set_error (bfd_error_system_call);
886 einfo ("%X%P: %s: %E\n", filename);
887 return;
888 }
889
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"));
894
895 bufsize = 100;
896 buf = xmalloc (bufsize);
897
898 c = getc (file);
899 while (c != EOF)
900 {
901 while (ISSPACE (c))
902 c = getc (file);
903
904 if (c != EOF)
905 {
906 size_t len = 0;
907
908 while (! ISSPACE (c) && c != EOF)
909 {
910 buf[len] = c;
911 ++len;
912 if (len >= bufsize)
913 {
914 bufsize *= 2;
915 buf = xrealloc (buf, bufsize);
916 }
917 c = getc (file);
918 }
919
920 buf[len] = '\0';
921
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"));
924 }
925 }
926
927 if (link_info.strip != strip_none)
928 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
929
930 free (buf);
931 link_info.strip = strip_some;
932 }
933 \f
934 /* Callbacks from the BFD linker routines. */
935
936 /* This is called when BFD has decided to include an archive member in
937 a link. */
938
939 static bfd_boolean
940 add_archive_element (struct bfd_link_info *info,
941 bfd *abfd,
942 const char *name)
943 {
944 lang_input_statement_type *input;
945
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;
955
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. */
961
962 ldlang_add_file (input);
963
964 if (config.map_file != NULL)
965 {
966 static bfd_boolean header_printed;
967 struct bfd_link_hash_entry *h;
968 bfd *from;
969 int len;
970
971 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
972
973 if (h == NULL)
974 from = NULL;
975 else
976 {
977 switch (h->type)
978 {
979 default:
980 from = NULL;
981 break;
982
983 case bfd_link_hash_defined:
984 case bfd_link_hash_defweak:
985 from = h->u.def.section->owner;
986 break;
987
988 case bfd_link_hash_undefined:
989 case bfd_link_hash_undefweak:
990 from = h->u.undef.abfd;
991 break;
992
993 case bfd_link_hash_common:
994 from = h->u.c.p->section->owner;
995 break;
996 }
997 }
998
999 if (! header_printed)
1000 {
1001 char buf[100];
1002
1003 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
1004 minfo ("%s", buf);
1005 header_printed = TRUE;
1006 }
1007
1008 if (bfd_my_archive (abfd) == NULL)
1009 {
1010 minfo ("%s", bfd_get_filename (abfd));
1011 len = strlen (bfd_get_filename (abfd));
1012 }
1013 else
1014 {
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);
1020 }
1021
1022 if (len >= 29)
1023 {
1024 print_nl ();
1025 len = 0;
1026 }
1027 while (len < 30)
1028 {
1029 print_space ();
1030 ++len;
1031 }
1032
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);
1039 }
1040
1041 if (trace_files || trace_file_tries)
1042 info_msg ("%I\n", input);
1043
1044 return TRUE;
1045 }
1046
1047 /* This is called when BFD has discovered a symbol which is defined
1048 multiple times. */
1049
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)
1059 {
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;
1072
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);
1077
1078 if (command_line.relax)
1079 {
1080 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
1081 command_line.relax = 0;
1082 }
1083
1084 return TRUE;
1085 }
1086
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. */
1091
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)
1101 {
1102 if (! config.warn_common)
1103 return TRUE;
1104
1105 if (ntype == bfd_link_hash_defined
1106 || ntype == bfd_link_hash_defweak
1107 || ntype == bfd_link_hash_indirect)
1108 {
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);
1114 }
1115 else if (otype == bfd_link_hash_defined
1116 || otype == bfd_link_hash_defweak
1117 || otype == bfd_link_hash_indirect)
1118 {
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);
1124 }
1125 else
1126 {
1127 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1128 if (osize > nsize)
1129 {
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);
1134 }
1135 else if (nsize > osize)
1136 {
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);
1141 }
1142 else
1143 {
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);
1147 }
1148 }
1149
1150 return TRUE;
1151 }
1152
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. */
1156
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)
1164 {
1165 if (config.warn_constructors)
1166 einfo (_("%P: warning: global constructor %s used\n"),
1167 h->root.string);
1168
1169 if (! config.build_constructors)
1170 return TRUE;
1171
1172 ldctor_add_set_entry (h, reloc, NULL, section, value);
1173
1174 if (h->type == bfd_link_hash_new)
1175 {
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. */
1181 }
1182
1183 return TRUE;
1184 }
1185
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. */
1190
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)
1198 {
1199 char *s;
1200 struct bfd_link_hash_entry *h;
1201 char set_name[1 + sizeof "__CTOR_LIST__"];
1202
1203 if (config.warn_constructors)
1204 einfo (_("%P: warning: global constructor %s used\n"), name);
1205
1206 if (! config.build_constructors)
1207 return TRUE;
1208
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"));
1215
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__");
1223
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)
1228 {
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. */
1234 }
1235
1236 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1237 return TRUE;
1238 }
1239
1240 /* A structure used by warning_callback to pass information through
1241 bfd_map_over_sections. */
1242
1243 struct warning_callback_info
1244 {
1245 bfd_boolean found;
1246 const char *warning;
1247 const char *symbol;
1248 asymbol **asymbols;
1249 };
1250
1251 /* This is called when there is a reference to a warning symbol. */
1252
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)
1260 {
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;
1266
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
1274 {
1275 lang_input_statement_type *entry;
1276 asymbol **asymbols;
1277 struct warning_callback_info info;
1278
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
1285 {
1286 long symsize;
1287 long symbol_count;
1288
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)
1297 {
1298 entry->asymbols = asymbols;
1299 entry->symbol_count = symbol_count;
1300 }
1301 }
1302
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);
1308
1309 if (! info.found)
1310 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1311
1312 if (entry == NULL)
1313 free (asymbols);
1314 }
1315
1316 return TRUE;
1317 }
1318
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. */
1323
1324 static void
1325 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
1326 {
1327 struct warning_callback_info *info = iarg;
1328 long relsize;
1329 arelent **relpp;
1330 long relcount;
1331 arelent **p, **pend;
1332
1333 if (info->found)
1334 return;
1335
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;
1341
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);
1346
1347 p = relpp;
1348 pend = p + relcount;
1349 for (; p < pend && *p != NULL; p++)
1350 {
1351 arelent *q = *p;
1352
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)
1356 {
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;
1362 }
1363 }
1364
1365 free (relpp);
1366 }
1367
1368 /* This is called when an undefined symbol is found. */
1369
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)
1377 {
1378 static char *error_name;
1379 static unsigned int error_count;
1380
1381 #define MAX_ERRORS_IN_A_ROW 5
1382
1383 if (config.warn_once)
1384 {
1385 static struct bfd_hash_table *hash;
1386
1387 /* Only warn once about a particular undefined symbol. */
1388 if (hash == NULL)
1389 {
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"));
1394 }
1395
1396 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1397 return TRUE;
1398
1399 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
1400 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1401 }
1402
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
1409 {
1410 error_count = 0;
1411 if (error_name != NULL)
1412 free (error_name);
1413 error_name = xstrdup (name);
1414 }
1415
1416 if (section != NULL)
1417 {
1418 if (error_count < MAX_ERRORS_IN_A_ROW)
1419 {
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);
1426 }
1427 else if (error_count == MAX_ERRORS_IN_A_ROW)
1428 {
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);
1435 }
1436 else if (error)
1437 einfo ("%X");
1438 }
1439 else
1440 {
1441 if (error_count < MAX_ERRORS_IN_A_ROW)
1442 {
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);
1449 }
1450 else if (error_count == MAX_ERRORS_IN_A_ROW)
1451 {
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);
1458 }
1459 else if (error)
1460 einfo ("%X");
1461 }
1462
1463 return TRUE;
1464 }
1465
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). */
1472
1473 int overflow_cutoff_limit = 10;
1474
1475 /* This is called when a reloc overflows. */
1476
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)
1486 {
1487 if (overflow_cutoff_limit == -1)
1488 return TRUE;
1489
1490 einfo ("%X%C:", abfd, section, address);
1491
1492 if (overflow_cutoff_limit >= 0
1493 && overflow_cutoff_limit-- == 0)
1494 {
1495 einfo (_(" additional relocation overflows omitted from the output\n"));
1496 return TRUE;
1497 }
1498
1499 if (entry)
1500 {
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)
1505 {
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;
1522 }
1523 }
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;
1531 }
1532
1533 /* This is called when a dangerous relocation is made. */
1534
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)
1541 {
1542 einfo (_("%X%C: dangerous relocation: %s\n"),
1543 abfd, section, address, message);
1544 return TRUE;
1545 }
1546
1547 /* This is called when a reloc is being generated attached to a symbol
1548 that is not being output. */
1549
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)
1556 {
1557 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1558 abfd, section, address, name);
1559 return TRUE;
1560 }
1561
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. */
1565
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)
1572 {
1573 if (name == NULL)
1574 {
1575 if (command_line.cref || nocrossref_list != NULL)
1576 return handle_asneeded_cref (abfd, value);
1577 return TRUE;
1578 }
1579
1580 if (! info->notice_all
1581 || (info->notice_hash != NULL
1582 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
1583 {
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);
1588 }
1589
1590 if (command_line.cref || nocrossref_list != NULL)
1591 add_cref (name, abfd, section, value);
1592
1593 return TRUE;
1594 }
This page took 0.068114 seconds and 4 git commands to generate.