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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [bfd/] [coff-tic54x.c] - Blame information for rev 1777

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

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

powered by: WebSVN 2.1.0

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