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