Use new i386aout when i386-aout seen
[deliverable/binutils-gdb.git] / include / bfd.h
CommitLineData
095c7223
JG
1/* A -*- C -*- header file for the bfd library
2 Copyright 1990, 1991 Free Software Foundation, Inc.
3 Contributed by Cygnus Support.
a07cc613 4
2c346475 5This file is part of BFD, the Binary File Descriptor library.
a07cc613 6
095c7223 7This program is free software; you can redistribute it and/or modify
a07cc613 8it under the terms of the GNU General Public License as published by
095c7223
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
a07cc613 11
095c7223 12This program is distributed in the hope that it will be useful,
a07cc613
JG
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
095c7223
JG
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21/* bfd.h -- The only header file required by users of the bfd library
22
23This file is generated from various .c files, if you change it, your
24bits may be lost.
25
26All the prototypes and definitions following the comment "THE FOLLOWING
27IS EXTRACTED FROM THE SOURCE" are extracted from the source files for
28BFD. If you change it, someone oneday will extract it from the source
29again, and your changes will be lost. To save yourself from this bind,
30change the definitions in the source in the bfd directory. Type "make
31docs" and then "make headers" in that directory, and magically this file
32will change to reflect your changes.
33
34If you don't have the tools to perform the extraction, then you are
35safe from someone on your system trampling over your header files.
36You should still maintain the equivalence between the source and this
37file though; every change you make to the .c file should be reflected
38here. */
a07cc613 39
a07cc613
JG
40#ifndef __BFD_H_SEEN__
41#define __BFD_H_SEEN__
42
43#include "ansidecl.h"
44#include "obstack.h"
45
46/* Make it easier to declare prototypes (puts conditional here) */
47#ifndef PROTO
48# if __STDC__
49# define PROTO(type, name, arglist) type name arglist
50# else
51# define PROTO(type, name, arglist) type name ()
52# endif
53#endif
54
40a08432 55#define BFD_VERSION "0.18"
ec08b077 56
a07cc613 57/* forward declaration */
9c6a9c92 58typedef struct _bfd bfd;
a07cc613 59
ec08b077
JG
60/* General rules: functions which are boolean return true on success
61 and false on failure (unless they're a predicate). -- bfd.doc */
a07cc613
JG
62/* I'm sure this is going to break something and someone is going to
63 force me to change it. */
f7cfc4a6
JG
64/* typedef enum boolean {false, true} boolean; */
65/* Yup, SVR4 has a "typedef enum boolean" in <sys/types.h> -fnf */
66typedef enum bfd_boolean {false, true} boolean;
a07cc613
JG
67
68/* Try to avoid breaking stuff */
69typedef long int file_ptr;
70
9b9c5c39 71/* Support for different sizes of target format ints and addresses */
19b03b7a 72
9b9c5c39 73#ifdef HOST_64_BIT
7ed4093a
SC
74typedef HOST_64_BIT rawdata_offset;
75typedef HOST_64_BIT bfd_vma;
76typedef HOST_64_BIT bfd_word;
77typedef HOST_64_BIT bfd_offset;
78typedef HOST_64_BIT bfd_size_type;
9b9c5c39 79typedef HOST_64_BIT symvalue;
7ed4093a 80typedef HOST_64_BIT bfd_64_type;
9b9c5c39
JG
81#define fprintf_vma(s,x) \
82 fprintf(s,"%08x%08x", uint64_typeHIGH(x), uint64_typeLOW(x))
83#define printf_vma(x) \
84 printf( "%08x%08x", uint64_typeHIGH(x), uint64_typeLOW(x))
19b03b7a 85#else
9b9c5c39
JG
86typedef struct {int a,b;} bfd_64_type;
87typedef unsigned long rawdata_offset;
a07cc613
JG
88typedef unsigned long bfd_vma;
89typedef unsigned long bfd_offset;
19b03b7a
SC
90typedef unsigned long bfd_word;
91typedef unsigned long bfd_size;
92typedef unsigned long symvalue;
93typedef unsigned long bfd_size_type;
a737c70b
SC
94#define printf_vma(x) printf( "%08lx", x)
95#define fprintf_vma(s,x) fprintf(s, "%08lx", x)
19b03b7a 96#endif
a07cc613
JG
97
98typedef unsigned int flagword; /* 32 bits of flags */
99\f
100/** File formats */
101
102typedef enum bfd_format {
103 bfd_unknown = 0, /* file format is unknown */
104 bfd_object, /* linker/assember/compiler output */
105 bfd_archive, /* object archive file */
106 bfd_core, /* core dump */
107 bfd_type_end} /* marks the end; don't use it! */
108 bfd_format;
109
110/* Object file flag values */
9b9c5c39 111#define NO_FLAGS 0
a07cc613
JG
112#define HAS_RELOC 001
113#define EXEC_P 002
114#define HAS_LINENO 004
115#define HAS_DEBUG 010
116#define HAS_SYMS 020
117#define HAS_LOCALS 040
118#define DYNAMIC 0100
119#define WP_TEXT 0200
120#define D_PAGED 0400
121
a07cc613
JG
122\f
123/* symbols and relocation */
124
125typedef unsigned long symindex;
126
127#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
128
fb3ee1c0
JG
129typedef enum bfd_symclass {
130 bfd_symclass_unknown = 0,
a07cc613
JG
131 bfd_symclass_fcommon, /* fortran common symbols */
132 bfd_symclass_global, /* global symbol, what a surprise */
133 bfd_symclass_debugger, /* some debugger symbol */
134 bfd_symclass_undefined /* none known */
135 } symclass;
136
19b03b7a 137
a07cc613 138typedef int symtype; /* Who knows, yet? */
19b03b7a 139
a07cc613 140
9b9c5c39
JG
141/* general purpose part of a symbol;
142 target specific parts will be found in libcoff.h, liba.out.h etc */
7a276b09 143
a07cc613
JG
144
145#define bfd_get_section(x) ((x)->section)
146#define bfd_get_output_section(x) ((x)->section->output_section)
147#define bfd_set_section(x,y) ((x)->section) = (y)
148#define bfd_asymbol_base(x) ((x)->section?((x)->section->vma):0)
149#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + x->value)
150#define bfd_asymbol_name(x) ((x)->name)
151
a07cc613 152/* This is a type pun with struct ranlib on purpose! */
9c6a9c92 153typedef struct carsym {
a07cc613
JG
154 char *name;
155 file_ptr file_offset; /* look here to find the file */
156} carsym; /* to make these you call a carsymogen */
157
a07cc613
JG
158
159/* Used in generating armaps. Perhaps just a forward definition would do? */
160struct orl { /* output ranlib */
161 char **name; /* symbol name */
c93e2c55 162 file_ptr pos; /* bfd* or file position */
a07cc613
JG
163 int namidx; /* index into string table */
164};
165
166\f
167
168/* Linenumber stuff */
169typedef struct lineno_cache_entry {
170 unsigned int line_number; /* Linenumber from start of function*/
171 union {
7a276b09 172 struct symbol_cache_entry *sym; /* Function name */
a07cc613
JG
173 unsigned long offset; /* Offset into section */
174 } u;
175} alent;
176\f
177/* object and core file sections */
178
a07cc613
JG
179
180#define align_power(addr, align) \
181 ( ((addr) + ((1<<(align))-1)) & (-1 << (align)))
182
9c6a9c92 183typedef struct sec *sec_ptr;
a07cc613
JG
184
185#define bfd_section_name(bfd, ptr) ((ptr)->name)
186#define bfd_section_size(bfd, ptr) ((ptr)->size)
187#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
188#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
189#define bfd_get_section_flags(bfd, ptr) ((ptr)->flags)
190#define bfd_get_section_userdata(bfd, ptr) ((ptr)->userdata)
191
192#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (val)), true)
193#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),true)
194#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),true)
4322f04d
SC
195
196typedef struct stat stat_type;
a07cc613
JG
197\f
198/** Error handling */
199
fb3ee1c0
JG
200typedef enum bfd_error {
201 no_error = 0, system_call_error, invalid_target,
a07cc613
JG
202 wrong_format, invalid_operation, no_memory,
203 no_symbols, no_relocation_info,
204 no_more_archived_files, malformed_archive,
205 symbol_not_found, file_not_recognized,
206 file_ambiguously_recognized, no_contents,
6603bf38
JG
207 bfd_error_nonrepresentable_section,
208 no_debug_section,
a07cc613
JG
209 invalid_error_code} bfd_ec;
210
211extern bfd_ec bfd_error;
212
9c6a9c92 213typedef struct bfd_error_vector {
a07cc613
JG
214 PROTO(void,(* nonrepresentable_section ),(CONST bfd *CONST abfd,
215 CONST char *CONST name));
216} bfd_error_vector_type;
217
218PROTO (char *, bfd_errmsg, ());
219PROTO (void, bfd_perror, (CONST char *message));
220\f
221
9b9c5c39 222typedef enum bfd_print_symbol
a07cc613 223{
81f8fee9
JG
224 bfd_print_symbol_name,
225 bfd_print_symbol_more,
b941cb35
PB
226 bfd_print_symbol_all,
227 bfd_print_symbol_nm, /* Pretty format suitable for nm program. */
81f8fee9 228} bfd_print_symbol_type;
a07cc613
JG
229
230\f
a07cc613
JG
231\f
232/* The code that implements targets can initialize a jump table with this
233 macro. It must name all its routines the same way (a prefix plus
234 the standard routine suffix), or it must #define the routines that
235 are not so named, before calling JUMP_TABLE in the initializer. */
236
237/* Semi-portable string concatenation in cpp */
238#ifndef CAT
239#ifdef __STDC__
240#define CAT(a,b) a##b
241#else
242#define CAT(a,b) a/**/b
243#endif
244#endif
245
246#define JUMP_TABLE(NAME)\
247CAT(NAME,_core_file_failing_command),\
248CAT(NAME,_core_file_failing_signal),\
249CAT(NAME,_core_file_matches_executable_p),\
250CAT(NAME,_slurp_armap),\
251CAT(NAME,_slurp_extended_name_table),\
252CAT(NAME,_truncate_arname),\
253CAT(NAME,_write_armap),\
254CAT(NAME,_close_and_cleanup), \
255CAT(NAME,_set_section_contents),\
256CAT(NAME,_get_section_contents),\
257CAT(NAME,_new_section_hook),\
258CAT(NAME,_get_symtab_upper_bound),\
259CAT(NAME,_get_symtab),\
260CAT(NAME,_get_reloc_upper_bound),\
261CAT(NAME,_canonicalize_reloc),\
262CAT(NAME,_make_empty_symbol),\
263CAT(NAME,_print_symbol),\
264CAT(NAME,_get_lineno),\
265CAT(NAME,_set_arch_mach),\
266CAT(NAME,_openr_next_archived_file),\
267CAT(NAME,_find_nearest_line),\
268CAT(NAME,_generic_stat_arch_elt),\
7a276b09
SC
269CAT(NAME,_sizeof_headers),\
270CAT(NAME,_bfd_debug_info_start),\
271CAT(NAME,_bfd_debug_info_end),\
272CAT(NAME,_bfd_debug_info_accumulate)
2700c3c7 273
0c210c9c
SC
274#define COFF_SWAP_TABLE \
275 coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in, \
276 coff_swap_aux_out, coff_swap_sym_out, \
277 coff_swap_lineno_out, coff_swap_reloc_out, \
278 coff_swap_filehdr_out, coff_swap_aouthdr_out, \
279 coff_swap_scnhdr_out
280
281
a07cc613
JG
282\f
283/* User program access to BFD facilities */
284
285extern CONST short _bfd_host_big_endian;
286#define HOST_BYTE_ORDER_BIG_P (*(char *)&_bfd_host_big_endian)
287
288/* The bfd itself */
289
8c01a0ea
JK
290/* Cast from const char * to char * so that caller can assign to
291 a char * without a warning. */
292#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
a07cc613
JG
293#define bfd_get_format(abfd) ((abfd)->format)
294#define bfd_get_target(abfd) ((abfd)->xvec->name)
295#define bfd_get_file_flags(abfd) ((abfd)->flags)
296#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
297#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
298#define bfd_my_archive(abfd) ((abfd)->my_archive);
299#define bfd_has_map(abfd) ((abfd)->has_armap)
300#define bfd_header_twiddle_required(abfd) \
301 ((((abfd)->xvec->header_byteorder_big_p) \
302 != (boolean)HOST_BYTE_ORDER_BIG_P) ? true:false)
303
304#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
305#define bfd_usrdata(abfd) ((abfd)->usrdata)
306
307#define bfd_get_start_address(abfd) ((abfd)->start_address)
308#define bfd_get_symcount(abfd) ((abfd)->symcount)
309#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
310#define bfd_count_sections(abfd) ((abfd)->section_count)
311#define bfd_get_architecture(abfd) ((abfd)->obj_arch)
312#define bfd_get_machine(abfd) ((abfd)->obj_machine)
313
a07cc613 314
a07cc613 315
7a276b09
SC
316#define BYTE_SIZE 1
317#define SHORT_SIZE 2
318#define LONG_SIZE 4
319
320
321
322/*THE FOLLOWING IS EXTRACTED FROM THE SOURCE */
323
b39096a4
SC
324
325/*:init.c*/
326/* bfd_init
327
328This routine must be called before any other bfd function to initialize
329magical internal data structures.
330*/
331
332 void EXFUN(bfd_init,(void));
333
334/*
335*/
336
1ac2d1f2
RP
337/*:opncls.c*/
338/* *i bfd_openr
2f60a880
RP
339Opens the file supplied (using @code{fopen}) with the target supplied, it
340returns a pointer to the created BFD.
7a276b09
SC
341
342If NULL is returned then an error has occured.
343Possible errors are no_memory, invalid_target or system_call error.
344*/
bded7de2
SC
345 PROTO(bfd*, bfd_openr, (CONST char *filename,CONST char*target));
346
347/*
348
349*i bfd_fdopenr
2f60a880 350bfd_fdopenr is to bfd_fopenr much like fdopen is to fopen. It opens a BFD on
7a276b09
SC
351a file already described by the @var{fd} supplied.
352
353Possible errors are no_memory, invalid_target and system_call error.
354*/
bded7de2 355 PROTO(bfd *, bfd_fdopenr,
7a276b09 356 (CONST char *filename, CONST char *target, int fd));
bded7de2
SC
357
358/*
359
360 bfd_openw
2f60a880 361Creates a BFD, associated with file @var{filename}, using the file
7a276b09
SC
362format @var{target}, and returns a pointer to it.
363
364Possible errors are system_call_error, no_memory, invalid_target.
365*/
bded7de2
SC
366 PROTO(bfd *, bfd_openw, (CONST char *filename, CONST char *target));
367
368/*
369
370 bfd_close
2f60a880 371This function closes a BFD. If the BFD was open for writing, then
7a276b09
SC
372pending operations are completed and the file written out and closed.
373If the created file is executable, then @code{chmod} is called to mark
374it as such.
375
2f60a880 376All memory attached to the BFD's obstacks is released.
7a276b09
SC
377
378@code{true} is returned if all is ok, otherwise @code{false}.
379*/
bded7de2
SC
380 PROTO(boolean, bfd_close,(bfd *));
381
a0788ae3
SC
382/*
383
384 bfd_close_all_done
385This function closes a BFD. It differs from @code{bfd_close} since it
386does not complete any pending operations. This routine would be used
387if the application had just used BFD for swapping and didn't want to
388use any of the writing code.
389
390If the created file is executable, then @code{chmod} is called to mark
391it as such.
392
393All memory attached to the BFD's obstacks is released.
394
395@code{true} is returned if all is ok, otherwise @code{false}.
396*/
397 PROTO(boolean, bfd_close_all_done,(bfd *));
398
bded7de2
SC
399/*
400
401 bfd_create
2f60a880
RP
402This routine creates a new BFD in the manner of @code{bfd_openw}, but without
403opening a file. The new BFD takes the target from the target used by
7a276b09 404@var{template}. The format is always set to @code{bfd_object}.
7a276b09 405*/
bded7de2
SC
406
407 PROTO(bfd *, bfd_create, (CONST char *filename, bfd *template));
408
409/*
410
411 bfd_alloc_size
412Return the number of bytes in the obstacks connected to the supplied
2f60a880 413BFD.
7a276b09 414*/
bded7de2
SC
415 PROTO(bfd_size_type,bfd_alloc_size,(bfd *abfd));
416
417/*
1ac2d1f2 418*/
bded7de2 419
7a276b09 420
1ac2d1f2
RP
421/*:libbfd.c*/
422/* *i bfd_put_size
bded7de2
SC
423*i bfd_get_size
424These macros as used for reading and writing raw data in sections;
7a276b09 425each access (except for bytes) is vectored through the target format
2f60a880 426of the BFD and mangled accordingly. The mangling performs any
7a276b09
SC
427necessary endian translations and removes alignment restrictions.
428*/
429#define bfd_put_8(abfd, val, ptr) \
430 (*((char *)ptr) = (char)val)
431#define bfd_get_8(abfd, ptr) \
432 (*((char *)ptr))
433#define bfd_put_16(abfd, val, ptr) \
434 BFD_SEND(abfd, bfd_putx16, (val,ptr))
435#define bfd_get_16(abfd, ptr) \
436 BFD_SEND(abfd, bfd_getx16, (ptr))
437#define bfd_put_32(abfd, val, ptr) \
438 BFD_SEND(abfd, bfd_putx32, (val,ptr))
439#define bfd_get_32(abfd, ptr) \
440 BFD_SEND(abfd, bfd_getx32, (ptr))
441#define bfd_put_64(abfd, val, ptr) \
442 BFD_SEND(abfd, bfd_putx64, (val, ptr))
443#define bfd_get_64(abfd, ptr) \
444 BFD_SEND(abfd, bfd_getx64, (ptr))
bded7de2
SC
445/* *i bfd_h_put_size
446*i bfd_h_get_size
447These macros have the same function as their @code{bfd_get_x}
7a276b09
SC
448bretherin, except that they are used for removing information for the
449header records of object files. Believe it or not, some object files
450keep their header records in big endian order, and their data in little
451endan order.
452*/
453#define bfd_h_put_8(abfd, val, ptr) \
454 (*((char *)ptr) = (char)val)
455#define bfd_h_get_8(abfd, ptr) \
456 (*((char *)ptr))
457#define bfd_h_put_16(abfd, val, ptr) \
458 BFD_SEND(abfd, bfd_h_putx16,(val,ptr))
459#define bfd_h_get_16(abfd, ptr) \
460 BFD_SEND(abfd, bfd_h_getx16,(ptr))
461#define bfd_h_put_32(abfd, val, ptr) \
462 BFD_SEND(abfd, bfd_h_putx32,(val,ptr))
463#define bfd_h_get_32(abfd, ptr) \
464 BFD_SEND(abfd, bfd_h_getx32,(ptr))
465#define bfd_h_put_64(abfd, val, ptr) \
466 BFD_SEND(abfd, bfd_h_putx64,(val, ptr))
467#define bfd_h_get_64(abfd, ptr) \
468 BFD_SEND(abfd, bfd_h_getx64,(ptr))
7a276b09 469
1ac2d1f2
RP
470/*:section.c*/
471/* The shape of a section struct:
7a276b09 472*/
bded7de2 473
7a276b09
SC
474typedef struct sec {
475
bded7de2
SC
476/*
477The name of the section, the name isn't a copy, the pointer is
478the same as that passed to bfd_make_section.
479*/
480
7a276b09
SC
481 CONST char *name;
482
bded7de2 483/*
2f60a880 484The next section in the list belonging to the BFD, or NULL.
bded7de2
SC
485*/
486
7a276b09
SC
487 struct sec *next;
488
bded7de2
SC
489/*
490The field flags contains attributes of the section. Some of these
491flags are read in from the object file, and some are synthesized from
492other information.
493*/
494
7a276b09 495flagword flags;
bded7de2
SC
496
497/*
498*/
499
7a276b09
SC
500#define SEC_NO_FLAGS 0x000
501
bded7de2
SC
502/*
503Tells the OS to allocate space for this section when loaded.
504This would clear for a section containing debug information only.
505*/
506
7a276b09
SC
507#define SEC_ALLOC 0x001
508
bded7de2
SC
509/*
510Tells the OS to load the section from the file when loading.
511This would be clear for a .bss section
512*/
513
7a276b09
SC
514#define SEC_LOAD 0x002
515
bded7de2
SC
516/*
517The section contains data still to be relocated, so there will be some
518relocation information too.
519*/
520
7a276b09
SC
521#define SEC_RELOC 0x004
522
bded7de2
SC
523/*
524Obsolete ?
525*/
526
7a276b09
SC
527#define SEC_BALIGN 0x008
528
bded7de2
SC
529/*
530A signal to the OS that the section contains read only data.
531*/
532
7a276b09
SC
533#define SEC_READONLY 0x010
534
bded7de2
SC
535/*
536The section contains code only.
537*/
538
7a276b09
SC
539#define SEC_CODE 0x020
540
bded7de2
SC
541/*
542The section contains data only.
543*/
544
7a276b09
SC
545#define SEC_DATA 0x040
546
bded7de2
SC
547/*
548The section will reside in ROM.
549*/
550
7a276b09
SC
551#define SEC_ROM 0x080
552
bded7de2
SC
553/*
554The section contains constructor information. This section type is
555used by the linker to create lists of constructors and destructors
556used by @code{g++}. When a back end sees a symbol which should be used
557in a constructor list, it creates a new section for the type of name
2f60a880 558(eg @code{__CTOR_LIST__}), attaches the symbol to it and builds a
bded7de2
SC
559relocation. To build the lists of constructors, all the linker has to
560to is catenate all the sections called @code{__CTOR_LIST__} and
561relocte the data contained within - exactly the operations it would
562peform on standard data.
563*/
564
7a276b09
SC
565#define SEC_CONSTRUCTOR 0x100
566
bded7de2
SC
567/*
568The section is a constuctor, and should be placed at the end of the ..
569*/
570
1c6c6598 571#define SEC_CONSTRUCTOR_TEXT 0x1100
bded7de2
SC
572
573/*
574*/
1c6c6598 575#define SEC_CONSTRUCTOR_DATA 0x2100
bded7de2
SC
576
577/*
578*/
1c6c6598
SC
579#define SEC_CONSTRUCTOR_BSS 0x3100
580
bded7de2
SC
581/*
582
583The section has contents - a bss section could be
584@code{SEC_ALLOC} | @code{SEC_HAS_CONTENTS}, a debug section could be
585@code{SEC_HAS_CONTENTS}
586*/
587
7a276b09
SC
588#define SEC_HAS_CONTENTS 0x200
589
bded7de2
SC
590/*
591An instruction to the linker not to output sections containing
592this flag even if they have information which would normally be written.
593*/
594
7a276b09
SC
595#define SEC_NEVER_LOAD 0x400
596
bded7de2
SC
597/*
598
599The base address of the section in the address space of the target.
600*/
601
7a276b09
SC
602 bfd_vma vma;
603
bded7de2
SC
604/*
605The size of the section in bytes of the loaded section. This contains
606a value even if the section has no contents (eg, the size of @code{.bss}).
607*/
608
7a276b09
SC
609 bfd_size_type size;
610
bded7de2
SC
611/*
612If this section is going to be output, then this value is the
613offset into the output section of the first byte in the input
614section. Eg, if this was going to start at the 100th byte in the
615output section, this value would be 100.
616*/
617
7a276b09
SC
618 bfd_vma output_offset;
619
bded7de2
SC
620/*
621The output section through which to map on output.
622*/
623
7a276b09
SC
624 struct sec *output_section;
625
bded7de2
SC
626/*
627The alignment requirement of the section, as an exponent - eg 3
628aligns to 2^3 (or 8)
629*/
630
7a276b09
SC
631 unsigned int alignment_power;
632
bded7de2
SC
633/*
634If an input section, a pointer to a vector of relocation records for
635the data in this section.
636*/
637
7a276b09
SC
638 struct reloc_cache_entry *relocation;
639
bded7de2
SC
640/*
641If an output section, a pointer to a vector of pointers to
642relocation records for the data in this section.
643*/
644
7a276b09
SC
645 struct reloc_cache_entry **orelocation;
646
bded7de2
SC
647/*
648The number of relocation records in one of the above
649*/
650
7a276b09
SC
651 unsigned reloc_count;
652
bded7de2
SC
653/*
654Which section is it 0..nth
655*/
656
7a276b09
SC
657 int index;
658
bded7de2
SC
659/*
660Information below is back end specific - and not always used or
661updated
662
663File position of section data
664*/
665
7a276b09 666 file_ptr filepos;
bded7de2
SC
667/* File position of relocation info
668*/
7a276b09 669
7a276b09
SC
670 file_ptr rel_filepos;
671
bded7de2
SC
672/*
673File position of line data
674*/
675
7a276b09
SC
676 file_ptr line_filepos;
677
bded7de2
SC
678/*
679Pointer to data for applications
680*/
681
7a276b09 682 PTR userdata;
bded7de2
SC
683
684/*
685*/
7a276b09
SC
686 struct lang_output_section *otheruserdata;
687
bded7de2
SC
688/*
689Attached line number information
690*/
691
7a276b09 692 alent *lineno;
bded7de2
SC
693/* Number of line number records
694*/
7a276b09 695
7a276b09
SC
696 unsigned int lineno_count;
697
bded7de2
SC
698/*
699When a section is being output, this value changes as more
700linenumbers are written out
701*/
702
7a276b09
SC
703 file_ptr moving_line_filepos;
704
bded7de2
SC
705/*
706what the section number is in the target world
707*/
708
7a276b09 709 unsigned int target_index;
bded7de2
SC
710
711/*
712*/
7a276b09
SC
713 PTR used_by_bfd;
714
bded7de2
SC
715/*
716If this is a constructor section then here is a list of the
717relocations created to relocate items within it.
718*/
719
7a276b09
SC
720 struct relent_chain *constructor_chain;
721
bded7de2 722/*
2f60a880 723The BFD which owns the section.
bded7de2
SC
724*/
725
7a276b09 726 bfd *owner;
bded7de2
SC
727
728/*
729*/
7a276b09
SC
730} asection ;
731
bded7de2 732/*
7a276b09 733
bded7de2
SC
734 bfd_get_section_by_name
735Runs through the provided @var{abfd} and returns the @code{asection}
736who's name matches that provided, otherwise NULL. @xref{Sections}, for more information.
7a276b09 737*/
bded7de2
SC
738
739 PROTO(asection *, bfd_get_section_by_name,
7a276b09 740 (bfd *abfd, CONST char *name));
bded7de2
SC
741
742/*
743
744 bfd_make_section
2f60a880
RP
745This function creates a new empty section called @var{name} and attaches it
746to the end of the chain of sections for the BFD supplied. An attempt to
6603bf38
JG
747create a section with a name which is already in use, returns NULL without
748changing the section chain.
7a276b09
SC
749
750Possible errors are:
751@table @code
752@item invalid_operation
2f60a880 753If output has already started for this BFD.
7a276b09
SC
754@item no_memory
755If obstack alloc fails.
756@end table
7a276b09 757*/
bded7de2
SC
758
759 PROTO(asection *, bfd_make_section, (bfd *, CONST char *name));
760
761/*
762
763 bfd_set_section_flags
2f60a880 764Attempts to set the attributes of the section named in the BFD
7a276b09
SC
765supplied to the value. Returns true on success, false on error.
766Possible error returns are:
767@table @code
768@item invalid operation
769The section cannot have one or more of the attributes requested. For
770example, a .bss section in @code{a.out} may not have the
771@code{SEC_HAS_CONTENTS} field set.
772@end table
7a276b09 773*/
bded7de2
SC
774
775 PROTO(boolean, bfd_set_section_flags,
7a276b09 776 (bfd *, asection *, flagword));
bded7de2
SC
777
778/*
779
780 bfd_map_over_sections
2f60a880
RP
781Calls the provided function @var{func} for each section attached to
782the BFD @var{abfd}, passing @var{obj} as an argument. The function
7a276b09
SC
783will be called as if by
784
785@example
786 func(abfd, the_section, obj);
787@end example
7a276b09 788*/
bded7de2
SC
789
790 PROTO(void, bfd_map_over_sections,
7a276b09 791 (bfd *abfd, void (*func)(), PTR obj));
bded7de2
SC
792
793/*
794
795This is the prefered method for iterating over sections, an
7a276b09
SC
796alternative would be to use a loop:
797
798@example
799 section *p;
800 for (p = abfd->sections; p != NULL; p = p->next)
801 func(abfd, p, ...)
bded7de2 802@end example
7a276b09 803
bded7de2
SC
804 bfd_set_section_size
805Sets @var{section} to the size @var{val}. If the operation is ok, then
7a276b09
SC
806@code{true} is returned, else @code{false}.
807
808Possible error returns:
809@table @code
810@item invalid_operation
2f60a880 811Writing has started to the BFD, so setting the size is invalid
7a276b09 812@end table
7a276b09 813*/
bded7de2
SC
814
815 PROTO(boolean, bfd_set_section_size,
7a276b09 816 (bfd *, asection *, bfd_size_type val));
bded7de2
SC
817
818/*
819
820 bfd_set_section_contents
2f60a880 821Sets the contents of the section @var{section} in BFD @var{abfd} to
7a276b09
SC
822the data starting in memory at @var{data}. The data is written to the
823output section starting at offset @var{offset} for @var{count} bytes.
824
825Normally @code{true} is returned, else @code{false}. Possible error
826returns are:
827@table @code
828@item no_contents
829The output section does not have the @code{SEC_HAS_CONTENTS}
830attribute, so nothing can be written to it.
831@item and some more too
832@end table
833This routine is front end to the back end function @code{_bfd_set_section_contents}.
7a276b09 834*/
bded7de2
SC
835
836 PROTO(boolean, bfd_set_section_contents,
7a276b09
SC
837 (bfd *abfd,
838 asection *section,
839 PTR data,
840 file_ptr offset,
841 bfd_size_type count));
bded7de2
SC
842
843/*
844
845 bfd_get_section_contents
2f60a880 846This function reads data from @var{section} in BFD @var{abfd} into
7a276b09
SC
847memory starting at @var{location}. The data is read at an offset of
848@var{offset} from the start of the input section, and is read for
849@var{count} bytes.
850
851If the contents of a constuctor with the @code{SEC_CONSTUCTOR} flag
852set are requested, then the @var{location} is filled with zeroes.
853
854If no errors occur, @code{true} is returned, else @code{false}.
855Possible errors are:
856
857@table @code
858@item unknown yet
859@end table
7a276b09 860*/
bded7de2
SC
861
862 PROTO(boolean, bfd_get_section_contents,
7a276b09
SC
863 (bfd *abfd, asection *section, PTR location,
864 file_ptr offset, bfd_size_type count));
7a276b09 865
bded7de2 866/*
1ac2d1f2 867*/
bded7de2 868
bded7de2 869
b39096a4
SC
870
871/*:archures.c*/
872/* bfd_architecture
873This enum gives the object file's CPU
874architecture, in a global sense. E.g. what processor family does it
875belong to? There is another field, which indicates what processor
876within the family is in use. The machine gives a number which
877distingushes different versions of the architecture, containing for
878example 2 and 3 for Intel i960 KA and i960 KB, and 68020 and 68030 for
879Motorola 68020 and 68030.
7a276b09 880*/
bded7de2 881
b39096a4 882enum bfd_architecture
7a276b09 883{
b39096a4
SC
884 bfd_arch_unknown, /* File arch not known */
885 bfd_arch_obscure, /* Arch known, not one of these */
886 bfd_arch_m68k, /* Motorola 68xxx */
887 bfd_arch_vax, /* DEC Vax */
888 bfd_arch_i960, /* Intel 960 */
889 /* The order of the following is important.
890 lower number indicates a machine type that
891 only accepts a subset of the instructions
892 available to machines with higher numbers.
893 The exception is the "ca", which is
894 incompatible with all other machines except
895 "core". */
7a276b09 896
b39096a4
SC
897#define bfd_mach_i960_core 1
898#define bfd_mach_i960_ka_sa 2
899#define bfd_mach_i960_kb_sb 3
900#define bfd_mach_i960_mc 4
901#define bfd_mach_i960_xa 5
902#define bfd_mach_i960_ca 6
903
904 bfd_arch_a29k, /* AMD 29000 */
905 bfd_arch_sparc, /* SPARC */
906 bfd_arch_mips, /* MIPS Rxxxx */
907 bfd_arch_i386, /* Intel 386 */
908 bfd_arch_ns32k, /* National Semiconductor 32xxx */
909 bfd_arch_tahoe, /* CCI/Harris Tahoe */
910 bfd_arch_i860, /* Intel 860 */
6603bf38 911 bfd_arch_romp, /* IBM ROMP PC/RT */
b39096a4
SC
912 bfd_arch_alliant, /* Alliant */
913 bfd_arch_convex, /* Convex */
914 bfd_arch_m88k, /* Motorola 88xxx */
915 bfd_arch_pyramid, /* Pyramid Technology */
916 bfd_arch_h8300, /* Hitachi H8/300 */
6603bf38 917 bfd_arch_rs6000, /* IBM RS/6000 */
b39096a4
SC
918 bfd_arch_last
919 };
7a276b09 920
bded7de2 921/*
b39096a4
SC
922stuff
923
81f8fee9 924 bfd_arch_info
b39096a4 925This structure contains information on architectures.
bded7de2 926*/
81f8fee9 927typedef int bfd_reloc_code_type;
bded7de2 928
81f8fee9 929typedef struct bfd_arch_info
b39096a4
SC
930{
931 int bits_per_word;
932 int bits_per_address;
933 int bits_per_byte;
934 enum bfd_architecture arch;
935 long mach;
936 char *arch_name;
937 CONST char *printable_name;
938/* true if this is the default machine for the architecture */
939 boolean the_default;
81f8fee9
JG
940 CONST struct bfd_arch_info * EXFUN((*compatible),(CONST struct bfd_arch_info *a,
941 CONST struct bfd_arch_info *b));
b39096a4 942
81f8fee9 943 boolean EXFUN((*scan),(CONST struct bfd_arch_info *,CONST char *));
b39096a4
SC
944 unsigned int EXFUN((*disassemble),(bfd_vma addr, CONST char *data,
945 PTR stream));
de7e640d 946 CONST struct reloc_howto_struct *EXFUN((*reloc_type_lookup), (CONST struct
81f8fee9
JG
947 bfd_arch_info *,
948 bfd_reloc_code_type code));
b39096a4 949
81f8fee9 950 struct bfd_arch_info *next;
b39096a4 951
81f8fee9 952} bfd_arch_info_type;
b39096a4
SC
953
954/*
b39096a4 955 bfd_printable_name
7a276b09 956
b39096a4
SC
957Return a printable string representing the architecture and machine
958from the pointer to the arch info structure
bded7de2
SC
959*/
960
b39096a4 961 CONST char *EXFUN(bfd_printable_name,(bfd *abfd));
7a276b09 962
bded7de2 963/*
b39096a4
SC
964
965*i bfd_scan_arch
966This routine is provided with a string and tries to work out if bfd
967supports any cpu which could be described with the name provided. The
968routine returns a pointer to an arch_info structure if a machine is
969found, otherwise NULL.
bded7de2
SC
970*/
971
81f8fee9 972 bfd_arch_info_type *EXFUN(bfd_scan_arch,(CONST char *));
7a276b09 973
bded7de2 974/*
b39096a4
SC
975
976 bfd_arch_get_compatible
977This routine is used to determine whether two BFDs' architectures and
978machine types are compatible. It calculates the lowest common
979denominator between the two architectures and machine types implied by
980the BFDs and returns a pointer to an arch_info structure describing
981the compatible machine.
bded7de2
SC
982*/
983
81f8fee9 984 CONST bfd_arch_info_type *EXFUN(bfd_arch_get_compatible,
b39096a4
SC
985 (CONST bfd *abfd,
986 CONST bfd *bbfd));
7a276b09 987
bded7de2 988/*
b39096a4
SC
989
990 bfd_set_arch_info
bded7de2
SC
991*/
992
81f8fee9 993 void EXFUN(bfd_set_arch_info,(bfd *, bfd_arch_info_type *));
7a276b09 994
bded7de2 995/*
b39096a4
SC
996
997 bfd_get_arch
998
999Returns the enumerated type which describes the supplied bfd's
1000architecture
bded7de2
SC
1001*/
1002
b39096a4 1003 enum bfd_architecture EXFUN(bfd_get_arch, (bfd *abfd));
7a276b09 1004
bded7de2 1005/*
b39096a4
SC
1006
1007 bfd_get_mach
1008
1009Returns the long type which describes the supplied bfd's
1010machine
bded7de2
SC
1011*/
1012
b39096a4 1013 unsigned long EXFUN(bfd_get_mach, (bfd *abfd));
7a276b09 1014
bded7de2 1015/*
bded7de2 1016
b39096a4
SC
1017 bfd_arch_bits_per_byte
1018
1019Returns the number of bits in one of the architectures bytes
bded7de2
SC
1020*/
1021
b39096a4 1022 unsigned int EXFUN(bfd_arch_bits_per_byte, (bfd *abfd));
7a276b09 1023
bded7de2 1024/*
b39096a4
SC
1025
1026 bfd_arch_bits_per_address
1027
1028Returns the number of bits in one of the architectures addresses
bded7de2
SC
1029*/
1030
b39096a4 1031 unsigned int EXFUN(bfd_arch_bits_per_address, (bfd *abfd));
7a276b09 1032
bded7de2 1033/*
b39096a4
SC
1034
1035 bfd_get_arch_info
bded7de2
SC
1036*/
1037
81f8fee9 1038 bfd_arch_info_type * EXFUN(bfd_get_arch_info,(bfd *));
7a276b09 1039
bded7de2 1040/*
7a276b09 1041
de7e640d
SC
1042 bfd_lookup_arch
1043
bded7de2 1044*/
81f8fee9 1045 bfd_arch_info_type * EXFUN(bfd_lookup_arch,(enum
de7e640d 1046 bfd_architecture arch,long machine));
7a276b09 1047
bded7de2 1048/*
1c6c6598 1049
de7e640d
SC
1050Look for the architecure info struct which matches the arguments
1051given. A machine of 0 will match the machine/architecture structure which
1052marks itself as the default.
bded7de2 1053
de7e640d
SC
1054 bfd_printable_arch_mach
1055Return a printable string representing the architecture and machine
1056type.
1c6c6598 1057
de7e640d 1058NB. The use of this routine is depreciated.
bded7de2
SC
1059*/
1060
de7e640d
SC
1061 PROTO(CONST char *,bfd_printable_arch_mach,
1062 (enum bfd_architecture arch, unsigned long machine));
1c6c6598 1063
bded7de2 1064/*
bded7de2
SC
1065*/
1066
b39096a4
SC
1067/*:reloc.c*/
1068/* bfd_perform_relocation
1069The relocation routine returns as a status an enumerated type:
1070*/
7a276b09 1071
b39096a4
SC
1072typedef enum bfd_reloc_status {
1073/* No errors detected
bded7de2
SC
1074*/
1075
b39096a4 1076 bfd_reloc_ok,
7a276b09 1077
bded7de2 1078/*
b39096a4 1079The relocation was performed, but there was an overflow.
bded7de2
SC
1080*/
1081
b39096a4 1082 bfd_reloc_overflow,
7a276b09 1083
bded7de2 1084/*
b39096a4 1085The address to relocate was not within the section supplied
7a276b09 1086*/
7a276b09 1087
b39096a4 1088 bfd_reloc_outofrange,
bded7de2 1089
b39096a4
SC
1090/*
1091Used by special functions
7a276b09 1092*/
bded7de2 1093
b39096a4 1094 bfd_reloc_continue,
7a276b09 1095
bded7de2 1096/*
b39096a4 1097Unused
7a276b09 1098*/
7a276b09 1099
b39096a4 1100 bfd_reloc_notsupported,
bded7de2
SC
1101
1102/*
b39096a4
SC
1103Unsupported relocation size requested.
1104*/
bded7de2 1105
b39096a4
SC
1106 bfd_reloc_other,
1107
1108/*
1109The symbol to relocate against was undefined.
7a276b09 1110*/
bded7de2 1111
b39096a4 1112 bfd_reloc_undefined,
bded7de2
SC
1113
1114/*
b39096a4
SC
1115The relocation was performed, but may not be ok - presently generated
1116only when linking i960 coff files with i960 b.out symbols.
1117*/
bded7de2 1118
b39096a4
SC
1119 bfd_reloc_dangerous
1120 }
81f8fee9 1121 bfd_reloc_status_type;
7a276b09 1122
b39096a4 1123/*
7a276b09 1124*/
7a276b09 1125
b39096a4
SC
1126typedef struct reloc_cache_entry
1127{
7a276b09 1128
b39096a4
SC
1129/*
1130A pointer into the canonical table of pointers
1131*/
7a276b09 1132
b39096a4
SC
1133 struct symbol_cache_entry **sym_ptr_ptr;
1134
1135/*
1136offset in section
7a276b09 1137*/
bded7de2 1138
b39096a4
SC
1139 rawdata_offset address;
1140
1141/*
1142addend for relocation value
bded7de2 1143*/
7a276b09 1144
b39096a4 1145 bfd_vma addend;
7a276b09 1146
bded7de2 1147/*
b39096a4 1148if sym is null this is the section
bded7de2
SC
1149*/
1150
b39096a4
SC
1151 struct sec *section;
1152
1153/*
1154Pointer to how to perform the required relocation
1155*/
1156
1157 CONST struct reloc_howto_struct *howto;
1158} arelent;
7a276b09 1159
bded7de2
SC
1160/*
1161
b39096a4
SC
1162 reloc_howto_type
1163The @code{reloc_howto_type} is a structure which contains all the
1164information that BFD needs to know to tie up a back end's data.
1165*/
bded7de2 1166
b39096a4
SC
1167typedef CONST struct reloc_howto_struct
1168{
1169/* The type field has mainly a documetary use - the back end can to what
1170it wants with it, though the normally the back end's external idea of
1171what a reloc number would be would be stored in this field. For
1172example, the a PC relative word relocation in a coff environment would
1173have the type 023 - because that's what the outside world calls a
1174R_PCRWORD reloc.
bded7de2
SC
1175*/
1176
b39096a4 1177 unsigned int type;
7a276b09 1178
bded7de2 1179/*
b39096a4
SC
1180The value the final relocation is shifted right by. This drops
1181unwanted data from the relocation.
bded7de2
SC
1182*/
1183
b39096a4 1184 unsigned int rightshift;
7a276b09 1185
bded7de2 1186/*
b39096a4
SC
1187The size of the item to be relocated - 0, is one byte, 1 is 2 bytes, 3
1188is four bytes.
bded7de2
SC
1189*/
1190
b39096a4 1191 unsigned int size;
7a276b09 1192
bded7de2 1193/*
b39096a4 1194Now obsolete
bded7de2
SC
1195*/
1196
b39096a4 1197 unsigned int bitsize;
7a276b09 1198
bded7de2 1199/*
b39096a4
SC
1200Notes that the relocation is relative to the location in the data
1201section of the addend. The relocation function will subtract from the
1202relocation value the address of the location being relocated.
bded7de2
SC
1203*/
1204
b39096a4 1205 boolean pc_relative;
7a276b09 1206
bded7de2 1207/*
b39096a4 1208Now obsolete
bded7de2
SC
1209*/
1210
b39096a4 1211 unsigned int bitpos;
bded7de2
SC
1212
1213/*
b39096a4 1214Now obsolete
bded7de2 1215*/
b39096a4
SC
1216
1217 boolean absolute;
1218
1219/*
1220Causes the relocation routine to return an error if overflow is
1221detected when relocating.
bded7de2 1222*/
7a276b09 1223
b39096a4 1224 boolean complain_on_overflow;
7a276b09 1225
bded7de2 1226/*
b39096a4
SC
1227If this field is non null, then the supplied function is called rather
1228than the normal function. This allows really strange relocation
1229methods to be accomodated (eg, i960 callj instructions).
bded7de2
SC
1230*/
1231
81f8fee9 1232 bfd_reloc_status_type (*special_function)();
7a276b09 1233
bded7de2 1234/*
b39096a4 1235The textual name of the relocation type.
bded7de2
SC
1236*/
1237
b39096a4 1238 char *name;
a07cc613 1239
bded7de2 1240/*
b39096a4
SC
1241When performing a partial link, some formats must modify the
1242relocations rather than the data - this flag signals this.
bded7de2
SC
1243*/
1244
b39096a4 1245 boolean partial_inplace;
7a276b09 1246
bded7de2 1247/*
b39096a4
SC
1248The src_mask is used to select what parts of the read in data are to
1249be used in the relocation sum. Eg, if this was an 8 bit bit of data
1250which we read and relocated, this would be 0x000000ff. When we have
1251relocs which have an addend, such as sun4 extended relocs, the value
1252in the offset part of a relocating field is garbage so we never use
1253it. In this case the mask would be 0x00000000.
bded7de2
SC
1254*/
1255
b39096a4
SC
1256 bfd_word src_mask;
1257/* The dst_mask is what parts of the instruction are replaced into the
1258instruction. In most cases src_mask == dst_mask, except in the above
1259special case, where dst_mask would be 0x000000ff, and src_mask would
1260be 0x00000000.
1261*/
1262
1263 bfd_word dst_mask;
7a276b09 1264
bded7de2 1265/*
b39096a4
SC
1266When some formats create PC relative instructions, they leave the
1267value of the pc of the place being relocated in the offset slot of the
1268instruction, so that a PC relative relocation can be made just by
1269adding in an ordinary offset (eg sun3 a.out). Some formats leave the
1270displacement part of an instruction empty (eg m88k bcs), this flag
1271signals the fact.
bded7de2
SC
1272*/
1273
b39096a4
SC
1274 boolean pcrel_offset;
1275} reloc_howto_type;
7a276b09 1276
bded7de2 1277/*
b39096a4
SC
1278
1279 HOWTO
1280The HOWTO define is horrible and will go away.
bded7de2 1281*/
b39096a4
SC
1282#define HOWTO(C, R,S,B, P, BI, ABS, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
1283 {(unsigned)C,R,S,B, P, BI, ABS,O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
bded7de2 1284
b39096a4
SC
1285/*
1286And will be replaced with the totally magic way. But for the moment,
1287we are compatible, so do it this way..
1288*/
1289
46773090 1290#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,false,false,FUNCTION, NAME,false,0,0,IN)
7a276b09 1291
bded7de2 1292/*
b39096a4 1293Helper routine to turn a symbol into a relocation value.
bded7de2
SC
1294*/
1295
b39096a4
SC
1296
1297#define HOWTO_PREPARE(relocation, symbol) \
1298 { \
1299 if (symbol != (asymbol *)NULL) { \
1300 if (symbol->flags & BSF_FORT_COMM) { \
1301 relocation = 0; \
1302 } \
1303 else { \
1304 relocation = symbol->value; \
1305 } \
1306 } \
1307 if (symbol->section != (asection *)NULL) { \
1308 relocation += symbol->section->output_section->vma + \
1309 symbol->section->output_offset; \
1310 } \
1311}
7a276b09 1312
bded7de2 1313/*
b39096a4 1314 reloc_chain
bded7de2 1315*/
b39096a4 1316typedef unsigned char bfd_byte;
bded7de2 1317
b39096a4
SC
1318typedef struct relent_chain {
1319 arelent relent;
1320 struct relent_chain *next;
1321} arelent_chain;
1322
1323/*
1324
1325If an output_bfd is supplied to this function the generated image
1326will be relocatable, the relocations are copied to the output file
1327after they have been changed to reflect the new state of the world.
1328There are two ways of reflecting the results of partial linkage in an
1329output file; by modifying the output data in place, and by modifying
1330the relocation record. Some native formats (eg basic a.out and basic
1331coff) have no way of specifying an addend in the relocation type, so
1332the addend has to go in the output data. This is no big deal since in
1333these formats the output data slot will always be big enough for the
1334addend. Complex reloc types with addends were invented to solve just
1335this problem.
1336*/
81f8fee9 1337 PROTO(bfd_reloc_status_type,
b39096a4
SC
1338 bfd_perform_relocation,
1339 (bfd * abfd,
1340 arelent *reloc_entry,
1341 PTR data,
1342 asection *input_section,
1343 bfd *output_bfd));
7a276b09 1344
de7e640d
SC
1345/*
1346
81f8fee9 1347 bfd_reloc_code_type
de7e640d
SC
1348*/
1349
81f8fee9 1350typedef enum bfd_reloc_code_real {
de7e640d
SC
1351
1352/*
135316 bits wide, simple reloc
1354*/
1355
1356 BFD_RELOC_16,
1357
1358/*
13598 bits wide, but used to form an address like 0xffnn
1360*/
1361
1362 BFD_RELOC_8_FFnn,
1363
1364/*
13658 bits wide, simple
1366*/
1367
1368 BFD_RELOC_8,
1369
1370/*
13718 bits wide, pc relative
1372*/
1373
1374 BFD_RELOC_8_PCREL
81f8fee9 1375 } bfd_reloc_code_real_type;
de7e640d
SC
1376
1377/*
1378
1379 bfd_reloc_type_lookup
1380This routine returns a pointer to a howto struct which when invoked,
1381will perform the supplied relocation on data from the architecture
1382noted.
1383
1384[Note] This function will go away.
1385*/
1386
1387 PROTO(CONST struct reloc_howto_struct *,
1388 bfd_reloc_type_lookup,
81f8fee9 1389 (CONST bfd_arch_info_type *arch, bfd_reloc_code_type code));
de7e640d 1390
bded7de2 1391/*
bded7de2
SC
1392*/
1393
b39096a4
SC
1394/*:syms.c*/
1395/* @subsection typedef asymbol
1396An @code{asymbol} has the form:
bded7de2 1397*/
7a276b09 1398
b39096a4
SC
1399typedef struct symbol_cache_entry
1400{
1401/* A pointer to the BFD which owns the symbol. This information is
1402necessary so that a back end can work out what additional (invisible to
1403the application writer) information is carried with the symbol.
bded7de2 1404*/
7a276b09 1405
b39096a4 1406 struct _bfd *the_bfd;
7a276b09 1407
bded7de2 1408/*
b39096a4
SC
1409The text of the symbol. The name is left alone, and not copied - the
1410application may not alter it.
bded7de2
SC
1411*/
1412
b39096a4 1413 CONST char *name;
7a276b09 1414
bded7de2 1415/*
b39096a4 1416The value of the symbol.
bded7de2
SC
1417*/
1418
b39096a4 1419 symvalue value;
7a276b09 1420
bded7de2 1421/*
b39096a4 1422Attributes of a symbol:
bded7de2
SC
1423*/
1424
b39096a4 1425#define BSF_NO_FLAGS 0x00
7a276b09 1426
bded7de2 1427/*
b39096a4
SC
1428The symbol has local scope; @code{static} in @code{C}. The value is
1429the offset into the section of the data.
bded7de2
SC
1430*/
1431
b39096a4 1432#define BSF_LOCAL 0x01
7a276b09 1433
bded7de2 1434/*
b39096a4
SC
1435The symbol has global scope; initialized data in @code{C}. The value
1436is the offset into the section of the data.
bded7de2
SC
1437*/
1438
b39096a4 1439#define BSF_GLOBAL 0x02
7a276b09 1440
bded7de2 1441/*
b39096a4 1442Obsolete
bded7de2
SC
1443*/
1444
b39096a4 1445#define BSF_IMPORT 0x04
a07cc613 1446
bded7de2 1447/*
b39096a4
SC
1448The symbol has global scope, and is exported. The value is the offset
1449into the section of the data.
1450*/
7a276b09 1451
b39096a4 1452#define BSF_EXPORT 0x08
bded7de2 1453
b39096a4
SC
1454/*
1455The symbol is undefined. @code{extern} in @code{C}. The value has no meaning.
7a276b09 1456*/
bded7de2 1457
b39096a4 1458#define BSF_UNDEFINED 0x10
bded7de2
SC
1459
1460/*
b39096a4
SC
1461The symbol is common, initialized to zero; default in @code{C}. The
1462value is the size of the object in bytes.
1463*/
bded7de2 1464
b39096a4 1465#define BSF_FORT_COMM 0x20
bded7de2 1466
b39096a4
SC
1467/*
1468A normal @code{C} symbol would be one of:
1469@code{BSF_LOCAL}, @code{BSF_FORT_COMM}, @code{BSF_UNDEFINED} or @code{BSF_EXPORT|BSD_GLOBAL}
1470
1471The symbol is a debugging record. The value has an arbitary meaning.
bded7de2
SC
1472*/
1473
b39096a4 1474#define BSF_DEBUGGING 0x40
a07cc613 1475
bded7de2 1476/*
b39096a4
SC
1477The symbol has no section attached, any value is the actual value and
1478is not a relative offset to a section.
1479*/
bded7de2 1480
b39096a4
SC
1481#define BSF_ABSOLUTE 0x80
1482
1483/*
1484Used by the linker
7a276b09 1485*/
bded7de2 1486
b39096a4
SC
1487#define BSF_KEEP 0x10000
1488#define BSF_KEEP_G 0x80000
bded7de2 1489
b39096a4
SC
1490/*
1491Unused
1492*/
a07cc613 1493
b39096a4
SC
1494#define BSF_WEAK 0x100000
1495#define BSF_CTOR 0x200000
1496#define BSF_FAKE 0x400000
a07cc613 1497
b39096a4
SC
1498/*
1499The symbol used to be a common symbol, but now it is allocated.
1500*/
a07cc613 1501
b39096a4 1502#define BSF_OLD_COMMON 0x800000
7a276b09 1503
b39096a4
SC
1504/*
1505The default value for common data.
1506*/
7a276b09 1507
b39096a4 1508#define BFD_FORT_COMM_DEFAULT_VALUE 0
a07cc613 1509
b39096a4
SC
1510/*
1511In some files the type of a symbol sometimes alters its location
1512in an output file - ie in coff a @code{ISFCN} symbol which is also @code{C_EXT}
1513symbol appears where it was declared and not at the end of a section.
1514This bit is set by the target BFD part to convey this information.
1515*/
e8929c8d 1516
b39096a4 1517#define BSF_NOT_AT_END 0x40000
e8929c8d 1518
b39096a4
SC
1519/*
1520Signal that the symbol is the label of constructor section.
1521*/
1522
1523#define BSF_CONSTRUCTOR 0x1000000
e8929c8d 1524
bded7de2 1525/*
b39096a4
SC
1526Signal that the symbol is a warning symbol. If the symbol is a warning
1527symbol, then the value field (I know this is tacky) will point to the
1528asymbol which when referenced will cause the warning.
1ac2d1f2 1529*/
bded7de2 1530
b39096a4
SC
1531#define BSF_WARNING 0x2000000
1532
1533/*
1534Signal that the symbol is indirect. The value of the symbol is a
1535pointer to an undefined asymbol which contains the name to use
1536instead.
7a276b09 1537*/
b39096a4
SC
1538
1539#define BSF_INDIRECT 0x4000000
bded7de2
SC
1540
1541/*
b39096a4
SC
1542*/
1543 flagword flags;
bded7de2 1544
b39096a4
SC
1545/*
1546A pointer to the section to which this symbol is relative, or 0 if the
1547symbol is absolute or undefined. Note that it is not sufficient to set
1548this location to 0 to mark a symbol as absolute - the flag
1549@code{BSF_ABSOLUTE} must be set also.
1550*/
2c346475 1551
b39096a4
SC
1552 struct sec *section;
1553
1554/*
1555Back end special data. This is being phased out in favour of making
1556this a union.
7a276b09 1557*/
2c346475 1558
b39096a4
SC
1559 PTR udata;
1560} asymbol;
bded7de2
SC
1561
1562/*
1563
b39096a4
SC
1564 get_symtab_upper_bound
1565Returns the number of bytes required in a vector of pointers to
1566@code{asymbols} for all the symbols in the supplied BFD, including a
1567terminal NULL pointer. If there are no symbols in the BFD, then 0 is
1568returned.
bded7de2 1569*/
b39096a4
SC
1570#define get_symtab_upper_bound(abfd) \
1571 BFD_SEND (abfd, _get_symtab_upper_bound, (abfd))
bded7de2
SC
1572
1573/*
1574
b39096a4
SC
1575 bfd_canonicalize_symtab
1576Supplied a BFD and a pointer to an uninitialized vector of pointers.
1577This reads in the symbols from the BFD, and fills in the table with
1578pointers to the symbols, and a trailing NULL. The routine returns the
1579actual number of symbol pointers not including the NULL.
7a276b09 1580*/
bded7de2 1581
b39096a4
SC
1582#define bfd_canonicalize_symtab(abfd, location) \
1583 BFD_SEND (abfd, _bfd_canonicalize_symtab,\
1584 (abfd, location))
a737c70b 1585
bded7de2 1586/*
b39096a4
SC
1587 bfd_set_symtab
1588Provided a table of pointers to to symbols and a count, writes to the
1589output BFD the symbols when closed.
1ac2d1f2 1590*/
a737c70b 1591
b39096a4 1592 PROTO(boolean, bfd_set_symtab, (bfd *, asymbol **, unsigned int ));
2700c3c7 1593
b39096a4
SC
1594/*
1595
1596 bfd_print_symbol_vandf
1597Prints the value and flags of the symbol supplied to the stream file.
2f60a880
RP
1598*/
1599
b39096a4 1600 PROTO(void, bfd_print_symbol_vandf, (PTR file, asymbol *symbol));
2f60a880
RP
1601
1602/*
1603
b39096a4
SC
1604 bfd_make_empty_symbol
1605This function creates a new @code{asymbol} structure for the BFD, and
1606returns a pointer to it.
1607
1608This routine is necessary, since each back end has private information
1609surrounding the @code{asymbol}. Building your own @code{asymbol} and
1610pointing to it will not create the private information, and will cause
1611problems later on.
2f60a880 1612*/
b39096a4
SC
1613#define bfd_make_empty_symbol(abfd) \
1614 BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
2f60a880 1615
b941cb35
PB
1616/*
1617 bfd_decode_symclass
1618Return a lower-case character corresponding to the symbol class of symbol.
1619*/
1620
1621 PROTO(int, bfd_decode_symclass, (asymbol *symbol));
1622
1623/*
1624
1625 bfd_stab_name
1626Returns a string for the stab with the given code, or NULL if not found.
1627*/
1628
1629 PROTO(char *, bfd_stab_name, (int code));
1630
1631/*
1632*/
1633
b39096a4
SC
1634/*:bfd.c*/
1635/* @section @code{typedef bfd}
2f60a880 1636
b39096a4
SC
1637A BFD is has type @code{bfd}; objects of this type are the cornerstone
1638of any application using @code{libbfd}. References though the BFD and
1639to data in the BFD give the entire BFD functionality.
2f60a880 1640
b39096a4
SC
1641Here is the struct used to define the type @code{bfd}. This contains
1642the major data about the file, and contains pointers to the rest of
1643the data.
2f60a880 1644*/
b39096a4
SC
1645
1646struct _bfd
1647{
1648/* The filename the application opened the BFD with.
1649*/
1650
1651 CONST char *filename;
2f60a880
RP
1652
1653/*
b39096a4 1654A pointer to the target jump table.
1ac2d1f2 1655*/
2f60a880 1656
b39096a4
SC
1657 struct bfd_target *xvec;
1658
1659/*
1660
1661To avoid dragging too many header files into every file that
1662includes @file{bfd.h}, IOSTREAM has been declared as a "char *", and MTIME
1663as a "long". Their correct types, to which they are cast when used,
1664are "FILE *" and "time_t".
1665
1666The iostream is the result of an fopen on the filename.
7a276b09 1667*/
bded7de2 1668
b39096a4
SC
1669 char *iostream;
1670
1671/*
1672Is the file being cached @xref{File Caching}.
bded7de2 1673*/
a07cc613 1674
b39096a4 1675 boolean cacheable;
a07cc613 1676
bded7de2 1677/*
b39096a4
SC
1678Marks whether there was a default target specified when the BFD was
1679opened. This is used to select what matching algorithm to use to chose
1680the back end.
bded7de2
SC
1681*/
1682
b39096a4 1683 boolean target_defaulted;
a07cc613 1684
bded7de2 1685/*
b39096a4
SC
1686The caching routines use these to maintain a least-recently-used list of
1687BFDs (@pxref{File Caching}).
bded7de2
SC
1688*/
1689
b39096a4 1690 struct _bfd *lru_prev, *lru_next;
a07cc613 1691
bded7de2 1692/*
b39096a4
SC
1693When a file is closed by the caching routines, BFD retains state
1694information on the file here:
bded7de2
SC
1695*/
1696
b39096a4 1697 file_ptr where;
a07cc613 1698
bded7de2 1699/*
b39096a4 1700and here:
bded7de2
SC
1701*/
1702
b39096a4 1703 boolean opened_once;
7a276b09 1704
bded7de2 1705/*
b39096a4
SC
1706*/
1707 boolean mtime_set;
1708/* File modified time
bded7de2
SC
1709*/
1710
b39096a4 1711 long mtime;
7a276b09 1712
bded7de2 1713/*
b39096a4 1714Reserved for an unimplemented file locking extension.
bded7de2
SC
1715*/
1716
b39096a4 1717int ifd;
7a276b09 1718
bded7de2 1719/*
b39096a4 1720The format which belongs to the BFD.
bded7de2
SC
1721*/
1722
b39096a4 1723 bfd_format format;
bded7de2
SC
1724
1725/*
b39096a4 1726The direction the BFD was opened with
bded7de2
SC
1727*/
1728
b39096a4
SC
1729 enum bfd_direction {no_direction = 0,
1730 read_direction = 1,
1731 write_direction = 2,
1732 both_direction = 3} direction;
7a276b09 1733
bded7de2 1734/*
b39096a4 1735Format_specific flags
bded7de2
SC
1736*/
1737
b39096a4 1738 flagword flags;
7a276b09 1739
bded7de2 1740/*
b39096a4
SC
1741Currently my_archive is tested before adding origin to anything. I
1742believe that this can become always an add of origin, with origin set
1743to 0 for non archive files.
bded7de2
SC
1744*/
1745
b39096a4 1746 file_ptr origin;
7a276b09 1747
bded7de2 1748/*
b39096a4 1749Remember when output has begun, to stop strange things happening.
bded7de2
SC
1750*/
1751
b39096a4 1752 boolean output_has_begun;
7a276b09 1753
bded7de2 1754/*
b39096a4 1755Pointer to linked list of sections
bded7de2
SC
1756*/
1757
b39096a4 1758 struct sec *sections;
7a276b09 1759
bded7de2 1760/*
b39096a4 1761The number of sections
bded7de2
SC
1762*/
1763
b39096a4 1764 unsigned int section_count;
7a276b09 1765
bded7de2 1766/*
b39096a4
SC
1767Stuff only useful for object files:
1768The start address.
1769*/
7a276b09 1770
b39096a4
SC
1771 bfd_vma start_address;
1772/* Used for input and output
7a276b09 1773*/
bded7de2 1774
b39096a4
SC
1775 unsigned int symcount;
1776/* Symbol table for output BFD
bded7de2 1777*/
19b03b7a 1778
b39096a4 1779 struct symbol_cache_entry **outsymbols;
a07cc613 1780
bded7de2 1781/*
b39096a4 1782Pointer to structure which contains architecture information
bded7de2
SC
1783*/
1784
81f8fee9 1785 struct bfd_arch_info *arch_info;
a07cc613 1786
bded7de2 1787/*
b39096a4 1788Stuff only useful for archives:
bded7de2
SC
1789*/
1790
b39096a4
SC
1791 PTR arelt_data;
1792 struct _bfd *my_archive;
1793 struct _bfd *next;
1794 struct _bfd *archive_head;
1795 boolean has_armap;
9b9c5c39 1796
bded7de2 1797/*
b39096a4 1798Used by the back end to hold private data.
bded7de2
SC
1799*/
1800
b39096a4 1801 PTR tdata;
a07cc613 1802
bded7de2 1803/*
b39096a4 1804Used by the application to hold private data
bded7de2
SC
1805*/
1806
b39096a4 1807 PTR usrdata;
a07cc613 1808
bded7de2 1809/*
b39096a4 1810Where all the allocated stuff under this BFD goes (@pxref{Memory Usage}).
bded7de2
SC
1811*/
1812
b39096a4
SC
1813 struct obstack memory;
1814};
a07cc613 1815
bded7de2 1816/*
b39096a4
SC
1817
1818 bfd_set_start_address
1819
1820Marks the entry point of an output BFD. Returns @code{true} on
1821success, @code{false} otherwise.
bded7de2
SC
1822*/
1823
b39096a4 1824 PROTO(boolean, bfd_set_start_address,(bfd *, bfd_vma));
19b03b7a 1825
bded7de2 1826/*
b39096a4
SC
1827
1828 bfd_get_mtime
1829
1830Return cached file modification time (e.g. as read from archive header
1831for archive members, or from file system if we have been called
1832before); else determine modify time, cache it, and return it.
bded7de2
SC
1833*/
1834
b39096a4 1835 PROTO(long, bfd_get_mtime, (bfd *));
a07cc613 1836
bded7de2 1837/*
b39096a4
SC
1838
1839 stuff
bded7de2
SC
1840*/
1841
b39096a4
SC
1842
1843#define bfd_sizeof_headers(abfd, reloc) \
1844 BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
1845
1846#define bfd_find_nearest_line(abfd, section, symbols, offset, filename_ptr, func, line_ptr) \
1847 BFD_SEND (abfd, _bfd_find_nearest_line, (abfd, section, symbols, offset, filename_ptr, func, line_ptr))
1848
1849#define bfd_debug_info_start(abfd) \
1850 BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1851
1852#define bfd_debug_info_end(abfd) \
1853 BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1854
1855#define bfd_debug_info_accumulate(abfd, section) \
1856 BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1857
1858#define bfd_stat_arch_elt(abfd, stat) \
1859 BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1860
1861#define bfd_coff_swap_aux_in(a,e,t,c,i) \
1862 BFD_SEND (a, _bfd_coff_swap_aux_in, (a,e,t,c,i))
1863
1864#define bfd_coff_swap_sym_in(a,e,i) \
1865 BFD_SEND (a, _bfd_coff_swap_sym_in, (a,e,i))
1866
1867#define bfd_coff_swap_lineno_in(a,e,i) \
1868 BFD_SEND ( a, _bfd_coff_swap_lineno_in, (a,e,i))
1869
1870#define bfd_set_arch_mach(abfd, arch, mach)\
1871 BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
7f3d9f46 1872
0c210c9c
SC
1873#define bfd_coff_swap_reloc_out(abfd, i, o) \
1874 BFD_SEND (abfd, _bfd_coff_swap_reloc_out, (abfd, i, o))
1875
1876#define bfd_coff_swap_lineno_out(abfd, i, o) \
1877 BFD_SEND (abfd, _bfd_coff_swap_lineno_out, (abfd, i, o))
1878
1879#define bfd_coff_swap_aux_out(abfd, i, t,c,o) \
1880 BFD_SEND (abfd, _bfd_coff_swap_aux_out, (abfd, i,t,c, o))
1881
1882#define bfd_coff_swap_sym_out(abfd, i,o) \
1883 BFD_SEND (abfd, _bfd_coff_swap_sym_out, (abfd, i, o))
1884
1885#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
1886 BFD_SEND (abfd, _bfd_coff_swap_scnhdr_out, (abfd, i, o))
1887
1888#define bfd_coff_swap_filehdr_out(abfd, i,o) \
1889 BFD_SEND (abfd, _bfd_coff_swap_filehdr_out, (abfd, i, o))
1890
1891#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
1892 BFD_SEND (abfd, _bfd_coff_swap_aouthdr_out, (abfd, i, o))
1893
bded7de2 1894/*
bded7de2
SC
1895*/
1896
b39096a4
SC
1897/*:archive.c*/
1898/* bfd_get_next_mapent
1899What this does
1900*/
1901 PROTO(symindex, bfd_get_next_mapent, (bfd *, symindex, carsym **));
7f3d9f46 1902
bded7de2 1903/*
b39096a4
SC
1904
1905 bfd_set_archive_head
1906
1907Used whilst processing archives. Sets the head of the chain of BFDs
1908contained in an archive to @var{new_head}. (see chapter on archives)
bded7de2
SC
1909*/
1910
b39096a4 1911 PROTO(boolean, bfd_set_archive_head, (bfd *output, bfd *new_head));
7a276b09 1912
bded7de2 1913/*
bded7de2 1914
b39096a4
SC
1915 bfd_get_elt_at_index
1916Return the sub bfd contained within the archive at archive index n.
bded7de2 1917*/
7a276b09 1918
b39096a4 1919 PROTO(bfd *, bfd_get_elt_at_index, (bfd *, int));
7a276b09 1920
bded7de2 1921/*
b39096a4
SC
1922
1923 bfd_openr_next_archived_file
1924Initially provided a BFD containing an archive and NULL, opens a BFD
1925on the first contained element and returns that. Subsequent calls to
1926bfd_openr_next_archived_file should pass the archive and the previous
1927return value to return a created BFD to the next contained element.
1928NULL is returned when there are no more.
bded7de2
SC
1929*/
1930
b39096a4
SC
1931 PROTO(bfd*, bfd_openr_next_archived_file,
1932 (bfd *archive, bfd *previous));
7a276b09 1933
bded7de2 1934/*
b39096a4 1935*/
bded7de2 1936
b39096a4
SC
1937
1938/*:core.c*/
1939/* bfd_core_file_failing_command
1940Returns a read-only string explaining what program was running when
1941it failed and produced the core file being read
4322f04d 1942*/
b39096a4
SC
1943
1944 PROTO(CONST char *, bfd_core_file_failing_command, (bfd *));
bded7de2
SC
1945
1946/*
1947
b39096a4
SC
1948 bfd_core_file_failing_signal
1949Returns the signal number which caused the core dump which generated
1950the file the BFD is attached to.
bded7de2 1951*/
a07cc613 1952
b39096a4 1953 PROTO(int, bfd_core_file_failing_signal, (bfd *));
a07cc613 1954
bded7de2 1955/*
7f3d9f46 1956
b39096a4
SC
1957 core_file_matches_executable_p
1958Returns @code{true} if the core file attached to @var{core_bfd} was
1959generated by a run of the executable file attached to @var{exec_bfd},
1960or else @code{false}.
7a276b09 1961*/
b39096a4
SC
1962 PROTO(boolean, core_file_matches_executable_p,
1963 (bfd *core_bfd, bfd *exec_bfd));
bded7de2
SC
1964
1965/*
1ac2d1f2 1966*/
bded7de2 1967
1ac2d1f2
RP
1968/*:targets.c*/
1969/* bfd_target
0c210c9c 1970@node bfd_target, , Targets, Targets
a737c70b 1971@subsection bfd_target
7a276b09
SC
1972This structure contains everything that BFD knows about a target.
1973It includes things like its byte order, name, what routines to call
1974to do various operations, etc.
1975
1976Every BFD points to a target structure with its "xvec" member.
1977
7a276b09
SC
1978Shortcut for declaring fields which are prototyped function pointers,
1979while avoiding anguish on compilers that don't support protos.
1980*/
bded7de2 1981
7a276b09
SC
1982#define SDEF(ret, name, arglist) \
1983 PROTO(ret,(*name),arglist)
1984#define SDEF_FMT(ret, name, arglist) \
1985 PROTO(ret,(*name[bfd_type_end]),arglist)
a07cc613 1986
bded7de2
SC
1987/*
1988These macros are used to dispatch to functions through the bfd_target
2f60a880
RP
1989vector. They are used in a number of macros further down in @file{bfd.h}, and
1990are also used when calling various routines by hand inside the BFD
7a276b09
SC
1991implementation. The "arglist" argument must be parenthesized; it
1992contains all the arguments to the called function.
1993*/
bded7de2 1994
7a276b09
SC
1995#define BFD_SEND(bfd, message, arglist) \
1996 ((*((bfd)->xvec->message)) arglist)
a07cc613 1997
bded7de2 1998/*
2f60a880 1999For operations which index on the BFD format
7a276b09 2000*/
bded7de2 2001
7a276b09
SC
2002#define BFD_SEND_FMT(bfd, message, arglist) \
2003 (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
a07cc613 2004
bded7de2
SC
2005/*
2006This is the struct which defines the type of BFD this is. The
2f60a880 2007"xvec" member of the struct @code{bfd} itself points here. Each module
7a276b09
SC
2008that implements access to a different target under BFD, defines
2009one of these.
a07cc613 2010
7a276b09
SC
2011FIXME, these names should be rationalised with the names of the
2012entry points which call them. Too bad we can't have one macro to
2013define them both!
7a276b09 2014*/
bded7de2 2015
7a276b09
SC
2016typedef struct bfd_target
2017{
a07cc613 2018
bded7de2
SC
2019/*
2020identifies the kind of target, eg SunOS4, Ultrix, etc
2021*/
2022
7a276b09
SC
2023 char *name;
2024
bded7de2
SC
2025/*
2026The "flavour" of a back end is a general indication about the contents
2027of a file.
2028*/
2029
81f8fee9
JG
2030 enum target_flavour {
2031 bfd_target_unknown_flavour,
2032 bfd_target_aout_flavour,
2033 bfd_target_coff_flavour,
2034 bfd_target_elf_flavour,
2035 bfd_target_ieee_flavour,
2036 bfd_target_oasys_flavour,
2037 bfd_target_srec_flavour} flavour;
7a276b09 2038
bded7de2
SC
2039/*
2040The order of bytes within the data area of a file.
2041*/
2042
7a276b09
SC
2043 boolean byteorder_big_p;
2044
bded7de2
SC
2045/*
2046The order of bytes within the header parts of a file.
2047*/
2048
7a276b09
SC
2049 boolean header_byteorder_big_p;
2050
bded7de2
SC
2051/*
2052This is a mask of all the flags which an executable may have set -
2053from the set @code{NO_FLAGS}, @code{HAS_RELOC}, ...@code{D_PAGED}.
2054*/
2055
7a276b09
SC
2056 flagword object_flags;
2057
bded7de2
SC
2058/*
2059This is a mask of all the flags which a section may have set - from
2060the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ...@code{SET_NEVER_LOAD}.
2061*/
2062
7a276b09
SC
2063 flagword section_flags;
2064
bded7de2
SC
2065/*
2066The pad character for filenames within an archive header.
2067*/
2068
7a276b09
SC
2069 char ar_pad_char;
2070
bded7de2
SC
2071/*
2072The maximum number of characters in an archive header.
2073*/
2074
7a276b09
SC
2075 unsigned short ar_max_namelen;
2076
bded7de2
SC
2077/*
2078The minimum alignment restriction for any section.
2079*/
2080
7a276b09
SC
2081 unsigned int align_power_min;
2082
bded7de2
SC
2083/*
2084Entries for byte swapping for data. These are different to the other
2f60a880 2085entry points, since they don't take BFD as first arg. Certain other handlers
bded7de2
SC
2086could do the same.
2087*/
2088
fcc654cb
SC
2089 SDEF (bfd_vma, bfd_getx64, (bfd_byte *));
2090 SDEF (void, bfd_putx64, (bfd_vma, bfd_byte *));
2091 SDEF (bfd_vma, bfd_getx32, (bfd_byte *));
2092 SDEF (void, bfd_putx32, (bfd_vma, bfd_byte *));
2093 SDEF (bfd_vma, bfd_getx16, (bfd_byte *));
2094 SDEF (void, bfd_putx16, (bfd_vma, bfd_byte *));
7a276b09 2095
bded7de2
SC
2096/*
2097Byte swapping for the headers
2098*/
2099
fcc654cb
SC
2100 SDEF (bfd_vma, bfd_h_getx64, (bfd_byte *));
2101 SDEF (void, bfd_h_putx64, (bfd_vma, bfd_byte *));
2102 SDEF (bfd_vma, bfd_h_getx32, (bfd_byte *));
2103 SDEF (void, bfd_h_putx32, (bfd_vma, bfd_byte *));
2104 SDEF (bfd_vma, bfd_h_getx16, (bfd_byte *));
2105 SDEF (void, bfd_h_putx16, (bfd_vma, bfd_byte *));
7a276b09 2106
bded7de2
SC
2107/*
2108Format dependent routines, these turn into vectors of entry points
2109within the target vector structure; one for each format to check.
2110
2111Check the format of a file being read. Return bfd_target * or zero.
2112*/
2113
7a276b09
SC
2114 SDEF_FMT (struct bfd_target *, _bfd_check_format, (bfd *));
2115
bded7de2
SC
2116/*
2117Set the format of a file being written.
2118*/
2119
7a276b09
SC
2120 SDEF_FMT (boolean, _bfd_set_format, (bfd *));
2121
bded7de2
SC
2122/*
2123Write cached information into a file being written, at bfd_close.
2124*/
2125
7a276b09
SC
2126 SDEF_FMT (boolean, _bfd_write_contents, (bfd *));
2127
bded7de2
SC
2128/*
2129The following functions are defined in @code{JUMP_TABLE}. The idea is
2130that the back end writer of @code{foo} names all the routines
2131@code{foo_}@var{entry_point}, @code{JUMP_TABLE} will built the entries
2132in this structure in the right order.
2133
2134Core file entry points
2135*/
2136
7a276b09
SC
2137 SDEF (char *, _core_file_failing_command, (bfd *));
2138 SDEF (int, _core_file_failing_signal, (bfd *));
2139 SDEF (boolean, _core_file_matches_executable_p, (bfd *, bfd *));
2140
bded7de2
SC
2141/*
2142Archive entry points
2143*/
2144
7a276b09
SC
2145 SDEF (boolean, _bfd_slurp_armap, (bfd *));
2146 SDEF (boolean, _bfd_slurp_extended_name_table, (bfd *));
2147 SDEF (void, _bfd_truncate_arname, (bfd *, CONST char *, char *));
2148 SDEF (boolean, write_armap, (bfd *arch,
2149 unsigned int elength,
2150 struct orl *map,
a0788ae3 2151 unsigned int orl_count,
7a276b09
SC
2152 int stridx));
2153
bded7de2
SC
2154/*
2155Standard stuff.
2156*/
2157
7a276b09
SC
2158 SDEF (boolean, _close_and_cleanup, (bfd *));
2159 SDEF (boolean, _bfd_set_section_contents, (bfd *, sec_ptr, PTR,
2160 file_ptr, bfd_size_type));
2161 SDEF (boolean, _bfd_get_section_contents, (bfd *, sec_ptr, PTR,
2162 file_ptr, bfd_size_type));
2163 SDEF (boolean, _new_section_hook, (bfd *, sec_ptr));
2164
bded7de2
SC
2165/*
2166Symbols and reloctions
2167*/
2168
de7e640d 2169 SDEF (unsigned int, _get_symtab_upper_bound, (bfd *));
7a276b09
SC
2170 SDEF (unsigned int, _bfd_canonicalize_symtab,
2171 (bfd *, struct symbol_cache_entry **));
2172 SDEF (unsigned int, _get_reloc_upper_bound, (bfd *, sec_ptr));
2173 SDEF (unsigned int, _bfd_canonicalize_reloc, (bfd *, sec_ptr, arelent **,
2174 struct symbol_cache_entry**));
2175 SDEF (struct symbol_cache_entry *, _bfd_make_empty_symbol, (bfd *));
2176 SDEF (void, _bfd_print_symbol, (bfd *, PTR, struct symbol_cache_entry *,
81f8fee9 2177 bfd_print_symbol_type));
7a276b09
SC
2178#define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e))
2179 SDEF (alent *, _get_lineno, (bfd *, struct symbol_cache_entry *));
2180
2181 SDEF (boolean, _bfd_set_arch_mach, (bfd *, enum bfd_architecture,
2182 unsigned long));
2183
2184 SDEF (bfd *, openr_next_archived_file, (bfd *arch, bfd *prev));
2185 SDEF (boolean, _bfd_find_nearest_line,
2186 (bfd *abfd, struct sec *section,
2187 struct symbol_cache_entry **symbols,bfd_vma offset,
2188 CONST char **file, CONST char **func, unsigned int *line));
2189 SDEF (int, _bfd_stat_arch_elt, (bfd *, struct stat *));
2190
2191 SDEF (int, _bfd_sizeof_headers, (bfd *, boolean));
2192
2193 SDEF (void, _bfd_debug_info_start, (bfd *));
2194 SDEF (void, _bfd_debug_info_end, (bfd *));
2195 SDEF (void, _bfd_debug_info_accumulate, (bfd *, struct sec *));
2196
bded7de2
SC
2197/*
2198Special entry points for gdb to swap in coff symbol table parts
2199*/
2200
7a276b09
SC
2201 SDEF(void, _bfd_coff_swap_aux_in,(
2202 bfd *abfd ,
2203 PTR ext,
2204 int type,
2205 int class ,
2206 PTR in));
2207
2208 SDEF(void, _bfd_coff_swap_sym_in,(
2209 bfd *abfd ,
2210 PTR ext,
2211 PTR in));
2212
2213 SDEF(void, _bfd_coff_swap_lineno_in, (
2214 bfd *abfd,
2215 PTR ext,
2216 PTR in));
2217
0c210c9c
SC
2218/*
2219Special entry points for gas to swap coff parts
2220*/
2221
2222 SDEF(unsigned int, _bfd_coff_swap_aux_out,(
2223 bfd *abfd,
2224 PTR in,
2225 int type,
2226 int class,
2227 PTR ext));
2228
2229 SDEF(unsigned int, _bfd_coff_swap_sym_out,(
2230 bfd *abfd,
2231 PTR in,
2232 PTR ext));
2233
2234 SDEF(unsigned int, _bfd_coff_swap_lineno_out,(
2235 bfd *abfd,
2236 PTR in,
2237 PTR ext));
2238
2239 SDEF(unsigned int, _bfd_coff_swap_reloc_out,(
2240 bfd *abfd,
2241 PTR src,
2242 PTR dst));
2243
2244 SDEF(unsigned int, _bfd_coff_swap_filehdr_out,(
2245 bfd *abfd,
2246 PTR in,
2247 PTR out));
2248
2249 SDEF(unsigned int, _bfd_coff_swap_aouthdr_out,(
2250 bfd *abfd,
2251 PTR in,
2252 PTR out));
2253
2254 SDEF(unsigned int, _bfd_coff_swap_scnhdr_out,(
2255 bfd *abfd,
2256 PTR in,
2257 PTR out));
2258
7a276b09
SC
2259} bfd_target;
2260
bded7de2
SC
2261/*
2262
2263*i bfd_find_target
2264Returns a pointer to the transfer vector for the object target
7a276b09
SC
2265named target_name. If target_name is NULL, chooses the one in the
2266environment variable GNUTARGET; if that is null or not defined then
2267the first entry in the target list is chosen. Passing in the
2268string "default" or setting the environment variable to "default"
2269will cause the first entry in the target list to be returned,
2f60a880
RP
2270and "target_defaulted" will be set in the BFD. This causes
2271@code{bfd_check_format} to loop over all the targets to find the one
7a276b09
SC
2272that matches the file being read.
2273*/
bded7de2
SC
2274 PROTO(bfd_target *, bfd_find_target,(CONST char *, bfd *));
2275
2276/*
2277
2278*i bfd_target_list
2279This function returns a freshly malloced NULL-terminated vector of the
2f60a880 2280names of all the valid BFD targets. Do not modify the names
7a276b09 2281*/
bded7de2
SC
2282 PROTO(CONST char **,bfd_target_list,());
2283
2284/*
1ac2d1f2 2285*/
bded7de2 2286
bded7de2 2287
1ac2d1f2
RP
2288/*:format.c*/
2289/* *i bfd_check_format
2f60a880
RP
2290This routine is supplied a BFD and a format. It attempts to verify if
2291the file attached to the BFD is indeed compatible with the format
7a276b09
SC
2292specified (ie, one of @code{bfd_object}, @code{bfd_archive} or
2293@code{bfd_core}).
2294
2f60a880 2295If the BFD has been set to a specific @var{target} before the call,
7a276b09
SC
2296only the named target and format combination will be checked. If the
2297target has not been set, or has been set to @code{default} then all
2298the known target backends will be interrogated to determine a match.
2299
2300The function returns @code{true} on success, otherwise @code{false}
2301with one of the following error codes:
2302@table @code
2303@item
2304invalid_operation
2305if @code{format} is not one of @code{bfd_object}, @code{bfd_archive}
2306or @code{bfd_core}.
2307@item system_call_error
2308if an error occured during a read - even some file mismatches can
2309cause system_call_errros
2310@item file_not_recognised
2311none of the backends recognised the file format
2312@item file_ambiguously_recognized
2313more than one backend recognised the file format.
2314@end table
2315*/
bded7de2
SC
2316 PROTO(boolean, bfd_check_format, (bfd *abfd, bfd_format format));
2317
2318/*
2319
2320*i bfd_set_format
2f60a880
RP
2321This function sets the file format of the supplied BFD to the format
2322requested. If the target set in the BFD does not support the format
2323requested, the format is illegal or the BFD is not open for writing
7a276b09
SC
2324than an error occurs.
2325*/
bded7de2
SC
2326 PROTO(boolean,bfd_set_format,(bfd *, bfd_format));
2327
2328/*
2329
2330*i bfd_format_string
2331This function takes one argument, and enumerated type (bfd_format) and
7a276b09
SC
2332returns a pointer to a const string "invalid", "object", "archive",
2333"core" or "unknown" depending upon the value of the enumeration.
2334*/
bded7de2 2335 PROTO(CONST char *, bfd_format_string, (bfd_format));
a07cc613 2336
bded7de2 2337/*
1ac2d1f2 2338*/
bded7de2
SC
2339
2340#endif
b39096a4
SC
2341
2342
2343
2344
2345
This page took 0.144801 seconds and 4 git commands to generate.