1 /* $MirOS: src/gnu/usr.bin/binutils/ld/ldmain.c,v 1.5 2005/07/07 16:23:12 tg Exp $ */
2
3 /* Main program of GNU linker.
4 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
5 2002, 2003, 2004, 2005
6 Free Software Foundation, Inc.
7 Written by Steve Chamberlain steve@cygnus.com
8
9 This file is part of GLD, the Gnu Linker.
10
11 GLD is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2, or (at your option)
14 any later version.
15
16 GLD is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GLD; see the file COPYING. If not, write to the Free
23 Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
24 02110-1301, USA. */
25
26 #include "bfd.h"
27 #include "sysdep.h"
28 #include <stdio.h>
29 #include "safe-ctype.h"
30 #include "libiberty.h"
31 #include "progress.h"
32 #include "bfdlink.h"
33 #include "filenames.h"
34
35 #include "ld.h"
36 #include "ldmain.h"
37 #include "ldmisc.h"
38 #include "ldwrite.h"
39 #include "ldexp.h"
40 #include "ldlang.h"
41 #include <ldgram.h>
42 #include "ldlex.h"
43 #include "ldfile.h"
44 #include "ldemul.h"
45 #include "ldctor.h"
46
47 /* Somewhere above, sys/stat.h got included. */
48 #if !defined(S_ISDIR) && defined(S_IFDIR)
49 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
50 #endif
51
52 #include <string.h>
53
54 #ifdef HAVE_SBRK
55 #if !HAVE_DECL_SBRK
56 extern void *sbrk ();
57 #endif
58 #endif
59
60 #ifndef TARGET_SYSTEM_ROOT
61 #define TARGET_SYSTEM_ROOT ""
62 #endif
63
64 __RCSID("$MirOS: src/gnu/usr.bin/binutils/ld/ldmain.c,v 1.5 2005/07/07 16:23:12 tg Exp $");
65
66 /* EXPORTS */
67
68 char *default_target;
69 const char *output_filename = "a.out";
70
71 /* Name this program was invoked by. */
72 char *program_name;
73
74 /* The prefix for system library directories. */
75 const char *ld_sysroot;
76
77 /* The canonical representation of ld_sysroot. */
78 char * ld_canon_sysroot;
79 int ld_canon_sysroot_len;
80
81 /* The file that we're creating. */
82 bfd *output_bfd = 0;
83
84 /* Set by -G argument, for MIPS ECOFF target. */
85 int g_switch_value = 8;
86
87 /* Nonzero means print names of input files as processed. */
88 bfd_boolean trace_files;
89
90 /* Nonzero means same, but note open failures, too. */
91 bfd_boolean trace_file_tries;
92
93 /* Nonzero means version number was printed, so exit successfully
94 instead of complaining if no input files are given. */
95 bfd_boolean version_printed;
96
97 /* Nonzero means link in every member of an archive. */
98 bfd_boolean whole_archive;
99
100 /* Nonzero means create DT_NEEDED entries only if a dynamic library
101 actually satisfies some reference in a regular object. */
102 bfd_boolean as_needed;
103
104 /* Nonzero means never create DT_NEEDED entries for dynamic libraries
105 in DT_NEEDED tags. */
106 bfd_boolean add_needed = TRUE;
107
108 /* TRUE if we should demangle symbol names. */
109 bfd_boolean demangling;
110
111 args_type command_line;
112
113 ld_config_type config;
114
115 sort_type sort_section;
116
117 static const char *get_sysroot
118 (int, char **);
119 static char *get_emulation
120 (int, char **);
121 static void set_scripts_dir
122 (void);
123 static bfd_boolean add_archive_element
124 (struct bfd_link_info *, bfd *, const char *);
125 static bfd_boolean multiple_definition
126 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
127 bfd *, asection *, bfd_vma);
128 static bfd_boolean multiple_common
129 (struct bfd_link_info *, const char *, bfd *, enum bfd_link_hash_type,
130 bfd_vma, bfd *, enum bfd_link_hash_type, bfd_vma);
131 static bfd_boolean add_to_set
132 (struct bfd_link_info *, struct bfd_link_hash_entry *,
133 bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
134 static bfd_boolean constructor_callback
135 (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
136 asection *, bfd_vma);
137 static bfd_boolean warning_callback
138 (struct bfd_link_info *, const char *, const char *, bfd *,
139 asection *, bfd_vma);
140 static void warning_find_reloc
141 (bfd *, asection *, void *);
142 static bfd_boolean undefined_symbol
143 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
144 bfd_boolean);
145 static bfd_boolean reloc_overflow
146 (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
147 const char *, bfd_vma, bfd *, asection *, bfd_vma);
148 static bfd_boolean reloc_dangerous
149 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
150 static bfd_boolean unattached_reloc
151 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
152 static bfd_boolean notice
153 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
154
155 static struct bfd_link_callbacks link_callbacks =
156 {
157 add_archive_element,
158 multiple_definition,
159 multiple_common,
160 add_to_set,
161 constructor_callback,
162 warning_callback,
163 undefined_symbol,
164 reloc_overflow,
165 reloc_dangerous,
166 unattached_reloc,
167 notice,
168 einfo
169 };
170
171 struct bfd_link_info link_info;
172
173 static void
remove_output(void)174 remove_output (void)
175 {
176 if (output_filename)
177 {
178 if (output_bfd)
179 bfd_cache_close (output_bfd);
180 if (delete_output_file_on_failure)
181 unlink_if_ordinary (output_filename);
182 }
183 }
184
185 int
main(int argc,char ** argv)186 main (int argc, char **argv)
187 {
188 char *emulation;
189 long start_time = get_run_time ();
190
191 #if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
192 setlocale (LC_MESSAGES, "");
193 #endif
194 #if defined (HAVE_SETLOCALE)
195 setlocale (LC_CTYPE, "");
196 #endif
197 bindtextdomain (PACKAGE, LOCALEDIR);
198 textdomain (PACKAGE);
199
200 program_name = argv[0];
201 xmalloc_set_program_name (program_name);
202
203 START_PROGRESS (program_name, 0);
204
205 bfd_init ();
206
207 bfd_set_error_program_name (program_name);
208
209 xatexit (remove_output);
210
211 /* Set up the sysroot directory. */
212 ld_sysroot = get_sysroot (argc, argv);
213 if (*ld_sysroot)
214 {
215 if (*TARGET_SYSTEM_ROOT == 0)
216 {
217 einfo ("%P%F: this linker was not configured to use sysroots");
218 ld_sysroot = "";
219 }
220 else
221 ld_canon_sysroot = lrealpath (ld_sysroot);
222 }
223 if (ld_canon_sysroot)
224 ld_canon_sysroot_len = strlen (ld_canon_sysroot);
225 else
226 ld_canon_sysroot_len = -1;
227
228 /* Set the default BFD target based on the configured target. Doing
229 this permits the linker to be configured for a particular target,
230 and linked against a shared BFD library which was configured for
231 a different target. The macro TARGET is defined by Makefile. */
232 if (! bfd_set_default_target (TARGET))
233 {
234 einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
235 xexit (1);
236 }
237
238 #if YYDEBUG
239 {
240 extern int yydebug;
241 yydebug = 1;
242 }
243 #endif
244
245 /* Initialize the data about options. */
246 trace_files = trace_file_tries = version_printed = FALSE;
247 whole_archive = FALSE;
248 config.build_constructors = TRUE;
249 config.dynamic_link = FALSE;
250 config.has_shared = FALSE;
251 config.split_by_reloc = (unsigned) -1;
252 config.split_by_file = (bfd_size_type) -1;
253 config.hash_table_size = 0;
254 command_line.force_common_definition = FALSE;
255 command_line.inhibit_common_definition = FALSE;
256 command_line.interpreter = NULL;
257 command_line.rpath = NULL;
258 command_line.warn_mismatch = TRUE;
259 command_line.check_section_addresses = TRUE;
260 command_line.accept_unknown_input_arch = FALSE;
261 command_line.reduce_memory_overheads = FALSE;
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 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
310 and _fini symbols. We are compatible. */
311 link_info.init_function = "_init";
312 link_info.fini_function = "_fini";
313 link_info.pei386_auto_import = -1;
314 link_info.pei386_runtime_pseudo_reloc = FALSE;
315 link_info.spare_dynamic_tags = 5;
316 link_info.flags = 0;
317 link_info.flags_1 = 0;
318 link_info.need_relax_finalize = FALSE;
319 link_info.warn_shared_textrel = FALSE;
320 link_info.gc_sections = FALSE;
321
322 ldfile_add_arch ("");
323
324 config.make_executable = TRUE;
325 force_make_executable = FALSE;
326 config.magic_demand_paged = TRUE;
327 config.text_read_only = TRUE;
328 config.data_bss_contig = FALSE;
329
330 emulation = get_emulation (argc, argv);
331 ldemul_choose_mode (emulation);
332 default_target = ldemul_choose_target (argc, argv);
333 lang_init ();
334 ldemul_before_parse ();
335 lang_has_input_file = FALSE;
336 parse_args (argc, argv);
337
338 if (config.hash_table_size != 0)
339 bfd_hash_set_default_size (config.hash_table_size);
340
341 ldemul_set_symbols ();
342
343 if (link_info.relocatable)
344 {
345 if (link_info.gc_sections)
346 einfo ("%P%F: --gc-sections and -r may not be used together\n");
347 else if (command_line.relax)
348 einfo (_("%P%F: --relax and -r may not be used together\n"));
349 if (link_info.shared)
350 einfo (_("%P%F: -r and -shared may not be used together\n"));
351 }
352
353 if (!config.dynamic_link && link_info.shared)
354 einfo (_("%P%F: -static and -shared may not be used together\n"));
355
356 if (! link_info.shared)
357 {
358 if (command_line.filter_shlib)
359 einfo (_("%P%F: -F may not be used without -shared\n"));
360 if (command_line.auxiliary_filters)
361 einfo (_("%P%F: -f may not be used without -shared\n"));
362 }
363
364 if (! link_info.shared || link_info.pie)
365 link_info.executable = TRUE;
366
367 /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
368 don't see how else this can be handled, since in this case we
369 must preserve all externally visible symbols. */
370 if (link_info.relocatable && link_info.strip == strip_all)
371 {
372 link_info.strip = strip_debugger;
373 if (link_info.discard == discard_sec_merge)
374 link_info.discard = discard_all;
375 }
376
377 /* This essentially adds another -L directory so this must be done after
378 the -L's in argv have been processed. */
379 set_scripts_dir ();
380
381 /* If we have not already opened and parsed a linker script
382 read the emulation's appropriate default script. */
383 if (saved_script_handle == NULL)
384 {
385 int isfile;
386 char *s = ldemul_get_script (&isfile);
387
388 if (isfile)
389 ldfile_open_command_file (s);
390 else
391 {
392 lex_string = s;
393 lex_redirect (s);
394 }
395 parser_input = input_script;
396 yyparse ();
397 lex_string = NULL;
398 }
399
400 if (trace_file_tries)
401 {
402 if (saved_script_handle)
403 info_msg (_("using external linker script:"));
404 else
405 info_msg (_("using internal linker script:"));
406 info_msg ("\n==================================================\n");
407
408 if (saved_script_handle)
409 {
410 static const int ld_bufsz = 8193;
411 size_t n;
412 char *buf = xmalloc (ld_bufsz);
413
414 rewind (saved_script_handle);
415 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
416 {
417 buf[n] = 0;
418 info_msg (buf);
419 }
420 rewind (saved_script_handle);
421 free (buf);
422 }
423 else
424 {
425 int isfile;
426
427 info_msg (ldemul_get_script (&isfile));
428 }
429
430 info_msg ("\n==================================================\n");
431 }
432
433 lang_final ();
434
435 if (!lang_has_input_file)
436 {
437 if (version_printed)
438 xexit (0);
439 einfo (_("%P%F: no input files\n"));
440 }
441
442 if (trace_files)
443 info_msg (_("%P: mode %s\n"), emulation);
444
445 ldemul_after_parse ();
446
447 if (config.map_filename)
448 {
449 if (strcmp (config.map_filename, "-") == 0)
450 {
451 config.map_file = stdout;
452 }
453 else
454 {
455 config.map_file = fopen (config.map_filename, FOPEN_WT);
456 if (config.map_file == (FILE *) NULL)
457 {
458 bfd_set_error (bfd_error_system_call);
459 einfo (_("%P%F: cannot open map file %s: %E\n"),
460 config.map_filename);
461 }
462 }
463 }
464
465 lang_process ();
466
467 /* Print error messages for any missing symbols, for any warning
468 symbols, and possibly multiple definitions. */
469 if (link_info.relocatable)
470 output_bfd->flags &= ~EXEC_P;
471 else
472 output_bfd->flags |= EXEC_P;
473
474 ldwrite ();
475
476 if (config.map_file != NULL)
477 lang_map ();
478 if (command_line.cref)
479 output_cref (config.map_file != NULL ? config.map_file : stdout);
480 if (nocrossref_list != NULL)
481 check_nocrossrefs ();
482
483 /* Even if we're producing relocatable output, some non-fatal errors should
484 be reported in the exit status. (What non-fatal errors, if any, do we
485 want to ignore for relocatable output?) */
486 if (!config.make_executable && !force_make_executable)
487 {
488 if (trace_files)
489 einfo (_("%P: link errors found, deleting executable `%s'\n"),
490 output_filename);
491
492 /* The file will be removed by remove_output. */
493 xexit (1);
494 }
495 else
496 {
497 if (! bfd_close (output_bfd))
498 einfo (_("%F%B: final close failed: %E\n"), output_bfd);
499
500 /* If the --force-exe-suffix is enabled, and we're making an
501 executable file and it doesn't end in .exe, copy it to one
502 which does. */
503 if (! link_info.relocatable && command_line.force_exe_suffix)
504 {
505 int len = strlen (output_filename);
506
507 if (len < 4
508 || (strcasecmp (output_filename + len - 4, ".exe") != 0
509 && strcasecmp (output_filename + len - 4, ".dll") != 0))
510 {
511 FILE *src;
512 FILE *dst;
513 const int bsize = 4096;
514 char *buf = xmalloc (bsize);
515 int l;
516 char *dst_name = xmalloc (len + 5);
517
518 strcpy (dst_name, output_filename);
519 strcat (dst_name, ".exe");
520 src = fopen (output_filename, FOPEN_RB);
521 dst = fopen (dst_name, FOPEN_WB);
522
523 if (!src)
524 einfo (_("%X%P: unable to open for source of copy `%s'\n"),
525 output_filename);
526 if (!dst)
527 einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
528 dst_name);
529 while ((l = fread (buf, 1, bsize, src)) > 0)
530 {
531 int done = fwrite (buf, 1, l, dst);
532
533 if (done != l)
534 einfo (_("%P: Error writing file `%s'\n"), dst_name);
535 }
536
537 fclose (src);
538 if (fclose (dst) == EOF)
539 einfo (_("%P: Error closing file `%s'\n"), dst_name);
540 free (dst_name);
541 free (buf);
542 }
543 }
544 }
545
546 END_PROGRESS (program_name);
547
548 if (config.stats)
549 {
550 #ifdef HAVE_SBRK
551 char *lim = sbrk (0);
552 #endif
553 long run_time = get_run_time () - start_time;
554
555 fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
556 program_name, run_time / 1000000, run_time % 1000000);
557 #ifdef HAVE_SBRK
558 fprintf (stderr, _("%s: data size %ld\n"), program_name,
559 (long) (lim - (char *) &environ));
560 #endif
561 }
562
563 /* Prevent remove_output from doing anything, after a successful link. */
564 output_filename = NULL;
565
566 xexit (0);
567 return 0;
568 }
569
570 /* If the configured sysroot is relocatable, try relocating it based on
571 default prefix FROM. Return the relocated directory if it exists,
572 otherwise return null. */
573
574 static char *
get_relative_sysroot(const char * from ATTRIBUTE_UNUSED)575 get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
576 {
577 #ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
578 char *path;
579 struct stat s;
580
581 path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
582 if (path)
583 {
584 if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
585 return path;
586 free (path);
587 }
588 #endif
589 return 0;
590 }
591
592 /* Return the sysroot directory. Return "" if no sysroot is being used. */
593
594 static const char *
get_sysroot(int argc,char ** argv)595 get_sysroot (int argc, char **argv)
596 {
597 int i;
598 const char *path;
599
600 for (i = 1; i < argc; i++)
601 if (strncmp (argv[i], "--sysroot=", strlen ("--sysroot=")) == 0)
602 return argv[i] + strlen ("--sysroot=");
603
604 path = get_relative_sysroot (BINDIR);
605 if (path)
606 return path;
607
608 path = get_relative_sysroot (TOOLBINDIR);
609 if (path)
610 return path;
611
612 return TARGET_SYSTEM_ROOT;
613 }
614
615 /* We need to find any explicitly given emulation in order to initialize the
616 state that's needed by the lex&yacc argument parser (parse_args). */
617
618 static char *
get_emulation(int argc,char ** argv)619 get_emulation (int argc, char **argv)
620 {
621 char *emulation;
622 int i;
623
624 emulation = getenv (EMULATION_ENVIRON);
625 if (emulation == NULL)
626 emulation = DEFAULT_EMULATION;
627
628 for (i = 1; i < argc; i++)
629 {
630 if (!strncmp (argv[i], "-m", 2))
631 {
632 if (argv[i][2] == '\0')
633 {
634 /* -m EMUL */
635 if (i < argc - 1)
636 {
637 emulation = argv[i + 1];
638 i++;
639 }
640 else
641 einfo (_("%P%F: missing argument to -m\n"));
642 }
643 else if (strcmp (argv[i], "-mips1") == 0
644 || strcmp (argv[i], "-mips2") == 0
645 || strcmp (argv[i], "-mips3") == 0
646 || strcmp (argv[i], "-mips4") == 0
647 || strcmp (argv[i], "-mips5") == 0
648 || strcmp (argv[i], "-mips32") == 0
649 || strcmp (argv[i], "-mips32r2") == 0
650 || strcmp (argv[i], "-mips64") == 0
651 || strcmp (argv[i], "-mips64r2") == 0)
652 {
653 /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
654 passed to the linker by some MIPS compilers. They
655 generally tell the linker to use a slightly different
656 library path. Perhaps someday these should be
657 implemented as emulations; until then, we just ignore
658 the arguments and hope that nobody ever creates
659 emulations named ips1, ips2 or ips3. */
660 }
661 else if (strcmp (argv[i], "-m486") == 0)
662 {
663 /* FIXME: The argument -m486 is passed to the linker on
664 some Linux systems. Hope that nobody creates an
665 emulation named 486. */
666 }
667 else
668 {
669 /* -mEMUL */
670 emulation = &argv[i][2];
671 }
672 }
673 }
674
675 return emulation;
676 }
677
678 /* If directory DIR contains an "ldscripts" subdirectory,
679 add DIR to the library search path and return TRUE,
680 else return FALSE. */
681
682 static bfd_boolean
check_for_scripts_dir(char * dir)683 check_for_scripts_dir (char *dir)
684 {
685 size_t dirlen;
686 char *buf;
687 struct stat s;
688 bfd_boolean res;
689
690 dirlen = strlen (dir);
691 /* sizeof counts the terminating NUL. */
692 buf = xmalloc (dirlen + sizeof ("/ldscripts"));
693 sprintf (buf, "%s/ldscripts", dir);
694
695 res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
696 free (buf);
697 if (res)
698 ldfile_add_library_path (dir, FALSE);
699 return res;
700 }
701
702 /* Set the default directory for finding script files.
703 Libraries will be searched for here too, but that's ok.
704 We look for the "ldscripts" directory in:
705
706 SCRIPTDIR (passed from Makefile)
707 (adjusted according to the current location of the binary)
708 SCRIPTDIR (passed from Makefile)
709 the dir where this program is (for using it from the build tree)
710 the dir where this program is/../lib
711 (for installing the tool suite elsewhere). */
712
713 static void
set_scripts_dir(void)714 set_scripts_dir (void)
715 {
716 char *end, *dir;
717 size_t dirlen;
718 bfd_boolean found;
719
720 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
721 if (dir)
722 {
723 found = check_for_scripts_dir (dir);
724 free (dir);
725 if (found)
726 return;
727 }
728
729 dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
730 if (dir)
731 {
732 found = check_for_scripts_dir (dir);
733 free (dir);
734 if (found)
735 return;
736 }
737
738 if (check_for_scripts_dir (SCRIPTDIR))
739 /* We've been installed normally. */
740 return;
741
742 /* Look for "ldscripts" in the dir where our binary is. */
743 end = strrchr (program_name, '/');
744 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
745 {
746 /* We could have \foo\bar, or /foo\bar. */
747 char *bslash = strrchr (program_name, '\\');
748
749 if (end == NULL || (bslash != NULL && bslash > end))
750 end = bslash;
751 }
752 #endif
753
754 if (end == NULL)
755 /* Don't look for ldscripts in the current directory. There is
756 too much potential for confusion. */
757 return;
758
759 dirlen = end - program_name;
760 /* Make a copy of program_name in dir.
761 Leave room for later "/../lib". */
762 dir = xmalloc (dirlen + 8);
763 strncpy (dir, program_name, dirlen);
764 dir[dirlen] = '\0';
765
766 if (check_for_scripts_dir (dir))
767 {
768 free (dir);
769 return;
770 }
771
772 /* Look for "ldscripts" in <the dir where our binary is>/../lib. */
773 strcpy (dir + dirlen, "/../lib");
774 check_for_scripts_dir (dir);
775 free (dir);
776 }
777
778 void
add_ysym(const char * name)779 add_ysym (const char *name)
780 {
781 if (link_info.notice_hash == NULL)
782 {
783 link_info.notice_hash = xmalloc (sizeof (struct bfd_hash_table));
784 if (! bfd_hash_table_init_n (link_info.notice_hash,
785 bfd_hash_newfunc,
786 61))
787 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
788 }
789
790 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
791 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
792 }
793
794 /* Record a symbol to be wrapped, from the --wrap option. */
795
796 void
add_wrap(const char * name)797 add_wrap (const char *name)
798 {
799 if (link_info.wrap_hash == NULL)
800 {
801 link_info.wrap_hash = xmalloc (sizeof (struct bfd_hash_table));
802 if (! bfd_hash_table_init_n (link_info.wrap_hash,
803 bfd_hash_newfunc,
804 61))
805 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
806 }
807
808 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
809 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
810 }
811
812 /* Handle the -retain-symbols-file option. */
813
814 void
add_keepsyms_file(const char * filename)815 add_keepsyms_file (const char *filename)
816 {
817 FILE *file;
818 char *buf;
819 size_t bufsize;
820 int c;
821
822 if (link_info.strip == strip_some)
823 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
824
825 file = fopen (filename, "r");
826 if (file == NULL)
827 {
828 bfd_set_error (bfd_error_system_call);
829 einfo ("%X%P: %s: %E\n", filename);
830 return;
831 }
832
833 link_info.keep_hash = xmalloc (sizeof (struct bfd_hash_table));
834 if (! bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc))
835 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
836
837 bufsize = 100;
838 buf = xmalloc (bufsize);
839
840 c = getc (file);
841 while (c != EOF)
842 {
843 while (ISSPACE (c))
844 c = getc (file);
845
846 if (c != EOF)
847 {
848 size_t len = 0;
849
850 while (! ISSPACE (c) && c != EOF)
851 {
852 buf[len] = c;
853 ++len;
854 if (len >= bufsize)
855 {
856 bufsize *= 2;
857 buf = xrealloc (buf, bufsize);
858 }
859 c = getc (file);
860 }
861
862 buf[len] = '\0';
863
864 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
865 einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
866 }
867 }
868
869 if (link_info.strip != strip_none)
870 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
871
872 free (buf);
873 link_info.strip = strip_some;
874 }
875
876 /* Callbacks from the BFD linker routines. */
877
878 /* This is called when BFD has decided to include an archive member in
879 a link. */
880
881 static bfd_boolean
add_archive_element(struct bfd_link_info * info,bfd * abfd,const char * name)882 add_archive_element (struct bfd_link_info *info,
883 bfd *abfd,
884 const char *name)
885 {
886 lang_input_statement_type *input;
887
888 input = xmalloc (sizeof (lang_input_statement_type));
889 input->filename = abfd->filename;
890 input->local_sym_name = abfd->filename;
891 input->the_bfd = abfd;
892 input->asymbols = NULL;
893 input->next = NULL;
894 input->just_syms_flag = FALSE;
895 input->loaded = FALSE;
896 input->search_dirs_flag = FALSE;
897
898 /* FIXME: The following fields are not set: header.next,
899 header.type, closed, passive_position, symbol_count,
900 next_real_file, is_archive, target, real. This bit of code is
901 from the old decode_library_subfile function. I don't know
902 whether any of those fields matters. */
903
904 ldlang_add_file (input);
905
906 if (config.map_file != NULL)
907 {
908 static bfd_boolean header_printed;
909 struct bfd_link_hash_entry *h;
910 bfd *from;
911 int len;
912
913 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
914
915 if (h == NULL)
916 from = NULL;
917 else
918 {
919 switch (h->type)
920 {
921 default:
922 from = NULL;
923 break;
924
925 case bfd_link_hash_defined:
926 case bfd_link_hash_defweak:
927 from = h->u.def.section->owner;
928 break;
929
930 case bfd_link_hash_undefined:
931 case bfd_link_hash_undefweak:
932 from = h->u.undef.abfd;
933 break;
934
935 case bfd_link_hash_common:
936 from = h->u.c.p->section->owner;
937 break;
938 }
939 }
940
941 if (! header_printed)
942 {
943 char buf[100];
944
945 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
946 minfo ("%s", buf);
947 header_printed = TRUE;
948 }
949
950 if (bfd_my_archive (abfd) == NULL)
951 {
952 minfo ("%s", bfd_get_filename (abfd));
953 len = strlen (bfd_get_filename (abfd));
954 }
955 else
956 {
957 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
958 bfd_get_filename (abfd));
959 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
960 + strlen (bfd_get_filename (abfd))
961 + 2);
962 }
963
964 if (len >= 29)
965 {
966 print_nl ();
967 len = 0;
968 }
969 while (len < 30)
970 {
971 print_space ();
972 ++len;
973 }
974
975 if (from != NULL)
976 minfo ("%B ", from);
977 if (h != NULL)
978 minfo ("(%T)\n", h->root.string);
979 else
980 minfo ("(%s)\n", name);
981 }
982
983 if (trace_files || trace_file_tries)
984 info_msg ("%I\n", input);
985
986 return TRUE;
987 }
988
989 /* This is called when BFD has discovered a symbol which is defined
990 multiple times. */
991
992 static bfd_boolean
multiple_definition(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * name,bfd * obfd,asection * osec,bfd_vma oval,bfd * nbfd,asection * nsec,bfd_vma nval)993 multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
994 const char *name,
995 bfd *obfd,
996 asection *osec,
997 bfd_vma oval,
998 bfd *nbfd,
999 asection *nsec,
1000 bfd_vma nval)
1001 {
1002 /* If either section has the output_section field set to
1003 bfd_abs_section_ptr, it means that the section is being
1004 discarded, and this is not really a multiple definition at all.
1005 FIXME: It would be cleaner to somehow ignore symbols defined in
1006 sections which are being discarded. */
1007 if ((osec->output_section != NULL
1008 && ! bfd_is_abs_section (osec)
1009 && bfd_is_abs_section (osec->output_section))
1010 || (nsec->output_section != NULL
1011 && ! bfd_is_abs_section (nsec)
1012 && bfd_is_abs_section (nsec->output_section)))
1013 return TRUE;
1014
1015 einfo (_("%X%C: multiple definition of `%T'\n"),
1016 nbfd, nsec, nval, name);
1017 if (obfd != NULL)
1018 einfo (_("%D: first defined here\n"), obfd, osec, oval);
1019
1020 if (command_line.relax)
1021 {
1022 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
1023 command_line.relax = 0;
1024 }
1025
1026 return TRUE;
1027 }
1028
1029 /* This is called when there is a definition of a common symbol, or
1030 when a common symbol is found for a symbol that is already defined,
1031 or when two common symbols are found. We only do something if
1032 -warn-common was used. */
1033
1034 static bfd_boolean
multiple_common(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * name,bfd * obfd,enum bfd_link_hash_type otype,bfd_vma osize,bfd * nbfd,enum bfd_link_hash_type ntype,bfd_vma nsize)1035 multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1036 const char *name,
1037 bfd *obfd,
1038 enum bfd_link_hash_type otype,
1039 bfd_vma osize,
1040 bfd *nbfd,
1041 enum bfd_link_hash_type ntype,
1042 bfd_vma nsize)
1043 {
1044 if (! config.warn_common)
1045 return TRUE;
1046
1047 if (ntype == bfd_link_hash_defined
1048 || ntype == bfd_link_hash_defweak
1049 || ntype == bfd_link_hash_indirect)
1050 {
1051 ASSERT (otype == bfd_link_hash_common);
1052 einfo (_("%B: warning: definition of `%T' overriding common\n"),
1053 nbfd, name);
1054 if (obfd != NULL)
1055 einfo (_("%B: warning: common is here\n"), obfd);
1056 }
1057 else if (otype == bfd_link_hash_defined
1058 || otype == bfd_link_hash_defweak
1059 || otype == bfd_link_hash_indirect)
1060 {
1061 ASSERT (ntype == bfd_link_hash_common);
1062 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
1063 nbfd, name);
1064 if (obfd != NULL)
1065 einfo (_("%B: warning: defined here\n"), obfd);
1066 }
1067 else
1068 {
1069 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1070 if (osize > nsize)
1071 {
1072 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
1073 nbfd, name);
1074 if (obfd != NULL)
1075 einfo (_("%B: warning: larger common is here\n"), obfd);
1076 }
1077 else if (nsize > osize)
1078 {
1079 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
1080 nbfd, name);
1081 if (obfd != NULL)
1082 einfo (_("%B: warning: smaller common is here\n"), obfd);
1083 }
1084 else
1085 {
1086 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
1087 if (obfd != NULL)
1088 einfo (_("%B: warning: previous common is here\n"), obfd);
1089 }
1090 }
1091
1092 return TRUE;
1093 }
1094
1095 /* This is called when BFD has discovered a set element. H is the
1096 entry in the linker hash table for the set. SECTION and VALUE
1097 represent a value which should be added to the set. */
1098
1099 static bfd_boolean
add_to_set(struct bfd_link_info * info ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * h,bfd_reloc_code_real_type reloc,bfd * abfd,asection * section,bfd_vma value)1100 add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1101 struct bfd_link_hash_entry *h,
1102 bfd_reloc_code_real_type reloc,
1103 bfd *abfd,
1104 asection *section,
1105 bfd_vma value)
1106 {
1107 if (config.warn_constructors)
1108 einfo (_("%P: warning: global constructor %s used\n"),
1109 h->root.string);
1110
1111 if (! config.build_constructors)
1112 return TRUE;
1113
1114 ldctor_add_set_entry (h, reloc, NULL, section, value);
1115
1116 if (h->type == bfd_link_hash_new)
1117 {
1118 h->type = bfd_link_hash_undefined;
1119 h->u.undef.abfd = abfd;
1120 /* We don't call bfd_link_add_undef to add this to the list of
1121 undefined symbols because we are going to define it
1122 ourselves. */
1123 }
1124
1125 return TRUE;
1126 }
1127
1128 /* This is called when BFD has discovered a constructor. This is only
1129 called for some object file formats--those which do not handle
1130 constructors in some more clever fashion. This is similar to
1131 adding an element to a set, but less general. */
1132
1133 static bfd_boolean
constructor_callback(struct bfd_link_info * info,bfd_boolean constructor,const char * name,bfd * abfd,asection * section,bfd_vma value)1134 constructor_callback (struct bfd_link_info *info,
1135 bfd_boolean constructor,
1136 const char *name,
1137 bfd *abfd,
1138 asection *section,
1139 bfd_vma value)
1140 {
1141 char *s;
1142 struct bfd_link_hash_entry *h;
1143 char set_name[1 + sizeof "__CTOR_LIST__"];
1144
1145 if (config.warn_constructors)
1146 einfo (_("%P: warning: global constructor %s used\n"), name);
1147
1148 if (! config.build_constructors)
1149 return TRUE;
1150
1151 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1152 useful error message. */
1153 if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL
1154 && (info->relocatable
1155 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1156 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1157
1158 s = set_name;
1159 if (bfd_get_symbol_leading_char (abfd) != '\0')
1160 *s++ = bfd_get_symbol_leading_char (abfd);
1161 if (constructor)
1162 strcpy (s, "__CTOR_LIST__");
1163 else
1164 strcpy (s, "__DTOR_LIST__");
1165
1166 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
1167 if (h == (struct bfd_link_hash_entry *) NULL)
1168 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1169 if (h->type == bfd_link_hash_new)
1170 {
1171 h->type = bfd_link_hash_undefined;
1172 h->u.undef.abfd = abfd;
1173 /* We don't call bfd_link_add_undef to add this to the list of
1174 undefined symbols because we are going to define it
1175 ourselves. */
1176 }
1177
1178 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
1179 return TRUE;
1180 }
1181
1182 /* A structure used by warning_callback to pass information through
1183 bfd_map_over_sections. */
1184
1185 struct warning_callback_info
1186 {
1187 bfd_boolean found;
1188 const char *warning;
1189 const char *symbol;
1190 asymbol **asymbols;
1191 };
1192
1193 /* This is called when there is a reference to a warning symbol. */
1194
1195 static bfd_boolean
warning_callback(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * warning,const char * symbol,bfd * abfd,asection * section,bfd_vma address)1196 warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1197 const char *warning,
1198 const char *symbol,
1199 bfd *abfd,
1200 asection *section,
1201 bfd_vma address)
1202 {
1203 /* This is a hack to support warn_multiple_gp. FIXME: This should
1204 have a cleaner interface, but what? */
1205 if (! config.warn_multiple_gp
1206 && strcmp (warning, "using multiple gp values") == 0)
1207 return TRUE;
1208
1209 if (section != NULL)
1210 einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
1211 else if (abfd == NULL)
1212 einfo ("%P: %s%s\n", _("warning: "), warning);
1213 else if (symbol == NULL)
1214 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1215 else
1216 {
1217 lang_input_statement_type *entry;
1218 asymbol **asymbols;
1219 struct warning_callback_info info;
1220
1221 /* Look through the relocs to see if we can find a plausible
1222 address. */
1223 entry = (lang_input_statement_type *) abfd->usrdata;
1224 if (entry != NULL && entry->asymbols != NULL)
1225 asymbols = entry->asymbols;
1226 else
1227 {
1228 long symsize;
1229 long symbol_count;
1230
1231 symsize = bfd_get_symtab_upper_bound (abfd);
1232 if (symsize < 0)
1233 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1234 asymbols = xmalloc (symsize);
1235 symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1236 if (symbol_count < 0)
1237 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1238 if (entry != NULL)
1239 {
1240 entry->asymbols = asymbols;
1241 entry->symbol_count = symbol_count;
1242 }
1243 }
1244
1245 info.found = FALSE;
1246 info.warning = warning;
1247 info.symbol = symbol;
1248 info.asymbols = asymbols;
1249 bfd_map_over_sections (abfd, warning_find_reloc, &info);
1250
1251 if (! info.found)
1252 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
1253
1254 if (entry == NULL)
1255 free (asymbols);
1256 }
1257
1258 return TRUE;
1259 }
1260
1261 /* This is called by warning_callback for each section. It checks the
1262 relocs of the section to see if it can find a reference to the
1263 symbol which triggered the warning. If it can, it uses the reloc
1264 to give an error message with a file and line number. */
1265
1266 static void
warning_find_reloc(bfd * abfd,asection * sec,void * iarg)1267 warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
1268 {
1269 struct warning_callback_info *info = iarg;
1270 long relsize;
1271 arelent **relpp;
1272 long relcount;
1273 arelent **p, **pend;
1274
1275 if (info->found)
1276 return;
1277
1278 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1279 if (relsize < 0)
1280 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1281 if (relsize == 0)
1282 return;
1283
1284 relpp = xmalloc (relsize);
1285 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1286 if (relcount < 0)
1287 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1288
1289 p = relpp;
1290 pend = p + relcount;
1291 for (; p < pend && *p != NULL; p++)
1292 {
1293 arelent *q = *p;
1294
1295 if (q->sym_ptr_ptr != NULL
1296 && *q->sym_ptr_ptr != NULL
1297 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1298 {
1299 /* We found a reloc for the symbol we are looking for. */
1300 einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1301 info->warning);
1302 info->found = TRUE;
1303 break;
1304 }
1305 }
1306
1307 free (relpp);
1308 }
1309
1310 /* This is called when an undefined symbol is found. */
1311
1312 static bfd_boolean
undefined_symbol(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * name,bfd * abfd,asection * section,bfd_vma address,bfd_boolean error)1313 undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1314 const char *name,
1315 bfd *abfd,
1316 asection *section,
1317 bfd_vma address,
1318 bfd_boolean error)
1319 {
1320 static char *error_name;
1321 static unsigned int error_count;
1322
1323 #define MAX_ERRORS_IN_A_ROW 5
1324
1325 if (config.warn_once)
1326 {
1327 static struct bfd_hash_table *hash;
1328
1329 /* Only warn once about a particular undefined symbol. */
1330 if (hash == NULL)
1331 {
1332 hash = xmalloc (sizeof (struct bfd_hash_table));
1333 if (! bfd_hash_table_init (hash, bfd_hash_newfunc))
1334 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1335 }
1336
1337 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1338 return TRUE;
1339
1340 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
1341 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1342 }
1343
1344 /* We never print more than a reasonable number of errors in a row
1345 for a single symbol. */
1346 if (error_name != NULL
1347 && strcmp (name, error_name) == 0)
1348 ++error_count;
1349 else
1350 {
1351 error_count = 0;
1352 if (error_name != NULL)
1353 free (error_name);
1354 error_name = xstrdup (name);
1355 }
1356
1357 if (section != NULL)
1358 {
1359 if (error_count < MAX_ERRORS_IN_A_ROW)
1360 {
1361 if (error)
1362 einfo (_("%X%C: undefined reference to `%T'\n"),
1363 abfd, section, address, name);
1364 else
1365 einfo (_("%C: warning: undefined reference to `%T'\n"),
1366 abfd, section, address, name);
1367 }
1368 else if (error_count == MAX_ERRORS_IN_A_ROW)
1369 {
1370 if (error)
1371 einfo (_("%X%D: more undefined references to `%T' follow\n"),
1372 abfd, section, address, name);
1373 else
1374 einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1375 abfd, section, address, name);
1376 }
1377 else if (error)
1378 einfo ("%X");
1379 }
1380 else
1381 {
1382 if (error_count < MAX_ERRORS_IN_A_ROW)
1383 {
1384 if (error)
1385 einfo (_("%X%B: undefined reference to `%T'\n"),
1386 abfd, name);
1387 else
1388 einfo (_("%B: warning: undefined reference to `%T'\n"),
1389 abfd, name);
1390 }
1391 else if (error_count == MAX_ERRORS_IN_A_ROW)
1392 {
1393 if (error)
1394 einfo (_("%X%B: more undefined references to `%T' follow\n"),
1395 abfd, name);
1396 else
1397 einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1398 abfd, name);
1399 }
1400 else if (error)
1401 einfo ("%X");
1402 }
1403
1404 return TRUE;
1405 }
1406
1407 /* Counter to limit the number of relocation overflow error messages
1408 to print. Errors are printed as it is decremented. When it's
1409 called and the counter is zero, a final message is printed
1410 indicating more relocations were omitted. When it gets to -1, no
1411 such errors are printed. If it's initially set to a value less
1412 than -1, all such errors will be printed (--verbose does this). */
1413
1414 int overflow_cutoff_limit = 10;
1415
1416 /* This is called when a reloc overflows. */
1417
1418 static bfd_boolean
reloc_overflow(struct bfd_link_info * info ATTRIBUTE_UNUSED,struct bfd_link_hash_entry * entry,const char * name,const char * reloc_name,bfd_vma addend,bfd * abfd,asection * section,bfd_vma address)1419 reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1420 struct bfd_link_hash_entry *entry,
1421 const char *name,
1422 const char *reloc_name,
1423 bfd_vma addend,
1424 bfd *abfd,
1425 asection *section,
1426 bfd_vma address)
1427 {
1428 if (overflow_cutoff_limit == -1)
1429 return TRUE;
1430
1431 einfo ("%X%C:", abfd, section, address);
1432
1433 if (overflow_cutoff_limit >= 0
1434 && overflow_cutoff_limit-- == 0)
1435 {
1436 einfo (_(" additional relocation overflows omitted from the output\n"));
1437 return TRUE;
1438 }
1439
1440 if (entry)
1441 {
1442 while (entry->type == bfd_link_hash_indirect
1443 || entry->type == bfd_link_hash_warning)
1444 entry = entry->u.i.link;
1445 switch (entry->type)
1446 {
1447 case bfd_link_hash_undefined:
1448 case bfd_link_hash_undefweak:
1449 einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1450 reloc_name, entry->root.string);
1451 break;
1452 case bfd_link_hash_defined:
1453 case bfd_link_hash_defweak:
1454 einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1455 reloc_name, entry->root.string,
1456 entry->u.def.section,
1457 entry->u.def.section == bfd_abs_section_ptr
1458 ? output_bfd : entry->u.def.section->owner);
1459 break;
1460 default:
1461 abort ();
1462 break;
1463 }
1464 }
1465 else
1466 einfo (_(" relocation truncated to fit: %s against `%T'"),
1467 reloc_name, name);
1468 if (addend != 0)
1469 einfo ("+%v", addend);
1470 einfo ("\n");
1471 return TRUE;
1472 }
1473
1474 /* This is called when a dangerous relocation is made. */
1475
1476 static bfd_boolean
reloc_dangerous(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * message,bfd * abfd,asection * section,bfd_vma address)1477 reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1478 const char *message,
1479 bfd *abfd,
1480 asection *section,
1481 bfd_vma address)
1482 {
1483 einfo (_("%X%C: dangerous relocation: %s\n"),
1484 abfd, section, address, message);
1485 return TRUE;
1486 }
1487
1488 /* This is called when a reloc is being generated attached to a symbol
1489 that is not being output. */
1490
1491 static bfd_boolean
unattached_reloc(struct bfd_link_info * info ATTRIBUTE_UNUSED,const char * name,bfd * abfd,asection * section,bfd_vma address)1492 unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1493 const char *name,
1494 bfd *abfd,
1495 asection *section,
1496 bfd_vma address)
1497 {
1498 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1499 abfd, section, address, name);
1500 return TRUE;
1501 }
1502
1503 /* This is called if link_info.notice_all is set, or when a symbol in
1504 link_info.notice_hash is found. Symbols are put in notice_hash
1505 using the -y option. */
1506
1507 static bfd_boolean
notice(struct bfd_link_info * info,const char * name,bfd * abfd,asection * section,bfd_vma value)1508 notice (struct bfd_link_info *info,
1509 const char *name,
1510 bfd *abfd,
1511 asection *section,
1512 bfd_vma value)
1513 {
1514 if (! info->notice_all
1515 || (info->notice_hash != NULL
1516 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
1517 {
1518 if (bfd_is_und_section (section))
1519 einfo ("%B: reference to %s\n", abfd, name);
1520 else
1521 einfo ("%B: definition of %s\n", abfd, name);
1522 }
1523
1524 if (command_line.cref || nocrossref_list != NULL)
1525 add_cref (name, abfd, section, value);
1526
1527 return TRUE;
1528 }
1529