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