OSDN Git Service

Switch the license of all .c files to GPLv3.
[pf3gnuchains/pf3gnuchains4x.git] / gdb / gdbserver / linux-ia64-low.c
1 /* GNU/Linux/IA64 specific low level interface, for the remote server for GDB.
2    Copyright (C) 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2007
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
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.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "server.h"
21 #include "linux-low.h"
22
23 #ifdef HAVE_SYS_REG_H
24 #include <sys/reg.h>
25 #endif
26
27 #define ia64_num_regs 462
28
29 #include <asm/ptrace_offsets.h>
30
31 static int ia64_regmap[] =
32   {
33     /* general registers */
34     -1,         /* gr0 not available; i.e, it's always zero */
35     PT_R1,
36     PT_R2,
37     PT_R3,
38     PT_R4,
39     PT_R5,
40     PT_R6,
41     PT_R7,
42     PT_R8,
43     PT_R9,
44     PT_R10,
45     PT_R11,
46     PT_R12,
47     PT_R13,
48     PT_R14,
49     PT_R15,
50     PT_R16,
51     PT_R17,
52     PT_R18,
53     PT_R19,
54     PT_R20,
55     PT_R21,
56     PT_R22,
57     PT_R23,
58     PT_R24,
59     PT_R25,
60     PT_R26,
61     PT_R27,
62     PT_R28,
63     PT_R29,
64     PT_R30,
65     PT_R31,
66     /* gr32 through gr127 not directly available via the ptrace interface */
67     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
68     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
69     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
70     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
71     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
72     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
73     /* Floating point registers */
74     -1, -1,     /* f0 and f1 not available (f0 is +0.0 and f1 is +1.0) */
75     PT_F2,
76     PT_F3,
77     PT_F4,
78     PT_F5,
79     PT_F6,
80     PT_F7,
81     PT_F8,
82     PT_F9,
83     PT_F10,
84     PT_F11,
85     PT_F12,
86     PT_F13,
87     PT_F14,
88     PT_F15,
89     PT_F16,
90     PT_F17,
91     PT_F18,
92     PT_F19,
93     PT_F20,
94     PT_F21,
95     PT_F22,
96     PT_F23,
97     PT_F24,
98     PT_F25,
99     PT_F26,
100     PT_F27,
101     PT_F28,
102     PT_F29,
103     PT_F30,
104     PT_F31,
105     PT_F32,
106     PT_F33,
107     PT_F34,
108     PT_F35,
109     PT_F36,
110     PT_F37,
111     PT_F38,
112     PT_F39,
113     PT_F40,
114     PT_F41,
115     PT_F42,
116     PT_F43,
117     PT_F44,
118     PT_F45,
119     PT_F46,
120     PT_F47,
121     PT_F48,
122     PT_F49,
123     PT_F50,
124     PT_F51,
125     PT_F52,
126     PT_F53,
127     PT_F54,
128     PT_F55,
129     PT_F56,
130     PT_F57,
131     PT_F58,
132     PT_F59,
133     PT_F60,
134     PT_F61,
135     PT_F62,
136     PT_F63,
137     PT_F64,
138     PT_F65,
139     PT_F66,
140     PT_F67,
141     PT_F68,
142     PT_F69,
143     PT_F70,
144     PT_F71,
145     PT_F72,
146     PT_F73,
147     PT_F74,
148     PT_F75,
149     PT_F76,
150     PT_F77,
151     PT_F78,
152     PT_F79,
153     PT_F80,
154     PT_F81,
155     PT_F82,
156     PT_F83,
157     PT_F84,
158     PT_F85,
159     PT_F86,
160     PT_F87,
161     PT_F88,
162     PT_F89,
163     PT_F90,
164     PT_F91,
165     PT_F92,
166     PT_F93,
167     PT_F94,
168     PT_F95,
169     PT_F96,
170     PT_F97,
171     PT_F98,
172     PT_F99,
173     PT_F100,
174     PT_F101,
175     PT_F102,
176     PT_F103,
177     PT_F104,
178     PT_F105,
179     PT_F106,
180     PT_F107,
181     PT_F108,
182     PT_F109,
183     PT_F110,
184     PT_F111,
185     PT_F112,
186     PT_F113,
187     PT_F114,
188     PT_F115,
189     PT_F116,
190     PT_F117,
191     PT_F118,
192     PT_F119,
193     PT_F120,
194     PT_F121,
195     PT_F122,
196     PT_F123,
197     PT_F124,
198     PT_F125,
199     PT_F126,
200     PT_F127,
201     /* predicate registers - we don't fetch these individually */
202     -1, -1, -1, -1, -1, -1, -1, -1,
203     -1, -1, -1, -1, -1, -1, -1, -1,
204     -1, -1, -1, -1, -1, -1, -1, -1,
205     -1, -1, -1, -1, -1, -1, -1, -1,
206     -1, -1, -1, -1, -1, -1, -1, -1,
207     -1, -1, -1, -1, -1, -1, -1, -1,
208     -1, -1, -1, -1, -1, -1, -1, -1,
209     -1, -1, -1, -1, -1, -1, -1, -1,
210     /* branch registers */
211     PT_B0,
212     PT_B1,
213     PT_B2,
214     PT_B3,
215     PT_B4,
216     PT_B5,
217     PT_B6,
218     PT_B7,
219     /* virtual frame pointer and virtual return address pointer */
220     -1, -1,
221     /* other registers */
222     PT_PR,
223     PT_CR_IIP,  /* ip */
224     PT_CR_IPSR, /* psr */
225     PT_CFM,     /* cfm */
226     /* kernel registers not visible via ptrace interface (?) */
227     -1, -1, -1, -1, -1, -1, -1, -1,
228     /* hole */
229     -1, -1, -1, -1, -1, -1, -1, -1,
230     PT_AR_RSC,
231     PT_AR_BSP,
232     PT_AR_BSPSTORE,
233     PT_AR_RNAT,
234     -1,
235     -1,         /* Not available: FCR, IA32 floating control register */
236     -1, -1,
237     -1,         /* Not available: EFLAG */
238     -1,         /* Not available: CSD */
239     -1,         /* Not available: SSD */
240     -1,         /* Not available: CFLG */
241     -1,         /* Not available: FSR */
242     -1,         /* Not available: FIR */
243     -1,         /* Not available: FDR */
244     -1,
245     PT_AR_CCV,
246     -1, -1, -1,
247     PT_AR_UNAT,
248     -1, -1, -1,
249     PT_AR_FPSR,
250     -1, -1, -1,
251     -1,         /* Not available: ITC */
252     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
253     -1, -1, -1, -1, -1, -1, -1, -1, -1,
254     PT_AR_PFS,
255     PT_AR_LC,
256     -1,         /* Not available: EC, the Epilog Count register */
257     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
258     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
259     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
260     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
261     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
262     -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
263     -1,
264   };
265
266 static int
267 ia64_cannot_store_register (int regno)
268 {
269   return 0;
270 }
271
272 static int
273 ia64_cannot_fetch_register (int regno)
274 {
275   return 0;
276 }
277
278 struct linux_target_ops the_low_target = {
279   ia64_num_regs,
280   ia64_regmap,
281   ia64_cannot_fetch_register,
282   ia64_cannot_store_register,
283 };