]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - bfd/cpu-kvx.c
Fix uninitialised variable errors
[thirdparty/binutils-gdb.git] / bfd / cpu-kvx.c
1 /* BFD support for KVX.
2 Copyright (C) 2009-2024 Free Software Foundation, Inc.
3 Contributed by Kalray SA.
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 3 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; see the file COPYING3. If not,
19 see <http://www.gnu.org/licenses/>. */
20
21 #include "sysdep.h"
22 #include "bfd.h"
23 #include "libbfd.h"
24
25 /* This routine is provided two arch_infos and returns if machines
26 are compatible.
27 */
28
29 static const bfd_arch_info_type *
30 kvx_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
31 {
32 long amach = a->mach, bmach = b->mach;
33 /* If a & b are for different architecture we can do nothing. */
34 if (a->arch != b->arch)
35 return NULL;
36
37 if ((amach == bfd_mach_kv3_1_64 && bmach == bfd_mach_kv3_1_usr)
38 || (amach == bfd_mach_kv3_2_64 && bmach == bfd_mach_kv3_2_usr))
39 return b;
40
41 if ((bmach == bfd_mach_kv3_1_64 && amach == bfd_mach_kv3_1_usr)
42 || (bmach == bfd_mach_kv3_2_64 && amach == bfd_mach_kv3_2_usr))
43 return a;
44
45 /* Otherwise if either a or b is the 'default' machine
46 * then it can be polymorphed into the other.
47 * This will enable to execute merge_private_bfd_data
48 */
49 if (a->the_default)
50 return b;
51
52 if (b->the_default)
53 return a;
54
55 /* We do not want to transmute some machine into another one */
56 if (amach != bmach)
57 return NULL;
58
59 /* If a & b are for the same machine then all is well. */
60 if (amach == bmach)
61 return a;
62
63 return NULL;
64 }
65
66 static bool
67 scan (const struct bfd_arch_info *info, const char *string)
68 {
69 /* First test for an exact match. */
70 if (strcasecmp (string, info->printable_name) == 0)
71 return true;
72
73 /* Finally check for the default architecture. */
74 if (strcasecmp (string, "kvx") == 0)
75 return info->the_default;
76
77 return false;
78 }
79
80 #define N(addr_bits, machine, print, default, next) \
81 { \
82 32, /* 32 bits in a word. */ \
83 addr_bits, /* bits in an address. */ \
84 8, /* 8 bits in a byte. */ \
85 bfd_arch_kvx, \
86 machine, /* Machine number. */ \
87 "kvx", /* Architecture name. */ \
88 print, /* Printable name. */ \
89 4, /* Section align power. */ \
90 default, /* Is this the default ? */ \
91 kvx_compatible, \
92 scan, \
93 bfd_arch_default_fill, \
94 next, \
95 0 \
96 }
97
98
99 const bfd_arch_info_type bfd_kv4_1_usr_arch =
100 N (64 , bfd_mach_kv4_1_usr , "kvx:kv4-1:usr" , false , NULL);
101
102 const bfd_arch_info_type bfd_kv3_2_usr_arch =
103 N (64 , bfd_mach_kv3_2_usr , "kvx:kv3-2:usr" , false , &bfd_kv4_1_usr_arch);
104
105 const bfd_arch_info_type bfd_kv3_1_usr_arch =
106 N (64 , bfd_mach_kv3_1_usr , "kvx:kv3-1:usr" , false , &bfd_kv3_2_usr_arch);
107
108 const bfd_arch_info_type bfd_kv4_1_64_arch =
109 N (64 , bfd_mach_kv4_1_64 , "kvx:kv4-1:64" , false , &bfd_kv3_1_usr_arch);
110
111 const bfd_arch_info_type bfd_kv3_2_64_arch =
112 N (64 , bfd_mach_kv3_2_64 , "kvx:kv3-2:64" , false , &bfd_kv4_1_64_arch);
113
114 const bfd_arch_info_type bfd_kv3_1_64_arch =
115 N (64 , bfd_mach_kv3_1_64 , "kvx:kv3-1:64" , false , &bfd_kv3_2_64_arch);
116
117 const bfd_arch_info_type bfd_kv4_1_arch =
118 N (32 , bfd_mach_kv4_1 , "kvx:kv4-1" , false , &bfd_kv3_1_64_arch);
119
120 const bfd_arch_info_type bfd_kv3_2_arch =
121 N (32 , bfd_mach_kv3_2 , "kvx:kv3-2" , false , &bfd_kv4_1_arch);
122
123 const bfd_arch_info_type bfd_kvx_arch =
124 N (32 , bfd_mach_kv3_1 , "kvx:kv3-1" , true , &bfd_kv3_2_arch);