Update year range in copyright notice of binutils files
[external/binutils.git] / ld / ldmisc.c
1 /* ldmisc.c
2    Copyright (C) 1991-2018 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 "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"
40
41 /*
42  %% literal %
43  %A section name from a section
44  %B filename from a bfd
45  %C clever filename:linenumber with function
46  %D like %C, but no function name
47  %E current bfd error or errno
48  %F error is fatal
49  %G like %D, but only function name
50  %H like %C but in addition emit section+offset
51  %I filename from a lang_input_statement_type
52  %P print program name
53  %R info about a relent
54  %S print script file and linenumber from etree_type.
55  %T symbol name
56  %V hex bfd_vma
57  %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
58  %X no object output, fail return
59  %d integer, like printf
60  %ld long, like printf
61  %lu unsigned long, like printf
62  %p native (host) void* pointer, like printf
63  %s arbitrary string, like printf
64  %u integer, like printf
65  %v hex bfd_vma, no leading zeros
66 */
67
68 void
69 vfinfo (FILE *fp, const char *fmt, va_list ap, bfd_boolean is_warning)
70 {
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
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
132             case 'T':
133             case 'A':
134             case 'B':
135             case 'I':
136             case 'S':
137             case 'R':
138             case 'p':
139             case 's':
140               arg_type = Ptr;
141               break;
142
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     }
175
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;
203   while (*fmt != '\0')
204     {
205       const char *str = fmt;
206       while (*fmt != '%' && *fmt != '\0')
207         fmt++;
208       if (fmt != str)
209         if (fwrite (str, 1, fmt - str, fp))
210           {
211             /* Ignore.  */
212           }
213
214       if (*fmt == '%')
215         {
216           fmt++;
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
225           switch (*fmt++)
226             {
227             case '\0':
228               --fmt;
229               /* Fall through.  */
230
231             case '%':
232               /* literal % */
233               putc ('%', fp);
234               break;
235
236             case 'X':
237               /* no object output, fail return */
238               config.make_executable = FALSE;
239               break;
240
241             case 'V':
242               /* hex bfd_vma */
243               {
244                 bfd_vma value = args[arg_no].v;
245                 ++arg_count;
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;
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);
263               }
264               break;
265
266             case 'W':
267               /* hex bfd_vma with 0x with no leading zeroes taking up
268                  8 spaces.  */
269               {
270                 char buf[100];
271                 bfd_vma value;
272                 char *p;
273                 int len;
274
275                 value = args[arg_no].v;
276                 ++arg_count;
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
292             case 'T':
293               /* Symbol name.  */
294               {
295                 const char *name = (const char *) args[arg_no].p;
296                 ++arg_count;
297                 if (name == NULL || *name == 0)
298                   {
299                     fprintf (fp, _("no symbol"));
300                     break;
301                   }
302                 else if (demangling)
303                   {
304                     char *demangled;
305
306                     demangled = bfd_demangle (link_info.output_bfd, name,
307                                               DMGL_ANSI | DMGL_PARAMS);
308                     if (demangled != NULL)
309                       {
310                         fprintf (fp, "%s", demangled);
311                         free (demangled);
312                         break;
313                       }
314                   }
315                 fprintf (fp, "%s", name);
316               }
317               break;
318
319             case 'A':
320               /* section name from a section */
321               {
322                 asection *sec;
323                 bfd *abfd;
324                 const char *group = NULL;
325                 struct coff_comdat_info *ci;
326
327                 sec = (asection *) args[arg_no].p;
328                 ++arg_count;
329                 abfd = sec->owner;
330                 fprintf (fp, "%s", sec->name);
331                 if (abfd != NULL
332                     && bfd_get_flavour (abfd) == bfd_target_elf_flavour
333                     && elf_next_in_group (sec) != NULL
334                     && (sec->flags & SEC_GROUP) == 0)
335                   group = elf_group_name (sec);
336                 else if (abfd != NULL
337                          && bfd_get_flavour (abfd) == bfd_target_coff_flavour
338                          && (ci = bfd_coff_get_comdat_section (sec->owner,
339                                                                sec)) != NULL)
340                   group = ci->name;
341                 if (group != NULL)
342                   fprintf (fp, "[%s]", group);
343               }
344               break;
345
346             case 'B':
347               /* filename from a bfd */
348               {
349                 bfd *abfd = (bfd *) args[arg_no].p;
350                 ++arg_count;
351                 if (abfd == NULL)
352                   fprintf (fp, "%s generated", program_name);
353                 else if (abfd->my_archive != NULL
354                          && !bfd_is_thin_archive (abfd->my_archive))
355                   fprintf (fp, "%s(%s)", abfd->my_archive->filename,
356                            abfd->filename);
357                 else
358                   fprintf (fp, "%s", abfd->filename);
359               }
360               break;
361
362             case 'F':
363               /* Error is fatal.  */
364               fatal = TRUE;
365               break;
366
367             case 'P':
368               /* Print program name.  */
369               fprintf (fp, "%s", program_name);
370               break;
371
372             case 'E':
373               /* current bfd error or errno */
374               fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
375               break;
376
377             case 'I':
378               /* filename from a lang_input_statement_type */
379               {
380                 lang_input_statement_type *i;
381
382                 i = (lang_input_statement_type *) args[arg_no].p;
383                 ++arg_count;
384                 if (i->the_bfd->my_archive != NULL
385                     && !bfd_is_thin_archive (i->the_bfd->my_archive))
386                   fprintf (fp, "(%s)",
387                            bfd_get_filename (i->the_bfd->my_archive));
388                 fprintf (fp, "%s", i->local_sym_name);
389                 if ((i->the_bfd->my_archive == NULL
390                      || bfd_is_thin_archive (i->the_bfd->my_archive))
391                     && filename_cmp (i->local_sym_name, i->filename) != 0)
392                   fprintf (fp, " (%s)", i->filename);
393               }
394               break;
395
396             case 'S':
397               /* Print script file and linenumber.  */
398               {
399                 etree_type node;
400                 etree_type *tp = (etree_type *) args[arg_no].p;
401                 ++arg_count;
402                 if (tp == NULL)
403                   {
404                     tp = &node;
405                     tp->type.filename = ldlex_filename ();
406                     tp->type.lineno = lineno;
407                   }
408                 if (tp->type.filename != NULL)
409                   fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
410               }
411               break;
412
413             case 'R':
414               /* Print all that's interesting about a relent.  */
415               {
416                 arelent *relent = (arelent *) args[arg_no].p;
417                 ++arg_count;
418                 lfinfo (fp, "%s+0x%v (type %s)",
419                         (*(relent->sym_ptr_ptr))->name,
420                         relent->addend,
421                         relent->howto->name);
422               }
423               break;
424
425             case 'C':
426             case 'D':
427             case 'G':
428             case 'H':
429               /* Clever filename:linenumber with function name if possible.
430                  The arguments are a BFD, a section, and an offset.  */
431               {
432                 static bfd *last_bfd;
433                 static char *last_file;
434                 static char *last_function;
435                 bfd *abfd;
436                 asection *section;
437                 bfd_vma offset;
438                 asymbol **asymbols = NULL;
439                 const char *filename;
440                 const char *functionname;
441                 unsigned int linenumber;
442                 bfd_boolean discard_last;
443                 bfd_boolean done;
444
445                 abfd = args[arg_no].reladdr.abfd;
446                 section = args[arg_no].reladdr.sec;
447                 offset = args[arg_no].reladdr.off;
448                 ++arg_count;
449
450                 if (abfd != NULL)
451                   {
452                     if (!bfd_generic_link_read_symbols (abfd))
453                       einfo (_("%B%F: could not read symbols: %E\n"), abfd);
454
455                     asymbols = bfd_get_outsymbols (abfd);
456                   }
457
458                 /* The GNU Coding Standard requires that error messages
459                    be of the form:
460
461                      source-file-name:lineno: message
462
463                    We do not always have a line number available so if
464                    we cannot find them we print out the section name and
465                    offset instead.  */
466                 discard_last = TRUE;
467                 if (abfd != NULL
468                     && bfd_find_nearest_line (abfd, section, asymbols, offset,
469                                               &filename, &functionname,
470                                               &linenumber))
471                   {
472                     if (functionname != NULL
473                         && (fmt[-1] == 'C' || fmt[-1] == 'H'))
474                       {
475                         /* Detect the case where we are printing out a
476                            message for the same function as the last
477                            call to vinfo ("%C").  In this situation do
478                            not print out the ABFD filename or the
479                            function name again.  Note - we do still
480                            print out the source filename, as this will
481                            allow programs that parse the linker's output
482                            (eg emacs) to correctly locate multiple
483                            errors in the same source file.  */
484                         if (last_bfd == NULL
485                             || last_function == NULL
486                             || last_bfd != abfd
487                             || (last_file == NULL) != (filename == NULL)
488                             || (filename != NULL
489                                 && filename_cmp (last_file, filename) != 0)
490                             || strcmp (last_function, functionname) != 0)
491                           {
492                             lfinfo (fp, _("%B: In function `%T':\n"),
493                                     abfd, functionname);
494
495                             last_bfd = abfd;
496                             if (last_file != NULL)
497                               free (last_file);
498                             last_file = NULL;
499                             if (filename)
500                               last_file = xstrdup (filename);
501                             if (last_function != NULL)
502                               free (last_function);
503                             last_function = xstrdup (functionname);
504                           }
505                         discard_last = FALSE;
506                       }
507                     else
508                       lfinfo (fp, "%B:", abfd);
509
510                     if (filename != NULL)
511                       fprintf (fp, "%s:", filename);
512
513                     done = fmt[-1] != 'H';
514                     if (functionname != NULL && fmt[-1] == 'G')
515                       lfinfo (fp, "%T", functionname);
516                     else if (filename != NULL && linenumber != 0)
517                       fprintf (fp, "%u%s", linenumber, done ? "" : ":");
518                     else
519                       done = FALSE;
520                   }
521                 else
522                   {
523                     lfinfo (fp, "%B:", abfd);
524                     done = FALSE;
525                   }
526                 if (!done)
527                   lfinfo (fp, "(%A+0x%v)", section, offset);
528
529                 if (discard_last)
530                   {
531                     last_bfd = NULL;
532                     if (last_file != NULL)
533                       {
534                         free (last_file);
535                         last_file = NULL;
536                       }
537                     if (last_function != NULL)
538                       {
539                         free (last_function);
540                         last_function = NULL;
541                       }
542                   }
543               }
544               break;
545
546             case 'p':
547               /* native (host) void* pointer, like printf */
548               fprintf (fp, "%p", args[arg_no].p);
549               ++arg_count;
550               break;
551
552             case 's':
553               /* arbitrary string, like printf */
554               fprintf (fp, "%s", (char *) args[arg_no].p);
555               ++arg_count;
556               break;
557
558             case 'd':
559               /* integer, like printf */
560               fprintf (fp, "%d", args[arg_no].i);
561               ++arg_count;
562               break;
563
564             case 'u':
565               /* unsigned integer, like printf */
566               fprintf (fp, "%u", args[arg_no].i);
567               ++arg_count;
568               break;
569
570             case 'l':
571               if (*fmt == 'd')
572                 {
573                   fprintf (fp, "%ld", args[arg_no].l);
574                   ++arg_count;
575                   ++fmt;
576                   break;
577                 }
578               else if (*fmt == 'u')
579                 {
580                   fprintf (fp, "%lu", args[arg_no].l);
581                   ++arg_count;
582                   ++fmt;
583                   break;
584                 }
585               /* Fallthru */
586
587             default:
588               fprintf (fp, "%%%c", fmt[-1]);
589               break;
590             }
591         }
592     }
593
594   if (is_warning && config.fatal_warnings)
595     config.make_executable = FALSE;
596
597   if (fatal)
598     xexit (1);
599 }
600
601 /* Format info message and print on stdout.  */
602
603 /* (You would think this should be called just "info", but then you
604    would be hosed by LynxOS, which defines that name in its libc.)  */
605
606 void
607 info_msg (const char *fmt, ...)
608 {
609   va_list arg;
610
611   va_start (arg, fmt);
612   vfinfo (stdout, fmt, arg, FALSE);
613   va_end (arg);
614 }
615
616 /* ('e' for error.) Format info message and print on stderr.  */
617
618 void
619 einfo (const char *fmt, ...)
620 {
621   va_list arg;
622
623   fflush (stdout);
624   va_start (arg, fmt);
625   vfinfo (stderr, fmt, arg, TRUE);
626   va_end (arg);
627   fflush (stderr);
628 }
629
630 void
631 info_assert (const char *file, unsigned int line)
632 {
633   einfo (_("%F%P: internal error %s %d\n"), file, line);
634 }
635
636 /* ('m' for map) Format info message and print on map.  */
637
638 void
639 minfo (const char *fmt, ...)
640 {
641   if (config.map_file != NULL)
642     {
643       va_list arg;
644
645       va_start (arg, fmt);
646       if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
647         {
648           /* Stash info about --as-needed shared libraries.  Print
649              later so they don't appear intermingled with archive
650              library info.  */
651           struct asneeded_minfo *m = xmalloc (sizeof *m);
652
653           m->next = NULL;
654           m->soname = va_arg (arg, const char *);
655           m->ref = va_arg (arg, bfd *);
656           m->name = va_arg (arg, const char *);
657           *asneeded_list_tail = m;
658           asneeded_list_tail = &m->next;
659         }
660       else
661         vfinfo (config.map_file, fmt, arg, FALSE);
662       va_end (arg);
663     }
664 }
665
666 void
667 lfinfo (FILE *file, const char *fmt, ...)
668 {
669   va_list arg;
670
671   va_start (arg, fmt);
672   vfinfo (file, fmt, arg, FALSE);
673   va_end (arg);
674 }
675 \f
676 /* Functions to print the link map.  */
677
678 void
679 print_space (void)
680 {
681   fprintf (config.map_file, " ");
682 }
683
684 void
685 print_nl (void)
686 {
687   fprintf (config.map_file, "\n");
688 }
689
690 /* A more or less friendly abort message.  In ld.h abort is defined to
691    call this function.  */
692
693 void
694 ld_abort (const char *file, int line, const char *fn)
695 {
696   if (fn != NULL)
697     einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
698            file, line, fn);
699   else
700     einfo (_("%P: internal error: aborting at %s:%d\n"),
701            file, line);
702   einfo (_("%P%F: please report this bug\n"));
703   xexit (1);
704 }