ld:
[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,
3db64b00 3 2002, 2003, 2004, 2005, 2006, 2007
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
63char *default_target;
64const char *output_filename = "a.out";
65
66/* Name this program was invoked by. */
67char *program_name;
68
9c8ebd6a 69/* The prefix for system library directories. */
e2243057 70const char *ld_sysroot;
9c8ebd6a 71
3fe38064
NC
72/* The canonical representation of ld_sysroot. */
73char * ld_canon_sysroot;
74int ld_canon_sysroot_len;
75
6d5e62f8 76/* The file that we're creating. */
252b5132
RH
77bfd *output_bfd = 0;
78
79/* Set by -G argument, for MIPS ECOFF target. */
80int g_switch_value = 8;
81
82/* Nonzero means print names of input files as processed. */
b34976b6 83bfd_boolean trace_files;
252b5132
RH
84
85/* Nonzero means same, but note open failures, too. */
b34976b6 86bfd_boolean trace_file_tries;
252b5132
RH
87
88/* Nonzero means version number was printed, so exit successfully
89 instead of complaining if no input files are given. */
b34976b6 90bfd_boolean version_printed;
252b5132
RH
91
92/* Nonzero means link in every member of an archive. */
b34976b6 93bfd_boolean whole_archive;
252b5132 94
4a43e768
AM
95/* Nonzero means create DT_NEEDED entries only if a dynamic library
96 actually satisfies some reference in a regular object. */
97bfd_boolean as_needed;
98
e56f61be
L
99/* Nonzero means never create DT_NEEDED entries for dynamic libraries
100 in DT_NEEDED tags. */
101bfd_boolean add_needed = TRUE;
102
b34976b6
AM
103/* TRUE if we should demangle symbol names. */
104bfd_boolean demangling;
252b5132
RH
105
106args_type command_line;
107
108ld_config_type config;
109
bcaa7b3e
L
110sort_type sort_section;
111
e2243057
RS
112static const char *get_sysroot
113 (int, char **);
0125cdf2 114static char *get_emulation
1579bae1 115 (int, char **);
0125cdf2 116static void set_scripts_dir
1579bae1 117 (void);
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 {
c92c35e7
AC
176 if (output_bfd)
177 bfd_cache_close (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;
b34976b6 255 command_line.check_section_addresses = TRUE;
bcaa7b3e 256
252b5132
RH
257 /* We initialize DEMANGLING based on the environment variable
258 COLLECT_NO_DEMANGLE. The gcc collect2 program will demangle the
259 output of the linker, unless COLLECT_NO_DEMANGLE is set in the
260 environment. Acting the same way here lets us provide the same
261 interface by default. */
262 demangling = getenv ("COLLECT_NO_DEMANGLE") == NULL;
263
b34976b6 264 link_info.allow_undefined_version = TRUE;
b5067602 265 link_info.keep_memory = TRUE;
b5067602 266 link_info.combreloc = TRUE;
d5cd3933 267 link_info.strip_discarded = TRUE;
fdc90cb4 268 link_info.emit_hash = TRUE;
a9a4c53e
AM
269 link_info.callbacks = &link_callbacks;
270 link_info.input_bfds_tail = &link_info.input_bfds;
3dbf70a2
MM
271 /* SVR4 linkers seem to set DT_INIT and DT_FINI based on magic _init
272 and _fini symbols. We are compatible. */
273 link_info.init_function = "_init";
274 link_info.fini_function = "_fini";
a9a4c53e 275 link_info.relax_pass = 1;
e0076ab3 276 link_info.pei386_auto_import = -1;
db6751f2 277 link_info.spare_dynamic_tags = 5;
24718e3b 278
252b5132 279 ldfile_add_arch ("");
252b5132
RH
280 emulation = get_emulation (argc, argv);
281 ldemul_choose_mode (emulation);
742aeb63 282 default_target = ldemul_choose_target (argc, argv);
252b5132
RH
283 lang_init ();
284 ldemul_before_parse ();
b34976b6 285 lang_has_input_file = FALSE;
252b5132
RH
286 parse_args (argc, argv);
287
2d643429
NC
288 if (config.hash_table_size != 0)
289 bfd_hash_set_default_size (config.hash_table_size);
290
252b5132
RH
291 ldemul_set_symbols ();
292
1049f94e 293 if (link_info.relocatable)
252b5132 294 {
ac69cbc6 295 if (command_line.relax)
252b5132
RH
296 einfo (_("%P%F: --relax and -r may not be used together\n"));
297 if (link_info.shared)
298 einfo (_("%P%F: -r and -shared may not be used together\n"));
299 }
300
d8cf8b51
L
301 /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data,
302 --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and
303 --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are
304 for shared libraries. -Bsymbolic overrides all others and vice
305 versa. */
306 switch (command_line.symbolic)
307 {
308 case symbolic_unset:
309 break;
310 case symbolic:
311 /* -Bsymbolic is for shared library only. */
312 if (link_info.shared)
313 {
314 link_info.symbolic = TRUE;
315 /* Should we free the unused memory? */
316 link_info.dynamic_list = NULL;
317 command_line.dynamic_list = dynamic_list_unset;
318 }
319 break;
320 case symbolic_functions:
321 /* -Bsymbolic-functions is for shared library only. */
322 if (link_info.shared)
323 command_line.dynamic_list = dynamic_list_data;
324 break;
325 }
326
327 switch (command_line.dynamic_list)
328 {
329 case dynamic_list_unset:
330 break;
331 case dynamic_list_data:
332 link_info.dynamic_data = TRUE;
333 case dynamic_list:
334 link_info.dynamic = TRUE;
335 break;
336 }
337
7333607e
JJ
338 if (! link_info.shared)
339 {
340 if (command_line.filter_shlib)
e97cb84f 341 einfo (_("%P%F: -F may not be used without -shared\n"));
7333607e 342 if (command_line.auxiliary_filters)
e97cb84f 343 einfo (_("%P%F: -f may not be used without -shared\n"));
7333607e
JJ
344 }
345
36af4a4e
JJ
346 if (! link_info.shared || link_info.pie)
347 link_info.executable = TRUE;
348
252b5132
RH
349 /* Treat ld -r -s as ld -r -S -x (i.e., strip all local symbols). I
350 don't see how else this can be handled, since in this case we
351 must preserve all externally visible symbols. */
1049f94e 352 if (link_info.relocatable && link_info.strip == strip_all)
252b5132
RH
353 {
354 link_info.strip = strip_debugger;
f5fa8ca2 355 if (link_info.discard == discard_sec_merge)
252b5132
RH
356 link_info.discard = discard_all;
357 }
358
359 /* This essentially adds another -L directory so this must be done after
360 the -L's in argv have been processed. */
361 set_scripts_dir ();
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)
381 ldfile_open_command_file (s);
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;
74699268 404 char *buf = 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)
252b5132
RH
462 output_bfd->flags &= ~EXEC_P;
463 else
464 output_bfd->flags |= EXEC_P;
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 {
491 if (! bfd_close (output_bfd))
492 einfo (_("%F%B: final close failed: %E\n"), output_bfd);
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;
508 char *buf = xmalloc (bsize);
509 int l;
510 char *dst_name = 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
1579bae1 545 char *lim = 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
672/* If directory DIR contains an "ldscripts" subdirectory,
b34976b6
AM
673 add DIR to the library search path and return TRUE,
674 else return FALSE. */
252b5132 675
b34976b6 676static bfd_boolean
1579bae1 677check_for_scripts_dir (char *dir)
252b5132
RH
678{
679 size_t dirlen;
680 char *buf;
681 struct stat s;
b34976b6 682 bfd_boolean res;
252b5132
RH
683
684 dirlen = strlen (dir);
685 /* sizeof counts the terminating NUL. */
1579bae1 686 buf = xmalloc (dirlen + sizeof ("/ldscripts"));
252b5132
RH
687 sprintf (buf, "%s/ldscripts", dir);
688
689 res = stat (buf, &s) == 0 && S_ISDIR (s.st_mode);
690 free (buf);
691 if (res)
b34976b6 692 ldfile_add_library_path (dir, FALSE);
252b5132
RH
693 return res;
694}
695
696/* Set the default directory for finding script files.
697 Libraries will be searched for here too, but that's ok.
698 We look for the "ldscripts" directory in:
699
cdc0d45e
DJ
700 SCRIPTDIR (passed from Makefile)
701 (adjusted according to the current location of the binary)
252b5132
RH
702 SCRIPTDIR (passed from Makefile)
703 the dir where this program is (for using it from the build tree)
cdc0d45e 704 the dir where this program is/../lib
0125cdf2 705 (for installing the tool suite elsewhere). */
252b5132
RH
706
707static void
1579bae1 708set_scripts_dir (void)
252b5132
RH
709{
710 char *end, *dir;
711 size_t dirlen;
5ed6aba4 712 bfd_boolean found;
252b5132 713
cdc0d45e 714 dir = make_relative_prefix (program_name, BINDIR, SCRIPTDIR);
cdc0d45e 715 if (dir)
5ed6aba4
NC
716 {
717 found = check_for_scripts_dir (dir);
718 free (dir);
719 if (found)
720 return;
721 }
cdc0d45e 722
4ca1b790 723 dir = make_relative_prefix (program_name, TOOLBINDIR, SCRIPTDIR);
4ca1b790 724 if (dir)
5ed6aba4
NC
725 {
726 found = check_for_scripts_dir (dir);
727 free (dir);
728 if (found)
729 return;
730 }
4ca1b790 731
252b5132 732 if (check_for_scripts_dir (SCRIPTDIR))
6d5e62f8
KH
733 /* We've been installed normally. */
734 return;
252b5132
RH
735
736 /* Look for "ldscripts" in the dir where our binary is. */
737 end = strrchr (program_name, '/');
5af11cab
AM
738#ifdef HAVE_DOS_BASED_FILE_SYSTEM
739 {
740 /* We could have \foo\bar, or /foo\bar. */
741 char *bslash = strrchr (program_name, '\\');
0125cdf2 742
2ab47eed 743 if (end == NULL || (bslash != NULL && bslash > end))
5af11cab
AM
744 end = bslash;
745 }
746#endif
252b5132
RH
747
748 if (end == NULL)
0125cdf2
NC
749 /* Don't look for ldscripts in the current directory. There is
750 too much potential for confusion. */
751 return;
252b5132
RH
752
753 dirlen = end - program_name;
754 /* Make a copy of program_name in dir.
755 Leave room for later "/../lib". */
1579bae1 756 dir = xmalloc (dirlen + 8);
252b5132
RH
757 strncpy (dir, program_name, dirlen);
758 dir[dirlen] = '\0';
759
760 if (check_for_scripts_dir (dir))
5ed6aba4
NC
761 {
762 free (dir);
763 return;
764 }
252b5132
RH
765
766 /* Look for "ldscripts" in <the dir where our binary is>/../lib. */
767 strcpy (dir + dirlen, "/../lib");
5ed6aba4 768 check_for_scripts_dir (dir);
6d5e62f8 769 free (dir);
252b5132
RH
770}
771
772void
1579bae1 773add_ysym (const char *name)
252b5132 774{
1579bae1 775 if (link_info.notice_hash == NULL)
252b5132 776 {
1579bae1 777 link_info.notice_hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
778 if (!bfd_hash_table_init_n (link_info.notice_hash,
779 bfd_hash_newfunc,
780 sizeof (struct bfd_hash_entry),
781 61))
252b5132 782 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
6d5e62f8 783 }
252b5132 784
1579bae1 785 if (bfd_hash_lookup (link_info.notice_hash, name, TRUE, TRUE) == NULL)
252b5132
RH
786 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
787}
788
789/* Record a symbol to be wrapped, from the --wrap option. */
790
791void
1579bae1 792add_wrap (const char *name)
252b5132
RH
793{
794 if (link_info.wrap_hash == NULL)
795 {
1579bae1 796 link_info.wrap_hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
797 if (!bfd_hash_table_init_n (link_info.wrap_hash,
798 bfd_hash_newfunc,
799 sizeof (struct bfd_hash_entry),
800 61))
252b5132
RH
801 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
802 }
0125cdf2 803
b34976b6 804 if (bfd_hash_lookup (link_info.wrap_hash, name, TRUE, TRUE) == NULL)
252b5132
RH
805 einfo (_("%P%F: bfd_hash_lookup failed: %E\n"));
806}
807
808/* Handle the -retain-symbols-file option. */
809
810void
1579bae1 811add_keepsyms_file (const char *filename)
252b5132
RH
812{
813 FILE *file;
814 char *buf;
815 size_t bufsize;
816 int c;
817
818 if (link_info.strip == strip_some)
819 einfo (_("%X%P: error: duplicate retain-symbols-file\n"));
820
821 file = fopen (filename, "r");
1579bae1 822 if (file == NULL)
252b5132
RH
823 {
824 bfd_set_error (bfd_error_system_call);
825 einfo ("%X%P: %s: %E\n", filename);
826 return;
827 }
828
1579bae1 829 link_info.keep_hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
830 if (!bfd_hash_table_init (link_info.keep_hash, bfd_hash_newfunc,
831 sizeof (struct bfd_hash_entry)))
252b5132
RH
832 einfo (_("%P%F: bfd_hash_table_init failed: %E\n"));
833
834 bufsize = 100;
1579bae1 835 buf = xmalloc (bufsize);
252b5132
RH
836
837 c = getc (file);
838 while (c != EOF)
839 {
3882b010 840 while (ISSPACE (c))
252b5132
RH
841 c = getc (file);
842
843 if (c != EOF)
844 {
845 size_t len = 0;
846
3882b010 847 while (! ISSPACE (c) && c != EOF)
252b5132
RH
848 {
849 buf[len] = c;
850 ++len;
851 if (len >= bufsize)
852 {
853 bufsize *= 2;
854 buf = xrealloc (buf, bufsize);
855 }
856 c = getc (file);
857 }
858
859 buf[len] = '\0';
860
1579bae1 861 if (bfd_hash_lookup (link_info.keep_hash, buf, TRUE, TRUE) == NULL)
252b5132
RH
862 einfo (_("%P%F: bfd_hash_lookup for insertion failed: %E\n"));
863 }
864 }
865
866 if (link_info.strip != strip_none)
867 einfo (_("%P: `-retain-symbols-file' overrides `-s' and `-S'\n"));
868
5ed6aba4 869 free (buf);
252b5132
RH
870 link_info.strip = strip_some;
871}
872\f
873/* Callbacks from the BFD linker routines. */
874
875/* This is called when BFD has decided to include an archive member in
876 a link. */
877
b34976b6 878static bfd_boolean
e1fffbe6 879add_archive_element (struct bfd_link_info *info,
1579bae1
AM
880 bfd *abfd,
881 const char *name)
252b5132
RH
882{
883 lang_input_statement_type *input;
884
1579bae1 885 input = xmalloc (sizeof (lang_input_statement_type));
252b5132
RH
886 input->filename = abfd->filename;
887 input->local_sym_name = abfd->filename;
888 input->the_bfd = abfd;
889 input->asymbols = NULL;
890 input->next = NULL;
b34976b6
AM
891 input->just_syms_flag = FALSE;
892 input->loaded = FALSE;
893 input->search_dirs_flag = FALSE;
252b5132
RH
894
895 /* FIXME: The following fields are not set: header.next,
896 header.type, closed, passive_position, symbol_count,
897 next_real_file, is_archive, target, real. This bit of code is
898 from the old decode_library_subfile function. I don't know
899 whether any of those fields matters. */
900
901 ldlang_add_file (input);
902
1579bae1 903 if (config.map_file != NULL)
252b5132 904 {
b34976b6 905 static bfd_boolean header_printed;
252b5132
RH
906 struct bfd_link_hash_entry *h;
907 bfd *from;
908 int len;
909
e1fffbe6 910 h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
252b5132
RH
911
912 if (h == NULL)
913 from = NULL;
914 else
915 {
916 switch (h->type)
917 {
918 default:
919 from = NULL;
920 break;
921
922 case bfd_link_hash_defined:
923 case bfd_link_hash_defweak:
924 from = h->u.def.section->owner;
925 break;
926
927 case bfd_link_hash_undefined:
928 case bfd_link_hash_undefweak:
929 from = h->u.undef.abfd;
930 break;
931
932 case bfd_link_hash_common:
933 from = h->u.c.p->section->owner;
934 break;
935 }
936 }
937
938 if (! header_printed)
939 {
940 char buf[100];
941
e3c8793a 942 sprintf (buf, _("Archive member included because of file (symbol)\n\n"));
252b5132 943 minfo ("%s", buf);
b34976b6 944 header_printed = TRUE;
252b5132
RH
945 }
946
947 if (bfd_my_archive (abfd) == NULL)
948 {
949 minfo ("%s", bfd_get_filename (abfd));
950 len = strlen (bfd_get_filename (abfd));
951 }
952 else
953 {
954 minfo ("%s(%s)", bfd_get_filename (bfd_my_archive (abfd)),
955 bfd_get_filename (abfd));
956 len = (strlen (bfd_get_filename (bfd_my_archive (abfd)))
957 + strlen (bfd_get_filename (abfd))
958 + 2);
959 }
960
961 if (len >= 29)
962 {
963 print_nl ();
964 len = 0;
965 }
966 while (len < 30)
967 {
968 print_space ();
969 ++len;
970 }
971
972 if (from != NULL)
973 minfo ("%B ", from);
974 if (h != NULL)
975 minfo ("(%T)\n", h->root.string);
976 else
977 minfo ("(%s)\n", name);
978 }
979
980 if (trace_files || trace_file_tries)
981 info_msg ("%I\n", input);
982
b34976b6 983 return TRUE;
252b5132
RH
984}
985
986/* This is called when BFD has discovered a symbol which is defined
987 multiple times. */
988
b34976b6 989static bfd_boolean
1579bae1
AM
990multiple_definition (struct bfd_link_info *info ATTRIBUTE_UNUSED,
991 const char *name,
992 bfd *obfd,
993 asection *osec,
994 bfd_vma oval,
995 bfd *nbfd,
996 asection *nsec,
997 bfd_vma nval)
252b5132
RH
998{
999 /* If either section has the output_section field set to
1000 bfd_abs_section_ptr, it means that the section is being
1001 discarded, and this is not really a multiple definition at all.
1002 FIXME: It would be cleaner to somehow ignore symbols defined in
1003 sections which are being discarded. */
1004 if ((osec->output_section != NULL
1005 && ! bfd_is_abs_section (osec)
1006 && bfd_is_abs_section (osec->output_section))
1007 || (nsec->output_section != NULL
1008 && ! bfd_is_abs_section (nsec)
1009 && bfd_is_abs_section (nsec->output_section)))
b34976b6 1010 return TRUE;
252b5132
RH
1011
1012 einfo (_("%X%C: multiple definition of `%T'\n"),
1013 nbfd, nsec, nval, name);
1579bae1 1014 if (obfd != NULL)
252b5132 1015 einfo (_("%D: first defined here\n"), obfd, osec, oval);
9b14b192
NC
1016
1017 if (command_line.relax)
1018 {
1019 einfo (_("%P: Disabling relaxation: it will not work with multiple definitions\n"));
1020 command_line.relax = 0;
1021 }
6d5e62f8 1022
b34976b6 1023 return TRUE;
252b5132
RH
1024}
1025
1026/* This is called when there is a definition of a common symbol, or
1027 when a common symbol is found for a symbol that is already defined,
1028 or when two common symbols are found. We only do something if
1029 -warn-common was used. */
1030
b34976b6 1031static bfd_boolean
1579bae1
AM
1032multiple_common (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1033 const char *name,
1034 bfd *obfd,
1035 enum bfd_link_hash_type otype,
1036 bfd_vma osize,
1037 bfd *nbfd,
1038 enum bfd_link_hash_type ntype,
1039 bfd_vma nsize)
252b5132
RH
1040{
1041 if (! config.warn_common)
b34976b6 1042 return TRUE;
252b5132
RH
1043
1044 if (ntype == bfd_link_hash_defined
1045 || ntype == bfd_link_hash_defweak
1046 || ntype == bfd_link_hash_indirect)
1047 {
1048 ASSERT (otype == bfd_link_hash_common);
1049 einfo (_("%B: warning: definition of `%T' overriding common\n"),
1050 nbfd, name);
1051 if (obfd != NULL)
1052 einfo (_("%B: warning: common is here\n"), obfd);
1053 }
1054 else if (otype == bfd_link_hash_defined
1055 || otype == bfd_link_hash_defweak
1056 || otype == bfd_link_hash_indirect)
1057 {
1058 ASSERT (ntype == bfd_link_hash_common);
1059 einfo (_("%B: warning: common of `%T' overridden by definition\n"),
1060 nbfd, name);
1061 if (obfd != NULL)
1062 einfo (_("%B: warning: defined here\n"), obfd);
1063 }
1064 else
1065 {
1066 ASSERT (otype == bfd_link_hash_common && ntype == bfd_link_hash_common);
1067 if (osize > nsize)
1068 {
1069 einfo (_("%B: warning: common of `%T' overridden by larger common\n"),
1070 nbfd, name);
1071 if (obfd != NULL)
1072 einfo (_("%B: warning: larger common is here\n"), obfd);
1073 }
1074 else if (nsize > osize)
1075 {
1076 einfo (_("%B: warning: common of `%T' overriding smaller common\n"),
1077 nbfd, name);
1078 if (obfd != NULL)
1079 einfo (_("%B: warning: smaller common is here\n"), obfd);
1080 }
1081 else
1082 {
1083 einfo (_("%B: warning: multiple common of `%T'\n"), nbfd, name);
1084 if (obfd != NULL)
1085 einfo (_("%B: warning: previous common is here\n"), obfd);
1086 }
1087 }
1088
b34976b6 1089 return TRUE;
252b5132
RH
1090}
1091
1092/* This is called when BFD has discovered a set element. H is the
1093 entry in the linker hash table for the set. SECTION and VALUE
1094 represent a value which should be added to the set. */
1095
b34976b6 1096static bfd_boolean
1579bae1
AM
1097add_to_set (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1098 struct bfd_link_hash_entry *h,
1099 bfd_reloc_code_real_type reloc,
1100 bfd *abfd,
1101 asection *section,
1102 bfd_vma value)
252b5132
RH
1103{
1104 if (config.warn_constructors)
1105 einfo (_("%P: warning: global constructor %s used\n"),
1106 h->root.string);
1107
1108 if (! config.build_constructors)
b34976b6 1109 return TRUE;
252b5132 1110
1579bae1 1111 ldctor_add_set_entry (h, reloc, NULL, section, value);
252b5132
RH
1112
1113 if (h->type == bfd_link_hash_new)
1114 {
1115 h->type = bfd_link_hash_undefined;
1116 h->u.undef.abfd = abfd;
1117 /* We don't call bfd_link_add_undef to add this to the list of
1118 undefined symbols because we are going to define it
1119 ourselves. */
1120 }
1121
b34976b6 1122 return TRUE;
252b5132
RH
1123}
1124
1125/* This is called when BFD has discovered a constructor. This is only
1126 called for some object file formats--those which do not handle
1127 constructors in some more clever fashion. This is similar to
1128 adding an element to a set, but less general. */
1129
b34976b6 1130static bfd_boolean
1579bae1
AM
1131constructor_callback (struct bfd_link_info *info,
1132 bfd_boolean constructor,
1133 const char *name,
1134 bfd *abfd,
1135 asection *section,
1136 bfd_vma value)
252b5132
RH
1137{
1138 char *s;
1139 struct bfd_link_hash_entry *h;
1140 char set_name[1 + sizeof "__CTOR_LIST__"];
1141
1142 if (config.warn_constructors)
1143 einfo (_("%P: warning: global constructor %s used\n"), name);
1144
1145 if (! config.build_constructors)
b34976b6 1146 return TRUE;
252b5132
RH
1147
1148 /* Ensure that BFD_RELOC_CTOR exists now, so that we can give a
1149 useful error message. */
1150 if (bfd_reloc_type_lookup (output_bfd, BFD_RELOC_CTOR) == NULL
e1fffbe6 1151 && (info->relocatable
252b5132
RH
1152 || bfd_reloc_type_lookup (abfd, BFD_RELOC_CTOR) == NULL))
1153 einfo (_("%P%F: BFD backend error: BFD_RELOC_CTOR unsupported\n"));
1154
1155 s = set_name;
1156 if (bfd_get_symbol_leading_char (abfd) != '\0')
1157 *s++ = bfd_get_symbol_leading_char (abfd);
1158 if (constructor)
1159 strcpy (s, "__CTOR_LIST__");
1160 else
1161 strcpy (s, "__DTOR_LIST__");
1162
b34976b6 1163 h = bfd_link_hash_lookup (info->hash, set_name, TRUE, TRUE, TRUE);
252b5132
RH
1164 if (h == (struct bfd_link_hash_entry *) NULL)
1165 einfo (_("%P%F: bfd_link_hash_lookup failed: %E\n"));
1166 if (h->type == bfd_link_hash_new)
1167 {
1168 h->type = bfd_link_hash_undefined;
1169 h->u.undef.abfd = abfd;
1170 /* We don't call bfd_link_add_undef to add this to the list of
1171 undefined symbols because we are going to define it
1172 ourselves. */
1173 }
1174
1175 ldctor_add_set_entry (h, BFD_RELOC_CTOR, name, section, value);
b34976b6 1176 return TRUE;
252b5132
RH
1177}
1178
1179/* A structure used by warning_callback to pass information through
1180 bfd_map_over_sections. */
1181
0125cdf2
NC
1182struct warning_callback_info
1183{
b34976b6 1184 bfd_boolean found;
252b5132
RH
1185 const char *warning;
1186 const char *symbol;
1187 asymbol **asymbols;
1188};
1189
1190/* This is called when there is a reference to a warning symbol. */
1191
b34976b6 1192static bfd_boolean
1579bae1
AM
1193warning_callback (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1194 const char *warning,
1195 const char *symbol,
1196 bfd *abfd,
1197 asection *section,
1198 bfd_vma address)
252b5132
RH
1199{
1200 /* This is a hack to support warn_multiple_gp. FIXME: This should
1201 have a cleaner interface, but what? */
1202 if (! config.warn_multiple_gp
1203 && strcmp (warning, "using multiple gp values") == 0)
b34976b6 1204 return TRUE;
252b5132
RH
1205
1206 if (section != NULL)
300475fe 1207 einfo ("%C: %s%s\n", abfd, section, address, _("warning: "), warning);
252b5132 1208 else if (abfd == NULL)
300475fe 1209 einfo ("%P: %s%s\n", _("warning: "), warning);
252b5132 1210 else if (symbol == NULL)
300475fe 1211 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
252b5132
RH
1212 else
1213 {
1214 lang_input_statement_type *entry;
1215 asymbol **asymbols;
1216 struct warning_callback_info info;
1217
1218 /* Look through the relocs to see if we can find a plausible
1219 address. */
252b5132
RH
1220 entry = (lang_input_statement_type *) abfd->usrdata;
1221 if (entry != NULL && entry->asymbols != NULL)
1222 asymbols = entry->asymbols;
1223 else
1224 {
1225 long symsize;
1226 long symbol_count;
1227
1228 symsize = bfd_get_symtab_upper_bound (abfd);
1229 if (symsize < 0)
1230 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1579bae1 1231 asymbols = xmalloc (symsize);
252b5132
RH
1232 symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
1233 if (symbol_count < 0)
1234 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
1235 if (entry != NULL)
1236 {
1237 entry->asymbols = asymbols;
1238 entry->symbol_count = symbol_count;
1239 }
1240 }
1241
b34976b6 1242 info.found = FALSE;
252b5132
RH
1243 info.warning = warning;
1244 info.symbol = symbol;
1245 info.asymbols = asymbols;
1579bae1 1246 bfd_map_over_sections (abfd, warning_find_reloc, &info);
252b5132
RH
1247
1248 if (! info.found)
300475fe 1249 einfo ("%B: %s%s\n", abfd, _("warning: "), warning);
252b5132
RH
1250
1251 if (entry == NULL)
1252 free (asymbols);
1253 }
1254
b34976b6 1255 return TRUE;
252b5132
RH
1256}
1257
1258/* This is called by warning_callback for each section. It checks the
1259 relocs of the section to see if it can find a reference to the
1260 symbol which triggered the warning. If it can, it uses the reloc
1261 to give an error message with a file and line number. */
1262
1263static void
1579bae1 1264warning_find_reloc (bfd *abfd, asection *sec, void *iarg)
252b5132 1265{
1579bae1 1266 struct warning_callback_info *info = iarg;
252b5132
RH
1267 long relsize;
1268 arelent **relpp;
1269 long relcount;
1270 arelent **p, **pend;
1271
1272 if (info->found)
1273 return;
1274
1275 relsize = bfd_get_reloc_upper_bound (abfd, sec);
1276 if (relsize < 0)
1277 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1278 if (relsize == 0)
1279 return;
1280
1579bae1 1281 relpp = xmalloc (relsize);
252b5132
RH
1282 relcount = bfd_canonicalize_reloc (abfd, sec, relpp, info->asymbols);
1283 if (relcount < 0)
1284 einfo (_("%B%F: could not read relocs: %E\n"), abfd);
1285
1286 p = relpp;
1287 pend = p + relcount;
1288 for (; p < pend && *p != NULL; p++)
1289 {
1290 arelent *q = *p;
1291
1292 if (q->sym_ptr_ptr != NULL
1293 && *q->sym_ptr_ptr != NULL
1294 && strcmp (bfd_asymbol_name (*q->sym_ptr_ptr), info->symbol) == 0)
1295 {
1296 /* We found a reloc for the symbol we are looking for. */
300475fe
HPN
1297 einfo ("%C: %s%s\n", abfd, sec, q->address, _("warning: "),
1298 info->warning);
b34976b6 1299 info->found = TRUE;
252b5132
RH
1300 break;
1301 }
1302 }
1303
1304 free (relpp);
1305}
1306
1307/* This is called when an undefined symbol is found. */
1308
b34976b6 1309static bfd_boolean
1579bae1
AM
1310undefined_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1311 const char *name,
1312 bfd *abfd,
1313 asection *section,
1314 bfd_vma address,
0b28295d 1315 bfd_boolean error)
252b5132
RH
1316{
1317 static char *error_name;
1318 static unsigned int error_count;
1319
1320#define MAX_ERRORS_IN_A_ROW 5
1321
1322 if (config.warn_once)
1323 {
1324 static struct bfd_hash_table *hash;
1325
1326 /* Only warn once about a particular undefined symbol. */
252b5132
RH
1327 if (hash == NULL)
1328 {
1579bae1 1329 hash = xmalloc (sizeof (struct bfd_hash_table));
66eb6687
AM
1330 if (!bfd_hash_table_init (hash, bfd_hash_newfunc,
1331 sizeof (struct bfd_hash_entry)))
252b5132
RH
1332 einfo (_("%F%P: bfd_hash_table_init failed: %E\n"));
1333 }
1334
b34976b6
AM
1335 if (bfd_hash_lookup (hash, name, FALSE, FALSE) != NULL)
1336 return TRUE;
252b5132 1337
b34976b6 1338 if (bfd_hash_lookup (hash, name, TRUE, TRUE) == NULL)
252b5132
RH
1339 einfo (_("%F%P: bfd_hash_lookup failed: %E\n"));
1340 }
1341
1342 /* We never print more than a reasonable number of errors in a row
1343 for a single symbol. */
1579bae1 1344 if (error_name != NULL
252b5132
RH
1345 && strcmp (name, error_name) == 0)
1346 ++error_count;
1347 else
1348 {
1349 error_count = 0;
1579bae1 1350 if (error_name != NULL)
252b5132 1351 free (error_name);
d1b2b2dc 1352 error_name = xstrdup (name);
252b5132
RH
1353 }
1354
1355 if (section != NULL)
1356 {
1357 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1358 {
0b28295d
ILT
1359 if (error)
1360 einfo (_("%X%C: undefined reference to `%T'\n"),
1361 abfd, section, address, name);
1362 else
1363 einfo (_("%C: warning: undefined reference to `%T'\n"),
1364 abfd, section, address, name);
b6f29aaa 1365 }
252b5132 1366 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1367 {
1368 if (error)
1369 einfo (_("%X%D: more undefined references to `%T' follow\n"),
1370 abfd, section, address, name);
1371 else
1372 einfo (_("%D: warning: more undefined references to `%T' follow\n"),
1373 abfd, section, address, name);
1374 }
1375 else if (error)
1376 einfo ("%X");
252b5132
RH
1377 }
1378 else
1379 {
1380 if (error_count < MAX_ERRORS_IN_A_ROW)
b6f29aaa 1381 {
0b28295d
ILT
1382 if (error)
1383 einfo (_("%X%B: undefined reference to `%T'\n"),
1384 abfd, name);
1385 else
1386 einfo (_("%B: warning: undefined reference to `%T'\n"),
1387 abfd, name);
b6f29aaa 1388 }
252b5132 1389 else if (error_count == MAX_ERRORS_IN_A_ROW)
0b28295d
ILT
1390 {
1391 if (error)
1392 einfo (_("%X%B: more undefined references to `%T' follow\n"),
1393 abfd, name);
1394 else
1395 einfo (_("%B: warning: more undefined references to `%T' follow\n"),
1396 abfd, name);
1397 }
1398 else if (error)
1399 einfo ("%X");
252b5132
RH
1400 }
1401
b34976b6 1402 return TRUE;
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
b34976b6 1416static bfd_boolean
1579bae1 1417reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED,
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
AO
1426 if (overflow_cutoff_limit == -1)
1427 return TRUE;
1428
e1fffbe6 1429 einfo ("%X%C:", 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"));
1435 return TRUE;
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:
1447 einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"),
1448 reloc_name, entry->root.string);
1449 break;
1450 case bfd_link_hash_defined:
1451 case bfd_link_hash_defweak:
1452 einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"),
1453 reloc_name, entry->root.string,
a6e1b90f
L
1454 entry->u.def.section,
1455 entry->u.def.section == bfd_abs_section_ptr
1456 ? output_bfd : entry->u.def.section->owner);
dfeffb9f
L
1457 break;
1458 default:
1459 abort ();
1460 break;
1461 }
1462 }
1463 else
1464 einfo (_(" relocation truncated to fit: %s against `%T'"),
1465 reloc_name, name);
252b5132
RH
1466 if (addend != 0)
1467 einfo ("+%v", addend);
1468 einfo ("\n");
b34976b6 1469 return TRUE;
252b5132
RH
1470}
1471
1472/* This is called when a dangerous relocation is made. */
1473
b34976b6 1474static bfd_boolean
1579bae1
AM
1475reloc_dangerous (struct bfd_link_info *info ATTRIBUTE_UNUSED,
1476 const char *message,
1477 bfd *abfd,
1478 asection *section,
1479 bfd_vma address)
252b5132 1480{
e1fffbe6
AM
1481 einfo (_("%X%C: dangerous relocation: %s\n"),
1482 abfd, section, address, message);
b34976b6 1483 return TRUE;
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
b34976b6 1489static bfd_boolean
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{
e1fffbe6
AM
1496 einfo (_("%X%C: reloc refers to symbol `%T' which is not being output\n"),
1497 abfd, section, address, name);
b34976b6 1498 return TRUE;
252b5132
RH
1499}
1500
1501/* This is called if link_info.notice_all is set, or when a symbol in
1502 link_info.notice_hash is found. Symbols are put in notice_hash
1503 using the -y option. */
1504
b34976b6 1505static bfd_boolean
1579bae1
AM
1506notice (struct bfd_link_info *info,
1507 const char *name,
1508 bfd *abfd,
1509 asection *section,
1510 bfd_vma value)
252b5132 1511{
5061a885
AM
1512 if (name == NULL)
1513 {
1514 if (command_line.cref || nocrossref_list != NULL)
1515 return handle_asneeded_cref (abfd, value);
1516 return TRUE;
1517 }
1518
252b5132
RH
1519 if (! info->notice_all
1520 || (info->notice_hash != NULL
b34976b6 1521 && bfd_hash_lookup (info->notice_hash, name, FALSE, FALSE) != NULL))
252b5132
RH
1522 {
1523 if (bfd_is_und_section (section))
1524 einfo ("%B: reference to %s\n", abfd, name);
1525 else
1526 einfo ("%B: definition of %s\n", abfd, name);
1527 }
1528
1529 if (command_line.cref || nocrossref_list != NULL)
1530 add_cref (name, abfd, section, value);
1531
b34976b6 1532 return TRUE;
252b5132 1533}
This page took 0.423378 seconds and 4 git commands to generate.