1 /* BFD library support routines for the Renesas / SuperH SH architecture.
2    Copyright 1993, 1994, 1997, 1998, 2000, 2001, 2002, 2003
3    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 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 
26 #define SH_NEXT      &arch_info_struct[0]
27 #define SH2_NEXT     &arch_info_struct[1]
28 #define SH2E_NEXT    &arch_info_struct[2]
29 #define SH_DSP_NEXT  &arch_info_struct[3]
30 #define SH3_NEXT     &arch_info_struct[4]
31 #define SH3_DSP_NEXT &arch_info_struct[5]
32 #define SH3E_NEXT    &arch_info_struct[6]
33 #define SH4_NEXT     &arch_info_struct[7]
34 #define SH4A_NEXT    &arch_info_struct[8]
35 #define SH4AL_DSP_NEXT &arch_info_struct[9]
36 #define SH4_NOFPU_NEXT &arch_info_struct[10]
37 #define SH4A_NOFPU_NEXT &arch_info_struct[11]
38 #define SH64_NEXT    NULL
39 
40 static const bfd_arch_info_type arch_info_struct[] =
41 {
42   {
43     32,				/* 32 bits in a word */
44     32,				/* 32 bits in an address */
45     8,				/* 8 bits in a byte */
46     bfd_arch_sh,
47     bfd_mach_sh2,
48     "sh",			/* arch_name  */
49     "sh2",			/* printable name */
50     1,
51     FALSE,			/* not the default */
52     bfd_default_compatible,
53     bfd_default_scan,
54     SH2_NEXT
55   },
56   {
57     32,				/* 32 bits in a word */
58     32,				/* 32 bits in an address */
59     8,				/* 8 bits in a byte */
60     bfd_arch_sh,
61     bfd_mach_sh2e,
62     "sh",			/* arch_name  */
63     "sh2e",			/* printable name */
64     1,
65     FALSE,			/* not the default */
66     bfd_default_compatible,
67     bfd_default_scan,
68     SH2E_NEXT
69   },
70   {
71     32,				/* 32 bits in a word */
72     32,				/* 32 bits in an address */
73     8,				/* 8 bits in a byte */
74     bfd_arch_sh,
75     bfd_mach_sh_dsp,
76     "sh",			/* arch_name  */
77     "sh-dsp",			/* printable name */
78     1,
79     FALSE,			/* not the default */
80     bfd_default_compatible,
81     bfd_default_scan,
82     SH_DSP_NEXT
83   },
84   {
85     32,				/* 32 bits in a word */
86     32,				/* 32 bits in an address */
87     8,				/* 8 bits in a byte */
88     bfd_arch_sh,
89     bfd_mach_sh3,
90     "sh",			/* arch_name  */
91     "sh3",			/* printable name */
92     1,
93     FALSE,			/* not the default */
94     bfd_default_compatible,
95     bfd_default_scan,
96     SH3_NEXT
97   },
98   {
99     32,				/* 32 bits in a word */
100     32,				/* 32 bits in an address */
101     8,				/* 8 bits in a byte */
102     bfd_arch_sh,
103     bfd_mach_sh3_dsp,
104     "sh",			/* arch_name  */
105     "sh3-dsp",			/* printable name */
106     1,
107     FALSE,			/* not the default */
108     bfd_default_compatible,
109     bfd_default_scan,
110     SH3_DSP_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_sh3e,
118     "sh",			/* arch_name  */
119     "sh3e",			/* printable name */
120     1,
121     FALSE,			/* not the default */
122     bfd_default_compatible,
123     bfd_default_scan,
124     SH3E_NEXT
125   },
126   {
127     32,				/* 32 bits in a word */
128     32,				/* 32 bits in an address */
129     8,				/* 8 bits in a byte */
130     bfd_arch_sh,
131     bfd_mach_sh4,
132     "sh",			/* arch_name  */
133     "sh4",			/* printable name */
134     1,
135     FALSE,			/* not the default */
136     bfd_default_compatible,
137     bfd_default_scan,
138     SH4_NEXT
139   },
140   {
141     32,				/* 32 bits in a word */
142     32,				/* 32 bits in an address */
143     8,				/* 8 bits in a byte */
144     bfd_arch_sh,
145     bfd_mach_sh4a,
146     "sh",			/* arch_name  */
147     "sh4a",			/* printable name */
148     1,
149     FALSE,			/* not the default */
150     bfd_default_compatible,
151     bfd_default_scan,
152     SH4A_NEXT
153   },
154   {
155     32,				/* 32 bits in a word */
156     32,				/* 32 bits in an address */
157     8,				/* 8 bits in a byte */
158     bfd_arch_sh,
159     bfd_mach_sh4al_dsp,
160     "sh",			/* arch_name  */
161     "sh4al-dsp",		/* printable name */
162     1,
163     FALSE,			/* not the default */
164     bfd_default_compatible,
165     bfd_default_scan,
166     SH4AL_DSP_NEXT
167   },
168   {
169     32,				/* 32 bits in a word */
170     32,				/* 32 bits in an address */
171     8,				/* 8 bits in a byte */
172     bfd_arch_sh,
173     bfd_mach_sh4_nofpu,
174     "sh",			/* arch_name  */
175     "sh4-nofpu",		/* printable name */
176     1,
177     FALSE,			/* not the default */
178     bfd_default_compatible,
179     bfd_default_scan,
180     SH4_NOFPU_NEXT
181   },
182   {
183     32,				/* 32 bits in a word */
184     32,				/* 32 bits in an address */
185     8,				/* 8 bits in a byte */
186     bfd_arch_sh,
187     bfd_mach_sh4a_nofpu,
188     "sh",			/* arch_name  */
189     "sh4a-nofpu",		/* printable name */
190     1,
191     FALSE,			/* not the default */
192     bfd_default_compatible,
193     bfd_default_scan,
194     SH4A_NOFPU_NEXT
195   },
196   {
197     64,				/* 64 bits in a word */
198     64,				/* 64 bits in an address */
199     8,				/* 8 bits in a byte */
200     bfd_arch_sh,
201     bfd_mach_sh5,
202     "sh",			/* arch_name  */
203     "sh5",			/* printable name */
204     1,
205     FALSE,			/* not the default */
206     bfd_default_compatible,
207     bfd_default_scan,
208     SH64_NEXT
209   },
210 };
211 
212 const bfd_arch_info_type bfd_sh_arch =
213 {
214   32,				/* 32 bits in a word */
215   32,				/* 32 bits in an address */
216   8,				/* 8 bits in a byte */
217   bfd_arch_sh,
218   bfd_mach_sh,
219   "sh",				/* arch_name  */
220   "sh",				/* printable name */
221   1,
222   TRUE,				/* the default machine */
223   bfd_default_compatible,
224   bfd_default_scan,
225   SH_NEXT
226 };
227