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