2003-04-23 Andrew Cagney <cagney@redhat.com>
[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 {
72 return (info->mach == bfd_mach_h8300h);
73 }
74 else if (*string == 's' || *string == 'S')
75 {
76 return (info->mach == bfd_mach_h8300s);
77 }
78 else
79 {
80 return info->mach == bfd_mach_h8300;
81 }
82}
83
cc040812
NC
84/* This routine is provided two arch_infos and works out the machine
85 which would be compatible with both and returns a pointer to its
86 info structure. */
252b5132
RH
87
88static const bfd_arch_info_type *
89compatible (in, out)
cc040812
NC
90 const bfd_arch_info_type *in;
91 const bfd_arch_info_type *out;
252b5132
RH
92{
93 /* It's really not a good idea to mix and match modes. */
b74fa2cd 94 if (in->arch != out->arch || in->mach != out->mach)
252b5132
RH
95 return 0;
96 else
97 return in;
98}
99
4c7aad1c 100static const bfd_arch_info_type h8300s_info_struct =
252b5132 101{
4c7aad1c
AM
102 32, /* 32 bits in a word */
103 32, /* 32 bits in an address */
252b5132
RH
104 8, /* 8 bits in a byte */
105 bfd_arch_h8300,
4c7aad1c
AM
106 bfd_mach_h8300s,
107 "h8300s", /* arch_name */
108 "h8300s", /* printable name */
252b5132 109 1,
b34976b6 110 FALSE, /* the default machine */
252b5132
RH
111 compatible,
112 h8300_scan,
4c7aad1c 113 0
252b5132
RH
114};
115
116static const bfd_arch_info_type h8300h_info_struct =
117{
118 32, /* 32 bits in a word */
119 32, /* 32 bits in an address */
120 8, /* 8 bits in a byte */
121 bfd_arch_h8300,
122 bfd_mach_h8300h,
123 "h8300h", /* arch_name */
124 "h8300h", /* printable name */
125 1,
b34976b6 126 FALSE, /* the default machine */
252b5132
RH
127 compatible,
128 h8300_scan,
4c7aad1c 129 &h8300s_info_struct
252b5132
RH
130};
131
132const bfd_arch_info_type bfd_h8300_arch =
133{
4c7aad1c
AM
134 16, /* 16 bits in a word */
135 16, /* 16 bits in an address */
252b5132
RH
136 8, /* 8 bits in a byte */
137 bfd_arch_h8300,
4c7aad1c
AM
138 bfd_mach_h8300,
139 "h8300", /* arch_name */
140 "h8300", /* printable name */
252b5132 141 1,
b34976b6 142 TRUE, /* the default machine */
252b5132
RH
143 compatible,
144 h8300_scan,
4c7aad1c 145 &h8300h_info_struct
252b5132 146};
This page took 0.184091 seconds and 4 git commands to generate.