1/* Generic BFD library interface and support routines.
2   Copyright (C) 1990-2017 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/*
23INODE
24typedef bfd, Error reporting, BFD front end, BFD front end
25
26SECTION
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
37CODE_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
388   passed in on the command line.  Ld puts this data into a bfd_link_info
389   struct which ultimately gets passed in to the bfd.  When it arrives, copy
390   it to the following struct so that the data will be available in coffcode.h
391   where it is needed.  The typedef's used are defined in bfd.h */
392
393/*
394INODE
395Error reporting, Miscellaneous, typedef bfd, BFD front end
396
397SECTION
398	Error reporting
399
400	Most BFD functions return nonzero on success (check their
401	individual documentation for precise semantics).  On an error,
402	they call <<bfd_set_error>> to set an error condition that callers
403	can check by calling <<bfd_get_error>>.
404        If that returns <<bfd_error_system_call>>, then check
405	<<errno>>.
406
407	The easiest way to report a BFD error to the user is to
408	use <<bfd_perror>>.
409
410SUBSECTION
411	Type <<bfd_error_type>>
412
413	The values returned by <<bfd_get_error>> are defined by the
414	enumerated type <<bfd_error_type>>.
415
416CODE_FRAGMENT
417.
418.typedef enum bfd_error
419.{
420.  bfd_error_no_error = 0,
421.  bfd_error_system_call,
422.  bfd_error_invalid_target,
423.  bfd_error_wrong_format,
424.  bfd_error_wrong_object_format,
425.  bfd_error_invalid_operation,
426.  bfd_error_no_memory,
427.  bfd_error_no_symbols,
428.  bfd_error_no_armap,
429.  bfd_error_no_more_archived_files,
430.  bfd_error_malformed_archive,
431.  bfd_error_missing_dso,
432.  bfd_error_file_not_recognized,
433.  bfd_error_file_ambiguously_recognized,
434.  bfd_error_no_contents,
435.  bfd_error_nonrepresentable_section,
436.  bfd_error_no_debug_section,
437.  bfd_error_bad_value,
438.  bfd_error_file_truncated,
439.  bfd_error_file_too_big,
440.  bfd_error_on_input,
441.  bfd_error_invalid_error_code
442.}
443.bfd_error_type;
444.
445*/
446
447static bfd_error_type bfd_error = bfd_error_no_error;
448static bfd *input_bfd = NULL;
449static bfd_error_type input_error = bfd_error_no_error;
450
451const char *const bfd_errmsgs[] =
452{
453  N_("No error"),
454  N_("System call error"),
455  N_("Invalid bfd target"),
456  N_("File in wrong format"),
457  N_("Archive object file in wrong format"),
458  N_("Invalid operation"),
459  N_("Memory exhausted"),
460  N_("No symbols"),
461  N_("Archive has no index; run ranlib to add one"),
462  N_("No more archived files"),
463  N_("Malformed archive"),
464  N_("DSO missing from command line"),
465  N_("File format not recognized"),
466  N_("File format is ambiguous"),
467  N_("Section has no contents"),
468  N_("Nonrepresentable section on output"),
469  N_("Symbol needs debug section which does not exist"),
470  N_("Bad value"),
471  N_("File truncated"),
472  N_("File too big"),
473  N_("Error reading %s: %s"),
474  N_("#<Invalid error code>")
475};
476
477/*
478FUNCTION
479	bfd_get_error
480
481SYNOPSIS
482	bfd_error_type bfd_get_error (void);
483
484DESCRIPTION
485	Return the current BFD error condition.
486*/
487
488bfd_error_type
489bfd_get_error (void)
490{
491  return bfd_error;
492}
493
494/*
495FUNCTION
496	bfd_set_error
497
498SYNOPSIS
499	void bfd_set_error (bfd_error_type error_tag, ...);
500
501DESCRIPTION
502	Set the BFD error condition to be @var{error_tag}.
503	If @var{error_tag} is bfd_error_on_input, then this function
504	takes two more parameters, the input bfd where the error
505	occurred, and the bfd_error_type error.
506*/
507
508void
509bfd_set_error (bfd_error_type error_tag, ...)
510{
511  bfd_error = error_tag;
512  if (error_tag == bfd_error_on_input)
513    {
514      /* This is an error that occurred during bfd_close when
515	 writing an archive, but on one of the input files.  */
516      va_list ap;
517
518      va_start (ap, error_tag);
519      input_bfd = va_arg (ap, bfd *);
520      input_error = (bfd_error_type) va_arg (ap, int);
521      if (input_error >= bfd_error_on_input)
522	abort ();
523      va_end (ap);
524    }
525}
526
527/*
528FUNCTION
529	bfd_errmsg
530
531SYNOPSIS
532	const char *bfd_errmsg (bfd_error_type error_tag);
533
534DESCRIPTION
535	Return a string describing the error @var{error_tag}, or
536	the system error if @var{error_tag} is <<bfd_error_system_call>>.
537*/
538
539const char *
540bfd_errmsg (bfd_error_type error_tag)
541{
542#ifndef errno
543  extern int errno;
544#endif
545  if (error_tag == bfd_error_on_input)
546    {
547      char *buf;
548      const char *msg = bfd_errmsg (input_error);
549
550      if (asprintf (&buf, _(bfd_errmsgs [error_tag]), input_bfd->filename, msg)
551	  != -1)
552	return buf;
553
554      /* Ick, what to do on out of memory?  */
555      return msg;
556    }
557
558  if (error_tag == bfd_error_system_call)
559    return xstrerror (errno);
560
561  if (error_tag > bfd_error_invalid_error_code)
562    error_tag = bfd_error_invalid_error_code;	/* sanity check */
563
564  return _(bfd_errmsgs [error_tag]);
565}
566
567/*
568FUNCTION
569	bfd_perror
570
571SYNOPSIS
572	void bfd_perror (const char *message);
573
574DESCRIPTION
575	Print to the standard error stream a string describing the
576	last BFD error that occurred, or the last system error if
577	the last BFD error was a system call failure.  If @var{message}
578	is non-NULL and non-empty, the error string printed is preceded
579	by @var{message}, a colon, and a space.  It is followed by a newline.
580*/
581
582void
583bfd_perror (const char *message)
584{
585  fflush (stdout);
586  if (message == NULL || *message == '\0')
587    fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
588  else
589    fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
590  fflush (stderr);
591}
592
593/*
594SUBSECTION
595	BFD error handler
596
597	Some BFD functions want to print messages describing the
598	problem.  They call a BFD error handler function.  This
599	function may be overridden by the program.
600
601	The BFD error handler acts like vprintf.
602
603CODE_FRAGMENT
604.
605.typedef void (*bfd_error_handler_type) (const char *, va_list);
606.
607*/
608
609/* The program name used when printing BFD error messages.  */
610
611static const char *_bfd_error_program_name;
612
613/* This is the default routine to handle BFD error messages.
614   Like fprintf (stderr, ...), but also handles some extra format specifiers.
615
616   %A section name from section.  For group components, print group name too.
617   %B file name from bfd.  For archive components, prints archive too.
618
619   Note - because these two extra format specifiers require special handling
620   they are scanned for and processed in this function, before calling
621   vfprintf.  This means that the *arguments* for these format specifiers
622   must be the first ones in the variable argument list, regardless of where
623   the specifiers appear in the format string.  Thus for example calling
624   this function with a format string of:
625
626      "blah %s blah %A blah %d blah %B"
627
628   would involve passing the arguments as:
629
630      "blah %s blah %A blah %d blah %B",
631        asection_for_the_%A,
632	bfd_for_the_%B,
633	string_for_the_%s,
634	integer_for_the_%d);
635 */
636
637static void
638error_handler_internal (const char *fmt, va_list ap)
639{
640  char *bufp;
641  const char *new_fmt, *p;
642  size_t avail = 1000;
643  char buf[1000];
644
645  /* PR 4992: Don't interrupt output being sent to stdout.  */
646  fflush (stdout);
647
648  if (_bfd_error_program_name != NULL)
649    fprintf (stderr, "%s: ", _bfd_error_program_name);
650  else
651    fprintf (stderr, "BFD: ");
652
653  new_fmt = fmt;
654  bufp = buf;
655
656  /* Reserve enough space for the existing format string.  */
657  avail -= strlen (fmt) + 1;
658  if (avail > 1000)
659    _exit (EXIT_FAILURE);
660
661  p = fmt;
662  while (1)
663    {
664      char *q;
665      size_t len, extra, trim;
666
667      p = strchr (p, '%');
668      if (p == NULL || p[1] == '\0')
669	{
670	  if (new_fmt == buf)
671	    {
672	      len = strlen (fmt);
673	      memcpy (bufp, fmt, len + 1);
674	    }
675	  break;
676	}
677
678      if (p[1] == 'A' || p[1] == 'B')
679	{
680	  len = p - fmt;
681	  memcpy (bufp, fmt, len);
682	  bufp += len;
683	  fmt = p + 2;
684	  new_fmt = buf;
685
686	  /* If we run out of space, tough, you lose your ridiculously
687	     long file or section name.  It's not safe to try to alloc
688	     memory here;  We might be printing an out of memory message.  */
689	  if (avail == 0)
690	    {
691	      *bufp++ = '*';
692	      *bufp++ = '*';
693	      *bufp = '\0';
694	    }
695	  else
696	    {
697	      if (p[1] == 'B')
698		{
699		  bfd *abfd = va_arg (ap, bfd *);
700
701		  if (abfd == NULL)
702		    /* Invoking %B with a null bfd pointer is an internal error.  */
703		    abort ();
704		  else if (abfd->my_archive
705			   && !bfd_is_thin_archive (abfd->my_archive))
706		    snprintf (bufp, avail, "%s(%s)",
707			      abfd->my_archive->filename, abfd->filename);
708		  else
709		    snprintf (bufp, avail, "%s", abfd->filename);
710		}
711	      else
712		{
713		  asection *sec = va_arg (ap, asection *);
714		  bfd *abfd;
715		  const char *group = NULL;
716		  struct coff_comdat_info *ci;
717
718		  if (sec == NULL)
719		    /* Invoking %A with a null section pointer is an internal error.  */
720		    abort ();
721		  abfd = sec->owner;
722		  if (abfd != NULL
723		      && bfd_get_flavour (abfd) == bfd_target_elf_flavour
724		      && elf_next_in_group (sec) != NULL
725		      && (sec->flags & SEC_GROUP) == 0)
726		    group = elf_group_name (sec);
727		  else if (abfd != NULL
728			   && bfd_get_flavour (abfd) == bfd_target_coff_flavour
729			   && (ci = bfd_coff_get_comdat_section (sec->owner,
730								 sec)) != NULL)
731		    group = ci->name;
732		  if (group != NULL)
733		    snprintf (bufp, avail, "%s[%s]", sec->name, group);
734		  else
735		    snprintf (bufp, avail, "%s", sec->name);
736		}
737	      len = strlen (bufp);
738	      avail = avail - len + 2;
739
740	      /* We need to replace any '%' we printed by "%%".
741		 First count how many.  */
742	      q = bufp;
743	      bufp += len;
744	      extra = 0;
745	      while ((q = strchr (q, '%')) != NULL)
746		{
747		  ++q;
748		  ++extra;
749		}
750
751	      /* If there isn't room, trim off the end of the string.  */
752	      q = bufp;
753	      bufp += extra;
754	      if (extra > avail)
755		{
756		  trim = extra - avail;
757		  bufp -= trim;
758		  do
759		    {
760		      if (*--q == '%')
761			--extra;
762		    }
763		  while (--trim != 0);
764		  *q = '\0';
765		  avail = extra;
766		}
767	      avail -= extra;
768
769	      /* Now double all '%' chars, shuffling the string as we go.  */
770	      while (extra != 0)
771		{
772		  while ((q[extra] = *q) != '%')
773		    --q;
774		  q[--extra] = '%';
775		  --q;
776		}
777	    }
778	}
779      p = p + 2;
780    }
781
782  vfprintf (stderr, new_fmt, ap);
783
784  /* On AIX, putc is implemented as a macro that triggers a -Wunused-value
785     warning, so use the fputc function to avoid it.  */
786  fputc ('\n', stderr);
787  fflush (stderr);
788}
789
790/* This is a function pointer to the routine which should handle BFD
791   error messages.  It is called when a BFD routine encounters an
792   error for which it wants to print a message.  Going through a
793   function pointer permits a program linked against BFD to intercept
794   the messages and deal with them itself.  */
795
796static bfd_error_handler_type _bfd_error_internal = error_handler_internal;
797
798void
799_bfd_error_handler (const char *fmt, ...)
800{
801  va_list ap;
802
803  va_start (ap, fmt);
804  _bfd_error_internal (fmt, ap);
805  va_end (ap);
806}
807
808/*
809FUNCTION
810	bfd_set_error_handler
811
812SYNOPSIS
813	bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
814
815DESCRIPTION
816	Set the BFD error handler function.  Returns the previous
817	function.
818*/
819
820bfd_error_handler_type
821bfd_set_error_handler (bfd_error_handler_type pnew)
822{
823  bfd_error_handler_type pold;
824
825  pold = _bfd_error_internal;
826  _bfd_error_internal = pnew;
827  return pold;
828}
829
830/*
831FUNCTION
832	bfd_set_error_program_name
833
834SYNOPSIS
835	void bfd_set_error_program_name (const char *);
836
837DESCRIPTION
838	Set the program name to use when printing a BFD error.  This
839	is printed before the error message followed by a colon and
840	space.  The string must not be changed after it is passed to
841	this function.
842*/
843
844void
845bfd_set_error_program_name (const char *name)
846{
847  _bfd_error_program_name = name;
848}
849
850/*
851SUBSECTION
852	BFD assert handler
853
854	If BFD finds an internal inconsistency, the bfd assert
855	handler is called with information on the BFD version, BFD
856	source file and line.  If this happens, most programs linked
857	against BFD are expected to want to exit with an error, or mark
858	the current BFD operation as failed, so it is recommended to
859	override the default handler, which just calls
860	_bfd_error_handler and continues.
861
862CODE_FRAGMENT
863.
864.typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
865.                                         const char *bfd_version,
866.                                         const char *bfd_file,
867.                                         int bfd_line);
868.
869*/
870
871/* Note the use of bfd_ prefix on the parameter names above: we want to
872   show which one is the message and which is the version by naming the
873   parameters, but avoid polluting the program-using-bfd namespace as
874   the typedef is visible in the exported headers that the program
875   includes.  Below, it's just for consistency.  */
876
877static void
878_bfd_default_assert_handler (const char *bfd_formatmsg,
879			     const char *bfd_version,
880			     const char *bfd_file,
881			     int bfd_line)
882
883{
884  _bfd_error_handler (bfd_formatmsg, bfd_version, bfd_file, bfd_line);
885}
886
887/* Similar to _bfd_error_handler, a program can decide to exit on an
888   internal BFD error.  We use a non-variadic type to simplify passing
889   on parameters to other functions, e.g. _bfd_error_handler.  */
890
891static bfd_assert_handler_type _bfd_assert_handler = _bfd_default_assert_handler;
892
893/*
894FUNCTION
895	bfd_set_assert_handler
896
897SYNOPSIS
898	bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
899
900DESCRIPTION
901	Set the BFD assert handler function.  Returns the previous
902	function.
903*/
904
905bfd_assert_handler_type
906bfd_set_assert_handler (bfd_assert_handler_type pnew)
907{
908  bfd_assert_handler_type pold;
909
910  pold = _bfd_assert_handler;
911  _bfd_assert_handler = pnew;
912  return pold;
913}
914
915/*
916INODE
917Miscellaneous, Memory Usage, Error reporting, BFD front end
918
919SECTION
920	Miscellaneous
921
922SUBSECTION
923	Miscellaneous functions
924*/
925
926/*
927FUNCTION
928	bfd_get_reloc_upper_bound
929
930SYNOPSIS
931	long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
932
933DESCRIPTION
934	Return the number of bytes required to store the
935	relocation information associated with section @var{sect}
936	attached to bfd @var{abfd}.  If an error occurs, return -1.
937
938*/
939
940long
941bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
942{
943  if (abfd->format != bfd_object)
944    {
945      bfd_set_error (bfd_error_invalid_operation);
946      return -1;
947    }
948
949  return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
950}
951
952/*
953FUNCTION
954	bfd_canonicalize_reloc
955
956SYNOPSIS
957	long bfd_canonicalize_reloc
958	  (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
959
960DESCRIPTION
961	Call the back end associated with the open BFD
962	@var{abfd} and translate the external form of the relocation
963	information attached to @var{sec} into the internal canonical
964	form.  Place the table into memory at @var{loc}, which has
965	been preallocated, usually by a call to
966	<<bfd_get_reloc_upper_bound>>.  Returns the number of relocs, or
967	-1 on error.
968
969	The @var{syms} table is also needed for horrible internal magic
970	reasons.
971
972*/
973long
974bfd_canonicalize_reloc (bfd *abfd,
975			sec_ptr asect,
976			arelent **location,
977			asymbol **symbols)
978{
979  if (abfd->format != bfd_object)
980    {
981      bfd_set_error (bfd_error_invalid_operation);
982      return -1;
983    }
984
985  return BFD_SEND (abfd, _bfd_canonicalize_reloc,
986		   (abfd, asect, location, symbols));
987}
988
989/*
990FUNCTION
991	bfd_set_reloc
992
993SYNOPSIS
994	void bfd_set_reloc
995	  (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
996
997DESCRIPTION
998	Set the relocation pointer and count within
999	section @var{sec} to the values @var{rel} and @var{count}.
1000	The argument @var{abfd} is ignored.
1001
1002*/
1003
1004void
1005bfd_set_reloc (bfd *ignore_abfd ATTRIBUTE_UNUSED,
1006	       sec_ptr asect,
1007	       arelent **location,
1008	       unsigned int count)
1009{
1010  asect->orelocation = location;
1011  asect->reloc_count = count;
1012}
1013
1014/*
1015FUNCTION
1016	bfd_set_file_flags
1017
1018SYNOPSIS
1019	bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
1020
1021DESCRIPTION
1022	Set the flag word in the BFD @var{abfd} to the value @var{flags}.
1023
1024	Possible errors are:
1025	o <<bfd_error_wrong_format>> - The target bfd was not of object format.
1026	o <<bfd_error_invalid_operation>> - The target bfd was open for reading.
1027	o <<bfd_error_invalid_operation>> -
1028	The flag word contained a bit which was not applicable to the
1029	type of file.  E.g., an attempt was made to set the <<D_PAGED>> bit
1030	on a BFD format which does not support demand paging.
1031
1032*/
1033
1034bfd_boolean
1035bfd_set_file_flags (bfd *abfd, flagword flags)
1036{
1037  if (abfd->format != bfd_object)
1038    {
1039      bfd_set_error (bfd_error_wrong_format);
1040      return FALSE;
1041    }
1042
1043  if (bfd_read_p (abfd))
1044    {
1045      bfd_set_error (bfd_error_invalid_operation);
1046      return FALSE;
1047    }
1048
1049  bfd_get_file_flags (abfd) = flags;
1050  if ((flags & bfd_applicable_file_flags (abfd)) != flags)
1051    {
1052      bfd_set_error (bfd_error_invalid_operation);
1053      return FALSE;
1054    }
1055
1056  return TRUE;
1057}
1058
1059void
1060bfd_assert (const char *file, int line)
1061{
1062  /* xgettext:c-format */
1063  (*_bfd_assert_handler) (_("BFD %s assertion fail %s:%d"),
1064			  BFD_VERSION_STRING, file, line);
1065}
1066
1067/* A more or less friendly abort message.  In libbfd.h abort is
1068   defined to call this function.  */
1069
1070void
1071_bfd_abort (const char *file, int line, const char *fn)
1072{
1073  if (fn != NULL)
1074    _bfd_error_handler
1075      /* xgettext:c-format */
1076      (_("BFD %s internal error, aborting at %s:%d in %s\n"),
1077       BFD_VERSION_STRING, file, line, fn);
1078  else
1079    _bfd_error_handler
1080      /* xgettext:c-format */
1081      (_("BFD %s internal error, aborting at %s:%d\n"),
1082       BFD_VERSION_STRING, file, line);
1083  _bfd_error_handler (_("Please report this bug.\n"));
1084  _exit (EXIT_FAILURE);
1085}
1086
1087/*
1088FUNCTION
1089	bfd_get_arch_size
1090
1091SYNOPSIS
1092 	int bfd_get_arch_size (bfd *abfd);
1093
1094DESCRIPTION
1095	Returns the normalized architecture address size, in bits, as
1096	determined by the object file's format.  By normalized, we mean
1097	either 32 or 64.  For ELF, this information is included in the
1098	header.  Use bfd_arch_bits_per_address for number of bits in
1099	the architecture address.
1100
1101RETURNS
1102	Returns the arch size in bits if known, <<-1>> otherwise.
1103*/
1104
1105int
1106bfd_get_arch_size (bfd *abfd)
1107{
1108  if (abfd->xvec->flavour == bfd_target_elf_flavour)
1109    return get_elf_backend_data (abfd)->s->arch_size;
1110
1111  return bfd_arch_bits_per_address (abfd) > 32 ? 64 : 32;
1112}
1113
1114/*
1115FUNCTION
1116	bfd_get_sign_extend_vma
1117
1118SYNOPSIS
1119 	int bfd_get_sign_extend_vma (bfd *abfd);
1120
1121DESCRIPTION
1122	Indicates if the target architecture "naturally" sign extends
1123	an address.  Some architectures implicitly sign extend address
1124	values when they are converted to types larger than the size
1125	of an address.  For instance, bfd_get_start_address() will
1126	return an address sign extended to fill a bfd_vma when this is
1127	the case.
1128
1129RETURNS
1130	Returns <<1>> if the target architecture is known to sign
1131	extend addresses, <<0>> if the target architecture is known to
1132	not sign extend addresses, and <<-1>> otherwise.
1133*/
1134
1135int
1136bfd_get_sign_extend_vma (bfd *abfd)
1137{
1138  char *name;
1139
1140  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1141    return get_elf_backend_data (abfd)->sign_extend_vma;
1142
1143  name = bfd_get_target (abfd);
1144
1145  /* Return a proper value for DJGPP & PE COFF.
1146     This function is required for DWARF2 support, but there is
1147     no place to store this information in the COFF back end.
1148     Should enough other COFF targets add support for DWARF2,
1149     a place will have to be found.  Until then, this hack will do.  */
1150  if (CONST_STRNEQ (name, "coff-go32")
1151      || strcmp (name, "pe-i386") == 0
1152      || strcmp (name, "pei-i386") == 0
1153      || strcmp (name, "pe-x86-64") == 0
1154      || strcmp (name, "pei-x86-64") == 0
1155      || strcmp (name, "pe-arm-wince-little") == 0
1156      || strcmp (name, "pei-arm-wince-little") == 0
1157      || strcmp (name, "aixcoff-rs6000") == 0)
1158    return 1;
1159
1160  if (CONST_STRNEQ (name, "mach-o"))
1161    return 0;
1162
1163  bfd_set_error (bfd_error_wrong_format);
1164  return -1;
1165}
1166
1167/*
1168FUNCTION
1169	bfd_set_start_address
1170
1171SYNOPSIS
1172 	bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
1173
1174DESCRIPTION
1175	Make @var{vma} the entry point of output BFD @var{abfd}.
1176
1177RETURNS
1178	Returns <<TRUE>> on success, <<FALSE>> otherwise.
1179*/
1180
1181bfd_boolean
1182bfd_set_start_address (bfd *abfd, bfd_vma vma)
1183{
1184  abfd->start_address = vma;
1185  return TRUE;
1186}
1187
1188/*
1189FUNCTION
1190	bfd_get_gp_size
1191
1192SYNOPSIS
1193	unsigned int bfd_get_gp_size (bfd *abfd);
1194
1195DESCRIPTION
1196	Return the maximum size of objects to be optimized using the GP
1197	register under MIPS ECOFF.  This is typically set by the <<-G>>
1198	argument to the compiler, assembler or linker.
1199*/
1200
1201unsigned int
1202bfd_get_gp_size (bfd *abfd)
1203{
1204  if (abfd->format == bfd_object)
1205    {
1206      if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1207	return ecoff_data (abfd)->gp_size;
1208      else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1209	return elf_gp_size (abfd);
1210    }
1211  return 0;
1212}
1213
1214/*
1215FUNCTION
1216	bfd_set_gp_size
1217
1218SYNOPSIS
1219	void bfd_set_gp_size (bfd *abfd, unsigned int i);
1220
1221DESCRIPTION
1222	Set the maximum size of objects to be optimized using the GP
1223	register under ECOFF or MIPS ELF.  This is typically set by
1224	the <<-G>> argument to the compiler, assembler or linker.
1225*/
1226
1227void
1228bfd_set_gp_size (bfd *abfd, unsigned int i)
1229{
1230  /* Don't try to set GP size on an archive or core file!  */
1231  if (abfd->format != bfd_object)
1232    return;
1233
1234  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1235    ecoff_data (abfd)->gp_size = i;
1236  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1237    elf_gp_size (abfd) = i;
1238}
1239
1240/* Get the GP value.  This is an internal function used by some of the
1241   relocation special_function routines on targets which support a GP
1242   register.  */
1243
1244bfd_vma
1245_bfd_get_gp_value (bfd *abfd)
1246{
1247  if (! abfd)
1248    return 0;
1249  if (abfd->format != bfd_object)
1250    return 0;
1251
1252  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1253    return ecoff_data (abfd)->gp;
1254  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1255    return elf_gp (abfd);
1256
1257  return 0;
1258}
1259
1260/* Set the GP value.  */
1261
1262void
1263_bfd_set_gp_value (bfd *abfd, bfd_vma v)
1264{
1265  if (! abfd)
1266    abort ();
1267  if (abfd->format != bfd_object)
1268    return;
1269
1270  if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
1271    ecoff_data (abfd)->gp = v;
1272  else if (abfd->xvec->flavour == bfd_target_elf_flavour)
1273    elf_gp (abfd) = v;
1274}
1275
1276/*
1277FUNCTION
1278	bfd_scan_vma
1279
1280SYNOPSIS
1281	bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
1282
1283DESCRIPTION
1284	Convert, like <<strtoul>>, a numerical expression
1285	@var{string} into a <<bfd_vma>> integer, and return that integer.
1286	(Though without as many bells and whistles as <<strtoul>>.)
1287	The expression is assumed to be unsigned (i.e., positive).
1288	If given a @var{base}, it is used as the base for conversion.
1289	A base of 0 causes the function to interpret the string
1290	in hex if a leading "0x" or "0X" is found, otherwise
1291	in octal if a leading zero is found, otherwise in decimal.
1292
1293	If the value would overflow, the maximum <<bfd_vma>> value is
1294	returned.
1295*/
1296
1297bfd_vma
1298bfd_scan_vma (const char *string, const char **end, int base)
1299{
1300  bfd_vma value;
1301  bfd_vma cutoff;
1302  unsigned int cutlim;
1303  int overflow;
1304
1305  /* Let the host do it if possible.  */
1306  if (sizeof (bfd_vma) <= sizeof (unsigned long))
1307    return strtoul (string, (char **) end, base);
1308
1309#ifdef HAVE_STRTOULL
1310  if (sizeof (bfd_vma) <= sizeof (unsigned long long))
1311    return strtoull (string, (char **) end, base);
1312#endif
1313
1314  if (base == 0)
1315    {
1316      if (string[0] == '0')
1317	{
1318	  if ((string[1] == 'x') || (string[1] == 'X'))
1319	    base = 16;
1320	  else
1321	    base = 8;
1322	}
1323    }
1324
1325  if ((base < 2) || (base > 36))
1326    base = 10;
1327
1328  if (base == 16
1329      && string[0] == '0'
1330      && (string[1] == 'x' || string[1] == 'X')
1331      && ISXDIGIT (string[2]))
1332    {
1333      string += 2;
1334    }
1335
1336  cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
1337  cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
1338  value = 0;
1339  overflow = 0;
1340  while (1)
1341    {
1342      unsigned int digit;
1343
1344      digit = *string;
1345      if (ISDIGIT (digit))
1346	digit = digit - '0';
1347      else if (ISALPHA (digit))
1348	digit = TOUPPER (digit) - 'A' + 10;
1349      else
1350	break;
1351      if (digit >= (unsigned int) base)
1352	break;
1353      if (value > cutoff || (value == cutoff && digit > cutlim))
1354	overflow = 1;
1355      value = value * base + digit;
1356      ++string;
1357    }
1358
1359  if (overflow)
1360    value = ~ (bfd_vma) 0;
1361
1362  if (end != NULL)
1363    *end = string;
1364
1365  return value;
1366}
1367
1368/*
1369FUNCTION
1370	bfd_copy_private_header_data
1371
1372SYNOPSIS
1373	bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
1374
1375DESCRIPTION
1376	Copy private BFD header information from the BFD @var{ibfd} to the
1377	the BFD @var{obfd}.  This copies information that may require
1378	sections to exist, but does not require symbol tables.  Return
1379	<<true>> on success, <<false>> on error.
1380	Possible error returns are:
1381
1382	o <<bfd_error_no_memory>> -
1383	Not enough memory exists to create private data for @var{obfd}.
1384
1385.#define bfd_copy_private_header_data(ibfd, obfd) \
1386.     BFD_SEND (obfd, _bfd_copy_private_header_data, \
1387.		(ibfd, obfd))
1388
1389*/
1390
1391/*
1392FUNCTION
1393	bfd_copy_private_bfd_data
1394
1395SYNOPSIS
1396	bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
1397
1398DESCRIPTION
1399	Copy private BFD information from the BFD @var{ibfd} to the
1400	the BFD @var{obfd}.  Return <<TRUE>> on success, <<FALSE>> on error.
1401	Possible error returns are:
1402
1403	o <<bfd_error_no_memory>> -
1404	Not enough memory exists to create private data for @var{obfd}.
1405
1406.#define bfd_copy_private_bfd_data(ibfd, obfd) \
1407.     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
1408.		(ibfd, obfd))
1409
1410*/
1411
1412/*
1413FUNCTION
1414	bfd_set_private_flags
1415
1416SYNOPSIS
1417	bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
1418
1419DESCRIPTION
1420	Set private BFD flag information in the BFD @var{abfd}.
1421	Return <<TRUE>> on success, <<FALSE>> on error.  Possible error
1422	returns are:
1423
1424	o <<bfd_error_no_memory>> -
1425	Not enough memory exists to create private data for @var{obfd}.
1426
1427.#define bfd_set_private_flags(abfd, flags) \
1428.     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
1429
1430*/
1431
1432/*
1433FUNCTION
1434	Other functions
1435
1436DESCRIPTION
1437	The following functions exist but have not yet been documented.
1438
1439.#define bfd_sizeof_headers(abfd, info) \
1440.       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
1441.
1442.#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
1443.       BFD_SEND (abfd, _bfd_find_nearest_line, \
1444.                 (abfd, syms, sec, off, file, func, line, NULL))
1445.
1446.#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
1447.                                            line, disc) \
1448.       BFD_SEND (abfd, _bfd_find_nearest_line, \
1449.                 (abfd, syms, sec, off, file, func, line, disc))
1450.
1451.#define bfd_find_line(abfd, syms, sym, file, line) \
1452.       BFD_SEND (abfd, _bfd_find_line, \
1453.                 (abfd, syms, sym, file, line))
1454.
1455.#define bfd_find_inliner_info(abfd, file, func, line) \
1456.       BFD_SEND (abfd, _bfd_find_inliner_info, \
1457.                 (abfd, file, func, line))
1458.
1459.#define bfd_debug_info_start(abfd) \
1460.       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1461.
1462.#define bfd_debug_info_end(abfd) \
1463.       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1464.
1465.#define bfd_debug_info_accumulate(abfd, section) \
1466.       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1467.
1468.#define bfd_stat_arch_elt(abfd, stat) \
1469.       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1470.
1471.#define bfd_update_armap_timestamp(abfd) \
1472.       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
1473.
1474.#define bfd_set_arch_mach(abfd, arch, mach)\
1475.       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
1476.
1477.#define bfd_relax_section(abfd, section, link_info, again) \
1478.       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
1479.
1480.#define bfd_gc_sections(abfd, link_info) \
1481.	BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
1482.
1483.#define bfd_lookup_section_flags(link_info, flag_info, section) \
1484.	BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
1485.
1486.#define bfd_merge_sections(abfd, link_info) \
1487.	BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
1488.
1489.#define bfd_is_group_section(abfd, sec) \
1490.	BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
1491.
1492.#define bfd_discard_group(abfd, sec) \
1493.	BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1494.
1495.#define bfd_link_hash_table_create(abfd) \
1496.	BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1497.
1498.#define bfd_link_add_symbols(abfd, info) \
1499.	BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1500.
1501.#define bfd_link_just_syms(abfd, sec, info) \
1502.	BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1503.
1504.#define bfd_final_link(abfd, info) \
1505.	BFD_SEND (abfd, _bfd_final_link, (abfd, info))
1506.
1507.#define bfd_free_cached_info(abfd) \
1508.       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
1509.
1510.#define bfd_get_dynamic_symtab_upper_bound(abfd) \
1511.	BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
1512.
1513.#define bfd_print_private_bfd_data(abfd, file)\
1514.	BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
1515.
1516.#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
1517.	BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
1518.
1519.#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
1520.	BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
1521.						    dyncount, dynsyms, ret))
1522.
1523.#define bfd_get_dynamic_reloc_upper_bound(abfd) \
1524.	BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
1525.
1526.#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
1527.	BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
1528.
1529.extern bfd_byte *bfd_get_relocated_section_contents
1530.  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
1531.   bfd_boolean, asymbol **);
1532.
1533
1534*/
1535
1536bfd_byte *
1537bfd_get_relocated_section_contents (bfd *abfd,
1538				    struct bfd_link_info *link_info,
1539				    struct bfd_link_order *link_order,
1540				    bfd_byte *data,
1541				    bfd_boolean relocatable,
1542				    asymbol **symbols)
1543{
1544  bfd *abfd2;
1545  bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
1546		   bfd_byte *, bfd_boolean, asymbol **);
1547
1548  if (link_order->type == bfd_indirect_link_order)
1549    {
1550      abfd2 = link_order->u.indirect.section->owner;
1551      if (abfd2 == NULL)
1552	abfd2 = abfd;
1553    }
1554  else
1555    abfd2 = abfd;
1556
1557  fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1558
1559  return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
1560}
1561
1562/* Record information about an ELF program header.  */
1563
1564bfd_boolean
1565bfd_record_phdr (bfd *abfd,
1566		 unsigned long type,
1567		 bfd_boolean flags_valid,
1568		 flagword flags,
1569		 bfd_boolean at_valid,
1570		 bfd_vma at,
1571		 bfd_boolean includes_filehdr,
1572		 bfd_boolean includes_phdrs,
1573		 unsigned int count,
1574		 asection **secs)
1575{
1576  struct elf_segment_map *m, **pm;
1577  bfd_size_type amt;
1578
1579  if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
1580    return TRUE;
1581
1582  amt = sizeof (struct elf_segment_map);
1583  amt += ((bfd_size_type) count - 1) * sizeof (asection *);
1584  m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
1585  if (m == NULL)
1586    return FALSE;
1587
1588  m->p_type = type;
1589  m->p_flags = flags;
1590  m->p_paddr = at;
1591  m->p_flags_valid = flags_valid;
1592  m->p_paddr_valid = at_valid;
1593  m->includes_filehdr = includes_filehdr;
1594  m->includes_phdrs = includes_phdrs;
1595  m->count = count;
1596  if (count > 0)
1597    memcpy (m->sections, secs, count * sizeof (asection *));
1598
1599  for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
1600    ;
1601  *pm = m;
1602
1603  return TRUE;
1604}
1605
1606#ifdef BFD64
1607/* Return true iff this target is 32-bit.  */
1608
1609static bfd_boolean
1610is32bit (bfd *abfd)
1611{
1612  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1613    {
1614      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1615      return bed->s->elfclass == ELFCLASS32;
1616    }
1617
1618  /* For non-ELF targets, use architecture information.  */
1619  return bfd_arch_bits_per_address (abfd) <= 32;
1620}
1621#endif
1622
1623/* bfd_sprintf_vma and bfd_fprintf_vma display an address in the
1624   target's address size.  */
1625
1626void
1627bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
1628{
1629#ifdef BFD64
1630  if (is32bit (abfd))
1631    {
1632      sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
1633      return;
1634    }
1635#endif
1636  sprintf_vma (buf, value);
1637}
1638
1639void
1640bfd_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value)
1641{
1642#ifdef BFD64
1643  if (is32bit (abfd))
1644    {
1645      fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff);
1646      return;
1647    }
1648#endif
1649  fprintf_vma ((FILE *) stream, value);
1650}
1651
1652/*
1653FUNCTION
1654	bfd_alt_mach_code
1655
1656SYNOPSIS
1657	bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
1658
1659DESCRIPTION
1660
1661	When more than one machine code number is available for the
1662	same machine type, this function can be used to switch between
1663	the preferred one (alternative == 0) and any others.  Currently,
1664	only ELF supports this feature, with up to two alternate
1665	machine codes.
1666*/
1667
1668bfd_boolean
1669bfd_alt_mach_code (bfd *abfd, int alternative)
1670{
1671  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1672    {
1673      int code;
1674
1675      switch (alternative)
1676	{
1677	case 0:
1678	  code = get_elf_backend_data (abfd)->elf_machine_code;
1679	  break;
1680
1681	case 1:
1682	  code = get_elf_backend_data (abfd)->elf_machine_alt1;
1683	  if (code == 0)
1684	    return FALSE;
1685	  break;
1686
1687	case 2:
1688	  code = get_elf_backend_data (abfd)->elf_machine_alt2;
1689	  if (code == 0)
1690	    return FALSE;
1691	  break;
1692
1693	default:
1694	  return FALSE;
1695	}
1696
1697      elf_elfheader (abfd)->e_machine = code;
1698
1699      return TRUE;
1700    }
1701
1702  return FALSE;
1703}
1704
1705/*
1706FUNCTION
1707	bfd_emul_get_maxpagesize
1708
1709SYNOPSIS
1710 	bfd_vma bfd_emul_get_maxpagesize (const char *);
1711
1712DESCRIPTION
1713	Returns the maximum page size, in bytes, as determined by
1714	emulation.
1715
1716RETURNS
1717	Returns the maximum page size in bytes for ELF, 0 otherwise.
1718*/
1719
1720bfd_vma
1721bfd_emul_get_maxpagesize (const char *emul)
1722{
1723  const bfd_target *target;
1724
1725  target = bfd_find_target (emul, NULL);
1726  if (target != NULL
1727      && target->flavour == bfd_target_elf_flavour)
1728    return xvec_get_elf_backend_data (target)->maxpagesize;
1729
1730  return 0;
1731}
1732
1733static void
1734bfd_elf_set_pagesize (const bfd_target *target, bfd_vma size,
1735		      int offset, const bfd_target *orig_target)
1736{
1737  if (target->flavour == bfd_target_elf_flavour)
1738    {
1739      const struct elf_backend_data *bed;
1740
1741      bed = xvec_get_elf_backend_data (target);
1742      *((bfd_vma *) ((char *) bed + offset)) = size;
1743    }
1744
1745  if (target->alternative_target
1746      && target->alternative_target != orig_target)
1747    bfd_elf_set_pagesize (target->alternative_target, size, offset,
1748			  orig_target);
1749}
1750
1751/*
1752FUNCTION
1753	bfd_emul_set_maxpagesize
1754
1755SYNOPSIS
1756 	void bfd_emul_set_maxpagesize (const char *, bfd_vma);
1757
1758DESCRIPTION
1759	For ELF, set the maximum page size for the emulation.  It is
1760	a no-op for other formats.
1761
1762*/
1763
1764void
1765bfd_emul_set_maxpagesize (const char *emul, bfd_vma size)
1766{
1767  const bfd_target *target;
1768
1769  target = bfd_find_target (emul, NULL);
1770  if (target)
1771    bfd_elf_set_pagesize (target, size,
1772			  offsetof (struct elf_backend_data,
1773				    maxpagesize), target);
1774}
1775
1776/*
1777FUNCTION
1778	bfd_emul_get_commonpagesize
1779
1780SYNOPSIS
1781 	bfd_vma bfd_emul_get_commonpagesize (const char *);
1782
1783DESCRIPTION
1784	Returns the common page size, in bytes, as determined by
1785	emulation.
1786
1787RETURNS
1788	Returns the common page size in bytes for ELF, 0 otherwise.
1789*/
1790
1791bfd_vma
1792bfd_emul_get_commonpagesize (const char *emul)
1793{
1794  const bfd_target *target;
1795
1796  target = bfd_find_target (emul, NULL);
1797  if (target != NULL
1798      && target->flavour == bfd_target_elf_flavour)
1799    return xvec_get_elf_backend_data (target)->commonpagesize;
1800
1801  return 0;
1802}
1803
1804/*
1805FUNCTION
1806	bfd_emul_set_commonpagesize
1807
1808SYNOPSIS
1809 	void bfd_emul_set_commonpagesize (const char *, bfd_vma);
1810
1811DESCRIPTION
1812	For ELF, set the common page size for the emulation.  It is
1813	a no-op for other formats.
1814
1815*/
1816
1817void
1818bfd_emul_set_commonpagesize (const char *emul, bfd_vma size)
1819{
1820  const bfd_target *target;
1821
1822  target = bfd_find_target (emul, NULL);
1823  if (target)
1824    bfd_elf_set_pagesize (target, size,
1825			  offsetof (struct elf_backend_data,
1826				    commonpagesize), target);
1827}
1828
1829/*
1830FUNCTION
1831	bfd_demangle
1832
1833SYNOPSIS
1834	char *bfd_demangle (bfd *, const char *, int);
1835
1836DESCRIPTION
1837	Wrapper around cplus_demangle.  Strips leading underscores and
1838	other such chars that would otherwise confuse the demangler.
1839	If passed a g++ v3 ABI mangled name, returns a buffer allocated
1840	with malloc holding the demangled name.  Returns NULL otherwise
1841	and on memory alloc failure.
1842*/
1843
1844char *
1845bfd_demangle (bfd *abfd, const char *name, int options)
1846{
1847  char *res, *alloc;
1848  const char *pre, *suf;
1849  size_t pre_len;
1850  bfd_boolean skip_lead;
1851
1852  skip_lead = (abfd != NULL
1853	       && *name != '\0'
1854	       && bfd_get_symbol_leading_char (abfd) == *name);
1855  if (skip_lead)
1856    ++name;
1857
1858  /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF
1859     or the MS PE format.  These formats have a number of leading '.'s
1860     on at least some symbols, so we remove all dots to avoid
1861     confusing the demangler.  */
1862  pre = name;
1863  while (*name == '.' || *name == '$')
1864    ++name;
1865  pre_len = name - pre;
1866
1867  /* Strip off @plt and suchlike too.  */
1868  alloc = NULL;
1869  suf = strchr (name, '@');
1870  if (suf != NULL)
1871    {
1872      alloc = (char *) bfd_malloc (suf - name + 1);
1873      if (alloc == NULL)
1874	return NULL;
1875      memcpy (alloc, name, suf - name);
1876      alloc[suf - name] = '\0';
1877      name = alloc;
1878    }
1879
1880  res = cplus_demangle (name, options);
1881
1882  if (alloc != NULL)
1883    free (alloc);
1884
1885  if (res == NULL)
1886    {
1887      if (skip_lead)
1888	{
1889	  size_t len = strlen (pre) + 1;
1890	  alloc = (char *) bfd_malloc (len);
1891	  if (alloc == NULL)
1892	    return NULL;
1893	  memcpy (alloc, pre, len);
1894	  return alloc;
1895	}
1896      return NULL;
1897    }
1898
1899  /* Put back any prefix or suffix.  */
1900  if (pre_len != 0 || suf != NULL)
1901    {
1902      size_t len;
1903      size_t suf_len;
1904      char *final;
1905
1906      len = strlen (res);
1907      if (suf == NULL)
1908	suf = res + len;
1909      suf_len = strlen (suf) + 1;
1910      final = (char *) bfd_malloc (pre_len + len + suf_len);
1911      if (final != NULL)
1912	{
1913	  memcpy (final, pre, pre_len);
1914	  memcpy (final + pre_len, res, len);
1915	  memcpy (final + pre_len + len, suf, suf_len);
1916	}
1917      free (res);
1918      res = final;
1919    }
1920
1921  return res;
1922}
1923
1924/*
1925FUNCTION
1926	bfd_update_compression_header
1927
1928SYNOPSIS
1929	void bfd_update_compression_header
1930	  (bfd *abfd, bfd_byte *contents, asection *sec);
1931
1932DESCRIPTION
1933	Set the compression header at CONTENTS of SEC in ABFD and update
1934	elf_section_flags for compression.
1935*/
1936
1937void
1938bfd_update_compression_header (bfd *abfd, bfd_byte *contents,
1939			       asection *sec)
1940{
1941  if ((abfd->flags & BFD_COMPRESS) != 0)
1942    {
1943      if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1944	{
1945	  if ((abfd->flags & BFD_COMPRESS_GABI) != 0)
1946	    {
1947	      const struct elf_backend_data *bed
1948		= get_elf_backend_data (abfd);
1949
1950	      /* Set the SHF_COMPRESSED bit.  */
1951	      elf_section_flags (sec) |= SHF_COMPRESSED;
1952
1953	      if (bed->s->elfclass == ELFCLASS32)
1954		{
1955		  Elf32_External_Chdr *echdr
1956		    = (Elf32_External_Chdr *) contents;
1957		  bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
1958		  bfd_put_32 (abfd, sec->size, &echdr->ch_size);
1959		  bfd_put_32 (abfd, 1 << sec->alignment_power,
1960			      &echdr->ch_addralign);
1961		}
1962	      else
1963		{
1964		  Elf64_External_Chdr *echdr
1965		    = (Elf64_External_Chdr *) contents;
1966		  bfd_put_32 (abfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
1967		  bfd_put_32 (abfd, 0, &echdr->ch_reserved);
1968		  bfd_put_64 (abfd, sec->size, &echdr->ch_size);
1969		  bfd_put_64 (abfd, 1 << sec->alignment_power,
1970			      &echdr->ch_addralign);
1971		}
1972	    }
1973	  else
1974	    {
1975	      /* Clear the SHF_COMPRESSED bit.  */
1976	      elf_section_flags (sec) &= ~SHF_COMPRESSED;
1977
1978	      /* Write the zlib header.  It should be "ZLIB" followed by
1979		 the uncompressed section size, 8 bytes in big-endian
1980		 order.  */
1981	      memcpy (contents, "ZLIB", 4);
1982	      bfd_putb64 (sec->size, contents + 4);
1983	    }
1984	}
1985    }
1986  else
1987    abort ();
1988}
1989
1990/*
1991   FUNCTION
1992   bfd_check_compression_header
1993
1994   SYNOPSIS
1995	bfd_boolean bfd_check_compression_header
1996	  (bfd *abfd, bfd_byte *contents, asection *sec,
1997	  bfd_size_type *uncompressed_size);
1998
1999DESCRIPTION
2000	Check the compression header at CONTENTS of SEC in ABFD and
2001	store the uncompressed size in UNCOMPRESSED_SIZE if the
2002	compression header is valid.
2003
2004RETURNS
2005	Return TRUE if the compression header is valid.
2006*/
2007
2008bfd_boolean
2009bfd_check_compression_header (bfd *abfd, bfd_byte *contents,
2010			      asection *sec,
2011			      bfd_size_type *uncompressed_size)
2012{
2013  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour
2014      && (elf_section_flags (sec) & SHF_COMPRESSED) != 0)
2015    {
2016      Elf_Internal_Chdr chdr;
2017      const struct elf_backend_data *bed = get_elf_backend_data (abfd);
2018      if (bed->s->elfclass == ELFCLASS32)
2019	{
2020	  Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
2021	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
2022	  chdr.ch_size = bfd_get_32 (abfd, &echdr->ch_size);
2023	  chdr.ch_addralign = bfd_get_32 (abfd, &echdr->ch_addralign);
2024	}
2025      else
2026	{
2027	  Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
2028	  chdr.ch_type = bfd_get_32 (abfd, &echdr->ch_type);
2029	  chdr.ch_size = bfd_get_64 (abfd, &echdr->ch_size);
2030	  chdr.ch_addralign = bfd_get_64 (abfd, &echdr->ch_addralign);
2031	}
2032      if (chdr.ch_type == ELFCOMPRESS_ZLIB
2033	  && chdr.ch_addralign == 1U << sec->alignment_power)
2034	{
2035	  *uncompressed_size = chdr.ch_size;
2036	  return TRUE;
2037	}
2038    }
2039
2040  return FALSE;
2041}
2042
2043/*
2044FUNCTION
2045	bfd_get_compression_header_size
2046
2047SYNOPSIS
2048	int bfd_get_compression_header_size (bfd *abfd, asection *sec);
2049
2050DESCRIPTION
2051	Return the size of the compression header of SEC in ABFD.
2052
2053RETURNS
2054	Return the size of the compression header in bytes.
2055*/
2056
2057int
2058bfd_get_compression_header_size (bfd *abfd, asection *sec)
2059{
2060  if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
2061    {
2062      if (sec == NULL)
2063	{
2064	  if (!(abfd->flags & BFD_COMPRESS_GABI))
2065	    return 0;
2066	}
2067      else if (!(elf_section_flags (sec) & SHF_COMPRESSED))
2068	return 0;
2069
2070      if (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS32)
2071	return sizeof (Elf32_External_Chdr);
2072      else
2073	return sizeof (Elf64_External_Chdr);
2074    }
2075
2076  return 0;
2077}
2078
2079/*
2080FUNCTION
2081	bfd_convert_section_size
2082
2083SYNOPSIS
2084	bfd_size_type bfd_convert_section_size
2085	  (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
2086
2087DESCRIPTION
2088	Convert the size @var{size} of the section @var{isec} in input
2089	BFD @var{ibfd} to the section size in output BFD @var{obfd}.
2090*/
2091
2092bfd_size_type
2093bfd_convert_section_size (bfd *ibfd, sec_ptr isec, bfd *obfd,
2094			  bfd_size_type size)
2095{
2096  bfd_size_type hdr_size;
2097
2098  /* Do nothing if input file will be decompressed.  */
2099  if ((ibfd->flags & BFD_DECOMPRESS))
2100    return size;
2101
2102  /* Do nothing if either input or output aren't ELF.  */
2103  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2104      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2105    return size;
2106
2107  /* Do nothing if ELF classes of input and output are the same. */
2108  if (get_elf_backend_data (ibfd)->s->elfclass
2109      == get_elf_backend_data (obfd)->s->elfclass)
2110    return size;
2111
2112  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
2113  hdr_size = bfd_get_compression_header_size (ibfd, isec);
2114  if (hdr_size == 0)
2115    return size;
2116
2117  /* Adjust the size of the output SHF_COMPRESSED section.  */
2118  if (hdr_size == sizeof (Elf32_External_Chdr))
2119    return (size - sizeof (Elf32_External_Chdr)
2120	    + sizeof (Elf64_External_Chdr));
2121  else
2122    return (size - sizeof (Elf64_External_Chdr)
2123	    + sizeof (Elf32_External_Chdr));
2124}
2125
2126/*
2127FUNCTION
2128	bfd_convert_section_contents
2129
2130SYNOPSIS
2131	bfd_boolean bfd_convert_section_contents
2132	  (bfd *ibfd, asection *isec, bfd *obfd,
2133	   bfd_byte **ptr, bfd_size_type *ptr_size);
2134
2135DESCRIPTION
2136	Convert the contents, stored in @var{*ptr}, of the section
2137	@var{isec} in input BFD @var{ibfd} to output BFD @var{obfd}
2138	if needed.  The original buffer pointed to by @var{*ptr} may
2139	be freed and @var{*ptr} is returned with memory malloc'd by this
2140	function, and the new size written to @var{ptr_size}.
2141*/
2142
2143bfd_boolean
2144bfd_convert_section_contents (bfd *ibfd, sec_ptr isec, bfd *obfd,
2145			      bfd_byte **ptr, bfd_size_type *ptr_size)
2146{
2147  bfd_byte *contents;
2148  bfd_size_type ihdr_size, ohdr_size, size;
2149  Elf_Internal_Chdr chdr;
2150  bfd_boolean use_memmove;
2151
2152  /* Do nothing if input file will be decompressed.  */
2153  if ((ibfd->flags & BFD_DECOMPRESS))
2154    return TRUE;
2155
2156  /* Do nothing if either input or output aren't ELF.  */
2157  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
2158      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
2159    return TRUE;
2160
2161  /* Do nothing if ELF classes of input and output are the same. */
2162  if (get_elf_backend_data (ibfd)->s->elfclass
2163      == get_elf_backend_data (obfd)->s->elfclass)
2164    return TRUE;
2165
2166  /* Do nothing if the input section isn't a SHF_COMPRESSED section. */
2167  ihdr_size = bfd_get_compression_header_size (ibfd, isec);
2168  if (ihdr_size == 0)
2169    return TRUE;
2170
2171  contents = *ptr;
2172
2173  /* Convert the contents of the input SHF_COMPRESSED section to
2174     output.  Get the input compression header and the size of the
2175     output compression header.  */
2176  if (ihdr_size == sizeof (Elf32_External_Chdr))
2177    {
2178      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
2179      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
2180      chdr.ch_size = bfd_get_32 (ibfd, &echdr->ch_size);
2181      chdr.ch_addralign = bfd_get_32 (ibfd, &echdr->ch_addralign);
2182
2183      ohdr_size = sizeof (Elf64_External_Chdr);
2184
2185      use_memmove = FALSE;
2186    }
2187  else
2188    {
2189      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
2190      chdr.ch_type = bfd_get_32 (ibfd, &echdr->ch_type);
2191      chdr.ch_size = bfd_get_64 (ibfd, &echdr->ch_size);
2192      chdr.ch_addralign = bfd_get_64 (ibfd, &echdr->ch_addralign);
2193
2194      ohdr_size = sizeof (Elf32_External_Chdr);
2195      use_memmove = TRUE;
2196    }
2197
2198  size = bfd_get_section_size (isec) - ihdr_size + ohdr_size;
2199  if (!use_memmove)
2200    {
2201      contents = (bfd_byte *) bfd_malloc (size);
2202      if (contents == NULL)
2203	return FALSE;
2204    }
2205
2206  /* Write out the output compression header.  */
2207  if (ohdr_size == sizeof (Elf32_External_Chdr))
2208    {
2209      Elf32_External_Chdr *echdr = (Elf32_External_Chdr *) contents;
2210      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
2211      bfd_put_32 (obfd, chdr.ch_size, &echdr->ch_size);
2212      bfd_put_32 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
2213    }
2214  else
2215    {
2216      Elf64_External_Chdr *echdr = (Elf64_External_Chdr *) contents;
2217      bfd_put_32 (obfd, ELFCOMPRESS_ZLIB, &echdr->ch_type);
2218      bfd_put_32 (obfd, 0, &echdr->ch_reserved);
2219      bfd_put_64 (obfd, chdr.ch_size, &echdr->ch_size);
2220      bfd_put_64 (obfd, chdr.ch_addralign, &echdr->ch_addralign);
2221    }
2222
2223  /* Copy the compressed contents.  */
2224  if (use_memmove)
2225    memmove (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
2226  else
2227    {
2228      memcpy (contents + ohdr_size, *ptr + ihdr_size, size - ohdr_size);
2229      free (*ptr);
2230      *ptr = contents;
2231    }
2232
2233  *ptr_size = size;
2234  return TRUE;
2235}
2236