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