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