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