* config/rx-parse.y: IMM->IMM_, take an extra parameter for the
[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,
dab69f68 3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011, 2012
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 {
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. */
dab69f68 243 {
39085894 244 etree_type node;
dab69f68
AM
245 etree_type *tp = va_arg (arg, etree_type *);
246
247 if (tp == NULL)
248 {
39085894 249 tp = &node;
dab69f68
AM
250 tp->type.filename = ldlex_filename ();
251 tp->type.lineno = lineno;
252 }
253 if (tp->type.filename != NULL)
254 fprintf (fp, "%s:%u", tp->type.filename, tp->type.lineno);
255 }
252b5132
RH
256 break;
257
258 case 'R':
6d5e62f8 259 /* Print all that's interesting about a relent. */
252b5132
RH
260 {
261 arelent *relent = va_arg (arg, arelent *);
6d5e62f8 262
252b5132
RH
263 lfinfo (fp, "%s+0x%v (type %s)",
264 (*(relent->sym_ptr_ptr))->name,
265 relent->addend,
266 relent->howto->name);
267 }
268 break;
6d5e62f8 269
252b5132
RH
270 case 'C':
271 case 'D':
272 case 'G':
270396f2 273 case 'H':
5cfb2bb2
AM
274 /* Clever filename:linenumber with function name if possible.
275 The arguments are a BFD, a section, and an offset. */
252b5132
RH
276 {
277 static bfd *last_bfd;
278 static char *last_file = NULL;
279 static char *last_function = NULL;
280 bfd *abfd;
281 asection *section;
282 bfd_vma offset;
5c1d2f5f 283 asymbol **asymbols = NULL;
252b5132
RH
284 const char *filename;
285 const char *functionname;
286 unsigned int linenumber;
b34976b6 287 bfd_boolean discard_last;
270396f2 288 bfd_boolean done;
252b5132
RH
289
290 abfd = va_arg (arg, bfd *);
291 section = va_arg (arg, asection *);
292 offset = va_arg (arg, bfd_vma);
293
5c1d2f5f 294 if (abfd != NULL)
252b5132 295 {
5c1d2f5f
AM
296 if (!bfd_generic_link_read_symbols (abfd))
297 einfo (_("%B%F: could not read symbols: %E\n"), abfd);
298
299 asymbols = bfd_get_outsymbols (abfd);
252b5132
RH
300 }
301
e1fffbe6
AM
302 /* The GNU Coding Standard requires that error messages
303 be of the form:
98d87ee7
NC
304
305 source-file-name:lineno: message
5cfb2bb2 306
e1fffbe6
AM
307 We do not always have a line number available so if
308 we cannot find them we print out the section name and
270396f2 309 offset instead. */
b34976b6 310 discard_last = TRUE;
e1fffbe6
AM
311 if (abfd != NULL
312 && bfd_find_nearest_line (abfd, section, asymbols, offset,
313 &filename, &functionname,
314 &linenumber))
252b5132 315 {
270396f2
AM
316 if (functionname != NULL
317 && (fmt[-1] == 'C' || fmt[-1] == 'H'))
5cfb2bb2 318 {
e1fffbe6
AM
319 /* Detect the case where we are printing out a
320 message for the same function as the last
321 call to vinfo ("%C"). In this situation do
322 not print out the ABFD filename or the
323 function name again. Note - we do still
324 print out the source filename, as this will
325 allow programs that parse the linker's output
326 (eg emacs) to correctly locate multiple
327 errors in the same source file. */
252b5132
RH
328 if (last_bfd == NULL
329 || last_file == NULL
330 || last_function == NULL
331 || last_bfd != abfd
5cfb2bb2 332 || (filename != NULL
42627821 333 && filename_cmp (last_file, filename) != 0)
252b5132
RH
334 || strcmp (last_function, functionname) != 0)
335 {
a1c16379 336 lfinfo (fp, _("%B: In function `%T':\n"),
98d87ee7 337 abfd, functionname);
252b5132
RH
338
339 last_bfd = abfd;
340 if (last_file != NULL)
341 free (last_file);
5cfb2bb2
AM
342 last_file = NULL;
343 if (filename)
344 last_file = xstrdup (filename);
252b5132
RH
345 if (last_function != NULL)
346 free (last_function);
d1b2b2dc 347 last_function = xstrdup (functionname);
252b5132 348 }
b34976b6 349 discard_last = FALSE;
252b5132 350 }
98d87ee7 351 else
a1c16379 352 lfinfo (fp, "%B:", abfd);
5cfb2bb2
AM
353
354 if (filename != NULL)
a1c16379 355 fprintf (fp, "%s:", filename);
5cfb2bb2 356
270396f2 357 done = fmt[-1] != 'H';
5cfb2bb2 358 if (functionname != NULL && fmt[-1] == 'G')
a1c16379
JJ
359 lfinfo (fp, "%T", functionname);
360 else if (filename != NULL && linenumber != 0)
270396f2 361 fprintf (fp, "%u%s", linenumber, ":" + done);
a1c16379 362 else
270396f2 363 done = FALSE;
252b5132 364 }
98d87ee7 365 else
270396f2
AM
366 {
367 lfinfo (fp, "%B:", abfd);
368 done = FALSE;
369 }
370 if (!done)
371 lfinfo (fp, "(%A+0x%v)", section, offset);
252b5132
RH
372
373 if (discard_last)
374 {
375 last_bfd = NULL;
376 if (last_file != NULL)
377 {
378 free (last_file);
379 last_file = NULL;
380 }
381 if (last_function != NULL)
382 {
383 free (last_function);
384 last_function = NULL;
385 }
386 }
387 }
388 break;
6d5e62f8 389
5d3236ee
DK
390 case 'p':
391 /* native (host) void* pointer, like printf */
392 fprintf (fp, "%p", va_arg (arg, void *));
393 break;
394
252b5132
RH
395 case 's':
396 /* arbitrary string, like printf */
397 fprintf (fp, "%s", va_arg (arg, char *));
398 break;
399
400 case 'd':
401 /* integer, like printf */
402 fprintf (fp, "%d", va_arg (arg, int));
403 break;
404
405 case 'u':
406 /* unsigned integer, like printf */
407 fprintf (fp, "%u", va_arg (arg, unsigned int));
408 break;
94b50910
AM
409
410 case 'l':
411 if (*fmt == 'd')
412 {
413 fprintf (fp, "%ld", va_arg (arg, long));
414 ++fmt;
415 break;
416 }
417 else if (*fmt == 'u')
418 {
419 fprintf (fp, "%lu", va_arg (arg, unsigned long));
420 ++fmt;
421 break;
422 }
423 /* Fall thru */
424
425 default:
426 fprintf (fp, "%%%c", fmt[-1]);
427 break;
252b5132
RH
428 }
429 }
430 }
431
59ef2528 432 if (is_warning && config.fatal_warnings)
b34976b6 433 config.make_executable = FALSE;
7ce691ae 434
b34976b6 435 if (fatal)
6d5e62f8 436 xexit (1);
252b5132
RH
437}
438
6d5e62f8 439/* Format info message and print on stdout. */
252b5132
RH
440
441/* (You would think this should be called just "info", but then you
1579bae1 442 would be hosed by LynxOS, which defines that name in its libc.) */
252b5132
RH
443
444void
1579bae1 445info_msg (const char *fmt, ...)
252b5132 446{
1579bae1 447 va_list arg;
252b5132 448
1579bae1 449 va_start (arg, fmt);
59ef2528 450 vfinfo (stdout, fmt, arg, FALSE);
1579bae1 451 va_end (arg);
252b5132
RH
452}
453
6d5e62f8 454/* ('e' for error.) Format info message and print on stderr. */
252b5132
RH
455
456void
1579bae1 457einfo (const char *fmt, ...)
252b5132 458{
1579bae1 459 va_list arg;
252b5132 460
e922bcab 461 fflush (stdout);
1579bae1 462 va_start (arg, fmt);
59ef2528 463 vfinfo (stderr, fmt, arg, TRUE);
1579bae1 464 va_end (arg);
e922bcab 465 fflush (stderr);
252b5132
RH
466}
467
6d5e62f8 468void
1579bae1 469info_assert (const char *file, unsigned int line)
252b5132
RH
470{
471 einfo (_("%F%P: internal error %s %d\n"), file, line);
472}
473
6d5e62f8 474/* ('m' for map) Format info message and print on map. */
252b5132
RH
475
476void
1579bae1 477minfo (const char *fmt, ...)
252b5132 478{
49fa1e15
AM
479 if (config.map_file != NULL)
480 {
481 va_list arg;
252b5132 482
49fa1e15
AM
483 va_start (arg, fmt);
484 vfinfo (config.map_file, fmt, arg, FALSE);
485 va_end (arg);
486 }
252b5132
RH
487}
488
489void
1579bae1 490lfinfo (FILE *file, const char *fmt, ...)
252b5132 491{
1579bae1 492 va_list arg;
252b5132 493
1579bae1 494 va_start (arg, fmt);
59ef2528 495 vfinfo (file, fmt, arg, FALSE);
1579bae1 496 va_end (arg);
252b5132
RH
497}
498\f
499/* Functions to print the link map. */
500
6d5e62f8 501void
1579bae1 502print_space (void)
252b5132
RH
503{
504 fprintf (config.map_file, " ");
505}
506
6d5e62f8 507void
1579bae1 508print_nl (void)
252b5132
RH
509{
510 fprintf (config.map_file, "\n");
511}
45455cdd
ILT
512
513/* A more or less friendly abort message. In ld.h abort is defined to
514 call this function. */
515
516void
1579bae1 517ld_abort (const char *file, int line, const char *fn)
45455cdd
ILT
518{
519 if (fn != NULL)
520 einfo (_("%P: internal error: aborting at %s line %d in %s\n"),
521 file, line, fn);
522 else
523 einfo (_("%P: internal error: aborting at %s line %d\n"),
524 file, line);
525 einfo (_("%P%F: please report this bug\n"));
526 xexit (1);
527}
This page took 0.713208 seconds and 4 git commands to generate.