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