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