[gdb/testsuite] Fix regexps in gdb.base/step-over-syscall.exp
[binutils-gdb.git] / ld / ldmisc.c
blobef46ad665e99e54c080856a700e53b01a2d5775e
1 /* ldmisc.c
2 Copyright (C) 1991-2023 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 "ctf-api.h"
27 #include "safe-ctype.h"
28 #include "filenames.h"
29 #include "demangle.h"
30 #include <stdarg.h>
31 #include "ld.h"
32 #include "ldmisc.h"
33 #include "ldexp.h"
34 #include "ldlang.h"
35 #include <ldgram.h>
36 #include "ldlex.h"
37 #include "ldmain.h"
38 #include "ldfile.h"
41 %% literal %
42 %C clever filename:linenumber with function
43 %D like %C, but no function name
44 %E current bfd error or errno
45 %F error is fatal
46 %G like %D, but only function name
47 %H like %C but in addition emit section+offset
48 %P print program name
49 %V hex bfd_vma
50 %W hex bfd_vma with 0x with no leading zeros taking up 10 spaces
51 %X no object output, fail return
52 %d integer, like printf
53 %ld long, like printf
54 %lu unsigned long, like printf
55 %lx 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 %pU print script file without linenumber from etree_type.
64 %s arbitrary string, like printf
65 %u integer, like printf
66 %v hex bfd_vma, no leading zeros
67 %x integer, like printf
70 void
71 vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning)
73 bool fatal = false;
74 const char *scan;
75 int arg_type;
76 unsigned int arg_count = 0;
77 unsigned int arg_no;
78 union vfinfo_args
80 int i;
81 long l;
82 void *p;
83 bfd_vma v;
84 struct {
85 bfd *abfd;
86 asection *sec;
87 bfd_vma off;
88 } reladdr;
89 enum
91 Bad,
92 Int,
93 Long,
94 Ptr,
95 Vma,
96 RelAddr
97 } type;
98 } args[9];
100 if (is_warning && config.no_warnings)
101 return;
103 for (arg_no = 0; arg_no < sizeof (args) / sizeof (args[0]); arg_no++)
104 args[arg_no].type = Bad;
106 arg_count = 0;
107 scan = fmt;
108 while (*scan != '\0')
110 while (*scan != '%' && *scan != '\0')
111 scan++;
113 if (*scan == '%')
115 scan++;
117 arg_no = arg_count;
118 if (*scan != '0' && ISDIGIT (*scan) && scan[1] == '$')
120 arg_no = *scan - '1';
121 scan += 2;
124 arg_type = Bad;
125 switch (*scan++)
127 case '\0':
128 --scan;
129 break;
131 case 'V':
132 case 'v':
133 case 'W':
134 arg_type = Vma;
135 break;
137 case 's':
138 arg_type = Ptr;
139 break;
141 case 'p':
142 if (*scan == 'A' || *scan == 'B' || *scan == 'I'
143 || *scan == 'R' || *scan == 'S' || *scan == 'T')
144 scan++;
145 arg_type = Ptr;
146 break;
148 case 'C':
149 case 'D':
150 case 'G':
151 case 'H':
152 arg_type = RelAddr;
153 break;
155 case 'd':
156 case 'u':
157 case 'x':
158 arg_type = Int;
159 break;
161 case 'l':
162 if (*scan == 'd' || *scan == 'u' || *scan == 'x')
164 ++scan;
165 arg_type = Long;
167 break;
169 default:
170 break;
172 if (arg_type != Bad)
174 if (arg_no >= sizeof (args) / sizeof (args[0]))
175 abort ();
176 args[arg_no].type = arg_type;
177 ++arg_count;
182 for (arg_no = 0; arg_no < arg_count; arg_no++)
184 switch (args[arg_no].type)
186 case Int:
187 args[arg_no].i = va_arg (ap, int);
188 break;
189 case Long:
190 args[arg_no].l = va_arg (ap, long);
191 break;
192 case Ptr:
193 args[arg_no].p = va_arg (ap, void *);
194 break;
195 case Vma:
196 args[arg_no].v = va_arg (ap, bfd_vma);
197 break;
198 case RelAddr:
199 args[arg_no].reladdr.abfd = va_arg (ap, bfd *);
200 args[arg_no].reladdr.sec = va_arg (ap, asection *);
201 args[arg_no].reladdr.off = va_arg (ap, bfd_vma);
202 break;
203 default:
204 abort ();
208 arg_count = 0;
209 while (*fmt != '\0')
211 const char *str = fmt;
212 while (*fmt != '%' && *fmt != '\0')
213 fmt++;
214 if (fmt != str)
215 if (fwrite (str, 1, fmt - str, fp))
217 /* Ignore. */
220 if (*fmt == '%')
222 fmt++;
224 arg_no = arg_count;
225 if (*fmt != '0' && ISDIGIT (*fmt) && fmt[1] == '$')
227 arg_no = *fmt - '1';
228 fmt += 2;
231 switch (*fmt++)
233 case '\0':
234 --fmt;
235 /* Fall through. */
237 case '%':
238 /* literal % */
239 putc ('%', fp);
240 break;
242 case 'X':
243 /* no object output, fail return */
244 config.make_executable = false;
245 break;
247 case 'V':
248 /* hex bfd_vma */
250 char buf[32];
251 bfd_vma value;
253 value = args[arg_no].v;
254 ++arg_count;
255 bfd_sprintf_vma (link_info.output_bfd, buf, value);
256 fprintf (fp, "%s", buf);
258 break;
260 case 'v':
261 /* hex bfd_vma, no leading zeros */
263 uint64_t value = args[arg_no].v;
264 ++arg_count;
265 fprintf (fp, "%" PRIx64, value);
267 break;
269 case 'W':
270 /* hex bfd_vma with 0x with no leading zeroes taking up
271 10 spaces (including the 0x). */
273 char buf[32];
274 uint64_t value;
276 value = args[arg_no].v;
277 ++arg_count;
278 sprintf (buf, "0x%" PRIx64, value);
279 fprintf (fp, "%10s", buf);
281 break;
283 case 'F':
284 /* Error is fatal. */
285 fatal = true;
286 break;
288 case 'P':
289 /* Print program name. */
290 fprintf (fp, "%s", program_name);
291 break;
293 case 'E':
294 /* current bfd error or errno */
295 fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
296 break;
298 case 'C':
299 case 'D':
300 case 'G':
301 case 'H':
302 /* Clever filename:linenumber with function name if possible.
303 The arguments are a BFD, a section, and an offset. */
305 static bfd *last_bfd;
306 static char *last_file;
307 static char *last_function;
308 bfd *abfd;
309 asection *section;
310 bfd_vma offset;
311 asymbol **asymbols = NULL;
312 const char *filename;
313 const char *functionname;
314 unsigned int linenumber;
315 bool discard_last;
316 bool done;
317 bfd_error_type last_bfd_error = bfd_get_error ();
319 abfd = args[arg_no].reladdr.abfd;
320 section = args[arg_no].reladdr.sec;
321 offset = args[arg_no].reladdr.off;
322 ++arg_count;
324 if (abfd != NULL)
326 if (!bfd_generic_link_read_symbols (abfd))
327 einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd);
329 asymbols = bfd_get_outsymbols (abfd);
332 /* The GNU Coding Standard requires that error messages
333 be of the form:
335 source-file-name:lineno: message
337 We do not always have a line number available so if
338 we cannot find them we print out the section name and
339 offset instead. */
340 discard_last = true;
341 if (abfd != NULL
342 && bfd_find_nearest_line (abfd, section, asymbols, offset,
343 &filename, &functionname,
344 &linenumber))
346 if (functionname != NULL
347 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
349 /* Detect the case where we are printing out a
350 message for the same function as the last
351 call to vinfo ("%C"). In this situation do
352 not print out the ABFD filename or the
353 function name again. Note - we do still
354 print out the source filename, as this will
355 allow programs that parse the linker's output
356 (eg emacs) to correctly locate multiple
357 errors in the same source file. */
358 if (last_bfd == NULL
359 || last_function == NULL
360 || last_bfd != abfd
361 || (last_file == NULL) != (filename == NULL)
362 || (filename != NULL
363 && filename_cmp (last_file, filename) != 0)
364 || strcmp (last_function, functionname) != 0)
366 lfinfo (fp, _("%pB: in function `%pT':\n"),
367 abfd, functionname);
369 last_bfd = abfd;
370 free (last_file);
371 last_file = NULL;
372 if (filename)
373 last_file = xstrdup (filename);
374 free (last_function);
375 last_function = xstrdup (functionname);
377 discard_last = false;
379 else
380 lfinfo (fp, "%pB:", abfd);
382 if (filename != NULL)
383 fprintf (fp, "%s:", filename);
385 done = fmt[-1] != 'H';
386 if (functionname != NULL && fmt[-1] == 'G')
387 lfinfo (fp, "%pT", functionname);
388 else if (filename != NULL && linenumber != 0)
389 fprintf (fp, "%u%s", linenumber, done ? "" : ":");
390 else
391 done = false;
393 else
395 lfinfo (fp, "%pB:", abfd);
396 done = false;
398 if (!done)
399 lfinfo (fp, "(%pA+0x%v)", section, offset);
400 bfd_set_error (last_bfd_error);
402 if (discard_last)
404 last_bfd = NULL;
405 free (last_file);
406 last_file = NULL;
407 free (last_function);
408 last_function = NULL;
411 break;
413 case 'p':
414 if (*fmt == 'A')
416 /* section name from a section */
417 asection *sec;
418 bfd *abfd;
420 fmt++;
421 sec = (asection *) args[arg_no].p;
422 ++arg_count;
423 fprintf (fp, "%s", sec->name);
424 abfd = sec->owner;
425 if (abfd != NULL)
427 const char *group = bfd_group_name (abfd, sec);
428 if (group != NULL)
429 fprintf (fp, "[%s]", group);
432 else if (*fmt == 'B')
434 /* filename from a bfd */
435 bfd *abfd = (bfd *) args[arg_no].p;
437 fmt++;
438 ++arg_count;
439 if (abfd == NULL)
440 fprintf (fp, "%s generated", program_name);
441 else if (abfd->my_archive != NULL
442 && !bfd_is_thin_archive (abfd->my_archive))
443 fprintf (fp, "%s(%s)",
444 bfd_get_filename (abfd->my_archive),
445 bfd_get_filename (abfd));
446 else
447 fprintf (fp, "%s", bfd_get_filename (abfd));
449 else if (*fmt == 'I')
451 /* filename from a lang_input_statement_type */
452 lang_input_statement_type *i;
454 fmt++;
455 i = (lang_input_statement_type *) args[arg_no].p;
456 ++arg_count;
457 if (i->the_bfd != NULL
458 && i->the_bfd->my_archive != NULL
459 && !bfd_is_thin_archive (i->the_bfd->my_archive))
460 fprintf (fp, "(%s)%s",
461 bfd_get_filename (i->the_bfd->my_archive),
462 i->local_sym_name);
463 else
464 fprintf (fp, "%s", i->filename);
466 else if (*fmt == 'R')
468 /* Print all that's interesting about a relent. */
469 arelent *relent = (arelent *) args[arg_no].p;
471 fmt++;
472 ++arg_count;
473 lfinfo (fp, "%s+0x%v (type %s)",
474 (*(relent->sym_ptr_ptr))->name,
475 relent->addend,
476 relent->howto->name);
478 else if (*fmt == 'S' || *fmt == 'U')
480 /* Print script file and perhaps the associated linenumber. */
481 etree_type node;
482 etree_type *tp = (etree_type *) args[arg_no].p;
484 fmt++;
485 ++arg_count;
486 if (tp == NULL)
488 tp = &node;
489 tp->type.filename = ldlex_filename ();
490 tp->type.lineno = lineno;
492 if (tp->type.filename != NULL && fmt[-1] == 'S')
493 fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
494 else if (tp->type.filename != NULL && fmt[-1] == 'U')
495 fprintf (fp, "%s", tp->type.filename);
497 else if (*fmt == 'T')
499 /* Symbol name. */
500 const char *name = (const char *) args[arg_no].p;
502 fmt++;
503 ++arg_count;
504 if (name == NULL || *name == 0)
506 fprintf (fp, _("no symbol"));
507 break;
509 else if (demangling)
511 char *demangled;
513 demangled = bfd_demangle (link_info.output_bfd, name,
514 DMGL_ANSI | DMGL_PARAMS);
515 if (demangled != NULL)
517 fprintf (fp, "%s", demangled);
518 free (demangled);
519 break;
522 fprintf (fp, "%s", name);
524 else
526 /* native (host) void* pointer, like printf */
527 fprintf (fp, "%p", args[arg_no].p);
528 ++arg_count;
530 break;
532 case 's':
533 /* arbitrary string, like printf */
534 fprintf (fp, "%s", (char *) args[arg_no].p);
535 ++arg_count;
536 break;
538 case 'd':
539 /* integer, like printf */
540 fprintf (fp, "%d", args[arg_no].i);
541 ++arg_count;
542 break;
544 case 'u':
545 /* unsigned integer, like printf */
546 fprintf (fp, "%u", args[arg_no].i);
547 ++arg_count;
548 break;
550 case 'x':
551 /* unsigned integer, like printf */
552 fprintf (fp, "%x", args[arg_no].i);
553 ++arg_count;
554 break;
556 case 'l':
557 if (*fmt == 'd')
559 fprintf (fp, "%ld", args[arg_no].l);
560 ++arg_count;
561 ++fmt;
562 break;
564 else if (*fmt == 'u')
566 fprintf (fp, "%lu", args[arg_no].l);
567 ++arg_count;
568 ++fmt;
569 break;
571 else if (*fmt == 'x')
573 fprintf (fp, "%lx", args[arg_no].l);
574 ++arg_count;
575 ++fmt;
576 break;
578 /* Fallthru */
580 default:
581 fprintf (fp, "%%%c", fmt[-1]);
582 break;
587 if (is_warning && config.fatal_warnings)
588 config.make_executable = false;
590 if (fatal)
591 xexit (1);
594 /* Format info message and print on stdout. */
596 /* (You would think this should be called just "info", but then you
597 would be hosed by LynxOS, which defines that name in its libc.) */
599 void
600 info_msg (const char *fmt, ...)
602 va_list arg;
604 va_start (arg, fmt);
605 vfinfo (stdout, fmt, arg, false);
606 va_end (arg);
609 /* ('e' for error.) Format info message and print on stderr. */
611 void
612 einfo (const char *fmt, ...)
614 va_list arg;
616 fflush (stdout);
617 va_start (arg, fmt);
618 vfinfo (stderr, fmt, arg, true);
619 va_end (arg);
620 fflush (stderr);
623 void
624 info_assert (const char *file, unsigned int line)
626 einfo (_("%F%P: internal error %s %d\n"), file, line);
629 /* ('m' for map) Format info message and print on map. */
631 void
632 minfo (const char *fmt, ...)
634 if (config.map_file != NULL)
636 va_list arg;
638 va_start (arg, fmt);
639 if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
641 /* Stash info about --as-needed shared libraries. Print
642 later so they don't appear intermingled with archive
643 library info. */
644 struct asneeded_minfo *m = xmalloc (sizeof *m);
646 m->next = NULL;
647 m->soname = va_arg (arg, const char *);
648 m->ref = va_arg (arg, bfd *);
649 m->name = va_arg (arg, const char *);
650 *asneeded_list_tail = m;
651 asneeded_list_tail = &m->next;
653 else
654 vfinfo (config.map_file, fmt, arg, false);
655 va_end (arg);
659 void
660 lfinfo (FILE *file, const char *fmt, ...)
662 va_list arg;
664 va_start (arg, fmt);
665 vfinfo (file, fmt, arg, false);
666 va_end (arg);
669 /* Functions to print the link map. */
671 void
672 print_spaces (int count)
674 fprintf (config.map_file, "%*s", count, "");
677 void
678 print_nl (void)
680 fprintf (config.map_file, "\n");
683 /* A more or less friendly abort message. In ld.h abort is defined to
684 call this function. */
686 void
687 ld_abort (const char *file, int line, const char *fn)
689 if (fn != NULL)
690 einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
691 file, line, fn);
692 else
693 einfo (_("%P: internal error: aborting at %s:%d\n"),
694 file, line);
695 einfo (_("%F%P: please report this bug\n"));
696 xexit (1);