Line data Source code
1 : /* Register names and numbers for SH DWARF.
2 : Copyright (C) 2010 Red Hat, Inc.
3 : This file is part of elfutils.
4 : Contributed by Matt Fleming <matt@console-pimps.org>.
5 :
6 : This file is free software; you can redistribute it and/or modify
7 : it under the terms of either
8 :
9 : * the GNU Lesser General Public License as published by the Free
10 : Software Foundation; either version 3 of the License, or (at
11 : your option) any later version
12 :
13 : or
14 :
15 : * the GNU General Public License as published by the Free
16 : Software Foundation; either version 2 of the License, or (at
17 : your option) any later version
18 :
19 : or both in parallel, as here.
20 :
21 : elfutils is distributed in the hope that it will be useful, but
22 : WITHOUT ANY WARRANTY; without even the implied warranty of
23 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 : General Public License for more details.
25 :
26 : You should have received copies of the GNU General Public License and
27 : the GNU Lesser General Public License along with this program. If
28 : not, see <http://www.gnu.org/licenses/>. */
29 :
30 : #ifdef HAVE_CONFIG_H
31 : # include <config.h>
32 : #endif
33 :
34 : #include <assert.h>
35 : #include <dwarf.h>
36 : #include <string.h>
37 :
38 : #define BACKEND sh_
39 : #include "libebl_CPU.h"
40 :
41 : ssize_t
42 0 : sh_register_info (Ebl *ebl __attribute__ ((unused)),
43 : int regno, char *name, size_t namelen,
44 : const char **prefix, const char **setname,
45 : int *bits, int *type)
46 : {
47 0 : if (name == NULL)
48 : return 104;
49 :
50 0 : if (regno < 0 || regno > 103 || namelen < 6)
51 : return -1;
52 :
53 0 : *prefix = "";
54 0 : *bits = 32;
55 0 : *type = DW_ATE_signed;
56 :
57 0 : switch (regno)
58 : {
59 0 : case 0 ... 9:
60 0 : *setname = "integer";
61 0 : name[0] = 'r';
62 0 : name[1] = regno + '0';
63 0 : namelen = 2;
64 0 : break;
65 :
66 0 : case 10 ... 15:
67 0 : *setname = "integer";
68 0 : name[0] = 'r';
69 0 : name[1] = '1';
70 0 : name[2] = regno - 10 + '0';
71 0 : namelen = 3;
72 0 : break;
73 :
74 0 : case 16:
75 0 : *setname = "system";
76 0 : *type = DW_ATE_address;
77 0 : name[0] = 'p';
78 0 : name[1] = 'c';
79 0 : namelen = 2;
80 0 : break;
81 :
82 0 : case 17:
83 0 : *setname = "system";
84 0 : *type = DW_ATE_address;
85 0 : name[0] = 'p';
86 0 : name[1] = 'r';
87 0 : namelen = 2;
88 0 : break;
89 :
90 0 : case 18:
91 0 : *setname = "control";
92 0 : *type = DW_ATE_unsigned;
93 0 : name[0] = 's';
94 0 : name[1] = 'r';
95 0 : namelen = 2;
96 0 : break;
97 :
98 0 : case 19:
99 0 : *setname = "control";
100 0 : *type = DW_ATE_unsigned;
101 0 : name[0] = 'g';
102 0 : name[1] = 'b';
103 0 : name[2] = 'r';
104 0 : namelen = 3;
105 0 : break;
106 :
107 0 : case 20:
108 0 : *setname = "system";
109 0 : name[0] = 'm';
110 0 : name[1] = 'a';
111 0 : name[2] = 'c';
112 0 : name[3] = 'h';
113 0 : namelen = 4;
114 0 : break;
115 :
116 0 : case 21:
117 0 : *setname = "system";
118 0 : name[0] = 'm';
119 0 : name[1] = 'a';
120 0 : name[2] = 'c';
121 0 : name[3] = 'l';
122 0 : namelen = 4;
123 :
124 0 : break;
125 :
126 0 : case 23:
127 0 : *setname = "system";
128 0 : *type = DW_ATE_unsigned;
129 0 : name[0] = 'f';
130 0 : name[1] = 'p';
131 0 : name[2] = 'u';
132 0 : name[3] = 'l';
133 0 : namelen = 4;
134 0 : break;
135 :
136 0 : case 24:
137 0 : *setname = "system";
138 0 : *type = DW_ATE_unsigned;
139 0 : name[0] = 'f';
140 0 : name[1] = 'p';
141 0 : name[2] = 's';
142 0 : name[3] = 'c';
143 0 : name[4] = 'r';
144 0 : namelen = 5;
145 0 : break;
146 :
147 0 : case 25 ... 34:
148 0 : *setname = "fpu";
149 0 : *type = DW_ATE_float;
150 0 : name[0] = 'f';
151 0 : name[1] = 'r';
152 0 : name[2] = regno - 25 + '0';
153 0 : namelen = 3;
154 0 : break;
155 :
156 0 : case 35 ... 40:
157 0 : *setname = "fpu";
158 0 : *type = DW_ATE_float;
159 0 : name[0] = 'f';
160 0 : name[1] = 'r';
161 0 : name[2] = '1';
162 0 : name[3] = regno - 35 + '0';
163 0 : namelen = 4;
164 0 : break;
165 :
166 0 : case 87 ... 96:
167 0 : *type = DW_ATE_float;
168 0 : *setname = "fpu";
169 0 : name[0] = 'x';
170 0 : name[1] = 'f';
171 0 : name[2] = regno - 87 + '0';
172 0 : namelen = 3;
173 0 : break;
174 :
175 0 : case 97 ... 103:
176 0 : *type = DW_ATE_float;
177 0 : *setname = "fpu";
178 0 : name[0] = 'x';
179 0 : name[1] = 'f';
180 0 : name[2] = '1';
181 0 : name[3] = regno - 97 + '0';
182 0 : namelen = 4;
183 0 : break;
184 :
185 : default:
186 : return 0;
187 : }
188 :
189 0 : name[namelen++] = '\0';
190 0 : return namelen;
191 : }
|