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