2 Copyright (C) 1991-2018 Free Software Foundation, Inc.
3 Written by Steve Chamberlain of Cygnus Support.
5 This file is part of the GNU Binutils.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 MA 02110-1301, USA. */
25 #include "libiberty.h"
26 #include "safe-ctype.h"
27 #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 %H like %C but in addition emit section+offset
51 %I filename from a lang_input_statement_type
53 %R info about a relent
54 %S print script file and linenumber from etree_type.
57 %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
58 %X no object output, fail return
59 %d integer, like printf
61 %lu unsigned long, like printf
62 %p native (host) void* pointer, like printf
63 %s arbitrary string, like printf
64 %u integer, like printf
65 %v hex bfd_vma, no leading zeros
69 vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
71 bfd_boolean fatal = FALSE;
74 unsigned int arg_count = 0;
98 for (arg_no = 0; arg_no < sizeof (args) / sizeof (args[0]); arg_no++)
99 args[arg_no].type = Bad;
103 while (*scan != '\0')
105 while (*scan != '%' && *scan != '\0')
113 if (*scan != '0' && ISDIGIT (*scan) && scan[1] == '$')
115 arg_no = *scan - '1';
156 if (*scan == 'd' || *scan == 'u')
168 if (arg_no >= sizeof (args) / sizeof (args[0]))
170 args[arg_no].type = arg_type;
176 for (arg_no = 0; arg_no < arg_count; arg_no++)
178 switch (args[arg_no].type)
181 args[arg_no].i = va_arg (ap, int);
184 args[arg_no].l = va_arg (ap, long);
187 args[arg_no].p = va_arg (ap, void *);
190 args[arg_no].v = va_arg (ap, bfd_vma);
193 args[arg_no].reladdr.abfd = va_arg (ap, bfd *);
194 args[arg_no].reladdr.sec = va_arg (ap, asection *);
195 args[arg_no].reladdr.off = va_arg (ap, bfd_vma);
205 const char *str = fmt;
206 while (*fmt != '%' && *fmt != '\0')
209 if (fwrite (str, 1, fmt - str, fp))
219 if (*fmt != '0' && ISDIGIT (*fmt) && fmt[1] == '$')
237 /* no object output, fail return */
238 config.make_executable = FALSE;
244 bfd_vma value = args[arg_no].v;
246 fprintf_vma (fp, value);
251 /* hex bfd_vma, no leading zeros */
255 bfd_vma value = args[arg_no].v;
257 sprintf_vma (p, value);
267 /* hex bfd_vma with 0x with no leading zeroes taking up
275 value = args[arg_no].v;
277 sprintf_vma (buf, value);
278 for (p = buf; *p == '0'; ++p)
288 fprintf (fp, "0x%s", p);
295 const char *name = (const char *) args[arg_no].p;
297 if (name == NULL || *name == 0)
299 fprintf (fp, _("no symbol"));
306 demangled = bfd_demangle (link_info.output_bfd, name,
307 DMGL_ANSI | DMGL_PARAMS);
308 if (demangled != NULL)
310 fprintf (fp, "%s", demangled);
315 fprintf (fp, "%s", name);
320 /* section name from a section */
324 const char *group = NULL;
325 struct coff_comdat_info *ci;
327 sec = (asection *) args[arg_no].p;
330 fprintf (fp, "%s", sec->name);
332 && bfd_get_flavour (abfd) == bfd_target_elf_flavour
333 && elf_next_in_group (sec) != NULL
334 && (sec->flags & SEC_GROUP) == 0)
335 group = elf_group_name (sec);
336 else if (abfd != NULL
337 && bfd_get_flavour (abfd) == bfd_target_coff_flavour
338 && (ci = bfd_coff_get_comdat_section (sec->owner,
342 fprintf (fp, "[%s]", group);
347 /* filename from a bfd */
349 bfd *abfd = (bfd *) args[arg_no].p;
352 fprintf (fp, "%s generated", program_name);
353 else if (abfd->my_archive != NULL
354 && !bfd_is_thin_archive (abfd->my_archive))
355 fprintf (fp, "%s(%s)", abfd->my_archive->filename,
358 fprintf (fp, "%s", abfd->filename);
363 /* Error is fatal. */
368 /* Print program name. */
369 fprintf (fp, "%s", program_name);
373 /* current bfd error or errno */
374 fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
378 /* filename from a lang_input_statement_type */
380 lang_input_statement_type *i;
382 i = (lang_input_statement_type *) args[arg_no].p;
384 if (i->the_bfd->my_archive != NULL
385 && !bfd_is_thin_archive (i->the_bfd->my_archive))
387 bfd_get_filename (i->the_bfd->my_archive));
388 fprintf (fp, "%s", i->local_sym_name);
389 if ((i->the_bfd->my_archive == NULL
390 || bfd_is_thin_archive (i->the_bfd->my_archive))
391 && filename_cmp (i->local_sym_name, i->filename) != 0)
392 fprintf (fp, " (%s)", i->filename);
397 /* Print script file and linenumber. */
400 etree_type *tp = (etree_type *) args[arg_no].p;
405 tp->type.filename = ldlex_filename ();
406 tp->type.lineno = lineno;
408 if (tp->type.filename != NULL)
409 fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
414 /* Print all that's interesting about a relent. */
416 arelent *relent = (arelent *) args[arg_no].p;
418 lfinfo (fp, "%s+0x%v (type %s)",
419 (*(relent->sym_ptr_ptr))->name,
421 relent->howto->name);
429 /* Clever filename:linenumber with function name if possible.
430 The arguments are a BFD, a section, and an offset. */
432 static bfd *last_bfd;
433 static char *last_file;
434 static char *last_function;
438 asymbol **asymbols = NULL;
439 const char *filename;
440 const char *functionname;
441 unsigned int linenumber;
442 bfd_boolean discard_last;
445 abfd = args[arg_no].reladdr.abfd;
446 section = args[arg_no].reladdr.sec;
447 offset = args[arg_no].reladdr.off;
452 if (!bfd_generic_link_read_symbols (abfd))
453 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
455 asymbols = bfd_get_outsymbols (abfd);
458 /* The GNU Coding Standard requires that error messages
461 source-file-name:lineno: message
463 We do not always have a line number available so if
464 we cannot find them we print out the section name and
468 && bfd_find_nearest_line (abfd, section, asymbols, offset,
469 &filename, &functionname,
472 if (functionname != NULL
473 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
475 /* Detect the case where we are printing out a
476 message for the same function as the last
477 call to vinfo ("%C"). In this situation do
478 not print out the ABFD filename or the
479 function name again. Note - we do still
480 print out the source filename, as this will
481 allow programs that parse the linker's output
482 (eg emacs) to correctly locate multiple
483 errors in the same source file. */
485 || last_function == NULL
487 || (last_file == NULL) != (filename == NULL)
489 && filename_cmp (last_file, filename) != 0)
490 || strcmp (last_function, functionname) != 0)
492 lfinfo (fp, _("%B: In function `%T':\n"),
496 if (last_file != NULL)
500 last_file = xstrdup (filename);
501 if (last_function != NULL)
502 free (last_function);
503 last_function = xstrdup (functionname);
505 discard_last = FALSE;
508 lfinfo (fp, "%B:", abfd);
510 if (filename != NULL)
511 fprintf (fp, "%s:", filename);
513 done = fmt[-1] != 'H';
514 if (functionname != NULL && fmt[-1] == 'G')
515 lfinfo (fp, "%T", functionname);
516 else if (filename != NULL && linenumber != 0)
517 fprintf (fp, "%u%s", linenumber, done ? "" : ":");
523 lfinfo (fp, "%B:", abfd);
527 lfinfo (fp, "(%A+0x%v)", section, offset);
532 if (last_file != NULL)
537 if (last_function != NULL)
539 free (last_function);
540 last_function = NULL;
547 /* native (host) void* pointer, like printf */
548 fprintf (fp, "%p", args[arg_no].p);
553 /* arbitrary string, like printf */
554 fprintf (fp, "%s", (char *) args[arg_no].p);
559 /* integer, like printf */
560 fprintf (fp, "%d", args[arg_no].i);
565 /* unsigned integer, like printf */
566 fprintf (fp, "%u", args[arg_no].i);
573 fprintf (fp, "%ld", args[arg_no].l);
578 else if (*fmt == 'u')
580 fprintf (fp, "%lu", args[arg_no].l);
588 fprintf (fp, "%%%c", fmt[-1]);
594 if (is_warning && config.fatal_warnings)
595 config.make_executable = FALSE;
601 /* Format info message and print on stdout. */
603 /* (You would think this should be called just "info", but then you
604 would be hosed by LynxOS, which defines that name in its libc.) */
607 info_msg (const char *fmt, ...)
612 vfinfo (stdout, fmt, arg, FALSE);
616 /* ('e' for error.) Format info message and print on stderr. */
619 einfo (const char *fmt, ...)
625 vfinfo (stderr, fmt, arg, TRUE);
631 info_assert (const char *file, unsigned int line)
633 einfo (_("%F%P: internal error %s %d\n"), file, line);
636 /* ('m' for map) Format info message and print on map. */
639 minfo (const char *fmt, ...)
641 if (config.map_file != NULL)
646 if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
648 /* Stash info about --as-needed shared libraries. Print
649 later so they don't appear intermingled with archive
651 struct asneeded_minfo *m = xmalloc (sizeof *m);
654 m->soname = va_arg (arg, const char *);
655 m->ref = va_arg (arg, bfd *);
656 m->name = va_arg (arg, const char *);
657 *asneeded_list_tail = m;
658 asneeded_list_tail = &m->next;
661 vfinfo (config.map_file, fmt, arg, FALSE);
667 lfinfo (FILE *file, const char *fmt, ...)
672 vfinfo (file, fmt, arg, FALSE);
676 /* Functions to print the link map. */
681 fprintf (config.map_file, " ");
687 fprintf (config.map_file, "\n");
690 /* A more or less friendly abort message. In ld.h abort is defined to
691 call this function. */
694 ld_abort (const char *file, int line, const char *fn)
697 einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
700 einfo (_("%P: internal error: aborting at %s:%d\n"),
702 einfo (_("%P%F: please report this bug\n"));