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