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