2010-08-18 Pedro Alves <pedro@codesourcery.com>
[deliverable/binutils-gdb.git] / bfd / xcoff-target.h
CommitLineData
b4911a31 1/* Common definitions for backends based on IBM RS/6000 "XCOFF64" files.
aa820537 2 Copyright 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2009
b4911a31
CP
3 Free Software Foundation, Inc.
4 Contributed by Cygnus Support.
5
116c20d2 6 This file is part of BFD, the Binary File Descriptor library.
b4911a31 7
116c20d2
NC
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
cd123cb7 10 the Free Software Foundation; either version 3 of the License, or
116c20d2 11 (at your option) any later version.
b4911a31 12
116c20d2
NC
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
b4911a31 17
116c20d2
NC
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
cd123cb7
NC
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
b4911a31
CP
23
24/* Internalcoff.h and coffcode.h modify themselves based on this flag. */
25#define RS6000COFF_C 1
26
27#define SELECT_RELOC(internal, howto) \
28 { \
29 internal.r_type = howto->type; \
30 internal.r_size = \
31 ((howto->complain_on_overflow == complain_overflow_signed \
32 ? 0x80 \
33 : 0) \
34 | (howto->bitsize - 1)); \
35 }
36\f
116c20d2 37#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 3
b4911a31
CP
38
39#define COFF_LONG_FILENAMES
40
41#define NO_COFF_SYMBOLS
42
43#define RTYPE2HOWTO(cache_ptr, dst) _bfd_xcoff_rtype2howto (cache_ptr, dst)
44
116c20d2
NC
45#define coff_mkobject _bfd_xcoff_mkobject
46#define coff_bfd_copy_private_bfd_data _bfd_xcoff_copy_private_bfd_data
47#define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name
3c9458e9 48#define coff_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false)
116c20d2
NC
49#define coff_bfd_reloc_type_lookup _bfd_xcoff_reloc_type_lookup
50#define coff_relocate_section _bfd_ppc_xcoff_relocate_section
51#define coff_core_file_failing_command _bfd_nocore_core_file_failing_command
52#define coff_core_file_failing_signal _bfd_nocore_core_file_failing_signal
53#define coff_core_file_matches_executable_p _bfd_nocore_core_file_matches_executable_p
261b8d08 54#define coff_core_file_pid _bfd_nocore_core_file_pid
116c20d2
NC
55#define _bfd_xcoff_bfd_get_relocated_section_contents coff_bfd_get_relocated_section_contents
56#define _bfd_xcoff_bfd_relax_section coff_bfd_relax_section
57#define _bfd_xcoff_bfd_gc_sections coff_bfd_gc_sections
58#define _bfd_xcoff_bfd_merge_sections coff_bfd_merge_sections
59#define _bfd_xcoff_bfd_discard_group bfd_generic_discard_group
60#define _bfd_xcoff_section_already_linked _bfd_generic_section_already_linked
3023e3f6 61#define _bfd_xcoff_bfd_define_common_symbol _bfd_xcoff_define_common_symbol
116c20d2 62#define _bfd_xcoff_bfd_link_split_section coff_bfd_link_split_section
b4911a31
CP
63
64#define CORE_FILE_P _bfd_dummy_target
65
b4911a31 66#ifdef AIX_CORE
116c20d2
NC
67
68#undef CORE_FILE_P
b4911a31 69#define CORE_FILE_P rs6000coff_core_p
cc429f57
JB
70extern const bfd_target * rs6000coff_core_p (bfd *);
71extern bfd_boolean rs6000coff_core_file_matches_executable_p (bfd *, bfd*);
b4911a31
CP
72
73#undef coff_core_file_matches_executable_p
74#define coff_core_file_matches_executable_p \
75 rs6000coff_core_file_matches_executable_p
76
116c20d2
NC
77extern char *rs6000coff_core_file_failing_command (bfd *);
78#undef coff_core_file_failing_command
b4911a31
CP
79#define coff_core_file_failing_command rs6000coff_core_file_failing_command
80
116c20d2
NC
81extern int rs6000coff_core_file_failing_signal (bfd *);
82#undef coff_core_file_failing_signal
b4911a31 83#define coff_core_file_failing_signal rs6000coff_core_file_failing_signal
b4911a31
CP
84#endif /* AIX_CORE */
85
86#ifdef LYNX_CORE
87
116c20d2 88#undef CORE_FILE_P
b4911a31 89#define CORE_FILE_P lynx_core_file_p
116c20d2 90extern const bfd_target *lynx_core_file_p (bfd *);
b4911a31 91
116c20d2 92extern bfd_boolean lynx_core_file_matches_executable_p (bfd *, bfd *);
b4911a31
CP
93#undef coff_core_file_matches_executable_p
94#define coff_core_file_matches_executable_p lynx_core_file_matches_executable_p
95
116c20d2
NC
96extern char *lynx_core_file_failing_command (bfd *);
97#undef coff_core_file_failing_command
b4911a31
CP
98#define coff_core_file_failing_command lynx_core_file_failing_command
99
116c20d2
NC
100extern int lynx_core_file_failing_signal (bfd *);
101#undef coff_core_file_failing_signal
b4911a31
CP
102#define coff_core_file_failing_signal lynx_core_file_failing_signal
103
104#endif /* LYNX_CORE */
105
b4911a31
CP
106/* XCOFF archives do not have anything which corresponds to an
107 extended name table. */
108
109#define _bfd_xcoff_slurp_extended_name_table bfd_false
110#define _bfd_xcoff_construct_extended_name_table \
116c20d2 111 ((bfd_boolean (*) (bfd *, char **, bfd_size_type *, const char **)) bfd_false)
b4911a31
CP
112#define _bfd_xcoff_truncate_arname bfd_dont_truncate_arname
113
114/* We can use the standard get_elt_at_index routine. */
115
116#define _bfd_xcoff_get_elt_at_index _bfd_generic_get_elt_at_index
117
118/* XCOFF archives do not have a timestamp. */
119
120#define _bfd_xcoff_update_armap_timestamp bfd_true
121
116c20d2
NC
122extern bfd_boolean _bfd_xcoff_mkobject (bfd *);
123extern bfd_boolean _bfd_xcoff_copy_private_bfd_data (bfd *, bfd *);
124extern bfd_boolean _bfd_xcoff_is_local_label_name (bfd *, const char *);
125extern void _bfd_xcoff_rtype2howto (arelent *, struct internal_reloc *);
126extern bfd_boolean _bfd_xcoff_slurp_armap (bfd *);
127extern void * _bfd_xcoff_read_ar_hdr (bfd *);
128extern bfd * _bfd_xcoff_openr_next_archived_file (bfd *, bfd *);
129extern int _bfd_xcoff_generic_stat_arch_elt (bfd *, struct stat *);
130extern bfd_boolean _bfd_xcoff_write_armap (bfd *, unsigned int, struct orl *, unsigned int, int);
131extern bfd_boolean _bfd_xcoff_write_archive_contents (bfd *);
a6b96beb 132extern int _bfd_xcoff_sizeof_headers (bfd *, struct bfd_link_info *);
116c20d2
NC
133extern void _bfd_xcoff_swap_sym_in (bfd *, void *, void *);
134extern unsigned int _bfd_xcoff_swap_sym_out (bfd *, void *, void *);
135extern void _bfd_xcoff_swap_aux_in (bfd *, void *, int, int, int, int, void *);
136extern unsigned int _bfd_xcoff_swap_aux_out (bfd *, void *, int, int, int, int, void *);
137extern reloc_howto_type * _bfd_xcoff_reloc_type_lookup (bfd *, bfd_reloc_code_real_type);
138extern const bfd_target * _bfd_xcoff_archive_p (bfd *);
b4911a31
CP
139
140#ifndef coff_SWAP_sym_in
116c20d2 141#define coff_SWAP_sym_in _bfd_xcoff_swap_sym_in
b4911a31 142#define coff_SWAP_sym_out _bfd_xcoff_swap_sym_out
116c20d2 143#define coff_SWAP_aux_in _bfd_xcoff_swap_aux_in
b4911a31
CP
144#define coff_SWAP_aux_out _bfd_xcoff_swap_aux_out
145#endif
146
147#include "coffcode.h"
148
3d855632 149/* The transfer vector that leads the outside world to all of the above. */
b4911a31
CP
150
151const bfd_target TARGET_SYM =
152{
153 TARGET_NAME,
9bd09e22 154 bfd_target_xcoff_flavour,
116c20d2
NC
155 BFD_ENDIAN_BIG, /* Data byte order is big. */
156 BFD_ENDIAN_BIG, /* Header byte order is big. */
b4911a31 157
116c20d2 158 (HAS_RELOC | EXEC_P | /* Object flags. */
b4911a31
CP
159 HAS_LINENO | HAS_DEBUG | DYNAMIC |
160 HAS_SYMS | HAS_LOCALS | WP_TEXT),
161
116c20d2
NC
162 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
163 0, /* Leading char. */
164 '/', /* AR_pad_char. */
165 15, /* AR_max_namelen??? FIXME. */
b4911a31
CP
166
167 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
168 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
116c20d2 169 bfd_getb16, bfd_getb_signed_16, bfd_putb16,/* Data. */
b4911a31
CP
170 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
171 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
116c20d2 172 bfd_getb16, bfd_getb_signed_16, bfd_putb16,/* Headers. */
b4911a31 173
116c20d2 174 {_bfd_dummy_target, coff_object_p, /* bfd_check_format. */
b4911a31 175 _bfd_xcoff_archive_p, CORE_FILE_P},
116c20d2 176 {bfd_false, coff_mkobject, /* bfd_set_format. */
b4911a31 177 _bfd_generic_mkarchive, bfd_false},
116c20d2 178 {bfd_false, coff_write_object_contents, /* bfd_write_contents. */
b4911a31
CP
179 _bfd_xcoff_write_archive_contents, bfd_false},
180
181 BFD_JUMP_TABLE_GENERIC (coff),
182 BFD_JUMP_TABLE_COPY (coff),
183 BFD_JUMP_TABLE_CORE (coff),
184 BFD_JUMP_TABLE_ARCHIVE (_bfd_xcoff),
185 BFD_JUMP_TABLE_SYMBOLS (coff),
186 BFD_JUMP_TABLE_RELOCS (coff),
187 BFD_JUMP_TABLE_WRITE (coff),
188 BFD_JUMP_TABLE_LINK (_bfd_xcoff),
189 BFD_JUMP_TABLE_DYNAMIC (_bfd_xcoff),
190
191 NULL,
3d855632 192
b4911a31
CP
193 COFF_SWAP_TABLE
194};
This page took 1.121151 seconds and 4 git commands to generate.