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