Remove path name from test case
[binutils-gdb.git] / ld / ldmisc.c
1 /* ldmisc.c
2 Copyright (C) 1991-2023 Free Software Foundation, Inc.
3 Written by Steve Chamberlain of Cygnus Support.
4
5 This file is part of the GNU Binutils.
6
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.
11
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.
16
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. */
21
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"
39
40 /*
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
68 */
69
70 void
71 vfinfo (FILE *fp, const char *fmt, va_list ap, bool is_warning)
72 {
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
79 {
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
90 {
91 Bad,
92 Int,
93 Long,
94 Ptr,
95 Vma,
96 RelAddr
97 } type;
98 } args[9];
99
100 if (is_warning && config.no_warnings)
101 return;
102
103 for (arg_no = 0; arg_no < sizeof (args) / sizeof (args[0]); arg_no++)
104 args[arg_no].type = Bad;
105
106 arg_count = 0;
107 scan = fmt;
108 while (*scan != '\0')
109 {
110 while (*scan != '%' && *scan != '\0')
111 scan++;
112
113 if (*scan == '%')
114 {
115 scan++;
116
117 arg_no = arg_count;
118 if (*scan != '0' && ISDIGIT (*scan) && scan[1] == '$')
119 {
120 arg_no = *scan - '1';
121 scan += 2;
122 }
123
124 arg_type = Bad;
125 switch (*scan++)
126 {
127 case '\0':
128 --scan;
129 break;
130
131 case 'V':
132 case 'v':
133 case 'W':
134 arg_type = Vma;
135 break;
136
137 case 's':
138 arg_type = Ptr;
139 break;
140
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;
147
148 case 'C':
149 case 'D':
150 case 'G':
151 case 'H':
152 arg_type = RelAddr;
153 break;
154
155 case 'd':
156 case 'u':
157 case 'x':
158 arg_type = Int;
159 break;
160
161 case 'l':
162 if (*scan == 'd' || *scan == 'u' || *scan == 'x')
163 {
164 ++scan;
165 arg_type = Long;
166 }
167 break;
168
169 default:
170 break;
171 }
172 if (arg_type != Bad)
173 {
174 if (arg_no >= sizeof (args) / sizeof (args[0]))
175 abort ();
176 args[arg_no].type = arg_type;
177 ++arg_count;
178 }
179 }
180 }
181
182 for (arg_no = 0; arg_no < arg_count; arg_no++)
183 {
184 switch (args[arg_no].type)
185 {
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 ();
205 }
206 }
207
208 arg_count = 0;
209 while (*fmt != '\0')
210 {
211 const char *str = fmt;
212 while (*fmt != '%' && *fmt != '\0')
213 fmt++;
214 if (fmt != str)
215 if (fwrite (str, 1, fmt - str, fp))
216 {
217 /* Ignore. */
218 }
219
220 if (*fmt == '%')
221 {
222 fmt++;
223
224 arg_no = arg_count;
225 if (*fmt != '0' && ISDIGIT (*fmt) && fmt[1] == '$')
226 {
227 arg_no = *fmt - '1';
228 fmt += 2;
229 }
230
231 switch (*fmt++)
232 {
233 case '\0':
234 --fmt;
235 /* Fall through. */
236
237 case '%':
238 /* literal % */
239 putc ('%', fp);
240 break;
241
242 case 'X':
243 /* no object output, fail return */
244 config.make_executable = false;
245 break;
246
247 case 'V':
248 /* hex bfd_vma */
249 {
250 char buf[32];
251 bfd_vma value;
252
253 value = args[arg_no].v;
254 ++arg_count;
255 bfd_sprintf_vma (link_info.output_bfd, buf, value);
256 fprintf (fp, "%s", buf);
257 }
258 break;
259
260 case 'v':
261 /* hex bfd_vma, no leading zeros */
262 {
263 uint64_t value = args[arg_no].v;
264 ++arg_count;
265 fprintf (fp, "%" PRIx64, value);
266 }
267 break;
268
269 case 'W':
270 /* hex bfd_vma with 0x with no leading zeroes taking up
271 10 spaces (including the 0x). */
272 {
273 char buf[32];
274 uint64_t value;
275
276 value = args[arg_no].v;
277 ++arg_count;
278 sprintf (buf, "0x%" PRIx64, value);
279 fprintf (fp, "%10s", buf);
280 }
281 break;
282
283 case 'F':
284 /* Error is fatal. */
285 fatal = true;
286 break;
287
288 case 'P':
289 /* Print program name. */
290 fprintf (fp, "%s", program_name);
291 break;
292
293 case 'E':
294 /* current bfd error or errno */
295 fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
296 break;
297
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. */
304 {
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 ();
318
319 abfd = args[arg_no].reladdr.abfd;
320 section = args[arg_no].reladdr.sec;
321 offset = args[arg_no].reladdr.off;
322 ++arg_count;
323
324 if (abfd != NULL)
325 {
326 if (!bfd_generic_link_read_symbols (abfd))
327 einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd);
328
329 asymbols = bfd_get_outsymbols (abfd);
330 }
331
332 /* The GNU Coding Standard requires that error messages
333 be of the form:
334
335 source-file-name:lineno: message
336
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))
345 {
346 if (functionname != NULL
347 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
348 {
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)
365 {
366 lfinfo (fp, _("%pB: in function `%pT':\n"),
367 abfd, functionname);
368
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);
376 }
377 discard_last = false;
378 }
379 else
380 lfinfo (fp, "%pB:", abfd);
381
382 if (filename != NULL)
383 fprintf (fp, "%s:", filename);
384
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;
392 }
393 else
394 {
395 lfinfo (fp, "%pB:", abfd);
396 done = false;
397 }
398 if (!done)
399 lfinfo (fp, "(%pA+0x%v)", section, offset);
400 bfd_set_error (last_bfd_error);
401
402 if (discard_last)
403 {
404 last_bfd = NULL;
405 free (last_file);
406 last_file = NULL;
407 free (last_function);
408 last_function = NULL;
409 }
410 }
411 break;
412
413 case 'p':
414 if (*fmt == 'A')
415 {
416 /* section name from a section */
417 asection *sec;
418 bfd *abfd;
419
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)
426 {
427 const char *group = bfd_group_name (abfd, sec);
428 if (group != NULL)
429 fprintf (fp, "[%s]", group);
430 }
431 }
432 else if (*fmt == 'B')
433 {
434 /* filename from a bfd */
435 bfd *abfd = (bfd *) args[arg_no].p;
436
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));
448 }
449 else if (*fmt == 'I')
450 {
451 /* filename from a lang_input_statement_type */
452 lang_input_statement_type *i;
453
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);
465 }
466 else if (*fmt == 'R')
467 {
468 /* Print all that's interesting about a relent. */
469 arelent *relent = (arelent *) args[arg_no].p;
470
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);
477 }
478 else if (*fmt == 'S' || *fmt == 'U')
479 {
480 /* Print script file and perhaps the associated linenumber. */
481 etree_type node;
482 etree_type *tp = (etree_type *) args[arg_no].p;
483
484 fmt++;
485 ++arg_count;
486 if (tp == NULL)
487 {
488 tp = &node;
489 tp->type.filename = ldlex_filename ();
490 tp->type.lineno = lineno;
491 }
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);
496 }
497 else if (*fmt == 'T')
498 {
499 /* Symbol name. */
500 const char *name = (const char *) args[arg_no].p;
501
502 fmt++;
503 ++arg_count;
504 if (name == NULL || *name == 0)
505 {
506 fprintf (fp, _("no symbol"));
507 break;
508 }
509 else if (demangling)
510 {
511 char *demangled;
512
513 demangled = bfd_demangle (link_info.output_bfd, name,
514 DMGL_ANSI | DMGL_PARAMS);
515 if (demangled != NULL)
516 {
517 fprintf (fp, "%s", demangled);
518 free (demangled);
519 break;
520 }
521 }
522 fprintf (fp, "%s", name);
523 }
524 else
525 {
526 /* native (host) void* pointer, like printf */
527 fprintf (fp, "%p", args[arg_no].p);
528 ++arg_count;
529 }
530 break;
531
532 case 's':
533 /* arbitrary string, like printf */
534 fprintf (fp, "%s", (char *) args[arg_no].p);
535 ++arg_count;
536 break;
537
538 case 'd':
539 /* integer, like printf */
540 fprintf (fp, "%d", args[arg_no].i);
541 ++arg_count;
542 break;
543
544 case 'u':
545 /* unsigned integer, like printf */
546 fprintf (fp, "%u", args[arg_no].i);
547 ++arg_count;
548 break;
549
550 case 'x':
551 /* unsigned integer, like printf */
552 fprintf (fp, "%x", args[arg_no].i);
553 ++arg_count;
554 break;
555
556 case 'l':
557 if (*fmt == 'd')
558 {
559 fprintf (fp, "%ld", args[arg_no].l);
560 ++arg_count;
561 ++fmt;
562 break;
563 }
564 else if (*fmt == 'u')
565 {
566 fprintf (fp, "%lu", args[arg_no].l);
567 ++arg_count;
568 ++fmt;
569 break;
570 }
571 else if (*fmt == 'x')
572 {
573 fprintf (fp, "%lx", args[arg_no].l);
574 ++arg_count;
575 ++fmt;
576 break;
577 }
578 /* Fallthru */
579
580 default:
581 fprintf (fp, "%%%c", fmt[-1]);
582 break;
583 }
584 }
585 }
586
587 if (is_warning && config.fatal_warnings)
588 config.make_executable = false;
589
590 if (fatal)
591 xexit (1);
592 }
593
594 /* Format info message and print on stdout. */
595
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.) */
598
599 void
600 info_msg (const char *fmt, ...)
601 {
602 va_list arg;
603
604 va_start (arg, fmt);
605 vfinfo (stdout, fmt, arg, false);
606 va_end (arg);
607 }
608
609 /* ('e' for error.) Format info message and print on stderr. */
610
611 void
612 einfo (const char *fmt, ...)
613 {
614 va_list arg;
615
616 fflush (stdout);
617 va_start (arg, fmt);
618 vfinfo (stderr, fmt, arg, true);
619 va_end (arg);
620 fflush (stderr);
621 }
622
623 void
624 info_assert (const char *file, unsigned int line)
625 {
626 einfo (_("%F%P: internal error %s %d\n"), file, line);
627 }
628
629 /* ('m' for map) Format info message and print on map. */
630
631 void
632 minfo (const char *fmt, ...)
633 {
634 if (config.map_file != NULL)
635 {
636 va_list arg;
637
638 va_start (arg, fmt);
639 if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
640 {
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);
645
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;
652 }
653 else
654 vfinfo (config.map_file, fmt, arg, false);
655 va_end (arg);
656 }
657 }
658
659 void
660 lfinfo (FILE *file, const char *fmt, ...)
661 {
662 va_list arg;
663
664 va_start (arg, fmt);
665 vfinfo (file, fmt, arg, false);
666 va_end (arg);
667 }
668 \f
669 /* Functions to print the link map. */
670
671 void
672 print_spaces (int count)
673 {
674 fprintf (config.map_file, "%*s", count, "");
675 }
676
677 void
678 print_nl (void)
679 {
680 fprintf (config.map_file, "\n");
681 }
682
683 /* A more or less friendly abort message. In ld.h abort is defined to
684 call this function. */
685
686 void
687 ld_abort (const char *file, int line, const char *fn)
688 {
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);
697 }