[PATCH 40/57][Arm][OBJDUMP] Add support for MVE instructions: vdup, veor, vfma, vfms...
[binutils-gdb.git] / ld / ldmisc.c
blobf7ab7b5d99edd47c71235ba1864938be1df9bbc0
1 /* ldmisc.c
2 Copyright (C) 1991-2019 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. */
22 #include "sysdep.h"
23 #include "bfd.h"
24 #include "bfdlink.h"
25 #include "libiberty.h"
26 #include "safe-ctype.h"
27 #include "filenames.h"
28 #include "demangle.h"
29 #include <stdarg.h>
30 #include "ld.h"
31 #include "ldmisc.h"
32 #include "ldexp.h"
33 #include "ldlang.h"
34 #include <ldgram.h>
35 #include "ldlex.h"
36 #include "ldmain.h"
37 #include "ldfile.h"
38 #include "elf-bfd.h"
39 #include "coff-bfd.h"
42 %% literal %
43 %C clever filename:linenumber with function
44 %D like %C, but no function name
45 %E current bfd error or errno
46 %F error is fatal
47 %G like %D, but only function name
48 %H like %C but in addition emit section+offset
49 %P print program name
50 %V hex bfd_vma
51 %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
52 %X no object output, fail return
53 %d integer, like printf
54 %ld long, like printf
55 %lu unsigned long, like printf
56 %p native (host) void* pointer, like printf
57 %pA section name from a section
58 %pB filename from a bfd
59 %pI filename from a lang_input_statement_type
60 %pR info about a relent
61 %pS print script file and linenumber from etree_type.
62 %pT symbol name
63 %s arbitrary string, like printf
64 %u integer, like printf
65 %v hex bfd_vma, no leading zeros
68 void
69 vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
71 bfd_boolean fatal = FALSE;
72 const char *scan;
73 int arg_type;
74 unsigned int arg_count = 0;
75 unsigned int arg_no;
76 union vfinfo_args
78 int i;
79 long l;
80 void *p;
81 bfd_vma v;
82 struct {
83 bfd *abfd;
84 asection *sec;
85 bfd_vma off;
86 } reladdr;
87 enum
89 Bad,
90 Int,
91 Long,
92 Ptr,
93 Vma,
94 RelAddr
95 } type;
96 } args[9];
98 for (arg_no = 0; arg_no < sizeof (args) / sizeof (args[0]); arg_no++)
99 args[arg_no].type = Bad;
101 arg_count = 0;
102 scan = fmt;
103 while (*scan != '\0')
105 while (*scan != '%' && *scan != '\0')
106 scan++;
108 if (*scan == '%')
110 scan++;
112 arg_no = arg_count;
113 if (*scan != '0' && ISDIGIT (*scan) && scan[1] == '$')
115 arg_no = *scan - '1';
116 scan += 2;
119 arg_type = Bad;
120 switch (*scan++)
122 case '\0':
123 --scan;
124 break;
126 case 'V':
127 case 'v':
128 case 'W':
129 arg_type = Vma;
130 break;
132 case 's':
133 arg_type = Ptr;
134 break;
136 case 'p':
137 if (*scan == 'A' || *scan == 'B' || *scan == 'I'
138 || *scan == 'R' || *scan == 'S' || *scan == 'T')
139 scan++;
140 arg_type = Ptr;
141 break;
143 case 'C':
144 case 'D':
145 case 'G':
146 case 'H':
147 arg_type = RelAddr;
148 break;
150 case 'd':
151 case 'u':
152 arg_type = Int;
153 break;
155 case 'l':
156 if (*scan == 'd' || *scan == 'u')
158 ++scan;
159 arg_type = Long;
161 break;
163 default:
164 break;
166 if (arg_type != Bad)
168 if (arg_no >= sizeof (args) / sizeof (args[0]))
169 abort ();
170 args[arg_no].type = arg_type;
171 ++arg_count;
176 for (arg_no = 0; arg_no < arg_count; arg_no++)
178 switch (args[arg_no].type)
180 case Int:
181 args[arg_no].i = va_arg (ap, int);
182 break;
183 case Long:
184 args[arg_no].l = va_arg (ap, long);
185 break;
186 case Ptr:
187 args[arg_no].p = va_arg (ap, void *);
188 break;
189 case Vma:
190 args[arg_no].v = va_arg (ap, bfd_vma);
191 break;
192 case RelAddr:
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);
196 break;
197 default:
198 abort ();
202 arg_count = 0;
203 while (*fmt != '\0')
205 const char *str = fmt;
206 while (*fmt != '%' && *fmt != '\0')
207 fmt++;
208 if (fmt != str)
209 if (fwrite (str, 1, fmt - str, fp))
211 /* Ignore. */
214 if (*fmt == '%')
216 fmt++;
218 arg_no = arg_count;
219 if (*fmt != '0' && ISDIGIT (*fmt) && fmt[1] == '$')
221 arg_no = *fmt - '1';
222 fmt += 2;
225 switch (*fmt++)
227 case '\0':
228 --fmt;
229 /* Fall through. */
231 case '%':
232 /* literal % */
233 putc ('%', fp);
234 break;
236 case 'X':
237 /* no object output, fail return */
238 config.make_executable = FALSE;
239 break;
241 case 'V':
242 /* hex bfd_vma */
244 bfd_vma value = args[arg_no].v;
245 ++arg_count;
246 fprintf_vma (fp, value);
248 break;
250 case 'v':
251 /* hex bfd_vma, no leading zeros */
253 char buf[100];
254 char *p = buf;
255 bfd_vma value = args[arg_no].v;
256 ++arg_count;
257 sprintf_vma (p, value);
258 while (*p == '0')
259 p++;
260 if (!*p)
261 p--;
262 fputs (p, fp);
264 break;
266 case 'W':
267 /* hex bfd_vma with 0x with no leading zeroes taking up
268 8 spaces. */
270 char buf[100];
271 bfd_vma value;
272 char *p;
273 int len;
275 value = args[arg_no].v;
276 ++arg_count;
277 sprintf_vma (buf, value);
278 for (p = buf; *p == '0'; ++p)
280 if (*p == '\0')
281 --p;
282 len = strlen (p);
283 while (len < 8)
285 putc (' ', fp);
286 ++len;
288 fprintf (fp, "0x%s", p);
290 break;
292 case 'F':
293 /* Error is fatal. */
294 fatal = TRUE;
295 break;
297 case 'P':
298 /* Print program name. */
299 fprintf (fp, "%s", program_name);
300 break;
302 case 'E':
303 /* current bfd error or errno */
304 fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
305 break;
307 case 'C':
308 case 'D':
309 case 'G':
310 case 'H':
311 /* Clever filename:linenumber with function name if possible.
312 The arguments are a BFD, a section, and an offset. */
314 static bfd *last_bfd;
315 static char *last_file;
316 static char *last_function;
317 bfd *abfd;
318 asection *section;
319 bfd_vma offset;
320 asymbol **asymbols = NULL;
321 const char *filename;
322 const char *functionname;
323 unsigned int linenumber;
324 bfd_boolean discard_last;
325 bfd_boolean done;
327 abfd = args[arg_no].reladdr.abfd;
328 section = args[arg_no].reladdr.sec;
329 offset = args[arg_no].reladdr.off;
330 ++arg_count;
332 if (abfd != NULL)
334 if (!bfd_generic_link_read_symbols (abfd))
335 einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd);
337 asymbols = bfd_get_outsymbols (abfd);
340 /* The GNU Coding Standard requires that error messages
341 be of the form:
343 source-file-name:lineno: message
345 We do not always have a line number available so if
346 we cannot find them we print out the section name and
347 offset instead. */
348 discard_last = TRUE;
349 if (abfd != NULL
350 && bfd_find_nearest_line (abfd, section, asymbols, offset,
351 &filename, &functionname,
352 &linenumber))
354 if (functionname != NULL
355 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
357 /* Detect the case where we are printing out a
358 message for the same function as the last
359 call to vinfo ("%C"). In this situation do
360 not print out the ABFD filename or the
361 function name again. Note - we do still
362 print out the source filename, as this will
363 allow programs that parse the linker's output
364 (eg emacs) to correctly locate multiple
365 errors in the same source file. */
366 if (last_bfd == NULL
367 || last_function == NULL
368 || last_bfd != abfd
369 || (last_file == NULL) != (filename == NULL)
370 || (filename != NULL
371 && filename_cmp (last_file, filename) != 0)
372 || strcmp (last_function, functionname) != 0)
374 lfinfo (fp, _("%pB: in function `%pT':\n"),
375 abfd, functionname);
377 last_bfd = abfd;
378 if (last_file != NULL)
379 free (last_file);
380 last_file = NULL;
381 if (filename)
382 last_file = xstrdup (filename);
383 if (last_function != NULL)
384 free (last_function);
385 last_function = xstrdup (functionname);
387 discard_last = FALSE;
389 else
390 lfinfo (fp, "%pB:", abfd);
392 if (filename != NULL)
393 fprintf (fp, "%s:", filename);
395 done = fmt[-1] != 'H';
396 if (functionname != NULL && fmt[-1] == 'G')
397 lfinfo (fp, "%pT", functionname);
398 else if (filename != NULL && linenumber != 0)
399 fprintf (fp, "%u%s", linenumber, done ? "" : ":");
400 else
401 done = FALSE;
403 else
405 lfinfo (fp, "%pB:", abfd);
406 done = FALSE;
408 if (!done)
409 lfinfo (fp, "(%pA+0x%v)", section, offset);
411 if (discard_last)
413 last_bfd = NULL;
414 if (last_file != NULL)
416 free (last_file);
417 last_file = NULL;
419 if (last_function != NULL)
421 free (last_function);
422 last_function = NULL;
426 break;
428 case 'p':
429 if (*fmt == 'A')
431 /* section name from a section */
432 asection *sec;
433 bfd *abfd;
434 const char *group = NULL;
435 struct coff_comdat_info *ci;
437 fmt++;
438 sec = (asection *) args[arg_no].p;
439 ++arg_count;
440 abfd = sec->owner;
441 fprintf (fp, "%s", sec->name);
442 if (abfd != NULL
443 && bfd_get_flavour (abfd) == bfd_target_elf_flavour
444 && elf_next_in_group (sec) != NULL
445 && (sec->flags & SEC_GROUP) == 0)
446 group = elf_group_name (sec);
447 else if (abfd != NULL
448 && bfd_get_flavour (abfd) == bfd_target_coff_flavour
449 && (ci = bfd_coff_get_comdat_section (sec->owner,
450 sec)) != NULL)
451 group = ci->name;
452 if (group != NULL)
453 fprintf (fp, "[%s]", group);
455 else if (*fmt == 'B')
457 /* filename from a bfd */
458 bfd *abfd = (bfd *) args[arg_no].p;
460 fmt++;
461 ++arg_count;
462 if (abfd == NULL)
463 fprintf (fp, "%s generated", program_name);
464 else if (abfd->my_archive != NULL
465 && !bfd_is_thin_archive (abfd->my_archive))
466 fprintf (fp, "%s(%s)", abfd->my_archive->filename,
467 abfd->filename);
468 else
469 fprintf (fp, "%s", abfd->filename);
471 else if (*fmt == 'I')
473 /* filename from a lang_input_statement_type */
474 lang_input_statement_type *i;
476 fmt++;
477 i = (lang_input_statement_type *) args[arg_no].p;
478 ++arg_count;
479 if (i->the_bfd != NULL
480 && i->the_bfd->my_archive != NULL
481 && !bfd_is_thin_archive (i->the_bfd->my_archive))
482 fprintf (fp, "(%s)%s", i->the_bfd->my_archive->filename,
483 i->local_sym_name);
484 else
485 fprintf (fp, "%s", i->filename);
487 else if (*fmt == 'R')
489 /* Print all that's interesting about a relent. */
490 arelent *relent = (arelent *) args[arg_no].p;
492 fmt++;
493 ++arg_count;
494 lfinfo (fp, "%s+0x%v (type %s)",
495 (*(relent->sym_ptr_ptr))->name,
496 relent->addend,
497 relent->howto->name);
499 else if (*fmt == 'S')
501 /* Print script file and linenumber. */
502 etree_type node;
503 etree_type *tp = (etree_type *) args[arg_no].p;
505 fmt++;
506 ++arg_count;
507 if (tp == NULL)
509 tp = &node;
510 tp->type.filename = ldlex_filename ();
511 tp->type.lineno = lineno;
513 if (tp->type.filename != NULL)
514 fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
516 else if (*fmt == 'T')
518 /* Symbol name. */
519 const char *name = (const char *) args[arg_no].p;
521 fmt++;
522 ++arg_count;
523 if (name == NULL || *name == 0)
525 fprintf (fp, _("no symbol"));
526 break;
528 else if (demangling)
530 char *demangled;
532 demangled = bfd_demangle (link_info.output_bfd, name,
533 DMGL_ANSI | DMGL_PARAMS);
534 if (demangled != NULL)
536 fprintf (fp, "%s", demangled);
537 free (demangled);
538 break;
541 fprintf (fp, "%s", name);
543 else
545 /* native (host) void* pointer, like printf */
546 fprintf (fp, "%p", args[arg_no].p);
547 ++arg_count;
549 break;
551 case 's':
552 /* arbitrary string, like printf */
553 fprintf (fp, "%s", (char *) args[arg_no].p);
554 ++arg_count;
555 break;
557 case 'd':
558 /* integer, like printf */
559 fprintf (fp, "%d", args[arg_no].i);
560 ++arg_count;
561 break;
563 case 'u':
564 /* unsigned integer, like printf */
565 fprintf (fp, "%u", args[arg_no].i);
566 ++arg_count;
567 break;
569 case 'l':
570 if (*fmt == 'd')
572 fprintf (fp, "%ld", args[arg_no].l);
573 ++arg_count;
574 ++fmt;
575 break;
577 else if (*fmt == 'u')
579 fprintf (fp, "%lu", args[arg_no].l);
580 ++arg_count;
581 ++fmt;
582 break;
584 /* Fallthru */
586 default:
587 fprintf (fp, "%%%c", fmt[-1]);
588 break;
593 if (is_warning && config.fatal_warnings)
594 config.make_executable = FALSE;
596 if (fatal)
597 xexit (1);
600 /* Format info message and print on stdout. */
602 /* (You would think this should be called just "info", but then you
603 would be hosed by LynxOS, which defines that name in its libc.) */
605 void
606 info_msg (const char *fmt, ...)
608 va_list arg;
610 va_start (arg, fmt);
611 vfinfo (stdout, fmt, arg, FALSE);
612 va_end (arg);
615 /* ('e' for error.) Format info message and print on stderr. */
617 void
618 einfo (const char *fmt, ...)
620 va_list arg;
622 fflush (stdout);
623 va_start (arg, fmt);
624 vfinfo (stderr, fmt, arg, TRUE);
625 va_end (arg);
626 fflush (stderr);
629 void
630 info_assert (const char *file, unsigned int line)
632 einfo (_("%F%P: internal error %s %d\n"), file, line);
635 /* ('m' for map) Format info message and print on map. */
637 void
638 minfo (const char *fmt, ...)
640 if (config.map_file != NULL)
642 va_list arg;
644 va_start (arg, fmt);
645 if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
647 /* Stash info about --as-needed shared libraries. Print
648 later so they don't appear intermingled with archive
649 library info. */
650 struct asneeded_minfo *m = xmalloc (sizeof *m);
652 m->next = NULL;
653 m->soname = va_arg (arg, const char *);
654 m->ref = va_arg (arg, bfd *);
655 m->name = va_arg (arg, const char *);
656 *asneeded_list_tail = m;
657 asneeded_list_tail = &m->next;
659 else
660 vfinfo (config.map_file, fmt, arg, FALSE);
661 va_end (arg);
665 void
666 lfinfo (FILE *file, const char *fmt, ...)
668 va_list arg;
670 va_start (arg, fmt);
671 vfinfo (file, fmt, arg, FALSE);
672 va_end (arg);
675 /* Functions to print the link map. */
677 void
678 print_space (void)
680 fprintf (config.map_file, " ");
683 void
684 print_nl (void)
686 fprintf (config.map_file, "\n");
689 /* A more or less friendly abort message. In ld.h abort is defined to
690 call this function. */
692 void
693 ld_abort (const char *file, int line, const char *fn)
695 if (fn != NULL)
696 einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
697 file, line, fn);
698 else
699 einfo (_("%P: internal error: aborting at %s:%d\n"),
700 file, line);
701 einfo (_("%F%P: please report this bug\n"));
702 xexit (1);