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