Automatic date update in version.in
[deliverable/binutils-gdb.git] / ld / ldmisc.c
CommitLineData
252b5132 1/* ldmisc.c
219d1afa 2 Copyright (C) 1991-2018 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"
99847db8 26#include "safe-ctype.h"
42627821 27#include "filenames.h"
252b5132 28#include "demangle.h"
252b5132 29#include <stdarg.h>
252b5132
RH
30#include "ld.h"
31#include "ldmisc.h"
32#include "ldexp.h"
33#include "ldlang.h"
df2a7313 34#include <ldgram.h>
252b5132
RH
35#include "ldlex.h"
36#include "ldmain.h"
37#include "ldfile.h"
d003868e 38#include "elf-bfd.h"
f4943d82 39#include "coff-bfd.h"
252b5132 40
252b5132
RH
41/*
42 %% literal %
d003868e
AM
43 %C clever filename:linenumber with function
44 %D like %C, but no function name
45 %E current bfd error or errno
252b5132 46 %F error is fatal
d003868e 47 %G like %D, but only function name
270396f2 48 %H like %C but in addition emit section+offset
252b5132 49 %P print program name
252b5132 50 %V hex bfd_vma
252b5132 51 %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
d003868e 52 %X no object output, fail return
252b5132 53 %d integer, like printf
94b50910
AM
54 %ld long, like printf
55 %lu unsigned long, like printf
5d3236ee 56 %p native (host) void* pointer, like printf
871b3ab2
AM
57 %pA section name from a section
58 %pB filename from a bfd
c1c8c1ef
AM
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
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;
252b5132 326
99847db8
AM
327 abfd = args[arg_no].reladdr.abfd;
328 section = args[arg_no].reladdr.sec;
329 offset = args[arg_no].reladdr.off;
330 ++arg_count;
252b5132 331
5c1d2f5f 332 if (abfd != NULL)
252b5132 333 {
5c1d2f5f 334 if (!bfd_generic_link_read_symbols (abfd))
df5f2391 335 einfo (_("%F%P: %pB: could not read symbols: %E\n"), abfd);
5c1d2f5f
AM
336
337 asymbols = bfd_get_outsymbols (abfd);
252b5132
RH
338 }
339
e1fffbe6
AM
340 /* The GNU Coding Standard requires that error messages
341 be of the form:
e4492aa0 342
98d87ee7 343 source-file-name:lineno: message
5cfb2bb2 344
e1fffbe6
AM
345 We do not always have a line number available so if
346 we cannot find them we print out the section name and
270396f2 347 offset instead. */
b34976b6 348 discard_last = TRUE;
e1fffbe6
AM
349 if (abfd != NULL
350 && bfd_find_nearest_line (abfd, section, asymbols, offset,
351 &filename, &functionname,
352 &linenumber))
252b5132 353 {
270396f2
AM
354 if (functionname != NULL
355 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
5cfb2bb2 356 {
e1fffbe6
AM
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. */
252b5132 366 if (last_bfd == NULL
252b5132
RH
367 || last_function == NULL
368 || last_bfd != abfd
ebf0b03c 369 || (last_file == NULL) != (filename == NULL)
5cfb2bb2 370 || (filename != NULL
42627821 371 && filename_cmp (last_file, filename) != 0)
252b5132
RH
372 || strcmp (last_function, functionname) != 0)
373 {
df5f2391 374 lfinfo (fp, _("%pB: in function `%pT':\n"),
98d87ee7 375 abfd, functionname);
252b5132
RH
376
377 last_bfd = abfd;
378 if (last_file != NULL)
379 free (last_file);
5cfb2bb2
AM
380 last_file = NULL;
381 if (filename)
382 last_file = xstrdup (filename);
252b5132
RH
383 if (last_function != NULL)
384 free (last_function);
d1b2b2dc 385 last_function = xstrdup (functionname);
252b5132 386 }
b34976b6 387 discard_last = FALSE;
252b5132 388 }
98d87ee7 389 else
871b3ab2 390 lfinfo (fp, "%pB:", abfd);
5cfb2bb2
AM
391
392 if (filename != NULL)
a1c16379 393 fprintf (fp, "%s:", filename);
5cfb2bb2 394
270396f2 395 done = fmt[-1] != 'H';
5cfb2bb2 396 if (functionname != NULL && fmt[-1] == 'G')
c1c8c1ef 397 lfinfo (fp, "%pT", functionname);
a1c16379 398 else if (filename != NULL && linenumber != 0)
18ff9b9b 399 fprintf (fp, "%u%s", linenumber, done ? "" : ":");
a1c16379 400 else
270396f2 401 done = FALSE;
252b5132 402 }
98d87ee7 403 else
270396f2 404 {
871b3ab2 405 lfinfo (fp, "%pB:", abfd);
270396f2
AM
406 done = FALSE;
407 }
408 if (!done)
871b3ab2 409 lfinfo (fp, "(%pA+0x%v)", section, offset);
252b5132
RH
410
411 if (discard_last)
412 {
413 last_bfd = NULL;
414 if (last_file != NULL)
415 {
416 free (last_file);
417 last_file = NULL;
418 }
419 if (last_function != NULL)
420 {
421 free (last_function);
422 last_function = NULL;
423 }
424 }
425 }
426 break;
6d5e62f8 427
5d3236ee 428 case 'p':
871b3ab2
AM
429 if (*fmt == 'A')
430 {
431 /* section name from a section */
432 asection *sec;
433 bfd *abfd;
434 const char *group = NULL;
435 struct coff_comdat_info *ci;
436
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);
454 }
455 else if (*fmt == 'B')
456 {
457 /* filename from a bfd */
458 bfd *abfd = (bfd *) args[arg_no].p;
459
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);
470 }
c1c8c1ef
AM
471 else if (*fmt == 'I')
472 {
473 /* filename from a lang_input_statement_type */
474 lang_input_statement_type *i;
475
476 fmt++;
477 i = (lang_input_statement_type *) args[arg_no].p;
478 ++arg_count;
479 if (i->the_bfd->my_archive != NULL
480 && !bfd_is_thin_archive (i->the_bfd->my_archive))
481 fprintf (fp, "(%s)",
482 bfd_get_filename (i->the_bfd->my_archive));
483 fprintf (fp, "%s", i->local_sym_name);
484 if ((i->the_bfd->my_archive == NULL
485 || bfd_is_thin_archive (i->the_bfd->my_archive))
486 && filename_cmp (i->local_sym_name, i->filename) != 0)
487 fprintf (fp, " (%s)", i->filename);
488 }
489 else if (*fmt == 'R')
490 {
491 /* Print all that's interesting about a relent. */
492 arelent *relent = (arelent *) args[arg_no].p;
493
494 fmt++;
495 ++arg_count;
496 lfinfo (fp, "%s+0x%v (type %s)",
497 (*(relent->sym_ptr_ptr))->name,
498 relent->addend,
499 relent->howto->name);
500 }
501 else if (*fmt == 'S')
502 {
503 /* Print script file and linenumber. */
504 etree_type node;
505 etree_type *tp = (etree_type *) args[arg_no].p;
506
507 fmt++;
508 ++arg_count;
509 if (tp == NULL)
510 {
511 tp = &node;
512 tp->type.filename = ldlex_filename ();
513 tp->type.lineno = lineno;
514 }
515 if (tp->type.filename != NULL)
516 fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
517 }
518 else if (*fmt == 'T')
519 {
520 /* Symbol name. */
521 const char *name = (const char *) args[arg_no].p;
522
523 fmt++;
524 ++arg_count;
525 if (name == NULL || *name == 0)
526 {
527 fprintf (fp, _("no symbol"));
528 break;
529 }
530 else if (demangling)
531 {
532 char *demangled;
533
534 demangled = bfd_demangle (link_info.output_bfd, name,
535 DMGL_ANSI | DMGL_PARAMS);
536 if (demangled != NULL)
537 {
538 fprintf (fp, "%s", demangled);
539 free (demangled);
540 break;
541 }
542 }
543 fprintf (fp, "%s", name);
544 }
871b3ab2
AM
545 else
546 {
547 /* native (host) void* pointer, like printf */
548 fprintf (fp, "%p", args[arg_no].p);
549 ++arg_count;
550 }
5d3236ee
DK
551 break;
552
252b5132
RH
553 case 's':
554 /* arbitrary string, like printf */
99847db8
AM
555 fprintf (fp, "%s", (char *) args[arg_no].p);
556 ++arg_count;
252b5132
RH
557 break;
558
559 case 'd':
560 /* integer, like printf */
99847db8
AM
561 fprintf (fp, "%d", args[arg_no].i);
562 ++arg_count;
252b5132
RH
563 break;
564
565 case 'u':
566 /* unsigned integer, like printf */
99847db8
AM
567 fprintf (fp, "%u", args[arg_no].i);
568 ++arg_count;
252b5132 569 break;
94b50910
AM
570
571 case 'l':
572 if (*fmt == 'd')
573 {
99847db8
AM
574 fprintf (fp, "%ld", args[arg_no].l);
575 ++arg_count;
94b50910
AM
576 ++fmt;
577 break;
578 }
579 else if (*fmt == 'u')
580 {
99847db8
AM
581 fprintf (fp, "%lu", args[arg_no].l);
582 ++arg_count;
94b50910
AM
583 ++fmt;
584 break;
585 }
370dfff4 586 /* Fallthru */
94b50910
AM
587
588 default:
589 fprintf (fp, "%%%c", fmt[-1]);
590 break;
252b5132
RH
591 }
592 }
593 }
594
59ef2528 595 if (is_warning && config.fatal_warnings)
b34976b6 596 config.make_executable = FALSE;
7ce691ae 597
b34976b6 598 if (fatal)
6d5e62f8 599 xexit (1);
252b5132
RH
600}
601
6d5e62f8 602/* Format info message and print on stdout. */
252b5132
RH
603
604/* (You would think this should be called just "info", but then you
1579bae1 605 would be hosed by LynxOS, which defines that name in its libc.) */
252b5132
RH
606
607void
1579bae1 608info_msg (const char *fmt, ...)
252b5132 609{
1579bae1 610 va_list arg;
252b5132 611
1579bae1 612 va_start (arg, fmt);
59ef2528 613 vfinfo (stdout, fmt, arg, FALSE);
1579bae1 614 va_end (arg);
252b5132
RH
615}
616
6d5e62f8 617/* ('e' for error.) Format info message and print on stderr. */
252b5132
RH
618
619void
1579bae1 620einfo (const char *fmt, ...)
252b5132 621{
1579bae1 622 va_list arg;
252b5132 623
e922bcab 624 fflush (stdout);
1579bae1 625 va_start (arg, fmt);
59ef2528 626 vfinfo (stderr, fmt, arg, TRUE);
1579bae1 627 va_end (arg);
e922bcab 628 fflush (stderr);
252b5132
RH
629}
630
6d5e62f8 631void
1579bae1 632info_assert (const char *file, unsigned int line)
252b5132
RH
633{
634 einfo (_("%F%P: internal error %s %d\n"), file, line);
635}
636
6d5e62f8 637/* ('m' for map) Format info message and print on map. */
252b5132
RH
638
639void
1579bae1 640minfo (const char *fmt, ...)
252b5132 641{
49fa1e15
AM
642 if (config.map_file != NULL)
643 {
644 va_list arg;
252b5132 645
49fa1e15 646 va_start (arg, fmt);
16e4ecc0
AM
647 if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
648 {
649 /* Stash info about --as-needed shared libraries. Print
650 later so they don't appear intermingled with archive
651 library info. */
652 struct asneeded_minfo *m = xmalloc (sizeof *m);
653
654 m->next = NULL;
655 m->soname = va_arg (arg, const char *);
656 m->ref = va_arg (arg, bfd *);
657 m->name = va_arg (arg, const char *);
658 *asneeded_list_tail = m;
659 asneeded_list_tail = &m->next;
660 }
661 else
662 vfinfo (config.map_file, fmt, arg, FALSE);
49fa1e15
AM
663 va_end (arg);
664 }
252b5132
RH
665}
666
667void
1579bae1 668lfinfo (FILE *file, const char *fmt, ...)
252b5132 669{
1579bae1 670 va_list arg;
252b5132 671
1579bae1 672 va_start (arg, fmt);
59ef2528 673 vfinfo (file, fmt, arg, FALSE);
1579bae1 674 va_end (arg);
252b5132
RH
675}
676\f
677/* Functions to print the link map. */
678
6d5e62f8 679void
1579bae1 680print_space (void)
252b5132
RH
681{
682 fprintf (config.map_file, " ");
683}
684
6d5e62f8 685void
1579bae1 686print_nl (void)
252b5132
RH
687{
688 fprintf (config.map_file, "\n");
689}
45455cdd
ILT
690
691/* A more or less friendly abort message. In ld.h abort is defined to
692 call this function. */
693
694void
1579bae1 695ld_abort (const char *file, int line, const char *fn)
45455cdd
ILT
696{
697 if (fn != NULL)
7ac01895 698 einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
45455cdd
ILT
699 file, line, fn);
700 else
7ac01895 701 einfo (_("%P: internal error: aborting at %s:%d\n"),
45455cdd 702 file, line);
df5f2391 703 einfo (_("%F%P: please report this bug\n"));
45455cdd
ILT
704 xexit (1);
705}
This page took 0.925099 seconds and 4 git commands to generate.