remove conflict marker
[deliverable/binutils-gdb.git] / bfd / coff-tic4x.c
CommitLineData
026df7c5 1/* BFD back-end for TMS320C4X coff binaries.
5af6ead6
AM
2 Copyright 1996, 1997, 1998, 1999, 2000, 2002
3 Free Software Foundation, Inc.
026df7c5
NC
4 Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz)
5
6 This file is part of BFD, the Binary File Descriptor library.
7
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
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
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.
17
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
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA. */
22
23#include "bfd.h"
24#include "sysdep.h"
25#include "libbfd.h"
26#include "bfdlink.h"
27#include "coff/tic4x.h"
28#include "coff/internal.h"
29#include "libcoff.h"
30
31#undef F_LSYMS
32#define F_LSYMS F_LSYMS_TICOFF
33
b34976b6 34static bfd_boolean ticoff0_bad_format_hook
5af6ead6 35 PARAMS ((bfd *, PTR ));
b34976b6 36static bfd_boolean ticoff1_bad_format_hook
5af6ead6 37 PARAMS ((bfd *, PTR ));
b34976b6 38static bfd_boolean ticoff_bfd_is_local_label_name
5af6ead6
AM
39 PARAMS ((bfd *, const char *));
40static bfd_reloc_status_type tic4x_relocation
41 PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char ** ));
42static reloc_howto_type *tic4x_coff_reloc_type_lookup
43 PARAMS ((bfd *, bfd_reloc_code_real_type ));
44static void tic4x_lookup_howto
45 PARAMS ((arelent *, struct internal_reloc * ));
46static reloc_howto_type *coff_tic4x_rtype_to_howto
47 PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma * ));
48static void tic4x_reloc_processing
49 PARAMS ((arelent *, struct internal_reloc *, asymbol **, bfd *, asection * ));
50
51
b34976b6 52static bfd_boolean
026df7c5 53ticoff0_bad_format_hook (abfd, filehdr)
5af6ead6 54 bfd *abfd ATTRIBUTE_UNUSED;
026df7c5
NC
55 PTR filehdr;
56{
57 struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
58
59 if (COFF0_BADMAG (*internal_f))
b34976b6 60 return FALSE;
026df7c5 61
b34976b6 62 return TRUE;
026df7c5
NC
63}
64
b34976b6 65static bfd_boolean
026df7c5
NC
66ticoff1_bad_format_hook (abfd, filehdr)
67 bfd *abfd ATTRIBUTE_UNUSED;
68 PTR filehdr;
69{
70 struct internal_filehdr *internal_f = (struct internal_filehdr *) filehdr;
71
72 if (COFF1_BADMAG (*internal_f))
b34976b6 73 return FALSE;
026df7c5 74
b34976b6 75 return TRUE;
026df7c5
NC
76}
77
78/* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
79 labels. */
b34976b6 80static bfd_boolean
026df7c5
NC
81ticoff_bfd_is_local_label_name (abfd, name)
82 bfd *abfd ATTRIBUTE_UNUSED;
83 const char *name;
84{
85 if (TICOFF_LOCAL_LABEL_P(name))
b34976b6
AM
86 return TRUE;
87 return FALSE;
026df7c5
NC
88}
89
90#define coff_bfd_is_local_label_name ticoff_bfd_is_local_label_name
91
026df7c5
NC
92#define RELOC_PROCESSING(RELENT,RELOC,SYMS,ABFD,SECT)\
93 tic4x_reloc_processing (RELENT,RELOC,SYMS,ABFD,SECT)
94
95/* Customize coffcode.h; the default coff_ functions are set up to use
96 COFF2; coff_bad_format_hook uses BADMAG, so set that for COFF2.
97 The COFF1 and COFF0 vectors use custom _bad_format_hook procs
98 instead of setting BADMAG. */
99#define BADMAG(x) COFF2_BADMAG(x)
100#include "coffcode.h"
101
102static bfd_reloc_status_type
b34976b6 103tic4x_relocation (abfd, reloc_entry, symbol, data, input_section,
026df7c5
NC
104 output_bfd, error_message)
105 bfd *abfd ATTRIBUTE_UNUSED;
106 arelent *reloc_entry;
107 asymbol *symbol ATTRIBUTE_UNUSED;
108 PTR data ATTRIBUTE_UNUSED;
109 asection *input_section;
110 bfd *output_bfd;
111 char **error_message ATTRIBUTE_UNUSED;
b34976b6 112{
026df7c5
NC
113 if (output_bfd != (bfd *) NULL)
114 {
115 /* This is a partial relocation, and we want to apply the
116 relocation to the reloc entry rather than the raw data.
117 Modify the reloc inplace to reflect what we now know. */
118 reloc_entry->address += input_section->output_offset;
119 return bfd_reloc_ok;
120 }
121 return bfd_reloc_continue;
122}
123
b34976b6 124reloc_howto_type tic4x_howto_table[] =
026df7c5 125{
b34976b6
AM
126 HOWTO(R_RELWORD, 0, 2, 16, FALSE, 0, complain_overflow_signed, tic4x_relocation, "RELWORD", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
127 HOWTO(R_REL24, 0, 2, 24, FALSE, 0, complain_overflow_bitfield, tic4x_relocation, "REL24", TRUE, 0x00ffffff, 0x00ffffff, FALSE),
128 HOWTO(R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_dont, tic4x_relocation, "RELLONG", TRUE, 0xffffffff, 0xffffffff, FALSE),
129 HOWTO(R_PCRWORD, 0, 2, 16, TRUE, 0, complain_overflow_signed, tic4x_relocation, "PCRWORD", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
130 HOWTO(R_PCR24, 0, 2, 24, TRUE, 0, complain_overflow_signed, tic4x_relocation, "PCR24", TRUE, 0x00ffffff, 0x00ffffff, FALSE),
131 HOWTO(R_PARTLS16, 0, 2, 16, FALSE, 0, complain_overflow_dont, tic4x_relocation, "PARTLS16", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
132 HOWTO(R_PARTMS8, 16, 2, 16, FALSE, 0, complain_overflow_dont, tic4x_relocation, "PARTMS8", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
133 HOWTO(R_RELWORD, 0, 2, 16, FALSE, 0, complain_overflow_signed, tic4x_relocation, "ARELWORD", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
134 HOWTO(R_REL24, 0, 2, 24, FALSE, 0, complain_overflow_signed, tic4x_relocation, "AREL24", TRUE, 0x00ffffff, 0x00ffffff, FALSE),
135 HOWTO(R_RELLONG, 0, 2, 32, FALSE, 0, complain_overflow_signed, tic4x_relocation, "ARELLONG", TRUE, 0xffffffff, 0xffffffff, FALSE),
136 HOWTO(R_PCRWORD, 0, 2, 16, TRUE, 0, complain_overflow_signed, tic4x_relocation, "APCRWORD", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
137 HOWTO(R_PCR24, 0, 2, 24, TRUE, 0, complain_overflow_signed, tic4x_relocation, "APCR24", TRUE, 0x00ffffff, 0x00ffffff, FALSE),
138 HOWTO(R_PARTLS16, 0, 2, 16, FALSE, 0, complain_overflow_dont, tic4x_relocation, "APARTLS16", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
139 HOWTO(R_PARTMS8, 16, 2, 16, FALSE, 0, complain_overflow_dont, tic4x_relocation, "APARTMS8", TRUE, 0x0000ffff, 0x0000ffff, FALSE),
026df7c5
NC
140};
141#define HOWTO_SIZE (sizeof(tic4x_howto_table) / sizeof(tic4x_howto_table[0]))
142
143#undef coff_bfd_reloc_type_lookup
144#define coff_bfd_reloc_type_lookup tic4x_coff_reloc_type_lookup
145
146/* For the case statement use the code values used tc_gen_reloc (defined in
147 bfd/reloc.c) to map to the howto table entries. */
148
149static reloc_howto_type *
150tic4x_coff_reloc_type_lookup (abfd, code)
151 bfd *abfd ATTRIBUTE_UNUSED;
152 bfd_reloc_code_real_type code;
153{
154 unsigned int type;
155 unsigned int i;
b34976b6 156
026df7c5
NC
157 switch (code)
158 {
159 case BFD_RELOC_32: type = R_RELLONG; break;
160 case BFD_RELOC_24: type = R_REL24; break;
161 case BFD_RELOC_16: type = R_RELWORD; break;
162 case BFD_RELOC_24_PCREL: type = R_PCR24; break;
163 case BFD_RELOC_16_PCREL: type = R_PCRWORD; break;
164 case BFD_RELOC_HI16: type = R_PARTMS8; break;
165 case BFD_RELOC_LO16: type = R_PARTLS16; break;
166 default:
167 return NULL;
168 }
b34976b6 169
026df7c5
NC
170 for (i = 0; i < HOWTO_SIZE; i++)
171 {
172 if (tic4x_howto_table[i].type == type)
173 return tic4x_howto_table + i;
174 }
175 return NULL;
176}
177
178
179/* Code to turn a r_type into a howto ptr, uses the above howto table.
180 Called after some initial checking by the tic4x_rtype_to_howto fn
181 below. */
182static void
183tic4x_lookup_howto (internal, dst)
184 arelent *internal;
185 struct internal_reloc *dst;
186{
187 unsigned int i;
188 int bank = (dst->r_symndx == -1) ? HOWTO_BANK : 0;
189
190 for (i = 0; i < HOWTO_SIZE; i++)
191 {
192 if (tic4x_howto_table[i].type == dst->r_type)
193 {
194 internal->howto = tic4x_howto_table + i + bank;
195 return;
196 }
197 }
198
199 (*_bfd_error_handler) (_("Unrecognized reloc type 0x%x"),
200 (unsigned int) dst->r_type);
201 abort();
202}
203
204#undef coff_rtype_to_howto
205#define coff_rtype_to_howto coff_tic4x_rtype_to_howto
206
207static reloc_howto_type *
208coff_tic4x_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
209 bfd *abfd ATTRIBUTE_UNUSED;
210 asection *sec;
211 struct internal_reloc *rel;
212 struct coff_link_hash_entry *h ATTRIBUTE_UNUSED;
213 struct internal_syment *sym ATTRIBUTE_UNUSED;
214 bfd_vma *addendp;
215{
216 arelent genrel;
217
218 if (rel->r_symndx == -1 && addendp != NULL)
219 /* This is a TI "internal relocation", which means that the relocation
220 amount is the amount by which the current section is being relocated
221 in the output section. */
222 *addendp = (sec->output_section->vma + sec->output_offset) - sec->vma;
223
224 tic4x_lookup_howto (&genrel, rel);
225
226 return genrel.howto;
227}
228
229
230static void
231tic4x_reloc_processing (relent, reloc, symbols, abfd, section)
232 arelent *relent;
233 struct internal_reloc *reloc;
234 asymbol **symbols;
235 bfd *abfd;
236 asection *section;
237{
238 asymbol *ptr;
239
240 relent->address = reloc->r_vaddr;
b34976b6 241
026df7c5
NC
242 if (reloc->r_symndx != -1)
243 {
244 if (reloc->r_symndx < 0 || reloc->r_symndx >= obj_conv_table_size (abfd))
245 {
246 (*_bfd_error_handler)
247 (_("%s: warning: illegal symbol index %ld in relocs"),
248 bfd_get_filename (abfd), reloc->r_symndx);
249 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
250 ptr = NULL;
251 }
252 else
253 {
254 relent->sym_ptr_ptr = (symbols
255 + obj_convert (abfd)[reloc->r_symndx]);
256 ptr = *(relent->sym_ptr_ptr);
257 }
258 }
259 else
260 {
261 relent->sym_ptr_ptr = section->symbol_ptr_ptr;
262 ptr = *(relent->sym_ptr_ptr);
263 }
b34976b6 264
026df7c5
NC
265 /* The symbols definitions that we have read in have been relocated
266 as if their sections started at 0. But the offsets refering to
267 the symbols in the raw data have not been modified, so we have to
268 have a negative addend to compensate.
b34976b6 269
026df7c5 270 Note that symbols which used to be common must be left alone. */
b34976b6 271
026df7c5
NC
272 /* Calculate any reloc addend by looking at the symbol. */
273 CALC_ADDEND (abfd, ptr, *reloc, relent);
b34976b6 274
026df7c5
NC
275 relent->address -= section->vma;
276 /* !! relent->section = (asection *) NULL; */
b34976b6 277
026df7c5
NC
278 /* Fill in the relent->howto field from reloc->r_type. */
279 tic4x_lookup_howto (relent, reloc);
280}
281
282
b34976b6 283static const bfd_coff_backend_data ticoff0_swap_table =
026df7c5
NC
284{
285 coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
286 coff_SWAP_aux_out, coff_SWAP_sym_out,
287 coff_SWAP_lineno_out, coff_SWAP_reloc_out,
288 coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
289 coff_SWAP_scnhdr_out,
290 FILHSZ_V0, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ_V0, LINESZ, FILNMLEN,
291#ifdef COFF_LONG_FILENAMES
b34976b6 292 TRUE,
026df7c5 293#else
b34976b6 294 FALSE,
026df7c5
NC
295#endif
296#ifdef COFF_LONG_SECTION_NAMES
b34976b6 297 TRUE,
026df7c5 298#else
b34976b6 299 FALSE,
026df7c5
NC
300#endif
301#ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
b34976b6 302 TRUE,
026df7c5 303#else
b34976b6 304 FALSE,
026df7c5
NC
305#endif
306#ifdef COFF_DEBUG_STRING_WIDE_PREFIX
307 4,
308#else
309 2,
310#endif
311 COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
312 coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
313 coff_SWAP_reloc_in, ticoff0_bad_format_hook, coff_set_arch_mach_hook,
314 coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
315 coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
316 coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
317 coff_classify_symbol, coff_compute_section_file_positions,
318 coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
319 coff_adjust_symndx, coff_link_add_one_symbol,
320 coff_link_output_has_begun, coff_final_link_postscript
321};
322
323/* COFF1 differs in section header size. */
b34976b6 324static const bfd_coff_backend_data ticoff1_swap_table =
026df7c5
NC
325{
326 coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in,
327 coff_SWAP_aux_out, coff_SWAP_sym_out,
328 coff_SWAP_lineno_out, coff_SWAP_reloc_out,
329 coff_SWAP_filehdr_out, coff_SWAP_aouthdr_out,
330 coff_SWAP_scnhdr_out,
331 FILHSZ, AOUTSZ, SCNHSZ_V01, SYMESZ, AUXESZ, RELSZ, LINESZ, FILNMLEN,
332#ifdef COFF_LONG_FILENAMES
b34976b6 333 TRUE,
026df7c5 334#else
b34976b6 335 FALSE,
026df7c5
NC
336#endif
337#ifdef COFF_LONG_SECTION_NAMES
b34976b6 338 TRUE,
026df7c5 339#else
b34976b6 340 FALSE,
026df7c5
NC
341#endif
342#ifdef COFF_FORCE_SYMBOLS_IN_STRINGS
b34976b6 343 TRUE,
026df7c5 344#else
b34976b6 345 FALSE,
026df7c5
NC
346#endif
347#ifdef COFF_DEBUG_STRING_WIDE_PREFIX
348 4,
349#else
350 2,
351#endif
352 COFF_DEFAULT_SECTION_ALIGNMENT_POWER,
353 coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in,
354 coff_SWAP_reloc_in, ticoff1_bad_format_hook, coff_set_arch_mach_hook,
355 coff_mkobject_hook, styp_to_sec_flags, coff_set_alignment_hook,
356 coff_slurp_symbol_table, symname_in_debug_hook, coff_pointerize_aux_hook,
357 coff_print_aux, coff_reloc16_extra_cases, coff_reloc16_estimate,
358 coff_classify_symbol, coff_compute_section_file_positions,
359 coff_start_final_link, coff_relocate_section, coff_rtype_to_howto,
360 coff_adjust_symndx, coff_link_add_one_symbol,
361 coff_link_output_has_begun, coff_final_link_postscript
362};
363
364
365/* TI COFF v0, DOS tools (little-endian headers). */
366const bfd_target tic4x_coff0_vec =
367{
368 "coff0-c4x", /* Name. */
369 bfd_target_coff_flavour,
370 BFD_ENDIAN_LITTLE, /* Data byte order is little. */
371 BFD_ENDIAN_LITTLE, /* Header byte order is little (DOS tools). */
372
373 (HAS_RELOC | EXEC_P | /* Object flags. */
374 HAS_LINENO | HAS_DEBUG |
375 HAS_SYMS | HAS_LOCALS | WP_TEXT | HAS_LOAD_PAGE ),
376
377 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
378 '_', /* Leading symbol underscore. */
379 '/', /* ar_pad_char. */
380 15, /* ar_max_namelen. */
381 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
382 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
383 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
384 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
385 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
386 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
387
388 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
389 bfd_generic_archive_p, _bfd_dummy_target},
390 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
391 bfd_false},
392 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
393 _bfd_write_archive_contents, bfd_false},
394
395 BFD_JUMP_TABLE_GENERIC (coff),
396 BFD_JUMP_TABLE_COPY (coff),
397 BFD_JUMP_TABLE_CORE (_bfd_nocore),
398 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
399 BFD_JUMP_TABLE_SYMBOLS (coff),
400 BFD_JUMP_TABLE_RELOCS (coff),
401 BFD_JUMP_TABLE_WRITE (coff),
402 BFD_JUMP_TABLE_LINK (coff),
403 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
404 NULL,
405
406 (PTR)&ticoff0_swap_table
407};
408
409/* TI COFF v0, SPARC tools (big-endian headers). */
410const bfd_target tic4x_coff0_beh_vec =
411{
412 "coff0-beh-c4x", /* Name. */
413 bfd_target_coff_flavour,
414 BFD_ENDIAN_LITTLE, /* Data byte order is little. */
415 BFD_ENDIAN_BIG, /* Header byte order is big. */
416
417 (HAS_RELOC | EXEC_P | /* Object flags. */
418 HAS_LINENO | HAS_DEBUG |
419 HAS_SYMS | HAS_LOCALS | WP_TEXT | HAS_LOAD_PAGE ),
420
421 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
422 '_', /* Leading symbol underscore. */
423 '/', /* ar_pad_char */
424 15, /* ar_max_namelen */
425 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
426 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
427 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
428 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
429 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
430 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
431
432 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
433 bfd_generic_archive_p, _bfd_dummy_target},
434 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
435 bfd_false},
436 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
437 _bfd_write_archive_contents, bfd_false},
438
439 BFD_JUMP_TABLE_GENERIC (coff),
440 BFD_JUMP_TABLE_COPY (coff),
441 BFD_JUMP_TABLE_CORE (_bfd_nocore),
442 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
443 BFD_JUMP_TABLE_SYMBOLS (coff),
444 BFD_JUMP_TABLE_RELOCS (coff),
445 BFD_JUMP_TABLE_WRITE (coff),
446 BFD_JUMP_TABLE_LINK (coff),
447 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
448
449 &tic4x_coff0_vec,
450
451 (PTR)&ticoff0_swap_table
452};
453
454/* TI COFF v1, DOS tools (little-endian headers). */
455const bfd_target tic4x_coff1_vec =
456{
457 "coff1-c4x", /* Name. */
458 bfd_target_coff_flavour,
459 BFD_ENDIAN_LITTLE, /* Data byte order is little. */
460 BFD_ENDIAN_LITTLE, /* Header byte order is little (DOS tools). */
461
462 (HAS_RELOC | EXEC_P | /* Object flags. */
463 HAS_LINENO | HAS_DEBUG |
464 HAS_SYMS | HAS_LOCALS | WP_TEXT | HAS_LOAD_PAGE ),
465
466 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
467 '_', /* Leading symbol underscore. */
468 '/', /* ar_pad_char */
469 15, /* ar_max_namelen */
470 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
471 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
472 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
473 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
474 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
475 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
476
477 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
478 bfd_generic_archive_p, _bfd_dummy_target},
479 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
480 bfd_false},
481 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
482 _bfd_write_archive_contents, bfd_false},
483
484 BFD_JUMP_TABLE_GENERIC (coff),
485 BFD_JUMP_TABLE_COPY (coff),
486 BFD_JUMP_TABLE_CORE (_bfd_nocore),
487 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
488 BFD_JUMP_TABLE_SYMBOLS (coff),
489 BFD_JUMP_TABLE_RELOCS (coff),
490 BFD_JUMP_TABLE_WRITE (coff),
491 BFD_JUMP_TABLE_LINK (coff),
492 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
493
494 &tic4x_coff0_beh_vec,
495
496 (PTR)&ticoff1_swap_table
497};
498
499/* TI COFF v1, SPARC tools (big-endian headers). */
500const bfd_target tic4x_coff1_beh_vec =
501{
502 "coff1-beh-c4x", /* Name. */
503 bfd_target_coff_flavour,
504 BFD_ENDIAN_LITTLE, /* Data byte order is little. */
505 BFD_ENDIAN_BIG, /* Header byte order is big. */
506
507 (HAS_RELOC | EXEC_P | /* Object flags. */
508 HAS_LINENO | HAS_DEBUG |
509 HAS_SYMS | HAS_LOCALS | WP_TEXT | HAS_LOAD_PAGE ),
510
511 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
512 '_', /* Leading symbol underscore. */
513 '/', /* ar_pad_char */
514 15, /* ar_max_namelen */
515 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
516 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
517 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
518 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
519 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
520 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
521
522 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
523 bfd_generic_archive_p, _bfd_dummy_target},
524 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
525 bfd_false},
526 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
527 _bfd_write_archive_contents, bfd_false},
528
529 BFD_JUMP_TABLE_GENERIC (coff),
530 BFD_JUMP_TABLE_COPY (coff),
531 BFD_JUMP_TABLE_CORE (_bfd_nocore),
532 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
533 BFD_JUMP_TABLE_SYMBOLS (coff),
534 BFD_JUMP_TABLE_RELOCS (coff),
535 BFD_JUMP_TABLE_WRITE (coff),
536 BFD_JUMP_TABLE_LINK (coff),
537 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
538
539 &tic4x_coff1_vec,
540
541 (PTR)&ticoff1_swap_table
542};
543
544/* TI COFF v2, TI DOS tools output (little-endian headers). */
545const bfd_target tic4x_coff2_vec =
546{
547 "coff2-c4x", /* Name. */
548 bfd_target_coff_flavour,
549 BFD_ENDIAN_LITTLE, /* Data byte order is little. */
550 BFD_ENDIAN_LITTLE, /* Header byte order is little (DOS tools). */
551
552 (HAS_RELOC | EXEC_P | /* Object flags. */
553 HAS_LINENO | HAS_DEBUG |
554 HAS_SYMS | HAS_LOCALS | WP_TEXT | HAS_LOAD_PAGE ),
555
556 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
557 '_', /* Leading symbol underscore. */
558 '/', /* ar_pad_char */
559 15, /* ar_max_namelen */
560 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
561 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
562 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
563 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
564 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
565 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
566
567 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
568 bfd_generic_archive_p, _bfd_dummy_target},
569 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
570 bfd_false},
571 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
572 _bfd_write_archive_contents, bfd_false},
573
574 BFD_JUMP_TABLE_GENERIC (coff),
575 BFD_JUMP_TABLE_COPY (coff),
576 BFD_JUMP_TABLE_CORE (_bfd_nocore),
577 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
578 BFD_JUMP_TABLE_SYMBOLS (coff),
579 BFD_JUMP_TABLE_RELOCS (coff),
580 BFD_JUMP_TABLE_WRITE (coff),
581 BFD_JUMP_TABLE_LINK (coff),
582 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
583
584 &tic4x_coff1_beh_vec,
585
586 COFF_SWAP_TABLE
587};
588
589/* TI COFF v2, TI SPARC tools output (big-endian headers). */
590const bfd_target tic4x_coff2_beh_vec =
591{
592 "coff2-beh-c4x", /* Name. */
593 bfd_target_coff_flavour,
594 BFD_ENDIAN_LITTLE, /* Data byte order is little. */
595 BFD_ENDIAN_BIG, /* Header byte order is big. */
596
597 (HAS_RELOC | EXEC_P | /* Object flags. */
598 HAS_LINENO | HAS_DEBUG |
599 HAS_SYMS | HAS_LOCALS | WP_TEXT | HAS_LOAD_PAGE ),
600
601 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */
602 '_', /* Leading symbol underscore. */
603 '/', /* ar_pad_char */
604 15, /* ar_max_namelen */
605 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
606 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
607 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
608 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
609 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
610 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
611
612 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
613 bfd_generic_archive_p, _bfd_dummy_target},
614 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
615 bfd_false},
616 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
617 _bfd_write_archive_contents, bfd_false},
618
619 BFD_JUMP_TABLE_GENERIC (coff),
620 BFD_JUMP_TABLE_COPY (coff),
621 BFD_JUMP_TABLE_CORE (_bfd_nocore),
622 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
623 BFD_JUMP_TABLE_SYMBOLS (coff),
624 BFD_JUMP_TABLE_RELOCS (coff),
625 BFD_JUMP_TABLE_WRITE (coff),
626 BFD_JUMP_TABLE_LINK (coff),
627 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
628
629 &tic4x_coff2_vec,
630
631 COFF_SWAP_TABLE
632};
This page took 0.065673 seconds and 4 git commands to generate.