3 #include "../bfd/seclet.h"
7 #define MAX_ERRORS_IN_A_ROW 5
9 extern ld_config_type config;
11 extern bfd_error_vector_type bfd_error_vector;
14 /* BFD has failed to link something, give a better error message */
17 DEFUN(ld_undefined_symbol,(relent, seclet),
18 CONST arelent *relent AND
19 CONST bfd_seclet_type *seclet)
21 asymbol *s = *(relent->sym_ptr_ptr);
22 static asymbol *error_symbol;
23 static unsigned int error_count;
24 if (seclet != (bfd_seclet_type *)NULL)
27 asection *section = seclet->u.indirect.section;
28 bfd *abfd = section->owner;
31 /* We remember the symbol, and never print more than
32 a reasonable number of them in a row */
33 if (s == error_symbol) {
40 if (error_count < MAX_ERRORS_IN_A_ROW) {
41 einfo("%X%C: undefined reference to `%T'\n",
42 abfd,section, seclet->u.indirect.symbols,
44 config.make_executable = false;
47 else if (error_count == MAX_ERRORS_IN_A_ROW) {
48 einfo("%C: more undefined references to `%T' follow\n",
50 seclet->u.indirect.symbols,
54 /* Don't print any more */
59 einfo("%Xundefined reference to %s\n", (*(relent->sym_ptr_ptr))->name);
63 DEFUN(ld_reloc_truncated,(relent, seclet),
64 CONST arelent *relent AND
65 bfd_seclet_type *seclet)
67 asymbol *s = *(relent->sym_ptr_ptr);
68 asection *section = seclet->u.indirect.section;
69 bfd *abfd = section->owner;
71 einfo("%X%C: relocation truncated to fit %R\n",
72 abfd, section, seclet->u.indirect.symbols, relent->address, relent);
78 DEFUN_VOID(init_bfd_error_vector)
80 bfd_error_vector.undefined_symbol = ld_undefined_symbol;
81 bfd_error_vector.reloc_value_truncated = ld_reloc_truncated;