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