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