source: branches/libc-0.6/src/binutils/bfd/cpu-mips.c

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 4.3 KB
Line 
1/* bfd back-end for mips support
2 Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002
3 Free Software Foundation, Inc.
4 Written by Steve Chamberlain of Cygnus Support.
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
26static const bfd_arch_info_type *mips_compatible
27 PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
28
29/* The default routine tests bits_per_word, which is wrong on mips as
30 mips word size doesn't correlate with reloc size. */
31
32static const bfd_arch_info_type *
33mips_compatible (a, b)
34 const bfd_arch_info_type *a;
35 const bfd_arch_info_type *b;
36{
37 if (a->arch != b->arch)
38 return NULL;
39
40 /* Machine compatibility is checked in
41 _bfd_mips_elf_merge_private_bfd_data. */
42
43 return a;
44}
45
46#define N(BITS_WORD, BITS_ADDR, NUMBER, PRINT, DEFAULT, NEXT) \
47 { \
48 BITS_WORD, /* bits in a word */ \
49 BITS_ADDR, /* bits in an address */ \
50 8, /* 8 bits in a byte */ \
51 bfd_arch_mips, \
52 NUMBER, \
53 "mips", \
54 PRINT, \
55 3, \
56 DEFAULT, \
57 mips_compatible, \
58 bfd_default_scan, \
59 NEXT, \
60 }
61
62enum
63{
64 I_mips3000,
65 I_mips3900,
66 I_mips4000,
67 I_mips4010,
68 I_mips4100,
69 I_mips4111,
70 I_mips4120,
71 I_mips4300,
72 I_mips4400,
73 I_mips4600,
74 I_mips4650,
75 I_mips5000,
76 I_mips5400,
77 I_mips5500,
78 I_mips6000,
79 I_mips8000,
80 I_mips10000,
81 I_mips12000,
82 I_mips16,
83 I_mips5,
84 I_mipsisa32,
85 I_mipsisa32r2,
86 I_mipsisa64,
87 I_sb1,
88};
89
90#define NN(index) (&arch_info_struct[(index) + 1])
91
92static const bfd_arch_info_type arch_info_struct[] =
93{
94 N (32, 32, bfd_mach_mips3000, "mips:3000", FALSE, NN(I_mips3000)),
95 N (32, 32, bfd_mach_mips3900, "mips:3900", FALSE, NN(I_mips3900)),
96 N (64, 64, bfd_mach_mips4000, "mips:4000", FALSE, NN(I_mips4000)),
97 N (64, 64, bfd_mach_mips4010, "mips:4010", FALSE, NN(I_mips4010)),
98 N (64, 64, bfd_mach_mips4100, "mips:4100", FALSE, NN(I_mips4100)),
99 N (64, 64, bfd_mach_mips4111, "mips:4111", FALSE, NN(I_mips4111)),
100 N (64, 64, bfd_mach_mips4120, "mips:4120", FALSE, NN(I_mips4120)),
101 N (64, 64, bfd_mach_mips4300, "mips:4300", FALSE, NN(I_mips4300)),
102 N (64, 64, bfd_mach_mips4400, "mips:4400", FALSE, NN(I_mips4400)),
103 N (64, 64, bfd_mach_mips4600, "mips:4600", FALSE, NN(I_mips4600)),
104 N (64, 64, bfd_mach_mips4650, "mips:4650", FALSE, NN(I_mips4650)),
105 N (64, 64, bfd_mach_mips5000, "mips:5000", FALSE, NN(I_mips5000)),
106 N (64, 64, bfd_mach_mips5400, "mips:5400", FALSE, NN(I_mips5400)),
107 N (64, 64, bfd_mach_mips5500, "mips:5500", FALSE, NN(I_mips5500)),
108 N (32, 32, bfd_mach_mips6000, "mips:6000", FALSE, NN(I_mips6000)),
109 N (64, 64, bfd_mach_mips8000, "mips:8000", FALSE, NN(I_mips8000)),
110 N (64, 64, bfd_mach_mips10000,"mips:10000", FALSE, NN(I_mips10000)),
111 N (64, 64, bfd_mach_mips12000,"mips:12000", FALSE, NN(I_mips12000)),
112 N (64, 64, bfd_mach_mips16, "mips:16", FALSE, NN(I_mips16)),
113 N (64, 64, bfd_mach_mips5, "mips:mips5", FALSE, NN(I_mips5)),
114 N (32, 32, bfd_mach_mipsisa32, "mips:isa32", FALSE, NN(I_mipsisa32)),
115 N (32, 32, bfd_mach_mipsisa32r2,"mips:isa32r2", FALSE, NN(I_mipsisa32r2)),
116 N (64, 64, bfd_mach_mipsisa64, "mips:isa64", FALSE, NN(I_mipsisa64)),
117 N (64, 64, bfd_mach_mips_sb1, "mips:sb1", FALSE, 0),
118};
119
120/* The default architecture is mips:3000, but with a machine number of
121 zero. This lets the linker distinguish between a default setting
122 of mips, and an explicit setting of mips:3000. */
123
124const bfd_arch_info_type bfd_mips_arch =
125N (32, 32, 0, "mips", TRUE, &arch_info_struct[0]);
Note: See TracBrowser for help on using the repository browser.