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