[gdb/testsuite] Fix info-var.exp for debug info from other files
[external/binutils.git] / bfd / bfd.c
1 /* Generic BFD library interface and support routines.
2    Copyright (C) 1990-2019 Free Software Foundation, Inc.
3    Written by Cygnus Support.
4
5    This file is part of BFD, the Binary File Descriptor library.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
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.
16
17    You should have received a copy of the GNU General Public License
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.  */
21
22 /*
23 INODE
24 typedef bfd, Error reporting, BFD front end, BFD front end
25
26 SECTION
27         <<typedef bfd>>
28
29         A BFD has type <<bfd>>; objects of this type are the
30         cornerstone of any application using BFD. Using BFD
31         consists of making references though the BFD and to data in the BFD.
32
33         Here is the structure that defines the type <<bfd>>.  It
34         contains the major data about the file and pointers
35         to the rest of the data.
36
37 CODE_FRAGMENT
38 .
39 .enum bfd_direction
40 .  {
41 .    no_direction = 0,
42 .    read_direction = 1,
43 .    write_direction = 2,
44 .    both_direction = 3
45 .  };
46 .
47 .enum bfd_plugin_format
48 .  {
49 .    bfd_plugin_unknown = 0,
50 .    bfd_plugin_yes = 1,
51 .    bfd_plugin_no = 2
52 .  };
53 .
54 .struct bfd_build_id
55 .  {
56 .    bfd_size_type size;
57 .    bfd_byte data[1];
58 .  };
59 .
60 .struct bfd
61 .{
62 .  {* The filename the application opened the BFD with.  *}
63 .  const char *filename;
64 .
65 .  {* A pointer to the target jump table.  *}
66 .  const struct bfd_target *xvec;
67 .
68 .  {* The IOSTREAM, and corresponding IO vector that provide access
69 .     to the file backing the BFD.  *}
70 .  void *iostream;
71 .  const struct bfd_iovec *iovec;
72 .
73 .  {* The caching routines use these to maintain a
74 .     least-recently-used list of BFDs.  *}
75 .  struct bfd *lru_prev, *lru_next;
76 .
77 .  {* Track current file position (or current buffer offset for
78 .     in-memory BFDs).  When a file is closed by the caching routines,
79 .     BFD retains state information on the file here.  *}
80 .  ufile_ptr where;
81 .
82 .  {* File modified time, if mtime_set is TRUE.  *}
83 .  long mtime;
84 .
85 .  {* A unique identifier of the BFD  *}
86 .  unsigned int id;
87 .
88 .  {* The format which belongs to the BFD. (object, core, etc.)  *}
89 .  ENUM_BITFIELD (bfd_format) format : 3;
90 .
91 .  {* The direction with which the BFD was opened.  *}
92 .  ENUM_BITFIELD (bfd_direction) direction : 2;
93 .
94 .  {* Format_specific flags.  *}
95 .  flagword flags : 20;
96 .
97 .  {* Values that may appear in the flags field of a BFD.  These also
98 .     appear in the object_flags field of the bfd_target structure, where
99 .     they indicate the set of flags used by that backend (not all flags
100 .     are meaningful for all object file formats) (FIXME: at the moment,
101 .     the object_flags values have mostly just been copied from backend
102 .     to another, and are not necessarily correct).  *}
103 .
104 .#define BFD_NO_FLAGS                0x0
105 .
106 .  {* BFD contains relocation entries.  *}
107 .#define HAS_RELOC                   0x1
108 .
109 .  {* BFD is directly executable.  *}
110 .#define EXEC_P                      0x2
111 .
112 .  {* BFD has line number information (basically used for F_LNNO in a
113 .     COFF header).  *}
114 .#define HAS_LINENO                  0x4
115 .
116 .  {* BFD has debugging information.  *}
117 .#define HAS_DEBUG                  0x08
118 .
119 .  {* BFD has symbols.  *}
120 .#define HAS_SYMS                   0x10
121 .
122 .  {* BFD has local symbols (basically used for F_LSYMS in a COFF
123 .     header).  *}
124 .#define HAS_LOCALS                 0x20
125 .
126 .  {* BFD is a dynamic object.  *}
127 .#define DYNAMIC                    0x40
128 .
129 .  {* Text section is write protected (if D_PAGED is not set, this is
130 .     like an a.out NMAGIC file) (the linker sets this by default, but
131 .     clears it for -r or -N).  *}
132 .#define WP_TEXT                    0x80
133 .
134 .  {* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
135 .     linker sets this by default, but clears it for -r or -n or -N).  *}
136 .#define D_PAGED                   0x100
137 .
138 .  {* BFD is relaxable (this means that bfd_relax_section may be able to
139 .     do something) (sometimes bfd_relax_section can do something even if
140 .     this is not set).  *}
141 .#define BFD_IS_RELAXABLE          0x200
142 .
143 .  {* This may be set before writing out a BFD to request using a
144 .     traditional format.  For example, this is used to request that when
145 .     writing out an a.out object the symbols not be hashed to eliminate
146 .     duplicates.  *}
147 .#define BFD_TRADITIONAL_FORMAT    0x400
148 .
149 .  {* This flag indicates that the BFD contents are actually cached
150 .     in memory.  If this is set, iostream points to a bfd_in_memory
151 .     struct.  *}
152 .#define BFD_IN_MEMORY             0x800
153 .
154 .  {* This BFD has been created by the linker and doesn't correspond
155 .     to any input file.  *}
156 .#define BFD_LINKER_CREATED       0x1000
157 .
158 .  {* This may be set before writing out a BFD to request that it
159 .     be written using values for UIDs, GIDs, timestamps, etc. that
160 .     will be consistent from run to run.  *}
161 .#define BFD_DETERMINISTIC_OUTPUT 0x2000
162 .
163 .  {* Compress sections in this BFD.  *}
164 .#define BFD_COMPRESS             0x4000
165 .
166 .  {* Decompress sections in this BFD.  *}
167 .#define BFD_DECOMPRESS           0x8000
168 .
169 .  {* BFD is a dummy, for plugins.  *}
170 .#define BFD_PLUGIN              0x10000
171 .
172 .  {* Compress sections in this BFD with SHF_COMPRESSED from gABI.  *}
173 .#define BFD_COMPRESS_GABI       0x20000
174 .
175 .  {* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this
176 .     BFD.  *}
177 .#define BFD_CONVERT_ELF_COMMON  0x40000
178 .
179 .  {* Use the ELF STT_COMMON type in this BFD.  *}
180 .#define BFD_USE_ELF_STT_COMMON  0x80000
181 .
182 .  {* Flags bits to be saved in bfd_preserve_save.  *}
183 .#define BFD_FLAGS_SAVED \
184 .  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
185 .   | BFD_PLUGIN | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON \
186 .   | BFD_USE_ELF_STT_COMMON)
187 .
188 .  {* Flags bits which are for BFD use only.  *}
189 .#define BFD_FLAGS_FOR_BFD_USE_MASK \
190 .  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
191 .   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
192 .   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
193 .
194 .  {* Is the file descriptor being cached?  That is, can it be closed as
195 .     needed, and re-opened when accessed later?  *}
196 .  unsigned int cacheable : 1;
197 .
198 .  {* Marks whether there was a default target specified when the
199 .     BFD was opened. This is used to select which matching algorithm
200 .     to use to choose the back end.  *}
201 .  unsigned int target_defaulted : 1;
202 .
203 .  {* ... and here: (``once'' means at least once).  *}
204 .  unsigned int opened_once : 1;
205 .
206 .  {* Set if we have a locally maintained mtime value, rather than
207 .     getting it from the file each time.  *}
208 .  unsigned int mtime_set : 1;
209 .
210 .  {* Flag set if symbols from this BFD should not be exported.  *}
211 .  unsigned int no_export : 1;
212 .
213 .  {* Remember when output has begun, to stop strange things
214 .     from happening.  *}
215 .  unsigned int output_has_begun : 1;
216 .
217 .  {* Have archive map.  *}
218 .  unsigned int has_armap : 1;
219 .
220 .  {* Set if this is a thin archive.  *}
221 .  unsigned int is_thin_archive : 1;
222 .
223 .  {* Set if only required symbols should be added in the link hash table for
224 .     this object.  Used by VMS linkers.  *}
225 .  unsigned int selective_search : 1;
226 .
227 .  {* Set if this is the linker output BFD.  *}
228 .  unsigned int is_linker_output : 1;
229 .
230 .  {* Set if this is the linker input BFD.  *}
231 .  unsigned int is_linker_input : 1;
232 .
233 .  {* If this is an input for a compiler plug-in library.  *}
234 .  ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
235 .
236 .  {* Set if this is a plugin output file.  *}
237 .  unsigned int lto_output : 1;
238 .
239 .  {* Set if this is a slim LTO object not loaded with a compiler plugin.  *}
240 .  unsigned int lto_slim_object : 1;
241 .
242 .  {* Set to dummy BFD created when claimed by a compiler plug-in
243 .     library.  *}
244 .  bfd *plugin_dummy_bfd;
245 .
246 .  {* Currently my_archive is tested before adding origin to
247 .     anything. I believe that this can become always an add of
248 .     origin, with origin set to 0 for non archive files.  *}
249 .  ufile_ptr origin;
250 .
251 .  {* The origin in the archive of the proxy entry.  This will
252 .     normally be the same as origin, except for thin archives,
253 .     when it will contain the current offset of the proxy in the
254 .     thin archive rather than the offset of the bfd in its actual
255 .     container.  *}
256 .  ufile_ptr proxy_origin;
257 .
258 .  {* A hash table for section names.  *}
259 .  struct bfd_hash_table section_htab;
260 .
261 .  {* Pointer to linked list of sections.  *}
262 .  struct bfd_section *sections;
263 .
264 .  {* The last section on the section list.  *}
265 .  struct bfd_section *section_last;
266 .
267 .  {* The number of sections.  *}
268 .  unsigned int section_count;
269 .
270 .  {* A field used by _bfd_generic_link_add_archive_symbols.  This will
271 .     be used only for archive elements.  *}
272 .  int archive_pass;
273 .
274 .  {* Stuff only useful for object files:
275 .     The start address.  *}
276 .  bfd_vma start_address;
277 .
278 .  {* Symbol table for output BFD (with symcount entries).
279 .     Also used by the linker to cache input BFD symbols.  *}
280 .  struct bfd_symbol  **outsymbols;
281 .
282 .  {* Used for input and output.  *}
283 .  unsigned int symcount;
284 .
285 .  {* Used for slurped dynamic symbol tables.  *}
286 .  unsigned int dynsymcount;
287 .
288 .  {* Pointer to structure which contains architecture information.  *}
289 .  const struct bfd_arch_info *arch_info;
290 .
291 .  {* Stuff only useful for archives.  *}
292 .  void *arelt_data;
293 .  struct bfd *my_archive;      {* The containing archive BFD.  *}
294 .  struct bfd *archive_next;    {* The next BFD in the archive.  *}
295 .  struct bfd *archive_head;    {* The first BFD in the archive.  *}
296 .  struct bfd *nested_archives; {* List of nested archive in a flattened
297 .                                  thin archive.  *}
298 .
299 .  union {
300 .    {* For input BFDs, a chain of BFDs involved in a link.  *}
301 .    struct bfd *next;
302 .    {* For output BFD, the linker hash table.  *}
303 .    struct bfd_link_hash_table *hash;
304 .  } link;
305 .
306 .  {* Used by the back end to hold private data.  *}
307 .  union
308 .    {
309 .      struct aout_data_struct *aout_data;
310 .      struct artdata *aout_ar_data;
311 .      struct coff_tdata *coff_obj_data;
312 .      struct pe_tdata *pe_obj_data;
313 .      struct xcoff_tdata *xcoff_obj_data;
314 .      struct ecoff_tdata *ecoff_obj_data;
315 .      struct srec_data_struct *srec_data;
316 .      struct verilog_data_struct *verilog_data;
317 .      struct ihex_data_struct *ihex_data;
318 .      struct tekhex_data_struct *tekhex_data;
319 .      struct elf_obj_tdata *elf_obj_data;
320 .      struct mmo_data_struct *mmo_data;
321 .      struct sun_core_struct *sun_core_data;
322 .      struct sco5_core_struct *sco5_core_data;
323 .      struct trad_core_struct *trad_core_data;
324 .      struct som_data_struct *som_data;
325 .      struct hpux_core_struct *hpux_core_data;
326 .      struct hppabsd_core_struct *hppabsd_core_data;
327 .      struct sgi_core_struct *sgi_core_data;
328 .      struct lynx_core_struct *lynx_core_data;
329 .      struct osf_core_struct *osf_core_data;
330 .      struct cisco_core_struct *cisco_core_data;
331 .      struct versados_data_struct *versados_data;
332 .      struct netbsd_core_struct *netbsd_core_data;
333 .      struct mach_o_data_struct *mach_o_data;
334 .      struct mach_o_fat_data_struct *mach_o_fat_data;
335 .      struct plugin_data_struct *plugin_data;
336 .      struct bfd_pef_data_struct *pef_data;
337 .      struct bfd_pef_xlib_data_struct *pef_xlib_data;
338 .      struct bfd_sym_data_struct *sym_data;
339 .      void *any;
340 .    }
341 .  tdata;
342 .
343 .  {* Used by the application to hold private data.  *}
344 .  void *usrdata;
345 .
346 .  {* Where all the allocated stuff under this BFD goes.  This is a
347 .     struct objalloc *, but we use void * to avoid requiring the inclusion
348 .     of objalloc.h.  *}
349 .  void *memory;
350 .
351 .  {* For input BFDs, the build ID, if the object has one. *}
352 .  const struct bfd_build_id *build_id;
353 .};
354 .
355 .{* See note beside bfd_set_section_userdata.  *}
356 .static inline bfd_boolean
357 .bfd_set_cacheable (bfd * abfd, bfd_boolean val)
358 .{
359 .  abfd->cacheable = val;
360 .  return TRUE;
361 .}
362 .
363 */
364
365 #include "sysdep.h"
366 #include <stdarg.h>
367 #include "bfd.h"
368 #include "bfdver.h"
369 #include "libiberty.h"
370 #include "demangle.h"
371 #include "safe-ctype.h"
372 #include "bfdlink.h"
373 #include "libbfd.h"
374 #include "coff/internal.h"
375 #include "coff/sym.h"
376 #include "libcoff.h"
377 #include "libecoff.h"
378 #undef obj_symbols
379 #include "elf-bfd.h"
380
381 #ifndef EXIT_FAILURE
382 #define EXIT_FAILURE 1
383 #endif
384
385 \f
386 /* provide storage for subsystem, stack and heap data which may have been
387    passed in on the command line.  Ld puts this data into a bfd_link_info
388    struct which ultimately gets passed in to the bfd.  When it arrives, copy
389    it to the following struct so that the data will be available in coffcode.h
390    where it is needed.  The typedef's used are defined in bfd.h */
391 \f
392 /*
393 INODE
394 Error reporting, Miscellaneous, typedef bfd, BFD front end
395
396 SECTION
397         Error reporting
398
399         Most BFD functions return nonzero on success (check their
400         individual documentation for precise semantics).  On an error,
401         they call <<bfd_set_error>> to set an error condition that callers
402         can check by calling <<bfd_get_error>>.
403         If that returns <<bfd_error_system_call>>, then check
404         <<errno>>.
405
406         The easiest way to report a BFD error to the user is to
407         use <<bfd_perror>>.
408
409 SUBSECTION
410         Type <<bfd_error_type>>
411
412         The values returned by <<bfd_get_error>> are defined by the
413         enumerated type <<bfd_error_type>>.
414
415 CODE_FRAGMENT
416 .
417 .typedef enum bfd_error
418 .{
419 .  bfd_error_no_error = 0,
420 .  bfd_error_system_call,
421 .  bfd_error_invalid_target,
422 .  bfd_error_wrong_format,
423 .  bfd_error_wrong_object_format,
424 .  bfd_error_invalid_operation,
425 .  bfd_error_no_memory,
426 .  bfd_error_no_symbols,
427 .  bfd_error_no_armap,
428 .  bfd_error_no_more_archived_files,
429 .  bfd_error_malformed_archive,
430 .  bfd_error_missing_dso,
431 .  bfd_error_file_not_recognized,
432 .  bfd_error_file_ambiguously_recognized,
433 .  bfd_error_no_contents,
434 .  bfd_error_nonrepresentable_section,
435 .  bfd_error_no_debug_section,
436 .  bfd_error_bad_value,
437 .  bfd_error_file_truncated,
438 .  bfd_error_file_too_big,
439 .  bfd_error_on_input,
440 .  bfd_error_invalid_error_code
441 .}
442 .bfd_error_type;
443 .
444 */
445
446 static bfd_error_type bfd_error = bfd_error_no_error;
447 static bfd *input_bfd = NULL;
448 static bfd_error_type input_error = bfd_error_no_error;
449
450 const char *const bfd_errmsgs[] =
451 {
452   N_("no error"),
453   N_("system call error"),
454   N_("invalid bfd target"),
455   N_("file in wrong format"),
456   N_("archive object file in wrong format"),
457   N_("invalid operation"),
458   N_("memory exhausted"),
459   N_("no symbols"),
460   N_("archive has no index; run ranlib to add one"),
461   N_("no more archived files"),
462   N_("malformed archive"),
463   N_("DSO missing from command line"),
464   N_("file format not recognized"),
465   N_("file format is ambiguous"),
466   N_("section has no contents"),
467   N_("nonrepresentable section on output"),
468   N_("symbol needs debug section which does not exist"),
469   N_("bad value"),
470   N_("file truncated"),
471   N_("file too big"),
472   N_("error reading %s: %s"),
473   N_("#<invalid error code>")
474 };
475
476 /*
477 FUNCTION
478         bfd_get_error
479
480 SYNOPSIS
481         bfd_error_type bfd_get_error (void);
482
483 DESCRIPTION
484         Return the current BFD error condition.
485 */
486
487 bfd_error_type
488 bfd_get_error (void)
489 {
490   return bfd_error;
491 }
492
493 /*
494 FUNCTION
495         bfd_set_error
496
497 SYNOPSIS
498         void bfd_set_error (bfd_error_type error_tag);
499
500 DESCRIPTION
501         Set the BFD error condition to be @var{error_tag}.
502
503         @var{error_tag} must not be bfd_error_on_input.  Use
504         bfd_set_input_error for input errors instead.
505 */
506
507 void
508 bfd_set_error (bfd_error_type error_tag)
509 {
510   bfd_error = error_tag;
511   if (bfd_error >= bfd_error_on_input)
512     abort ();
513 }
514
515 /*
516 FUNCTION
517         bfd_set_input_error
518
519 SYNOPSIS
520         void bfd_set_input_error (bfd *input, bfd_error_type error_tag);
521
522 DESCRIPTION
523
524         Set the BFD error condition to be bfd_error_on_input.
525         @var{input} is the input bfd where the error occurred, and
526         @var{error_tag} the bfd_error_type error.
527 */
528
529 void
530 bfd_set_input_error (bfd *input, bfd_error_type error_tag)
531 {
532   /* This is an error that occurred during bfd_close when writing an
533      archive, but on one of the input files.  */
534   bfd_error = bfd_error_on_input;
535   input_bfd = input;
536   input_error = error_tag;
537   if (input_error >= bfd_error_on_input)
538     abort ();
539 }
540
541 /*
542 FUNCTION
543         bfd_errmsg
544
545 SYNOPSIS
546         const char *bfd_errmsg (bfd_error_type error_tag);
547
548 DESCRIPTION
549         Return a string describing the error @var{error_tag}, or
550         the system error if @var{error_tag} is <<bfd_error_system_call>>.
551 */
552
553 const char *
554 bfd_errmsg (bfd_error_type error_tag)
555 {
556 #ifndef errno
557   extern int errno;
558 #endif
559   if (error_tag == bfd_error_on_input)
560     {
561       char *buf;
562       const char *msg = bfd_errmsg (input_error);
563
564       if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
565           != -1)
566         return buf;
567
568       /* Ick, what to do on out of memory?  */
569       return msg;
570     }
571
572   if (error_tag == bfd_error_system_call)
573     return xstrerror (errno);
574
575   if (error_tag > bfd_error_invalid_error_code)
576     error_tag = bfd_error_invalid_error_code;   /* sanity check */
577
578   return _(bfd_errmsgs [error_tag]);
579 }
580
581 /*
582 FUNCTION
583         bfd_perror
584
585 SYNOPSIS
586         void bfd_perror (const char *message);
587
588 DESCRIPTION
589         Print to the standard error stream a string describing the
590         last BFD error that occurred, or the last system error if
591         the last BFD error was a system call failure.  If @var{message}
592         is non-NULL and non-empty, the error string printed is preceded
593         by @var{message}, a colon, and a space.  It is followed by a newline.
594 */
595
596 void
597 bfd_perror (const char *message)
598 {
599   fflush (stdout);
600   if (message == NULL || *message == '\0')
601     fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
602   else
603     fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
604   fflush (stderr);
605 }
606
607 /*
608 SUBSECTION
609         BFD error handler
610
611         Some BFD functions want to print messages describing the
612         problem.  They call a BFD error handler function.  This
613         function may be overridden by the program.
614
615         The BFD error handler acts like vprintf.
616
617 CODE_FRAGMENT
618 .
619 .typedef void (*bfd_error_handler_type) (const char *, va_list);
620 .
621 */
622
623 /* The program name used when printing BFD error messages.  */
624
625 static const char *_bfd_error_program_name;
626
627 /* Support for positional parameters.  */
628
629 union _bfd_doprnt_args
630 {
631   int i;
632   long l;
633   long long ll;
634   double d;
635   long double ld;
636   void *p;
637   enum
638   {
639     Bad,
640     Int,
641     Long,
642     LongLong,
643     Double,
644     LongDouble,
645     Ptr
646   } type;
647 };
648
649 /* This macro and _bfd_doprnt taken from libiberty _doprnt.c, tidied a
650    little and extended to handle '%pA', '%pB' and positional parameters.  */
651
652 #define PRINT_TYPE(TYPE, FIELD) \
653   do                                                            \
654     {                                                           \
655       TYPE value = (TYPE) args[arg_no].FIELD;                   \
656       result = fprintf (stream, specifier, value);              \
657     } while (0)
658
659 static int
660 _bfd_doprnt (FILE *stream, const char *format, union _bfd_doprnt_args *args)
661 {
662   const char *ptr = format;
663   char specifier[128];
664   int total_printed = 0;
665   unsigned int arg_count = 0;
666
667   while (*ptr != '\0')
668     {
669       int result;
670
671       if (*ptr != '%')
672         {
673           /* While we have regular characters, print them.  */
674           char *end = strchr (ptr, '%');
675           if (end != NULL)
676             result = fprintf (stream, "%.*s", (int) (end - ptr), ptr);
677           else
678             result = fprintf (stream, "%s", ptr);
679           ptr += result;
680         }
681       else if (ptr[1] == '%')
682         {
683           fputc ('%', stream);
684           result = 1;
685           ptr += 2;
686         }
687       else
688         {
689           /* We have a format specifier!  */
690           char *sptr = specifier;
691           int wide_width = 0, short_width = 0;
692           unsigned int arg_no;
693
694           /* Copy the % and move forward.  */
695           *sptr++ = *ptr++;
696
697           /* Check for a positional parameter.  */
698           arg_no = -1u;
699           if (*ptr != '0' && ISDIGIT (*ptr) && ptr[1] == '$')
700             {
701               arg_no = *ptr - '1';
702               ptr += 2;
703             }
704
705           /* Move past flags.  */
706           while (strchr ("-+ #0'I", *ptr))
707             *sptr++ = *ptr++;
708
709           if (*ptr == '*')
710             {
711               int value;
712               unsigned int arg_index;
713
714               ptr++;
715               arg_index = arg_count;
716               if (*ptr != '0' && ISDIGIT (*ptr) && ptr[1] == '$')
717                 {
718                   arg_index = *ptr - '1';
719                   ptr += 2;
720                 }
721               value = abs (args[arg_index].i);
722               arg_count++;
723               sptr += sprintf (sptr, "%d", value);
724             }
725           else
726             /* Handle explicit numeric value.  */
727             while (ISDIGIT (*ptr))
728               *sptr++ = *ptr++;
729
730           /* Precision.  */
731           if (*ptr == '.')
732             {
733               /* Copy and go past the period.  */
734               *sptr++ = *ptr++;
735               if (*ptr == '*')
736                 {
737                   int value;
738                   unsigned int arg_index;
739
740                   ptr++;
741                   arg_index = arg_count;
742                   if (*ptr != '0' && ISDIGIT (*ptr) && ptr[1] == '$')
743                     {
744                       arg_index = *ptr - '1';
745                       ptr += 2;
746                     }
747                   value = abs (args[arg_index].i);
748                   arg_count++;
749                   sptr += sprintf (sptr, "%d", value);
750                 }
751               else
752                 /* Handle explicit numeric value.  */
753                 while (ISDIGIT (*ptr))
754                   *sptr++ = *ptr++;
755             }
756           while (strchr ("hlL", *ptr))
757             {
758               switch (*ptr)
759                 {
760                 case 'h':
761                   short_width = 1;
762                   break;
763                 case 'l':
764                   wide_width++;
765                   break;
766                 case 'L':
767                   wide_width = 2;
768                   break;
769                 default:
770                   abort();
771                 }
772               *sptr++ = *ptr++;
773             }
774
775           /* Copy the type specifier, and NULL terminate.  */
776           *sptr++ = *ptr++;
777           *sptr = '\0';
778           if ((int) arg_no < 0)
779             arg_no = arg_count;
780
781           switch (ptr[-1])
782             {
783             case 'd':
784             case 'i':
785             case 'o':
786             case 'u':
787             case 'x':
788             case 'X':
789             case 'c':
790               {
791                 /* Short values are promoted to int, so just copy it
792                    as an int and trust the C library printf to cast it
793                    to the right width.  */
794                 if (short_width)
795                   PRINT_TYPE (int, i);
796                 else
797                   {
798                     switch (wide_width)
799                       {
800                       case 0:
801                         PRINT_TYPE (int, i);
802                         break;
803                       case 1:
804                         PRINT_TYPE (long, l);
805                         break;
806                       case 2:
807                       default:
808 #if defined (__MSVCRT__)
809                         sptr[-3] = 'I';
810                         sptr[-2] = '6';
811                         sptr[-1] = '4';
812                         *sptr++ = ptr[-1];
813                         *sptr = '\0';
814 #endif
815 #if defined (__GNUC__) || defined (HAVE_LONG_LONG)
816                         PRINT_TYPE (long long, ll);
817 #else
818                         /* Fake it and hope for the best.  */
819                         PRINT_TYPE (long, l);
820 #endif
821                         break;
822                       }
823                   }
824               }
825               break;
826             case 'f':
827             case 'e':
828             case 'E':
829             case 'g':
830             case 'G':
831               {
832                 if (wide_width == 0)
833                   PRINT_TYPE (double, d);
834                 else
835                   {
836 #if defined (__GNUC__) || defined (HAVE_LONG_DOUBLE)
837                     PRINT_TYPE (long double, ld);
838 #else
839                     /* Fake it and hope for the best.  */
840                     PRINT_TYPE (double, d);
841 #endif
842                   }
843               }
844               break;
845             case 's':
846               PRINT_TYPE (char *, p);
847               break;
848             case 'p':
849               if (*ptr == 'A')
850                 {
851                   asection *sec;
852                   bfd *abfd;
853                   const char *group = NULL;
854                   struct coff_comdat_info *ci;
855
856                   ptr++;
857                   sec = (asection *) args[arg_no].p;
858                   if (sec == NULL)
859                     /* Invoking %pA with a null section pointer is an
860                        internal error.  */
861                     abort ();
862                   abfd = sec->owner;
863                   if (abfd != NULL
864                       && bfd_get_flavour (abfd) == bfd_target_elf_flavour
865                       && elf_next_in_group (sec) != NULL
866                       && (sec->flags & SEC_GROUP) == 0)
867                     group = elf_group_name (sec);
868                   else if (abfd != NULL
869                            && bfd_get_flavour (abfd) == bfd_target_coff_flavour
870                            && (ci = bfd_coff_get_comdat_section (sec->owner,
871                                                                  sec)) != NULL)
872                     group = ci->name;
873                   if (group != NULL)
874                     result = fprintf (stream, "%s[%s]", sec->name, group);
875                   else
876                     result = fprintf (stream, "%s", sec->name);
877                 }
878               else if (*ptr == 'B')
879                 {
880                   bfd *abfd;
881
882                   ptr++;
883                   abfd = (bfd *) args[arg_no].p;
884                   if (abfd == NULL)
885                     /* Invoking %pB with a null bfd pointer is an
886                        internal error.  */
887                     abort ();
888                   else if (abfd->my_archive
889                            && !bfd_is_thin_archive (abfd->my_archive))
890                     result = fprintf (stream, "%s(%s)",
891                                       abfd->my_archive->filename,
892                                       abfd->filename);
893                   else
894                     result = fprintf (stream, "%s", abfd->filename);
895                 }
896               else
897                 PRINT_TYPE (void *, p);
898               break;
899             default:
900               abort();
901             }
902           arg_count++;
903         }
904       if (result == -1)
905         return -1;
906       total_printed += result;
907     }
908
909   return total_printed;
910 }
911
912 /* First pass over FORMAT to gather ARGS.  Returns number of args.  */
913
914 static unsigned int
915 _bfd_doprnt_scan (const char *format, union _bfd_doprnt_args *args)
916 {
917   const char *ptr = format;
918   unsigned int arg_count = 0;
919
920   while (*ptr != '\0')
921     {
922       if (*ptr != '%')
923         {
924           ptr = strchr (ptr, '%');
925           if (ptr == NULL)
926             break;
927         }
928       else if (ptr[1] == '%')
929         ptr += 2;
930       else
931         {
932           int wide_width = 0, short_width = 0;
933           unsigned int arg_no;
934           int arg_type;
935
936           ptr++;
937
938           /* Check for a positional parameter.  */
939           arg_no = -1u;
940           if (*ptr != '0' && ISDIGIT (*ptr) && ptr[1] == '$')
941             {
942               arg_no = *ptr - '1';
943               ptr += 2;
944             }
945
946           /* Move past flags.  */
947           while (strchr ("-+ #0'I", *ptr))
948             ptr++;
949
950           if (*ptr == '*')
951             {
952               unsigned int arg_index;
953
954               ptr++;
955               arg_index = arg_count;
956               if (*ptr != '0' && ISDIGIT (*ptr) && ptr[1] == '$')
957                 {
958                   arg_index = *ptr - '1';
959                   ptr += 2;
960                 }
961               if (arg_index >= 9)
962                 abort ();
963               args[arg_index].type = Int;
964               arg_count++;
965             }
966           else
967             /* Handle explicit numeric value.  */
968             while (ISDIGIT (*ptr))
969               ptr++;
970
971           /* Precision.  */
972           if (*ptr == '.')
973             {
974               ptr++;
975               if (*ptr == '*')
976                 {
977                   unsigned int arg_index;
978
979                   ptr++;
980                   arg_index = arg_count;
981                   if (*ptr != '0' && ISDIGIT (*ptr) && ptr[1] == '$')
982                     {
983                       arg_index = *ptr - '1';
984                       ptr += 2;
985                     }
986                   if (arg_index >= 9)
987                     abort ();
988                   args[arg_index].type = Int;
989                   arg_count++;
990                 }
991               else
992                 /* Handle explicit numeric value.  */
993                 while (ISDIGIT (*ptr))
994                   ptr++;
995             }
996           while (strchr ("hlL", *ptr))
997             {
998               switch (*ptr)
999                 {
1000                 case 'h':
1001                   short_width = 1;
1002                   break;
1003                 case 'l':
1004                   wide_width++;
1005                   break;
1006                 case 'L':
1007                   wide_width = 2;
1008                   break;
1009                 default:
1010                   abort();
1011                 }
1012               ptr++;
1013             }
1014
1015           ptr++;
1016           if ((int) arg_no < 0)
1017             arg_no = arg_count;
1018
1019           arg_type = Bad;
1020           switch (ptr[-1])
1021             {
1022             case 'd':
1023             case 'i':
1024             case 'o':
1025             case 'u':
1026             case 'x':
1027             case 'X':
1028             case 'c':
1029               {
1030                 if (short_width)
1031                   arg_type = Int;
1032                 else
1033                   {
1034                     switch (wide_width)
1035                       {
1036                       case 0:
1037                         arg_type = Int;
1038                         break;
1039                       case 1:
1040                         arg_type = Long;
1041                         break;
1042                       case 2:
1043                       default:
1044 #if defined (__GNUC__) || defined (HAVE_LONG_LONG)
1045                         arg_type = LongLong;
1046 #else
1047                         arg_type = Long;
1048 #endif
1049                         break;
1050                       }
1051                   }
1052               }
1053               break;
1054             case 'f':
1055             case 'e':
1056             case 'E':
1057             case 'g':
1058             case 'G':
1059               {
1060                 if (wide_width == 0)
1061                   arg_type = Double;
1062                 else
1063                   {
1064 #if defined (__GNUC__) || defined (HAVE_LONG_DOUBLE)
1065                     arg_type = LongDouble;
1066 #else
1067                     arg_type = Double;
1068 #endif
1069                   }
1070               }
1071               break;
1072             case 's':
1073               arg_type = Ptr;
1074               break;
1075             case 'p':
1076               if (*ptr == 'A' || *ptr == 'B')
1077                 ptr++;
1078               arg_type = Ptr;
1079               break;
1080             default:
1081               abort();
1082             }
1083
1084           if (arg_no >= 9)
1085             abort ();
1086           args[arg_no].type = arg_type;
1087           arg_count++;
1088         }
1089     }
1090
1091   return arg_count;
1092 }
1093
1094 static void
1095 error_handler_internal (const char *fmt, va_list ap)
1096 {
1097   unsigned int i, arg_count;
1098   union _bfd_doprnt_args args[9];
1099
1100   for (i = 0; i < sizeof (args) / sizeof (args[0]); i++)
1101     args[i].type = Bad;
1102
1103   arg_count = _bfd_doprnt_scan (fmt, args);
1104   for (i = 0; i < arg_count; i++)
1105     {
1106       switch (args[i].type)
1107         {
1108         case Int:
1109           args[i].i = va_arg (ap, int);
1110           break;
1111         case Long:
1112           args[i].l = va_arg (ap, long);
1113           break;
1114         case LongLong:
1115           args[i].ll = va_arg (ap, long long);
1116           break;
1117         case Double:
1118           args[i].d = va_arg (ap, double);
1119           break;
1120         case LongDouble:
1121           args[i].ld = va_arg (ap, long double);
1122           break;
1123         case Ptr:
1124           args[i].p = va_arg (ap, void *);
1125           break;
1126         default:
1127           abort ();
1128         }
1129     }
1130
1131   /* PR 4992: Don't interrupt output being sent to stdout.  */
1132   fflush (stdout);
1133
1134   if (_bfd_error_program_name != NULL)
1135     fprintf (stderr, "%s: ", _bfd_error_program_name);
1136   else
1137     fprintf (stderr, "BFD: ");
1138
1139   _bfd_doprnt (stderr, fmt, args);
1140
1141   /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
1142      warning, so use the fputc function to avoid it.  */
1143   fputc ('\n', stderr);
1144   fflush (stderr);
1145 }
1146
1147 /* This is a function pointer to the routine which should handle BFD
1148    error messages.  It is called when a BFD routine encounters an
1149    error for which it wants to print a message.  Going through a
1150    function pointer permits a program linked against BFD to intercept
1151    the messages and deal with them itself.  */
1152
1153 static bfd_error_handler_type _bfd_error_internal = error_handler_internal;
1154
1155 /*
1156 FUNCTION
1157         _bfd_error_handler
1158
1159 SYNOPSIS
1160         void _bfd_error_handler (const char *fmt, ...) ATTRIBUTE_PRINTF_1;
1161
1162 DESCRIPTION
1163         This is the default routine to handle BFD error messages.
1164         Like fprintf (stderr, ...), but also handles some extra format
1165         specifiers.
1166
1167         %pA section name from section.  For group components, prints
1168         group name too.
1169         %pB file name from bfd.  For archive components, prints
1170         archive too.
1171
1172         Beware: Only supports a maximum of 9 format arguments.
1173 */
1174
1175 void
1176 _bfd_error_handler (const char *fmt, ...)
1177 {
1178   va_list ap;
1179
1180   va_start (ap, fmt);
1181   _bfd_error_internal (fmt, ap);
1182   va_end (ap);
1183 }
1184
1185 /*
1186 FUNCTION
1187         bfd_set_error_handler
1188
1189 SYNOPSIS
1190         bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
1191
1192 DESCRIPTION
1193         Set the BFD error handler function.  Returns the previous
1194         function.
1195 */
1196
1197 bfd_error_handler_type
1198 bfd_set_error_handler (bfd_error_handler_type pnew)
1199 {
1200   bfd_error_handler_type pold;
1201
1202   pold = _bfd_error_internal;
1203   _bfd_error_internal = pnew;
1204   return pold;
1205 }
1206
1207 /*
1208 FUNCTION
1209         bfd_set_error_program_name
1210
1211 SYNOPSIS
1212         void bfd_set_error_program_name (const char *);
1213
1214 DESCRIPTION
1215         Set the program name to use when printing a BFD error.  This
1216         is printed before the error message followed by a colon and
1217         space.  The string must not be changed after it is passed to
1218         this function.
1219 */
1220
1221 void
1222 bfd_set_error_program_name (const char *name)
1223 {
1224   _bfd_error_program_name = name;
1225 }
1226
1227 /*
1228 SUBSECTION
1229         BFD assert handler
1230
1231         If BFD finds an internal inconsistency, the bfd assert
1232         handler is called with information on the BFD version, BFD
1233         source file and line.  If this happens, most programs linked
1234         against BFD are expected to want to exit with an error, or mark
1235         the current BFD operation as failed, so it is recommended to
1236         override the default handler, which just calls
1237         _bfd_error_handler and continues.
1238
1239 CODE_FRAGMENT
1240 .
1241 .typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
1242 .                                         const char *bfd_version,
1243 .                                         const char *bfd_file,
1244 .                                         int bfd_line);
1245 .
1246 */
1247
1248 /* Note the use of bfd_ prefix on the parameter names above: we want to
1249    show which one is the message and which is the version by naming the
1250    parameters, but avoid polluting the program-using-bfd namespace as
1251    the typedef is visible in the exported headers that the program
1252    includes.  Below, it's just for consistency.  */
1253
1254 static void
1255 _bfd_default_assert_handler (const char *bfd_formatmsg,
1256                              const char *bfd_version,
1257                              const char *bfd_file,
1258                              int bfd_line)
1259
1260 {
1261   _bfd_error_handler (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
1262 }
1263
1264 /* Similar to _bfd_error_handler, a program can decide to exit on an
1265    internal BFD error.  We use a non-variadic type to simplify passing
1266    on parameters to other functions, e.g. _bfd_error_handler.  */
1267
1268 static bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
1269
1270 /*
1271 FUNCTION
1272         bfd_set_assert_handler
1273
1274 SYNOPSIS
1275         bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
1276
1277 DESCRIPTION
1278         Set the BFD assert handler function.  Returns the previous
1279         function.
1280 */
1281
1282 bfd_assert_handler_type
1283 bfd_set_assert_handler (bfd_assert_handler_type pnew)
1284 {
1285   bfd_assert_handler_type pold;
1286
1287   pold = _bfd_assert_handler;
1288   _bfd_assert_handler = pnew;
1289   return pold;
1290 }
1291 \f
1292 /*
1293 INODE
1294 Miscellaneous, Memory Usage, Error reporting, BFD front end
1295
1296 SECTION
1297         Miscellaneous
1298
1299 SUBSECTION
1300         Miscellaneous functions
1301 */
1302
1303 /*
1304 FUNCTION
1305         bfd_get_reloc_upper_bound
1306
1307 SYNOPSIS
1308         long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
1309
1310 DESCRIPTION
1311         Return the number of bytes required to store the
1312         relocation information associated with section @var{sect}
1313         attached to bfd @var{abfd}.  If an error occurs, return -1.
1314
1315 */
1316
1317 long
1318 bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
1319 {
1320   if (abfd->format != bfd_object)
1321     {
1322       bfd_set_error (bfd_error_invalid_operation);
1323       return -1;
1324     }
1325
1326   return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
1327 }
1328
1329 /*
1330 FUNCTION
1331         bfd_canonicalize_reloc
1332
1333 SYNOPSIS
1334         long bfd_canonicalize_reloc
1335           (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
1336
1337 DESCRIPTION
1338         Call the back end associated with the open BFD
1339         @var{abfd} and translate the external form of the relocation
1340         information attached to @var{sec} into the internal canonical
1341         form.  Place the table into memory at @var{loc}, which has
1342         been preallocated, usually by a call to
1343         <<bfd_get_reloc_upper_bound>>.  Returns the number of relocs, or
1344         -1 on error.
1345
1346         The @var{syms} table is also needed for horrible internal magic
1347         reasons.
1348
1349 */
1350 long
1351 bfd_canonicalize_reloc (bfd *abfd,
1352                         sec_ptr asect,
1353                         arelent **location,
1354                         asymbol **symbols)
1355 {
1356   if (abfd->format != bfd_object)
1357     {
1358       bfd_set_error (bfd_error_invalid_operation);
1359       return -1;
1360     }
1361
1362   return BFD_SEND (abfd, _bfd_canonicalize_reloc,
1363                    (abfd, asect, location, symbols));
1364 }
1365
1366 /*
1367 FUNCTION
1368         bfd_set_reloc
1369
1370 SYNOPSIS
1371         void bfd_set_reloc
1372           (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
1373
1374 DESCRIPTION
1375         Set the relocation pointer and count within
1376         section @var{sec} to the values @var{rel} and @var{count}.
1377         The argument @var{abfd} is ignored.
1378
1379 .#define bfd_set_reloc(abfd, asect, location, count) \
1380 .       BFD_SEND (abfd, _bfd_set_reloc, (abfd, asect, location, count))
1381 */
1382
1383 /*
1384 FUNCTION
1385         bfd_set_file_flags
1386
1387 SYNOPSIS
1388         bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
1389
1390 DESCRIPTION
1391         Set the flag word in the BFD @var{abfd} to the value @var{flags}.
1392
1393         Possible errors are:
1394         o <<bfd_error_wrong_format>> - The target bfd was not of object format.
1395         o <<bfd_error_invalid_operation>> - The target bfd was open for reading.
1396         o <<bfd_error_invalid_operation>> -
1397         The flag word contained a bit which was not applicable to the
1398         type of file.  E.g., an attempt was made to set the <<D_PAGED>> bit
1399         on a BFD format which does not support demand paging.
1400
1401 */
1402
1403 bfd_boolean
1404 bfd_set_file_flags (bfd *abfd, flagword flags)
1405 {
1406   if (abfd->format != bfd_object)
1407     {
1408       bfd_set_error (bfd_error_wrong_format);
1409       return FALSE;
1410     }
1411
1412   if (bfd_read_p (abfd))
1413     {
1414       bfd_set_error (bfd_error_invalid_operation);
1415       return FALSE;
1416     }
1417
1418   bfd_get_file_flags (abfd) = flags;
1419   if ((flags & bfd_applicable_file_flags (abfd)) != flags)
1420     {
1421       bfd_set_error (bfd_error_invalid_operation);
1422       return FALSE;
1423     }
1424
1425   return TRUE;
1426 }
1427
1428 void
1429 bfd_assert (const char *file, int line)
1430 {
1431   /* xgettext:c-format */
1432   (*_bfd_assert_handler) (_("BFD %s assertion fail %s:%d"),
1433                           BFD_VERSION_STRING, file, line);
1434 }
1435
1436 /* A more or less friendly abort message.  In libbfd.h abort is
1437    defined to call this function.  */
1438
1439 void
1440 _bfd_abort (const char *file, int line, const char *fn)
1441 {
1442   if (fn != NULL)
1443     _bfd_error_handler
1444       /* xgettext:c-format */
1445       (_("BFD %s internal error, aborting at %s:%d in %s\n"),
1446        BFD_VERSION_STRING, file, line, fn);
1447   else
1448     _bfd_error_handler
1449       /* xgettext:c-format */
1450       (_("BFD %s internal error, aborting at %s:%d\n"),
1451        BFD_VERSION_STRING, file, line);
1452   _bfd_error_handler (_("Please report this bug.\n"));
1453   _exit (EXIT_FAILURE);
1454 }
1455
1456 /*
1457 FUNCTION
1458         bfd_get_arch_size
1459
1460 SYNOPSIS
1461         int bfd_get_arch_size (bfd *abfd);
1462
1463 DESCRIPTION
1464         Returns the normalized architecture address size, in bits, as
1465         determined by the object file's format.  By normalized, we mean
1466         either 32 or 64.  For ELF, this information is included in the
1467         header.  Use bfd_arch_bits_per_address for number of bits in
1468         the architecture address.
1469
1470 RETURNS
1471         Returns the arch size in bits if known, <<-1>> otherwise.
1472 */
1473
1474 int
1475 bfd_get_arch_size (bfd *abfd)
1476 {
1477   if (abfd->xvec->flavour == bfd_target_elf_flavour)
1478     return get_elf_backend_data (abfd)->s->arch_size;
1479
1480   return bfd_arch_bits_per_address (abfd) > 32 ? 64 : 32;
1481 }
1482
1483 /*
1484 FUNCTION
1485         bfd_get_sign_extend_vma
1486
1487 SYNOPSIS
1488         int bfd_get_sign_extend_vma (bfd *abfd);
1489
1490 DESCRIPTION
1491         Indicates if the target architecture "naturally" sign extends
1492         an address.  Some architectures implicitly sign extend address
1493         values when they are converted to types larger than the size
1494         of an address.  For instance, bfd_get_start_address() will
1495         return an address sign extended to fill a bfd_vma when this is
1496         the case.
1497
1498 RETURNS
1499         Returns <<1>> if the target architecture is known to sign
1500         extend addresses, <<0>> if the target architecture is known to
1501         not sign extend addresses, and <<-1>> otherwise.
1502 */
1503
1504 int
1505 bfd_get_sign_extend_vma (bfd *abfd)
1506 {
1507   char *name;
1508
1509   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1510     return get_elf_backend_data (abfd)->sign_extend_vma;
1511
1512   name = bfd_get_target (abfd);
1513
1514   /* Return a proper value for DJGPP & PE COFF.
1515      This function is required for DWARF2 support, but there is
1516      no place to store this information in the COFF back end.
1517      Should enough other COFF targets add support for DWARF2,
1518      a place will have to be found.  Until then, this hack will do.  */
1519   if (CONST_STRNEQ (name, "coff-go32")
1520       || strcmp (name, "pe-i386") == 0
1521       || strcmp (name, "pei-i386") == 0
1522       || strcmp (name, "pe-x86-64") == 0
1523       || strcmp (name, "pei-x86-64") == 0
1524       || strcmp (name, "pe-arm-wince-little") == 0
1525       || strcmp (name, "pei-arm-wince-little") == 0
1526       || strcmp (name, "aixcoff-rs6000") == 0
1527       || strcmp (name, "aix5coff64-rs6000") == 0)
1528     return 1;
1529
1530   if (CONST_STRNEQ (name, "mach-o"))
1531     return 0;
1532
1533   bfd_set_error (bfd_error_wrong_format);
1534   return -1;
1535 }
1536
1537 /*
1538 FUNCTION
1539         bfd_set_start_address
1540
1541 SYNOPSIS
1542         bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
1543
1544 DESCRIPTION
1545         Make @var{vma} the entry point of output BFD @var{abfd}.
1546
1547 RETURNS
1548         Returns <<TRUE>> on success, <<FALSE>> otherwise.
1549 */
1550
1551 bfd_boolean
1552 bfd_set_start_address (bfd *abfd, bfd_vma vma)
1553 {
1554   abfd->start_address = vma;
1555   return TRUE;
1556 }
1557
1558 /*
1559 FUNCTION
1560         bfd_get_gp_size
1561
1562 SYNOPSIS
1563         unsigned int bfd_get_gp_size (bfd *abfd);
1564
1565 DESCRIPTION
1566         Return the maximum size of objects to be optimized using the GP
1567         register under MIPS ECOFF.  This is typically set by the <<-G>>
1568         argument to the compiler, assembler or linker.
1569 */
1570
1571 unsigned int
1572 bfd_get_gp_size (bfd *abfd)
1573 {
1574   if (abfd->format == bfd_object)
1575     {
1576       if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1577         return ecoff_data (abfd)->gp_size;
1578       else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1579         return elf_gp_size (abfd);
1580     }
1581   return 0;
1582 }
1583
1584 /*
1585 FUNCTION
1586         bfd_set_gp_size
1587
1588 SYNOPSIS
1589         void bfd_set_gp_size (bfd *abfd, unsigned int i);
1590
1591 DESCRIPTION
1592         Set the maximum size of objects to be optimized using the GP
1593         register under ECOFF or MIPS ELF.  This is typically set by
1594         the <<-G>> argument to the compiler, assembler or linker.
1595 */
1596
1597 void
1598 bfd_set_gp_size (bfd *abfd, unsigned int i)
1599 {
1600   /* Don't try to set GP size on an archive or core file!  */
1601   if (abfd->format != bfd_object)
1602     return;
1603
1604   if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1605     ecoff_data (abfd)->gp_size = i;
1606   else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1607     elf_gp_size (abfd) = i;
1608 }
1609
1610 /* Get the GP value.  This is an internal function used by some of the
1611    relocation special_function routines on targets which support a GP
1612    register.  */
1613
1614 bfd_vma
1615 _bfd_get_gp_value (bfd *abfd)
1616 {
1617   if (! abfd)
1618     return 0;
1619   if (abfd->format != bfd_object)
1620     return 0;
1621
1622   if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1623     return ecoff_data (abfd)->gp;
1624   else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1625     return elf_gp (abfd);
1626
1627   return 0;
1628 }
1629
1630 /* Set the GP value.  */
1631
1632 void
1633 _bfd_set_gp_value (bfd *abfd, bfd_vma v)
1634 {
1635   if (! abfd)
1636     abort ();
1637   if (abfd->format != bfd_object)
1638     return;
1639
1640   if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1641     ecoff_data (abfd)->gp = v;
1642   else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1643     elf_gp (abfd) = v;
1644 }
1645
1646 /*
1647 FUNCTION
1648         bfd_scan_vma
1649
1650 SYNOPSIS
1651         bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
1652
1653 DESCRIPTION
1654         Convert, like <<strtoul>>, a numerical expression
1655         @var{string} into a <<bfd_vma>> integer, and return that integer.
1656         (Though without as many bells and whistles as <<strtoul>>.)
1657         The expression is assumed to be unsigned (i.e., positive).
1658         If given a @var{base}, it is used as the base for conversion.
1659         A base of 0 causes the function to interpret the string
1660         in hex if a leading "0x" or "0X" is found, otherwise
1661         in octal if a leading zero is found, otherwise in decimal.
1662
1663         If the value would overflow, the maximum <<bfd_vma>> value is
1664         returned.
1665 */
1666
1667 bfd_vma
1668 bfd_scan_vma (const char *string, const char **end, int base)
1669 {
1670   bfd_vma value;
1671   bfd_vma cutoff;
1672   unsigned int cutlim;
1673   int overflow;
1674
1675   /* Let the host do it if possible.  */
1676   if (sizeof (bfd_vma) <= sizeof (unsigned long))
1677     return strtoul (string, (char **) end, base);
1678
1679 #if defined (HAVE_STRTOULL) && defined (HAVE_LONG_LONG)
1680   if (sizeof (bfd_vma) <= sizeof (unsigned long long))
1681     return strtoull (string, (char **) end, base);
1682 #endif
1683
1684   if (base == 0)
1685     {
1686       if (string[0] == '0')
1687         {
1688           if ((string[1] == 'x') || (string[1] == 'X'))
1689             base = 16;
1690           else
1691             base = 8;
1692         }
1693     }
1694
1695   if ((base < 2) || (base > 36))
1696     base = 10;
1697
1698   if (base == 16
1699       && string[0] == '0'
1700       && (string[1] == 'x' || string[1] == 'X')
1701       && ISXDIGIT (string[2]))
1702     {
1703       string += 2;
1704     }
1705
1706   cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
1707   cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
1708   value = 0;
1709   overflow = 0;
1710   while (1)
1711     {
1712       unsigned int digit;
1713
1714       digit = *string;
1715       if (ISDIGIT (digit))
1716         digit = digit - '0';
1717       else if (ISALPHA (digit))
1718         digit = TOUPPER (digit) - 'A' + 10;
1719       else
1720         break;
1721       if (digit >= (unsigned int) base)
1722         break;
1723       if (value > cutoff || (value == cutoff && digit > cutlim))
1724         overflow = 1;
1725       value = value * base + digit;
1726       ++string;
1727     }
1728
1729   if (overflow)
1730     value = ~ (bfd_vma) 0;
1731
1732   if (end != NULL)
1733     *end = string;
1734
1735   return value;
1736 }
1737
1738 /*
1739 FUNCTION
1740         bfd_copy_private_header_data
1741
1742 SYNOPSIS
1743         bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
1744
1745 DESCRIPTION
1746         Copy private BFD header information from the BFD @var{ibfd} to the
1747         the BFD @var{obfd}.  This copies information that may require
1748         sections to exist, but does not require symbol tables.  Return
1749         <<true>> on success, <<false>> on error.
1750         Possible error returns are:
1751
1752         o <<bfd_error_no_memory>> -
1753         Not enough memory exists to create private data for @var{obfd}.
1754
1755 .#define bfd_copy_private_header_data(ibfd, obfd) \
1756 .       BFD_SEND (obfd, _bfd_copy_private_header_data, \
1757 .                 (ibfd, obfd))
1758
1759 */
1760
1761 /*
1762 FUNCTION
1763         bfd_copy_private_bfd_data
1764
1765 SYNOPSIS
1766         bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
1767
1768 DESCRIPTION
1769         Copy private BFD information from the BFD @var{ibfd} to the
1770         the BFD @var{obfd}.  Return <<TRUE>> on success, <<FALSE>> on error.
1771         Possible error returns are:
1772
1773         o <<bfd_error_no_memory>> -
1774         Not enough memory exists to create private data for @var{obfd}.
1775
1776 .#define bfd_copy_private_bfd_data(ibfd, obfd) \
1777 .       BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
1778 .                 (ibfd, obfd))
1779
1780 */
1781
1782 /*
1783 FUNCTION
1784         bfd_set_private_flags
1785
1786 SYNOPSIS
1787         bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
1788
1789 DESCRIPTION
1790         Set private BFD flag information in the BFD @var{abfd}.
1791         Return <<TRUE>> on success, <<FALSE>> on error.  Possible error
1792         returns are:
1793
1794         o <<bfd_error_no_memory>> -
1795         Not enough memory exists to create private data for @var{obfd}.
1796
1797 .#define bfd_set_private_flags(abfd, flags) \
1798 .       BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
1799
1800 */
1801
1802 /*
1803 FUNCTION
1804         Other functions
1805
1806 DESCRIPTION
1807         The following functions exist but have not yet been documented.
1808
1809 .#define bfd_sizeof_headers(abfd, info) \
1810 .       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
1811 .
1812 .#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
1813 .       BFD_SEND (abfd, _bfd_find_nearest_line, \
1814 .                 (abfd, syms, sec, off, file, func, line, NULL))
1815 .
1816 .#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
1817 .                                           line, disc) \
1818 .       BFD_SEND (abfd, _bfd_find_nearest_line, \
1819 .                 (abfd, syms, sec, off, file, func, line, disc))
1820 .
1821 .#define bfd_find_line(abfd, syms, sym, file, line) \
1822 .       BFD_SEND (abfd, _bfd_find_line, \
1823 .                 (abfd, syms, sym, file, line))
1824 .
1825 .#define bfd_find_inliner_info(abfd, file, func, line) \
1826 .       BFD_SEND (abfd, _bfd_find_inliner_info, \
1827 .                 (abfd, file, func, line))
1828 .
1829 .#define bfd_debug_info_start(abfd) \
1830 .       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1831 .
1832 .#define bfd_debug_info_end(abfd) \
1833 .       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1834 .
1835 .#define bfd_debug_info_accumulate(abfd, section) \
1836 .       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1837 .
1838 .#define bfd_stat_arch_elt(abfd, stat) \
1839 .       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1840 .
1841 .#define bfd_update_armap_timestamp(abfd) \
1842 .       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
1843 .
1844 .#define bfd_set_arch_mach(abfd, arch, mach)\
1845 .       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
1846 .
1847 .#define bfd_relax_section(abfd, section, link_info, again) \
1848 .       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
1849 .
1850 .#define bfd_gc_sections(abfd, link_info) \
1851 .       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
1852 .
1853 .#define bfd_lookup_section_flags(link_info, flag_info, section) \
1854 .       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
1855 .
1856 .#define bfd_merge_sections(abfd, link_info) \
1857 .       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
1858 .
1859 .#define bfd_is_group_section(abfd, sec) \
1860 .       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
1861 .
1862 .#define bfd_discard_group(abfd, sec) \
1863 .       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1864 .
1865 .#define bfd_link_hash_table_create(abfd) \
1866 .       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1867 .
1868 .#define bfd_link_add_symbols(abfd, info) \
1869 .       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1870 .
1871 .#define bfd_link_just_syms(abfd, sec, info) \
1872 .       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1873 .
1874 .#define bfd_final_link(abfd, info) \
1875 .       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
1876 .
1877 .#define bfd_free_cached_info(abfd) \
1878 .       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
1879 .
1880 .#define bfd_get_dynamic_symtab_upper_bound(abfd) \
1881 .       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
1882 .
1883 .#define bfd_print_private_bfd_data(abfd, file)\
1884 .       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
1885 .
1886 .#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
1887 .       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
1888 .
1889 .#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
1890 .       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
1891 .                                                   dyncount, dynsyms, ret))
1892 .
1893 .#define bfd_get_dynamic_reloc_upper_bound(abfd) \
1894 .       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
1895 .
1896 .#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
1897 .       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
1898 .
1899 .extern bfd_byte *bfd_get_relocated_section_contents
1900 .  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
1901 .   bfd_boolean, asymbol **);
1902 .
1903
1904 */
1905
1906 bfd_byte *
1907 bfd_get_relocated_section_contents (bfd *abfd,
1908                                     struct bfd_link_info *link_info,
1909                                     struct bfd_link_order *link_order,
1910                                     bfd_byte *data,
1911                                     bfd_boolean relocatable,
1912                                     asymbol **symbols)
1913 {
1914   bfd *abfd2;
1915   bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
1916                    bfd_byte *, bfd_boolean, asymbol **);
1917
1918   if (link_order->type == bfd_indirect_link_order)
1919     {
1920       abfd2 = link_order->u.indirect.section->owner;
1921       if (abfd2 == NULL)
1922         abfd2 = abfd;
1923     }
1924   else
1925     abfd2 = abfd;
1926
1927   fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1928
1929   return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
1930 }
1931
1932 /* Record information about an ELF program header.  */
1933
1934 bfd_boolean
1935 bfd_record_phdr (bfd *abfd,
1936                  unsigned long type,
1937                  bfd_boolean flags_valid,
1938                  flagword flags,
1939                  bfd_boolean at_valid,
1940                  bfd_vma at,
1941                  bfd_boolean includes_filehdr,
1942                  bfd_boolean includes_phdrs,
1943                  unsigned int count,
1944                  asection **secs)
1945 {
1946   struct elf_segment_map *m, **pm;
1947   bfd_size_type amt;
1948
1949   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
1950     return TRUE;
1951
1952   amt = sizeof (struct elf_segment_map);
1953   amt += ((bfd_size_type) count - 1) * sizeof (asection *);
1954   m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
1955   if (m == NULL)
1956     return FALSE;
1957
1958   m->p_type = type;
1959   m->p_flags = flags;
1960   m->p_paddr = at;
1961   m->p_flags_valid = flags_valid;
1962   m->p_paddr_valid = at_valid;
1963   m->includes_filehdr = includes_filehdr;
1964   m->includes_phdrs = includes_phdrs;
1965   m->count = count;
1966   if (count > 0)
1967     memcpy (m->sections, secs, count * sizeof (asection *));
1968
1969   for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
1970     ;
1971   *pm = m;
1972
1973   return TRUE;
1974 }
1975
1976 #ifdef BFD64
1977 /* Return true iff this target is 32-bit.  */
1978
1979 static bfd_boolean
1980 is32bit (bfd *abfd)
1981 {
1982   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1983     {
1984       const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1985       return bed->s->elfclass == ELFCLASS32;
1986     }
1987
1988   /* For non-ELF targets, use architecture information.  */
1989   return bfd_arch_bits_per_address (abfd) <= 32;
1990 }
1991 #endif
1992
1993 /* bfd_sprintf_vma and bfd_fprintf_vma display an address in the
1994    target's address size.  */
1995
1996 void
1997 bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
1998 {
1999 #ifdef BFD64
2000   if (is32bit (abfd))
2001     {
2002       sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
2003       return;
2004     }
2005 #endif
2006   sprintf_vma (buf, value);
2007 }
2008
2009 void
2010 bfd_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value)
2011 {
2012 #ifdef BFD64
2013   if (is32bit (abfd))
2014     {
2015       fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff);
2016       return;
2017     }
2018 #endif
2019   fprintf_vma ((FILE *) stream, value);
2020 }
2021
2022 /*
2023 FUNCTION
2024         bfd_alt_mach_code
2025
2026 SYNOPSIS
2027         bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
2028
2029 DESCRIPTION
2030
2031         When more than one machine code number is available for the
2032         same machine type, this function can be used to switch between
2033         the preferred one (alternative == 0) and any others.  Currently,
2034         only ELF supports this feature, with up to two alternate
2035         machine codes.
2036 */
2037
2038 bfd_boolean
2039 bfd_alt_mach_code (bfd *abfd, int alternative)
2040 {
2041   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
2042     {
2043       int code;
2044
2045       switch (alternative)
2046         {
2047         case 0:
2048           code = get_elf_backend_data (abfd)->elf_machine_code;
2049           break;
2050
2051         case 1:
2052           code = get_elf_backend_data (abfd)->elf_machine_alt1;
2053           if (code == 0)
2054             return FALSE;
2055           break;
2056
2057         case 2:
2058           code = get_elf_backend_data (abfd)->elf_machine_alt2;
2059           if (code == 0)
2060             return FALSE;
2061           break;
2062
2063         default:
2064           return FALSE;
2065         }
2066
2067       elf_elfheader (abfd)->e_machine = code;
2068
2069       return TRUE;
2070     }
2071
2072   return FALSE;
2073 }
2074
2075 /*
2076 FUNCTION
2077         bfd_emul_get_maxpagesize
2078
2079 SYNOPSIS
2080         bfd_vma bfd_emul_get_maxpagesize (const char *);
2081
2082 DESCRIPTION
2083         Returns the maximum page size, in bytes, as determined by
2084         emulation.
2085
2086 RETURNS
2087         Returns the maximum page size in bytes for ELF, 0 otherwise.
2088 */
2089
2090 bfd_vma
2091 bfd_emul_get_maxpagesize (const char *emul)
2092 {
2093   const bfd_target *target;
2094
2095   target = bfd_find_target (emul, NULL);
2096   if (target != NULL
2097       && target->flavour == bfd_target_elf_flavour)
2098     return xvec_get_elf_backend_data (target)->maxpagesize;
2099
2100   return 0;
2101 }
2102
2103 static void
2104 bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
2105                       int offset, const bfd_target *orig_target)
2106 {
2107   if (target->flavour == bfd_target_elf_flavour)
2108     {
2109       const struct elf_backend_data *bed;
2110
2111       bed = xvec_get_elf_backend_data (target);
2112       *((bfd_vma *) ((char *) bed + offset)) = size;
2113     }
2114
2115   if (target->alternative_target
2116       && target->alternative_target != orig_target)
2117     bfd_elf_set_pagesize (target->alternative_target, size, offset,
2118                           orig_target);
2119 }
2120
2121 /*
2122 FUNCTION
2123         bfd_emul_set_maxpagesize
2124
2125 SYNOPSIS
2126         void bfd_emul_set_maxpagesize (const char *, bfd_vma);
2127
2128 DESCRIPTION
2129         For ELF, set the maximum page size for the emulation.  It is
2130         a no-op for other formats.
2131
2132 */
2133
2134 void
2135 bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
2136 {
2137   const bfd_target *target;
2138
2139   target = bfd_find_target (emul, NULL);
2140   if (target)
2141     bfd_elf_set_pagesize (target, size,
2142                           offsetof (struct elf_backend_data,
2143                                     maxpagesize), target);
2144 }
2145
2146 /*
2147 FUNCTION
2148         bfd_emul_get_commonpagesize
2149
2150 SYNOPSIS
2151         bfd_vma bfd_emul_get_commonpagesize (const char *, bfd_boolean);
2152
2153 DESCRIPTION
2154         Returns the common page size, in bytes, as determined by
2155         emulation.
2156
2157 RETURNS
2158         Returns the common page size in bytes for ELF, 0 otherwise.
2159 */
2160
2161 bfd_vma
2162 bfd_emul_get_commonpagesize (const char *emul, bfd_boolean relro)
2163 {
2164   const bfd_target *target;
2165
2166   target = bfd_find_target (emul, NULL);
2167   if (target != NULL
2168       && target->flavour == bfd_target_elf_flavour)
2169     {
2170       const struct elf_backend_data *bed;
2171
2172       bed = xvec_get_elf_backend_data (target);
2173       if (relro)
2174         return bed->relropagesize;
2175       else
2176         return bed->commonpagesize;
2177     }
2178   return 0;
2179 }
2180
2181 /*
2182 FUNCTION
2183         bfd_emul_set_commonpagesize
2184
2185 SYNOPSIS
2186         void bfd_emul_set_commonpagesize (const char *, bfd_vma);
2187
2188 DESCRIPTION
2189         For ELF, set the common page size for the emulation.  It is
2190         a no-op for other formats.
2191
2192 */
2193
2194 void
2195 bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
2196 {
2197   const bfd_target *target;
2198
2199   target = bfd_find_target (emul, NULL);
2200   if (target)
2201     bfd_elf_set_pagesize (target, size,
2202                           offsetof (struct elf_backend_data,
2203                                     commonpagesize), target);
2204 }
2205
2206 /*
2207 FUNCTION
2208         bfd_demangle
2209
2210 SYNOPSIS
2211         char *bfd_demangle (bfd *, const char *, int);
2212
2213 DESCRIPTION
2214         Wrapper around cplus_demangle.  Strips leading underscores and
2215         other such chars that would otherwise confuse the demangler.
2216         If passed a g++ v3 ABI mangled name, returns a buffer allocated
2217         with malloc holding the demangled name.  Returns NULL otherwise
2218         and on memory alloc failure.
2219 */
2220
2221 char *
2222 bfd_demangle (bfd *abfd, const char *name, int options)
2223 {
2224   char *res, *alloc;
2225   const char *pre, *suf;
2226   size_t pre_len;
2227   bfd_boolean skip_lead;
2228
2229   skip_lead = (abfd != NULL
2230                && *name != '\0'
2231                && bfd_get_symbol_leading_char (abfd) == *name);
2232   if (skip_lead)
2233     ++name;
2234
2235   /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
2236      or the MS PE format.  These formats have a number of leading '.'s
2237      on at least some symbols, so we remove all dots to avoid
2238      confusing the demangler.  */
2239   pre = name;
2240   while (*name == '.' || *name == '$')
2241     ++name;
2242   pre_len = name - pre;
2243
2244   /* Strip off @plt and suchlike too.  */
2245   alloc = NULL;
2246   suf = strchr (name, '@');
2247   if (suf != NULL)
2248     {
2249       alloc = (char *) bfd_malloc (suf - name + 1);
2250       if (alloc == NULL)
2251         return NULL;
2252       memcpy (alloc, name, suf - name);
2253       alloc[suf - name] = '\0';
2254       name = alloc;
2255     }
2256
2257   res = cplus_demangle (name, options);
2258
2259   if (alloc != NULL)
2260     free (alloc);
2261
2262   if (res == NULL)
2263     {
2264       if (skip_lead)
2265         {
2266           size_t len = strlen (pre) + 1;
2267           alloc = (char *) bfd_malloc (len);
2268           if (alloc == NULL)
2269             return NULL;
2270           memcpy (alloc, pre, len);
2271           return alloc;
2272         }
2273       return NULL;
2274     }
2275
2276   /* Put back any prefix or suffix.  */
2277   if (pre_len != 0 || suf != NULL)
2278     {
2279       size_t len;
2280       size_t suf_len;
2281       char *final;
2282
2283       len = strlen (res);
2284       if (suf == NULL)
2285         suf = res + len;
2286       suf_len = strlen (suf) + 1;
2287       final = (char *) bfd_malloc (pre_len + len + suf_len);
2288       if (final != NULL)
2289         {
2290           memcpy (final, pre, pre_len);
2291           memcpy (final + pre_len, res, len);
2292           memcpy (final + pre_len + len, suf, suf_len);
2293         }
2294       free (res);
2295       res = final;
2296     }
2297
2298   return res;
2299 }
2300
2301 /*
2302 FUNCTION
2303         bfd_update_compression_header
2304
2305 SYNOPSIS
2306         void bfd_update_compression_header
2307           (bfd *abfd, bfd_byte *contents, asection *sec);
2308
2309 DESCRIPTION
2310         Set the compression header at CONTENTS of SEC in ABFD and update
2311         elf_section_flags for compression.
2312 */
2313
2314 void
2315 bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
2316                                asection *sec)
2317 {
2318   if ((abfd->flags & BFD_COMPRESS) != 0)
2319     {
2320       if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
2321         {
2322           if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
2323             {
2324               const struct elf_backend_data *bed
2325                 = get_elf_backend_data (abfd);
2326
2327               /* Set the SHF_COMPRESSED bit.  */
2328               elf_section_flags (sec) |= SHF_COMPRESSED;
2329
2330               if (bed->s->elfclass == ELFCLASS32)
2331                 {
2332                   Elf32_External_Chdr *echdr
2333                     = (Elf32_External_Chdr *) contents;
2334                   bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
2335                   bfd_put_32 (abfd, sec->size, &echdr->ch_size);
2336                   bfd_put_32 (abfd, 1 << sec->alignment_power,
2337                               &echdr->ch_addralign);
2338                   /* bfd_log2 (alignof (Elf32_Chdr)) */
2339                   bfd_set_section_alignment (abfd, sec, 2);
2340                 }
2341               else
2342                 {
2343                   Elf64_External_Chdr *echdr
2344                     = (Elf64_External_Chdr *) contents;
2345                   bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
2346                   bfd_put_32 (abfd, 0, &echdr->ch_reserved);
2347                   bfd_put_64 (abfd, sec->size, &echdr->ch_size);
2348                   bfd_put_64 (abfd, 1 << sec->alignment_power,
2349                               &echdr->ch_addralign);
2350                   /* bfd_log2 (alignof (Elf64_Chdr)) */
2351                   bfd_set_section_alignment (abfd, sec, 3);
2352                 }
2353             }
2354           else
2355             {
2356               /* Clear the SHF_COMPRESSED bit.  */
2357               elf_section_flags (sec) &= ~SHF_COMPRESSED;
2358
2359               /* Write the zlib header.  It should be "ZLIB" followed by
2360                  the uncompressed section size, 8 bytes in big-endian
2361                  order.  */
2362               memcpy (contents, "ZLIB", 4);
2363               bfd_putb64 (sec->size, contents + 4);
2364               /* No way to keep the original alignment, just use 1 always. */
2365               bfd_set_section_alignment (abfd, sec, 0);
2366             }
2367         }
2368     }
2369   else
2370     abort ();
2371 }
2372
2373 /*
2374    FUNCTION
2375    bfd_check_compression_header
2376
2377    SYNOPSIS
2378         bfd_boolean bfd_check_compression_header
2379           (bfd *abfd, bfd_byte *contents, asection *sec,
2380           bfd_size_type *uncompressed_size,
2381           unsigned int *uncompressed_alignment_power);
2382
2383 DESCRIPTION
2384         Check the compression header at CONTENTS of SEC in ABFD and
2385         store the uncompressed size in UNCOMPRESSED_SIZE and the
2386         uncompressed data alignment in UNCOMPRESSED_ALIGNMENT_POWER
2387         if the compression header is valid.
2388
2389 RETURNS
2390         Return TRUE if the compression header is valid.
2391 */
2392
2393 bfd_boolean
2394 bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
2395                               asection *sec,
2396                               bfd_size_type *uncompressed_size,
2397                               unsigned int *uncompressed_alignment_power)
2398 {
2399   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
2400       && (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
2401     {
2402       Elf_Internal_Chdr chdr;
2403       const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2404       if (bed->s->elfclass == ELFCLASS32)
2405         {
2406           Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
2407           chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
2408           chdr.ch_size = bfd_get_32 (abfd, &echdr->ch_size);
2409           chdr.ch_addralign = bfd_get_32 (abfd, &echdr->ch_addralign);
2410         }
2411       else
2412         {
2413           Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
2414           chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
2415           chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
2416           chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
2417         }
2418       if (chdr.ch_type == ELFCOMPRESS_ZLIB
2419           && chdr.ch_addralign == (1U << bfd_log2 (chdr.ch_addralign)))
2420         {
2421           *uncompressed_size = chdr.ch_size;
2422           *uncompressed_alignment_power = bfd_log2 (chdr.ch_addralign);
2423           return TRUE;
2424         }
2425     }
2426
2427   return FALSE;
2428 }
2429
2430 /*
2431 FUNCTION
2432         bfd_get_compression_header_size
2433
2434 SYNOPSIS
2435         int bfd_get_compression_header_size (bfd *abfd, asection *sec);
2436
2437 DESCRIPTION
2438         Return the size of the compression header of SEC in ABFD.
2439
2440 RETURNS
2441         Return the size of the compression header in bytes.
2442 */
2443
2444 int
2445 bfd_get_compression_header_size (bfd *abfd, asection *sec)
2446 {
2447   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
2448     {
2449       if (sec == NULL)
2450         {
2451           if (!(abfd->flags & BFD_COMPRESS_GABI))
2452             return 0;
2453         }
2454       else if (!(elf_section_flags (sec) & SHF_COMPRESSED))
2455         return 0;
2456
2457       if (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS32)
2458         return sizeof (Elf32_External_Chdr);
2459       else
2460         return sizeof (Elf64_External_Chdr);
2461     }
2462
2463   return 0;
2464 }
2465
2466 /*
2467 FUNCTION
2468         bfd_convert_section_size
2469
2470 SYNOPSIS
2471         bfd_size_type bfd_convert_section_size
2472           (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
2473
2474 DESCRIPTION
2475         Convert the size @var{size} of the section @var{isec} in input
2476         BFD @var{ibfd} to the section size in output BFD @var{obfd}.
2477 */
2478
2479 bfd_size_type
2480 bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
2481                           bfd_size_type size)
2482 {
2483   bfd_size_type hdr_size;
2484
2485   /* Do nothing if either input or output aren't ELF.  */
2486   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2487       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2488     return size;
2489
2490   /* Do nothing if ELF classes of input and output are the same. */
2491   if (get_elf_backend_data (ibfd)->s->elfclass
2492       == get_elf_backend_data (obfd)->s->elfclass)
2493     return size;
2494
2495   /* Convert GNU property size.  */
2496   if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
2497     return _bfd_elf_convert_gnu_property_size (ibfd, obfd);
2498
2499   /* Do nothing if input file will be decompressed.  */
2500   if ((ibfd->flags & BFD_DECOMPRESS))
2501     return size;
2502
2503   /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
2504   hdr_size = bfd_get_compression_header_size (ibfd, isec);
2505   if (hdr_size == 0)
2506     return size;
2507
2508   /* Adjust the size of the output SHF_COMPRESSED section.  */
2509   if (hdr_size == sizeof (Elf32_External_Chdr))
2510     return (size - sizeof (Elf32_External_Chdr)
2511             + sizeof (Elf64_External_Chdr));
2512   else
2513     return (size - sizeof (Elf64_External_Chdr)
2514             + sizeof (Elf32_External_Chdr));
2515 }
2516
2517 /*
2518 FUNCTION
2519         bfd_convert_section_contents
2520
2521 SYNOPSIS
2522         bfd_boolean bfd_convert_section_contents
2523           (bfd *ibfd, asection *isec, bfd *obfd,
2524            bfd_byte **ptr, bfd_size_type *ptr_size);
2525
2526 DESCRIPTION
2527         Convert the contents, stored in @var{*ptr}, of the section
2528         @var{isec} in input BFD @var{ibfd} to output BFD @var{obfd}
2529         if needed.  The original buffer pointed to by @var{*ptr} may
2530         be freed and @var{*ptr} is returned with memory malloc'd by this
2531         function, and the new size written to @var{ptr_size}.
2532 */
2533
2534 bfd_boolean
2535 bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
2536                               bfd_byte **ptr, bfd_size_type *ptr_size)
2537 {
2538   bfd_byte *contents;
2539   bfd_size_type ihdr_size, ohdr_size, size;
2540   Elf_Internal_Chdr chdr;
2541   bfd_boolean use_memmove;
2542
2543   /* Do nothing if either input or output aren't ELF.  */
2544   if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2545       || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2546     return TRUE;
2547
2548   /* Do nothing if ELF classes of input and output are the same. */
2549   if (get_elf_backend_data (ibfd)->s->elfclass
2550       == get_elf_backend_data (obfd)->s->elfclass)
2551     return TRUE;
2552
2553   /* Convert GNU properties.  */
2554   if (CONST_STRNEQ (isec->name, NOTE_GNU_PROPERTY_SECTION_NAME))
2555     return _bfd_elf_convert_gnu_properties (ibfd, isec, obfd, ptr,
2556                                             ptr_size);
2557
2558   /* Do nothing if input file will be decompressed.  */
2559   if ((ibfd->flags & BFD_DECOMPRESS))
2560     return TRUE;
2561
2562   /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
2563   ihdr_size = bfd_get_compression_header_size (ibfd, isec);
2564   if (ihdr_size == 0)
2565     return TRUE;
2566
2567   contents = *ptr;
2568
2569   /* Convert the contents of the input SHF_COMPRESSED section to
2570      output.  Get the input compression header and the size of the
2571      output compression header.  */
2572   if (ihdr_size == sizeof (Elf32_External_Chdr))
2573     {
2574       Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
2575       chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
2576       chdr.ch_size = bfd_get_32 (ibfd, &echdr->ch_size);
2577       chdr.ch_addralign = bfd_get_32 (ibfd, &echdr->ch_addralign);
2578
2579       ohdr_size = sizeof (Elf64_External_Chdr);
2580
2581       use_memmove = FALSE;
2582     }
2583   else
2584     {
2585       Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
2586       chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
2587       chdr.ch_size = bfd_get_64 (ibfd, &echdr->ch_size);
2588       chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
2589
2590       ohdr_size = sizeof (Elf32_External_Chdr);
2591       use_memmove = TRUE;
2592     }
2593
2594   size = bfd_get_section_size (isec) - ihdr_size + ohdr_size;
2595   if (!use_memmove)
2596     {
2597       contents = (bfd_byte *) bfd_malloc (size);
2598       if (contents == NULL)
2599         return FALSE;
2600     }
2601
2602   /* Write out the output compression header.  */
2603   if (ohdr_size == sizeof (Elf32_External_Chdr))
2604     {
2605       Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
2606       bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
2607       bfd_put_32 (obfd, chdr.ch_size, &echdr->ch_size);
2608       bfd_put_32 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
2609     }
2610   else
2611     {
2612       Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
2613       bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
2614       bfd_put_32 (obfd, 0, &echdr->ch_reserved);
2615       bfd_put_64 (obfd, chdr.ch_size, &echdr->ch_size);
2616       bfd_put_64 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
2617     }
2618
2619   /* Copy the compressed contents.  */
2620   if (use_memmove)
2621     memmove (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
2622   else
2623     {
2624       memcpy (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
2625       free (*ptr);
2626       *ptr = contents;
2627     }
2628
2629   *ptr_size = size;
2630   return TRUE;
2631 }