xref: /netbsd-src/external/gpl3/binutils/dist/ld/ldmisc.c (revision 92e958de60c71aa0f2452bd7074cbb006fe6546b)
1 /* ldmisc.c
2    Copyright (C) 1991-2015 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 "filenames.h"
27 #include "demangle.h"
28 #include <stdarg.h>
29 #include "ld.h"
30 #include "ldmisc.h"
31 #include "ldexp.h"
32 #include "ldlang.h"
33 #include <ldgram.h>
34 #include "ldlex.h"
35 #include "ldmain.h"
36 #include "ldfile.h"
37 #include "elf-bfd.h"
38 #include "coff-bfd.h"
39 
40 /*
41  %% literal %
42  %A section name from a section
43  %B filename from a bfd
44  %C clever filename:linenumber with function
45  %D like %C, but no function name
46  %E current bfd error or errno
47  %F error is fatal
48  %G like %D, but only function name
49  %H like %C but in addition emit section+offset
50  %I filename from a lang_input_statement_type
51  %P print program name
52  %R info about a relent
53  %S print script file and linenumber from etree_type.
54  %T symbol name
55  %V hex bfd_vma
56  %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
57  %X no object output, fail return
58  %d integer, like printf
59  %ld long, like printf
60  %lu unsigned long, like printf
61  %p native (host) void* pointer, like printf
62  %s arbitrary string, like printf
63  %u integer, like printf
64  %v hex bfd_vma, no leading zeros
65 */
66 
67 void
68 vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
69 {
70   bfd_boolean fatal = FALSE;
71 
72   while (*fmt != '\0')
73     {
74       const char *str = fmt;
75       while (*fmt != '%' && *fmt != '\0')
76 	fmt++;
77       if (fmt != str)
78 	if (fwrite (str, 1, fmt - str, fp))
79 	  {
80 	    /* Ignore.  */
81 	  }
82 
83       if (*fmt == '%')
84 	{
85 	  fmt++;
86 	  switch (*fmt++)
87 	    {
88 	    case '%':
89 	      /* literal % */
90 	      putc ('%', fp);
91 	      break;
92 
93 	    case 'X':
94 	      /* no object output, fail return */
95 	      config.make_executable = FALSE;
96 	      break;
97 
98 	    case 'V':
99 	      /* hex bfd_vma */
100 	      {
101 		bfd_vma value = va_arg (arg, bfd_vma);
102 		fprintf_vma (fp, value);
103 	      }
104 	      break;
105 
106 	    case 'v':
107 	      /* hex bfd_vma, no leading zeros */
108 	      {
109 		char buf[100];
110 		char *p = buf;
111 		bfd_vma value = va_arg (arg, bfd_vma);
112 		sprintf_vma (p, value);
113 		while (*p == '0')
114 		  p++;
115 		if (!*p)
116 		  p--;
117 		fputs (p, fp);
118 	      }
119 	      break;
120 
121 	    case 'W':
122 	      /* hex bfd_vma with 0x with no leading zeroes taking up
123 		 8 spaces.  */
124 	      {
125 		char buf[100];
126 		bfd_vma value;
127 		char *p;
128 		int len;
129 
130 		value = va_arg (arg, bfd_vma);
131 		sprintf_vma (buf, value);
132 		for (p = buf; *p == '0'; ++p)
133 		  ;
134 		if (*p == '\0')
135 		  --p;
136 		len = strlen (p);
137 		while (len < 8)
138 		  {
139 		    putc (' ', fp);
140 		    ++len;
141 		  }
142 		fprintf (fp, "0x%s", p);
143 	      }
144 	      break;
145 
146 	    case 'T':
147 	      /* Symbol name.  */
148 	      {
149 		const char *name = va_arg (arg, const char *);
150 
151 		if (name == NULL || *name == 0)
152 		  {
153 		    fprintf (fp, _("no symbol"));
154 		    break;
155 		  }
156 		else if (demangling)
157 		  {
158 		    char *demangled;
159 
160 		    demangled = bfd_demangle (link_info.output_bfd, name,
161 					      DMGL_ANSI | DMGL_PARAMS);
162 		    if (demangled != NULL)
163 		      {
164 			fprintf (fp, "%s", demangled);
165 			free (demangled);
166 			break;
167 		      }
168 		  }
169 		fprintf (fp, "%s", name);
170 	      }
171 	      break;
172 
173 	    case 'A':
174 	      /* section name from a section */
175 	      {
176 		asection *sec = va_arg (arg, asection *);
177 		bfd *abfd = sec->owner;
178 		const char *group = NULL;
179 		struct coff_comdat_info *ci;
180 
181 		fprintf (fp, "%s", sec->name);
182 		if (abfd != NULL
183 		    && bfd_get_flavour (abfd) == bfd_target_elf_flavour
184 		    && elf_next_in_group (sec) != NULL
185 		    && (sec->flags & SEC_GROUP) == 0)
186 		  group = elf_group_name (sec);
187 		else if (abfd != NULL
188 			 && bfd_get_flavour (abfd) == bfd_target_coff_flavour
189 			 && (ci = bfd_coff_get_comdat_section (sec->owner,
190 							       sec)) != NULL)
191 		  group = ci->name;
192 		if (group != NULL)
193 		  fprintf (fp, "[%s]", group);
194 	      }
195 	      break;
196 
197 	    case 'B':
198 	      /* filename from a bfd */
199 	      {
200 		bfd *abfd = va_arg (arg, bfd *);
201 
202 		if (abfd == NULL)
203 		  fprintf (fp, "%s generated", program_name);
204 		else if (abfd->my_archive)
205 		  fprintf (fp, "%s(%s)", abfd->my_archive->filename,
206 			   abfd->filename);
207 		else
208 		  fprintf (fp, "%s", abfd->filename);
209 	      }
210 	      break;
211 
212 	    case 'F':
213 	      /* Error is fatal.  */
214 	      fatal = TRUE;
215 	      break;
216 
217 	    case 'P':
218 	      /* Print program name.  */
219 	      fprintf (fp, "%s", program_name);
220 	      break;
221 
222 	    case 'E':
223 	      /* current bfd error or errno */
224 	      fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
225 	      break;
226 
227 	    case 'I':
228 	      /* filename from a lang_input_statement_type */
229 	      {
230 		lang_input_statement_type *i;
231 
232 		i = va_arg (arg, lang_input_statement_type *);
233 		if (bfd_my_archive (i->the_bfd) != NULL)
234 		  fprintf (fp, "(%s)",
235 			   bfd_get_filename (bfd_my_archive (i->the_bfd)));
236 		fprintf (fp, "%s", i->local_sym_name);
237 		if (bfd_my_archive (i->the_bfd) == NULL
238 		    && filename_cmp (i->local_sym_name, i->filename) != 0)
239 		  fprintf (fp, " (%s)", i->filename);
240 	      }
241 	      break;
242 
243 	    case 'S':
244 	      /* Print script file and linenumber.  */
245 	      {
246 		etree_type node;
247 		etree_type *tp = va_arg (arg, etree_type *);
248 
249 		if (tp == NULL)
250 		  {
251 		    tp = &node;
252 		    tp->type.filename = ldlex_filename ();
253 		    tp->type.lineno = lineno;
254 		  }
255 		if (tp->type.filename != NULL)
256 		  fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
257 	      }
258 	      break;
259 
260 	    case 'R':
261 	      /* Print all that's interesting about a relent.  */
262 	      {
263 		arelent *relent = va_arg (arg, arelent *);
264 
265 		lfinfo (fp, "%s+0x%v (type %s)",
266 			(*(relent->sym_ptr_ptr))->name,
267 			relent->addend,
268 			relent->howto->name);
269 	      }
270 	      break;
271 
272 	    case 'C':
273 	    case 'D':
274 	    case 'G':
275 	    case 'H':
276 	      /* Clever filename:linenumber with function name if possible.
277 		 The arguments are a BFD, a section, and an offset.  */
278 	      {
279 		static bfd *last_bfd;
280 		static char *last_file = NULL;
281 		static char *last_function = NULL;
282 		bfd *abfd;
283 		asection *section;
284 		bfd_vma offset;
285 		asymbol **asymbols = NULL;
286 		const char *filename;
287 		const char *functionname;
288 		unsigned int linenumber;
289 		bfd_boolean discard_last;
290 		bfd_boolean done;
291 
292 		abfd = va_arg (arg, bfd *);
293 		section = va_arg (arg, asection *);
294 		offset = va_arg (arg, bfd_vma);
295 
296 		if (abfd != NULL)
297 		  {
298 		    if (!bfd_generic_link_read_symbols (abfd))
299 		      einfo (_("%B%F: could not read symbols: %E\n"), abfd);
300 
301 		    asymbols = bfd_get_outsymbols (abfd);
302 		  }
303 
304 		/* The GNU Coding Standard requires that error messages
305 		   be of the form:
306 
307 		     source-file-name:lineno: message
308 
309 		   We do not always have a line number available so if
310 		   we cannot find them we print out the section name and
311 		   offset instead.  */
312 		discard_last = TRUE;
313 		if (abfd != NULL
314 		    && bfd_find_nearest_line (abfd, section, asymbols, offset,
315 					      &filename, &functionname,
316 					      &linenumber))
317 		  {
318 		    if (functionname != NULL
319 			&& (fmt[-1] == 'C' || fmt[-1] == 'H'))
320 		      {
321 			/* Detect the case where we are printing out a
322 			   message for the same function as the last
323 			   call to vinfo ("%C").  In this situation do
324 			   not print out the ABFD filename or the
325 			   function name again.  Note - we do still
326 			   print out the source filename, as this will
327 			   allow programs that parse the linker's output
328 			   (eg emacs) to correctly locate multiple
329 			   errors in the same source file.  */
330 			if (last_bfd == NULL
331 			    || last_file == NULL
332 			    || last_function == NULL
333 			    || last_bfd != abfd
334 			    || (filename != NULL
335 				&& filename_cmp (last_file, filename) != 0)
336 			    || strcmp (last_function, functionname) != 0)
337 			  {
338 			    lfinfo (fp, _("%B: In function `%T':\n"),
339 				    abfd, functionname);
340 
341 			    last_bfd = abfd;
342 			    if (last_file != NULL)
343 			      free (last_file);
344 			    last_file = NULL;
345 			    if (filename)
346 			      last_file = xstrdup (filename);
347 			    if (last_function != NULL)
348 			      free (last_function);
349 			    last_function = xstrdup (functionname);
350 			  }
351 			discard_last = FALSE;
352 		      }
353 		    else
354 		      lfinfo (fp, "%B:", abfd);
355 
356 		    if (filename != NULL)
357 		      fprintf (fp, "%s:", filename);
358 
359 		    done = fmt[-1] != 'H';
360 		    if (functionname != NULL && fmt[-1] == 'G')
361 		      lfinfo (fp, "%T", functionname);
362 		    else if (filename != NULL && linenumber != 0)
363 		      fprintf (fp, "%u%s", linenumber, done ? "" : ":");
364 		    else
365 		      done = FALSE;
366 		  }
367 		else
368 		  {
369 		    lfinfo (fp, "%B:", abfd);
370 		    done = FALSE;
371 		  }
372 		if (!done)
373 		  lfinfo (fp, "(%A+0x%v)", section, offset);
374 
375 		if (discard_last)
376 		  {
377 		    last_bfd = NULL;
378 		    if (last_file != NULL)
379 		      {
380 			free (last_file);
381 			last_file = NULL;
382 		      }
383 		    if (last_function != NULL)
384 		      {
385 			free (last_function);
386 			last_function = NULL;
387 		      }
388 		  }
389 	      }
390 	      break;
391 
392 	    case 'p':
393 	      /* native (host) void* pointer, like printf */
394 	      fprintf (fp, "%p", va_arg (arg, void *));
395 	      break;
396 
397 	    case 's':
398 	      /* arbitrary string, like printf */
399 	      fprintf (fp, "%s", va_arg (arg, char *));
400 	      break;
401 
402 	    case 'd':
403 	      /* integer, like printf */
404 	      fprintf (fp, "%d", va_arg (arg, int));
405 	      break;
406 
407 	    case 'u':
408 	      /* unsigned integer, like printf */
409 	      fprintf (fp, "%u", va_arg (arg, unsigned int));
410 	      break;
411 
412 	    case 'l':
413 	      if (*fmt == 'd')
414 		{
415 		  fprintf (fp, "%ld", va_arg (arg, long));
416 		  ++fmt;
417 		  break;
418 		}
419 	      else if (*fmt == 'u')
420 		{
421 		  fprintf (fp, "%lu", va_arg (arg, unsigned long));
422 		  ++fmt;
423 		  break;
424 		}
425 	      /* Fall thru */
426 
427 	    default:
428 	      fprintf (fp, "%%%c", fmt[-1]);
429 	      break;
430 	    }
431 	}
432     }
433 
434   if (is_warning && config.fatal_warnings)
435     config.make_executable = FALSE;
436 
437   if (fatal)
438     xexit (1);
439 }
440 
441 /* Format info message and print on stdout.  */
442 
443 /* (You would think this should be called just "info", but then you
444    would be hosed by LynxOS, which defines that name in its libc.)  */
445 
446 void
447 info_msg (const char *fmt, ...)
448 {
449   va_list arg;
450 
451   va_start (arg, fmt);
452   vfinfo (stdout, fmt, arg, FALSE);
453   va_end (arg);
454 }
455 
456 /* ('e' for error.) Format info message and print on stderr.  */
457 
458 void
459 einfo (const char *fmt, ...)
460 {
461   va_list arg;
462 
463   fflush (stdout);
464   va_start (arg, fmt);
465   vfinfo (stderr, fmt, arg, TRUE);
466   va_end (arg);
467   fflush (stderr);
468 }
469 
470 void
471 info_assert (const char *file, unsigned int line)
472 {
473   einfo (_("%F%P: internal error %s %d\n"), file, line);
474 }
475 
476 /* ('m' for map) Format info message and print on map.  */
477 
478 void
479 minfo (const char *fmt, ...)
480 {
481   if (config.map_file != NULL)
482     {
483       va_list arg;
484 
485       va_start (arg, fmt);
486       if (fmt[0] == '%' && fmt[1] == '!' && fmt[2] == 0)
487 	{
488 	  /* Stash info about --as-needed shared libraries.  Print
489 	     later so they don't appear intermingled with archive
490 	     library info.  */
491 	  struct asneeded_minfo *m = xmalloc (sizeof *m);
492 
493 	  m->next = NULL;
494 	  m->soname = va_arg (arg, const char *);
495 	  m->ref = va_arg (arg, bfd *);
496 	  m->name = va_arg (arg, const char *);
497 	  *asneeded_list_tail = m;
498 	  asneeded_list_tail = &m->next;
499 	}
500       else
501 	vfinfo (config.map_file, fmt, arg, FALSE);
502       va_end (arg);
503     }
504 }
505 
506 void
507 lfinfo (FILE *file, const char *fmt, ...)
508 {
509   va_list arg;
510 
511   va_start (arg, fmt);
512   vfinfo (file, fmt, arg, FALSE);
513   va_end (arg);
514 }
515 
516 /* Functions to print the link map.  */
517 
518 void
519 print_space (void)
520 {
521   fprintf (config.map_file, " ");
522 }
523 
524 void
525 print_nl (void)
526 {
527   fprintf (config.map_file, "\n");
528 }
529 
530 /* A more or less friendly abort message.  In ld.h abort is defined to
531    call this function.  */
532 
533 void
534 ld_abort (const char *file, int line, const char *fn)
535 {
536   if (fn != NULL)
537     einfo (_("%P: internal error: aborting at %s:%d in %s\n"),
538 	   file, line, fn);
539   else
540     einfo (_("%P: internal error: aborting at %s:%d\n"),
541 	   file, line);
542   einfo (_("%P%F: please report this bug\n"));
543   xexit (1);
544 }
545