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