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