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