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
;