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