relocate the entry point address when used
[deliverable/binutils-gdb.git] / bfd / cpu-sh.c
1 /* BFD library support routines for the Renesas / SuperH SH architecture.
2 Copyright 1993, 1994, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005,
3 2007 Free Software Foundation, Inc.
4 Hacked by Steve Chamberlain of Cygnus Support.
5
6 This file is part of BFD, the Binary File Descriptor library.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21 MA 02110-1301, USA. */
22
23 #include "sysdep.h"
24 #include "bfd.h"
25 #include "libbfd.h"
26 #include "../opcodes/sh-opc.h"
27
28 #define SH_NEXT arch_info_struct + 0
29 #define SH2_NEXT arch_info_struct + 1
30 #define SH2E_NEXT arch_info_struct + 2
31 #define SH_DSP_NEXT arch_info_struct + 3
32 #define SH3_NEXT arch_info_struct + 4
33 #define SH3_NOMMU_NEXT arch_info_struct + 5
34 #define SH3_DSP_NEXT arch_info_struct + 6
35 #define SH3E_NEXT arch_info_struct + 7
36 #define SH4_NEXT arch_info_struct + 8
37 #define SH4A_NEXT arch_info_struct + 9
38 #define SH4AL_DSP_NEXT arch_info_struct + 10
39 #define SH4_NOFPU_NEXT arch_info_struct + 11
40 #define SH4_NOMMU_NOFPU_NEXT arch_info_struct + 12
41 #define SH4A_NOFPU_NEXT arch_info_struct + 13
42 #define SH2A_NEXT arch_info_struct + 14
43 #define SH2A_NOFPU_NEXT arch_info_struct + 15
44 #define SH2A_NOFPU_OR_SH4_NOMMU_NOFPU_NEXT arch_info_struct + 16
45 #define SH2A_NOFPU_OR_SH3_NOMMU_NEXT arch_info_struct + 17
46 #define SH2A_OR_SH4_NEXT arch_info_struct + 18
47 #define SH2A_OR_SH3E_NEXT arch_info_struct + 19
48 #define SH64_NEXT NULL
49
50 static const bfd_arch_info_type arch_info_struct[] =
51 {
52 {
53 32, /* 32 bits in a word. */
54 32, /* 32 bits in an address. */
55 8, /* 8 bits in a byte. */
56 bfd_arch_sh,
57 bfd_mach_sh2,
58 "sh", /* Architecture name. */
59 "sh2", /* Machine name. */
60 1,
61 FALSE, /* Not the default. */
62 bfd_default_compatible,
63 bfd_default_scan,
64 bfd_arch_default_fill,
65 SH2_NEXT
66 },
67 {
68 32, /* 32 bits in a word. */
69 32, /* 32 bits in an address. */
70 8, /* 8 bits in a byte. */
71 bfd_arch_sh,
72 bfd_mach_sh2e,
73 "sh", /* Architecture name. */
74 "sh2e", /* Machine name. */
75 1,
76 FALSE, /* Not the default. */
77 bfd_default_compatible,
78 bfd_default_scan,
79 bfd_arch_default_fill,
80 SH2E_NEXT
81 },
82 {
83 32, /* 32 bits in a word. */
84 32, /* 32 bits in an address. */
85 8, /* 8 bits in a byte. */
86 bfd_arch_sh,
87 bfd_mach_sh_dsp,
88 "sh", /* Architecture name. */
89 "sh-dsp", /* Machine name. */
90 1,
91 FALSE, /* Not the default. */
92 bfd_default_compatible,
93 bfd_default_scan,
94 bfd_arch_default_fill,
95 SH_DSP_NEXT
96 },
97 {
98 32, /* 32 bits in a word. */
99 32, /* 32 bits in an address. */
100 8, /* 8 bits in a byte. */
101 bfd_arch_sh,
102 bfd_mach_sh3,
103 "sh", /* Architecture name. */
104 "sh3", /* Machine name. */
105 1,
106 FALSE, /* Not the default. */
107 bfd_default_compatible,
108 bfd_default_scan,
109 bfd_arch_default_fill,
110 SH3_NEXT
111 },
112 {
113 32, /* 32 bits in a word. */
114 32, /* 32 bits in an address. */
115 8, /* 8 bits in a byte. */
116 bfd_arch_sh,
117 bfd_mach_sh3_nommu,
118 "sh", /* Architecture name. */
119 "sh3-nommu", /* Machine name. */
120 1,
121 FALSE, /* Not the default. */
122 bfd_default_compatible,
123 bfd_default_scan,
124 bfd_arch_default_fill,
125 SH3_NOMMU_NEXT
126 },
127 {
128 32, /* 32 bits in a word. */
129 32, /* 32 bits in an address. */
130 8, /* 8 bits in a byte. */
131 bfd_arch_sh,
132 bfd_mach_sh3_dsp,
133 "sh", /* Architecture name. */
134 "sh3-dsp", /* Machine name. */
135 1,
136 FALSE, /* Not the default. */
137 bfd_default_compatible,
138 bfd_default_scan,
139 bfd_arch_default_fill,
140 SH3_DSP_NEXT
141 },
142 {
143 32, /* 32 bits in a word. */
144 32, /* 32 bits in an address. */
145 8, /* 8 bits in a byte. */
146 bfd_arch_sh,
147 bfd_mach_sh3e,
148 "sh", /* Architecture name. */
149 "sh3e", /* Machine name. */
150 1,
151 FALSE, /* Not the default. */
152 bfd_default_compatible,
153 bfd_default_scan,
154 bfd_arch_default_fill,
155 SH3E_NEXT
156 },
157 {
158 32, /* 32 bits in a word. */
159 32, /* 32 bits in an address. */
160 8, /* 8 bits in a byte. */
161 bfd_arch_sh,
162 bfd_mach_sh4,
163 "sh", /* Architecture name. */
164 "sh4", /* Machine name. */
165 1,
166 FALSE, /* Not the default. */
167 bfd_default_compatible,
168 bfd_default_scan,
169 bfd_arch_default_fill,
170 SH4_NEXT
171 },
172 {
173 32, /* 32 bits in a word. */
174 32, /* 32 bits in an address. */
175 8, /* 8 bits in a byte. */
176 bfd_arch_sh,
177 bfd_mach_sh4a,
178 "sh", /* Architecture name. */
179 "sh4a", /* Machine name. */
180 1,
181 FALSE, /* Not the default. */
182 bfd_default_compatible,
183 bfd_default_scan,
184 bfd_arch_default_fill,
185 SH4A_NEXT
186 },
187 {
188 32, /* 32 bits in a word. */
189 32, /* 32 bits in an address. */
190 8, /* 8 bits in a byte. */
191 bfd_arch_sh,
192 bfd_mach_sh4al_dsp,
193 "sh", /* Architecture name. */
194 "sh4al-dsp", /* Machine name. */
195 1,
196 FALSE, /* Not the default. */
197 bfd_default_compatible,
198 bfd_default_scan,
199 bfd_arch_default_fill,
200 SH4AL_DSP_NEXT
201 },
202 {
203 32, /* 32 bits in a word. */
204 32, /* 32 bits in an address. */
205 8, /* 8 bits in a byte. */
206 bfd_arch_sh,
207 bfd_mach_sh4_nofpu,
208 "sh", /* Architecture name. */
209 "sh4-nofpu", /* Machine name. */
210 1,
211 FALSE, /* Not the default. */
212 bfd_default_compatible,
213 bfd_default_scan,
214 bfd_arch_default_fill,
215 SH4_NOFPU_NEXT
216 },
217 {
218 32, /* 32 bits in a word. */
219 32, /* 32 bits in an address. */
220 8, /* 8 bits in a byte. */
221 bfd_arch_sh,
222 bfd_mach_sh4_nommu_nofpu,
223 "sh", /* Architecture name. */
224 "sh4-nommu-nofpu", /* Machine name. */
225 1,
226 FALSE, /* Not the default. */
227 bfd_default_compatible,
228 bfd_default_scan,
229 bfd_arch_default_fill,
230 SH4_NOMMU_NOFPU_NEXT
231 },
232 {
233 32, /* 32 bits in a word. */
234 32, /* 32 bits in an address. */
235 8, /* 8 bits in a byte. */
236 bfd_arch_sh,
237 bfd_mach_sh4a_nofpu,
238 "sh", /* Architecture name. */
239 "sh4a-nofpu", /* Machine name. */
240 1,
241 FALSE, /* Not the default. */
242 bfd_default_compatible,
243 bfd_default_scan,
244 bfd_arch_default_fill,
245 SH4A_NOFPU_NEXT
246 },
247 {
248 32, /* 32 bits in a word. */
249 32, /* 32 bits in an address. */
250 8, /* 8 bits in a byte. */
251 bfd_arch_sh,
252 bfd_mach_sh2a,
253 "sh", /* Architecture name. */
254 "sh2a", /* Machine name. */
255 1,
256 FALSE, /* Not the default. */
257 bfd_default_compatible,
258 bfd_default_scan,
259 bfd_arch_default_fill,
260 SH2A_NEXT
261 },
262 {
263 32, /* 32 bits in a word. */
264 32, /* 32 bits in an address. */
265 8, /* 8 bits in a byte. */
266 bfd_arch_sh,
267 bfd_mach_sh2a_nofpu,
268 "sh", /* Architecture name. */
269 "sh2a-nofpu", /* Machine name. */
270 1,
271 FALSE, /* Not the default. */
272 bfd_default_compatible,
273 bfd_default_scan,
274 bfd_arch_default_fill,
275 SH2A_NOFPU_NEXT
276 },
277 {
278 32, /* 32 bits in a word. */
279 32, /* 32 bits in an address. */
280 8, /* 8 bits in a byte. */
281 bfd_arch_sh,
282 bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu,
283 "sh", /* Architecture name. */
284 "sh2a-nofpu-or-sh4-nommu-nofpu", /* Machine name. */
285 1,
286 FALSE, /* Not the default. */
287 bfd_default_compatible,
288 bfd_default_scan,
289 bfd_arch_default_fill,
290 SH2A_NOFPU_OR_SH4_NOMMU_NOFPU_NEXT
291 },
292 {
293 32, /* 32 bits in a word. */
294 32, /* 32 bits in an address. */
295 8, /* 8 bits in a byte. */
296 bfd_arch_sh,
297 bfd_mach_sh2a_nofpu_or_sh3_nommu,
298 "sh", /* Architecture name. . */
299 "sh2a-nofpu-or-sh3-nommu", /* Machine name. */
300 1,
301 FALSE, /* Not the default. */
302 bfd_default_compatible,
303 bfd_default_scan,
304 bfd_arch_default_fill,
305 SH2A_NOFPU_OR_SH3_NOMMU_NEXT
306 },
307 {
308 32, /* 32 bits in a word. */
309 32, /* 32 bits in an address. */
310 8, /* 8 bits in a byte. */
311 bfd_arch_sh,
312 bfd_mach_sh2a_or_sh4,
313 "sh", /* Architecture name. */
314 "sh2a-or-sh4", /* Machine name. */
315 1,
316 FALSE, /* Not the default. */
317 bfd_default_compatible,
318 bfd_default_scan,
319 bfd_arch_default_fill,
320 SH2A_OR_SH4_NEXT
321 },
322 {
323 32, /* 32 bits in a word. */
324 32, /* 32 bits in an address. */
325 8, /* 8 bits in a byte. */
326 bfd_arch_sh,
327 bfd_mach_sh2a_or_sh3e,
328 "sh", /* Architecture name. */
329 "sh2a-or-sh3e", /* Machine name. */
330 1,
331 FALSE, /* Not the default. */
332 bfd_default_compatible,
333 bfd_default_scan,
334 bfd_arch_default_fill,
335 SH2A_OR_SH3E_NEXT
336 },
337 {
338 64, /* 64 bits in a word. */
339 64, /* 64 bits in an address. */
340 8, /* 8 bits in a byte. */
341 bfd_arch_sh,
342 bfd_mach_sh5,
343 "sh", /* Architecture name. */
344 "sh5", /* Machine name. */
345 1,
346 FALSE, /* Not the default. */
347 bfd_default_compatible,
348 bfd_default_scan,
349 bfd_arch_default_fill,
350 SH64_NEXT
351 },
352 };
353
354 const bfd_arch_info_type bfd_sh_arch =
355 {
356 32, /* 32 bits in a word. */
357 32, /* 32 bits in an address. */
358 8, /* 8 bits in a byte. */
359 bfd_arch_sh,
360 bfd_mach_sh,
361 "sh", /* Architecture name. */
362 "sh", /* Machine name. */
363 1,
364 TRUE, /* The default machine. */
365 bfd_default_compatible,
366 bfd_default_scan,
367 bfd_arch_default_fill,
368 SH_NEXT
369 };
370
371
372 /* This table defines the mappings from the BFD internal numbering
373 system to the opcodes internal flags system.
374 It is used by the functions defined below.
375 The prototypes for these SH specific functions are found in
376 sh-opc.h . */
377
378 static struct { unsigned long bfd_mach, arch, arch_up; } bfd_to_arch_table[] =
379 {
380 { bfd_mach_sh, arch_sh1, arch_sh_up },
381 { bfd_mach_sh2, arch_sh2, arch_sh2_up },
382 { bfd_mach_sh2e, arch_sh2e, arch_sh2e_up },
383 { bfd_mach_sh_dsp, arch_sh_dsp, arch_sh_dsp_up },
384 { bfd_mach_sh2a, arch_sh2a, arch_sh2a_up },
385 { bfd_mach_sh2a_nofpu, arch_sh2a_nofpu, arch_sh2a_nofpu_up },
386
387 { bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu, arch_sh2a_nofpu_or_sh4_nommu_nofpu, arch_sh2a_nofpu_or_sh4_nommu_nofpu_up },
388 { bfd_mach_sh2a_nofpu_or_sh3_nommu, arch_sh2a_nofpu_or_sh3_nommu, arch_sh2a_nofpu_or_sh3_nommu_up },
389 { bfd_mach_sh2a_or_sh4, arch_sh2a_or_sh4, arch_sh2a_or_sh4_up },
390 { bfd_mach_sh2a_or_sh3e, arch_sh2a_or_sh3e, arch_sh2a_or_sh3e_up },
391
392 { bfd_mach_sh3, arch_sh3, arch_sh3_up },
393 { bfd_mach_sh3_nommu, arch_sh3_nommu, arch_sh3_nommu_up },
394 { bfd_mach_sh3_dsp, arch_sh3_dsp, arch_sh3_dsp_up },
395 { bfd_mach_sh3e, arch_sh3e, arch_sh3e_up },
396 { bfd_mach_sh4, arch_sh4, arch_sh4_up },
397 { bfd_mach_sh4a, arch_sh4a, arch_sh4a_up },
398 { bfd_mach_sh4al_dsp, arch_sh4al_dsp, arch_sh4al_dsp_up },
399 { bfd_mach_sh4_nofpu, arch_sh4_nofpu, arch_sh4_nofpu_up },
400 { bfd_mach_sh4_nommu_nofpu, arch_sh4_nommu_nofpu, arch_sh4_nommu_nofpu_up },
401 { bfd_mach_sh4a_nofpu, arch_sh4a_nofpu, arch_sh4a_nofpu_up },
402 { 0, 0, 0 } /* Terminator. */
403 };
404
405
406 /* Convert a BFD mach number into the right opcodes arch flags
407 using the table above. */
408
409 unsigned int
410 sh_get_arch_from_bfd_mach (unsigned long mach)
411 {
412 int i = 0;
413
414 while (bfd_to_arch_table[i].bfd_mach != 0)
415 if (bfd_to_arch_table[i].bfd_mach == mach)
416 return bfd_to_arch_table[i].arch;
417 else
418 i++;
419
420 /* Machine not found. */
421 BFD_FAIL();
422
423 return SH_ARCH_UNKNOWN_ARCH;
424 }
425
426
427 /* Convert a BFD mach number into a set of opcodes arch flags
428 describing all the compatible architectures (i.e. arch_up)
429 using the table above. */
430
431 unsigned int
432 sh_get_arch_up_from_bfd_mach (unsigned long mach)
433 {
434 int i = 0;
435
436 while (bfd_to_arch_table[i].bfd_mach != 0)
437 if (bfd_to_arch_table[i].bfd_mach == mach)
438 return bfd_to_arch_table[i].arch_up;
439 else
440 i++;
441
442 /* Machine not found. */
443 BFD_FAIL();
444
445 return SH_ARCH_UNKNOWN_ARCH;
446 }
447
448
449 /* Convert an arbitary arch_set - not necessarily corresponding
450 directly to anything in the table above - to the most generic
451 architecture which supports all the required features, and
452 return the corresponding BFD mach. */
453
454 unsigned long
455 sh_get_bfd_mach_from_arch_set (unsigned int arch_set)
456 {
457 unsigned long result = 0;
458 unsigned int best = ~arch_set;
459 unsigned int co_mask = ~0;
460 int i = 0;
461
462 /* If arch_set permits variants with no coprocessor then do not allow
463 the other irrelevant co-processor bits to influence the choice:
464 e.g. if dsp is disallowed by arch_set, then the algorithm would
465 prefer fpu variants over nofpu variants because they also disallow
466 dsp - even though the nofpu would be the most correct choice.
467 This assumes that EVERY fpu/dsp variant has a no-coprocessor
468 counter-part, or their non-fpu/dsp instructions do not have the
469 no co-processor bit set. */
470 if (arch_set & arch_sh_no_co)
471 co_mask = ~(arch_sh_sp_fpu | arch_sh_dp_fpu | arch_sh_has_dsp);
472
473 while (bfd_to_arch_table[i].bfd_mach != 0)
474 {
475 unsigned int try = bfd_to_arch_table[i].arch_up & co_mask;
476
477 /* Conceptually: Find the architecture with the least number
478 of extra features or, if they have the same number, then
479 the greatest number of required features. Disregard
480 architectures where the required features alone do
481 not describe a valid architecture. */
482 if (((try & ~arch_set) < (best & ~arch_set)
483 || ((try & ~arch_set) == (best & ~arch_set)
484 && (~try & arch_set) < (~best & arch_set)))
485 && SH_MERGE_ARCH_SET_VALID (try, arch_set))
486 {
487 result = bfd_to_arch_table[i].bfd_mach;
488 best = try;
489 }
490
491 i++;
492 }
493
494 /* This might happen if a new variant is added to sh-opc.h
495 but no corresponding entry is added to the table above. */
496 BFD_ASSERT (result != 0);
497
498 return result;
499 }
500
501
502 /* Merge the architecture type of two BFD files, such that the
503 resultant architecture supports all the features required
504 by the two input BFDs.
505 If the input BFDs are multually incompatible - i.e. one uses
506 DSP while the other uses FPU - or there is no known architecture
507 that fits the requirements then an error is emitted. */
508
509 bfd_boolean
510 sh_merge_bfd_arch (bfd *ibfd, bfd *obfd)
511 {
512 unsigned int old_arch, new_arch, merged_arch;
513
514 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
515 return FALSE;
516
517 old_arch = sh_get_arch_up_from_bfd_mach (bfd_get_mach (obfd));
518 new_arch = sh_get_arch_up_from_bfd_mach (bfd_get_mach (ibfd));
519
520 merged_arch = SH_MERGE_ARCH_SET (old_arch, new_arch);
521
522 if (!SH_VALID_CO_ARCH_SET (merged_arch))
523 {
524 (*_bfd_error_handler)
525 ("%B: uses %s instructions while previous modules use %s instructions",
526 ibfd,
527 SH_ARCH_SET_HAS_DSP (new_arch) ? "dsp" : "floating point",
528 SH_ARCH_SET_HAS_DSP (new_arch) ? "floating point" : "dsp");
529 bfd_set_error (bfd_error_bad_value);
530 return FALSE;
531 }
532 else if (!SH_VALID_ARCH_SET (merged_arch))
533 {
534 (*_bfd_error_handler)
535 ("internal error: merge of architecture '%s' with architecture '%s' produced unknown architecture\n",
536 bfd_printable_name (obfd),
537 bfd_printable_name (ibfd));
538 bfd_set_error (bfd_error_bad_value);
539 return FALSE;
540 }
541
542 bfd_default_set_arch_mach (obfd, bfd_arch_sh,
543 sh_get_bfd_mach_from_arch_set (merged_arch));
544
545 return TRUE;
546 }
This page took 0.042591 seconds and 4 git commands to generate.