]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - ld/ldmain.c
2009-01-26 Andrew Stubbs <ams@codesourcery.com>
[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;
b34976b6 254 command_line.check_section_addresses = TRUE;
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 {
ac69cbc6 295 if (command_line.relax)
252b5132
RH
296 einfo (_("%P%F: --relax and -r may not be used together\n"));
297 if (link_info.shared)
298 einfo (_("%P%F: -r and -shared may not be used together\n"));
299 }
300
d8cf8b51
L
301 /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data,
302 --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and
303 --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are
304 for shared libraries. -Bsymbolic overrides all others and vice
305 versa. */
306 switch (command_line.symbolic)
307 {
308 case symbolic_unset:
309 break;
310 case symbolic:
311 /* -Bsymbolic is for shared library only. */
312 if (link_info.shared)
313 {
314 link_info.symbolic = TRUE;
315 /* Should we free the unused memory? */
316 link_info.dynamic_list = NULL;
317 command_line.dynamic_list = dynamic_list_unset;
318 }
319 break;
320 case symbolic_functions:
321 /* -Bsymbolic-functions is for shared library only. */
322 if (link_info.shared)
323 command_line.dynamic_list = dynamic_list_data;
324 break;
325 }
326
327 switch (command_line.dynamic_list)
328 {
329 case dynamic_list_unset:
330 break;
331 case dynamic_list_data:
332 link_info.dynamic_data = TRUE;
333 case dynamic_list:
334 link_info.dynamic = TRUE;
335 break;
336 }
337
7333607e
JJ
338 if (! link_info.shared)
339 {
340 if (command_line.filter_shlib)
e97cb84f 341 einfo (_("%P%F: -F may not be used without -shared\n"));
7333607e 342 if (command_line.auxiliary_filters)
e97cb84f 343 einfo (_("%P%F: -f may not be used without -shared\n"));
7333607e
JJ
344 }
345
36af4a4e
JJ
346 if (! link_info.shared || link_info.pie)
347 link_info.executable = TRUE;
348
252b5132
RH
349 /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
350 don't see how else this can be handled, since in this case we
351 must preserve all externally visible symbols. */
1049f94e 352 if (link_info.relocatable && link_info.strip == strip_all)
252b5132
RH
353 {
354 link_info.strip = strip_debugger;
f5fa8ca2 355 if (link_info.discard == discard_sec_merge)
252b5132
RH
356 link_info.discard = discard_all;
357 }
358
14be8564
L
359 /* If we have not already opened and parsed a linker script,
360 try the default script from command line first. */
361 if (saved_script_handle == NULL
362 && command_line.default_script != NULL)
363 {
364 ldfile_open_command_file (command_line.default_script);
365 parser_input = input_script;
366 yyparse ();
367 }
368
b9a8de1e
NC
369 /* If we have not already opened and parsed a linker script
370 read the emulation's appropriate default script. */
b90e1c6f 371 if (saved_script_handle == NULL)
252b5132 372 {
252b5132 373 int isfile;
b7a26f91 374 char *s = ldemul_get_script (&isfile);
252b5132
RH
375
376 if (isfile)
377 ldfile_open_command_file (s);
378 else
b7a26f91 379 {
252b5132
RH
380 lex_string = s;
381 lex_redirect (s);
382 }
383 parser_input = input_script;
384 yyparse ();
385 lex_string = NULL;
386 }
387
b9a8de1e
NC
388 if (trace_file_tries)
389 {
9cb61eab
AM
390 if (saved_script_handle)
391 info_msg (_("using external linker script:"));
392 else
393 info_msg (_("using internal linker script:"));
394 info_msg ("\n==================================================\n");
b9a8de1e
NC
395
396 if (saved_script_handle)
397 {
74699268 398 static const int ld_bufsz = 8193;
b9a8de1e 399 size_t n;
74699268 400 char *buf = xmalloc (ld_bufsz);
b9a8de1e
NC
401
402 rewind (saved_script_handle);
74699268 403 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
b9a8de1e 404 {
b7a26f91 405 buf[n] = 0;
b9a8de1e
NC
406 info_msg (buf);
407 }
408 rewind (saved_script_handle);
409 free (buf);
410 }
411 else
412 {
413 int isfile;
414
b7a26f91 415 info_msg (ldemul_get_script (&isfile));
b9a8de1e 416 }
b7a26f91 417
b9a8de1e
NC
418 info_msg ("\n==================================================\n");
419 }
420
252b5132
RH
421 lang_final ();
422
b34976b6 423 if (!lang_has_input_file)
252b5132
RH
424 {
425 if (version_printed)
426 xexit (0);
427 einfo (_("%P%F: no input files\n"));
428 }
429
430 if (trace_files)
0125cdf2 431 info_msg (_("%P: mode %s\n"), emulation);
252b5132
RH
432
433 ldemul_after_parse ();
434
252b5132
RH
435 if (config.map_filename)
436 {
437 if (strcmp (config.map_filename, "-") == 0)
438 {
439 config.map_file = stdout;
440 }
441 else
442 {
443 config.map_file = fopen (config.map_filename, FOPEN_WT);
444 if (config.map_file == (FILE *) NULL)
445 {
446 bfd_set_error (bfd_error_system_call);
447 einfo (_("%P%F: cannot open map file %s: %E\n"),
448 config.map_filename);
449 }
450 }
451 }
452
252b5132
RH
453 lang_process ();
454
455 /* Print error messages for any missing symbols, for any warning
6d5e62f8 456 symbols, and possibly multiple definitions. */
1049f94e 457 if (link_info.relocatable)
f13a99db 458 link_info.output_bfd->flags &= ~EXEC_P;
252b5132 459 else
f13a99db 460 link_info.output_bfd->flags |= EXEC_P;
252b5132
RH
461
462 ldwrite ();
463
464 if (config.map_file != NULL)
465 lang_map ();
466 if (command_line.cref)
467 output_cref (config.map_file != NULL ? config.map_file : stdout);
468 if (nocrossref_list != NULL)
469 check_nocrossrefs ();
470
750877ba
L
471 lang_finish ();
472
1049f94e 473 /* Even if we're producing relocatable output, some non-fatal errors should
252b5132 474 be reported in the exit status. (What non-fatal errors, if any, do we
1049f94e 475 want to ignore for relocatable output?) */
b34976b6 476 if (!config.make_executable && !force_make_executable)
252b5132 477 {
b34976b6 478 if (trace_files)
0125cdf2
NC
479 einfo (_("%P: link errors found, deleting executable `%s'\n"),
480 output_filename);
252b5132
RH
481
482 /* The file will be removed by remove_output. */
252b5132
RH
483 xexit (1);
484 }
485 else
486 {
f13a99db
AM
487 if (! bfd_close (link_info.output_bfd))
488 einfo (_("%F%B: final close failed: %E\n"), link_info.output_bfd);
252b5132
RH
489
490 /* If the --force-exe-suffix is enabled, and we're making an
6d5e62f8
KH
491 executable file and it doesn't end in .exe, copy it to one
492 which does. */
1049f94e 493 if (! link_info.relocatable && command_line.force_exe_suffix)
252b5132
RH
494 {
495 int len = strlen (output_filename);
0125cdf2 496
6d5e62f8 497 if (len < 4
252b5132
RH
498 || (strcasecmp (output_filename + len - 4, ".exe") != 0
499 && strcasecmp (output_filename + len - 4, ".dll") != 0))
500 {
501 FILE *src;
502 FILE *dst;
503 const int bsize = 4096;
504 char *buf = xmalloc (bsize);
505 int l;
506 char *dst_name = xmalloc (len + 5);
0125cdf2 507
252b5132
RH
508 strcpy (dst_name, output_filename);
509 strcat (dst_name, ".exe");
510 src = fopen (output_filename, FOPEN_RB);
511 dst = fopen (dst_name, FOPEN_WB);
512
513 if (!src)
1579bae1
AM
514 einfo (_("%X%P: unable to open for source of copy `%s'\n"),
515 output_filename);
252b5132 516 if (!dst)
1579bae1
AM
517 einfo (_("%X%P: unable to open for destination of copy `%s'\n"),
518 dst_name);
252b5132
RH
519 while ((l = fread (buf, 1, bsize, src)) > 0)
520 {
521 int done = fwrite (buf, 1, l, dst);
0125cdf2 522
252b5132 523 if (done != l)
0125cdf2 524 einfo (_("%P: Error writing file `%s'\n"), dst_name);
252b5132 525 }
0125cdf2 526
252b5132
RH
527 fclose (src);
528 if (fclose (dst) == EOF)
0125cdf2 529 einfo (_("%P: Error closing file `%s'\n"), dst_name);
252b5132
RH
530 free (dst_name);
531 free (buf);
532 }
533 }
534 }
535
536 END_PROGRESS (program_name);
537
538 if (config.stats)
539 {
540#ifdef HAVE_SBRK
1579bae1 541 char *lim = sbrk (0);
252b5132
RH
542#endif
543 long run_time = get_run_time () - start_time;
544
545 fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
546 program_name, run_time / 1000000, run_time % 1000000);
547#ifdef HAVE_SBRK
548 fprintf (stderr, _("%s: data size %ld\n"), program_name,
549 (long) (lim - (char *) &environ));
550#endif
551 }
552
553 /* Prevent remove_output from doing anything, after a successful link. */
554 output_filename = NULL;
555
556 xexit (0);
557 return 0;
558}
559
e2243057
RS
560/* If the configured sysroot is relocatable, try relocating it based on
561 default prefix FROM. Return the relocated directory if it exists,
562 otherwise return null. */
563
564static char *
565get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
566{
567#ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
568 char *path;
569 struct stat s;
570
571 path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
572 if (path)
573 {
574 if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
575 return path;
576 free (path);
577 }
578#endif
579 return 0;
580}
581
582/* Return the sysroot directory. Return "" if no sysroot is being used. */
583
584static const char *
585get_sysroot (int argc, char **argv)
586{
587 int i;
588 const char *path;
589
590 for (i = 1; i < argc; i++)
0112cd26 591 if (CONST_STRNEQ (argv[i], "--sysroot="))
e2243057
RS
592 return argv[i] + strlen ("--sysroot=");
593
594 path = get_relative_sysroot (BINDIR);
595 if (path)
596 return path;
597
598 path = get_relative_sysroot (TOOLBINDIR);
599 if (path)
600 return path;
601
602 return TARGET_SYSTEM_ROOT;
603}
604
252b5132
RH
605/* We need to find any explicitly given emulation in order to initialize the
606 state that's needed by the lex&yacc argument parser (parse_args). */
607
608static char *
1579bae1 609get_emulation (int argc, char **argv)
252b5132
RH
610{
611 char *emulation;
612 int i;
613
614 emulation = getenv (EMULATION_ENVIRON);
615 if (emulation == NULL)
616 emulation = DEFAULT_EMULATION;
617
618 for (i = 1; i < argc; i++)
619 {
0112cd26 620 if (CONST_STRNEQ (argv[i], "-m"))
252b5132
RH
621 {
622 if (argv[i][2] == '\0')
623 {
624 /* -m EMUL */
625 if (i < argc - 1)
626 {
627 emulation = argv[i + 1];
628 i++;
629 }
630 else
0125cdf2 631 einfo (_("%P%F: missing argument to -m\n"));
252b5132
RH
632 }
633 else if (strcmp (argv[i], "-mips1") == 0
634 || strcmp (argv[i], "-mips2") == 0
635 || strcmp (argv[i], "-mips3") == 0
d1cf510e 636 || strcmp (argv[i], "-mips4") == 0
6f33421c
CD
637 || strcmp (argv[i], "-mips5") == 0
638 || strcmp (argv[i], "-mips32") == 0
639 || strcmp (argv[i], "-mips32r2") == 0
5f74bc13
CD
640 || strcmp (argv[i], "-mips64") == 0
641 || strcmp (argv[i], "-mips64r2") == 0)
252b5132 642 {
31d677f9 643 /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
252b5132
RH
644 passed to the linker by some MIPS compilers. They
645 generally tell the linker to use a slightly different
646 library path. Perhaps someday these should be
647 implemented as emulations; until then, we just ignore
648 the arguments and hope that nobody ever creates
649 emulations named ips1, ips2 or ips3. */
650 }
651 else if (strcmp (argv[i], "-m486") == 0)
652 {
653 /* FIXME: The argument -m486 is passed to the linker on
654 some Linux systems. Hope that nobody creates an
655 emulation named 486. */
656 }
657 else
658 {
659 /* -mEMUL */
660 emulation = &argv[i][2];
661 }
662 }
663 }
664
665 return emulation;
666}
667
252b5132 668void
1579bae1 669add_ysym (const char *name)
252b5132 670{
1579bae1 671 if (link_info.notice_hash == NULL)
252b5132 672 {
1579bae1 673 link_info.notice_hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
674 if (!bfd_hash_table_init_n (link_info.notice_hash,
675 bfd_hash_newfunc,
676 sizeof (struct bfd_hash_entry),
677 61))
252b5132 678 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
6d5e62f8 679 }
252b5132 680
1579bae1 681 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
252b5132
RH
682 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
683}
684
685/* Record a symbol to be wrapped, from the --wrap option. */
686
687void
1579bae1 688add_wrap (const char *name)
252b5132
RH
689{
690 if (link_info.wrap_hash == NULL)
691 {
1579bae1 692 link_info.wrap_hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
693 if (!bfd_hash_table_init_n (link_info.wrap_hash,
694 bfd_hash_newfunc,
695 sizeof (struct bfd_hash_entry),
696 61))
252b5132
RH
697 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
698 }
0125cdf2 699
b34976b6 700 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
252b5132
RH
701 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
702}
703
704/* Handle the -retain-symbols-file option. */
705
706void
1579bae1 707add_keepsyms_file (const char *filename)
252b5132
RH
708{
709 FILE *file;
710 char *buf;
711 size_t bufsize;
712 int c;
713
714 if (link_info.strip == strip_some)
715 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
716
717 file = fopen (filename, "r");
1579bae1 718 if (file == NULL)
252b5132
RH
719 {
720 bfd_set_error (bfd_error_system_call);
721 einfo ("%X%P: %s: %E\n", filename);
722 return;
723 }
724
1579bae1 725 link_info.keep_hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
726 if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
727 sizeof (struct bfd_hash_entry)))
252b5132
RH
728 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
729
730 bufsize = 100;
1579bae1 731 buf = xmalloc (bufsize);
252b5132
RH
732
733 c = getc (file);
734 while (c != EOF)
735 {
3882b010 736 while (ISSPACE (c))
252b5132
RH
737 c = getc (file);
738
739 if (c != EOF)
740 {
741 size_t len = 0;
742
3882b010 743 while (! ISSPACE (c) && c != EOF)
252b5132
RH
744 {
745 buf[len] = c;
746 ++len;
747 if (len >= bufsize)
748 {
749 bufsize *= 2;
750 buf = xrealloc (buf, bufsize);
751 }
752 c = getc (file);
753 }
754
755 buf[len] = '\0';
756
1579bae1 757 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
252b5132
RH
758 einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
759 }
760 }
761
762 if (link_info.strip != strip_none)
763 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
764
5ed6aba4 765 free (buf);
252b5132
RH
766 link_info.strip = strip_some;
767}
768\f
769/* Callbacks from the BFD linker routines. */
770
771/* This is called when BFD has decided to include an archive member in
772 a link. */
773
b34976b6 774static bfd_boolean
e1fffbe6 775add_archive_element (struct bfd_link_info *info,
1579bae1
AM
776 bfd *abfd,
777 const char *name)
252b5132
RH
778{
779 lang_input_statement_type *input;
780
5c1d2f5f 781 input = xcalloc (1, sizeof (lang_input_statement_type));
252b5132
RH
782 input->filename = abfd->filename;
783 input->local_sym_name = abfd->filename;
784 input->the_bfd = abfd;
252b5132
RH
785
786 ldlang_add_file (input);
787
1579bae1 788 if (config.map_file != NULL)
252b5132 789 {
b34976b6 790 static bfd_boolean header_printed;
252b5132
RH
791 struct bfd_link_hash_entry *h;
792 bfd *from;
793 int len;
794
e1fffbe6 795 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
252b5132
RH
796
797 if (h == NULL)
798 from = NULL;
799 else
800 {
801 switch (h->type)
802 {
803 default:
804 from = NULL;
805 break;
806
807 case bfd_link_hash_defined:
808 case bfd_link_hash_defweak:
809 from = h->u.def.section->owner;
810 break;
811
812 case bfd_link_hash_undefined:
813 case bfd_link_hash_undefweak:
814 from = h->u.undef.abfd;
815 break;
816
817 case bfd_link_hash_common:
818 from = h->u.c.p->section->owner;
819 break;
820 }
821 }
822
823 if (! header_printed)
824 {
825 char buf[100];
826
e3c8793a 827 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
252b5132 828 minfo ("%s", buf);
b34976b6 829 header_printed = TRUE;
252b5132
RH
830 }
831
832 if (bfd_my_archive (abfd) == NULL)
833 {
834 minfo ("%s", bfd_get_filename (abfd));
835 len = strlen (bfd_get_filename (abfd));
836 }
837 else
838 {
839 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
840 bfd_get_filename (abfd));
841 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
842 + strlen (bfd_get_filename (abfd))
843 + 2);
844 }
845
846 if (len >= 29)
847 {
848 print_nl ();
849 len = 0;
850 }
851 while (len < 30)
852 {
853 print_space ();
854 ++len;
855 }
856
857 if (from != NULL)
858 minfo ("%B ", from);
859 if (h != NULL)
860 minfo ("(%T)\n", h->root.string);
861 else
862 minfo ("(%s)\n", name);
863 }
864
865 if (trace_files || trace_file_tries)
866 info_msg ("%I\n", input);
867
b34976b6 868 return TRUE;
252b5132
RH
869}
870
871/* This is called when BFD has discovered a symbol which is defined
872 multiple times. */
873
b34976b6 874static bfd_boolean
1579bae1
AM
875multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
876 const char *name,
877 bfd *obfd,
878 asection *osec,
879 bfd_vma oval,
880 bfd *nbfd,
881 asection *nsec,
882 bfd_vma nval)
252b5132
RH
883{
884 /* If either section has the output_section field set to
885 bfd_abs_section_ptr, it means that the section is being
886 discarded, and this is not really a multiple definition at all.
887 FIXME: It would be cleaner to somehow ignore symbols defined in
888 sections which are being discarded. */
889 if ((osec->output_section != NULL
890 && ! bfd_is_abs_section (osec)
891 && bfd_is_abs_section (osec->output_section))
892 || (nsec->output_section != NULL
893 && ! bfd_is_abs_section (nsec)
894 && bfd_is_abs_section (nsec->output_section)))
b34976b6 895 return TRUE;
252b5132
RH
896
897 einfo (_("%X%C: multiple definition of `%T'\n"),
898 nbfd, nsec, nval, name);
1579bae1 899 if (obfd != NULL)
252b5132 900 einfo (_("%D: first defined here\n"), obfd, osec, oval);
9b14b192
NC
901
902 if (command_line.relax)
903 {
904 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
905 command_line.relax = 0;
906 }
6d5e62f8 907
b34976b6 908 return TRUE;
252b5132
RH
909}
910
911/* This is called when there is a definition of a common symbol, or
912 when a common symbol is found for a symbol that is already defined,
913 or when two common symbols are found. We only do something if
914 -warn-common was used. */
915
b34976b6 916static bfd_boolean
1579bae1
AM
917multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
918 const char *name,
919 bfd *obfd,
920 enum bfd_link_hash_type otype,
921 bfd_vma osize,
922 bfd *nbfd,
923 enum bfd_link_hash_type ntype,
924 bfd_vma nsize)
252b5132
RH
925{
926 if (! config.warn_common)
b34976b6 927 return TRUE;
252b5132
RH
928
929 if (ntype == bfd_link_hash_defined
930 || ntype == bfd_link_hash_defweak
931 || ntype == bfd_link_hash_indirect)
932 {
933 ASSERT (otype == bfd_link_hash_common);
934 einfo (_("%B: warning: definition of `%T' overriding common\n"),
935 nbfd, name);
936 if (obfd != NULL)
937 einfo (_("%B: warning: common is here\n"), obfd);
938 }
939 else if (otype == bfd_link_hash_defined
940 || otype == bfd_link_hash_defweak
941 || otype == bfd_link_hash_indirect)
942 {
943 ASSERT (ntype == bfd_link_hash_common);
944 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
945 nbfd, name);
946 if (obfd != NULL)
947 einfo (_("%B: warning: defined here\n"), obfd);
948 }
949 else
950 {
951 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
952 if (osize > nsize)
953 {
954 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
955 nbfd, name);
956 if (obfd != NULL)
957 einfo (_("%B: warning: larger common is here\n"), obfd);
958 }
959 else if (nsize > osize)
960 {
961 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
962 nbfd, name);
963 if (obfd != NULL)
964 einfo (_("%B: warning: smaller common is here\n"), obfd);
965 }
966 else
967 {
968 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
969 if (obfd != NULL)
970 einfo (_("%B: warning: previous common is here\n"), obfd);
971 }
972 }
973
b34976b6 974 return TRUE;
252b5132
RH
975}
976
977/* This is called when BFD has discovered a set element. H is the
978 entry in the linker hash table for the set. SECTION and VALUE
979 represent a value which should be added to the set. */
980
b34976b6 981static bfd_boolean
1579bae1
AM
982add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
983 struct bfd_link_hash_entry *h,
984 bfd_reloc_code_real_type reloc,
985 bfd *abfd,
986 asection *section,
987 bfd_vma value)
252b5132
RH
988{
989 if (config.warn_constructors)
990 einfo (_("%P: warning: global constructor %s used\n"),
991 h->root.string);
992
993 if (! config.build_constructors)
b34976b6 994 return TRUE;
252b5132 995
1579bae1 996 ldctor_add_set_entry (h, reloc, NULL, section, value);
252b5132
RH
997
998 if (h->type == bfd_link_hash_new)
999 {
1000 h->type = bfd_link_hash_undefined;
1001 h->u.undef.abfd = abfd;
1002 /* We don't call bfd_link_add_undef to add this to the list of
1003 undefined symbols because we are going to define it
1004 ourselves. */
1005 }
1006
b34976b6 1007 return TRUE;
252b5132
RH
1008}
1009
1010/* This is called when BFD has discovered a constructor. This is only
1011 called for some object file formats--those which do not handle
1012 constructors in some more clever fashion. This is similar to
1013 adding an element to a set, but less general. */
1014
b34976b6 1015static bfd_boolean
1579bae1
AM
1016constructor_callback (struct bfd_link_info *info,
1017 bfd_boolean constructor,
1018 const char *name,
1019 bfd *abfd,
1020 asection *section,
1021 bfd_vma value)
252b5132
RH
1022{
1023 char *s;
1024 struct bfd_link_hash_entry *h;
1025 char set_name[1 + sizeof "__CTOR_LIST__"];
1026
1027 if (config.warn_constructors)
1028 einfo (_("%P: warning: global constructor %s used\n"), name);
1029
1030 if (! config.build_constructors)
b34976b6 1031 return TRUE;
252b5132
RH
1032
1033 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1034 useful error message. */
f13a99db 1035 if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
e1fffbe6 1036 && (info->relocatable
252b5132
RH
1037 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1038 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1039
1040 s = set_name;
1041 if (bfd_get_symbol_leading_char (abfd) != '\0')
1042 *s++ = bfd_get_symbol_leading_char (abfd);
1043 if (constructor)
1044 strcpy (s, "__CTOR_LIST__");
1045 else
1046 strcpy (s, "__DTOR_LIST__");
1047
b34976b6 1048 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
252b5132
RH
1049 if (h == (struct bfd_link_hash_entry *) NULL)
1050 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1051 if (h->type == bfd_link_hash_new)
1052 {
1053 h->type = bfd_link_hash_undefined;
1054 h->u.undef.abfd = abfd;
1055 /* We don't call bfd_link_add_undef to add this to the list of
1056 undefined symbols because we are going to define it
1057 ourselves. */
1058 }
1059
1060 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
b34976b6 1061 return TRUE;
252b5132
RH
1062}
1063
1064/* A structure used by warning_callback to pass information through
1065 bfd_map_over_sections. */
1066
0125cdf2
NC
1067struct warning_callback_info
1068{
b34976b6 1069 bfd_boolean found;
252b5132
RH
1070 const char *warning;
1071 const char *symbol;
1072 asymbol **asymbols;
1073};
1074
1075/* This is called when there is a reference to a warning symbol. */
1076
b34976b6 1077static bfd_boolean
1579bae1
AM
1078warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1079 const char *warning,
1080 const char *symbol,
1081 bfd *abfd,
1082 asection *section,
1083 bfd_vma address)
252b5132
RH
1084{
1085 /* This is a hack to support warn_multiple_gp. FIXME: This should
1086 have a cleaner interface, but what? */
1087 if (! config.warn_multiple_gp
1088 && strcmp (warning, "using multiple gp values") == 0)
b34976b6 1089 return TRUE;
252b5132
RH
1090
1091 if (section != NULL)
300475fe 1092 einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
252b5132 1093 else if (abfd == NULL)
300475fe 1094 einfo ("%P: %s%s\n", _("warning: "), warning);
252b5132 1095 else if (symbol == NULL)
300475fe 1096 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
252b5132
RH
1097 else
1098 {
252b5132
RH
1099 struct warning_callback_info info;
1100
1101 /* Look through the relocs to see if we can find a plausible
1102 address. */
5c1d2f5f
AM
1103
1104 if (!bfd_generic_link_read_symbols (abfd))
1105 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
252b5132 1106
b34976b6 1107 info.found = FALSE;
252b5132
RH
1108 info.warning = warning;
1109 info.symbol = symbol;
5c1d2f5f 1110 info.asymbols = bfd_get_outsymbols (abfd);
1579bae1 1111 bfd_map_over_sections (abfd, warning_find_reloc, &info);
252b5132
RH
1112
1113 if (! info.found)
300475fe 1114 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
252b5132
RH
1115 }
1116
b34976b6 1117 return TRUE;
252b5132
RH
1118}
1119
1120/* This is called by warning_callback for each section. It checks the
1121 relocs of the section to see if it can find a reference to the
1122 symbol which triggered the warning. If it can, it uses the reloc
1123 to give an error message with a file and line number. */
1124
1125static void
1579bae1 1126warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
252b5132 1127{
1579bae1 1128 struct warning_callback_info *info = iarg;
252b5132
RH
1129 long relsize;
1130 arelent **relpp;
1131 long relcount;
1132 arelent **p, **pend;
1133
1134 if (info->found)
1135 return;
1136
1137 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1138 if (relsize < 0)
1139 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1140 if (relsize == 0)
1141 return;
1142
1579bae1 1143 relpp = xmalloc (relsize);
252b5132
RH
1144 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1145 if (relcount < 0)
1146 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1147
1148 p = relpp;
1149 pend = p + relcount;
1150 for (; p < pend && *p != NULL; p++)
1151 {
1152 arelent *q = *p;
1153
1154 if (q->sym_ptr_ptr != NULL
1155 && *q->sym_ptr_ptr != NULL
1156 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1157 {
1158 /* We found a reloc for the symbol we are looking for. */
300475fe
HPN
1159 einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1160 info->warning);
b34976b6 1161 info->found = TRUE;
252b5132
RH
1162 break;
1163 }
1164 }
1165
1166 free (relpp);
1167}
1168
1169/* This is called when an undefined symbol is found. */
1170
b34976b6 1171static bfd_boolean
1579bae1
AM
1172undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1173 const char *name,
1174 bfd *abfd,
1175 asection *section,
1176 bfd_vma address,
0b28295d 1177 bfd_boolean error)
252b5132
RH
1178{
1179 static char *error_name;
1180 static unsigned int error_count;
1181
1182#define MAX_ERRORS_IN_A_ROW 5
1183
1184 if (config.warn_once)
1185 {
1186 static struct bfd_hash_table *hash;
1187
1188 /* Only warn once about a particular undefined symbol. */
252b5132
RH
1189 if (hash == NULL)
1190 {
1579bae1 1191 hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
1192 if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
1193 sizeof (struct bfd_hash_entry)))
252b5132
RH
1194 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1195 }
1196
b34976b6
AM
1197 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1198 return TRUE;
252b5132 1199
b34976b6 1200 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
252b5132
RH
1201 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1202 }
1203
1204 /* We never print more than a reasonable number of errors in a row
1205 for a single symbol. */
1579bae1 1206 if (error_name != NULL
252b5132
RH
1207 && strcmp (name, error_name) == 0)
1208 ++error_count;
1209 else
1210 {
1211 error_count = 0;
1579bae1 1212 if (error_name != NULL)
252b5132 1213 free (error_name);
d1b2b2dc 1214 error_name = xstrdup (name);
252b5132
RH
1215 }
1216
1217 if (section != NULL)
1218 {
1219 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1220 {
0b28295d
ILT
1221 if (error)
1222 einfo (_("%X%C: undefined reference to `%T'\n"),
1223 abfd, section, address, name);
1224 else
1225 einfo (_("%C: warning: undefined reference to `%T'\n"),
1226 abfd, section, address, name);
b6f29aaa 1227 }
252b5132 1228 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1229 {
1230 if (error)
1231 einfo (_("%X%D: more undefined references to `%T' follow\n"),
1232 abfd, section, address, name);
1233 else
1234 einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1235 abfd, section, address, name);
1236 }
1237 else if (error)
1238 einfo ("%X");
252b5132
RH
1239 }
1240 else
1241 {
1242 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1243 {
0b28295d
ILT
1244 if (error)
1245 einfo (_("%X%B: undefined reference to `%T'\n"),
1246 abfd, name);
1247 else
1248 einfo (_("%B: warning: undefined reference to `%T'\n"),
1249 abfd, name);
b6f29aaa 1250 }
252b5132 1251 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1252 {
1253 if (error)
1254 einfo (_("%X%B: more undefined references to `%T' follow\n"),
1255 abfd, name);
1256 else
1257 einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1258 abfd, name);
1259 }
1260 else if (error)
1261 einfo ("%X");
252b5132
RH
1262 }
1263
b34976b6 1264 return TRUE;
252b5132
RH
1265}
1266
8aae64e6
AO
1267/* Counter to limit the number of relocation overflow error messages
1268 to print. Errors are printed as it is decremented. When it's
1269 called and the counter is zero, a final message is printed
1270 indicating more relocations were omitted. When it gets to -1, no
1271 such errors are printed. If it's initially set to a value less
1272 than -1, all such errors will be printed (--verbose does this). */
1273
1274int overflow_cutoff_limit = 10;
1275
252b5132
RH
1276/* This is called when a reloc overflows. */
1277
b34976b6 1278static bfd_boolean
1579bae1 1279reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
dfeffb9f 1280 struct bfd_link_hash_entry *entry,
1579bae1
AM
1281 const char *name,
1282 const char *reloc_name,
1283 bfd_vma addend,
1284 bfd *abfd,
1285 asection *section,
1286 bfd_vma address)
252b5132 1287{
8aae64e6
AO
1288 if (overflow_cutoff_limit == -1)
1289 return TRUE;
1290
e1fffbe6 1291 einfo ("%X%C:", abfd, section, address);
8aae64e6
AO
1292
1293 if (overflow_cutoff_limit >= 0
1294 && overflow_cutoff_limit-- == 0)
1295 {
1296 einfo (_(" additional relocation overflows omitted from the output\n"));
1297 return TRUE;
1298 }
1299
dfeffb9f
L
1300 if (entry)
1301 {
1302 while (entry->type == bfd_link_hash_indirect
1303 || entry->type == bfd_link_hash_warning)
1304 entry = entry->u.i.link;
1305 switch (entry->type)
1306 {
1307 case bfd_link_hash_undefined:
1308 case bfd_link_hash_undefweak:
1309 einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1310 reloc_name, entry->root.string);
1311 break;
1312 case bfd_link_hash_defined:
1313 case bfd_link_hash_defweak:
1314 einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1315 reloc_name, entry->root.string,
a6e1b90f
L
1316 entry->u.def.section,
1317 entry->u.def.section == bfd_abs_section_ptr
f13a99db 1318 ? link_info.output_bfd : entry->u.def.section->owner);
dfeffb9f
L
1319 break;
1320 default:
1321 abort ();
1322 break;
1323 }
1324 }
1325 else
1326 einfo (_(" relocation truncated to fit: %s against `%T'"),
1327 reloc_name, name);
252b5132
RH
1328 if (addend != 0)
1329 einfo ("+%v", addend);
1330 einfo ("\n");
b34976b6 1331 return TRUE;
252b5132
RH
1332}
1333
1334/* This is called when a dangerous relocation is made. */
1335
b34976b6 1336static bfd_boolean
1579bae1
AM
1337reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1338 const char *message,
1339 bfd *abfd,
1340 asection *section,
1341 bfd_vma address)
252b5132 1342{
e1fffbe6
AM
1343 einfo (_("%X%C: dangerous relocation: %s\n"),
1344 abfd, section, address, message);
b34976b6 1345 return TRUE;
252b5132
RH
1346}
1347
1348/* This is called when a reloc is being generated attached to a symbol
1349 that is not being output. */
1350
b34976b6 1351static bfd_boolean
1579bae1
AM
1352unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1353 const char *name,
1354 bfd *abfd,
1355 asection *section,
1356 bfd_vma address)
252b5132 1357{
e1fffbe6
AM
1358 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1359 abfd, section, address, name);
b34976b6 1360 return TRUE;
252b5132
RH
1361}
1362
1363/* This is called if link_info.notice_all is set, or when a symbol in
1364 link_info.notice_hash is found. Symbols are put in notice_hash
1365 using the -y option. */
1366
b34976b6 1367static bfd_boolean
1579bae1
AM
1368notice (struct bfd_link_info *info,
1369 const char *name,
1370 bfd *abfd,
1371 asection *section,
1372 bfd_vma value)
252b5132 1373{
5061a885
AM
1374 if (name == NULL)
1375 {
1376 if (command_line.cref || nocrossref_list != NULL)
1377 return handle_asneeded_cref (abfd, value);
1378 return TRUE;
1379 }
1380
252b5132
RH
1381 if (! info->notice_all
1382 || (info->notice_hash != NULL
b34976b6 1383 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
252b5132
RH
1384 {
1385 if (bfd_is_und_section (section))
1386 einfo ("%B: reference to %s\n", abfd, name);
1387 else
1388 einfo ("%B: definition of %s\n", abfd, name);
1389 }
1390
1391 if (command_line.cref || nocrossref_list != NULL)
1392 add_cref (name, abfd, section, value);
1393
b34976b6 1394 return TRUE;
252b5132 1395}