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