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