* libcoff-in.h (struct coff_final_link_info): Add boolean
[deliverable/binutils-gdb.git] / bfd / coff-tic80.c
1 /* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).
2 Copyright 1996, 1997 Free Software Foundation, Inc.
3
4 Written by Fred Fish (fnf@cygnus.com)
5
6 There is nothing new under the sun. This file draws a lot on other
7 coff files.
8
9 This file is part of BFD, the Binary File Descriptor library.
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
24
25 #include "bfd.h"
26 #include "bfdlink.h"
27 #include "sysdep.h"
28 #include "libbfd.h"
29 #include "coff/tic80.h"
30 #include "coff/internal.h"
31 #include "libcoff.h"
32
33 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)
34
35 static void rtype2howto
36 PARAMS ((arelent *cache_ptr, struct internal_reloc *dst));
37 static bfd_reloc_status_type ppbase_reloc
38 PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
39 static bfd_reloc_status_type glob15_reloc
40 PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
41 static bfd_reloc_status_type glob16_reloc
42 PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
43 static bfd_reloc_status_type local16_reloc
44 PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
45 static boolean coff_tic80_relocate_section
46 PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,
47 struct internal_reloc *, struct internal_syment *, asection **));
48
49 static reloc_howto_type tic80_howto_table[] =
50 {
51
52 HOWTO (R_RELLONG, /* type */
53 0, /* rightshift */
54 2, /* size (0 = byte, 1 = short, 2 = long) */
55 32, /* bitsize */
56 false, /* pc_relative */
57 0, /* bitpos */
58 complain_overflow_bitfield, /* complain_on_overflow */
59 NULL, /* special_function */
60 "RELLONG", /* name */
61 true, /* partial_inplace */
62 0xffffffff, /* src_mask */
63 0xffffffff, /* dst_mask */
64 false), /* pcrel_offset */
65
66 HOWTO (R_MPPCR, /* type */
67 2, /* rightshift */
68 2, /* size (0 = byte, 1 = short, 2 = long) */
69 32, /* bitsize */
70 true, /* pc_relative */
71 0, /* bitpos */
72 complain_overflow_signed, /* complain_on_overflow */
73 NULL, /* special_function */
74 "MPPCR", /* name */
75 true, /* partial_inplace */
76 0xffffffff, /* src_mask */
77 0xffffffff, /* dst_mask */
78 true), /* pcrel_offset */
79
80 HOWTO (R_ABS, /* type */
81 0, /* rightshift */
82 2, /* size (0 = byte, 1 = short, 2 = long) */
83 32, /* bitsize */
84 false, /* pc_relative */
85 0, /* bitpos */
86 complain_overflow_bitfield, /* complain_on_overflow */
87 NULL, /* special_function */
88 "ABS", /* name */
89 true, /* partial_inplace */
90 0xffffffff, /* src_mask */
91 0xffffffff, /* dst_mask */
92 false), /* pcrel_offset */
93
94 HOWTO (R_PPBASE, /* type */
95 0, /* rightshift */
96 2, /* size (0 = byte, 1 = short, 2 = long) */
97 32, /* bitsize */
98 false, /* pc_relative */
99 0, /* bitpos */
100 complain_overflow_dont, /* complain_on_overflow */
101 ppbase_reloc, /* special_function */
102 "PPBASE", /* name */
103 true, /* partial_inplace */
104 0xffffffff, /* src_mask */
105 0xffffffff, /* dst_mask */
106 false), /* pcrel_offset */
107
108 HOWTO (R_PPLBASE, /* type */
109 0, /* rightshift */
110 2, /* size (0 = byte, 1 = short, 2 = long) */
111 32, /* bitsize */
112 false, /* pc_relative */
113 0, /* bitpos */
114 complain_overflow_dont, /* complain_on_overflow */
115 ppbase_reloc, /* special_function */
116 "PPLBASE", /* name */
117 true, /* partial_inplace */
118 0xffffffff, /* src_mask */
119 0xffffffff, /* dst_mask */
120 false), /* pcrel_offset */
121
122 HOWTO (R_PP15, /* type */
123 0, /* rightshift */
124 2, /* size (0 = byte, 1 = short, 2 = long) */
125 15, /* bitsize */
126 false, /* pc_relative */
127 6, /* bitpos */
128 complain_overflow_dont, /* complain_on_overflow */
129 glob15_reloc, /* special_function */
130 "PP15", /* name */
131 true, /* partial_inplace */
132 0x1ffc0, /* src_mask */
133 0x1ffc0, /* dst_mask */
134 false), /* pcrel_offset */
135
136 HOWTO (R_PP15W, /* type */
137 2, /* rightshift */
138 2, /* size (0 = byte, 1 = short, 2 = long) */
139 15, /* bitsize */
140 false, /* pc_relative */
141 6, /* bitpos */
142 complain_overflow_dont, /* complain_on_overflow */
143 glob15_reloc, /* special_function */
144 "PP15W", /* name */
145 true, /* partial_inplace */
146 0x1ffc0, /* src_mask */
147 0x1ffc0, /* dst_mask */
148 false), /* pcrel_offset */
149
150 HOWTO (R_PP15H, /* type */
151 1, /* rightshift */
152 2, /* size (0 = byte, 1 = short, 2 = long) */
153 15, /* bitsize */
154 false, /* pc_relative */
155 6, /* bitpos */
156 complain_overflow_dont, /* complain_on_overflow */
157 glob15_reloc, /* special_function */
158 "PP15H", /* name */
159 true, /* partial_inplace */
160 0x1ffc0, /* src_mask */
161 0x1ffc0, /* dst_mask */
162 false), /* pcrel_offset */
163
164 HOWTO (R_PP16B, /* type */
165 0, /* rightshift */
166 2, /* size (0 = byte, 1 = short, 2 = long) */
167 16, /* bitsize */
168 false, /* pc_relative */
169 6, /* bitpos */
170 complain_overflow_dont, /* complain_on_overflow */
171 glob16_reloc, /* special_function */
172 "PP16B", /* name */
173 true, /* partial_inplace */
174 0x3ffc0, /* src_mask */
175 0x3ffc0, /* dst_mask */
176 false), /* pcrel_offset */
177
178 HOWTO (R_PPL15, /* type */
179 0, /* rightshift */
180 2, /* size (0 = byte, 1 = short, 2 = long) */
181 15, /* bitsize */
182 false, /* pc_relative */
183 0, /* bitpos */
184 complain_overflow_dont, /* complain_on_overflow */
185 NULL, /* special_function */
186 "PPL15", /* name */
187 true, /* partial_inplace */
188 0x7fff, /* src_mask */
189 0x7fff, /* dst_mask */
190 false), /* pcrel_offset */
191
192 HOWTO (R_PPL15W, /* type */
193 2, /* rightshift */
194 2, /* size (0 = byte, 1 = short, 2 = long) */
195 15, /* bitsize */
196 false, /* pc_relative */
197 0, /* bitpos */
198 complain_overflow_dont, /* complain_on_overflow */
199 NULL, /* special_function */
200 "PPL15W", /* name */
201 true, /* partial_inplace */
202 0x7fff, /* src_mask */
203 0x7fff, /* dst_mask */
204 false), /* pcrel_offset */
205
206 HOWTO (R_PPL15H, /* type */
207 1, /* rightshift */
208 2, /* size (0 = byte, 1 = short, 2 = long) */
209 15, /* bitsize */
210 false, /* pc_relative */
211 0, /* bitpos */
212 complain_overflow_dont, /* complain_on_overflow */
213 NULL, /* special_function */
214 "PPL15H", /* name */
215 true, /* partial_inplace */
216 0x7fff, /* src_mask */
217 0x7fff, /* dst_mask */
218 false), /* pcrel_offset */
219
220 HOWTO (R_PPL16B, /* type */
221 0, /* rightshift */
222 2, /* size (0 = byte, 1 = short, 2 = long) */
223 16, /* bitsize */
224 false, /* pc_relative */
225 0, /* bitpos */
226 complain_overflow_dont, /* complain_on_overflow */
227 local16_reloc, /* special_function */
228 "PPL16B", /* name */
229 true, /* partial_inplace */
230 0xffff, /* src_mask */
231 0xffff, /* dst_mask */
232 false), /* pcrel_offset */
233
234 HOWTO (R_PPN15, /* type */
235 0, /* rightshift */
236 -2, /* size (0 = byte, 1 = short, 2 = long) */
237 15, /* bitsize */
238 false, /* pc_relative */
239 6, /* bitpos */
240 complain_overflow_dont, /* complain_on_overflow */
241 glob15_reloc, /* special_function */
242 "PPN15", /* name */
243 true, /* partial_inplace */
244 0x1ffc0, /* src_mask */
245 0x1ffc0, /* dst_mask */
246 false), /* pcrel_offset */
247
248 HOWTO (R_PPN15W, /* type */
249 2, /* rightshift */
250 -2, /* size (0 = byte, 1 = short, 2 = long) */
251 15, /* bitsize */
252 false, /* pc_relative */
253 6, /* bitpos */
254 complain_overflow_dont, /* complain_on_overflow */
255 glob15_reloc, /* special_function */
256 "PPN15W", /* name */
257 true, /* partial_inplace */
258 0x1ffc0, /* src_mask */
259 0x1ffc0, /* dst_mask */
260 false), /* pcrel_offset */
261
262 HOWTO (R_PPN15H, /* type */
263 1, /* rightshift */
264 -2, /* size (0 = byte, 1 = short, 2 = long) */
265 15, /* bitsize */
266 false, /* pc_relative */
267 6, /* bitpos */
268 complain_overflow_dont, /* complain_on_overflow */
269 glob15_reloc, /* special_function */
270 "PPN15H", /* name */
271 true, /* partial_inplace */
272 0x1ffc0, /* src_mask */
273 0x1ffc0, /* dst_mask */
274 false), /* pcrel_offset */
275
276 HOWTO (R_PPN16B, /* type */
277 0, /* rightshift */
278 -2, /* size (0 = byte, 1 = short, 2 = long) */
279 16, /* bitsize */
280 false, /* pc_relative */
281 6, /* bitpos */
282 complain_overflow_dont, /* complain_on_overflow */
283 glob16_reloc, /* special_function */
284 "PPN16B", /* name */
285 true, /* partial_inplace */
286 0x3ffc0, /* src_mask */
287 0x3ffc0, /* dst_mask */
288 false), /* pcrel_offset */
289
290 HOWTO (R_PPLN15, /* type */
291 0, /* rightshift */
292 -2, /* size (0 = byte, 1 = short, 2 = long) */
293 15, /* bitsize */
294 false, /* pc_relative */
295 0, /* bitpos */
296 complain_overflow_dont, /* complain_on_overflow */
297 NULL, /* special_function */
298 "PPLN15", /* name */
299 true, /* partial_inplace */
300 0x7fff, /* src_mask */
301 0x7fff, /* dst_mask */
302 false), /* pcrel_offset */
303
304 HOWTO (R_PPLN15W, /* type */
305 2, /* rightshift */
306 -2, /* size (0 = byte, 1 = short, 2 = long) */
307 15, /* bitsize */
308 false, /* pc_relative */
309 0, /* bitpos */
310 complain_overflow_dont, /* complain_on_overflow */
311 NULL, /* special_function */
312 "PPLN15W", /* name */
313 true, /* partial_inplace */
314 0x7fff, /* src_mask */
315 0x7fff, /* dst_mask */
316 false), /* pcrel_offset */
317
318 HOWTO (R_PPLN15H, /* type */
319 1, /* rightshift */
320 -2, /* size (0 = byte, 1 = short, 2 = long) */
321 15, /* bitsize */
322 false, /* pc_relative */
323 0, /* bitpos */
324 complain_overflow_dont, /* complain_on_overflow */
325 NULL, /* special_function */
326 "PPLN15H", /* name */
327 true, /* partial_inplace */
328 0x7fff, /* src_mask */
329 0x7fff, /* dst_mask */
330 false), /* pcrel_offset */
331
332 HOWTO (R_PPLN16B, /* type */
333 0, /* rightshift */
334 -2, /* size (0 = byte, 1 = short, 2 = long) */
335 15, /* bitsize */
336 false, /* pc_relative */
337 0, /* bitpos */
338 complain_overflow_dont, /* complain_on_overflow */
339 local16_reloc, /* special_function */
340 "PPLN16B", /* name */
341 true, /* partial_inplace */
342 0xffff, /* src_mask */
343 0xffff, /* dst_mask */
344 false) /* pcrel_offset */
345 };
346 \f
347 /* Special relocation functions, used when the output file is not
348 itself a COFF TIc80 file. */
349
350 /* This special function is used for the base address type
351 relocations. */
352
353 static bfd_reloc_status_type
354 ppbase_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
355 error_message)
356 bfd *abfd;
357 arelent *reloc_entry;
358 asymbol *symbol_in;
359 PTR data;
360 asection *input_section;
361 bfd *output_bfd;
362 char **error_message;
363 {
364 /* FIXME. */
365 abort ();
366 }
367
368 /* This special function is used for the global 15 bit relocations. */
369
370 static bfd_reloc_status_type
371 glob15_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
372 error_message)
373 bfd *abfd;
374 arelent *reloc_entry;
375 asymbol *symbol_in;
376 PTR data;
377 asection *input_section;
378 bfd *output_bfd;
379 char **error_message;
380 {
381 /* FIXME. */
382 abort ();
383 }
384
385 /* This special function is used for the global 16 bit relocations. */
386
387 static bfd_reloc_status_type
388 glob16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
389 error_message)
390 bfd *abfd;
391 arelent *reloc_entry;
392 asymbol *symbol_in;
393 PTR data;
394 asection *input_section;
395 bfd *output_bfd;
396 char **error_message;
397 {
398 /* FIXME. */
399 abort ();
400 }
401
402 /* This special function is used for the local 16 bit relocations. */
403
404 static bfd_reloc_status_type
405 local16_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,
406 error_message)
407 bfd *abfd;
408 arelent *reloc_entry;
409 asymbol *symbol_in;
410 PTR data;
411 asection *input_section;
412 bfd *output_bfd;
413 char **error_message;
414 {
415 /* FIXME. */
416 abort ();
417 }
418 \f
419 /* Code to turn an external r_type into a pointer to an entry in the howto_table.
420 If passed an r_type we don't recognize the abort rather than silently failing
421 to generate an output file. */
422
423 static void
424 rtype2howto (cache_ptr, dst)
425 arelent *cache_ptr;
426 struct internal_reloc *dst;
427 {
428 unsigned int i;
429
430 for (i = 0; i < sizeof tic80_howto_table / sizeof tic80_howto_table[0]; i++)
431 {
432 if (tic80_howto_table[i].type == dst->r_type)
433 {
434 cache_ptr->howto = tic80_howto_table + i;
435 return;
436 }
437 }
438
439 (*_bfd_error_handler) ("Unrecognized reloc type 0x%x",
440 (unsigned int) dst->r_type);
441 cache_ptr->howto = tic80_howto_table + 0;
442 }
443
444 #define RTYPE2HOWTO(cache_ptr, dst) rtype2howto (cache_ptr, dst)
445 #define coff_rtype_to_howto coff_tic80_rtype_to_howto
446
447 static reloc_howto_type *
448 coff_tic80_rtype_to_howto (abfd, sec, rel, h, sym, addendp)
449 bfd *abfd;
450 asection *sec;
451 struct internal_reloc *rel;
452 struct coff_link_hash_entry *h;
453 struct internal_syment *sym;
454 bfd_vma *addendp;
455 {
456 arelent genrel;
457
458 if (rel -> r_symndx == -1 && addendp != NULL)
459 {
460 /* This is a TI "internal relocation", which means that the relocation
461 amount is the amount by which the current section is being relocated
462 in the output section. */
463 *addendp = (sec -> output_section -> vma + sec -> output_offset) - sec -> vma;
464 }
465 RTYPE2HOWTO (&genrel, rel);
466 return genrel.howto;
467 }
468
469 #ifndef BADMAG
470 #define BADMAG(x) TIC80BADMAG(x)
471 #endif
472 \f
473 #define coff_relocate_section coff_tic80_relocate_section
474
475 /* We need a special relocation routine to handle the PP relocs. Most
476 of this is a copy of _bfd_coff_generic_relocate_section. */
477
478 static boolean
479 coff_tic80_relocate_section (output_bfd, info, input_bfd,
480 input_section, contents, relocs, syms,
481 sections)
482 bfd *output_bfd;
483 struct bfd_link_info *info;
484 bfd *input_bfd;
485 asection *input_section;
486 bfd_byte *contents;
487 struct internal_reloc *relocs;
488 struct internal_syment *syms;
489 asection **sections;
490 {
491 struct internal_reloc *rel;
492 struct internal_reloc *relend;
493
494 rel = relocs;
495 relend = rel + input_section->reloc_count;
496 for (; rel < relend; rel++)
497 {
498 long symndx;
499 struct coff_link_hash_entry *h;
500 struct internal_syment *sym;
501 bfd_vma addend;
502 bfd_vma val;
503 reloc_howto_type *howto;
504 bfd_reloc_status_type rstat;
505 bfd_vma addr;
506
507 symndx = rel->r_symndx;
508
509 if (symndx == -1)
510 {
511 h = NULL;
512 sym = NULL;
513 }
514 else
515 {
516 h = obj_coff_sym_hashes (input_bfd)[symndx];
517 sym = syms + symndx;
518 }
519
520 /* COFF treats common symbols in one of two ways. Either the
521 size of the symbol is included in the section contents, or it
522 is not. We assume that the size is not included, and force
523 the rtype_to_howto function to adjust the addend as needed. */
524
525 if (sym != NULL && sym->n_scnum != 0)
526 addend = - sym->n_value;
527 else
528 addend = 0;
529
530 howto = bfd_coff_rtype_to_howto (input_bfd, input_section, rel, h,
531 sym, &addend);
532 if (howto == NULL)
533 return false;
534
535 val = 0;
536
537 if (h == NULL)
538 {
539 asection *sec;
540
541 if (symndx == -1)
542 {
543 sec = bfd_abs_section_ptr;
544 val = 0;
545 }
546 else
547 {
548 sec = sections[symndx];
549 val = (sec->output_section->vma
550 + sec->output_offset
551 + sym->n_value);
552 if (! obj_pe (output_bfd))
553 val -= sec->vma;
554 }
555 }
556 else
557 {
558 if (h->root.type == bfd_link_hash_defined
559 || h->root.type == bfd_link_hash_defweak)
560 {
561 asection *sec;
562
563 sec = h->root.u.def.section;
564 val = (h->root.u.def.value
565 + sec->output_section->vma
566 + sec->output_offset);
567 }
568
569 else if (! info->relocateable)
570 {
571 if (! ((*info->callbacks->undefined_symbol)
572 (info, h->root.root.string, input_bfd, input_section,
573 rel->r_vaddr - input_section->vma)))
574 return false;
575 }
576 }
577
578 addr = rel->r_vaddr - input_section->vma;
579
580 /* FIXME: This code assumes little endian, but the PP can
581 apparently be bi-endian. I don't know if the bi-endianness
582 applies to the instruction set or just to the data. */
583 switch (howto->type)
584 {
585 default:
586 case R_ABS:
587 case R_RELLONGX:
588 case R_PPL15:
589 case R_PPL15W:
590 case R_PPL15H:
591 case R_PPLN15:
592 case R_PPLN15W:
593 case R_PPLN15H:
594 rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
595 contents, addr, val, addend);
596 break;
597
598 case R_PP15:
599 case R_PP15W:
600 case R_PP15H:
601 case R_PPN15:
602 case R_PPN15W:
603 case R_PPN15H:
604 /* Offset the address so that we can use 4 byte relocations. */
605 rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
606 contents + 2, addr, val, addend);
607 break;
608
609 case R_PP16B:
610 case R_PPN16B:
611 {
612 /* The most significant bit is stored in bit 6. */
613 bfd_byte hold;
614
615 hold = contents[addr + 4];
616 contents[addr + 4] &=~ 0x20;
617 contents[addr + 4] |= (contents[addr] >> 1) & 0x20;
618 rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
619 contents + 2, addr,
620 val, addend);
621 contents[addr] &=~ 0x40;
622 contents[addr] |= (contents[addr + 4] << 1) & 0x40;
623 contents[addr + 4] &=~ 0x20;
624 contents[addr + 4] |= hold & 0x20;
625 break;
626 }
627
628 case R_PPL16B:
629 case R_PPLN16B:
630 {
631 /* The most significant bit is stored in bit 28. */
632 bfd_byte hold;
633
634 hold = contents[addr + 1];
635 contents[addr + 1] &=~ 0x80;
636 contents[addr + 1] |= (contents[addr + 3] << 3) & 0x80;
637 rstat = _bfd_final_link_relocate (howto, input_bfd, input_section,
638 contents, addr,
639 val, addend);
640 contents[addr + 3] &= ~0x10;
641 contents[addr + 3] |= (contents[addr + 1] >> 3) & 0x10;
642 contents[addr + 1] &=~ 0x80;
643 contents[addr + 1] |= hold & 0x80;
644 break;
645 }
646
647 case R_PPBASE:
648 /* Parameter RAM is from 0x1000000 to 0x1000800. */
649 contents[addr] &=~ 0x3;
650 if (val >= 0x1000000 && val < 0x1000800)
651 contents[addr] |= 0x3;
652 else
653 contents[addr] |= 0x2;
654 rstat = bfd_reloc_ok;
655 break;
656
657 case R_PPLBASE:
658 /* Parameter RAM is from 0x1000000 to 0x1000800. */
659 contents[addr + 2] &= ~0xc0;
660 if (val >= 0x1000000 && val < 0x1000800)
661 contents[addr + 2] |= 0xc0;
662 else
663 contents[addr + 2] |= 0x80;
664 rstat = bfd_reloc_ok;
665 break;
666 }
667
668 switch (rstat)
669 {
670 default:
671 abort ();
672 case bfd_reloc_ok:
673 break;
674 case bfd_reloc_outofrange:
675 (*_bfd_error_handler)
676 ("%s: bad reloc address 0x%lx in section `%s'",
677 bfd_get_filename (input_bfd),
678 (unsigned long) rel->r_vaddr,
679 bfd_get_section_name (input_bfd, input_section));
680 return false;
681 case bfd_reloc_overflow:
682 {
683 const char *name;
684 char buf[SYMNMLEN + 1];
685
686 if (symndx == -1)
687 name = "*ABS*";
688 else if (h != NULL)
689 name = h->root.root.string;
690 else
691 {
692 name = _bfd_coff_internal_syment_name (input_bfd, sym, buf);
693 if (name == NULL)
694 return false;
695 }
696
697 if (! ((*info->callbacks->reloc_overflow)
698 (info, name, howto->name, (bfd_vma) 0, input_bfd,
699 input_section, rel->r_vaddr - input_section->vma)))
700 return false;
701 }
702 }
703 }
704 return true;
705 }
706 \f
707 #define TIC80 1 /* Customize coffcode.h */
708 #include "coffcode.h"
709
710 const bfd_target
711 tic80coff_vec =
712 {
713 "coff-tic80", /* name */
714 bfd_target_coff_flavour,
715 BFD_ENDIAN_LITTLE, /* data byte order is little (arch supports both) */
716 BFD_ENDIAN_LITTLE, /* header byte order is little */
717
718 (HAS_RELOC | EXEC_P | /* object flags */
719 HAS_LINENO | HAS_DEBUG |
720 HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
721
722 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
723 '_', /* leading underscore */
724 '/', /* ar_pad_char */
725 15, /* ar_max_namelen */
726 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
727 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
728 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
729 bfd_getl64, bfd_getl_signed_64, bfd_putl64,
730 bfd_getl32, bfd_getl_signed_32, bfd_putl32,
731 bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
732
733 {_bfd_dummy_target, coff_object_p, /* bfd_check_format */
734 bfd_generic_archive_p, _bfd_dummy_target},
735 {bfd_false, coff_mkobject, _bfd_generic_mkarchive, /* bfd_set_format */
736 bfd_false},
737 {bfd_false, coff_write_object_contents, /* bfd_write_contents */
738 _bfd_write_archive_contents, bfd_false},
739
740 BFD_JUMP_TABLE_GENERIC (coff),
741 BFD_JUMP_TABLE_COPY (coff),
742 BFD_JUMP_TABLE_CORE (_bfd_nocore),
743 BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff),
744 BFD_JUMP_TABLE_SYMBOLS (coff),
745 BFD_JUMP_TABLE_RELOCS (coff),
746 BFD_JUMP_TABLE_WRITE (coff),
747 BFD_JUMP_TABLE_LINK (coff),
748 BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
749
750 COFF_SWAP_TABLE
751 };
This page took 0.046557 seconds and 4 git commands to generate.