OSDN Git Service

bfd/
[pf3gnuchains/pf3gnuchains3x.git] / bfd / bfd.c
1 /* Generic BFD library interface and support routines.
2    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
3    2000, 2001, 2002, 2003, 2004
4    Free Software Foundation, Inc.
5    Written by Cygnus Support.
6
7    This file is part of BFD, the Binary File Descriptor library.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
23 /*
24 SECTION
25         <<typedef bfd>>
26
27         A BFD has type <<bfd>>; objects of this type are the
28         cornerstone of any application using BFD. Using BFD
29         consists of making references though the BFD and to data in the BFD.
30
31         Here is the structure that defines the type <<bfd>>.  It
32         contains the major data about the file and pointers
33         to the rest of the data.
34
35 CODE_FRAGMENT
36 .
37 .struct bfd
38 .{
39 .  {* A unique identifier of the BFD  *}
40 .  unsigned int id;
41 .
42 .  {* The filename the application opened the BFD with.  *}
43 .  const char *filename;
44 .
45 .  {* A pointer to the target jump table.  *}
46 .  const struct bfd_target *xvec;
47 .
48 .  {* The IOSTREAM, and corresponding IO vector that provide access
49 .     to the file backing the BFD.  *}
50 .  void *iostream;
51 .  const struct bfd_iovec *iovec;
52 .
53 .  {* Is the file descriptor being cached?  That is, can it be closed as
54 .     needed, and re-opened when accessed later?  *}
55 .  bfd_boolean cacheable;
56 .
57 .  {* Marks whether there was a default target specified when the
58 .     BFD was opened. This is used to select which matching algorithm
59 .     to use to choose the back end.  *}
60 .  bfd_boolean target_defaulted;
61 .
62 .  {* The caching routines use these to maintain a
63 .     least-recently-used list of BFDs.  *}
64 .  struct bfd *lru_prev, *lru_next;
65 .
66 .  {* When a file is closed by the caching routines, BFD retains
67 .     state information on the file here...  *}
68 .  ufile_ptr where;
69 .
70 .  {* ... and here: (``once'' means at least once).  *}
71 .  bfd_boolean opened_once;
72 .
73 .  {* Set if we have a locally maintained mtime value, rather than
74 .     getting it from the file each time.  *}
75 .  bfd_boolean mtime_set;
76 .
77 .  {* File modified time, if mtime_set is TRUE.  *}
78 .  long mtime;
79 .
80 .  {* Reserved for an unimplemented file locking extension.  *}
81 .  int ifd;
82 .
83 .  {* The format which belongs to the BFD. (object, core, etc.)  *}
84 .  bfd_format format;
85 .
86 .  {* The direction with which the BFD was opened.  *}
87 .  enum bfd_direction
88 .    {
89 .      no_direction = 0,
90 .      read_direction = 1,
91 .      write_direction = 2,
92 .      both_direction = 3
93 .    }
94 .  direction;
95 .
96 .  {* Format_specific flags.  *}
97 .  flagword flags;
98 .
99 .  {* Currently my_archive is tested before adding origin to
100 .     anything. I believe that this can become always an add of
101 .     origin, with origin set to 0 for non archive files.  *}
102 .  ufile_ptr origin;
103 .
104 .  {* Remember when output has begun, to stop strange things
105 .     from happening.  *}
106 .  bfd_boolean output_has_begun;
107 .
108 .  {* A hash table for section names.  *}
109 .  struct bfd_hash_table section_htab;
110 .
111 .  {* Pointer to linked list of sections.  *}
112 .  struct bfd_section *sections;
113 .
114 .  {* The place where we add to the section list.  *}
115 .  struct bfd_section **section_tail;
116 .
117 .  {* The number of sections.  *}
118 .  unsigned int section_count;
119 .
120 .  {* Stuff only useful for object files:
121 .     The start address.  *}
122 .  bfd_vma start_address;
123 .
124 .  {* Used for input and output.  *}
125 .  unsigned int symcount;
126 .
127 .  {* Symbol table for output BFD (with symcount entries).  *}
128 .  struct bfd_symbol  **outsymbols;
129 .
130 .  {* Used for slurped dynamic symbol tables.  *}
131 .  unsigned int dynsymcount;
132 .
133 .  {* Pointer to structure which contains architecture information.  *}
134 .  const struct bfd_arch_info *arch_info;
135 .
136 .  {* Stuff only useful for archives.  *}
137 .  void *arelt_data;
138 .  struct bfd *my_archive;      {* The containing archive BFD.  *}
139 .  struct bfd *next;            {* The next BFD in the archive.  *}
140 .  struct bfd *archive_head;    {* The first BFD in the archive.  *}
141 .  bfd_boolean has_armap;
142 .
143 .  {* A chain of BFD structures involved in a link.  *}
144 .  struct bfd *link_next;
145 .
146 .  {* A field used by _bfd_generic_link_add_archive_symbols.  This will
147 .     be used only for archive elements.  *}
148 .  int archive_pass;
149 .
150 .  {* Used by the back end to hold private data.  *}
151 .  union
152 .    {
153 .      struct aout_data_struct *aout_data;
154 .      struct artdata *aout_ar_data;
155 .      struct _oasys_data *oasys_obj_data;
156 .      struct _oasys_ar_data *oasys_ar_data;
157 .      struct coff_tdata *coff_obj_data;
158 .      struct pe_tdata *pe_obj_data;
159 .      struct xcoff_tdata *xcoff_obj_data;
160 .      struct ecoff_tdata *ecoff_obj_data;
161 .      struct ieee_data_struct *ieee_data;
162 .      struct ieee_ar_data_struct *ieee_ar_data;
163 .      struct srec_data_struct *srec_data;
164 .      struct ihex_data_struct *ihex_data;
165 .      struct tekhex_data_struct *tekhex_data;
166 .      struct elf_obj_tdata *elf_obj_data;
167 .      struct nlm_obj_tdata *nlm_obj_data;
168 .      struct bout_data_struct *bout_data;
169 .      struct mmo_data_struct *mmo_data;
170 .      struct sun_core_struct *sun_core_data;
171 .      struct sco5_core_struct *sco5_core_data;
172 .      struct trad_core_struct *trad_core_data;
173 .      struct som_data_struct *som_data;
174 .      struct hpux_core_struct *hpux_core_data;
175 .      struct hppabsd_core_struct *hppabsd_core_data;
176 .      struct sgi_core_struct *sgi_core_data;
177 .      struct lynx_core_struct *lynx_core_data;
178 .      struct osf_core_struct *osf_core_data;
179 .      struct cisco_core_struct *cisco_core_data;
180 .      struct versados_data_struct *versados_data;
181 .      struct netbsd_core_struct *netbsd_core_data;
182 .      struct mach_o_data_struct *mach_o_data;
183 .      struct mach_o_fat_data_struct *mach_o_fat_data;
184 .      struct bfd_pef_data_struct *pef_data;
185 .      struct bfd_pef_xlib_data_struct *pef_xlib_data;
186 .      struct bfd_sym_data_struct *sym_data;
187 .      void *any;
188 .    }
189 .  tdata;
190 .
191 .  {* Used by the application to hold private data.  *}
192 .  void *usrdata;
193 .
194 .  {* Where all the allocated stuff under this BFD goes.  This is a
195 .     struct objalloc *, but we use void * to avoid requiring the inclusion
196 .     of objalloc.h.  *}
197 .  void *memory;
198 .};
199 .
200 */
201
202 #include "bfd.h"
203 #include "bfdver.h"
204 #include "sysdep.h"
205 #include <stdarg.h>
206 #include "libiberty.h"
207 #include "safe-ctype.h"
208 #include "bfdlink.h"
209 #include "libbfd.h"
210 #include "coff/internal.h"
211 #include "coff/sym.h"
212 #include "libcoff.h"
213 #include "libecoff.h"
214 #undef obj_symbols
215 #include "elf-bfd.h"
216 \f
217 /* provide storage for subsystem, stack and heap data which may have been
218    passed in on the command line.  Ld puts this data into a bfd_link_info
219    struct which ultimately gets passed in to the bfd.  When it arrives, copy
220    it to the following struct so that the data will be available in coffcode.h
221    where it is needed.  The typedef's used are defined in bfd.h */
222 \f
223 /*
224 SECTION
225         Error reporting
226
227         Most BFD functions return nonzero on success (check their
228         individual documentation for precise semantics).  On an error,
229         they call <<bfd_set_error>> to set an error condition that callers
230         can check by calling <<bfd_get_error>>.
231         If that returns <<bfd_error_system_call>>, then check
232         <<errno>>.
233
234         The easiest way to report a BFD error to the user is to
235         use <<bfd_perror>>.
236
237 SUBSECTION
238         Type <<bfd_error_type>>
239
240         The values returned by <<bfd_get_error>> are defined by the
241         enumerated type <<bfd_error_type>>.
242
243 CODE_FRAGMENT
244 .
245 .typedef enum bfd_error
246 .{
247 .  bfd_error_no_error = 0,
248 .  bfd_error_system_call,
249 .  bfd_error_invalid_target,
250 .  bfd_error_wrong_format,
251 .  bfd_error_wrong_object_format,
252 .  bfd_error_invalid_operation,
253 .  bfd_error_no_memory,
254 .  bfd_error_no_symbols,
255 .  bfd_error_no_armap,
256 .  bfd_error_no_more_archived_files,
257 .  bfd_error_malformed_archive,
258 .  bfd_error_file_not_recognized,
259 .  bfd_error_file_ambiguously_recognized,
260 .  bfd_error_no_contents,
261 .  bfd_error_nonrepresentable_section,
262 .  bfd_error_no_debug_section,
263 .  bfd_error_bad_value,
264 .  bfd_error_file_truncated,
265 .  bfd_error_file_too_big,
266 .  bfd_error_invalid_error_code
267 .}
268 .bfd_error_type;
269 .
270 */
271
272 static bfd_error_type bfd_error = bfd_error_no_error;
273
274 const char *const bfd_errmsgs[] =
275 {
276   N_("No error"),
277   N_("System call error"),
278   N_("Invalid bfd target"),
279   N_("File in wrong format"),
280   N_("Archive object file in wrong format"),
281   N_("Invalid operation"),
282   N_("Memory exhausted"),
283   N_("No symbols"),
284   N_("Archive has no index; run ranlib to add one"),
285   N_("No more archived files"),
286   N_("Malformed archive"),
287   N_("File format not recognized"),
288   N_("File format is ambiguous"),
289   N_("Section has no contents"),
290   N_("Nonrepresentable section on output"),
291   N_("Symbol needs debug section which does not exist"),
292   N_("Bad value"),
293   N_("File truncated"),
294   N_("File too big"),
295   N_("#<Invalid error code>")
296 };
297
298 /*
299 FUNCTION
300         bfd_get_error
301
302 SYNOPSIS
303         bfd_error_type bfd_get_error (void);
304
305 DESCRIPTION
306         Return the current BFD error condition.
307 */
308
309 bfd_error_type
310 bfd_get_error (void)
311 {
312   return bfd_error;
313 }
314
315 /*
316 FUNCTION
317         bfd_set_error
318
319 SYNOPSIS
320         void bfd_set_error (bfd_error_type error_tag);
321
322 DESCRIPTION
323         Set the BFD error condition to be @var{error_tag}.
324 */
325
326 void
327 bfd_set_error (bfd_error_type error_tag)
328 {
329   bfd_error = error_tag;
330 }
331
332 /*
333 FUNCTION
334         bfd_errmsg
335
336 SYNOPSIS
337         const char *bfd_errmsg (bfd_error_type error_tag);
338
339 DESCRIPTION
340         Return a string describing the error @var{error_tag}, or
341         the system error if @var{error_tag} is <<bfd_error_system_call>>.
342 */
343
344 const char *
345 bfd_errmsg (bfd_error_type error_tag)
346 {
347 #ifndef errno
348   extern int errno;
349 #endif
350   if (error_tag == bfd_error_system_call)
351     return xstrerror (errno);
352
353   if (error_tag > bfd_error_invalid_error_code)
354     error_tag = bfd_error_invalid_error_code;   /* sanity check */
355
356   return _(bfd_errmsgs [error_tag]);
357 }
358
359 /*
360 FUNCTION
361         bfd_perror
362
363 SYNOPSIS
364         void bfd_perror (const char *message);
365
366 DESCRIPTION
367         Print to the standard error stream a string describing the
368         last BFD error that occurred, or the last system error if
369         the last BFD error was a system call failure.  If @var{message}
370         is non-NULL and non-empty, the error string printed is preceded
371         by @var{message}, a colon, and a space.  It is followed by a newline.
372 */
373
374 void
375 bfd_perror (const char *message)
376 {
377   if (bfd_get_error () == bfd_error_system_call)
378     /* Must be a system error then.  */
379     perror ((char *) message);
380   else
381     {
382       if (message == NULL || *message == '\0')
383         fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
384       else
385         fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
386     }
387 }
388
389 /*
390 SUBSECTION
391         BFD error handler
392
393         Some BFD functions want to print messages describing the
394         problem.  They call a BFD error handler function.  This
395         function may be overridden by the program.
396
397         The BFD error handler acts like printf.
398
399 CODE_FRAGMENT
400 .
401 .typedef void (*bfd_error_handler_type) (const char *, ...);
402 .
403 */
404
405 /* The program name used when printing BFD error messages.  */
406
407 static const char *_bfd_error_program_name;
408
409 /* This is the default routine to handle BFD error messages.
410    Like fprintf (stderr, ...), but also handles some extra format specifiers.
411
412    %A section name from section.  For group components, print group name too.
413    %B file name from bfd.  For archive components, prints archive too.
414  */
415
416 void
417 _bfd_default_error_handler (const char *fmt, ...)
418 {
419   va_list ap;
420   char *bufp;
421   const char *new_fmt, *p;
422   size_t avail = 1000;
423   char buf[1000];
424
425   if (_bfd_error_program_name != NULL)
426     fprintf (stderr, "%s: ", _bfd_error_program_name);
427   else
428     fprintf (stderr, "BFD: ");
429
430   va_start (ap, fmt);
431   new_fmt = fmt;
432   bufp = buf;
433
434   /* Reserve enough space for the existing format string.  */
435   avail -= strlen (fmt) + 1;
436   if (avail > 1000)
437     abort ();
438
439   p = fmt;
440   while (*p != '\0')
441     {
442       char *q;
443       size_t len, extra, trim;
444
445       p = strchr (p, '%');
446       if (p == NULL || p[1] == '\0')
447         {
448           if (new_fmt == buf)
449             {
450               len = strlen (fmt);
451               memcpy (bufp, fmt, len + 1);
452             }
453           break;
454         }
455
456       if (p[1] == 'A' || p[1] == 'B')
457         {
458           len = p - fmt;
459           memcpy (bufp, fmt, len);
460           bufp += len;
461           fmt = p + 2;
462           new_fmt = buf;
463
464           /* If we run out of space, tough, you lose your ridiculously
465              long file or section name.  It's not safe to try to alloc
466              memory here;  We might be printing an out of memory message.  */
467           if (avail == 0)
468             {
469               *bufp++ = '*';
470               *bufp++ = '*';
471               *bufp = '\0';
472             }
473           else
474             {
475               if (p[1] == 'B')
476                 {
477                   bfd *abfd = va_arg (ap, bfd *);
478                   if (abfd->my_archive)
479                     snprintf (bufp, avail, "%s(%s)",
480                               abfd->my_archive->filename, abfd->filename);
481                   else
482                     snprintf (bufp, avail, "%s", abfd->filename);
483                 }
484               else
485                 {
486                   asection *sec = va_arg (ap, asection *);
487                   bfd *abfd = sec->owner;
488                   const char *group = NULL;
489                   struct coff_comdat_info *ci;
490
491                   if (abfd != NULL
492                       && bfd_get_flavour (abfd) == bfd_target_elf_flavour
493                       && elf_next_in_group (sec) != NULL
494                       && (sec->flags & SEC_GROUP) == 0)
495                     group = elf_group_name (sec);
496                   else if (abfd != NULL
497                            && bfd_get_flavour (abfd) == bfd_target_coff_flavour
498                            && (ci = bfd_coff_get_comdat_section (sec->owner,
499                                                                  sec)) != NULL)
500                     group = ci->name;
501                   if (group != NULL)
502                     snprintf (bufp, avail, "%s[%s]", sec->name, group);
503                   else
504                     snprintf (bufp, avail, "%s", sec->name);
505                 }
506               len = strlen (bufp);
507               avail = avail - len + 2;
508
509               /* We need to replace any '%' we printed by "%%".
510                  First count how many.  */
511               q = bufp;
512               bufp += len;
513               extra = 0;
514               while ((q = strchr (q, '%')) != NULL)
515                 {
516                   ++q;
517                   ++extra;
518                 }
519
520               /* If there isn't room, trim off the end of the string.  */
521               q = bufp;
522               bufp += extra;
523               if (extra > avail)
524                 {
525                   trim = extra - avail;
526                   bufp -= trim;
527                   do
528                     {
529                       if (*--q == '%')
530                         --extra;
531                     }
532                   while (--trim != 0);
533                   *q = '\0';
534                   avail = extra;
535                 }
536               avail -= extra;
537
538               /* Now double all '%' chars, shuffling the string as we go.  */
539               while (extra != 0)
540                 {
541                   while ((q[extra] = *q) != '%')
542                     --q;
543                   q[--extra] = '%';
544                   --q;
545                 }
546             }
547         }
548       p = p + 2;
549     }
550
551   vfprintf (stderr, new_fmt, ap);
552   va_end (ap);
553
554   putc ('\n', stderr);
555 }
556
557 /* This is a function pointer to the routine which should handle BFD
558    error messages.  It is called when a BFD routine encounters an
559    error for which it wants to print a message.  Going through a
560    function pointer permits a program linked against BFD to intercept
561    the messages and deal with them itself.  */
562
563 bfd_error_handler_type _bfd_error_handler = _bfd_default_error_handler;
564
565 /*
566 FUNCTION
567         bfd_set_error_handler
568
569 SYNOPSIS
570         bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
571
572 DESCRIPTION
573         Set the BFD error handler function.  Returns the previous
574         function.
575 */
576
577 bfd_error_handler_type
578 bfd_set_error_handler (bfd_error_handler_type pnew)
579 {
580   bfd_error_handler_type pold;
581
582   pold = _bfd_error_handler;
583   _bfd_error_handler = pnew;
584   return pold;
585 }
586
587 /*
588 FUNCTION
589         bfd_set_error_program_name
590
591 SYNOPSIS
592         void bfd_set_error_program_name (const char *);
593
594 DESCRIPTION
595         Set the program name to use when printing a BFD error.  This
596         is printed before the error message followed by a colon and
597         space.  The string must not be changed after it is passed to
598         this function.
599 */
600
601 void
602 bfd_set_error_program_name (const char *name)
603 {
604   _bfd_error_program_name = name;
605 }
606
607 /*
608 FUNCTION
609         bfd_get_error_handler
610
611 SYNOPSIS
612         bfd_error_handler_type bfd_get_error_handler (void);
613
614 DESCRIPTION
615         Return the BFD error handler function.
616 */
617
618 bfd_error_handler_type
619 bfd_get_error_handler (void)
620 {
621   return _bfd_error_handler;
622 }
623 \f
624 /*
625 SECTION
626         Symbols
627 */
628
629 /*
630 FUNCTION
631         bfd_get_reloc_upper_bound
632
633 SYNOPSIS
634         long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
635
636 DESCRIPTION
637         Return the number of bytes required to store the
638         relocation information associated with section @var{sect}
639         attached to bfd @var{abfd}.  If an error occurs, return -1.
640
641 */
642
643 long
644 bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
645 {
646   if (abfd->format != bfd_object)
647     {
648       bfd_set_error (bfd_error_invalid_operation);
649       return -1;
650     }
651
652   return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
653 }
654
655 /*
656 FUNCTION
657         bfd_canonicalize_reloc
658
659 SYNOPSIS
660         long bfd_canonicalize_reloc
661           (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
662
663 DESCRIPTION
664         Call the back end associated with the open BFD
665         @var{abfd} and translate the external form of the relocation
666         information attached to @var{sec} into the internal canonical
667         form.  Place the table into memory at @var{loc}, which has
668         been preallocated, usually by a call to
669         <<bfd_get_reloc_upper_bound>>.  Returns the number of relocs, or
670         -1 on error.
671
672         The @var{syms} table is also needed for horrible internal magic
673         reasons.
674
675 */
676 long
677 bfd_canonicalize_reloc (bfd *abfd,
678                         sec_ptr asect,
679                         arelent **location,
680                         asymbol **symbols)
681 {
682   if (abfd->format != bfd_object)
683     {
684       bfd_set_error (bfd_error_invalid_operation);
685       return -1;
686     }
687
688   return BFD_SEND (abfd, _bfd_canonicalize_reloc,
689                    (abfd, asect, location, symbols));
690 }
691
692 /*
693 FUNCTION
694         bfd_set_reloc
695
696 SYNOPSIS
697         void bfd_set_reloc
698           (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
699
700 DESCRIPTION
701         Set the relocation pointer and count within
702         section @var{sec} to the values @var{rel} and @var{count}.
703         The argument @var{abfd} is ignored.
704
705 */
706
707 void
708 bfd_set_reloc (bfd *ignore_abfd ATTRIBUTE_UNUSED,
709                sec_ptr asect,
710                arelent **location,
711                unsigned int count)
712 {
713   asect->orelocation = location;
714   asect->reloc_count = count;
715 }
716
717 /*
718 FUNCTION
719         bfd_set_file_flags
720
721 SYNOPSIS
722         bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
723
724 DESCRIPTION
725         Set the flag word in the BFD @var{abfd} to the value @var{flags}.
726
727         Possible errors are:
728         o <<bfd_error_wrong_format>> - The target bfd was not of object format.
729         o <<bfd_error_invalid_operation>> - The target bfd was open for reading.
730         o <<bfd_error_invalid_operation>> -
731         The flag word contained a bit which was not applicable to the
732         type of file.  E.g., an attempt was made to set the <<D_PAGED>> bit
733         on a BFD format which does not support demand paging.
734
735 */
736
737 bfd_boolean
738 bfd_set_file_flags (bfd *abfd, flagword flags)
739 {
740   if (abfd->format != bfd_object)
741     {
742       bfd_set_error (bfd_error_wrong_format);
743       return FALSE;
744     }
745
746   if (bfd_read_p (abfd))
747     {
748       bfd_set_error (bfd_error_invalid_operation);
749       return FALSE;
750     }
751
752   bfd_get_file_flags (abfd) = flags;
753   if ((flags & bfd_applicable_file_flags (abfd)) != flags)
754     {
755       bfd_set_error (bfd_error_invalid_operation);
756       return FALSE;
757     }
758
759   return TRUE;
760 }
761
762 void
763 bfd_assert (const char *file, int line)
764 {
765   (*_bfd_error_handler) (_("BFD %s assertion fail %s:%d"),
766                          BFD_VERSION_STRING, file, line);
767 }
768
769 /* A more or less friendly abort message.  In libbfd.h abort is
770    defined to call this function.  */
771
772 #ifndef EXIT_FAILURE
773 #define EXIT_FAILURE 1
774 #endif
775
776 void
777 _bfd_abort (const char *file, int line, const char *fn)
778 {
779   if (fn != NULL)
780     (*_bfd_error_handler)
781       (_("BFD %s internal error, aborting at %s line %d in %s\n"),
782        BFD_VERSION_STRING, file, line, fn);
783   else
784     (*_bfd_error_handler)
785       (_("BFD %s internal error, aborting at %s line %d\n"),
786        BFD_VERSION_STRING, file, line);
787   (*_bfd_error_handler) (_("Please report this bug.\n"));
788   xexit (EXIT_FAILURE);
789 }
790
791 /*
792 FUNCTION
793         bfd_get_arch_size
794
795 SYNOPSIS
796         int bfd_get_arch_size (bfd *abfd);
797
798 DESCRIPTION
799         Returns the architecture address size, in bits, as determined
800         by the object file's format.  For ELF, this information is
801         included in the header.
802
803 RETURNS
804         Returns the arch size in bits if known, <<-1>> otherwise.
805 */
806
807 int
808 bfd_get_arch_size (bfd *abfd)
809 {
810   if (abfd->xvec->flavour == bfd_target_elf_flavour)
811     return get_elf_backend_data (abfd)->s->arch_size;
812
813   return -1;
814 }
815
816 /*
817 FUNCTION
818         bfd_get_sign_extend_vma
819
820 SYNOPSIS
821         int bfd_get_sign_extend_vma (bfd *abfd);
822
823 DESCRIPTION
824         Indicates if the target architecture "naturally" sign extends
825         an address.  Some architectures implicitly sign extend address
826         values when they are converted to types larger than the size
827         of an address.  For instance, bfd_get_start_address() will
828         return an address sign extended to fill a bfd_vma when this is
829         the case.
830
831 RETURNS
832         Returns <<1>> if the target architecture is known to sign
833         extend addresses, <<0>> if the target architecture is known to
834         not sign extend addresses, and <<-1>> otherwise.
835 */
836
837 int
838 bfd_get_sign_extend_vma (bfd *abfd)
839 {
840   char *name;
841
842   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
843     return get_elf_backend_data (abfd)->sign_extend_vma;
844
845   name = bfd_get_target (abfd);
846
847   /* Return a proper value for DJGPP & PE COFF (x86 COFF variants).
848      This function is required for DWARF2 support, but there is
849      no place to store this information in the COFF back end.
850      Should enough other COFF targets add support for DWARF2,
851      a place will have to be found.  Until then, this hack will do.  */
852   if (strncmp (name, "coff-go32", sizeof ("coff-go32") - 1) == 0
853       || strcmp (name, "pe-i386") == 0
854       || strcmp (name, "pei-i386") == 0)
855     return 1;
856
857   bfd_set_error (bfd_error_wrong_format);
858   return -1;
859 }
860
861 /*
862 FUNCTION
863         bfd_set_start_address
864
865 SYNOPSIS
866         bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
867
868 DESCRIPTION
869         Make @var{vma} the entry point of output BFD @var{abfd}.
870
871 RETURNS
872         Returns <<TRUE>> on success, <<FALSE>> otherwise.
873 */
874
875 bfd_boolean
876 bfd_set_start_address (bfd *abfd, bfd_vma vma)
877 {
878   abfd->start_address = vma;
879   return TRUE;
880 }
881
882 /*
883 FUNCTION
884         bfd_get_gp_size
885
886 SYNOPSIS
887         unsigned int bfd_get_gp_size (bfd *abfd);
888
889 DESCRIPTION
890         Return the maximum size of objects to be optimized using the GP
891         register under MIPS ECOFF.  This is typically set by the <<-G>>
892         argument to the compiler, assembler or linker.
893 */
894
895 unsigned int
896 bfd_get_gp_size (bfd *abfd)
897 {
898   if (abfd->format == bfd_object)
899     {
900       if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
901         return ecoff_data (abfd)->gp_size;
902       else if (abfd->xvec->flavour == bfd_target_elf_flavour)
903         return elf_gp_size (abfd);
904     }
905   return 0;
906 }
907
908 /*
909 FUNCTION
910         bfd_set_gp_size
911
912 SYNOPSIS
913         void bfd_set_gp_size (bfd *abfd, unsigned int i);
914
915 DESCRIPTION
916         Set the maximum size of objects to be optimized using the GP
917         register under ECOFF or MIPS ELF.  This is typically set by
918         the <<-G>> argument to the compiler, assembler or linker.
919 */
920
921 void
922 bfd_set_gp_size (bfd *abfd, unsigned int i)
923 {
924   /* Don't try to set GP size on an archive or core file!  */
925   if (abfd->format != bfd_object)
926     return;
927
928   if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
929     ecoff_data (abfd)->gp_size = i;
930   else if (abfd->xvec->flavour == bfd_target_elf_flavour)
931     elf_gp_size (abfd) = i;
932 }
933
934 /* Get the GP value.  This is an internal function used by some of the
935    relocation special_function routines on targets which support a GP
936    register.  */
937
938 bfd_vma
939 _bfd_get_gp_value (bfd *abfd)
940 {
941   if (! abfd)
942     return 0;
943   if (abfd->format != bfd_object)
944     return 0;
945
946   if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
947     return ecoff_data (abfd)->gp;
948   else if (abfd->xvec->flavour == bfd_target_elf_flavour)
949     return elf_gp (abfd);
950
951   return 0;
952 }
953
954 /* Set the GP value.  */
955
956 void
957 _bfd_set_gp_value (bfd *abfd, bfd_vma v)
958 {
959   if (! abfd)
960     BFD_FAIL ();
961   if (abfd->format != bfd_object)
962     return;
963
964   if (abfd->xvec->flavour == bfd_target_ecoff_flavour)
965     ecoff_data (abfd)->gp = v;
966   else if (abfd->xvec->flavour == bfd_target_elf_flavour)
967     elf_gp (abfd) = v;
968 }
969
970 /*
971 FUNCTION
972         bfd_scan_vma
973
974 SYNOPSIS
975         bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
976
977 DESCRIPTION
978         Convert, like <<strtoul>>, a numerical expression
979         @var{string} into a <<bfd_vma>> integer, and return that integer.
980         (Though without as many bells and whistles as <<strtoul>>.)
981         The expression is assumed to be unsigned (i.e., positive).
982         If given a @var{base}, it is used as the base for conversion.
983         A base of 0 causes the function to interpret the string
984         in hex if a leading "0x" or "0X" is found, otherwise
985         in octal if a leading zero is found, otherwise in decimal.
986
987         If the value would overflow, the maximum <<bfd_vma>> value is
988         returned.
989 */
990
991 bfd_vma
992 bfd_scan_vma (const char *string, const char **end, int base)
993 {
994   bfd_vma value;
995   bfd_vma cutoff;
996   unsigned int cutlim;
997   int overflow;
998
999   /* Let the host do it if possible.  */
1000   if (sizeof (bfd_vma) <= sizeof (unsigned long))
1001     return strtoul (string, (char **) end, base);
1002
1003 #ifdef HAVE_STRTOULL
1004   if (sizeof (bfd_vma) <= sizeof (unsigned long long))
1005     return strtoull (string, (char **) end, base);
1006 #endif
1007
1008   if (base == 0)
1009     {
1010       if (string[0] == '0')
1011         {
1012           if ((string[1] == 'x') || (string[1] == 'X'))
1013             base = 16;
1014           else
1015             base = 8;
1016         }
1017     }
1018
1019   if ((base < 2) || (base > 36))
1020     base = 10;
1021
1022   if (base == 16
1023       && string[0] == '0'
1024       && (string[1] == 'x' || string[1] == 'X')
1025       && ISXDIGIT (string[2]))
1026     {
1027       string += 2;
1028     }
1029
1030   cutoff = (~ (bfd_vma) 0) / (bfd_vma) base;
1031   cutlim = (~ (bfd_vma) 0) % (bfd_vma) base;
1032   value = 0;
1033   overflow = 0;
1034   while (1)
1035     {
1036       unsigned int digit;
1037
1038       digit = *string;
1039       if (ISDIGIT (digit))
1040         digit = digit - '0';
1041       else if (ISALPHA (digit))
1042         digit = TOUPPER (digit) - 'A' + 10;
1043       else
1044         break;
1045       if (digit >= (unsigned int) base)
1046         break;
1047       if (value > cutoff || (value == cutoff && digit > cutlim))
1048         overflow = 1;
1049       value = value * base + digit;
1050       ++string;
1051     }
1052
1053   if (overflow)
1054     value = ~ (bfd_vma) 0;
1055
1056   if (end != NULL)
1057     *end = string;
1058
1059   return value;
1060 }
1061
1062 /*
1063 FUNCTION
1064         bfd_copy_private_header_data
1065
1066 SYNOPSIS
1067         bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
1068
1069 DESCRIPTION
1070         Copy private BFD header information from the BFD @var{ibfd} to the
1071         the BFD @var{obfd}.  This copies information that may require
1072         sections to exist, but does not require symbol tables.  Return
1073         <<true>> on success, <<false>> on error.
1074         Possible error returns are:
1075
1076         o <<bfd_error_no_memory>> -
1077         Not enough memory exists to create private data for @var{obfd}.
1078
1079 .#define bfd_copy_private_header_data(ibfd, obfd) \
1080 .     BFD_SEND (obfd, _bfd_copy_private_header_data, \
1081 .               (ibfd, obfd))
1082
1083 */
1084
1085 /*
1086 FUNCTION
1087         bfd_copy_private_bfd_data
1088
1089 SYNOPSIS
1090         bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
1091
1092 DESCRIPTION
1093         Copy private BFD information from the BFD @var{ibfd} to the
1094         the BFD @var{obfd}.  Return <<TRUE>> on success, <<FALSE>> on error.
1095         Possible error returns are:
1096
1097         o <<bfd_error_no_memory>> -
1098         Not enough memory exists to create private data for @var{obfd}.
1099
1100 .#define bfd_copy_private_bfd_data(ibfd, obfd) \
1101 .     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
1102 .               (ibfd, obfd))
1103
1104 */
1105
1106 /*
1107 FUNCTION
1108         bfd_merge_private_bfd_data
1109
1110 SYNOPSIS
1111         bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
1112
1113 DESCRIPTION
1114         Merge private BFD information from the BFD @var{ibfd} to the
1115         the output file BFD @var{obfd} when linking.  Return <<TRUE>>
1116         on success, <<FALSE>> on error.  Possible error returns are:
1117
1118         o <<bfd_error_no_memory>> -
1119         Not enough memory exists to create private data for @var{obfd}.
1120
1121 .#define bfd_merge_private_bfd_data(ibfd, obfd) \
1122 .     BFD_SEND (obfd, _bfd_merge_private_bfd_data, \
1123 .               (ibfd, obfd))
1124
1125 */
1126
1127 /*
1128 FUNCTION
1129         bfd_set_private_flags
1130
1131 SYNOPSIS
1132         bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
1133
1134 DESCRIPTION
1135         Set private BFD flag information in the BFD @var{abfd}.
1136         Return <<TRUE>> on success, <<FALSE>> on error.  Possible error
1137         returns are:
1138
1139         o <<bfd_error_no_memory>> -
1140         Not enough memory exists to create private data for @var{obfd}.
1141
1142 .#define bfd_set_private_flags(abfd, flags) \
1143 .     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
1144
1145 */
1146
1147 /*
1148 FUNCTION
1149         Other functions
1150
1151 DESCRIPTION
1152         The following functions exist but have not yet been documented.
1153
1154 .#define bfd_sizeof_headers(abfd, reloc) \
1155 .       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
1156 .
1157 .#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
1158 .       BFD_SEND (abfd, _bfd_find_nearest_line, \
1159 .                 (abfd, sec, syms, off, file, func, line))
1160 .
1161 .#define bfd_debug_info_start(abfd) \
1162 .       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1163 .
1164 .#define bfd_debug_info_end(abfd) \
1165 .       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1166 .
1167 .#define bfd_debug_info_accumulate(abfd, section) \
1168 .       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1169 .
1170 .#define bfd_stat_arch_elt(abfd, stat) \
1171 .       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1172 .
1173 .#define bfd_update_armap_timestamp(abfd) \
1174 .       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
1175 .
1176 .#define bfd_set_arch_mach(abfd, arch, mach)\
1177 .       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
1178 .
1179 .#define bfd_relax_section(abfd, section, link_info, again) \
1180 .       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
1181 .
1182 .#define bfd_gc_sections(abfd, link_info) \
1183 .       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
1184 .
1185 .#define bfd_merge_sections(abfd, link_info) \
1186 .       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
1187 .
1188 .#define bfd_is_group_section(abfd, sec) \
1189 .       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
1190 .
1191 .#define bfd_discard_group(abfd, sec) \
1192 .       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1193 .
1194 .#define bfd_link_hash_table_create(abfd) \
1195 .       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1196 .
1197 .#define bfd_link_hash_table_free(abfd, hash) \
1198 .       BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
1199 .
1200 .#define bfd_link_add_symbols(abfd, info) \
1201 .       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1202 .
1203 .#define bfd_link_just_syms(sec, info) \
1204 .       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1205 .
1206 .#define bfd_final_link(abfd, info) \
1207 .       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
1208 .
1209 .#define bfd_free_cached_info(abfd) \
1210 .       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
1211 .
1212 .#define bfd_get_dynamic_symtab_upper_bound(abfd) \
1213 .       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
1214 .
1215 .#define bfd_print_private_bfd_data(abfd, file)\
1216 .       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
1217 .
1218 .#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
1219 .       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
1220 .
1221 .#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
1222 .       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
1223 .                                                   dyncount, dynsyms, ret))
1224 .
1225 .#define bfd_get_dynamic_reloc_upper_bound(abfd) \
1226 .       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
1227 .
1228 .#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
1229 .       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
1230 .
1231 .extern bfd_byte *bfd_get_relocated_section_contents
1232 .  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
1233 .   bfd_boolean, asymbol **);
1234 .
1235
1236 */
1237
1238 bfd_byte *
1239 bfd_get_relocated_section_contents (bfd *abfd,
1240                                     struct bfd_link_info *link_info,
1241                                     struct bfd_link_order *link_order,
1242                                     bfd_byte *data,
1243                                     bfd_boolean relocatable,
1244                                     asymbol **symbols)
1245 {
1246   bfd *abfd2;
1247   bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
1248                    bfd_byte *, bfd_boolean, asymbol **);
1249
1250   if (link_order->type == bfd_indirect_link_order)
1251     {
1252       abfd2 = link_order->u.indirect.section->owner;
1253       if (abfd2 == NULL)
1254         abfd2 = abfd;
1255     }
1256   else
1257     abfd2 = abfd;
1258
1259   fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1260
1261   return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
1262 }
1263
1264 /* Record information about an ELF program header.  */
1265
1266 bfd_boolean
1267 bfd_record_phdr (bfd *abfd,
1268                  unsigned long type,
1269                  bfd_boolean flags_valid,
1270                  flagword flags,
1271                  bfd_boolean at_valid,
1272                  bfd_vma at,
1273                  bfd_boolean includes_filehdr,
1274                  bfd_boolean includes_phdrs,
1275                  unsigned int count,
1276                  asection **secs)
1277 {
1278   struct elf_segment_map *m, **pm;
1279   bfd_size_type amt;
1280
1281   if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
1282     return TRUE;
1283
1284   amt = sizeof (struct elf_segment_map);
1285   amt += ((bfd_size_type) count - 1) * sizeof (asection *);
1286   m = bfd_alloc (abfd, amt);
1287   if (m == NULL)
1288     return FALSE;
1289
1290   m->next = NULL;
1291   m->p_type = type;
1292   m->p_flags = flags;
1293   m->p_paddr = at;
1294   m->p_flags_valid = flags_valid;
1295   m->p_paddr_valid = at_valid;
1296   m->includes_filehdr = includes_filehdr;
1297   m->includes_phdrs = includes_phdrs;
1298   m->count = count;
1299   if (count > 0)
1300     memcpy (m->sections, secs, count * sizeof (asection *));
1301
1302   for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
1303     ;
1304   *pm = m;
1305
1306   return TRUE;
1307 }
1308
1309 void
1310 bfd_sprintf_vma (bfd *abfd, char *buf, bfd_vma value)
1311 {
1312   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1313     get_elf_backend_data (abfd)->elf_backend_sprintf_vma (abfd, buf, value);
1314   else
1315     sprintf_vma (buf, value);
1316 }
1317
1318 void
1319 bfd_fprintf_vma (bfd *abfd, void *stream, bfd_vma value)
1320 {
1321   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1322     get_elf_backend_data (abfd)->elf_backend_fprintf_vma (abfd, stream, value);
1323   else
1324     fprintf_vma ((FILE *) stream, value);
1325 }
1326
1327 /*
1328 FUNCTION
1329         bfd_alt_mach_code
1330
1331 SYNOPSIS
1332         bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
1333
1334 DESCRIPTION
1335
1336         When more than one machine code number is available for the
1337         same machine type, this function can be used to switch between
1338         the preferred one (alternative == 0) and any others.  Currently,
1339         only ELF supports this feature, with up to two alternate
1340         machine codes.
1341 */
1342
1343 bfd_boolean
1344 bfd_alt_mach_code (bfd *abfd, int alternative)
1345 {
1346   if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1347     {
1348       int code;
1349
1350       switch (alternative)
1351         {
1352         case 0:
1353           code = get_elf_backend_data (abfd)->elf_machine_code;
1354           break;
1355
1356         case 1:
1357           code = get_elf_backend_data (abfd)->elf_machine_alt1;
1358           if (code == 0)
1359             return FALSE;
1360           break;
1361
1362         case 2:
1363           code = get_elf_backend_data (abfd)->elf_machine_alt2;
1364           if (code == 0)
1365             return FALSE;
1366           break;
1367
1368         default:
1369           return FALSE;
1370         }
1371
1372       elf_elfheader (abfd)->e_machine = code;
1373
1374       return TRUE;
1375     }
1376
1377   return FALSE;
1378 }
1379
1380 /*
1381 CODE_FRAGMENT
1382
1383 .struct bfd_preserve
1384 .{
1385 .  void *marker;
1386 .  void *tdata;
1387 .  flagword flags;
1388 .  const struct bfd_arch_info *arch_info;
1389 .  struct bfd_section *sections;
1390 .  struct bfd_section **section_tail;
1391 .  unsigned int section_count;
1392 .  struct bfd_hash_table section_htab;
1393 .};
1394 .
1395 */
1396
1397 /*
1398 FUNCTION
1399         bfd_preserve_save
1400
1401 SYNOPSIS
1402         bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
1403
1404 DESCRIPTION
1405         When testing an object for compatibility with a particular
1406         target back-end, the back-end object_p function needs to set
1407         up certain fields in the bfd on successfully recognizing the
1408         object.  This typically happens in a piecemeal fashion, with
1409         failures possible at many points.  On failure, the bfd is
1410         supposed to be restored to its initial state, which is
1411         virtually impossible.  However, restoring a subset of the bfd
1412         state works in practice.  This function stores the subset and
1413         reinitializes the bfd.
1414
1415 */
1416
1417 bfd_boolean
1418 bfd_preserve_save (bfd *abfd, struct bfd_preserve *preserve)
1419 {
1420   preserve->tdata = abfd->tdata.any;
1421   preserve->arch_info = abfd->arch_info;
1422   preserve->flags = abfd->flags;
1423   preserve->sections = abfd->sections;
1424   preserve->section_tail = abfd->section_tail;
1425   preserve->section_count = abfd->section_count;
1426   preserve->section_htab = abfd->section_htab;
1427
1428   if (! bfd_hash_table_init (&abfd->section_htab, bfd_section_hash_newfunc))
1429     return FALSE;
1430
1431   abfd->tdata.any = NULL;
1432   abfd->arch_info = &bfd_default_arch_struct;
1433   abfd->flags &= BFD_IN_MEMORY;
1434   abfd->sections = NULL;
1435   abfd->section_tail = &abfd->sections;
1436   abfd->section_count = 0;
1437
1438   return TRUE;
1439 }
1440
1441 /*
1442 FUNCTION
1443         bfd_preserve_restore
1444
1445 SYNOPSIS
1446         void bfd_preserve_restore (bfd *, struct bfd_preserve *);
1447
1448 DESCRIPTION
1449         This function restores bfd state saved by bfd_preserve_save.
1450         If MARKER is non-NULL in struct bfd_preserve then that block
1451         and all subsequently bfd_alloc'd memory is freed.
1452
1453 */
1454
1455 void
1456 bfd_preserve_restore (bfd *abfd, struct bfd_preserve *preserve)
1457 {
1458   bfd_hash_table_free (&abfd->section_htab);
1459
1460   abfd->tdata.any = preserve->tdata;
1461   abfd->arch_info = preserve->arch_info;
1462   abfd->flags = preserve->flags;
1463   abfd->section_htab = preserve->section_htab;
1464   abfd->sections = preserve->sections;
1465   abfd->section_tail = preserve->section_tail;
1466   abfd->section_count = preserve->section_count;
1467
1468   /* bfd_release frees all memory more recently bfd_alloc'd than
1469      its arg, as well as its arg.  */
1470   if (preserve->marker != NULL)
1471     {
1472       bfd_release (abfd, preserve->marker);
1473       preserve->marker = NULL;
1474     }
1475 }
1476
1477 /*
1478 FUNCTION
1479         bfd_preserve_finish
1480
1481 SYNOPSIS
1482         void bfd_preserve_finish (bfd *, struct bfd_preserve *);
1483
1484 DESCRIPTION
1485         This function should be called when the bfd state saved by
1486         bfd_preserve_save is no longer needed.  ie. when the back-end
1487         object_p function returns with success.
1488
1489 */
1490
1491 void
1492 bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve)
1493 {
1494   /* It would be nice to be able to free more memory here, eg. old
1495      tdata, but that's not possible since these blocks are sitting
1496      inside bfd_alloc'd memory.  The section hash is on a separate
1497      objalloc.  */
1498   bfd_hash_table_free (&preserve->section_htab);
1499 }