]> Git Repo - binutils.git/blame - include/bfd.h
Handle moves ahead of the stack pointer slide, for struct returning fns.
[binutils.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 741
bee84e0b
SC
742/*
743
744 bfd_make_section_old_way
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
747create a section with a name which is already in use, returns its pointer without
748changing the section chain.
749
750It has the funny name since this is the way it used to be before gilmore broke it.
751
752Possible errors are:
753@table @code
754@item invalid_operation
755If output has already started for this BFD.
756@item no_memory
757If obstack alloc fails.
758@end table
759*/
760
761 PROTO(asection *, bfd_make_section_old_way, (bfd *, CONST char *name));
762
bded7de2
SC
763/*
764
765 bfd_make_section
2f60a880
RP
766This function creates a new empty section called @var{name} and attaches it
767to the end of the chain of sections for the BFD supplied. An attempt to
6603bf38
JG
768create a section with a name which is already in use, returns NULL without
769changing the section chain.
7a276b09
SC
770
771Possible errors are:
772@table @code
773@item invalid_operation
2f60a880 774If output has already started for this BFD.
7a276b09
SC
775@item no_memory
776If obstack alloc fails.
777@end table
7a276b09 778*/
bded7de2
SC
779
780 PROTO(asection *, bfd_make_section, (bfd *, CONST char *name));
781
782/*
783
784 bfd_set_section_flags
2f60a880 785Attempts to set the attributes of the section named in the BFD
7a276b09
SC
786supplied to the value. Returns true on success, false on error.
787Possible error returns are:
788@table @code
789@item invalid operation
790The section cannot have one or more of the attributes requested. For
791example, a .bss section in @code{a.out} may not have the
792@code{SEC_HAS_CONTENTS} field set.
793@end table
7a276b09 794*/
bded7de2
SC
795
796 PROTO(boolean, bfd_set_section_flags,
7a276b09 797 (bfd *, asection *, flagword));
bded7de2
SC
798
799/*
800
801 bfd_map_over_sections
2f60a880
RP
802Calls the provided function @var{func} for each section attached to
803the BFD @var{abfd}, passing @var{obj} as an argument. The function
7a276b09
SC
804will be called as if by
805
806@example
807 func(abfd, the_section, obj);
808@end example
7a276b09 809*/
bded7de2
SC
810
811 PROTO(void, bfd_map_over_sections,
7a276b09 812 (bfd *abfd, void (*func)(), PTR obj));
bded7de2
SC
813
814/*
815
816This is the prefered method for iterating over sections, an
7a276b09
SC
817alternative would be to use a loop:
818
819@example
820 section *p;
821 for (p = abfd->sections; p != NULL; p = p->next)
822 func(abfd, p, ...)
bded7de2 823@end example
7a276b09 824
bded7de2
SC
825 bfd_set_section_size
826Sets @var{section} to the size @var{val}. If the operation is ok, then
7a276b09
SC
827@code{true} is returned, else @code{false}.
828
829Possible error returns:
830@table @code
831@item invalid_operation
2f60a880 832Writing has started to the BFD, so setting the size is invalid
7a276b09 833@end table
7a276b09 834*/
bded7de2
SC
835
836 PROTO(boolean, bfd_set_section_size,
7a276b09 837 (bfd *, asection *, bfd_size_type val));
bded7de2
SC
838
839/*
840
841 bfd_set_section_contents
2f60a880 842Sets the contents of the section @var{section} in BFD @var{abfd} to
7a276b09
SC
843the data starting in memory at @var{data}. The data is written to the
844output section starting at offset @var{offset} for @var{count} bytes.
845
846Normally @code{true} is returned, else @code{false}. Possible error
847returns are:
848@table @code
849@item no_contents
850The output section does not have the @code{SEC_HAS_CONTENTS}
851attribute, so nothing can be written to it.
852@item and some more too
853@end table
854This routine is front end to the back end function @code{_bfd_set_section_contents}.
7a276b09 855*/
bded7de2
SC
856
857 PROTO(boolean, bfd_set_section_contents,
7a276b09
SC
858 (bfd *abfd,
859 asection *section,
860 PTR data,
861 file_ptr offset,
862 bfd_size_type count));
bded7de2
SC
863
864/*
865
866 bfd_get_section_contents
2f60a880 867This function reads data from @var{section} in BFD @var{abfd} into
7a276b09
SC
868memory starting at @var{location}. The data is read at an offset of
869@var{offset} from the start of the input section, and is read for
870@var{count} bytes.
871
872If the contents of a constuctor with the @code{SEC_CONSTUCTOR} flag
873set are requested, then the @var{location} is filled with zeroes.
874
875If no errors occur, @code{true} is returned, else @code{false}.
876Possible errors are:
877
878@table @code
879@item unknown yet
880@end table
7a276b09 881*/
bded7de2
SC
882
883 PROTO(boolean, bfd_get_section_contents,
7a276b09
SC
884 (bfd *abfd, asection *section, PTR location,
885 file_ptr offset, bfd_size_type count));
7a276b09 886
bded7de2 887/*
1ac2d1f2 888*/
bded7de2 889
bded7de2 890
b39096a4
SC
891
892/*:archures.c*/
893/* bfd_architecture
894This enum gives the object file's CPU
895architecture, in a global sense. E.g. what processor family does it
896belong to? There is another field, which indicates what processor
897within the family is in use. The machine gives a number which
898distingushes different versions of the architecture, containing for
899example 2 and 3 for Intel i960 KA and i960 KB, and 68020 and 68030 for
900Motorola 68020 and 68030.
7a276b09 901*/
bded7de2 902
b39096a4 903enum bfd_architecture
7a276b09 904{
b39096a4
SC
905 bfd_arch_unknown, /* File arch not known */
906 bfd_arch_obscure, /* Arch known, not one of these */
907 bfd_arch_m68k, /* Motorola 68xxx */
908 bfd_arch_vax, /* DEC Vax */
909 bfd_arch_i960, /* Intel 960 */
910 /* The order of the following is important.
911 lower number indicates a machine type that
912 only accepts a subset of the instructions
913 available to machines with higher numbers.
914 The exception is the "ca", which is
915 incompatible with all other machines except
916 "core". */
7a276b09 917
b39096a4
SC
918#define bfd_mach_i960_core 1
919#define bfd_mach_i960_ka_sa 2
920#define bfd_mach_i960_kb_sb 3
921#define bfd_mach_i960_mc 4
922#define bfd_mach_i960_xa 5
923#define bfd_mach_i960_ca 6
924
925 bfd_arch_a29k, /* AMD 29000 */
926 bfd_arch_sparc, /* SPARC */
927 bfd_arch_mips, /* MIPS Rxxxx */
928 bfd_arch_i386, /* Intel 386 */
929 bfd_arch_ns32k, /* National Semiconductor 32xxx */
930 bfd_arch_tahoe, /* CCI/Harris Tahoe */
931 bfd_arch_i860, /* Intel 860 */
6603bf38 932 bfd_arch_romp, /* IBM ROMP PC/RT */
b39096a4
SC
933 bfd_arch_alliant, /* Alliant */
934 bfd_arch_convex, /* Convex */
935 bfd_arch_m88k, /* Motorola 88xxx */
936 bfd_arch_pyramid, /* Pyramid Technology */
937 bfd_arch_h8300, /* Hitachi H8/300 */
6603bf38 938 bfd_arch_rs6000, /* IBM RS/6000 */
b39096a4
SC
939 bfd_arch_last
940 };
7a276b09 941
bded7de2 942/*
b39096a4
SC
943stuff
944
81f8fee9 945 bfd_arch_info
b39096a4 946This structure contains information on architectures.
bded7de2 947*/
81f8fee9 948typedef int bfd_reloc_code_type;
bded7de2 949
81f8fee9 950typedef struct bfd_arch_info
b39096a4
SC
951{
952 int bits_per_word;
953 int bits_per_address;
954 int bits_per_byte;
955 enum bfd_architecture arch;
956 long mach;
957 char *arch_name;
958 CONST char *printable_name;
959/* true if this is the default machine for the architecture */
960 boolean the_default;
81f8fee9
JG
961 CONST struct bfd_arch_info * EXFUN((*compatible),(CONST struct bfd_arch_info *a,
962 CONST struct bfd_arch_info *b));
b39096a4 963
81f8fee9 964 boolean EXFUN((*scan),(CONST struct bfd_arch_info *,CONST char *));
b39096a4
SC
965 unsigned int EXFUN((*disassemble),(bfd_vma addr, CONST char *data,
966 PTR stream));
de7e640d 967 CONST struct reloc_howto_struct *EXFUN((*reloc_type_lookup), (CONST struct
81f8fee9
JG
968 bfd_arch_info *,
969 bfd_reloc_code_type code));
b39096a4 970
81f8fee9 971 struct bfd_arch_info *next;
b39096a4 972
81f8fee9 973} bfd_arch_info_type;
b39096a4
SC
974
975/*
b39096a4 976 bfd_printable_name
7a276b09 977
b39096a4
SC
978Return a printable string representing the architecture and machine
979from the pointer to the arch info structure
bded7de2
SC
980*/
981
b39096a4 982 CONST char *EXFUN(bfd_printable_name,(bfd *abfd));
7a276b09 983
bded7de2 984/*
b39096a4
SC
985
986*i bfd_scan_arch
987This routine is provided with a string and tries to work out if bfd
988supports any cpu which could be described with the name provided. The
989routine returns a pointer to an arch_info structure if a machine is
990found, otherwise NULL.
bded7de2
SC
991*/
992
81f8fee9 993 bfd_arch_info_type *EXFUN(bfd_scan_arch,(CONST char *));
7a276b09 994
bded7de2 995/*
b39096a4
SC
996
997 bfd_arch_get_compatible
998This routine is used to determine whether two BFDs' architectures and
999machine types are compatible. It calculates the lowest common
1000denominator between the two architectures and machine types implied by
1001the BFDs and returns a pointer to an arch_info structure describing
1002the compatible machine.
bded7de2
SC
1003*/
1004
81f8fee9 1005 CONST bfd_arch_info_type *EXFUN(bfd_arch_get_compatible,
b39096a4
SC
1006 (CONST bfd *abfd,
1007 CONST bfd *bbfd));
7a276b09 1008
bded7de2 1009/*
b39096a4
SC
1010
1011 bfd_set_arch_info
bded7de2
SC
1012*/
1013
81f8fee9 1014 void EXFUN(bfd_set_arch_info,(bfd *, bfd_arch_info_type *));
7a276b09 1015
bded7de2 1016/*
b39096a4
SC
1017
1018 bfd_get_arch
1019
1020Returns the enumerated type which describes the supplied bfd's
1021architecture
bded7de2
SC
1022*/
1023
b39096a4 1024 enum bfd_architecture EXFUN(bfd_get_arch, (bfd *abfd));
7a276b09 1025
bded7de2 1026/*
b39096a4
SC
1027
1028 bfd_get_mach
1029
1030Returns the long type which describes the supplied bfd's
1031machine
bded7de2
SC
1032*/
1033
b39096a4 1034 unsigned long EXFUN(bfd_get_mach, (bfd *abfd));
7a276b09 1035
bded7de2 1036/*
bded7de2 1037
b39096a4
SC
1038 bfd_arch_bits_per_byte
1039
1040Returns the number of bits in one of the architectures bytes
bded7de2
SC
1041*/
1042
b39096a4 1043 unsigned int EXFUN(bfd_arch_bits_per_byte, (bfd *abfd));
7a276b09 1044
bded7de2 1045/*
b39096a4
SC
1046
1047 bfd_arch_bits_per_address
1048
1049Returns the number of bits in one of the architectures addresses
bded7de2
SC
1050*/
1051
b39096a4 1052 unsigned int EXFUN(bfd_arch_bits_per_address, (bfd *abfd));
7a276b09 1053
bded7de2 1054/*
b39096a4
SC
1055
1056 bfd_get_arch_info
bded7de2
SC
1057*/
1058
81f8fee9 1059 bfd_arch_info_type * EXFUN(bfd_get_arch_info,(bfd *));
7a276b09 1060
bded7de2 1061/*
7a276b09 1062
de7e640d
SC
1063 bfd_lookup_arch
1064
bded7de2 1065*/
81f8fee9 1066 bfd_arch_info_type * EXFUN(bfd_lookup_arch,(enum
de7e640d 1067 bfd_architecture arch,long machine));
7a276b09 1068
bded7de2 1069/*
1c6c6598 1070
de7e640d
SC
1071Look for the architecure info struct which matches the arguments
1072given. A machine of 0 will match the machine/architecture structure which
1073marks itself as the default.
bded7de2 1074
de7e640d
SC
1075 bfd_printable_arch_mach
1076Return a printable string representing the architecture and machine
1077type.
1c6c6598 1078
de7e640d 1079NB. The use of this routine is depreciated.
bded7de2
SC
1080*/
1081
de7e640d
SC
1082 PROTO(CONST char *,bfd_printable_arch_mach,
1083 (enum bfd_architecture arch, unsigned long machine));
1c6c6598 1084
bded7de2 1085/*
bded7de2
SC
1086*/
1087
b39096a4
SC
1088/*:reloc.c*/
1089/* bfd_perform_relocation
1090The relocation routine returns as a status an enumerated type:
1091*/
7a276b09 1092
b39096a4
SC
1093typedef enum bfd_reloc_status {
1094/* No errors detected
bded7de2
SC
1095*/
1096
b39096a4 1097 bfd_reloc_ok,
7a276b09 1098
bded7de2 1099/*
b39096a4 1100The relocation was performed, but there was an overflow.
bded7de2
SC
1101*/
1102
b39096a4 1103 bfd_reloc_overflow,
7a276b09 1104
bded7de2 1105/*
b39096a4 1106The address to relocate was not within the section supplied
7a276b09 1107*/
7a276b09 1108
b39096a4 1109 bfd_reloc_outofrange,
bded7de2 1110
b39096a4
SC
1111/*
1112Used by special functions
7a276b09 1113*/
bded7de2 1114
b39096a4 1115 bfd_reloc_continue,
7a276b09 1116
bded7de2 1117/*
b39096a4 1118Unused
7a276b09 1119*/
7a276b09 1120
b39096a4 1121 bfd_reloc_notsupported,
bded7de2
SC
1122
1123/*
b39096a4
SC
1124Unsupported relocation size requested.
1125*/
bded7de2 1126
b39096a4
SC
1127 bfd_reloc_other,
1128
1129/*
1130The symbol to relocate against was undefined.
7a276b09 1131*/
bded7de2 1132
b39096a4 1133 bfd_reloc_undefined,
bded7de2
SC
1134
1135/*
b39096a4
SC
1136The relocation was performed, but may not be ok - presently generated
1137only when linking i960 coff files with i960 b.out symbols.
1138*/
bded7de2 1139
b39096a4
SC
1140 bfd_reloc_dangerous
1141 }
81f8fee9 1142 bfd_reloc_status_type;
7a276b09 1143
b39096a4 1144/*
7a276b09 1145*/
7a276b09 1146
b39096a4
SC
1147typedef struct reloc_cache_entry
1148{
7a276b09 1149
b39096a4
SC
1150/*
1151A pointer into the canonical table of pointers
1152*/
7a276b09 1153
b39096a4
SC
1154 struct symbol_cache_entry **sym_ptr_ptr;
1155
1156/*
1157offset in section
7a276b09 1158*/
bded7de2 1159
b39096a4
SC
1160 rawdata_offset address;
1161
1162/*
1163addend for relocation value
bded7de2 1164*/
7a276b09 1165
b39096a4 1166 bfd_vma addend;
7a276b09 1167
bded7de2 1168/*
b39096a4 1169if sym is null this is the section
bded7de2
SC
1170*/
1171
b39096a4
SC
1172 struct sec *section;
1173
1174/*
1175Pointer to how to perform the required relocation
1176*/
1177
1178 CONST struct reloc_howto_struct *howto;
1179} arelent;
7a276b09 1180
bded7de2
SC
1181/*
1182
b39096a4
SC
1183 reloc_howto_type
1184The @code{reloc_howto_type} is a structure which contains all the
1185information that BFD needs to know to tie up a back end's data.
1186*/
bded7de2 1187
b39096a4
SC
1188typedef CONST struct reloc_howto_struct
1189{
1190/* The type field has mainly a documetary use - the back end can to what
1191it wants with it, though the normally the back end's external idea of
1192what a reloc number would be would be stored in this field. For
1193example, the a PC relative word relocation in a coff environment would
1194have the type 023 - because that's what the outside world calls a
1195R_PCRWORD reloc.
bded7de2
SC
1196*/
1197
b39096a4 1198 unsigned int type;
7a276b09 1199
bded7de2 1200/*
b39096a4
SC
1201The value the final relocation is shifted right by. This drops
1202unwanted data from the relocation.
bded7de2
SC
1203*/
1204
b39096a4 1205 unsigned int rightshift;
7a276b09 1206
bded7de2 1207/*
b39096a4
SC
1208The size of the item to be relocated - 0, is one byte, 1 is 2 bytes, 3
1209is four bytes.
bded7de2
SC
1210*/
1211
b39096a4 1212 unsigned int size;
7a276b09 1213
bded7de2 1214/*
b39096a4 1215Now obsolete
bded7de2
SC
1216*/
1217
b39096a4 1218 unsigned int bitsize;
7a276b09 1219
bded7de2 1220/*
b39096a4
SC
1221Notes that the relocation is relative to the location in the data
1222section of the addend. The relocation function will subtract from the
1223relocation value the address of the location being relocated.
bded7de2
SC
1224*/
1225
b39096a4 1226 boolean pc_relative;
7a276b09 1227
bded7de2 1228/*
b39096a4 1229Now obsolete
bded7de2
SC
1230*/
1231
b39096a4 1232 unsigned int bitpos;
bded7de2
SC
1233
1234/*
b39096a4 1235Now obsolete
bded7de2 1236*/
b39096a4
SC
1237
1238 boolean absolute;
1239
1240/*
1241Causes the relocation routine to return an error if overflow is
1242detected when relocating.
bded7de2 1243*/
7a276b09 1244
b39096a4 1245 boolean complain_on_overflow;
7a276b09 1246
bded7de2 1247/*
b39096a4
SC
1248If this field is non null, then the supplied function is called rather
1249than the normal function. This allows really strange relocation
1250methods to be accomodated (eg, i960 callj instructions).
bded7de2
SC
1251*/
1252
81f8fee9 1253 bfd_reloc_status_type (*special_function)();
7a276b09 1254
bded7de2 1255/*
b39096a4 1256The textual name of the relocation type.
bded7de2
SC
1257*/
1258
b39096a4 1259 char *name;
a07cc613 1260
bded7de2 1261/*
b39096a4
SC
1262When performing a partial link, some formats must modify the
1263relocations rather than the data - this flag signals this.
bded7de2
SC
1264*/
1265
b39096a4 1266 boolean partial_inplace;
7a276b09 1267
bded7de2 1268/*
b39096a4
SC
1269The src_mask is used to select what parts of the read in data are to
1270be used in the relocation sum. Eg, if this was an 8 bit bit of data
1271which we read and relocated, this would be 0x000000ff. When we have
1272relocs which have an addend, such as sun4 extended relocs, the value
1273in the offset part of a relocating field is garbage so we never use
1274it. In this case the mask would be 0x00000000.
bded7de2
SC
1275*/
1276
b39096a4
SC
1277 bfd_word src_mask;
1278/* The dst_mask is what parts of the instruction are replaced into the
1279instruction. In most cases src_mask == dst_mask, except in the above
1280special case, where dst_mask would be 0x000000ff, and src_mask would
1281be 0x00000000.
1282*/
1283
1284 bfd_word dst_mask;
7a276b09 1285
bded7de2 1286/*
b39096a4
SC
1287When some formats create PC relative instructions, they leave the
1288value of the pc of the place being relocated in the offset slot of the
1289instruction, so that a PC relative relocation can be made just by
1290adding in an ordinary offset (eg sun3 a.out). Some formats leave the
1291displacement part of an instruction empty (eg m88k bcs), this flag
1292signals the fact.
bded7de2
SC
1293*/
1294
b39096a4
SC
1295 boolean pcrel_offset;
1296} reloc_howto_type;
7a276b09 1297
bded7de2 1298/*
b39096a4
SC
1299
1300 HOWTO
1301The HOWTO define is horrible and will go away.
bded7de2 1302*/
b39096a4
SC
1303#define HOWTO(C, R,S,B, P, BI, ABS, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
1304 {(unsigned)C,R,S,B, P, BI, ABS,O,SF,NAME,INPLACE,MASKSRC,MASKDST,PC}
bded7de2 1305
b39096a4
SC
1306/*
1307And will be replaced with the totally magic way. But for the moment,
1308we are compatible, so do it this way..
1309*/
1310
46773090 1311#define NEWHOWTO( FUNCTION, NAME,SIZE,REL,IN) HOWTO(0,0,SIZE,0,REL,0,false,false,FUNCTION, NAME,false,0,0,IN)
7a276b09 1312
bded7de2 1313/*
b39096a4 1314Helper routine to turn a symbol into a relocation value.
bded7de2
SC
1315*/
1316
b39096a4
SC
1317
1318#define HOWTO_PREPARE(relocation, symbol) \
1319 { \
1320 if (symbol != (asymbol *)NULL) { \
1321 if (symbol->flags & BSF_FORT_COMM) { \
1322 relocation = 0; \
1323 } \
1324 else { \
1325 relocation = symbol->value; \
1326 } \
1327 } \
1328 if (symbol->section != (asection *)NULL) { \
1329 relocation += symbol->section->output_section->vma + \
1330 symbol->section->output_offset; \
1331 } \
1332}
7a276b09 1333
bded7de2 1334/*
b39096a4 1335 reloc_chain
bded7de2 1336*/
b39096a4 1337typedef unsigned char bfd_byte;
bded7de2 1338
b39096a4
SC
1339typedef struct relent_chain {
1340 arelent relent;
1341 struct relent_chain *next;
1342} arelent_chain;
1343
1344/*
1345
1346If an output_bfd is supplied to this function the generated image
1347will be relocatable, the relocations are copied to the output file
1348after they have been changed to reflect the new state of the world.
1349There are two ways of reflecting the results of partial linkage in an
1350output file; by modifying the output data in place, and by modifying
1351the relocation record. Some native formats (eg basic a.out and basic
1352coff) have no way of specifying an addend in the relocation type, so
1353the addend has to go in the output data. This is no big deal since in
1354these formats the output data slot will always be big enough for the
1355addend. Complex reloc types with addends were invented to solve just
1356this problem.
1357*/
81f8fee9 1358 PROTO(bfd_reloc_status_type,
b39096a4
SC
1359 bfd_perform_relocation,
1360 (bfd * abfd,
1361 arelent *reloc_entry,
1362 PTR data,
1363 asection *input_section,
1364 bfd *output_bfd));
7a276b09 1365
de7e640d
SC
1366/*
1367
81f8fee9 1368 bfd_reloc_code_type
de7e640d
SC
1369*/
1370
81f8fee9 1371typedef enum bfd_reloc_code_real {
de7e640d
SC
1372
1373/*
137416 bits wide, simple reloc
1375*/
1376
1377 BFD_RELOC_16,
1378
1379/*
13808 bits wide, but used to form an address like 0xffnn
1381*/
1382
1383 BFD_RELOC_8_FFnn,
1384
1385/*
13868 bits wide, simple
1387*/
1388
1389 BFD_RELOC_8,
1390
1391/*
13928 bits wide, pc relative
1393*/
1394
358c1d4d
SC
1395 BFD_RELOC_8_PCREL,
1396
1397/*
1398The type of reloc used to build a contructor table - at the moment probably a 32 bit
1399wide abs address, but the cpu can choose.
1400*/
1401
1402 BFD_RELOC_CTOR
1403
1404/*
1405*/
81f8fee9 1406 } bfd_reloc_code_real_type;
de7e640d
SC
1407
1408/*
1409
1410 bfd_reloc_type_lookup
1411This routine returns a pointer to a howto struct which when invoked,
1412will perform the supplied relocation on data from the architecture
1413noted.
de7e640d
SC
1414*/
1415
1416 PROTO(CONST struct reloc_howto_struct *,
1417 bfd_reloc_type_lookup,
81f8fee9 1418 (CONST bfd_arch_info_type *arch, bfd_reloc_code_type code));
de7e640d 1419
bded7de2 1420/*
bded7de2
SC
1421*/
1422
b39096a4
SC
1423/*:syms.c*/
1424/* @subsection typedef asymbol
1425An @code{asymbol} has the form:
bded7de2 1426*/
7a276b09 1427
b39096a4
SC
1428typedef struct symbol_cache_entry
1429{
1430/* A pointer to the BFD which owns the symbol. This information is
1431necessary so that a back end can work out what additional (invisible to
1432the application writer) information is carried with the symbol.
bded7de2 1433*/
7a276b09 1434
b39096a4 1435 struct _bfd *the_bfd;
7a276b09 1436
bded7de2 1437/*
b39096a4
SC
1438The text of the symbol. The name is left alone, and not copied - the
1439application may not alter it.
bded7de2
SC
1440*/
1441
b39096a4 1442 CONST char *name;
7a276b09 1443
bded7de2 1444/*
b39096a4 1445The value of the symbol.
bded7de2
SC
1446*/
1447
b39096a4 1448 symvalue value;
7a276b09 1449
bded7de2 1450/*
b39096a4 1451Attributes of a symbol:
bded7de2
SC
1452*/
1453
b39096a4 1454#define BSF_NO_FLAGS 0x00
7a276b09 1455
bded7de2 1456/*
b39096a4
SC
1457The symbol has local scope; @code{static} in @code{C}. The value is
1458the offset into the section of the data.
bded7de2
SC
1459*/
1460
b39096a4 1461#define BSF_LOCAL 0x01
7a276b09 1462
bded7de2 1463/*
b39096a4
SC
1464The symbol has global scope; initialized data in @code{C}. The value
1465is the offset into the section of the data.
bded7de2
SC
1466*/
1467
b39096a4 1468#define BSF_GLOBAL 0x02
7a276b09 1469
bded7de2 1470/*
b39096a4 1471Obsolete
bded7de2
SC
1472*/
1473
b39096a4 1474#define BSF_IMPORT 0x04
a07cc613 1475
bded7de2 1476/*
b39096a4
SC
1477The symbol has global scope, and is exported. The value is the offset
1478into the section of the data.
1479*/
7a276b09 1480
b39096a4 1481#define BSF_EXPORT 0x08
bded7de2 1482
b39096a4
SC
1483/*
1484The symbol is undefined. @code{extern} in @code{C}. The value has no meaning.
7a276b09 1485*/
bded7de2 1486
b39096a4 1487#define BSF_UNDEFINED 0x10
bded7de2
SC
1488
1489/*
b39096a4
SC
1490The symbol is common, initialized to zero; default in @code{C}. The
1491value is the size of the object in bytes.
1492*/
bded7de2 1493
b39096a4 1494#define BSF_FORT_COMM 0x20
bded7de2 1495
b39096a4
SC
1496/*
1497A normal @code{C} symbol would be one of:
1498@code{BSF_LOCAL}, @code{BSF_FORT_COMM}, @code{BSF_UNDEFINED} or @code{BSF_EXPORT|BSD_GLOBAL}
1499
1500The symbol is a debugging record. The value has an arbitary meaning.
bded7de2
SC
1501*/
1502
b39096a4 1503#define BSF_DEBUGGING 0x40
a07cc613 1504
bded7de2 1505/*
b39096a4
SC
1506The symbol has no section attached, any value is the actual value and
1507is not a relative offset to a section.
1508*/
bded7de2 1509
b39096a4
SC
1510#define BSF_ABSOLUTE 0x80
1511
1512/*
1513Used by the linker
7a276b09 1514*/
bded7de2 1515
b39096a4
SC
1516#define BSF_KEEP 0x10000
1517#define BSF_KEEP_G 0x80000
bded7de2 1518
b39096a4
SC
1519/*
1520Unused
1521*/
a07cc613 1522
b39096a4
SC
1523#define BSF_WEAK 0x100000
1524#define BSF_CTOR 0x200000
1525#define BSF_FAKE 0x400000
a07cc613 1526
b39096a4
SC
1527/*
1528The symbol used to be a common symbol, but now it is allocated.
1529*/
a07cc613 1530
b39096a4 1531#define BSF_OLD_COMMON 0x800000
7a276b09 1532
b39096a4
SC
1533/*
1534The default value for common data.
1535*/
7a276b09 1536
b39096a4 1537#define BFD_FORT_COMM_DEFAULT_VALUE 0
a07cc613 1538
b39096a4
SC
1539/*
1540In some files the type of a symbol sometimes alters its location
1541in an output file - ie in coff a @code{ISFCN} symbol which is also @code{C_EXT}
1542symbol appears where it was declared and not at the end of a section.
1543This bit is set by the target BFD part to convey this information.
1544*/
e8929c8d 1545
b39096a4 1546#define BSF_NOT_AT_END 0x40000
e8929c8d 1547
b39096a4
SC
1548/*
1549Signal that the symbol is the label of constructor section.
1550*/
1551
1552#define BSF_CONSTRUCTOR 0x1000000
e8929c8d 1553
bded7de2 1554/*
b39096a4
SC
1555Signal that the symbol is a warning symbol. If the symbol is a warning
1556symbol, then the value field (I know this is tacky) will point to the
1557asymbol which when referenced will cause the warning.
1ac2d1f2 1558*/
bded7de2 1559
b39096a4
SC
1560#define BSF_WARNING 0x2000000
1561
1562/*
1563Signal that the symbol is indirect. The value of the symbol is a
1564pointer to an undefined asymbol which contains the name to use
1565instead.
7a276b09 1566*/
b39096a4
SC
1567
1568#define BSF_INDIRECT 0x4000000
bded7de2
SC
1569
1570/*
b39096a4
SC
1571*/
1572 flagword flags;
bded7de2 1573
b39096a4
SC
1574/*
1575A pointer to the section to which this symbol is relative, or 0 if the
1576symbol is absolute or undefined. Note that it is not sufficient to set
1577this location to 0 to mark a symbol as absolute - the flag
1578@code{BSF_ABSOLUTE} must be set also.
1579*/
2c346475 1580
b39096a4
SC
1581 struct sec *section;
1582
1583/*
1584Back end special data. This is being phased out in favour of making
1585this a union.
7a276b09 1586*/
2c346475 1587
b39096a4
SC
1588 PTR udata;
1589} asymbol;
bded7de2
SC
1590
1591/*
1592
b39096a4
SC
1593 get_symtab_upper_bound
1594Returns the number of bytes required in a vector of pointers to
1595@code{asymbols} for all the symbols in the supplied BFD, including a
1596terminal NULL pointer. If there are no symbols in the BFD, then 0 is
1597returned.
bded7de2 1598*/
b39096a4
SC
1599#define get_symtab_upper_bound(abfd) \
1600 BFD_SEND (abfd, _get_symtab_upper_bound, (abfd))
bded7de2
SC
1601
1602/*
1603
b39096a4
SC
1604 bfd_canonicalize_symtab
1605Supplied a BFD and a pointer to an uninitialized vector of pointers.
1606This reads in the symbols from the BFD, and fills in the table with
1607pointers to the symbols, and a trailing NULL. The routine returns the
1608actual number of symbol pointers not including the NULL.
7a276b09 1609*/
bded7de2 1610
b39096a4
SC
1611#define bfd_canonicalize_symtab(abfd, location) \
1612 BFD_SEND (abfd, _bfd_canonicalize_symtab,\
1613 (abfd, location))
a737c70b 1614
bded7de2 1615/*
b39096a4
SC
1616 bfd_set_symtab
1617Provided a table of pointers to to symbols and a count, writes to the
1618output BFD the symbols when closed.
1ac2d1f2 1619*/
a737c70b 1620
b39096a4 1621 PROTO(boolean, bfd_set_symtab, (bfd *, asymbol **, unsigned int ));
2700c3c7 1622
b39096a4
SC
1623/*
1624
1625 bfd_print_symbol_vandf
1626Prints the value and flags of the symbol supplied to the stream file.
2f60a880
RP
1627*/
1628
b39096a4 1629 PROTO(void, bfd_print_symbol_vandf, (PTR file, asymbol *symbol));
2f60a880
RP
1630
1631/*
1632
b39096a4
SC
1633 bfd_make_empty_symbol
1634This function creates a new @code{asymbol} structure for the BFD, and
1635returns a pointer to it.
1636
1637This routine is necessary, since each back end has private information
1638surrounding the @code{asymbol}. Building your own @code{asymbol} and
1639pointing to it will not create the private information, and will cause
1640problems later on.
2f60a880 1641*/
b39096a4
SC
1642#define bfd_make_empty_symbol(abfd) \
1643 BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
2f60a880 1644
b941cb35
PB
1645/*
1646 bfd_decode_symclass
1647Return a lower-case character corresponding to the symbol class of symbol.
1648*/
1649
1650 PROTO(int, bfd_decode_symclass, (asymbol *symbol));
1651
1652/*
1653
1654 bfd_stab_name
1655Returns a string for the stab with the given code, or NULL if not found.
1656*/
1657
1658 PROTO(char *, bfd_stab_name, (int code));
1659
1660/*
1661*/
1662
b39096a4
SC
1663/*:bfd.c*/
1664/* @section @code{typedef bfd}
2f60a880 1665
b39096a4
SC
1666A BFD is has type @code{bfd}; objects of this type are the cornerstone
1667of any application using @code{libbfd}. References though the BFD and
1668to data in the BFD give the entire BFD functionality.
2f60a880 1669
b39096a4
SC
1670Here is the struct used to define the type @code{bfd}. This contains
1671the major data about the file, and contains pointers to the rest of
1672the data.
2f60a880 1673*/
b39096a4
SC
1674
1675struct _bfd
1676{
1677/* The filename the application opened the BFD with.
1678*/
1679
1680 CONST char *filename;
2f60a880
RP
1681
1682/*
b39096a4 1683A pointer to the target jump table.
1ac2d1f2 1684*/
2f60a880 1685
b39096a4
SC
1686 struct bfd_target *xvec;
1687
1688/*
1689
1690To avoid dragging too many header files into every file that
1691includes @file{bfd.h}, IOSTREAM has been declared as a "char *", and MTIME
1692as a "long". Their correct types, to which they are cast when used,
1693are "FILE *" and "time_t".
1694
1695The iostream is the result of an fopen on the filename.
7a276b09 1696*/
bded7de2 1697
b39096a4
SC
1698 char *iostream;
1699
1700/*
1701Is the file being cached @xref{File Caching}.
bded7de2 1702*/
a07cc613 1703
b39096a4 1704 boolean cacheable;
a07cc613 1705
bded7de2 1706/*
b39096a4
SC
1707Marks whether there was a default target specified when the BFD was
1708opened. This is used to select what matching algorithm to use to chose
1709the back end.
bded7de2
SC
1710*/
1711
b39096a4 1712 boolean target_defaulted;
a07cc613 1713
bded7de2 1714/*
b39096a4
SC
1715The caching routines use these to maintain a least-recently-used list of
1716BFDs (@pxref{File Caching}).
bded7de2
SC
1717*/
1718
b39096a4 1719 struct _bfd *lru_prev, *lru_next;
a07cc613 1720
bded7de2 1721/*
b39096a4
SC
1722When a file is closed by the caching routines, BFD retains state
1723information on the file here:
bded7de2
SC
1724*/
1725
b39096a4 1726 file_ptr where;
a07cc613 1727
bded7de2 1728/*
b39096a4 1729and here:
bded7de2
SC
1730*/
1731
b39096a4 1732 boolean opened_once;
7a276b09 1733
bded7de2 1734/*
b39096a4
SC
1735*/
1736 boolean mtime_set;
1737/* File modified time
bded7de2
SC
1738*/
1739
b39096a4 1740 long mtime;
7a276b09 1741
bded7de2 1742/*
b39096a4 1743Reserved for an unimplemented file locking extension.
bded7de2
SC
1744*/
1745
b39096a4 1746int ifd;
7a276b09 1747
bded7de2 1748/*
b39096a4 1749The format which belongs to the BFD.
bded7de2
SC
1750*/
1751
b39096a4 1752 bfd_format format;
bded7de2
SC
1753
1754/*
b39096a4 1755The direction the BFD was opened with
bded7de2
SC
1756*/
1757
b39096a4
SC
1758 enum bfd_direction {no_direction = 0,
1759 read_direction = 1,
1760 write_direction = 2,
1761 both_direction = 3} direction;
7a276b09 1762
bded7de2 1763/*
b39096a4 1764Format_specific flags
bded7de2
SC
1765*/
1766
b39096a4 1767 flagword flags;
7a276b09 1768
bded7de2 1769/*
b39096a4
SC
1770Currently my_archive is tested before adding origin to anything. I
1771believe that this can become always an add of origin, with origin set
1772to 0 for non archive files.
bded7de2
SC
1773*/
1774
b39096a4 1775 file_ptr origin;
7a276b09 1776
bded7de2 1777/*
b39096a4 1778Remember when output has begun, to stop strange things happening.
bded7de2
SC
1779*/
1780
b39096a4 1781 boolean output_has_begun;
7a276b09 1782
bded7de2 1783/*
b39096a4 1784Pointer to linked list of sections
bded7de2
SC
1785*/
1786
b39096a4 1787 struct sec *sections;
7a276b09 1788
bded7de2 1789/*
b39096a4 1790The number of sections
bded7de2
SC
1791*/
1792
b39096a4 1793 unsigned int section_count;
7a276b09 1794
bded7de2 1795/*
b39096a4
SC
1796Stuff only useful for object files:
1797The start address.
1798*/
7a276b09 1799
b39096a4
SC
1800 bfd_vma start_address;
1801/* Used for input and output
7a276b09 1802*/
bded7de2 1803
b39096a4
SC
1804 unsigned int symcount;
1805/* Symbol table for output BFD
bded7de2 1806*/
19b03b7a 1807
b39096a4 1808 struct symbol_cache_entry **outsymbols;
a07cc613 1809
bded7de2 1810/*
b39096a4 1811Pointer to structure which contains architecture information
bded7de2
SC
1812*/
1813
81f8fee9 1814 struct bfd_arch_info *arch_info;
a07cc613 1815
bded7de2 1816/*
b39096a4 1817Stuff only useful for archives:
bded7de2
SC
1818*/
1819
b39096a4
SC
1820 PTR arelt_data;
1821 struct _bfd *my_archive;
1822 struct _bfd *next;
1823 struct _bfd *archive_head;
1824 boolean has_armap;
9b9c5c39 1825
bded7de2 1826/*
b39096a4 1827Used by the back end to hold private data.
bded7de2
SC
1828*/
1829
b39096a4 1830 PTR tdata;
a07cc613 1831
bded7de2 1832/*
b39096a4 1833Used by the application to hold private data
bded7de2
SC
1834*/
1835
b39096a4 1836 PTR usrdata;
a07cc613 1837
bded7de2 1838/*
b39096a4 1839Where all the allocated stuff under this BFD goes (@pxref{Memory Usage}).
bded7de2
SC
1840*/
1841
b39096a4
SC
1842 struct obstack memory;
1843};
a07cc613 1844
bded7de2 1845/*
b39096a4
SC
1846
1847 bfd_set_start_address
1848
1849Marks the entry point of an output BFD. Returns @code{true} on
1850success, @code{false} otherwise.
bded7de2
SC
1851*/
1852
b39096a4 1853 PROTO(boolean, bfd_set_start_address,(bfd *, bfd_vma));
19b03b7a 1854
bded7de2 1855/*
b39096a4
SC
1856
1857 bfd_get_mtime
1858
1859Return cached file modification time (e.g. as read from archive header
1860for archive members, or from file system if we have been called
1861before); else determine modify time, cache it, and return it.
bded7de2
SC
1862*/
1863
b39096a4 1864 PROTO(long, bfd_get_mtime, (bfd *));
a07cc613 1865
bded7de2 1866/*
b39096a4
SC
1867
1868 stuff
bded7de2
SC
1869*/
1870
b39096a4
SC
1871
1872#define bfd_sizeof_headers(abfd, reloc) \
1873 BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, reloc))
1874
1875#define bfd_find_nearest_line(abfd, section, symbols, offset, filename_ptr, func, line_ptr) \
1876 BFD_SEND (abfd, _bfd_find_nearest_line, (abfd, section, symbols, offset, filename_ptr, func, line_ptr))
1877
1878#define bfd_debug_info_start(abfd) \
1879 BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
1880
1881#define bfd_debug_info_end(abfd) \
1882 BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
1883
1884#define bfd_debug_info_accumulate(abfd, section) \
1885 BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
1886
1887#define bfd_stat_arch_elt(abfd, stat) \
1888 BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
1889
1890#define bfd_coff_swap_aux_in(a,e,t,c,i) \
1891 BFD_SEND (a, _bfd_coff_swap_aux_in, (a,e,t,c,i))
1892
1893#define bfd_coff_swap_sym_in(a,e,i) \
1894 BFD_SEND (a, _bfd_coff_swap_sym_in, (a,e,i))
1895
1896#define bfd_coff_swap_lineno_in(a,e,i) \
1897 BFD_SEND ( a, _bfd_coff_swap_lineno_in, (a,e,i))
1898
1899#define bfd_set_arch_mach(abfd, arch, mach)\
1900 BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
7f3d9f46 1901
0c210c9c
SC
1902#define bfd_coff_swap_reloc_out(abfd, i, o) \
1903 BFD_SEND (abfd, _bfd_coff_swap_reloc_out, (abfd, i, o))
1904
1905#define bfd_coff_swap_lineno_out(abfd, i, o) \
1906 BFD_SEND (abfd, _bfd_coff_swap_lineno_out, (abfd, i, o))
1907
1908#define bfd_coff_swap_aux_out(abfd, i, t,c,o) \
1909 BFD_SEND (abfd, _bfd_coff_swap_aux_out, (abfd, i,t,c, o))
1910
1911#define bfd_coff_swap_sym_out(abfd, i,o) \
1912 BFD_SEND (abfd, _bfd_coff_swap_sym_out, (abfd, i, o))
1913
1914#define bfd_coff_swap_scnhdr_out(abfd, i,o) \
1915 BFD_SEND (abfd, _bfd_coff_swap_scnhdr_out, (abfd, i, o))
1916
1917#define bfd_coff_swap_filehdr_out(abfd, i,o) \
1918 BFD_SEND (abfd, _bfd_coff_swap_filehdr_out, (abfd, i, o))
1919
1920#define bfd_coff_swap_aouthdr_out(abfd, i,o) \
1921 BFD_SEND (abfd, _bfd_coff_swap_aouthdr_out, (abfd, i, o))
1922
bded7de2 1923/*
bded7de2
SC
1924*/
1925
b39096a4
SC
1926/*:archive.c*/
1927/* bfd_get_next_mapent
1928What this does
1929*/
1930 PROTO(symindex, bfd_get_next_mapent, (bfd *, symindex, carsym **));
7f3d9f46 1931
bded7de2 1932/*
b39096a4
SC
1933
1934 bfd_set_archive_head
1935
1936Used whilst processing archives. Sets the head of the chain of BFDs
1937contained in an archive to @var{new_head}. (see chapter on archives)
bded7de2
SC
1938*/
1939
b39096a4 1940 PROTO(boolean, bfd_set_archive_head, (bfd *output, bfd *new_head));
7a276b09 1941
bded7de2 1942/*
bded7de2 1943
b39096a4
SC
1944 bfd_get_elt_at_index
1945Return the sub bfd contained within the archive at archive index n.
bded7de2 1946*/
7a276b09 1947
b39096a4 1948 PROTO(bfd *, bfd_get_elt_at_index, (bfd *, int));
7a276b09 1949
bded7de2 1950/*
b39096a4
SC
1951
1952 bfd_openr_next_archived_file
1953Initially provided a BFD containing an archive and NULL, opens a BFD
1954on the first contained element and returns that. Subsequent calls to
1955bfd_openr_next_archived_file should pass the archive and the previous
1956return value to return a created BFD to the next contained element.
1957NULL is returned when there are no more.
bded7de2
SC
1958*/
1959
b39096a4
SC
1960 PROTO(bfd*, bfd_openr_next_archived_file,
1961 (bfd *archive, bfd *previous));
7a276b09 1962
bded7de2 1963/*
b39096a4 1964*/
bded7de2 1965
b39096a4
SC
1966
1967/*:core.c*/
1968/* bfd_core_file_failing_command
1969Returns a read-only string explaining what program was running when
1970it failed and produced the core file being read
4322f04d 1971*/
b39096a4
SC
1972
1973 PROTO(CONST char *, bfd_core_file_failing_command, (bfd *));
bded7de2
SC
1974
1975/*
1976
b39096a4
SC
1977 bfd_core_file_failing_signal
1978Returns the signal number which caused the core dump which generated
1979the file the BFD is attached to.
bded7de2 1980*/
a07cc613 1981
b39096a4 1982 PROTO(int, bfd_core_file_failing_signal, (bfd *));
a07cc613 1983
bded7de2 1984/*
7f3d9f46 1985
b39096a4
SC
1986 core_file_matches_executable_p
1987Returns @code{true} if the core file attached to @var{core_bfd} was
1988generated by a run of the executable file attached to @var{exec_bfd},
1989or else @code{false}.
7a276b09 1990*/
b39096a4
SC
1991 PROTO(boolean, core_file_matches_executable_p,
1992 (bfd *core_bfd, bfd *exec_bfd));
bded7de2
SC
1993
1994/*
1ac2d1f2 1995*/
bded7de2 1996
1ac2d1f2
RP
1997/*:targets.c*/
1998/* bfd_target
0c210c9c 1999@node bfd_target, , Targets, Targets
a737c70b 2000@subsection bfd_target
7a276b09
SC
2001This structure contains everything that BFD knows about a target.
2002It includes things like its byte order, name, what routines to call
2003to do various operations, etc.
2004
2005Every BFD points to a target structure with its "xvec" member.
2006
7a276b09
SC
2007Shortcut for declaring fields which are prototyped function pointers,
2008while avoiding anguish on compilers that don't support protos.
2009*/
bded7de2 2010
7a276b09
SC
2011#define SDEF(ret, name, arglist) \
2012 PROTO(ret,(*name),arglist)
2013#define SDEF_FMT(ret, name, arglist) \
2014 PROTO(ret,(*name[bfd_type_end]),arglist)
a07cc613 2015
bded7de2
SC
2016/*
2017These macros are used to dispatch to functions through the bfd_target
2f60a880
RP
2018vector. They are used in a number of macros further down in @file{bfd.h}, and
2019are also used when calling various routines by hand inside the BFD
7a276b09
SC
2020implementation. The "arglist" argument must be parenthesized; it
2021contains all the arguments to the called function.
2022*/
bded7de2 2023
7a276b09
SC
2024#define BFD_SEND(bfd, message, arglist) \
2025 ((*((bfd)->xvec->message)) arglist)
a07cc613 2026
bded7de2 2027/*
2f60a880 2028For operations which index on the BFD format
7a276b09 2029*/
bded7de2 2030
7a276b09
SC
2031#define BFD_SEND_FMT(bfd, message, arglist) \
2032 (((bfd)->xvec->message[(int)((bfd)->format)]) arglist)
a07cc613 2033
bded7de2
SC
2034/*
2035This is the struct which defines the type of BFD this is. The
2f60a880 2036"xvec" member of the struct @code{bfd} itself points here. Each module
7a276b09
SC
2037that implements access to a different target under BFD, defines
2038one of these.
a07cc613 2039
7a276b09
SC
2040FIXME, these names should be rationalised with the names of the
2041entry points which call them. Too bad we can't have one macro to
2042define them both!
7a276b09 2043*/
bded7de2 2044
7a276b09
SC
2045typedef struct bfd_target
2046{
a07cc613 2047
bded7de2
SC
2048/*
2049identifies the kind of target, eg SunOS4, Ultrix, etc
2050*/
2051
7a276b09
SC
2052 char *name;
2053
bded7de2
SC
2054/*
2055The "flavour" of a back end is a general indication about the contents
2056of a file.
2057*/
2058
81f8fee9
JG
2059 enum target_flavour {
2060 bfd_target_unknown_flavour,
2061 bfd_target_aout_flavour,
2062 bfd_target_coff_flavour,
2063 bfd_target_elf_flavour,
2064 bfd_target_ieee_flavour,
2065 bfd_target_oasys_flavour,
2066 bfd_target_srec_flavour} flavour;
7a276b09 2067
bded7de2
SC
2068/*
2069The order of bytes within the data area of a file.
2070*/
2071
7a276b09
SC
2072 boolean byteorder_big_p;
2073
bded7de2
SC
2074/*
2075The order of bytes within the header parts of a file.
2076*/
2077
7a276b09
SC
2078 boolean header_byteorder_big_p;
2079
bded7de2
SC
2080/*
2081This is a mask of all the flags which an executable may have set -
2082from the set @code{NO_FLAGS}, @code{HAS_RELOC}, ...@code{D_PAGED}.
2083*/
2084
7a276b09
SC
2085 flagword object_flags;
2086
bded7de2
SC
2087/*
2088This is a mask of all the flags which a section may have set - from
2089the set @code{SEC_NO_FLAGS}, @code{SEC_ALLOC}, ...@code{SET_NEVER_LOAD}.
2090*/
2091
7a276b09
SC
2092 flagword section_flags;
2093
bded7de2
SC
2094/*
2095The pad character for filenames within an archive header.
2096*/
2097
7a276b09
SC
2098 char ar_pad_char;
2099
bded7de2
SC
2100/*
2101The maximum number of characters in an archive header.
2102*/
2103
7a276b09
SC
2104 unsigned short ar_max_namelen;
2105
bded7de2
SC
2106/*
2107The minimum alignment restriction for any section.
2108*/
2109
7a276b09
SC
2110 unsigned int align_power_min;
2111
bded7de2
SC
2112/*
2113Entries for byte swapping for data. These are different to the other
2f60a880 2114entry points, since they don't take BFD as first arg. Certain other handlers
bded7de2
SC
2115could do the same.
2116*/
2117
fcc654cb
SC
2118 SDEF (bfd_vma, bfd_getx64, (bfd_byte *));
2119 SDEF (void, bfd_putx64, (bfd_vma, bfd_byte *));
2120 SDEF (bfd_vma, bfd_getx32, (bfd_byte *));
2121 SDEF (void, bfd_putx32, (bfd_vma, bfd_byte *));
2122 SDEF (bfd_vma, bfd_getx16, (bfd_byte *));
2123 SDEF (void, bfd_putx16, (bfd_vma, bfd_byte *));
7a276b09 2124
bded7de2
SC
2125/*
2126Byte swapping for the headers
2127*/
2128
fcc654cb
SC
2129 SDEF (bfd_vma, bfd_h_getx64, (bfd_byte *));
2130 SDEF (void, bfd_h_putx64, (bfd_vma, bfd_byte *));
2131 SDEF (bfd_vma, bfd_h_getx32, (bfd_byte *));
2132 SDEF (void, bfd_h_putx32, (bfd_vma, bfd_byte *));
2133 SDEF (bfd_vma, bfd_h_getx16, (bfd_byte *));
2134 SDEF (void, bfd_h_putx16, (bfd_vma, bfd_byte *));
7a276b09 2135
bded7de2
SC
2136/*
2137Format dependent routines, these turn into vectors of entry points
2138within the target vector structure; one for each format to check.
2139
2140Check the format of a file being read. Return bfd_target * or zero.
2141*/
2142
7a276b09
SC
2143 SDEF_FMT (struct bfd_target *, _bfd_check_format, (bfd *));
2144
bded7de2
SC
2145/*
2146Set the format of a file being written.
2147*/
2148
7a276b09
SC
2149 SDEF_FMT (boolean, _bfd_set_format, (bfd *));
2150
bded7de2
SC
2151/*
2152Write cached information into a file being written, at bfd_close.
2153*/
2154
7a276b09
SC
2155 SDEF_FMT (boolean, _bfd_write_contents, (bfd *));
2156
bded7de2
SC
2157/*
2158The following functions are defined in @code{JUMP_TABLE}. The idea is
2159that the back end writer of @code{foo} names all the routines
2160@code{foo_}@var{entry_point}, @code{JUMP_TABLE} will built the entries
2161in this structure in the right order.
2162
2163Core file entry points
2164*/
2165
7a276b09
SC
2166 SDEF (char *, _core_file_failing_command, (bfd *));
2167 SDEF (int, _core_file_failing_signal, (bfd *));
2168 SDEF (boolean, _core_file_matches_executable_p, (bfd *, bfd *));
2169
bded7de2
SC
2170/*
2171Archive entry points
2172*/
2173
7a276b09
SC
2174 SDEF (boolean, _bfd_slurp_armap, (bfd *));
2175 SDEF (boolean, _bfd_slurp_extended_name_table, (bfd *));
2176 SDEF (void, _bfd_truncate_arname, (bfd *, CONST char *, char *));
2177 SDEF (boolean, write_armap, (bfd *arch,
2178 unsigned int elength,
2179 struct orl *map,
a0788ae3 2180 unsigned int orl_count,
7a276b09
SC
2181 int stridx));
2182
bded7de2
SC
2183/*
2184Standard stuff.
2185*/
2186
7a276b09
SC
2187 SDEF (boolean, _close_and_cleanup, (bfd *));
2188 SDEF (boolean, _bfd_set_section_contents, (bfd *, sec_ptr, PTR,
2189 file_ptr, bfd_size_type));
2190 SDEF (boolean, _bfd_get_section_contents, (bfd *, sec_ptr, PTR,
2191 file_ptr, bfd_size_type));
2192 SDEF (boolean, _new_section_hook, (bfd *, sec_ptr));
2193
bded7de2
SC
2194/*
2195Symbols and reloctions
2196*/
2197
de7e640d 2198 SDEF (unsigned int, _get_symtab_upper_bound, (bfd *));
7a276b09
SC
2199 SDEF (unsigned int, _bfd_canonicalize_symtab,
2200 (bfd *, struct symbol_cache_entry **));
2201 SDEF (unsigned int, _get_reloc_upper_bound, (bfd *, sec_ptr));
2202 SDEF (unsigned int, _bfd_canonicalize_reloc, (bfd *, sec_ptr, arelent **,
2203 struct symbol_cache_entry**));
2204 SDEF (struct symbol_cache_entry *, _bfd_make_empty_symbol, (bfd *));
2205 SDEF (void, _bfd_print_symbol, (bfd *, PTR, struct symbol_cache_entry *,
81f8fee9 2206 bfd_print_symbol_type));
7a276b09
SC
2207#define bfd_print_symbol(b,p,s,e) BFD_SEND(b, _bfd_print_symbol, (b,p,s,e))
2208 SDEF (alent *, _get_lineno, (bfd *, struct symbol_cache_entry *));
2209
2210 SDEF (boolean, _bfd_set_arch_mach, (bfd *, enum bfd_architecture,
2211 unsigned long));
2212
2213 SDEF (bfd *, openr_next_archived_file, (bfd *arch, bfd *prev));
2214 SDEF (boolean, _bfd_find_nearest_line,
2215 (bfd *abfd, struct sec *section,
2216 struct symbol_cache_entry **symbols,bfd_vma offset,
2217 CONST char **file, CONST char **func, unsigned int *line));
2218 SDEF (int, _bfd_stat_arch_elt, (bfd *, struct stat *));
2219
2220 SDEF (int, _bfd_sizeof_headers, (bfd *, boolean));
2221
2222 SDEF (void, _bfd_debug_info_start, (bfd *));
2223 SDEF (void, _bfd_debug_info_end, (bfd *));
2224 SDEF (void, _bfd_debug_info_accumulate, (bfd *, struct sec *));
2225
bded7de2
SC
2226/*
2227Special entry points for gdb to swap in coff symbol table parts
2228*/
2229
7a276b09
SC
2230 SDEF(void, _bfd_coff_swap_aux_in,(
2231 bfd *abfd ,
2232 PTR ext,
2233 int type,
2234 int class ,
2235 PTR in));
2236
2237 SDEF(void, _bfd_coff_swap_sym_in,(
2238 bfd *abfd ,
2239 PTR ext,
2240 PTR in));
2241
2242 SDEF(void, _bfd_coff_swap_lineno_in, (
2243 bfd *abfd,
2244 PTR ext,
2245 PTR in));
2246
0c210c9c
SC
2247/*
2248Special entry points for gas to swap coff parts
2249*/
2250
2251 SDEF(unsigned int, _bfd_coff_swap_aux_out,(
2252 bfd *abfd,
2253 PTR in,
2254 int type,
2255 int class,
2256 PTR ext));
2257
2258 SDEF(unsigned int, _bfd_coff_swap_sym_out,(
2259 bfd *abfd,
2260 PTR in,
2261 PTR ext));
2262
2263 SDEF(unsigned int, _bfd_coff_swap_lineno_out,(
2264 bfd *abfd,
2265 PTR in,
2266 PTR ext));
2267
2268 SDEF(unsigned int, _bfd_coff_swap_reloc_out,(
2269 bfd *abfd,
2270 PTR src,
2271 PTR dst));
2272
2273 SDEF(unsigned int, _bfd_coff_swap_filehdr_out,(
2274 bfd *abfd,
2275 PTR in,
2276 PTR out));
2277
2278 SDEF(unsigned int, _bfd_coff_swap_aouthdr_out,(
2279 bfd *abfd,
2280 PTR in,
2281 PTR out));
2282
2283 SDEF(unsigned int, _bfd_coff_swap_scnhdr_out,(
2284 bfd *abfd,
2285 PTR in,
2286 PTR out));
2287
7a276b09
SC
2288} bfd_target;
2289
bded7de2
SC
2290/*
2291
2292*i bfd_find_target
2293Returns a pointer to the transfer vector for the object target
7a276b09
SC
2294named target_name. If target_name is NULL, chooses the one in the
2295environment variable GNUTARGET; if that is null or not defined then
2296the first entry in the target list is chosen. Passing in the
2297string "default" or setting the environment variable to "default"
2298will cause the first entry in the target list to be returned,
2f60a880
RP
2299and "target_defaulted" will be set in the BFD. This causes
2300@code{bfd_check_format} to loop over all the targets to find the one
7a276b09
SC
2301that matches the file being read.
2302*/
bded7de2
SC
2303 PROTO(bfd_target *, bfd_find_target,(CONST char *, bfd *));
2304
2305/*
2306
2307*i bfd_target_list
2308This function returns a freshly malloced NULL-terminated vector of the
2f60a880 2309names of all the valid BFD targets. Do not modify the names
7a276b09 2310*/
bded7de2
SC
2311 PROTO(CONST char **,bfd_target_list,());
2312
2313/*
1ac2d1f2 2314*/
bded7de2 2315
bded7de2 2316
1ac2d1f2
RP
2317/*:format.c*/
2318/* *i bfd_check_format
2f60a880
RP
2319This routine is supplied a BFD and a format. It attempts to verify if
2320the file attached to the BFD is indeed compatible with the format
7a276b09
SC
2321specified (ie, one of @code{bfd_object}, @code{bfd_archive} or
2322@code{bfd_core}).
2323
2f60a880 2324If the BFD has been set to a specific @var{target} before the call,
7a276b09
SC
2325only the named target and format combination will be checked. If the
2326target has not been set, or has been set to @code{default} then all
2327the known target backends will be interrogated to determine a match.
2328
2329The function returns @code{true} on success, otherwise @code{false}
2330with one of the following error codes:
2331@table @code
2332@item
2333invalid_operation
2334if @code{format} is not one of @code{bfd_object}, @code{bfd_archive}
2335or @code{bfd_core}.
2336@item system_call_error
2337if an error occured during a read - even some file mismatches can
2338cause system_call_errros
2339@item file_not_recognised
2340none of the backends recognised the file format
2341@item file_ambiguously_recognized
2342more than one backend recognised the file format.
2343@end table
2344*/
bded7de2
SC
2345 PROTO(boolean, bfd_check_format, (bfd *abfd, bfd_format format));
2346
2347/*
2348
2349*i bfd_set_format
2f60a880
RP
2350This function sets the file format of the supplied BFD to the format
2351requested. If the target set in the BFD does not support the format
2352requested, the format is illegal or the BFD is not open for writing
7a276b09
SC
2353than an error occurs.
2354*/
bded7de2
SC
2355 PROTO(boolean,bfd_set_format,(bfd *, bfd_format));
2356
2357/*
2358
2359*i bfd_format_string
2360This function takes one argument, and enumerated type (bfd_format) and
7a276b09
SC
2361returns a pointer to a const string "invalid", "object", "archive",
2362"core" or "unknown" depending upon the value of the enumeration.
2363*/
bded7de2 2364 PROTO(CONST char *, bfd_format_string, (bfd_format));
a07cc613 2365
bded7de2 2366/*
1ac2d1f2 2367*/
bded7de2
SC
2368
2369#endif
b39096a4
SC
2370
2371
2372
2373
2374
This page took 0.407314 seconds and 4 git commands to generate.