ppc-linux-nat.c revision 1.1 1 1.1 christos /* PPC GNU/Linux native support.
2 1.1 christos
3 1.1 christos Copyright (C) 1988-2014 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos This file is part of GDB.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 1.1 christos
20 1.1 christos #include "defs.h"
21 1.1 christos #include <string.h>
22 1.1 christos #include "observer.h"
23 1.1 christos #include "frame.h"
24 1.1 christos #include "inferior.h"
25 1.1 christos #include "gdbthread.h"
26 1.1 christos #include "gdbcore.h"
27 1.1 christos #include "regcache.h"
28 1.1 christos #include "gdb_assert.h"
29 1.1 christos #include "target.h"
30 1.1 christos #include "linux-nat.h"
31 1.1 christos
32 1.1 christos #include <stdint.h>
33 1.1 christos #include <sys/types.h>
34 1.1 christos #include <signal.h>
35 1.1 christos #include <sys/user.h>
36 1.1 christos #include <sys/ioctl.h>
37 1.1 christos #include "gdb_wait.h"
38 1.1 christos #include <fcntl.h>
39 1.1 christos #include <sys/procfs.h>
40 1.1 christos #include <sys/ptrace.h>
41 1.1 christos
42 1.1 christos /* Prototypes for supply_gregset etc. */
43 1.1 christos #include "gregset.h"
44 1.1 christos #include "ppc-tdep.h"
45 1.1 christos #include "ppc-linux-tdep.h"
46 1.1 christos
47 1.1 christos /* Required when using the AUXV. */
48 1.1 christos #include "elf/common.h"
49 1.1 christos #include "auxv.h"
50 1.1 christos
51 1.1 christos /* This sometimes isn't defined. */
52 1.1 christos #ifndef PT_ORIG_R3
53 1.1 christos #define PT_ORIG_R3 34
54 1.1 christos #endif
55 1.1 christos #ifndef PT_TRAP
56 1.1 christos #define PT_TRAP 40
57 1.1 christos #endif
58 1.1 christos
59 1.1 christos /* The PPC_FEATURE_* defines should be provided by <asm/cputable.h>.
60 1.1 christos If they aren't, we can provide them ourselves (their values are fixed
61 1.1 christos because they are part of the kernel ABI). They are used in the AT_HWCAP
62 1.1 christos entry of the AUXV. */
63 1.1 christos #ifndef PPC_FEATURE_CELL
64 1.1 christos #define PPC_FEATURE_CELL 0x00010000
65 1.1 christos #endif
66 1.1 christos #ifndef PPC_FEATURE_BOOKE
67 1.1 christos #define PPC_FEATURE_BOOKE 0x00008000
68 1.1 christos #endif
69 1.1 christos #ifndef PPC_FEATURE_HAS_DFP
70 1.1 christos #define PPC_FEATURE_HAS_DFP 0x00000400 /* Decimal Floating Point. */
71 1.1 christos #endif
72 1.1 christos
73 1.1 christos /* Glibc's headers don't define PTRACE_GETVRREGS so we cannot use a
74 1.1 christos configure time check. Some older glibc's (for instance 2.2.1)
75 1.1 christos don't have a specific powerpc version of ptrace.h, and fall back on
76 1.1 christos a generic one. In such cases, sys/ptrace.h defines
77 1.1 christos PTRACE_GETFPXREGS and PTRACE_SETFPXREGS to the same numbers that
78 1.1 christos ppc kernel's asm/ptrace.h defines PTRACE_GETVRREGS and
79 1.1 christos PTRACE_SETVRREGS to be. This also makes a configury check pretty
80 1.1 christos much useless. */
81 1.1 christos
82 1.1 christos /* These definitions should really come from the glibc header files,
83 1.1 christos but Glibc doesn't know about the vrregs yet. */
84 1.1 christos #ifndef PTRACE_GETVRREGS
85 1.1 christos #define PTRACE_GETVRREGS 18
86 1.1 christos #define PTRACE_SETVRREGS 19
87 1.1 christos #endif
88 1.1 christos
89 1.1 christos /* PTRACE requests for POWER7 VSX registers. */
90 1.1 christos #ifndef PTRACE_GETVSXREGS
91 1.1 christos #define PTRACE_GETVSXREGS 27
92 1.1 christos #define PTRACE_SETVSXREGS 28
93 1.1 christos #endif
94 1.1 christos
95 1.1 christos /* Similarly for the ptrace requests for getting / setting the SPE
96 1.1 christos registers (ev0 -- ev31, acc, and spefscr). See the description of
97 1.1 christos gdb_evrregset_t for details. */
98 1.1 christos #ifndef PTRACE_GETEVRREGS
99 1.1 christos #define PTRACE_GETEVRREGS 20
100 1.1 christos #define PTRACE_SETEVRREGS 21
101 1.1 christos #endif
102 1.1 christos
103 1.1 christos /* Similarly for the hardware watchpoint support. These requests are used
104 1.1 christos when the PowerPC HWDEBUG ptrace interface is not available. */
105 1.1 christos #ifndef PTRACE_GET_DEBUGREG
106 1.1 christos #define PTRACE_GET_DEBUGREG 25
107 1.1 christos #endif
108 1.1 christos #ifndef PTRACE_SET_DEBUGREG
109 1.1 christos #define PTRACE_SET_DEBUGREG 26
110 1.1 christos #endif
111 1.1 christos #ifndef PTRACE_GETSIGINFO
112 1.1 christos #define PTRACE_GETSIGINFO 0x4202
113 1.1 christos #endif
114 1.1 christos
115 1.1 christos /* These requests are used when the PowerPC HWDEBUG ptrace interface is
116 1.1 christos available. It exposes the debug facilities of PowerPC processors, as well
117 1.1 christos as additional features of BookE processors, such as ranged breakpoints and
118 1.1 christos watchpoints and hardware-accelerated condition evaluation. */
119 1.1 christos #ifndef PPC_PTRACE_GETHWDBGINFO
120 1.1 christos
121 1.1 christos /* Not having PPC_PTRACE_GETHWDBGINFO defined means that the PowerPC HWDEBUG
122 1.1 christos ptrace interface is not present in ptrace.h, so we'll have to pretty much
123 1.1 christos include it all here so that the code at least compiles on older systems. */
124 1.1 christos #define PPC_PTRACE_GETHWDBGINFO 0x89
125 1.1 christos #define PPC_PTRACE_SETHWDEBUG 0x88
126 1.1 christos #define PPC_PTRACE_DELHWDEBUG 0x87
127 1.1 christos
128 1.1 christos struct ppc_debug_info
129 1.1 christos {
130 1.1 christos uint32_t version; /* Only version 1 exists to date. */
131 1.1 christos uint32_t num_instruction_bps;
132 1.1 christos uint32_t num_data_bps;
133 1.1 christos uint32_t num_condition_regs;
134 1.1 christos uint32_t data_bp_alignment;
135 1.1 christos uint32_t sizeof_condition; /* size of the DVC register. */
136 1.1 christos uint64_t features;
137 1.1 christos };
138 1.1 christos
139 1.1 christos /* Features will have bits indicating whether there is support for: */
140 1.1 christos #define PPC_DEBUG_FEATURE_INSN_BP_RANGE 0x1
141 1.1 christos #define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x2
142 1.1 christos #define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x4
143 1.1 christos #define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x8
144 1.1 christos
145 1.1 christos struct ppc_hw_breakpoint
146 1.1 christos {
147 1.1 christos uint32_t version; /* currently, version must be 1 */
148 1.1 christos uint32_t trigger_type; /* only some combinations allowed */
149 1.1 christos uint32_t addr_mode; /* address match mode */
150 1.1 christos uint32_t condition_mode; /* break/watchpoint condition flags */
151 1.1 christos uint64_t addr; /* break/watchpoint address */
152 1.1 christos uint64_t addr2; /* range end or mask */
153 1.1 christos uint64_t condition_value; /* contents of the DVC register */
154 1.1 christos };
155 1.1 christos
156 1.1 christos /* Trigger type. */
157 1.1 christos #define PPC_BREAKPOINT_TRIGGER_EXECUTE 0x1
158 1.1 christos #define PPC_BREAKPOINT_TRIGGER_READ 0x2
159 1.1 christos #define PPC_BREAKPOINT_TRIGGER_WRITE 0x4
160 1.1 christos #define PPC_BREAKPOINT_TRIGGER_RW 0x6
161 1.1 christos
162 1.1 christos /* Address mode. */
163 1.1 christos #define PPC_BREAKPOINT_MODE_EXACT 0x0
164 1.1 christos #define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE 0x1
165 1.1 christos #define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE 0x2
166 1.1 christos #define PPC_BREAKPOINT_MODE_MASK 0x3
167 1.1 christos
168 1.1 christos /* Condition mode. */
169 1.1 christos #define PPC_BREAKPOINT_CONDITION_NONE 0x0
170 1.1 christos #define PPC_BREAKPOINT_CONDITION_AND 0x1
171 1.1 christos #define PPC_BREAKPOINT_CONDITION_EXACT 0x1
172 1.1 christos #define PPC_BREAKPOINT_CONDITION_OR 0x2
173 1.1 christos #define PPC_BREAKPOINT_CONDITION_AND_OR 0x3
174 1.1 christos #define PPC_BREAKPOINT_CONDITION_BE_ALL 0x00ff0000
175 1.1 christos #define PPC_BREAKPOINT_CONDITION_BE_SHIFT 16
176 1.1 christos #define PPC_BREAKPOINT_CONDITION_BE(n) \
177 1.1 christos (1<<((n)+PPC_BREAKPOINT_CONDITION_BE_SHIFT))
178 1.1 christos #endif /* PPC_PTRACE_GETHWDBGINFO */
179 1.1 christos
180 1.1 christos /* Feature defined on Linux kernel v3.9: DAWR interface, that enables wider
181 1.1 christos watchpoint (up to 512 bytes). */
182 1.1 christos #ifndef PPC_DEBUG_FEATURE_DATA_BP_DAWR
183 1.1 christos #define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10
184 1.1 christos #endif /* PPC_DEBUG_FEATURE_DATA_BP_DAWR */
185 1.1 christos
186 1.1 christos /* Similarly for the general-purpose (gp0 -- gp31)
187 1.1 christos and floating-point registers (fp0 -- fp31). */
188 1.1 christos #ifndef PTRACE_GETREGS
189 1.1 christos #define PTRACE_GETREGS 12
190 1.1 christos #endif
191 1.1 christos #ifndef PTRACE_SETREGS
192 1.1 christos #define PTRACE_SETREGS 13
193 1.1 christos #endif
194 1.1 christos #ifndef PTRACE_GETFPREGS
195 1.1 christos #define PTRACE_GETFPREGS 14
196 1.1 christos #endif
197 1.1 christos #ifndef PTRACE_SETFPREGS
198 1.1 christos #define PTRACE_SETFPREGS 15
199 1.1 christos #endif
200 1.1 christos
201 1.1 christos /* This oddity is because the Linux kernel defines elf_vrregset_t as
202 1.1 christos an array of 33 16 bytes long elements. I.e. it leaves out vrsave.
203 1.1 christos However the PTRACE_GETVRREGS and PTRACE_SETVRREGS requests return
204 1.1 christos the vrsave as an extra 4 bytes at the end. I opted for creating a
205 1.1 christos flat array of chars, so that it is easier to manipulate for gdb.
206 1.1 christos
207 1.1 christos There are 32 vector registers 16 bytes longs, plus a VSCR register
208 1.1 christos which is only 4 bytes long, but is fetched as a 16 bytes
209 1.1 christos quantity. Up to here we have the elf_vrregset_t structure.
210 1.1 christos Appended to this there is space for the VRSAVE register: 4 bytes.
211 1.1 christos Even though this vrsave register is not included in the regset
212 1.1 christos typedef, it is handled by the ptrace requests.
213 1.1 christos
214 1.1 christos Note that GNU/Linux doesn't support little endian PPC hardware,
215 1.1 christos therefore the offset at which the real value of the VSCR register
216 1.1 christos is located will be always 12 bytes.
217 1.1 christos
218 1.1 christos The layout is like this (where x is the actual value of the vscr reg): */
219 1.1 christos
220 1.1 christos /* *INDENT-OFF* */
221 1.1 christos /*
222 1.1 christos |.|.|.|.|.....|.|.|.|.||.|.|.|x||.|
223 1.1 christos <-------> <-------><-------><->
224 1.1 christos VR0 VR31 VSCR VRSAVE
225 1.1 christos */
226 1.1 christos /* *INDENT-ON* */
227 1.1 christos
228 1.1 christos #define SIZEOF_VRREGS 33*16+4
229 1.1 christos
230 1.1 christos typedef char gdb_vrregset_t[SIZEOF_VRREGS];
231 1.1 christos
232 1.1 christos /* This is the layout of the POWER7 VSX registers and the way they overlap
233 1.1 christos with the existing FPR and VMX registers.
234 1.1 christos
235 1.1 christos VSR doubleword 0 VSR doubleword 1
236 1.1 christos ----------------------------------------------------------------
237 1.1 christos VSR[0] | FPR[0] | |
238 1.1 christos ----------------------------------------------------------------
239 1.1 christos VSR[1] | FPR[1] | |
240 1.1 christos ----------------------------------------------------------------
241 1.1 christos | ... | |
242 1.1 christos | ... | |
243 1.1 christos ----------------------------------------------------------------
244 1.1 christos VSR[30] | FPR[30] | |
245 1.1 christos ----------------------------------------------------------------
246 1.1 christos VSR[31] | FPR[31] | |
247 1.1 christos ----------------------------------------------------------------
248 1.1 christos VSR[32] | VR[0] |
249 1.1 christos ----------------------------------------------------------------
250 1.1 christos VSR[33] | VR[1] |
251 1.1 christos ----------------------------------------------------------------
252 1.1 christos | ... |
253 1.1 christos | ... |
254 1.1 christos ----------------------------------------------------------------
255 1.1 christos VSR[62] | VR[30] |
256 1.1 christos ----------------------------------------------------------------
257 1.1 christos VSR[63] | VR[31] |
258 1.1 christos ----------------------------------------------------------------
259 1.1 christos
260 1.1 christos VSX has 64 128bit registers. The first 32 registers overlap with
261 1.1 christos the FP registers (doubleword 0) and hence extend them with additional
262 1.1 christos 64 bits (doubleword 1). The other 32 regs overlap with the VMX
263 1.1 christos registers. */
264 1.1 christos #define SIZEOF_VSXREGS 32*8
265 1.1 christos
266 1.1 christos typedef char gdb_vsxregset_t[SIZEOF_VSXREGS];
267 1.1 christos
268 1.1 christos /* On PPC processors that support the Signal Processing Extension
269 1.1 christos (SPE) APU, the general-purpose registers are 64 bits long.
270 1.1 christos However, the ordinary Linux kernel PTRACE_PEEKUSER / PTRACE_POKEUSER
271 1.1 christos ptrace calls only access the lower half of each register, to allow
272 1.1 christos them to behave the same way they do on non-SPE systems. There's a
273 1.1 christos separate pair of calls, PTRACE_GETEVRREGS / PTRACE_SETEVRREGS, that
274 1.1 christos read and write the top halves of all the general-purpose registers
275 1.1 christos at once, along with some SPE-specific registers.
276 1.1 christos
277 1.1 christos GDB itself continues to claim the general-purpose registers are 32
278 1.1 christos bits long. It has unnamed raw registers that hold the upper halves
279 1.1 christos of the gprs, and the full 64-bit SIMD views of the registers,
280 1.1 christos 'ev0' -- 'ev31', are pseudo-registers that splice the top and
281 1.1 christos bottom halves together.
282 1.1 christos
283 1.1 christos This is the structure filled in by PTRACE_GETEVRREGS and written to
284 1.1 christos the inferior's registers by PTRACE_SETEVRREGS. */
285 1.1 christos struct gdb_evrregset_t
286 1.1 christos {
287 1.1 christos unsigned long evr[32];
288 1.1 christos unsigned long long acc;
289 1.1 christos unsigned long spefscr;
290 1.1 christos };
291 1.1 christos
292 1.1 christos /* Non-zero if our kernel may support the PTRACE_GETVSXREGS and
293 1.1 christos PTRACE_SETVSXREGS requests, for reading and writing the VSX
294 1.1 christos POWER7 registers 0 through 31. Zero if we've tried one of them and
295 1.1 christos gotten an error. Note that VSX registers 32 through 63 overlap
296 1.1 christos with VR registers 0 through 31. */
297 1.1 christos int have_ptrace_getsetvsxregs = 1;
298 1.1 christos
299 1.1 christos /* Non-zero if our kernel may support the PTRACE_GETVRREGS and
300 1.1 christos PTRACE_SETVRREGS requests, for reading and writing the Altivec
301 1.1 christos registers. Zero if we've tried one of them and gotten an
302 1.1 christos error. */
303 1.1 christos int have_ptrace_getvrregs = 1;
304 1.1 christos
305 1.1 christos /* Non-zero if our kernel may support the PTRACE_GETEVRREGS and
306 1.1 christos PTRACE_SETEVRREGS requests, for reading and writing the SPE
307 1.1 christos registers. Zero if we've tried one of them and gotten an
308 1.1 christos error. */
309 1.1 christos int have_ptrace_getsetevrregs = 1;
310 1.1 christos
311 1.1 christos /* Non-zero if our kernel may support the PTRACE_GETREGS and
312 1.1 christos PTRACE_SETREGS requests, for reading and writing the
313 1.1 christos general-purpose registers. Zero if we've tried one of
314 1.1 christos them and gotten an error. */
315 1.1 christos int have_ptrace_getsetregs = 1;
316 1.1 christos
317 1.1 christos /* Non-zero if our kernel may support the PTRACE_GETFPREGS and
318 1.1 christos PTRACE_SETFPREGS requests, for reading and writing the
319 1.1 christos floating-pointers registers. Zero if we've tried one of
320 1.1 christos them and gotten an error. */
321 1.1 christos int have_ptrace_getsetfpregs = 1;
322 1.1 christos
323 1.1 christos /* *INDENT-OFF* */
324 1.1 christos /* registers layout, as presented by the ptrace interface:
325 1.1 christos PT_R0, PT_R1, PT_R2, PT_R3, PT_R4, PT_R5, PT_R6, PT_R7,
326 1.1 christos PT_R8, PT_R9, PT_R10, PT_R11, PT_R12, PT_R13, PT_R14, PT_R15,
327 1.1 christos PT_R16, PT_R17, PT_R18, PT_R19, PT_R20, PT_R21, PT_R22, PT_R23,
328 1.1 christos PT_R24, PT_R25, PT_R26, PT_R27, PT_R28, PT_R29, PT_R30, PT_R31,
329 1.1 christos PT_FPR0, PT_FPR0 + 2, PT_FPR0 + 4, PT_FPR0 + 6,
330 1.1 christos PT_FPR0 + 8, PT_FPR0 + 10, PT_FPR0 + 12, PT_FPR0 + 14,
331 1.1 christos PT_FPR0 + 16, PT_FPR0 + 18, PT_FPR0 + 20, PT_FPR0 + 22,
332 1.1 christos PT_FPR0 + 24, PT_FPR0 + 26, PT_FPR0 + 28, PT_FPR0 + 30,
333 1.1 christos PT_FPR0 + 32, PT_FPR0 + 34, PT_FPR0 + 36, PT_FPR0 + 38,
334 1.1 christos PT_FPR0 + 40, PT_FPR0 + 42, PT_FPR0 + 44, PT_FPR0 + 46,
335 1.1 christos PT_FPR0 + 48, PT_FPR0 + 50, PT_FPR0 + 52, PT_FPR0 + 54,
336 1.1 christos PT_FPR0 + 56, PT_FPR0 + 58, PT_FPR0 + 60, PT_FPR0 + 62,
337 1.1 christos PT_NIP, PT_MSR, PT_CCR, PT_LNK, PT_CTR, PT_XER, PT_MQ */
338 1.1 christos /* *INDENT_ON * */
339 1.1 christos
340 1.1 christos static int
341 1.1 christos ppc_register_u_addr (struct gdbarch *gdbarch, int regno)
342 1.1 christos {
343 1.1 christos int u_addr = -1;
344 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
345 1.1 christos /* NOTE: cagney/2003-11-25: This is the word size used by the ptrace
346 1.1 christos interface, and not the wordsize of the program's ABI. */
347 1.1 christos int wordsize = sizeof (long);
348 1.1 christos
349 1.1 christos /* General purpose registers occupy 1 slot each in the buffer. */
350 1.1 christos if (regno >= tdep->ppc_gp0_regnum
351 1.1 christos && regno < tdep->ppc_gp0_regnum + ppc_num_gprs)
352 1.1 christos u_addr = ((regno - tdep->ppc_gp0_regnum + PT_R0) * wordsize);
353 1.1 christos
354 1.1 christos /* Floating point regs: eight bytes each in both 32- and 64-bit
355 1.1 christos ptrace interfaces. Thus, two slots each in 32-bit interface, one
356 1.1 christos slot each in 64-bit interface. */
357 1.1 christos if (tdep->ppc_fp0_regnum >= 0
358 1.1 christos && regno >= tdep->ppc_fp0_regnum
359 1.1 christos && regno < tdep->ppc_fp0_regnum + ppc_num_fprs)
360 1.1 christos u_addr = (PT_FPR0 * wordsize) + ((regno - tdep->ppc_fp0_regnum) * 8);
361 1.1 christos
362 1.1 christos /* UISA special purpose registers: 1 slot each. */
363 1.1 christos if (regno == gdbarch_pc_regnum (gdbarch))
364 1.1 christos u_addr = PT_NIP * wordsize;
365 1.1 christos if (regno == tdep->ppc_lr_regnum)
366 1.1 christos u_addr = PT_LNK * wordsize;
367 1.1 christos if (regno == tdep->ppc_cr_regnum)
368 1.1 christos u_addr = PT_CCR * wordsize;
369 1.1 christos if (regno == tdep->ppc_xer_regnum)
370 1.1 christos u_addr = PT_XER * wordsize;
371 1.1 christos if (regno == tdep->ppc_ctr_regnum)
372 1.1 christos u_addr = PT_CTR * wordsize;
373 1.1 christos #ifdef PT_MQ
374 1.1 christos if (regno == tdep->ppc_mq_regnum)
375 1.1 christos u_addr = PT_MQ * wordsize;
376 1.1 christos #endif
377 1.1 christos if (regno == tdep->ppc_ps_regnum)
378 1.1 christos u_addr = PT_MSR * wordsize;
379 1.1 christos if (regno == PPC_ORIG_R3_REGNUM)
380 1.1 christos u_addr = PT_ORIG_R3 * wordsize;
381 1.1 christos if (regno == PPC_TRAP_REGNUM)
382 1.1 christos u_addr = PT_TRAP * wordsize;
383 1.1 christos if (tdep->ppc_fpscr_regnum >= 0
384 1.1 christos && regno == tdep->ppc_fpscr_regnum)
385 1.1 christos {
386 1.1 christos /* NOTE: cagney/2005-02-08: On some 64-bit GNU/Linux systems the
387 1.1 christos kernel headers incorrectly contained the 32-bit definition of
388 1.1 christos PT_FPSCR. For the 32-bit definition, floating-point
389 1.1 christos registers occupy two 32-bit "slots", and the FPSCR lives in
390 1.1 christos the second half of such a slot-pair (hence +1). For 64-bit,
391 1.1 christos the FPSCR instead occupies the full 64-bit 2-word-slot and
392 1.1 christos hence no adjustment is necessary. Hack around this. */
393 1.1 christos if (wordsize == 8 && PT_FPSCR == (48 + 32 + 1))
394 1.1 christos u_addr = (48 + 32) * wordsize;
395 1.1 christos /* If the FPSCR is 64-bit wide, we need to fetch the whole 64-bit
396 1.1 christos slot and not just its second word. The PT_FPSCR supplied when
397 1.1 christos GDB is compiled as a 32-bit app doesn't reflect this. */
398 1.1 christos else if (wordsize == 4 && register_size (gdbarch, regno) == 8
399 1.1 christos && PT_FPSCR == (48 + 2*32 + 1))
400 1.1 christos u_addr = (48 + 2*32) * wordsize;
401 1.1 christos else
402 1.1 christos u_addr = PT_FPSCR * wordsize;
403 1.1 christos }
404 1.1 christos return u_addr;
405 1.1 christos }
406 1.1 christos
407 1.1 christos /* The Linux kernel ptrace interface for POWER7 VSX registers uses the
408 1.1 christos registers set mechanism, as opposed to the interface for all the
409 1.1 christos other registers, that stores/fetches each register individually. */
410 1.1 christos static void
411 1.1 christos fetch_vsx_register (struct regcache *regcache, int tid, int regno)
412 1.1 christos {
413 1.1 christos int ret;
414 1.1 christos gdb_vsxregset_t regs;
415 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
416 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
417 1.1 christos int vsxregsize = register_size (gdbarch, tdep->ppc_vsr0_upper_regnum);
418 1.1 christos
419 1.1 christos ret = ptrace (PTRACE_GETVSXREGS, tid, 0, ®s);
420 1.1 christos if (ret < 0)
421 1.1 christos {
422 1.1 christos if (errno == EIO)
423 1.1 christos {
424 1.1 christos have_ptrace_getsetvsxregs = 0;
425 1.1 christos return;
426 1.1 christos }
427 1.1 christos perror_with_name (_("Unable to fetch VSX register"));
428 1.1 christos }
429 1.1 christos
430 1.1 christos regcache_raw_supply (regcache, regno,
431 1.1 christos regs + (regno - tdep->ppc_vsr0_upper_regnum)
432 1.1 christos * vsxregsize);
433 1.1 christos }
434 1.1 christos
435 1.1 christos /* The Linux kernel ptrace interface for AltiVec registers uses the
436 1.1 christos registers set mechanism, as opposed to the interface for all the
437 1.1 christos other registers, that stores/fetches each register individually. */
438 1.1 christos static void
439 1.1 christos fetch_altivec_register (struct regcache *regcache, int tid, int regno)
440 1.1 christos {
441 1.1 christos int ret;
442 1.1 christos int offset = 0;
443 1.1 christos gdb_vrregset_t regs;
444 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
445 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
446 1.1 christos int vrregsize = register_size (gdbarch, tdep->ppc_vr0_regnum);
447 1.1 christos
448 1.1 christos ret = ptrace (PTRACE_GETVRREGS, tid, 0, ®s);
449 1.1 christos if (ret < 0)
450 1.1 christos {
451 1.1 christos if (errno == EIO)
452 1.1 christos {
453 1.1 christos have_ptrace_getvrregs = 0;
454 1.1 christos return;
455 1.1 christos }
456 1.1 christos perror_with_name (_("Unable to fetch AltiVec register"));
457 1.1 christos }
458 1.1 christos
459 1.1 christos /* VSCR is fetched as a 16 bytes quantity, but it is really 4 bytes
460 1.1 christos long on the hardware. We deal only with the lower 4 bytes of the
461 1.1 christos vector. VRSAVE is at the end of the array in a 4 bytes slot, so
462 1.1 christos there is no need to define an offset for it. */
463 1.1 christos if (regno == (tdep->ppc_vrsave_regnum - 1))
464 1.1 christos offset = vrregsize - register_size (gdbarch, tdep->ppc_vrsave_regnum);
465 1.1 christos
466 1.1 christos regcache_raw_supply (regcache, regno,
467 1.1 christos regs + (regno
468 1.1 christos - tdep->ppc_vr0_regnum) * vrregsize + offset);
469 1.1 christos }
470 1.1 christos
471 1.1 christos /* Fetch the top 32 bits of TID's general-purpose registers and the
472 1.1 christos SPE-specific registers, and place the results in EVRREGSET. If we
473 1.1 christos don't support PTRACE_GETEVRREGS, then just fill EVRREGSET with
474 1.1 christos zeros.
475 1.1 christos
476 1.1 christos All the logic to deal with whether or not the PTRACE_GETEVRREGS and
477 1.1 christos PTRACE_SETEVRREGS requests are supported is isolated here, and in
478 1.1 christos set_spe_registers. */
479 1.1 christos static void
480 1.1 christos get_spe_registers (int tid, struct gdb_evrregset_t *evrregset)
481 1.1 christos {
482 1.1 christos if (have_ptrace_getsetevrregs)
483 1.1 christos {
484 1.1 christos if (ptrace (PTRACE_GETEVRREGS, tid, 0, evrregset) >= 0)
485 1.1 christos return;
486 1.1 christos else
487 1.1 christos {
488 1.1 christos /* EIO means that the PTRACE_GETEVRREGS request isn't supported;
489 1.1 christos we just return zeros. */
490 1.1 christos if (errno == EIO)
491 1.1 christos have_ptrace_getsetevrregs = 0;
492 1.1 christos else
493 1.1 christos /* Anything else needs to be reported. */
494 1.1 christos perror_with_name (_("Unable to fetch SPE registers"));
495 1.1 christos }
496 1.1 christos }
497 1.1 christos
498 1.1 christos memset (evrregset, 0, sizeof (*evrregset));
499 1.1 christos }
500 1.1 christos
501 1.1 christos /* Supply values from TID for SPE-specific raw registers: the upper
502 1.1 christos halves of the GPRs, the accumulator, and the spefscr. REGNO must
503 1.1 christos be the number of an upper half register, acc, spefscr, or -1 to
504 1.1 christos supply the values of all registers. */
505 1.1 christos static void
506 1.1 christos fetch_spe_register (struct regcache *regcache, int tid, int regno)
507 1.1 christos {
508 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
509 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
510 1.1 christos struct gdb_evrregset_t evrregs;
511 1.1 christos
512 1.1 christos gdb_assert (sizeof (evrregs.evr[0])
513 1.1 christos == register_size (gdbarch, tdep->ppc_ev0_upper_regnum));
514 1.1 christos gdb_assert (sizeof (evrregs.acc)
515 1.1 christos == register_size (gdbarch, tdep->ppc_acc_regnum));
516 1.1 christos gdb_assert (sizeof (evrregs.spefscr)
517 1.1 christos == register_size (gdbarch, tdep->ppc_spefscr_regnum));
518 1.1 christos
519 1.1 christos get_spe_registers (tid, &evrregs);
520 1.1 christos
521 1.1 christos if (regno == -1)
522 1.1 christos {
523 1.1 christos int i;
524 1.1 christos
525 1.1 christos for (i = 0; i < ppc_num_gprs; i++)
526 1.1 christos regcache_raw_supply (regcache, tdep->ppc_ev0_upper_regnum + i,
527 1.1 christos &evrregs.evr[i]);
528 1.1 christos }
529 1.1 christos else if (tdep->ppc_ev0_upper_regnum <= regno
530 1.1 christos && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
531 1.1 christos regcache_raw_supply (regcache, regno,
532 1.1 christos &evrregs.evr[regno - tdep->ppc_ev0_upper_regnum]);
533 1.1 christos
534 1.1 christos if (regno == -1
535 1.1 christos || regno == tdep->ppc_acc_regnum)
536 1.1 christos regcache_raw_supply (regcache, tdep->ppc_acc_regnum, &evrregs.acc);
537 1.1 christos
538 1.1 christos if (regno == -1
539 1.1 christos || regno == tdep->ppc_spefscr_regnum)
540 1.1 christos regcache_raw_supply (regcache, tdep->ppc_spefscr_regnum,
541 1.1 christos &evrregs.spefscr);
542 1.1 christos }
543 1.1 christos
544 1.1 christos static void
545 1.1 christos fetch_register (struct regcache *regcache, int tid, int regno)
546 1.1 christos {
547 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
548 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
549 1.1 christos /* This isn't really an address. But ptrace thinks of it as one. */
550 1.1 christos CORE_ADDR regaddr = ppc_register_u_addr (gdbarch, regno);
551 1.1 christos int bytes_transferred;
552 1.1 christos unsigned int offset; /* Offset of registers within the u area. */
553 1.1 christos gdb_byte buf[MAX_REGISTER_SIZE];
554 1.1 christos
555 1.1 christos if (altivec_register_p (gdbarch, regno))
556 1.1 christos {
557 1.1 christos /* If this is the first time through, or if it is not the first
558 1.1 christos time through, and we have comfirmed that there is kernel
559 1.1 christos support for such a ptrace request, then go and fetch the
560 1.1 christos register. */
561 1.1 christos if (have_ptrace_getvrregs)
562 1.1 christos {
563 1.1 christos fetch_altivec_register (regcache, tid, regno);
564 1.1 christos return;
565 1.1 christos }
566 1.1 christos /* If we have discovered that there is no ptrace support for
567 1.1 christos AltiVec registers, fall through and return zeroes, because
568 1.1 christos regaddr will be -1 in this case. */
569 1.1 christos }
570 1.1 christos if (vsx_register_p (gdbarch, regno))
571 1.1 christos {
572 1.1 christos if (have_ptrace_getsetvsxregs)
573 1.1 christos {
574 1.1 christos fetch_vsx_register (regcache, tid, regno);
575 1.1 christos return;
576 1.1 christos }
577 1.1 christos }
578 1.1 christos else if (spe_register_p (gdbarch, regno))
579 1.1 christos {
580 1.1 christos fetch_spe_register (regcache, tid, regno);
581 1.1 christos return;
582 1.1 christos }
583 1.1 christos
584 1.1 christos if (regaddr == -1)
585 1.1 christos {
586 1.1 christos memset (buf, '\0', register_size (gdbarch, regno)); /* Supply zeroes */
587 1.1 christos regcache_raw_supply (regcache, regno, buf);
588 1.1 christos return;
589 1.1 christos }
590 1.1 christos
591 1.1 christos /* Read the raw register using sizeof(long) sized chunks. On a
592 1.1 christos 32-bit platform, 64-bit floating-point registers will require two
593 1.1 christos transfers. */
594 1.1 christos for (bytes_transferred = 0;
595 1.1 christos bytes_transferred < register_size (gdbarch, regno);
596 1.1 christos bytes_transferred += sizeof (long))
597 1.1 christos {
598 1.1 christos long l;
599 1.1 christos
600 1.1 christos errno = 0;
601 1.1 christos l = ptrace (PTRACE_PEEKUSER, tid, (PTRACE_TYPE_ARG3) regaddr, 0);
602 1.1 christos regaddr += sizeof (long);
603 1.1 christos if (errno != 0)
604 1.1 christos {
605 1.1 christos char message[128];
606 1.1 christos xsnprintf (message, sizeof (message), "reading register %s (#%d)",
607 1.1 christos gdbarch_register_name (gdbarch, regno), regno);
608 1.1 christos perror_with_name (message);
609 1.1 christos }
610 1.1 christos memcpy (&buf[bytes_transferred], &l, sizeof (l));
611 1.1 christos }
612 1.1 christos
613 1.1 christos /* Now supply the register. Keep in mind that the regcache's idea
614 1.1 christos of the register's size may not be a multiple of sizeof
615 1.1 christos (long). */
616 1.1 christos if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
617 1.1 christos {
618 1.1 christos /* Little-endian values are always found at the left end of the
619 1.1 christos bytes transferred. */
620 1.1 christos regcache_raw_supply (regcache, regno, buf);
621 1.1 christos }
622 1.1 christos else if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
623 1.1 christos {
624 1.1 christos /* Big-endian values are found at the right end of the bytes
625 1.1 christos transferred. */
626 1.1 christos size_t padding = (bytes_transferred - register_size (gdbarch, regno));
627 1.1 christos regcache_raw_supply (regcache, regno, buf + padding);
628 1.1 christos }
629 1.1 christos else
630 1.1 christos internal_error (__FILE__, __LINE__,
631 1.1 christos _("fetch_register: unexpected byte order: %d"),
632 1.1 christos gdbarch_byte_order (gdbarch));
633 1.1 christos }
634 1.1 christos
635 1.1 christos static void
636 1.1 christos supply_vsxregset (struct regcache *regcache, gdb_vsxregset_t *vsxregsetp)
637 1.1 christos {
638 1.1 christos int i;
639 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
640 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
641 1.1 christos int vsxregsize = register_size (gdbarch, tdep->ppc_vsr0_upper_regnum);
642 1.1 christos
643 1.1 christos for (i = 0; i < ppc_num_vshrs; i++)
644 1.1 christos {
645 1.1 christos regcache_raw_supply (regcache, tdep->ppc_vsr0_upper_regnum + i,
646 1.1 christos *vsxregsetp + i * vsxregsize);
647 1.1 christos }
648 1.1 christos }
649 1.1 christos
650 1.1 christos static void
651 1.1 christos supply_vrregset (struct regcache *regcache, gdb_vrregset_t *vrregsetp)
652 1.1 christos {
653 1.1 christos int i;
654 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
655 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
656 1.1 christos int num_of_vrregs = tdep->ppc_vrsave_regnum - tdep->ppc_vr0_regnum + 1;
657 1.1 christos int vrregsize = register_size (gdbarch, tdep->ppc_vr0_regnum);
658 1.1 christos int offset = vrregsize - register_size (gdbarch, tdep->ppc_vrsave_regnum);
659 1.1 christos
660 1.1 christos for (i = 0; i < num_of_vrregs; i++)
661 1.1 christos {
662 1.1 christos /* The last 2 registers of this set are only 32 bit long, not
663 1.1 christos 128. However an offset is necessary only for VSCR because it
664 1.1 christos occupies a whole vector, while VRSAVE occupies a full 4 bytes
665 1.1 christos slot. */
666 1.1 christos if (i == (num_of_vrregs - 2))
667 1.1 christos regcache_raw_supply (regcache, tdep->ppc_vr0_regnum + i,
668 1.1 christos *vrregsetp + i * vrregsize + offset);
669 1.1 christos else
670 1.1 christos regcache_raw_supply (regcache, tdep->ppc_vr0_regnum + i,
671 1.1 christos *vrregsetp + i * vrregsize);
672 1.1 christos }
673 1.1 christos }
674 1.1 christos
675 1.1 christos static void
676 1.1 christos fetch_vsx_registers (struct regcache *regcache, int tid)
677 1.1 christos {
678 1.1 christos int ret;
679 1.1 christos gdb_vsxregset_t regs;
680 1.1 christos
681 1.1 christos ret = ptrace (PTRACE_GETVSXREGS, tid, 0, ®s);
682 1.1 christos if (ret < 0)
683 1.1 christos {
684 1.1 christos if (errno == EIO)
685 1.1 christos {
686 1.1 christos have_ptrace_getsetvsxregs = 0;
687 1.1 christos return;
688 1.1 christos }
689 1.1 christos perror_with_name (_("Unable to fetch VSX registers"));
690 1.1 christos }
691 1.1 christos supply_vsxregset (regcache, ®s);
692 1.1 christos }
693 1.1 christos
694 1.1 christos static void
695 1.1 christos fetch_altivec_registers (struct regcache *regcache, int tid)
696 1.1 christos {
697 1.1 christos int ret;
698 1.1 christos gdb_vrregset_t regs;
699 1.1 christos
700 1.1 christos ret = ptrace (PTRACE_GETVRREGS, tid, 0, ®s);
701 1.1 christos if (ret < 0)
702 1.1 christos {
703 1.1 christos if (errno == EIO)
704 1.1 christos {
705 1.1 christos have_ptrace_getvrregs = 0;
706 1.1 christos return;
707 1.1 christos }
708 1.1 christos perror_with_name (_("Unable to fetch AltiVec registers"));
709 1.1 christos }
710 1.1 christos supply_vrregset (regcache, ®s);
711 1.1 christos }
712 1.1 christos
713 1.1 christos /* This function actually issues the request to ptrace, telling
714 1.1 christos it to get all general-purpose registers and put them into the
715 1.1 christos specified regset.
716 1.1 christos
717 1.1 christos If the ptrace request does not exist, this function returns 0
718 1.1 christos and properly sets the have_ptrace_* flag. If the request fails,
719 1.1 christos this function calls perror_with_name. Otherwise, if the request
720 1.1 christos succeeds, then the regcache gets filled and 1 is returned. */
721 1.1 christos static int
722 1.1 christos fetch_all_gp_regs (struct regcache *regcache, int tid)
723 1.1 christos {
724 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
725 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
726 1.1 christos gdb_gregset_t gregset;
727 1.1 christos
728 1.1 christos if (ptrace (PTRACE_GETREGS, tid, 0, (void *) &gregset) < 0)
729 1.1 christos {
730 1.1 christos if (errno == EIO)
731 1.1 christos {
732 1.1 christos have_ptrace_getsetregs = 0;
733 1.1 christos return 0;
734 1.1 christos }
735 1.1 christos perror_with_name (_("Couldn't get general-purpose registers."));
736 1.1 christos }
737 1.1 christos
738 1.1 christos supply_gregset (regcache, (const gdb_gregset_t *) &gregset);
739 1.1 christos
740 1.1 christos return 1;
741 1.1 christos }
742 1.1 christos
743 1.1 christos /* This is a wrapper for the fetch_all_gp_regs function. It is
744 1.1 christos responsible for verifying if this target has the ptrace request
745 1.1 christos that can be used to fetch all general-purpose registers at one
746 1.1 christos shot. If it doesn't, then we should fetch them using the
747 1.1 christos old-fashioned way, which is to iterate over the registers and
748 1.1 christos request them one by one. */
749 1.1 christos static void
750 1.1 christos fetch_gp_regs (struct regcache *regcache, int tid)
751 1.1 christos {
752 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
753 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
754 1.1 christos int i;
755 1.1 christos
756 1.1 christos if (have_ptrace_getsetregs)
757 1.1 christos if (fetch_all_gp_regs (regcache, tid))
758 1.1 christos return;
759 1.1 christos
760 1.1 christos /* If we've hit this point, it doesn't really matter which
761 1.1 christos architecture we are using. We just need to read the
762 1.1 christos registers in the "old-fashioned way". */
763 1.1 christos for (i = 0; i < ppc_num_gprs; i++)
764 1.1 christos fetch_register (regcache, tid, tdep->ppc_gp0_regnum + i);
765 1.1 christos }
766 1.1 christos
767 1.1 christos /* This function actually issues the request to ptrace, telling
768 1.1 christos it to get all floating-point registers and put them into the
769 1.1 christos specified regset.
770 1.1 christos
771 1.1 christos If the ptrace request does not exist, this function returns 0
772 1.1 christos and properly sets the have_ptrace_* flag. If the request fails,
773 1.1 christos this function calls perror_with_name. Otherwise, if the request
774 1.1 christos succeeds, then the regcache gets filled and 1 is returned. */
775 1.1 christos static int
776 1.1 christos fetch_all_fp_regs (struct regcache *regcache, int tid)
777 1.1 christos {
778 1.1 christos gdb_fpregset_t fpregs;
779 1.1 christos
780 1.1 christos if (ptrace (PTRACE_GETFPREGS, tid, 0, (void *) &fpregs) < 0)
781 1.1 christos {
782 1.1 christos if (errno == EIO)
783 1.1 christos {
784 1.1 christos have_ptrace_getsetfpregs = 0;
785 1.1 christos return 0;
786 1.1 christos }
787 1.1 christos perror_with_name (_("Couldn't get floating-point registers."));
788 1.1 christos }
789 1.1 christos
790 1.1 christos supply_fpregset (regcache, (const gdb_fpregset_t *) &fpregs);
791 1.1 christos
792 1.1 christos return 1;
793 1.1 christos }
794 1.1 christos
795 1.1 christos /* This is a wrapper for the fetch_all_fp_regs function. It is
796 1.1 christos responsible for verifying if this target has the ptrace request
797 1.1 christos that can be used to fetch all floating-point registers at one
798 1.1 christos shot. If it doesn't, then we should fetch them using the
799 1.1 christos old-fashioned way, which is to iterate over the registers and
800 1.1 christos request them one by one. */
801 1.1 christos static void
802 1.1 christos fetch_fp_regs (struct regcache *regcache, int tid)
803 1.1 christos {
804 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
805 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
806 1.1 christos int i;
807 1.1 christos
808 1.1 christos if (have_ptrace_getsetfpregs)
809 1.1 christos if (fetch_all_fp_regs (regcache, tid))
810 1.1 christos return;
811 1.1 christos
812 1.1 christos /* If we've hit this point, it doesn't really matter which
813 1.1 christos architecture we are using. We just need to read the
814 1.1 christos registers in the "old-fashioned way". */
815 1.1 christos for (i = 0; i < ppc_num_fprs; i++)
816 1.1 christos fetch_register (regcache, tid, tdep->ppc_fp0_regnum + i);
817 1.1 christos }
818 1.1 christos
819 1.1 christos static void
820 1.1 christos fetch_ppc_registers (struct regcache *regcache, int tid)
821 1.1 christos {
822 1.1 christos int i;
823 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
824 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
825 1.1 christos
826 1.1 christos fetch_gp_regs (regcache, tid);
827 1.1 christos if (tdep->ppc_fp0_regnum >= 0)
828 1.1 christos fetch_fp_regs (regcache, tid);
829 1.1 christos fetch_register (regcache, tid, gdbarch_pc_regnum (gdbarch));
830 1.1 christos if (tdep->ppc_ps_regnum != -1)
831 1.1 christos fetch_register (regcache, tid, tdep->ppc_ps_regnum);
832 1.1 christos if (tdep->ppc_cr_regnum != -1)
833 1.1 christos fetch_register (regcache, tid, tdep->ppc_cr_regnum);
834 1.1 christos if (tdep->ppc_lr_regnum != -1)
835 1.1 christos fetch_register (regcache, tid, tdep->ppc_lr_regnum);
836 1.1 christos if (tdep->ppc_ctr_regnum != -1)
837 1.1 christos fetch_register (regcache, tid, tdep->ppc_ctr_regnum);
838 1.1 christos if (tdep->ppc_xer_regnum != -1)
839 1.1 christos fetch_register (regcache, tid, tdep->ppc_xer_regnum);
840 1.1 christos if (tdep->ppc_mq_regnum != -1)
841 1.1 christos fetch_register (regcache, tid, tdep->ppc_mq_regnum);
842 1.1 christos if (ppc_linux_trap_reg_p (gdbarch))
843 1.1 christos {
844 1.1 christos fetch_register (regcache, tid, PPC_ORIG_R3_REGNUM);
845 1.1 christos fetch_register (regcache, tid, PPC_TRAP_REGNUM);
846 1.1 christos }
847 1.1 christos if (tdep->ppc_fpscr_regnum != -1)
848 1.1 christos fetch_register (regcache, tid, tdep->ppc_fpscr_regnum);
849 1.1 christos if (have_ptrace_getvrregs)
850 1.1 christos if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
851 1.1 christos fetch_altivec_registers (regcache, tid);
852 1.1 christos if (have_ptrace_getsetvsxregs)
853 1.1 christos if (tdep->ppc_vsr0_upper_regnum != -1)
854 1.1 christos fetch_vsx_registers (regcache, tid);
855 1.1 christos if (tdep->ppc_ev0_upper_regnum >= 0)
856 1.1 christos fetch_spe_register (regcache, tid, -1);
857 1.1 christos }
858 1.1 christos
859 1.1 christos /* Fetch registers from the child process. Fetch all registers if
860 1.1 christos regno == -1, otherwise fetch all general registers or all floating
861 1.1 christos point registers depending upon the value of regno. */
862 1.1 christos static void
863 1.1 christos ppc_linux_fetch_inferior_registers (struct target_ops *ops,
864 1.1 christos struct regcache *regcache, int regno)
865 1.1 christos {
866 1.1 christos /* Overload thread id onto process id. */
867 1.1 christos int tid = ptid_get_lwp (inferior_ptid);
868 1.1 christos
869 1.1 christos /* No thread id, just use process id. */
870 1.1 christos if (tid == 0)
871 1.1 christos tid = ptid_get_pid (inferior_ptid);
872 1.1 christos
873 1.1 christos if (regno == -1)
874 1.1 christos fetch_ppc_registers (regcache, tid);
875 1.1 christos else
876 1.1 christos fetch_register (regcache, tid, regno);
877 1.1 christos }
878 1.1 christos
879 1.1 christos /* Store one VSX register. */
880 1.1 christos static void
881 1.1 christos store_vsx_register (const struct regcache *regcache, int tid, int regno)
882 1.1 christos {
883 1.1 christos int ret;
884 1.1 christos gdb_vsxregset_t regs;
885 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
886 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
887 1.1 christos int vsxregsize = register_size (gdbarch, tdep->ppc_vsr0_upper_regnum);
888 1.1 christos
889 1.1 christos ret = ptrace (PTRACE_GETVSXREGS, tid, 0, ®s);
890 1.1 christos if (ret < 0)
891 1.1 christos {
892 1.1 christos if (errno == EIO)
893 1.1 christos {
894 1.1 christos have_ptrace_getsetvsxregs = 0;
895 1.1 christos return;
896 1.1 christos }
897 1.1 christos perror_with_name (_("Unable to fetch VSX register"));
898 1.1 christos }
899 1.1 christos
900 1.1 christos regcache_raw_collect (regcache, regno, regs +
901 1.1 christos (regno - tdep->ppc_vsr0_upper_regnum) * vsxregsize);
902 1.1 christos
903 1.1 christos ret = ptrace (PTRACE_SETVSXREGS, tid, 0, ®s);
904 1.1 christos if (ret < 0)
905 1.1 christos perror_with_name (_("Unable to store VSX register"));
906 1.1 christos }
907 1.1 christos
908 1.1 christos /* Store one register. */
909 1.1 christos static void
910 1.1 christos store_altivec_register (const struct regcache *regcache, int tid, int regno)
911 1.1 christos {
912 1.1 christos int ret;
913 1.1 christos int offset = 0;
914 1.1 christos gdb_vrregset_t regs;
915 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
916 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
917 1.1 christos int vrregsize = register_size (gdbarch, tdep->ppc_vr0_regnum);
918 1.1 christos
919 1.1 christos ret = ptrace (PTRACE_GETVRREGS, tid, 0, ®s);
920 1.1 christos if (ret < 0)
921 1.1 christos {
922 1.1 christos if (errno == EIO)
923 1.1 christos {
924 1.1 christos have_ptrace_getvrregs = 0;
925 1.1 christos return;
926 1.1 christos }
927 1.1 christos perror_with_name (_("Unable to fetch AltiVec register"));
928 1.1 christos }
929 1.1 christos
930 1.1 christos /* VSCR is fetched as a 16 bytes quantity, but it is really 4 bytes
931 1.1 christos long on the hardware. */
932 1.1 christos if (regno == (tdep->ppc_vrsave_regnum - 1))
933 1.1 christos offset = vrregsize - register_size (gdbarch, tdep->ppc_vrsave_regnum);
934 1.1 christos
935 1.1 christos regcache_raw_collect (regcache, regno,
936 1.1 christos regs + (regno
937 1.1 christos - tdep->ppc_vr0_regnum) * vrregsize + offset);
938 1.1 christos
939 1.1 christos ret = ptrace (PTRACE_SETVRREGS, tid, 0, ®s);
940 1.1 christos if (ret < 0)
941 1.1 christos perror_with_name (_("Unable to store AltiVec register"));
942 1.1 christos }
943 1.1 christos
944 1.1 christos /* Assuming TID referrs to an SPE process, set the top halves of TID's
945 1.1 christos general-purpose registers and its SPE-specific registers to the
946 1.1 christos values in EVRREGSET. If we don't support PTRACE_SETEVRREGS, do
947 1.1 christos nothing.
948 1.1 christos
949 1.1 christos All the logic to deal with whether or not the PTRACE_GETEVRREGS and
950 1.1 christos PTRACE_SETEVRREGS requests are supported is isolated here, and in
951 1.1 christos get_spe_registers. */
952 1.1 christos static void
953 1.1 christos set_spe_registers (int tid, struct gdb_evrregset_t *evrregset)
954 1.1 christos {
955 1.1 christos if (have_ptrace_getsetevrregs)
956 1.1 christos {
957 1.1 christos if (ptrace (PTRACE_SETEVRREGS, tid, 0, evrregset) >= 0)
958 1.1 christos return;
959 1.1 christos else
960 1.1 christos {
961 1.1 christos /* EIO means that the PTRACE_SETEVRREGS request isn't
962 1.1 christos supported; we fail silently, and don't try the call
963 1.1 christos again. */
964 1.1 christos if (errno == EIO)
965 1.1 christos have_ptrace_getsetevrregs = 0;
966 1.1 christos else
967 1.1 christos /* Anything else needs to be reported. */
968 1.1 christos perror_with_name (_("Unable to set SPE registers"));
969 1.1 christos }
970 1.1 christos }
971 1.1 christos }
972 1.1 christos
973 1.1 christos /* Write GDB's value for the SPE-specific raw register REGNO to TID.
974 1.1 christos If REGNO is -1, write the values of all the SPE-specific
975 1.1 christos registers. */
976 1.1 christos static void
977 1.1 christos store_spe_register (const struct regcache *regcache, int tid, int regno)
978 1.1 christos {
979 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
980 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
981 1.1 christos struct gdb_evrregset_t evrregs;
982 1.1 christos
983 1.1 christos gdb_assert (sizeof (evrregs.evr[0])
984 1.1 christos == register_size (gdbarch, tdep->ppc_ev0_upper_regnum));
985 1.1 christos gdb_assert (sizeof (evrregs.acc)
986 1.1 christos == register_size (gdbarch, tdep->ppc_acc_regnum));
987 1.1 christos gdb_assert (sizeof (evrregs.spefscr)
988 1.1 christos == register_size (gdbarch, tdep->ppc_spefscr_regnum));
989 1.1 christos
990 1.1 christos if (regno == -1)
991 1.1 christos /* Since we're going to write out every register, the code below
992 1.1 christos should store to every field of evrregs; if that doesn't happen,
993 1.1 christos make it obvious by initializing it with suspicious values. */
994 1.1 christos memset (&evrregs, 42, sizeof (evrregs));
995 1.1 christos else
996 1.1 christos /* We can only read and write the entire EVR register set at a
997 1.1 christos time, so to write just a single register, we do a
998 1.1 christos read-modify-write maneuver. */
999 1.1 christos get_spe_registers (tid, &evrregs);
1000 1.1 christos
1001 1.1 christos if (regno == -1)
1002 1.1 christos {
1003 1.1 christos int i;
1004 1.1 christos
1005 1.1 christos for (i = 0; i < ppc_num_gprs; i++)
1006 1.1 christos regcache_raw_collect (regcache,
1007 1.1 christos tdep->ppc_ev0_upper_regnum + i,
1008 1.1 christos &evrregs.evr[i]);
1009 1.1 christos }
1010 1.1 christos else if (tdep->ppc_ev0_upper_regnum <= regno
1011 1.1 christos && regno < tdep->ppc_ev0_upper_regnum + ppc_num_gprs)
1012 1.1 christos regcache_raw_collect (regcache, regno,
1013 1.1 christos &evrregs.evr[regno - tdep->ppc_ev0_upper_regnum]);
1014 1.1 christos
1015 1.1 christos if (regno == -1
1016 1.1 christos || regno == tdep->ppc_acc_regnum)
1017 1.1 christos regcache_raw_collect (regcache,
1018 1.1 christos tdep->ppc_acc_regnum,
1019 1.1 christos &evrregs.acc);
1020 1.1 christos
1021 1.1 christos if (regno == -1
1022 1.1 christos || regno == tdep->ppc_spefscr_regnum)
1023 1.1 christos regcache_raw_collect (regcache,
1024 1.1 christos tdep->ppc_spefscr_regnum,
1025 1.1 christos &evrregs.spefscr);
1026 1.1 christos
1027 1.1 christos /* Write back the modified register set. */
1028 1.1 christos set_spe_registers (tid, &evrregs);
1029 1.1 christos }
1030 1.1 christos
1031 1.1 christos static void
1032 1.1 christos store_register (const struct regcache *regcache, int tid, int regno)
1033 1.1 christos {
1034 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1035 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1036 1.1 christos /* This isn't really an address. But ptrace thinks of it as one. */
1037 1.1 christos CORE_ADDR regaddr = ppc_register_u_addr (gdbarch, regno);
1038 1.1 christos int i;
1039 1.1 christos size_t bytes_to_transfer;
1040 1.1 christos gdb_byte buf[MAX_REGISTER_SIZE];
1041 1.1 christos
1042 1.1 christos if (altivec_register_p (gdbarch, regno))
1043 1.1 christos {
1044 1.1 christos store_altivec_register (regcache, tid, regno);
1045 1.1 christos return;
1046 1.1 christos }
1047 1.1 christos if (vsx_register_p (gdbarch, regno))
1048 1.1 christos {
1049 1.1 christos store_vsx_register (regcache, tid, regno);
1050 1.1 christos return;
1051 1.1 christos }
1052 1.1 christos else if (spe_register_p (gdbarch, regno))
1053 1.1 christos {
1054 1.1 christos store_spe_register (regcache, tid, regno);
1055 1.1 christos return;
1056 1.1 christos }
1057 1.1 christos
1058 1.1 christos if (regaddr == -1)
1059 1.1 christos return;
1060 1.1 christos
1061 1.1 christos /* First collect the register. Keep in mind that the regcache's
1062 1.1 christos idea of the register's size may not be a multiple of sizeof
1063 1.1 christos (long). */
1064 1.1 christos memset (buf, 0, sizeof buf);
1065 1.1 christos bytes_to_transfer = align_up (register_size (gdbarch, regno), sizeof (long));
1066 1.1 christos if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
1067 1.1 christos {
1068 1.1 christos /* Little-endian values always sit at the left end of the buffer. */
1069 1.1 christos regcache_raw_collect (regcache, regno, buf);
1070 1.1 christos }
1071 1.1 christos else if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1072 1.1 christos {
1073 1.1 christos /* Big-endian values sit at the right end of the buffer. */
1074 1.1 christos size_t padding = (bytes_to_transfer - register_size (gdbarch, regno));
1075 1.1 christos regcache_raw_collect (regcache, regno, buf + padding);
1076 1.1 christos }
1077 1.1 christos
1078 1.1 christos for (i = 0; i < bytes_to_transfer; i += sizeof (long))
1079 1.1 christos {
1080 1.1 christos long l;
1081 1.1 christos
1082 1.1 christos memcpy (&l, &buf[i], sizeof (l));
1083 1.1 christos errno = 0;
1084 1.1 christos ptrace (PTRACE_POKEUSER, tid, (PTRACE_TYPE_ARG3) regaddr, l);
1085 1.1 christos regaddr += sizeof (long);
1086 1.1 christos
1087 1.1 christos if (errno == EIO
1088 1.1 christos && (regno == tdep->ppc_fpscr_regnum
1089 1.1 christos || regno == PPC_ORIG_R3_REGNUM
1090 1.1 christos || regno == PPC_TRAP_REGNUM))
1091 1.1 christos {
1092 1.1 christos /* Some older kernel versions don't allow fpscr, orig_r3
1093 1.1 christos or trap to be written. */
1094 1.1 christos continue;
1095 1.1 christos }
1096 1.1 christos
1097 1.1 christos if (errno != 0)
1098 1.1 christos {
1099 1.1 christos char message[128];
1100 1.1 christos xsnprintf (message, sizeof (message), "writing register %s (#%d)",
1101 1.1 christos gdbarch_register_name (gdbarch, regno), regno);
1102 1.1 christos perror_with_name (message);
1103 1.1 christos }
1104 1.1 christos }
1105 1.1 christos }
1106 1.1 christos
1107 1.1 christos static void
1108 1.1 christos fill_vsxregset (const struct regcache *regcache, gdb_vsxregset_t *vsxregsetp)
1109 1.1 christos {
1110 1.1 christos int i;
1111 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1112 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1113 1.1 christos int vsxregsize = register_size (gdbarch, tdep->ppc_vsr0_upper_regnum);
1114 1.1 christos
1115 1.1 christos for (i = 0; i < ppc_num_vshrs; i++)
1116 1.1 christos regcache_raw_collect (regcache, tdep->ppc_vsr0_upper_regnum + i,
1117 1.1 christos *vsxregsetp + i * vsxregsize);
1118 1.1 christos }
1119 1.1 christos
1120 1.1 christos static void
1121 1.1 christos fill_vrregset (const struct regcache *regcache, gdb_vrregset_t *vrregsetp)
1122 1.1 christos {
1123 1.1 christos int i;
1124 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1125 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1126 1.1 christos int num_of_vrregs = tdep->ppc_vrsave_regnum - tdep->ppc_vr0_regnum + 1;
1127 1.1 christos int vrregsize = register_size (gdbarch, tdep->ppc_vr0_regnum);
1128 1.1 christos int offset = vrregsize - register_size (gdbarch, tdep->ppc_vrsave_regnum);
1129 1.1 christos
1130 1.1 christos for (i = 0; i < num_of_vrregs; i++)
1131 1.1 christos {
1132 1.1 christos /* The last 2 registers of this set are only 32 bit long, not
1133 1.1 christos 128, but only VSCR is fetched as a 16 bytes quantity. */
1134 1.1 christos if (i == (num_of_vrregs - 2))
1135 1.1 christos regcache_raw_collect (regcache, tdep->ppc_vr0_regnum + i,
1136 1.1 christos *vrregsetp + i * vrregsize + offset);
1137 1.1 christos else
1138 1.1 christos regcache_raw_collect (regcache, tdep->ppc_vr0_regnum + i,
1139 1.1 christos *vrregsetp + i * vrregsize);
1140 1.1 christos }
1141 1.1 christos }
1142 1.1 christos
1143 1.1 christos static void
1144 1.1 christos store_vsx_registers (const struct regcache *regcache, int tid)
1145 1.1 christos {
1146 1.1 christos int ret;
1147 1.1 christos gdb_vsxregset_t regs;
1148 1.1 christos
1149 1.1 christos ret = ptrace (PTRACE_GETVSXREGS, tid, 0, ®s);
1150 1.1 christos if (ret < 0)
1151 1.1 christos {
1152 1.1 christos if (errno == EIO)
1153 1.1 christos {
1154 1.1 christos have_ptrace_getsetvsxregs = 0;
1155 1.1 christos return;
1156 1.1 christos }
1157 1.1 christos perror_with_name (_("Couldn't get VSX registers"));
1158 1.1 christos }
1159 1.1 christos
1160 1.1 christos fill_vsxregset (regcache, ®s);
1161 1.1 christos
1162 1.1 christos if (ptrace (PTRACE_SETVSXREGS, tid, 0, ®s) < 0)
1163 1.1 christos perror_with_name (_("Couldn't write VSX registers"));
1164 1.1 christos }
1165 1.1 christos
1166 1.1 christos static void
1167 1.1 christos store_altivec_registers (const struct regcache *regcache, int tid)
1168 1.1 christos {
1169 1.1 christos int ret;
1170 1.1 christos gdb_vrregset_t regs;
1171 1.1 christos
1172 1.1 christos ret = ptrace (PTRACE_GETVRREGS, tid, 0, ®s);
1173 1.1 christos if (ret < 0)
1174 1.1 christos {
1175 1.1 christos if (errno == EIO)
1176 1.1 christos {
1177 1.1 christos have_ptrace_getvrregs = 0;
1178 1.1 christos return;
1179 1.1 christos }
1180 1.1 christos perror_with_name (_("Couldn't get AltiVec registers"));
1181 1.1 christos }
1182 1.1 christos
1183 1.1 christos fill_vrregset (regcache, ®s);
1184 1.1 christos
1185 1.1 christos if (ptrace (PTRACE_SETVRREGS, tid, 0, ®s) < 0)
1186 1.1 christos perror_with_name (_("Couldn't write AltiVec registers"));
1187 1.1 christos }
1188 1.1 christos
1189 1.1 christos /* This function actually issues the request to ptrace, telling
1190 1.1 christos it to store all general-purpose registers present in the specified
1191 1.1 christos regset.
1192 1.1 christos
1193 1.1 christos If the ptrace request does not exist, this function returns 0
1194 1.1 christos and properly sets the have_ptrace_* flag. If the request fails,
1195 1.1 christos this function calls perror_with_name. Otherwise, if the request
1196 1.1 christos succeeds, then the regcache is stored and 1 is returned. */
1197 1.1 christos static int
1198 1.1 christos store_all_gp_regs (const struct regcache *regcache, int tid, int regno)
1199 1.1 christos {
1200 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1201 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1202 1.1 christos gdb_gregset_t gregset;
1203 1.1 christos
1204 1.1 christos if (ptrace (PTRACE_GETREGS, tid, 0, (void *) &gregset) < 0)
1205 1.1 christos {
1206 1.1 christos if (errno == EIO)
1207 1.1 christos {
1208 1.1 christos have_ptrace_getsetregs = 0;
1209 1.1 christos return 0;
1210 1.1 christos }
1211 1.1 christos perror_with_name (_("Couldn't get general-purpose registers."));
1212 1.1 christos }
1213 1.1 christos
1214 1.1 christos fill_gregset (regcache, &gregset, regno);
1215 1.1 christos
1216 1.1 christos if (ptrace (PTRACE_SETREGS, tid, 0, (void *) &gregset) < 0)
1217 1.1 christos {
1218 1.1 christos if (errno == EIO)
1219 1.1 christos {
1220 1.1 christos have_ptrace_getsetregs = 0;
1221 1.1 christos return 0;
1222 1.1 christos }
1223 1.1 christos perror_with_name (_("Couldn't set general-purpose registers."));
1224 1.1 christos }
1225 1.1 christos
1226 1.1 christos return 1;
1227 1.1 christos }
1228 1.1 christos
1229 1.1 christos /* This is a wrapper for the store_all_gp_regs function. It is
1230 1.1 christos responsible for verifying if this target has the ptrace request
1231 1.1 christos that can be used to store all general-purpose registers at one
1232 1.1 christos shot. If it doesn't, then we should store them using the
1233 1.1 christos old-fashioned way, which is to iterate over the registers and
1234 1.1 christos store them one by one. */
1235 1.1 christos static void
1236 1.1 christos store_gp_regs (const struct regcache *regcache, int tid, int regno)
1237 1.1 christos {
1238 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1239 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1240 1.1 christos int i;
1241 1.1 christos
1242 1.1 christos if (have_ptrace_getsetregs)
1243 1.1 christos if (store_all_gp_regs (regcache, tid, regno))
1244 1.1 christos return;
1245 1.1 christos
1246 1.1 christos /* If we hit this point, it doesn't really matter which
1247 1.1 christos architecture we are using. We just need to store the
1248 1.1 christos registers in the "old-fashioned way". */
1249 1.1 christos for (i = 0; i < ppc_num_gprs; i++)
1250 1.1 christos store_register (regcache, tid, tdep->ppc_gp0_regnum + i);
1251 1.1 christos }
1252 1.1 christos
1253 1.1 christos /* This function actually issues the request to ptrace, telling
1254 1.1 christos it to store all floating-point registers present in the specified
1255 1.1 christos regset.
1256 1.1 christos
1257 1.1 christos If the ptrace request does not exist, this function returns 0
1258 1.1 christos and properly sets the have_ptrace_* flag. If the request fails,
1259 1.1 christos this function calls perror_with_name. Otherwise, if the request
1260 1.1 christos succeeds, then the regcache is stored and 1 is returned. */
1261 1.1 christos static int
1262 1.1 christos store_all_fp_regs (const struct regcache *regcache, int tid, int regno)
1263 1.1 christos {
1264 1.1 christos gdb_fpregset_t fpregs;
1265 1.1 christos
1266 1.1 christos if (ptrace (PTRACE_GETFPREGS, tid, 0, (void *) &fpregs) < 0)
1267 1.1 christos {
1268 1.1 christos if (errno == EIO)
1269 1.1 christos {
1270 1.1 christos have_ptrace_getsetfpregs = 0;
1271 1.1 christos return 0;
1272 1.1 christos }
1273 1.1 christos perror_with_name (_("Couldn't get floating-point registers."));
1274 1.1 christos }
1275 1.1 christos
1276 1.1 christos fill_fpregset (regcache, &fpregs, regno);
1277 1.1 christos
1278 1.1 christos if (ptrace (PTRACE_SETFPREGS, tid, 0, (void *) &fpregs) < 0)
1279 1.1 christos {
1280 1.1 christos if (errno == EIO)
1281 1.1 christos {
1282 1.1 christos have_ptrace_getsetfpregs = 0;
1283 1.1 christos return 0;
1284 1.1 christos }
1285 1.1 christos perror_with_name (_("Couldn't set floating-point registers."));
1286 1.1 christos }
1287 1.1 christos
1288 1.1 christos return 1;
1289 1.1 christos }
1290 1.1 christos
1291 1.1 christos /* This is a wrapper for the store_all_fp_regs function. It is
1292 1.1 christos responsible for verifying if this target has the ptrace request
1293 1.1 christos that can be used to store all floating-point registers at one
1294 1.1 christos shot. If it doesn't, then we should store them using the
1295 1.1 christos old-fashioned way, which is to iterate over the registers and
1296 1.1 christos store them one by one. */
1297 1.1 christos static void
1298 1.1 christos store_fp_regs (const struct regcache *regcache, int tid, int regno)
1299 1.1 christos {
1300 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1301 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1302 1.1 christos int i;
1303 1.1 christos
1304 1.1 christos if (have_ptrace_getsetfpregs)
1305 1.1 christos if (store_all_fp_regs (regcache, tid, regno))
1306 1.1 christos return;
1307 1.1 christos
1308 1.1 christos /* If we hit this point, it doesn't really matter which
1309 1.1 christos architecture we are using. We just need to store the
1310 1.1 christos registers in the "old-fashioned way". */
1311 1.1 christos for (i = 0; i < ppc_num_fprs; i++)
1312 1.1 christos store_register (regcache, tid, tdep->ppc_fp0_regnum + i);
1313 1.1 christos }
1314 1.1 christos
1315 1.1 christos static void
1316 1.1 christos store_ppc_registers (const struct regcache *regcache, int tid)
1317 1.1 christos {
1318 1.1 christos int i;
1319 1.1 christos struct gdbarch *gdbarch = get_regcache_arch (regcache);
1320 1.1 christos struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1321 1.1 christos
1322 1.1 christos store_gp_regs (regcache, tid, -1);
1323 1.1 christos if (tdep->ppc_fp0_regnum >= 0)
1324 1.1 christos store_fp_regs (regcache, tid, -1);
1325 1.1 christos store_register (regcache, tid, gdbarch_pc_regnum (gdbarch));
1326 1.1 christos if (tdep->ppc_ps_regnum != -1)
1327 1.1 christos store_register (regcache, tid, tdep->ppc_ps_regnum);
1328 1.1 christos if (tdep->ppc_cr_regnum != -1)
1329 1.1 christos store_register (regcache, tid, tdep->ppc_cr_regnum);
1330 1.1 christos if (tdep->ppc_lr_regnum != -1)
1331 1.1 christos store_register (regcache, tid, tdep->ppc_lr_regnum);
1332 1.1 christos if (tdep->ppc_ctr_regnum != -1)
1333 1.1 christos store_register (regcache, tid, tdep->ppc_ctr_regnum);
1334 1.1 christos if (tdep->ppc_xer_regnum != -1)
1335 1.1 christos store_register (regcache, tid, tdep->ppc_xer_regnum);
1336 1.1 christos if (tdep->ppc_mq_regnum != -1)
1337 1.1 christos store_register (regcache, tid, tdep->ppc_mq_regnum);
1338 1.1 christos if (tdep->ppc_fpscr_regnum != -1)
1339 1.1 christos store_register (regcache, tid, tdep->ppc_fpscr_regnum);
1340 1.1 christos if (ppc_linux_trap_reg_p (gdbarch))
1341 1.1 christos {
1342 1.1 christos store_register (regcache, tid, PPC_ORIG_R3_REGNUM);
1343 1.1 christos store_register (regcache, tid, PPC_TRAP_REGNUM);
1344 1.1 christos }
1345 1.1 christos if (have_ptrace_getvrregs)
1346 1.1 christos if (tdep->ppc_vr0_regnum != -1 && tdep->ppc_vrsave_regnum != -1)
1347 1.1 christos store_altivec_registers (regcache, tid);
1348 1.1 christos if (have_ptrace_getsetvsxregs)
1349 1.1 christos if (tdep->ppc_vsr0_upper_regnum != -1)
1350 1.1 christos store_vsx_registers (regcache, tid);
1351 1.1 christos if (tdep->ppc_ev0_upper_regnum >= 0)
1352 1.1 christos store_spe_register (regcache, tid, -1);
1353 1.1 christos }
1354 1.1 christos
1355 1.1 christos /* Fetch the AT_HWCAP entry from the aux vector. */
1356 1.1 christos static unsigned long
1357 1.1 christos ppc_linux_get_hwcap (void)
1358 1.1 christos {
1359 1.1 christos CORE_ADDR field;
1360 1.1 christos
1361 1.1 christos if (target_auxv_search (¤t_target, AT_HWCAP, &field))
1362 1.1 christos return (unsigned long) field;
1363 1.1 christos
1364 1.1 christos return 0;
1365 1.1 christos }
1366 1.1 christos
1367 1.1 christos /* The cached DABR value, to install in new threads.
1368 1.1 christos This variable is used when the PowerPC HWDEBUG ptrace
1369 1.1 christos interface is not available. */
1370 1.1 christos static long saved_dabr_value;
1371 1.1 christos
1372 1.1 christos /* Global structure that will store information about the available
1373 1.1 christos features provided by the PowerPC HWDEBUG ptrace interface. */
1374 1.1 christos static struct ppc_debug_info hwdebug_info;
1375 1.1 christos
1376 1.1 christos /* Global variable that holds the maximum number of slots that the
1377 1.1 christos kernel will use. This is only used when PowerPC HWDEBUG ptrace interface
1378 1.1 christos is available. */
1379 1.1 christos static size_t max_slots_number = 0;
1380 1.1 christos
1381 1.1 christos struct hw_break_tuple
1382 1.1 christos {
1383 1.1 christos long slot;
1384 1.1 christos struct ppc_hw_breakpoint *hw_break;
1385 1.1 christos };
1386 1.1 christos
1387 1.1 christos /* This is an internal VEC created to store information about *points inserted
1388 1.1 christos for each thread. This is used when PowerPC HWDEBUG ptrace interface is
1389 1.1 christos available. */
1390 1.1 christos typedef struct thread_points
1391 1.1 christos {
1392 1.1 christos /* The TID to which this *point relates. */
1393 1.1 christos int tid;
1394 1.1 christos /* Information about the *point, such as its address, type, etc.
1395 1.1 christos
1396 1.1 christos Each element inside this vector corresponds to a hardware
1397 1.1 christos breakpoint or watchpoint in the thread represented by TID. The maximum
1398 1.1 christos size of these vector is MAX_SLOTS_NUMBER. If the hw_break element of
1399 1.1 christos the tuple is NULL, then the position in the vector is free. */
1400 1.1 christos struct hw_break_tuple *hw_breaks;
1401 1.1 christos } *thread_points_p;
1402 1.1 christos DEF_VEC_P (thread_points_p);
1403 1.1 christos
1404 1.1 christos VEC(thread_points_p) *ppc_threads = NULL;
1405 1.1 christos
1406 1.1 christos /* The version of the PowerPC HWDEBUG kernel interface that we will use, if
1407 1.1 christos available. */
1408 1.1 christos #define PPC_DEBUG_CURRENT_VERSION 1
1409 1.1 christos
1410 1.1 christos /* Returns non-zero if we support the PowerPC HWDEBUG ptrace interface. */
1411 1.1 christos static int
1412 1.1 christos have_ptrace_hwdebug_interface (void)
1413 1.1 christos {
1414 1.1 christos static int have_ptrace_hwdebug_interface = -1;
1415 1.1 christos
1416 1.1 christos if (have_ptrace_hwdebug_interface == -1)
1417 1.1 christos {
1418 1.1 christos int tid;
1419 1.1 christos
1420 1.1 christos tid = ptid_get_lwp (inferior_ptid);
1421 1.1 christos if (tid == 0)
1422 1.1 christos tid = ptid_get_pid (inferior_ptid);
1423 1.1 christos
1424 1.1 christos /* Check for kernel support for PowerPC HWDEBUG ptrace interface. */
1425 1.1 christos if (ptrace (PPC_PTRACE_GETHWDBGINFO, tid, 0, &hwdebug_info) >= 0)
1426 1.1 christos {
1427 1.1 christos /* Check whether PowerPC HWDEBUG ptrace interface is functional and
1428 1.1 christos provides any supported feature. */
1429 1.1 christos if (hwdebug_info.features != 0)
1430 1.1 christos {
1431 1.1 christos have_ptrace_hwdebug_interface = 1;
1432 1.1 christos max_slots_number = hwdebug_info.num_instruction_bps
1433 1.1 christos + hwdebug_info.num_data_bps
1434 1.1 christos + hwdebug_info.num_condition_regs;
1435 1.1 christos return have_ptrace_hwdebug_interface;
1436 1.1 christos }
1437 1.1 christos }
1438 1.1 christos /* Old school interface and no PowerPC HWDEBUG ptrace support. */
1439 1.1 christos have_ptrace_hwdebug_interface = 0;
1440 1.1 christos memset (&hwdebug_info, 0, sizeof (struct ppc_debug_info));
1441 1.1 christos }
1442 1.1 christos
1443 1.1 christos return have_ptrace_hwdebug_interface;
1444 1.1 christos }
1445 1.1 christos
1446 1.1 christos static int
1447 1.1 christos ppc_linux_can_use_hw_breakpoint (int type, int cnt, int ot)
1448 1.1 christos {
1449 1.1 christos int total_hw_wp, total_hw_bp;
1450 1.1 christos
1451 1.1 christos if (have_ptrace_hwdebug_interface ())
1452 1.1 christos {
1453 1.1 christos /* When PowerPC HWDEBUG ptrace interface is available, the number of
1454 1.1 christos available hardware watchpoints and breakpoints is stored at the
1455 1.1 christos hwdebug_info struct. */
1456 1.1 christos total_hw_bp = hwdebug_info.num_instruction_bps;
1457 1.1 christos total_hw_wp = hwdebug_info.num_data_bps;
1458 1.1 christos }
1459 1.1 christos else
1460 1.1 christos {
1461 1.1 christos /* When we do not have PowerPC HWDEBUG ptrace interface, we should
1462 1.1 christos consider having 1 hardware watchpoint and no hardware breakpoints. */
1463 1.1 christos total_hw_bp = 0;
1464 1.1 christos total_hw_wp = 1;
1465 1.1 christos }
1466 1.1 christos
1467 1.1 christos if (type == bp_hardware_watchpoint || type == bp_read_watchpoint
1468 1.1 christos || type == bp_access_watchpoint || type == bp_watchpoint)
1469 1.1 christos {
1470 1.1 christos if (cnt + ot > total_hw_wp)
1471 1.1 christos return -1;
1472 1.1 christos }
1473 1.1 christos else if (type == bp_hardware_breakpoint)
1474 1.1 christos {
1475 1.1 christos if (cnt > total_hw_bp)
1476 1.1 christos return -1;
1477 1.1 christos }
1478 1.1 christos
1479 1.1 christos if (!have_ptrace_hwdebug_interface ())
1480 1.1 christos {
1481 1.1 christos int tid;
1482 1.1 christos ptid_t ptid = inferior_ptid;
1483 1.1 christos
1484 1.1 christos /* We need to know whether ptrace supports PTRACE_SET_DEBUGREG
1485 1.1 christos and whether the target has DABR. If either answer is no, the
1486 1.1 christos ptrace call will return -1. Fail in that case. */
1487 1.1 christos tid = ptid_get_lwp (ptid);
1488 1.1 christos if (tid == 0)
1489 1.1 christos tid = ptid_get_pid (ptid);
1490 1.1 christos
1491 1.1 christos if (ptrace (PTRACE_SET_DEBUGREG, tid, 0, 0) == -1)
1492 1.1 christos return 0;
1493 1.1 christos }
1494 1.1 christos
1495 1.1 christos return 1;
1496 1.1 christos }
1497 1.1 christos
1498 1.1 christos static int
1499 1.1 christos ppc_linux_region_ok_for_hw_watchpoint (CORE_ADDR addr, int len)
1500 1.1 christos {
1501 1.1 christos /* Handle sub-8-byte quantities. */
1502 1.1 christos if (len <= 0)
1503 1.1 christos return 0;
1504 1.1 christos
1505 1.1 christos /* The PowerPC HWDEBUG ptrace interface tells if there are alignment
1506 1.1 christos restrictions for watchpoints in the processors. In that case, we use that
1507 1.1 christos information to determine the hardcoded watchable region for
1508 1.1 christos watchpoints. */
1509 1.1 christos if (have_ptrace_hwdebug_interface ())
1510 1.1 christos {
1511 1.1 christos int region_size;
1512 1.1 christos /* Embedded DAC-based processors, like the PowerPC 440 have ranged
1513 1.1 christos watchpoints and can watch any access within an arbitrary memory
1514 1.1 christos region. This is useful to watch arrays and structs, for instance. It
1515 1.1 christos takes two hardware watchpoints though. */
1516 1.1 christos if (len > 1
1517 1.1 christos && hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE
1518 1.1 christos && ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
1519 1.1 christos return 2;
1520 1.1 christos /* Check if the processor provides DAWR interface. */
1521 1.1 christos if (hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR)
1522 1.1 christos /* DAWR interface allows to watch up to 512 byte wide ranges which
1523 1.1 christos can't cross a 512 byte boundary. */
1524 1.1 christos region_size = 512;
1525 1.1 christos else
1526 1.1 christos region_size = hwdebug_info.data_bp_alignment;
1527 1.1 christos /* Server processors provide one hardware watchpoint and addr+len should
1528 1.1 christos fall in the watchable region provided by the ptrace interface. */
1529 1.1 christos if (region_size
1530 1.1 christos && (addr + len > (addr & ~(region_size - 1)) + region_size))
1531 1.1 christos return 0;
1532 1.1 christos }
1533 1.1 christos /* addr+len must fall in the 8 byte watchable region for DABR-based
1534 1.1 christos processors (i.e., server processors). Without the new PowerPC HWDEBUG
1535 1.1 christos ptrace interface, DAC-based processors (i.e., embedded processors) will
1536 1.1 christos use addresses aligned to 4-bytes due to the way the read/write flags are
1537 1.1 christos passed in the old ptrace interface. */
1538 1.1 christos else if (((ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
1539 1.1 christos && (addr + len) > (addr & ~3) + 4)
1540 1.1 christos || (addr + len) > (addr & ~7) + 8)
1541 1.1 christos return 0;
1542 1.1 christos
1543 1.1 christos return 1;
1544 1.1 christos }
1545 1.1 christos
1546 1.1 christos /* This function compares two ppc_hw_breakpoint structs field-by-field. */
1547 1.1 christos static int
1548 1.1 christos hwdebug_point_cmp (struct ppc_hw_breakpoint *a, struct ppc_hw_breakpoint *b)
1549 1.1 christos {
1550 1.1 christos return (a->trigger_type == b->trigger_type
1551 1.1 christos && a->addr_mode == b->addr_mode
1552 1.1 christos && a->condition_mode == b->condition_mode
1553 1.1 christos && a->addr == b->addr
1554 1.1 christos && a->addr2 == b->addr2
1555 1.1 christos && a->condition_value == b->condition_value);
1556 1.1 christos }
1557 1.1 christos
1558 1.1 christos /* This function can be used to retrieve a thread_points by the TID of the
1559 1.1 christos related process/thread. If nothing has been found, and ALLOC_NEW is 0,
1560 1.1 christos it returns NULL. If ALLOC_NEW is non-zero, a new thread_points for the
1561 1.1 christos provided TID will be created and returned. */
1562 1.1 christos static struct thread_points *
1563 1.1 christos hwdebug_find_thread_points_by_tid (int tid, int alloc_new)
1564 1.1 christos {
1565 1.1 christos int i;
1566 1.1 christos struct thread_points *t;
1567 1.1 christos
1568 1.1 christos for (i = 0; VEC_iterate (thread_points_p, ppc_threads, i, t); i++)
1569 1.1 christos if (t->tid == tid)
1570 1.1 christos return t;
1571 1.1 christos
1572 1.1 christos t = NULL;
1573 1.1 christos
1574 1.1 christos /* Do we need to allocate a new point_item
1575 1.1 christos if the wanted one does not exist? */
1576 1.1 christos if (alloc_new)
1577 1.1 christos {
1578 1.1 christos t = xmalloc (sizeof (struct thread_points));
1579 1.1 christos t->hw_breaks
1580 1.1 christos = xzalloc (max_slots_number * sizeof (struct hw_break_tuple));
1581 1.1 christos t->tid = tid;
1582 1.1 christos VEC_safe_push (thread_points_p, ppc_threads, t);
1583 1.1 christos }
1584 1.1 christos
1585 1.1 christos return t;
1586 1.1 christos }
1587 1.1 christos
1588 1.1 christos /* This function is a generic wrapper that is responsible for inserting a
1589 1.1 christos *point (i.e., calling `ptrace' in order to issue the request to the
1590 1.1 christos kernel) and registering it internally in GDB. */
1591 1.1 christos static void
1592 1.1 christos hwdebug_insert_point (struct ppc_hw_breakpoint *b, int tid)
1593 1.1 christos {
1594 1.1 christos int i;
1595 1.1 christos long slot;
1596 1.1 christos struct ppc_hw_breakpoint *p = xmalloc (sizeof (struct ppc_hw_breakpoint));
1597 1.1 christos struct hw_break_tuple *hw_breaks;
1598 1.1 christos struct cleanup *c = make_cleanup (xfree, p);
1599 1.1 christos struct thread_points *t;
1600 1.1 christos struct hw_break_tuple *tuple;
1601 1.1 christos
1602 1.1 christos memcpy (p, b, sizeof (struct ppc_hw_breakpoint));
1603 1.1 christos
1604 1.1 christos errno = 0;
1605 1.1 christos slot = ptrace (PPC_PTRACE_SETHWDEBUG, tid, 0, p);
1606 1.1 christos if (slot < 0)
1607 1.1 christos perror_with_name (_("Unexpected error setting breakpoint or watchpoint"));
1608 1.1 christos
1609 1.1 christos /* Everything went fine, so we have to register this *point. */
1610 1.1 christos t = hwdebug_find_thread_points_by_tid (tid, 1);
1611 1.1 christos gdb_assert (t != NULL);
1612 1.1 christos hw_breaks = t->hw_breaks;
1613 1.1 christos
1614 1.1 christos /* Find a free element in the hw_breaks vector. */
1615 1.1 christos for (i = 0; i < max_slots_number; i++)
1616 1.1 christos if (hw_breaks[i].hw_break == NULL)
1617 1.1 christos {
1618 1.1 christos hw_breaks[i].slot = slot;
1619 1.1 christos hw_breaks[i].hw_break = p;
1620 1.1 christos break;
1621 1.1 christos }
1622 1.1 christos
1623 1.1 christos gdb_assert (i != max_slots_number);
1624 1.1 christos
1625 1.1 christos discard_cleanups (c);
1626 1.1 christos }
1627 1.1 christos
1628 1.1 christos /* This function is a generic wrapper that is responsible for removing a
1629 1.1 christos *point (i.e., calling `ptrace' in order to issue the request to the
1630 1.1 christos kernel), and unregistering it internally at GDB. */
1631 1.1 christos static void
1632 1.1 christos hwdebug_remove_point (struct ppc_hw_breakpoint *b, int tid)
1633 1.1 christos {
1634 1.1 christos int i;
1635 1.1 christos struct hw_break_tuple *hw_breaks;
1636 1.1 christos struct thread_points *t;
1637 1.1 christos
1638 1.1 christos t = hwdebug_find_thread_points_by_tid (tid, 0);
1639 1.1 christos gdb_assert (t != NULL);
1640 1.1 christos hw_breaks = t->hw_breaks;
1641 1.1 christos
1642 1.1 christos for (i = 0; i < max_slots_number; i++)
1643 1.1 christos if (hw_breaks[i].hw_break && hwdebug_point_cmp (hw_breaks[i].hw_break, b))
1644 1.1 christos break;
1645 1.1 christos
1646 1.1 christos gdb_assert (i != max_slots_number);
1647 1.1 christos
1648 1.1 christos /* We have to ignore ENOENT errors because the kernel implements hardware
1649 1.1 christos breakpoints/watchpoints as "one-shot", that is, they are automatically
1650 1.1 christos deleted when hit. */
1651 1.1 christos errno = 0;
1652 1.1 christos if (ptrace (PPC_PTRACE_DELHWDEBUG, tid, 0, hw_breaks[i].slot) < 0)
1653 1.1 christos if (errno != ENOENT)
1654 1.1 christos perror_with_name (_("Unexpected error deleting "
1655 1.1 christos "breakpoint or watchpoint"));
1656 1.1 christos
1657 1.1 christos xfree (hw_breaks[i].hw_break);
1658 1.1 christos hw_breaks[i].hw_break = NULL;
1659 1.1 christos }
1660 1.1 christos
1661 1.1 christos /* Return the number of registers needed for a ranged breakpoint. */
1662 1.1 christos
1663 1.1 christos static int
1664 1.1 christos ppc_linux_ranged_break_num_registers (struct target_ops *target)
1665 1.1 christos {
1666 1.1 christos return ((have_ptrace_hwdebug_interface ()
1667 1.1 christos && hwdebug_info.features & PPC_DEBUG_FEATURE_INSN_BP_RANGE)?
1668 1.1 christos 2 : -1);
1669 1.1 christos }
1670 1.1 christos
1671 1.1 christos /* Insert the hardware breakpoint described by BP_TGT. Returns 0 for
1672 1.1 christos success, 1 if hardware breakpoints are not supported or -1 for failure. */
1673 1.1 christos
1674 1.1 christos static int
1675 1.1 christos ppc_linux_insert_hw_breakpoint (struct gdbarch *gdbarch,
1676 1.1 christos struct bp_target_info *bp_tgt)
1677 1.1 christos {
1678 1.1 christos struct lwp_info *lp;
1679 1.1 christos struct ppc_hw_breakpoint p;
1680 1.1 christos
1681 1.1 christos if (!have_ptrace_hwdebug_interface ())
1682 1.1 christos return -1;
1683 1.1 christos
1684 1.1 christos p.version = PPC_DEBUG_CURRENT_VERSION;
1685 1.1 christos p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
1686 1.1 christos p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
1687 1.1 christos p.addr = (uint64_t) bp_tgt->placed_address;
1688 1.1 christos p.condition_value = 0;
1689 1.1 christos
1690 1.1 christos if (bp_tgt->length)
1691 1.1 christos {
1692 1.1 christos p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
1693 1.1 christos
1694 1.1 christos /* The breakpoint will trigger if the address of the instruction is
1695 1.1 christos within the defined range, as follows: p.addr <= address < p.addr2. */
1696 1.1 christos p.addr2 = (uint64_t) bp_tgt->placed_address + bp_tgt->length;
1697 1.1 christos }
1698 1.1 christos else
1699 1.1 christos {
1700 1.1 christos p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
1701 1.1 christos p.addr2 = 0;
1702 1.1 christos }
1703 1.1 christos
1704 1.1 christos ALL_LWPS (lp)
1705 1.1 christos hwdebug_insert_point (&p, ptid_get_lwp (lp->ptid));
1706 1.1 christos
1707 1.1 christos return 0;
1708 1.1 christos }
1709 1.1 christos
1710 1.1 christos static int
1711 1.1 christos ppc_linux_remove_hw_breakpoint (struct gdbarch *gdbarch,
1712 1.1 christos struct bp_target_info *bp_tgt)
1713 1.1 christos {
1714 1.1 christos struct lwp_info *lp;
1715 1.1 christos struct ppc_hw_breakpoint p;
1716 1.1 christos
1717 1.1 christos if (!have_ptrace_hwdebug_interface ())
1718 1.1 christos return -1;
1719 1.1 christos
1720 1.1 christos p.version = PPC_DEBUG_CURRENT_VERSION;
1721 1.1 christos p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
1722 1.1 christos p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
1723 1.1 christos p.addr = (uint64_t) bp_tgt->placed_address;
1724 1.1 christos p.condition_value = 0;
1725 1.1 christos
1726 1.1 christos if (bp_tgt->length)
1727 1.1 christos {
1728 1.1 christos p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
1729 1.1 christos
1730 1.1 christos /* The breakpoint will trigger if the address of the instruction is within
1731 1.1 christos the defined range, as follows: p.addr <= address < p.addr2. */
1732 1.1 christos p.addr2 = (uint64_t) bp_tgt->placed_address + bp_tgt->length;
1733 1.1 christos }
1734 1.1 christos else
1735 1.1 christos {
1736 1.1 christos p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
1737 1.1 christos p.addr2 = 0;
1738 1.1 christos }
1739 1.1 christos
1740 1.1 christos ALL_LWPS (lp)
1741 1.1 christos hwdebug_remove_point (&p, ptid_get_lwp (lp->ptid));
1742 1.1 christos
1743 1.1 christos return 0;
1744 1.1 christos }
1745 1.1 christos
1746 1.1 christos static int
1747 1.1 christos get_trigger_type (int rw)
1748 1.1 christos {
1749 1.1 christos int t;
1750 1.1 christos
1751 1.1 christos if (rw == hw_read)
1752 1.1 christos t = PPC_BREAKPOINT_TRIGGER_READ;
1753 1.1 christos else if (rw == hw_write)
1754 1.1 christos t = PPC_BREAKPOINT_TRIGGER_WRITE;
1755 1.1 christos else
1756 1.1 christos t = PPC_BREAKPOINT_TRIGGER_READ | PPC_BREAKPOINT_TRIGGER_WRITE;
1757 1.1 christos
1758 1.1 christos return t;
1759 1.1 christos }
1760 1.1 christos
1761 1.1 christos /* Insert a new masked watchpoint at ADDR using the mask MASK.
1762 1.1 christos RW may be hw_read for a read watchpoint, hw_write for a write watchpoint
1763 1.1 christos or hw_access for an access watchpoint. Returns 0 on success and throws
1764 1.1 christos an error on failure. */
1765 1.1 christos
1766 1.1 christos static int
1767 1.1 christos ppc_linux_insert_mask_watchpoint (struct target_ops *ops, CORE_ADDR addr,
1768 1.1 christos CORE_ADDR mask, int rw)
1769 1.1 christos {
1770 1.1 christos struct lwp_info *lp;
1771 1.1 christos struct ppc_hw_breakpoint p;
1772 1.1 christos
1773 1.1 christos gdb_assert (have_ptrace_hwdebug_interface ());
1774 1.1 christos
1775 1.1 christos p.version = PPC_DEBUG_CURRENT_VERSION;
1776 1.1 christos p.trigger_type = get_trigger_type (rw);
1777 1.1 christos p.addr_mode = PPC_BREAKPOINT_MODE_MASK;
1778 1.1 christos p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
1779 1.1 christos p.addr = addr;
1780 1.1 christos p.addr2 = mask;
1781 1.1 christos p.condition_value = 0;
1782 1.1 christos
1783 1.1 christos ALL_LWPS (lp)
1784 1.1 christos hwdebug_insert_point (&p, ptid_get_lwp (lp->ptid));
1785 1.1 christos
1786 1.1 christos return 0;
1787 1.1 christos }
1788 1.1 christos
1789 1.1 christos /* Remove a masked watchpoint at ADDR with the mask MASK.
1790 1.1 christos RW may be hw_read for a read watchpoint, hw_write for a write watchpoint
1791 1.1 christos or hw_access for an access watchpoint. Returns 0 on success and throws
1792 1.1 christos an error on failure. */
1793 1.1 christos
1794 1.1 christos static int
1795 1.1 christos ppc_linux_remove_mask_watchpoint (struct target_ops *ops, CORE_ADDR addr,
1796 1.1 christos CORE_ADDR mask, int rw)
1797 1.1 christos {
1798 1.1 christos struct lwp_info *lp;
1799 1.1 christos struct ppc_hw_breakpoint p;
1800 1.1 christos
1801 1.1 christos gdb_assert (have_ptrace_hwdebug_interface ());
1802 1.1 christos
1803 1.1 christos p.version = PPC_DEBUG_CURRENT_VERSION;
1804 1.1 christos p.trigger_type = get_trigger_type (rw);
1805 1.1 christos p.addr_mode = PPC_BREAKPOINT_MODE_MASK;
1806 1.1 christos p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
1807 1.1 christos p.addr = addr;
1808 1.1 christos p.addr2 = mask;
1809 1.1 christos p.condition_value = 0;
1810 1.1 christos
1811 1.1 christos ALL_LWPS (lp)
1812 1.1 christos hwdebug_remove_point (&p, ptid_get_lwp (lp->ptid));
1813 1.1 christos
1814 1.1 christos return 0;
1815 1.1 christos }
1816 1.1 christos
1817 1.1 christos /* Check whether we have at least one free DVC register. */
1818 1.1 christos static int
1819 1.1 christos can_use_watchpoint_cond_accel (void)
1820 1.1 christos {
1821 1.1 christos struct thread_points *p;
1822 1.1 christos int tid = ptid_get_lwp (inferior_ptid);
1823 1.1 christos int cnt = hwdebug_info.num_condition_regs, i;
1824 1.1 christos CORE_ADDR tmp_value;
1825 1.1 christos
1826 1.1 christos if (!have_ptrace_hwdebug_interface () || cnt == 0)
1827 1.1 christos return 0;
1828 1.1 christos
1829 1.1 christos p = hwdebug_find_thread_points_by_tid (tid, 0);
1830 1.1 christos
1831 1.1 christos if (p)
1832 1.1 christos {
1833 1.1 christos for (i = 0; i < max_slots_number; i++)
1834 1.1 christos if (p->hw_breaks[i].hw_break != NULL
1835 1.1 christos && (p->hw_breaks[i].hw_break->condition_mode
1836 1.1 christos != PPC_BREAKPOINT_CONDITION_NONE))
1837 1.1 christos cnt--;
1838 1.1 christos
1839 1.1 christos /* There are no available slots now. */
1840 1.1 christos if (cnt <= 0)
1841 1.1 christos return 0;
1842 1.1 christos }
1843 1.1 christos
1844 1.1 christos return 1;
1845 1.1 christos }
1846 1.1 christos
1847 1.1 christos /* Calculate the enable bits and the contents of the Data Value Compare
1848 1.1 christos debug register present in BookE processors.
1849 1.1 christos
1850 1.1 christos ADDR is the address to be watched, LEN is the length of watched data
1851 1.1 christos and DATA_VALUE is the value which will trigger the watchpoint.
1852 1.1 christos On exit, CONDITION_MODE will hold the enable bits for the DVC, and
1853 1.1 christos CONDITION_VALUE will hold the value which should be put in the
1854 1.1 christos DVC register. */
1855 1.1 christos static void
1856 1.1 christos calculate_dvc (CORE_ADDR addr, int len, CORE_ADDR data_value,
1857 1.1 christos uint32_t *condition_mode, uint64_t *condition_value)
1858 1.1 christos {
1859 1.1 christos int i, num_byte_enable, align_offset, num_bytes_off_dvc,
1860 1.1 christos rightmost_enabled_byte;
1861 1.1 christos CORE_ADDR addr_end_data, addr_end_dvc;
1862 1.1 christos
1863 1.1 christos /* The DVC register compares bytes within fixed-length windows which
1864 1.1 christos are word-aligned, with length equal to that of the DVC register.
1865 1.1 christos We need to calculate where our watch region is relative to that
1866 1.1 christos window and enable comparison of the bytes which fall within it. */
1867 1.1 christos
1868 1.1 christos align_offset = addr % hwdebug_info.sizeof_condition;
1869 1.1 christos addr_end_data = addr + len;
1870 1.1 christos addr_end_dvc = (addr - align_offset
1871 1.1 christos + hwdebug_info.sizeof_condition);
1872 1.1 christos num_bytes_off_dvc = (addr_end_data > addr_end_dvc)?
1873 1.1 christos addr_end_data - addr_end_dvc : 0;
1874 1.1 christos num_byte_enable = len - num_bytes_off_dvc;
1875 1.1 christos /* Here, bytes are numbered from right to left. */
1876 1.1 christos rightmost_enabled_byte = (addr_end_data < addr_end_dvc)?
1877 1.1 christos addr_end_dvc - addr_end_data : 0;
1878 1.1 christos
1879 1.1 christos *condition_mode = PPC_BREAKPOINT_CONDITION_AND;
1880 1.1 christos for (i = 0; i < num_byte_enable; i++)
1881 1.1 christos *condition_mode
1882 1.1 christos |= PPC_BREAKPOINT_CONDITION_BE (i + rightmost_enabled_byte);
1883 1.1 christos
1884 1.1 christos /* Now we need to match the position within the DVC of the comparison
1885 1.1 christos value with where the watch region is relative to the window
1886 1.1 christos (i.e., the ALIGN_OFFSET). */
1887 1.1 christos
1888 1.1 christos *condition_value = ((uint64_t) data_value >> num_bytes_off_dvc * 8
1889 1.1 christos << rightmost_enabled_byte * 8);
1890 1.1 christos }
1891 1.1 christos
1892 1.1 christos /* Return the number of memory locations that need to be accessed to
1893 1.1 christos evaluate the expression which generated the given value chain.
1894 1.1 christos Returns -1 if there's any register access involved, or if there are
1895 1.1 christos other kinds of values which are not acceptable in a condition
1896 1.1 christos expression (e.g., lval_computed or lval_internalvar). */
1897 1.1 christos static int
1898 1.1 christos num_memory_accesses (struct value *v)
1899 1.1 christos {
1900 1.1 christos int found_memory_cnt = 0;
1901 1.1 christos struct value *head = v;
1902 1.1 christos
1903 1.1 christos /* The idea here is that evaluating an expression generates a series
1904 1.1 christos of values, one holding the value of every subexpression. (The
1905 1.1 christos expression a*b+c has five subexpressions: a, b, a*b, c, and
1906 1.1 christos a*b+c.) GDB's values hold almost enough information to establish
1907 1.1 christos the criteria given above --- they identify memory lvalues,
1908 1.1 christos register lvalues, computed values, etcetera. So we can evaluate
1909 1.1 christos the expression, and then scan the chain of values that leaves
1910 1.1 christos behind to determine the memory locations involved in the evaluation
1911 1.1 christos of an expression.
1912 1.1 christos
1913 1.1 christos However, I don't think that the values returned by inferior
1914 1.1 christos function calls are special in any way. So this function may not
1915 1.1 christos notice that an expression contains an inferior function call.
1916 1.1 christos FIXME. */
1917 1.1 christos
1918 1.1 christos for (; v; v = value_next (v))
1919 1.1 christos {
1920 1.1 christos /* Constants and values from the history are fine. */
1921 1.1 christos if (VALUE_LVAL (v) == not_lval || deprecated_value_modifiable (v) == 0)
1922 1.1 christos continue;
1923 1.1 christos else if (VALUE_LVAL (v) == lval_memory)
1924 1.1 christos {
1925 1.1 christos /* A lazy memory lvalue is one that GDB never needed to fetch;
1926 1.1 christos we either just used its address (e.g., `a' in `a.b') or
1927 1.1 christos we never needed it at all (e.g., `a' in `a,b'). */
1928 1.1 christos if (!value_lazy (v))
1929 1.1 christos found_memory_cnt++;
1930 1.1 christos }
1931 1.1 christos /* Other kinds of values are not fine. */
1932 1.1 christos else
1933 1.1 christos return -1;
1934 1.1 christos }
1935 1.1 christos
1936 1.1 christos return found_memory_cnt;
1937 1.1 christos }
1938 1.1 christos
1939 1.1 christos /* Verifies whether the expression COND can be implemented using the
1940 1.1 christos DVC (Data Value Compare) register in BookE processors. The expression
1941 1.1 christos must test the watch value for equality with a constant expression.
1942 1.1 christos If the function returns 1, DATA_VALUE will contain the constant against
1943 1.1 christos which the watch value should be compared and LEN will contain the size
1944 1.1 christos of the constant. */
1945 1.1 christos static int
1946 1.1 christos check_condition (CORE_ADDR watch_addr, struct expression *cond,
1947 1.1 christos CORE_ADDR *data_value, int *len)
1948 1.1 christos {
1949 1.1 christos int pc = 1, num_accesses_left, num_accesses_right;
1950 1.1 christos struct value *left_val, *right_val, *left_chain, *right_chain;
1951 1.1 christos
1952 1.1 christos if (cond->elts[0].opcode != BINOP_EQUAL)
1953 1.1 christos return 0;
1954 1.1 christos
1955 1.1 christos fetch_subexp_value (cond, &pc, &left_val, NULL, &left_chain, 0);
1956 1.1 christos num_accesses_left = num_memory_accesses (left_chain);
1957 1.1 christos
1958 1.1 christos if (left_val == NULL || num_accesses_left < 0)
1959 1.1 christos {
1960 1.1 christos free_value_chain (left_chain);
1961 1.1 christos
1962 1.1 christos return 0;
1963 1.1 christos }
1964 1.1 christos
1965 1.1 christos fetch_subexp_value (cond, &pc, &right_val, NULL, &right_chain, 0);
1966 1.1 christos num_accesses_right = num_memory_accesses (right_chain);
1967 1.1 christos
1968 1.1 christos if (right_val == NULL || num_accesses_right < 0)
1969 1.1 christos {
1970 1.1 christos free_value_chain (left_chain);
1971 1.1 christos free_value_chain (right_chain);
1972 1.1 christos
1973 1.1 christos return 0;
1974 1.1 christos }
1975 1.1 christos
1976 1.1 christos if (num_accesses_left == 1 && num_accesses_right == 0
1977 1.1 christos && VALUE_LVAL (left_val) == lval_memory
1978 1.1 christos && value_address (left_val) == watch_addr)
1979 1.1 christos {
1980 1.1 christos *data_value = value_as_long (right_val);
1981 1.1 christos
1982 1.1 christos /* DATA_VALUE is the constant in RIGHT_VAL, but actually has
1983 1.1 christos the same type as the memory region referenced by LEFT_VAL. */
1984 1.1 christos *len = TYPE_LENGTH (check_typedef (value_type (left_val)));
1985 1.1 christos }
1986 1.1 christos else if (num_accesses_left == 0 && num_accesses_right == 1
1987 1.1 christos && VALUE_LVAL (right_val) == lval_memory
1988 1.1 christos && value_address (right_val) == watch_addr)
1989 1.1 christos {
1990 1.1 christos *data_value = value_as_long (left_val);
1991 1.1 christos
1992 1.1 christos /* DATA_VALUE is the constant in LEFT_VAL, but actually has
1993 1.1 christos the same type as the memory region referenced by RIGHT_VAL. */
1994 1.1 christos *len = TYPE_LENGTH (check_typedef (value_type (right_val)));
1995 1.1 christos }
1996 1.1 christos else
1997 1.1 christos {
1998 1.1 christos free_value_chain (left_chain);
1999 1.1 christos free_value_chain (right_chain);
2000 1.1 christos
2001 1.1 christos return 0;
2002 1.1 christos }
2003 1.1 christos
2004 1.1 christos free_value_chain (left_chain);
2005 1.1 christos free_value_chain (right_chain);
2006 1.1 christos
2007 1.1 christos return 1;
2008 1.1 christos }
2009 1.1 christos
2010 1.1 christos /* Return non-zero if the target is capable of using hardware to evaluate
2011 1.1 christos the condition expression, thus only triggering the watchpoint when it is
2012 1.1 christos true. */
2013 1.1 christos static int
2014 1.1 christos ppc_linux_can_accel_watchpoint_condition (CORE_ADDR addr, int len, int rw,
2015 1.1 christos struct expression *cond)
2016 1.1 christos {
2017 1.1 christos CORE_ADDR data_value;
2018 1.1 christos
2019 1.1 christos return (have_ptrace_hwdebug_interface ()
2020 1.1 christos && hwdebug_info.num_condition_regs > 0
2021 1.1 christos && check_condition (addr, cond, &data_value, &len));
2022 1.1 christos }
2023 1.1 christos
2024 1.1 christos /* Set up P with the parameters necessary to request a watchpoint covering
2025 1.1 christos LEN bytes starting at ADDR and if possible with condition expression COND
2026 1.1 christos evaluated by hardware. INSERT tells if we are creating a request for
2027 1.1 christos inserting or removing the watchpoint. */
2028 1.1 christos
2029 1.1 christos static void
2030 1.1 christos create_watchpoint_request (struct ppc_hw_breakpoint *p, CORE_ADDR addr,
2031 1.1 christos int len, int rw, struct expression *cond,
2032 1.1 christos int insert)
2033 1.1 christos {
2034 1.1 christos if (len == 1
2035 1.1 christos || !(hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE))
2036 1.1 christos {
2037 1.1 christos int use_condition;
2038 1.1 christos CORE_ADDR data_value;
2039 1.1 christos
2040 1.1 christos use_condition = (insert? can_use_watchpoint_cond_accel ()
2041 1.1 christos : hwdebug_info.num_condition_regs > 0);
2042 1.1 christos if (cond && use_condition && check_condition (addr, cond,
2043 1.1 christos &data_value, &len))
2044 1.1 christos calculate_dvc (addr, len, data_value, &p->condition_mode,
2045 1.1 christos &p->condition_value);
2046 1.1 christos else
2047 1.1 christos {
2048 1.1 christos p->condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
2049 1.1 christos p->condition_value = 0;
2050 1.1 christos }
2051 1.1 christos
2052 1.1 christos p->addr_mode = PPC_BREAKPOINT_MODE_EXACT;
2053 1.1 christos p->addr2 = 0;
2054 1.1 christos }
2055 1.1 christos else
2056 1.1 christos {
2057 1.1 christos p->addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
2058 1.1 christos p->condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
2059 1.1 christos p->condition_value = 0;
2060 1.1 christos
2061 1.1 christos /* The watchpoint will trigger if the address of the memory access is
2062 1.1 christos within the defined range, as follows: p->addr <= address < p->addr2.
2063 1.1 christos
2064 1.1 christos Note that the above sentence just documents how ptrace interprets
2065 1.1 christos its arguments; the watchpoint is set to watch the range defined by
2066 1.1 christos the user _inclusively_, as specified by the user interface. */
2067 1.1 christos p->addr2 = (uint64_t) addr + len;
2068 1.1 christos }
2069 1.1 christos
2070 1.1 christos p->version = PPC_DEBUG_CURRENT_VERSION;
2071 1.1 christos p->trigger_type = get_trigger_type (rw);
2072 1.1 christos p->addr = (uint64_t) addr;
2073 1.1 christos }
2074 1.1 christos
2075 1.1 christos static int
2076 1.1 christos ppc_linux_insert_watchpoint (CORE_ADDR addr, int len, int rw,
2077 1.1 christos struct expression *cond)
2078 1.1 christos {
2079 1.1 christos struct lwp_info *lp;
2080 1.1 christos int ret = -1;
2081 1.1 christos
2082 1.1 christos if (have_ptrace_hwdebug_interface ())
2083 1.1 christos {
2084 1.1 christos struct ppc_hw_breakpoint p;
2085 1.1 christos
2086 1.1 christos create_watchpoint_request (&p, addr, len, rw, cond, 1);
2087 1.1 christos
2088 1.1 christos ALL_LWPS (lp)
2089 1.1 christos hwdebug_insert_point (&p, ptid_get_lwp (lp->ptid));
2090 1.1 christos
2091 1.1 christos ret = 0;
2092 1.1 christos }
2093 1.1 christos else
2094 1.1 christos {
2095 1.1 christos long dabr_value;
2096 1.1 christos long read_mode, write_mode;
2097 1.1 christos
2098 1.1 christos if (ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
2099 1.1 christos {
2100 1.1 christos /* PowerPC 440 requires only the read/write flags to be passed
2101 1.1 christos to the kernel. */
2102 1.1 christos read_mode = 1;
2103 1.1 christos write_mode = 2;
2104 1.1 christos }
2105 1.1 christos else
2106 1.1 christos {
2107 1.1 christos /* PowerPC 970 and other DABR-based processors are required to pass
2108 1.1 christos the Breakpoint Translation bit together with the flags. */
2109 1.1 christos read_mode = 5;
2110 1.1 christos write_mode = 6;
2111 1.1 christos }
2112 1.1 christos
2113 1.1 christos dabr_value = addr & ~(read_mode | write_mode);
2114 1.1 christos switch (rw)
2115 1.1 christos {
2116 1.1 christos case hw_read:
2117 1.1 christos /* Set read and translate bits. */
2118 1.1 christos dabr_value |= read_mode;
2119 1.1 christos break;
2120 1.1 christos case hw_write:
2121 1.1 christos /* Set write and translate bits. */
2122 1.1 christos dabr_value |= write_mode;
2123 1.1 christos break;
2124 1.1 christos case hw_access:
2125 1.1 christos /* Set read, write and translate bits. */
2126 1.1 christos dabr_value |= read_mode | write_mode;
2127 1.1 christos break;
2128 1.1 christos }
2129 1.1 christos
2130 1.1 christos saved_dabr_value = dabr_value;
2131 1.1 christos
2132 1.1 christos ALL_LWPS (lp)
2133 1.1 christos if (ptrace (PTRACE_SET_DEBUGREG, ptid_get_lwp (lp->ptid), 0,
2134 1.1 christos saved_dabr_value) < 0)
2135 1.1 christos return -1;
2136 1.1 christos
2137 1.1 christos ret = 0;
2138 1.1 christos }
2139 1.1 christos
2140 1.1 christos return ret;
2141 1.1 christos }
2142 1.1 christos
2143 1.1 christos static int
2144 1.1 christos ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw,
2145 1.1 christos struct expression *cond)
2146 1.1 christos {
2147 1.1 christos struct lwp_info *lp;
2148 1.1 christos int ret = -1;
2149 1.1 christos
2150 1.1 christos if (have_ptrace_hwdebug_interface ())
2151 1.1 christos {
2152 1.1 christos struct ppc_hw_breakpoint p;
2153 1.1 christos
2154 1.1 christos create_watchpoint_request (&p, addr, len, rw, cond, 0);
2155 1.1 christos
2156 1.1 christos ALL_LWPS (lp)
2157 1.1 christos hwdebug_remove_point (&p, ptid_get_lwp (lp->ptid));
2158 1.1 christos
2159 1.1 christos ret = 0;
2160 1.1 christos }
2161 1.1 christos else
2162 1.1 christos {
2163 1.1 christos saved_dabr_value = 0;
2164 1.1 christos ALL_LWPS (lp)
2165 1.1 christos if (ptrace (PTRACE_SET_DEBUGREG, ptid_get_lwp (lp->ptid), 0,
2166 1.1 christos saved_dabr_value) < 0)
2167 1.1 christos return -1;
2168 1.1 christos
2169 1.1 christos ret = 0;
2170 1.1 christos }
2171 1.1 christos
2172 1.1 christos return ret;
2173 1.1 christos }
2174 1.1 christos
2175 1.1 christos static void
2176 1.1 christos ppc_linux_new_thread (struct lwp_info *lp)
2177 1.1 christos {
2178 1.1 christos int tid = ptid_get_lwp (lp->ptid);
2179 1.1 christos
2180 1.1 christos if (have_ptrace_hwdebug_interface ())
2181 1.1 christos {
2182 1.1 christos int i;
2183 1.1 christos struct thread_points *p;
2184 1.1 christos struct hw_break_tuple *hw_breaks;
2185 1.1 christos
2186 1.1 christos if (VEC_empty (thread_points_p, ppc_threads))
2187 1.1 christos return;
2188 1.1 christos
2189 1.1 christos /* Get a list of breakpoints from any thread. */
2190 1.1 christos p = VEC_last (thread_points_p, ppc_threads);
2191 1.1 christos hw_breaks = p->hw_breaks;
2192 1.1 christos
2193 1.1 christos /* Copy that thread's breakpoints and watchpoints to the new thread. */
2194 1.1 christos for (i = 0; i < max_slots_number; i++)
2195 1.1 christos if (hw_breaks[i].hw_break)
2196 1.1 christos {
2197 1.1 christos /* Older kernels did not make new threads inherit their parent
2198 1.1 christos thread's debug state, so we always clear the slot and replicate
2199 1.1 christos the debug state ourselves, ensuring compatibility with all
2200 1.1 christos kernels. */
2201 1.1 christos
2202 1.1 christos /* The ppc debug resource accounting is done through "slots".
2203 1.1 christos Ask the kernel the deallocate this specific *point's slot. */
2204 1.1 christos ptrace (PPC_PTRACE_DELHWDEBUG, tid, 0, hw_breaks[i].slot);
2205 1.1 christos
2206 1.1 christos hwdebug_insert_point (hw_breaks[i].hw_break, tid);
2207 1.1 christos }
2208 1.1 christos }
2209 1.1 christos else
2210 1.1 christos ptrace (PTRACE_SET_DEBUGREG, tid, 0, saved_dabr_value);
2211 1.1 christos }
2212 1.1 christos
2213 1.1 christos static void
2214 1.1 christos ppc_linux_thread_exit (struct thread_info *tp, int silent)
2215 1.1 christos {
2216 1.1 christos int i;
2217 1.1 christos int tid = ptid_get_lwp (tp->ptid);
2218 1.1 christos struct hw_break_tuple *hw_breaks;
2219 1.1 christos struct thread_points *t = NULL, *p;
2220 1.1 christos
2221 1.1 christos if (!have_ptrace_hwdebug_interface ())
2222 1.1 christos return;
2223 1.1 christos
2224 1.1 christos for (i = 0; VEC_iterate (thread_points_p, ppc_threads, i, p); i++)
2225 1.1 christos if (p->tid == tid)
2226 1.1 christos {
2227 1.1 christos t = p;
2228 1.1 christos break;
2229 1.1 christos }
2230 1.1 christos
2231 1.1 christos if (t == NULL)
2232 1.1 christos return;
2233 1.1 christos
2234 1.1 christos VEC_unordered_remove (thread_points_p, ppc_threads, i);
2235 1.1 christos
2236 1.1 christos hw_breaks = t->hw_breaks;
2237 1.1 christos
2238 1.1 christos for (i = 0; i < max_slots_number; i++)
2239 1.1 christos if (hw_breaks[i].hw_break)
2240 1.1 christos xfree (hw_breaks[i].hw_break);
2241 1.1 christos
2242 1.1 christos xfree (t->hw_breaks);
2243 1.1 christos xfree (t);
2244 1.1 christos }
2245 1.1 christos
2246 1.1 christos static int
2247 1.1 christos ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
2248 1.1 christos {
2249 1.1 christos siginfo_t siginfo;
2250 1.1 christos
2251 1.1 christos if (!linux_nat_get_siginfo (inferior_ptid, &siginfo))
2252 1.1 christos return 0;
2253 1.1 christos
2254 1.1 christos if (siginfo.si_signo != SIGTRAP
2255 1.1 christos || (siginfo.si_code & 0xffff) != 0x0004 /* TRAP_HWBKPT */)
2256 1.1 christos return 0;
2257 1.1 christos
2258 1.1 christos if (have_ptrace_hwdebug_interface ())
2259 1.1 christos {
2260 1.1 christos int i;
2261 1.1 christos struct thread_points *t;
2262 1.1 christos struct hw_break_tuple *hw_breaks;
2263 1.1 christos /* The index (or slot) of the *point is passed in the si_errno field. */
2264 1.1 christos int slot = siginfo.si_errno;
2265 1.1 christos
2266 1.1 christos t = hwdebug_find_thread_points_by_tid (ptid_get_lwp (inferior_ptid), 0);
2267 1.1 christos
2268 1.1 christos /* Find out if this *point is a hardware breakpoint.
2269 1.1 christos If so, we should return 0. */
2270 1.1 christos if (t)
2271 1.1 christos {
2272 1.1 christos hw_breaks = t->hw_breaks;
2273 1.1 christos for (i = 0; i < max_slots_number; i++)
2274 1.1 christos if (hw_breaks[i].hw_break && hw_breaks[i].slot == slot
2275 1.1 christos && hw_breaks[i].hw_break->trigger_type
2276 1.1 christos == PPC_BREAKPOINT_TRIGGER_EXECUTE)
2277 1.1 christos return 0;
2278 1.1 christos }
2279 1.1 christos }
2280 1.1 christos
2281 1.1 christos *addr_p = (CORE_ADDR) (uintptr_t) siginfo.si_addr;
2282 1.1 christos return 1;
2283 1.1 christos }
2284 1.1 christos
2285 1.1 christos static int
2286 1.1 christos ppc_linux_stopped_by_watchpoint (void)
2287 1.1 christos {
2288 1.1 christos CORE_ADDR addr;
2289 1.1 christos return ppc_linux_stopped_data_address (¤t_target, &addr);
2290 1.1 christos }
2291 1.1 christos
2292 1.1 christos static int
2293 1.1 christos ppc_linux_watchpoint_addr_within_range (struct target_ops *target,
2294 1.1 christos CORE_ADDR addr,
2295 1.1 christos CORE_ADDR start, int length)
2296 1.1 christos {
2297 1.1 christos int mask;
2298 1.1 christos
2299 1.1 christos if (have_ptrace_hwdebug_interface ()
2300 1.1 christos && ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
2301 1.1 christos return start <= addr && start + length >= addr;
2302 1.1 christos else if (ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
2303 1.1 christos mask = 3;
2304 1.1 christos else
2305 1.1 christos mask = 7;
2306 1.1 christos
2307 1.1 christos addr &= ~mask;
2308 1.1 christos
2309 1.1 christos /* Check whether [start, start+length-1] intersects [addr, addr+mask]. */
2310 1.1 christos return start <= addr + mask && start + length - 1 >= addr;
2311 1.1 christos }
2312 1.1 christos
2313 1.1 christos /* Return the number of registers needed for a masked hardware watchpoint. */
2314 1.1 christos
2315 1.1 christos static int
2316 1.1 christos ppc_linux_masked_watch_num_registers (struct target_ops *target,
2317 1.1 christos CORE_ADDR addr, CORE_ADDR mask)
2318 1.1 christos {
2319 1.1 christos if (!have_ptrace_hwdebug_interface ()
2320 1.1 christos || (hwdebug_info.features & PPC_DEBUG_FEATURE_DATA_BP_MASK) == 0)
2321 1.1 christos return -1;
2322 1.1 christos else if ((mask & 0xC0000000) != 0xC0000000)
2323 1.1 christos {
2324 1.1 christos warning (_("The given mask covers kernel address space "
2325 1.1 christos "and cannot be used.\n"));
2326 1.1 christos
2327 1.1 christos return -2;
2328 1.1 christos }
2329 1.1 christos else
2330 1.1 christos return 2;
2331 1.1 christos }
2332 1.1 christos
2333 1.1 christos static void
2334 1.1 christos ppc_linux_store_inferior_registers (struct target_ops *ops,
2335 1.1 christos struct regcache *regcache, int regno)
2336 1.1 christos {
2337 1.1 christos /* Overload thread id onto process id. */
2338 1.1 christos int tid = ptid_get_lwp (inferior_ptid);
2339 1.1 christos
2340 1.1 christos /* No thread id, just use process id. */
2341 1.1 christos if (tid == 0)
2342 1.1 christos tid = ptid_get_pid (inferior_ptid);
2343 1.1 christos
2344 1.1 christos if (regno >= 0)
2345 1.1 christos store_register (regcache, tid, regno);
2346 1.1 christos else
2347 1.1 christos store_ppc_registers (regcache, tid);
2348 1.1 christos }
2349 1.1 christos
2350 1.1 christos /* Functions for transferring registers between a gregset_t or fpregset_t
2351 1.1 christos (see sys/ucontext.h) and gdb's regcache. The word size is that used
2352 1.1 christos by the ptrace interface, not the current program's ABI. Eg. if a
2353 1.1 christos powerpc64-linux gdb is being used to debug a powerpc32-linux app, we
2354 1.1 christos read or write 64-bit gregsets. This is to suit the host libthread_db. */
2355 1.1 christos
2356 1.1 christos void
2357 1.1 christos supply_gregset (struct regcache *regcache, const gdb_gregset_t *gregsetp)
2358 1.1 christos {
2359 1.1 christos const struct regset *regset = ppc_linux_gregset (sizeof (long));
2360 1.1 christos
2361 1.1 christos ppc_supply_gregset (regset, regcache, -1, gregsetp, sizeof (*gregsetp));
2362 1.1 christos }
2363 1.1 christos
2364 1.1 christos void
2365 1.1 christos fill_gregset (const struct regcache *regcache,
2366 1.1 christos gdb_gregset_t *gregsetp, int regno)
2367 1.1 christos {
2368 1.1 christos const struct regset *regset = ppc_linux_gregset (sizeof (long));
2369 1.1 christos
2370 1.1 christos if (regno == -1)
2371 1.1 christos memset (gregsetp, 0, sizeof (*gregsetp));
2372 1.1 christos ppc_collect_gregset (regset, regcache, regno, gregsetp, sizeof (*gregsetp));
2373 1.1 christos }
2374 1.1 christos
2375 1.1 christos void
2376 1.1 christos supply_fpregset (struct regcache *regcache, const gdb_fpregset_t * fpregsetp)
2377 1.1 christos {
2378 1.1 christos const struct regset *regset = ppc_linux_fpregset ();
2379 1.1 christos
2380 1.1 christos ppc_supply_fpregset (regset, regcache, -1,
2381 1.1 christos fpregsetp, sizeof (*fpregsetp));
2382 1.1 christos }
2383 1.1 christos
2384 1.1 christos void
2385 1.1 christos fill_fpregset (const struct regcache *regcache,
2386 1.1 christos gdb_fpregset_t *fpregsetp, int regno)
2387 1.1 christos {
2388 1.1 christos const struct regset *regset = ppc_linux_fpregset ();
2389 1.1 christos
2390 1.1 christos ppc_collect_fpregset (regset, regcache, regno,
2391 1.1 christos fpregsetp, sizeof (*fpregsetp));
2392 1.1 christos }
2393 1.1 christos
2394 1.1 christos static int
2395 1.1 christos ppc_linux_target_wordsize (void)
2396 1.1 christos {
2397 1.1 christos int wordsize = 4;
2398 1.1 christos
2399 1.1 christos /* Check for 64-bit inferior process. This is the case when the host is
2400 1.1 christos 64-bit, and in addition the top bit of the MSR register is set. */
2401 1.1 christos #ifdef __powerpc64__
2402 1.1 christos long msr;
2403 1.1 christos
2404 1.1 christos int tid = ptid_get_lwp (inferior_ptid);
2405 1.1 christos if (tid == 0)
2406 1.1 christos tid = ptid_get_pid (inferior_ptid);
2407 1.1 christos
2408 1.1 christos errno = 0;
2409 1.1 christos msr = (long) ptrace (PTRACE_PEEKUSER, tid, PT_MSR * 8, 0);
2410 1.1 christos if (errno == 0 && msr < 0)
2411 1.1 christos wordsize = 8;
2412 1.1 christos #endif
2413 1.1 christos
2414 1.1 christos return wordsize;
2415 1.1 christos }
2416 1.1 christos
2417 1.1 christos static int
2418 1.1 christos ppc_linux_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
2419 1.1 christos gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
2420 1.1 christos {
2421 1.1 christos int sizeof_auxv_field = ppc_linux_target_wordsize ();
2422 1.1 christos enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ());
2423 1.1 christos gdb_byte *ptr = *readptr;
2424 1.1 christos
2425 1.1 christos if (endptr == ptr)
2426 1.1 christos return 0;
2427 1.1 christos
2428 1.1 christos if (endptr - ptr < sizeof_auxv_field * 2)
2429 1.1 christos return -1;
2430 1.1 christos
2431 1.1 christos *typep = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
2432 1.1 christos ptr += sizeof_auxv_field;
2433 1.1 christos *valp = extract_unsigned_integer (ptr, sizeof_auxv_field, byte_order);
2434 1.1 christos ptr += sizeof_auxv_field;
2435 1.1 christos
2436 1.1 christos *readptr = ptr;
2437 1.1 christos return 1;
2438 1.1 christos }
2439 1.1 christos
2440 1.1 christos static const struct target_desc *
2441 1.1 christos ppc_linux_read_description (struct target_ops *ops)
2442 1.1 christos {
2443 1.1 christos int altivec = 0;
2444 1.1 christos int vsx = 0;
2445 1.1 christos int isa205 = 0;
2446 1.1 christos int cell = 0;
2447 1.1 christos
2448 1.1 christos int tid = ptid_get_lwp (inferior_ptid);
2449 1.1 christos if (tid == 0)
2450 1.1 christos tid = ptid_get_pid (inferior_ptid);
2451 1.1 christos
2452 1.1 christos if (have_ptrace_getsetevrregs)
2453 1.1 christos {
2454 1.1 christos struct gdb_evrregset_t evrregset;
2455 1.1 christos
2456 1.1 christos if (ptrace (PTRACE_GETEVRREGS, tid, 0, &evrregset) >= 0)
2457 1.1 christos return tdesc_powerpc_e500l;
2458 1.1 christos
2459 1.1 christos /* EIO means that the PTRACE_GETEVRREGS request isn't supported.
2460 1.1 christos Anything else needs to be reported. */
2461 1.1 christos else if (errno != EIO)
2462 1.1 christos perror_with_name (_("Unable to fetch SPE registers"));
2463 1.1 christos }
2464 1.1 christos
2465 1.1 christos if (have_ptrace_getsetvsxregs)
2466 1.1 christos {
2467 1.1 christos gdb_vsxregset_t vsxregset;
2468 1.1 christos
2469 1.1 christos if (ptrace (PTRACE_GETVSXREGS, tid, 0, &vsxregset) >= 0)
2470 1.1 christos vsx = 1;
2471 1.1 christos
2472 1.1 christos /* EIO means that the PTRACE_GETVSXREGS request isn't supported.
2473 1.1 christos Anything else needs to be reported. */
2474 1.1 christos else if (errno != EIO)
2475 1.1 christos perror_with_name (_("Unable to fetch VSX registers"));
2476 1.1 christos }
2477 1.1 christos
2478 1.1 christos if (have_ptrace_getvrregs)
2479 1.1 christos {
2480 1.1 christos gdb_vrregset_t vrregset;
2481 1.1 christos
2482 1.1 christos if (ptrace (PTRACE_GETVRREGS, tid, 0, &vrregset) >= 0)
2483 1.1 christos altivec = 1;
2484 1.1 christos
2485 1.1 christos /* EIO means that the PTRACE_GETVRREGS request isn't supported.
2486 1.1 christos Anything else needs to be reported. */
2487 1.1 christos else if (errno != EIO)
2488 1.1 christos perror_with_name (_("Unable to fetch AltiVec registers"));
2489 1.1 christos }
2490 1.1 christos
2491 1.1 christos /* Power ISA 2.05 (implemented by Power 6 and newer processors) increases
2492 1.1 christos the FPSCR from 32 bits to 64 bits. Even though Power 7 supports this
2493 1.1 christos ISA version, it doesn't have PPC_FEATURE_ARCH_2_05 set, only
2494 1.1 christos PPC_FEATURE_ARCH_2_06. Since for now the only bits used in the higher
2495 1.1 christos half of the register are for Decimal Floating Point, we check if that
2496 1.1 christos feature is available to decide the size of the FPSCR. */
2497 1.1 christos if (ppc_linux_get_hwcap () & PPC_FEATURE_HAS_DFP)
2498 1.1 christos isa205 = 1;
2499 1.1 christos
2500 1.1 christos if (ppc_linux_get_hwcap () & PPC_FEATURE_CELL)
2501 1.1 christos cell = 1;
2502 1.1 christos
2503 1.1 christos if (ppc_linux_target_wordsize () == 8)
2504 1.1 christos {
2505 1.1 christos if (cell)
2506 1.1 christos return tdesc_powerpc_cell64l;
2507 1.1 christos else if (vsx)
2508 1.1 christos return isa205? tdesc_powerpc_isa205_vsx64l : tdesc_powerpc_vsx64l;
2509 1.1 christos else if (altivec)
2510 1.1 christos return isa205
2511 1.1 christos ? tdesc_powerpc_isa205_altivec64l : tdesc_powerpc_altivec64l;
2512 1.1 christos
2513 1.1 christos return isa205? tdesc_powerpc_isa205_64l : tdesc_powerpc_64l;
2514 1.1 christos }
2515 1.1 christos
2516 1.1 christos if (cell)
2517 1.1 christos return tdesc_powerpc_cell32l;
2518 1.1 christos else if (vsx)
2519 1.1 christos return isa205? tdesc_powerpc_isa205_vsx32l : tdesc_powerpc_vsx32l;
2520 1.1 christos else if (altivec)
2521 1.1 christos return isa205? tdesc_powerpc_isa205_altivec32l : tdesc_powerpc_altivec32l;
2522 1.1 christos
2523 1.1 christos return isa205? tdesc_powerpc_isa205_32l : tdesc_powerpc_32l;
2524 1.1 christos }
2525 1.1 christos
2526 1.1 christos void _initialize_ppc_linux_nat (void);
2527 1.1 christos
2528 1.1 christos void
2529 1.1 christos _initialize_ppc_linux_nat (void)
2530 1.1 christos {
2531 1.1 christos struct target_ops *t;
2532 1.1 christos
2533 1.1 christos /* Fill in the generic GNU/Linux methods. */
2534 1.1 christos t = linux_target ();
2535 1.1 christos
2536 1.1 christos /* Add our register access methods. */
2537 1.1 christos t->to_fetch_registers = ppc_linux_fetch_inferior_registers;
2538 1.1 christos t->to_store_registers = ppc_linux_store_inferior_registers;
2539 1.1 christos
2540 1.1 christos /* Add our breakpoint/watchpoint methods. */
2541 1.1 christos t->to_can_use_hw_breakpoint = ppc_linux_can_use_hw_breakpoint;
2542 1.1 christos t->to_insert_hw_breakpoint = ppc_linux_insert_hw_breakpoint;
2543 1.1 christos t->to_remove_hw_breakpoint = ppc_linux_remove_hw_breakpoint;
2544 1.1 christos t->to_region_ok_for_hw_watchpoint = ppc_linux_region_ok_for_hw_watchpoint;
2545 1.1 christos t->to_insert_watchpoint = ppc_linux_insert_watchpoint;
2546 1.1 christos t->to_remove_watchpoint = ppc_linux_remove_watchpoint;
2547 1.1 christos t->to_insert_mask_watchpoint = ppc_linux_insert_mask_watchpoint;
2548 1.1 christos t->to_remove_mask_watchpoint = ppc_linux_remove_mask_watchpoint;
2549 1.1 christos t->to_stopped_by_watchpoint = ppc_linux_stopped_by_watchpoint;
2550 1.1 christos t->to_stopped_data_address = ppc_linux_stopped_data_address;
2551 1.1 christos t->to_watchpoint_addr_within_range = ppc_linux_watchpoint_addr_within_range;
2552 1.1 christos t->to_can_accel_watchpoint_condition
2553 1.1 christos = ppc_linux_can_accel_watchpoint_condition;
2554 1.1 christos t->to_masked_watch_num_registers = ppc_linux_masked_watch_num_registers;
2555 1.1 christos t->to_ranged_break_num_registers = ppc_linux_ranged_break_num_registers;
2556 1.1 christos
2557 1.1 christos t->to_read_description = ppc_linux_read_description;
2558 1.1 christos t->to_auxv_parse = ppc_linux_auxv_parse;
2559 1.1 christos
2560 1.1 christos observer_attach_thread_exit (ppc_linux_thread_exit);
2561 1.1 christos
2562 1.1 christos /* Register the target. */
2563 1.1 christos linux_nat_add_target (t);
2564 1.1 christos linux_nat_set_new_thread (t, ppc_linux_new_thread);
2565 1.1 christos }
2566