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