daily update
[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,
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
1579bae1 781 input = xmalloc (sizeof (lang_input_statement_type));
252b5132
RH
782 input->filename = abfd->filename;
783 input->local_sym_name = abfd->filename;
784 input->the_bfd = abfd;
785 input->asymbols = NULL;
786 input->next = NULL;
b34976b6
AM
787 input->just_syms_flag = FALSE;
788 input->loaded = FALSE;
789 input->search_dirs_flag = FALSE;
252b5132
RH
790
791 /* FIXME: The following fields are not set: header.next,
792 header.type, closed, passive_position, symbol_count,
793 next_real_file, is_archive, target, real. This bit of code is
794 from the old decode_library_subfile function. I don't know
795 whether any of those fields matters. */
796
797 ldlang_add_file (input);
798
1579bae1 799 if (config.map_file != NULL)
252b5132 800 {
b34976b6 801 static bfd_boolean header_printed;
252b5132
RH
802 struct bfd_link_hash_entry *h;
803 bfd *from;
804 int len;
805
e1fffbe6 806 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
252b5132
RH
807
808 if (h == NULL)
809 from = NULL;
810 else
811 {
812 switch (h->type)
813 {
814 default:
815 from = NULL;
816 break;
817
818 case bfd_link_hash_defined:
819 case bfd_link_hash_defweak:
820 from = h->u.def.section->owner;
821 break;
822
823 case bfd_link_hash_undefined:
824 case bfd_link_hash_undefweak:
825 from = h->u.undef.abfd;
826 break;
827
828 case bfd_link_hash_common:
829 from = h->u.c.p->section->owner;
830 break;
831 }
832 }
833
834 if (! header_printed)
835 {
836 char buf[100];
837
e3c8793a 838 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
252b5132 839 minfo ("%s", buf);
b34976b6 840 header_printed = TRUE;
252b5132
RH
841 }
842
843 if (bfd_my_archive (abfd) == NULL)
844 {
845 minfo ("%s", bfd_get_filename (abfd));
846 len = strlen (bfd_get_filename (abfd));
847 }
848 else
849 {
850 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
851 bfd_get_filename (abfd));
852 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
853 + strlen (bfd_get_filename (abfd))
854 + 2);
855 }
856
857 if (len >= 29)
858 {
859 print_nl ();
860 len = 0;
861 }
862 while (len < 30)
863 {
864 print_space ();
865 ++len;
866 }
867
868 if (from != NULL)
869 minfo ("%B ", from);
870 if (h != NULL)
871 minfo ("(%T)\n", h->root.string);
872 else
873 minfo ("(%s)\n", name);
874 }
875
876 if (trace_files || trace_file_tries)
877 info_msg ("%I\n", input);
878
b34976b6 879 return TRUE;
252b5132
RH
880}
881
882/* This is called when BFD has discovered a symbol which is defined
883 multiple times. */
884
b34976b6 885static bfd_boolean
1579bae1
AM
886multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
887 const char *name,
888 bfd *obfd,
889 asection *osec,
890 bfd_vma oval,
891 bfd *nbfd,
892 asection *nsec,
893 bfd_vma nval)
252b5132
RH
894{
895 /* If either section has the output_section field set to
896 bfd_abs_section_ptr, it means that the section is being
897 discarded, and this is not really a multiple definition at all.
898 FIXME: It would be cleaner to somehow ignore symbols defined in
899 sections which are being discarded. */
900 if ((osec->output_section != NULL
901 && ! bfd_is_abs_section (osec)
902 && bfd_is_abs_section (osec->output_section))
903 || (nsec->output_section != NULL
904 && ! bfd_is_abs_section (nsec)
905 && bfd_is_abs_section (nsec->output_section)))
b34976b6 906 return TRUE;
252b5132
RH
907
908 einfo (_("%X%C: multiple definition of `%T'\n"),
909 nbfd, nsec, nval, name);
1579bae1 910 if (obfd != NULL)
252b5132 911 einfo (_("%D: first defined here\n"), obfd, osec, oval);
9b14b192
NC
912
913 if (command_line.relax)
914 {
915 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
916 command_line.relax = 0;
917 }
6d5e62f8 918
b34976b6 919 return TRUE;
252b5132
RH
920}
921
922/* This is called when there is a definition of a common symbol, or
923 when a common symbol is found for a symbol that is already defined,
924 or when two common symbols are found. We only do something if
925 -warn-common was used. */
926
b34976b6 927static bfd_boolean
1579bae1
AM
928multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
929 const char *name,
930 bfd *obfd,
931 enum bfd_link_hash_type otype,
932 bfd_vma osize,
933 bfd *nbfd,
934 enum bfd_link_hash_type ntype,
935 bfd_vma nsize)
252b5132
RH
936{
937 if (! config.warn_common)
b34976b6 938 return TRUE;
252b5132
RH
939
940 if (ntype == bfd_link_hash_defined
941 || ntype == bfd_link_hash_defweak
942 || ntype == bfd_link_hash_indirect)
943 {
944 ASSERT (otype == bfd_link_hash_common);
945 einfo (_("%B: warning: definition of `%T' overriding common\n"),
946 nbfd, name);
947 if (obfd != NULL)
948 einfo (_("%B: warning: common is here\n"), obfd);
949 }
950 else if (otype == bfd_link_hash_defined
951 || otype == bfd_link_hash_defweak
952 || otype == bfd_link_hash_indirect)
953 {
954 ASSERT (ntype == bfd_link_hash_common);
955 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
956 nbfd, name);
957 if (obfd != NULL)
958 einfo (_("%B: warning: defined here\n"), obfd);
959 }
960 else
961 {
962 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
963 if (osize > nsize)
964 {
965 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
966 nbfd, name);
967 if (obfd != NULL)
968 einfo (_("%B: warning: larger common is here\n"), obfd);
969 }
970 else if (nsize > osize)
971 {
972 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
973 nbfd, name);
974 if (obfd != NULL)
975 einfo (_("%B: warning: smaller common is here\n"), obfd);
976 }
977 else
978 {
979 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
980 if (obfd != NULL)
981 einfo (_("%B: warning: previous common is here\n"), obfd);
982 }
983 }
984
b34976b6 985 return TRUE;
252b5132
RH
986}
987
988/* This is called when BFD has discovered a set element. H is the
989 entry in the linker hash table for the set. SECTION and VALUE
990 represent a value which should be added to the set. */
991
b34976b6 992static bfd_boolean
1579bae1
AM
993add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
994 struct bfd_link_hash_entry *h,
995 bfd_reloc_code_real_type reloc,
996 bfd *abfd,
997 asection *section,
998 bfd_vma value)
252b5132
RH
999{
1000 if (config.warn_constructors)
1001 einfo (_("%P: warning: global constructor %s used\n"),
1002 h->root.string);
1003
1004 if (! config.build_constructors)
b34976b6 1005 return TRUE;
252b5132 1006
1579bae1 1007 ldctor_add_set_entry (h, reloc, NULL, section, value);
252b5132
RH
1008
1009 if (h->type == bfd_link_hash_new)
1010 {
1011 h->type = bfd_link_hash_undefined;
1012 h->u.undef.abfd = abfd;
1013 /* We don't call bfd_link_add_undef to add this to the list of
1014 undefined symbols because we are going to define it
1015 ourselves. */
1016 }
1017
b34976b6 1018 return TRUE;
252b5132
RH
1019}
1020
1021/* This is called when BFD has discovered a constructor. This is only
1022 called for some object file formats--those which do not handle
1023 constructors in some more clever fashion. This is similar to
1024 adding an element to a set, but less general. */
1025
b34976b6 1026static bfd_boolean
1579bae1
AM
1027constructor_callback (struct bfd_link_info *info,
1028 bfd_boolean constructor,
1029 const char *name,
1030 bfd *abfd,
1031 asection *section,
1032 bfd_vma value)
252b5132
RH
1033{
1034 char *s;
1035 struct bfd_link_hash_entry *h;
1036 char set_name[1 + sizeof "__CTOR_LIST__"];
1037
1038 if (config.warn_constructors)
1039 einfo (_("%P: warning: global constructor %s used\n"), name);
1040
1041 if (! config.build_constructors)
b34976b6 1042 return TRUE;
252b5132
RH
1043
1044 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1045 useful error message. */
f13a99db 1046 if (bfd_reloc_type_lookup (link_info.output_bfd, BFD_RELOC_CTOR) == NULL
e1fffbe6 1047 && (info->relocatable
252b5132
RH
1048 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1049 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1050
1051 s = set_name;
1052 if (bfd_get_symbol_leading_char (abfd) != '\0')
1053 *s++ = bfd_get_symbol_leading_char (abfd);
1054 if (constructor)
1055 strcpy (s, "__CTOR_LIST__");
1056 else
1057 strcpy (s, "__DTOR_LIST__");
1058
b34976b6 1059 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
252b5132
RH
1060 if (h == (struct bfd_link_hash_entry *) NULL)
1061 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1062 if (h->type == bfd_link_hash_new)
1063 {
1064 h->type = bfd_link_hash_undefined;
1065 h->u.undef.abfd = abfd;
1066 /* We don't call bfd_link_add_undef to add this to the list of
1067 undefined symbols because we are going to define it
1068 ourselves. */
1069 }
1070
1071 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
b34976b6 1072 return TRUE;
252b5132
RH
1073}
1074
1075/* A structure used by warning_callback to pass information through
1076 bfd_map_over_sections. */
1077
0125cdf2
NC
1078struct warning_callback_info
1079{
b34976b6 1080 bfd_boolean found;
252b5132
RH
1081 const char *warning;
1082 const char *symbol;
1083 asymbol **asymbols;
1084};
1085
1086/* This is called when there is a reference to a warning symbol. */
1087
b34976b6 1088static bfd_boolean
1579bae1
AM
1089warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1090 const char *warning,
1091 const char *symbol,
1092 bfd *abfd,
1093 asection *section,
1094 bfd_vma address)
252b5132
RH
1095{
1096 /* This is a hack to support warn_multiple_gp. FIXME: This should
1097 have a cleaner interface, but what? */
1098 if (! config.warn_multiple_gp
1099 && strcmp (warning, "using multiple gp values") == 0)
b34976b6 1100 return TRUE;
252b5132
RH
1101
1102 if (section != NULL)
300475fe 1103 einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
252b5132 1104 else if (abfd == NULL)
300475fe 1105 einfo ("%P: %s%s\n", _("warning: "), warning);
252b5132 1106 else if (symbol == NULL)
300475fe 1107 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
252b5132
RH
1108 else
1109 {
1110 lang_input_statement_type *entry;
1111 asymbol **asymbols;
1112 struct warning_callback_info info;
1113
1114 /* Look through the relocs to see if we can find a plausible
1115 address. */
252b5132
RH
1116 entry = (lang_input_statement_type *) abfd->usrdata;
1117 if (entry != NULL && entry->asymbols != NULL)
1118 asymbols = entry->asymbols;
1119 else
1120 {
1121 long symsize;
1122 long symbol_count;
1123
1124 symsize = bfd_get_symtab_upper_bound (abfd);
1125 if (symsize < 0)
1126 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1579bae1 1127 asymbols = xmalloc (symsize);
252b5132
RH
1128 symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1129 if (symbol_count < 0)
1130 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1131 if (entry != NULL)
1132 {
1133 entry->asymbols = asymbols;
1134 entry->symbol_count = symbol_count;
1135 }
1136 }
1137
b34976b6 1138 info.found = FALSE;
252b5132
RH
1139 info.warning = warning;
1140 info.symbol = symbol;
1141 info.asymbols = asymbols;
1579bae1 1142 bfd_map_over_sections (abfd, warning_find_reloc, &info);
252b5132
RH
1143
1144 if (! info.found)
300475fe 1145 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
252b5132
RH
1146
1147 if (entry == NULL)
1148 free (asymbols);
1149 }
1150
b34976b6 1151 return TRUE;
252b5132
RH
1152}
1153
1154/* This is called by warning_callback for each section. It checks the
1155 relocs of the section to see if it can find a reference to the
1156 symbol which triggered the warning. If it can, it uses the reloc
1157 to give an error message with a file and line number. */
1158
1159static void
1579bae1 1160warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
252b5132 1161{
1579bae1 1162 struct warning_callback_info *info = iarg;
252b5132
RH
1163 long relsize;
1164 arelent **relpp;
1165 long relcount;
1166 arelent **p, **pend;
1167
1168 if (info->found)
1169 return;
1170
1171 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1172 if (relsize < 0)
1173 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1174 if (relsize == 0)
1175 return;
1176
1579bae1 1177 relpp = xmalloc (relsize);
252b5132
RH
1178 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1179 if (relcount < 0)
1180 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1181
1182 p = relpp;
1183 pend = p + relcount;
1184 for (; p < pend && *p != NULL; p++)
1185 {
1186 arelent *q = *p;
1187
1188 if (q->sym_ptr_ptr != NULL
1189 && *q->sym_ptr_ptr != NULL
1190 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1191 {
1192 /* We found a reloc for the symbol we are looking for. */
300475fe
HPN
1193 einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1194 info->warning);
b34976b6 1195 info->found = TRUE;
252b5132
RH
1196 break;
1197 }
1198 }
1199
1200 free (relpp);
1201}
1202
1203/* This is called when an undefined symbol is found. */
1204
b34976b6 1205static bfd_boolean
1579bae1
AM
1206undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1207 const char *name,
1208 bfd *abfd,
1209 asection *section,
1210 bfd_vma address,
0b28295d 1211 bfd_boolean error)
252b5132
RH
1212{
1213 static char *error_name;
1214 static unsigned int error_count;
1215
1216#define MAX_ERRORS_IN_A_ROW 5
1217
1218 if (config.warn_once)
1219 {
1220 static struct bfd_hash_table *hash;
1221
1222 /* Only warn once about a particular undefined symbol. */
252b5132
RH
1223 if (hash == NULL)
1224 {
1579bae1 1225 hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
1226 if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
1227 sizeof (struct bfd_hash_entry)))
252b5132
RH
1228 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1229 }
1230
b34976b6
AM
1231 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1232 return TRUE;
252b5132 1233
b34976b6 1234 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
252b5132
RH
1235 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1236 }
1237
1238 /* We never print more than a reasonable number of errors in a row
1239 for a single symbol. */
1579bae1 1240 if (error_name != NULL
252b5132
RH
1241 && strcmp (name, error_name) == 0)
1242 ++error_count;
1243 else
1244 {
1245 error_count = 0;
1579bae1 1246 if (error_name != NULL)
252b5132 1247 free (error_name);
d1b2b2dc 1248 error_name = xstrdup (name);
252b5132
RH
1249 }
1250
1251 if (section != NULL)
1252 {
1253 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1254 {
0b28295d
ILT
1255 if (error)
1256 einfo (_("%X%C: undefined reference to `%T'\n"),
1257 abfd, section, address, name);
1258 else
1259 einfo (_("%C: warning: undefined reference to `%T'\n"),
1260 abfd, section, address, name);
b6f29aaa 1261 }
252b5132 1262 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1263 {
1264 if (error)
1265 einfo (_("%X%D: more undefined references to `%T' follow\n"),
1266 abfd, section, address, name);
1267 else
1268 einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1269 abfd, section, address, name);
1270 }
1271 else if (error)
1272 einfo ("%X");
252b5132
RH
1273 }
1274 else
1275 {
1276 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1277 {
0b28295d
ILT
1278 if (error)
1279 einfo (_("%X%B: undefined reference to `%T'\n"),
1280 abfd, name);
1281 else
1282 einfo (_("%B: warning: undefined reference to `%T'\n"),
1283 abfd, name);
b6f29aaa 1284 }
252b5132 1285 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1286 {
1287 if (error)
1288 einfo (_("%X%B: more undefined references to `%T' follow\n"),
1289 abfd, name);
1290 else
1291 einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1292 abfd, name);
1293 }
1294 else if (error)
1295 einfo ("%X");
252b5132
RH
1296 }
1297
b34976b6 1298 return TRUE;
252b5132
RH
1299}
1300
8aae64e6
AO
1301/* Counter to limit the number of relocation overflow error messages
1302 to print. Errors are printed as it is decremented. When it's
1303 called and the counter is zero, a final message is printed
1304 indicating more relocations were omitted. When it gets to -1, no
1305 such errors are printed. If it's initially set to a value less
1306 than -1, all such errors will be printed (--verbose does this). */
1307
1308int overflow_cutoff_limit = 10;
1309
252b5132
RH
1310/* This is called when a reloc overflows. */
1311
b34976b6 1312static bfd_boolean
1579bae1 1313reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
dfeffb9f 1314 struct bfd_link_hash_entry *entry,
1579bae1
AM
1315 const char *name,
1316 const char *reloc_name,
1317 bfd_vma addend,
1318 bfd *abfd,
1319 asection *section,
1320 bfd_vma address)
252b5132 1321{
8aae64e6
AO
1322 if (overflow_cutoff_limit == -1)
1323 return TRUE;
1324
e1fffbe6 1325 einfo ("%X%C:", abfd, section, address);
8aae64e6
AO
1326
1327 if (overflow_cutoff_limit >= 0
1328 && overflow_cutoff_limit-- == 0)
1329 {
1330 einfo (_(" additional relocation overflows omitted from the output\n"));
1331 return TRUE;
1332 }
1333
dfeffb9f
L
1334 if (entry)
1335 {
1336 while (entry->type == bfd_link_hash_indirect
1337 || entry->type == bfd_link_hash_warning)
1338 entry = entry->u.i.link;
1339 switch (entry->type)
1340 {
1341 case bfd_link_hash_undefined:
1342 case bfd_link_hash_undefweak:
1343 einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1344 reloc_name, entry->root.string);
1345 break;
1346 case bfd_link_hash_defined:
1347 case bfd_link_hash_defweak:
1348 einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1349 reloc_name, entry->root.string,
a6e1b90f
L
1350 entry->u.def.section,
1351 entry->u.def.section == bfd_abs_section_ptr
f13a99db 1352 ? link_info.output_bfd : entry->u.def.section->owner);
dfeffb9f
L
1353 break;
1354 default:
1355 abort ();
1356 break;
1357 }
1358 }
1359 else
1360 einfo (_(" relocation truncated to fit: %s against `%T'"),
1361 reloc_name, name);
252b5132
RH
1362 if (addend != 0)
1363 einfo ("+%v", addend);
1364 einfo ("\n");
b34976b6 1365 return TRUE;
252b5132
RH
1366}
1367
1368/* This is called when a dangerous relocation is made. */
1369
b34976b6 1370static bfd_boolean
1579bae1
AM
1371reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1372 const char *message,
1373 bfd *abfd,
1374 asection *section,
1375 bfd_vma address)
252b5132 1376{
e1fffbe6
AM
1377 einfo (_("%X%C: dangerous relocation: %s\n"),
1378 abfd, section, address, message);
b34976b6 1379 return TRUE;
252b5132
RH
1380}
1381
1382/* This is called when a reloc is being generated attached to a symbol
1383 that is not being output. */
1384
b34976b6 1385static bfd_boolean
1579bae1
AM
1386unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1387 const char *name,
1388 bfd *abfd,
1389 asection *section,
1390 bfd_vma address)
252b5132 1391{
e1fffbe6
AM
1392 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1393 abfd, section, address, name);
b34976b6 1394 return TRUE;
252b5132
RH
1395}
1396
1397/* This is called if link_info.notice_all is set, or when a symbol in
1398 link_info.notice_hash is found. Symbols are put in notice_hash
1399 using the -y option. */
1400
b34976b6 1401static bfd_boolean
1579bae1
AM
1402notice (struct bfd_link_info *info,
1403 const char *name,
1404 bfd *abfd,
1405 asection *section,
1406 bfd_vma value)
252b5132 1407{
5061a885
AM
1408 if (name == NULL)
1409 {
1410 if (command_line.cref || nocrossref_list != NULL)
1411 return handle_asneeded_cref (abfd, value);
1412 return TRUE;
1413 }
1414
252b5132
RH
1415 if (! info->notice_all
1416 || (info->notice_hash != NULL
b34976b6 1417 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
252b5132
RH
1418 {
1419 if (bfd_is_und_section (section))
1420 einfo ("%B: reference to %s\n", abfd, name);
1421 else
1422 einfo ("%B: definition of %s\n", abfd, name);
1423 }
1424
1425 if (command_line.cref || nocrossref_list != NULL)
1426 add_cref (name, abfd, section, value);
1427
b34976b6 1428 return TRUE;
252b5132 1429}
This page took 0.639588 seconds and 4 git commands to generate.