Update copyright year in version message for gdb, gdbserver and gdbreplay
[deliverable/binutils-gdb.git] / ld / ldmisc.c
CommitLineData
252b5132 1/* ldmisc.c
250d07de 2 Copyright (C) 1991-2021 Free Software Foundation, Inc.
252b5132
RH
3 Written by Steve Chamberlain of Cygnus Support.
4
f96b4a7b 5 This file is part of the GNU Binutils.
252b5132 6
f96b4a7b 7 This program is free software; you can redistribute it and/or modify
5ed6aba4 8 it under the terms of the GNU General Public License as published by
f96b4a7b
NC
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
252b5132 11
f96b4a7b 12 This program is distributed in the hope that it will be useful,
5ed6aba4
NC
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.
252b5132 16
5ed6aba4 17 You should have received a copy of the GNU General Public License
f96b4a7b
NC
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. */
252b5132 21
3db64b00 22#include "sysdep.h"
252b5132 23#include "bfd.h"
6f6f27f8 24#include "bfdlink.h"
252b5132 25#include "libiberty.h"
1ff6de03 26#include "ctf-api.h"
99847db8 27#include "safe-ctype.h"
42627821 28#include "filenames.h"
252b5132 29#include "demangle.h"
252b5132 30#include <stdarg.h>
252b5132
RH
31#include "ld.h"
32#include "ldmisc.h"
33#include "ldexp.h"
34#include "ldlang.h"
df2a7313 35#include <ldgram.h>
252b5132
RH
36#include "ldlex.h"
37#include "ldmain.h"
38#include "ldfile.h"
39
252b5132
RH
40/*
41 %% literal %
d003868e
AM
42 %C clever filename:linenumber with function
43 %D like %C, but no function name
44 %E current bfd error or errno
252b5132 45 %F error is fatal
d003868e 46 %G like %D, but only function name
270396f2 47 %H like %C but in addition emit section+offset
252b5132 48 %P print program name
252b5132 49 %V hex bfd_vma
252b5132 50 %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
d003868e 51 %X no object output, fail return
252b5132 52 %d integer, like printf
94b50910
AM
53 %ld long, like printf
54 %lu unsigned long, like printf
5d3236ee 55 %p native (host) void* pointer, like printf
871b3ab2
AM
56 %pA section name from a section
57 %pB filename from a bfd
c1c8c1ef
AM
58 %pI filename from a lang_input_statement_type
59 %pR info about a relent
60 %pS print script file and linenumber from etree_type.
61 %pT symbol name
87870682 62 %pU print script file without linenumber from etree_type.
d003868e 63 %s arbitrary string, like printf
252b5132 64 %u integer, like printf
d003868e 65 %v hex bfd_vma, no leading zeros
252b5132
RH
66*/
67
5d3236ee 68void
99847db8 69vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
252b5132 70{
b34976b6 71 bfd_boolean fatal = FALSE;
99847db8
AM
72 const char *scan;
73 int arg_type;
74 unsigned int arg_count = 0;
75 unsigned int arg_no;
76 union vfinfo_args
77 {
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
88 {
89 Bad,
90 Int,
91 Long,
92 Ptr,
93 Vma,
94 RelAddr
95 } type;
96 } args[9];
97
98 for (arg_no = 0; arg_no < sizeof (args) / sizeof (args[0]); arg_no++)
99 args[arg_no].type = Bad;
100
101 arg_count = 0;
102 scan = fmt;
103 while (*scan != '\0')
104 {
105 while (*scan != '%' && *scan != '\0')
106 scan++;
107
108 if (*scan == '%')
109 {
110 scan++;
111
112 arg_no = arg_count;
113 if (*scan != '0' && ISDIGIT (*scan) && scan[1] == '$')
114 {
115 arg_no = *scan - '1';
116 scan += 2;
117 }
118
119 arg_type = Bad;
120 switch (*scan++)
121 {
122 case '\0':
123 --scan;
124 break;
125
126 case 'V':
127 case 'v':
128 case 'W':
129 arg_type = Vma;
130 break;
131
99847db8
AM
132 case 's':
133 arg_type = Ptr;
134 break;
135
871b3ab2 136 case 'p':
c1c8c1ef
AM
137 if (*scan == 'A' || *scan == 'B' || *scan == 'I'
138 || *scan == 'R' || *scan == 'S' || *scan == 'T')
871b3ab2
AM
139 scan++;
140 arg_type = Ptr;
141 break;
142
99847db8
AM
143 case 'C':
144 case 'D':
145 case 'G':
146 case 'H':
147 arg_type = RelAddr;
148 break;
149
150 case 'd':
151 case 'u':
152 arg_type = Int;
153 break;
154
155 case 'l':
156 if (*scan == 'd' || *scan == 'u')
157 {
158 ++scan;
159 arg_type = Long;
160 }
161 break;
162
163 default:
164 break;
165 }
166 if (arg_type != Bad)
167 {
168 if (arg_no >= sizeof (args) / sizeof (args[0]))
169 abort ();
170 args[arg_no].type = arg_type;
171 ++arg_count;
172 }
173 }
174 }
252b5132 175
99847db8
AM
176 for (arg_no = 0; arg_no < arg_count; arg_no++)
177 {
178 switch (args[arg_no].type)
179 {
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 ();
199 }
200 }
201
202 arg_count = 0;
252b5132
RH
203 while (*fmt != '\0')
204 {
23916fff 205 const char *str = fmt;
6d5e62f8 206 while (*fmt != '%' && *fmt != '\0')
23916fff
MF
207 fmt++;
208 if (fmt != str)
209 if (fwrite (str, 1, fmt - str, fp))
210 {
211 /* Ignore. */
212 }
252b5132 213
6d5e62f8 214 if (*fmt == '%')
252b5132 215 {
6d5e62f8 216 fmt++;
99847db8
AM
217
218 arg_no = arg_count;
219 if (*fmt != '0' && ISDIGIT (*fmt) && fmt[1] == '$')
220 {
221 arg_no = *fmt - '1';
222 fmt += 2;
223 }
224
6d5e62f8 225 switch (*fmt++)
252b5132 226 {
99847db8
AM
227 case '\0':
228 --fmt;
229 /* Fall through. */
230
252b5132
RH
231 case '%':
232 /* literal % */
233 putc ('%', fp);
234 break;
235
236 case 'X':
237 /* no object output, fail return */
b34976b6 238 config.make_executable = FALSE;
252b5132
RH
239 break;
240
241 case 'V':
242 /* hex bfd_vma */
243 {
99847db8
AM
244 bfd_vma value = args[arg_no].v;
245 ++arg_count;
252b5132
RH
246 fprintf_vma (fp, value);
247 }
248 break;
249
250 case 'v':
251 /* hex bfd_vma, no leading zeros */
252 {
253 char buf[100];
254 char *p = buf;
99847db8
AM
255 bfd_vma value = args[arg_no].v;
256 ++arg_count;
252b5132
RH
257 sprintf_vma (p, value);
258 while (*p == '0')
259 p++;
260 if (!*p)
261 p--;
262 fputs (p, fp);
263 }
264 break;
265
266 case 'W':
267 /* hex bfd_vma with 0x with no leading zeroes taking up
1579bae1 268 8 spaces. */
252b5132
RH
269 {
270 char buf[100];
271 bfd_vma value;
272 char *p;
273 int len;
274
99847db8
AM
275 value = args[arg_no].v;
276 ++arg_count;
252b5132
RH
277 sprintf_vma (buf, value);
278 for (p = buf; *p == '0'; ++p)
279 ;
280 if (*p == '\0')
281 --p;
282 len = strlen (p);
283 while (len < 8)
284 {
285 putc (' ', fp);
286 ++len;
287 }
288 fprintf (fp, "0x%s", p);
289 }
290 break;
291
252b5132 292 case 'F':
6d5e62f8 293 /* Error is fatal. */
b34976b6 294 fatal = TRUE;
252b5132
RH
295 break;
296
297 case 'P':
6d5e62f8 298 /* Print program name. */
252b5132
RH
299 fprintf (fp, "%s", program_name);
300 break;
301
302 case 'E':
303 /* current bfd error or errno */
305c7206 304 fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
252b5132
RH
305 break;
306
252b5132
RH
307 case 'C':
308 case 'D':
309 case 'G':
270396f2 310 case 'H':
5cfb2bb2
AM
311 /* Clever filename:linenumber with function name if possible.
312 The arguments are a BFD, a section, and an offset. */
252b5132
RH
313 {
314 static bfd *last_bfd;
befe814d
MR
315 static char *last_file;
316 static char *last_function;
252b5132
RH
317 bfd *abfd;
318 asection *section;
319 bfd_vma offset;
5c1d2f5f 320 asymbol **asymbols = NULL;
252b5132
RH
321 const char *filename;
322 const char *functionname;
323 unsigned int linenumber;
b34976b6 324 bfd_boolean discard_last;
270396f2 325 bfd_boolean done;
847d5183 326 bfd_error_type last_bfd_error = bfd_get_error ();
252b5132 327
99847db8
AM
328 abfd = args[arg_no].reladdr.abfd;
329 section = args[arg_no].reladdr.sec;
330 offset = args[arg_no].reladdr.off;
331 ++arg_count;
252b5132 332
5c1d2f5f 333 if (abfd != NULL)
252b5132 334 {
5c1d2f5f 335 if (!bfd_generic_link_read_symbols (abfd))
df5f2391 336 einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd);
5c1d2f5f
AM
337
338 asymbols = bfd_get_outsymbols (abfd);
252b5132
RH
339 }
340
e1fffbe6
AM
341 /* The GNU Coding Standard requires that error messages
342 be of the form:
e4492aa0 343
98d87ee7 344 source-file-name:lineno: message
5cfb2bb2 345
e1fffbe6
AM
346 We do not always have a line number available so if
347 we cannot find them we print out the section name and
270396f2 348 offset instead. */
b34976b6 349 discard_last = TRUE;
e1fffbe6
AM
350 if (abfd != NULL
351 && bfd_find_nearest_line (abfd, section, asymbols, offset,
352 &filename, &functionname,
353 &linenumber))
252b5132 354 {
270396f2
AM
355 if (functionname != NULL
356 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
5cfb2bb2 357 {
e1fffbe6
AM
358 /* Detect the case where we are printing out a
359 message for the same function as the last
360 call to vinfo ("%C"). In this situation do
361 not print out the ABFD filename or the
362 function name again. Note - we do still
363 print out the source filename, as this will
364 allow programs that parse the linker's output
365 (eg emacs) to correctly locate multiple
366 errors in the same source file. */
252b5132 367 if (last_bfd == NULL
252b5132
RH
368 || last_function == NULL
369 || last_bfd != abfd
ebf0b03c 370 || (last_file == NULL) != (filename == NULL)
5cfb2bb2 371 || (filename != NULL
42627821 372 && filename_cmp (last_file, filename) != 0)
252b5132
RH
373 || strcmp (last_function, functionname) != 0)
374 {
df5f2391 375 lfinfo (fp, _("%pB: in function `%pT':\n"),
98d87ee7 376 abfd, functionname);
252b5132
RH
377
378 last_bfd = abfd;
5e2ab612 379 free (last_file);
5cfb2bb2
AM
380 last_file = NULL;
381 if (filename)
382 last_file = xstrdup (filename);
5e2ab612 383 free (last_function);
d1b2b2dc 384 last_function = xstrdup (functionname);
252b5132 385 }
b34976b6 386 discard_last = FALSE;
252b5132 387 }
98d87ee7 388 else
871b3ab2 389 lfinfo (fp, "%pB:", abfd);
5cfb2bb2
AM
390
391 if (filename != NULL)
a1c16379 392 fprintf (fp, "%s:", filename);
5cfb2bb2 393
270396f2 394 done = fmt[-1] != 'H';
5cfb2bb2 395 if (functionname != NULL && fmt[-1] == 'G')
c1c8c1ef 396 lfinfo (fp, "%pT", functionname);
a1c16379 397 else if (filename != NULL && linenumber != 0)
18ff9b9b 398 fprintf (fp, "%u%s", linenumber, done ? "" : ":");
a1c16379 399 else
270396f2 400 done = FALSE;
252b5132 401 }
98d87ee7 402 else
270396f2 403 {
871b3ab2 404 lfinfo (fp, "%pB:", abfd);
270396f2
AM
405 done = FALSE;
406 }
407 if (!done)
871b3ab2 408 lfinfo (fp, "(%pA+0x%v)", section, offset);
847d5183 409 bfd_set_error (last_bfd_error);
252b5132
RH
410
411 if (discard_last)
412 {
413 last_bfd = NULL;
5e2ab612
AM
414 free (last_file);
415 last_file = NULL;
416 free (last_function);
417 last_function = NULL;
252b5132
RH
418 }
419 }
420 break;
6d5e62f8 421
5d3236ee 422 case 'p':
871b3ab2
AM
423 if (*fmt == 'A')
424 {
425 /* section name from a section */
426 asection *sec;
427 bfd *abfd;
871b3ab2
AM
428
429 fmt++;
430 sec = (asection *) args[arg_no].p;
431 ++arg_count;
871b3ab2 432 fprintf (fp, "%s", sec->name);
cb7f4b29
AM
433 abfd = sec->owner;
434 if (abfd != NULL)
435 {
436 const char *group = bfd_group_name (abfd, sec);
437 if (group != NULL)
438 fprintf (fp, "[%s]", group);
439 }
871b3ab2
AM
440 }
441 else if (*fmt == 'B')
442 {
443 /* filename from a bfd */
444 bfd *abfd = (bfd *) args[arg_no].p;
445
446 fmt++;
447 ++arg_count;
448 if (abfd == NULL)
449 fprintf (fp, "%s generated", program_name);
450 else if (abfd->my_archive != NULL
451 && !bfd_is_thin_archive (abfd->my_archive))
607b4833
AM
452 fprintf (fp, "%s(%s)",
453 bfd_get_filename (abfd->my_archive),
454 bfd_get_filename (abfd));
871b3ab2 455 else
607b4833 456 fprintf (fp, "%s", bfd_get_filename (abfd));
871b3ab2 457 }
c1c8c1ef
AM
458 else if (*fmt == 'I')
459 {
460 /* filename from a lang_input_statement_type */
461 lang_input_statement_type *i;
462
463 fmt++;
464 i = (lang_input_statement_type *) args[arg_no].p;
465 ++arg_count;
727a29ba
AM
466 if (i->the_bfd != NULL
467 && i->the_bfd->my_archive != NULL
c1c8c1ef 468 && !bfd_is_thin_archive (i->the_bfd->my_archive))
607b4833
AM
469 fprintf (fp, "(%s)%s",
470 bfd_get_filename (i->the_bfd->my_archive),
727a29ba
AM
471 i->local_sym_name);
472 else
473 fprintf (fp, "%s", i->filename);
c1c8c1ef
AM
474 }
475 else if (*fmt == 'R')
476 {
477 /* Print all that's interesting about a relent. */
478 arelent *relent = (arelent *) args[arg_no].p;
479
480 fmt++;
481 ++arg_count;
482 lfinfo (fp, "%s+0x%v (type %s)",
483 (*(relent->sym_ptr_ptr))->name,
484 relent->addend,
485 relent->howto->name);
486 }
87870682 487 else if (*fmt == 'S' || *fmt == 'U')
c1c8c1ef 488 {
87870682 489 /* Print script file and perhaps the associated linenumber. */
c1c8c1ef
AM
490 etree_type node;
491 etree_type *tp = (etree_type *) args[arg_no].p;
492
493 fmt++;
494 ++arg_count;
495 if (tp == NULL)
496 {
497 tp = &node;
498 tp->type.filename = ldlex_filename ();
499 tp->type.lineno = lineno;
500 }
87870682 501 if (tp->type.filename != NULL && fmt[-1] == 'S')
c1c8c1ef 502 fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
87870682
JL
503 else if (tp->type.filename != NULL && fmt[-1] == 'U')
504 fprintf (fp, "%s", tp->type.filename);
c1c8c1ef
AM
505 }
506 else if (*fmt == 'T')
507 {
508 /* Symbol name. */
509 const char *name = (const char *) args[arg_no].p;
510
511 fmt++;
512 ++arg_count;
513 if (name == NULL || *name == 0)
514 {
515 fprintf (fp, _("no symbol"));
516 break;
517 }
518 else if (demangling)
519 {
520 char *demangled;
521
522 demangled = bfd_demangle (link_info.output_bfd, name,
523 DMGL_ANSI | DMGL_PARAMS);
524 if (demangled != NULL)
525 {
526 fprintf (fp, "%s", demangled);
527 free (demangled);
528 break;
529 }
530 }
531 fprintf (fp, "%s", name);
532 }
871b3ab2
AM
533 else
534 {
535 /* native (host) void* pointer, like printf */
536 fprintf (fp, "%p", args[arg_no].p);
537 ++arg_count;
538 }
5d3236ee
DK
539 break;
540
252b5132
RH
541 case 's':
542 /* arbitrary string, like printf */
99847db8
AM
543 fprintf (fp, "%s", (char *) args[arg_no].p);
544 ++arg_count;
252b5132
RH
545 break;
546
547 case 'd':
548 /* integer, like printf */
99847db8
AM
549 fprintf (fp, "%d", args[arg_no].i);
550 ++arg_count;
252b5132
RH
551 break;
552
553 case 'u':
554 /* unsigned integer, like printf */
99847db8
AM
555 fprintf (fp, "%u", args[arg_no].i);
556 ++arg_count;
252b5132 557 break;
94b50910
AM
558
559 case 'l':
560 if (*fmt == 'd')
561 {
99847db8
AM
562 fprintf (fp, "%ld", args[arg_no].l);
563 ++arg_count;
94b50910
AM
564 ++fmt;
565 break;
566 }
567 else if (*fmt == 'u')
568 {
99847db8
AM
569 fprintf (fp, "%lu", args[arg_no].l);
570 ++arg_count;
94b50910
AM
571 ++fmt;
572 break;
573 }
370dfff4 574 /* Fallthru */
94b50910
AM
575
576 default:
577 fprintf (fp, "%%%c", fmt[-1]);
578 break;
252b5132
RH
579 }
580 }
581 }
582
59ef2528 583 if (is_warning && config.fatal_warnings)
b34976b6 584 config.make_executable = FALSE;
7ce691ae 585
b34976b6 586 if (fatal)
6d5e62f8 587 xexit (1);
252b5132
RH
588}
589
6d5e62f8 590/* Format info message and print on stdout. */
252b5132
RH
591
592/* (You would think this should be called just "info", but then you
1579bae1 593 would be hosed by LynxOS, which defines that name in its libc.) */
252b5132
RH
594
595void
1579bae1 596info_msg (const char *fmt, ...)
252b5132 597{
1579bae1 598 va_list arg;
252b5132 599
1579bae1 600 va_start (arg, fmt);
59ef2528 601 vfinfo (stdout, fmt, arg, FALSE);
1579bae1 602 va_end (arg);
252b5132
RH
603}
604
6d5e62f8 605/* ('e' for error.) Format info message and print on stderr. */
252b5132
RH
606
607void
1579bae1 608einfo (const char *fmt, ...)
252b5132 609{
1579bae1 610 va_list arg;
252b5132 611
e922bcab 612 fflush (stdout);
1579bae1 613 va_start (arg, fmt);
59ef2528 614 vfinfo (stderr, fmt, arg, TRUE);
1579bae1 615 va_end (arg);
e922bcab 616 fflush (stderr);
252b5132
RH
617}
618
6d5e62f8 619void
1579bae1 620info_assert (const char *file, unsigned int line)
252b5132
RH
621{
622 einfo (_("%F%P: internal error %s %d\n"), file, line);
623}
624
6d5e62f8 625/* ('m' for map) Format info message and print on map. */
252b5132
RH
626
627void
1579bae1 628minfo (const char *fmt, ...)
252b5132 629{
49fa1e15
AM
630 if (config.map_file != NULL)
631 {
632 va_list arg;
252b5132 633
49fa1e15 634 va_start (arg, fmt);
16e4ecc0
AM
635 if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
636 {
637 /* Stash info about --as-needed shared libraries. Print
638 later so they don't appear intermingled with archive
639 library info. */
640 struct asneeded_minfo *m = xmalloc (sizeof *m);
641
642 m->next = NULL;
643 m->soname = va_arg (arg, const char *);
644 m->ref = va_arg (arg, bfd *);
645 m->name = va_arg (arg, const char *);
646 *asneeded_list_tail = m;
647 asneeded_list_tail = &m->next;
648 }
649 else
650 vfinfo (config.map_file, fmt, arg, FALSE);
49fa1e15
AM
651 va_end (arg);
652 }
252b5132
RH
653}
654
655void
1579bae1 656lfinfo (FILE *file, const char *fmt, ...)
252b5132 657{
1579bae1 658 va_list arg;
252b5132 659
1579bae1 660 va_start (arg, fmt);
59ef2528 661 vfinfo (file, fmt, arg, FALSE);
1579bae1 662 va_end (arg);
252b5132
RH
663}
664\f
665/* Functions to print the link map. */
666
6d5e62f8 667void
1579bae1 668print_space (void)
252b5132
RH
669{
670 fprintf (config.map_file, " ");
671}
672
6d5e62f8 673void
1579bae1 674print_nl (void)
252b5132
RH
675{
676 fprintf (config.map_file, "\n");
677}
45455cdd
ILT
678
679/* A more or less friendly abort message. In ld.h abort is defined to
680 call this function. */
681
682void
1579bae1 683ld_abort (const char *file, int line, const char *fn)
45455cdd
ILT
684{
685 if (fn != NULL)
7ac01895 686 einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
45455cdd
ILT
687 file, line, fn);
688 else
7ac01895 689 einfo (_("%P: internal error: aborting at %s:%d\n"),
45455cdd 690 file, line);
df5f2391 691 einfo (_("%F%P: please report this bug\n"));
45455cdd
ILT
692 xexit (1);
693}
This page took 0.924622 seconds and 4 git commands to generate.