212c029930e8184ffdb405c6f2f22314268b3fbb
[platform/upstream/binutils.git] / bfd / elf64-target.h
1 /* Target definitions for 64-bit ELF
2    Copyright 1993 Free Software Foundation, Inc.
3
4 This file is part of BFD, the Binary File Descriptor library.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 /* This structure contains everything that BFD knows about a target.
21    It includes things like its byte order, name, what routines to call
22    to do various operations, etc.  Every BFD points to a target structure
23    with its "xvec" member.
24
25    There are two such structures here:  one for big-endian machines and
26    one for little-endian machines.   */
27
28 /* Archives are generic or unimplemented.  */
29 #ifndef bfd_elf64_slurp_armap
30 #define bfd_elf64_slurp_armap           bfd_slurp_coff_armap
31 #endif
32 #define bfd_elf64_slurp_extended_name_table     _bfd_slurp_extended_name_table
33 #define bfd_elf64_truncate_arname               bfd_dont_truncate_arname
34 #define bfd_elf64_openr_next_archived_file      bfd_generic_openr_next_archived_file
35 #define bfd_elf64_generic_stat_arch_elt bfd_generic_stat_arch_elt
36 #ifndef bfd_elf64_write_armap
37 #define bfd_elf64_write_armap           coff_write_armap
38 #endif
39
40 /* Ordinary section reading and writing */
41 #define bfd_elf64_get_section_contents  bfd_generic_get_section_contents
42 #define bfd_elf64_close_and_cleanup             bfd_generic_close_and_cleanup
43
44 #define bfd_elf64_bfd_debug_info_start  bfd_void
45 #define bfd_elf64_bfd_debug_info_end    bfd_void
46 #define bfd_elf64_bfd_debug_info_accumulate     (PROTO(void,(*),(bfd*, struct sec *))) bfd_void
47 #define bfd_elf64_bfd_get_relocated_section_contents \
48  bfd_generic_get_relocated_section_contents
49 #define bfd_elf64_bfd_relax_section bfd_generic_relax_section
50 #define bfd_elf64_bfd_seclet_link bfd_generic_seclet_link
51 #define bfd_elf64_bfd_make_debug_symbol \
52   ((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr)
53
54 #ifndef elf_info_to_howto_rel
55 #define elf_info_to_howto_rel 0
56 #endif
57
58 #ifndef ELF_MAXPAGESIZE
59 #define ELF_MAXPAGESIZE 1
60 #endif
61
62 static CONST struct elf_backend_data elf64_bed =
63 {
64 #ifdef USE_REL
65   0,                            /* use_rela_p */
66 #else
67   1,                            /* use_rela_p */
68 #endif
69   0,                            /* elf_64_p */
70   ELF_ARCH,                     /* arch */
71   elf_info_to_howto,            /* elf_info_to_howto */
72 #ifdef elf_info_to_howto_rel
73   elf_info_to_howto_rel,        /* elf_info_to_howto_rel */
74 #else
75   0,                            /* elf_info_to_howto_rel */
76 #endif
77   ELF_MAXPAGESIZE,              /* maxpagesize */
78 };
79
80 #ifdef TARGET_BIG_SYM
81 bfd_target TARGET_BIG_SYM =
82 {
83   /* name: identify kind of target */
84   TARGET_BIG_NAME,
85
86   /* flavour: general indication about file */
87   bfd_target_elf_flavour,
88
89   /* byteorder_big_p: data is big endian */
90   true,
91
92   /* header_byteorder_big_p: header is also big endian */
93   true,
94
95   /* object_flags: mask of all file flags */
96   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS |
97    DYNAMIC | WP_TEXT),
98   
99   /* section_flags: mask of all section flags */
100   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY |
101    SEC_CODE | SEC_DATA), 
102
103    /* leading_symbol_char: is the first char of a user symbol
104       predictable, and if so what is it */
105    0,
106
107   /* ar_pad_char: pad character for filenames within an archive header
108      FIXME:  this really has nothing to do with ELF, this is a characteristic
109      of the archiver and/or os and should be independently tunable */
110   '/',
111
112   /* ar_max_namelen: maximum number of characters in an archive header
113      FIXME:  this really has nothing to do with ELF, this is a characteristic
114      of the archiver and should be independently tunable.  This value is
115      a WAG (wild a** guess) */
116   15,
117
118   /* align_power_min: minimum alignment restriction for any section
119      FIXME:  this value may be target machine dependent */
120   3,
121
122   /* Routines to byte-swap various sized integers from the data sections */
123   _do_getb64, _do_getb_signed_64, _do_putb64,
124     _do_getb32, _do_getb_signed_32, _do_putb32,
125     _do_getb16, _do_getb_signed_16, _do_putb16,
126
127   /* Routines to byte-swap various sized integers from the file headers */
128   _do_getb64, _do_getb_signed_64, _do_putb64,
129     _do_getb32, _do_getb_signed_32, _do_putb32,
130     _do_getb16, _do_getb_signed_16, _do_putb16,
131
132   /* bfd_check_format: check the format of a file being read */
133   { _bfd_dummy_target,          /* unknown format */
134     bfd_elf64_object_p,         /* assembler/linker output (object file) */
135     bfd_generic_archive_p,      /* an archive */
136     bfd_elf64_core_file_p       /* a core file */
137   },
138
139   /* bfd_set_format: set the format of a file being written */
140   { bfd_false,
141     bfd_elf_mkobject,
142     _bfd_generic_mkarchive,
143     bfd_false
144   },
145
146   /* bfd_write_contents: write cached information into a file being written */
147   { bfd_false,
148     bfd_elf64_write_object_contents,
149     _bfd_write_archive_contents,
150     bfd_false
151   },
152
153   /* Initialize a jump table with the standard macro.  All names start with
154      "elf" */
155   JUMP_TABLE(bfd_elf64),
156
157   /* backend_data: */
158   (PTR) &elf64_bed,
159 };
160 #endif
161
162 #ifdef TARGET_LITTLE_SYM
163 bfd_target TARGET_LITTLE_SYM =
164 {
165   /* name: identify kind of target */
166   TARGET_LITTLE_NAME,
167
168   /* flavour: general indication about file */
169   bfd_target_elf_flavour,
170
171   /* byteorder_big_p: data is big endian */
172   false,                /* Nope -- this one's little endian */
173
174   /* header_byteorder_big_p: header is also big endian */
175   false,                /* Nope -- this one's little endian */
176
177   /* object_flags: mask of all file flags */
178   (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS |
179    DYNAMIC | WP_TEXT),
180   
181   /* section_flags: mask of all section flags */
182   (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY |
183    SEC_DATA), 
184
185    /* leading_symbol_char: is the first char of a user symbol
186       predictable, and if so what is it */
187    0,
188
189   /* ar_pad_char: pad character for filenames within an archive header
190      FIXME:  this really has nothing to do with ELF, this is a characteristic
191      of the archiver and/or os and should be independently tunable */
192   '/',
193
194   /* ar_max_namelen: maximum number of characters in an archive header
195      FIXME:  this really has nothing to do with ELF, this is a characteristic
196      of the archiver and should be independently tunable.  This value is
197      a WAG (wild a** guess) */
198   15,
199
200   /* align_power_min: minimum alignment restriction for any section
201      FIXME:  this value may be target machine dependent */
202   3,
203
204   /* Routines to byte-swap various sized integers from the data sections */
205   _do_getl64, _do_getl_signed_64, _do_putl64,
206     _do_getl32, _do_getl_signed_32, _do_putl32,
207     _do_getl16, _do_getl_signed_16, _do_putl16,
208
209   /* Routines to byte-swap various sized integers from the file headers */
210   _do_getl64, _do_getl_signed_64, _do_putl64,
211     _do_getl32, _do_getl_signed_32, _do_putl32,
212     _do_getl16, _do_getl_signed_16, _do_putl16,
213
214   /* bfd_check_format: check the format of a file being read */
215   { _bfd_dummy_target,          /* unknown format */
216     bfd_elf64_object_p,         /* assembler/linker output (object file) */
217     bfd_generic_archive_p,      /* an archive */
218     bfd_elf64_core_file_p       /* a core file */
219   },
220
221   /* bfd_set_format: set the format of a file being written */
222   { bfd_false,
223     bfd_elf_mkobject,
224     _bfd_generic_mkarchive,
225     bfd_false
226   },
227
228   /* bfd_write_contents: write cached information into a file being written */
229   { bfd_false,
230     bfd_elf64_write_object_contents,
231     _bfd_write_archive_contents,
232     bfd_false
233   },
234
235   /* Initialize a jump table with the standard macro.  All names start with
236      "elf" */
237   JUMP_TABLE(bfd_elf64),
238
239   /* backend_data: */
240   (PTR) &elf64_bed,
241 };
242 #endif