OLD | NEW |
1 /* BFD support for Sparc binaries under LynxOS. | 1 /* BFD support for Sparc binaries under LynxOS. |
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, | 2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, |
3 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. | 3 2001, 2002, 2003, 2005, 2007, 2012 Free Software Foundation, Inc. |
4 | 4 |
5 This file is part of BFD, the Binary File Descriptor library. | 5 This file is part of BFD, the Binary File Descriptor library. |
6 | 6 |
7 This program is free software; you can redistribute it and/or modify | 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 | 8 it under the terms of the GNU General Public License as published by |
9 the Free Software Foundation; either version 3 of the License, or | 9 the Free Software Foundation; either version 3 of the License, or |
10 (at your option) any later version. | 10 (at your option) any later version. |
11 | 11 |
12 This program is distributed in the hope that it will be useful, | 12 This program is distributed in the hope that it will be useful, |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | 13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 16 matching lines...) Expand all Loading... |
30 #include "bfd.h" | 30 #include "bfd.h" |
31 #include "libbfd.h" | 31 #include "libbfd.h" |
32 | 32 |
33 #include "aout/sun4.h" | 33 #include "aout/sun4.h" |
34 #include "libaout.h" /* BFD a.out internal data structures */ | 34 #include "libaout.h" /* BFD a.out internal data structures */ |
35 | 35 |
36 #include "aout/aout64.h" | 36 #include "aout/aout64.h" |
37 #include "aout/stab_gnu.h" | 37 #include "aout/stab_gnu.h" |
38 #include "aout/ar.h" | 38 #include "aout/ar.h" |
39 | 39 |
40 void NAME (lynx,set_arch_mach) PARAMS ((bfd *, unsigned long)); | 40 void NAME (lynx,set_arch_mach) (bfd *, unsigned long); |
41 static void choose_reloc_size PARAMS ((bfd *)); | 41 static void choose_reloc_size (bfd *); |
42 static bfd_boolean NAME (aout,sparclynx_write_object_contents) PARAMS ((bfd *)); | 42 static bfd_boolean NAME (aout,sparclynx_write_object_contents) (bfd *); |
43 | 43 |
44 /* This is needed to reject a NewsOS file, e.g. in | 44 /* This is needed to reject a NewsOS file, e.g. in |
45 gdb/testsuite/gdb.t10/crossload.exp. <kingdon@cygnus.com> | 45 gdb/testsuite/gdb.t10/crossload.exp. <kingdon@cygnus.com> |
46 I needed to add M_UNKNOWN to recognize a 68000 object, so this will | 46 I needed to add M_UNKNOWN to recognize a 68000 object, so this will |
47 probably no longer reject a NewsOS object. <ian@cygnus.com>. */ | 47 probably no longer reject a NewsOS object. <ian@cygnus.com>. */ |
48 #define MACHTYPE_OK(mtype) ((mtype) == M_UNKNOWN \ | 48 #define MACHTYPE_OK(mtype) ( (mtype) == M_UNKNOWN \ |
49 || (mtype) == M_68010 \ | 49 || (mtype) == M_68010 \ |
50 || (mtype) == M_68020 \ | 50 || (mtype) == M_68020 \ |
51 || (mtype) == M_SPARC) | 51 || (mtype) == M_SPARC) |
52 | 52 |
53 /* The file @code{aoutf1.h} contains the code for BFD's | 53 /* The file @code{aoutf1.h} contains the code for BFD's |
54 a.out back end. Control over the generated back end is given by these | 54 a.out back end. Control over the generated back end is given by these |
55 two preprocessor names: | 55 two preprocessor names: |
56 @table @code | 56 @table @code |
57 @item ARCH_SIZE | 57 @item ARCH_SIZE |
58 This value should be either 32 or 64, depending upon the size of an | 58 This value should be either 32 or 64, depending upon the size of an |
59 int in the target format. It changes the sizes of the structs which | 59 int in the target format. It changes the sizes of the structs which |
60 perform the memory/disk mapping of structures. | 60 perform the memory/disk mapping of structures. |
61 | 61 |
62 The 64 bit backend may only be used if the host compiler supports 64 | 62 The 64 bit backend may only be used if the host compiler supports 64 |
63 ints (eg long long with gcc), by defining the name @code{BFD_HOST_64_BIT} in
@code{bfd.h}. | 63 ints (eg long long with gcc), by defining the name @code{BFD_HOST_64_BIT} in
@code{bfd.h}. |
64 With this name defined, @emph{all} bfd operations are performed with 64bit | 64 With this name defined, @emph{all} bfd operations are performed with 64bit |
65 arithmetic, not just those to a 64bit target. | 65 arithmetic, not just those to a 64bit target. |
66 | 66 |
67 @item TARGETNAME | 67 @item TARGETNAME |
68 The name put into the target vector. | 68 The name put into the target vector. |
69 @item | 69 @item |
70 @end table */ | 70 @end table */ |
71 | 71 |
72 void | 72 void |
73 NAME(lynx,set_arch_mach) (abfd, machtype) | 73 NAME(lynx,set_arch_mach) (bfd *abfd, unsigned long machtype) |
74 bfd *abfd; | |
75 unsigned long machtype; | |
76 { | 74 { |
77 /* Determine the architecture and machine type of the object file. */ | 75 /* Determine the architecture and machine type of the object file. */ |
78 enum bfd_architecture arch; | 76 enum bfd_architecture arch; |
79 unsigned long machine; | 77 unsigned long machine; |
80 | 78 |
81 switch (machtype) | 79 switch (machtype) |
82 { | 80 { |
83 case M_UNKNOWN: | 81 case M_UNKNOWN: |
84 /* Some Sun3s make magic numbers without cpu types in them, so | 82 /* Some Sun3s make magic numbers without cpu types in them, so |
85 we'll default to the 68000. */ | 83 we'll default to the 68000. */ |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 bfd_set_arch_mach (abfd, arch, machine); | 121 bfd_set_arch_mach (abfd, arch, machine); |
124 } | 122 } |
125 | 123 |
126 #define SET_ARCH_MACH(ABFD, EXEC) \ | 124 #define SET_ARCH_MACH(ABFD, EXEC) \ |
127 NAME(lynx,set_arch_mach) (ABFD, N_MACHTYPE (EXEC)); \ | 125 NAME(lynx,set_arch_mach) (ABFD, N_MACHTYPE (EXEC)); \ |
128 choose_reloc_size(ABFD); | 126 choose_reloc_size(ABFD); |
129 | 127 |
130 /* Determine the size of a relocation entry, based on the architecture. */ | 128 /* Determine the size of a relocation entry, based on the architecture. */ |
131 | 129 |
132 static void | 130 static void |
133 choose_reloc_size (abfd) | 131 choose_reloc_size (bfd *abfd) |
134 bfd *abfd; | |
135 { | 132 { |
136 switch (bfd_get_arch (abfd)) | 133 switch (bfd_get_arch (abfd)) |
137 { | 134 { |
138 case bfd_arch_sparc: | 135 case bfd_arch_sparc: |
139 obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE; | 136 obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE; |
140 break; | 137 break; |
141 default: | 138 default: |
142 obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; | 139 obj_reloc_entry_size (abfd) = RELOC_STD_SIZE; |
143 break; | 140 break; |
144 } | 141 } |
145 } | 142 } |
146 | 143 |
147 /* Write an object file in LynxOS format. | 144 /* Write an object file in LynxOS format. |
148 Section contents have already been written. We write the | 145 Section contents have already been written. We write the |
149 file header, symbols, and relocation. */ | 146 file header, symbols, and relocation. */ |
150 | 147 |
151 static bfd_boolean | 148 static bfd_boolean |
152 NAME(aout,sparclynx_write_object_contents) (abfd) | 149 NAME(aout,sparclynx_write_object_contents) (bfd *abfd) |
153 bfd *abfd; | |
154 { | 150 { |
155 struct external_exec exec_bytes; | 151 struct external_exec exec_bytes; |
156 struct internal_exec *execp = exec_hdr (abfd); | 152 struct internal_exec *execp = exec_hdr (abfd); |
157 | 153 |
158 /* Magic number, maestro, please! */ | 154 /* Magic number, maestro, please! */ |
159 switch (bfd_get_arch (abfd)) | 155 switch (bfd_get_arch (abfd)) |
160 { | 156 { |
161 case bfd_arch_m68k: | 157 case bfd_arch_m68k: |
162 switch (bfd_get_mach (abfd)) | 158 switch (bfd_get_mach (abfd)) |
163 { | 159 { |
(...skipping 19 matching lines...) Expand all Loading... |
183 choose_reloc_size (abfd); | 179 choose_reloc_size (abfd); |
184 | 180 |
185 N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags); | 181 N_SET_FLAGS (*execp, aout_backend_info (abfd)->exec_hdr_flags); |
186 | 182 |
187 WRITE_HEADERS (abfd, execp); | 183 WRITE_HEADERS (abfd, execp); |
188 | 184 |
189 return TRUE; | 185 return TRUE; |
190 } | 186 } |
191 | 187 |
192 #define MY_set_sizes sparclynx_set_sizes | 188 #define MY_set_sizes sparclynx_set_sizes |
193 static bfd_boolean sparclynx_set_sizes PARAMS ((bfd *)); | 189 static bfd_boolean sparclynx_set_sizes (bfd *); |
194 | 190 |
195 static bfd_boolean | 191 static bfd_boolean |
196 sparclynx_set_sizes (abfd) | 192 sparclynx_set_sizes (bfd *abfd) |
197 bfd *abfd; | |
198 { | 193 { |
199 switch (bfd_get_arch (abfd)) | 194 switch (bfd_get_arch (abfd)) |
200 { | 195 { |
201 default: | 196 default: |
202 return FALSE; | 197 return FALSE; |
203 case bfd_arch_sparc: | 198 case bfd_arch_sparc: |
204 adata (abfd).page_size = 0x2000; | 199 adata (abfd).page_size = 0x2000; |
205 adata (abfd).segment_size = 0x2000; | 200 adata (abfd).segment_size = 0x2000; |
206 adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE; | 201 adata (abfd).exec_bytes_size = EXEC_BYTES_SIZE; |
207 return TRUE; | 202 return TRUE; |
(...skipping 10 matching lines...) Expand all Loading... |
218 0, 1, 0, 1, 0, sparclynx_set_sizes, 0, | 213 0, 1, 0, 1, 0, sparclynx_set_sizes, 0, |
219 0, /* add_dynamic_symbols */ | 214 0, /* add_dynamic_symbols */ |
220 0, /* add_one_symbol */ | 215 0, /* add_one_symbol */ |
221 0, /* link_dynamic_object */ | 216 0, /* link_dynamic_object */ |
222 0, /* write_dynamic_symbol */ | 217 0, /* write_dynamic_symbol */ |
223 0, /* check_dynamic_reloc */ | 218 0, /* check_dynamic_reloc */ |
224 0 /* finish_dynamic_link */ | 219 0 /* finish_dynamic_link */ |
225 }; | 220 }; |
226 | 221 |
227 | 222 |
error: old chunk mismatch |
None
OLD | NEW |