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