2000-08-10 Jason Eckhardt <jle@cygnus.com>
[deliverable/binutils-gdb.git] / bfd / elf32-i860.c
CommitLineData
0e5136c6 1/* Intel i860 specific support for 32-bit ELF.
9d751335
JE
2 Copyright 1993, 2000 Free Software Foundation, Inc.
3
0e5136c6 4 Full i860 support contributed by Jason Eckhardt <jle@cygnus.com>.
252b5132
RH
5
6This file is part of BFD, the Binary File Descriptor library.
7
8This program is free software; you can redistribute it and/or modify
9it under the terms of the GNU General Public License as published by
10the Free Software Foundation; either version 2 of the License, or
11(at your option) any later version.
12
13This program is distributed in the hope that it will be useful,
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
19along with this program; if not, write to the Free Software
20Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
22#include "bfd.h"
23#include "sysdep.h"
24#include "libbfd.h"
25#include "elf-bfd.h"
0e5136c6
JE
26#include "elf/i860.h"
27
28
29/* Prototypes. */
30static reloc_howto_type *lookup_howto
31 PARAMS ((unsigned int));
32
33static reloc_howto_type *elf32_i860_reloc_type_lookup
34 PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
35
36static void elf32_i860_info_to_howto_rela
37 PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *));
38
39
40/* This howto table is preliminary. */
41static reloc_howto_type elf32_i860_howto_table [] =
42{
43 /* This relocation does nothing. */
44 HOWTO (R_860_NONE, /* type */
45 0, /* rightshift */
46 2, /* size (0 = byte, 1 = short, 2 = long) */
47 32, /* bitsize */
48 false, /* pc_relative */
49 0, /* bitpos */
50 complain_overflow_bitfield, /* complain_on_overflow */
51 bfd_elf_generic_reloc, /* special_function */
52 "R_860_NONE", /* name */
53 false, /* partial_inplace */
54 0, /* src_mask */
55 0, /* dst_mask */
56 false), /* pcrel_offset */
57
58 /* A 32-bit absolute relocation. */
59 HOWTO (R_860_32, /* type */
60 0, /* rightshift */
61 2, /* size (0 = byte, 1 = short, 2 = long) */
62 32, /* bitsize */
63 false, /* pc_relative */
64 0, /* bitpos */
65 complain_overflow_bitfield, /* complain_on_overflow */
66 bfd_elf_generic_reloc, /* special_function */
67 "R_860_32", /* name */
68 false, /* partial_inplace */
69 0xffffffff, /* src_mask */
70 0xffffffff, /* dst_mask */
71 false), /* pcrel_offset */
72
73 HOWTO (R_860_COPY, /* type */
74 0, /* rightshift */
75 2, /* size (0 = byte, 1 = short, 2 = long) */
76 32, /* bitsize */
77 false, /* pc_relative */
78 0, /* bitpos */
79 complain_overflow_bitfield, /* complain_on_overflow */
80 bfd_elf_generic_reloc, /* special_function */
81 "R_860_COPY", /* name */
82 true, /* partial_inplace */
83 0xffffffff, /* src_mask */
84 0xffffffff, /* dst_mask */
85 false), /* pcrel_offset */
86
87 HOWTO (R_860_GLOB_DAT, /* type */
88 0, /* rightshift */
89 2, /* size (0 = byte, 1 = short, 2 = long) */
90 32, /* bitsize */
91 false, /* pc_relative */
92 0, /* bitpos */
93 complain_overflow_bitfield, /* complain_on_overflow */
94 bfd_elf_generic_reloc, /* special_function */
95 "R_860_GLOB_DAT", /* name */
96 true, /* partial_inplace */
97 0xffffffff, /* src_mask */
98 0xffffffff, /* dst_mask */
99 false), /* pcrel_offset */
100
101 HOWTO (R_860_JUMP_SLOT, /* type */
102 0, /* rightshift */
103 2, /* size (0 = byte, 1 = short, 2 = long) */
104 32, /* bitsize */
105 false, /* pc_relative */
106 0, /* bitpos */
107 complain_overflow_bitfield, /* complain_on_overflow */
108 bfd_elf_generic_reloc, /* special_function */
109 "R_860_JUMP_SLOT", /* name */
110 true, /* partial_inplace */
111 0xffffffff, /* src_mask */
112 0xffffffff, /* dst_mask */
113 false), /* pcrel_offset */
114
115 HOWTO (R_860_RELATIVE, /* type */
116 0, /* rightshift */
117 2, /* size (0 = byte, 1 = short, 2 = long) */
118 32, /* bitsize */
119 false, /* pc_relative */
120 0, /* bitpos */
121 complain_overflow_bitfield, /* complain_on_overflow */
122 bfd_elf_generic_reloc, /* special_function */
123 "R_860_RELATIVE", /* name */
124 true, /* partial_inplace */
125 0xffffffff, /* src_mask */
126 0xffffffff, /* dst_mask */
127 false), /* pcrel_offset */
128
129 /* A 26-bit PC-relative relocation. */
130 HOWTO (R_860_PC26, /* type */
131 0, /* rightshift */
132 2, /* size (0 = byte, 1 = short, 2 = long) */
133 26, /* bitsize */
134 true, /* pc_relative */
135 0, /* bitpos */
136 complain_overflow_bitfield, /* complain_on_overflow */
137 bfd_elf_generic_reloc, /* special_function */
138 "R_860_PC26", /* name */
139 false, /* partial_inplace */
140 0x3ffffff, /* src_mask */
141 0x3ffffff, /* dst_mask */
142 true), /* pcrel_offset */
143
144 HOWTO (R_860_PLT26, /* type */
145 0, /* rightshift */
146 2, /* size (0 = byte, 1 = short, 2 = long) */
147 26, /* bitsize */
148 true, /* pc_relative */
149 0, /* bitpos */
150 complain_overflow_bitfield, /* complain_on_overflow */
151 bfd_elf_generic_reloc, /* special_function */
152 "R_860_PLT26", /* name */
153 true, /* partial_inplace */
154 0xffffffff, /* src_mask */
155 0xffffffff, /* dst_mask */
156 true), /* pcrel_offset */
157
158 /* A 16-bit PC-relative relocation. */
159 HOWTO (R_860_PC16, /* type */
160 0, /* rightshift */
161 2, /* size (0 = byte, 1 = short, 2 = long) */
162 16, /* bitsize */
163 true, /* pc_relative */
164 0, /* bitpos */
165 complain_overflow_bitfield, /* complain_on_overflow */
166 bfd_elf_generic_reloc, /* special_function */
167 "R_860_PC16", /* name */
168 false, /* partial_inplace */
305d537e
JE
169 0x1f07ff, /* src_mask */
170 0x1f07ff, /* dst_mask */
0e5136c6
JE
171 true), /* pcrel_offset */
172
173 HOWTO (R_860_LOW0, /* type */
174 0, /* rightshift */
175 2, /* size (0 = byte, 1 = short, 2 = long) */
176 16, /* bitsize */
177 false, /* pc_relative */
178 0, /* bitpos */
179 complain_overflow_dont, /* complain_on_overflow */
180 bfd_elf_generic_reloc, /* special_function */
181 "R_860_LOW0", /* name */
182 false, /* partial_inplace */
183 0xffff, /* src_mask */
184 0xffff, /* dst_mask */
185 false), /* pcrel_offset */
186
187 HOWTO (R_860_SPLIT0, /* type */
188 0, /* rightshift */
189 2, /* size (0 = byte, 1 = short, 2 = long) */
190 16, /* bitsize */
191 false, /* pc_relative */
192 0, /* bitpos */
193 complain_overflow_dont, /* complain_on_overflow */
194 bfd_elf_generic_reloc, /* special_function */
195 "R_860_SPLIT0", /* name */
196 false, /* partial_inplace */
197 0x1f07ff, /* src_mask */
198 0x1f07ff, /* dst_mask */
199 false), /* pcrel_offset */
200
201 HOWTO (R_860_LOW1, /* type */
202 0, /* rightshift */
203 2, /* size (0 = byte, 1 = short, 2 = long) */
204 16, /* bitsize */
205 false, /* pc_relative */
206 0, /* bitpos */
207 complain_overflow_dont, /* complain_on_overflow */
208 bfd_elf_generic_reloc, /* special_function */
209 "R_860_LOW1", /* name */
210 false, /* partial_inplace */
211 0xfffe, /* src_mask */
212 0xfffe, /* dst_mask */
213 false), /* pcrel_offset */
214
215 HOWTO (R_860_SPLIT1, /* type */
216 0, /* rightshift */
217 2, /* size (0 = byte, 1 = short, 2 = long) */
218 16, /* bitsize */
219 false, /* pc_relative */
220 0, /* bitpos */
221 complain_overflow_dont, /* complain_on_overflow */
222 bfd_elf_generic_reloc, /* special_function */
223 "R_860_SPLIT1", /* name */
224 false, /* partial_inplace */
305d537e
JE
225 0x1f07fe, /* src_mask */
226 0x1f07fe, /* dst_mask */
0e5136c6
JE
227 false), /* pcrel_offset */
228
229 HOWTO (R_860_LOW2, /* type */
230 0, /* rightshift */
231 2, /* size (0 = byte, 1 = short, 2 = long) */
232 16, /* bitsize */
233 false, /* pc_relative */
234 0, /* bitpos */
235 complain_overflow_dont, /* complain_on_overflow */
236 bfd_elf_generic_reloc, /* special_function */
237 "R_860_LOW2", /* name */
238 false, /* partial_inplace */
239 0xfffc, /* src_mask */
240 0xfffc, /* dst_mask */
241 false), /* pcrel_offset */
242
243 HOWTO (R_860_SPLIT2, /* type */
244 0, /* rightshift */
245 2, /* size (0 = byte, 1 = short, 2 = long) */
246 16, /* bitsize */
247 false, /* pc_relative */
248 0, /* bitpos */
249 complain_overflow_dont, /* complain_on_overflow */
250 bfd_elf_generic_reloc, /* special_function */
251 "R_860_SPLIT2", /* name */
252 false, /* partial_inplace */
305d537e
JE
253 0x1f07fc, /* src_mask */
254 0x1f07fc, /* dst_mask */
0e5136c6
JE
255 false), /* pcrel_offset */
256
257 HOWTO (R_860_LOW3, /* type */
258 0, /* rightshift */
259 2, /* size (0 = byte, 1 = short, 2 = long) */
260 16, /* bitsize */
261 false, /* pc_relative */
262 0, /* bitpos */
263 complain_overflow_dont, /* complain_on_overflow */
264 bfd_elf_generic_reloc, /* special_function */
265 "R_860_LOW3", /* name */
266 false, /* partial_inplace */
267 0xfff8, /* src_mask */
268 0xfff8, /* dst_mask */
269 false), /* pcrel_offset */
270
271 HOWTO (R_860_LOGOT0, /* type */
272 0, /* rightshift */
273 2, /* size (0 = byte, 1 = short, 2 = long) */
274 16, /* bitsize */
275 false, /* pc_relative */
276 0, /* bitpos */
277 complain_overflow_dont, /* complain_on_overflow */
278 bfd_elf_generic_reloc, /* special_function */
279 "R_860_LOGOT0", /* name */
280 false, /* partial_inplace */
281 0, /* src_mask */
282 0xffff, /* dst_mask */
283 true), /* pcrel_offset */
284
285 HOWTO (R_860_SPGOT0, /* type */
286 0, /* rightshift */
287 2, /* size (0 = byte, 1 = short, 2 = long) */
288 16, /* bitsize */
289 false, /* pc_relative */
290 0, /* bitpos */
291 complain_overflow_dont, /* complain_on_overflow */
292 bfd_elf_generic_reloc, /* special_function */
293 "R_860_SPGOT0", /* name */
294 false, /* partial_inplace */
295 0, /* src_mask */
296 0xffff, /* dst_mask */
297 true), /* pcrel_offset */
298
299 HOWTO (R_860_LOGOT1, /* type */
300 0, /* rightshift */
301 2, /* size (0 = byte, 1 = short, 2 = long) */
302 16, /* bitsize */
303 false, /* pc_relative */
304 0, /* bitpos */
305 complain_overflow_dont, /* complain_on_overflow */
306 bfd_elf_generic_reloc, /* special_function */
307 "R_860_LOGOT1", /* name */
308 false, /* partial_inplace */
309 0, /* src_mask */
310 0xffff, /* dst_mask */
311 true), /* pcrel_offset */
312
313 HOWTO (R_860_SPGOT1, /* type */
314 0, /* rightshift */
315 2, /* size (0 = byte, 1 = short, 2 = long) */
316 16, /* bitsize */
317 false, /* pc_relative */
318 0, /* bitpos */
319 complain_overflow_dont, /* complain_on_overflow */
320 bfd_elf_generic_reloc, /* special_function */
321 "R_860_SPGOT1", /* name */
322 false, /* partial_inplace */
323 0, /* src_mask */
324 0xffff, /* dst_mask */
325 true), /* pcrel_offset */
326
327 HOWTO (R_860_LOGOTOFF0, /* type */
328 0, /* rightshift */
329 2, /* size (0 = byte, 1 = short, 2 = long) */
330 32, /* bitsize */
331 false, /* pc_relative */
332 0, /* bitpos */
333 complain_overflow_dont, /* complain_on_overflow */
334 bfd_elf_generic_reloc, /* special_function */
335 "R_860_LOGOTOFF0", /* name */
336 true, /* partial_inplace */
337 0xffffffff, /* src_mask */
338 0xffffffff, /* dst_mask */
339 false), /* pcrel_offset */
340
341 HOWTO (R_860_SPGOTOFF0, /* type */
342 0, /* rightshift */
343 2, /* size (0 = byte, 1 = short, 2 = long) */
344 32, /* bitsize */
345 false, /* pc_relative */
346 0, /* bitpos */
347 complain_overflow_dont, /* complain_on_overflow */
348 bfd_elf_generic_reloc, /* special_function */
349 "R_860_SPGOTOFF0", /* name */
350 true, /* partial_inplace */
351 0xffffffff, /* src_mask */
352 0xffffffff, /* dst_mask */
353 false), /* pcrel_offset */
354
355 HOWTO (R_860_LOGOTOFF1, /* type */
356 0, /* rightshift */
357 2, /* size (0 = byte, 1 = short, 2 = long) */
358 32, /* bitsize */
359 false, /* pc_relative */
360 0, /* bitpos */
361 complain_overflow_dont, /* complain_on_overflow */
362 bfd_elf_generic_reloc, /* special_function */
363 "R_860_LOGOTOFF1", /* name */
364 true, /* partial_inplace */
365 0xffffffff, /* src_mask */
366 0xffffffff, /* dst_mask */
367 false), /* pcrel_offset */
368
369 HOWTO (R_860_SPGOTOFF1, /* type */
370 0, /* rightshift */
371 2, /* size (0 = byte, 1 = short, 2 = long) */
372 32, /* bitsize */
373 false, /* pc_relative */
374 0, /* bitpos */
375 complain_overflow_dont, /* complain_on_overflow */
376 bfd_elf_generic_reloc, /* special_function */
377 "R_860_SPGOTOFF1", /* name */
378 true, /* partial_inplace */
379 0xffffffff, /* src_mask */
380 0xffffffff, /* dst_mask */
381 false), /* pcrel_offset */
382
383 HOWTO (R_860_LOGOTOFF2, /* type */
384 0, /* rightshift */
385 2, /* size (0 = byte, 1 = short, 2 = long) */
386 32, /* bitsize */
387 false, /* pc_relative */
388 0, /* bitpos */
389 complain_overflow_dont, /* complain_on_overflow */
390 bfd_elf_generic_reloc, /* special_function */
391 "R_860_LOGOTOFF2", /* name */
392 true, /* partial_inplace */
393 0xffffffff, /* src_mask */
394 0xffffffff, /* dst_mask */
395 false), /* pcrel_offset */
396
397 HOWTO (R_860_LOGOTOFF3, /* type */
398 0, /* rightshift */
399 2, /* size (0 = byte, 1 = short, 2 = long) */
400 32, /* bitsize */
401 false, /* pc_relative */
402 0, /* bitpos */
403 complain_overflow_dont, /* complain_on_overflow */
404 bfd_elf_generic_reloc, /* special_function */
405 "R_860_LOGOTOFF3", /* name */
406 true, /* partial_inplace */
407 0xffffffff, /* src_mask */
408 0xffffffff, /* dst_mask */
409 false), /* pcrel_offset */
410
411 HOWTO (R_860_LOPC, /* type */
412 0, /* rightshift */
413 2, /* size (0 = byte, 1 = short, 2 = long) */
414 16, /* bitsize */
415 true, /* pc_relative */
416 0, /* bitpos */
417 complain_overflow_bitfield, /* complain_on_overflow */
418 bfd_elf_generic_reloc, /* special_function */
419 "R_860_LOPC", /* name */
420 false, /* partial_inplace */
421 0xffff, /* src_mask */
422 0xffff, /* dst_mask */
423 true), /* pcrel_offset */
424
425 HOWTO (R_860_HIGHADJ, /* type */
426 0, /* rightshift */
427 2, /* size (0 = byte, 1 = short, 2 = long) */
428 16, /* bitsize */
429 false, /* pc_relative */
430 0, /* bitpos */
431 complain_overflow_dont, /* complain_on_overflow */
432 bfd_elf_generic_reloc, /* special_function */
433 "R_860_HIGHADJ", /* name */
434 false, /* partial_inplace */
435 0xffff, /* src_mask */
436 0xffff, /* dst_mask */
437 false), /* pcrel_offset */
438
439 HOWTO (R_860_HAGOT, /* type */
440 0, /* rightshift */
441 2, /* size (0 = byte, 1 = short, 2 = long) */
442 16, /* bitsize */
443 false, /* pc_relative */
444 0, /* bitpos */
445 complain_overflow_dont, /* complain_on_overflow */
446 bfd_elf_generic_reloc, /* special_function */
447 "R_860_HAGOT", /* name */
448 false, /* partial_inplace */
449 0, /* src_mask */
450 0xffff, /* dst_mask */
451 true), /* pcrel_offset */
452
453 HOWTO (R_860_HAGOTOFF, /* type */
454 0, /* rightshift */
455 2, /* size (0 = byte, 1 = short, 2 = long) */
456 32, /* bitsize */
457 false, /* pc_relative */
458 0, /* bitpos */
459 complain_overflow_dont, /* complain_on_overflow */
460 bfd_elf_generic_reloc, /* special_function */
461 "R_860_HAGOTOFF", /* name */
462 true, /* partial_inplace */
463 0xffffffff, /* src_mask */
464 0xffffffff, /* dst_mask */
465 false), /* pcrel_offset */
466
467 HOWTO (R_860_HAPC, /* type */
468 0, /* rightshift */
469 2, /* size (0 = byte, 1 = short, 2 = long) */
470 16, /* bitsize */
471 true, /* pc_relative */
472 0, /* bitpos */
473 complain_overflow_bitfield, /* complain_on_overflow */
474 bfd_elf_generic_reloc, /* special_function */
475 "R_860_HAPC", /* name */
476 false, /* partial_inplace */
477 0xffff, /* src_mask */
478 0xffff, /* dst_mask */
479 true), /* pcrel_offset */
480
481 HOWTO (R_860_HIGH, /* type */
482 0, /* rightshift */
483 2, /* size (0 = byte, 1 = short, 2 = long) */
484 16, /* bitsize */
485 false, /* pc_relative */
486 0, /* bitpos */
487 complain_overflow_dont, /* complain_on_overflow */
488 bfd_elf_generic_reloc, /* special_function */
489 "R_860_HIGH", /* name */
490 false, /* partial_inplace */
491 0xffff, /* src_mask */
492 0xffff, /* dst_mask */
493 false), /* pcrel_offset */
494
495 HOWTO (R_860_HIGOT, /* type */
496 0, /* rightshift */
497 2, /* size (0 = byte, 1 = short, 2 = long) */
498 16, /* bitsize */
499 false, /* pc_relative */
500 0, /* bitpos */
501 complain_overflow_dont, /* complain_on_overflow */
502 bfd_elf_generic_reloc, /* special_function */
503 "R_860_HIGOT", /* name */
504 false, /* partial_inplace */
505 0, /* src_mask */
506 0xffff, /* dst_mask */
507 true), /* pcrel_offset */
508
509 HOWTO (R_860_HIGOTOFF, /* type */
510 0, /* rightshift */
511 2, /* size (0 = byte, 1 = short, 2 = long) */
512 32, /* bitsize */
513 false, /* pc_relative */
514 0, /* bitpos */
515 complain_overflow_dont, /* complain_on_overflow */
516 bfd_elf_generic_reloc, /* special_function */
517 "R_860_HIGOTOFF", /* name */
518 true, /* partial_inplace */
519 0xffffffff, /* src_mask */
520 0xffffffff, /* dst_mask */
521 false), /* pcrel_offset */
522};
523
524\f
525static unsigned char elf_code_to_howto_index[R_860_max + 1];
526
527static reloc_howto_type *
528lookup_howto (rtype)
529 unsigned int rtype;
530{
531 static int initialized = 0;
532 int i;
533 int howto_tbl_size = (int) (sizeof (elf32_i860_howto_table)
534 / sizeof (elf32_i860_howto_table[0]));
535
536 if (! initialized)
537 {
538 initialized = 1;
539 memset (elf_code_to_howto_index, 0xff,
540 sizeof (elf_code_to_howto_index));
541 for (i = 0; i < howto_tbl_size; i++)
542 elf_code_to_howto_index[elf32_i860_howto_table[i].type] = i;
543 }
544
545 BFD_ASSERT (rtype <= R_860_max);
546 i = elf_code_to_howto_index[rtype];
547 if (i >= howto_tbl_size)
548 return 0;
549 return elf32_i860_howto_table + i;
550}
551
552
553/* Given a BFD reloc, return the matching HOWTO structure. */
554static reloc_howto_type *
555elf32_i860_reloc_type_lookup (abfd, code)
556 bfd * abfd ATTRIBUTE_UNUSED;
557 bfd_reloc_code_real_type code;
558{
559 unsigned int rtype;
560
561 switch (code)
562 {
563 case BFD_RELOC_NONE:
564 rtype = R_860_NONE;
565 break;
566 case BFD_RELOC_32:
567 rtype = R_860_32;
568 break;
569 case BFD_RELOC_860_COPY:
570 rtype = R_860_COPY;
571 break;
572 case BFD_RELOC_860_GLOB_DAT:
573 rtype = R_860_GLOB_DAT;
574 break;
575 case BFD_RELOC_860_JUMP_SLOT:
576 rtype = R_860_JUMP_SLOT;
577 break;
578 case BFD_RELOC_860_RELATIVE:
579 rtype = R_860_RELATIVE;
580 break;
581 case BFD_RELOC_860_PC26:
582 rtype = R_860_PC26;
583 break;
584 case BFD_RELOC_860_PLT26:
585 rtype = R_860_PLT26;
586 break;
587 case BFD_RELOC_860_PC16:
588 rtype = R_860_PC16;
589 break;
590 case BFD_RELOC_860_LOW0:
591 rtype = R_860_LOW0;
592 break;
593 case BFD_RELOC_860_SPLIT0:
594 rtype = R_860_SPLIT0;
595 break;
596 case BFD_RELOC_860_LOW1:
597 rtype = R_860_LOW1;
598 break;
599 case BFD_RELOC_860_SPLIT1:
600 rtype = R_860_SPLIT1;
601 break;
602 case BFD_RELOC_860_LOW2:
603 rtype = R_860_LOW2;
604 break;
605 case BFD_RELOC_860_SPLIT2:
606 rtype = R_860_SPLIT2;
607 break;
608 case BFD_RELOC_860_LOW3:
609 rtype = R_860_LOW3;
610 break;
611 case BFD_RELOC_860_LOGOT0:
612 rtype = R_860_LOGOT0;
613 break;
614 case BFD_RELOC_860_SPGOT0:
615 rtype = R_860_SPGOT0;
616 break;
617 case BFD_RELOC_860_LOGOT1:
618 rtype = R_860_LOGOT1;
619 break;
620 case BFD_RELOC_860_SPGOT1:
621 rtype = R_860_SPGOT1;
622 break;
623 case BFD_RELOC_860_LOGOTOFF0:
624 rtype = R_860_LOGOTOFF0;
625 break;
626 case BFD_RELOC_860_SPGOTOFF0:
627 rtype = R_860_SPGOTOFF0;
628 break;
629 case BFD_RELOC_860_LOGOTOFF1:
630 rtype = R_860_LOGOTOFF1;
631 break;
632 case BFD_RELOC_860_SPGOTOFF1:
633 rtype = R_860_SPGOTOFF1;
634 break;
635 case BFD_RELOC_860_LOGOTOFF2:
636 rtype = R_860_LOGOTOFF2;
637 break;
638 case BFD_RELOC_860_LOGOTOFF3:
639 rtype = R_860_LOGOTOFF3;
640 break;
641 case BFD_RELOC_860_LOPC:
642 rtype = R_860_LOPC;
643 break;
644 case BFD_RELOC_860_HIGHADJ:
645 rtype = R_860_HIGHADJ;
646 break;
647 case BFD_RELOC_860_HAGOT:
648 rtype = R_860_HAGOT;
649 break;
650 case BFD_RELOC_860_HAGOTOFF:
651 rtype = R_860_HAGOTOFF;
652 break;
653 case BFD_RELOC_860_HAPC:
654 rtype = R_860_HAPC;
655 break;
656 case BFD_RELOC_860_HIGH:
657 rtype = R_860_HIGH;
658 break;
659 case BFD_RELOC_860_HIGOT:
660 rtype = R_860_HIGOT;
661 break;
662 case BFD_RELOC_860_HIGOTOFF:
663 rtype = R_860_HIGOTOFF;
664 break;
665 default:
666 rtype = 0;
667 break;
668 }
669 return lookup_howto (rtype);
670}
671
672
673/* Given a ELF reloc, return the matching HOWTO structure. */
674static void
675elf32_i860_info_to_howto_rela (abfd, bfd_reloc, elf_reloc)
676 bfd *abfd ATTRIBUTE_UNUSED;
677 arelent *bfd_reloc;
678 Elf64_Internal_Rela *elf_reloc;
679{
680 bfd_reloc->howto = lookup_howto (ELF32_R_TYPE (elf_reloc->r_info));
681}
682
252b5132 683
252b5132 684
9d751335
JE
685#define TARGET_BIG_SYM bfd_elf32_i860_vec
686#define TARGET_BIG_NAME "elf32-i860"
687#define TARGET_LITTLE_SYM bfd_elf32_i860_little_vec
688#define TARGET_LITTLE_NAME "elf32-i860-little"
0e5136c6
JE
689#define ELF_ARCH bfd_arch_i860
690#define ELF_MACHINE_CODE EM_860
691#define ELF_MAXPAGESIZE 4096
692
693
694#define elf_info_to_howto elf32_i860_info_to_howto_rela
695#define bfd_elf32_bfd_reloc_type_lookup elf32_i860_reloc_type_lookup
252b5132
RH
696
697#include "elf32-target.h"
This page took 0.103594 seconds and 4 git commands to generate.