1 /* BFD library support routines for the Hitachi-SH architecture. 2 Copyright (C) 1993, 97, 1998, 2000 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 26 static boolean 27 scan_mach (info, string) 28 const struct bfd_arch_info *info; 29 const char *string; 30 { 31 if (strcasecmp (info->printable_name, string) == 0) 32 return true; 33 return false; 34 } 35 36 37 #if 0 38 /* This routine is provided two arch_infos and returns whether 39 they'd be compatible */ 40 41 static const bfd_arch_info_type * 42 compatible (a,b) 43 const bfd_arch_info_type *a; 44 const bfd_arch_info_type *b; 45 { 46 if (a->arch != b->arch || a->mach != b->mach) 47 return NULL; 48 return a; 49 } 50 #endif 51 52 #define SH_NEXT &arch_info_struct[0] 53 #define SH2_NEXT &arch_info_struct[1] 54 #define SH_DSP_NEXT &arch_info_struct[2] 55 #define SH3_NEXT &arch_info_struct[3] 56 #define SH3_DSP_NEXT &arch_info_struct[4] 57 #define SH3E_NEXT &arch_info_struct[5] 58 #define SH4_NEXT NULL 59 60 static const bfd_arch_info_type arch_info_struct[] = 61 { 62 { 63 32, /* 32 bits in a word */ 64 32, /* 32 bits in an address */ 65 8, /* 8 bits in a byte */ 66 bfd_arch_sh, 67 bfd_mach_sh2, 68 "sh", /* arch_name */ 69 "sh2", /* printable name */ 70 1, 71 false, /* not the default */ 72 bfd_default_compatible, 73 scan_mach, 74 SH2_NEXT 75 }, 76 { 77 32, /* 32 bits in a word */ 78 32, /* 32 bits in an address */ 79 8, /* 8 bits in a byte */ 80 bfd_arch_sh, 81 bfd_mach_sh_dsp, 82 "sh", /* arch_name */ 83 "sh-dsp", /* printable name */ 84 1, 85 false, /* not the default */ 86 bfd_default_compatible, 87 scan_mach, 88 SH_DSP_NEXT 89 }, 90 { 91 32, /* 32 bits in a word */ 92 32, /* 32 bits in an address */ 93 8, /* 8 bits in a byte */ 94 bfd_arch_sh, 95 bfd_mach_sh3, 96 "sh", /* arch_name */ 97 "sh3", /* printable name */ 98 1, 99 false, /* not the default */ 100 bfd_default_compatible, 101 scan_mach, 102 SH3_NEXT 103 }, 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_sh, 109 bfd_mach_sh3_dsp, 110 "sh", /* arch_name */ 111 "sh3-dsp", /* printable name */ 112 1, 113 false, /* not the default */ 114 bfd_default_compatible, 115 scan_mach, 116 SH3_DSP_NEXT 117 }, 118 { 119 32, /* 32 bits in a word */ 120 32, /* 32 bits in an address */ 121 8, /* 8 bits in a byte */ 122 bfd_arch_sh, 123 bfd_mach_sh3e, 124 "sh", /* arch_name */ 125 "sh3e", /* printable name */ 126 1, 127 false, /* not the default */ 128 bfd_default_compatible, 129 scan_mach, 130 SH3E_NEXT 131 }, 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_sh, 137 bfd_mach_sh4, 138 "sh", /* arch_name */ 139 "sh4", /* printable name */ 140 1, 141 false, /* not the default */ 142 bfd_default_compatible, 143 scan_mach, 144 SH4_NEXT 145 }, 146 }; 147 148 const bfd_arch_info_type bfd_sh_arch = 149 { 150 32, /* 32 bits in a word */ 151 32, /* 32 bits in an address */ 152 8, /* 8 bits in a byte */ 153 bfd_arch_sh, 154 bfd_mach_sh, 155 "sh", /* arch_name */ 156 "sh", /* printable name */ 157 1, 158 true, /* the default machine */ 159 bfd_default_compatible, 160 scan_mach, 161 SH_NEXT 162 }; 163