OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [bfd/] [coff-tic54x.c] - Blame information for rev 1776

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.