OSDN Git Service

Protoization.
[pf3gnuchains/pf3gnuchains3x.git] / bfd / cpu-h8300.c
1 /* BFD library support routines for the Hitachi H8/300 architecture.
2    Copyright (C) 1990, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
3    Hacked by Steve Chamberlain of Cygnus Support.
4
5 This file is part of BFD, the Binary File Descriptor library.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include "bfd.h"
22 #include "sysdep.h"
23 #include "libbfd.h"
24
25 int bfd_default_scan_num_mach ();
26
27 static boolean
28 h8300_scan (info, string)
29      const struct bfd_arch_info *info;
30      const char *string;
31 {
32   if (*string != 'h' && *string != 'H')
33     return false;
34
35   string++;
36   if (*string != '8')
37     return false;
38
39   string++;
40   if (*string == '/')
41     string++;
42
43   if (*string != '3')
44     return false;
45   string++;
46   if (*string != '0')
47     return false;
48   string++;
49   if (*string != '0')
50     return false;
51   string++;
52   if (*string == '-')
53     string++;
54   if (*string == 'h' || *string == 'H')
55     {
56       return (info->mach == bfd_mach_h8300h);
57     }
58   else if (*string == 's' || *string == 'S')
59     {
60       return (info->mach == bfd_mach_h8300s);
61     }
62   else
63     {
64       return info->mach == bfd_mach_h8300;
65     }
66 }
67
68 /* This routine is provided two arch_infos and works out the machine
69    which would be compatible with both and returns a pointer to its
70    info structure.  */
71
72 static const bfd_arch_info_type *
73 compatible (in, out)
74      const bfd_arch_info_type *in;
75      const bfd_arch_info_type *out;
76 {
77   /* It's really not a good idea to mix and match modes.  */
78   if (in->mach != out->mach)
79     return 0;
80   else
81     return in;
82 }
83
84 static const bfd_arch_info_type h8300_info_struct =
85 {
86   16,                           /* 16 bits in a word */
87   16,                           /* 16 bits in an address */
88   8,                            /* 8 bits in a byte */
89   bfd_arch_h8300,
90   bfd_mach_h8300,
91   "h8300",                      /* arch_name  */
92   "h8300",                      /* printable name */
93   1,
94   true,                         /* the default machine */
95   compatible,
96   h8300_scan,
97 #if 0
98   local_bfd_reloc_type_lookup,
99 #endif
100   0,
101 };
102
103 static const bfd_arch_info_type h8300h_info_struct =
104 {
105   32,                           /* 32 bits in a word */
106   32,                           /* 32 bits in an address */
107   8,                            /* 8 bits in a byte */
108   bfd_arch_h8300,
109   bfd_mach_h8300h,
110   "h8300h",                     /* arch_name  */
111   "h8300h",                     /* printable name */
112   1,
113   false,                        /* the default machine */
114   compatible,
115   h8300_scan,
116 #if 0
117   local_bfd_reloc_type_lookup,
118 #endif
119   &h8300_info_struct,
120 };
121
122 const bfd_arch_info_type bfd_h8300_arch =
123 {
124   32,                           /* 32 bits in a word */
125   32,                           /* 32 bits in an address */
126   8,                            /* 8 bits in a byte */
127   bfd_arch_h8300,
128   bfd_mach_h8300s,
129   "h8300s",                     /* arch_name  */
130   "h8300s",                     /* printable name */
131   1,
132   false,                        /* the default machine */
133   compatible,
134   h8300_scan,
135 #if 0
136   local_bfd_reloc_type_lookup,
137 #endif
138   &h8300h_info_struct,
139 };