2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
4 Free Software Foundation, Inc.
5 Written by Steve Chamberlain of Cygnus Support.
7 This file is part of the GNU Binutils.
9 This program 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 3 of the License, or
12 (at your option) any later version.
14 This program 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.
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
27 #include "libiberty.h"
28 #include "filenames.h"
43 %A section name from a section
44 %B filename from a bfd
45 %C clever filename:linenumber with function
46 %D like %C, but no function name
47 %E current bfd error or errno
49 %G like %D, but only function name
50 %I filename from a lang_input_statement_type
52 %R info about a relent
53 %S print script file and linenumber
56 %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
57 %X no object output, fail return
58 %d integer, like printf
60 %lu unsigned long, like printf
61 %p native (host) void* pointer, like printf
62 %s arbitrary string, like printf
63 %u integer, like printf
64 %v hex bfd_vma, no leading zeros
68 vfinfo (FILE *fp
, const char *fmt
, va_list arg
, bfd_boolean is_warning
)
70 bfd_boolean fatal
= FALSE
;
74 while (*fmt
!= '%' && *fmt
!= '\0')
91 /* no object output, fail return */
92 config
.make_executable
= FALSE
;
98 bfd_vma value
= va_arg (arg
, bfd_vma
);
99 fprintf_vma (fp
, value
);
104 /* hex bfd_vma, no leading zeros */
108 bfd_vma value
= va_arg (arg
, bfd_vma
);
109 sprintf_vma (p
, value
);
119 /* hex bfd_vma with 0x with no leading zeroes taking up
127 value
= va_arg (arg
, bfd_vma
);
128 sprintf_vma (buf
, value
);
129 for (p
= buf
; *p
== '0'; ++p
)
139 fprintf (fp
, "0x%s", p
);
146 const char *name
= va_arg (arg
, const char *);
148 if (name
== NULL
|| *name
== 0)
150 fprintf (fp
, _("no symbol"));
157 demangled
= bfd_demangle (link_info
.output_bfd
, name
,
158 DMGL_ANSI
| DMGL_PARAMS
);
159 if (demangled
!= NULL
)
161 fprintf (fp
, "%s", demangled
);
166 fprintf (fp
, "%s", name
);
171 /* section name from a section */
173 asection
*sec
= va_arg (arg
, asection
*);
174 bfd
*abfd
= sec
->owner
;
175 const char *group
= NULL
;
176 struct coff_comdat_info
*ci
;
178 fprintf (fp
, "%s", sec
->name
);
180 && bfd_get_flavour (abfd
) == bfd_target_elf_flavour
181 && elf_next_in_group (sec
) != NULL
182 && (sec
->flags
& SEC_GROUP
) == 0)
183 group
= elf_group_name (sec
);
184 else if (abfd
!= NULL
185 && bfd_get_flavour (abfd
) == bfd_target_coff_flavour
186 && (ci
= bfd_coff_get_comdat_section (sec
->owner
,
190 fprintf (fp
, "[%s]", group
);
195 /* filename from a bfd */
197 bfd
*abfd
= va_arg (arg
, bfd
*);
200 fprintf (fp
, "%s generated", program_name
);
201 else if (abfd
->my_archive
)
202 fprintf (fp
, "%s(%s)", abfd
->my_archive
->filename
,
205 fprintf (fp
, "%s", abfd
->filename
);
210 /* Error is fatal. */
215 /* Print program name. */
216 fprintf (fp
, "%s", program_name
);
220 /* current bfd error or errno */
221 fprintf (fp
, "%s", bfd_errmsg (bfd_get_error ()));
225 /* filename from a lang_input_statement_type */
227 lang_input_statement_type
*i
;
229 i
= va_arg (arg
, lang_input_statement_type
*);
230 if (bfd_my_archive (i
->the_bfd
) != NULL
)
232 bfd_get_filename (bfd_my_archive (i
->the_bfd
)));
233 fprintf (fp
, "%s", i
->local_sym_name
);
234 if (bfd_my_archive (i
->the_bfd
) == NULL
235 && filename_cmp (i
->local_sym_name
, i
->filename
) != 0)
236 fprintf (fp
, " (%s)", i
->filename
);
241 /* Print script file and linenumber. */
243 fprintf (fp
, "--defsym %s", lex_string
);
244 else if (ldfile_input_filename
!= NULL
)
245 fprintf (fp
, "%s:%u", ldfile_input_filename
, lineno
);
247 fprintf (fp
, _("built in linker script:%u"), lineno
);
251 /* Print all that's interesting about a relent. */
253 arelent
*relent
= va_arg (arg
, arelent
*);
255 lfinfo (fp
, "%s+0x%v (type %s)",
256 (*(relent
->sym_ptr_ptr
))->name
,
258 relent
->howto
->name
);
265 /* Clever filename:linenumber with function name if possible.
266 The arguments are a BFD, a section, and an offset. */
268 static bfd
*last_bfd
;
269 static char *last_file
= NULL
;
270 static char *last_function
= NULL
;
274 asymbol
**asymbols
= NULL
;
275 const char *filename
;
276 const char *functionname
;
277 unsigned int linenumber
;
278 bfd_boolean discard_last
;
280 abfd
= va_arg (arg
, bfd
*);
281 section
= va_arg (arg
, asection
*);
282 offset
= va_arg (arg
, bfd_vma
);
286 if (!bfd_generic_link_read_symbols (abfd
))
287 einfo (_("%B%F: could not read symbols: %E\n"), abfd
);
289 asymbols
= bfd_get_outsymbols (abfd
);
292 /* The GNU Coding Standard requires that error messages
295 source-file-name:lineno: message
297 We do not always have a line number available so if
298 we cannot find them we print out the section name and
302 && bfd_find_nearest_line (abfd
, section
, asymbols
, offset
,
303 &filename
, &functionname
,
306 if (functionname
!= NULL
&& fmt
[-1] == 'C')
308 /* Detect the case where we are printing out a
309 message for the same function as the last
310 call to vinfo ("%C"). In this situation do
311 not print out the ABFD filename or the
312 function name again. Note - we do still
313 print out the source filename, as this will
314 allow programs that parse the linker's output
315 (eg emacs) to correctly locate multiple
316 errors in the same source file. */
319 || last_function
== NULL
322 && filename_cmp (last_file
, filename
) != 0)
323 || strcmp (last_function
, functionname
) != 0)
325 lfinfo (fp
, _("%B: In function `%T':\n"),
329 if (last_file
!= NULL
)
333 last_file
= xstrdup (filename
);
334 if (last_function
!= NULL
)
335 free (last_function
);
336 last_function
= xstrdup (functionname
);
338 discard_last
= FALSE
;
341 lfinfo (fp
, "%B:", abfd
);
343 if (filename
!= NULL
)
344 fprintf (fp
, "%s:", filename
);
346 if (functionname
!= NULL
&& fmt
[-1] == 'G')
347 lfinfo (fp
, "%T", functionname
);
348 else if (filename
!= NULL
&& linenumber
!= 0)
349 fprintf (fp
, "%u", linenumber
);
351 lfinfo (fp
, "(%A+0x%v)", section
, offset
);
354 lfinfo (fp
, "%B:(%A+0x%v)", abfd
, section
, offset
);
359 if (last_file
!= NULL
)
364 if (last_function
!= NULL
)
366 free (last_function
);
367 last_function
= NULL
;
374 /* native (host) void* pointer, like printf */
375 fprintf (fp
, "%p", va_arg (arg
, void *));
379 /* arbitrary string, like printf */
380 fprintf (fp
, "%s", va_arg (arg
, char *));
384 /* integer, like printf */
385 fprintf (fp
, "%d", va_arg (arg
, int));
389 /* unsigned integer, like printf */
390 fprintf (fp
, "%u", va_arg (arg
, unsigned int));
396 fprintf (fp
, "%ld", va_arg (arg
, long));
400 else if (*fmt
== 'u')
402 fprintf (fp
, "%lu", va_arg (arg
, unsigned long));
409 fprintf (fp
, "%%%c", fmt
[-1]);
415 if (is_warning
&& config
.fatal_warnings
)
416 config
.make_executable
= FALSE
;
422 /* Format info message and print on stdout. */
424 /* (You would think this should be called just "info", but then you
425 would be hosed by LynxOS, which defines that name in its libc.) */
428 info_msg (const char *fmt
, ...)
433 vfinfo (stdout
, fmt
, arg
, FALSE
);
437 /* ('e' for error.) Format info message and print on stderr. */
440 einfo (const char *fmt
, ...)
446 vfinfo (stderr
, fmt
, arg
, TRUE
);
452 info_assert (const char *file
, unsigned int line
)
454 einfo (_("%F%P: internal error %s %d\n"), file
, line
);
457 /* ('m' for map) Format info message and print on map. */
460 minfo (const char *fmt
, ...)
462 if (config
.map_file
!= NULL
)
467 vfinfo (config
.map_file
, fmt
, arg
, FALSE
);
473 lfinfo (FILE *file
, const char *fmt
, ...)
478 vfinfo (file
, fmt
, arg
, FALSE
);
482 /* Functions to print the link map. */
487 fprintf (config
.map_file
, " ");
493 fprintf (config
.map_file
, "\n");
496 /* A more or less friendly abort message. In ld.h abort is defined to
497 call this function. */
500 ld_abort (const char *file
, int line
, const char *fn
)
503 einfo (_("%P: internal error: aborting at %s line %d in %s\n"),
506 einfo (_("%P: internal error: aborting at %s line %d\n"),
508 einfo (_("%P%F: please report this bug\n"));