Commit | Line | Data |
---|---|---|
68b70212 JG |
1 | /* MIPS Extended-Coff back-end for BFD. |
2 | Copyright (C) 1990-1991 Free Software Foundation, Inc. | |
3 | Written by Per Bothner. | |
1327fb29 | 4 | |
68b70212 | 5 | This file is part of BFD, the Binary File Descriptor library. |
23b0b558 | 6 | |
68b70212 | 7 | This program is free software; you can redistribute it and/or modify |
23b0b558 | 8 | it under the terms of the GNU General Public License as published by |
68b70212 JG |
9 | the Free Software Foundation; either version 2 of the License, or |
10 | (at your option) any later version. | |
23b0b558 | 11 | |
68b70212 | 12 | This program is distributed in the hope that it will be useful, |
23b0b558 JG |
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 | |
68b70212 JG |
18 | along with this program; if not, write to the Free Software |
19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
1327fb29 | 20 | |
23b0b558 | 21 | #include "bfd.h" |
dd4646ca | 22 | #include "sysdep.h" |
1327fb29 | 23 | #include "libbfd.h" |
294eaca4 SC |
24 | #include "coff/mips.h" |
25 | #include "coff/internal.h" | |
23b0b558 | 26 | #include "libcoff.h" /* to allow easier abstraction-breaking */ |
68b70212 | 27 | #include "trad-core.h" |
1327fb29 | 28 | |
8e3c8f47 | 29 | #define BADMAG(x) ECOFFBADMAG(x) |
2b1d8a50 | 30 | |
c9301d7b SC |
31 | /* Can't read these relocs */ |
32 | #define RTYPE2HOWTO(a,b) ; | |
68b70212 JG |
33 | /* Define NO_COFF_SYMBOLS and NO_COFF_LINENOS to avoid coffcode.h |
34 | defining a mess of useless functions. */ | |
35 | #define NO_COFF_SYMBOLS | |
36 | #define NO_COFF_LINENOS | |
dd4646ca JG |
37 | /* Define MIPS to get MIPS magic numbers and such */ |
38 | #define MIPS 1 | |
853f0a70 JG |
39 | /* Define additional MIPS section types */ |
40 | #define STYP_OTHER_LOAD 0x98000300 | |
7ed4093a | 41 | #include "coffcode.h" |
68b70212 | 42 | |
68b70212 JG |
43 | /* We do not implement symbols for ecoff. */ |
44 | #define coff_get_symtab_upper_bound (PROTO(unsigned int, (*),(bfd *)))bfd_false | |
45 | #define coff_get_symtab (PROTO(unsigned int, (*), (bfd *, asymbol **)))bfd_0 | |
46 | #define coff_print_symbol \ | |
47 | (PROTO(void,(*),(bfd *, PTR, asymbol *, enum bfd_print_symbol))) bfd_void | |
48 | #define coff_swap_sym_in (PROTO(void,(*),(bfd *,PTR,PTR))) bfd_void | |
dd4646ca | 49 | #define coff_swap_aux_in (PROTO(void,(*),(bfd *,PTR,int,int,PTR))) bfd_void |
853f0a70 JG |
50 | #define coff_swap_sym_out (PROTO(unsigned,(*),(bfd *,PTR,PTR))) bfd_void |
51 | #define coff_swap_aux_out (PROTO(unsigned,(*),(bfd *,PTR,int,int,PTR))) bfd_void | |
68b70212 JG |
52 | |
53 | /* We do not implement linenos for ecoff. */ | |
54 | #define coff_get_lineno (struct lineno_cache_entry *(*)()) bfd_nullvoidptr | |
55 | #define coff_swap_lineno_in (PROTO(void,(*),(bfd *,PTR,PTR))) bfd_void | |
56 | #define coff_find_nearest_line (PROTO(boolean, (*),(bfd*,asection*,asymbol**,bfd_vma, CONST char**, CONST char**, unsigned int *))) bfd_false | |
853f0a70 | 57 | #define coff_swap_lineno_out (PROTO(unsigned,(*),(bfd *,PTR,PTR))) bfd_void |
c9301d7b | 58 | |
1327fb29 | 59 | bfd_target ecoff_little_vec = |
294eaca4 SC |
60 | { |
61 | "ecoff-littlemips", /* name */ | |
62 | bfd_target_coff_flavour, | |
63 | false, /* data byte order is little */ | |
64 | false, /* header byte order is little */ | |
65 | ||
66 | (HAS_RELOC | EXEC_P | /* object flags */ | |
67 | HAS_LINENO | HAS_DEBUG | | |
68 | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT), | |
69 | ||
70 | (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* sect | |
71 | flags */ | |
72 | 0, /* leading underscore */ | |
73 | '/', /* ar_pad_char */ | |
74 | 15, /* ar_max_namelen */ | |
75 | 3, /* minimum alignment power */ | |
76 | _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* data */ | |
77 | _do_getl64, _do_putl64, _do_getl32, _do_putl32, _do_getl16, _do_putl16, /* hdrs */ | |
78 | ||
79 | {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ | |
80 | bfd_generic_archive_p, _bfd_dummy_target}, | |
81 | {bfd_false, coff_mkobject, bfd_false, /* bfd_set_format */ | |
82 | bfd_false}, | |
83 | {bfd_false, coff_write_object_contents, bfd_false, bfd_false}, | |
84 | JUMP_TABLE (coff) | |
85 | }; | |
1327fb29 SC |
86 | |
87 | bfd_target ecoff_big_vec = | |
294eaca4 SC |
88 | { |
89 | "ecoff-bigmips", /* name */ | |
90 | bfd_target_coff_flavour, | |
91 | true, /* data byte order is big */ | |
92 | true, /* header byte order is big */ | |
93 | ||
94 | (HAS_RELOC | EXEC_P | /* object flags */ | |
95 | HAS_LINENO | HAS_DEBUG | | |
96 | HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT), | |
97 | ||
98 | (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* sect flags */ | |
99 | 0, /* leading underscore */ | |
100 | ' ', /* ar_pad_char */ | |
101 | 16, /* ar_max_namelen */ | |
102 | 3, /* minimum alignment power */ | |
103 | _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, | |
104 | _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, | |
105 | {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ | |
106 | bfd_generic_archive_p, _bfd_dummy_target}, | |
107 | {bfd_false, coff_mkobject, bfd_false, /* bfd_set_format */ | |
108 | bfd_false}, | |
109 | {bfd_false, coff_write_object_contents, /* bfd_write_contents */ | |
110 | bfd_false, bfd_false}, | |
111 | JUMP_TABLE(coff), | |
112 | COFF_SWAP_TABLE | |
113 | }; |