include/elf/
[deliverable/binutils-gdb.git] / bfd / cpu-h8300.c
CommitLineData
c2dcd04e
NC
1/* BFD library support routines for the Renesas H8/300 architecture.
2 Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 2000, 2001, 2002, 2003
7898deda 3 Free Software Foundation, Inc.
252b5132
RH
4 Hacked by Steve Chamberlain of Cygnus Support.
5
c2dcd04e 6 This file is part of BFD, the Binary File Descriptor library.
252b5132 7
c2dcd04e
NC
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.
252b5132 12
c2dcd04e
NC
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.
252b5132 17
c2dcd04e
NC
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. */
252b5132
RH
21
22#include "bfd.h"
23#include "sysdep.h"
24#include "libbfd.h"
25
b34976b6 26static bfd_boolean h8300_scan
0a83638b
JL
27 PARAMS ((const struct bfd_arch_info *, const char *));
28static const bfd_arch_info_type * compatible
29 PARAMS ((const bfd_arch_info_type *, const bfd_arch_info_type *));
30
b34976b6 31static bfd_boolean
252b5132
RH
32h8300_scan (info, string)
33 const struct bfd_arch_info *info;
34 const char *string;
35{
36 if (*string != 'h' && *string != 'H')
b34976b6 37 return FALSE;
252b5132
RH
38
39 string++;
40 if (*string != '8')
b34976b6 41 return FALSE;
252b5132
RH
42
43 string++;
44 if (*string == '/')
45 string++;
46
47 if (*string != '3')
b34976b6 48 return FALSE;
252b5132
RH
49 string++;
50 if (*string != '0')
b34976b6 51 return FALSE;
252b5132
RH
52 string++;
53 if (*string != '0')
b34976b6 54 return FALSE;
252b5132
RH
55 string++;
56 if (*string == '-')
57 string++;
0a83638b
JL
58
59 /* In ELF linker scripts, we typically express the architecture/machine
60 as architecture:machine.
61
62 So if we've matched so far and encounter a colon, try to match the
63 string following the colon. */
64 if (*string == ':')
65 {
66 string++;
eea78af1 67 return h8300_scan (info, string);
0a83638b
JL
68 }
69
252b5132
RH
70 if (*string == 'h' || *string == 'H')
71 {
8d9cd6b1
NC
72 string++;
73 if (*string == 'n' || *string == 'N')
74 return (info->mach == bfd_mach_h8300hn);
75
252b5132
RH
76 return (info->mach == bfd_mach_h8300h);
77 }
78 else if (*string == 's' || *string == 'S')
79 {
8d9cd6b1
NC
80 string++;
81 if (*string == 'n' || *string == 'N')
82 return (info->mach == bfd_mach_h8300sn);
83
5d1db417 84 if (*string == 'x' || *string == 'X')
f4984206
RS
85 {
86 string++;
87 if (*string == 'n' || *string == 'N')
88 return (info->mach == bfd_mach_h8300sxn);
89
90 return (info->mach == bfd_mach_h8300sx);
91 }
5d1db417 92
252b5132
RH
93 return (info->mach == bfd_mach_h8300s);
94 }
95 else
8d9cd6b1 96 return info->mach == bfd_mach_h8300;
252b5132
RH
97}
98
cc040812
NC
99/* This routine is provided two arch_infos and works out the machine
100 which would be compatible with both and returns a pointer to its
101 info structure. */
252b5132
RH
102
103static const bfd_arch_info_type *
104compatible (in, out)
cc040812
NC
105 const bfd_arch_info_type *in;
106 const bfd_arch_info_type *out;
252b5132
RH
107{
108 /* It's really not a good idea to mix and match modes. */
b74fa2cd 109 if (in->arch != out->arch || in->mach != out->mach)
252b5132
RH
110 return 0;
111 else
112 return in;
113}
114
f4984206
RS
115static const bfd_arch_info_type h8300sxn_info_struct =
116{
117 32, /* 32 bits in a word */
118 32, /* 32 bits in an address */
119 8, /* 8 bits in a byte */
120 bfd_arch_h8300,
121 bfd_mach_h8300sxn,
122 "h8300sxn", /* arch_name */
123 "h8300sxn", /* printable name */
124 1,
125 FALSE, /* the default machine */
126 compatible,
127 h8300_scan,
128 0
129};
130
5d1db417
MS
131static const bfd_arch_info_type h8300sx_info_struct =
132{
133 32, /* 32 bits in a word */
134 32, /* 32 bits in an address */
135 8, /* 8 bits in a byte */
136 bfd_arch_h8300,
137 bfd_mach_h8300sx,
138 "h8300sx", /* arch_name */
139 "h8300sx", /* printable name */
140 1,
141 FALSE, /* the default machine */
142 compatible,
143 h8300_scan,
f4984206 144 &h8300sxn_info_struct
5d1db417
MS
145};
146
8d9cd6b1
NC
147static const bfd_arch_info_type h8300sn_info_struct =
148{
149 32, /* 32 bits in a word. */
150 32, /* 32 bits in an address. */
151 8, /* 8 bits in a byte. */
152 bfd_arch_h8300,
153 bfd_mach_h8300sn,
154 "h8300sn", /* Architecture name. */
155 "h8300sn", /* Printable name. */
156 1,
157 FALSE, /* The default machine. */
158 compatible,
159 h8300_scan,
5d1db417 160 &h8300sx_info_struct
8d9cd6b1
NC
161};
162
163
164static const bfd_arch_info_type h8300hn_info_struct =
165{
166 32, /* 32 bits in a word. */
167 32, /* 32 bits in an address. */
168 8, /* 8 bits in a byte. */
169 bfd_arch_h8300,
170 bfd_mach_h8300hn,
171 "h8300hn", /* Architecture name. */
172 "h8300hn", /* Printable name. */
173 1,
174 FALSE, /* The default machine. */
175 compatible,
176 h8300_scan,
177 &h8300sn_info_struct
178};
179
4c7aad1c 180static const bfd_arch_info_type h8300s_info_struct =
252b5132 181{
8d9cd6b1
NC
182 32, /* 32 bits in a word. */
183 32, /* 32 bits in an address. */
184 8, /* 8 bits in a byte. */
252b5132 185 bfd_arch_h8300,
4c7aad1c 186 bfd_mach_h8300s,
8d9cd6b1
NC
187 "h8300s", /* Architecture name. */
188 "h8300s", /* Printable name. */
252b5132 189 1,
8d9cd6b1 190 FALSE, /* The default machine. */
252b5132
RH
191 compatible,
192 h8300_scan,
8d9cd6b1 193 & h8300hn_info_struct
252b5132
RH
194};
195
196static const bfd_arch_info_type h8300h_info_struct =
197{
8d9cd6b1
NC
198 32, /* 32 bits in a word. */
199 32, /* 32 bits in an address. */
200 8, /* 8 bits in a byte. */
252b5132
RH
201 bfd_arch_h8300,
202 bfd_mach_h8300h,
8d9cd6b1
NC
203 "h8300h", /* Architecture name. */
204 "h8300h", /* Printable name. */
252b5132 205 1,
8d9cd6b1 206 FALSE, /* The default machine. */
252b5132
RH
207 compatible,
208 h8300_scan,
4c7aad1c 209 &h8300s_info_struct
252b5132
RH
210};
211
212const bfd_arch_info_type bfd_h8300_arch =
213{
8d9cd6b1
NC
214 16, /* 16 bits in a word. */
215 16, /* 16 bits in an address. */
216 8, /* 8 bits in a byte. */
252b5132 217 bfd_arch_h8300,
4c7aad1c 218 bfd_mach_h8300,
8d9cd6b1
NC
219 "h8300", /* Architecture name. */
220 "h8300", /* Printable name. */
252b5132 221 1,
8d9cd6b1 222 TRUE, /* The default machine. */
252b5132
RH
223 compatible,
224 h8300_scan,
4c7aad1c 225 &h8300h_info_struct
252b5132 226};
This page took 0.224055 seconds and 4 git commands to generate.