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