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