Make undefined refs not make an executable
[deliverable/binutils-gdb.git] / ld / lderror.c
1 #include "bfd.h"
2 #include "sysdep.h"
3 #include "../bfd/seclet.h"
4 #include "ld.h"
5
6 #define MAX_ERRORS_IN_A_ROW 5
7
8 extern ld_config_type config;
9
10 extern bfd_error_vector_type bfd_error_vector;
11
12
13 /* BFD has failed to link something, give a better error message */
14
15 static void
16 DEFUN(ld_undefined_symbol,(relent, seclet),
17 CONST arelent *relent AND
18 bfd_seclet_type *seclet)
19 {
20 asymbol *s = *(relent->sym_ptr_ptr);
21 static asymbol *error_symbol;
22 static unsigned int error_count;
23 if (seclet != (bfd_seclet_type *)NULL)
24 {
25
26 asection *section = seclet->u.indirect.section;
27 bfd *abfd = section->owner;
28
29
30 /* We remember the symbol, and never print more than
31 a reasonable number of them in a row */
32 if (s == error_symbol) {
33 error_count++;
34 }
35 else {
36 error_count = 0;
37 error_symbol = s;
38 }
39 if (error_count < MAX_ERRORS_IN_A_ROW) {
40 einfo("%X%C: undefined reference to `%T'\n",
41 abfd,section, seclet->u.indirect.symbols,
42 relent->address, s);
43 config.make_executable = false;
44
45 }
46 else if (error_count == MAX_ERRORS_IN_A_ROW) {
47 einfo("%C: more undefined references to `%T' follow\n",
48 abfd, section,
49 seclet->u.indirect.symbols,
50 relent->address, s);
51 }
52 else {
53 /* Don't print any more */
54 }
55 }
56 else
57 {
58 einfo("%Xundefined reference to %s\n", (*(relent->sym_ptr_ptr))->name);
59 }
60 }
61 static void
62 DEFUN(ld_reloc_truncated,(relent, seclet),
63 CONST arelent *relent AND
64 bfd_seclet_type *seclet)
65 {
66 asymbol *s = *(relent->sym_ptr_ptr);
67 asection *section = seclet->u.indirect.section;
68 bfd *abfd = section->owner;
69
70 einfo("%X%C: relocation truncated to fit %R\n",
71 abfd, section, seclet->u.indirect.symbols, relent->address, relent);
72
73 }
74
75
76 void
77 DEFUN_VOID(init_bfd_error_vector)
78 {
79 bfd_error_vector.undefined_symbol = ld_undefined_symbol;
80 bfd_error_vector.reloc_value_truncated = ld_reloc_truncated;
81
82 }
This page took 0.03161 seconds and 5 git commands to generate.