OSDN Git Service

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