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