]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/bfd.c
config:
[thirdparty/binutils-gdb.git] / bfd / bfd.c
CommitLineData
252b5132 1/* Generic BFD library interface and support routines.
7898deda 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
c067354b 3 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
252b5132
RH
4 Free Software Foundation, Inc.
5 Written by Cygnus Support.
6
3af9a47b 7 This file is part of BFD, the Binary File Descriptor library.
252b5132 8
3af9a47b
NC
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
cd123cb7 11 the Free Software Foundation; either version 3 of the License, or
3af9a47b 12 (at your option) any later version.
252b5132 13
3af9a47b
NC
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.
252b5132 18
3af9a47b
NC
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
cd123cb7
NC
21 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22 MA 02110-1301, USA. */
252b5132
RH
23
24/*
25SECTION
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
36CODE_FRAGMENT
37.
a50b1753
NC
38.enum bfd_direction
39. {
40. no_direction = 0,
41. read_direction = 1,
42. write_direction = 2,
43. both_direction = 3
44. };
45.
c2852e88 46.struct bfd
252b5132 47.{
52b69c9e
AO
48. {* A unique identifier of the BFD *}
49. unsigned int id;
50.
b5f79c76
NC
51. {* The filename the application opened the BFD with. *}
52. const char *filename;
252b5132 53.
b5f79c76
NC
54. {* A pointer to the target jump table. *}
55. const struct bfd_target *xvec;
252b5132 56.
40838a72
AC
57. {* The IOSTREAM, and corresponding IO vector that provide access
58. to the file backing the BFD. *}
c58b9523 59. void *iostream;
40838a72 60. const struct bfd_iovec *iovec;
b5f79c76 61.
b5f79c76
NC
62. {* The caching routines use these to maintain a
63. least-recently-used list of BFDs. *}
2ce40c65 64. struct bfd *lru_prev, *lru_next;
b5f79c76
NC
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.
b34976b6 70. {* File modified time, if mtime_set is TRUE. *}
b5f79c76
NC
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. *}
a50b1753 80. enum bfd_direction direction;
b5f79c76
NC
81.
82. {* Format_specific flags. *}
83. flagword flags;
84.
6ad2759d
L
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.
36e4dce6
CD
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.
b5f79c76
NC
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.
a8da6403
NC
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.
b5f79c76
NC
166. {* A hash table for section names. *}
167. struct bfd_hash_table section_htab;
168.
169. {* Pointer to linked list of sections. *}
198beae2 170. struct bfd_section *sections;
b5f79c76 171.
5daa8fe7
L
172. {* The last section on the section list. *}
173. struct bfd_section *section_last;
b5f79c76
NC
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.
5c1d2f5f
AM
185. {* Symbol table for output BFD (with symcount entries).
186. Also used by the linker to cache input BFD symbols. *}
fc0a2244 187. struct bfd_symbol **outsymbols;
b5f79c76 188.
1f70368c
DJ
189. {* Used for slurped dynamic symbol tables. *}
190. unsigned int dynsymcount;
191.
b5f79c76
NC
192. {* Pointer to structure which contains architecture information. *}
193. const struct bfd_arch_info *arch_info;
194.
195. {* Stuff only useful for archives. *}
c58b9523 196. void *arelt_data;
2ce40c65 197. struct bfd *my_archive; {* The containing archive BFD. *}
cc481421 198. struct bfd *archive_next; {* The next BFD in the archive. *}
2ce40c65 199. struct bfd *archive_head; {* The first BFD in the archive. *}
a8da6403
NC
200. struct bfd *nested_archives; {* List of nested archive in a flattened
201. thin archive. *}
252b5132 202.
b5f79c76 203. {* A chain of BFD structures involved in a link. *}
2ce40c65 204. struct bfd *link_next;
b5f79c76
NC
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. {
252b5132
RH
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;
c067354b 224. struct verilog_data_struct *verilog_data;
252b5132
RH
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;
3c3bdf30 230. struct mmo_data_struct *mmo_data;
252b5132
RH
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;
3af9a47b
NC
243. struct mach_o_data_struct *mach_o_data;
244. struct mach_o_fat_data_struct *mach_o_fat_data;
ce3c775b 245. struct plugin_data_struct *plugin_data;
3af9a47b
NC
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;
c58b9523 249. void *any;
b5f79c76
NC
250. }
251. tdata;
aebad5fe 252.
b5f79c76 253. {* Used by the application to hold private data. *}
c58b9523 254. void *usrdata;
252b5132
RH
255.
256. {* Where all the allocated stuff under this BFD goes. This is a
c58b9523
AM
257. struct objalloc *, but we use void * to avoid requiring the inclusion
258. of objalloc.h. *}
259. void *memory;
6ad2759d
L
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;
a8da6403
NC
286.
287. {* Set if this is a thin archive. *}
288. unsigned int is_thin_archive : 1;
252b5132
RH
289.};
290.
291*/
292
252b5132 293#include "sysdep.h"
252b5132 294#include <stdarg.h>
3db64b00
AM
295#include "bfd.h"
296#include "bfdver.h"
252b5132 297#include "libiberty.h"
3fad56a3 298#include "demangle.h"
3882b010 299#include "safe-ctype.h"
252b5132
RH
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"
3168356f
AM
308
309#ifndef EXIT_FAILURE
310#define EXIT_FAILURE 1
311#endif
312
252b5132
RH
313\f
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 */
252b5132
RH
319\f
320/*
321SECTION
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
334SUBSECTION
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
340CODE_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,
3619ad04 348. bfd_error_wrong_object_format,
252b5132
RH
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,
ffda70fc 363. bfd_error_on_input,
252b5132 364. bfd_error_invalid_error_code
b5f79c76
NC
365.}
366.bfd_error_type;
252b5132
RH
367.
368*/
369
370static bfd_error_type bfd_error = bfd_error_no_error;
ffda70fc
AM
371static bfd *input_bfd = NULL;
372static bfd_error_type input_error = bfd_error_no_error;
252b5132 373
55ab10f0
NC
374const 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"),
3619ad04 380 N_("Archive object file in wrong format"),
55ab10f0
NC
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"),
ffda70fc 395 N_("Error reading %s: %s"),
55ab10f0
NC
396 N_("#<Invalid error code>")
397};
252b5132
RH
398
399/*
400FUNCTION
401 bfd_get_error
402
403SYNOPSIS
404 bfd_error_type bfd_get_error (void);
405
406DESCRIPTION
407 Return the current BFD error condition.
408*/
409
410bfd_error_type
c58b9523 411bfd_get_error (void)
252b5132
RH
412{
413 return bfd_error;
414}
415
416/*
417FUNCTION
418 bfd_set_error
419
420SYNOPSIS
ffda70fc 421 void bfd_set_error (bfd_error_type error_tag, ...);
252b5132
RH
422
423DESCRIPTION
424 Set the BFD error condition to be @var{error_tag}.
ffda70fc
AM
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.
252b5132
RH
428*/
429
430void
ffda70fc 431bfd_set_error (bfd_error_type error_tag, ...)
252b5132
RH
432{
433 bfd_error = error_tag;
ffda70fc
AM
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 *);
a50b1753 442 input_error = (bfd_error_type) va_arg (ap, int);
ffda70fc
AM
443 if (input_error >= bfd_error_on_input)
444 abort ();
445 va_end (ap);
446 }
252b5132
RH
447}
448
449/*
450FUNCTION
451 bfd_errmsg
452
453SYNOPSIS
55ab10f0 454 const char *bfd_errmsg (bfd_error_type error_tag);
252b5132
RH
455
456DESCRIPTION
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
55ab10f0 461const char *
c58b9523 462bfd_errmsg (bfd_error_type error_tag)
252b5132
RH
463{
464#ifndef errno
465 extern int errno;
466#endif
ffda70fc
AM
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
252b5132
RH
480 if (error_tag == bfd_error_system_call)
481 return xstrerror (errno);
482
c58b9523
AM
483 if (error_tag > bfd_error_invalid_error_code)
484 error_tag = bfd_error_invalid_error_code; /* sanity check */
252b5132 485
c58b9523 486 return _(bfd_errmsgs [error_tag]);
252b5132
RH
487}
488
489/*
490FUNCTION
491 bfd_perror
492
493SYNOPSIS
55ab10f0 494 void bfd_perror (const char *message);
252b5132
RH
495
496DESCRIPTION
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
504void
c58b9523 505bfd_perror (const char *message)
252b5132 506{
ffda70fc
AM
507 if (message == NULL || *message == '\0')
508 fprintf (stderr, "%s\n", bfd_errmsg (bfd_get_error ()));
55ab10f0 509 else
ffda70fc 510 fprintf (stderr, "%s: %s\n", message, bfd_errmsg (bfd_get_error ()));
252b5132
RH
511}
512
513/*
514SUBSECTION
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
5c4491d3 519 function may be overridden by the program.
252b5132
RH
520
521 The BFD error handler acts like printf.
522
523CODE_FRAGMENT
524.
c58b9523 525.typedef void (*bfd_error_handler_type) (const char *, ...);
252b5132
RH
526.
527*/
528
529/* The program name used when printing BFD error messages. */
530
531static const char *_bfd_error_program_name;
532
d003868e
AM
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.
d07676f8
NC
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);
d003868e 555 */
252b5132 556
185d09ad 557void
d003868e 558_bfd_default_error_handler (const char *fmt, ...)
252b5132 559{
d003868e
AM
560 va_list ap;
561 char *bufp;
562 const char *new_fmt, *p;
563 size_t avail = 1000;
564 char buf[1000];
c58b9523 565
0bc43230
AM
566 /* PR 4992: Don't interrupt output being sent to stdout. */
567 fflush (stdout);
568
252b5132
RH
569 if (_bfd_error_program_name != NULL)
570 fprintf (stderr, "%s: ", _bfd_error_program_name);
571 else
572 fprintf (stderr, "BFD: ");
573
d003868e
AM
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)
3168356f 581 _exit (EXIT_FAILURE);
d003868e
AM
582
583 p = fmt;
3e540f25 584 while (1)
d003868e
AM
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 *);
d07676f8
NC
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)
d003868e
AM
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 *);
d07676f8 635 bfd *abfd;
d003868e
AM
636 const char *group = NULL;
637 struct coff_comdat_info *ci;
638
d07676f8
NC
639 if (sec == NULL)
640 /* Invoking %A with a null section pointer is an internal error. */
641 abort ();
642 abfd = sec->owner;
d003868e
AM
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';
45fc9e4a 686 avail = extra;
d003868e 687 }
45fc9e4a 688 avail -= extra;
d003868e
AM
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);
252b5132 705
d003868e 706 putc ('\n', stderr);
252b5132
RH
707}
708
252b5132
RH
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
715bfd_error_handler_type _bfd_error_handler = _bfd_default_error_handler;
716
717/*
718FUNCTION
719 bfd_set_error_handler
720
721SYNOPSIS
722 bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
723
724DESCRIPTION
725 Set the BFD error handler function. Returns the previous
726 function.
727*/
728
729bfd_error_handler_type
c58b9523 730bfd_set_error_handler (bfd_error_handler_type pnew)
252b5132
RH
731{
732 bfd_error_handler_type pold;
733
734 pold = _bfd_error_handler;
735 _bfd_error_handler = pnew;
736 return pold;
737}
738
739/*
740FUNCTION
741 bfd_set_error_program_name
742
743SYNOPSIS
744 void bfd_set_error_program_name (const char *);
745
746DESCRIPTION
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
753void
c58b9523 754bfd_set_error_program_name (const char *name)
252b5132
RH
755{
756 _bfd_error_program_name = name;
757}
758
252b5132
RH
759/*
760FUNCTION
761 bfd_get_error_handler
762
763SYNOPSIS
764 bfd_error_handler_type bfd_get_error_handler (void);
765
766DESCRIPTION
767 Return the BFD error handler function.
768*/
769
770bfd_error_handler_type
c58b9523 771bfd_get_error_handler (void)
252b5132
RH
772{
773 return _bfd_error_handler;
774}
775\f
776/*
777SECTION
1b74d094
BW
778 Miscellaneous
779
780SUBSECTION
781 Miscellaneous functions
252b5132
RH
782*/
783
784/*
785FUNCTION
786 bfd_get_reloc_upper_bound
787
788SYNOPSIS
ed781d5d 789 long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
252b5132
RH
790
791DESCRIPTION
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
252b5132 798long
c58b9523 799bfd_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
252b5132 800{
55ab10f0
NC
801 if (abfd->format != bfd_object)
802 {
803 bfd_set_error (bfd_error_invalid_operation);
804 return -1;
805 }
252b5132
RH
806
807 return BFD_SEND (abfd, _get_reloc_upper_bound, (abfd, asect));
808}
809
810/*
811FUNCTION
812 bfd_canonicalize_reloc
813
814SYNOPSIS
815 long bfd_canonicalize_reloc
c58b9523 816 (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
252b5132
RH
817
818DESCRIPTION
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
252b5132
RH
830*/
831long
c58b9523
AM
832bfd_canonicalize_reloc (bfd *abfd,
833 sec_ptr asect,
834 arelent **location,
835 asymbol **symbols)
252b5132 836{
55ab10f0
NC
837 if (abfd->format != bfd_object)
838 {
839 bfd_set_error (bfd_error_invalid_operation);
840 return -1;
841 }
842
252b5132
RH
843 return BFD_SEND (abfd, _bfd_canonicalize_reloc,
844 (abfd, asect, location, symbols));
845}
846
847/*
848FUNCTION
849 bfd_set_reloc
850
851SYNOPSIS
852 void bfd_set_reloc
b5f79c76 853 (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
252b5132
RH
854
855DESCRIPTION
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*/
aebad5fe 861
252b5132 862void
c58b9523
AM
863bfd_set_reloc (bfd *ignore_abfd ATTRIBUTE_UNUSED,
864 sec_ptr asect,
865 arelent **location,
866 unsigned int count)
252b5132
RH
867{
868 asect->orelocation = location;
869 asect->reloc_count = count;
870}
871
872/*
873FUNCTION
874 bfd_set_file_flags
875
876SYNOPSIS
ed781d5d 877 bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
252b5132
RH
878
879DESCRIPTION
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
b34976b6 892bfd_boolean
c58b9523 893bfd_set_file_flags (bfd *abfd, flagword flags)
252b5132 894{
55ab10f0
NC
895 if (abfd->format != bfd_object)
896 {
897 bfd_set_error (bfd_error_wrong_format);
b34976b6 898 return FALSE;
55ab10f0 899 }
252b5132 900
55ab10f0
NC
901 if (bfd_read_p (abfd))
902 {
903 bfd_set_error (bfd_error_invalid_operation);
b34976b6 904 return FALSE;
55ab10f0 905 }
252b5132
RH
906
907 bfd_get_file_flags (abfd) = flags;
55ab10f0
NC
908 if ((flags & bfd_applicable_file_flags (abfd)) != flags)
909 {
910 bfd_set_error (bfd_error_invalid_operation);
b34976b6 911 return FALSE;
55ab10f0 912 }
252b5132 913
b34976b6 914 return TRUE;
252b5132
RH
915}
916
917void
c58b9523 918bfd_assert (const char *file, int line)
252b5132 919{
aec2f561
AM
920 (*_bfd_error_handler) (_("BFD %s assertion fail %s:%d"),
921 BFD_VERSION_STRING, file, line);
252b5132
RH
922}
923
c0bed66d
ILT
924/* A more or less friendly abort message. In libbfd.h abort is
925 defined to call this function. */
926
c0bed66d 927void
c58b9523 928_bfd_abort (const char *file, int line, const char *fn)
c0bed66d
ILT
929{
930 if (fn != NULL)
931 (*_bfd_error_handler)
aec2f561
AM
932 (_("BFD %s internal error, aborting at %s line %d in %s\n"),
933 BFD_VERSION_STRING, file, line, fn);
c0bed66d
ILT
934 else
935 (*_bfd_error_handler)
391154e9 936 (_("BFD %s internal error, aborting at %s line %d\n"),
aec2f561 937 BFD_VERSION_STRING, file, line);
c0bed66d 938 (*_bfd_error_handler) (_("Please report this bug.\n"));
3168356f 939 _exit (EXIT_FAILURE);
c0bed66d 940}
252b5132 941
125c4a69
NC
942/*
943FUNCTION
944 bfd_get_arch_size
945
946SYNOPSIS
947 int bfd_get_arch_size (bfd *abfd);
948
949DESCRIPTION
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
954RETURNS
955 Returns the arch size in bits if known, <<-1>> otherwise.
956*/
957
958int
c58b9523 959bfd_get_arch_size (bfd *abfd)
125c4a69
NC
960{
961 if (abfd->xvec->flavour == bfd_target_elf_flavour)
c58b9523 962 return get_elf_backend_data (abfd)->s->arch_size;
125c4a69 963
125c4a69
NC
964 return -1;
965}
966
967/*
968FUNCTION
969 bfd_get_sign_extend_vma
970
971SYNOPSIS
972 int bfd_get_sign_extend_vma (bfd *abfd);
973
974DESCRIPTION
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
982RETURNS
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
988int
c58b9523 989bfd_get_sign_extend_vma (bfd *abfd)
125c4a69 990{
f47e5071
NC
991 char *name;
992
125c4a69 993 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
c58b9523 994 return get_elf_backend_data (abfd)->sign_extend_vma;
125c4a69 995
f47e5071
NC
996 name = bfd_get_target (abfd);
997
7148cc28 998 /* Return a proper value for DJGPP & PE COFF.
f47e5071
NC
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. */
0112cd26 1003 if (CONST_STRNEQ (name, "coff-go32")
8a7140c3 1004 || strcmp (name, "pe-i386") == 0
f0927246 1005 || strcmp (name, "pei-i386") == 0
6e3d6dc1
NC
1006 || strcmp (name, "pe-x86-64") == 0
1007 || strcmp (name, "pei-x86-64") == 0
7148cc28
NC
1008 || strcmp (name, "pe-arm-wince-little") == 0
1009 || strcmp (name, "pei-arm-wince-little") == 0)
f47e5071
NC
1010 return 1;
1011
09c6f846
TG
1012 if (CONST_STRNEQ (name, "mach-o"))
1013 return 0;
1014
a022216b 1015 bfd_set_error (bfd_error_wrong_format);
125c4a69
NC
1016 return -1;
1017}
1018
252b5132
RH
1019/*
1020FUNCTION
1021 bfd_set_start_address
1022
1023SYNOPSIS
ed781d5d 1024 bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
252b5132
RH
1025
1026DESCRIPTION
1027 Make @var{vma} the entry point of output BFD @var{abfd}.
1028
1029RETURNS
b34976b6 1030 Returns <<TRUE>> on success, <<FALSE>> otherwise.
252b5132
RH
1031*/
1032
b34976b6 1033bfd_boolean
c58b9523 1034bfd_set_start_address (bfd *abfd, bfd_vma vma)
252b5132
RH
1035{
1036 abfd->start_address = vma;
b34976b6 1037 return TRUE;
252b5132
RH
1038}
1039
252b5132
RH
1040/*
1041FUNCTION
1042 bfd_get_gp_size
1043
1044SYNOPSIS
ed781d5d 1045 unsigned int bfd_get_gp_size (bfd *abfd);
252b5132
RH
1046
1047DESCRIPTION
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
c0846b23 1053unsigned int
c58b9523 1054bfd_get_gp_size (bfd *abfd)
252b5132
RH
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/*
1067FUNCTION
1068 bfd_set_gp_size
1069
1070SYNOPSIS
ed781d5d 1071 void bfd_set_gp_size (bfd *abfd, unsigned int i);
252b5132
RH
1072
1073DESCRIPTION
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
1079void
c58b9523 1080bfd_set_gp_size (bfd *abfd, unsigned int i)
252b5132 1081{
55ab10f0 1082 /* Don't try to set GP size on an archive or core file! */
252b5132
RH
1083 if (abfd->format != bfd_object)
1084 return;
55ab10f0 1085
252b5132
RH
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
1096bfd_vma
c58b9523 1097_bfd_get_gp_value (bfd *abfd)
252b5132 1098{
9bcf4de0
TS
1099 if (! abfd)
1100 return 0;
55ab10f0
NC
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
252b5132
RH
1109 return 0;
1110}
1111
1112/* Set the GP value. */
1113
1114void
c58b9523 1115_bfd_set_gp_value (bfd *abfd, bfd_vma v)
252b5132 1116{
9bcf4de0 1117 if (! abfd)
c2c96631 1118 abort ();
252b5132
RH
1119 if (abfd->format != bfd_object)
1120 return;
55ab10f0 1121
252b5132
RH
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/*
1129FUNCTION
1130 bfd_scan_vma
1131
1132SYNOPSIS
ed781d5d 1133 bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
252b5132
RH
1134
1135DESCRIPTION
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
88eaccc2
AM
1145 If the value would overflow, the maximum <<bfd_vma>> value is
1146 returned.
252b5132
RH
1147*/
1148
1149bfd_vma
c58b9523 1150bfd_scan_vma (const char *string, const char **end, int base)
252b5132
RH
1151{
1152 bfd_vma value;
88eaccc2
AM
1153 bfd_vma cutoff;
1154 unsigned int cutlim;
1155 int overflow;
252b5132
RH
1156
1157 /* Let the host do it if possible. */
eb6e10cb 1158 if (sizeof (bfd_vma) <= sizeof (unsigned long))
c58b9523 1159 return strtoul (string, (char **) end, base);
252b5132 1160
49c97a80
ILT
1161#ifdef HAVE_STRTOULL
1162 if (sizeof (bfd_vma) <= sizeof (unsigned long long))
1163 return strtoull (string, (char **) end, base);
1164#endif
1165
252b5132
RH
1166 if (base == 0)
1167 {
1168 if (string[0] == '0')
1169 {
1170 if ((string[1] == 'x') || (string[1] == 'X'))
1171 base = 16;
252b5132
RH
1172 else
1173 base = 8;
1174 }
252b5132 1175 }
55ab10f0 1176
88eaccc2
AM
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 }
aebad5fe 1187
88eaccc2
AM
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 }
252b5132 1210
88eaccc2
AM
1211 if (overflow)
1212 value = ~ (bfd_vma) 0;
252b5132 1213
88eaccc2
AM
1214 if (end != NULL)
1215 *end = string;
252b5132
RH
1216
1217 return value;
1218}
1219
80fccad2
BW
1220/*
1221FUNCTION
1222 bfd_copy_private_header_data
1223
1224SYNOPSIS
1225 bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
1226
1227DESCRIPTION
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
252b5132
RH
1243/*
1244FUNCTION
1245 bfd_copy_private_bfd_data
1246
1247SYNOPSIS
ed781d5d 1248 bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
252b5132
RH
1249
1250DESCRIPTION
aebad5fe 1251 Copy private BFD information from the BFD @var{ibfd} to the
b34976b6 1252 the BFD @var{obfd}. Return <<TRUE>> on success, <<FALSE>> on error.
252b5132
RH
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/*
1265FUNCTION
1266 bfd_merge_private_bfd_data
1267
1268SYNOPSIS
ed781d5d 1269 bfd_boolean bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);
252b5132
RH
1270
1271DESCRIPTION
aebad5fe 1272 Merge private BFD information from the BFD @var{ibfd} to the
b34976b6
AM
1273 the output file BFD @var{obfd} when linking. Return <<TRUE>>
1274 on success, <<FALSE>> on error. Possible error returns are:
252b5132
RH
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/*
1286FUNCTION
1287 bfd_set_private_flags
1288
1289SYNOPSIS
ed781d5d 1290 bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
252b5132
RH
1291
1292DESCRIPTION
1293 Set private BFD flag information in the BFD @var{abfd}.
b34976b6 1294 Return <<TRUE>> on success, <<FALSE>> on error. Possible error
252b5132
RH
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) \
ed781d5d 1301. BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
252b5132
RH
1302
1303*/
1304
1305/*
1306FUNCTION
ed781d5d 1307 Other functions
252b5132
RH
1308
1309DESCRIPTION
ed781d5d 1310 The following functions exist but have not yet been documented.
252b5132 1311
a6b96beb
AM
1312.#define bfd_sizeof_headers(abfd, info) \
1313. BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
252b5132
RH
1314.
1315.#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
ed781d5d
NC
1316. BFD_SEND (abfd, _bfd_find_nearest_line, \
1317. (abfd, sec, syms, off, file, func, line))
252b5132 1318.
5420f73d
L
1319.#define bfd_find_line(abfd, syms, sym, file, line) \
1320. BFD_SEND (abfd, _bfd_find_line, \
1321. (abfd, syms, sym, file, line))
1322.
4ab527b0
FF
1323.#define bfd_find_inliner_info(abfd, file, func, line) \
1324. BFD_SEND (abfd, _bfd_find_inliner_info, \
1325. (abfd, file, func, line))
1326.
252b5132 1327.#define bfd_debug_info_start(abfd) \
ed781d5d 1328. BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
252b5132
RH
1329.
1330.#define bfd_debug_info_end(abfd) \
ed781d5d 1331. BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
252b5132
RH
1332.
1333.#define bfd_debug_info_accumulate(abfd, section) \
ed781d5d 1334. BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
252b5132
RH
1335.
1336.#define bfd_stat_arch_elt(abfd, stat) \
ed781d5d 1337. BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
252b5132
RH
1338.
1339.#define bfd_update_armap_timestamp(abfd) \
ed781d5d 1340. BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
252b5132
RH
1341.
1342.#define bfd_set_arch_mach(abfd, arch, mach)\
ed781d5d 1343. BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
252b5132
RH
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))
8550eb6e
JJ
1350.
1351.#define bfd_merge_sections(abfd, link_info) \
1352. BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
252b5132 1353.
72adc230
AM
1354.#define bfd_is_group_section(abfd, sec) \
1355. BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
1356.
e61463e1
AM
1357.#define bfd_discard_group(abfd, sec) \
1358. BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
1359.
252b5132
RH
1360.#define bfd_link_hash_table_create(abfd) \
1361. BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
1362.
e2d34d7d
DJ
1363.#define bfd_link_hash_table_free(abfd, hash) \
1364. BFD_SEND (abfd, _bfd_link_hash_table_free, (hash))
1365.
252b5132
RH
1366.#define bfd_link_add_symbols(abfd, info) \
1367. BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
1368.
1449d79b 1369.#define bfd_link_just_syms(abfd, sec, info) \
2d653fc7
AM
1370. BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
1371.
252b5132
RH
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.
c9727e01
AM
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))
4c45e5c9 1390.
252b5132
RH
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
c58b9523
AM
1398. (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
1399. bfd_boolean, asymbol **);
252b5132
RH
1400.
1401
1402*/
1403
1404bfd_byte *
c58b9523
AM
1405bfd_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)
252b5132
RH
1411{
1412 bfd *abfd2;
c58b9523
AM
1413 bfd_byte *(*fn) (bfd *, struct bfd_link_info *, struct bfd_link_order *,
1414 bfd_byte *, bfd_boolean, asymbol **);
252b5132
RH
1415
1416 if (link_order->type == bfd_indirect_link_order)
1417 {
1418 abfd2 = link_order->u.indirect.section->owner;
55ab10f0 1419 if (abfd2 == NULL)
252b5132
RH
1420 abfd2 = abfd;
1421 }
1422 else
1423 abfd2 = abfd;
55ab10f0 1424
252b5132
RH
1425 fn = abfd2->xvec->_bfd_get_relocated_section_contents;
1426
1049f94e 1427 return (*fn) (abfd, link_info, link_order, data, relocatable, symbols);
252b5132
RH
1428}
1429
1430/* Record information about an ELF program header. */
1431
b34976b6 1432bfd_boolean
c58b9523
AM
1433bfd_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)
252b5132
RH
1443{
1444 struct elf_segment_map *m, **pm;
dc810e39 1445 bfd_size_type amt;
252b5132
RH
1446
1447 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
b34976b6 1448 return TRUE;
252b5132 1449
dc810e39
AM
1450 amt = sizeof (struct elf_segment_map);
1451 amt += ((bfd_size_type) count - 1) * sizeof (asection *);
a50b1753 1452 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
252b5132 1453 if (m == NULL)
b34976b6 1454 return FALSE;
252b5132 1455
252b5132
RH
1456 m->p_type = type;
1457 m->p_flags = flags;
1458 m->p_paddr = at;
c58b9523
AM
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;
252b5132
RH
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
b34976b6 1471 return TRUE;
252b5132 1472}
ae4221d7 1473
01a3c213
AM
1474#ifdef BFD64
1475/* Return true iff this target is 32-bit. */
1476
1477static bfd_boolean
1478is32bit (bfd *abfd)
ae4221d7
L
1479{
1480 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
01a3c213
AM
1481 {
1482 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1483 return bed->s->elfclass == ELFCLASS32;
1484 }
1485
6aa341c7
TG
1486 /* For non-ELF targets, use architecture information. */
1487 return bfd_arch_bits_per_address (abfd) <= 32;
ae4221d7 1488}
01a3c213
AM
1489#endif
1490
1491/* bfd_sprintf_vma and bfd_fprintf_vma display an address in the
1492 target's address size. */
ae4221d7
L
1493
1494void
01a3c213 1495bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value)
ae4221d7 1496{
970ccc77 1497#ifdef BFD64
01a3c213
AM
1498 if (is32bit (abfd))
1499 {
1500 sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff);
1501 return;
1502 }
970ccc77 1503#endif
01a3c213
AM
1504 sprintf_vma (buf, value);
1505}
1506
1507void
1508bfd_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);
ae4221d7 1518}
8c98ec7d
AO
1519
1520/*
1521FUNCTION
1522 bfd_alt_mach_code
1523
1524SYNOPSIS
ed781d5d 1525 bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
8c98ec7d
AO
1526
1527DESCRIPTION
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
47badb7b 1531 the preferred one (alternative == 0) and any others. Currently,
8c98ec7d
AO
1532 only ELF supports this feature, with up to two alternate
1533 machine codes.
1534*/
1535
b34976b6 1536bfd_boolean
c58b9523 1537bfd_alt_mach_code (bfd *abfd, int alternative)
8c98ec7d
AO
1538{
1539 if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
1540 {
1541 int code;
1542
47badb7b 1543 switch (alternative)
8c98ec7d
AO
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)
b34976b6 1552 return FALSE;
8c98ec7d
AO
1553 break;
1554
1555 case 2:
1556 code = get_elf_backend_data (abfd)->elf_machine_alt2;
1557 if (code == 0)
b34976b6 1558 return FALSE;
8c98ec7d
AO
1559 break;
1560
1561 default:
b34976b6 1562 return FALSE;
8c98ec7d
AO
1563 }
1564
1565 elf_elfheader (abfd)->e_machine = code;
1566
b34976b6 1567 return TRUE;
8c98ec7d
AO
1568 }
1569
b34976b6 1570 return FALSE;
8c98ec7d 1571}
e84d6fca
AM
1572
1573/*
1574CODE_FRAGMENT
1575
1576.struct bfd_preserve
1577.{
c58b9523
AM
1578. void *marker;
1579. void *tdata;
e84d6fca
AM
1580. flagword flags;
1581. const struct bfd_arch_info *arch_info;
198beae2 1582. struct bfd_section *sections;
5daa8fe7 1583. struct bfd_section *section_last;
e84d6fca
AM
1584. unsigned int section_count;
1585. struct bfd_hash_table section_htab;
1586.};
1587.
1588*/
1589
1590/*
1591FUNCTION
1592 bfd_preserve_save
1593
1594SYNOPSIS
b34976b6 1595 bfd_boolean bfd_preserve_save (bfd *, struct bfd_preserve *);
e84d6fca
AM
1596
1597DESCRIPTION
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
b34976b6 1610bfd_boolean
c58b9523 1611bfd_preserve_save (bfd *abfd, struct bfd_preserve *preserve)
e84d6fca
AM
1612{
1613 preserve->tdata = abfd->tdata.any;
1614 preserve->arch_info = abfd->arch_info;
1615 preserve->flags = abfd->flags;
e84d6fca 1616 preserve->sections = abfd->sections;
5daa8fe7 1617 preserve->section_last = abfd->section_last;
e84d6fca
AM
1618 preserve->section_count = abfd->section_count;
1619 preserve->section_htab = abfd->section_htab;
1620
66eb6687
AM
1621 if (! bfd_hash_table_init (&abfd->section_htab, bfd_section_hash_newfunc,
1622 sizeof (struct section_hash_entry)))
b34976b6 1623 return FALSE;
e84d6fca
AM
1624
1625 abfd->tdata.any = NULL;
1626 abfd->arch_info = &bfd_default_arch_struct;
3ae41454 1627 abfd->flags &= BFD_IN_MEMORY;
e84d6fca 1628 abfd->sections = NULL;
5daa8fe7 1629 abfd->section_last = NULL;
e84d6fca
AM
1630 abfd->section_count = 0;
1631
b34976b6 1632 return TRUE;
e84d6fca
AM
1633}
1634
1635/*
1636FUNCTION
1637 bfd_preserve_restore
1638
1639SYNOPSIS
1640 void bfd_preserve_restore (bfd *, struct bfd_preserve *);
1641
1642DESCRIPTION
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
1649void
c58b9523 1650bfd_preserve_restore (bfd *abfd, struct bfd_preserve *preserve)
e84d6fca
AM
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;
e84d6fca
AM
1657 abfd->section_htab = preserve->section_htab;
1658 abfd->sections = preserve->sections;
5daa8fe7 1659 abfd->section_last = preserve->section_last;
e84d6fca
AM
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/*
1672FUNCTION
1673 bfd_preserve_finish
1674
1675SYNOPSIS
1676 void bfd_preserve_finish (bfd *, struct bfd_preserve *);
1677
1678DESCRIPTION
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
1685void
c58b9523 1686bfd_preserve_finish (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_preserve *preserve)
e84d6fca
AM
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}
24718e3b
L
1694
1695/*
1696FUNCTION
1697 bfd_emul_get_maxpagesize
1698
1699SYNOPSIS
1700 bfd_vma bfd_emul_get_maxpagesize (const char *);
1701
1702DESCRIPTION
1703 Returns the maximum page size, in bytes, as determined by
1704 emulation.
1705
1706RETURNS
095106a2 1707 Returns the maximum page size in bytes for ELF, 0 otherwise.
24718e3b
L
1708*/
1709
1710bfd_vma
1711bfd_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
24718e3b
L
1720 return 0;
1721}
1722
1723static void
1724bfd_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/*
1742FUNCTION
1743 bfd_emul_set_maxpagesize
1744
1745SYNOPSIS
1746 void bfd_emul_set_maxpagesize (const char *, bfd_vma);
1747
1748DESCRIPTION
1749 For ELF, set the maximum page size for the emulation. It is
1750 a no-op for other formats.
1751
1752*/
1753
1754void
1755bfd_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/*
1767FUNCTION
1768 bfd_emul_get_commonpagesize
1769
1770SYNOPSIS
1771 bfd_vma bfd_emul_get_commonpagesize (const char *);
1772
1773DESCRIPTION
1774 Returns the common page size, in bytes, as determined by
1775 emulation.
1776
1777RETURNS
095106a2 1778 Returns the common page size in bytes for ELF, 0 otherwise.
24718e3b
L
1779*/
1780
1781bfd_vma
1782bfd_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
24718e3b
L
1791 return 0;
1792}
1793
1794/*
1795FUNCTION
1796 bfd_emul_set_commonpagesize
1797
1798SYNOPSIS
1799 void bfd_emul_set_commonpagesize (const char *, bfd_vma);
1800
1801DESCRIPTION
1802 For ELF, set the common page size for the emulation. It is
1803 a no-op for other formats.
1804
1805*/
1806
1807void
1808bfd_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}
3fad56a3
AM
1818
1819/*
1820FUNCTION
1821 bfd_demangle
1822
1823SYNOPSIS
1824 char *bfd_demangle (bfd *, const char *, int);
1825
1826DESCRIPTION
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
1834char *
1835bfd_demangle (bfd *abfd, const char *name, int options)
1836{
1837 char *res, *alloc;
1838 const char *pre, *suf;
1839 size_t pre_len;
c29aae59 1840 bfd_boolean skip_lead;
3fad56a3 1841
c29aae59
AM
1842 skip_lead = (abfd != NULL
1843 && *name != '\0'
1844 && bfd_get_symbol_leading_char (abfd) == *name);
1845 if (skip_lead)
3fad56a3
AM
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 {
a50b1753 1862 alloc = (char *) bfd_malloc (suf - name + 1);
3fad56a3
AM
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)
c29aae59
AM
1876 {
1877 if (skip_lead)
1878 {
1879 size_t len = strlen (pre) + 1;
a50b1753 1880 alloc = (char *) bfd_malloc (len);
c29aae59
AM
1881 if (alloc == NULL)
1882 return NULL;
1883 memcpy (alloc, pre, len);
1884 return alloc;
1885 }
1886 return NULL;
1887 }
3fad56a3
AM
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;
a50b1753 1900 final = (char *) bfd_malloc (pre_len + len + suf_len);
32e8a950
NC
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 }
3fad56a3
AM
1907 free (res);
1908 res = final;
1909 }
1910
1911 return res;
1912}