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