Home | History | Annotate | Line # | Download | only in gdb
arm-linux-tdep.c revision 1.6
      1  1.1  christos /* GNU/Linux on ARM target support.
      2  1.1  christos 
      3  1.6  christos    Copyright (C) 1999-2016 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 "target.h"
     22  1.1  christos #include "value.h"
     23  1.1  christos #include "gdbtypes.h"
     24  1.1  christos #include "floatformat.h"
     25  1.1  christos #include "gdbcore.h"
     26  1.1  christos #include "frame.h"
     27  1.1  christos #include "regcache.h"
     28  1.1  christos #include "doublest.h"
     29  1.1  christos #include "solib-svr4.h"
     30  1.1  christos #include "osabi.h"
     31  1.1  christos #include "regset.h"
     32  1.1  christos #include "trad-frame.h"
     33  1.1  christos #include "tramp-frame.h"
     34  1.1  christos #include "breakpoint.h"
     35  1.1  christos #include "auxv.h"
     36  1.1  christos #include "xml-syscall.h"
     37  1.1  christos 
     38  1.6  christos #include "arch/arm.h"
     39  1.6  christos #include "arch/arm-get-next-pcs.h"
     40  1.6  christos #include "arch/arm-linux.h"
     41  1.1  christos #include "arm-tdep.h"
     42  1.1  christos #include "arm-linux-tdep.h"
     43  1.1  christos #include "linux-tdep.h"
     44  1.1  christos #include "glibc-tdep.h"
     45  1.1  christos #include "arch-utils.h"
     46  1.1  christos #include "inferior.h"
     47  1.3  christos #include "infrun.h"
     48  1.1  christos #include "gdbthread.h"
     49  1.1  christos #include "symfile.h"
     50  1.1  christos 
     51  1.3  christos #include "record-full.h"
     52  1.3  christos #include "linux-record.h"
     53  1.3  christos 
     54  1.1  christos #include "cli/cli-utils.h"
     55  1.1  christos #include "stap-probe.h"
     56  1.1  christos #include "parser-defs.h"
     57  1.1  christos #include "user-regs.h"
     58  1.1  christos #include <ctype.h>
     59  1.1  christos #include "elf/common.h"
     60  1.1  christos extern int arm_apcs_32;
     61  1.1  christos 
     62  1.1  christos /* Under ARM GNU/Linux the traditional way of performing a breakpoint
     63  1.1  christos    is to execute a particular software interrupt, rather than use a
     64  1.1  christos    particular undefined instruction to provoke a trap.  Upon exection
     65  1.1  christos    of the software interrupt the kernel stops the inferior with a
     66  1.1  christos    SIGTRAP, and wakes the debugger.  */
     67  1.1  christos 
     68  1.1  christos static const gdb_byte arm_linux_arm_le_breakpoint[] = { 0x01, 0x00, 0x9f, 0xef };
     69  1.1  christos 
     70  1.1  christos static const gdb_byte arm_linux_arm_be_breakpoint[] = { 0xef, 0x9f, 0x00, 0x01 };
     71  1.1  christos 
     72  1.1  christos /* However, the EABI syscall interface (new in Nov. 2005) does not look at
     73  1.1  christos    the operand of the swi if old-ABI compatibility is disabled.  Therefore,
     74  1.1  christos    use an undefined instruction instead.  This is supported as of kernel
     75  1.1  christos    version 2.5.70 (May 2003), so should be a safe assumption for EABI
     76  1.1  christos    binaries.  */
     77  1.1  christos 
     78  1.1  christos static const gdb_byte eabi_linux_arm_le_breakpoint[] = { 0xf0, 0x01, 0xf0, 0xe7 };
     79  1.1  christos 
     80  1.1  christos static const gdb_byte eabi_linux_arm_be_breakpoint[] = { 0xe7, 0xf0, 0x01, 0xf0 };
     81  1.1  christos 
     82  1.1  christos /* All the kernels which support Thumb support using a specific undefined
     83  1.1  christos    instruction for the Thumb breakpoint.  */
     84  1.1  christos 
     85  1.1  christos static const gdb_byte arm_linux_thumb_be_breakpoint[] = {0xde, 0x01};
     86  1.1  christos 
     87  1.1  christos static const gdb_byte arm_linux_thumb_le_breakpoint[] = {0x01, 0xde};
     88  1.1  christos 
     89  1.1  christos /* Because the 16-bit Thumb breakpoint is affected by Thumb-2 IT blocks,
     90  1.1  christos    we must use a length-appropriate breakpoint for 32-bit Thumb
     91  1.1  christos    instructions.  See also thumb_get_next_pc.  */
     92  1.1  christos 
     93  1.1  christos static const gdb_byte arm_linux_thumb2_be_breakpoint[] = { 0xf7, 0xf0, 0xa0, 0x00 };
     94  1.1  christos 
     95  1.1  christos static const gdb_byte arm_linux_thumb2_le_breakpoint[] = { 0xf0, 0xf7, 0x00, 0xa0 };
     96  1.1  christos 
     97  1.1  christos /* Description of the longjmp buffer.  The buffer is treated as an array of
     98  1.1  christos    elements of size ARM_LINUX_JB_ELEMENT_SIZE.
     99  1.1  christos 
    100  1.1  christos    The location of saved registers in this buffer (in particular the PC
    101  1.1  christos    to use after longjmp is called) varies depending on the ABI (in
    102  1.1  christos    particular the FP model) and also (possibly) the C Library.
    103  1.1  christos 
    104  1.1  christos    For glibc, eglibc, and uclibc the following holds:  If the FP model is
    105  1.1  christos    SoftVFP or VFP (which implies EABI) then the PC is at offset 9 in the
    106  1.1  christos    buffer.  This is also true for the SoftFPA model.  However, for the FPA
    107  1.1  christos    model the PC is at offset 21 in the buffer.  */
    108  1.1  christos #define ARM_LINUX_JB_ELEMENT_SIZE	INT_REGISTER_SIZE
    109  1.1  christos #define ARM_LINUX_JB_PC_FPA		21
    110  1.1  christos #define ARM_LINUX_JB_PC_EABI		9
    111  1.1  christos 
    112  1.1  christos /*
    113  1.1  christos    Dynamic Linking on ARM GNU/Linux
    114  1.1  christos    --------------------------------
    115  1.1  christos 
    116  1.1  christos    Note: PLT = procedure linkage table
    117  1.1  christos    GOT = global offset table
    118  1.1  christos 
    119  1.1  christos    As much as possible, ELF dynamic linking defers the resolution of
    120  1.1  christos    jump/call addresses until the last minute.  The technique used is
    121  1.1  christos    inspired by the i386 ELF design, and is based on the following
    122  1.1  christos    constraints.
    123  1.1  christos 
    124  1.1  christos    1) The calling technique should not force a change in the assembly
    125  1.1  christos    code produced for apps; it MAY cause changes in the way assembly
    126  1.1  christos    code is produced for position independent code (i.e. shared
    127  1.1  christos    libraries).
    128  1.1  christos 
    129  1.1  christos    2) The technique must be such that all executable areas must not be
    130  1.1  christos    modified; and any modified areas must not be executed.
    131  1.1  christos 
    132  1.1  christos    To do this, there are three steps involved in a typical jump:
    133  1.1  christos 
    134  1.1  christos    1) in the code
    135  1.1  christos    2) through the PLT
    136  1.1  christos    3) using a pointer from the GOT
    137  1.1  christos 
    138  1.1  christos    When the executable or library is first loaded, each GOT entry is
    139  1.1  christos    initialized to point to the code which implements dynamic name
    140  1.1  christos    resolution and code finding.  This is normally a function in the
    141  1.1  christos    program interpreter (on ARM GNU/Linux this is usually
    142  1.1  christos    ld-linux.so.2, but it does not have to be).  On the first
    143  1.1  christos    invocation, the function is located and the GOT entry is replaced
    144  1.1  christos    with the real function address.  Subsequent calls go through steps
    145  1.1  christos    1, 2 and 3 and end up calling the real code.
    146  1.1  christos 
    147  1.1  christos    1) In the code:
    148  1.1  christos 
    149  1.1  christos    b    function_call
    150  1.1  christos    bl   function_call
    151  1.1  christos 
    152  1.1  christos    This is typical ARM code using the 26 bit relative branch or branch
    153  1.1  christos    and link instructions.  The target of the instruction
    154  1.1  christos    (function_call is usually the address of the function to be called.
    155  1.1  christos    In position independent code, the target of the instruction is
    156  1.1  christos    actually an entry in the PLT when calling functions in a shared
    157  1.1  christos    library.  Note that this call is identical to a normal function
    158  1.1  christos    call, only the target differs.
    159  1.1  christos 
    160  1.1  christos    2) In the PLT:
    161  1.1  christos 
    162  1.1  christos    The PLT is a synthetic area, created by the linker.  It exists in
    163  1.1  christos    both executables and libraries.  It is an array of stubs, one per
    164  1.1  christos    imported function call.  It looks like this:
    165  1.1  christos 
    166  1.1  christos    PLT[0]:
    167  1.1  christos    str     lr, [sp, #-4]!       @push the return address (lr)
    168  1.1  christos    ldr     lr, [pc, #16]   @load from 6 words ahead
    169  1.1  christos    add     lr, pc, lr      @form an address for GOT[0]
    170  1.1  christos    ldr     pc, [lr, #8]!   @jump to the contents of that addr
    171  1.1  christos 
    172  1.1  christos    The return address (lr) is pushed on the stack and used for
    173  1.1  christos    calculations.  The load on the second line loads the lr with
    174  1.1  christos    &GOT[3] - . - 20.  The addition on the third leaves:
    175  1.1  christos 
    176  1.1  christos    lr = (&GOT[3] - . - 20) + (. + 8)
    177  1.1  christos    lr = (&GOT[3] - 12)
    178  1.1  christos    lr = &GOT[0]
    179  1.1  christos 
    180  1.1  christos    On the fourth line, the pc and lr are both updated, so that:
    181  1.1  christos 
    182  1.1  christos    pc = GOT[2]
    183  1.1  christos    lr = &GOT[0] + 8
    184  1.1  christos    = &GOT[2]
    185  1.1  christos 
    186  1.1  christos    NOTE: PLT[0] borrows an offset .word from PLT[1].  This is a little
    187  1.1  christos    "tight", but allows us to keep all the PLT entries the same size.
    188  1.1  christos 
    189  1.1  christos    PLT[n+1]:
    190  1.1  christos    ldr     ip, [pc, #4]    @load offset from gotoff
    191  1.1  christos    add     ip, pc, ip      @add the offset to the pc
    192  1.1  christos    ldr     pc, [ip]        @jump to that address
    193  1.1  christos    gotoff: .word   GOT[n+3] - .
    194  1.1  christos 
    195  1.1  christos    The load on the first line, gets an offset from the fourth word of
    196  1.1  christos    the PLT entry.  The add on the second line makes ip = &GOT[n+3],
    197  1.1  christos    which contains either a pointer to PLT[0] (the fixup trampoline) or
    198  1.1  christos    a pointer to the actual code.
    199  1.1  christos 
    200  1.1  christos    3) In the GOT:
    201  1.1  christos 
    202  1.1  christos    The GOT contains helper pointers for both code (PLT) fixups and
    203  1.1  christos    data fixups.  The first 3 entries of the GOT are special.  The next
    204  1.1  christos    M entries (where M is the number of entries in the PLT) belong to
    205  1.1  christos    the PLT fixups.  The next D (all remaining) entries belong to
    206  1.1  christos    various data fixups.  The actual size of the GOT is 3 + M + D.
    207  1.1  christos 
    208  1.1  christos    The GOT is also a synthetic area, created by the linker.  It exists
    209  1.1  christos    in both executables and libraries.  When the GOT is first
    210  1.1  christos    initialized , all the GOT entries relating to PLT fixups are
    211  1.1  christos    pointing to code back at PLT[0].
    212  1.1  christos 
    213  1.1  christos    The special entries in the GOT are:
    214  1.1  christos 
    215  1.1  christos    GOT[0] = linked list pointer used by the dynamic loader
    216  1.1  christos    GOT[1] = pointer to the reloc table for this module
    217  1.1  christos    GOT[2] = pointer to the fixup/resolver code
    218  1.1  christos 
    219  1.1  christos    The first invocation of function call comes through and uses the
    220  1.1  christos    fixup/resolver code.  On the entry to the fixup/resolver code:
    221  1.1  christos 
    222  1.1  christos    ip = &GOT[n+3]
    223  1.1  christos    lr = &GOT[2]
    224  1.1  christos    stack[0] = return address (lr) of the function call
    225  1.1  christos    [r0, r1, r2, r3] are still the arguments to the function call
    226  1.1  christos 
    227  1.1  christos    This is enough information for the fixup/resolver code to work
    228  1.1  christos    with.  Before the fixup/resolver code returns, it actually calls
    229  1.1  christos    the requested function and repairs &GOT[n+3].  */
    230  1.1  christos 
    231  1.1  christos /* The constants below were determined by examining the following files
    232  1.1  christos    in the linux kernel sources:
    233  1.1  christos 
    234  1.1  christos       arch/arm/kernel/signal.c
    235  1.1  christos 	  - see SWI_SYS_SIGRETURN and SWI_SYS_RT_SIGRETURN
    236  1.1  christos       include/asm-arm/unistd.h
    237  1.1  christos 	  - see __NR_sigreturn, __NR_rt_sigreturn, and __NR_SYSCALL_BASE */
    238  1.1  christos 
    239  1.1  christos #define ARM_LINUX_SIGRETURN_INSTR	0xef900077
    240  1.1  christos #define ARM_LINUX_RT_SIGRETURN_INSTR	0xef9000ad
    241  1.1  christos 
    242  1.1  christos /* For ARM EABI, the syscall number is not in the SWI instruction
    243  1.1  christos    (instead it is loaded into r7).  We recognize the pattern that
    244  1.1  christos    glibc uses...  alternatively, we could arrange to do this by
    245  1.1  christos    function name, but they are not always exported.  */
    246  1.1  christos #define ARM_SET_R7_SIGRETURN		0xe3a07077
    247  1.1  christos #define ARM_SET_R7_RT_SIGRETURN		0xe3a070ad
    248  1.1  christos #define ARM_EABI_SYSCALL		0xef000000
    249  1.1  christos 
    250  1.3  christos /* Equivalent patterns for Thumb2.  */
    251  1.3  christos #define THUMB2_SET_R7_SIGRETURN1	0xf04f
    252  1.3  christos #define THUMB2_SET_R7_SIGRETURN2	0x0777
    253  1.3  christos #define THUMB2_SET_R7_RT_SIGRETURN1	0xf04f
    254  1.3  christos #define THUMB2_SET_R7_RT_SIGRETURN2	0x07ad
    255  1.3  christos #define THUMB2_EABI_SYSCALL		0xdf00
    256  1.3  christos 
    257  1.1  christos /* OABI syscall restart trampoline, used for EABI executables too
    258  1.1  christos    whenever OABI support has been enabled in the kernel.  */
    259  1.1  christos #define ARM_OABI_SYSCALL_RESTART_SYSCALL 0xef900000
    260  1.1  christos #define ARM_LDR_PC_SP_12		0xe49df00c
    261  1.1  christos #define ARM_LDR_PC_SP_4			0xe49df004
    262  1.1  christos 
    263  1.6  christos /* Syscall number for sigreturn.  */
    264  1.6  christos #define ARM_SIGRETURN 119
    265  1.6  christos /* Syscall number for rt_sigreturn.  */
    266  1.6  christos #define ARM_RT_SIGRETURN 173
    267  1.6  christos 
    268  1.6  christos static CORE_ADDR
    269  1.6  christos   arm_linux_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
    270  1.6  christos 
    271  1.6  christos /* Operation function pointers for get_next_pcs.  */
    272  1.6  christos static struct arm_get_next_pcs_ops arm_linux_get_next_pcs_ops = {
    273  1.6  christos   arm_get_next_pcs_read_memory_unsigned_integer,
    274  1.6  christos   arm_linux_get_next_pcs_syscall_next_pc,
    275  1.6  christos   arm_get_next_pcs_addr_bits_remove,
    276  1.6  christos   arm_get_next_pcs_is_thumb,
    277  1.6  christos   arm_linux_get_next_pcs_fixup,
    278  1.6  christos };
    279  1.6  christos 
    280  1.1  christos static void
    281  1.1  christos arm_linux_sigtramp_cache (struct frame_info *this_frame,
    282  1.1  christos 			  struct trad_frame_cache *this_cache,
    283  1.1  christos 			  CORE_ADDR func, int regs_offset)
    284  1.1  christos {
    285  1.1  christos   CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
    286  1.1  christos   CORE_ADDR base = sp + regs_offset;
    287  1.1  christos   int i;
    288  1.1  christos 
    289  1.1  christos   for (i = 0; i < 16; i++)
    290  1.1  christos     trad_frame_set_reg_addr (this_cache, i, base + i * 4);
    291  1.1  christos 
    292  1.1  christos   trad_frame_set_reg_addr (this_cache, ARM_PS_REGNUM, base + 16 * 4);
    293  1.1  christos 
    294  1.1  christos   /* The VFP or iWMMXt registers may be saved on the stack, but there's
    295  1.1  christos      no reliable way to restore them (yet).  */
    296  1.1  christos 
    297  1.1  christos   /* Save a frame ID.  */
    298  1.1  christos   trad_frame_set_id (this_cache, frame_id_build (sp, func));
    299  1.1  christos }
    300  1.1  christos 
    301  1.6  christos /* See arm-linux.h for stack layout details.  */
    302  1.1  christos static void
    303  1.1  christos arm_linux_sigreturn_init (const struct tramp_frame *self,
    304  1.1  christos 			  struct frame_info *this_frame,
    305  1.1  christos 			  struct trad_frame_cache *this_cache,
    306  1.1  christos 			  CORE_ADDR func)
    307  1.1  christos {
    308  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (this_frame);
    309  1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    310  1.1  christos   CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
    311  1.1  christos   ULONGEST uc_flags = read_memory_unsigned_integer (sp, 4, byte_order);
    312  1.1  christos 
    313  1.1  christos   if (uc_flags == ARM_NEW_SIGFRAME_MAGIC)
    314  1.1  christos     arm_linux_sigtramp_cache (this_frame, this_cache, func,
    315  1.1  christos 			      ARM_UCONTEXT_SIGCONTEXT
    316  1.1  christos 			      + ARM_SIGCONTEXT_R0);
    317  1.1  christos   else
    318  1.1  christos     arm_linux_sigtramp_cache (this_frame, this_cache, func,
    319  1.1  christos 			      ARM_SIGCONTEXT_R0);
    320  1.1  christos }
    321  1.1  christos 
    322  1.1  christos static void
    323  1.1  christos arm_linux_rt_sigreturn_init (const struct tramp_frame *self,
    324  1.1  christos 			  struct frame_info *this_frame,
    325  1.1  christos 			  struct trad_frame_cache *this_cache,
    326  1.1  christos 			  CORE_ADDR func)
    327  1.1  christos {
    328  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (this_frame);
    329  1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    330  1.1  christos   CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
    331  1.1  christos   ULONGEST pinfo = read_memory_unsigned_integer (sp, 4, byte_order);
    332  1.1  christos 
    333  1.1  christos   if (pinfo == sp + ARM_OLD_RT_SIGFRAME_SIGINFO)
    334  1.1  christos     arm_linux_sigtramp_cache (this_frame, this_cache, func,
    335  1.1  christos 			      ARM_OLD_RT_SIGFRAME_UCONTEXT
    336  1.1  christos 			      + ARM_UCONTEXT_SIGCONTEXT
    337  1.1  christos 			      + ARM_SIGCONTEXT_R0);
    338  1.1  christos   else
    339  1.1  christos     arm_linux_sigtramp_cache (this_frame, this_cache, func,
    340  1.1  christos 			      ARM_NEW_RT_SIGFRAME_UCONTEXT
    341  1.1  christos 			      + ARM_UCONTEXT_SIGCONTEXT
    342  1.1  christos 			      + ARM_SIGCONTEXT_R0);
    343  1.1  christos }
    344  1.1  christos 
    345  1.1  christos static void
    346  1.1  christos arm_linux_restart_syscall_init (const struct tramp_frame *self,
    347  1.1  christos 				struct frame_info *this_frame,
    348  1.1  christos 				struct trad_frame_cache *this_cache,
    349  1.1  christos 				CORE_ADDR func)
    350  1.1  christos {
    351  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (this_frame);
    352  1.1  christos   CORE_ADDR sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
    353  1.1  christos   CORE_ADDR pc = get_frame_memory_unsigned (this_frame, sp, 4);
    354  1.1  christos   CORE_ADDR cpsr = get_frame_register_unsigned (this_frame, ARM_PS_REGNUM);
    355  1.1  christos   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
    356  1.1  christos   int sp_offset;
    357  1.1  christos 
    358  1.1  christos   /* There are two variants of this trampoline; with older kernels, the
    359  1.1  christos      stub is placed on the stack, while newer kernels use the stub from
    360  1.1  christos      the vector page.  They are identical except that the older version
    361  1.1  christos      increments SP by 12 (to skip stored PC and the stub itself), while
    362  1.1  christos      the newer version increments SP only by 4 (just the stored PC).  */
    363  1.1  christos   if (self->insn[1].bytes == ARM_LDR_PC_SP_4)
    364  1.1  christos     sp_offset = 4;
    365  1.1  christos   else
    366  1.1  christos     sp_offset = 12;
    367  1.1  christos 
    368  1.1  christos   /* Update Thumb bit in CPSR.  */
    369  1.1  christos   if (pc & 1)
    370  1.1  christos     cpsr |= t_bit;
    371  1.1  christos   else
    372  1.1  christos     cpsr &= ~t_bit;
    373  1.1  christos 
    374  1.1  christos   /* Remove Thumb bit from PC.  */
    375  1.1  christos   pc = gdbarch_addr_bits_remove (gdbarch, pc);
    376  1.1  christos 
    377  1.1  christos   /* Save previous register values.  */
    378  1.1  christos   trad_frame_set_reg_value (this_cache, ARM_SP_REGNUM, sp + sp_offset);
    379  1.1  christos   trad_frame_set_reg_value (this_cache, ARM_PC_REGNUM, pc);
    380  1.1  christos   trad_frame_set_reg_value (this_cache, ARM_PS_REGNUM, cpsr);
    381  1.1  christos 
    382  1.1  christos   /* Save a frame ID.  */
    383  1.1  christos   trad_frame_set_id (this_cache, frame_id_build (sp, func));
    384  1.1  christos }
    385  1.1  christos 
    386  1.1  christos static struct tramp_frame arm_linux_sigreturn_tramp_frame = {
    387  1.1  christos   SIGTRAMP_FRAME,
    388  1.1  christos   4,
    389  1.1  christos   {
    390  1.1  christos     { ARM_LINUX_SIGRETURN_INSTR, -1 },
    391  1.1  christos     { TRAMP_SENTINEL_INSN }
    392  1.1  christos   },
    393  1.1  christos   arm_linux_sigreturn_init
    394  1.1  christos };
    395  1.1  christos 
    396  1.1  christos static struct tramp_frame arm_linux_rt_sigreturn_tramp_frame = {
    397  1.1  christos   SIGTRAMP_FRAME,
    398  1.1  christos   4,
    399  1.1  christos   {
    400  1.1  christos     { ARM_LINUX_RT_SIGRETURN_INSTR, -1 },
    401  1.1  christos     { TRAMP_SENTINEL_INSN }
    402  1.1  christos   },
    403  1.1  christos   arm_linux_rt_sigreturn_init
    404  1.1  christos };
    405  1.1  christos 
    406  1.1  christos static struct tramp_frame arm_eabi_linux_sigreturn_tramp_frame = {
    407  1.1  christos   SIGTRAMP_FRAME,
    408  1.1  christos   4,
    409  1.1  christos   {
    410  1.1  christos     { ARM_SET_R7_SIGRETURN, -1 },
    411  1.1  christos     { ARM_EABI_SYSCALL, -1 },
    412  1.1  christos     { TRAMP_SENTINEL_INSN }
    413  1.1  christos   },
    414  1.1  christos   arm_linux_sigreturn_init
    415  1.1  christos };
    416  1.1  christos 
    417  1.1  christos static struct tramp_frame arm_eabi_linux_rt_sigreturn_tramp_frame = {
    418  1.1  christos   SIGTRAMP_FRAME,
    419  1.1  christos   4,
    420  1.1  christos   {
    421  1.1  christos     { ARM_SET_R7_RT_SIGRETURN, -1 },
    422  1.1  christos     { ARM_EABI_SYSCALL, -1 },
    423  1.1  christos     { TRAMP_SENTINEL_INSN }
    424  1.1  christos   },
    425  1.1  christos   arm_linux_rt_sigreturn_init
    426  1.1  christos };
    427  1.1  christos 
    428  1.3  christos static struct tramp_frame thumb2_eabi_linux_sigreturn_tramp_frame = {
    429  1.3  christos   SIGTRAMP_FRAME,
    430  1.3  christos   2,
    431  1.3  christos   {
    432  1.3  christos     { THUMB2_SET_R7_SIGRETURN1, -1 },
    433  1.3  christos     { THUMB2_SET_R7_SIGRETURN2, -1 },
    434  1.3  christos     { THUMB2_EABI_SYSCALL, -1 },
    435  1.3  christos     { TRAMP_SENTINEL_INSN }
    436  1.3  christos   },
    437  1.3  christos   arm_linux_sigreturn_init
    438  1.3  christos };
    439  1.3  christos 
    440  1.3  christos static struct tramp_frame thumb2_eabi_linux_rt_sigreturn_tramp_frame = {
    441  1.3  christos   SIGTRAMP_FRAME,
    442  1.3  christos   2,
    443  1.3  christos   {
    444  1.3  christos     { THUMB2_SET_R7_RT_SIGRETURN1, -1 },
    445  1.3  christos     { THUMB2_SET_R7_RT_SIGRETURN2, -1 },
    446  1.3  christos     { THUMB2_EABI_SYSCALL, -1 },
    447  1.3  christos     { TRAMP_SENTINEL_INSN }
    448  1.3  christos   },
    449  1.3  christos   arm_linux_rt_sigreturn_init
    450  1.3  christos };
    451  1.3  christos 
    452  1.1  christos static struct tramp_frame arm_linux_restart_syscall_tramp_frame = {
    453  1.1  christos   NORMAL_FRAME,
    454  1.1  christos   4,
    455  1.1  christos   {
    456  1.1  christos     { ARM_OABI_SYSCALL_RESTART_SYSCALL, -1 },
    457  1.1  christos     { ARM_LDR_PC_SP_12, -1 },
    458  1.1  christos     { TRAMP_SENTINEL_INSN }
    459  1.1  christos   },
    460  1.1  christos   arm_linux_restart_syscall_init
    461  1.1  christos };
    462  1.1  christos 
    463  1.1  christos static struct tramp_frame arm_kernel_linux_restart_syscall_tramp_frame = {
    464  1.1  christos   NORMAL_FRAME,
    465  1.1  christos   4,
    466  1.1  christos   {
    467  1.1  christos     { ARM_OABI_SYSCALL_RESTART_SYSCALL, -1 },
    468  1.1  christos     { ARM_LDR_PC_SP_4, -1 },
    469  1.1  christos     { TRAMP_SENTINEL_INSN }
    470  1.1  christos   },
    471  1.1  christos   arm_linux_restart_syscall_init
    472  1.1  christos };
    473  1.1  christos 
    474  1.1  christos /* Core file and register set support.  */
    475  1.1  christos 
    476  1.1  christos #define ARM_LINUX_SIZEOF_GREGSET (18 * INT_REGISTER_SIZE)
    477  1.1  christos 
    478  1.1  christos void
    479  1.1  christos arm_linux_supply_gregset (const struct regset *regset,
    480  1.1  christos 			  struct regcache *regcache,
    481  1.1  christos 			  int regnum, const void *gregs_buf, size_t len)
    482  1.1  christos {
    483  1.1  christos   struct gdbarch *gdbarch = get_regcache_arch (regcache);
    484  1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    485  1.6  christos   const gdb_byte *gregs = (const gdb_byte *) gregs_buf;
    486  1.1  christos   int regno;
    487  1.1  christos   CORE_ADDR reg_pc;
    488  1.1  christos   gdb_byte pc_buf[INT_REGISTER_SIZE];
    489  1.1  christos 
    490  1.1  christos   for (regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
    491  1.1  christos     if (regnum == -1 || regnum == regno)
    492  1.1  christos       regcache_raw_supply (regcache, regno,
    493  1.1  christos 			   gregs + INT_REGISTER_SIZE * regno);
    494  1.1  christos 
    495  1.1  christos   if (regnum == ARM_PS_REGNUM || regnum == -1)
    496  1.1  christos     {
    497  1.1  christos       if (arm_apcs_32)
    498  1.1  christos 	regcache_raw_supply (regcache, ARM_PS_REGNUM,
    499  1.1  christos 			     gregs + INT_REGISTER_SIZE * ARM_CPSR_GREGNUM);
    500  1.1  christos       else
    501  1.1  christos 	regcache_raw_supply (regcache, ARM_PS_REGNUM,
    502  1.1  christos 			     gregs + INT_REGISTER_SIZE * ARM_PC_REGNUM);
    503  1.1  christos     }
    504  1.1  christos 
    505  1.1  christos   if (regnum == ARM_PC_REGNUM || regnum == -1)
    506  1.1  christos     {
    507  1.1  christos       reg_pc = extract_unsigned_integer (gregs
    508  1.1  christos 					 + INT_REGISTER_SIZE * ARM_PC_REGNUM,
    509  1.1  christos 					 INT_REGISTER_SIZE, byte_order);
    510  1.1  christos       reg_pc = gdbarch_addr_bits_remove (gdbarch, reg_pc);
    511  1.1  christos       store_unsigned_integer (pc_buf, INT_REGISTER_SIZE, byte_order, reg_pc);
    512  1.1  christos       regcache_raw_supply (regcache, ARM_PC_REGNUM, pc_buf);
    513  1.1  christos     }
    514  1.1  christos }
    515  1.1  christos 
    516  1.1  christos void
    517  1.1  christos arm_linux_collect_gregset (const struct regset *regset,
    518  1.1  christos 			   const struct regcache *regcache,
    519  1.1  christos 			   int regnum, void *gregs_buf, size_t len)
    520  1.1  christos {
    521  1.6  christos   gdb_byte *gregs = (gdb_byte *) gregs_buf;
    522  1.1  christos   int regno;
    523  1.1  christos 
    524  1.1  christos   for (regno = ARM_A1_REGNUM; regno < ARM_PC_REGNUM; regno++)
    525  1.1  christos     if (regnum == -1 || regnum == regno)
    526  1.1  christos       regcache_raw_collect (regcache, regno,
    527  1.1  christos 			    gregs + INT_REGISTER_SIZE * regno);
    528  1.1  christos 
    529  1.1  christos   if (regnum == ARM_PS_REGNUM || regnum == -1)
    530  1.1  christos     {
    531  1.1  christos       if (arm_apcs_32)
    532  1.1  christos 	regcache_raw_collect (regcache, ARM_PS_REGNUM,
    533  1.1  christos 			      gregs + INT_REGISTER_SIZE * ARM_CPSR_GREGNUM);
    534  1.1  christos       else
    535  1.1  christos 	regcache_raw_collect (regcache, ARM_PS_REGNUM,
    536  1.1  christos 			      gregs + INT_REGISTER_SIZE * ARM_PC_REGNUM);
    537  1.1  christos     }
    538  1.1  christos 
    539  1.1  christos   if (regnum == ARM_PC_REGNUM || regnum == -1)
    540  1.1  christos     regcache_raw_collect (regcache, ARM_PC_REGNUM,
    541  1.1  christos 			  gregs + INT_REGISTER_SIZE * ARM_PC_REGNUM);
    542  1.1  christos }
    543  1.1  christos 
    544  1.1  christos /* Support for register format used by the NWFPE FPA emulator.  */
    545  1.1  christos 
    546  1.1  christos #define typeNone		0x00
    547  1.1  christos #define typeSingle		0x01
    548  1.1  christos #define typeDouble		0x02
    549  1.1  christos #define typeExtended		0x03
    550  1.1  christos 
    551  1.1  christos void
    552  1.1  christos supply_nwfpe_register (struct regcache *regcache, int regno,
    553  1.1  christos 		       const gdb_byte *regs)
    554  1.1  christos {
    555  1.1  christos   const gdb_byte *reg_data;
    556  1.1  christos   gdb_byte reg_tag;
    557  1.1  christos   gdb_byte buf[FP_REGISTER_SIZE];
    558  1.1  christos 
    559  1.1  christos   reg_data = regs + (regno - ARM_F0_REGNUM) * FP_REGISTER_SIZE;
    560  1.1  christos   reg_tag = regs[(regno - ARM_F0_REGNUM) + NWFPE_TAGS_OFFSET];
    561  1.1  christos   memset (buf, 0, FP_REGISTER_SIZE);
    562  1.1  christos 
    563  1.1  christos   switch (reg_tag)
    564  1.1  christos     {
    565  1.1  christos     case typeSingle:
    566  1.1  christos       memcpy (buf, reg_data, 4);
    567  1.1  christos       break;
    568  1.1  christos     case typeDouble:
    569  1.1  christos       memcpy (buf, reg_data + 4, 4);
    570  1.1  christos       memcpy (buf + 4, reg_data, 4);
    571  1.1  christos       break;
    572  1.1  christos     case typeExtended:
    573  1.1  christos       /* We want sign and exponent, then least significant bits,
    574  1.1  christos 	 then most significant.  NWFPE does sign, most, least.  */
    575  1.1  christos       memcpy (buf, reg_data, 4);
    576  1.1  christos       memcpy (buf + 4, reg_data + 8, 4);
    577  1.1  christos       memcpy (buf + 8, reg_data + 4, 4);
    578  1.1  christos       break;
    579  1.1  christos     default:
    580  1.1  christos       break;
    581  1.1  christos     }
    582  1.1  christos 
    583  1.1  christos   regcache_raw_supply (regcache, regno, buf);
    584  1.1  christos }
    585  1.1  christos 
    586  1.1  christos void
    587  1.1  christos collect_nwfpe_register (const struct regcache *regcache, int regno,
    588  1.1  christos 			gdb_byte *regs)
    589  1.1  christos {
    590  1.1  christos   gdb_byte *reg_data;
    591  1.1  christos   gdb_byte reg_tag;
    592  1.1  christos   gdb_byte buf[FP_REGISTER_SIZE];
    593  1.1  christos 
    594  1.1  christos   regcache_raw_collect (regcache, regno, buf);
    595  1.1  christos 
    596  1.1  christos   /* NOTE drow/2006-06-07: This code uses the tag already in the
    597  1.1  christos      register buffer.  I've preserved that when moving the code
    598  1.1  christos      from the native file to the target file.  But this doesn't
    599  1.1  christos      always make sense.  */
    600  1.1  christos 
    601  1.1  christos   reg_data = regs + (regno - ARM_F0_REGNUM) * FP_REGISTER_SIZE;
    602  1.1  christos   reg_tag = regs[(regno - ARM_F0_REGNUM) + NWFPE_TAGS_OFFSET];
    603  1.1  christos 
    604  1.1  christos   switch (reg_tag)
    605  1.1  christos     {
    606  1.1  christos     case typeSingle:
    607  1.1  christos       memcpy (reg_data, buf, 4);
    608  1.1  christos       break;
    609  1.1  christos     case typeDouble:
    610  1.1  christos       memcpy (reg_data, buf + 4, 4);
    611  1.1  christos       memcpy (reg_data + 4, buf, 4);
    612  1.1  christos       break;
    613  1.1  christos     case typeExtended:
    614  1.1  christos       memcpy (reg_data, buf, 4);
    615  1.1  christos       memcpy (reg_data + 4, buf + 8, 4);
    616  1.1  christos       memcpy (reg_data + 8, buf + 4, 4);
    617  1.1  christos       break;
    618  1.1  christos     default:
    619  1.1  christos       break;
    620  1.1  christos     }
    621  1.1  christos }
    622  1.1  christos 
    623  1.1  christos void
    624  1.1  christos arm_linux_supply_nwfpe (const struct regset *regset,
    625  1.1  christos 			struct regcache *regcache,
    626  1.1  christos 			int regnum, const void *regs_buf, size_t len)
    627  1.1  christos {
    628  1.6  christos   const gdb_byte *regs = (const gdb_byte *) regs_buf;
    629  1.1  christos   int regno;
    630  1.1  christos 
    631  1.1  christos   if (regnum == ARM_FPS_REGNUM || regnum == -1)
    632  1.1  christos     regcache_raw_supply (regcache, ARM_FPS_REGNUM,
    633  1.1  christos 			 regs + NWFPE_FPSR_OFFSET);
    634  1.1  christos 
    635  1.1  christos   for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
    636  1.1  christos     if (regnum == -1 || regnum == regno)
    637  1.1  christos       supply_nwfpe_register (regcache, regno, regs);
    638  1.1  christos }
    639  1.1  christos 
    640  1.1  christos void
    641  1.1  christos arm_linux_collect_nwfpe (const struct regset *regset,
    642  1.1  christos 			 const struct regcache *regcache,
    643  1.1  christos 			 int regnum, void *regs_buf, size_t len)
    644  1.1  christos {
    645  1.6  christos   gdb_byte *regs = (gdb_byte *) regs_buf;
    646  1.1  christos   int regno;
    647  1.1  christos 
    648  1.1  christos   for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
    649  1.1  christos     if (regnum == -1 || regnum == regno)
    650  1.1  christos       collect_nwfpe_register (regcache, regno, regs);
    651  1.1  christos 
    652  1.1  christos   if (regnum == ARM_FPS_REGNUM || regnum == -1)
    653  1.1  christos     regcache_raw_collect (regcache, ARM_FPS_REGNUM,
    654  1.1  christos 			  regs + INT_REGISTER_SIZE * ARM_FPS_REGNUM);
    655  1.1  christos }
    656  1.1  christos 
    657  1.1  christos /* Support VFP register format.  */
    658  1.1  christos 
    659  1.1  christos #define ARM_LINUX_SIZEOF_VFP (32 * 8 + 4)
    660  1.1  christos 
    661  1.1  christos static void
    662  1.1  christos arm_linux_supply_vfp (const struct regset *regset,
    663  1.1  christos 		      struct regcache *regcache,
    664  1.1  christos 		      int regnum, const void *regs_buf, size_t len)
    665  1.1  christos {
    666  1.6  christos   const gdb_byte *regs = (const gdb_byte *) regs_buf;
    667  1.1  christos   int regno;
    668  1.1  christos 
    669  1.1  christos   if (regnum == ARM_FPSCR_REGNUM || regnum == -1)
    670  1.1  christos     regcache_raw_supply (regcache, ARM_FPSCR_REGNUM, regs + 32 * 8);
    671  1.1  christos 
    672  1.1  christos   for (regno = ARM_D0_REGNUM; regno <= ARM_D31_REGNUM; regno++)
    673  1.1  christos     if (regnum == -1 || regnum == regno)
    674  1.1  christos       regcache_raw_supply (regcache, regno,
    675  1.1  christos 			   regs + (regno - ARM_D0_REGNUM) * 8);
    676  1.1  christos }
    677  1.1  christos 
    678  1.1  christos static void
    679  1.1  christos arm_linux_collect_vfp (const struct regset *regset,
    680  1.1  christos 			 const struct regcache *regcache,
    681  1.1  christos 			 int regnum, void *regs_buf, size_t len)
    682  1.1  christos {
    683  1.6  christos   gdb_byte *regs = (gdb_byte *) regs_buf;
    684  1.1  christos   int regno;
    685  1.1  christos 
    686  1.1  christos   if (regnum == ARM_FPSCR_REGNUM || regnum == -1)
    687  1.1  christos     regcache_raw_collect (regcache, ARM_FPSCR_REGNUM, regs + 32 * 8);
    688  1.1  christos 
    689  1.1  christos   for (regno = ARM_D0_REGNUM; regno <= ARM_D31_REGNUM; regno++)
    690  1.1  christos     if (regnum == -1 || regnum == regno)
    691  1.1  christos       regcache_raw_collect (regcache, regno,
    692  1.1  christos 			    regs + (regno - ARM_D0_REGNUM) * 8);
    693  1.1  christos }
    694  1.1  christos 
    695  1.3  christos static const struct regset arm_linux_gregset =
    696  1.3  christos   {
    697  1.3  christos     NULL, arm_linux_supply_gregset, arm_linux_collect_gregset
    698  1.3  christos   };
    699  1.3  christos 
    700  1.3  christos static const struct regset arm_linux_fpregset =
    701  1.3  christos   {
    702  1.3  christos     NULL, arm_linux_supply_nwfpe, arm_linux_collect_nwfpe
    703  1.3  christos   };
    704  1.3  christos 
    705  1.3  christos static const struct regset arm_linux_vfpregset =
    706  1.3  christos   {
    707  1.3  christos     NULL, arm_linux_supply_vfp, arm_linux_collect_vfp
    708  1.3  christos   };
    709  1.1  christos 
    710  1.3  christos /* Iterate over core file register note sections.  */
    711  1.3  christos 
    712  1.3  christos static void
    713  1.3  christos arm_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
    714  1.3  christos 					iterate_over_regset_sections_cb *cb,
    715  1.3  christos 					void *cb_data,
    716  1.3  christos 					const struct regcache *regcache)
    717  1.1  christos {
    718  1.1  christos   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
    719  1.1  christos 
    720  1.3  christos   cb (".reg", ARM_LINUX_SIZEOF_GREGSET, &arm_linux_gregset, NULL, cb_data);
    721  1.1  christos 
    722  1.5  christos   if (tdep->vfp_register_count > 0)
    723  1.3  christos     cb (".reg-arm-vfp", ARM_LINUX_SIZEOF_VFP, &arm_linux_vfpregset,
    724  1.3  christos 	"VFP floating-point", cb_data);
    725  1.3  christos   else if (tdep->have_fpa_registers)
    726  1.3  christos     cb (".reg2", ARM_LINUX_SIZEOF_NWFPE, &arm_linux_fpregset,
    727  1.3  christos 	"FPA floating-point", cb_data);
    728  1.1  christos }
    729  1.1  christos 
    730  1.1  christos /* Determine target description from core file.  */
    731  1.1  christos 
    732  1.1  christos static const struct target_desc *
    733  1.1  christos arm_linux_core_read_description (struct gdbarch *gdbarch,
    734  1.1  christos                                  struct target_ops *target,
    735  1.1  christos                                  bfd *abfd)
    736  1.1  christos {
    737  1.1  christos   CORE_ADDR arm_hwcap = 0;
    738  1.1  christos 
    739  1.1  christos   if (target_auxv_search (target, AT_HWCAP, &arm_hwcap) != 1)
    740  1.1  christos     return NULL;
    741  1.1  christos 
    742  1.1  christos   if (arm_hwcap & HWCAP_VFP)
    743  1.1  christos     {
    744  1.1  christos       /* NEON implies VFPv3-D32 or no-VFP unit.  Say that we only support
    745  1.1  christos          Neon with VFPv3-D32.  */
    746  1.1  christos       if (arm_hwcap & HWCAP_NEON)
    747  1.1  christos 	return tdesc_arm_with_neon;
    748  1.1  christos       else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
    749  1.1  christos 	return tdesc_arm_with_vfpv3;
    750  1.1  christos       else
    751  1.1  christos 	return tdesc_arm_with_vfpv2;
    752  1.1  christos     }
    753  1.1  christos 
    754  1.1  christos   return NULL;
    755  1.1  christos }
    756  1.1  christos 
    757  1.1  christos 
    758  1.1  christos /* Copy the value of next pc of sigreturn and rt_sigrturn into PC,
    759  1.1  christos    return 1.  In addition, set IS_THUMB depending on whether we
    760  1.1  christos    will return to ARM or Thumb code.  Return 0 if it is not a
    761  1.1  christos    rt_sigreturn/sigreturn syscall.  */
    762  1.1  christos static int
    763  1.1  christos arm_linux_sigreturn_return_addr (struct frame_info *frame,
    764  1.1  christos 				 unsigned long svc_number,
    765  1.1  christos 				 CORE_ADDR *pc, int *is_thumb)
    766  1.1  christos {
    767  1.1  christos   /* Is this a sigreturn or rt_sigreturn syscall?  */
    768  1.1  christos   if (svc_number == 119 || svc_number == 173)
    769  1.1  christos     {
    770  1.1  christos       if (get_frame_type (frame) == SIGTRAMP_FRAME)
    771  1.1  christos 	{
    772  1.1  christos 	  ULONGEST t_bit = arm_psr_thumb_bit (frame_unwind_arch (frame));
    773  1.1  christos 	  CORE_ADDR cpsr
    774  1.1  christos 	    = frame_unwind_register_unsigned (frame, ARM_PS_REGNUM);
    775  1.1  christos 
    776  1.1  christos 	  *is_thumb = (cpsr & t_bit) != 0;
    777  1.1  christos 	  *pc = frame_unwind_caller_pc (frame);
    778  1.1  christos 	  return 1;
    779  1.1  christos 	}
    780  1.1  christos     }
    781  1.1  christos   return 0;
    782  1.1  christos }
    783  1.1  christos 
    784  1.6  christos /* Find the value of the next PC after a sigreturn or rt_sigreturn syscall
    785  1.6  christos    based on current processor state.  In addition, set IS_THUMB depending
    786  1.6  christos    on whether we will return to ARM or Thumb code.  */
    787  1.6  christos 
    788  1.6  christos static CORE_ADDR
    789  1.6  christos arm_linux_sigreturn_next_pc (struct regcache *regcache,
    790  1.6  christos 			     unsigned long svc_number, int *is_thumb)
    791  1.6  christos {
    792  1.6  christos   ULONGEST sp;
    793  1.6  christos   unsigned long sp_data;
    794  1.6  christos   CORE_ADDR next_pc = 0;
    795  1.6  christos   struct gdbarch *gdbarch = get_regcache_arch (regcache);
    796  1.6  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    797  1.6  christos   int pc_offset = 0;
    798  1.6  christos   int is_sigreturn = 0;
    799  1.6  christos   CORE_ADDR cpsr;
    800  1.6  christos 
    801  1.6  christos   gdb_assert (svc_number == ARM_SIGRETURN
    802  1.6  christos 	      || svc_number == ARM_RT_SIGRETURN);
    803  1.6  christos 
    804  1.6  christos   is_sigreturn = (svc_number == ARM_SIGRETURN);
    805  1.6  christos   regcache_cooked_read_unsigned (regcache, ARM_SP_REGNUM, &sp);
    806  1.6  christos   sp_data = read_memory_unsigned_integer (sp, 4, byte_order);
    807  1.6  christos 
    808  1.6  christos   pc_offset = arm_linux_sigreturn_next_pc_offset (sp, sp_data, svc_number,
    809  1.6  christos 						  is_sigreturn);
    810  1.6  christos 
    811  1.6  christos   next_pc = read_memory_unsigned_integer (sp + pc_offset, 4, byte_order);
    812  1.6  christos 
    813  1.6  christos   /* Set IS_THUMB according the CPSR saved on the stack.  */
    814  1.6  christos   cpsr = read_memory_unsigned_integer (sp + pc_offset + 4, 4, byte_order);
    815  1.6  christos   *is_thumb = ((cpsr & arm_psr_thumb_bit (gdbarch)) != 0);
    816  1.6  christos 
    817  1.6  christos   return next_pc;
    818  1.6  christos }
    819  1.6  christos 
    820  1.1  christos /* At a ptrace syscall-stop, return the syscall number.  This either
    821  1.1  christos    comes from the SWI instruction (OABI) or from r7 (EABI).
    822  1.1  christos 
    823  1.1  christos    When the function fails, it should return -1.  */
    824  1.1  christos 
    825  1.1  christos static LONGEST
    826  1.1  christos arm_linux_get_syscall_number (struct gdbarch *gdbarch,
    827  1.1  christos 			      ptid_t ptid)
    828  1.1  christos {
    829  1.1  christos   struct regcache *regs = get_thread_regcache (ptid);
    830  1.1  christos 
    831  1.1  christos   ULONGEST pc;
    832  1.1  christos   ULONGEST cpsr;
    833  1.1  christos   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
    834  1.1  christos   int is_thumb;
    835  1.1  christos   ULONGEST svc_number = -1;
    836  1.1  christos 
    837  1.1  christos   regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &pc);
    838  1.1  christos   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &cpsr);
    839  1.1  christos   is_thumb = (cpsr & t_bit) != 0;
    840  1.1  christos 
    841  1.1  christos   if (is_thumb)
    842  1.1  christos     {
    843  1.1  christos       regcache_cooked_read_unsigned (regs, 7, &svc_number);
    844  1.1  christos     }
    845  1.1  christos   else
    846  1.1  christos     {
    847  1.1  christos       enum bfd_endian byte_order_for_code =
    848  1.1  christos 	gdbarch_byte_order_for_code (gdbarch);
    849  1.1  christos 
    850  1.1  christos       /* PC gets incremented before the syscall-stop, so read the
    851  1.1  christos 	 previous instruction.  */
    852  1.1  christos       unsigned long this_instr =
    853  1.1  christos 	read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
    854  1.1  christos 
    855  1.1  christos       unsigned long svc_operand = (0x00ffffff & this_instr);
    856  1.1  christos 
    857  1.1  christos       if (svc_operand)
    858  1.1  christos 	{
    859  1.1  christos           /* OABI */
    860  1.1  christos 	  svc_number = svc_operand - 0x900000;
    861  1.1  christos 	}
    862  1.1  christos       else
    863  1.1  christos 	{
    864  1.1  christos           /* EABI */
    865  1.1  christos 	  regcache_cooked_read_unsigned (regs, 7, &svc_number);
    866  1.1  christos 	}
    867  1.1  christos     }
    868  1.1  christos 
    869  1.1  christos   return svc_number;
    870  1.1  christos }
    871  1.1  christos 
    872  1.1  christos static CORE_ADDR
    873  1.6  christos arm_linux_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
    874  1.1  christos {
    875  1.6  christos   CORE_ADDR next_pc = 0;
    876  1.6  christos   CORE_ADDR pc = regcache_read_pc (self->regcache);
    877  1.6  christos   int is_thumb = arm_is_thumb (self->regcache);
    878  1.1  christos   ULONGEST svc_number = 0;
    879  1.1  christos 
    880  1.1  christos   if (is_thumb)
    881  1.1  christos     {
    882  1.6  christos       svc_number = regcache_raw_get_unsigned (self->regcache, 7);
    883  1.6  christos       next_pc = pc + 2;
    884  1.1  christos     }
    885  1.1  christos   else
    886  1.1  christos     {
    887  1.6  christos       struct gdbarch *gdbarch = get_regcache_arch (self->regcache);
    888  1.1  christos       enum bfd_endian byte_order_for_code =
    889  1.1  christos 	gdbarch_byte_order_for_code (gdbarch);
    890  1.1  christos       unsigned long this_instr =
    891  1.1  christos 	read_memory_unsigned_integer (pc, 4, byte_order_for_code);
    892  1.1  christos 
    893  1.1  christos       unsigned long svc_operand = (0x00ffffff & this_instr);
    894  1.1  christos       if (svc_operand)  /* OABI.  */
    895  1.1  christos 	{
    896  1.1  christos 	  svc_number = svc_operand - 0x900000;
    897  1.1  christos 	}
    898  1.1  christos       else /* EABI.  */
    899  1.1  christos 	{
    900  1.6  christos 	  svc_number = regcache_raw_get_unsigned (self->regcache, 7);
    901  1.1  christos 	}
    902  1.1  christos 
    903  1.6  christos       next_pc = pc + 4;
    904  1.1  christos     }
    905  1.1  christos 
    906  1.6  christos   if (svc_number == ARM_SIGRETURN || svc_number == ARM_RT_SIGRETURN)
    907  1.6  christos     {
    908  1.6  christos       /* SIGRETURN or RT_SIGRETURN may affect the arm thumb mode, so
    909  1.6  christos 	 update IS_THUMB.   */
    910  1.6  christos       next_pc = arm_linux_sigreturn_next_pc (self->regcache, svc_number,
    911  1.6  christos 					     &is_thumb);
    912  1.6  christos     }
    913  1.1  christos 
    914  1.1  christos   /* Addresses for calling Thumb functions have the bit 0 set.  */
    915  1.1  christos   if (is_thumb)
    916  1.6  christos     next_pc = MAKE_THUMB_ADDR (next_pc);
    917  1.1  christos 
    918  1.6  christos   return next_pc;
    919  1.1  christos }
    920  1.1  christos 
    921  1.1  christos 
    922  1.1  christos /* Insert a single step breakpoint at the next executed instruction.  */
    923  1.1  christos 
    924  1.1  christos static int
    925  1.1  christos arm_linux_software_single_step (struct frame_info *frame)
    926  1.1  christos {
    927  1.6  christos   struct regcache *regcache = get_current_regcache ();
    928  1.6  christos   struct gdbarch *gdbarch = get_regcache_arch (regcache);
    929  1.6  christos   struct address_space *aspace = get_regcache_aspace (regcache);
    930  1.6  christos   struct arm_get_next_pcs next_pcs_ctx;
    931  1.6  christos   CORE_ADDR pc;
    932  1.6  christos   int i;
    933  1.6  christos   VEC (CORE_ADDR) *next_pcs = NULL;
    934  1.6  christos   struct cleanup *old_chain;
    935  1.6  christos 
    936  1.6  christos   /* If the target does have hardware single step, GDB doesn't have
    937  1.6  christos      to bother software single step.  */
    938  1.6  christos   if (target_can_do_single_step () == 1)
    939  1.6  christos     return 0;
    940  1.6  christos 
    941  1.6  christos   old_chain = make_cleanup (VEC_cleanup (CORE_ADDR), &next_pcs);
    942  1.6  christos 
    943  1.6  christos   arm_get_next_pcs_ctor (&next_pcs_ctx,
    944  1.6  christos 			 &arm_linux_get_next_pcs_ops,
    945  1.6  christos 			 gdbarch_byte_order (gdbarch),
    946  1.6  christos 			 gdbarch_byte_order_for_code (gdbarch),
    947  1.6  christos 			 1,
    948  1.6  christos 			 regcache);
    949  1.6  christos 
    950  1.6  christos   next_pcs = arm_get_next_pcs (&next_pcs_ctx);
    951  1.6  christos 
    952  1.6  christos   for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, pc); i++)
    953  1.6  christos     arm_insert_single_step_breakpoint (gdbarch, aspace, pc);
    954  1.1  christos 
    955  1.6  christos   do_cleanups (old_chain);
    956  1.1  christos 
    957  1.1  christos   return 1;
    958  1.1  christos }
    959  1.1  christos 
    960  1.1  christos /* Support for displaced stepping of Linux SVC instructions.  */
    961  1.1  christos 
    962  1.1  christos static void
    963  1.1  christos arm_linux_cleanup_svc (struct gdbarch *gdbarch,
    964  1.1  christos 		       struct regcache *regs,
    965  1.1  christos 		       struct displaced_step_closure *dsc)
    966  1.1  christos {
    967  1.1  christos   ULONGEST apparent_pc;
    968  1.1  christos   int within_scratch;
    969  1.1  christos 
    970  1.1  christos   regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &apparent_pc);
    971  1.1  christos 
    972  1.1  christos   within_scratch = (apparent_pc >= dsc->scratch_base
    973  1.1  christos 		    && apparent_pc < (dsc->scratch_base
    974  1.1  christos 				      + DISPLACED_MODIFIED_INSNS * 4 + 4));
    975  1.1  christos 
    976  1.1  christos   if (debug_displaced)
    977  1.1  christos     {
    978  1.1  christos       fprintf_unfiltered (gdb_stdlog, "displaced: PC is apparently %.8lx after "
    979  1.1  christos 			  "SVC step ", (unsigned long) apparent_pc);
    980  1.1  christos       if (within_scratch)
    981  1.1  christos         fprintf_unfiltered (gdb_stdlog, "(within scratch space)\n");
    982  1.1  christos       else
    983  1.1  christos         fprintf_unfiltered (gdb_stdlog, "(outside scratch space)\n");
    984  1.1  christos     }
    985  1.1  christos 
    986  1.1  christos   if (within_scratch)
    987  1.5  christos     displaced_write_reg (regs, dsc, ARM_PC_REGNUM,
    988  1.5  christos 			 dsc->insn_addr + dsc->insn_size, BRANCH_WRITE_PC);
    989  1.1  christos }
    990  1.1  christos 
    991  1.1  christos static int
    992  1.1  christos arm_linux_copy_svc (struct gdbarch *gdbarch, struct regcache *regs,
    993  1.1  christos 		    struct displaced_step_closure *dsc)
    994  1.1  christos {
    995  1.1  christos   CORE_ADDR return_to = 0;
    996  1.1  christos 
    997  1.1  christos   struct frame_info *frame;
    998  1.1  christos   unsigned int svc_number = displaced_read_reg (regs, dsc, 7);
    999  1.1  christos   int is_sigreturn = 0;
   1000  1.1  christos   int is_thumb;
   1001  1.1  christos 
   1002  1.1  christos   frame = get_current_frame ();
   1003  1.1  christos 
   1004  1.1  christos   is_sigreturn = arm_linux_sigreturn_return_addr(frame, svc_number,
   1005  1.1  christos 						 &return_to, &is_thumb);
   1006  1.1  christos   if (is_sigreturn)
   1007  1.1  christos     {
   1008  1.5  christos       struct symtab_and_line sal;
   1009  1.1  christos 
   1010  1.5  christos       if (debug_displaced)
   1011  1.5  christos 	fprintf_unfiltered (gdb_stdlog, "displaced: found "
   1012  1.5  christos 			    "sigreturn/rt_sigreturn SVC call.  PC in "
   1013  1.5  christos 			    "frame = %lx\n",
   1014  1.5  christos 			    (unsigned long) get_frame_pc (frame));
   1015  1.5  christos 
   1016  1.5  christos       if (debug_displaced)
   1017  1.5  christos 	fprintf_unfiltered (gdb_stdlog, "displaced: unwind pc = %lx.  "
   1018  1.5  christos 			    "Setting momentary breakpoint.\n",
   1019  1.5  christos 			    (unsigned long) return_to);
   1020  1.5  christos 
   1021  1.5  christos       gdb_assert (inferior_thread ()->control.step_resume_breakpoint
   1022  1.5  christos 		  == NULL);
   1023  1.5  christos 
   1024  1.5  christos       sal = find_pc_line (return_to, 0);
   1025  1.5  christos       sal.pc = return_to;
   1026  1.5  christos       sal.section = find_pc_overlay (return_to);
   1027  1.5  christos       sal.explicit_pc = 1;
   1028  1.5  christos 
   1029  1.5  christos       frame = get_prev_frame (frame);
   1030  1.5  christos 
   1031  1.5  christos       if (frame)
   1032  1.5  christos 	{
   1033  1.5  christos 	  inferior_thread ()->control.step_resume_breakpoint
   1034  1.5  christos 	    = set_momentary_breakpoint (gdbarch, sal, get_frame_id (frame),
   1035  1.5  christos 					bp_step_resume);
   1036  1.5  christos 
   1037  1.5  christos 	  /* set_momentary_breakpoint invalidates FRAME.  */
   1038  1.5  christos 	  frame = NULL;
   1039  1.5  christos 
   1040  1.5  christos 	  /* We need to make sure we actually insert the momentary
   1041  1.5  christos 	     breakpoint set above.  */
   1042  1.5  christos 	  insert_breakpoints ();
   1043  1.1  christos 	}
   1044  1.1  christos       else if (debug_displaced)
   1045  1.5  christos 	fprintf_unfiltered (gdb_stderr, "displaced: couldn't find previous "
   1046  1.5  christos 			    "frame to set momentary breakpoint for "
   1047  1.5  christos 			    "sigreturn/rt_sigreturn\n");
   1048  1.5  christos     }
   1049  1.5  christos   else if (debug_displaced)
   1050  1.5  christos     fprintf_unfiltered (gdb_stdlog, "displaced: found SVC call\n");
   1051  1.1  christos 
   1052  1.1  christos   /* Preparation: If we detect sigreturn, set momentary breakpoint at resume
   1053  1.1  christos 		  location, else nothing.
   1054  1.1  christos      Insn: unmodified svc.
   1055  1.5  christos      Cleanup: if pc lands in scratch space, pc <- insn_addr + insn_size
   1056  1.1  christos               else leave pc alone.  */
   1057  1.1  christos 
   1058  1.1  christos 
   1059  1.1  christos   dsc->cleanup = &arm_linux_cleanup_svc;
   1060  1.1  christos   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
   1061  1.1  christos      instruction.  */
   1062  1.1  christos   dsc->wrote_to_pc = 1;
   1063  1.1  christos 
   1064  1.1  christos   return 0;
   1065  1.1  christos }
   1066  1.1  christos 
   1067  1.1  christos 
   1068  1.1  christos /* The following two functions implement single-stepping over calls to Linux
   1069  1.1  christos    kernel helper routines, which perform e.g. atomic operations on architecture
   1070  1.1  christos    variants which don't support them natively.
   1071  1.1  christos 
   1072  1.1  christos    When this function is called, the PC will be pointing at the kernel helper
   1073  1.1  christos    (at an address inaccessible to GDB), and r14 will point to the return
   1074  1.1  christos    address.  Displaced stepping always executes code in the copy area:
   1075  1.1  christos    so, make the copy-area instruction branch back to the kernel helper (the
   1076  1.1  christos    "from" address), and make r14 point to the breakpoint in the copy area.  In
   1077  1.1  christos    that way, we regain control once the kernel helper returns, and can clean
   1078  1.1  christos    up appropriately (as if we had just returned from the kernel helper as it
   1079  1.1  christos    would have been called from the non-displaced location).  */
   1080  1.1  christos 
   1081  1.1  christos static void
   1082  1.1  christos cleanup_kernel_helper_return (struct gdbarch *gdbarch,
   1083  1.1  christos 			      struct regcache *regs,
   1084  1.1  christos 			      struct displaced_step_closure *dsc)
   1085  1.1  christos {
   1086  1.1  christos   displaced_write_reg (regs, dsc, ARM_LR_REGNUM, dsc->tmp[0], CANNOT_WRITE_PC);
   1087  1.1  christos   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->tmp[0], BRANCH_WRITE_PC);
   1088  1.1  christos }
   1089  1.1  christos 
   1090  1.1  christos static void
   1091  1.1  christos arm_catch_kernel_helper_return (struct gdbarch *gdbarch, CORE_ADDR from,
   1092  1.1  christos 				CORE_ADDR to, struct regcache *regs,
   1093  1.1  christos 				struct displaced_step_closure *dsc)
   1094  1.1  christos {
   1095  1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1096  1.1  christos 
   1097  1.1  christos   dsc->numinsns = 1;
   1098  1.1  christos   dsc->insn_addr = from;
   1099  1.1  christos   dsc->cleanup = &cleanup_kernel_helper_return;
   1100  1.1  christos   /* Say we wrote to the PC, else cleanup will set PC to the next
   1101  1.1  christos      instruction in the helper, which isn't helpful.  */
   1102  1.1  christos   dsc->wrote_to_pc = 1;
   1103  1.1  christos 
   1104  1.1  christos   /* Preparation: tmp[0] <- r14
   1105  1.1  christos                   r14 <- <scratch space>+4
   1106  1.1  christos 		  *(<scratch space>+8) <- from
   1107  1.1  christos      Insn: ldr pc, [r14, #4]
   1108  1.1  christos      Cleanup: r14 <- tmp[0], pc <- tmp[0].  */
   1109  1.1  christos 
   1110  1.1  christos   dsc->tmp[0] = displaced_read_reg (regs, dsc, ARM_LR_REGNUM);
   1111  1.1  christos   displaced_write_reg (regs, dsc, ARM_LR_REGNUM, (ULONGEST) to + 4,
   1112  1.1  christos 		       CANNOT_WRITE_PC);
   1113  1.1  christos   write_memory_unsigned_integer (to + 8, 4, byte_order, from);
   1114  1.1  christos 
   1115  1.1  christos   dsc->modinsn[0] = 0xe59ef004;  /* ldr pc, [lr, #4].  */
   1116  1.1  christos }
   1117  1.1  christos 
   1118  1.1  christos /* Linux-specific displaced step instruction copying function.  Detects when
   1119  1.1  christos    the program has stepped into a Linux kernel helper routine (which must be
   1120  1.6  christos    handled as a special case).  */
   1121  1.1  christos 
   1122  1.1  christos static struct displaced_step_closure *
   1123  1.1  christos arm_linux_displaced_step_copy_insn (struct gdbarch *gdbarch,
   1124  1.1  christos 				    CORE_ADDR from, CORE_ADDR to,
   1125  1.1  christos 				    struct regcache *regs)
   1126  1.1  christos {
   1127  1.6  christos   struct displaced_step_closure *dsc = XNEW (struct displaced_step_closure);
   1128  1.1  christos 
   1129  1.1  christos   /* Detect when we enter an (inaccessible by GDB) Linux kernel helper, and
   1130  1.1  christos      stop at the return location.  */
   1131  1.1  christos   if (from > 0xffff0000)
   1132  1.1  christos     {
   1133  1.1  christos       if (debug_displaced)
   1134  1.1  christos         fprintf_unfiltered (gdb_stdlog, "displaced: detected kernel helper "
   1135  1.1  christos 			    "at %.8lx\n", (unsigned long) from);
   1136  1.1  christos 
   1137  1.1  christos       arm_catch_kernel_helper_return (gdbarch, from, to, regs, dsc);
   1138  1.1  christos     }
   1139  1.1  christos   else
   1140  1.1  christos     {
   1141  1.1  christos       /* Override the default handling of SVC instructions.  */
   1142  1.1  christos       dsc->u.svc.copy_svc_os = arm_linux_copy_svc;
   1143  1.1  christos 
   1144  1.1  christos       arm_process_displaced_insn (gdbarch, from, to, regs, dsc);
   1145  1.1  christos     }
   1146  1.1  christos 
   1147  1.1  christos   arm_displaced_init_closure (gdbarch, from, to, dsc);
   1148  1.1  christos 
   1149  1.1  christos   return dsc;
   1150  1.1  christos }
   1151  1.1  christos 
   1152  1.1  christos /* Implementation of `gdbarch_stap_is_single_operand', as defined in
   1153  1.1  christos    gdbarch.h.  */
   1154  1.1  christos 
   1155  1.1  christos static int
   1156  1.1  christos arm_stap_is_single_operand (struct gdbarch *gdbarch, const char *s)
   1157  1.1  christos {
   1158  1.1  christos   return (*s == '#' || *s == '$' || isdigit (*s) /* Literal number.  */
   1159  1.1  christos 	  || *s == '[' /* Register indirection or
   1160  1.1  christos 			  displacement.  */
   1161  1.1  christos 	  || isalpha (*s)); /* Register value.  */
   1162  1.1  christos }
   1163  1.1  christos 
   1164  1.1  christos /* This routine is used to parse a special token in ARM's assembly.
   1165  1.1  christos 
   1166  1.1  christos    The special tokens parsed by it are:
   1167  1.1  christos 
   1168  1.1  christos       - Register displacement (e.g, [fp, #-8])
   1169  1.1  christos 
   1170  1.1  christos    It returns one if the special token has been parsed successfully,
   1171  1.1  christos    or zero if the current token is not considered special.  */
   1172  1.1  christos 
   1173  1.1  christos static int
   1174  1.1  christos arm_stap_parse_special_token (struct gdbarch *gdbarch,
   1175  1.1  christos 			      struct stap_parse_info *p)
   1176  1.1  christos {
   1177  1.1  christos   if (*p->arg == '[')
   1178  1.1  christos     {
   1179  1.1  christos       /* Temporary holder for lookahead.  */
   1180  1.1  christos       const char *tmp = p->arg;
   1181  1.1  christos       char *endp;
   1182  1.1  christos       /* Used to save the register name.  */
   1183  1.1  christos       const char *start;
   1184  1.1  christos       char *regname;
   1185  1.1  christos       int len, offset;
   1186  1.1  christos       int got_minus = 0;
   1187  1.1  christos       long displacement;
   1188  1.1  christos       struct stoken str;
   1189  1.1  christos 
   1190  1.1  christos       ++tmp;
   1191  1.1  christos       start = tmp;
   1192  1.1  christos 
   1193  1.1  christos       /* Register name.  */
   1194  1.1  christos       while (isalnum (*tmp))
   1195  1.1  christos 	++tmp;
   1196  1.1  christos 
   1197  1.1  christos       if (*tmp != ',')
   1198  1.1  christos 	return 0;
   1199  1.1  christos 
   1200  1.1  christos       len = tmp - start;
   1201  1.6  christos       regname = (char *) alloca (len + 2);
   1202  1.1  christos 
   1203  1.1  christos       offset = 0;
   1204  1.1  christos       if (isdigit (*start))
   1205  1.1  christos 	{
   1206  1.1  christos 	  /* If we are dealing with a register whose name begins with a
   1207  1.1  christos 	     digit, it means we should prefix the name with the letter
   1208  1.1  christos 	     `r', because GDB expects this name pattern.  Otherwise (e.g.,
   1209  1.1  christos 	     we are dealing with the register `fp'), we don't need to
   1210  1.1  christos 	     add such a prefix.  */
   1211  1.1  christos 	  regname[0] = 'r';
   1212  1.1  christos 	  offset = 1;
   1213  1.1  christos 	}
   1214  1.1  christos 
   1215  1.1  christos       strncpy (regname + offset, start, len);
   1216  1.1  christos       len += offset;
   1217  1.1  christos       regname[len] = '\0';
   1218  1.1  christos 
   1219  1.1  christos       if (user_reg_map_name_to_regnum (gdbarch, regname, len) == -1)
   1220  1.1  christos 	error (_("Invalid register name `%s' on expression `%s'."),
   1221  1.1  christos 	       regname, p->saved_arg);
   1222  1.1  christos 
   1223  1.1  christos       ++tmp;
   1224  1.1  christos       tmp = skip_spaces_const (tmp);
   1225  1.1  christos       if (*tmp == '#' || *tmp == '$')
   1226  1.1  christos 	++tmp;
   1227  1.1  christos 
   1228  1.1  christos       if (*tmp == '-')
   1229  1.1  christos 	{
   1230  1.1  christos 	  ++tmp;
   1231  1.1  christos 	  got_minus = 1;
   1232  1.1  christos 	}
   1233  1.1  christos 
   1234  1.1  christos       displacement = strtol (tmp, &endp, 10);
   1235  1.1  christos       tmp = endp;
   1236  1.1  christos 
   1237  1.1  christos       /* Skipping last `]'.  */
   1238  1.1  christos       if (*tmp++ != ']')
   1239  1.1  christos 	return 0;
   1240  1.1  christos 
   1241  1.1  christos       /* The displacement.  */
   1242  1.3  christos       write_exp_elt_opcode (&p->pstate, OP_LONG);
   1243  1.3  christos       write_exp_elt_type (&p->pstate, builtin_type (gdbarch)->builtin_long);
   1244  1.3  christos       write_exp_elt_longcst (&p->pstate, displacement);
   1245  1.3  christos       write_exp_elt_opcode (&p->pstate, OP_LONG);
   1246  1.1  christos       if (got_minus)
   1247  1.3  christos 	write_exp_elt_opcode (&p->pstate, UNOP_NEG);
   1248  1.1  christos 
   1249  1.1  christos       /* The register name.  */
   1250  1.3  christos       write_exp_elt_opcode (&p->pstate, OP_REGISTER);
   1251  1.1  christos       str.ptr = regname;
   1252  1.1  christos       str.length = len;
   1253  1.3  christos       write_exp_string (&p->pstate, str);
   1254  1.3  christos       write_exp_elt_opcode (&p->pstate, OP_REGISTER);
   1255  1.1  christos 
   1256  1.3  christos       write_exp_elt_opcode (&p->pstate, BINOP_ADD);
   1257  1.1  christos 
   1258  1.1  christos       /* Casting to the expected type.  */
   1259  1.3  christos       write_exp_elt_opcode (&p->pstate, UNOP_CAST);
   1260  1.3  christos       write_exp_elt_type (&p->pstate, lookup_pointer_type (p->arg_type));
   1261  1.3  christos       write_exp_elt_opcode (&p->pstate, UNOP_CAST);
   1262  1.1  christos 
   1263  1.3  christos       write_exp_elt_opcode (&p->pstate, UNOP_IND);
   1264  1.1  christos 
   1265  1.1  christos       p->arg = tmp;
   1266  1.1  christos     }
   1267  1.1  christos   else
   1268  1.1  christos     return 0;
   1269  1.1  christos 
   1270  1.1  christos   return 1;
   1271  1.1  christos }
   1272  1.1  christos 
   1273  1.3  christos /* ARM process record-replay constructs: syscall, signal etc.  */
   1274  1.3  christos 
   1275  1.3  christos struct linux_record_tdep arm_linux_record_tdep;
   1276  1.3  christos 
   1277  1.3  christos /* arm_canonicalize_syscall maps from the native arm Linux set
   1278  1.3  christos    of syscall ids into a canonical set of syscall ids used by
   1279  1.3  christos    process record.  */
   1280  1.3  christos 
   1281  1.3  christos static enum gdb_syscall
   1282  1.3  christos arm_canonicalize_syscall (int syscall)
   1283  1.3  christos {
   1284  1.6  christos   switch (syscall)
   1285  1.6  christos     {
   1286  1.6  christos     case 0: return gdb_sys_restart_syscall;
   1287  1.6  christos     case 1: return gdb_sys_exit;
   1288  1.6  christos     case 2: return gdb_sys_fork;
   1289  1.6  christos     case 3: return gdb_sys_read;
   1290  1.6  christos     case 4: return gdb_sys_write;
   1291  1.6  christos     case 5: return gdb_sys_open;
   1292  1.6  christos     case 6: return gdb_sys_close;
   1293  1.6  christos     case 8: return gdb_sys_creat;
   1294  1.6  christos     case 9: return gdb_sys_link;
   1295  1.6  christos     case 10: return gdb_sys_unlink;
   1296  1.6  christos     case 11: return gdb_sys_execve;
   1297  1.6  christos     case 12: return gdb_sys_chdir;
   1298  1.6  christos     case 13: return gdb_sys_time;
   1299  1.6  christos     case 14: return gdb_sys_mknod;
   1300  1.6  christos     case 15: return gdb_sys_chmod;
   1301  1.6  christos     case 16: return gdb_sys_lchown16;
   1302  1.6  christos     case 19: return gdb_sys_lseek;
   1303  1.6  christos     case 20: return gdb_sys_getpid;
   1304  1.6  christos     case 21: return gdb_sys_mount;
   1305  1.6  christos     case 22: return gdb_sys_oldumount;
   1306  1.6  christos     case 23: return gdb_sys_setuid16;
   1307  1.6  christos     case 24: return gdb_sys_getuid16;
   1308  1.6  christos     case 25: return gdb_sys_stime;
   1309  1.6  christos     case 26: return gdb_sys_ptrace;
   1310  1.6  christos     case 27: return gdb_sys_alarm;
   1311  1.6  christos     case 29: return gdb_sys_pause;
   1312  1.6  christos     case 30: return gdb_sys_utime;
   1313  1.6  christos     case 33: return gdb_sys_access;
   1314  1.6  christos     case 34: return gdb_sys_nice;
   1315  1.6  christos     case 36: return gdb_sys_sync;
   1316  1.6  christos     case 37: return gdb_sys_kill;
   1317  1.6  christos     case 38: return gdb_sys_rename;
   1318  1.6  christos     case 39: return gdb_sys_mkdir;
   1319  1.6  christos     case 40: return gdb_sys_rmdir;
   1320  1.6  christos     case 41: return gdb_sys_dup;
   1321  1.6  christos     case 42: return gdb_sys_pipe;
   1322  1.6  christos     case 43: return gdb_sys_times;
   1323  1.6  christos     case 45: return gdb_sys_brk;
   1324  1.6  christos     case 46: return gdb_sys_setgid16;
   1325  1.6  christos     case 47: return gdb_sys_getgid16;
   1326  1.6  christos     case 49: return gdb_sys_geteuid16;
   1327  1.6  christos     case 50: return gdb_sys_getegid16;
   1328  1.6  christos     case 51: return gdb_sys_acct;
   1329  1.6  christos     case 52: return gdb_sys_umount;
   1330  1.6  christos     case 54: return gdb_sys_ioctl;
   1331  1.6  christos     case 55: return gdb_sys_fcntl;
   1332  1.6  christos     case 57: return gdb_sys_setpgid;
   1333  1.6  christos     case 60: return gdb_sys_umask;
   1334  1.6  christos     case 61: return gdb_sys_chroot;
   1335  1.6  christos     case 62: return gdb_sys_ustat;
   1336  1.6  christos     case 63: return gdb_sys_dup2;
   1337  1.6  christos     case 64: return gdb_sys_getppid;
   1338  1.6  christos     case 65: return gdb_sys_getpgrp;
   1339  1.6  christos     case 66: return gdb_sys_setsid;
   1340  1.6  christos     case 67: return gdb_sys_sigaction;
   1341  1.6  christos     case 70: return gdb_sys_setreuid16;
   1342  1.6  christos     case 71: return gdb_sys_setregid16;
   1343  1.6  christos     case 72: return gdb_sys_sigsuspend;
   1344  1.6  christos     case 73: return gdb_sys_sigpending;
   1345  1.6  christos     case 74: return gdb_sys_sethostname;
   1346  1.6  christos     case 75: return gdb_sys_setrlimit;
   1347  1.6  christos     case 76: return gdb_sys_getrlimit;
   1348  1.6  christos     case 77: return gdb_sys_getrusage;
   1349  1.6  christos     case 78: return gdb_sys_gettimeofday;
   1350  1.6  christos     case 79: return gdb_sys_settimeofday;
   1351  1.6  christos     case 80: return gdb_sys_getgroups16;
   1352  1.6  christos     case 81: return gdb_sys_setgroups16;
   1353  1.6  christos     case 82: return gdb_sys_select;
   1354  1.6  christos     case 83: return gdb_sys_symlink;
   1355  1.6  christos     case 85: return gdb_sys_readlink;
   1356  1.6  christos     case 86: return gdb_sys_uselib;
   1357  1.6  christos     case 87: return gdb_sys_swapon;
   1358  1.6  christos     case 88: return gdb_sys_reboot;
   1359  1.6  christos     case 89: return gdb_old_readdir;
   1360  1.6  christos     case 90: return gdb_old_mmap;
   1361  1.6  christos     case 91: return gdb_sys_munmap;
   1362  1.6  christos     case 92: return gdb_sys_truncate;
   1363  1.6  christos     case 93: return gdb_sys_ftruncate;
   1364  1.6  christos     case 94: return gdb_sys_fchmod;
   1365  1.6  christos     case 95: return gdb_sys_fchown16;
   1366  1.6  christos     case 96: return gdb_sys_getpriority;
   1367  1.6  christos     case 97: return gdb_sys_setpriority;
   1368  1.6  christos     case 99: return gdb_sys_statfs;
   1369  1.6  christos     case 100: return gdb_sys_fstatfs;
   1370  1.6  christos     case 102: return gdb_sys_socketcall;
   1371  1.6  christos     case 103: return gdb_sys_syslog;
   1372  1.6  christos     case 104: return gdb_sys_setitimer;
   1373  1.6  christos     case 105: return gdb_sys_getitimer;
   1374  1.6  christos     case 106: return gdb_sys_stat;
   1375  1.6  christos     case 107: return gdb_sys_lstat;
   1376  1.6  christos     case 108: return gdb_sys_fstat;
   1377  1.6  christos     case 111: return gdb_sys_vhangup;
   1378  1.6  christos     case 113: /* sys_syscall */
   1379  1.6  christos       return gdb_sys_no_syscall;
   1380  1.6  christos     case 114: return gdb_sys_wait4;
   1381  1.6  christos     case 115: return gdb_sys_swapoff;
   1382  1.6  christos     case 116: return gdb_sys_sysinfo;
   1383  1.6  christos     case 117: return gdb_sys_ipc;
   1384  1.6  christos     case 118: return gdb_sys_fsync;
   1385  1.6  christos     case 119: return gdb_sys_sigreturn;
   1386  1.6  christos     case 120: return gdb_sys_clone;
   1387  1.6  christos     case 121: return gdb_sys_setdomainname;
   1388  1.6  christos     case 122: return gdb_sys_uname;
   1389  1.6  christos     case 124: return gdb_sys_adjtimex;
   1390  1.6  christos     case 125: return gdb_sys_mprotect;
   1391  1.6  christos     case 126: return gdb_sys_sigprocmask;
   1392  1.6  christos     case 128: return gdb_sys_init_module;
   1393  1.6  christos     case 129: return gdb_sys_delete_module;
   1394  1.6  christos     case 131: return gdb_sys_quotactl;
   1395  1.6  christos     case 132: return gdb_sys_getpgid;
   1396  1.6  christos     case 133: return gdb_sys_fchdir;
   1397  1.6  christos     case 134: return gdb_sys_bdflush;
   1398  1.6  christos     case 135: return gdb_sys_sysfs;
   1399  1.6  christos     case 136: return gdb_sys_personality;
   1400  1.6  christos     case 138: return gdb_sys_setfsuid16;
   1401  1.6  christos     case 139: return gdb_sys_setfsgid16;
   1402  1.6  christos     case 140: return gdb_sys_llseek;
   1403  1.6  christos     case 141: return gdb_sys_getdents;
   1404  1.6  christos     case 142: return gdb_sys_select;
   1405  1.6  christos     case 143: return gdb_sys_flock;
   1406  1.6  christos     case 144: return gdb_sys_msync;
   1407  1.6  christos     case 145: return gdb_sys_readv;
   1408  1.6  christos     case 146: return gdb_sys_writev;
   1409  1.6  christos     case 147: return gdb_sys_getsid;
   1410  1.6  christos     case 148: return gdb_sys_fdatasync;
   1411  1.6  christos     case 149: return gdb_sys_sysctl;
   1412  1.6  christos     case 150: return gdb_sys_mlock;
   1413  1.6  christos     case 151: return gdb_sys_munlock;
   1414  1.6  christos     case 152: return gdb_sys_mlockall;
   1415  1.6  christos     case 153: return gdb_sys_munlockall;
   1416  1.6  christos     case 154: return gdb_sys_sched_setparam;
   1417  1.6  christos     case 155: return gdb_sys_sched_getparam;
   1418  1.6  christos     case 156: return gdb_sys_sched_setscheduler;
   1419  1.6  christos     case 157: return gdb_sys_sched_getscheduler;
   1420  1.6  christos     case 158: return gdb_sys_sched_yield;
   1421  1.6  christos     case 159: return gdb_sys_sched_get_priority_max;
   1422  1.6  christos     case 160: return gdb_sys_sched_get_priority_min;
   1423  1.6  christos     case 161: return gdb_sys_sched_rr_get_interval;
   1424  1.6  christos     case 162: return gdb_sys_nanosleep;
   1425  1.6  christos     case 163: return gdb_sys_mremap;
   1426  1.6  christos     case 164: return gdb_sys_setresuid16;
   1427  1.6  christos     case 165: return gdb_sys_getresuid16;
   1428  1.6  christos     case 168: return gdb_sys_poll;
   1429  1.6  christos     case 169: return gdb_sys_nfsservctl;
   1430  1.6  christos     case 170: return gdb_sys_setresgid;
   1431  1.6  christos     case 171: return gdb_sys_getresgid;
   1432  1.6  christos     case 172: return gdb_sys_prctl;
   1433  1.6  christos     case 173: return gdb_sys_rt_sigreturn;
   1434  1.6  christos     case 174: return gdb_sys_rt_sigaction;
   1435  1.6  christos     case 175: return gdb_sys_rt_sigprocmask;
   1436  1.6  christos     case 176: return gdb_sys_rt_sigpending;
   1437  1.6  christos     case 177: return gdb_sys_rt_sigtimedwait;
   1438  1.6  christos     case 178: return gdb_sys_rt_sigqueueinfo;
   1439  1.6  christos     case 179: return gdb_sys_rt_sigsuspend;
   1440  1.6  christos     case 180: return gdb_sys_pread64;
   1441  1.6  christos     case 181: return gdb_sys_pwrite64;
   1442  1.6  christos     case 182: return gdb_sys_chown;
   1443  1.6  christos     case 183: return gdb_sys_getcwd;
   1444  1.6  christos     case 184: return gdb_sys_capget;
   1445  1.6  christos     case 185: return gdb_sys_capset;
   1446  1.6  christos     case 186: return gdb_sys_sigaltstack;
   1447  1.6  christos     case 187: return gdb_sys_sendfile;
   1448  1.6  christos     case 190: return gdb_sys_vfork;
   1449  1.6  christos     case 191: return gdb_sys_getrlimit;
   1450  1.6  christos     case 192: return gdb_sys_mmap2;
   1451  1.6  christos     case 193: return gdb_sys_truncate64;
   1452  1.6  christos     case 194: return gdb_sys_ftruncate64;
   1453  1.6  christos     case 195: return gdb_sys_stat64;
   1454  1.6  christos     case 196: return gdb_sys_lstat64;
   1455  1.6  christos     case 197: return gdb_sys_fstat64;
   1456  1.6  christos     case 198: return gdb_sys_lchown;
   1457  1.6  christos     case 199: return gdb_sys_getuid;
   1458  1.6  christos     case 200: return gdb_sys_getgid;
   1459  1.6  christos     case 201: return gdb_sys_geteuid;
   1460  1.6  christos     case 202: return gdb_sys_getegid;
   1461  1.6  christos     case 203: return gdb_sys_setreuid;
   1462  1.6  christos     case 204: return gdb_sys_setregid;
   1463  1.6  christos     case 205: return gdb_sys_getgroups;
   1464  1.6  christos     case 206: return gdb_sys_setgroups;
   1465  1.6  christos     case 207: return gdb_sys_fchown;
   1466  1.6  christos     case 208: return gdb_sys_setresuid;
   1467  1.6  christos     case 209: return gdb_sys_getresuid;
   1468  1.6  christos     case 210: return gdb_sys_setresgid;
   1469  1.6  christos     case 211: return gdb_sys_getresgid;
   1470  1.6  christos     case 212: return gdb_sys_chown;
   1471  1.6  christos     case 213: return gdb_sys_setuid;
   1472  1.6  christos     case 214: return gdb_sys_setgid;
   1473  1.6  christos     case 215: return gdb_sys_setfsuid;
   1474  1.6  christos     case 216: return gdb_sys_setfsgid;
   1475  1.6  christos     case 217: return gdb_sys_getdents64;
   1476  1.6  christos     case 218: return gdb_sys_pivot_root;
   1477  1.6  christos     case 219: return gdb_sys_mincore;
   1478  1.6  christos     case 220: return gdb_sys_madvise;
   1479  1.6  christos     case 221: return gdb_sys_fcntl64;
   1480  1.6  christos     case 224: return gdb_sys_gettid;
   1481  1.6  christos     case 225: return gdb_sys_readahead;
   1482  1.6  christos     case 226: return gdb_sys_setxattr;
   1483  1.6  christos     case 227: return gdb_sys_lsetxattr;
   1484  1.6  christos     case 228: return gdb_sys_fsetxattr;
   1485  1.6  christos     case 229: return gdb_sys_getxattr;
   1486  1.6  christos     case 230: return gdb_sys_lgetxattr;
   1487  1.6  christos     case 231: return gdb_sys_fgetxattr;
   1488  1.6  christos     case 232: return gdb_sys_listxattr;
   1489  1.6  christos     case 233: return gdb_sys_llistxattr;
   1490  1.6  christos     case 234: return gdb_sys_flistxattr;
   1491  1.6  christos     case 235: return gdb_sys_removexattr;
   1492  1.6  christos     case 236: return gdb_sys_lremovexattr;
   1493  1.6  christos     case 237: return gdb_sys_fremovexattr;
   1494  1.6  christos     case 238: return gdb_sys_tkill;
   1495  1.6  christos     case 239: return gdb_sys_sendfile64;
   1496  1.6  christos     case 240: return gdb_sys_futex;
   1497  1.6  christos     case 241: return gdb_sys_sched_setaffinity;
   1498  1.6  christos     case 242: return gdb_sys_sched_getaffinity;
   1499  1.6  christos     case 243: return gdb_sys_io_setup;
   1500  1.6  christos     case 244: return gdb_sys_io_destroy;
   1501  1.6  christos     case 245: return gdb_sys_io_getevents;
   1502  1.6  christos     case 246: return gdb_sys_io_submit;
   1503  1.6  christos     case 247: return gdb_sys_io_cancel;
   1504  1.6  christos     case 248: return gdb_sys_exit_group;
   1505  1.6  christos     case 249: return gdb_sys_lookup_dcookie;
   1506  1.6  christos     case 250: return gdb_sys_epoll_create;
   1507  1.6  christos     case 251: return gdb_sys_epoll_ctl;
   1508  1.6  christos     case 252: return gdb_sys_epoll_wait;
   1509  1.6  christos     case 253: return gdb_sys_remap_file_pages;
   1510  1.6  christos     case 256: return gdb_sys_set_tid_address;
   1511  1.6  christos     case 257: return gdb_sys_timer_create;
   1512  1.6  christos     case 258: return gdb_sys_timer_settime;
   1513  1.6  christos     case 259: return gdb_sys_timer_gettime;
   1514  1.6  christos     case 260: return gdb_sys_timer_getoverrun;
   1515  1.6  christos     case 261: return gdb_sys_timer_delete;
   1516  1.6  christos     case 262: return gdb_sys_clock_settime;
   1517  1.6  christos     case 263: return gdb_sys_clock_gettime;
   1518  1.6  christos     case 264: return gdb_sys_clock_getres;
   1519  1.6  christos     case 265: return gdb_sys_clock_nanosleep;
   1520  1.6  christos     case 266: return gdb_sys_statfs64;
   1521  1.6  christos     case 267: return gdb_sys_fstatfs64;
   1522  1.6  christos     case 268: return gdb_sys_tgkill;
   1523  1.6  christos     case 269: return gdb_sys_utimes;
   1524  1.6  christos       /*
   1525  1.6  christos     case 270: return gdb_sys_arm_fadvise64_64;
   1526  1.6  christos     case 271: return gdb_sys_pciconfig_iobase;
   1527  1.6  christos     case 272: return gdb_sys_pciconfig_read;
   1528  1.6  christos     case 273: return gdb_sys_pciconfig_write;
   1529  1.6  christos       */
   1530  1.6  christos     case 274: return gdb_sys_mq_open;
   1531  1.6  christos     case 275: return gdb_sys_mq_unlink;
   1532  1.6  christos     case 276: return gdb_sys_mq_timedsend;
   1533  1.6  christos     case 277: return gdb_sys_mq_timedreceive;
   1534  1.6  christos     case 278: return gdb_sys_mq_notify;
   1535  1.6  christos     case 279: return gdb_sys_mq_getsetattr;
   1536  1.6  christos     case 280: return gdb_sys_waitid;
   1537  1.6  christos     case 281: return gdb_sys_socket;
   1538  1.6  christos     case 282: return gdb_sys_bind;
   1539  1.6  christos     case 283: return gdb_sys_connect;
   1540  1.6  christos     case 284: return gdb_sys_listen;
   1541  1.6  christos     case 285: return gdb_sys_accept;
   1542  1.6  christos     case 286: return gdb_sys_getsockname;
   1543  1.6  christos     case 287: return gdb_sys_getpeername;
   1544  1.6  christos     case 288: return gdb_sys_socketpair;
   1545  1.6  christos     case 289: /* send */ return gdb_sys_no_syscall;
   1546  1.6  christos     case 290: return gdb_sys_sendto;
   1547  1.6  christos     case 291: return gdb_sys_recv;
   1548  1.6  christos     case 292: return gdb_sys_recvfrom;
   1549  1.6  christos     case 293: return gdb_sys_shutdown;
   1550  1.6  christos     case 294: return gdb_sys_setsockopt;
   1551  1.6  christos     case 295: return gdb_sys_getsockopt;
   1552  1.6  christos     case 296: return gdb_sys_sendmsg;
   1553  1.6  christos     case 297: return gdb_sys_recvmsg;
   1554  1.6  christos     case 298: return gdb_sys_semop;
   1555  1.6  christos     case 299: return gdb_sys_semget;
   1556  1.6  christos     case 300: return gdb_sys_semctl;
   1557  1.6  christos     case 301: return gdb_sys_msgsnd;
   1558  1.6  christos     case 302: return gdb_sys_msgrcv;
   1559  1.6  christos     case 303: return gdb_sys_msgget;
   1560  1.6  christos     case 304: return gdb_sys_msgctl;
   1561  1.6  christos     case 305: return gdb_sys_shmat;
   1562  1.6  christos     case 306: return gdb_sys_shmdt;
   1563  1.6  christos     case 307: return gdb_sys_shmget;
   1564  1.6  christos     case 308: return gdb_sys_shmctl;
   1565  1.6  christos     case 309: return gdb_sys_add_key;
   1566  1.6  christos     case 310: return gdb_sys_request_key;
   1567  1.6  christos     case 311: return gdb_sys_keyctl;
   1568  1.6  christos     case 312: return gdb_sys_semtimedop;
   1569  1.6  christos     case 313: /* vserver */ return gdb_sys_no_syscall;
   1570  1.6  christos     case 314: return gdb_sys_ioprio_set;
   1571  1.6  christos     case 315: return gdb_sys_ioprio_get;
   1572  1.6  christos     case 316: return gdb_sys_inotify_init;
   1573  1.6  christos     case 317: return gdb_sys_inotify_add_watch;
   1574  1.6  christos     case 318: return gdb_sys_inotify_rm_watch;
   1575  1.6  christos     case 319: return gdb_sys_mbind;
   1576  1.6  christos     case 320: return gdb_sys_get_mempolicy;
   1577  1.6  christos     case 321: return gdb_sys_set_mempolicy;
   1578  1.6  christos     case 322: return gdb_sys_openat;
   1579  1.6  christos     case 323: return gdb_sys_mkdirat;
   1580  1.6  christos     case 324: return gdb_sys_mknodat;
   1581  1.6  christos     case 325: return gdb_sys_fchownat;
   1582  1.6  christos     case 326: return gdb_sys_futimesat;
   1583  1.6  christos     case 327: return gdb_sys_fstatat64;
   1584  1.6  christos     case 328: return gdb_sys_unlinkat;
   1585  1.6  christos     case 329: return gdb_sys_renameat;
   1586  1.6  christos     case 330: return gdb_sys_linkat;
   1587  1.6  christos     case 331: return gdb_sys_symlinkat;
   1588  1.6  christos     case 332: return gdb_sys_readlinkat;
   1589  1.6  christos     case 333: return gdb_sys_fchmodat;
   1590  1.6  christos     case 334: return gdb_sys_faccessat;
   1591  1.6  christos     case 335: return gdb_sys_pselect6;
   1592  1.6  christos     case 336: return gdb_sys_ppoll;
   1593  1.6  christos     case 337: return gdb_sys_unshare;
   1594  1.6  christos     case 338: return gdb_sys_set_robust_list;
   1595  1.6  christos     case 339: return gdb_sys_get_robust_list;
   1596  1.6  christos     case 340: return gdb_sys_splice;
   1597  1.6  christos     /*case 341: return gdb_sys_arm_sync_file_range;*/
   1598  1.6  christos     case 342: return gdb_sys_tee;
   1599  1.6  christos     case 343: return gdb_sys_vmsplice;
   1600  1.6  christos     case 344: return gdb_sys_move_pages;
   1601  1.6  christos     case 345: return gdb_sys_getcpu;
   1602  1.6  christos     case 346: return gdb_sys_epoll_pwait;
   1603  1.6  christos     case 347: return gdb_sys_kexec_load;
   1604  1.6  christos       /*
   1605  1.6  christos     case 348: return gdb_sys_utimensat;
   1606  1.6  christos     case 349: return gdb_sys_signalfd;
   1607  1.6  christos     case 350: return gdb_sys_timerfd_create;
   1608  1.6  christos     case 351: return gdb_sys_eventfd;
   1609  1.6  christos       */
   1610  1.6  christos     case 352: return gdb_sys_fallocate;
   1611  1.6  christos       /*
   1612  1.6  christos     case 353: return gdb_sys_timerfd_settime;
   1613  1.6  christos     case 354: return gdb_sys_timerfd_gettime;
   1614  1.6  christos     case 355: return gdb_sys_signalfd4;
   1615  1.6  christos       */
   1616  1.6  christos     case 356: return gdb_sys_eventfd2;
   1617  1.6  christos     case 357: return gdb_sys_epoll_create1;
   1618  1.6  christos     case 358: return gdb_sys_dup3;
   1619  1.6  christos     case 359: return gdb_sys_pipe2;
   1620  1.6  christos     case 360: return gdb_sys_inotify_init1;
   1621  1.6  christos       /*
   1622  1.6  christos     case 361: return gdb_sys_preadv;
   1623  1.6  christos     case 362: return gdb_sys_pwritev;
   1624  1.6  christos     case 363: return gdb_sys_rt_tgsigqueueinfo;
   1625  1.6  christos     case 364: return gdb_sys_perf_event_open;
   1626  1.6  christos     case 365: return gdb_sys_recvmmsg;
   1627  1.6  christos     case 366: return gdb_sys_accept4;
   1628  1.6  christos     case 367: return gdb_sys_fanotify_init;
   1629  1.6  christos     case 368: return gdb_sys_fanotify_mark;
   1630  1.6  christos     case 369: return gdb_sys_prlimit64;
   1631  1.6  christos     case 370: return gdb_sys_name_to_handle_at;
   1632  1.6  christos     case 371: return gdb_sys_open_by_handle_at;
   1633  1.6  christos     case 372: return gdb_sys_clock_adjtime;
   1634  1.6  christos     case 373: return gdb_sys_syncfs;
   1635  1.6  christos     case 374: return gdb_sys_sendmmsg;
   1636  1.6  christos     case 375: return gdb_sys_setns;
   1637  1.6  christos     case 376: return gdb_sys_process_vm_readv;
   1638  1.6  christos     case 377: return gdb_sys_process_vm_writev;
   1639  1.6  christos     case 378: return gdb_sys_kcmp;
   1640  1.6  christos     case 379: return gdb_sys_finit_module;
   1641  1.6  christos       */
   1642  1.6  christos     case 983041: /* ARM_breakpoint */ return gdb_sys_no_syscall;
   1643  1.6  christos     case 983042: /* ARM_cacheflush */ return gdb_sys_no_syscall;
   1644  1.6  christos     case 983043: /* ARM_usr26 */ return gdb_sys_no_syscall;
   1645  1.6  christos     case 983044: /* ARM_usr32 */ return gdb_sys_no_syscall;
   1646  1.6  christos     case 983045: /* ARM_set_tls */ return gdb_sys_no_syscall;
   1647  1.6  christos     default: return gdb_sys_no_syscall;
   1648  1.6  christos     }
   1649  1.3  christos }
   1650  1.3  christos 
   1651  1.3  christos /* Record all registers but PC register for process-record.  */
   1652  1.3  christos 
   1653  1.3  christos static int
   1654  1.3  christos arm_all_but_pc_registers_record (struct regcache *regcache)
   1655  1.3  christos {
   1656  1.3  christos   int i;
   1657  1.3  christos 
   1658  1.3  christos   for (i = 0; i < ARM_PC_REGNUM; i++)
   1659  1.3  christos     {
   1660  1.3  christos       if (record_full_arch_list_add_reg (regcache, ARM_A1_REGNUM + i))
   1661  1.3  christos         return -1;
   1662  1.3  christos     }
   1663  1.3  christos 
   1664  1.3  christos   if (record_full_arch_list_add_reg (regcache, ARM_PS_REGNUM))
   1665  1.3  christos     return -1;
   1666  1.3  christos 
   1667  1.3  christos   return 0;
   1668  1.3  christos }
   1669  1.3  christos 
   1670  1.3  christos /* Handler for arm system call instruction recording.  */
   1671  1.3  christos 
   1672  1.3  christos static int
   1673  1.3  christos arm_linux_syscall_record (struct regcache *regcache, unsigned long svc_number)
   1674  1.3  christos {
   1675  1.3  christos   int ret = 0;
   1676  1.3  christos   enum gdb_syscall syscall_gdb;
   1677  1.3  christos 
   1678  1.3  christos   syscall_gdb = arm_canonicalize_syscall (svc_number);
   1679  1.3  christos 
   1680  1.6  christos   if (syscall_gdb == gdb_sys_no_syscall)
   1681  1.3  christos     {
   1682  1.3  christos       printf_unfiltered (_("Process record and replay target doesn't "
   1683  1.3  christos                            "support syscall number %s\n"),
   1684  1.3  christos                            plongest (svc_number));
   1685  1.3  christos       return -1;
   1686  1.3  christos     }
   1687  1.3  christos 
   1688  1.3  christos   if (syscall_gdb == gdb_sys_sigreturn
   1689  1.3  christos       || syscall_gdb == gdb_sys_rt_sigreturn)
   1690  1.3  christos    {
   1691  1.3  christos      if (arm_all_but_pc_registers_record (regcache))
   1692  1.3  christos        return -1;
   1693  1.3  christos      return 0;
   1694  1.3  christos    }
   1695  1.3  christos 
   1696  1.3  christos   ret = record_linux_system_call (syscall_gdb, regcache,
   1697  1.3  christos                                   &arm_linux_record_tdep);
   1698  1.3  christos   if (ret != 0)
   1699  1.3  christos     return ret;
   1700  1.3  christos 
   1701  1.3  christos   /* Record the return value of the system call.  */
   1702  1.3  christos   if (record_full_arch_list_add_reg (regcache, ARM_A1_REGNUM))
   1703  1.3  christos     return -1;
   1704  1.3  christos   /* Record LR.  */
   1705  1.3  christos   if (record_full_arch_list_add_reg (regcache, ARM_LR_REGNUM))
   1706  1.3  christos     return -1;
   1707  1.3  christos   /* Record CPSR.  */
   1708  1.3  christos   if (record_full_arch_list_add_reg (regcache, ARM_PS_REGNUM))
   1709  1.3  christos     return -1;
   1710  1.3  christos 
   1711  1.3  christos   return 0;
   1712  1.3  christos }
   1713  1.3  christos 
   1714  1.3  christos /* Implement the skip_trampoline_code gdbarch method.  */
   1715  1.3  christos 
   1716  1.3  christos static CORE_ADDR
   1717  1.3  christos arm_linux_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
   1718  1.3  christos {
   1719  1.3  christos   CORE_ADDR target_pc = arm_skip_stub (frame, pc);
   1720  1.3  christos 
   1721  1.3  christos   if (target_pc != 0)
   1722  1.3  christos     return target_pc;
   1723  1.3  christos 
   1724  1.3  christos   return find_solib_trampoline_target (frame, pc);
   1725  1.3  christos }
   1726  1.3  christos 
   1727  1.1  christos static void
   1728  1.1  christos arm_linux_init_abi (struct gdbarch_info info,
   1729  1.1  christos 		    struct gdbarch *gdbarch)
   1730  1.1  christos {
   1731  1.1  christos   static const char *const stap_integer_prefixes[] = { "#", "$", "", NULL };
   1732  1.1  christos   static const char *const stap_register_prefixes[] = { "r", NULL };
   1733  1.1  christos   static const char *const stap_register_indirection_prefixes[] = { "[",
   1734  1.1  christos 								    NULL };
   1735  1.1  christos   static const char *const stap_register_indirection_suffixes[] = { "]",
   1736  1.1  christos 								    NULL };
   1737  1.1  christos   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
   1738  1.1  christos 
   1739  1.1  christos   linux_init_abi (info, gdbarch);
   1740  1.1  christos 
   1741  1.1  christos   tdep->lowest_pc = 0x8000;
   1742  1.3  christos   if (info.byte_order_for_code == BFD_ENDIAN_BIG)
   1743  1.1  christos     {
   1744  1.1  christos       if (tdep->arm_abi == ARM_ABI_AAPCS)
   1745  1.1  christos 	tdep->arm_breakpoint = eabi_linux_arm_be_breakpoint;
   1746  1.1  christos       else
   1747  1.1  christos 	tdep->arm_breakpoint = arm_linux_arm_be_breakpoint;
   1748  1.1  christos       tdep->thumb_breakpoint = arm_linux_thumb_be_breakpoint;
   1749  1.1  christos       tdep->thumb2_breakpoint = arm_linux_thumb2_be_breakpoint;
   1750  1.1  christos     }
   1751  1.1  christos   else
   1752  1.1  christos     {
   1753  1.1  christos       if (tdep->arm_abi == ARM_ABI_AAPCS)
   1754  1.1  christos 	tdep->arm_breakpoint = eabi_linux_arm_le_breakpoint;
   1755  1.1  christos       else
   1756  1.1  christos 	tdep->arm_breakpoint = arm_linux_arm_le_breakpoint;
   1757  1.1  christos       tdep->thumb_breakpoint = arm_linux_thumb_le_breakpoint;
   1758  1.1  christos       tdep->thumb2_breakpoint = arm_linux_thumb2_le_breakpoint;
   1759  1.1  christos     }
   1760  1.1  christos   tdep->arm_breakpoint_size = sizeof (arm_linux_arm_le_breakpoint);
   1761  1.1  christos   tdep->thumb_breakpoint_size = sizeof (arm_linux_thumb_le_breakpoint);
   1762  1.1  christos   tdep->thumb2_breakpoint_size = sizeof (arm_linux_thumb2_le_breakpoint);
   1763  1.1  christos 
   1764  1.1  christos   if (tdep->fp_model == ARM_FLOAT_AUTO)
   1765  1.1  christos     tdep->fp_model = ARM_FLOAT_FPA;
   1766  1.1  christos 
   1767  1.1  christos   switch (tdep->fp_model)
   1768  1.1  christos     {
   1769  1.1  christos     case ARM_FLOAT_FPA:
   1770  1.1  christos       tdep->jb_pc = ARM_LINUX_JB_PC_FPA;
   1771  1.1  christos       break;
   1772  1.1  christos     case ARM_FLOAT_SOFT_FPA:
   1773  1.1  christos     case ARM_FLOAT_SOFT_VFP:
   1774  1.1  christos     case ARM_FLOAT_VFP:
   1775  1.1  christos       tdep->jb_pc = ARM_LINUX_JB_PC_EABI;
   1776  1.1  christos       break;
   1777  1.1  christos     default:
   1778  1.1  christos       internal_error
   1779  1.1  christos 	(__FILE__, __LINE__,
   1780  1.1  christos          _("arm_linux_init_abi: Floating point model not supported"));
   1781  1.1  christos       break;
   1782  1.1  christos     }
   1783  1.1  christos   tdep->jb_elt_size = ARM_LINUX_JB_ELEMENT_SIZE;
   1784  1.1  christos 
   1785  1.1  christos   set_solib_svr4_fetch_link_map_offsets
   1786  1.1  christos     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
   1787  1.1  christos 
   1788  1.1  christos   /* Single stepping.  */
   1789  1.1  christos   set_gdbarch_software_single_step (gdbarch, arm_linux_software_single_step);
   1790  1.1  christos 
   1791  1.1  christos   /* Shared library handling.  */
   1792  1.3  christos   set_gdbarch_skip_trampoline_code (gdbarch, arm_linux_skip_trampoline_code);
   1793  1.1  christos   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
   1794  1.1  christos 
   1795  1.1  christos   /* Enable TLS support.  */
   1796  1.1  christos   set_gdbarch_fetch_tls_load_module_address (gdbarch,
   1797  1.1  christos                                              svr4_fetch_objfile_link_map);
   1798  1.1  christos 
   1799  1.1  christos   tramp_frame_prepend_unwinder (gdbarch,
   1800  1.1  christos 				&arm_linux_sigreturn_tramp_frame);
   1801  1.1  christos   tramp_frame_prepend_unwinder (gdbarch,
   1802  1.1  christos 				&arm_linux_rt_sigreturn_tramp_frame);
   1803  1.1  christos   tramp_frame_prepend_unwinder (gdbarch,
   1804  1.1  christos 				&arm_eabi_linux_sigreturn_tramp_frame);
   1805  1.1  christos   tramp_frame_prepend_unwinder (gdbarch,
   1806  1.1  christos 				&arm_eabi_linux_rt_sigreturn_tramp_frame);
   1807  1.1  christos   tramp_frame_prepend_unwinder (gdbarch,
   1808  1.3  christos 				&thumb2_eabi_linux_sigreturn_tramp_frame);
   1809  1.3  christos   tramp_frame_prepend_unwinder (gdbarch,
   1810  1.3  christos 				&thumb2_eabi_linux_rt_sigreturn_tramp_frame);
   1811  1.3  christos   tramp_frame_prepend_unwinder (gdbarch,
   1812  1.1  christos 				&arm_linux_restart_syscall_tramp_frame);
   1813  1.1  christos   tramp_frame_prepend_unwinder (gdbarch,
   1814  1.1  christos 				&arm_kernel_linux_restart_syscall_tramp_frame);
   1815  1.1  christos 
   1816  1.1  christos   /* Core file support.  */
   1817  1.3  christos   set_gdbarch_iterate_over_regset_sections
   1818  1.3  christos     (gdbarch, arm_linux_iterate_over_regset_sections);
   1819  1.1  christos   set_gdbarch_core_read_description (gdbarch, arm_linux_core_read_description);
   1820  1.1  christos 
   1821  1.1  christos   /* Displaced stepping.  */
   1822  1.1  christos   set_gdbarch_displaced_step_copy_insn (gdbarch,
   1823  1.1  christos 					arm_linux_displaced_step_copy_insn);
   1824  1.1  christos   set_gdbarch_displaced_step_fixup (gdbarch, arm_displaced_step_fixup);
   1825  1.1  christos   set_gdbarch_displaced_step_free_closure (gdbarch,
   1826  1.1  christos 					   simple_displaced_step_free_closure);
   1827  1.5  christos   set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location);
   1828  1.1  christos 
   1829  1.1  christos   /* Reversible debugging, process record.  */
   1830  1.1  christos   set_gdbarch_process_record (gdbarch, arm_process_record);
   1831  1.1  christos 
   1832  1.1  christos   /* SystemTap functions.  */
   1833  1.1  christos   set_gdbarch_stap_integer_prefixes (gdbarch, stap_integer_prefixes);
   1834  1.1  christos   set_gdbarch_stap_register_prefixes (gdbarch, stap_register_prefixes);
   1835  1.1  christos   set_gdbarch_stap_register_indirection_prefixes (gdbarch,
   1836  1.1  christos 					  stap_register_indirection_prefixes);
   1837  1.1  christos   set_gdbarch_stap_register_indirection_suffixes (gdbarch,
   1838  1.1  christos 					  stap_register_indirection_suffixes);
   1839  1.1  christos   set_gdbarch_stap_gdb_register_prefix (gdbarch, "r");
   1840  1.1  christos   set_gdbarch_stap_is_single_operand (gdbarch, arm_stap_is_single_operand);
   1841  1.1  christos   set_gdbarch_stap_parse_special_token (gdbarch,
   1842  1.1  christos 					arm_stap_parse_special_token);
   1843  1.1  christos 
   1844  1.1  christos   /* `catch syscall' */
   1845  1.3  christos   set_xml_syscall_file_name (gdbarch, "syscalls/arm-linux.xml");
   1846  1.1  christos   set_gdbarch_get_syscall_number (gdbarch, arm_linux_get_syscall_number);
   1847  1.1  christos 
   1848  1.1  christos   /* Syscall record.  */
   1849  1.3  christos   tdep->arm_syscall_record = arm_linux_syscall_record;
   1850  1.3  christos 
   1851  1.3  christos   /* Initialize the arm_linux_record_tdep.  */
   1852  1.3  christos   /* These values are the size of the type that will be used in a system
   1853  1.3  christos      call.  They are obtained from Linux Kernel source.  */
   1854  1.3  christos   arm_linux_record_tdep.size_pointer
   1855  1.3  christos     = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
   1856  1.3  christos   arm_linux_record_tdep.size__old_kernel_stat = 32;
   1857  1.3  christos   arm_linux_record_tdep.size_tms = 16;
   1858  1.3  christos   arm_linux_record_tdep.size_loff_t = 8;
   1859  1.3  christos   arm_linux_record_tdep.size_flock = 16;
   1860  1.3  christos   arm_linux_record_tdep.size_oldold_utsname = 45;
   1861  1.3  christos   arm_linux_record_tdep.size_ustat = 20;
   1862  1.6  christos   arm_linux_record_tdep.size_old_sigaction = 16;
   1863  1.6  christos   arm_linux_record_tdep.size_old_sigset_t = 4;
   1864  1.3  christos   arm_linux_record_tdep.size_rlimit = 8;
   1865  1.3  christos   arm_linux_record_tdep.size_rusage = 72;
   1866  1.3  christos   arm_linux_record_tdep.size_timeval = 8;
   1867  1.3  christos   arm_linux_record_tdep.size_timezone = 8;
   1868  1.3  christos   arm_linux_record_tdep.size_old_gid_t = 2;
   1869  1.3  christos   arm_linux_record_tdep.size_old_uid_t = 2;
   1870  1.3  christos   arm_linux_record_tdep.size_fd_set = 128;
   1871  1.6  christos   arm_linux_record_tdep.size_old_dirent = 268;
   1872  1.3  christos   arm_linux_record_tdep.size_statfs = 64;
   1873  1.3  christos   arm_linux_record_tdep.size_statfs64 = 84;
   1874  1.3  christos   arm_linux_record_tdep.size_sockaddr = 16;
   1875  1.3  christos   arm_linux_record_tdep.size_int
   1876  1.3  christos     = gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT;
   1877  1.3  christos   arm_linux_record_tdep.size_long
   1878  1.3  christos     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
   1879  1.3  christos   arm_linux_record_tdep.size_ulong
   1880  1.3  christos     = gdbarch_long_bit (gdbarch) / TARGET_CHAR_BIT;
   1881  1.3  christos   arm_linux_record_tdep.size_msghdr = 28;
   1882  1.3  christos   arm_linux_record_tdep.size_itimerval = 16;
   1883  1.3  christos   arm_linux_record_tdep.size_stat = 88;
   1884  1.3  christos   arm_linux_record_tdep.size_old_utsname = 325;
   1885  1.3  christos   arm_linux_record_tdep.size_sysinfo = 64;
   1886  1.3  christos   arm_linux_record_tdep.size_msqid_ds = 88;
   1887  1.3  christos   arm_linux_record_tdep.size_shmid_ds = 84;
   1888  1.3  christos   arm_linux_record_tdep.size_new_utsname = 390;
   1889  1.3  christos   arm_linux_record_tdep.size_timex = 128;
   1890  1.3  christos   arm_linux_record_tdep.size_mem_dqinfo = 24;
   1891  1.3  christos   arm_linux_record_tdep.size_if_dqblk = 68;
   1892  1.3  christos   arm_linux_record_tdep.size_fs_quota_stat = 68;
   1893  1.3  christos   arm_linux_record_tdep.size_timespec = 8;
   1894  1.3  christos   arm_linux_record_tdep.size_pollfd = 8;
   1895  1.3  christos   arm_linux_record_tdep.size_NFS_FHSIZE = 32;
   1896  1.3  christos   arm_linux_record_tdep.size_knfsd_fh = 132;
   1897  1.3  christos   arm_linux_record_tdep.size_TASK_COMM_LEN = 16;
   1898  1.6  christos   arm_linux_record_tdep.size_sigaction = 20;
   1899  1.3  christos   arm_linux_record_tdep.size_sigset_t = 8;
   1900  1.3  christos   arm_linux_record_tdep.size_siginfo_t = 128;
   1901  1.3  christos   arm_linux_record_tdep.size_cap_user_data_t = 12;
   1902  1.3  christos   arm_linux_record_tdep.size_stack_t = 12;
   1903  1.3  christos   arm_linux_record_tdep.size_off_t = arm_linux_record_tdep.size_long;
   1904  1.3  christos   arm_linux_record_tdep.size_stat64 = 96;
   1905  1.6  christos   arm_linux_record_tdep.size_gid_t = 4;
   1906  1.6  christos   arm_linux_record_tdep.size_uid_t = 4;
   1907  1.3  christos   arm_linux_record_tdep.size_PAGE_SIZE = 4096;
   1908  1.3  christos   arm_linux_record_tdep.size_flock64 = 24;
   1909  1.3  christos   arm_linux_record_tdep.size_user_desc = 16;
   1910  1.3  christos   arm_linux_record_tdep.size_io_event = 32;
   1911  1.3  christos   arm_linux_record_tdep.size_iocb = 64;
   1912  1.3  christos   arm_linux_record_tdep.size_epoll_event = 12;
   1913  1.3  christos   arm_linux_record_tdep.size_itimerspec
   1914  1.3  christos     = arm_linux_record_tdep.size_timespec * 2;
   1915  1.3  christos   arm_linux_record_tdep.size_mq_attr = 32;
   1916  1.3  christos   arm_linux_record_tdep.size_termios = 36;
   1917  1.3  christos   arm_linux_record_tdep.size_termios2 = 44;
   1918  1.3  christos   arm_linux_record_tdep.size_pid_t = 4;
   1919  1.3  christos   arm_linux_record_tdep.size_winsize = 8;
   1920  1.3  christos   arm_linux_record_tdep.size_serial_struct = 60;
   1921  1.3  christos   arm_linux_record_tdep.size_serial_icounter_struct = 80;
   1922  1.3  christos   arm_linux_record_tdep.size_hayes_esp_config = 12;
   1923  1.3  christos   arm_linux_record_tdep.size_size_t = 4;
   1924  1.3  christos   arm_linux_record_tdep.size_iovec = 8;
   1925  1.6  christos   arm_linux_record_tdep.size_time_t = 4;
   1926  1.3  christos 
   1927  1.3  christos   /* These values are the second argument of system call "sys_ioctl".
   1928  1.3  christos      They are obtained from Linux Kernel source.  */
   1929  1.3  christos   arm_linux_record_tdep.ioctl_TCGETS = 0x5401;
   1930  1.3  christos   arm_linux_record_tdep.ioctl_TCSETS = 0x5402;
   1931  1.3  christos   arm_linux_record_tdep.ioctl_TCSETSW = 0x5403;
   1932  1.3  christos   arm_linux_record_tdep.ioctl_TCSETSF = 0x5404;
   1933  1.3  christos   arm_linux_record_tdep.ioctl_TCGETA = 0x5405;
   1934  1.3  christos   arm_linux_record_tdep.ioctl_TCSETA = 0x5406;
   1935  1.3  christos   arm_linux_record_tdep.ioctl_TCSETAW = 0x5407;
   1936  1.3  christos   arm_linux_record_tdep.ioctl_TCSETAF = 0x5408;
   1937  1.3  christos   arm_linux_record_tdep.ioctl_TCSBRK = 0x5409;
   1938  1.3  christos   arm_linux_record_tdep.ioctl_TCXONC = 0x540a;
   1939  1.3  christos   arm_linux_record_tdep.ioctl_TCFLSH = 0x540b;
   1940  1.3  christos   arm_linux_record_tdep.ioctl_TIOCEXCL = 0x540c;
   1941  1.3  christos   arm_linux_record_tdep.ioctl_TIOCNXCL = 0x540d;
   1942  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSCTTY = 0x540e;
   1943  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGPGRP = 0x540f;
   1944  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSPGRP = 0x5410;
   1945  1.3  christos   arm_linux_record_tdep.ioctl_TIOCOUTQ = 0x5411;
   1946  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSTI = 0x5412;
   1947  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGWINSZ = 0x5413;
   1948  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSWINSZ = 0x5414;
   1949  1.3  christos   arm_linux_record_tdep.ioctl_TIOCMGET = 0x5415;
   1950  1.3  christos   arm_linux_record_tdep.ioctl_TIOCMBIS = 0x5416;
   1951  1.3  christos   arm_linux_record_tdep.ioctl_TIOCMBIC = 0x5417;
   1952  1.3  christos   arm_linux_record_tdep.ioctl_TIOCMSET = 0x5418;
   1953  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGSOFTCAR = 0x5419;
   1954  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSSOFTCAR = 0x541a;
   1955  1.3  christos   arm_linux_record_tdep.ioctl_FIONREAD = 0x541b;
   1956  1.3  christos   arm_linux_record_tdep.ioctl_TIOCINQ = arm_linux_record_tdep.ioctl_FIONREAD;
   1957  1.3  christos   arm_linux_record_tdep.ioctl_TIOCLINUX = 0x541c;
   1958  1.3  christos   arm_linux_record_tdep.ioctl_TIOCCONS = 0x541d;
   1959  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGSERIAL = 0x541e;
   1960  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSSERIAL = 0x541f;
   1961  1.3  christos   arm_linux_record_tdep.ioctl_TIOCPKT = 0x5420;
   1962  1.3  christos   arm_linux_record_tdep.ioctl_FIONBIO = 0x5421;
   1963  1.3  christos   arm_linux_record_tdep.ioctl_TIOCNOTTY = 0x5422;
   1964  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSETD = 0x5423;
   1965  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGETD = 0x5424;
   1966  1.3  christos   arm_linux_record_tdep.ioctl_TCSBRKP = 0x5425;
   1967  1.3  christos   arm_linux_record_tdep.ioctl_TIOCTTYGSTRUCT = 0x5426;
   1968  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSBRK = 0x5427;
   1969  1.3  christos   arm_linux_record_tdep.ioctl_TIOCCBRK = 0x5428;
   1970  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGSID = 0x5429;
   1971  1.3  christos   arm_linux_record_tdep.ioctl_TCGETS2 = 0x802c542a;
   1972  1.3  christos   arm_linux_record_tdep.ioctl_TCSETS2 = 0x402c542b;
   1973  1.3  christos   arm_linux_record_tdep.ioctl_TCSETSW2 = 0x402c542c;
   1974  1.3  christos   arm_linux_record_tdep.ioctl_TCSETSF2 = 0x402c542d;
   1975  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGPTN = 0x80045430;
   1976  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSPTLCK = 0x40045431;
   1977  1.3  christos   arm_linux_record_tdep.ioctl_FIONCLEX = 0x5450;
   1978  1.3  christos   arm_linux_record_tdep.ioctl_FIOCLEX = 0x5451;
   1979  1.3  christos   arm_linux_record_tdep.ioctl_FIOASYNC = 0x5452;
   1980  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERCONFIG = 0x5453;
   1981  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERGWILD = 0x5454;
   1982  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERSWILD = 0x5455;
   1983  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGLCKTRMIOS = 0x5456;
   1984  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSLCKTRMIOS = 0x5457;
   1985  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERGSTRUCT = 0x5458;
   1986  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERGETLSR = 0x5459;
   1987  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERGETMULTI = 0x545a;
   1988  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSERSETMULTI = 0x545b;
   1989  1.3  christos   arm_linux_record_tdep.ioctl_TIOCMIWAIT = 0x545c;
   1990  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGICOUNT = 0x545d;
   1991  1.3  christos   arm_linux_record_tdep.ioctl_TIOCGHAYESESP = 0x545e;
   1992  1.3  christos   arm_linux_record_tdep.ioctl_TIOCSHAYESESP = 0x545f;
   1993  1.3  christos   arm_linux_record_tdep.ioctl_FIOQSIZE = 0x5460;
   1994  1.3  christos 
   1995  1.3  christos   /* These values are the second argument of system call "sys_fcntl"
   1996  1.3  christos      and "sys_fcntl64".  They are obtained from Linux Kernel source.  */
   1997  1.3  christos   arm_linux_record_tdep.fcntl_F_GETLK = 5;
   1998  1.3  christos   arm_linux_record_tdep.fcntl_F_GETLK64 = 12;
   1999  1.3  christos   arm_linux_record_tdep.fcntl_F_SETLK64 = 13;
   2000  1.3  christos   arm_linux_record_tdep.fcntl_F_SETLKW64 = 14;
   2001  1.3  christos 
   2002  1.6  christos   arm_linux_record_tdep.arg1 = ARM_A1_REGNUM;
   2003  1.6  christos   arm_linux_record_tdep.arg2 = ARM_A1_REGNUM + 1;
   2004  1.6  christos   arm_linux_record_tdep.arg3 = ARM_A1_REGNUM + 2;
   2005  1.3  christos   arm_linux_record_tdep.arg4 = ARM_A1_REGNUM + 3;
   2006  1.6  christos   arm_linux_record_tdep.arg5 = ARM_A1_REGNUM + 4;
   2007  1.6  christos   arm_linux_record_tdep.arg6 = ARM_A1_REGNUM + 5;
   2008  1.6  christos   arm_linux_record_tdep.arg7 = ARM_A1_REGNUM + 6;
   2009  1.1  christos }
   2010  1.1  christos 
   2011  1.1  christos /* Provide a prototype to silence -Wmissing-prototypes.  */
   2012  1.1  christos extern initialize_file_ftype _initialize_arm_linux_tdep;
   2013  1.1  christos 
   2014  1.1  christos void
   2015  1.1  christos _initialize_arm_linux_tdep (void)
   2016  1.1  christos {
   2017  1.1  christos   gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_LINUX,
   2018  1.1  christos 			  arm_linux_init_abi);
   2019  1.1  christos }
   2020