Automatic date update in version.in
[deliverable/binutils-gdb.git] / bfd / coff-tic54x.c
CommitLineData
81635ce4 1/* BFD back-end for TMS320C54X coff binaries.
219d1afa 2 Copyright (C) 1999-2018 Free Software Foundation, Inc.
a44f2895 3 Contributed by Timothy Wall (twall@cygnus.com)
81635ce4
TW
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
cd123cb7 9 the Free Software Foundation; either version 3 of the License, or
81635ce4
TW
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
3e110533 19 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
53e09e0a 20 02110-1301, USA. */
81635ce4 21
81635ce4 22#include "sysdep.h"
3db64b00 23#include "bfd.h"
81635ce4
TW
24#include "libbfd.h"
25#include "bfdlink.h"
26#include "coff/tic54x.h"
27#include "coff/internal.h"
28#include "libcoff.h"
29
f4ffd778 30#undef F_LSYMS
81635ce4
TW
31#define F_LSYMS F_LSYMS_TICOFF
32
2c3fc389
NC
33static void
34tic54x_reloc_processing (arelent *, struct internal_reloc *,
35 asymbol **, bfd *, asection *);
f4ffd778
NC
36
37/* 32-bit operations
38 The octet order is screwy. words are LSB first (LS octet, actually), but
39 longwords are MSW first. For example, 0x12345678 is encoded 0x5678 in the
40 first word and 0x1234 in the second. When looking at the data as stored in
41 the COFF file, you would see the octets ordered as 0x78, 0x56, 0x34, 0x12.
42 Don't bother with 64-bits, as there aren't any. */
43
81635ce4 44static bfd_vma
edeb6e24 45tic54x_getl32 (const void *p)
81635ce4 46{
edeb6e24 47 const bfd_byte *addr = p;
81635ce4 48 unsigned long v;
f4ffd778
NC
49
50 v = (unsigned long) addr[2];
81635ce4
TW
51 v |= (unsigned long) addr[3] << 8;
52 v |= (unsigned long) addr[0] << 16;
53 v |= (unsigned long) addr[1] << 24;
edeb6e24 54 return v;
81635ce4
TW
55}
56
57static void
edeb6e24 58tic54x_putl32 (bfd_vma data, void *p)
81635ce4 59{
edeb6e24
AM
60 bfd_byte *addr = p;
61 addr[2] = data & 0xff;
62 addr[3] = (data >> 8) & 0xff;
63 addr[0] = (data >> 16) & 0xff;
64 addr[1] = (data >> 24) & 0xff;
81635ce4
TW
65}
66
edeb6e24
AM
67static bfd_signed_vma
68tic54x_getl_signed_32 (const void *p)
81635ce4 69{
edeb6e24 70 const bfd_byte *addr = p;
81635ce4
TW
71 unsigned long v;
72
f4ffd778 73 v = (unsigned long) addr[2];
81635ce4
TW
74 v |= (unsigned long) addr[3] << 8;
75 v |= (unsigned long) addr[0] << 16;
76 v |= (unsigned long) addr[1] << 24;
77#define COERCE32(x) \
78 ((bfd_signed_vma) (long) (((unsigned long) (x) ^ 0x80000000) - 0x80000000))
79 return COERCE32 (v);
80}
81
b9af77f5
TW
82#define coff_get_section_load_page bfd_ticoff_get_section_load_page
83#define coff_set_section_load_page bfd_ticoff_set_section_load_page
84
cbfe05c4 85void
2c3fc389
NC
86bfd_ticoff_set_section_load_page (asection *sect,
87 int page)
b9af77f5
TW
88{
89 sect->lma = (sect->lma & ADDR_MASK) | PG_TO_FLAG(page);
90}
91
b9af77f5 92int
2c3fc389 93bfd_ticoff_get_section_load_page (asection *sect)
b9af77f5
TW
94{
95 int page;
96
cbfe05c4 97 /* Provide meaningful defaults for predefined sections. */
45dfa85a 98 if (sect == bfd_com_section_ptr)
b9af77f5
TW
99 page = PG_DATA;
100
45dfa85a
AM
101 else if (bfd_is_und_section (sect)
102 || bfd_is_abs_section (sect)
103 || bfd_is_ind_section (sect))
b9af77f5
TW
104 page = PG_PROG;
105
106 else
107 page = FLAG_TO_PG (sect->lma);
108
109 return page;
110}
111
112/* Set the architecture appropriately. Allow unkown architectures
cbfe05c4 113 (e.g. binary). */
f4ffd778 114
b34976b6 115static bfd_boolean
2c3fc389
NC
116tic54x_set_arch_mach (bfd *abfd,
117 enum bfd_architecture arch,
118 unsigned long machine)
b9af77f5
TW
119{
120 if (arch == bfd_arch_unknown)
121 arch = bfd_arch_tic54x;
122
123 else if (arch != bfd_arch_tic54x)
b34976b6 124 return FALSE;
b9af77f5
TW
125
126 return bfd_default_set_arch_mach (abfd, arch, machine);
127}
128
81635ce4 129static bfd_reloc_status_type
2c3fc389
NC
130tic54x_relocation (bfd *abfd ATTRIBUTE_UNUSED,
131 arelent *reloc_entry,
132 asymbol *symbol ATTRIBUTE_UNUSED,
133 void * data ATTRIBUTE_UNUSED,
134 asection *input_section,
135 bfd *output_bfd,
136 char **error_message ATTRIBUTE_UNUSED)
81635ce4 137{
81635ce4
TW
138 if (output_bfd != (bfd *) NULL)
139 {
140 /* This is a partial relocation, and we want to apply the
07d6d2b8
AM
141 relocation to the reloc entry rather than the raw data.
142 Modify the reloc inplace to reflect what we now know. */
81635ce4
TW
143 reloc_entry->address += input_section->output_offset;
144 return bfd_reloc_ok;
145 }
146 return bfd_reloc_continue;
147}
148
149reloc_howto_type tic54x_howto_table[] =
f4ffd778
NC
150 {
151 /* type,rightshift,size (0=byte, 1=short, 2=long),
152 bit size, pc_relative, bitpos, dont complain_on_overflow,
153 special_function, name, partial_inplace, src_mask, dst_mask, pcrel_offset. */
154
155 /* NORMAL BANK */
156 /* 16-bit direct reference to symbol's address. */
b34976b6
AM
157 HOWTO (R_RELWORD,0,1,16,FALSE,0,complain_overflow_dont,
158 tic54x_relocation,"REL16",FALSE,0xFFFF,0xFFFF,FALSE),
f4ffd778
NC
159
160 /* 7 LSBs of an address */
b34976b6
AM
161 HOWTO (R_PARTLS7,0,1,7,FALSE,0,complain_overflow_dont,
162 tic54x_relocation,"LS7",FALSE,0x007F,0x007F,FALSE),
f4ffd778
NC
163
164 /* 9 MSBs of an address */
165 /* TI assembler doesn't shift its encoding, and is thus incompatible */
b34976b6
AM
166 HOWTO (R_PARTMS9,7,1,9,FALSE,0,complain_overflow_dont,
167 tic54x_relocation,"MS9",FALSE,0x01FF,0x01FF,FALSE),
f4ffd778
NC
168
169 /* 23-bit relocation */
b34976b6
AM
170 HOWTO (R_EXTWORD,0,2,23,FALSE,0,complain_overflow_dont,
171 tic54x_relocation,"RELEXT",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
f4ffd778
NC
172
173 /* 16 bits of 23-bit extended address */
b34976b6
AM
174 HOWTO (R_EXTWORD16,0,1,16,FALSE,0,complain_overflow_dont,
175 tic54x_relocation,"RELEXT16",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
f4ffd778
NC
176
177 /* upper 7 bits of 23-bit extended address */
b34976b6
AM
178 HOWTO (R_EXTWORDMS7,16,1,7,FALSE,0,complain_overflow_dont,
179 tic54x_relocation,"RELEXTMS7",FALSE,0x7F,0x7F,FALSE),
f4ffd778
NC
180
181 /* ABSOLUTE BANK */
182 /* 16-bit direct reference to symbol's address, absolute */
b34976b6
AM
183 HOWTO (R_RELWORD,0,1,16,FALSE,0,complain_overflow_dont,
184 tic54x_relocation,"AREL16",FALSE,0xFFFF,0xFFFF,FALSE),
f4ffd778
NC
185
186 /* 7 LSBs of an address, absolute */
b34976b6
AM
187 HOWTO (R_PARTLS7,0,1,7,FALSE,0,complain_overflow_dont,
188 tic54x_relocation,"ALS7",FALSE,0x007F,0x007F,FALSE),
f4ffd778
NC
189
190 /* 9 MSBs of an address, absolute */
191 /* TI assembler doesn't shift its encoding, and is thus incompatible */
b34976b6
AM
192 HOWTO (R_PARTMS9,7,1,9,FALSE,0,complain_overflow_dont,
193 tic54x_relocation,"AMS9",FALSE,0x01FF,0x01FF,FALSE),
f4ffd778
NC
194
195 /* 23-bit direct reference, absolute */
b34976b6
AM
196 HOWTO (R_EXTWORD,0,2,23,FALSE,0,complain_overflow_dont,
197 tic54x_relocation,"ARELEXT",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
f4ffd778
NC
198
199 /* 16 bits of 23-bit extended address, absolute */
b34976b6
AM
200 HOWTO (R_EXTWORD16,0,1,16,FALSE,0,complain_overflow_dont,
201 tic54x_relocation,"ARELEXT16",FALSE,0x7FFFFF,0x7FFFFF,FALSE),
f4ffd778
NC
202
203 /* upper 7 bits of 23-bit extended address, absolute */
b34976b6
AM
204 HOWTO (R_EXTWORDMS7,16,1,7,FALSE,0,complain_overflow_dont,
205 tic54x_relocation,"ARELEXTMS7",FALSE,0x7F,0x7F,FALSE),
f4ffd778
NC
206
207 /* 32-bit relocation exclusively for stabs */
b34976b6
AM
208 HOWTO (R_RELLONG,0,2,32,FALSE,0,complain_overflow_dont,
209 tic54x_relocation,"STAB",FALSE,0xFFFFFFFF,0xFFFFFFFF,FALSE),
f4ffd778 210 };
81635ce4
TW
211
212#define coff_bfd_reloc_type_lookup tic54x_coff_reloc_type_lookup
157090f7 213#define coff_bfd_reloc_name_lookup tic54x_coff_reloc_name_lookup
81635ce4
TW
214
215/* For the case statement use the code values used tc_gen_reloc (defined in
f4ffd778
NC
216 bfd/reloc.c) to map to the howto table entries. */
217
2c3fc389
NC
218static reloc_howto_type *
219tic54x_coff_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
220 bfd_reloc_code_real_type code)
81635ce4
TW
221{
222 switch (code)
223 {
224 case BFD_RELOC_16:
225 return &tic54x_howto_table[0];
226 case BFD_RELOC_TIC54X_PARTLS7:
227 return &tic54x_howto_table[1];
228 case BFD_RELOC_TIC54X_PARTMS9:
229 return &tic54x_howto_table[2];
230 case BFD_RELOC_TIC54X_23:
231 return &tic54x_howto_table[3];
232 case BFD_RELOC_TIC54X_16_OF_23:
233 return &tic54x_howto_table[4];
234 case BFD_RELOC_TIC54X_MS7_OF_23:
235 return &tic54x_howto_table[5];
236 case BFD_RELOC_32:
237 return &tic54x_howto_table[12];
238 default:
239 return (reloc_howto_type *) NULL;
240 }
241}
242
157090f7
AM
243static reloc_howto_type *
244tic54x_coff_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
245 const char *r_name)
246{
247 unsigned int i;
248
249 for (i = 0;
250 i < sizeof (tic54x_howto_table) / sizeof (tic54x_howto_table[0]);
251 i++)
252 if (tic54x_howto_table[i].name != NULL
253 && strcasecmp (tic54x_howto_table[i].name, r_name) == 0)
254 return &tic54x_howto_table[i];
255
256 return NULL;
257}
258
cbfe05c4 259/* Code to turn a r_type into a howto ptr, uses the above howto table.
f4ffd778
NC
260 Called after some initial checking by the tic54x_rtype_to_howto fn below. */
261
81635ce4 262static void
2c3fc389
NC
263tic54x_lookup_howto (arelent *internal,
264 struct internal_reloc *dst)
81635ce4
TW
265{
266 unsigned i;
267 int bank = (dst->r_symndx == -1) ? HOWTO_BANK : 0;
f4ffd778 268
81635ce4
TW
269 for (i = 0; i < sizeof tic54x_howto_table/sizeof tic54x_howto_table[0]; i++)
270 {
271 if (tic54x_howto_table[i].type == dst->r_type)
272 {
273 internal->howto = tic54x_howto_table + i + bank;
274 return;
275 }
276 }
277
4eca0228
AM
278 _bfd_error_handler (_("Unrecognized reloc type 0x%x"),
279 (unsigned int) dst->r_type);
cbfe05c4 280 abort ();
81635ce4
TW
281}
282
283#define RELOC_PROCESSING(RELENT,RELOC,SYMS,ABFD,SECT)\
284 tic54x_reloc_processing(RELENT,RELOC,SYMS,ABFD,SECT)
285
81635ce4
TW
286#define coff_rtype_to_howto coff_tic54x_rtype_to_howto
287
288static reloc_howto_type *
2c3fc389
NC
289coff_tic54x_rtype_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
290 asection *sec,
291 struct internal_reloc *rel,
292 struct coff_link_hash_entry *h ATTRIBUTE_UNUSED,
293 struct internal_syment *sym ATTRIBUTE_UNUSED,
294 bfd_vma *addendp)
81635ce4
TW
295{
296 arelent genrel;
297
298 if (rel->r_symndx == -1 && addendp != NULL)
299 {
300 /* This is a TI "internal relocation", which means that the relocation
301 amount is the amount by which the current section is being relocated
cbfe05c4 302 in the output section. */
81635ce4
TW
303 *addendp = (sec->output_section->vma + sec->output_offset) - sec->vma;
304 }
305
306 tic54x_lookup_howto (&genrel, rel);
307
308 return genrel.howto;
309}
310
f4ffd778
NC
311/* Replace the stock _bfd_coff_is_local_label_name to recognize TI COFF local
312 labels. */
313
b34976b6 314static bfd_boolean
2c3fc389
NC
315ticoff_bfd_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED,
316 const char *name)
81635ce4
TW
317{
318 if (TICOFF_LOCAL_LABEL_P(name))
b34976b6
AM
319 return TRUE;
320 return FALSE;
81635ce4
TW
321}
322
323#define coff_bfd_is_local_label_name ticoff_bfd_is_local_label_name
324
cbfe05c4 325/* Customize coffcode.h; the default coff_ functions are set up to use COFF2;
81635ce4
TW
326 coff_bad_format_hook uses BADMAG, so set that for COFF2. The COFF1
327 and COFF0 vectors use custom _bad_format_hook procs instead of setting
f4ffd778 328 BADMAG. */
81635ce4 329#define BADMAG(x) COFF2_BADMAG(x)
2b5c217d
NC
330
331#ifndef bfd_pe_print_pdata
332#define bfd_pe_print_pdata NULL
333#endif
334
81635ce4
TW
335#include "coffcode.h"
336
b34976b6 337static bfd_boolean
2c3fc389
NC
338tic54x_set_section_contents (bfd *abfd,
339 sec_ptr section,
340 const void * location,
341 file_ptr offset,
342 bfd_size_type bytes_to_do)
b9af77f5 343{
cbfe05c4 344 return coff_set_section_contents (abfd, section, location,
07d6d2b8 345 offset, bytes_to_do);
b9af77f5
TW
346}
347
81635ce4 348static void
2c3fc389
NC
349tic54x_reloc_processing (arelent *relent,
350 struct internal_reloc *reloc,
351 asymbol **symbols,
352 bfd *abfd,
353 asection *section)
81635ce4
TW
354{
355 asymbol *ptr;
356
357 relent->address = reloc->r_vaddr;
cbfe05c4 358
81635ce4
TW
359 if (reloc->r_symndx != -1)
360 {
361 if (reloc->r_symndx < 0 || reloc->r_symndx >= obj_conv_table_size (abfd))
07d6d2b8
AM
362 {
363 _bfd_error_handler
695344c0 364 /* xgettext: c-format */
871b3ab2 365 (_("%pB: warning: illegal symbol index %ld in relocs"),
07d6d2b8
AM
366 abfd, reloc->r_symndx);
367 relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
368 ptr = NULL;
369 }
81635ce4 370 else
07d6d2b8
AM
371 {
372 relent->sym_ptr_ptr = (symbols
373 + obj_convert (abfd)[reloc->r_symndx]);
374 ptr = *(relent->sym_ptr_ptr);
375 }
81635ce4
TW
376 }
377 else
378 {
379 relent->sym_ptr_ptr = section->symbol_ptr_ptr;
380 ptr = *(relent->sym_ptr_ptr);
381 }
cbfe05c4 382
81635ce4
TW
383 /* The symbols definitions that we have read in have been
384 relocated as if their sections started at 0. But the offsets
385 refering to the symbols in the raw data have not been
386 modified, so we have to have a negative addend to compensate.
cbfe05c4 387
f4ffd778 388 Note that symbols which used to be common must be left alone. */
cbfe05c4 389
f4ffd778 390 /* Calculate any reloc addend by looking at the symbol. */
81635ce4 391 CALC_ADDEND (abfd, ptr, *reloc, relent);
cbfe05c4 392
81635ce4
TW
393 relent->address -= section->vma;
394 /* !! relent->section = (asection *) NULL;*/
cbfe05c4 395
f4ffd778 396 /* Fill in the relent->howto field from reloc->r_type. */
81635ce4
TW
397 tic54x_lookup_howto (relent, reloc);
398}
399
f4ffd778 400/* TI COFF v0, DOS tools (little-endian headers). */
81635ce4 401const bfd_target tic54x_coff0_vec =
f4ffd778 402 {
d00dd7dc 403 "coff0-c54x", /* name */
f4ffd778
NC
404 bfd_target_coff_flavour,
405 BFD_ENDIAN_LITTLE, /* data byte order is little */
406 BFD_ENDIAN_LITTLE, /* header byte order is little (DOS tools) */
407
d00dd7dc
AM
408 (HAS_RELOC | EXEC_P /* object flags */
409 | HAS_LINENO | HAS_DEBUG
410 | HAS_SYMS | HAS_LOCALS | WP_TEXT ),
f4ffd778
NC
411
412 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
d00dd7dc
AM
413 '_', /* leading symbol underscore */
414 '/', /* ar_pad_char */
f4ffd778 415 15, /* ar_max_namelen */
0aabe54e 416 0, /* match priority. */
f4ffd778
NC
417 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
418 tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
419 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
420 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
421 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
422 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
423
d00dd7dc
AM
424 { /* bfd_check_format */
425 _bfd_dummy_target,
426 coff_object_p,
427 bfd_generic_archive_p,
428 _bfd_dummy_target
429 },
430 { /* bfd_set_format */
431 _bfd_bool_bfd_false_error,
432 coff_mkobject,
433 _bfd_generic_mkarchive,
434 _bfd_bool_bfd_false_error
435 },
436 { /* bfd_write_contents */
437 _bfd_bool_bfd_false_error,
438 coff_write_object_contents,
439 _bfd_write_archive_contents,
440 _bfd_bool_bfd_false_error
441 },
f4ffd778
NC
442
443 BFD_JUMP_TABLE_GENERIC (coff),
444 BFD_JUMP_TABLE_COPY (coff),
445 BFD_JUMP_TABLE_CORE (_bfd_nocore),
446 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
447 BFD_JUMP_TABLE_SYMBOLS (coff),
448 BFD_JUMP_TABLE_RELOCS (coff),
449 BFD_JUMP_TABLE_WRITE (tic54x),
450 BFD_JUMP_TABLE_LINK (coff),
451 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
452 NULL,
453
d00dd7dc 454 &ticoff0_swap_table
f4ffd778
NC
455 };
456
457/* TI COFF v0, SPARC tools (big-endian headers). */
81635ce4 458const bfd_target tic54x_coff0_beh_vec =
f4ffd778 459 {
d00dd7dc 460 "coff0-beh-c54x", /* name */
f4ffd778
NC
461 bfd_target_coff_flavour,
462 BFD_ENDIAN_LITTLE, /* data byte order is little */
463 BFD_ENDIAN_BIG, /* header byte order is big */
464
d00dd7dc
AM
465 (HAS_RELOC | EXEC_P /* object flags */
466 | HAS_LINENO | HAS_DEBUG
467 | HAS_SYMS | HAS_LOCALS | WP_TEXT ),
f4ffd778
NC
468
469 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
d00dd7dc
AM
470 '_', /* leading symbol underscore */
471 '/', /* ar_pad_char */
f4ffd778 472 15, /* ar_max_namelen */
0aabe54e 473 0, /* match priority. */
f4ffd778
NC
474 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
475 tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
476 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
477 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
478 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
479 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
480
d00dd7dc
AM
481 { /* bfd_check_format */
482 _bfd_dummy_target,
483 coff_object_p,
484 bfd_generic_archive_p,
485 _bfd_dummy_target
486 },
487 { /* bfd_set_format */
488 _bfd_bool_bfd_false_error,
489 coff_mkobject,
490 _bfd_generic_mkarchive,
491 _bfd_bool_bfd_false_error
492 },
493 { /* bfd_write_contents */
494 _bfd_bool_bfd_false_error,
495 coff_write_object_contents,
496 _bfd_write_archive_contents,
497 _bfd_bool_bfd_false_error
498 },
f4ffd778
NC
499
500 BFD_JUMP_TABLE_GENERIC (coff),
501 BFD_JUMP_TABLE_COPY (coff),
502 BFD_JUMP_TABLE_CORE (_bfd_nocore),
503 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
504 BFD_JUMP_TABLE_SYMBOLS (coff),
505 BFD_JUMP_TABLE_RELOCS (coff),
506 BFD_JUMP_TABLE_WRITE (tic54x),
507 BFD_JUMP_TABLE_LINK (coff),
508 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
509
d00dd7dc 510 &tic54x_coff0_vec,
f4ffd778 511
d00dd7dc 512 &ticoff0_swap_table
f4ffd778
NC
513 };
514
515/* TI COFF v1, DOS tools (little-endian headers). */
81635ce4 516const bfd_target tic54x_coff1_vec =
f4ffd778 517 {
d00dd7dc 518 "coff1-c54x", /* name */
f4ffd778
NC
519 bfd_target_coff_flavour,
520 BFD_ENDIAN_LITTLE, /* data byte order is little */
521 BFD_ENDIAN_LITTLE, /* header byte order is little (DOS tools) */
522
d00dd7dc
AM
523 (HAS_RELOC | EXEC_P /* object flags */
524 | HAS_LINENO | HAS_DEBUG
525 | HAS_SYMS | HAS_LOCALS | WP_TEXT ),
f4ffd778
NC
526
527 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
d00dd7dc
AM
528 '_', /* leading symbol underscore */
529 '/', /* ar_pad_char */
f4ffd778 530 15, /* ar_max_namelen */
0aabe54e 531 0, /* match priority. */
f4ffd778
NC
532 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
533 tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
534 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
535 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
536 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
537 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
538
d00dd7dc
AM
539 { /* bfd_check_format */
540 _bfd_dummy_target,
541 coff_object_p,
542 bfd_generic_archive_p,
543 _bfd_dummy_target
544 },
545 { /* bfd_set_format */
546 _bfd_bool_bfd_false_error,
547 coff_mkobject,
548 _bfd_generic_mkarchive,
549 _bfd_bool_bfd_false_error
550 },
551 { /* bfd_write_contents */
552 _bfd_bool_bfd_false_error,
553 coff_write_object_contents,
554 _bfd_write_archive_contents,
555 _bfd_bool_bfd_false_error
556 },
f4ffd778
NC
557
558 BFD_JUMP_TABLE_GENERIC (coff),
559 BFD_JUMP_TABLE_COPY (coff),
560 BFD_JUMP_TABLE_CORE (_bfd_nocore),
561 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
562 BFD_JUMP_TABLE_SYMBOLS (coff),
563 BFD_JUMP_TABLE_RELOCS (coff),
564 BFD_JUMP_TABLE_WRITE (tic54x),
565 BFD_JUMP_TABLE_LINK (coff),
566 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
567
d00dd7dc 568 &tic54x_coff0_beh_vec,
f4ffd778 569
d00dd7dc 570 &ticoff1_swap_table
81635ce4
TW
571};
572
f4ffd778 573/* TI COFF v1, SPARC tools (big-endian headers). */
81635ce4 574const bfd_target tic54x_coff1_beh_vec =
f4ffd778 575 {
d00dd7dc 576 "coff1-beh-c54x", /* name */
f4ffd778
NC
577 bfd_target_coff_flavour,
578 BFD_ENDIAN_LITTLE, /* data byte order is little */
579 BFD_ENDIAN_BIG, /* header byte order is big */
580
d00dd7dc
AM
581 (HAS_RELOC | EXEC_P /* object flags */
582 | HAS_LINENO | HAS_DEBUG
583 | HAS_SYMS | HAS_LOCALS | WP_TEXT ),
f4ffd778
NC
584
585 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
d00dd7dc
AM
586 '_', /* leading symbol underscore */
587 '/', /* ar_pad_char */
f4ffd778 588 15, /* ar_max_namelen */
0aabe54e 589 0, /* match priority. */
f4ffd778
NC
590 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
591 tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
592 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
593 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
594 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
595 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
596
d00dd7dc
AM
597 { /* bfd_check_format */
598 _bfd_dummy_target,
599 coff_object_p,
600 bfd_generic_archive_p,
601 _bfd_dummy_target
602 },
603 { /* bfd_set_format */
604 _bfd_bool_bfd_false_error,
605 coff_mkobject,
606 _bfd_generic_mkarchive,
607 _bfd_bool_bfd_false_error
608 },
609 { /* bfd_write_contents */
610 _bfd_bool_bfd_false_error,
611 coff_write_object_contents,
612 _bfd_write_archive_contents,
613 _bfd_bool_bfd_false_error
614 },
f4ffd778
NC
615
616 BFD_JUMP_TABLE_GENERIC (coff),
617 BFD_JUMP_TABLE_COPY (coff),
618 BFD_JUMP_TABLE_CORE (_bfd_nocore),
619 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
620 BFD_JUMP_TABLE_SYMBOLS (coff),
621 BFD_JUMP_TABLE_RELOCS (coff),
622 BFD_JUMP_TABLE_WRITE (tic54x),
623 BFD_JUMP_TABLE_LINK (coff),
624 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
625
d00dd7dc 626 &tic54x_coff1_vec,
f4ffd778 627
d00dd7dc 628 &ticoff1_swap_table
f4ffd778
NC
629 };
630
631/* TI COFF v2, TI DOS tools output (little-endian headers). */
81635ce4 632const bfd_target tic54x_coff2_vec =
f4ffd778 633 {
d00dd7dc 634 "coff2-c54x", /* name */
f4ffd778
NC
635 bfd_target_coff_flavour,
636 BFD_ENDIAN_LITTLE, /* data byte order is little */
637 BFD_ENDIAN_LITTLE, /* header byte order is little (DOS tools) */
638
d00dd7dc
AM
639 (HAS_RELOC | EXEC_P /* object flags */
640 | HAS_LINENO | HAS_DEBUG
641 | HAS_SYMS | HAS_LOCALS | WP_TEXT ),
f4ffd778
NC
642
643 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
d00dd7dc
AM
644 '_', /* leading symbol underscore */
645 '/', /* ar_pad_char */
f4ffd778 646 15, /* ar_max_namelen */
0aabe54e 647 0, /* match priority. */
f4ffd778
NC
648 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
649 tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
650 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
651 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
652 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
653 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
654
d00dd7dc
AM
655 { /* bfd_check_format */
656 _bfd_dummy_target,
657 coff_object_p,
658 bfd_generic_archive_p,
659 _bfd_dummy_target
660 },
661 { /* bfd_set_format */
662 _bfd_bool_bfd_false_error,
663 coff_mkobject,
664 _bfd_generic_mkarchive,
665 _bfd_bool_bfd_false_error
666 },
667 { /* bfd_write_contents */
668 _bfd_bool_bfd_false_error,
669 coff_write_object_contents,
670 _bfd_write_archive_contents,
671 _bfd_bool_bfd_false_error
672 },
f4ffd778
NC
673
674 BFD_JUMP_TABLE_GENERIC (coff),
675 BFD_JUMP_TABLE_COPY (coff),
676 BFD_JUMP_TABLE_CORE (_bfd_nocore),
677 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
678 BFD_JUMP_TABLE_SYMBOLS (coff),
679 BFD_JUMP_TABLE_RELOCS (coff),
680 BFD_JUMP_TABLE_WRITE (tic54x),
681 BFD_JUMP_TABLE_LINK (coff),
682 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
683
d00dd7dc 684 &tic54x_coff1_beh_vec,
f4ffd778
NC
685
686 COFF_SWAP_TABLE
687 };
688
689/* TI COFF v2, TI SPARC tools output (big-endian headers). */
81635ce4 690const bfd_target tic54x_coff2_beh_vec =
f4ffd778 691 {
d00dd7dc 692 "coff2-beh-c54x", /* name */
f4ffd778
NC
693 bfd_target_coff_flavour,
694 BFD_ENDIAN_LITTLE, /* data byte order is little */
695 BFD_ENDIAN_BIG, /* header byte order is big */
696
d00dd7dc
AM
697 (HAS_RELOC | EXEC_P /* object flags */
698 | HAS_LINENO | HAS_DEBUG
699 | HAS_SYMS | HAS_LOCALS | WP_TEXT ),
f4ffd778
NC
700
701 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
d00dd7dc
AM
702 '_', /* leading symbol underscore */
703 '/', /* ar_pad_char */
f4ffd778 704 15, /* ar_max_namelen */
0aabe54e 705 0, /* match priority. */
f4ffd778
NC
706 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
707 tic54x_getl32, tic54x_getl_signed_32, tic54x_putl32,
708 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
709 bfd_getb64, bfd_getb_signed_64, bfd_putb64,
710 bfd_getb32, bfd_getb_signed_32, bfd_putb32,
711 bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
712
d00dd7dc
AM
713 { /* bfd_check_format */
714 _bfd_dummy_target,
715 coff_object_p,
716 bfd_generic_archive_p,
717 _bfd_dummy_target
718 },
719 { /* bfd_set_format */
720 _bfd_bool_bfd_false_error,
721 coff_mkobject,
722 _bfd_generic_mkarchive,
723 _bfd_bool_bfd_false_error
724 },
725 { /* bfd_write_contents */
726 _bfd_bool_bfd_false_error,
727 coff_write_object_contents,
728 _bfd_write_archive_contents,
729 _bfd_bool_bfd_false_error
730 },
f4ffd778
NC
731
732 BFD_JUMP_TABLE_GENERIC (coff),
733 BFD_JUMP_TABLE_COPY (coff),
734 BFD_JUMP_TABLE_CORE (_bfd_nocore),
735 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
736 BFD_JUMP_TABLE_SYMBOLS (coff),
737 BFD_JUMP_TABLE_RELOCS (coff),
738 BFD_JUMP_TABLE_WRITE (tic54x),
739 BFD_JUMP_TABLE_LINK (coff),
740 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
741
d00dd7dc 742 &tic54x_coff2_vec,
f4ffd778
NC
743
744 COFF_SWAP_TABLE
745 };
This page took 0.822348 seconds and 4 git commands to generate.