elfxx-target.h revision 104834
1118611Snjl/* Target definitions for NN-bit ELF
2118611Snjl   Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3118611Snjl   Free Software Foundation, Inc.
4118611Snjl
5118611SnjlThis file is part of BFD, the Binary File Descriptor library.
6118611Snjl
7118611SnjlThis program is free software; you can redistribute it and/or modify
8118611Snjlit under the terms of the GNU General Public License as published by
9118611Snjlthe Free Software Foundation; either version 2 of the License, or
10118611Snjl(at your option) any later version.
11193529Sjkim
12118611SnjlThis program is distributed in the hope that it will be useful,
13118611Snjlbut WITHOUT ANY WARRANTY; without even the implied warranty of
14118611SnjlMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15118611SnjlGNU General Public License for more details.
16118611Snjl
17118611SnjlYou should have received a copy of the GNU General Public License
18118611Snjlalong with this program; if not, write to the Free Software
19118611SnjlFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20118611Snjl
21118611Snjl/* This structure contains everything that BFD knows about a target.
22118611Snjl   It includes things like its byte order, name, what routines to call
23118611Snjl   to do various operations, etc.  Every BFD points to a target structure
24118611Snjl   with its "xvec" member.
25118611Snjl
26118611Snjl   There are two such structures here:  one for big-endian machines and
27118611Snjl   one for little-endian machines.   */
28118611Snjl
29118611Snjl#define	bfd_elfNN_close_and_cleanup _bfd_elf_close_and_cleanup
30118611Snjl#define bfd_elfNN_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
31118611Snjl#ifndef bfd_elfNN_get_section_contents
32118611Snjl#define bfd_elfNN_get_section_contents _bfd_generic_get_section_contents
33118611Snjl#endif
34118611Snjl
35118611Snjl#define bfd_elfNN_canonicalize_dynamic_symtab _bfd_elf_canonicalize_dynamic_symtab
36118611Snjl#define bfd_elfNN_canonicalize_reloc	_bfd_elf_canonicalize_reloc
37118611Snjl#ifndef bfd_elfNN_find_nearest_line
38118611Snjl#define bfd_elfNN_find_nearest_line	_bfd_elf_find_nearest_line
39118611Snjl#endif
40118611Snjl#define bfd_elfNN_read_minisymbols	_bfd_elf_read_minisymbols
41118611Snjl#define bfd_elfNN_minisymbol_to_symbol	_bfd_elf_minisymbol_to_symbol
42118611Snjl#define bfd_elfNN_get_dynamic_symtab_upper_bound _bfd_elf_get_dynamic_symtab_upper_bound
43118611Snjl#define bfd_elfNN_get_lineno		_bfd_elf_get_lineno
44118611Snjl#ifndef bfd_elfNN_get_reloc_upper_bound
45118611Snjl#define bfd_elfNN_get_reloc_upper_bound _bfd_elf_get_reloc_upper_bound
46118611Snjl#endif
47118611Snjl#ifndef bfd_elfNN_get_symbol_info
48118611Snjl#define bfd_elfNN_get_symbol_info	_bfd_elf_get_symbol_info
49118611Snjl#endif
50118611Snjl#define bfd_elfNN_get_symtab		_bfd_elf_get_symtab
51118611Snjl#define bfd_elfNN_get_symtab_upper_bound _bfd_elf_get_symtab_upper_bound
52118611Snjl#if 0 /* done in elf-bfd.h */
53118611Snjl#define bfd_elfNN_link_record_dynamic_symbol _bfd_elf_link_record_dynamic_symbol
54118611Snjl#endif
55118611Snjl#define bfd_elfNN_make_empty_symbol	_bfd_elf_make_empty_symbol
56118611Snjl#define bfd_elfNN_new_section_hook	_bfd_elf_new_section_hook
57118611Snjl#define bfd_elfNN_set_arch_mach		_bfd_elf_set_arch_mach
58118611Snjl#ifndef bfd_elfNN_set_section_contents
59118611Snjl#define bfd_elfNN_set_section_contents	_bfd_elf_set_section_contents
60118611Snjl#endif
61118611Snjl#define bfd_elfNN_sizeof_headers	_bfd_elf_sizeof_headers
62118611Snjl#define bfd_elfNN_write_object_contents _bfd_elf_write_object_contents
63118611Snjl#define bfd_elfNN_write_corefile_contents _bfd_elf_write_corefile_contents
64118611Snjl
65118611Snjl#define bfd_elfNN_get_section_contents_in_window \
66118611Snjl  _bfd_generic_get_section_contents_in_window
67118611Snjl
68118611Snjl#ifndef elf_backend_got_symbol_offset
69118611Snjl#define elf_backend_got_symbol_offset (bfd_vma) 0
70118611Snjl#endif
71118611Snjl#ifndef elf_backend_can_refcount
72118611Snjl#define elf_backend_can_refcount 0
73118611Snjl#endif
74118611Snjl#ifndef elf_backend_want_got_plt
75118611Snjl#define elf_backend_want_got_plt 0
76118611Snjl#endif
77118611Snjl#ifndef elf_backend_plt_readonly
78118611Snjl#define elf_backend_plt_readonly 0
79118611Snjl#endif
80118611Snjl#ifndef elf_backend_want_plt_sym
81118611Snjl#define elf_backend_want_plt_sym 0
82118611Snjl#endif
83118611Snjl#ifndef elf_backend_plt_not_loaded
84118611Snjl#define elf_backend_plt_not_loaded 0
85118611Snjl#endif
86118611Snjl#ifndef elf_backend_plt_alignment
87118611Snjl#define elf_backend_plt_alignment 2
88118611Snjl#endif
89118611Snjl#ifndef elf_backend_want_dynbss
90118611Snjl#define elf_backend_want_dynbss 1
91118611Snjl#endif
92118611Snjl#ifndef elf_backend_want_p_paddr_set_to_zero
93118611Snjl#define elf_backend_want_p_paddr_set_to_zero 0
94118611Snjl#endif
95118611Snjl
96118611Snjl#define bfd_elfNN_bfd_debug_info_start	bfd_void
97118611Snjl#define bfd_elfNN_bfd_debug_info_end	bfd_void
98118611Snjl#define bfd_elfNN_bfd_debug_info_accumulate \
99118611Snjl  (void (*) PARAMS ((bfd*, struct sec *))) bfd_void
100118611Snjl
101118611Snjl#ifndef bfd_elfNN_bfd_get_relocated_section_contents
102118611Snjl#define bfd_elfNN_bfd_get_relocated_section_contents \
103118611Snjl bfd_generic_get_relocated_section_contents
104118611Snjl#endif
105118611Snjl
106118611Snjl#ifndef bfd_elfNN_bfd_relax_section
107118611Snjl#define bfd_elfNN_bfd_relax_section bfd_generic_relax_section
108118611Snjl#endif
109118611Snjl
110118611Snjl#ifndef elf_backend_can_gc_sections
111118611Snjl#define elf_backend_can_gc_sections 0
112118611Snjl#endif
113118611Snjl#ifndef elf_backend_can_refcount
114118611Snjl#define elf_backend_can_refcount 0
115118611Snjl#endif
116118611Snjl#ifndef elf_backend_want_got_sym
117118611Snjl#define elf_backend_want_got_sym 1
118151937Sjkim#endif
119193529Sjkim#ifndef elf_backend_gc_mark_hook
120193529Sjkim#define elf_backend_gc_mark_hook	NULL
121193529Sjkim#endif
122118611Snjl#ifndef elf_backend_gc_sweep_hook
123118611Snjl#define elf_backend_gc_sweep_hook	NULL
124118611Snjl#endif
125118611Snjl#ifndef bfd_elfNN_bfd_gc_sections
126118611Snjl#define bfd_elfNN_bfd_gc_sections _bfd_elfNN_gc_sections
127118611Snjl#endif
128151937Sjkim
129118611Snjl#ifndef bfd_elfNN_bfd_merge_sections
130151937Sjkim#define bfd_elfNN_bfd_merge_sections \
131151937Sjkim  _bfd_elf_merge_sections
132151937Sjkim#endif
133151937Sjkim
134151937Sjkim#ifndef bfd_elfNN_bfd_discard_group
135151937Sjkim#define bfd_elfNN_bfd_discard_group bfd_elf_discard_group
136151937Sjkim#endif
137151937Sjkim
138151937Sjkim#ifndef bfd_elfNN_bfd_make_debug_symbol
139151937Sjkim#define bfd_elfNN_bfd_make_debug_symbol \
140151937Sjkim  ((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr)
141151937Sjkim#endif
142151937Sjkim
143151937Sjkim#ifndef bfd_elfNN_bfd_copy_private_symbol_data
144151937Sjkim#define bfd_elfNN_bfd_copy_private_symbol_data \
145151937Sjkim  _bfd_elf_copy_private_symbol_data
146151937Sjkim#endif
147193529Sjkim
148151937Sjkim#ifndef bfd_elfNN_bfd_copy_private_section_data
149151937Sjkim#define bfd_elfNN_bfd_copy_private_section_data \
150151937Sjkim  _bfd_elf_copy_private_section_data
151151937Sjkim#endif
152193529Sjkim#ifndef bfd_elfNN_bfd_copy_private_bfd_data
153193529Sjkim#define bfd_elfNN_bfd_copy_private_bfd_data \
154193529Sjkim  _bfd_elf_copy_private_bfd_data
155193529Sjkim#endif
156193529Sjkim#ifndef bfd_elfNN_bfd_print_private_bfd_data
157151937Sjkim#define bfd_elfNN_bfd_print_private_bfd_data \
158193529Sjkim  _bfd_elf_print_private_bfd_data
159118611Snjl#endif
160118611Snjl#ifndef bfd_elfNN_bfd_merge_private_bfd_data
161118611Snjl#define bfd_elfNN_bfd_merge_private_bfd_data \
162118611Snjl  ((boolean (*) PARAMS ((bfd *, bfd *))) bfd_true)
163151937Sjkim#endif
164118611Snjl#ifndef bfd_elfNN_bfd_set_private_flags
165118611Snjl#define bfd_elfNN_bfd_set_private_flags \
166118611Snjl  ((boolean (*) PARAMS ((bfd *, flagword))) bfd_true)
167118611Snjl#endif
168193529Sjkim#ifndef bfd_elfNN_bfd_is_local_label_name
169118611Snjl#define bfd_elfNN_bfd_is_local_label_name _bfd_elf_is_local_label_name
170118611Snjl#endif
171118611Snjl
172118611Snjl#ifndef bfd_elfNN_get_dynamic_reloc_upper_bound
173118611Snjl#define bfd_elfNN_get_dynamic_reloc_upper_bound \
174118611Snjl  _bfd_elf_get_dynamic_reloc_upper_bound
175118611Snjl#endif
176118611Snjl#ifndef bfd_elfNN_canonicalize_dynamic_reloc
177118611Snjl#define bfd_elfNN_canonicalize_dynamic_reloc \
178118611Snjl  _bfd_elf_canonicalize_dynamic_reloc
179118611Snjl#endif
180118611Snjl
181118611Snjl#ifndef bfd_elfNN_bfd_link_hash_table_free
182118611Snjl#define bfd_elfNN_bfd_link_hash_table_free _bfd_generic_link_hash_table_free
183118611Snjl#endif
184118611Snjl
185118611Snjl#ifdef elf_backend_relocate_section
186118611Snjl#ifndef bfd_elfNN_bfd_link_hash_table_create
187118611Snjl#define bfd_elfNN_bfd_link_hash_table_create _bfd_elf_link_hash_table_create
188118611Snjl#endif
189118611Snjl#else /* ! defined (elf_backend_relocate_section) */
190118611Snjl/* If no backend relocate_section routine, use the generic linker.
191193529Sjkim   Note - this will prevent the port from being able to use some of
192118611Snjl   the other features of the ELF linker, because the generic hash structure
193118611Snjl   does not have the fields needed by the ELF linker.  In particular it
194193529Sjkim   means that linking directly to S-records will not work.  */
195118611Snjl#ifndef bfd_elfNN_bfd_link_hash_table_create
196193529Sjkim#define bfd_elfNN_bfd_link_hash_table_create \
197193529Sjkim  _bfd_generic_link_hash_table_create
198193529Sjkim#endif
199193529Sjkim#ifndef bfd_elfNN_bfd_link_add_symbols
200193529Sjkim#define bfd_elfNN_bfd_link_add_symbols	_bfd_generic_link_add_symbols
201118611Snjl#endif
202118611Snjl#ifndef bfd_elfNN_bfd_final_link
203118611Snjl#define bfd_elfNN_bfd_final_link	_bfd_generic_final_link
204118611Snjl#endif
205118611Snjl#endif /* ! defined (elf_backend_relocate_section) */
206118611Snjl
207118611Snjl#ifndef bfd_elfNN_bfd_link_just_syms
208118611Snjl#define bfd_elfNN_bfd_link_just_syms	_bfd_elf_link_just_syms
209118611Snjl#endif
210118611Snjl
211118611Snjl#ifndef bfd_elfNN_bfd_link_split_section
212151937Sjkim#define bfd_elfNN_bfd_link_split_section _bfd_generic_link_split_section
213118611Snjl#endif
214118611Snjl
215118611Snjl#ifndef bfd_elfNN_archive_p
216118611Snjl#define bfd_elfNN_archive_p bfd_generic_archive_p
217118611Snjl#endif
218118611Snjl
219118611Snjl#ifndef bfd_elfNN_write_archive_contents
220118611Snjl#define bfd_elfNN_write_archive_contents _bfd_write_archive_contents
221118611Snjl#endif
222151937Sjkim
223118611Snjl#ifndef bfd_elfNN_mkobject
224118611Snjl#define bfd_elfNN_mkobject bfd_elf_mkobject
225118611Snjl#endif
226118611Snjl
227118611Snjl#ifndef bfd_elfNN_mkcorefile
228118611Snjl#define bfd_elfNN_mkcorefile bfd_elf_mkcorefile
229118611Snjl#endif
230118611Snjl
231118611Snjl#ifndef bfd_elfNN_mkarchive
232118611Snjl#define bfd_elfNN_mkarchive _bfd_generic_mkarchive
233118611Snjl#endif
234118611Snjl
235118611Snjl#ifndef elf_symbol_leading_char
236118611Snjl#define elf_symbol_leading_char 0
237118611Snjl#endif
238118611Snjl
239118611Snjl#ifndef elf_info_to_howto
240118611Snjl#define elf_info_to_howto 0
241118611Snjl#endif
242118611Snjl
243118611Snjl#ifndef elf_info_to_howto_rel
244118611Snjl#define elf_info_to_howto_rel 0
245118611Snjl#endif
246118611Snjl
247118611Snjl#ifndef ELF_MAXPAGESIZE
248118611Snjl  #error ELF_MAXPAGESIZE is not defined
249118611Snjl#define ELF_MAXPAGESIZE 1
250118611Snjl#endif
251118611Snjl
252118611Snjl#ifndef elf_backend_collect
253118611Snjl#define elf_backend_collect false
254118611Snjl#endif
255118611Snjl#ifndef elf_backend_type_change_ok
256118611Snjl#define elf_backend_type_change_ok false
257118611Snjl#endif
258118611Snjl
259118611Snjl#ifndef elf_backend_sym_is_global
260118611Snjl#define elf_backend_sym_is_global	0
261118611Snjl#endif
262118611Snjl#ifndef elf_backend_object_p
263118611Snjl#define elf_backend_object_p		0
264118611Snjl#endif
265118611Snjl#ifndef elf_backend_symbol_processing
266118611Snjl#define elf_backend_symbol_processing	0
267118611Snjl#endif
268118611Snjl#ifndef elf_backend_symbol_table_processing
269151937Sjkim#define elf_backend_symbol_table_processing	0
270151937Sjkim#endif
271151937Sjkim#ifndef elf_backend_get_symbol_type
272151937Sjkim#define elf_backend_get_symbol_type 0
273151937Sjkim#endif
274151937Sjkim#ifndef elf_backend_section_processing
275151937Sjkim#define elf_backend_section_processing	0
276118611Snjl#endif
277118611Snjl#ifndef elf_backend_section_from_shdr
278118611Snjl#define elf_backend_section_from_shdr	0
279118611Snjl#endif
280151937Sjkim#ifndef elf_backend_section_flags
281151937Sjkim#define elf_backend_section_flags	0
282151937Sjkim#endif
283118611Snjl#ifndef elf_backend_section_from_phdr
284118611Snjl#define elf_backend_section_from_phdr	0
285118611Snjl#endif
286118611Snjl#ifndef elf_backend_fake_sections
287118611Snjl#define elf_backend_fake_sections	0
288118611Snjl#endif
289151937Sjkim#ifndef elf_backend_section_from_bfd_section
290151937Sjkim#define elf_backend_section_from_bfd_section	0
291118611Snjl#endif
292118611Snjl#ifndef elf_backend_add_symbol_hook
293118611Snjl#define elf_backend_add_symbol_hook	0
294118611Snjl#endif
295151937Sjkim#ifndef elf_backend_link_output_symbol_hook
296118611Snjl#define elf_backend_link_output_symbol_hook 0
297118611Snjl#endif
298118611Snjl#ifndef elf_backend_create_dynamic_sections
299118611Snjl#define elf_backend_create_dynamic_sections 0
300118611Snjl#endif
301118611Snjl#ifndef elf_backend_check_relocs
302118611Snjl#define elf_backend_check_relocs	0
303118611Snjl#endif
304118611Snjl#ifndef elf_backend_adjust_dynamic_symbol
305118611Snjl#define elf_backend_adjust_dynamic_symbol 0
306118611Snjl#endif
307118611Snjl#ifndef elf_backend_always_size_sections
308118611Snjl#define elf_backend_always_size_sections 0
309151937Sjkim#endif
310118611Snjl#ifndef elf_backend_size_dynamic_sections
311118611Snjl#define elf_backend_size_dynamic_sections 0
312118611Snjl#endif
313118611Snjl#ifndef elf_backend_relocate_section
314118611Snjl#define elf_backend_relocate_section	0
315118611Snjl#endif
316118611Snjl#ifndef elf_backend_finish_dynamic_symbol
317193529Sjkim#define elf_backend_finish_dynamic_symbol	0
318118611Snjl#endif
319118611Snjl#ifndef elf_backend_finish_dynamic_sections
320118611Snjl#define elf_backend_finish_dynamic_sections	0
321118611Snjl#endif
322118611Snjl#ifndef elf_backend_begin_write_processing
323151937Sjkim#define elf_backend_begin_write_processing	0
324118611Snjl#endif
325118611Snjl#ifndef elf_backend_final_write_processing
326118611Snjl#define elf_backend_final_write_processing	0
327118611Snjl#endif
328118611Snjl#ifndef elf_backend_additional_program_headers
329118611Snjl#define elf_backend_additional_program_headers	0
330118611Snjl#endif
331118611Snjl#ifndef elf_backend_modify_segment_map
332118611Snjl#define elf_backend_modify_segment_map	0
333118611Snjl#endif
334151937Sjkim#ifndef elf_backend_ecoff_debug_swap
335151937Sjkim#define elf_backend_ecoff_debug_swap	0
336118611Snjl#endif
337118611Snjl#ifndef elf_backend_got_header_size
338151937Sjkim#define elf_backend_got_header_size	0
339151937Sjkim#endif
340151937Sjkim#ifndef elf_backend_plt_header_size
341118611Snjl#define elf_backend_plt_header_size	0
342118611Snjl#endif
343151937Sjkim#ifndef elf_backend_post_process_headers
344151937Sjkim#define elf_backend_post_process_headers	NULL
345151937Sjkim#endif
346151937Sjkim#ifndef elf_backend_print_symbol_all
347151937Sjkim#define elf_backend_print_symbol_all		NULL
348151937Sjkim#endif
349151937Sjkim#ifndef elf_backend_output_arch_syms
350151937Sjkim#define elf_backend_output_arch_syms		NULL
351118611Snjl#endif
352118611Snjl#ifndef elf_backend_copy_indirect_symbol
353118611Snjl#define elf_backend_copy_indirect_symbol  _bfd_elf_link_hash_copy_indirect
354167802Sjkim#endif
355167802Sjkim#ifndef elf_backend_hide_symbol
356167802Sjkim#define elf_backend_hide_symbol		_bfd_elf_link_hash_hide_symbol
357118611Snjl#endif
358118611Snjl#ifndef elf_backend_emit_relocs
359118611Snjl#define elf_backend_emit_relocs			NULL
360118611Snjl#endif
361118611Snjl#ifndef elf_backend_count_relocs
362118611Snjl#define elf_backend_count_relocs		NULL
363118611Snjl#endif
364118611Snjl#ifndef elf_backend_grok_prstatus
365118611Snjl#define elf_backend_grok_prstatus		NULL
366118611Snjl#endif
367118611Snjl#ifndef elf_backend_grok_psinfo
368151937Sjkim#define elf_backend_grok_psinfo			NULL
369151937Sjkim#endif
370151937Sjkim#ifndef elf_backend_sprintf_vma
371151937Sjkim#define elf_backend_sprintf_vma			_bfd_elf_sprintf_vma
372151937Sjkim#endif
373118611Snjl#ifndef elf_backend_fprintf_vma
374118611Snjl#define elf_backend_fprintf_vma			_bfd_elf_fprintf_vma
375118611Snjl#endif
376118611Snjl#ifndef elf_backend_reloc_type_class
377118611Snjl#define elf_backend_reloc_type_class		_bfd_elf_reloc_type_class
378118611Snjl#endif
379118611Snjl#ifndef elf_backend_discard_info
380118611Snjl#define elf_backend_discard_info		NULL
381118611Snjl#endif
382151937Sjkim#ifndef elf_backend_ignore_discarded_relocs
383118611Snjl#define elf_backend_ignore_discarded_relocs	NULL
384151937Sjkim#endif
385118611Snjl#ifndef elf_backend_write_section
386118611Snjl#define elf_backend_write_section		NULL
387118611Snjl#endif
388118611Snjl#ifndef elf_backend_set_nonloadable_filepos
389118611Snjl#define elf_backend_set_nonloadable_filepos	NULL
390118611Snjl#endif
391118611Snjl#ifndef elf_backend_is_contained_by_filepos
392118611Snjl#define elf_backend_is_contained_by_filepos	NULL
393118611Snjl#endif
394118611Snjl#ifndef elf_backend_copy_private_bfd_data_p
395118611Snjl#define elf_backend_copy_private_bfd_data_p	NULL
396118611Snjl#endif
397118611Snjl#ifndef elf_backend_mips_irix_compat
398118611Snjl#define elf_backend_mips_irix_compat		NULL
399118611Snjl#endif
400118611Snjl#ifndef elf_backend_mips_rtype_to_howto
401118611Snjl#define elf_backend_mips_rtype_to_howto		NULL
402118611Snjl#endif
403118611Snjl
404118611Snjl/* Previously, backends could only use SHT_REL or SHT_RELA relocation
405118611Snjl   sections, but not both.  They defined USE_REL to indicate SHT_REL
406118611Snjl   sections, and left it undefined to indicated SHT_RELA sections.
407118611Snjl   For backwards compatibility, we still support this usage.  */
408193529Sjkim#ifndef USE_REL
409118611Snjl#define USE_REL 0
410118611Snjl#else
411118611Snjl#undef USE_REL
412118611Snjl#define USE_REL 1
413151937Sjkim#endif
414118611Snjl
415118611Snjl/* Use these in new code.  */
416118611Snjl#ifndef elf_backend_may_use_rel_p
417118611Snjl#define elf_backend_may_use_rel_p USE_REL
418118611Snjl#endif
419118611Snjl#ifndef elf_backend_may_use_rela_p
420118611Snjl#define elf_backend_may_use_rela_p !USE_REL
421118611Snjl#endif
422118611Snjl#ifndef elf_backend_default_use_rela_p
423118611Snjl#define elf_backend_default_use_rela_p !USE_REL
424118611Snjl#endif
425118611Snjl
426118611Snjl#ifndef elf_backend_rela_normal
427118611Snjl#define elf_backend_rela_normal 0
428167802Sjkim#endif
429118611Snjl
430118611Snjl#ifndef ELF_MACHINE_ALT1
431167802Sjkim#define ELF_MACHINE_ALT1 0
432118611Snjl#endif
433118611Snjl
434118611Snjl#ifndef ELF_MACHINE_ALT2
435118611Snjl#define ELF_MACHINE_ALT2 0
436118611Snjl#endif
437118611Snjl
438118611Snjl#ifndef elf_backend_size_info
439118611Snjl#define elf_backend_size_info _bfd_elfNN_size_info
440118611Snjl#endif
441118611Snjl
442118611Snjl#ifndef elf_backend_sign_extend_vma
443118611Snjl#define elf_backend_sign_extend_vma 0
444118611Snjl#endif
445118611Snjl
446118611Snjlextern const struct elf_size_info _bfd_elfNN_size_info;
447118611Snjl
448118611Snjl#ifndef INCLUDED_TARGET_FILE
449118611Snjlstatic const struct elf_backend_data elfNN_bed =
450118611Snjl{
451118611Snjl  ELF_ARCH,			/* arch */
452118611Snjl  ELF_MACHINE_CODE,		/* elf_machine_code */
453118611Snjl  ELF_MAXPAGESIZE,		/* maxpagesize */
454118611Snjl  elf_info_to_howto,
455118611Snjl  elf_info_to_howto_rel,
456118611Snjl  elf_backend_sym_is_global,
457118611Snjl  elf_backend_object_p,
458118611Snjl  elf_backend_symbol_processing,
459118611Snjl  elf_backend_symbol_table_processing,
460118611Snjl  elf_backend_get_symbol_type,
461118611Snjl  elf_backend_section_processing,
462118611Snjl  elf_backend_section_from_shdr,
463118611Snjl  elf_backend_section_flags,
464118611Snjl  elf_backend_section_from_phdr,
465118611Snjl  elf_backend_fake_sections,
466118611Snjl  elf_backend_section_from_bfd_section,
467118611Snjl  elf_backend_add_symbol_hook,
468118611Snjl  elf_backend_link_output_symbol_hook,
469118611Snjl  elf_backend_create_dynamic_sections,
470118611Snjl  elf_backend_check_relocs,
471118611Snjl  elf_backend_adjust_dynamic_symbol,
472118611Snjl  elf_backend_always_size_sections,
473118611Snjl  elf_backend_size_dynamic_sections,
474151937Sjkim  elf_backend_relocate_section,
475151937Sjkim  elf_backend_finish_dynamic_symbol,
476118611Snjl  elf_backend_finish_dynamic_sections,
477167802Sjkim  elf_backend_begin_write_processing,
478167802Sjkim  elf_backend_final_write_processing,
479167802Sjkim  elf_backend_additional_program_headers,
480167802Sjkim  elf_backend_modify_segment_map,
481167802Sjkim  elf_backend_gc_mark_hook,
482167802Sjkim  elf_backend_gc_sweep_hook,
483167802Sjkim  elf_backend_post_process_headers,
484167802Sjkim  elf_backend_print_symbol_all,
485167802Sjkim  elf_backend_output_arch_syms,
486167802Sjkim  elf_backend_copy_indirect_symbol,
487118611Snjl  elf_backend_hide_symbol,
488118611Snjl  elf_backend_emit_relocs,
489118611Snjl  elf_backend_count_relocs,
490118611Snjl  elf_backend_grok_prstatus,
491118611Snjl  elf_backend_grok_psinfo,
492118611Snjl  elf_backend_sprintf_vma,
493118611Snjl  elf_backend_fprintf_vma,
494118611Snjl  elf_backend_reloc_type_class,
495118611Snjl  elf_backend_discard_info,
496118611Snjl  elf_backend_ignore_discarded_relocs,
497118611Snjl  elf_backend_write_section,
498118611Snjl  elf_backend_set_nonloadable_filepos,
499118611Snjl  elf_backend_is_contained_by_filepos,
500118611Snjl  elf_backend_copy_private_bfd_data_p,
501118611Snjl  elf_backend_mips_irix_compat,
502118611Snjl  elf_backend_mips_rtype_to_howto,
503118611Snjl  elf_backend_ecoff_debug_swap,
504118611Snjl  ELF_MACHINE_ALT1,
505118611Snjl  ELF_MACHINE_ALT2,
506118611Snjl  &elf_backend_size_info,
507118611Snjl  elf_backend_got_symbol_offset,
508118611Snjl  elf_backend_got_header_size,
509118611Snjl  elf_backend_plt_header_size,
510167802Sjkim  elf_backend_collect,
511167802Sjkim  elf_backend_type_change_ok,
512167802Sjkim  elf_backend_may_use_rel_p,
513167802Sjkim  elf_backend_may_use_rela_p,
514167802Sjkim  elf_backend_default_use_rela_p,
515167802Sjkim  elf_backend_rela_normal,
516167802Sjkim  elf_backend_sign_extend_vma,
517167802Sjkim  elf_backend_want_got_plt,
518167802Sjkim  elf_backend_plt_readonly,
519167802Sjkim  elf_backend_want_plt_sym,
520167802Sjkim  elf_backend_plt_not_loaded,
521167802Sjkim  elf_backend_plt_alignment,
522167802Sjkim  elf_backend_can_gc_sections,
523167802Sjkim  elf_backend_can_refcount,
524167802Sjkim  elf_backend_want_got_sym,
525167802Sjkim  elf_backend_want_dynbss,
526167802Sjkim  elf_backend_want_p_paddr_set_to_zero
527167802Sjkim};
528167802Sjkim#endif
529118611Snjl
530118611Snjl/* Forward declaration for use when initialising alternative_target field.  */
531118611Snjl#ifdef TARGET_LITTLE_SYM
532118611Snjlextern const bfd_target TARGET_LITTLE_SYM;
533167802Sjkim#endif
534118611Snjl
535118611Snjl#ifdef TARGET_BIG_SYM
536118611Snjlconst bfd_target TARGET_BIG_SYM =
537118611Snjl{
538118611Snjl  /* name: identify kind of target */
539118611Snjl  TARGET_BIG_NAME,
540118611Snjl
541118611Snjl  /* flavour: general indication about file */
542118611Snjl  bfd_target_elf_flavour,
543118611Snjl
544118611Snjl  /* byteorder: data is big endian */
545118611Snjl  BFD_ENDIAN_BIG,
546118611Snjl
547118611Snjl  /* header_byteorder: header is also big endian */
548118611Snjl  BFD_ENDIAN_BIG,
549193529Sjkim
550118611Snjl  /* object_flags: mask of all file flags */
551118611Snjl  (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
552151937Sjkim   | DYNAMIC | WP_TEXT | D_PAGED),
553151937Sjkim
554118611Snjl  /* section_flags: mask of all section flags */
555118611Snjl  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
556118611Snjl   | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
557118611Snjl   | SEC_ARCH_BIT_0 | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
558118611Snjl
559118611Snjl   /* leading_symbol_char: is the first char of a user symbol
560151937Sjkim      predictable, and if so what is it */
561151937Sjkim  elf_symbol_leading_char,
562151937Sjkim
563151937Sjkim  /* ar_pad_char: pad character for filenames within an archive header
564118611Snjl     FIXME:  this really has nothing to do with ELF, this is a characteristic
565118611Snjl     of the archiver and/or os and should be independently tunable */
566118611Snjl  '/',
567118611Snjl
568118611Snjl  /* ar_max_namelen: maximum number of characters in an archive header
569118611Snjl     FIXME:  this really has nothing to do with ELF, this is a characteristic
570151937Sjkim     of the archiver and should be independently tunable.  The System V ABI,
571151937Sjkim     Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
572151937Sjkim  15,
573151937Sjkim
574118611Snjl  /* Routines to byte-swap various sized integers from the data sections */
575118611Snjl  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
576118611Snjl    bfd_getb32, bfd_getb_signed_32, bfd_putb32,
577118611Snjl    bfd_getb16, bfd_getb_signed_16, bfd_putb16,
578118611Snjl
579118611Snjl  /* Routines to byte-swap various sized integers from the file headers */
580118611Snjl  bfd_getb64, bfd_getb_signed_64, bfd_putb64,
581118611Snjl    bfd_getb32, bfd_getb_signed_32, bfd_putb32,
582118611Snjl    bfd_getb16, bfd_getb_signed_16, bfd_putb16,
583118611Snjl
584118611Snjl  /* bfd_check_format: check the format of a file being read */
585118611Snjl  { _bfd_dummy_target,		/* unknown format */
586118611Snjl    bfd_elfNN_object_p,		/* assembler/linker output (object file) */
587118611Snjl    bfd_elfNN_archive_p,	/* an archive */
588118611Snjl    bfd_elfNN_core_file_p	/* a core file */
589118611Snjl  },
590118611Snjl
591118611Snjl  /* bfd_set_format: set the format of a file being written */
592118611Snjl  { bfd_false,
593118611Snjl    bfd_elfNN_mkobject,
594118611Snjl    bfd_elfNN_mkarchive,
595118611Snjl    bfd_elfNN_mkcorefile
596118611Snjl  },
597118611Snjl
598118611Snjl  /* bfd_write_contents: write cached information into a file being written */
599151937Sjkim  { bfd_false,
600151937Sjkim    bfd_elfNN_write_object_contents,
601118611Snjl    bfd_elfNN_write_archive_contents,
602118611Snjl    bfd_elfNN_write_corefile_contents,
603118611Snjl  },
604118611Snjl
605118611Snjl      BFD_JUMP_TABLE_GENERIC (bfd_elfNN),
606118611Snjl      BFD_JUMP_TABLE_COPY (bfd_elfNN),
607118611Snjl      BFD_JUMP_TABLE_CORE (bfd_elfNN),
608128212Snjl#ifdef bfd_elfNN_archive_functions
609118611Snjl      BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive),
610118611Snjl#else
611118611Snjl      BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
612151937Sjkim#endif
613151937Sjkim      BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN),
614128212Snjl      BFD_JUMP_TABLE_RELOCS (bfd_elfNN),
615151937Sjkim      BFD_JUMP_TABLE_WRITE (bfd_elfNN),
616151937Sjkim      BFD_JUMP_TABLE_LINK (bfd_elfNN),
617128212Snjl      BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN),
618128212Snjl
619128212Snjl  /* Alternative endian target.  */
620128212Snjl#ifdef TARGET_LITTLE_SYM
621118611Snjl  & TARGET_LITTLE_SYM,
622118611Snjl#else
623118611Snjl  NULL,
624118611Snjl#endif
625151937Sjkim
626151937Sjkim  /* backend_data: */
627151937Sjkim  (PTR) &elfNN_bed
628151937Sjkim};
629118611Snjl#endif
630118611Snjl
631118611Snjl#ifdef TARGET_LITTLE_SYM
632118611Snjlconst bfd_target TARGET_LITTLE_SYM =
633118611Snjl{
634193529Sjkim  /* name: identify kind of target */
635118611Snjl  TARGET_LITTLE_NAME,
636128212Snjl
637151937Sjkim  /* flavour: general indication about file */
638151937Sjkim  bfd_target_elf_flavour,
639128212Snjl
640128212Snjl  /* byteorder: data is little endian */
641128212Snjl  BFD_ENDIAN_LITTLE,
642128212Snjl
643118611Snjl  /* header_byteorder: header is also little endian */
644118611Snjl  BFD_ENDIAN_LITTLE,
645118611Snjl
646118611Snjl  /* object_flags: mask of all file flags */
647118611Snjl  (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS
648118611Snjl   | DYNAMIC | WP_TEXT | D_PAGED),
649118611Snjl
650118611Snjl  /* section_flags: mask of all section flags */
651118611Snjl  (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY
652118611Snjl   | SEC_CODE | SEC_DATA | SEC_DEBUGGING | SEC_EXCLUDE | SEC_SORT_ENTRIES
653118611Snjl   | SEC_ARCH_BIT_0 | SEC_SMALL_DATA | SEC_MERGE | SEC_STRINGS | SEC_GROUP),
654118611Snjl
655118611Snjl   /* leading_symbol_char: is the first char of a user symbol
656118611Snjl      predictable, and if so what is it */
657118611Snjl  elf_symbol_leading_char,
658118611Snjl
659118611Snjl  /* ar_pad_char: pad character for filenames within an archive header
660118611Snjl     FIXME:  this really has nothing to do with ELF, this is a characteristic
661118611Snjl     of the archiver and/or os and should be independently tunable */
662118611Snjl  '/',
663118611Snjl
664118611Snjl  /* ar_max_namelen: maximum number of characters in an archive header
665193529Sjkim     FIXME:  this really has nothing to do with ELF, this is a characteristic
666193529Sjkim     of the archiver and should be independently tunable.  The System V ABI,
667151937Sjkim     Chapter 7 (Formats & Protocols), Archive section sets this as 15.  */
668151937Sjkim  15,
669118611Snjl
670118611Snjl  /* Routines to byte-swap various sized integers from the data sections */
671167802Sjkim  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
672118611Snjl    bfd_getl32, bfd_getl_signed_32, bfd_putl32,
673118611Snjl    bfd_getl16, bfd_getl_signed_16, bfd_putl16,
674118611Snjl
675118611Snjl  /* Routines to byte-swap various sized integers from the file headers */
676118611Snjl  bfd_getl64, bfd_getl_signed_64, bfd_putl64,
677118611Snjl    bfd_getl32, bfd_getl_signed_32, bfd_putl32,
678118611Snjl    bfd_getl16, bfd_getl_signed_16, bfd_putl16,
679118611Snjl
680167802Sjkim  /* bfd_check_format: check the format of a file being read */
681167802Sjkim  { _bfd_dummy_target,		/* unknown format */
682118611Snjl    bfd_elfNN_object_p,		/* assembler/linker output (object file) */
683118611Snjl    bfd_elfNN_archive_p,	/* an archive */
684118611Snjl    bfd_elfNN_core_file_p	/* a core file */
685193529Sjkim  },
686193529Sjkim
687167802Sjkim  /* bfd_set_format: set the format of a file being written */
688167802Sjkim  { bfd_false,
689167802Sjkim    bfd_elfNN_mkobject,
690167802Sjkim    bfd_elfNN_mkarchive,
691167802Sjkim    bfd_elfNN_mkcorefile
692167802Sjkim  },
693167802Sjkim
694167802Sjkim  /* bfd_write_contents: write cached information into a file being written */
695167802Sjkim  { bfd_false,
696167802Sjkim    bfd_elfNN_write_object_contents,
697167802Sjkim    bfd_elfNN_write_archive_contents,
698167802Sjkim    bfd_elfNN_write_corefile_contents,
699167802Sjkim  },
700167802Sjkim
701167802Sjkim      BFD_JUMP_TABLE_GENERIC (bfd_elfNN),
702167802Sjkim      BFD_JUMP_TABLE_COPY (bfd_elfNN),
703167802Sjkim      BFD_JUMP_TABLE_CORE (bfd_elfNN),
704167802Sjkim#ifdef bfd_elfNN_archive_functions
705167802Sjkim      BFD_JUMP_TABLE_ARCHIVE (bfd_elfNN_archive),
706167802Sjkim#else
707118611Snjl      BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
708118611Snjl#endif
709167802Sjkim      BFD_JUMP_TABLE_SYMBOLS (bfd_elfNN),
710167802Sjkim      BFD_JUMP_TABLE_RELOCS (bfd_elfNN),
711151937Sjkim      BFD_JUMP_TABLE_WRITE (bfd_elfNN),
712151937Sjkim      BFD_JUMP_TABLE_LINK (bfd_elfNN),
713118611Snjl      BFD_JUMP_TABLE_DYNAMIC (bfd_elfNN),
714118611Snjl
715118611Snjl  /* Alternative endian target.  */
716118611Snjl#ifdef TARGET_BIG_SYM
717118611Snjl  & TARGET_BIG_SYM,
718118611Snjl#else
719151937Sjkim  NULL,
720151937Sjkim#endif
721118611Snjl
722118611Snjl  /* backend_data: */
723118611Snjl  (PTR) &elfNN_bed
724118611Snjl};
725167802Sjkim#endif
726167802Sjkim