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