gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / ld / ldmain.c
CommitLineData
252b5132 1/* Main program of GNU linker.
b3adc24a 2 Copyright (C) 1991-2020 Free Software Foundation, Inc.
252b5132
RH
3 Written by Steve Chamberlain steve@cygnus.com
4
f96b4a7b 5 This file is part of the GNU Binutils.
252b5132 6
f96b4a7b 7 This program is free software; you can redistribute it and/or modify
2fa9fc65 8 it under the terms of the GNU General Public License as published by
f96b4a7b
NC
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
252b5132 11
f96b4a7b 12 This program is distributed in the hope that it will be useful,
2fa9fc65
NC
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
252b5132 16
2fa9fc65 17 You should have received a copy of the GNU General Public License
f96b4a7b
NC
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
252b5132 21
252b5132 22#include "sysdep.h"
3db64b00 23#include "bfd.h"
3882b010 24#include "safe-ctype.h"
252b5132
RH
25#include "libiberty.h"
26#include "progress.h"
27#include "bfdlink.h"
1ff6de03 28#include "ctf-api.h"
5af11cab 29#include "filenames.h"
252b5132
RH
30
31#include "ld.h"
32#include "ldmain.h"
33#include "ldmisc.h"
34#include "ldwrite.h"
252b5132
RH
35#include "ldexp.h"
36#include "ldlang.h"
df2a7313 37#include <ldgram.h>
252b5132
RH
38#include "ldlex.h"
39#include "ldfile.h"
b71e2778 40#include "ldemul.h"
252b5132 41#include "ldctor.h"
5d3236ee
DK
42#ifdef ENABLE_PLUGINS
43#include "plugin.h"
44#include "plugin-api.h"
5d3236ee 45#endif /* ENABLE_PLUGINS */
252b5132 46
0125cdf2 47/* Somewhere above, sys/stat.h got included. */
252b5132
RH
48#if !defined(S_ISDIR) && defined(S_IFDIR)
49#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
50#endif
51
52#include <string.h>
53
9c8ebd6a
DJ
54#ifndef TARGET_SYSTEM_ROOT
55#define TARGET_SYSTEM_ROOT ""
56#endif
57
252b5132
RH
58/* EXPORTS */
59
53d25da6
AM
60FILE *saved_script_handle = NULL;
61FILE *previous_script_handle = NULL;
62bfd_boolean force_make_executable = FALSE;
63
252b5132
RH
64char *default_target;
65const char *output_filename = "a.out";
66
67/* Name this program was invoked by. */
68char *program_name;
69
9c8ebd6a 70/* The prefix for system library directories. */
e2243057 71const char *ld_sysroot;
9c8ebd6a 72
3fe38064 73/* The canonical representation of ld_sysroot. */
0aa7f586 74char *ld_canon_sysroot;
3fe38064
NC
75int ld_canon_sysroot_len;
76
e8044f35 77/* Set by -G argument, for targets like MIPS ELF. */
252b5132
RH
78int g_switch_value = 8;
79
80/* Nonzero means print names of input files as processed. */
727a29ba 81unsigned int trace_files;
252b5132 82
cd6f1cf3
NC
83/* Nonzero means report actions taken by the linker, and describe the linker script in use. */
84bfd_boolean verbose;
252b5132
RH
85
86/* Nonzero means version number was printed, so exit successfully
87 instead of complaining if no input files are given. */
b34976b6 88bfd_boolean version_printed;
252b5132 89
b34976b6
AM
90/* TRUE if we should demangle symbol names. */
91bfd_boolean demangling;
252b5132
RH
92
93args_type command_line;
94
95ld_config_type config;
96
bcaa7b3e
L
97sort_type sort_section;
98
e2243057
RS
99static const char *get_sysroot
100 (int, char **);
0125cdf2 101static char *get_emulation
1579bae1 102 (int, char **);
0125cdf2 103static bfd_boolean add_archive_element
5d3236ee 104 (struct bfd_link_info *, bfd *, const char *, bfd **);
1a72702b 105static void multiple_definition
24f58f47 106 (struct bfd_link_info *, struct bfd_link_hash_entry *,
1579bae1 107 bfd *, asection *, bfd_vma);
1a72702b 108static void multiple_common
24f58f47
AM
109 (struct bfd_link_info *, struct bfd_link_hash_entry *,
110 bfd *, enum bfd_link_hash_type, bfd_vma);
1a72702b 111static void add_to_set
1579bae1
AM
112 (struct bfd_link_info *, struct bfd_link_hash_entry *,
113 bfd_reloc_code_real_type, bfd *, asection *, bfd_vma);
1a72702b 114static void constructor_callback
1579bae1
AM
115 (struct bfd_link_info *, bfd_boolean, const char *, bfd *,
116 asection *, bfd_vma);
1a72702b 117static void warning_callback
1579bae1
AM
118 (struct bfd_link_info *, const char *, const char *, bfd *,
119 asection *, bfd_vma);
0125cdf2 120static void warning_find_reloc
1579bae1 121 (bfd *, asection *, void *);
1a72702b 122static void undefined_symbol
1579bae1
AM
123 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma,
124 bfd_boolean);
1a72702b 125static void reloc_overflow
dfeffb9f
L
126 (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
127 const char *, bfd_vma, bfd *, asection *, bfd_vma);
1a72702b 128static void reloc_dangerous
1579bae1 129 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
1a72702b 130static void unattached_reloc
1579bae1 131 (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma);
0125cdf2 132static bfd_boolean notice
35ed3f94 133 (struct bfd_link_info *, struct bfd_link_hash_entry *,
46135103 134 struct bfd_link_hash_entry *, bfd *, asection *, bfd_vma, flagword);
0125cdf2
NC
135
136static struct bfd_link_callbacks link_callbacks =
137{
252b5132
RH
138 add_archive_element,
139 multiple_definition,
140 multiple_common,
141 add_to_set,
142 constructor_callback,
143 warning_callback,
144 undefined_symbol,
145 reloc_overflow,
146 reloc_dangerous,
147 unattached_reloc,
e1fffbe6 148 notice,
2889e75b 149 einfo,
49fa1e15
AM
150 info_msg,
151 minfo,
1ff6de03
NA
152 ldlang_override_segment_assignment,
153 ldlang_ctf_apply_strsym,
154 ldlang_write_ctf_late
252b5132
RH
155};
156
3b66a141 157static bfd_assert_handler_type default_bfd_assert_handler;
4519d071 158static bfd_error_handler_type default_bfd_error_handler;
3b66a141 159
252b5132
RH
160struct bfd_link_info link_info;
161\f
162static void
498cd2a0 163ld_cleanup (void)
252b5132 164{
498cd2a0
AM
165 bfd_cache_close_all ();
166#ifdef ENABLE_PLUGINS
167 plugin_call_cleanup ();
168#endif
169 if (output_filename && delete_output_file_on_failure)
170 unlink_if_ordinary (output_filename);
252b5132
RH
171}
172
4519d071 173/* Hook to notice BFD assertions. */
3b66a141
HPN
174
175static void
176ld_bfd_assert_handler (const char *fmt, const char *bfdver,
177 const char *file, int line)
178{
3b66a141 179 config.make_executable = FALSE;
4519d071
AM
180 (*default_bfd_assert_handler) (fmt, bfdver, file, line);
181}
182
183/* Hook the bfd error/warning handler for --fatal-warnings. */
184
185static void
186ld_bfd_error_handler (const char *fmt, va_list ap)
187{
188 if (config.fatal_warnings)
189 config.make_executable = FALSE;
190 (*default_bfd_error_handler) (fmt, ap);
3b66a141
HPN
191}
192
252b5132 193int
1579bae1 194main (int argc, char **argv)
252b5132
RH
195{
196 char *emulation;
197 long start_time = get_run_time ();
198
199#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
200 setlocale (LC_MESSAGES, "");
3882b010
L
201#endif
202#if defined (HAVE_SETLOCALE)
203 setlocale (LC_CTYPE, "");
252b5132
RH
204#endif
205 bindtextdomain (PACKAGE, LOCALEDIR);
206 textdomain (PACKAGE);
207
208 program_name = argv[0];
209 xmalloc_set_program_name (program_name);
210
211 START_PROGRESS (program_name, 0);
212
869b9d07
MM
213 expandargv (&argc, &argv);
214
bf2dd8d7
AM
215 if (bfd_init () != BFD_INIT_MAGIC)
216 einfo (_("%F%P: fatal error: libbfd ABI mismatch\n"));
252b5132
RH
217
218 bfd_set_error_program_name (program_name);
219
3b66a141
HPN
220 /* We want to notice and fail on those nasty BFD assertions which are
221 likely to signal incorrect output being generated but otherwise may
222 leave no trace. */
223 default_bfd_assert_handler = bfd_set_assert_handler (ld_bfd_assert_handler);
224
4519d071
AM
225 /* Also hook the bfd error/warning handler for --fatal-warnings. */
226 default_bfd_error_handler = bfd_set_error_handler (ld_bfd_error_handler);
227
498cd2a0 228 xatexit (ld_cleanup);
252b5132 229
e2243057
RS
230 /* Set up the sysroot directory. */
231 ld_sysroot = get_sysroot (argc, argv);
232 if (*ld_sysroot)
3074964f 233 ld_canon_sysroot = lrealpath (ld_sysroot);
3fe38064 234 if (ld_canon_sysroot)
889be5db
DR
235 {
236 ld_canon_sysroot_len = strlen (ld_canon_sysroot);
237
238 /* is_sysrooted_pathname() relies on no trailing dirsep. */
239 if (ld_canon_sysroot_len > 0
240 && IS_DIR_SEPARATOR (ld_canon_sysroot [ld_canon_sysroot_len - 1]))
241 ld_canon_sysroot [--ld_canon_sysroot_len] = '\0';
242 }
3fe38064
NC
243 else
244 ld_canon_sysroot_len = -1;
245
252b5132
RH
246 /* Set the default BFD target based on the configured target. Doing
247 this permits the linker to be configured for a particular target,
248 and linked against a shared BFD library which was configured for
249 a different target. The macro TARGET is defined by Makefile. */
0aa7f586 250 if (!bfd_set_default_target (TARGET))
252b5132
RH
251 {
252 einfo (_("%X%P: can't set BFD default target to `%s': %E\n"), TARGET);
253 xexit (1);
254 }
255
b47c4208
AM
256#if YYDEBUG
257 {
258 extern int yydebug;
259 yydebug = 1;
260 }
261#endif
262
b34976b6 263 config.build_constructors = TRUE;
c76308d2 264 config.rpath_separator = ':';
a854a4a7
AM
265 config.split_by_reloc = (unsigned) -1;
266 config.split_by_file = (bfd_size_type) -1;
3b95049e
AM
267 config.make_executable = TRUE;
268 config.magic_demand_paged = TRUE;
269 config.text_read_only = TRUE;
035801ce 270 config.print_map_discarded = TRUE;
4f9d22a0 271 link_info.disable_target_specific_optimizations = -1;
3b95049e 272
b34976b6 273 command_line.warn_mismatch = TRUE;
fe7929ce 274 command_line.warn_search_mismatch = TRUE;
02b0b1aa 275 command_line.check_section_addresses = -1;
bcaa7b3e 276
252b5132
RH
277 /* We initialize DEMANGLING based on the environment variable
278 COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
279 output of the linker, unless COLLECT_NO_DEMANGLE is set in the
280 environment. Acting the same way here lets us provide the same
281 interface by default. */
282 demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
283
b34976b6 284 link_info.allow_undefined_version = TRUE;
b5067602 285 link_info.keep_memory = TRUE;
b5067602 286 link_info.combreloc = TRUE;
d5cd3933 287 link_info.strip_discarded = TRUE;
3f0a5f17 288 link_info.prohibit_multiple_definition_absolute = FALSE;
b32632c4 289 link_info.textrel_check = DEFAULT_LD_TEXTREL_CHECK;
2760f24c
RG
290 link_info.emit_hash = DEFAULT_EMIT_SYSV_HASH;
291 link_info.emit_gnu_hash = DEFAULT_EMIT_GNU_HASH;
a9a4c53e
AM
292 link_info.callbacks = &link_callbacks;
293 link_info.input_bfds_tail = &link_info.input_bfds;
3dbf70a2
MM
294 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
295 and _fini symbols. We are compatible. */
296 link_info.init_function = "_init";
297 link_info.fini_function = "_fini";
a9a4c53e 298 link_info.relax_pass = 1;
889c2a67 299 link_info.extern_protected_data = -1;
aec6b87e 300 link_info.dynamic_undefined_weak = -1;
e0076ab3 301 link_info.pei386_auto_import = -1;
db6751f2 302 link_info.spare_dynamic_tags = 5;
967928e9 303 link_info.path_separator = ':';
6c3bc0f8
NC
304#ifdef DEFAULT_FLAG_COMPRESS_DEBUG
305 link_info.compress_debug = COMPRESS_DEBUG_GABI_ZLIB;
306#endif
6734f10a 307#ifdef DEFAULT_NEW_DTAGS
91001320 308 link_info.new_dtags = DEFAULT_NEW_DTAGS;
6734f10a 309#endif
24718e3b 310
252b5132 311 ldfile_add_arch ("");
252b5132
RH
312 emulation = get_emulation (argc, argv);
313 ldemul_choose_mode (emulation);
742aeb63 314 default_target = ldemul_choose_target (argc, argv);
252b5132 315 lang_init ();
18d6a79d 316 ldexp_init ();
252b5132 317 ldemul_before_parse ();
b34976b6 318 lang_has_input_file = FALSE;
252b5132
RH
319 parse_args (argc, argv);
320
2d643429
NC
321 if (config.hash_table_size != 0)
322 bfd_hash_set_default_size (config.hash_table_size);
323
9bbc1a67
AM
324#ifdef ENABLE_PLUGINS
325 /* Now all the plugin arguments have been gathered, we can load them. */
d82184d7 326 plugin_load_plugins ();
9bbc1a67 327#endif /* ENABLE_PLUGINS */
36af4a4e 328
9bbc1a67 329 ldemul_set_symbols ();
252b5132 330
14be8564
L
331 /* If we have not already opened and parsed a linker script,
332 try the default script from command line first. */
333 if (saved_script_handle == NULL
334 && command_line.default_script != NULL)
335 {
6ec6968b 336 ldfile_open_script_file (command_line.default_script);
14be8564
L
337 parser_input = input_script;
338 yyparse ();
339 }
340
b9a8de1e
NC
341 /* If we have not already opened and parsed a linker script
342 read the emulation's appropriate default script. */
b90e1c6f 343 if (saved_script_handle == NULL)
252b5132 344 {
252b5132 345 int isfile;
b7a26f91 346 char *s = ldemul_get_script (&isfile);
252b5132
RH
347
348 if (isfile)
7d24f02c 349 ldfile_open_default_command_file (s);
252b5132 350 else
b7a26f91 351 {
252b5132 352 lex_string = s;
dab69f68 353 lex_redirect (s, _("built in linker script"), 1);
252b5132
RH
354 }
355 parser_input = input_script;
356 yyparse ();
357 lex_string = NULL;
358 }
359
cd6f1cf3 360 if (verbose)
b9a8de1e 361 {
9cb61eab
AM
362 if (saved_script_handle)
363 info_msg (_("using external linker script:"));
364 else
365 info_msg (_("using internal linker script:"));
366 info_msg ("\n==================================================\n");
b9a8de1e
NC
367
368 if (saved_script_handle)
369 {
74699268 370 static const int ld_bufsz = 8193;
b9a8de1e 371 size_t n;
1e9cc1c2 372 char *buf = (char *) xmalloc (ld_bufsz);
b9a8de1e
NC
373
374 rewind (saved_script_handle);
74699268 375 while ((n = fread (buf, 1, ld_bufsz - 1, saved_script_handle)) > 0)
b9a8de1e 376 {
b7a26f91 377 buf[n] = 0;
f5ac6ab3 378 info_msg ("%s", buf);
b9a8de1e
NC
379 }
380 rewind (saved_script_handle);
381 free (buf);
382 }
383 else
384 {
385 int isfile;
386
b7a26f91 387 info_msg (ldemul_get_script (&isfile));
b9a8de1e 388 }
b7a26f91 389
b9a8de1e
NC
390 info_msg ("\n==================================================\n");
391 }
392
7bdf4127
AB
393 if (command_line.force_group_allocation
394 || !bfd_link_relocatable (&link_info))
395 link_info.resolve_section_groups = TRUE;
396 else
397 link_info.resolve_section_groups = FALSE;
398
30824704
RM
399 if (command_line.print_output_format)
400 info_msg ("%s\n", lang_get_output_target ());
401
252b5132
RH
402 lang_final ();
403
61e2488c
JT
404 /* If the only command line argument has been -v or --version or --verbose
405 then ignore any input files provided by linker scripts and exit now.
406 We do not want to create an output file when the linker is just invoked
407 to provide version information. */
408 if (argc == 2 && version_printed)
409 xexit (0);
410
a4819f54 411 if (link_info.inhibit_common_definition && !bfd_link_dll (&link_info))
df5f2391 412 einfo (_("%F%P: --no-define-common may not be used without -shared\n"));
a4819f54 413
b34976b6 414 if (!lang_has_input_file)
252b5132 415 {
30824704 416 if (version_printed || command_line.print_output_format)
252b5132 417 xexit (0);
df5f2391 418 einfo (_("%F%P: no input files\n"));
252b5132
RH
419 }
420
5c87f94b 421 if (verbose)
0125cdf2 422 info_msg (_("%P: mode %s\n"), emulation);
252b5132
RH
423
424 ldemul_after_parse ();
425
252b5132
RH
426 if (config.map_filename)
427 {
428 if (strcmp (config.map_filename, "-") == 0)
429 {
430 config.map_file = stdout;
431 }
432 else
433 {
434 config.map_file = fopen (config.map_filename, FOPEN_WT);
435 if (config.map_file == (FILE *) NULL)
436 {
437 bfd_set_error (bfd_error_system_call);
df5f2391 438 einfo (_("%F%P: cannot open map file %s: %E\n"),
252b5132
RH
439 config.map_filename);
440 }
441 }
d2ef37eb 442 link_info.has_map_file = TRUE;
252b5132
RH
443 }
444
252b5132
RH
445 lang_process ();
446
447 /* Print error messages for any missing symbols, for any warning
6d5e62f8 448 symbols, and possibly multiple definitions. */
0e1862bb 449 if (bfd_link_relocatable (&link_info))
f13a99db 450 link_info.output_bfd->flags &= ~EXEC_P;
252b5132 451 else
f13a99db 452 link_info.output_bfd->flags |= EXEC_P;
252b5132 453
0ce398f1
L
454 if ((link_info.compress_debug & COMPRESS_DEBUG))
455 {
456 link_info.output_bfd->flags |= BFD_COMPRESS;
457 if (link_info.compress_debug == COMPRESS_DEBUG_GABI_ZLIB)
458 link_info.output_bfd->flags |= BFD_COMPRESS_GABI;
459 }
460
252b5132
RH
461 ldwrite ();
462
463 if (config.map_file != NULL)
464 lang_map ();
465 if (command_line.cref)
466 output_cref (config.map_file != NULL ? config.map_file : stdout);
467 if (nocrossref_list != NULL)
468 check_nocrossrefs ();
3604cb1f
TG
469 if (command_line.print_memory_usage)
470 lang_print_memory_usage ();
edf84efc
NC
471#if 0
472 {
0aa7f586 473 struct bfd_link_hash_entry *h;
252b5132 474
edf84efc
NC
475 h = bfd_link_hash_lookup (link_info.hash, "__image_base__", 0,0,1);
476 fprintf (stderr, "lookup = %p val %lx\n", h, h ? h->u.def.value : 1);
477 }
478#endif
18d6a79d 479 ldexp_finish ();
750877ba
L
480 lang_finish ();
481
1049f94e 482 /* Even if we're producing relocatable output, some non-fatal errors should
252b5132 483 be reported in the exit status. (What non-fatal errors, if any, do we
1049f94e 484 want to ignore for relocatable output?) */
b34976b6 485 if (!config.make_executable && !force_make_executable)
252b5132 486 {
5c87f94b 487 if (verbose)
0125cdf2
NC
488 einfo (_("%P: link errors found, deleting executable `%s'\n"),
489 output_filename);
252b5132 490
4309cbf2 491 /* The file will be removed by ld_cleanup. */
252b5132
RH
492 xexit (1);
493 }
494 else
495 {
0aa7f586 496 if (!bfd_close (link_info.output_bfd))
df5f2391 497 einfo (_("%F%P: %pB: final close failed: %E\n"), link_info.output_bfd);
252b5132
RH
498
499 /* If the --force-exe-suffix is enabled, and we're making an
6d5e62f8
KH
500 executable file and it doesn't end in .exe, copy it to one
501 which does. */
0e1862bb
L
502 if (!bfd_link_relocatable (&link_info)
503 && command_line.force_exe_suffix)
252b5132
RH
504 {
505 int len = strlen (output_filename);
0125cdf2 506
6d5e62f8 507 if (len < 4
252b5132
RH
508 || (strcasecmp (output_filename + len - 4, ".exe") != 0
509 && strcasecmp (output_filename + len - 4, ".dll") != 0))
510 {
511 FILE *src;
512 FILE *dst;
513 const int bsize = 4096;
1e9cc1c2 514 char *buf = (char *) xmalloc (bsize);
252b5132 515 int l;
1e9cc1c2 516 char *dst_name = (char *) xmalloc (len + 5);
0125cdf2 517
252b5132
RH
518 strcpy (dst_name, output_filename);
519 strcat (dst_name, ".exe");
520 src = fopen (output_filename, FOPEN_RB);
521 dst = fopen (dst_name, FOPEN_WB);
522
523 if (!src)
df5f2391 524 einfo (_("%F%P: unable to open for source of copy `%s'\n"),
1579bae1 525 output_filename);
252b5132 526 if (!dst)
df5f2391 527 einfo (_("%F%P: unable to open for destination of copy `%s'\n"),
1579bae1 528 dst_name);
252b5132
RH
529 while ((l = fread (buf, 1, bsize, src)) > 0)
530 {
531 int done = fwrite (buf, 1, l, dst);
0125cdf2 532
252b5132 533 if (done != l)
df5f2391 534 einfo (_("%P: error writing file `%s'\n"), dst_name);
252b5132 535 }
0125cdf2 536
252b5132
RH
537 fclose (src);
538 if (fclose (dst) == EOF)
df5f2391 539 einfo (_("%P: error closing file `%s'\n"), dst_name);
252b5132
RH
540 free (dst_name);
541 free (buf);
542 }
543 }
544 }
545
546 END_PROGRESS (program_name);
547
548 if (config.stats)
549 {
252b5132
RH
550 long run_time = get_run_time () - start_time;
551
e922bcab 552 fflush (stdout);
252b5132
RH
553 fprintf (stderr, _("%s: total time in link: %ld.%06ld\n"),
554 program_name, run_time / 1000000, run_time % 1000000);
e922bcab 555 fflush (stderr);
252b5132
RH
556 }
557
4309cbf2 558 /* Prevent ld_cleanup from doing anything, after a successful link. */
252b5132
RH
559 output_filename = NULL;
560
561 xexit (0);
562 return 0;
563}
564
e2243057
RS
565/* If the configured sysroot is relocatable, try relocating it based on
566 default prefix FROM. Return the relocated directory if it exists,
567 otherwise return null. */
568
569static char *
570get_relative_sysroot (const char *from ATTRIBUTE_UNUSED)
571{
572#ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
573 char *path;
574 struct stat s;
575
576 path = make_relative_prefix (program_name, from, TARGET_SYSTEM_ROOT);
577 if (path)
578 {
579 if (stat (path, &s) == 0 && S_ISDIR (s.st_mode))
580 return path;
581 free (path);
582 }
583#endif
584 return 0;
585}
586
587/* Return the sysroot directory. Return "" if no sysroot is being used. */
588
589static const char *
590get_sysroot (int argc, char **argv)
591{
592 int i;
55d5520a 593 const char *path = NULL;
e2243057
RS
594
595 for (i = 1; i < argc; i++)
0112cd26 596 if (CONST_STRNEQ (argv[i], "--sysroot="))
55d5520a 597 path = argv[i] + strlen ("--sysroot=");
e2243057 598
55d5520a
AM
599 if (!path)
600 path = get_relative_sysroot (BINDIR);
e2243057 601
55d5520a
AM
602 if (!path)
603 path = get_relative_sysroot (TOOLBINDIR);
604
605 if (!path)
606 path = TARGET_SYSTEM_ROOT;
607
608 if (IS_DIR_SEPARATOR (*path) && path[1] == 0)
609 path = "";
e2243057 610
55d5520a 611 return path;
e2243057
RS
612}
613
252b5132
RH
614/* We need to find any explicitly given emulation in order to initialize the
615 state that's needed by the lex&yacc argument parser (parse_args). */
616
617static char *
1579bae1 618get_emulation (int argc, char **argv)
252b5132
RH
619{
620 char *emulation;
621 int i;
622
623 emulation = getenv (EMULATION_ENVIRON);
624 if (emulation == NULL)
625 emulation = DEFAULT_EMULATION;
626
627 for (i = 1; i < argc; i++)
628 {
0112cd26 629 if (CONST_STRNEQ (argv[i], "-m"))
252b5132
RH
630 {
631 if (argv[i][2] == '\0')
632 {
633 /* -m EMUL */
634 if (i < argc - 1)
635 {
636 emulation = argv[i + 1];
637 i++;
638 }
639 else
df5f2391 640 einfo (_("%F%P: missing argument to -m\n"));
252b5132
RH
641 }
642 else if (strcmp (argv[i], "-mips1") == 0
643 || strcmp (argv[i], "-mips2") == 0
644 || strcmp (argv[i], "-mips3") == 0
d1cf510e 645 || strcmp (argv[i], "-mips4") == 0
6f33421c
CD
646 || strcmp (argv[i], "-mips5") == 0
647 || strcmp (argv[i], "-mips32") == 0
648 || strcmp (argv[i], "-mips32r2") == 0
7361da2c 649 || strcmp (argv[i], "-mips32r6") == 0
5f74bc13 650 || strcmp (argv[i], "-mips64") == 0
7361da2c
AB
651 || strcmp (argv[i], "-mips64r2") == 0
652 || strcmp (argv[i], "-mips64r6") == 0)
252b5132 653 {
31d677f9 654 /* FIXME: The arguments -mips1, -mips2, -mips3, etc. are
252b5132
RH
655 passed to the linker by some MIPS compilers. They
656 generally tell the linker to use a slightly different
657 library path. Perhaps someday these should be
658 implemented as emulations; until then, we just ignore
659 the arguments and hope that nobody ever creates
660 emulations named ips1, ips2 or ips3. */
661 }
662 else if (strcmp (argv[i], "-m486") == 0)
663 {
664 /* FIXME: The argument -m486 is passed to the linker on
665 some Linux systems. Hope that nobody creates an
666 emulation named 486. */
667 }
668 else
669 {
670 /* -mEMUL */
671 emulation = &argv[i][2];
672 }
673 }
674 }
675
676 return emulation;
677}
678
252b5132 679void
1579bae1 680add_ysym (const char *name)
252b5132 681{
1579bae1 682 if (link_info.notice_hash == NULL)
252b5132 683 {
0aa7f586
AM
684 link_info.notice_hash
685 = (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
686 if (!bfd_hash_table_init_n (link_info.notice_hash,
687 bfd_hash_newfunc,
688 sizeof (struct bfd_hash_entry),
689 61))
df5f2391 690 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
6d5e62f8 691 }
252b5132 692
1579bae1 693 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
df5f2391 694 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
252b5132
RH
695}
696
0e86e20e
AM
697void
698add_ignoresym (struct bfd_link_info *info, const char *name)
699{
700 if (info->ignore_hash == NULL)
701 {
702 info->ignore_hash = xmalloc (sizeof (struct bfd_hash_table));
0aa7f586
AM
703 if (!bfd_hash_table_init_n (info->ignore_hash,
704 bfd_hash_newfunc,
705 sizeof (struct bfd_hash_entry),
706 61))
df5f2391 707 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
0e86e20e
AM
708 }
709
710 if (bfd_hash_lookup (info->ignore_hash, name, TRUE, TRUE) == NULL)
df5f2391 711 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
0e86e20e
AM
712}
713
252b5132
RH
714/* Record a symbol to be wrapped, from the --wrap option. */
715
716void
1579bae1 717add_wrap (const char *name)
252b5132
RH
718{
719 if (link_info.wrap_hash == NULL)
720 {
0aa7f586
AM
721 link_info.wrap_hash
722 = (struct bfd_hash_table *) xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
723 if (!bfd_hash_table_init_n (link_info.wrap_hash,
724 bfd_hash_newfunc,
725 sizeof (struct bfd_hash_entry),
726 61))
df5f2391 727 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
252b5132 728 }
0125cdf2 729
b34976b6 730 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
df5f2391 731 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
252b5132
RH
732}
733
734/* Handle the -retain-symbols-file option. */
735
736void
1579bae1 737add_keepsyms_file (const char *filename)
252b5132
RH
738{
739 FILE *file;
740 char *buf;
741 size_t bufsize;
742 int c;
743
744 if (link_info.strip == strip_some)
745 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
746
747 file = fopen (filename, "r");
1579bae1 748 if (file == NULL)
252b5132
RH
749 {
750 bfd_set_error (bfd_error_system_call);
751 einfo ("%X%P: %s: %E\n", filename);
752 return;
753 }
754
1e9cc1c2
NC
755 link_info.keep_hash = (struct bfd_hash_table *)
756 xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
757 if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
758 sizeof (struct bfd_hash_entry)))
df5f2391 759 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
252b5132
RH
760
761 bufsize = 100;
1e9cc1c2 762 buf = (char *) xmalloc (bufsize);
252b5132
RH
763
764 c = getc (file);
765 while (c != EOF)
766 {
3882b010 767 while (ISSPACE (c))
252b5132
RH
768 c = getc (file);
769
770 if (c != EOF)
771 {
772 size_t len = 0;
773
0aa7f586 774 while (!ISSPACE (c) && c != EOF)
252b5132
RH
775 {
776 buf[len] = c;
777 ++len;
778 if (len >= bufsize)
779 {
780 bufsize *= 2;
1e9cc1c2 781 buf = (char *) xrealloc (buf, bufsize);
252b5132
RH
782 }
783 c = getc (file);
784 }
785
786 buf[len] = '\0';
787
1579bae1 788 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
df5f2391 789 einfo (_("%F%P: bfd_hash_lookup for insertion failed: %E\n"));
252b5132
RH
790 }
791 }
792
793 if (link_info.strip != strip_none)
794 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
795
5ed6aba4 796 free (buf);
252b5132 797 link_info.strip = strip_some;
d9313f4f 798 fclose (file);
252b5132
RH
799}
800\f
801/* Callbacks from the BFD linker routines. */
802
803/* This is called when BFD has decided to include an archive member in
804 a link. */
805
b34976b6 806static bfd_boolean
e1fffbe6 807add_archive_element (struct bfd_link_info *info,
1579bae1 808 bfd *abfd,
5d3236ee
DK
809 const char *name,
810 bfd **subsbfd ATTRIBUTE_UNUSED)
252b5132
RH
811{
812 lang_input_statement_type *input;
1fa4ec6a 813 lang_input_statement_type *parent;
5d3236ee 814 lang_input_statement_type orig_input;
252b5132 815
1e9cc1c2
NC
816 input = (lang_input_statement_type *)
817 xcalloc (1, sizeof (lang_input_statement_type));
fb47deda 818 input->header.type = lang_input_statement_enum;
607b4833
AM
819 input->filename = bfd_get_filename (abfd);
820 input->local_sym_name = bfd_get_filename (abfd);
252b5132 821 input->the_bfd = abfd;
252b5132 822
00f93c44 823 parent = bfd_usrdata (abfd->my_archive);
1fa4ec6a 824 if (parent != NULL && !parent->flags.reload)
36983a93 825 parent->next = input;
1fa4ec6a 826
5d3236ee
DK
827 /* Save the original data for trace files/tries below, as plugins
828 (if enabled) may possibly alter it to point to a replacement
829 BFD, but we still want to output the original BFD filename. */
830 orig_input = *input;
831#ifdef ENABLE_PLUGINS
b95a0a31 832 if (link_info.lto_plugin_active)
5d3236ee
DK
833 {
834 /* We must offer this archive member to the plugins to claim. */
35a1e5f3
L
835 plugin_maybe_claim (input);
836 if (input->flags.claimed)
5d3236ee 837 {
b95a0a31
L
838 if (no_more_claiming)
839 {
840 /* Don't claim new IR symbols after all IR symbols have
841 been claimed. */
5c87f94b 842 if (verbose)
6e0c75f7 843 info_msg ("%pI: no new IR symbols to claim\n",
b95a0a31
L
844 &orig_input);
845 input->flags.claimed = 0;
846 return FALSE;
847 }
35a1e5f3
L
848 input->flags.claim_archive = TRUE;
849 *subsbfd = input->the_bfd;
5d3236ee
DK
850 }
851 }
852#endif /* ENABLE_PLUGINS */
853
252b5132
RH
854 ldlang_add_file (input);
855
1579bae1 856 if (config.map_file != NULL)
252b5132 857 {
b34976b6 858 static bfd_boolean header_printed;
252b5132
RH
859 struct bfd_link_hash_entry *h;
860 bfd *from;
861 int len;
862
e1fffbe6 863 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
aa654ee8
AM
864 if (h == NULL
865 && info->pei386_auto_import
866 && CONST_STRNEQ (name, "__imp_"))
867 h = bfd_link_hash_lookup (info->hash, name + 6, FALSE, FALSE, TRUE);
252b5132
RH
868
869 if (h == NULL)
870 from = NULL;
871 else
872 {
873 switch (h->type)
874 {
875 default:
876 from = NULL;
877 break;
878
879 case bfd_link_hash_defined:
880 case bfd_link_hash_defweak:
881 from = h->u.def.section->owner;
882 break;
883
884 case bfd_link_hash_undefined:
885 case bfd_link_hash_undefweak:
886 from = h->u.undef.abfd;
887 break;
888
889 case bfd_link_hash_common:
890 from = h->u.c.p->section->owner;
891 break;
892 }
893 }
894
0aa7f586 895 if (!header_printed)
252b5132 896 {
1273da04 897 minfo (_("Archive member included to satisfy reference by file (symbol)\n\n"));
b34976b6 898 header_printed = TRUE;
252b5132
RH
899 }
900
3860d2b4
AM
901 if (abfd->my_archive == NULL
902 || bfd_is_thin_archive (abfd->my_archive))
252b5132
RH
903 {
904 minfo ("%s", bfd_get_filename (abfd));
905 len = strlen (bfd_get_filename (abfd));
906 }
907 else
908 {
3860d2b4 909 minfo ("%s(%s)", bfd_get_filename (abfd->my_archive),
252b5132 910 bfd_get_filename (abfd));
3860d2b4 911 len = (strlen (bfd_get_filename (abfd->my_archive))
252b5132
RH
912 + strlen (bfd_get_filename (abfd))
913 + 2);
914 }
915
916 if (len >= 29)
917 {
918 print_nl ();
919 len = 0;
920 }
921 while (len < 30)
922 {
923 print_space ();
924 ++len;
925 }
926
927 if (from != NULL)
871b3ab2 928 minfo ("%pB ", from);
252b5132 929 if (h != NULL)
c1c8c1ef 930 minfo ("(%pT)\n", h->root.string);
252b5132
RH
931 else
932 minfo ("(%s)\n", name);
933 }
934
727a29ba
AM
935 if (verbose
936 || trace_files > 1
937 || (trace_files && bfd_is_thin_archive (orig_input.the_bfd->my_archive)))
c1c8c1ef 938 info_msg ("%pI\n", &orig_input);
b34976b6 939 return TRUE;
252b5132
RH
940}
941
942/* This is called when BFD has discovered a symbol which is defined
943 multiple times. */
944
1a72702b 945static void
24f58f47
AM
946multiple_definition (struct bfd_link_info *info,
947 struct bfd_link_hash_entry *h,
1579bae1
AM
948 bfd *nbfd,
949 asection *nsec,
950 bfd_vma nval)
252b5132 951{
24f58f47
AM
952 const char *name;
953 bfd *obfd;
954 asection *osec;
955 bfd_vma oval;
956
957 if (info->allow_multiple_definition)
1a72702b 958 return;
24f58f47
AM
959
960 switch (h->type)
961 {
962 case bfd_link_hash_defined:
963 osec = h->u.def.section;
964 oval = h->u.def.value;
965 obfd = h->u.def.section->owner;
966 break;
967 case bfd_link_hash_indirect:
968 osec = bfd_ind_section_ptr;
969 oval = 0;
970 obfd = NULL;
971 break;
972 default:
973 abort ();
974 }
975
976 /* Ignore a redefinition of an absolute symbol to the
977 same value; it's harmless. */
978 if (h->type == bfd_link_hash_defined
979 && bfd_is_abs_section (osec)
980 && bfd_is_abs_section (nsec)
981 && nval == oval)
1a72702b 982 return;
24f58f47 983
252b5132
RH
984 /* If either section has the output_section field set to
985 bfd_abs_section_ptr, it means that the section is being
986 discarded, and this is not really a multiple definition at all.
9e2278f5
AM
987 FIXME: It would be cleaner to somehow ignore symbols defined in
988 sections which are being discarded. */
3f0a5f17
ME
989 if (!info->prohibit_multiple_definition_absolute
990 && ((osec->output_section != NULL
991 && ! bfd_is_abs_section (osec)
992 && bfd_is_abs_section (osec->output_section))
993 || (nsec->output_section != NULL
994 && !bfd_is_abs_section (nsec)
995 && bfd_is_abs_section (nsec->output_section))))
1a72702b 996 return;
252b5132 997
24f58f47
AM
998 name = h->root.string;
999 if (nbfd == NULL)
1000 {
1001 nbfd = obfd;
1002 nsec = osec;
1003 nval = oval;
1004 obfd = NULL;
1005 }
df5f2391 1006 einfo (_("%X%P: %C: multiple definition of `%pT'"),
252b5132 1007 nbfd, nsec, nval, name);
1579bae1 1008 if (obfd != NULL)
df5f2391
AM
1009 einfo (_("; %D: first defined here"), obfd, osec, oval);
1010 einfo ("\n");
9b14b192 1011
13761a11 1012 if (RELAXATION_ENABLED_BY_USER)
9b14b192 1013 {
df5f2391 1014 einfo (_("%P: disabling relaxation; it will not work with multiple definitions\n"));
13761a11 1015 DISABLE_RELAXATION;
9b14b192 1016 }
252b5132
RH
1017}
1018
1019/* This is called when there is a definition of a common symbol, or
1020 when a common symbol is found for a symbol that is already defined,
1021 or when two common symbols are found. We only do something if
1022 -warn-common was used. */
1023
1a72702b 1024static void
1579bae1 1025multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
24f58f47 1026 struct bfd_link_hash_entry *h,
1579bae1
AM
1027 bfd *nbfd,
1028 enum bfd_link_hash_type ntype,
1029 bfd_vma nsize)
252b5132 1030{
24f58f47
AM
1031 const char *name;
1032 bfd *obfd;
1033 enum bfd_link_hash_type otype;
1034 bfd_vma osize;
1035
1036 if (!config.warn_common)
1a72702b 1037 return;
252b5132 1038
24f58f47
AM
1039 name = h->root.string;
1040 otype = h->type;
1041 if (otype == bfd_link_hash_common)
1042 {
1043 obfd = h->u.c.p->section->owner;
1044 osize = h->u.c.size;
1045 }
1046 else if (otype == bfd_link_hash_defined
1047 || otype == bfd_link_hash_defweak)
1048 {
1049 obfd = h->u.def.section->owner;
1050 osize = 0;
1051 }
1052 else
1053 {
1054 /* FIXME: It would nice if we could report the BFD which defined
1055 an indirect symbol, but we don't have anywhere to store the
1056 information. */
1057 obfd = NULL;
1058 osize = 0;
1059 }
1060
252b5132
RH
1061 if (ntype == bfd_link_hash_defined
1062 || ntype == bfd_link_hash_defweak
1063 || ntype == bfd_link_hash_indirect)
1064 {
1065 ASSERT (otype == bfd_link_hash_common);
252b5132 1066 if (obfd != NULL)
df5f2391
AM
1067 einfo (_("%P: %pB: warning: definition of `%pT' overriding common"
1068 " from %pB\n"),
1069 nbfd, name, obfd);
1070 else
1071 einfo (_("%P: %pB: warning: definition of `%pT' overriding common\n"),
1072 nbfd, name);
252b5132
RH
1073 }
1074 else if (otype == bfd_link_hash_defined
1075 || otype == bfd_link_hash_defweak
1076 || otype == bfd_link_hash_indirect)
1077 {
1078 ASSERT (ntype == bfd_link_hash_common);
252b5132 1079 if (obfd != NULL)
df5f2391
AM
1080 einfo (_("%P: %pB: warning: common of `%pT' overridden by definition"
1081 " from %pB\n"),
1082 nbfd, name, obfd);
1083 else
1084 einfo (_("%P: %pB: warning: common of `%pT' overridden by definition\n"),
1085 nbfd, name);
252b5132
RH
1086 }
1087 else
1088 {
1089 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1090 if (osize > nsize)
1091 {
252b5132 1092 if (obfd != NULL)
df5f2391
AM
1093 einfo (_("%P: %pB: warning: common of `%pT' overridden"
1094 " by larger common from %pB\n"),
1095 nbfd, name, obfd);
1096 else
1097 einfo (_("%P: %pB: warning: common of `%pT' overridden"
1098 " by larger common\n"),
1099 nbfd, name);
252b5132
RH
1100 }
1101 else if (nsize > osize)
1102 {
252b5132 1103 if (obfd != NULL)
df5f2391
AM
1104 einfo (_("%P: %pB: warning: common of `%pT' overriding"
1105 " smaller common from %pB\n"),
1106 nbfd, name, obfd);
1107 else
1108 einfo (_("%P: %pB: warning: common of `%pT' overriding"
1109 " smaller common\n"),
1110 nbfd, name);
252b5132
RH
1111 }
1112 else
1113 {
252b5132 1114 if (obfd != NULL)
df5f2391
AM
1115 einfo (_("%P: %pB and %pB: warning: multiple common of `%pT'\n"),
1116 nbfd, obfd, name);
1117 else
1118 einfo (_("%P: %pB: warning: multiple common of `%pT'\n"),
1119 nbfd, name);
252b5132
RH
1120 }
1121 }
252b5132
RH
1122}
1123
1124/* This is called when BFD has discovered a set element. H is the
1125 entry in the linker hash table for the set. SECTION and VALUE
1126 represent a value which should be added to the set. */
1127
1a72702b 1128static void
1579bae1
AM
1129add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1130 struct bfd_link_hash_entry *h,
1131 bfd_reloc_code_real_type reloc,
1132 bfd *abfd,
1133 asection *section,
1134 bfd_vma value)
252b5132
RH
1135{
1136 if (config.warn_constructors)
1137 einfo (_("%P: warning: global constructor %s used\n"),
1138 h->root.string);
1139
0aa7f586 1140 if (!config.build_constructors)
1a72702b 1141 return;
252b5132 1142
1579bae1 1143 ldctor_add_set_entry (h, reloc, NULL, section, value);
252b5132
RH
1144
1145 if (h->type == bfd_link_hash_new)
1146 {
1147 h->type = bfd_link_hash_undefined;
1148 h->u.undef.abfd = abfd;
1149 /* We don't call bfd_link_add_undef to add this to the list of
1150 undefined symbols because we are going to define it
1151 ourselves. */
1152 }
252b5132
RH
1153}
1154
1155/* This is called when BFD has discovered a constructor. This is only
1156 called for some object file formats--those which do not handle
1157 constructors in some more clever fashion. This is similar to
1158 adding an element to a set, but less general. */
1159
1a72702b 1160static void
1579bae1
AM
1161constructor_callback (struct bfd_link_info *info,
1162 bfd_boolean constructor,
1163 const char *name,
1164 bfd *abfd,
1165 asection *section,
1166 bfd_vma value)
252b5132
RH
1167{
1168 char *s;
1169 struct bfd_link_hash_entry *h;
1170 char set_name[1 + sizeof "__CTOR_LIST__"];
1171
1172 if (config.warn_constructors)
1173 einfo (_("%P: warning: global constructor %s used\n"), name);
1174
0aa7f586 1175 if (!config.build_constructors)
1a72702b 1176 return;
252b5132
RH
1177
1178 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1179 useful error message. */
0e86e20e 1180 if (bfd_reloc_type_lookup (info->output_bfd, BFD_RELOC_CTOR) == NULL
0e1862bb 1181 && (bfd_link_relocatable (info)
252b5132 1182 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
df5f2391 1183 einfo (_("%F%P: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
252b5132
RH
1184
1185 s = set_name;
1186 if (bfd_get_symbol_leading_char (abfd) != '\0')
1187 *s++ = bfd_get_symbol_leading_char (abfd);
1188 if (constructor)
1189 strcpy (s, "__CTOR_LIST__");
1190 else
1191 strcpy (s, "__DTOR_LIST__");
1192
b34976b6 1193 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
252b5132 1194 if (h == (struct bfd_link_hash_entry *) NULL)
df5f2391 1195 einfo (_("%F%P: bfd_link_hash_lookup failed: %E\n"));
252b5132
RH
1196 if (h->type == bfd_link_hash_new)
1197 {
1198 h->type = bfd_link_hash_undefined;
1199 h->u.undef.abfd = abfd;
1200 /* We don't call bfd_link_add_undef to add this to the list of
1201 undefined symbols because we are going to define it
1202 ourselves. */
1203 }
1204
1205 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
252b5132
RH
1206}
1207
1208/* A structure used by warning_callback to pass information through
1209 bfd_map_over_sections. */
1210
0125cdf2
NC
1211struct warning_callback_info
1212{
b34976b6 1213 bfd_boolean found;
252b5132
RH
1214 const char *warning;
1215 const char *symbol;
1216 asymbol **asymbols;
1217};
1218
4c6d802e
L
1219/* Look through the relocs to see if we can find a plausible address
1220 for SYMBOL in ABFD. Return TRUE if found. Otherwise return FALSE. */
1221
1222static bfd_boolean
1223symbol_warning (const char *warning, const char *symbol, bfd *abfd)
1224{
1225 struct warning_callback_info cinfo;
1226
1227 if (!bfd_generic_link_read_symbols (abfd))
df5f2391 1228 einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd);
4c6d802e
L
1229
1230 cinfo.found = FALSE;
1231 cinfo.warning = warning;
1232 cinfo.symbol = symbol;
1233 cinfo.asymbols = bfd_get_outsymbols (abfd);
1234 bfd_map_over_sections (abfd, warning_find_reloc, &cinfo);
1235 return cinfo.found;
1236}
1237
252b5132
RH
1238/* This is called when there is a reference to a warning symbol. */
1239
1a72702b 1240static void
1579bae1
AM
1241warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1242 const char *warning,
1243 const char *symbol,
1244 bfd *abfd,
1245 asection *section,
1246 bfd_vma address)
252b5132
RH
1247{
1248 /* This is a hack to support warn_multiple_gp. FIXME: This should
1249 have a cleaner interface, but what? */
0aa7f586 1250 if (!config.warn_multiple_gp
252b5132 1251 && strcmp (warning, "using multiple gp values") == 0)
1a72702b 1252 return;
252b5132
RH
1253
1254 if (section != NULL)
df5f2391 1255 einfo ("%P: %C: %s%s\n", abfd, section, address, _("warning: "), warning);
252b5132 1256 else if (abfd == NULL)
300475fe 1257 einfo ("%P: %s%s\n", _("warning: "), warning);
252b5132 1258 else if (symbol == NULL)
df5f2391 1259 einfo ("%P: %pB: %s%s\n", abfd, _("warning: "), warning);
0aa7f586 1260 else if (!symbol_warning (warning, symbol, abfd))
252b5132 1261 {
4c6d802e
L
1262 bfd *b;
1263 /* Search all input files for a reference to SYMBOL. */
c72f2fb2 1264 for (b = info->input_bfds; b; b = b->link.next)
4c6d802e 1265 if (b != abfd && symbol_warning (warning, symbol, b))
1a72702b 1266 return;
df5f2391 1267 einfo ("%P: %pB: %s%s\n", abfd, _("warning: "), warning);
252b5132 1268 }
252b5132
RH
1269}
1270
1271/* This is called by warning_callback for each section. It checks the
1272 relocs of the section to see if it can find a reference to the
1273 symbol which triggered the warning. If it can, it uses the reloc
1274 to give an error message with a file and line number. */
1275
1276static void
1579bae1 1277warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
252b5132 1278{
1e9cc1c2 1279 struct warning_callback_info *info = (struct warning_callback_info *) iarg;
252b5132
RH
1280 long relsize;
1281 arelent **relpp;
1282 long relcount;
1283 arelent **p, **pend;
1284
1285 if (info->found)
1286 return;
1287
1288 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1289 if (relsize < 0)
df5f2391 1290 einfo (_("%F%P: %pB: could not read relocs: %E\n"), abfd);
252b5132
RH
1291 if (relsize == 0)
1292 return;
1293
1e9cc1c2 1294 relpp = (arelent **) xmalloc (relsize);
252b5132
RH
1295 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1296 if (relcount < 0)
df5f2391 1297 einfo (_("%F%P: %pB: could not read relocs: %E\n"), abfd);
252b5132
RH
1298
1299 p = relpp;
1300 pend = p + relcount;
1301 for (; p < pend && *p != NULL; p++)
1302 {
1303 arelent *q = *p;
1304
1305 if (q->sym_ptr_ptr != NULL
1306 && *q->sym_ptr_ptr != NULL
1307 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1308 {
1309 /* We found a reloc for the symbol we are looking for. */
df5f2391 1310 einfo ("%P: %C: %s%s\n", abfd, sec, q->address, _("warning: "),
300475fe 1311 info->warning);
b34976b6 1312 info->found = TRUE;
252b5132
RH
1313 break;
1314 }
1315 }
1316
1317 free (relpp);
1318}
1319
1320/* This is called when an undefined symbol is found. */
1321
1a72702b 1322static void
0e86e20e 1323undefined_symbol (struct bfd_link_info *info,
1579bae1
AM
1324 const char *name,
1325 bfd *abfd,
1326 asection *section,
1327 bfd_vma address,
0b28295d 1328 bfd_boolean error)
252b5132
RH
1329{
1330 static char *error_name;
1331 static unsigned int error_count;
1332
1333#define MAX_ERRORS_IN_A_ROW 5
1334
0e86e20e
AM
1335 if (info->ignore_hash != NULL
1336 && bfd_hash_lookup (info->ignore_hash, name, FALSE, FALSE) != NULL)
1a72702b 1337 return;
0e86e20e 1338
252b5132
RH
1339 if (config.warn_once)
1340 {
252b5132 1341 /* Only warn once about a particular undefined symbol. */
0e86e20e 1342 add_ignoresym (info, name);
252b5132
RH
1343 }
1344
1345 /* We never print more than a reasonable number of errors in a row
1346 for a single symbol. */
1579bae1 1347 if (error_name != NULL
252b5132
RH
1348 && strcmp (name, error_name) == 0)
1349 ++error_count;
1350 else
1351 {
1352 error_count = 0;
5e2ab612 1353 free (error_name);
d1b2b2dc 1354 error_name = xstrdup (name);
252b5132
RH
1355 }
1356
1357 if (section != NULL)
1358 {
1359 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1360 {
0b28295d 1361 if (error)
df5f2391 1362 einfo (_("%X%P: %C: undefined reference to `%pT'\n"),
0b28295d
ILT
1363 abfd, section, address, name);
1364 else
df5f2391 1365 einfo (_("%P: %C: warning: undefined reference to `%pT'\n"),
0b28295d 1366 abfd, section, address, name);
b6f29aaa 1367 }
252b5132 1368 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1369 {
1370 if (error)
df5f2391 1371 einfo (_("%X%P: %D: more undefined references to `%pT' follow\n"),
0b28295d
ILT
1372 abfd, section, address, name);
1373 else
df5f2391 1374 einfo (_("%P: %D: warning: more undefined references to `%pT' follow\n"),
0b28295d
ILT
1375 abfd, section, address, name);
1376 }
1377 else if (error)
1378 einfo ("%X");
252b5132
RH
1379 }
1380 else
1381 {
1382 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1383 {
0b28295d 1384 if (error)
df5f2391 1385 einfo (_("%X%P: %pB: undefined reference to `%pT'\n"),
0b28295d
ILT
1386 abfd, name);
1387 else
df5f2391 1388 einfo (_("%P: %pB: warning: undefined reference to `%pT'\n"),
0b28295d 1389 abfd, name);
b6f29aaa 1390 }
252b5132 1391 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1392 {
1393 if (error)
df5f2391 1394 einfo (_("%X%P: %pB: more undefined references to `%pT' follow\n"),
0b28295d
ILT
1395 abfd, name);
1396 else
df5f2391 1397 einfo (_("%P: %pB: warning: more undefined references to `%pT' follow\n"),
0b28295d
ILT
1398 abfd, name);
1399 }
1400 else if (error)
1401 einfo ("%X");
252b5132 1402 }
252b5132
RH
1403}
1404
8aae64e6
AO
1405/* Counter to limit the number of relocation overflow error messages
1406 to print. Errors are printed as it is decremented. When it's
1407 called and the counter is zero, a final message is printed
1408 indicating more relocations were omitted. When it gets to -1, no
1409 such errors are printed. If it's initially set to a value less
1410 than -1, all such errors will be printed (--verbose does this). */
1411
1412int overflow_cutoff_limit = 10;
1413
252b5132
RH
1414/* This is called when a reloc overflows. */
1415
1a72702b 1416static void
0e86e20e 1417reloc_overflow (struct bfd_link_info *info,
dfeffb9f 1418 struct bfd_link_hash_entry *entry,
1579bae1
AM
1419 const char *name,
1420 const char *reloc_name,
1421 bfd_vma addend,
1422 bfd *abfd,
1423 asection *section,
1424 bfd_vma address)
252b5132 1425{
8aae64e6 1426 if (overflow_cutoff_limit == -1)
1a72702b 1427 return;
8aae64e6 1428
a5990ada 1429 einfo ("%X%H:", abfd, section, address);
8aae64e6
AO
1430
1431 if (overflow_cutoff_limit >= 0
1432 && overflow_cutoff_limit-- == 0)
1433 {
1434 einfo (_(" additional relocation overflows omitted from the output\n"));
1a72702b 1435 return;
8aae64e6
AO
1436 }
1437
dfeffb9f
L
1438 if (entry)
1439 {
1440 while (entry->type == bfd_link_hash_indirect
1441 || entry->type == bfd_link_hash_warning)
1442 entry = entry->u.i.link;
1443 switch (entry->type)
1444 {
1445 case bfd_link_hash_undefined:
1446 case bfd_link_hash_undefweak:
0aa7f586 1447 einfo (_(" relocation truncated to fit: "
c1c8c1ef 1448 "%s against undefined symbol `%pT'"),
dfeffb9f
L
1449 reloc_name, entry->root.string);
1450 break;
1451 case bfd_link_hash_defined:
1452 case bfd_link_hash_defweak:
0aa7f586 1453 einfo (_(" relocation truncated to fit: "
c1c8c1ef 1454 "%s against symbol `%pT' defined in %pA section in %pB"),
dfeffb9f 1455 reloc_name, entry->root.string,
a6e1b90f
L
1456 entry->u.def.section,
1457 entry->u.def.section == bfd_abs_section_ptr
0e86e20e 1458 ? info->output_bfd : entry->u.def.section->owner);
dfeffb9f
L
1459 break;
1460 default:
1461 abort ();
1462 break;
1463 }
1464 }
1465 else
c1c8c1ef 1466 einfo (_(" relocation truncated to fit: %s against `%pT'"),
dfeffb9f 1467 reloc_name, name);
252b5132
RH
1468 if (addend != 0)
1469 einfo ("+%v", addend);
1470 einfo ("\n");
252b5132
RH
1471}
1472
1473/* This is called when a dangerous relocation is made. */
1474
1a72702b 1475static void
1579bae1
AM
1476reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1477 const char *message,
1478 bfd *abfd,
1479 asection *section,
1480 bfd_vma address)
252b5132 1481{
a5990ada 1482 einfo (_("%X%H: dangerous relocation: %s\n"),
e1fffbe6 1483 abfd, section, address, message);
252b5132
RH
1484}
1485
1486/* This is called when a reloc is being generated attached to a symbol
1487 that is not being output. */
1488
1a72702b 1489static void
1579bae1
AM
1490unattached_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1491 const char *name,
1492 bfd *abfd,
1493 asection *section,
1494 bfd_vma address)
252b5132 1495{
a5990ada 1496 einfo (_("%X%H: reloc refers to symbol `%pT' which is not being output\n"),
e1fffbe6 1497 abfd, section, address, name);
252b5132
RH
1498}
1499
1500/* This is called if link_info.notice_all is set, or when a symbol in
1501 link_info.notice_hash is found. Symbols are put in notice_hash
5d3236ee
DK
1502 using the -y option, while notice_all is set if the --cref option
1503 has been supplied, or if there are any NOCROSSREFS sections in the
1504 linker script; and if plugins are active, since they need to monitor
1505 all references from non-IR files. */
252b5132 1506
b34976b6 1507static bfd_boolean
1579bae1 1508notice (struct bfd_link_info *info,
35ed3f94 1509 struct bfd_link_hash_entry *h,
46135103 1510 struct bfd_link_hash_entry *inh ATTRIBUTE_UNUSED,
1579bae1
AM
1511 bfd *abfd,
1512 asection *section,
16d96b5b 1513 bfd_vma value,
46135103 1514 flagword flags ATTRIBUTE_UNUSED)
252b5132 1515{
35ed3f94
AM
1516 const char *name;
1517
1518 if (h == NULL)
5061a885
AM
1519 {
1520 if (command_line.cref || nocrossref_list != NULL)
1e9cc1c2 1521 return handle_asneeded_cref (abfd, (enum notice_asneeded_action) value);
5061a885
AM
1522 return TRUE;
1523 }
1524
35ed3f94 1525 name = h->root.string;
5d3236ee 1526 if (info->notice_hash != NULL
9e2278f5 1527 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL)
252b5132
RH
1528 {
1529 if (bfd_is_und_section (section))
df5f2391 1530 einfo (_("%P: %pB: reference to %s\n"), abfd, name);
252b5132 1531 else
df5f2391 1532 einfo (_("%P: %pB: definition of %s\n"), abfd, name);
252b5132
RH
1533 }
1534
1535 if (command_line.cref || nocrossref_list != NULL)
1536 add_cref (name, abfd, section, value);
1537
b34976b6 1538 return TRUE;
252b5132 1539}
This page took 1.031019 seconds and 4 git commands to generate.