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