PR 12763
[deliverable/binutils-gdb.git] / ld / ldmisc.c
CommitLineData
252b5132 1/* ldmisc.c
d003868e 2 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
e922bcab 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011
252b5132
RH
4 Free Software Foundation, Inc.
5 Written by Steve Chamberlain of Cygnus Support.
6
f96b4a7b 7 This file is part of the GNU Binutils.
252b5132 8
f96b4a7b 9 This program is free software; you can redistribute it and/or modify
5ed6aba4 10 it under the terms of the GNU General Public License as published by
f96b4a7b
NC
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
252b5132 13
f96b4a7b 14 This program is distributed in the hope that it will be useful,
5ed6aba4
NC
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
252b5132 18
5ed6aba4 19 You should have received a copy of the GNU General Public License
f96b4a7b
NC
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132 23
3db64b00 24#include "sysdep.h"
252b5132 25#include "bfd.h"
6f6f27f8 26#include "bfdlink.h"
252b5132 27#include "libiberty.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"
d003868e 39#include "elf-bfd.h"
252b5132 40
252b5132
RH
41/*
42 %% literal %
d003868e
AM
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
252b5132 48 %F error is fatal
d003868e
AM
49 %G like %D, but only function name
50 %I filename from a lang_input_statement_type
252b5132 51 %P print program name
d003868e 52 %R info about a relent
252b5132 53 %S print script file and linenumber
252b5132 54 %T symbol name
252b5132 55 %V hex bfd_vma
252b5132 56 %W hex bfd_vma with 0x with no leading zeros taking up 8 spaces
d003868e 57 %X no object output, fail return
252b5132 58 %d integer, like printf
94b50910
AM
59 %ld long, like printf
60 %lu unsigned long, like printf
5d3236ee 61 %p native (host) void* pointer, like printf
d003868e 62 %s arbitrary string, like printf
252b5132 63 %u integer, like printf
d003868e 64 %v hex bfd_vma, no leading zeros
252b5132
RH
65*/
66
5d3236ee 67void
59ef2528 68vfinfo (FILE *fp, const char *fmt, va_list arg, bfd_boolean is_warning)
252b5132 69{
b34976b6 70 bfd_boolean fatal = FALSE;
252b5132
RH
71
72 while (*fmt != '\0')
73 {
6d5e62f8 74 while (*fmt != '%' && *fmt != '\0')
252b5132
RH
75 {
76 putc (*fmt, fp);
77 fmt++;
78 }
79
6d5e62f8 80 if (*fmt == '%')
252b5132 81 {
6d5e62f8
KH
82 fmt++;
83 switch (*fmt++)
252b5132 84 {
252b5132
RH
85 case '%':
86 /* literal % */
87 putc ('%', fp);
88 break;
89
90 case 'X':
91 /* no object output, fail return */
b34976b6 92 config.make_executable = FALSE;
252b5132
RH
93 break;
94
95 case 'V':
96 /* hex bfd_vma */
97 {
98 bfd_vma value = va_arg (arg, bfd_vma);
99 fprintf_vma (fp, value);
100 }
101 break;
102
103 case 'v':
104 /* hex bfd_vma, no leading zeros */
105 {
106 char buf[100];
107 char *p = buf;
108 bfd_vma value = va_arg (arg, bfd_vma);
109 sprintf_vma (p, value);
110 while (*p == '0')
111 p++;
112 if (!*p)
113 p--;
114 fputs (p, fp);
115 }
116 break;
117
118 case 'W':
119 /* hex bfd_vma with 0x with no leading zeroes taking up
1579bae1 120 8 spaces. */
252b5132
RH
121 {
122 char buf[100];
123 bfd_vma value;
124 char *p;
125 int len;
126
127 value = va_arg (arg, bfd_vma);
128 sprintf_vma (buf, value);
129 for (p = buf; *p == '0'; ++p)
130 ;
131 if (*p == '\0')
132 --p;
133 len = strlen (p);
134 while (len < 8)
135 {
136 putc (' ', fp);
137 ++len;
138 }
139 fprintf (fp, "0x%s", p);
140 }
141 break;
142
143 case 'T':
144 /* Symbol name. */
145 {
146 const char *name = va_arg (arg, const char *);
147
1579bae1 148 if (name == NULL || *name == 0)
73705ac3
AM
149 {
150 fprintf (fp, _("no symbol"));
151 break;
152 }
153 else if (demangling)
252b5132
RH
154 {
155 char *demangled;
156
f13a99db 157 demangled = bfd_demangle (link_info.output_bfd, name,
73705ac3
AM
158 DMGL_ANSI | DMGL_PARAMS);
159 if (demangled != NULL)
160 {
161 fprintf (fp, "%s", demangled);
162 free (demangled);
163 break;
164 }
252b5132 165 }
73705ac3 166 fprintf (fp, "%s", name);
252b5132
RH
167 }
168 break;
169
d003868e
AM
170 case 'A':
171 /* section name from a section */
172 {
173 asection *sec = va_arg (arg, asection *);
174 bfd *abfd = sec->owner;
175 const char *group = NULL;
176 struct coff_comdat_info *ci;
177
178 fprintf (fp, "%s", sec->name);
179 if (abfd != NULL
180 && bfd_get_flavour (abfd) == bfd_target_elf_flavour
181 && elf_next_in_group (sec) != NULL
182 && (sec->flags & SEC_GROUP) == 0)
183 group = elf_group_name (sec);
184 else if (abfd != NULL
185 && bfd_get_flavour (abfd) == bfd_target_coff_flavour
186 && (ci = bfd_coff_get_comdat_section (sec->owner,
187 sec)) != NULL)
188 group = ci->name;
189 if (group != NULL)
190 fprintf (fp, "[%s]", group);
191 }
192 break;
193
252b5132
RH
194 case 'B':
195 /* filename from a bfd */
6d5e62f8 196 {
252b5132 197 bfd *abfd = va_arg (arg, bfd *);
f2763b01
NC
198
199 if (abfd == NULL)
e1fffbe6 200 fprintf (fp, "%s generated", program_name);
f2763b01 201 else if (abfd->my_archive)
252b5132
RH
202 fprintf (fp, "%s(%s)", abfd->my_archive->filename,
203 abfd->filename);
204 else
205 fprintf (fp, "%s", abfd->filename);
206 }
207 break;
208
209 case 'F':
6d5e62f8 210 /* Error is fatal. */
b34976b6 211 fatal = TRUE;
252b5132
RH
212 break;
213
214 case 'P':
6d5e62f8 215 /* Print program name. */
252b5132
RH
216 fprintf (fp, "%s", program_name);
217 break;
218
219 case 'E':
220 /* current bfd error or errno */
305c7206 221 fprintf (fp, "%s", bfd_errmsg (bfd_get_error ()));
252b5132
RH
222 break;
223
224 case 'I':
225 /* filename from a lang_input_statement_type */
226 {
227 lang_input_statement_type *i;
228
229 i = va_arg (arg, lang_input_statement_type *);
230 if (bfd_my_archive (i->the_bfd) != NULL)
231 fprintf (fp, "(%s)",
232 bfd_get_filename (bfd_my_archive (i->the_bfd)));
233 fprintf (fp, "%s", i->local_sym_name);
234 if (bfd_my_archive (i->the_bfd) == NULL
42627821 235 && filename_cmp (i->local_sym_name, i->filename) != 0)
252b5132
RH
236 fprintf (fp, " (%s)", i->filename);
237 }
238 break;
239
240 case 'S':
6d5e62f8 241 /* Print script file and linenumber. */
252b5132
RH
242 if (parsing_defsym)
243 fprintf (fp, "--defsym %s", lex_string);
244 else if (ldfile_input_filename != NULL)
245 fprintf (fp, "%s:%u", ldfile_input_filename, lineno);
246 else
247 fprintf (fp, _("built in linker script:%u"), lineno);
248 break;
249
250 case 'R':
6d5e62f8 251 /* Print all that's interesting about a relent. */
252b5132
RH
252 {
253 arelent *relent = va_arg (arg, arelent *);
6d5e62f8 254
252b5132
RH
255 lfinfo (fp, "%s+0x%v (type %s)",
256 (*(relent->sym_ptr_ptr))->name,
257 relent->addend,
258 relent->howto->name);
259 }
260 break;
6d5e62f8 261
252b5132
RH
262 case 'C':
263 case 'D':
264 case 'G':
5cfb2bb2
AM
265 /* Clever filename:linenumber with function name if possible.
266 The arguments are a BFD, a section, and an offset. */
252b5132
RH
267 {
268 static bfd *last_bfd;
269 static char *last_file = NULL;
270 static char *last_function = NULL;
271 bfd *abfd;
272 asection *section;
273 bfd_vma offset;
5c1d2f5f 274 asymbol **asymbols = NULL;
252b5132
RH
275 const char *filename;
276 const char *functionname;
277 unsigned int linenumber;
b34976b6 278 bfd_boolean discard_last;
252b5132
RH
279
280 abfd = va_arg (arg, bfd *);
281 section = va_arg (arg, asection *);
282 offset = va_arg (arg, bfd_vma);
283
5c1d2f5f 284 if (abfd != NULL)
252b5132 285 {
5c1d2f5f
AM
286 if (!bfd_generic_link_read_symbols (abfd))
287 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
288
289 asymbols = bfd_get_outsymbols (abfd);
252b5132
RH
290 }
291
e1fffbe6
AM
292 /* The GNU Coding Standard requires that error messages
293 be of the form:
98d87ee7
NC
294
295 source-file-name:lineno: message
5cfb2bb2 296
e1fffbe6
AM
297 We do not always have a line number available so if
298 we cannot find them we print out the section name and
299 offset instread. */
b34976b6 300 discard_last = TRUE;
e1fffbe6
AM
301 if (abfd != NULL
302 && bfd_find_nearest_line (abfd, section, asymbols, offset,
303 &filename, &functionname,
304 &linenumber))
252b5132 305 {
5cfb2bb2
AM
306 if (functionname != NULL && fmt[-1] == 'C')
307 {
e1fffbe6
AM
308 /* Detect the case where we are printing out a
309 message for the same function as the last
310 call to vinfo ("%C"). In this situation do
311 not print out the ABFD filename or the
312 function name again. Note - we do still
313 print out the source filename, as this will
314 allow programs that parse the linker's output
315 (eg emacs) to correctly locate multiple
316 errors in the same source file. */
252b5132
RH
317 if (last_bfd == NULL
318 || last_file == NULL
319 || last_function == NULL
320 || last_bfd != abfd
5cfb2bb2 321 || (filename != NULL
42627821 322 && filename_cmp (last_file, filename) != 0)
252b5132
RH
323 || strcmp (last_function, functionname) != 0)
324 {
a1c16379 325 lfinfo (fp, _("%B: In function `%T':\n"),
98d87ee7 326 abfd, functionname);
252b5132
RH
327
328 last_bfd = abfd;
329 if (last_file != NULL)
330 free (last_file);
5cfb2bb2
AM
331 last_file = NULL;
332 if (filename)
333 last_file = xstrdup (filename);
252b5132
RH
334 if (last_function != NULL)
335 free (last_function);
d1b2b2dc 336 last_function = xstrdup (functionname);
252b5132 337 }
b34976b6 338 discard_last = FALSE;
252b5132 339 }
98d87ee7 340 else
a1c16379 341 lfinfo (fp, "%B:", abfd);
5cfb2bb2
AM
342
343 if (filename != NULL)
a1c16379 344 fprintf (fp, "%s:", filename);
5cfb2bb2
AM
345
346 if (functionname != NULL && fmt[-1] == 'G')
a1c16379
JJ
347 lfinfo (fp, "%T", functionname);
348 else if (filename != NULL && linenumber != 0)
349 fprintf (fp, "%u", linenumber);
350 else
351 lfinfo (fp, "(%A+0x%v)", section, offset);
252b5132 352 }
98d87ee7
NC
353 else
354 lfinfo (fp, "%B:(%A+0x%v)", abfd, section, offset);
252b5132
RH
355
356 if (discard_last)
357 {
358 last_bfd = NULL;
359 if (last_file != NULL)
360 {
361 free (last_file);
362 last_file = NULL;
363 }
364 if (last_function != NULL)
365 {
366 free (last_function);
367 last_function = NULL;
368 }
369 }
370 }
371 break;
6d5e62f8 372
5d3236ee
DK
373 case 'p':
374 /* native (host) void* pointer, like printf */
375 fprintf (fp, "%p", va_arg (arg, void *));
376 break;
377
252b5132
RH
378 case 's':
379 /* arbitrary string, like printf */
380 fprintf (fp, "%s", va_arg (arg, char *));
381 break;
382
383 case 'd':
384 /* integer, like printf */
385 fprintf (fp, "%d", va_arg (arg, int));
386 break;
387
388 case 'u':
389 /* unsigned integer, like printf */
390 fprintf (fp, "%u", va_arg (arg, unsigned int));
391 break;
94b50910
AM
392
393 case 'l':
394 if (*fmt == 'd')
395 {
396 fprintf (fp, "%ld", va_arg (arg, long));
397 ++fmt;
398 break;
399 }
400 else if (*fmt == 'u')
401 {
402 fprintf (fp, "%lu", va_arg (arg, unsigned long));
403 ++fmt;
404 break;
405 }
406 /* Fall thru */
407
408 default:
409 fprintf (fp, "%%%c", fmt[-1]);
410 break;
252b5132
RH
411 }
412 }
413 }
414
59ef2528 415 if (is_warning && config.fatal_warnings)
b34976b6 416 config.make_executable = FALSE;
7ce691ae 417
b34976b6 418 if (fatal)
6d5e62f8 419 xexit (1);
252b5132
RH
420}
421
6d5e62f8 422/* Format info message and print on stdout. */
252b5132
RH
423
424/* (You would think this should be called just "info", but then you
1579bae1 425 would be hosed by LynxOS, which defines that name in its libc.) */
252b5132
RH
426
427void
1579bae1 428info_msg (const char *fmt, ...)
252b5132 429{
1579bae1 430 va_list arg;
252b5132 431
1579bae1 432 va_start (arg, fmt);
59ef2528 433 vfinfo (stdout, fmt, arg, FALSE);
1579bae1 434 va_end (arg);
252b5132
RH
435}
436
6d5e62f8 437/* ('e' for error.) Format info message and print on stderr. */
252b5132
RH
438
439void
1579bae1 440einfo (const char *fmt, ...)
252b5132 441{
1579bae1 442 va_list arg;
252b5132 443
e922bcab 444 fflush (stdout);
1579bae1 445 va_start (arg, fmt);
59ef2528 446 vfinfo (stderr, fmt, arg, TRUE);
1579bae1 447 va_end (arg);
e922bcab 448 fflush (stderr);
252b5132
RH
449}
450
6d5e62f8 451void
1579bae1 452info_assert (const char *file, unsigned int line)
252b5132
RH
453{
454 einfo (_("%F%P: internal error %s %d\n"), file, line);
455}
456
6d5e62f8 457/* ('m' for map) Format info message and print on map. */
252b5132
RH
458
459void
1579bae1 460minfo (const char *fmt, ...)
252b5132 461{
49fa1e15
AM
462 if (config.map_file != NULL)
463 {
464 va_list arg;
252b5132 465
49fa1e15
AM
466 va_start (arg, fmt);
467 vfinfo (config.map_file, fmt, arg, FALSE);
468 va_end (arg);
469 }
252b5132
RH
470}
471
472void
1579bae1 473lfinfo (FILE *file, const char *fmt, ...)
252b5132 474{
1579bae1 475 va_list arg;
252b5132 476
1579bae1 477 va_start (arg, fmt);
59ef2528 478 vfinfo (file, fmt, arg, FALSE);
1579bae1 479 va_end (arg);
252b5132
RH
480}
481\f
482/* Functions to print the link map. */
483
6d5e62f8 484void
1579bae1 485print_space (void)
252b5132
RH
486{
487 fprintf (config.map_file, " ");
488}
489
6d5e62f8 490void
1579bae1 491print_nl (void)
252b5132
RH
492{
493 fprintf (config.map_file, "\n");
494}
45455cdd
ILT
495
496/* A more or less friendly abort message. In ld.h abort is defined to
497 call this function. */
498
499void
1579bae1 500ld_abort (const char *file, int line, const char *fn)
45455cdd
ILT
501{
502 if (fn != NULL)
503 einfo (_("%P: internal error: aborting at %s line %d in %s\n"),
504 file, line, fn);
505 else
506 einfo (_("%P: internal error: aborting at %s line %d\n"),
507 file, line);
508 einfo (_("%P%F: please report this bug\n"));
509 xexit (1);
510}
This page took 0.550989 seconds and 4 git commands to generate.