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