OSDN Git Service

gas:
[pf3gnuchains/pf3gnuchains3x.git] / bfd / elf32-i860.c
1 /* Intel i860 specific support for 32-bit ELF.
2    Copyright 1993, 2000 Free Software Foundation, Inc.
3
4    Full i860 support contributed by Jason Eckhardt <jle@cygnus.com>.
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 2 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., 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"
26 #include "elf/i860.h"
27
28
29 /* Prototypes.  */
30 static reloc_howto_type *lookup_howto
31   PARAMS ((unsigned int));
32
33 static reloc_howto_type *elf32_i860_reloc_type_lookup
34   PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));
35
36 static void elf32_i860_info_to_howto_rela 
37   PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *));
38
39
40 /* This howto table is preliminary.  */
41 static 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 */
169          0x1f07ff,              /* src_mask */
170          0x1f07ff,              /* dst_mask */
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 */
225          0x1f07fe,              /* src_mask */
226          0x1f07fe,              /* dst_mask */
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 */
253          0x1f07fc,              /* src_mask */
254          0x1f07fc,              /* dst_mask */
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
525 static unsigned char elf_code_to_howto_index[R_860_max + 1];
526
527 static reloc_howto_type *
528 lookup_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.  */
554 static reloc_howto_type *
555 elf32_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.  */
674 static void
675 elf32_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
683
684
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"
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
696
697 #include "elf32-target.h"