xref: /openbsd-src/gnu/usr.bin/binutils/gdb/gdbserver/linux-ia64-low.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
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