libbfd-in.h revision 1.1 1 1.1 skrll /* libbfd.h -- Declarations used by bfd library *implementation*.
2 1.1 skrll (This include file is not for users of the library.)
3 1.1 skrll
4 1.1 skrll Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
5 1.1 skrll 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
6 1.1 skrll Free Software Foundation, Inc.
7 1.1 skrll
8 1.1 skrll Written by Cygnus Support.
9 1.1 skrll
10 1.1 skrll This file is part of BFD, the Binary File Descriptor library.
11 1.1 skrll
12 1.1 skrll This program is free software; you can redistribute it and/or modify
13 1.1 skrll it under the terms of the GNU General Public License as published by
14 1.1 skrll the Free Software Foundation; either version 3 of the License, or
15 1.1 skrll (at your option) any later version.
16 1.1 skrll
17 1.1 skrll This program is distributed in the hope that it will be useful,
18 1.1 skrll but WITHOUT ANY WARRANTY; without even the implied warranty of
19 1.1 skrll MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 1.1 skrll GNU General Public License for more details.
21 1.1 skrll
22 1.1 skrll You should have received a copy of the GNU General Public License
23 1.1 skrll along with this program; if not, write to the Free Software
24 1.1 skrll Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
25 1.1 skrll MA 02110-1301, USA. */
26 1.1 skrll
27 1.1 skrll #include "hashtab.h"
28 1.1 skrll
29 1.1 skrll /* Align an address upward to a boundary, expressed as a number of bytes.
30 1.1 skrll E.g. align to an 8-byte boundary with argument of 8. Take care never
31 1.1 skrll to wrap around if the address is within boundary-1 of the end of the
32 1.1 skrll address space. */
33 1.1 skrll #define BFD_ALIGN(this, boundary) \
34 1.1 skrll ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this)) \
35 1.1 skrll ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
36 1.1 skrll : ~ (bfd_vma) 0)
37 1.1 skrll
38 1.1 skrll /* If you want to read and write large blocks, you might want to do it
39 1.1 skrll in quanta of this amount */
40 1.1 skrll #define DEFAULT_BUFFERSIZE 8192
41 1.1 skrll
42 1.1 skrll /* Set a tdata field. Can't use the other macros for this, since they
43 1.1 skrll do casts, and casting to the left of assignment isn't portable. */
44 1.1 skrll #define set_tdata(bfd, v) ((bfd)->tdata.any = (v))
45 1.1 skrll
46 1.1 skrll /* If BFD_IN_MEMORY is set for a BFD, then the iostream fields points
47 1.1 skrll to an instance of this structure. */
48 1.1 skrll
49 1.1 skrll struct bfd_in_memory
50 1.1 skrll {
51 1.1 skrll /* Size of buffer. */
52 1.1 skrll bfd_size_type size;
53 1.1 skrll /* Buffer holding contents of BFD. */
54 1.1 skrll bfd_byte *buffer;
55 1.1 skrll };
56 1.1 skrll
57 1.1 skrll struct section_hash_entry
58 1.1 skrll {
59 1.1 skrll struct bfd_hash_entry root;
60 1.1 skrll asection section;
61 1.1 skrll };
62 1.1 skrll
63 1.1 skrll /* tdata for an archive. For an input archive, cache
64 1.1 skrll needs to be free()'d. For an output archive, symdefs do. */
65 1.1 skrll
66 1.1 skrll struct artdata {
67 1.1 skrll file_ptr first_file_filepos;
68 1.1 skrll /* Speed up searching the armap */
69 1.1 skrll htab_t cache;
70 1.1 skrll bfd *archive_head; /* Only interesting in output routines */
71 1.1 skrll carsym *symdefs; /* the symdef entries */
72 1.1 skrll symindex symdef_count; /* how many there are */
73 1.1 skrll char *extended_names; /* clever intel extension */
74 1.1 skrll bfd_size_type extended_names_size; /* Size of extended names */
75 1.1 skrll /* when more compilers are standard C, this can be a time_t */
76 1.1 skrll long armap_timestamp; /* Timestamp value written into armap.
77 1.1 skrll This is used for BSD archives to check
78 1.1 skrll that the timestamp is recent enough
79 1.1 skrll for the BSD linker to not complain,
80 1.1 skrll just before we finish writing an
81 1.1 skrll archive. */
82 1.1 skrll file_ptr armap_datepos; /* Position within archive to seek to
83 1.1 skrll rewrite the date field. */
84 1.1 skrll void *tdata; /* Backend specific information. */
85 1.1 skrll };
86 1.1 skrll
87 1.1 skrll #define bfd_ardata(bfd) ((bfd)->tdata.aout_ar_data)
88 1.1 skrll
89 1.1 skrll /* Goes in bfd's arelt_data slot */
90 1.1 skrll struct areltdata {
91 1.1 skrll char * arch_header; /* it's actually a string */
92 1.1 skrll unsigned int parsed_size; /* octets of filesize not including ar_hdr */
93 1.1 skrll char *filename; /* null-terminated */
94 1.1 skrll file_ptr origin; /* for element of a thin archive */
95 1.1 skrll };
96 1.1 skrll
97 1.1 skrll #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size)
98 1.1 skrll
99 1.1 skrll extern void *bfd_malloc
100 1.1 skrll (bfd_size_type);
101 1.1 skrll extern void *bfd_realloc
102 1.1 skrll (void *, bfd_size_type);
103 1.1 skrll extern void *bfd_realloc_or_free
104 1.1 skrll (void *, bfd_size_type);
105 1.1 skrll extern void *bfd_zmalloc
106 1.1 skrll (bfd_size_type);
107 1.1 skrll extern void *bfd_malloc2
108 1.1 skrll (bfd_size_type, bfd_size_type);
109 1.1 skrll extern void *bfd_realloc2
110 1.1 skrll (void *, bfd_size_type, bfd_size_type);
111 1.1 skrll extern void *bfd_zmalloc2
112 1.1 skrll (bfd_size_type, bfd_size_type);
113 1.1 skrll
114 1.1 skrll extern void _bfd_default_error_handler (const char *s, ...);
115 1.1 skrll extern bfd_error_handler_type _bfd_error_handler;
116 1.1 skrll
117 1.1 skrll /* These routines allocate and free things on the BFD's objalloc. */
118 1.1 skrll
119 1.1 skrll extern void *bfd_alloc
120 1.1 skrll (bfd *, bfd_size_type);
121 1.1 skrll extern void *bfd_zalloc
122 1.1 skrll (bfd *, bfd_size_type);
123 1.1 skrll extern void *bfd_alloc2
124 1.1 skrll (bfd *, bfd_size_type, bfd_size_type);
125 1.1 skrll extern void *bfd_zalloc2
126 1.1 skrll (bfd *, bfd_size_type, bfd_size_type);
127 1.1 skrll extern void bfd_release
128 1.1 skrll (bfd *, void *);
129 1.1 skrll
130 1.1 skrll bfd * _bfd_create_empty_archive_element_shell
131 1.1 skrll (bfd *obfd);
132 1.1 skrll bfd * _bfd_look_for_bfd_in_cache
133 1.1 skrll (bfd *, file_ptr);
134 1.1 skrll bfd_boolean _bfd_add_bfd_to_archive_cache
135 1.1 skrll (bfd *, file_ptr, bfd *);
136 1.1 skrll bfd_boolean _bfd_generic_mkarchive
137 1.1 skrll (bfd *abfd);
138 1.1 skrll const bfd_target *bfd_generic_archive_p
139 1.1 skrll (bfd *abfd);
140 1.1 skrll bfd_boolean bfd_slurp_armap
141 1.1 skrll (bfd *abfd);
142 1.1 skrll bfd_boolean bfd_slurp_bsd_armap_f2
143 1.1 skrll (bfd *abfd);
144 1.1 skrll #define bfd_slurp_bsd_armap bfd_slurp_armap
145 1.1 skrll #define bfd_slurp_coff_armap bfd_slurp_armap
146 1.1 skrll bfd_boolean _bfd_slurp_extended_name_table
147 1.1 skrll (bfd *abfd);
148 1.1 skrll extern bfd_boolean _bfd_construct_extended_name_table
149 1.1 skrll (bfd *, bfd_boolean, char **, bfd_size_type *);
150 1.1 skrll bfd_boolean _bfd_write_archive_contents
151 1.1 skrll (bfd *abfd);
152 1.1 skrll bfd_boolean _bfd_compute_and_write_armap
153 1.1 skrll (bfd *, unsigned int elength);
154 1.1 skrll bfd *_bfd_get_elt_at_filepos
155 1.1 skrll (bfd *archive, file_ptr filepos);
156 1.1 skrll extern bfd *_bfd_generic_get_elt_at_index
157 1.1 skrll (bfd *, symindex);
158 1.1 skrll bfd * _bfd_new_bfd
159 1.1 skrll (void);
160 1.1 skrll void _bfd_delete_bfd
161 1.1 skrll (bfd *);
162 1.1 skrll bfd_boolean _bfd_free_cached_info
163 1.1 skrll (bfd *);
164 1.1 skrll
165 1.1 skrll bfd_boolean bfd_false
166 1.1 skrll (bfd *ignore);
167 1.1 skrll bfd_boolean bfd_true
168 1.1 skrll (bfd *ignore);
169 1.1 skrll void *bfd_nullvoidptr
170 1.1 skrll (bfd *ignore);
171 1.1 skrll int bfd_0
172 1.1 skrll (bfd *ignore);
173 1.1 skrll unsigned int bfd_0u
174 1.1 skrll (bfd *ignore);
175 1.1 skrll long bfd_0l
176 1.1 skrll (bfd *ignore);
177 1.1 skrll long _bfd_n1
178 1.1 skrll (bfd *ignore);
179 1.1 skrll void bfd_void
180 1.1 skrll (bfd *ignore);
181 1.1 skrll
182 1.1 skrll bfd *_bfd_new_bfd_contained_in
183 1.1 skrll (bfd *);
184 1.1 skrll const bfd_target *_bfd_dummy_target
185 1.1 skrll (bfd *abfd);
186 1.1 skrll
187 1.1 skrll void bfd_dont_truncate_arname
188 1.1 skrll (bfd *abfd, const char *filename, char *hdr);
189 1.1 skrll void bfd_bsd_truncate_arname
190 1.1 skrll (bfd *abfd, const char *filename, char *hdr);
191 1.1 skrll void bfd_gnu_truncate_arname
192 1.1 skrll (bfd *abfd, const char *filename, char *hdr);
193 1.1 skrll
194 1.1 skrll bfd_boolean bsd_write_armap
195 1.1 skrll (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count,
196 1.1 skrll int stridx);
197 1.1 skrll
198 1.1 skrll bfd_boolean coff_write_armap
199 1.1 skrll (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count,
200 1.1 skrll int stridx);
201 1.1 skrll
202 1.1 skrll extern void *_bfd_generic_read_ar_hdr
203 1.1 skrll (bfd *);
204 1.1 skrll extern void _bfd_ar_spacepad
205 1.1 skrll (char *, size_t, const char *, long);
206 1.1 skrll
207 1.1 skrll extern void *_bfd_generic_read_ar_hdr_mag
208 1.1 skrll (bfd *, const char *);
209 1.1 skrll
210 1.1 skrll bfd * bfd_generic_openr_next_archived_file
211 1.1 skrll (bfd *archive, bfd *last_file);
212 1.1 skrll
213 1.1 skrll int bfd_generic_stat_arch_elt
214 1.1 skrll (bfd *, struct stat *);
215 1.1 skrll
216 1.1 skrll #define _bfd_read_ar_hdr(abfd) \
217 1.1 skrll BFD_SEND (abfd, _bfd_read_ar_hdr_fn, (abfd))
218 1.1 skrll
219 1.1 skrll /* Generic routines to use for BFD_JUMP_TABLE_GENERIC. Use
221 1.1 skrll BFD_JUMP_TABLE_GENERIC (_bfd_generic). */
222 1.1 skrll
223 1.1 skrll #define _bfd_generic_close_and_cleanup bfd_true
224 1.1 skrll #define _bfd_generic_bfd_free_cached_info bfd_true
225 1.1 skrll extern bfd_boolean _bfd_generic_new_section_hook
226 1.1 skrll (bfd *, asection *);
227 1.1 skrll extern bfd_boolean _bfd_generic_get_section_contents
228 1.1 skrll (bfd *, asection *, void *, file_ptr, bfd_size_type);
229 1.1 skrll extern bfd_boolean _bfd_generic_get_section_contents_in_window
230 1.1 skrll (bfd *, asection *, bfd_window *, file_ptr, bfd_size_type);
231 1.1 skrll
232 1.1 skrll /* Generic routines to use for BFD_JUMP_TABLE_COPY. Use
233 1.1 skrll BFD_JUMP_TABLE_COPY (_bfd_generic). */
234 1.1 skrll
235 1.1 skrll #define _bfd_generic_bfd_copy_private_bfd_data \
236 1.1 skrll ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
237 1.1 skrll #define _bfd_generic_bfd_merge_private_bfd_data \
238 1.1 skrll ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
239 1.1 skrll #define _bfd_generic_bfd_set_private_flags \
240 1.1 skrll ((bfd_boolean (*) (bfd *, flagword)) bfd_true)
241 1.1 skrll #define _bfd_generic_bfd_copy_private_section_data \
242 1.1 skrll ((bfd_boolean (*) (bfd *, asection *, bfd *, asection *)) bfd_true)
243 1.1 skrll #define _bfd_generic_bfd_copy_private_symbol_data \
244 1.1 skrll ((bfd_boolean (*) (bfd *, asymbol *, bfd *, asymbol *)) bfd_true)
245 1.1 skrll #define _bfd_generic_bfd_copy_private_header_data \
246 1.1 skrll ((bfd_boolean (*) (bfd *, bfd *)) bfd_true)
247 1.1 skrll #define _bfd_generic_bfd_print_private_bfd_data \
248 1.1 skrll ((bfd_boolean (*) (bfd *, void *)) bfd_true)
249 1.1 skrll
250 1.1 skrll extern bfd_boolean _bfd_generic_init_private_section_data
251 1.1 skrll (bfd *, asection *, bfd *, asection *, struct bfd_link_info *);
252 1.1 skrll
253 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_CORE when there is no core file
254 1.1 skrll support. Use BFD_JUMP_TABLE_CORE (_bfd_nocore). */
255 1.1 skrll
256 1.1 skrll extern char *_bfd_nocore_core_file_failing_command
257 1.1 skrll (bfd *);
258 1.1 skrll extern int _bfd_nocore_core_file_failing_signal
259 1.1 skrll (bfd *);
260 1.1 skrll extern bfd_boolean _bfd_nocore_core_file_matches_executable_p
261 1.1 skrll (bfd *, bfd *);
262 1.1 skrll
263 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_ARCHIVE when there is no archive
264 1.1 skrll file support. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive). */
265 1.1 skrll
266 1.1 skrll #define _bfd_noarchive_slurp_armap bfd_false
267 1.1 skrll #define _bfd_noarchive_slurp_extended_name_table bfd_false
268 1.1 skrll #define _bfd_noarchive_construct_extended_name_table \
269 1.1 skrll ((bfd_boolean (*) (bfd *, char **, bfd_size_type *, const char **)) \
270 1.1 skrll bfd_false)
271 1.1 skrll #define _bfd_noarchive_truncate_arname \
272 1.1 skrll ((void (*) (bfd *, const char *, char *)) bfd_void)
273 1.1 skrll #define _bfd_noarchive_write_armap \
274 1.1 skrll ((bfd_boolean (*) (bfd *, unsigned int, struct orl *, unsigned int, int)) \
275 1.1 skrll bfd_false)
276 1.1 skrll #define _bfd_noarchive_read_ar_hdr bfd_nullvoidptr
277 1.1 skrll #define _bfd_noarchive_openr_next_archived_file \
278 1.1 skrll ((bfd *(*) (bfd *, bfd *)) bfd_nullvoidptr)
279 1.1 skrll #define _bfd_noarchive_get_elt_at_index \
280 1.1 skrll ((bfd *(*) (bfd *, symindex)) bfd_nullvoidptr)
281 1.1 skrll #define _bfd_noarchive_generic_stat_arch_elt bfd_generic_stat_arch_elt
282 1.1 skrll #define _bfd_noarchive_update_armap_timestamp bfd_false
283 1.1 skrll
284 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get BSD style
285 1.1 skrll archives. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd). */
286 1.1 skrll
287 1.1 skrll #define _bfd_archive_bsd_slurp_armap bfd_slurp_bsd_armap
288 1.1 skrll #define _bfd_archive_bsd_slurp_extended_name_table \
289 1.1 skrll _bfd_slurp_extended_name_table
290 1.1 skrll extern bfd_boolean _bfd_archive_bsd_construct_extended_name_table
291 1.1 skrll (bfd *, char **, bfd_size_type *, const char **);
292 1.1 skrll #define _bfd_archive_bsd_truncate_arname bfd_bsd_truncate_arname
293 1.1 skrll #define _bfd_archive_bsd_write_armap bsd_write_armap
294 1.1 skrll #define _bfd_archive_bsd_read_ar_hdr _bfd_generic_read_ar_hdr
295 1.1 skrll #define _bfd_archive_bsd_openr_next_archived_file \
296 1.1 skrll bfd_generic_openr_next_archived_file
297 1.1 skrll #define _bfd_archive_bsd_get_elt_at_index _bfd_generic_get_elt_at_index
298 1.1 skrll #define _bfd_archive_bsd_generic_stat_arch_elt \
299 1.1 skrll bfd_generic_stat_arch_elt
300 1.1 skrll extern bfd_boolean _bfd_archive_bsd_update_armap_timestamp
301 1.1 skrll (bfd *);
302 1.1 skrll
303 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get COFF style
304 1.1 skrll archives. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff). */
305 1.1 skrll
306 1.1 skrll #define _bfd_archive_coff_slurp_armap bfd_slurp_coff_armap
307 1.1 skrll #define _bfd_archive_coff_slurp_extended_name_table \
308 1.1 skrll _bfd_slurp_extended_name_table
309 1.1 skrll extern bfd_boolean _bfd_archive_coff_construct_extended_name_table
310 1.1 skrll (bfd *, char **, bfd_size_type *, const char **);
311 1.1 skrll #define _bfd_archive_coff_truncate_arname bfd_dont_truncate_arname
312 1.1 skrll #define _bfd_archive_coff_write_armap coff_write_armap
313 1.1 skrll #define _bfd_archive_coff_read_ar_hdr _bfd_generic_read_ar_hdr
314 1.1 skrll #define _bfd_archive_coff_openr_next_archived_file \
315 1.1 skrll bfd_generic_openr_next_archived_file
316 1.1 skrll #define _bfd_archive_coff_get_elt_at_index _bfd_generic_get_elt_at_index
317 1.1 skrll #define _bfd_archive_coff_generic_stat_arch_elt \
318 1.1 skrll bfd_generic_stat_arch_elt
319 1.1 skrll #define _bfd_archive_coff_update_armap_timestamp bfd_true
320 1.1 skrll
321 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol
322 1.1 skrll support. Use BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols). */
323 1.1 skrll
324 1.1 skrll #define _bfd_nosymbols_get_symtab_upper_bound _bfd_n1
325 1.1 skrll #define _bfd_nosymbols_canonicalize_symtab \
326 1.1 skrll ((long (*) (bfd *, asymbol **)) _bfd_n1)
327 1.1 skrll #define _bfd_nosymbols_make_empty_symbol _bfd_generic_make_empty_symbol
328 1.1 skrll #define _bfd_nosymbols_print_symbol \
329 1.1 skrll ((void (*) (bfd *, void *, asymbol *, bfd_print_symbol_type)) bfd_void)
330 1.1 skrll #define _bfd_nosymbols_get_symbol_info \
331 1.1 skrll ((void (*) (bfd *, asymbol *, symbol_info *)) bfd_void)
332 1.1 skrll #define _bfd_nosymbols_bfd_is_local_label_name \
333 1.1 skrll ((bfd_boolean (*) (bfd *, const char *)) bfd_false)
334 1.1 skrll #define _bfd_nosymbols_bfd_is_target_special_symbol \
335 1.1 skrll ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
336 1.1 skrll #define _bfd_nosymbols_get_lineno \
337 1.1 skrll ((alent *(*) (bfd *, asymbol *)) bfd_nullvoidptr)
338 1.1 skrll #define _bfd_nosymbols_find_nearest_line \
339 1.1 skrll ((bfd_boolean (*) (bfd *, asection *, asymbol **, bfd_vma, const char **, \
340 1.1 skrll const char **, unsigned int *)) \
341 1.1 skrll bfd_false)
342 1.1 skrll #define _bfd_nosymbols_find_inliner_info \
343 1.1 skrll ((bfd_boolean (*) (bfd *, const char **, const char **, unsigned int *)) \
344 1.1 skrll bfd_false)
345 1.1 skrll #define _bfd_nosymbols_bfd_make_debug_symbol \
346 1.1 skrll ((asymbol *(*) (bfd *, void *, unsigned long)) bfd_nullvoidptr)
347 1.1 skrll #define _bfd_nosymbols_read_minisymbols \
348 1.1 skrll ((long (*) (bfd *, bfd_boolean, void **, unsigned int *)) _bfd_n1)
349 1.1 skrll #define _bfd_nosymbols_minisymbol_to_symbol \
350 1.1 skrll ((asymbol *(*) (bfd *, bfd_boolean, const void *, asymbol *)) \
351 1.1 skrll bfd_nullvoidptr)
352 1.1 skrll
353 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_RELOCS when there is no reloc
354 1.1 skrll support. Use BFD_JUMP_TABLE_RELOCS (_bfd_norelocs). */
355 1.1 skrll
356 1.1 skrll extern long _bfd_norelocs_get_reloc_upper_bound (bfd *, asection *);
357 1.1 skrll extern long _bfd_norelocs_canonicalize_reloc (bfd *, asection *,
358 1.1 skrll arelent **, asymbol **);
359 1.1 skrll #define _bfd_norelocs_bfd_reloc_type_lookup \
360 1.1 skrll ((reloc_howto_type *(*) (bfd *, bfd_reloc_code_real_type)) bfd_nullvoidptr)
361 1.1 skrll #define _bfd_norelocs_bfd_reloc_name_lookup \
362 1.1 skrll ((reloc_howto_type *(*) (bfd *, const char *)) bfd_nullvoidptr)
363 1.1 skrll
364 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_WRITE for targets which may not
365 1.1 skrll be written. Use BFD_JUMP_TABLE_WRITE (_bfd_nowrite). */
366 1.1 skrll
367 1.1 skrll #define _bfd_nowrite_set_arch_mach \
368 1.1 skrll ((bfd_boolean (*) (bfd *, enum bfd_architecture, unsigned long)) \
369 1.1 skrll bfd_false)
370 1.1 skrll #define _bfd_nowrite_set_section_contents \
371 1.1 skrll ((bfd_boolean (*) (bfd *, asection *, const void *, file_ptr, bfd_size_type)) \
372 1.1 skrll bfd_false)
373 1.1 skrll
374 1.1 skrll /* Generic routines to use for BFD_JUMP_TABLE_WRITE. Use
375 1.1 skrll BFD_JUMP_TABLE_WRITE (_bfd_generic). */
376 1.1 skrll
377 1.1 skrll #define _bfd_generic_set_arch_mach bfd_default_set_arch_mach
378 1.1 skrll extern bfd_boolean _bfd_generic_set_section_contents
379 1.1 skrll (bfd *, asection *, const void *, file_ptr, bfd_size_type);
380 1.1 skrll
381 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_LINK for targets which do not
382 1.1 skrll support linking. Use BFD_JUMP_TABLE_LINK (_bfd_nolink). */
383 1.1 skrll
384 1.1 skrll #define _bfd_nolink_sizeof_headers \
385 1.1 skrll ((int (*) (bfd *, struct bfd_link_info *)) bfd_0)
386 1.1 skrll #define _bfd_nolink_bfd_get_relocated_section_contents \
387 1.1 skrll ((bfd_byte *(*) (bfd *, struct bfd_link_info *, struct bfd_link_order *, \
388 1.1 skrll bfd_byte *, bfd_boolean, asymbol **)) \
389 1.1 skrll bfd_nullvoidptr)
390 1.1 skrll #define _bfd_nolink_bfd_relax_section \
391 1.1 skrll ((bfd_boolean (*) \
392 1.1 skrll (bfd *, asection *, struct bfd_link_info *, bfd_boolean *)) \
393 1.1 skrll bfd_false)
394 1.1 skrll #define _bfd_nolink_bfd_gc_sections \
395 1.1 skrll ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
396 1.1 skrll bfd_false)
397 1.1 skrll #define _bfd_nolink_bfd_merge_sections \
398 1.1 skrll ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) \
399 1.1 skrll bfd_false)
400 1.1 skrll #define _bfd_nolink_bfd_is_group_section \
401 1.1 skrll ((bfd_boolean (*) (bfd *, const struct bfd_section *)) \
402 1.1 skrll bfd_false)
403 1.1 skrll #define _bfd_nolink_bfd_discard_group \
404 1.1 skrll ((bfd_boolean (*) (bfd *, struct bfd_section *)) \
405 1.1 skrll bfd_false)
406 1.1 skrll #define _bfd_nolink_bfd_link_hash_table_create \
407 1.1 skrll ((struct bfd_link_hash_table *(*) (bfd *)) bfd_nullvoidptr)
408 1.1 skrll #define _bfd_nolink_bfd_link_hash_table_free \
409 1.1 skrll ((void (*) (struct bfd_link_hash_table *)) bfd_void)
410 1.1 skrll #define _bfd_nolink_bfd_link_add_symbols \
411 1.1 skrll ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
412 1.1 skrll #define _bfd_nolink_bfd_link_just_syms \
413 1.1 skrll ((void (*) (asection *, struct bfd_link_info *)) bfd_void)
414 1.1 skrll #define _bfd_nolink_bfd_final_link \
415 1.1 skrll ((bfd_boolean (*) (bfd *, struct bfd_link_info *)) bfd_false)
416 1.1 skrll #define _bfd_nolink_bfd_link_split_section \
417 1.1 skrll ((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false)
418 1.1 skrll #define _bfd_nolink_section_already_linked \
419 1.1 skrll ((void (*) (bfd *, struct bfd_section *, struct bfd_link_info *)) bfd_void)
420 1.1 skrll
421 1.1 skrll /* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not
422 1.1 skrll have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC
423 1.1 skrll (_bfd_nodynamic). */
424 1.1 skrll
425 1.1 skrll #define _bfd_nodynamic_get_dynamic_symtab_upper_bound _bfd_n1
426 1.1 skrll #define _bfd_nodynamic_canonicalize_dynamic_symtab \
427 1.1 skrll ((long (*) (bfd *, asymbol **)) _bfd_n1)
428 1.1 skrll #define _bfd_nodynamic_get_synthetic_symtab \
429 1.1 skrll ((long (*) (bfd *, long, asymbol **, long, asymbol **, asymbol **)) _bfd_n1)
430 1.1 skrll #define _bfd_nodynamic_get_dynamic_reloc_upper_bound _bfd_n1
431 1.1 skrll #define _bfd_nodynamic_canonicalize_dynamic_reloc \
432 1.1 skrll ((long (*) (bfd *, arelent **, asymbol **)) _bfd_n1)
433 1.1 skrll
434 1.1 skrll /* Generic routine to determine of the given symbol is a local
436 1.1 skrll label. */
437 1.1 skrll extern bfd_boolean bfd_generic_is_local_label_name
438 1.1 skrll (bfd *, const char *);
439 1.1 skrll
440 1.1 skrll /* Generic minisymbol routines. */
441 1.1 skrll extern long _bfd_generic_read_minisymbols
442 1.1 skrll (bfd *, bfd_boolean, void **, unsigned int *);
443 1.1 skrll extern asymbol *_bfd_generic_minisymbol_to_symbol
444 1.1 skrll (bfd *, bfd_boolean, const void *, asymbol *);
445 1.1 skrll
446 1.1 skrll /* Find the nearest line using .stab/.stabstr sections. */
447 1.1 skrll extern bfd_boolean _bfd_stab_section_find_nearest_line
448 1.1 skrll (bfd *, asymbol **, asection *, bfd_vma, bfd_boolean *,
449 1.1 skrll const char **, const char **, unsigned int *, void **);
450 1.1 skrll
451 1.1 skrll /* Find the nearest line using DWARF 1 debugging information. */
452 1.1 skrll extern bfd_boolean _bfd_dwarf1_find_nearest_line
453 1.1 skrll (bfd *, asection *, asymbol **, bfd_vma, const char **,
454 1.1 skrll const char **, unsigned int *);
455 1.1 skrll
456 1.1 skrll /* Find the nearest line using DWARF 2 debugging information. */
457 1.1 skrll extern bfd_boolean _bfd_dwarf2_find_nearest_line
458 1.1 skrll (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **,
459 1.1 skrll unsigned int *, unsigned int, void **);
460 1.1 skrll
461 1.1 skrll /* Find the line using DWARF 2 debugging information. */
462 1.1 skrll extern bfd_boolean _bfd_dwarf2_find_line
463 1.1 skrll (bfd *, asymbol **, asymbol *, const char **,
464 1.1 skrll unsigned int *, unsigned int, void **);
465 1.1 skrll
466 1.1 skrll bfd_boolean _bfd_generic_find_line
467 1.1 skrll (bfd *, asymbol **, asymbol *, const char **, unsigned int *);
468 1.1 skrll
469 1.1 skrll /* Find inliner info after calling bfd_find_nearest_line. */
470 1.1 skrll extern bfd_boolean _bfd_dwarf2_find_inliner_info
471 1.1 skrll (bfd *, const char **, const char **, unsigned int *, void **);
472 1.1 skrll
473 1.1 skrll /* Create a new section entry. */
474 1.1 skrll extern struct bfd_hash_entry *bfd_section_hash_newfunc
475 1.1 skrll (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
476 1.1 skrll
477 1.1 skrll /* A routine to create entries for a bfd_link_hash_table. */
478 1.1 skrll extern struct bfd_hash_entry *_bfd_link_hash_newfunc
479 1.1 skrll (struct bfd_hash_entry *entry, struct bfd_hash_table *table,
480 1.1 skrll const char *string);
481 1.1 skrll
482 1.1 skrll /* Initialize a bfd_link_hash_table. */
483 1.1 skrll extern bfd_boolean _bfd_link_hash_table_init
484 1.1 skrll (struct bfd_link_hash_table *, bfd *,
485 1.1 skrll struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
486 1.1 skrll struct bfd_hash_table *,
487 1.1 skrll const char *),
488 1.1 skrll unsigned int);
489 1.1 skrll
490 1.1 skrll /* Generic link hash table creation routine. */
491 1.1 skrll extern struct bfd_link_hash_table *_bfd_generic_link_hash_table_create
492 1.1 skrll (bfd *);
493 1.1 skrll
494 1.1 skrll /* Generic link hash table destruction routine. */
495 1.1 skrll extern void _bfd_generic_link_hash_table_free
496 1.1 skrll (struct bfd_link_hash_table *);
497 1.1 skrll
498 1.1 skrll /* Generic add symbol routine. */
499 1.1 skrll extern bfd_boolean _bfd_generic_link_add_symbols
500 1.1 skrll (bfd *, struct bfd_link_info *);
501 1.1 skrll
502 1.1 skrll /* Generic add symbol routine. This version is used by targets for
503 1.1 skrll which the linker must collect constructors and destructors by name,
504 1.1 skrll as the collect2 program does. */
505 1.1 skrll extern bfd_boolean _bfd_generic_link_add_symbols_collect
506 1.1 skrll (bfd *, struct bfd_link_info *);
507 1.1 skrll
508 1.1 skrll /* Generic archive add symbol routine. */
509 1.1 skrll extern bfd_boolean _bfd_generic_link_add_archive_symbols
510 1.1 skrll (bfd *, struct bfd_link_info *,
511 1.1 skrll bfd_boolean (*) (bfd *, struct bfd_link_info *, bfd_boolean *));
512 1.1 skrll
513 1.1 skrll /* Forward declaration to avoid prototype errors. */
514 1.1 skrll typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
515 1.1 skrll
516 1.1 skrll /* Generic routine to add a single symbol. */
517 1.1 skrll extern bfd_boolean _bfd_generic_link_add_one_symbol
518 1.1 skrll (struct bfd_link_info *, bfd *, const char *name, flagword,
519 1.1 skrll asection *, bfd_vma, const char *, bfd_boolean copy,
520 1.1 skrll bfd_boolean constructor, struct bfd_link_hash_entry **);
521 1.1 skrll
522 1.1 skrll /* Generic routine to mark section as supplying symbols only. */
523 1.1 skrll extern void _bfd_generic_link_just_syms
524 1.1 skrll (asection *, struct bfd_link_info *);
525 1.1 skrll
526 1.1 skrll /* Generic link routine. */
527 1.1 skrll extern bfd_boolean _bfd_generic_final_link
528 1.1 skrll (bfd *, struct bfd_link_info *);
529 1.1 skrll
530 1.1 skrll extern bfd_boolean _bfd_generic_link_split_section
531 1.1 skrll (bfd *, struct bfd_section *);
532 1.1 skrll
533 1.1 skrll extern void _bfd_generic_section_already_linked
534 1.1 skrll (bfd *, struct bfd_section *, struct bfd_link_info *);
535 1.1 skrll
536 1.1 skrll /* Generic reloc_link_order processing routine. */
537 1.1 skrll extern bfd_boolean _bfd_generic_reloc_link_order
538 1.1 skrll (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
539 1.1 skrll
540 1.1 skrll /* Default link order processing routine. */
541 1.1 skrll extern bfd_boolean _bfd_default_link_order
542 1.1 skrll (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);
543 1.1 skrll
544 1.1 skrll /* Count the number of reloc entries in a link order list. */
545 1.1 skrll extern unsigned int _bfd_count_link_order_relocs
546 1.1 skrll (struct bfd_link_order *);
547 1.1 skrll
548 1.1 skrll /* Final link relocation routine. */
549 1.1 skrll extern bfd_reloc_status_type _bfd_final_link_relocate
550 1.1 skrll (reloc_howto_type *, bfd *, asection *, bfd_byte *,
551 1.1 skrll bfd_vma, bfd_vma, bfd_vma);
552 1.1 skrll
553 1.1 skrll /* Relocate a particular location by a howto and a value. */
554 1.1 skrll extern bfd_reloc_status_type _bfd_relocate_contents
555 1.1 skrll (reloc_howto_type *, bfd *, bfd_vma, bfd_byte *);
556 1.1 skrll
557 1.1 skrll /* Clear a given location using a given howto. */
558 1.1 skrll extern void _bfd_clear_contents (reloc_howto_type *howto, bfd *input_bfd,
559 1.1 skrll bfd_byte *location);
560 1.1 skrll
561 1.1 skrll /* Link stabs in sections in the first pass. */
562 1.1 skrll
563 1.1 skrll extern bfd_boolean _bfd_link_section_stabs
564 1.1 skrll (bfd *, struct stab_info *, asection *, asection *, void **,
565 1.1 skrll bfd_size_type *);
566 1.1 skrll
567 1.1 skrll /* Eliminate stabs for discarded functions and symbols. */
568 1.1 skrll extern bfd_boolean _bfd_discard_section_stabs
569 1.1 skrll (bfd *, asection *, void *, bfd_boolean (*) (bfd_vma, void *), void *);
570 1.1 skrll
571 1.1 skrll /* Write out the .stab section when linking stabs in sections. */
572 1.1 skrll
573 1.1 skrll extern bfd_boolean _bfd_write_section_stabs
574 1.1 skrll (bfd *, struct stab_info *, asection *, void **, bfd_byte *);
575 1.1 skrll
576 1.1 skrll /* Write out the .stabstr string table when linking stabs in sections. */
577 1.1 skrll
578 1.1 skrll extern bfd_boolean _bfd_write_stab_strings
579 1.1 skrll (bfd *, struct stab_info *);
580 1.1 skrll
581 1.1 skrll /* Find an offset within a .stab section when linking stabs in
582 1.1 skrll sections. */
583 1.1 skrll
584 1.1 skrll extern bfd_vma _bfd_stab_section_offset
585 1.1 skrll (asection *, void *, bfd_vma);
586 1.1 skrll
587 1.1 skrll /* Register a SEC_MERGE section as a candidate for merging. */
588 1.1 skrll
589 1.1 skrll extern bfd_boolean _bfd_add_merge_section
590 1.1 skrll (bfd *, void **, asection *, void **);
591 1.1 skrll
592 1.1 skrll /* Attempt to merge SEC_MERGE sections. */
593 1.1 skrll
594 1.1 skrll extern bfd_boolean _bfd_merge_sections
595 1.1 skrll (bfd *, struct bfd_link_info *, void *, void (*) (bfd *, asection *));
596 1.1 skrll
597 1.1 skrll /* Write out a merged section. */
598 1.1 skrll
599 1.1 skrll extern bfd_boolean _bfd_write_merged_section
600 1.1 skrll (bfd *, asection *, void *);
601 1.1 skrll
602 1.1 skrll /* Find an offset within a modified SEC_MERGE section. */
603 1.1 skrll
604 1.1 skrll extern bfd_vma _bfd_merged_section_offset
605 1.1 skrll (bfd *, asection **, void *, bfd_vma);
606 1.1 skrll
607 1.1 skrll /* Create a string table. */
608 1.1 skrll extern struct bfd_strtab_hash *_bfd_stringtab_init
609 1.1 skrll (void);
610 1.1 skrll
611 1.1 skrll /* Create an XCOFF .debug section style string table. */
612 1.1 skrll extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init
613 1.1 skrll (void);
614 1.1 skrll
615 1.1 skrll /* Free a string table. */
616 1.1 skrll extern void _bfd_stringtab_free
617 1.1 skrll (struct bfd_strtab_hash *);
618 1.1 skrll
619 1.1 skrll /* Get the size of a string table. */
620 1.1 skrll extern bfd_size_type _bfd_stringtab_size
621 1.1 skrll (struct bfd_strtab_hash *);
622 1.1 skrll
623 1.1 skrll /* Add a string to a string table. */
624 1.1 skrll extern bfd_size_type _bfd_stringtab_add
625 1.1 skrll (struct bfd_strtab_hash *, const char *, bfd_boolean hash, bfd_boolean copy);
626 1.1 skrll
627 1.1 skrll /* Write out a string table. */
628 1.1 skrll extern bfd_boolean _bfd_stringtab_emit
629 1.1 skrll (bfd *, struct bfd_strtab_hash *);
630 1.1 skrll
631 1.1 skrll /* Check that endianness of input and output file match. */
632 1.1 skrll extern bfd_boolean _bfd_generic_verify_endian_match
633 1.1 skrll (bfd *, bfd *);
634 1.1 skrll
635 1.1 skrll /* Macros to tell if bfds are read or write enabled.
637 1.1 skrll
638 1.1 skrll Note that bfds open for read may be scribbled into if the fd passed
639 1.1 skrll to bfd_fdopenr is actually open both for read and write
640 1.1 skrll simultaneously. However an output bfd will never be open for
641 1.1 skrll read. Therefore sometimes you want to check bfd_read_p or
642 1.1 skrll !bfd_read_p, and only sometimes bfd_write_p.
643 1.1 skrll */
644 1.1 skrll
645 1.1 skrll #define bfd_read_p(abfd) \
646 1.1 skrll ((abfd)->direction == read_direction || (abfd)->direction == both_direction)
647 1.1 skrll #define bfd_write_p(abfd) \
648 1.1 skrll ((abfd)->direction == write_direction || (abfd)->direction == both_direction)
649 1.1 skrll
650 1.1 skrll void bfd_assert
651 1.1 skrll (const char*,int);
652 1.1 skrll
653 1.1 skrll #define BFD_ASSERT(x) \
654 1.1 skrll do { if (!(x)) bfd_assert(__FILE__,__LINE__); } while (0)
655 1.1 skrll
656 1.1 skrll #define BFD_FAIL() \
657 1.1 skrll do { bfd_assert(__FILE__,__LINE__); } while (0)
658 1.1 skrll
659 1.1 skrll extern void _bfd_abort
660 1.1 skrll (const char *, int, const char *) ATTRIBUTE_NORETURN;
661 1.1 skrll
662 1.1 skrll /* if gcc >= 2.6, we can give a function name, too */
663 1.1 skrll #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
664 1.1 skrll #define __PRETTY_FUNCTION__ ((char *) NULL)
665 1.1 skrll #endif
666 1.1 skrll
667 1.1 skrll #undef abort
668 1.1 skrll #define abort() _bfd_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__)
669 1.1 skrll
670 1.1 skrll /* Manipulate a system FILE but using BFD's "file_ptr", rather than
671 1.1 skrll the system "off_t" or "off64_t", as the offset. */
672 1.1 skrll extern file_ptr real_ftell (FILE *file);
673 1.1 skrll extern int real_fseek (FILE *file, file_ptr offset, int whence);
674 1.1 skrll extern FILE *real_fopen (const char *filename, const char *modes);
675 1.1 skrll
676 1.1 skrll /* List of supported target vectors, and the default vector (if
677 1.1 skrll bfd_default_vector[0] is NULL, there is no default). */
678 1.1 skrll extern const bfd_target * const *bfd_target_vector;
679 1.1 skrll extern const bfd_target *bfd_default_vector[];
680 1.1 skrll
681 1.1 skrll /* List of associated target vectors. */
682 1.1 skrll extern const bfd_target * const *bfd_associated_vector;
683 1.1 skrll
684 1.1 skrll /* Functions shared by the ECOFF and MIPS ELF backends, which have no
685 1.1 skrll other common header files. */
686 1.1 skrll
687 1.1 skrll #if defined(__STDC__) || defined(ALMOST_STDC)
688 1.1 skrll struct ecoff_find_line;
689 1.1 skrll #endif
690 1.1 skrll
691 1.1 skrll extern bfd_boolean _bfd_ecoff_locate_line
692 1.1 skrll (bfd *, asection *, bfd_vma, struct ecoff_debug_info * const,
693 1.1 skrll const struct ecoff_debug_swap * const, struct ecoff_find_line *,
694 1.1 skrll const char **, const char **, unsigned int *);
695 1.1 skrll extern bfd_boolean _bfd_ecoff_get_accumulated_pdr
696 1.1 skrll (void *, bfd_byte *);
697 1.1 skrll extern bfd_boolean _bfd_ecoff_get_accumulated_sym
698 1.1 skrll (void *, bfd_byte *);
699 1.1 skrll extern bfd_boolean _bfd_ecoff_get_accumulated_ss
700 1.1 skrll (void *, bfd_byte *);
701 1.1 skrll
702 1.1 skrll extern bfd_vma _bfd_get_gp_value
703 1.1 skrll (bfd *);
704 1.1 skrll extern void _bfd_set_gp_value
705 1.1 skrll (bfd *, bfd_vma);
706 1.1 skrll
707 1.1 skrll /* Function shared by the COFF and ELF SH backends, which have no
708 1.1 skrll other common header files. */
709 1.1 skrll
710 1.1 skrll #ifndef _bfd_sh_align_load_span
711 1.1 skrll extern bfd_boolean _bfd_sh_align_load_span
712 1.1 skrll (bfd *, asection *, bfd_byte *,
713 1.1 skrll bfd_boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma),
714 1.1 skrll void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, bfd_boolean *);
715 1.1 skrll #endif
716 1.1 skrll
717 1.1 skrll /* This is the shape of the elements inside the already_linked hash
718 1.1 skrll table. It maps a name onto a list of already_linked elements with
719 1.1 skrll the same name. */
720 1.1 skrll
721 1.1 skrll struct bfd_section_already_linked_hash_entry
722 1.1 skrll {
723 1.1 skrll struct bfd_hash_entry root;
724 1.1 skrll struct bfd_section_already_linked *entry;
725 1.1 skrll };
726 1.1 skrll
727 1.1 skrll struct bfd_section_already_linked
728 1.1 skrll {
729 1.1 skrll struct bfd_section_already_linked *next;
730 1.1 skrll asection *sec;
731 1.1 skrll };
732 1.1 skrll
733 1.1 skrll extern struct bfd_section_already_linked_hash_entry *
734 1.1 skrll bfd_section_already_linked_table_lookup (const char *);
735 1.1 skrll extern bfd_boolean bfd_section_already_linked_table_insert
736 1.1 skrll (struct bfd_section_already_linked_hash_entry *, asection *);
737 1.1 skrll extern void bfd_section_already_linked_table_traverse
738 1.1 skrll (bfd_boolean (*) (struct bfd_section_already_linked_hash_entry *,
739 1.1 skrll void *), void *);
740 1.1 skrll
741 extern bfd_vma read_unsigned_leb128 (bfd *, bfd_byte *, unsigned int *);
742 extern bfd_signed_vma read_signed_leb128 (bfd *, bfd_byte *, unsigned int *);
743
744