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