]> Git Repo - binutils.git/blob - gdb/arm-tdep.c
Sort includes for files gdb/[a-f]*.[chyl].
[binutils.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2
3    Copyright (C) 1988-2019 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21
22 /* Standard C includes.  */
23 #include <ctype.h>
24
25 /* Standard C++ includes.  */
26 #include <algorithm>
27
28 /* Local non-gdb includes.  */
29 #include "arch-utils.h"
30 #include "arch/arm-get-next-pcs.h"
31 #include "arch/arm.h"
32 #include "arm-tdep.h"
33 #include "coff/internal.h"
34 #include "common/vec.h"
35 #include "dis-asm.h"
36 #include "disasm.h"
37 #include "dwarf2-frame.h"
38 #include "elf-bfd.h"
39 #include "elf/arm.h"
40 #include "features/arm/arm-with-iwmmxt.c"
41 #include "features/arm/arm-with-m-fpa-layout.c"
42 #include "features/arm/arm-with-m-vfp-d16.c"
43 #include "features/arm/arm-with-m.c"
44 #include "features/arm/arm-with-neon.c"
45 #include "features/arm/arm-with-vfpv2.c"
46 #include "features/arm/arm-with-vfpv3.c"
47 #include "frame-base.h"
48 #include "frame-unwind.h"
49 #include "frame.h"
50 #include "gdb/sim-arm.h"
51 #include "gdbcmd.h"
52 #include "gdbcore.h"
53 #include "gdbtypes.h"
54 #include "inferior.h"
55 #include "infrun.h"
56 #include "objfiles.h"
57 #include "observable.h"
58 #include "osabi.h"
59 #include "prologue-value.h"
60 #include "record-full.h"
61 #include "record.h"
62 #include "regcache.h"
63 #include "reggroups.h"
64 #include "remote.h"
65 #include "target-descriptions.h"
66 #include "target-float.h"
67 #include "trad-frame.h"
68 #include "user-regs.h"
69 #include "value.h"
70
71 #if GDB_SELF_TEST
72 #include "common/selftest.h"
73 #endif
74
75 static int arm_debug;
76
77 /* Macros for setting and testing a bit in a minimal symbol that marks
78    it as Thumb function.  The MSB of the minimal symbol's "info" field
79    is used for this purpose.
80
81    MSYMBOL_SET_SPECIAL  Actually sets the "special" bit.
82    MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.  */
83
84 #define MSYMBOL_SET_SPECIAL(msym)                               \
85         MSYMBOL_TARGET_FLAG_1 (msym) = 1
86
87 #define MSYMBOL_IS_SPECIAL(msym)                                \
88         MSYMBOL_TARGET_FLAG_1 (msym)
89
90 /* Per-objfile data used for mapping symbols.  */
91 static const struct objfile_data *arm_objfile_data_key;
92
93 struct arm_mapping_symbol
94 {
95   bfd_vma value;
96   char type;
97 };
98 typedef struct arm_mapping_symbol arm_mapping_symbol_s;
99 DEF_VEC_O(arm_mapping_symbol_s);
100
101 struct arm_per_objfile
102 {
103   VEC(arm_mapping_symbol_s) **section_maps;
104 };
105
106 /* The list of available "set arm ..." and "show arm ..." commands.  */
107 static struct cmd_list_element *setarmcmdlist = NULL;
108 static struct cmd_list_element *showarmcmdlist = NULL;
109
110 /* The type of floating-point to use.  Keep this in sync with enum
111    arm_float_model, and the help string in _initialize_arm_tdep.  */
112 static const char *const fp_model_strings[] =
113 {
114   "auto",
115   "softfpa",
116   "fpa",
117   "softvfp",
118   "vfp",
119   NULL
120 };
121
122 /* A variable that can be configured by the user.  */
123 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
124 static const char *current_fp_model = "auto";
125
126 /* The ABI to use.  Keep this in sync with arm_abi_kind.  */
127 static const char *const arm_abi_strings[] =
128 {
129   "auto",
130   "APCS",
131   "AAPCS",
132   NULL
133 };
134
135 /* A variable that can be configured by the user.  */
136 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
137 static const char *arm_abi_string = "auto";
138
139 /* The execution mode to assume.  */
140 static const char *const arm_mode_strings[] =
141   {
142     "auto",
143     "arm",
144     "thumb",
145     NULL
146   };
147
148 static const char *arm_fallback_mode_string = "auto";
149 static const char *arm_force_mode_string = "auto";
150
151 /* The standard register names, and all the valid aliases for them.  Note
152    that `fp', `sp' and `pc' are not added in this alias list, because they
153    have been added as builtin user registers in
154    std-regs.c:_initialize_frame_reg.  */
155 static const struct
156 {
157   const char *name;
158   int regnum;
159 } arm_register_aliases[] = {
160   /* Basic register numbers.  */
161   { "r0", 0 },
162   { "r1", 1 },
163   { "r2", 2 },
164   { "r3", 3 },
165   { "r4", 4 },
166   { "r5", 5 },
167   { "r6", 6 },
168   { "r7", 7 },
169   { "r8", 8 },
170   { "r9", 9 },
171   { "r10", 10 },
172   { "r11", 11 },
173   { "r12", 12 },
174   { "r13", 13 },
175   { "r14", 14 },
176   { "r15", 15 },
177   /* Synonyms (argument and variable registers).  */
178   { "a1", 0 },
179   { "a2", 1 },
180   { "a3", 2 },
181   { "a4", 3 },
182   { "v1", 4 },
183   { "v2", 5 },
184   { "v3", 6 },
185   { "v4", 7 },
186   { "v5", 8 },
187   { "v6", 9 },
188   { "v7", 10 },
189   { "v8", 11 },
190   /* Other platform-specific names for r9.  */
191   { "sb", 9 },
192   { "tr", 9 },
193   /* Special names.  */
194   { "ip", 12 },
195   { "lr", 14 },
196   /* Names used by GCC (not listed in the ARM EABI).  */
197   { "sl", 10 },
198   /* A special name from the older ATPCS.  */
199   { "wr", 7 },
200 };
201
202 static const char *const arm_register_names[] =
203 {"r0",  "r1",  "r2",  "r3",     /*  0  1  2  3 */
204  "r4",  "r5",  "r6",  "r7",     /*  4  5  6  7 */
205  "r8",  "r9",  "r10", "r11",    /*  8  9 10 11 */
206  "r12", "sp",  "lr",  "pc",     /* 12 13 14 15 */
207  "f0",  "f1",  "f2",  "f3",     /* 16 17 18 19 */
208  "f4",  "f5",  "f6",  "f7",     /* 20 21 22 23 */
209  "fps", "cpsr" };               /* 24 25       */
210
211 /* Holds the current set of options to be passed to the disassembler.  */
212 static char *arm_disassembler_options;
213
214 /* Valid register name styles.  */
215 static const char **valid_disassembly_styles;
216
217 /* Disassembly style to use. Default to "std" register names.  */
218 static const char *disassembly_style;
219
220 /* This is used to keep the bfd arch_info in sync with the disassembly
221    style.  */
222 static void set_disassembly_style_sfunc (const char *, int,
223                                          struct cmd_list_element *);
224 static void show_disassembly_style_sfunc (struct ui_file *, int,
225                                           struct cmd_list_element *,
226                                           const char *);
227
228 static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch,
229                                                 readable_regcache *regcache,
230                                                 int regnum, gdb_byte *buf);
231 static void arm_neon_quad_write (struct gdbarch *gdbarch,
232                                  struct regcache *regcache,
233                                  int regnum, const gdb_byte *buf);
234
235 static CORE_ADDR
236   arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
237
238
239 /* get_next_pcs operations.  */
240 static struct arm_get_next_pcs_ops arm_get_next_pcs_ops = {
241   arm_get_next_pcs_read_memory_unsigned_integer,
242   arm_get_next_pcs_syscall_next_pc,
243   arm_get_next_pcs_addr_bits_remove,
244   arm_get_next_pcs_is_thumb,
245   NULL,
246 };
247
248 struct arm_prologue_cache
249 {
250   /* The stack pointer at the time this frame was created; i.e. the
251      caller's stack pointer when this function was called.  It is used
252      to identify this frame.  */
253   CORE_ADDR prev_sp;
254
255   /* The frame base for this frame is just prev_sp - frame size.
256      FRAMESIZE is the distance from the frame pointer to the
257      initial stack pointer.  */
258
259   int framesize;
260
261   /* The register used to hold the frame pointer for this frame.  */
262   int framereg;
263
264   /* Saved register offsets.  */
265   struct trad_frame_saved_reg *saved_regs;
266 };
267
268 static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
269                                        CORE_ADDR prologue_start,
270                                        CORE_ADDR prologue_end,
271                                        struct arm_prologue_cache *cache);
272
273 /* Architecture version for displaced stepping.  This effects the behaviour of
274    certain instructions, and really should not be hard-wired.  */
275
276 #define DISPLACED_STEPPING_ARCH_VERSION         5
277
278 /* Set to true if the 32-bit mode is in use.  */
279
280 int arm_apcs_32 = 1;
281
282 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
283
284 int
285 arm_psr_thumb_bit (struct gdbarch *gdbarch)
286 {
287   if (gdbarch_tdep (gdbarch)->is_m)
288     return XPSR_T;
289   else
290     return CPSR_T;
291 }
292
293 /* Determine if the processor is currently executing in Thumb mode.  */
294
295 int
296 arm_is_thumb (struct regcache *regcache)
297 {
298   ULONGEST cpsr;
299   ULONGEST t_bit = arm_psr_thumb_bit (regcache->arch ());
300
301   cpsr = regcache_raw_get_unsigned (regcache, ARM_PS_REGNUM);
302
303   return (cpsr & t_bit) != 0;
304 }
305
306 /* Determine if FRAME is executing in Thumb mode.  */
307
308 int
309 arm_frame_is_thumb (struct frame_info *frame)
310 {
311   CORE_ADDR cpsr;
312   ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
313
314   /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
315      directly (from a signal frame or dummy frame) or by interpreting
316      the saved LR (from a prologue or DWARF frame).  So consult it and
317      trust the unwinders.  */
318   cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
319
320   return (cpsr & t_bit) != 0;
321 }
322
323 /* Callback for VEC_lower_bound.  */
324
325 static inline int
326 arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
327                              const struct arm_mapping_symbol *rhs)
328 {
329   return lhs->value < rhs->value;
330 }
331
332 /* Search for the mapping symbol covering MEMADDR.  If one is found,
333    return its type.  Otherwise, return 0.  If START is non-NULL,
334    set *START to the location of the mapping symbol.  */
335
336 static char
337 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
338 {
339   struct obj_section *sec;
340
341   /* If there are mapping symbols, consult them.  */
342   sec = find_pc_section (memaddr);
343   if (sec != NULL)
344     {
345       struct arm_per_objfile *data;
346       VEC(arm_mapping_symbol_s) *map;
347       struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
348                                             0 };
349       unsigned int idx;
350
351       data = (struct arm_per_objfile *) objfile_data (sec->objfile,
352                                                       arm_objfile_data_key);
353       if (data != NULL)
354         {
355           map = data->section_maps[sec->the_bfd_section->index];
356           if (!VEC_empty (arm_mapping_symbol_s, map))
357             {
358               struct arm_mapping_symbol *map_sym;
359
360               idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
361                                      arm_compare_mapping_symbols);
362
363               /* VEC_lower_bound finds the earliest ordered insertion
364                  point.  If the following symbol starts at this exact
365                  address, we use that; otherwise, the preceding
366                  mapping symbol covers this address.  */
367               if (idx < VEC_length (arm_mapping_symbol_s, map))
368                 {
369                   map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
370                   if (map_sym->value == map_key.value)
371                     {
372                       if (start)
373                         *start = map_sym->value + obj_section_addr (sec);
374                       return map_sym->type;
375                     }
376                 }
377
378               if (idx > 0)
379                 {
380                   map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
381                   if (start)
382                     *start = map_sym->value + obj_section_addr (sec);
383                   return map_sym->type;
384                 }
385             }
386         }
387     }
388
389   return 0;
390 }
391
392 /* Determine if the program counter specified in MEMADDR is in a Thumb
393    function.  This function should be called for addresses unrelated to
394    any executing frame; otherwise, prefer arm_frame_is_thumb.  */
395
396 int
397 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
398 {
399   struct bound_minimal_symbol sym;
400   char type;
401   arm_displaced_step_closure *dsc
402     = ((arm_displaced_step_closure * )
403         get_displaced_step_closure_by_addr (memaddr));
404
405   /* If checking the mode of displaced instruction in copy area, the mode
406      should be determined by instruction on the original address.  */
407   if (dsc)
408     {
409       if (debug_displaced)
410         fprintf_unfiltered (gdb_stdlog,
411                             "displaced: check mode of %.8lx instead of %.8lx\n",
412                             (unsigned long) dsc->insn_addr,
413                             (unsigned long) memaddr);
414       memaddr = dsc->insn_addr;
415     }
416
417   /* If bit 0 of the address is set, assume this is a Thumb address.  */
418   if (IS_THUMB_ADDR (memaddr))
419     return 1;
420
421   /* If the user wants to override the symbol table, let him.  */
422   if (strcmp (arm_force_mode_string, "arm") == 0)
423     return 0;
424   if (strcmp (arm_force_mode_string, "thumb") == 0)
425     return 1;
426
427   /* ARM v6-M and v7-M are always in Thumb mode.  */
428   if (gdbarch_tdep (gdbarch)->is_m)
429     return 1;
430
431   /* If there are mapping symbols, consult them.  */
432   type = arm_find_mapping_symbol (memaddr, NULL);
433   if (type)
434     return type == 't';
435
436   /* Thumb functions have a "special" bit set in minimal symbols.  */
437   sym = lookup_minimal_symbol_by_pc (memaddr);
438   if (sym.minsym)
439     return (MSYMBOL_IS_SPECIAL (sym.minsym));
440
441   /* If the user wants to override the fallback mode, let them.  */
442   if (strcmp (arm_fallback_mode_string, "arm") == 0)
443     return 0;
444   if (strcmp (arm_fallback_mode_string, "thumb") == 0)
445     return 1;
446
447   /* If we couldn't find any symbol, but we're talking to a running
448      target, then trust the current value of $cpsr.  This lets
449      "display/i $pc" always show the correct mode (though if there is
450      a symbol table we will not reach here, so it still may not be
451      displayed in the mode it will be executed).  */
452   if (target_has_registers)
453     return arm_frame_is_thumb (get_current_frame ());
454
455   /* Otherwise we're out of luck; we assume ARM.  */
456   return 0;
457 }
458
459 /* Determine if the address specified equals any of these magic return
460    values, called EXC_RETURN, defined by the ARM v6-M and v7-M
461    architectures.
462
463    From ARMv6-M Reference Manual B1.5.8
464    Table B1-5 Exception return behavior
465
466    EXC_RETURN    Return To        Return Stack
467    0xFFFFFFF1    Handler mode     Main
468    0xFFFFFFF9    Thread mode      Main
469    0xFFFFFFFD    Thread mode      Process
470
471    From ARMv7-M Reference Manual B1.5.8
472    Table B1-8 EXC_RETURN definition of exception return behavior, no FP
473
474    EXC_RETURN    Return To        Return Stack
475    0xFFFFFFF1    Handler mode     Main
476    0xFFFFFFF9    Thread mode      Main
477    0xFFFFFFFD    Thread mode      Process
478
479    Table B1-9 EXC_RETURN definition of exception return behavior, with
480    FP
481
482    EXC_RETURN    Return To        Return Stack    Frame Type
483    0xFFFFFFE1    Handler mode     Main            Extended
484    0xFFFFFFE9    Thread mode      Main            Extended
485    0xFFFFFFED    Thread mode      Process         Extended
486    0xFFFFFFF1    Handler mode     Main            Basic
487    0xFFFFFFF9    Thread mode      Main            Basic
488    0xFFFFFFFD    Thread mode      Process         Basic
489
490    For more details see "B1.5.8 Exception return behavior"
491    in both ARMv6-M and ARMv7-M Architecture Reference Manuals.  */
492
493 static int
494 arm_m_addr_is_magic (CORE_ADDR addr)
495 {
496   switch (addr)
497     {
498       /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
499          the exception return behavior.  */
500       case 0xffffffe1:
501       case 0xffffffe9:
502       case 0xffffffed:
503       case 0xfffffff1:
504       case 0xfffffff9:
505       case 0xfffffffd:
506         /* Address is magic.  */
507         return 1;
508
509       default:
510         /* Address is not magic.  */
511         return 0;
512     }
513 }
514
515 /* Remove useless bits from addresses in a running program.  */
516 static CORE_ADDR
517 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
518 {
519   /* On M-profile devices, do not strip the low bit from EXC_RETURN
520      (the magic exception return address).  */
521   if (gdbarch_tdep (gdbarch)->is_m
522       && arm_m_addr_is_magic (val))
523     return val;
524
525   if (arm_apcs_32)
526     return UNMAKE_THUMB_ADDR (val);
527   else
528     return (val & 0x03fffffc);
529 }
530
531 /* Return 1 if PC is the start of a compiler helper function which
532    can be safely ignored during prologue skipping.  IS_THUMB is true
533    if the function is known to be a Thumb function due to the way it
534    is being called.  */
535 static int
536 skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
537 {
538   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
539   struct bound_minimal_symbol msym;
540
541   msym = lookup_minimal_symbol_by_pc (pc);
542   if (msym.minsym != NULL
543       && BMSYMBOL_VALUE_ADDRESS (msym) == pc
544       && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL)
545     {
546       const char *name = MSYMBOL_LINKAGE_NAME (msym.minsym);
547
548       /* The GNU linker's Thumb call stub to foo is named
549          __foo_from_thumb.  */
550       if (strstr (name, "_from_thumb") != NULL)
551         name += 2;
552
553       /* On soft-float targets, __truncdfsf2 is called to convert promoted
554          arguments to their argument types in non-prototyped
555          functions.  */
556       if (startswith (name, "__truncdfsf2"))
557         return 1;
558       if (startswith (name, "__aeabi_d2f"))
559         return 1;
560
561       /* Internal functions related to thread-local storage.  */
562       if (startswith (name, "__tls_get_addr"))
563         return 1;
564       if (startswith (name, "__aeabi_read_tp"))
565         return 1;
566     }
567   else
568     {
569       /* If we run against a stripped glibc, we may be unable to identify
570          special functions by name.  Check for one important case,
571          __aeabi_read_tp, by comparing the *code* against the default
572          implementation (this is hand-written ARM assembler in glibc).  */
573
574       if (!is_thumb
575           && read_code_unsigned_integer (pc, 4, byte_order_for_code)
576              == 0xe3e00a0f /* mov r0, #0xffff0fff */
577           && read_code_unsigned_integer (pc + 4, 4, byte_order_for_code)
578              == 0xe240f01f) /* sub pc, r0, #31 */
579         return 1;
580     }
581
582   return 0;
583 }
584
585 /* Extract the immediate from instruction movw/movt of encoding T.  INSN1 is
586    the first 16-bit of instruction, and INSN2 is the second 16-bit of
587    instruction.  */
588 #define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2) \
589   ((bits ((insn1), 0, 3) << 12)               \
590    | (bits ((insn1), 10, 10) << 11)           \
591    | (bits ((insn2), 12, 14) << 8)            \
592    | bits ((insn2), 0, 7))
593
594 /* Extract the immediate from instruction movw/movt of encoding A.  INSN is
595    the 32-bit instruction.  */
596 #define EXTRACT_MOVW_MOVT_IMM_A(insn) \
597   ((bits ((insn), 16, 19) << 12) \
598    | bits ((insn), 0, 11))
599
600 /* Decode immediate value; implements ThumbExpandImmediate pseudo-op.  */
601
602 static unsigned int
603 thumb_expand_immediate (unsigned int imm)
604 {
605   unsigned int count = imm >> 7;
606
607   if (count < 8)
608     switch (count / 2)
609       {
610       case 0:
611         return imm & 0xff;
612       case 1:
613         return (imm & 0xff) | ((imm & 0xff) << 16);
614       case 2:
615         return ((imm & 0xff) << 8) | ((imm & 0xff) << 24);
616       case 3:
617         return (imm & 0xff) | ((imm & 0xff) << 8)
618                 | ((imm & 0xff) << 16) | ((imm & 0xff) << 24);
619       }
620
621   return (0x80 | (imm & 0x7f)) << (32 - count);
622 }
623
624 /* Return 1 if the 16-bit Thumb instruction INSN restores SP in
625    epilogue, 0 otherwise.  */
626
627 static int
628 thumb_instruction_restores_sp (unsigned short insn)
629 {
630   return (insn == 0x46bd  /* mov sp, r7 */
631           || (insn & 0xff80) == 0xb000  /* add sp, imm */
632           || (insn & 0xfe00) == 0xbc00);  /* pop <registers> */
633 }
634
635 /* Analyze a Thumb prologue, looking for a recognizable stack frame
636    and frame pointer.  Scan until we encounter a store that could
637    clobber the stack frame unexpectedly, or an unknown instruction.
638    Return the last address which is definitely safe to skip for an
639    initial breakpoint.  */
640
641 static CORE_ADDR
642 thumb_analyze_prologue (struct gdbarch *gdbarch,
643                         CORE_ADDR start, CORE_ADDR limit,
644                         struct arm_prologue_cache *cache)
645 {
646   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
647   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
648   int i;
649   pv_t regs[16];
650   CORE_ADDR offset;
651   CORE_ADDR unrecognized_pc = 0;
652
653   for (i = 0; i < 16; i++)
654     regs[i] = pv_register (i, 0);
655   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
656
657   while (start < limit)
658     {
659       unsigned short insn;
660
661       insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
662
663       if ((insn & 0xfe00) == 0xb400)            /* push { rlist } */
664         {
665           int regno;
666           int mask;
667
668           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
669             break;
670
671           /* Bits 0-7 contain a mask for registers R0-R7.  Bit 8 says
672              whether to save LR (R14).  */
673           mask = (insn & 0xff) | ((insn & 0x100) << 6);
674
675           /* Calculate offsets of saved R0-R7 and LR.  */
676           for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
677             if (mask & (1 << regno))
678               {
679                 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
680                                                        -4);
681                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
682               }
683         }
684       else if ((insn & 0xff80) == 0xb080)       /* sub sp, #imm */
685         {
686           offset = (insn & 0x7f) << 2;          /* get scaled offset */
687           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
688                                                  -offset);
689         }
690       else if (thumb_instruction_restores_sp (insn))
691         {
692           /* Don't scan past the epilogue.  */
693           break;
694         }
695       else if ((insn & 0xf800) == 0xa800)       /* add Rd, sp, #imm */
696         regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
697                                                     (insn & 0xff) << 2);
698       else if ((insn & 0xfe00) == 0x1c00        /* add Rd, Rn, #imm */
699                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
700         regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
701                                                    bits (insn, 6, 8));
702       else if ((insn & 0xf800) == 0x3000        /* add Rd, #imm */
703                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
704         regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
705                                                     bits (insn, 0, 7));
706       else if ((insn & 0xfe00) == 0x1800        /* add Rd, Rn, Rm */
707                && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
708                && pv_is_constant (regs[bits (insn, 3, 5)]))
709         regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
710                                           regs[bits (insn, 6, 8)]);
711       else if ((insn & 0xff00) == 0x4400        /* add Rd, Rm */
712                && pv_is_constant (regs[bits (insn, 3, 6)]))
713         {
714           int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
715           int rm = bits (insn, 3, 6);
716           regs[rd] = pv_add (regs[rd], regs[rm]);
717         }
718       else if ((insn & 0xff00) == 0x4600)       /* mov hi, lo or mov lo, hi */
719         {
720           int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
721           int src_reg = (insn & 0x78) >> 3;
722           regs[dst_reg] = regs[src_reg];
723         }
724       else if ((insn & 0xf800) == 0x9000)       /* str rd, [sp, #off] */
725         {
726           /* Handle stores to the stack.  Normally pushes are used,
727              but with GCC -mtpcs-frame, there may be other stores
728              in the prologue to create the frame.  */
729           int regno = (insn >> 8) & 0x7;
730           pv_t addr;
731
732           offset = (insn & 0xff) << 2;
733           addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
734
735           if (stack.store_would_trash (addr))
736             break;
737
738           stack.store (addr, 4, regs[regno]);
739         }
740       else if ((insn & 0xf800) == 0x6000)       /* str rd, [rn, #off] */
741         {
742           int rd = bits (insn, 0, 2);
743           int rn = bits (insn, 3, 5);
744           pv_t addr;
745
746           offset = bits (insn, 6, 10) << 2;
747           addr = pv_add_constant (regs[rn], offset);
748
749           if (stack.store_would_trash (addr))
750             break;
751
752           stack.store (addr, 4, regs[rd]);
753         }
754       else if (((insn & 0xf800) == 0x7000       /* strb Rd, [Rn, #off] */
755                 || (insn & 0xf800) == 0x8000)   /* strh Rd, [Rn, #off] */
756                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
757         /* Ignore stores of argument registers to the stack.  */
758         ;
759       else if ((insn & 0xf800) == 0xc800        /* ldmia Rn!, { registers } */
760                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
761         /* Ignore block loads from the stack, potentially copying
762            parameters from memory.  */
763         ;
764       else if ((insn & 0xf800) == 0x9800        /* ldr Rd, [Rn, #immed] */
765                || ((insn & 0xf800) == 0x6800    /* ldr Rd, [sp, #immed] */
766                    && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
767         /* Similarly ignore single loads from the stack.  */
768         ;
769       else if ((insn & 0xffc0) == 0x0000        /* lsls Rd, Rm, #0 */
770                || (insn & 0xffc0) == 0x1c00)    /* add Rd, Rn, #0 */
771         /* Skip register copies, i.e. saves to another register
772            instead of the stack.  */
773         ;
774       else if ((insn & 0xf800) == 0x2000)       /* movs Rd, #imm */
775         /* Recognize constant loads; even with small stacks these are necessary
776            on Thumb.  */
777         regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
778       else if ((insn & 0xf800) == 0x4800)       /* ldr Rd, [pc, #imm] */
779         {
780           /* Constant pool loads, for the same reason.  */
781           unsigned int constant;
782           CORE_ADDR loc;
783
784           loc = start + 4 + bits (insn, 0, 7) * 4;
785           constant = read_memory_unsigned_integer (loc, 4, byte_order);
786           regs[bits (insn, 8, 10)] = pv_constant (constant);
787         }
788       else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instructions.  */
789         {
790           unsigned short inst2;
791
792           inst2 = read_code_unsigned_integer (start + 2, 2,
793                                               byte_order_for_code);
794
795           if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
796             {
797               /* BL, BLX.  Allow some special function calls when
798                  skipping the prologue; GCC generates these before
799                  storing arguments to the stack.  */
800               CORE_ADDR nextpc;
801               int j1, j2, imm1, imm2;
802
803               imm1 = sbits (insn, 0, 10);
804               imm2 = bits (inst2, 0, 10);
805               j1 = bit (inst2, 13);
806               j2 = bit (inst2, 11);
807
808               offset = ((imm1 << 12) + (imm2 << 1));
809               offset ^= ((!j2) << 22) | ((!j1) << 23);
810
811               nextpc = start + 4 + offset;
812               /* For BLX make sure to clear the low bits.  */
813               if (bit (inst2, 12) == 0)
814                 nextpc = nextpc & 0xfffffffc;
815
816               if (!skip_prologue_function (gdbarch, nextpc,
817                                            bit (inst2, 12) != 0))
818                 break;
819             }
820
821           else if ((insn & 0xffd0) == 0xe900    /* stmdb Rn{!},
822                                                    { registers } */
823                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
824             {
825               pv_t addr = regs[bits (insn, 0, 3)];
826               int regno;
827
828               if (stack.store_would_trash (addr))
829                 break;
830
831               /* Calculate offsets of saved registers.  */
832               for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
833                 if (inst2 & (1 << regno))
834                   {
835                     addr = pv_add_constant (addr, -4);
836                     stack.store (addr, 4, regs[regno]);
837                   }
838
839               if (insn & 0x0020)
840                 regs[bits (insn, 0, 3)] = addr;
841             }
842
843           else if ((insn & 0xff50) == 0xe940    /* strd Rt, Rt2,
844                                                    [Rn, #+/-imm]{!} */
845                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
846             {
847               int regno1 = bits (inst2, 12, 15);
848               int regno2 = bits (inst2, 8, 11);
849               pv_t addr = regs[bits (insn, 0, 3)];
850
851               offset = inst2 & 0xff;
852               if (insn & 0x0080)
853                 addr = pv_add_constant (addr, offset);
854               else
855                 addr = pv_add_constant (addr, -offset);
856
857               if (stack.store_would_trash (addr))
858                 break;
859
860               stack.store (addr, 4, regs[regno1]);
861               stack.store (pv_add_constant (addr, 4),
862                            4, regs[regno2]);
863
864               if (insn & 0x0020)
865                 regs[bits (insn, 0, 3)] = addr;
866             }
867
868           else if ((insn & 0xfff0) == 0xf8c0    /* str Rt,[Rn,+/-#imm]{!} */
869                    && (inst2 & 0x0c00) == 0x0c00
870                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
871             {
872               int regno = bits (inst2, 12, 15);
873               pv_t addr = regs[bits (insn, 0, 3)];
874
875               offset = inst2 & 0xff;
876               if (inst2 & 0x0200)
877                 addr = pv_add_constant (addr, offset);
878               else
879                 addr = pv_add_constant (addr, -offset);
880
881               if (stack.store_would_trash (addr))
882                 break;
883
884               stack.store (addr, 4, regs[regno]);
885
886               if (inst2 & 0x0100)
887                 regs[bits (insn, 0, 3)] = addr;
888             }
889
890           else if ((insn & 0xfff0) == 0xf8c0    /* str.w Rt,[Rn,#imm] */
891                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
892             {
893               int regno = bits (inst2, 12, 15);
894               pv_t addr;
895
896               offset = inst2 & 0xfff;
897               addr = pv_add_constant (regs[bits (insn, 0, 3)], offset);
898
899               if (stack.store_would_trash (addr))
900                 break;
901
902               stack.store (addr, 4, regs[regno]);
903             }
904
905           else if ((insn & 0xffd0) == 0xf880    /* str{bh}.w Rt,[Rn,#imm] */
906                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
907             /* Ignore stores of argument registers to the stack.  */
908             ;
909
910           else if ((insn & 0xffd0) == 0xf800    /* str{bh} Rt,[Rn,#+/-imm] */
911                    && (inst2 & 0x0d00) == 0x0c00
912                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
913             /* Ignore stores of argument registers to the stack.  */
914             ;
915
916           else if ((insn & 0xffd0) == 0xe890    /* ldmia Rn[!],
917                                                    { registers } */
918                    && (inst2 & 0x8000) == 0x0000
919                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
920             /* Ignore block loads from the stack, potentially copying
921                parameters from memory.  */
922             ;
923
924           else if ((insn & 0xffb0) == 0xe950    /* ldrd Rt, Rt2,
925                                                    [Rn, #+/-imm] */
926                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
927             /* Similarly ignore dual loads from the stack.  */
928             ;
929
930           else if ((insn & 0xfff0) == 0xf850    /* ldr Rt,[Rn,#+/-imm] */
931                    && (inst2 & 0x0d00) == 0x0c00
932                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
933             /* Similarly ignore single loads from the stack.  */
934             ;
935
936           else if ((insn & 0xfff0) == 0xf8d0    /* ldr.w Rt,[Rn,#imm] */
937                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
938             /* Similarly ignore single loads from the stack.  */
939             ;
940
941           else if ((insn & 0xfbf0) == 0xf100    /* add.w Rd, Rn, #imm */
942                    && (inst2 & 0x8000) == 0x0000)
943             {
944               unsigned int imm = ((bits (insn, 10, 10) << 11)
945                                   | (bits (inst2, 12, 14) << 8)
946                                   | bits (inst2, 0, 7));
947
948               regs[bits (inst2, 8, 11)]
949                 = pv_add_constant (regs[bits (insn, 0, 3)],
950                                    thumb_expand_immediate (imm));
951             }
952
953           else if ((insn & 0xfbf0) == 0xf200    /* addw Rd, Rn, #imm */
954                    && (inst2 & 0x8000) == 0x0000)
955             {
956               unsigned int imm = ((bits (insn, 10, 10) << 11)
957                                   | (bits (inst2, 12, 14) << 8)
958                                   | bits (inst2, 0, 7));
959
960               regs[bits (inst2, 8, 11)]
961                 = pv_add_constant (regs[bits (insn, 0, 3)], imm);
962             }
963
964           else if ((insn & 0xfbf0) == 0xf1a0    /* sub.w Rd, Rn, #imm */
965                    && (inst2 & 0x8000) == 0x0000)
966             {
967               unsigned int imm = ((bits (insn, 10, 10) << 11)
968                                   | (bits (inst2, 12, 14) << 8)
969                                   | bits (inst2, 0, 7));
970
971               regs[bits (inst2, 8, 11)]
972                 = pv_add_constant (regs[bits (insn, 0, 3)],
973                                    - (CORE_ADDR) thumb_expand_immediate (imm));
974             }
975
976           else if ((insn & 0xfbf0) == 0xf2a0    /* subw Rd, Rn, #imm */
977                    && (inst2 & 0x8000) == 0x0000)
978             {
979               unsigned int imm = ((bits (insn, 10, 10) << 11)
980                                   | (bits (inst2, 12, 14) << 8)
981                                   | bits (inst2, 0, 7));
982
983               regs[bits (inst2, 8, 11)]
984                 = pv_add_constant (regs[bits (insn, 0, 3)], - (CORE_ADDR) imm);
985             }
986
987           else if ((insn & 0xfbff) == 0xf04f)   /* mov.w Rd, #const */
988             {
989               unsigned int imm = ((bits (insn, 10, 10) << 11)
990                                   | (bits (inst2, 12, 14) << 8)
991                                   | bits (inst2, 0, 7));
992
993               regs[bits (inst2, 8, 11)]
994                 = pv_constant (thumb_expand_immediate (imm));
995             }
996
997           else if ((insn & 0xfbf0) == 0xf240)   /* movw Rd, #const */
998             {
999               unsigned int imm
1000                 = EXTRACT_MOVW_MOVT_IMM_T (insn, inst2);
1001
1002               regs[bits (inst2, 8, 11)] = pv_constant (imm);
1003             }
1004
1005           else if (insn == 0xea5f               /* mov.w Rd,Rm */
1006                    && (inst2 & 0xf0f0) == 0)
1007             {
1008               int dst_reg = (inst2 & 0x0f00) >> 8;
1009               int src_reg = inst2 & 0xf;
1010               regs[dst_reg] = regs[src_reg];
1011             }
1012
1013           else if ((insn & 0xff7f) == 0xf85f)   /* ldr.w Rt,<label> */
1014             {
1015               /* Constant pool loads.  */
1016               unsigned int constant;
1017               CORE_ADDR loc;
1018
1019               offset = bits (inst2, 0, 11);
1020               if (insn & 0x0080)
1021                 loc = start + 4 + offset;
1022               else
1023                 loc = start + 4 - offset;
1024
1025               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1026               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1027             }
1028
1029           else if ((insn & 0xff7f) == 0xe95f)   /* ldrd Rt,Rt2,<label> */
1030             {
1031               /* Constant pool loads.  */
1032               unsigned int constant;
1033               CORE_ADDR loc;
1034
1035               offset = bits (inst2, 0, 7) << 2;
1036               if (insn & 0x0080)
1037                 loc = start + 4 + offset;
1038               else
1039                 loc = start + 4 - offset;
1040
1041               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1042               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1043
1044               constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
1045               regs[bits (inst2, 8, 11)] = pv_constant (constant);
1046             }
1047
1048           else if (thumb2_instruction_changes_pc (insn, inst2))
1049             {
1050               /* Don't scan past anything that might change control flow.  */
1051               break;
1052             }
1053           else
1054             {
1055               /* The optimizer might shove anything into the prologue,
1056                  so we just skip what we don't recognize.  */
1057               unrecognized_pc = start;
1058             }
1059
1060           start += 2;
1061         }
1062       else if (thumb_instruction_changes_pc (insn))
1063         {
1064           /* Don't scan past anything that might change control flow.  */
1065           break;
1066         }
1067       else
1068         {
1069           /* The optimizer might shove anything into the prologue,
1070              so we just skip what we don't recognize.  */
1071           unrecognized_pc = start;
1072         }
1073
1074       start += 2;
1075     }
1076
1077   if (arm_debug)
1078     fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1079                         paddress (gdbarch, start));
1080
1081   if (unrecognized_pc == 0)
1082     unrecognized_pc = start;
1083
1084   if (cache == NULL)
1085     return unrecognized_pc;
1086
1087   if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1088     {
1089       /* Frame pointer is fp.  Frame size is constant.  */
1090       cache->framereg = ARM_FP_REGNUM;
1091       cache->framesize = -regs[ARM_FP_REGNUM].k;
1092     }
1093   else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
1094     {
1095       /* Frame pointer is r7.  Frame size is constant.  */
1096       cache->framereg = THUMB_FP_REGNUM;
1097       cache->framesize = -regs[THUMB_FP_REGNUM].k;
1098     }
1099   else
1100     {
1101       /* Try the stack pointer... this is a bit desperate.  */
1102       cache->framereg = ARM_SP_REGNUM;
1103       cache->framesize = -regs[ARM_SP_REGNUM].k;
1104     }
1105
1106   for (i = 0; i < 16; i++)
1107     if (stack.find_reg (gdbarch, i, &offset))
1108       cache->saved_regs[i].addr = offset;
1109
1110   return unrecognized_pc;
1111 }
1112
1113
1114 /* Try to analyze the instructions starting from PC, which load symbol
1115    __stack_chk_guard.  Return the address of instruction after loading this
1116    symbol, set the dest register number to *BASEREG, and set the size of
1117    instructions for loading symbol in OFFSET.  Return 0 if instructions are
1118    not recognized.  */
1119
1120 static CORE_ADDR
1121 arm_analyze_load_stack_chk_guard(CORE_ADDR pc, struct gdbarch *gdbarch,
1122                                  unsigned int *destreg, int *offset)
1123 {
1124   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1125   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1126   unsigned int low, high, address;
1127
1128   address = 0;
1129   if (is_thumb)
1130     {
1131       unsigned short insn1
1132         = read_code_unsigned_integer (pc, 2, byte_order_for_code);
1133
1134       if ((insn1 & 0xf800) == 0x4800) /* ldr Rd, #immed */
1135         {
1136           *destreg = bits (insn1, 8, 10);
1137           *offset = 2;
1138           address = (pc & 0xfffffffc) + 4 + (bits (insn1, 0, 7) << 2);
1139           address = read_memory_unsigned_integer (address, 4,
1140                                                   byte_order_for_code);
1141         }
1142       else if ((insn1 & 0xfbf0) == 0xf240) /* movw Rd, #const */
1143         {
1144           unsigned short insn2
1145             = read_code_unsigned_integer (pc + 2, 2, byte_order_for_code);
1146
1147           low = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1148
1149           insn1
1150             = read_code_unsigned_integer (pc + 4, 2, byte_order_for_code);
1151           insn2
1152             = read_code_unsigned_integer (pc + 6, 2, byte_order_for_code);
1153
1154           /* movt Rd, #const */
1155           if ((insn1 & 0xfbc0) == 0xf2c0)
1156             {
1157               high = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1158               *destreg = bits (insn2, 8, 11);
1159               *offset = 8;
1160               address = (high << 16 | low);
1161             }
1162         }
1163     }
1164   else
1165     {
1166       unsigned int insn
1167         = read_code_unsigned_integer (pc, 4, byte_order_for_code);
1168
1169       if ((insn & 0x0e5f0000) == 0x041f0000) /* ldr Rd, [PC, #immed] */
1170         {
1171           address = bits (insn, 0, 11) + pc + 8;
1172           address = read_memory_unsigned_integer (address, 4,
1173                                                   byte_order_for_code);
1174
1175           *destreg = bits (insn, 12, 15);
1176           *offset = 4;
1177         }
1178       else if ((insn & 0x0ff00000) == 0x03000000) /* movw Rd, #const */
1179         {
1180           low = EXTRACT_MOVW_MOVT_IMM_A (insn);
1181
1182           insn
1183             = read_code_unsigned_integer (pc + 4, 4, byte_order_for_code);
1184
1185           if ((insn & 0x0ff00000) == 0x03400000) /* movt Rd, #const */
1186             {
1187               high = EXTRACT_MOVW_MOVT_IMM_A (insn);
1188               *destreg = bits (insn, 12, 15);
1189               *offset = 8;
1190               address = (high << 16 | low);
1191             }
1192         }
1193     }
1194
1195   return address;
1196 }
1197
1198 /* Try to skip a sequence of instructions used for stack protector.  If PC
1199    points to the first instruction of this sequence, return the address of
1200    first instruction after this sequence, otherwise, return original PC.
1201
1202    On arm, this sequence of instructions is composed of mainly three steps,
1203      Step 1: load symbol __stack_chk_guard,
1204      Step 2: load from address of __stack_chk_guard,
1205      Step 3: store it to somewhere else.
1206
1207    Usually, instructions on step 2 and step 3 are the same on various ARM
1208    architectures.  On step 2, it is one instruction 'ldr Rx, [Rn, #0]', and
1209    on step 3, it is also one instruction 'str Rx, [r7, #immd]'.  However,
1210    instructions in step 1 vary from different ARM architectures.  On ARMv7,
1211    they are,
1212
1213         movw    Rn, #:lower16:__stack_chk_guard
1214         movt    Rn, #:upper16:__stack_chk_guard
1215
1216    On ARMv5t, it is,
1217
1218         ldr     Rn, .Label
1219         ....
1220         .Lable:
1221         .word   __stack_chk_guard
1222
1223    Since ldr/str is a very popular instruction, we can't use them as
1224    'fingerprint' or 'signature' of stack protector sequence.  Here we choose
1225    sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1226    stripped, as the 'fingerprint' of a stack protector cdoe sequence.  */
1227
1228 static CORE_ADDR
1229 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1230 {
1231   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1232   unsigned int basereg;
1233   struct bound_minimal_symbol stack_chk_guard;
1234   int offset;
1235   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1236   CORE_ADDR addr;
1237
1238   /* Try to parse the instructions in Step 1.  */
1239   addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1240                                            &basereg, &offset);
1241   if (!addr)
1242     return pc;
1243
1244   stack_chk_guard = lookup_minimal_symbol_by_pc (addr);
1245   /* ADDR must correspond to a symbol whose name is __stack_chk_guard.
1246      Otherwise, this sequence cannot be for stack protector.  */
1247   if (stack_chk_guard.minsym == NULL
1248       || !startswith (MSYMBOL_LINKAGE_NAME (stack_chk_guard.minsym), "__stack_chk_guard"))
1249    return pc;
1250
1251   if (is_thumb)
1252     {
1253       unsigned int destreg;
1254       unsigned short insn
1255         = read_code_unsigned_integer (pc + offset, 2, byte_order_for_code);
1256
1257       /* Step 2: ldr Rd, [Rn, #immed], encoding T1.  */
1258       if ((insn & 0xf800) != 0x6800)
1259         return pc;
1260       if (bits (insn, 3, 5) != basereg)
1261         return pc;
1262       destreg = bits (insn, 0, 2);
1263
1264       insn = read_code_unsigned_integer (pc + offset + 2, 2,
1265                                          byte_order_for_code);
1266       /* Step 3: str Rd, [Rn, #immed], encoding T1.  */
1267       if ((insn & 0xf800) != 0x6000)
1268         return pc;
1269       if (destreg != bits (insn, 0, 2))
1270         return pc;
1271     }
1272   else
1273     {
1274       unsigned int destreg;
1275       unsigned int insn
1276         = read_code_unsigned_integer (pc + offset, 4, byte_order_for_code);
1277
1278       /* Step 2: ldr Rd, [Rn, #immed], encoding A1.  */
1279       if ((insn & 0x0e500000) != 0x04100000)
1280         return pc;
1281       if (bits (insn, 16, 19) != basereg)
1282         return pc;
1283       destreg = bits (insn, 12, 15);
1284       /* Step 3: str Rd, [Rn, #immed], encoding A1.  */
1285       insn = read_code_unsigned_integer (pc + offset + 4,
1286                                            4, byte_order_for_code);
1287       if ((insn & 0x0e500000) != 0x04000000)
1288         return pc;
1289       if (bits (insn, 12, 15) != destreg)
1290         return pc;
1291     }
1292   /* The size of total two instructions ldr/str is 4 on Thumb-2, while 8
1293      on arm.  */
1294   if (is_thumb)
1295     return pc + offset + 4;
1296   else
1297     return pc + offset + 8;
1298 }
1299
1300 /* Advance the PC across any function entry prologue instructions to
1301    reach some "real" code.
1302
1303    The APCS (ARM Procedure Call Standard) defines the following
1304    prologue:
1305
1306    mov          ip, sp
1307    [stmfd       sp!, {a1,a2,a3,a4}]
1308    stmfd        sp!, {...,fp,ip,lr,pc}
1309    [stfe        f7, [sp, #-12]!]
1310    [stfe        f6, [sp, #-12]!]
1311    [stfe        f5, [sp, #-12]!]
1312    [stfe        f4, [sp, #-12]!]
1313    sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn.  */
1314
1315 static CORE_ADDR
1316 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1317 {
1318   CORE_ADDR func_addr, limit_pc;
1319
1320   /* See if we can determine the end of the prologue via the symbol table.
1321      If so, then return either PC, or the PC after the prologue, whichever
1322      is greater.  */
1323   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1324     {
1325       CORE_ADDR post_prologue_pc
1326         = skip_prologue_using_sal (gdbarch, func_addr);
1327       struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
1328
1329       if (post_prologue_pc)
1330         post_prologue_pc
1331           = arm_skip_stack_protector (post_prologue_pc, gdbarch);
1332
1333
1334       /* GCC always emits a line note before the prologue and another
1335          one after, even if the two are at the same address or on the
1336          same line.  Take advantage of this so that we do not need to
1337          know every instruction that might appear in the prologue.  We
1338          will have producer information for most binaries; if it is
1339          missing (e.g. for -gstabs), assuming the GNU tools.  */
1340       if (post_prologue_pc
1341           && (cust == NULL
1342               || COMPUNIT_PRODUCER (cust) == NULL
1343               || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
1344               || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
1345         return post_prologue_pc;
1346
1347       if (post_prologue_pc != 0)
1348         {
1349           CORE_ADDR analyzed_limit;
1350
1351           /* For non-GCC compilers, make sure the entire line is an
1352              acceptable prologue; GDB will round this function's
1353              return value up to the end of the following line so we
1354              can not skip just part of a line (and we do not want to).
1355
1356              RealView does not treat the prologue specially, but does
1357              associate prologue code with the opening brace; so this
1358              lets us skip the first line if we think it is the opening
1359              brace.  */
1360           if (arm_pc_is_thumb (gdbarch, func_addr))
1361             analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
1362                                                      post_prologue_pc, NULL);
1363           else
1364             analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
1365                                                    post_prologue_pc, NULL);
1366
1367           if (analyzed_limit != post_prologue_pc)
1368             return func_addr;
1369
1370           return post_prologue_pc;
1371         }
1372     }
1373
1374   /* Can't determine prologue from the symbol table, need to examine
1375      instructions.  */
1376
1377   /* Find an upper limit on the function prologue using the debug
1378      information.  If the debug information could not be used to provide
1379      that bound, then use an arbitrary large number as the upper bound.  */
1380   /* Like arm_scan_prologue, stop no later than pc + 64.  */
1381   limit_pc = skip_prologue_using_sal (gdbarch, pc);
1382   if (limit_pc == 0)
1383     limit_pc = pc + 64;          /* Magic.  */
1384
1385
1386   /* Check if this is Thumb code.  */
1387   if (arm_pc_is_thumb (gdbarch, pc))
1388     return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1389   else
1390     return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1391 }
1392
1393 /* *INDENT-OFF* */
1394 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
1395    This function decodes a Thumb function prologue to determine:
1396      1) the size of the stack frame
1397      2) which registers are saved on it
1398      3) the offsets of saved regs
1399      4) the offset from the stack pointer to the frame pointer
1400
1401    A typical Thumb function prologue would create this stack frame
1402    (offsets relative to FP)
1403      old SP ->  24  stack parameters
1404                 20  LR
1405                 16  R7
1406      R7 ->       0  local variables (16 bytes)
1407      SP ->     -12  additional stack space (12 bytes)
1408    The frame size would thus be 36 bytes, and the frame offset would be
1409    12 bytes.  The frame register is R7.
1410    
1411    The comments for thumb_skip_prolog() describe the algorithm we use
1412    to detect the end of the prolog.  */
1413 /* *INDENT-ON* */
1414
1415 static void
1416 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1417                      CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1418 {
1419   CORE_ADDR prologue_start;
1420   CORE_ADDR prologue_end;
1421
1422   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1423                                 &prologue_end))
1424     {
1425       /* See comment in arm_scan_prologue for an explanation of
1426          this heuristics.  */
1427       if (prologue_end > prologue_start + 64)
1428         {
1429           prologue_end = prologue_start + 64;
1430         }
1431     }
1432   else
1433     /* We're in the boondocks: we have no idea where the start of the
1434        function is.  */
1435     return;
1436
1437   prologue_end = std::min (prologue_end, prev_pc);
1438
1439   thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1440 }
1441
1442 /* Return 1 if the ARM instruction INSN restores SP in epilogue, 0
1443    otherwise.  */
1444
1445 static int
1446 arm_instruction_restores_sp (unsigned int insn)
1447 {
1448   if (bits (insn, 28, 31) != INST_NV)
1449     {
1450       if ((insn & 0x0df0f000) == 0x0080d000
1451           /* ADD SP (register or immediate).  */
1452           || (insn & 0x0df0f000) == 0x0040d000
1453           /* SUB SP (register or immediate).  */
1454           || (insn & 0x0ffffff0) == 0x01a0d000
1455           /* MOV SP.  */
1456           || (insn & 0x0fff0000) == 0x08bd0000
1457           /* POP (LDMIA).  */
1458           || (insn & 0x0fff0000) == 0x049d0000)
1459           /* POP of a single register.  */
1460         return 1;
1461     }
1462
1463   return 0;
1464 }
1465
1466 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
1467    continuing no further than PROLOGUE_END.  If CACHE is non-NULL,
1468    fill it in.  Return the first address not recognized as a prologue
1469    instruction.
1470
1471    We recognize all the instructions typically found in ARM prologues,
1472    plus harmless instructions which can be skipped (either for analysis
1473    purposes, or a more restrictive set that can be skipped when finding
1474    the end of the prologue).  */
1475
1476 static CORE_ADDR
1477 arm_analyze_prologue (struct gdbarch *gdbarch,
1478                       CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1479                       struct arm_prologue_cache *cache)
1480 {
1481   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1482   int regno;
1483   CORE_ADDR offset, current_pc;
1484   pv_t regs[ARM_FPS_REGNUM];
1485   CORE_ADDR unrecognized_pc = 0;
1486
1487   /* Search the prologue looking for instructions that set up the
1488      frame pointer, adjust the stack pointer, and save registers.
1489
1490      Be careful, however, and if it doesn't look like a prologue,
1491      don't try to scan it.  If, for instance, a frameless function
1492      begins with stmfd sp!, then we will tell ourselves there is
1493      a frame, which will confuse stack traceback, as well as "finish" 
1494      and other operations that rely on a knowledge of the stack
1495      traceback.  */
1496
1497   for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1498     regs[regno] = pv_register (regno, 0);
1499   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1500
1501   for (current_pc = prologue_start;
1502        current_pc < prologue_end;
1503        current_pc += 4)
1504     {
1505       unsigned int insn
1506         = read_code_unsigned_integer (current_pc, 4, byte_order_for_code);
1507
1508       if (insn == 0xe1a0c00d)           /* mov ip, sp */
1509         {
1510           regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
1511           continue;
1512         }
1513       else if ((insn & 0xfff00000) == 0xe2800000        /* add Rd, Rn, #n */
1514                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1515         {
1516           unsigned imm = insn & 0xff;                   /* immediate value */
1517           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1518           int rd = bits (insn, 12, 15);
1519           imm = (imm >> rot) | (imm << (32 - rot));
1520           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
1521           continue;
1522         }
1523       else if ((insn & 0xfff00000) == 0xe2400000        /* sub Rd, Rn, #n */
1524                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1525         {
1526           unsigned imm = insn & 0xff;                   /* immediate value */
1527           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1528           int rd = bits (insn, 12, 15);
1529           imm = (imm >> rot) | (imm << (32 - rot));
1530           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
1531           continue;
1532         }
1533       else if ((insn & 0xffff0fff) == 0xe52d0004)       /* str Rd,
1534                                                            [sp, #-4]! */
1535         {
1536           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1537             break;
1538           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1539           stack.store (regs[ARM_SP_REGNUM], 4,
1540                        regs[bits (insn, 12, 15)]);
1541           continue;
1542         }
1543       else if ((insn & 0xffff0000) == 0xe92d0000)
1544         /* stmfd sp!, {..., fp, ip, lr, pc}
1545            or
1546            stmfd sp!, {a1, a2, a3, a4}  */
1547         {
1548           int mask = insn & 0xffff;
1549
1550           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1551             break;
1552
1553           /* Calculate offsets of saved registers.  */
1554           for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
1555             if (mask & (1 << regno))
1556               {
1557                 regs[ARM_SP_REGNUM]
1558                   = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1559                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
1560               }
1561         }
1562       else if ((insn & 0xffff0000) == 0xe54b0000        /* strb rx,[r11,#-n] */
1563                || (insn & 0xffff00f0) == 0xe14b00b0     /* strh rx,[r11,#-n] */
1564                || (insn & 0xffffc000) == 0xe50b0000)    /* str  rx,[r11,#-n] */
1565         {
1566           /* No need to add this to saved_regs -- it's just an arg reg.  */
1567           continue;
1568         }
1569       else if ((insn & 0xffff0000) == 0xe5cd0000        /* strb rx,[sp,#n] */
1570                || (insn & 0xffff00f0) == 0xe1cd00b0     /* strh rx,[sp,#n] */
1571                || (insn & 0xffffc000) == 0xe58d0000)    /* str  rx,[sp,#n] */
1572         {
1573           /* No need to add this to saved_regs -- it's just an arg reg.  */
1574           continue;
1575         }
1576       else if ((insn & 0xfff00000) == 0xe8800000        /* stm Rn,
1577                                                            { registers } */
1578                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1579         {
1580           /* No need to add this to saved_regs -- it's just arg regs.  */
1581           continue;
1582         }
1583       else if ((insn & 0xfffff000) == 0xe24cb000)       /* sub fp, ip #n */
1584         {
1585           unsigned imm = insn & 0xff;                   /* immediate value */
1586           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1587           imm = (imm >> rot) | (imm << (32 - rot));
1588           regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
1589         }
1590       else if ((insn & 0xfffff000) == 0xe24dd000)       /* sub sp, sp #n */
1591         {
1592           unsigned imm = insn & 0xff;                   /* immediate value */
1593           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1594           imm = (imm >> rot) | (imm << (32 - rot));
1595           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
1596         }
1597       else if ((insn & 0xffff7fff) == 0xed6d0103        /* stfe f?,
1598                                                            [sp, -#c]! */
1599                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1600         {
1601           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1602             break;
1603
1604           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1605           regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
1606           stack.store (regs[ARM_SP_REGNUM], 12, regs[regno]);
1607         }
1608       else if ((insn & 0xffbf0fff) == 0xec2d0200        /* sfmfd f0, 4,
1609                                                            [sp!] */
1610                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1611         {
1612           int n_saved_fp_regs;
1613           unsigned int fp_start_reg, fp_bound_reg;
1614
1615           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1616             break;
1617
1618           if ((insn & 0x800) == 0x800)          /* N0 is set */
1619             {
1620               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1621                 n_saved_fp_regs = 3;
1622               else
1623                 n_saved_fp_regs = 1;
1624             }
1625           else
1626             {
1627               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1628                 n_saved_fp_regs = 2;
1629               else
1630                 n_saved_fp_regs = 4;
1631             }
1632
1633           fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1634           fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1635           for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1636             {
1637               regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1638               stack.store (regs[ARM_SP_REGNUM], 12,
1639                            regs[fp_start_reg++]);
1640             }
1641         }
1642       else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1643         {
1644           /* Allow some special function calls when skipping the
1645              prologue; GCC generates these before storing arguments to
1646              the stack.  */
1647           CORE_ADDR dest = BranchDest (current_pc, insn);
1648
1649           if (skip_prologue_function (gdbarch, dest, 0))
1650             continue;
1651           else
1652             break;
1653         }
1654       else if ((insn & 0xf0000000) != 0xe0000000)
1655         break;                  /* Condition not true, exit early.  */
1656       else if (arm_instruction_changes_pc (insn))
1657         /* Don't scan past anything that might change control flow.  */
1658         break;
1659       else if (arm_instruction_restores_sp (insn))
1660         {
1661           /* Don't scan past the epilogue.  */
1662           break;
1663         }
1664       else if ((insn & 0xfe500000) == 0xe8100000        /* ldm */
1665                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1666         /* Ignore block loads from the stack, potentially copying
1667            parameters from memory.  */
1668         continue;
1669       else if ((insn & 0xfc500000) == 0xe4100000
1670                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1671         /* Similarly ignore single loads from the stack.  */
1672         continue;
1673       else if ((insn & 0xffff0ff0) == 0xe1a00000)
1674         /* MOV Rd, Rm.  Skip register copies, i.e. saves to another
1675            register instead of the stack.  */
1676         continue;
1677       else
1678         {
1679           /* The optimizer might shove anything into the prologue, if
1680              we build up cache (cache != NULL) from scanning prologue,
1681              we just skip what we don't recognize and scan further to
1682              make cache as complete as possible.  However, if we skip
1683              prologue, we'll stop immediately on unrecognized
1684              instruction.  */
1685           unrecognized_pc = current_pc;
1686           if (cache != NULL)
1687             continue;
1688           else
1689             break;
1690         }
1691     }
1692
1693   if (unrecognized_pc == 0)
1694     unrecognized_pc = current_pc;
1695
1696   if (cache)
1697     {
1698       int framereg, framesize;
1699
1700       /* The frame size is just the distance from the frame register
1701          to the original stack pointer.  */
1702       if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1703         {
1704           /* Frame pointer is fp.  */
1705           framereg = ARM_FP_REGNUM;
1706           framesize = -regs[ARM_FP_REGNUM].k;
1707         }
1708       else
1709         {
1710           /* Try the stack pointer... this is a bit desperate.  */
1711           framereg = ARM_SP_REGNUM;
1712           framesize = -regs[ARM_SP_REGNUM].k;
1713         }
1714
1715       cache->framereg = framereg;
1716       cache->framesize = framesize;
1717
1718       for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1719         if (stack.find_reg (gdbarch, regno, &offset))
1720           cache->saved_regs[regno].addr = offset;
1721     }
1722
1723   if (arm_debug)
1724     fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1725                         paddress (gdbarch, unrecognized_pc));
1726
1727   return unrecognized_pc;
1728 }
1729
1730 static void
1731 arm_scan_prologue (struct frame_info *this_frame,
1732                    struct arm_prologue_cache *cache)
1733 {
1734   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1735   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1736   CORE_ADDR prologue_start, prologue_end;
1737   CORE_ADDR prev_pc = get_frame_pc (this_frame);
1738   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1739
1740   /* Assume there is no frame until proven otherwise.  */
1741   cache->framereg = ARM_SP_REGNUM;
1742   cache->framesize = 0;
1743
1744   /* Check for Thumb prologue.  */
1745   if (arm_frame_is_thumb (this_frame))
1746     {
1747       thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1748       return;
1749     }
1750
1751   /* Find the function prologue.  If we can't find the function in
1752      the symbol table, peek in the stack frame to find the PC.  */
1753   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1754                                 &prologue_end))
1755     {
1756       /* One way to find the end of the prologue (which works well
1757          for unoptimized code) is to do the following:
1758
1759             struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1760
1761             if (sal.line == 0)
1762               prologue_end = prev_pc;
1763             else if (sal.end < prologue_end)
1764               prologue_end = sal.end;
1765
1766          This mechanism is very accurate so long as the optimizer
1767          doesn't move any instructions from the function body into the
1768          prologue.  If this happens, sal.end will be the last
1769          instruction in the first hunk of prologue code just before
1770          the first instruction that the scheduler has moved from
1771          the body to the prologue.
1772
1773          In order to make sure that we scan all of the prologue
1774          instructions, we use a slightly less accurate mechanism which
1775          may scan more than necessary.  To help compensate for this
1776          lack of accuracy, the prologue scanning loop below contains
1777          several clauses which'll cause the loop to terminate early if
1778          an implausible prologue instruction is encountered.
1779
1780          The expression
1781
1782               prologue_start + 64
1783
1784          is a suitable endpoint since it accounts for the largest
1785          possible prologue plus up to five instructions inserted by
1786          the scheduler.  */
1787
1788       if (prologue_end > prologue_start + 64)
1789         {
1790           prologue_end = prologue_start + 64;   /* See above.  */
1791         }
1792     }
1793   else
1794     {
1795       /* We have no symbol information.  Our only option is to assume this
1796          function has a standard stack frame and the normal frame register.
1797          Then, we can find the value of our frame pointer on entrance to
1798          the callee (or at the present moment if this is the innermost frame).
1799          The value stored there should be the address of the stmfd + 8.  */
1800       CORE_ADDR frame_loc;
1801       ULONGEST return_value;
1802
1803       /* AAPCS does not use a frame register, so we can abort here.  */
1804       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_AAPCS)
1805         return;
1806
1807       frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1808       if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
1809                                               &return_value))
1810         return;
1811       else
1812         {
1813           prologue_start = gdbarch_addr_bits_remove
1814                              (gdbarch, return_value) - 8;
1815           prologue_end = prologue_start + 64;   /* See above.  */
1816         }
1817     }
1818
1819   if (prev_pc < prologue_end)
1820     prologue_end = prev_pc;
1821
1822   arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1823 }
1824
1825 static struct arm_prologue_cache *
1826 arm_make_prologue_cache (struct frame_info *this_frame)
1827 {
1828   int reg;
1829   struct arm_prologue_cache *cache;
1830   CORE_ADDR unwound_fp;
1831
1832   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1833   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1834
1835   arm_scan_prologue (this_frame, cache);
1836
1837   unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
1838   if (unwound_fp == 0)
1839     return cache;
1840
1841   cache->prev_sp = unwound_fp + cache->framesize;
1842
1843   /* Calculate actual addresses of saved registers using offsets
1844      determined by arm_scan_prologue.  */
1845   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
1846     if (trad_frame_addr_p (cache->saved_regs, reg))
1847       cache->saved_regs[reg].addr += cache->prev_sp;
1848
1849   return cache;
1850 }
1851
1852 /* Implementation of the stop_reason hook for arm_prologue frames.  */
1853
1854 static enum unwind_stop_reason
1855 arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
1856                                  void **this_cache)
1857 {
1858   struct arm_prologue_cache *cache;
1859   CORE_ADDR pc;
1860
1861   if (*this_cache == NULL)
1862     *this_cache = arm_make_prologue_cache (this_frame);
1863   cache = (struct arm_prologue_cache *) *this_cache;
1864
1865   /* This is meant to halt the backtrace at "_start".  */
1866   pc = get_frame_pc (this_frame);
1867   if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
1868     return UNWIND_OUTERMOST;
1869
1870   /* If we've hit a wall, stop.  */
1871   if (cache->prev_sp == 0)
1872     return UNWIND_OUTERMOST;
1873
1874   return UNWIND_NO_REASON;
1875 }
1876
1877 /* Our frame ID for a normal frame is the current function's starting PC
1878    and the caller's SP when we were called.  */
1879
1880 static void
1881 arm_prologue_this_id (struct frame_info *this_frame,
1882                       void **this_cache,
1883                       struct frame_id *this_id)
1884 {
1885   struct arm_prologue_cache *cache;
1886   struct frame_id id;
1887   CORE_ADDR pc, func;
1888
1889   if (*this_cache == NULL)
1890     *this_cache = arm_make_prologue_cache (this_frame);
1891   cache = (struct arm_prologue_cache *) *this_cache;
1892
1893   /* Use function start address as part of the frame ID.  If we cannot
1894      identify the start address (due to missing symbol information),
1895      fall back to just using the current PC.  */
1896   pc = get_frame_pc (this_frame);
1897   func = get_frame_func (this_frame);
1898   if (!func)
1899     func = pc;
1900
1901   id = frame_id_build (cache->prev_sp, func);
1902   *this_id = id;
1903 }
1904
1905 static struct value *
1906 arm_prologue_prev_register (struct frame_info *this_frame,
1907                             void **this_cache,
1908                             int prev_regnum)
1909 {
1910   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1911   struct arm_prologue_cache *cache;
1912
1913   if (*this_cache == NULL)
1914     *this_cache = arm_make_prologue_cache (this_frame);
1915   cache = (struct arm_prologue_cache *) *this_cache;
1916
1917   /* If we are asked to unwind the PC, then we need to return the LR
1918      instead.  The prologue may save PC, but it will point into this
1919      frame's prologue, not the next frame's resume location.  Also
1920      strip the saved T bit.  A valid LR may have the low bit set, but
1921      a valid PC never does.  */
1922   if (prev_regnum == ARM_PC_REGNUM)
1923     {
1924       CORE_ADDR lr;
1925
1926       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1927       return frame_unwind_got_constant (this_frame, prev_regnum,
1928                                         arm_addr_bits_remove (gdbarch, lr));
1929     }
1930
1931   /* SP is generally not saved to the stack, but this frame is
1932      identified by the next frame's stack pointer at the time of the call.
1933      The value was already reconstructed into PREV_SP.  */
1934   if (prev_regnum == ARM_SP_REGNUM)
1935     return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
1936
1937   /* The CPSR may have been changed by the call instruction and by the
1938      called function.  The only bit we can reconstruct is the T bit,
1939      by checking the low bit of LR as of the call.  This is a reliable
1940      indicator of Thumb-ness except for some ARM v4T pre-interworking
1941      Thumb code, which could get away with a clear low bit as long as
1942      the called function did not use bx.  Guess that all other
1943      bits are unchanged; the condition flags are presumably lost,
1944      but the processor status is likely valid.  */
1945   if (prev_regnum == ARM_PS_REGNUM)
1946     {
1947       CORE_ADDR lr, cpsr;
1948       ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
1949
1950       cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
1951       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1952       if (IS_THUMB_ADDR (lr))
1953         cpsr |= t_bit;
1954       else
1955         cpsr &= ~t_bit;
1956       return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
1957     }
1958
1959   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1960                                        prev_regnum);
1961 }
1962
1963 struct frame_unwind arm_prologue_unwind = {
1964   NORMAL_FRAME,
1965   arm_prologue_unwind_stop_reason,
1966   arm_prologue_this_id,
1967   arm_prologue_prev_register,
1968   NULL,
1969   default_frame_sniffer
1970 };
1971
1972 /* Maintain a list of ARM exception table entries per objfile, similar to the
1973    list of mapping symbols.  We only cache entries for standard ARM-defined
1974    personality routines; the cache will contain only the frame unwinding
1975    instructions associated with the entry (not the descriptors).  */
1976
1977 static const struct objfile_data *arm_exidx_data_key;
1978
1979 struct arm_exidx_entry
1980 {
1981   bfd_vma addr;
1982   gdb_byte *entry;
1983 };
1984 typedef struct arm_exidx_entry arm_exidx_entry_s;
1985 DEF_VEC_O(arm_exidx_entry_s);
1986
1987 struct arm_exidx_data
1988 {
1989   VEC(arm_exidx_entry_s) **section_maps;
1990 };
1991
1992 static void
1993 arm_exidx_data_free (struct objfile *objfile, void *arg)
1994 {
1995   struct arm_exidx_data *data = (struct arm_exidx_data *) arg;
1996   unsigned int i;
1997
1998   for (i = 0; i < objfile->obfd->section_count; i++)
1999     VEC_free (arm_exidx_entry_s, data->section_maps[i]);
2000 }
2001
2002 static inline int
2003 arm_compare_exidx_entries (const struct arm_exidx_entry *lhs,
2004                            const struct arm_exidx_entry *rhs)
2005 {
2006   return lhs->addr < rhs->addr;
2007 }
2008
2009 static struct obj_section *
2010 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
2011 {
2012   struct obj_section *osect;
2013
2014   ALL_OBJFILE_OSECTIONS (objfile, osect)
2015     if (bfd_get_section_flags (objfile->obfd,
2016                                osect->the_bfd_section) & SEC_ALLOC)
2017       {
2018         bfd_vma start, size;
2019         start = bfd_get_section_vma (objfile->obfd, osect->the_bfd_section);
2020         size = bfd_get_section_size (osect->the_bfd_section);
2021
2022         if (start <= vma && vma < start + size)
2023           return osect;
2024       }
2025
2026   return NULL;
2027 }
2028
2029 /* Parse contents of exception table and exception index sections
2030    of OBJFILE, and fill in the exception table entry cache.
2031
2032    For each entry that refers to a standard ARM-defined personality
2033    routine, extract the frame unwinding instructions (from either
2034    the index or the table section).  The unwinding instructions
2035    are normalized by:
2036     - extracting them from the rest of the table data
2037     - converting to host endianness
2038     - appending the implicit 0xb0 ("Finish") code
2039
2040    The extracted and normalized instructions are stored for later
2041    retrieval by the arm_find_exidx_entry routine.  */
2042  
2043 static void
2044 arm_exidx_new_objfile (struct objfile *objfile)
2045 {
2046   struct arm_exidx_data *data;
2047   asection *exidx, *extab;
2048   bfd_vma exidx_vma = 0, extab_vma = 0;
2049   LONGEST i;
2050
2051   /* If we've already touched this file, do nothing.  */
2052   if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
2053     return;
2054
2055   /* Read contents of exception table and index.  */
2056   exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
2057   gdb::byte_vector exidx_data;
2058   if (exidx)
2059     {
2060       exidx_vma = bfd_section_vma (objfile->obfd, exidx);
2061       exidx_data.resize (bfd_get_section_size (exidx));
2062
2063       if (!bfd_get_section_contents (objfile->obfd, exidx,
2064                                      exidx_data.data (), 0,
2065                                      exidx_data.size ()))
2066         return;
2067     }
2068
2069   extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2070   gdb::byte_vector extab_data;
2071   if (extab)
2072     {
2073       extab_vma = bfd_section_vma (objfile->obfd, extab);
2074       extab_data.resize (bfd_get_section_size (extab));
2075
2076       if (!bfd_get_section_contents (objfile->obfd, extab,
2077                                      extab_data.data (), 0,
2078                                      extab_data.size ()))
2079         return;
2080     }
2081
2082   /* Allocate exception table data structure.  */
2083   data = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct arm_exidx_data);
2084   set_objfile_data (objfile, arm_exidx_data_key, data);
2085   data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
2086                                        objfile->obfd->section_count,
2087                                        VEC(arm_exidx_entry_s) *);
2088
2089   /* Fill in exception table.  */
2090   for (i = 0; i < exidx_data.size () / 8; i++)
2091     {
2092       struct arm_exidx_entry new_exidx_entry;
2093       bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data.data () + i * 8);
2094       bfd_vma val = bfd_h_get_32 (objfile->obfd,
2095                                   exidx_data.data () + i * 8 + 4);
2096       bfd_vma addr = 0, word = 0;
2097       int n_bytes = 0, n_words = 0;
2098       struct obj_section *sec;
2099       gdb_byte *entry = NULL;
2100
2101       /* Extract address of start of function.  */
2102       idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2103       idx += exidx_vma + i * 8;
2104
2105       /* Find section containing function and compute section offset.  */
2106       sec = arm_obj_section_from_vma (objfile, idx);
2107       if (sec == NULL)
2108         continue;
2109       idx -= bfd_get_section_vma (objfile->obfd, sec->the_bfd_section);
2110
2111       /* Determine address of exception table entry.  */
2112       if (val == 1)
2113         {
2114           /* EXIDX_CANTUNWIND -- no exception table entry present.  */
2115         }
2116       else if ((val & 0xff000000) == 0x80000000)
2117         {
2118           /* Exception table entry embedded in .ARM.exidx
2119              -- must be short form.  */
2120           word = val;
2121           n_bytes = 3;
2122         }
2123       else if (!(val & 0x80000000))
2124         {
2125           /* Exception table entry in .ARM.extab.  */
2126           addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2127           addr += exidx_vma + i * 8 + 4;
2128
2129           if (addr >= extab_vma && addr + 4 <= extab_vma + extab_data.size ())
2130             {
2131               word = bfd_h_get_32 (objfile->obfd,
2132                                    extab_data.data () + addr - extab_vma);
2133               addr += 4;
2134
2135               if ((word & 0xff000000) == 0x80000000)
2136                 {
2137                   /* Short form.  */
2138                   n_bytes = 3;
2139                 }
2140               else if ((word & 0xff000000) == 0x81000000
2141                        || (word & 0xff000000) == 0x82000000)
2142                 {
2143                   /* Long form.  */
2144                   n_bytes = 2;
2145                   n_words = ((word >> 16) & 0xff);
2146                 }
2147               else if (!(word & 0x80000000))
2148                 {
2149                   bfd_vma pers;
2150                   struct obj_section *pers_sec;
2151                   int gnu_personality = 0;
2152
2153                   /* Custom personality routine.  */
2154                   pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2155                   pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2156
2157                   /* Check whether we've got one of the variants of the
2158                      GNU personality routines.  */
2159                   pers_sec = arm_obj_section_from_vma (objfile, pers);
2160                   if (pers_sec)
2161                     {
2162                       static const char *personality[] = 
2163                         {
2164                           "__gcc_personality_v0",
2165                           "__gxx_personality_v0",
2166                           "__gcj_personality_v0",
2167                           "__gnu_objc_personality_v0",
2168                           NULL
2169                         };
2170
2171                       CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2172                       int k;
2173
2174                       for (k = 0; personality[k]; k++)
2175                         if (lookup_minimal_symbol_by_pc_name
2176                               (pc, personality[k], objfile))
2177                           {
2178                             gnu_personality = 1;
2179                             break;
2180                           }
2181                     }
2182
2183                   /* If so, the next word contains a word count in the high
2184                      byte, followed by the same unwind instructions as the
2185                      pre-defined forms.  */
2186                   if (gnu_personality
2187                       && addr + 4 <= extab_vma + extab_data.size ())
2188                     {
2189                       word = bfd_h_get_32 (objfile->obfd,
2190                                            (extab_data.data ()
2191                                             + addr - extab_vma));
2192                       addr += 4;
2193                       n_bytes = 3;
2194                       n_words = ((word >> 24) & 0xff);
2195                     }
2196                 }
2197             }
2198         }
2199
2200       /* Sanity check address.  */
2201       if (n_words)
2202         if (addr < extab_vma
2203             || addr + 4 * n_words > extab_vma + extab_data.size ())
2204           n_words = n_bytes = 0;
2205
2206       /* The unwind instructions reside in WORD (only the N_BYTES least
2207          significant bytes are valid), followed by N_WORDS words in the
2208          extab section starting at ADDR.  */
2209       if (n_bytes || n_words)
2210         {
2211           gdb_byte *p = entry
2212             = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
2213                                           n_bytes + n_words * 4 + 1);
2214
2215           while (n_bytes--)
2216             *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2217
2218           while (n_words--)
2219             {
2220               word = bfd_h_get_32 (objfile->obfd,
2221                                    extab_data.data () + addr - extab_vma);
2222               addr += 4;
2223
2224               *p++ = (gdb_byte) ((word >> 24) & 0xff);
2225               *p++ = (gdb_byte) ((word >> 16) & 0xff);
2226               *p++ = (gdb_byte) ((word >> 8) & 0xff);
2227               *p++ = (gdb_byte) (word & 0xff);
2228             }
2229
2230           /* Implied "Finish" to terminate the list.  */
2231           *p++ = 0xb0;
2232         }
2233
2234       /* Push entry onto vector.  They are guaranteed to always
2235          appear in order of increasing addresses.  */
2236       new_exidx_entry.addr = idx;
2237       new_exidx_entry.entry = entry;
2238       VEC_safe_push (arm_exidx_entry_s,
2239                      data->section_maps[sec->the_bfd_section->index],
2240                      &new_exidx_entry);
2241     }
2242 }
2243
2244 /* Search for the exception table entry covering MEMADDR.  If one is found,
2245    return a pointer to its data.  Otherwise, return 0.  If START is non-NULL,
2246    set *START to the start of the region covered by this entry.  */
2247
2248 static gdb_byte *
2249 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2250 {
2251   struct obj_section *sec;
2252
2253   sec = find_pc_section (memaddr);
2254   if (sec != NULL)
2255     {
2256       struct arm_exidx_data *data;
2257       VEC(arm_exidx_entry_s) *map;
2258       struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2259       unsigned int idx;
2260
2261       data = ((struct arm_exidx_data *)
2262               objfile_data (sec->objfile, arm_exidx_data_key));
2263       if (data != NULL)
2264         {
2265           map = data->section_maps[sec->the_bfd_section->index];
2266           if (!VEC_empty (arm_exidx_entry_s, map))
2267             {
2268               struct arm_exidx_entry *map_sym;
2269
2270               idx = VEC_lower_bound (arm_exidx_entry_s, map, &map_key,
2271                                      arm_compare_exidx_entries);
2272
2273               /* VEC_lower_bound finds the earliest ordered insertion
2274                  point.  If the following symbol starts at this exact
2275                  address, we use that; otherwise, the preceding
2276                  exception table entry covers this address.  */
2277               if (idx < VEC_length (arm_exidx_entry_s, map))
2278                 {
2279                   map_sym = VEC_index (arm_exidx_entry_s, map, idx);
2280                   if (map_sym->addr == map_key.addr)
2281                     {
2282                       if (start)
2283                         *start = map_sym->addr + obj_section_addr (sec);
2284                       return map_sym->entry;
2285                     }
2286                 }
2287
2288               if (idx > 0)
2289                 {
2290                   map_sym = VEC_index (arm_exidx_entry_s, map, idx - 1);
2291                   if (start)
2292                     *start = map_sym->addr + obj_section_addr (sec);
2293                   return map_sym->entry;
2294                 }
2295             }
2296         }
2297     }
2298
2299   return NULL;
2300 }
2301
2302 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2303    instruction list from the ARM exception table entry ENTRY, allocate and
2304    return a prologue cache structure describing how to unwind this frame.
2305
2306    Return NULL if the unwinding instruction list contains a "spare",
2307    "reserved" or "refuse to unwind" instruction as defined in section
2308    "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2309    for the ARM Architecture" document.  */
2310
2311 static struct arm_prologue_cache *
2312 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2313 {
2314   CORE_ADDR vsp = 0;
2315   int vsp_valid = 0;
2316
2317   struct arm_prologue_cache *cache;
2318   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2319   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2320
2321   for (;;)
2322     {
2323       gdb_byte insn;
2324
2325       /* Whenever we reload SP, we actually have to retrieve its
2326          actual value in the current frame.  */
2327       if (!vsp_valid)
2328         {
2329           if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2330             {
2331               int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2332               vsp = get_frame_register_unsigned (this_frame, reg);
2333             }
2334           else
2335             {
2336               CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
2337               vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2338             }
2339
2340           vsp_valid = 1;
2341         }
2342
2343       /* Decode next unwind instruction.  */
2344       insn = *entry++;
2345
2346       if ((insn & 0xc0) == 0)
2347         {
2348           int offset = insn & 0x3f;
2349           vsp += (offset << 2) + 4;
2350         }
2351       else if ((insn & 0xc0) == 0x40)
2352         {
2353           int offset = insn & 0x3f;
2354           vsp -= (offset << 2) + 4;
2355         }
2356       else if ((insn & 0xf0) == 0x80)
2357         {
2358           int mask = ((insn & 0xf) << 8) | *entry++;
2359           int i;
2360
2361           /* The special case of an all-zero mask identifies
2362              "Refuse to unwind".  We return NULL to fall back
2363              to the prologue analyzer.  */
2364           if (mask == 0)
2365             return NULL;
2366
2367           /* Pop registers r4..r15 under mask.  */
2368           for (i = 0; i < 12; i++)
2369             if (mask & (1 << i))
2370               {
2371                 cache->saved_regs[4 + i].addr = vsp;
2372                 vsp += 4;
2373               }
2374
2375           /* Special-case popping SP -- we need to reload vsp.  */
2376           if (mask & (1 << (ARM_SP_REGNUM - 4)))
2377             vsp_valid = 0;
2378         }
2379       else if ((insn & 0xf0) == 0x90)
2380         {
2381           int reg = insn & 0xf;
2382
2383           /* Reserved cases.  */
2384           if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2385             return NULL;
2386
2387           /* Set SP from another register and mark VSP for reload.  */
2388           cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2389           vsp_valid = 0;
2390         }
2391       else if ((insn & 0xf0) == 0xa0)
2392         {
2393           int count = insn & 0x7;
2394           int pop_lr = (insn & 0x8) != 0;
2395           int i;
2396
2397           /* Pop r4..r[4+count].  */
2398           for (i = 0; i <= count; i++)
2399             {
2400               cache->saved_regs[4 + i].addr = vsp;
2401               vsp += 4;
2402             }
2403
2404           /* If indicated by flag, pop LR as well.  */
2405           if (pop_lr)
2406             {
2407               cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
2408               vsp += 4;
2409             }
2410         }
2411       else if (insn == 0xb0)
2412         {
2413           /* We could only have updated PC by popping into it; if so, it
2414              will show up as address.  Otherwise, copy LR into PC.  */
2415           if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
2416             cache->saved_regs[ARM_PC_REGNUM]
2417               = cache->saved_regs[ARM_LR_REGNUM];
2418
2419           /* We're done.  */
2420           break;
2421         }
2422       else if (insn == 0xb1)
2423         {
2424           int mask = *entry++;
2425           int i;
2426
2427           /* All-zero mask and mask >= 16 is "spare".  */
2428           if (mask == 0 || mask >= 16)
2429             return NULL;
2430
2431           /* Pop r0..r3 under mask.  */
2432           for (i = 0; i < 4; i++)
2433             if (mask & (1 << i))
2434               {
2435                 cache->saved_regs[i].addr = vsp;
2436                 vsp += 4;
2437               }
2438         }
2439       else if (insn == 0xb2)
2440         {
2441           ULONGEST offset = 0;
2442           unsigned shift = 0;
2443
2444           do
2445             {
2446               offset |= (*entry & 0x7f) << shift;
2447               shift += 7;
2448             }
2449           while (*entry++ & 0x80);
2450
2451           vsp += 0x204 + (offset << 2);
2452         }
2453       else if (insn == 0xb3)
2454         {
2455           int start = *entry >> 4;
2456           int count = (*entry++) & 0xf;
2457           int i;
2458
2459           /* Only registers D0..D15 are valid here.  */
2460           if (start + count >= 16)
2461             return NULL;
2462
2463           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2464           for (i = 0; i <= count; i++)
2465             {
2466               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2467               vsp += 8;
2468             }
2469
2470           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2471           vsp += 4;
2472         }
2473       else if ((insn & 0xf8) == 0xb8)
2474         {
2475           int count = insn & 0x7;
2476           int i;
2477
2478           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2479           for (i = 0; i <= count; i++)
2480             {
2481               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2482               vsp += 8;
2483             }
2484
2485           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2486           vsp += 4;
2487         }
2488       else if (insn == 0xc6)
2489         {
2490           int start = *entry >> 4;
2491           int count = (*entry++) & 0xf;
2492           int i;
2493
2494           /* Only registers WR0..WR15 are valid.  */
2495           if (start + count >= 16)
2496             return NULL;
2497
2498           /* Pop iwmmx registers WR[start]..WR[start+count].  */
2499           for (i = 0; i <= count; i++)
2500             {
2501               cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
2502               vsp += 8;
2503             }
2504         }
2505       else if (insn == 0xc7)
2506         {
2507           int mask = *entry++;
2508           int i;
2509
2510           /* All-zero mask and mask >= 16 is "spare".  */
2511           if (mask == 0 || mask >= 16)
2512             return NULL;
2513
2514           /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask.  */
2515           for (i = 0; i < 4; i++)
2516             if (mask & (1 << i))
2517               {
2518                 cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
2519                 vsp += 4;
2520               }
2521         }
2522       else if ((insn & 0xf8) == 0xc0)
2523         {
2524           int count = insn & 0x7;
2525           int i;
2526
2527           /* Pop iwmmx registers WR[10]..WR[10+count].  */
2528           for (i = 0; i <= count; i++)
2529             {
2530               cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
2531               vsp += 8;
2532             }
2533         }
2534       else if (insn == 0xc8)
2535         {
2536           int start = *entry >> 4;
2537           int count = (*entry++) & 0xf;
2538           int i;
2539
2540           /* Only registers D0..D31 are valid.  */
2541           if (start + count >= 16)
2542             return NULL;
2543
2544           /* Pop VFP double-precision registers
2545              D[16+start]..D[16+start+count].  */
2546           for (i = 0; i <= count; i++)
2547             {
2548               cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
2549               vsp += 8;
2550             }
2551         }
2552       else if (insn == 0xc9)
2553         {
2554           int start = *entry >> 4;
2555           int count = (*entry++) & 0xf;
2556           int i;
2557
2558           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2559           for (i = 0; i <= count; i++)
2560             {
2561               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2562               vsp += 8;
2563             }
2564         }
2565       else if ((insn & 0xf8) == 0xd0)
2566         {
2567           int count = insn & 0x7;
2568           int i;
2569
2570           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2571           for (i = 0; i <= count; i++)
2572             {
2573               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2574               vsp += 8;
2575             }
2576         }
2577       else
2578         {
2579           /* Everything else is "spare".  */
2580           return NULL;
2581         }
2582     }
2583
2584   /* If we restore SP from a register, assume this was the frame register.
2585      Otherwise just fall back to SP as frame register.  */
2586   if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2587     cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2588   else
2589     cache->framereg = ARM_SP_REGNUM;
2590
2591   /* Determine offset to previous frame.  */
2592   cache->framesize
2593     = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2594
2595   /* We already got the previous SP.  */
2596   cache->prev_sp = vsp;
2597
2598   return cache;
2599 }
2600
2601 /* Unwinding via ARM exception table entries.  Note that the sniffer
2602    already computes a filled-in prologue cache, which is then used
2603    with the same arm_prologue_this_id and arm_prologue_prev_register
2604    routines also used for prologue-parsing based unwinding.  */
2605
2606 static int
2607 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2608                           struct frame_info *this_frame,
2609                           void **this_prologue_cache)
2610 {
2611   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2612   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2613   CORE_ADDR addr_in_block, exidx_region, func_start;
2614   struct arm_prologue_cache *cache;
2615   gdb_byte *entry;
2616
2617   /* See if we have an ARM exception table entry covering this address.  */
2618   addr_in_block = get_frame_address_in_block (this_frame);
2619   entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2620   if (!entry)
2621     return 0;
2622
2623   /* The ARM exception table does not describe unwind information
2624      for arbitrary PC values, but is guaranteed to be correct only
2625      at call sites.  We have to decide here whether we want to use
2626      ARM exception table information for this frame, or fall back
2627      to using prologue parsing.  (Note that if we have DWARF CFI,
2628      this sniffer isn't even called -- CFI is always preferred.)
2629
2630      Before we make this decision, however, we check whether we
2631      actually have *symbol* information for the current frame.
2632      If not, prologue parsing would not work anyway, so we might
2633      as well use the exception table and hope for the best.  */
2634   if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2635     {
2636       int exc_valid = 0;
2637
2638       /* If the next frame is "normal", we are at a call site in this
2639          frame, so exception information is guaranteed to be valid.  */
2640       if (get_next_frame (this_frame)
2641           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2642         exc_valid = 1;
2643
2644       /* We also assume exception information is valid if we're currently
2645          blocked in a system call.  The system library is supposed to
2646          ensure this, so that e.g. pthread cancellation works.  */
2647       if (arm_frame_is_thumb (this_frame))
2648         {
2649           ULONGEST insn;
2650
2651           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
2652                                                  2, byte_order_for_code, &insn)
2653               && (insn & 0xff00) == 0xdf00 /* svc */)
2654             exc_valid = 1;
2655         }
2656       else
2657         {
2658           ULONGEST insn;
2659
2660           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
2661                                                  4, byte_order_for_code, &insn)
2662               && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2663             exc_valid = 1;
2664         }
2665         
2666       /* Bail out if we don't know that exception information is valid.  */
2667       if (!exc_valid)
2668         return 0;
2669
2670      /* The ARM exception index does not mark the *end* of the region
2671         covered by the entry, and some functions will not have any entry.
2672         To correctly recognize the end of the covered region, the linker
2673         should have inserted dummy records with a CANTUNWIND marker.
2674
2675         Unfortunately, current versions of GNU ld do not reliably do
2676         this, and thus we may have found an incorrect entry above.
2677         As a (temporary) sanity check, we only use the entry if it
2678         lies *within* the bounds of the function.  Note that this check
2679         might reject perfectly valid entries that just happen to cover
2680         multiple functions; therefore this check ought to be removed
2681         once the linker is fixed.  */
2682       if (func_start > exidx_region)
2683         return 0;
2684     }
2685
2686   /* Decode the list of unwinding instructions into a prologue cache.
2687      Note that this may fail due to e.g. a "refuse to unwind" code.  */
2688   cache = arm_exidx_fill_cache (this_frame, entry);
2689   if (!cache)
2690     return 0;
2691
2692   *this_prologue_cache = cache;
2693   return 1;
2694 }
2695
2696 struct frame_unwind arm_exidx_unwind = {
2697   NORMAL_FRAME,
2698   default_frame_unwind_stop_reason,
2699   arm_prologue_this_id,
2700   arm_prologue_prev_register,
2701   NULL,
2702   arm_exidx_unwind_sniffer
2703 };
2704
2705 static struct arm_prologue_cache *
2706 arm_make_epilogue_frame_cache (struct frame_info *this_frame)
2707 {
2708   struct arm_prologue_cache *cache;
2709   int reg;
2710
2711   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2712   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2713
2714   /* Still rely on the offset calculated from prologue.  */
2715   arm_scan_prologue (this_frame, cache);
2716
2717   /* Since we are in epilogue, the SP has been restored.  */
2718   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2719
2720   /* Calculate actual addresses of saved registers using offsets
2721      determined by arm_scan_prologue.  */
2722   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2723     if (trad_frame_addr_p (cache->saved_regs, reg))
2724       cache->saved_regs[reg].addr += cache->prev_sp;
2725
2726   return cache;
2727 }
2728
2729 /* Implementation of function hook 'this_id' in
2730    'struct frame_uwnind' for epilogue unwinder.  */
2731
2732 static void
2733 arm_epilogue_frame_this_id (struct frame_info *this_frame,
2734                             void **this_cache,
2735                             struct frame_id *this_id)
2736 {
2737   struct arm_prologue_cache *cache;
2738   CORE_ADDR pc, func;
2739
2740   if (*this_cache == NULL)
2741     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2742   cache = (struct arm_prologue_cache *) *this_cache;
2743
2744   /* Use function start address as part of the frame ID.  If we cannot
2745      identify the start address (due to missing symbol information),
2746      fall back to just using the current PC.  */
2747   pc = get_frame_pc (this_frame);
2748   func = get_frame_func (this_frame);
2749   if (func == 0)
2750     func = pc;
2751
2752   (*this_id) = frame_id_build (cache->prev_sp, pc);
2753 }
2754
2755 /* Implementation of function hook 'prev_register' in
2756    'struct frame_uwnind' for epilogue unwinder.  */
2757
2758 static struct value *
2759 arm_epilogue_frame_prev_register (struct frame_info *this_frame,
2760                                   void **this_cache, int regnum)
2761 {
2762   if (*this_cache == NULL)
2763     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2764
2765   return arm_prologue_prev_register (this_frame, this_cache, regnum);
2766 }
2767
2768 static int arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch,
2769                                           CORE_ADDR pc);
2770 static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
2771                                           CORE_ADDR pc);
2772
2773 /* Implementation of function hook 'sniffer' in
2774    'struct frame_uwnind' for epilogue unwinder.  */
2775
2776 static int
2777 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
2778                             struct frame_info *this_frame,
2779                             void **this_prologue_cache)
2780 {
2781   if (frame_relative_level (this_frame) == 0)
2782     {
2783       struct gdbarch *gdbarch = get_frame_arch (this_frame);
2784       CORE_ADDR pc = get_frame_pc (this_frame);
2785
2786       if (arm_frame_is_thumb (this_frame))
2787         return thumb_stack_frame_destroyed_p (gdbarch, pc);
2788       else
2789         return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
2790     }
2791   else
2792     return 0;
2793 }
2794
2795 /* Frame unwinder from epilogue.  */
2796
2797 static const struct frame_unwind arm_epilogue_frame_unwind =
2798 {
2799   NORMAL_FRAME,
2800   default_frame_unwind_stop_reason,
2801   arm_epilogue_frame_this_id,
2802   arm_epilogue_frame_prev_register,
2803   NULL,
2804   arm_epilogue_frame_sniffer,
2805 };
2806
2807 /* Recognize GCC's trampoline for thumb call-indirect.  If we are in a
2808    trampoline, return the target PC.  Otherwise return 0.
2809
2810    void call0a (char c, short s, int i, long l) {}
2811
2812    int main (void)
2813    {
2814      (*pointer_to_call0a) (c, s, i, l);
2815    }
2816
2817    Instead of calling a stub library function  _call_via_xx (xx is
2818    the register name), GCC may inline the trampoline in the object
2819    file as below (register r2 has the address of call0a).
2820
2821    .global main
2822    .type main, %function
2823    ...
2824    bl .L1
2825    ...
2826    .size main, .-main
2827
2828    .L1:
2829    bx r2
2830
2831    The trampoline 'bx r2' doesn't belong to main.  */
2832
2833 static CORE_ADDR
2834 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2835 {
2836   /* The heuristics of recognizing such trampoline is that FRAME is
2837      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
2838   if (arm_frame_is_thumb (frame))
2839     {
2840       gdb_byte buf[2];
2841
2842       if (target_read_memory (pc, buf, 2) == 0)
2843         {
2844           struct gdbarch *gdbarch = get_frame_arch (frame);
2845           enum bfd_endian byte_order_for_code
2846             = gdbarch_byte_order_for_code (gdbarch);
2847           uint16_t insn
2848             = extract_unsigned_integer (buf, 2, byte_order_for_code);
2849
2850           if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
2851             {
2852               CORE_ADDR dest
2853                 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2854
2855               /* Clear the LSB so that gdb core sets step-resume
2856                  breakpoint at the right address.  */
2857               return UNMAKE_THUMB_ADDR (dest);
2858             }
2859         }
2860     }
2861
2862   return 0;
2863 }
2864
2865 static struct arm_prologue_cache *
2866 arm_make_stub_cache (struct frame_info *this_frame)
2867 {
2868   struct arm_prologue_cache *cache;
2869
2870   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2871   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2872
2873   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2874
2875   return cache;
2876 }
2877
2878 /* Our frame ID for a stub frame is the current SP and LR.  */
2879
2880 static void
2881 arm_stub_this_id (struct frame_info *this_frame,
2882                   void **this_cache,
2883                   struct frame_id *this_id)
2884 {
2885   struct arm_prologue_cache *cache;
2886
2887   if (*this_cache == NULL)
2888     *this_cache = arm_make_stub_cache (this_frame);
2889   cache = (struct arm_prologue_cache *) *this_cache;
2890
2891   *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2892 }
2893
2894 static int
2895 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2896                          struct frame_info *this_frame,
2897                          void **this_prologue_cache)
2898 {
2899   CORE_ADDR addr_in_block;
2900   gdb_byte dummy[4];
2901   CORE_ADDR pc, start_addr;
2902   const char *name;
2903
2904   addr_in_block = get_frame_address_in_block (this_frame);
2905   pc = get_frame_pc (this_frame);
2906   if (in_plt_section (addr_in_block)
2907       /* We also use the stub winder if the target memory is unreadable
2908          to avoid having the prologue unwinder trying to read it.  */
2909       || target_read_memory (pc, dummy, 4) != 0)
2910     return 1;
2911
2912   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2913       && arm_skip_bx_reg (this_frame, pc) != 0)
2914     return 1;
2915
2916   return 0;
2917 }
2918
2919 struct frame_unwind arm_stub_unwind = {
2920   NORMAL_FRAME,
2921   default_frame_unwind_stop_reason,
2922   arm_stub_this_id,
2923   arm_prologue_prev_register,
2924   NULL,
2925   arm_stub_unwind_sniffer
2926 };
2927
2928 /* Put here the code to store, into CACHE->saved_regs, the addresses
2929    of the saved registers of frame described by THIS_FRAME.  CACHE is
2930    returned.  */
2931
2932 static struct arm_prologue_cache *
2933 arm_m_exception_cache (struct frame_info *this_frame)
2934 {
2935   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2936   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2937   struct arm_prologue_cache *cache;
2938   CORE_ADDR unwound_sp;
2939   LONGEST xpsr;
2940
2941   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2942   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2943
2944   unwound_sp = get_frame_register_unsigned (this_frame,
2945                                             ARM_SP_REGNUM);
2946
2947   /* The hardware saves eight 32-bit words, comprising xPSR,
2948      ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
2949      "B1.5.6 Exception entry behavior" in
2950      "ARMv7-M Architecture Reference Manual".  */
2951   cache->saved_regs[0].addr = unwound_sp;
2952   cache->saved_regs[1].addr = unwound_sp + 4;
2953   cache->saved_regs[2].addr = unwound_sp + 8;
2954   cache->saved_regs[3].addr = unwound_sp + 12;
2955   cache->saved_regs[12].addr = unwound_sp + 16;
2956   cache->saved_regs[14].addr = unwound_sp + 20;
2957   cache->saved_regs[15].addr = unwound_sp + 24;
2958   cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
2959
2960   /* If bit 9 of the saved xPSR is set, then there is a four-byte
2961      aligner between the top of the 32-byte stack frame and the
2962      previous context's stack pointer.  */
2963   cache->prev_sp = unwound_sp + 32;
2964   if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
2965       && (xpsr & (1 << 9)) != 0)
2966     cache->prev_sp += 4;
2967
2968   return cache;
2969 }
2970
2971 /* Implementation of function hook 'this_id' in
2972    'struct frame_uwnind'.  */
2973
2974 static void
2975 arm_m_exception_this_id (struct frame_info *this_frame,
2976                          void **this_cache,
2977                          struct frame_id *this_id)
2978 {
2979   struct arm_prologue_cache *cache;
2980
2981   if (*this_cache == NULL)
2982     *this_cache = arm_m_exception_cache (this_frame);
2983   cache = (struct arm_prologue_cache *) *this_cache;
2984
2985   /* Our frame ID for a stub frame is the current SP and LR.  */
2986   *this_id = frame_id_build (cache->prev_sp,
2987                              get_frame_pc (this_frame));
2988 }
2989
2990 /* Implementation of function hook 'prev_register' in
2991    'struct frame_uwnind'.  */
2992
2993 static struct value *
2994 arm_m_exception_prev_register (struct frame_info *this_frame,
2995                                void **this_cache,
2996                                int prev_regnum)
2997 {
2998   struct arm_prologue_cache *cache;
2999
3000   if (*this_cache == NULL)
3001     *this_cache = arm_m_exception_cache (this_frame);
3002   cache = (struct arm_prologue_cache *) *this_cache;
3003
3004   /* The value was already reconstructed into PREV_SP.  */
3005   if (prev_regnum == ARM_SP_REGNUM)
3006     return frame_unwind_got_constant (this_frame, prev_regnum,
3007                                       cache->prev_sp);
3008
3009   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3010                                        prev_regnum);
3011 }
3012
3013 /* Implementation of function hook 'sniffer' in
3014    'struct frame_uwnind'.  */
3015
3016 static int
3017 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3018                                 struct frame_info *this_frame,
3019                                 void **this_prologue_cache)
3020 {
3021   CORE_ADDR this_pc = get_frame_pc (this_frame);
3022
3023   /* No need to check is_m; this sniffer is only registered for
3024      M-profile architectures.  */
3025
3026   /* Check if exception frame returns to a magic PC value.  */
3027   return arm_m_addr_is_magic (this_pc);
3028 }
3029
3030 /* Frame unwinder for M-profile exceptions.  */
3031
3032 struct frame_unwind arm_m_exception_unwind =
3033 {
3034   SIGTRAMP_FRAME,
3035   default_frame_unwind_stop_reason,
3036   arm_m_exception_this_id,
3037   arm_m_exception_prev_register,
3038   NULL,
3039   arm_m_exception_unwind_sniffer
3040 };
3041
3042 static CORE_ADDR
3043 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3044 {
3045   struct arm_prologue_cache *cache;
3046
3047   if (*this_cache == NULL)
3048     *this_cache = arm_make_prologue_cache (this_frame);
3049   cache = (struct arm_prologue_cache *) *this_cache;
3050
3051   return cache->prev_sp - cache->framesize;
3052 }
3053
3054 struct frame_base arm_normal_base = {
3055   &arm_prologue_unwind,
3056   arm_normal_frame_base,
3057   arm_normal_frame_base,
3058   arm_normal_frame_base
3059 };
3060
3061 static struct value *
3062 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3063                           int regnum)
3064 {
3065   struct gdbarch * gdbarch = get_frame_arch (this_frame);
3066   CORE_ADDR lr, cpsr;
3067   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3068
3069   switch (regnum)
3070     {
3071     case ARM_PC_REGNUM:
3072       /* The PC is normally copied from the return column, which
3073          describes saves of LR.  However, that version may have an
3074          extra bit set to indicate Thumb state.  The bit is not
3075          part of the PC.  */
3076       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3077       return frame_unwind_got_constant (this_frame, regnum,
3078                                         arm_addr_bits_remove (gdbarch, lr));
3079
3080     case ARM_PS_REGNUM:
3081       /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
3082       cpsr = get_frame_register_unsigned (this_frame, regnum);
3083       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3084       if (IS_THUMB_ADDR (lr))
3085         cpsr |= t_bit;
3086       else
3087         cpsr &= ~t_bit;
3088       return frame_unwind_got_constant (this_frame, regnum, cpsr);
3089
3090     default:
3091       internal_error (__FILE__, __LINE__,
3092                       _("Unexpected register %d"), regnum);
3093     }
3094 }
3095
3096 static void
3097 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3098                            struct dwarf2_frame_state_reg *reg,
3099                            struct frame_info *this_frame)
3100 {
3101   switch (regnum)
3102     {
3103     case ARM_PC_REGNUM:
3104     case ARM_PS_REGNUM:
3105       reg->how = DWARF2_FRAME_REG_FN;
3106       reg->loc.fn = arm_dwarf2_prev_register;
3107       break;
3108     case ARM_SP_REGNUM:
3109       reg->how = DWARF2_FRAME_REG_CFA;
3110       break;
3111     }
3112 }
3113
3114 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3115
3116 static int
3117 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3118 {
3119   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3120   unsigned int insn, insn2;
3121   int found_return = 0, found_stack_adjust = 0;
3122   CORE_ADDR func_start, func_end;
3123   CORE_ADDR scan_pc;
3124   gdb_byte buf[4];
3125
3126   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3127     return 0;
3128
3129   /* The epilogue is a sequence of instructions along the following lines:
3130
3131     - add stack frame size to SP or FP
3132     - [if frame pointer used] restore SP from FP
3133     - restore registers from SP [may include PC]
3134     - a return-type instruction [if PC wasn't already restored]
3135
3136     In a first pass, we scan forward from the current PC and verify the
3137     instructions we find as compatible with this sequence, ending in a
3138     return instruction.
3139
3140     However, this is not sufficient to distinguish indirect function calls
3141     within a function from indirect tail calls in the epilogue in some cases.
3142     Therefore, if we didn't already find any SP-changing instruction during
3143     forward scan, we add a backward scanning heuristic to ensure we actually
3144     are in the epilogue.  */
3145
3146   scan_pc = pc;
3147   while (scan_pc < func_end && !found_return)
3148     {
3149       if (target_read_memory (scan_pc, buf, 2))
3150         break;
3151
3152       scan_pc += 2;
3153       insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3154
3155       if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
3156         found_return = 1;
3157       else if (insn == 0x46f7)  /* mov pc, lr */
3158         found_return = 1;
3159       else if (thumb_instruction_restores_sp (insn))
3160         {
3161           if ((insn & 0xff00) == 0xbd00)  /* pop <registers, PC> */
3162             found_return = 1;
3163         }
3164       else if (thumb_insn_size (insn) == 4)  /* 32-bit Thumb-2 instruction */
3165         {
3166           if (target_read_memory (scan_pc, buf, 2))
3167             break;
3168
3169           scan_pc += 2;
3170           insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3171
3172           if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3173             {
3174               if (insn2 & 0x8000)  /* <registers> include PC.  */
3175                 found_return = 1;
3176             }
3177           else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3178                    && (insn2 & 0x0fff) == 0x0b04)
3179             {
3180               if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC.  */
3181                 found_return = 1;
3182             }
3183           else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3184                    && (insn2 & 0x0e00) == 0x0a00)
3185             ;
3186           else
3187             break;
3188         }
3189       else
3190         break;
3191     }
3192
3193   if (!found_return)
3194     return 0;
3195
3196   /* Since any instruction in the epilogue sequence, with the possible
3197      exception of return itself, updates the stack pointer, we need to
3198      scan backwards for at most one instruction.  Try either a 16-bit or
3199      a 32-bit instruction.  This is just a heuristic, so we do not worry
3200      too much about false positives.  */
3201
3202   if (pc - 4 < func_start)
3203     return 0;
3204   if (target_read_memory (pc - 4, buf, 4))
3205     return 0;
3206
3207   insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3208   insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3209
3210   if (thumb_instruction_restores_sp (insn2))
3211     found_stack_adjust = 1;
3212   else if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3213     found_stack_adjust = 1;
3214   else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3215            && (insn2 & 0x0fff) == 0x0b04)
3216     found_stack_adjust = 1;
3217   else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3218            && (insn2 & 0x0e00) == 0x0a00)
3219     found_stack_adjust = 1;
3220
3221   return found_stack_adjust;
3222 }
3223
3224 static int
3225 arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
3226 {
3227   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3228   unsigned int insn;
3229   int found_return;
3230   CORE_ADDR func_start, func_end;
3231
3232   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3233     return 0;
3234
3235   /* We are in the epilogue if the previous instruction was a stack
3236      adjustment and the next instruction is a possible return (bx, mov
3237      pc, or pop).  We could have to scan backwards to find the stack
3238      adjustment, or forwards to find the return, but this is a decent
3239      approximation.  First scan forwards.  */
3240
3241   found_return = 0;
3242   insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3243   if (bits (insn, 28, 31) != INST_NV)
3244     {
3245       if ((insn & 0x0ffffff0) == 0x012fff10)
3246         /* BX.  */
3247         found_return = 1;
3248       else if ((insn & 0x0ffffff0) == 0x01a0f000)
3249         /* MOV PC.  */
3250         found_return = 1;
3251       else if ((insn & 0x0fff0000) == 0x08bd0000
3252           && (insn & 0x0000c000) != 0)
3253         /* POP (LDMIA), including PC or LR.  */
3254         found_return = 1;
3255     }
3256
3257   if (!found_return)
3258     return 0;
3259
3260   /* Scan backwards.  This is just a heuristic, so do not worry about
3261      false positives from mode changes.  */
3262
3263   if (pc < func_start + 4)
3264     return 0;
3265
3266   insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3267   if (arm_instruction_restores_sp (insn))
3268     return 1;
3269
3270   return 0;
3271 }
3272
3273 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3274
3275 static int
3276 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3277 {
3278   if (arm_pc_is_thumb (gdbarch, pc))
3279     return thumb_stack_frame_destroyed_p (gdbarch, pc);
3280   else
3281     return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
3282 }
3283
3284 /* When arguments must be pushed onto the stack, they go on in reverse
3285    order.  The code below implements a FILO (stack) to do this.  */
3286
3287 struct stack_item
3288 {
3289   int len;
3290   struct stack_item *prev;
3291   gdb_byte *data;
3292 };
3293
3294 static struct stack_item *
3295 push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
3296 {
3297   struct stack_item *si;
3298   si = XNEW (struct stack_item);
3299   si->data = (gdb_byte *) xmalloc (len);
3300   si->len = len;
3301   si->prev = prev;
3302   memcpy (si->data, contents, len);
3303   return si;
3304 }
3305
3306 static struct stack_item *
3307 pop_stack_item (struct stack_item *si)
3308 {
3309   struct stack_item *dead = si;
3310   si = si->prev;
3311   xfree (dead->data);
3312   xfree (dead);
3313   return si;
3314 }
3315
3316
3317 /* Return the alignment (in bytes) of the given type.  */
3318
3319 static int
3320 arm_type_align (struct type *t)
3321 {
3322   int n;
3323   int align;
3324   int falign;
3325
3326   t = check_typedef (t);
3327   switch (TYPE_CODE (t))
3328     {
3329     default:
3330       /* Should never happen.  */
3331       internal_error (__FILE__, __LINE__, _("unknown type alignment"));
3332       return 4;
3333
3334     case TYPE_CODE_PTR:
3335     case TYPE_CODE_ENUM:
3336     case TYPE_CODE_INT:
3337     case TYPE_CODE_FLT:
3338     case TYPE_CODE_SET:
3339     case TYPE_CODE_RANGE:
3340     case TYPE_CODE_REF:
3341     case TYPE_CODE_RVALUE_REF:
3342     case TYPE_CODE_CHAR:
3343     case TYPE_CODE_BOOL:
3344       return TYPE_LENGTH (t);
3345
3346     case TYPE_CODE_ARRAY:
3347       if (TYPE_VECTOR (t))
3348         {
3349           /* Use the natural alignment for vector types (the same for
3350              scalar type), but the maximum alignment is 64-bit.  */
3351           if (TYPE_LENGTH (t) > 8)
3352             return 8;
3353           else
3354             return TYPE_LENGTH (t);
3355         }
3356       else
3357         return arm_type_align (TYPE_TARGET_TYPE (t));
3358     case TYPE_CODE_COMPLEX:
3359       return arm_type_align (TYPE_TARGET_TYPE (t));
3360
3361     case TYPE_CODE_STRUCT:
3362     case TYPE_CODE_UNION:
3363       align = 1;
3364       for (n = 0; n < TYPE_NFIELDS (t); n++)
3365         {
3366           falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
3367           if (falign > align)
3368             align = falign;
3369         }
3370       return align;
3371     }
3372 }
3373
3374 /* Possible base types for a candidate for passing and returning in
3375    VFP registers.  */
3376
3377 enum arm_vfp_cprc_base_type
3378 {
3379   VFP_CPRC_UNKNOWN,
3380   VFP_CPRC_SINGLE,
3381   VFP_CPRC_DOUBLE,
3382   VFP_CPRC_VEC64,
3383   VFP_CPRC_VEC128
3384 };
3385
3386 /* The length of one element of base type B.  */
3387
3388 static unsigned
3389 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3390 {
3391   switch (b)
3392     {
3393     case VFP_CPRC_SINGLE:
3394       return 4;
3395     case VFP_CPRC_DOUBLE:
3396       return 8;
3397     case VFP_CPRC_VEC64:
3398       return 8;
3399     case VFP_CPRC_VEC128:
3400       return 16;
3401     default:
3402       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3403                       (int) b);
3404     }
3405 }
3406
3407 /* The character ('s', 'd' or 'q') for the type of VFP register used
3408    for passing base type B.  */
3409
3410 static int
3411 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3412 {
3413   switch (b)
3414     {
3415     case VFP_CPRC_SINGLE:
3416       return 's';
3417     case VFP_CPRC_DOUBLE:
3418       return 'd';
3419     case VFP_CPRC_VEC64:
3420       return 'd';
3421     case VFP_CPRC_VEC128:
3422       return 'q';
3423     default:
3424       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3425                       (int) b);
3426     }
3427 }
3428
3429 /* Determine whether T may be part of a candidate for passing and
3430    returning in VFP registers, ignoring the limit on the total number
3431    of components.  If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3432    classification of the first valid component found; if it is not
3433    VFP_CPRC_UNKNOWN, all components must have the same classification
3434    as *BASE_TYPE.  If it is found that T contains a type not permitted
3435    for passing and returning in VFP registers, a type differently
3436    classified from *BASE_TYPE, or two types differently classified
3437    from each other, return -1, otherwise return the total number of
3438    base-type elements found (possibly 0 in an empty structure or
3439    array).  Vector types are not currently supported, matching the
3440    generic AAPCS support.  */
3441
3442 static int
3443 arm_vfp_cprc_sub_candidate (struct type *t,
3444                             enum arm_vfp_cprc_base_type *base_type)
3445 {
3446   t = check_typedef (t);
3447   switch (TYPE_CODE (t))
3448     {
3449     case TYPE_CODE_FLT:
3450       switch (TYPE_LENGTH (t))
3451         {
3452         case 4:
3453           if (*base_type == VFP_CPRC_UNKNOWN)
3454             *base_type = VFP_CPRC_SINGLE;
3455           else if (*base_type != VFP_CPRC_SINGLE)
3456             return -1;
3457           return 1;
3458
3459         case 8:
3460           if (*base_type == VFP_CPRC_UNKNOWN)
3461             *base_type = VFP_CPRC_DOUBLE;
3462           else if (*base_type != VFP_CPRC_DOUBLE)
3463             return -1;
3464           return 1;
3465
3466         default:
3467           return -1;
3468         }
3469       break;
3470
3471     case TYPE_CODE_COMPLEX:
3472       /* Arguments of complex T where T is one of the types float or
3473          double get treated as if they are implemented as:
3474
3475          struct complexT
3476          {
3477            T real;
3478            T imag;
3479          };
3480
3481       */
3482       switch (TYPE_LENGTH (t))
3483         {
3484         case 8:
3485           if (*base_type == VFP_CPRC_UNKNOWN)
3486             *base_type = VFP_CPRC_SINGLE;
3487           else if (*base_type != VFP_CPRC_SINGLE)
3488             return -1;
3489           return 2;
3490
3491         case 16:
3492           if (*base_type == VFP_CPRC_UNKNOWN)
3493             *base_type = VFP_CPRC_DOUBLE;
3494           else if (*base_type != VFP_CPRC_DOUBLE)
3495             return -1;
3496           return 2;
3497
3498         default:
3499           return -1;
3500         }
3501       break;
3502
3503     case TYPE_CODE_ARRAY:
3504       {
3505         if (TYPE_VECTOR (t))
3506           {
3507             /* A 64-bit or 128-bit containerized vector type are VFP
3508                CPRCs.  */
3509             switch (TYPE_LENGTH (t))
3510               {
3511               case 8:
3512                 if (*base_type == VFP_CPRC_UNKNOWN)
3513                   *base_type = VFP_CPRC_VEC64;
3514                 return 1;
3515               case 16:
3516                 if (*base_type == VFP_CPRC_UNKNOWN)
3517                   *base_type = VFP_CPRC_VEC128;
3518                 return 1;
3519               default:
3520                 return -1;
3521               }
3522           }
3523         else
3524           {
3525             int count;
3526             unsigned unitlen;
3527
3528             count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
3529                                                 base_type);
3530             if (count == -1)
3531               return -1;
3532             if (TYPE_LENGTH (t) == 0)
3533               {
3534                 gdb_assert (count == 0);
3535                 return 0;
3536               }
3537             else if (count == 0)
3538               return -1;
3539             unitlen = arm_vfp_cprc_unit_length (*base_type);
3540             gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3541             return TYPE_LENGTH (t) / unitlen;
3542           }
3543       }
3544       break;
3545
3546     case TYPE_CODE_STRUCT:
3547       {
3548         int count = 0;
3549         unsigned unitlen;
3550         int i;
3551         for (i = 0; i < TYPE_NFIELDS (t); i++)
3552           {
3553             int sub_count = 0;
3554
3555             if (!field_is_static (&TYPE_FIELD (t, i)))
3556               sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3557                                                       base_type);
3558             if (sub_count == -1)
3559               return -1;
3560             count += sub_count;
3561           }
3562         if (TYPE_LENGTH (t) == 0)
3563           {
3564             gdb_assert (count == 0);
3565             return 0;
3566           }
3567         else if (count == 0)
3568           return -1;
3569         unitlen = arm_vfp_cprc_unit_length (*base_type);
3570         if (TYPE_LENGTH (t) != unitlen * count)
3571           return -1;
3572         return count;
3573       }
3574
3575     case TYPE_CODE_UNION:
3576       {
3577         int count = 0;
3578         unsigned unitlen;
3579         int i;
3580         for (i = 0; i < TYPE_NFIELDS (t); i++)
3581           {
3582             int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3583                                                         base_type);
3584             if (sub_count == -1)
3585               return -1;
3586             count = (count > sub_count ? count : sub_count);
3587           }
3588         if (TYPE_LENGTH (t) == 0)
3589           {
3590             gdb_assert (count == 0);
3591             return 0;
3592           }
3593         else if (count == 0)
3594           return -1;
3595         unitlen = arm_vfp_cprc_unit_length (*base_type);
3596         if (TYPE_LENGTH (t) != unitlen * count)
3597           return -1;
3598         return count;
3599       }
3600
3601     default:
3602       break;
3603     }
3604
3605   return -1;
3606 }
3607
3608 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3609    if passed to or returned from a non-variadic function with the VFP
3610    ABI in effect.  Return 1 if it is, 0 otherwise.  If it is, set
3611    *BASE_TYPE to the base type for T and *COUNT to the number of
3612    elements of that base type before returning.  */
3613
3614 static int
3615 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3616                         int *count)
3617 {
3618   enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3619   int c = arm_vfp_cprc_sub_candidate (t, &b);
3620   if (c <= 0 || c > 4)
3621     return 0;
3622   *base_type = b;
3623   *count = c;
3624   return 1;
3625 }
3626
3627 /* Return 1 if the VFP ABI should be used for passing arguments to and
3628    returning values from a function of type FUNC_TYPE, 0
3629    otherwise.  */
3630
3631 static int
3632 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3633 {
3634   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3635   /* Variadic functions always use the base ABI.  Assume that functions
3636      without debug info are not variadic.  */
3637   if (func_type && TYPE_VARARGS (check_typedef (func_type)))
3638     return 0;
3639   /* The VFP ABI is only supported as a variant of AAPCS.  */
3640   if (tdep->arm_abi != ARM_ABI_AAPCS)
3641     return 0;
3642   return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3643 }
3644
3645 /* We currently only support passing parameters in integer registers, which
3646    conforms with GCC's default model, and VFP argument passing following
3647    the VFP variant of AAPCS.  Several other variants exist and
3648    we should probably support some of them based on the selected ABI.  */
3649
3650 static CORE_ADDR
3651 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3652                      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3653                      struct value **args, CORE_ADDR sp,
3654                      function_call_return_method return_method,
3655                      CORE_ADDR struct_addr)
3656 {
3657   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3658   int argnum;
3659   int argreg;
3660   int nstack;
3661   struct stack_item *si = NULL;
3662   int use_vfp_abi;
3663   struct type *ftype;
3664   unsigned vfp_regs_free = (1 << 16) - 1;
3665
3666   /* Determine the type of this function and whether the VFP ABI
3667      applies.  */
3668   ftype = check_typedef (value_type (function));
3669   if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
3670     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3671   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3672
3673   /* Set the return address.  For the ARM, the return breakpoint is
3674      always at BP_ADDR.  */
3675   if (arm_pc_is_thumb (gdbarch, bp_addr))
3676     bp_addr |= 1;
3677   regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3678
3679   /* Walk through the list of args and determine how large a temporary
3680      stack is required.  Need to take care here as structs may be
3681      passed on the stack, and we have to push them.  */
3682   nstack = 0;
3683
3684   argreg = ARM_A1_REGNUM;
3685   nstack = 0;
3686
3687   /* The struct_return pointer occupies the first parameter
3688      passing register.  */
3689   if (return_method == return_method_struct)
3690     {
3691       if (arm_debug)
3692         fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
3693                             gdbarch_register_name (gdbarch, argreg),
3694                             paddress (gdbarch, struct_addr));
3695       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3696       argreg++;
3697     }
3698
3699   for (argnum = 0; argnum < nargs; argnum++)
3700     {
3701       int len;
3702       struct type *arg_type;
3703       struct type *target_type;
3704       enum type_code typecode;
3705       const bfd_byte *val;
3706       int align;
3707       enum arm_vfp_cprc_base_type vfp_base_type;
3708       int vfp_base_count;
3709       int may_use_core_reg = 1;
3710
3711       arg_type = check_typedef (value_type (args[argnum]));
3712       len = TYPE_LENGTH (arg_type);
3713       target_type = TYPE_TARGET_TYPE (arg_type);
3714       typecode = TYPE_CODE (arg_type);
3715       val = value_contents (args[argnum]);
3716
3717       align = arm_type_align (arg_type);
3718       /* Round alignment up to a whole number of words.  */
3719       align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
3720       /* Different ABIs have different maximum alignments.  */
3721       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3722         {
3723           /* The APCS ABI only requires word alignment.  */
3724           align = INT_REGISTER_SIZE;
3725         }
3726       else
3727         {
3728           /* The AAPCS requires at most doubleword alignment.  */
3729           if (align > INT_REGISTER_SIZE * 2)
3730             align = INT_REGISTER_SIZE * 2;
3731         }
3732
3733       if (use_vfp_abi
3734           && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3735                                      &vfp_base_count))
3736         {
3737           int regno;
3738           int unit_length;
3739           int shift;
3740           unsigned mask;
3741
3742           /* Because this is a CPRC it cannot go in a core register or
3743              cause a core register to be skipped for alignment.
3744              Either it goes in VFP registers and the rest of this loop
3745              iteration is skipped for this argument, or it goes on the
3746              stack (and the stack alignment code is correct for this
3747              case).  */
3748           may_use_core_reg = 0;
3749
3750           unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3751           shift = unit_length / 4;
3752           mask = (1 << (shift * vfp_base_count)) - 1;
3753           for (regno = 0; regno < 16; regno += shift)
3754             if (((vfp_regs_free >> regno) & mask) == mask)
3755               break;
3756
3757           if (regno < 16)
3758             {
3759               int reg_char;
3760               int reg_scaled;
3761               int i;
3762
3763               vfp_regs_free &= ~(mask << regno);
3764               reg_scaled = regno / shift;
3765               reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3766               for (i = 0; i < vfp_base_count; i++)
3767                 {
3768                   char name_buf[4];
3769                   int regnum;
3770                   if (reg_char == 'q')
3771                     arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3772                                          val + i * unit_length);
3773                   else
3774                     {
3775                       xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3776                                  reg_char, reg_scaled + i);
3777                       regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3778                                                             strlen (name_buf));
3779                       regcache->cooked_write (regnum, val + i * unit_length);
3780                     }
3781                 }
3782               continue;
3783             }
3784           else
3785             {
3786               /* This CPRC could not go in VFP registers, so all VFP
3787                  registers are now marked as used.  */
3788               vfp_regs_free = 0;
3789             }
3790         }
3791
3792       /* Push stack padding for dowubleword alignment.  */
3793       if (nstack & (align - 1))
3794         {
3795           si = push_stack_item (si, val, INT_REGISTER_SIZE);
3796           nstack += INT_REGISTER_SIZE;
3797         }
3798       
3799       /* Doubleword aligned quantities must go in even register pairs.  */
3800       if (may_use_core_reg
3801           && argreg <= ARM_LAST_ARG_REGNUM
3802           && align > INT_REGISTER_SIZE
3803           && argreg & 1)
3804         argreg++;
3805
3806       /* If the argument is a pointer to a function, and it is a
3807          Thumb function, create a LOCAL copy of the value and set
3808          the THUMB bit in it.  */
3809       if (TYPE_CODE_PTR == typecode
3810           && target_type != NULL
3811           && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3812         {
3813           CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3814           if (arm_pc_is_thumb (gdbarch, regval))
3815             {
3816               bfd_byte *copy = (bfd_byte *) alloca (len);
3817               store_unsigned_integer (copy, len, byte_order,
3818                                       MAKE_THUMB_ADDR (regval));
3819               val = copy;
3820             }
3821         }
3822
3823       /* Copy the argument to general registers or the stack in
3824          register-sized pieces.  Large arguments are split between
3825          registers and stack.  */
3826       while (len > 0)
3827         {
3828           int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3829           CORE_ADDR regval
3830             = extract_unsigned_integer (val, partial_len, byte_order);
3831
3832           if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3833             {
3834               /* The argument is being passed in a general purpose
3835                  register.  */
3836               if (byte_order == BFD_ENDIAN_BIG)
3837                 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3838               if (arm_debug)
3839                 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3840                                     argnum,
3841                                     gdbarch_register_name
3842                                       (gdbarch, argreg),
3843                                     phex (regval, INT_REGISTER_SIZE));
3844               regcache_cooked_write_unsigned (regcache, argreg, regval);
3845               argreg++;
3846             }
3847           else
3848             {
3849               gdb_byte buf[INT_REGISTER_SIZE];
3850
3851               memset (buf, 0, sizeof (buf));
3852               store_unsigned_integer (buf, partial_len, byte_order, regval);
3853
3854               /* Push the arguments onto the stack.  */
3855               if (arm_debug)
3856                 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3857                                     argnum, nstack);
3858               si = push_stack_item (si, buf, INT_REGISTER_SIZE);
3859               nstack += INT_REGISTER_SIZE;
3860             }
3861               
3862           len -= partial_len;
3863           val += partial_len;
3864         }
3865     }
3866   /* If we have an odd number of words to push, then decrement the stack
3867      by one word now, so first stack argument will be dword aligned.  */
3868   if (nstack & 4)
3869     sp -= 4;
3870
3871   while (si)
3872     {
3873       sp -= si->len;
3874       write_memory (sp, si->data, si->len);
3875       si = pop_stack_item (si);
3876     }
3877
3878   /* Finally, update teh SP register.  */
3879   regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3880
3881   return sp;
3882 }
3883
3884
3885 /* Always align the frame to an 8-byte boundary.  This is required on
3886    some platforms and harmless on the rest.  */
3887
3888 static CORE_ADDR
3889 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3890 {
3891   /* Align the stack to eight bytes.  */
3892   return sp & ~ (CORE_ADDR) 7;
3893 }
3894
3895 static void
3896 print_fpu_flags (struct ui_file *file, int flags)
3897 {
3898   if (flags & (1 << 0))
3899     fputs_filtered ("IVO ", file);
3900   if (flags & (1 << 1))
3901     fputs_filtered ("DVZ ", file);
3902   if (flags & (1 << 2))
3903     fputs_filtered ("OFL ", file);
3904   if (flags & (1 << 3))
3905     fputs_filtered ("UFL ", file);
3906   if (flags & (1 << 4))
3907     fputs_filtered ("INX ", file);
3908   fputc_filtered ('\n', file);
3909 }
3910
3911 /* Print interesting information about the floating point processor
3912    (if present) or emulator.  */
3913 static void
3914 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3915                       struct frame_info *frame, const char *args)
3916 {
3917   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3918   int type;
3919
3920   type = (status >> 24) & 127;
3921   if (status & (1 << 31))
3922     fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3923   else
3924     fprintf_filtered (file, _("Software FPU type %d\n"), type);
3925   /* i18n: [floating point unit] mask */
3926   fputs_filtered (_("mask: "), file);
3927   print_fpu_flags (file, status >> 16);
3928   /* i18n: [floating point unit] flags */
3929   fputs_filtered (_("flags: "), file);
3930   print_fpu_flags (file, status);
3931 }
3932
3933 /* Construct the ARM extended floating point type.  */
3934 static struct type *
3935 arm_ext_type (struct gdbarch *gdbarch)
3936 {
3937   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3938
3939   if (!tdep->arm_ext_type)
3940     tdep->arm_ext_type
3941       = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
3942                          floatformats_arm_ext);
3943
3944   return tdep->arm_ext_type;
3945 }
3946
3947 static struct type *
3948 arm_neon_double_type (struct gdbarch *gdbarch)
3949 {
3950   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3951
3952   if (tdep->neon_double_type == NULL)
3953     {
3954       struct type *t, *elem;
3955
3956       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
3957                                TYPE_CODE_UNION);
3958       elem = builtin_type (gdbarch)->builtin_uint8;
3959       append_composite_type_field (t, "u8", init_vector_type (elem, 8));
3960       elem = builtin_type (gdbarch)->builtin_uint16;
3961       append_composite_type_field (t, "u16", init_vector_type (elem, 4));
3962       elem = builtin_type (gdbarch)->builtin_uint32;
3963       append_composite_type_field (t, "u32", init_vector_type (elem, 2));
3964       elem = builtin_type (gdbarch)->builtin_uint64;
3965       append_composite_type_field (t, "u64", elem);
3966       elem = builtin_type (gdbarch)->builtin_float;
3967       append_composite_type_field (t, "f32", init_vector_type (elem, 2));
3968       elem = builtin_type (gdbarch)->builtin_double;
3969       append_composite_type_field (t, "f64", elem);
3970
3971       TYPE_VECTOR (t) = 1;
3972       TYPE_NAME (t) = "neon_d";
3973       tdep->neon_double_type = t;
3974     }
3975
3976   return tdep->neon_double_type;
3977 }
3978
3979 /* FIXME: The vector types are not correctly ordered on big-endian
3980    targets.  Just as s0 is the low bits of d0, d0[0] is also the low
3981    bits of d0 - regardless of what unit size is being held in d0.  So
3982    the offset of the first uint8 in d0 is 7, but the offset of the
3983    first float is 4.  This code works as-is for little-endian
3984    targets.  */
3985
3986 static struct type *
3987 arm_neon_quad_type (struct gdbarch *gdbarch)
3988 {
3989   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3990
3991   if (tdep->neon_quad_type == NULL)
3992     {
3993       struct type *t, *elem;
3994
3995       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
3996                                TYPE_CODE_UNION);
3997       elem = builtin_type (gdbarch)->builtin_uint8;
3998       append_composite_type_field (t, "u8", init_vector_type (elem, 16));
3999       elem = builtin_type (gdbarch)->builtin_uint16;
4000       append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4001       elem = builtin_type (gdbarch)->builtin_uint32;
4002       append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4003       elem = builtin_type (gdbarch)->builtin_uint64;
4004       append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4005       elem = builtin_type (gdbarch)->builtin_float;
4006       append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4007       elem = builtin_type (gdbarch)->builtin_double;
4008       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4009
4010       TYPE_VECTOR (t) = 1;
4011       TYPE_NAME (t) = "neon_q";
4012       tdep->neon_quad_type = t;
4013     }
4014
4015   return tdep->neon_quad_type;
4016 }
4017
4018 /* Return the GDB type object for the "standard" data type of data in
4019    register N.  */
4020
4021 static struct type *
4022 arm_register_type (struct gdbarch *gdbarch, int regnum)
4023 {
4024   int num_regs = gdbarch_num_regs (gdbarch);
4025
4026   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4027       && regnum >= num_regs && regnum < num_regs + 32)
4028     return builtin_type (gdbarch)->builtin_float;
4029
4030   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4031       && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4032     return arm_neon_quad_type (gdbarch);
4033
4034   /* If the target description has register information, we are only
4035      in this function so that we can override the types of
4036      double-precision registers for NEON.  */
4037   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4038     {
4039       struct type *t = tdesc_register_type (gdbarch, regnum);
4040
4041       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4042           && TYPE_CODE (t) == TYPE_CODE_FLT
4043           && gdbarch_tdep (gdbarch)->have_neon)
4044         return arm_neon_double_type (gdbarch);
4045       else
4046         return t;
4047     }
4048
4049   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4050     {
4051       if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4052         return builtin_type (gdbarch)->builtin_void;
4053
4054       return arm_ext_type (gdbarch);
4055     }
4056   else if (regnum == ARM_SP_REGNUM)
4057     return builtin_type (gdbarch)->builtin_data_ptr;
4058   else if (regnum == ARM_PC_REGNUM)
4059     return builtin_type (gdbarch)->builtin_func_ptr;
4060   else if (regnum >= ARRAY_SIZE (arm_register_names))
4061     /* These registers are only supported on targets which supply
4062        an XML description.  */
4063     return builtin_type (gdbarch)->builtin_int0;
4064   else
4065     return builtin_type (gdbarch)->builtin_uint32;
4066 }
4067
4068 /* Map a DWARF register REGNUM onto the appropriate GDB register
4069    number.  */
4070
4071 static int
4072 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4073 {
4074   /* Core integer regs.  */
4075   if (reg >= 0 && reg <= 15)
4076     return reg;
4077
4078   /* Legacy FPA encoding.  These were once used in a way which
4079      overlapped with VFP register numbering, so their use is
4080      discouraged, but GDB doesn't support the ARM toolchain
4081      which used them for VFP.  */
4082   if (reg >= 16 && reg <= 23)
4083     return ARM_F0_REGNUM + reg - 16;
4084
4085   /* New assignments for the FPA registers.  */
4086   if (reg >= 96 && reg <= 103)
4087     return ARM_F0_REGNUM + reg - 96;
4088
4089   /* WMMX register assignments.  */
4090   if (reg >= 104 && reg <= 111)
4091     return ARM_WCGR0_REGNUM + reg - 104;
4092
4093   if (reg >= 112 && reg <= 127)
4094     return ARM_WR0_REGNUM + reg - 112;
4095
4096   if (reg >= 192 && reg <= 199)
4097     return ARM_WC0_REGNUM + reg - 192;
4098
4099   /* VFP v2 registers.  A double precision value is actually
4100      in d1 rather than s2, but the ABI only defines numbering
4101      for the single precision registers.  This will "just work"
4102      in GDB for little endian targets (we'll read eight bytes,
4103      starting in s0 and then progressing to s1), but will be
4104      reversed on big endian targets with VFP.  This won't
4105      be a problem for the new Neon quad registers; you're supposed
4106      to use DW_OP_piece for those.  */
4107   if (reg >= 64 && reg <= 95)
4108     {
4109       char name_buf[4];
4110
4111       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4112       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4113                                           strlen (name_buf));
4114     }
4115
4116   /* VFP v3 / Neon registers.  This range is also used for VFP v2
4117      registers, except that it now describes d0 instead of s0.  */
4118   if (reg >= 256 && reg <= 287)
4119     {
4120       char name_buf[4];
4121
4122       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4123       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4124                                           strlen (name_buf));
4125     }
4126
4127   return -1;
4128 }
4129
4130 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
4131 static int
4132 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4133 {
4134   int reg = regnum;
4135   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4136
4137   if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4138     return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4139
4140   if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4141     return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4142
4143   if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4144     return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4145
4146   if (reg < NUM_GREGS)
4147     return SIM_ARM_R0_REGNUM + reg;
4148   reg -= NUM_GREGS;
4149
4150   if (reg < NUM_FREGS)
4151     return SIM_ARM_FP0_REGNUM + reg;
4152   reg -= NUM_FREGS;
4153
4154   if (reg < NUM_SREGS)
4155     return SIM_ARM_FPS_REGNUM + reg;
4156   reg -= NUM_SREGS;
4157
4158   internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4159 }
4160
4161 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4162    the buffer to be NEW_LEN bytes ending at ENDADDR.  Return
4163    NULL if an error occurs.  BUF is freed.  */
4164
4165 static gdb_byte *
4166 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4167                        int old_len, int new_len)
4168 {
4169   gdb_byte *new_buf;
4170   int bytes_to_read = new_len - old_len;
4171
4172   new_buf = (gdb_byte *) xmalloc (new_len);
4173   memcpy (new_buf + bytes_to_read, buf, old_len);
4174   xfree (buf);
4175   if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4176     {
4177       xfree (new_buf);
4178       return NULL;
4179     }
4180   return new_buf;
4181 }
4182
4183 /* An IT block is at most the 2-byte IT instruction followed by
4184    four 4-byte instructions.  The furthest back we must search to
4185    find an IT block that affects the current instruction is thus
4186    2 + 3 * 4 == 14 bytes.  */
4187 #define MAX_IT_BLOCK_PREFIX 14
4188
4189 /* Use a quick scan if there are more than this many bytes of
4190    code.  */
4191 #define IT_SCAN_THRESHOLD 32
4192
4193 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4194    A breakpoint in an IT block may not be hit, depending on the
4195    condition flags.  */
4196 static CORE_ADDR
4197 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4198 {
4199   gdb_byte *buf;
4200   char map_type;
4201   CORE_ADDR boundary, func_start;
4202   int buf_len;
4203   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4204   int i, any, last_it, last_it_count;
4205
4206   /* If we are using BKPT breakpoints, none of this is necessary.  */
4207   if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4208     return bpaddr;
4209
4210   /* ARM mode does not have this problem.  */
4211   if (!arm_pc_is_thumb (gdbarch, bpaddr))
4212     return bpaddr;
4213
4214   /* We are setting a breakpoint in Thumb code that could potentially
4215      contain an IT block.  The first step is to find how much Thumb
4216      code there is; we do not need to read outside of known Thumb
4217      sequences.  */
4218   map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4219   if (map_type == 0)
4220     /* Thumb-2 code must have mapping symbols to have a chance.  */
4221     return bpaddr;
4222
4223   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4224
4225   if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4226       && func_start > boundary)
4227     boundary = func_start;
4228
4229   /* Search for a candidate IT instruction.  We have to do some fancy
4230      footwork to distinguish a real IT instruction from the second
4231      half of a 32-bit instruction, but there is no need for that if
4232      there's no candidate.  */
4233   buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4234   if (buf_len == 0)
4235     /* No room for an IT instruction.  */
4236     return bpaddr;
4237
4238   buf = (gdb_byte *) xmalloc (buf_len);
4239   if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4240     return bpaddr;
4241   any = 0;
4242   for (i = 0; i < buf_len; i += 2)
4243     {
4244       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4245       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4246         {
4247           any = 1;
4248           break;
4249         }
4250     }
4251
4252   if (any == 0)
4253     {
4254       xfree (buf);
4255       return bpaddr;
4256     }
4257
4258   /* OK, the code bytes before this instruction contain at least one
4259      halfword which resembles an IT instruction.  We know that it's
4260      Thumb code, but there are still two possibilities.  Either the
4261      halfword really is an IT instruction, or it is the second half of
4262      a 32-bit Thumb instruction.  The only way we can tell is to
4263      scan forwards from a known instruction boundary.  */
4264   if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4265     {
4266       int definite;
4267
4268       /* There's a lot of code before this instruction.  Start with an
4269          optimistic search; it's easy to recognize halfwords that can
4270          not be the start of a 32-bit instruction, and use that to
4271          lock on to the instruction boundaries.  */
4272       buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4273       if (buf == NULL)
4274         return bpaddr;
4275       buf_len = IT_SCAN_THRESHOLD;
4276
4277       definite = 0;
4278       for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4279         {
4280           unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4281           if (thumb_insn_size (inst1) == 2)
4282             {
4283               definite = 1;
4284               break;
4285             }
4286         }
4287
4288       /* At this point, if DEFINITE, BUF[I] is the first place we
4289          are sure that we know the instruction boundaries, and it is far
4290          enough from BPADDR that we could not miss an IT instruction
4291          affecting BPADDR.  If ! DEFINITE, give up - start from a
4292          known boundary.  */
4293       if (! definite)
4294         {
4295           buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4296                                        bpaddr - boundary);
4297           if (buf == NULL)
4298             return bpaddr;
4299           buf_len = bpaddr - boundary;
4300           i = 0;
4301         }
4302     }
4303   else
4304     {
4305       buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4306       if (buf == NULL)
4307         return bpaddr;
4308       buf_len = bpaddr - boundary;
4309       i = 0;
4310     }
4311
4312   /* Scan forwards.  Find the last IT instruction before BPADDR.  */
4313   last_it = -1;
4314   last_it_count = 0;
4315   while (i < buf_len)
4316     {
4317       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4318       last_it_count--;
4319       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4320         {
4321           last_it = i;
4322           if (inst1 & 0x0001)
4323             last_it_count = 4;
4324           else if (inst1 & 0x0002)
4325             last_it_count = 3;
4326           else if (inst1 & 0x0004)
4327             last_it_count = 2;
4328           else
4329             last_it_count = 1;
4330         }
4331       i += thumb_insn_size (inst1);
4332     }
4333
4334   xfree (buf);
4335
4336   if (last_it == -1)
4337     /* There wasn't really an IT instruction after all.  */
4338     return bpaddr;
4339
4340   if (last_it_count < 1)
4341     /* It was too far away.  */
4342     return bpaddr;
4343
4344   /* This really is a trouble spot.  Move the breakpoint to the IT
4345      instruction.  */
4346   return bpaddr - buf_len + last_it;
4347 }
4348
4349 /* ARM displaced stepping support.
4350
4351    Generally ARM displaced stepping works as follows:
4352
4353    1. When an instruction is to be single-stepped, it is first decoded by
4354       arm_process_displaced_insn.  Depending on the type of instruction, it is
4355       then copied to a scratch location, possibly in a modified form.  The
4356       copy_* set of functions performs such modification, as necessary.  A
4357       breakpoint is placed after the modified instruction in the scratch space
4358       to return control to GDB.  Note in particular that instructions which
4359       modify the PC will no longer do so after modification.
4360
4361    2. The instruction is single-stepped, by setting the PC to the scratch
4362       location address, and resuming.  Control returns to GDB when the
4363       breakpoint is hit.
4364
4365    3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4366       function used for the current instruction.  This function's job is to
4367       put the CPU/memory state back to what it would have been if the
4368       instruction had been executed unmodified in its original location.  */
4369
4370 /* NOP instruction (mov r0, r0).  */
4371 #define ARM_NOP                         0xe1a00000
4372 #define THUMB_NOP 0x4600
4373
4374 /* Helper for register reads for displaced stepping.  In particular, this
4375    returns the PC as it would be seen by the instruction at its original
4376    location.  */
4377
4378 ULONGEST
4379 displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4380                     int regno)
4381 {
4382   ULONGEST ret;
4383   CORE_ADDR from = dsc->insn_addr;
4384
4385   if (regno == ARM_PC_REGNUM)
4386     {
4387       /* Compute pipeline offset:
4388          - When executing an ARM instruction, PC reads as the address of the
4389          current instruction plus 8.
4390          - When executing a Thumb instruction, PC reads as the address of the
4391          current instruction plus 4.  */
4392
4393       if (!dsc->is_thumb)
4394         from += 8;
4395       else
4396         from += 4;
4397
4398       if (debug_displaced)
4399         fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
4400                             (unsigned long) from);
4401       return (ULONGEST) from;
4402     }
4403   else
4404     {
4405       regcache_cooked_read_unsigned (regs, regno, &ret);
4406       if (debug_displaced)
4407         fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
4408                             regno, (unsigned long) ret);
4409       return ret;
4410     }
4411 }
4412
4413 static int
4414 displaced_in_arm_mode (struct regcache *regs)
4415 {
4416   ULONGEST ps;
4417   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4418
4419   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4420
4421   return (ps & t_bit) == 0;
4422 }
4423
4424 /* Write to the PC as from a branch instruction.  */
4425
4426 static void
4427 branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4428                  ULONGEST val)
4429 {
4430   if (!dsc->is_thumb)
4431     /* Note: If bits 0/1 are set, this branch would be unpredictable for
4432        architecture versions < 6.  */
4433     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4434                                     val & ~(ULONGEST) 0x3);
4435   else
4436     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4437                                     val & ~(ULONGEST) 0x1);
4438 }
4439
4440 /* Write to the PC as from a branch-exchange instruction.  */
4441
4442 static void
4443 bx_write_pc (struct regcache *regs, ULONGEST val)
4444 {
4445   ULONGEST ps;
4446   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4447
4448   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4449
4450   if ((val & 1) == 1)
4451     {
4452       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4453       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4454     }
4455   else if ((val & 2) == 0)
4456     {
4457       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4458       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4459     }
4460   else
4461     {
4462       /* Unpredictable behaviour.  Try to do something sensible (switch to ARM
4463           mode, align dest to 4 bytes).  */
4464       warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4465       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4466       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4467     }
4468 }
4469
4470 /* Write to the PC as if from a load instruction.  */
4471
4472 static void
4473 load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4474                ULONGEST val)
4475 {
4476   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4477     bx_write_pc (regs, val);
4478   else
4479     branch_write_pc (regs, dsc, val);
4480 }
4481
4482 /* Write to the PC as if from an ALU instruction.  */
4483
4484 static void
4485 alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4486               ULONGEST val)
4487 {
4488   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4489     bx_write_pc (regs, val);
4490   else
4491     branch_write_pc (regs, dsc, val);
4492 }
4493
4494 /* Helper for writing to registers for displaced stepping.  Writing to the PC
4495    has a varying effects depending on the instruction which does the write:
4496    this is controlled by the WRITE_PC argument.  */
4497
4498 void
4499 displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4500                      int regno, ULONGEST val, enum pc_write_style write_pc)
4501 {
4502   if (regno == ARM_PC_REGNUM)
4503     {
4504       if (debug_displaced)
4505         fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
4506                             (unsigned long) val);
4507       switch (write_pc)
4508         {
4509         case BRANCH_WRITE_PC:
4510           branch_write_pc (regs, dsc, val);
4511           break;
4512
4513         case BX_WRITE_PC:
4514           bx_write_pc (regs, val);
4515           break;
4516
4517         case LOAD_WRITE_PC:
4518           load_write_pc (regs, dsc, val);
4519           break;
4520
4521         case ALU_WRITE_PC:
4522           alu_write_pc (regs, dsc, val);
4523           break;
4524
4525         case CANNOT_WRITE_PC:
4526           warning (_("Instruction wrote to PC in an unexpected way when "
4527                      "single-stepping"));
4528           break;
4529
4530         default:
4531           internal_error (__FILE__, __LINE__,
4532                           _("Invalid argument to displaced_write_reg"));
4533         }
4534
4535       dsc->wrote_to_pc = 1;
4536     }
4537   else
4538     {
4539       if (debug_displaced)
4540         fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
4541                             regno, (unsigned long) val);
4542       regcache_cooked_write_unsigned (regs, regno, val);
4543     }
4544 }
4545
4546 /* This function is used to concisely determine if an instruction INSN
4547    references PC.  Register fields of interest in INSN should have the
4548    corresponding fields of BITMASK set to 0b1111.  The function
4549    returns return 1 if any of these fields in INSN reference the PC
4550    (also 0b1111, r15), else it returns 0.  */
4551
4552 static int
4553 insn_references_pc (uint32_t insn, uint32_t bitmask)
4554 {
4555   uint32_t lowbit = 1;
4556
4557   while (bitmask != 0)
4558     {
4559       uint32_t mask;
4560
4561       for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4562         ;
4563
4564       if (!lowbit)
4565         break;
4566
4567       mask = lowbit * 0xf;
4568
4569       if ((insn & mask) == mask)
4570         return 1;
4571
4572       bitmask &= ~mask;
4573     }
4574
4575   return 0;
4576 }
4577
4578 /* The simplest copy function.  Many instructions have the same effect no
4579    matter what address they are executed at: in those cases, use this.  */
4580
4581 static int
4582 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
4583                      const char *iname, arm_displaced_step_closure *dsc)
4584 {
4585   if (debug_displaced)
4586     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
4587                         "opcode/class '%s' unmodified\n", (unsigned long) insn,
4588                         iname);
4589
4590   dsc->modinsn[0] = insn;
4591
4592   return 0;
4593 }
4594
4595 static int
4596 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4597                              uint16_t insn2, const char *iname,
4598                              arm_displaced_step_closure *dsc)
4599 {
4600   if (debug_displaced)
4601     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
4602                         "opcode/class '%s' unmodified\n", insn1, insn2,
4603                         iname);
4604
4605   dsc->modinsn[0] = insn1;
4606   dsc->modinsn[1] = insn2;
4607   dsc->numinsns = 2;
4608
4609   return 0;
4610 }
4611
4612 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4613    modification.  */
4614 static int
4615 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4616                              const char *iname,
4617                              arm_displaced_step_closure *dsc)
4618 {
4619   if (debug_displaced)
4620     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
4621                         "opcode/class '%s' unmodified\n", insn,
4622                         iname);
4623
4624   dsc->modinsn[0] = insn;
4625
4626   return 0;
4627 }
4628
4629 /* Preload instructions with immediate offset.  */
4630
4631 static void
4632 cleanup_preload (struct gdbarch *gdbarch,
4633                  struct regcache *regs, arm_displaced_step_closure *dsc)
4634 {
4635   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4636   if (!dsc->u.preload.immed)
4637     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4638 }
4639
4640 static void
4641 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4642                  arm_displaced_step_closure *dsc, unsigned int rn)
4643 {
4644   ULONGEST rn_val;
4645   /* Preload instructions:
4646
4647      {pli/pld} [rn, #+/-imm]
4648      ->
4649      {pli/pld} [r0, #+/-imm].  */
4650
4651   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4652   rn_val = displaced_read_reg (regs, dsc, rn);
4653   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4654   dsc->u.preload.immed = 1;
4655
4656   dsc->cleanup = &cleanup_preload;
4657 }
4658
4659 static int
4660 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4661                   arm_displaced_step_closure *dsc)
4662 {
4663   unsigned int rn = bits (insn, 16, 19);
4664
4665   if (!insn_references_pc (insn, 0x000f0000ul))
4666     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4667
4668   if (debug_displaced)
4669     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4670                         (unsigned long) insn);
4671
4672   dsc->modinsn[0] = insn & 0xfff0ffff;
4673
4674   install_preload (gdbarch, regs, dsc, rn);
4675
4676   return 0;
4677 }
4678
4679 static int
4680 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4681                      struct regcache *regs, arm_displaced_step_closure *dsc)
4682 {
4683   unsigned int rn = bits (insn1, 0, 3);
4684   unsigned int u_bit = bit (insn1, 7);
4685   int imm12 = bits (insn2, 0, 11);
4686   ULONGEST pc_val;
4687
4688   if (rn != ARM_PC_REGNUM)
4689     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4690
4691   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4692      PLD (literal) Encoding T1.  */
4693   if (debug_displaced)
4694     fprintf_unfiltered (gdb_stdlog,
4695                         "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
4696                         (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4697                         imm12);
4698
4699   if (!u_bit)
4700     imm12 = -1 * imm12;
4701
4702   /* Rewrite instruction {pli/pld} PC imm12 into:
4703      Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4704
4705      {pli/pld} [r0, r1]
4706
4707      Cleanup: r0 <- tmp[0], r1 <- tmp[1].  */
4708
4709   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4710   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4711
4712   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4713
4714   displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4715   displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4716   dsc->u.preload.immed = 0;
4717
4718   /* {pli/pld} [r0, r1] */
4719   dsc->modinsn[0] = insn1 & 0xfff0;
4720   dsc->modinsn[1] = 0xf001;
4721   dsc->numinsns = 2;
4722
4723   dsc->cleanup = &cleanup_preload;
4724   return 0;
4725 }
4726
4727 /* Preload instructions with register offset.  */
4728
4729 static void
4730 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4731                     arm_displaced_step_closure *dsc, unsigned int rn,
4732                     unsigned int rm)
4733 {
4734   ULONGEST rn_val, rm_val;
4735
4736   /* Preload register-offset instructions:
4737
4738      {pli/pld} [rn, rm {, shift}]
4739      ->
4740      {pli/pld} [r0, r1 {, shift}].  */
4741
4742   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4743   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4744   rn_val = displaced_read_reg (regs, dsc, rn);
4745   rm_val = displaced_read_reg (regs, dsc, rm);
4746   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4747   displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4748   dsc->u.preload.immed = 0;
4749
4750   dsc->cleanup = &cleanup_preload;
4751 }
4752
4753 static int
4754 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4755                       struct regcache *regs,
4756                       arm_displaced_step_closure *dsc)
4757 {
4758   unsigned int rn = bits (insn, 16, 19);
4759   unsigned int rm = bits (insn, 0, 3);
4760
4761
4762   if (!insn_references_pc (insn, 0x000f000ful))
4763     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4764
4765   if (debug_displaced)
4766     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4767                         (unsigned long) insn);
4768
4769   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4770
4771   install_preload_reg (gdbarch, regs, dsc, rn, rm);
4772   return 0;
4773 }
4774
4775 /* Copy/cleanup coprocessor load and store instructions.  */
4776
4777 static void
4778 cleanup_copro_load_store (struct gdbarch *gdbarch,
4779                           struct regcache *regs,
4780                           arm_displaced_step_closure *dsc)
4781 {
4782   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4783
4784   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4785
4786   if (dsc->u.ldst.writeback)
4787     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4788 }
4789
4790 static void
4791 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4792                           arm_displaced_step_closure *dsc,
4793                           int writeback, unsigned int rn)
4794 {
4795   ULONGEST rn_val;
4796
4797   /* Coprocessor load/store instructions:
4798
4799      {stc/stc2} [<Rn>, #+/-imm]  (and other immediate addressing modes)
4800      ->
4801      {stc/stc2} [r0, #+/-imm].
4802
4803      ldc/ldc2 are handled identically.  */
4804
4805   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4806   rn_val = displaced_read_reg (regs, dsc, rn);
4807   /* PC should be 4-byte aligned.  */
4808   rn_val = rn_val & 0xfffffffc;
4809   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4810
4811   dsc->u.ldst.writeback = writeback;
4812   dsc->u.ldst.rn = rn;
4813
4814   dsc->cleanup = &cleanup_copro_load_store;
4815 }
4816
4817 static int
4818 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4819                            struct regcache *regs,
4820                            arm_displaced_step_closure *dsc)
4821 {
4822   unsigned int rn = bits (insn, 16, 19);
4823
4824   if (!insn_references_pc (insn, 0x000f0000ul))
4825     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4826
4827   if (debug_displaced)
4828     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4829                         "load/store insn %.8lx\n", (unsigned long) insn);
4830
4831   dsc->modinsn[0] = insn & 0xfff0ffff;
4832
4833   install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4834
4835   return 0;
4836 }
4837
4838 static int
4839 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4840                               uint16_t insn2, struct regcache *regs,
4841                               arm_displaced_step_closure *dsc)
4842 {
4843   unsigned int rn = bits (insn1, 0, 3);
4844
4845   if (rn != ARM_PC_REGNUM)
4846     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4847                                         "copro load/store", dsc);
4848
4849   if (debug_displaced)
4850     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4851                         "load/store insn %.4x%.4x\n", insn1, insn2);
4852
4853   dsc->modinsn[0] = insn1 & 0xfff0;
4854   dsc->modinsn[1] = insn2;
4855   dsc->numinsns = 2;
4856
4857   /* This function is called for copying instruction LDC/LDC2/VLDR, which
4858      doesn't support writeback, so pass 0.  */
4859   install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4860
4861   return 0;
4862 }
4863
4864 /* Clean up branch instructions (actually perform the branch, by setting
4865    PC).  */
4866
4867 static void
4868 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4869                 arm_displaced_step_closure *dsc)
4870 {
4871   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4872   int branch_taken = condition_true (dsc->u.branch.cond, status);
4873   enum pc_write_style write_pc = dsc->u.branch.exchange
4874                                  ? BX_WRITE_PC : BRANCH_WRITE_PC;
4875
4876   if (!branch_taken)
4877     return;
4878
4879   if (dsc->u.branch.link)
4880     {
4881       /* The value of LR should be the next insn of current one.  In order
4882        not to confuse logic hanlding later insn `bx lr', if current insn mode
4883        is Thumb, the bit 0 of LR value should be set to 1.  */
4884       ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4885
4886       if (dsc->is_thumb)
4887         next_insn_addr |= 0x1;
4888
4889       displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4890                            CANNOT_WRITE_PC);
4891     }
4892
4893   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4894 }
4895
4896 /* Copy B/BL/BLX instructions with immediate destinations.  */
4897
4898 static void
4899 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4900                   arm_displaced_step_closure *dsc,
4901                   unsigned int cond, int exchange, int link, long offset)
4902 {
4903   /* Implement "BL<cond> <label>" as:
4904
4905      Preparation: cond <- instruction condition
4906      Insn: mov r0, r0  (nop)
4907      Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4908
4909      B<cond> similar, but don't set r14 in cleanup.  */
4910
4911   dsc->u.branch.cond = cond;
4912   dsc->u.branch.link = link;
4913   dsc->u.branch.exchange = exchange;
4914
4915   dsc->u.branch.dest = dsc->insn_addr;
4916   if (link && exchange)
4917     /* For BLX, offset is computed from the Align (PC, 4).  */
4918     dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
4919
4920   if (dsc->is_thumb)
4921     dsc->u.branch.dest += 4 + offset;
4922   else
4923     dsc->u.branch.dest += 8 + offset;
4924
4925   dsc->cleanup = &cleanup_branch;
4926 }
4927 static int
4928 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
4929                    struct regcache *regs, arm_displaced_step_closure *dsc)
4930 {
4931   unsigned int cond = bits (insn, 28, 31);
4932   int exchange = (cond == 0xf);
4933   int link = exchange || bit (insn, 24);
4934   long offset;
4935
4936   if (debug_displaced)
4937     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
4938                         "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
4939                         (unsigned long) insn);
4940   if (exchange)
4941     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
4942        then arrange the switch into Thumb mode.  */
4943     offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
4944   else
4945     offset = bits (insn, 0, 23) << 2;
4946
4947   if (bit (offset, 25))
4948     offset = offset | ~0x3ffffff;
4949
4950   dsc->modinsn[0] = ARM_NOP;
4951
4952   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4953   return 0;
4954 }
4955
4956 static int
4957 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
4958                       uint16_t insn2, struct regcache *regs,
4959                       arm_displaced_step_closure *dsc)
4960 {
4961   int link = bit (insn2, 14);
4962   int exchange = link && !bit (insn2, 12);
4963   int cond = INST_AL;
4964   long offset = 0;
4965   int j1 = bit (insn2, 13);
4966   int j2 = bit (insn2, 11);
4967   int s = sbits (insn1, 10, 10);
4968   int i1 = !(j1 ^ bit (insn1, 10));
4969   int i2 = !(j2 ^ bit (insn1, 10));
4970
4971   if (!link && !exchange) /* B */
4972     {
4973       offset = (bits (insn2, 0, 10) << 1);
4974       if (bit (insn2, 12)) /* Encoding T4 */
4975         {
4976           offset |= (bits (insn1, 0, 9) << 12)
4977             | (i2 << 22)
4978             | (i1 << 23)
4979             | (s << 24);
4980           cond = INST_AL;
4981         }
4982       else /* Encoding T3 */
4983         {
4984           offset |= (bits (insn1, 0, 5) << 12)
4985             | (j1 << 18)
4986             | (j2 << 19)
4987             | (s << 20);
4988           cond = bits (insn1, 6, 9);
4989         }
4990     }
4991   else
4992     {
4993       offset = (bits (insn1, 0, 9) << 12);
4994       offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
4995       offset |= exchange ?
4996         (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
4997     }
4998
4999   if (debug_displaced)
5000     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
5001                         "%.4x %.4x with offset %.8lx\n",
5002                         link ? (exchange) ? "blx" : "bl" : "b",
5003                         insn1, insn2, offset);
5004
5005   dsc->modinsn[0] = THUMB_NOP;
5006
5007   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5008   return 0;
5009 }
5010
5011 /* Copy B Thumb instructions.  */
5012 static int
5013 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
5014               arm_displaced_step_closure *dsc)
5015 {
5016   unsigned int cond = 0;
5017   int offset = 0;
5018   unsigned short bit_12_15 = bits (insn, 12, 15);
5019   CORE_ADDR from = dsc->insn_addr;
5020
5021   if (bit_12_15 == 0xd)
5022     {
5023       /* offset = SignExtend (imm8:0, 32) */
5024       offset = sbits ((insn << 1), 0, 8);
5025       cond = bits (insn, 8, 11);
5026     }
5027   else if (bit_12_15 == 0xe) /* Encoding T2 */
5028     {
5029       offset = sbits ((insn << 1), 0, 11);
5030       cond = INST_AL;
5031     }
5032
5033   if (debug_displaced)
5034     fprintf_unfiltered (gdb_stdlog,
5035                         "displaced: copying b immediate insn %.4x "
5036                         "with offset %d\n", insn, offset);
5037
5038   dsc->u.branch.cond = cond;
5039   dsc->u.branch.link = 0;
5040   dsc->u.branch.exchange = 0;
5041   dsc->u.branch.dest = from + 4 + offset;
5042
5043   dsc->modinsn[0] = THUMB_NOP;
5044
5045   dsc->cleanup = &cleanup_branch;
5046
5047   return 0;
5048 }
5049
5050 /* Copy BX/BLX with register-specified destinations.  */
5051
5052 static void
5053 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5054                     arm_displaced_step_closure *dsc, int link,
5055                     unsigned int cond, unsigned int rm)
5056 {
5057   /* Implement {BX,BLX}<cond> <reg>" as:
5058
5059      Preparation: cond <- instruction condition
5060      Insn: mov r0, r0 (nop)
5061      Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5062
5063      Don't set r14 in cleanup for BX.  */
5064
5065   dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5066
5067   dsc->u.branch.cond = cond;
5068   dsc->u.branch.link = link;
5069
5070   dsc->u.branch.exchange = 1;
5071
5072   dsc->cleanup = &cleanup_branch;
5073 }
5074
5075 static int
5076 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5077                      struct regcache *regs, arm_displaced_step_closure *dsc)
5078 {
5079   unsigned int cond = bits (insn, 28, 31);
5080   /* BX:  x12xxx1x
5081      BLX: x12xxx3x.  */
5082   int link = bit (insn, 5);
5083   unsigned int rm = bits (insn, 0, 3);
5084
5085   if (debug_displaced)
5086     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
5087                         (unsigned long) insn);
5088
5089   dsc->modinsn[0] = ARM_NOP;
5090
5091   install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5092   return 0;
5093 }
5094
5095 static int
5096 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5097                        struct regcache *regs,
5098                        arm_displaced_step_closure *dsc)
5099 {
5100   int link = bit (insn, 7);
5101   unsigned int rm = bits (insn, 3, 6);
5102
5103   if (debug_displaced)
5104     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
5105                         (unsigned short) insn);
5106
5107   dsc->modinsn[0] = THUMB_NOP;
5108
5109   install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5110
5111   return 0;
5112 }
5113
5114
5115 /* Copy/cleanup arithmetic/logic instruction with immediate RHS.  */
5116
5117 static void
5118 cleanup_alu_imm (struct gdbarch *gdbarch,
5119                  struct regcache *regs, arm_displaced_step_closure *dsc)
5120 {
5121   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5122   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5123   displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5124   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5125 }
5126
5127 static int
5128 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5129                   arm_displaced_step_closure *dsc)
5130 {
5131   unsigned int rn = bits (insn, 16, 19);
5132   unsigned int rd = bits (insn, 12, 15);
5133   unsigned int op = bits (insn, 21, 24);
5134   int is_mov = (op == 0xd);
5135   ULONGEST rd_val, rn_val;
5136
5137   if (!insn_references_pc (insn, 0x000ff000ul))
5138     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5139
5140   if (debug_displaced)
5141     fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
5142                         "%.8lx\n", is_mov ? "move" : "ALU",
5143                         (unsigned long) insn);
5144
5145   /* Instruction is of form:
5146
5147      <op><cond> rd, [rn,] #imm
5148
5149      Rewrite as:
5150
5151      Preparation: tmp1, tmp2 <- r0, r1;
5152                   r0, r1 <- rd, rn
5153      Insn: <op><cond> r0, r1, #imm
5154      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5155   */
5156
5157   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5158   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5159   rn_val = displaced_read_reg (regs, dsc, rn);
5160   rd_val = displaced_read_reg (regs, dsc, rd);
5161   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5162   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5163   dsc->rd = rd;
5164
5165   if (is_mov)
5166     dsc->modinsn[0] = insn & 0xfff00fff;
5167   else
5168     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5169
5170   dsc->cleanup = &cleanup_alu_imm;
5171
5172   return 0;
5173 }
5174
5175 static int
5176 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5177                      uint16_t insn2, struct regcache *regs,
5178                      arm_displaced_step_closure *dsc)
5179 {
5180   unsigned int op = bits (insn1, 5, 8);
5181   unsigned int rn, rm, rd;
5182   ULONGEST rd_val, rn_val;
5183
5184   rn = bits (insn1, 0, 3); /* Rn */
5185   rm = bits (insn2, 0, 3); /* Rm */
5186   rd = bits (insn2, 8, 11); /* Rd */
5187
5188   /* This routine is only called for instruction MOV.  */
5189   gdb_assert (op == 0x2 && rn == 0xf);
5190
5191   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5192     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5193
5194   if (debug_displaced)
5195     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
5196                         "ALU", insn1, insn2);
5197
5198   /* Instruction is of form:
5199
5200      <op><cond> rd, [rn,] #imm
5201
5202      Rewrite as:
5203
5204      Preparation: tmp1, tmp2 <- r0, r1;
5205                   r0, r1 <- rd, rn
5206      Insn: <op><cond> r0, r1, #imm
5207      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5208   */
5209
5210   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5211   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5212   rn_val = displaced_read_reg (regs, dsc, rn);
5213   rd_val = displaced_read_reg (regs, dsc, rd);
5214   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5215   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5216   dsc->rd = rd;
5217
5218   dsc->modinsn[0] = insn1;
5219   dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5220   dsc->numinsns = 2;
5221
5222   dsc->cleanup = &cleanup_alu_imm;
5223
5224   return 0;
5225 }
5226
5227 /* Copy/cleanup arithmetic/logic insns with register RHS.  */
5228
5229 static void
5230 cleanup_alu_reg (struct gdbarch *gdbarch,
5231                  struct regcache *regs, arm_displaced_step_closure *dsc)
5232 {
5233   ULONGEST rd_val;
5234   int i;
5235
5236   rd_val = displaced_read_reg (regs, dsc, 0);
5237
5238   for (i = 0; i < 3; i++)
5239     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5240
5241   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5242 }
5243
5244 static void
5245 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5246                  arm_displaced_step_closure *dsc,
5247                  unsigned int rd, unsigned int rn, unsigned int rm)
5248 {
5249   ULONGEST rd_val, rn_val, rm_val;
5250
5251   /* Instruction is of form:
5252
5253      <op><cond> rd, [rn,] rm [, <shift>]
5254
5255      Rewrite as:
5256
5257      Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5258                   r0, r1, r2 <- rd, rn, rm
5259      Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5260      Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5261   */
5262
5263   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5264   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5265   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5266   rd_val = displaced_read_reg (regs, dsc, rd);
5267   rn_val = displaced_read_reg (regs, dsc, rn);
5268   rm_val = displaced_read_reg (regs, dsc, rm);
5269   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5270   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5271   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5272   dsc->rd = rd;
5273
5274   dsc->cleanup = &cleanup_alu_reg;
5275 }
5276
5277 static int
5278 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5279                   arm_displaced_step_closure *dsc)
5280 {
5281   unsigned int op = bits (insn, 21, 24);
5282   int is_mov = (op == 0xd);
5283
5284   if (!insn_references_pc (insn, 0x000ff00ful))
5285     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5286
5287   if (debug_displaced)
5288     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
5289                         is_mov ? "move" : "ALU", (unsigned long) insn);
5290
5291   if (is_mov)
5292     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5293   else
5294     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5295
5296   install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5297                    bits (insn, 0, 3));
5298   return 0;
5299 }
5300
5301 static int
5302 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5303                     struct regcache *regs,
5304                     arm_displaced_step_closure *dsc)
5305 {
5306   unsigned rm, rd;
5307
5308   rm = bits (insn, 3, 6);
5309   rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5310
5311   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5312     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5313
5314   if (debug_displaced)
5315     fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
5316                         (unsigned short) insn);
5317
5318   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5319
5320   install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5321
5322   return 0;
5323 }
5324
5325 /* Cleanup/copy arithmetic/logic insns with shifted register RHS.  */
5326
5327 static void
5328 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5329                          struct regcache *regs,
5330                          arm_displaced_step_closure *dsc)
5331 {
5332   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5333   int i;
5334
5335   for (i = 0; i < 4; i++)
5336     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5337
5338   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5339 }
5340
5341 static void
5342 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5343                          arm_displaced_step_closure *dsc,
5344                          unsigned int rd, unsigned int rn, unsigned int rm,
5345                          unsigned rs)
5346 {
5347   int i;
5348   ULONGEST rd_val, rn_val, rm_val, rs_val;
5349
5350   /* Instruction is of form:
5351
5352      <op><cond> rd, [rn,] rm, <shift> rs
5353
5354      Rewrite as:
5355
5356      Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5357                   r0, r1, r2, r3 <- rd, rn, rm, rs
5358      Insn: <op><cond> r0, r1, r2, <shift> r3
5359      Cleanup: tmp5 <- r0
5360               r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5361               rd <- tmp5
5362   */
5363
5364   for (i = 0; i < 4; i++)
5365     dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5366
5367   rd_val = displaced_read_reg (regs, dsc, rd);
5368   rn_val = displaced_read_reg (regs, dsc, rn);
5369   rm_val = displaced_read_reg (regs, dsc, rm);
5370   rs_val = displaced_read_reg (regs, dsc, rs);
5371   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5372   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5373   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5374   displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5375   dsc->rd = rd;
5376   dsc->cleanup = &cleanup_alu_shifted_reg;
5377 }
5378
5379 static int
5380 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5381                           struct regcache *regs,
5382                           arm_displaced_step_closure *dsc)
5383 {
5384   unsigned int op = bits (insn, 21, 24);
5385   int is_mov = (op == 0xd);
5386   unsigned int rd, rn, rm, rs;
5387
5388   if (!insn_references_pc (insn, 0x000fff0ful))
5389     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5390
5391   if (debug_displaced)
5392     fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
5393                         "%.8lx\n", is_mov ? "move" : "ALU",
5394                         (unsigned long) insn);
5395
5396   rn = bits (insn, 16, 19);
5397   rm = bits (insn, 0, 3);
5398   rs = bits (insn, 8, 11);
5399   rd = bits (insn, 12, 15);
5400
5401   if (is_mov)
5402     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5403   else
5404     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5405
5406   install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5407
5408   return 0;
5409 }
5410
5411 /* Clean up load instructions.  */
5412
5413 static void
5414 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5415               arm_displaced_step_closure *dsc)
5416 {
5417   ULONGEST rt_val, rt_val2 = 0, rn_val;
5418
5419   rt_val = displaced_read_reg (regs, dsc, 0);
5420   if (dsc->u.ldst.xfersize == 8)
5421     rt_val2 = displaced_read_reg (regs, dsc, 1);
5422   rn_val = displaced_read_reg (regs, dsc, 2);
5423
5424   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5425   if (dsc->u.ldst.xfersize > 4)
5426     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5427   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5428   if (!dsc->u.ldst.immed)
5429     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5430
5431   /* Handle register writeback.  */
5432   if (dsc->u.ldst.writeback)
5433     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5434   /* Put result in right place.  */
5435   displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5436   if (dsc->u.ldst.xfersize == 8)
5437     displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5438 }
5439
5440 /* Clean up store instructions.  */
5441
5442 static void
5443 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5444                arm_displaced_step_closure *dsc)
5445 {
5446   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5447
5448   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5449   if (dsc->u.ldst.xfersize > 4)
5450     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5451   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5452   if (!dsc->u.ldst.immed)
5453     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5454   if (!dsc->u.ldst.restore_r4)
5455     displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5456
5457   /* Writeback.  */
5458   if (dsc->u.ldst.writeback)
5459     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5460 }
5461
5462 /* Copy "extra" load/store instructions.  These are halfword/doubleword
5463    transfers, which have a different encoding to byte/word transfers.  */
5464
5465 static int
5466 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5467                       struct regcache *regs, arm_displaced_step_closure *dsc)
5468 {
5469   unsigned int op1 = bits (insn, 20, 24);
5470   unsigned int op2 = bits (insn, 5, 6);
5471   unsigned int rt = bits (insn, 12, 15);
5472   unsigned int rn = bits (insn, 16, 19);
5473   unsigned int rm = bits (insn, 0, 3);
5474   char load[12]     = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5475   char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5476   int immed = (op1 & 0x4) != 0;
5477   int opcode;
5478   ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5479
5480   if (!insn_references_pc (insn, 0x000ff00ful))
5481     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5482
5483   if (debug_displaced)
5484     fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
5485                         "insn %.8lx\n", unprivileged ? "unprivileged " : "",
5486                         (unsigned long) insn);
5487
5488   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5489
5490   if (opcode < 0)
5491     internal_error (__FILE__, __LINE__,
5492                     _("copy_extra_ld_st: instruction decode error"));
5493
5494   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5495   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5496   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5497   if (!immed)
5498     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5499
5500   rt_val = displaced_read_reg (regs, dsc, rt);
5501   if (bytesize[opcode] == 8)
5502     rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5503   rn_val = displaced_read_reg (regs, dsc, rn);
5504   if (!immed)
5505     rm_val = displaced_read_reg (regs, dsc, rm);
5506
5507   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5508   if (bytesize[opcode] == 8)
5509     displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5510   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5511   if (!immed)
5512     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5513
5514   dsc->rd = rt;
5515   dsc->u.ldst.xfersize = bytesize[opcode];
5516   dsc->u.ldst.rn = rn;
5517   dsc->u.ldst.immed = immed;
5518   dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5519   dsc->u.ldst.restore_r4 = 0;
5520
5521   if (immed)
5522     /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5523         ->
5524        {ldr,str}<width><cond> r0, [r1,] [r2, #imm].  */
5525     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5526   else
5527     /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5528         ->
5529        {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3].  */
5530     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5531
5532   dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5533
5534   return 0;
5535 }
5536
5537 /* Copy byte/half word/word loads and stores.  */
5538
5539 static void
5540 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5541                     arm_displaced_step_closure *dsc, int load,
5542                     int immed, int writeback, int size, int usermode,
5543                     int rt, int rm, int rn)
5544 {
5545   ULONGEST rt_val, rn_val, rm_val = 0;
5546
5547   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5548   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5549   if (!immed)
5550     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5551   if (!load)
5552     dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5553
5554   rt_val = displaced_read_reg (regs, dsc, rt);
5555   rn_val = displaced_read_reg (regs, dsc, rn);
5556   if (!immed)
5557     rm_val = displaced_read_reg (regs, dsc, rm);
5558
5559   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5560   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5561   if (!immed)
5562     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5563   dsc->rd = rt;
5564   dsc->u.ldst.xfersize = size;
5565   dsc->u.ldst.rn = rn;
5566   dsc->u.ldst.immed = immed;
5567   dsc->u.ldst.writeback = writeback;
5568
5569   /* To write PC we can do:
5570
5571      Before this sequence of instructions:
5572      r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5573      r2 is the Rn value got from dispalced_read_reg.
5574
5575      Insn1: push {pc} Write address of STR instruction + offset on stack
5576      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
5577      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
5578                                 = addr(Insn1) + offset - addr(Insn3) - 8
5579                                 = offset - 16
5580      Insn4: add r4, r4, #8   r4 = offset - 8
5581      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
5582                                 = from + offset
5583      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5584
5585      Otherwise we don't know what value to write for PC, since the offset is
5586      architecture-dependent (sometimes PC+8, sometimes PC+12).  More details
5587      of this can be found in Section "Saving from r15" in
5588      http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5589
5590   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5591 }
5592
5593
5594 static int
5595 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5596                           uint16_t insn2, struct regcache *regs,
5597                           arm_displaced_step_closure *dsc, int size)
5598 {
5599   unsigned int u_bit = bit (insn1, 7);
5600   unsigned int rt = bits (insn2, 12, 15);
5601   int imm12 = bits (insn2, 0, 11);
5602   ULONGEST pc_val;
5603
5604   if (debug_displaced)
5605     fprintf_unfiltered (gdb_stdlog,
5606                         "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
5607                         (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5608                         imm12);
5609
5610   if (!u_bit)
5611     imm12 = -1 * imm12;
5612
5613   /* Rewrite instruction LDR Rt imm12 into:
5614
5615      Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5616
5617      LDR R0, R2, R3,
5618
5619      Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2].  */
5620
5621
5622   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5623   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5624   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5625
5626   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5627
5628   pc_val = pc_val & 0xfffffffc;
5629
5630   displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5631   displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5632
5633   dsc->rd = rt;
5634
5635   dsc->u.ldst.xfersize = size;
5636   dsc->u.ldst.immed = 0;
5637   dsc->u.ldst.writeback = 0;
5638   dsc->u.ldst.restore_r4 = 0;
5639
5640   /* LDR R0, R2, R3 */
5641   dsc->modinsn[0] = 0xf852;
5642   dsc->modinsn[1] = 0x3;
5643   dsc->numinsns = 2;
5644
5645   dsc->cleanup = &cleanup_load;
5646
5647   return 0;
5648 }
5649
5650 static int
5651 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5652                           uint16_t insn2, struct regcache *regs,
5653                           arm_displaced_step_closure *dsc,
5654                           int writeback, int immed)
5655 {
5656   unsigned int rt = bits (insn2, 12, 15);
5657   unsigned int rn = bits (insn1, 0, 3);
5658   unsigned int rm = bits (insn2, 0, 3);  /* Only valid if !immed.  */
5659   /* In LDR (register), there is also a register Rm, which is not allowed to
5660      be PC, so we don't have to check it.  */
5661
5662   if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5663     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5664                                         dsc);
5665
5666   if (debug_displaced)
5667     fprintf_unfiltered (gdb_stdlog,
5668                         "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
5669                          rt, rn, insn1, insn2);
5670
5671   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5672                       0, rt, rm, rn);
5673
5674   dsc->u.ldst.restore_r4 = 0;
5675
5676   if (immed)
5677     /* ldr[b]<cond> rt, [rn, #imm], etc.
5678        ->
5679        ldr[b]<cond> r0, [r2, #imm].  */
5680     {
5681       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5682       dsc->modinsn[1] = insn2 & 0x0fff;
5683     }
5684   else
5685     /* ldr[b]<cond> rt, [rn, rm], etc.
5686        ->
5687        ldr[b]<cond> r0, [r2, r3].  */
5688     {
5689       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5690       dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5691     }
5692
5693   dsc->numinsns = 2;
5694
5695   return 0;
5696 }
5697
5698
5699 static int
5700 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5701                             struct regcache *regs,
5702                             arm_displaced_step_closure *dsc,
5703                             int load, int size, int usermode)
5704 {
5705   int immed = !bit (insn, 25);
5706   int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5707   unsigned int rt = bits (insn, 12, 15);
5708   unsigned int rn = bits (insn, 16, 19);
5709   unsigned int rm = bits (insn, 0, 3);  /* Only valid if !immed.  */
5710
5711   if (!insn_references_pc (insn, 0x000ff00ful))
5712     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5713
5714   if (debug_displaced)
5715     fprintf_unfiltered (gdb_stdlog,
5716                         "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
5717                         load ? (size == 1 ? "ldrb" : "ldr")
5718                              : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
5719                         rt, rn,
5720                         (unsigned long) insn);
5721
5722   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5723                       usermode, rt, rm, rn);
5724
5725   if (load || rt != ARM_PC_REGNUM)
5726     {
5727       dsc->u.ldst.restore_r4 = 0;
5728
5729       if (immed)
5730         /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5731            ->
5732            {ldr,str}[b]<cond> r0, [r2, #imm].  */
5733         dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5734       else
5735         /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5736            ->
5737            {ldr,str}[b]<cond> r0, [r2, r3].  */
5738         dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5739     }
5740   else
5741     {
5742       /* We need to use r4 as scratch.  Make sure it's restored afterwards.  */
5743       dsc->u.ldst.restore_r4 = 1;
5744       dsc->modinsn[0] = 0xe92d8000;  /* push {pc} */
5745       dsc->modinsn[1] = 0xe8bd0010;  /* pop  {r4} */
5746       dsc->modinsn[2] = 0xe044400f;  /* sub r4, r4, pc.  */
5747       dsc->modinsn[3] = 0xe2844008;  /* add r4, r4, #8.  */
5748       dsc->modinsn[4] = 0xe0800004;  /* add r0, r0, r4.  */
5749
5750       /* As above.  */
5751       if (immed)
5752         dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5753       else
5754         dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5755
5756       dsc->numinsns = 6;
5757     }
5758
5759   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5760
5761   return 0;
5762 }
5763
5764 /* Cleanup LDM instructions with fully-populated register list.  This is an
5765    unfortunate corner case: it's impossible to implement correctly by modifying
5766    the instruction.  The issue is as follows: we have an instruction,
5767
5768    ldm rN, {r0-r15}
5769
5770    which we must rewrite to avoid loading PC.  A possible solution would be to
5771    do the load in two halves, something like (with suitable cleanup
5772    afterwards):
5773
5774    mov r8, rN
5775    ldm[id][ab] r8!, {r0-r7}
5776    str r7, <temp>
5777    ldm[id][ab] r8, {r7-r14}
5778    <bkpt>
5779
5780    but at present there's no suitable place for <temp>, since the scratch space
5781    is overwritten before the cleanup routine is called.  For now, we simply
5782    emulate the instruction.  */
5783
5784 static void
5785 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5786                         arm_displaced_step_closure *dsc)
5787 {
5788   int inc = dsc->u.block.increment;
5789   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5790   int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5791   uint32_t regmask = dsc->u.block.regmask;
5792   int regno = inc ? 0 : 15;
5793   CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5794   int exception_return = dsc->u.block.load && dsc->u.block.user
5795                          && (regmask & 0x8000) != 0;
5796   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5797   int do_transfer = condition_true (dsc->u.block.cond, status);
5798   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5799
5800   if (!do_transfer)
5801     return;
5802
5803   /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5804      sensible we can do here.  Complain loudly.  */
5805   if (exception_return)
5806     error (_("Cannot single-step exception return"));
5807
5808   /* We don't handle any stores here for now.  */
5809   gdb_assert (dsc->u.block.load != 0);
5810
5811   if (debug_displaced)
5812     fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
5813                         "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
5814                         dsc->u.block.increment ? "inc" : "dec",
5815                         dsc->u.block.before ? "before" : "after");
5816
5817   while (regmask)
5818     {
5819       uint32_t memword;
5820
5821       if (inc)
5822         while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5823           regno++;
5824       else
5825         while (regno >= 0 && (regmask & (1 << regno)) == 0)
5826           regno--;
5827
5828       xfer_addr += bump_before;
5829
5830       memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5831       displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5832
5833       xfer_addr += bump_after;
5834
5835       regmask &= ~(1 << regno);
5836     }
5837
5838   if (dsc->u.block.writeback)
5839     displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5840                          CANNOT_WRITE_PC);
5841 }
5842
5843 /* Clean up an STM which included the PC in the register list.  */
5844
5845 static void
5846 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5847                         arm_displaced_step_closure *dsc)
5848 {
5849   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5850   int store_executed = condition_true (dsc->u.block.cond, status);
5851   CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
5852   CORE_ADDR stm_insn_addr;
5853   uint32_t pc_val;
5854   long offset;
5855   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5856
5857   /* If condition code fails, there's nothing else to do.  */
5858   if (!store_executed)
5859     return;
5860
5861   if (dsc->u.block.increment)
5862     {
5863       pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5864
5865       if (dsc->u.block.before)
5866          pc_stored_at += 4;
5867     }
5868   else
5869     {
5870       pc_stored_at = dsc->u.block.xfer_addr;
5871
5872       if (dsc->u.block.before)
5873          pc_stored_at -= 4;
5874     }
5875
5876   pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5877   stm_insn_addr = dsc->scratch_base;
5878   offset = pc_val - stm_insn_addr;
5879
5880   if (debug_displaced)
5881     fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
5882                         "STM instruction\n", offset);
5883
5884   /* Rewrite the stored PC to the proper value for the non-displaced original
5885      instruction.  */
5886   write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5887                                  dsc->insn_addr + offset);
5888 }
5889
5890 /* Clean up an LDM which includes the PC in the register list.  We clumped all
5891    the registers in the transferred list into a contiguous range r0...rX (to
5892    avoid loading PC directly and losing control of the debugged program), so we
5893    must undo that here.  */
5894
5895 static void
5896 cleanup_block_load_pc (struct gdbarch *gdbarch,
5897                        struct regcache *regs,
5898                        arm_displaced_step_closure *dsc)
5899 {
5900   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5901   int load_executed = condition_true (dsc->u.block.cond, status);
5902   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5903   unsigned int regs_loaded = bitcount (mask);
5904   unsigned int num_to_shuffle = regs_loaded, clobbered;
5905
5906   /* The method employed here will fail if the register list is fully populated
5907      (we need to avoid loading PC directly).  */
5908   gdb_assert (num_to_shuffle < 16);
5909
5910   if (!load_executed)
5911     return;
5912
5913   clobbered = (1 << num_to_shuffle) - 1;
5914
5915   while (num_to_shuffle > 0)
5916     {
5917       if ((mask & (1 << write_reg)) != 0)
5918         {
5919           unsigned int read_reg = num_to_shuffle - 1;
5920
5921           if (read_reg != write_reg)
5922             {
5923               ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5924               displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5925               if (debug_displaced)
5926                 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
5927                                     "loaded register r%d to r%d\n"), read_reg,
5928                                     write_reg);
5929             }
5930           else if (debug_displaced)
5931             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
5932                                 "r%d already in the right place\n"),
5933                                 write_reg);
5934
5935           clobbered &= ~(1 << write_reg);
5936
5937           num_to_shuffle--;
5938         }
5939
5940       write_reg--;
5941     }
5942
5943   /* Restore any registers we scribbled over.  */
5944   for (write_reg = 0; clobbered != 0; write_reg++)
5945     {
5946       if ((clobbered & (1 << write_reg)) != 0)
5947         {
5948           displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
5949                                CANNOT_WRITE_PC);
5950           if (debug_displaced)
5951             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
5952                                 "clobbered register r%d\n"), write_reg);
5953           clobbered &= ~(1 << write_reg);
5954         }
5955     }
5956
5957   /* Perform register writeback manually.  */
5958   if (dsc->u.block.writeback)
5959     {
5960       ULONGEST new_rn_val = dsc->u.block.xfer_addr;
5961
5962       if (dsc->u.block.increment)
5963         new_rn_val += regs_loaded * 4;
5964       else
5965         new_rn_val -= regs_loaded * 4;
5966
5967       displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
5968                            CANNOT_WRITE_PC);
5969     }
5970 }
5971
5972 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
5973    in user-level code (in particular exception return, ldm rn, {...pc}^).  */
5974
5975 static int
5976 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
5977                      struct regcache *regs,
5978                      arm_displaced_step_closure *dsc)
5979 {
5980   int load = bit (insn, 20);
5981   int user = bit (insn, 22);
5982   int increment = bit (insn, 23);
5983   int before = bit (insn, 24);
5984   int writeback = bit (insn, 21);
5985   int rn = bits (insn, 16, 19);
5986
5987   /* Block transfers which don't mention PC can be run directly
5988      out-of-line.  */
5989   if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
5990     return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
5991
5992   if (rn == ARM_PC_REGNUM)
5993     {
5994       warning (_("displaced: Unpredictable LDM or STM with "
5995                  "base register r15"));
5996       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
5997     }
5998
5999   if (debug_displaced)
6000     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6001                         "%.8lx\n", (unsigned long) insn);
6002
6003   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6004   dsc->u.block.rn = rn;
6005
6006   dsc->u.block.load = load;
6007   dsc->u.block.user = user;
6008   dsc->u.block.increment = increment;
6009   dsc->u.block.before = before;
6010   dsc->u.block.writeback = writeback;
6011   dsc->u.block.cond = bits (insn, 28, 31);
6012
6013   dsc->u.block.regmask = insn & 0xffff;
6014
6015   if (load)
6016     {
6017       if ((insn & 0xffff) == 0xffff)
6018         {
6019           /* LDM with a fully-populated register list.  This case is
6020              particularly tricky.  Implement for now by fully emulating the
6021              instruction (which might not behave perfectly in all cases, but
6022              these instructions should be rare enough for that not to matter
6023              too much).  */
6024           dsc->modinsn[0] = ARM_NOP;
6025
6026           dsc->cleanup = &cleanup_block_load_all;
6027         }
6028       else
6029         {
6030           /* LDM of a list of registers which includes PC.  Implement by
6031              rewriting the list of registers to be transferred into a
6032              contiguous chunk r0...rX before doing the transfer, then shuffling
6033              registers into the correct places in the cleanup routine.  */
6034           unsigned int regmask = insn & 0xffff;
6035           unsigned int num_in_list = bitcount (regmask), new_regmask;
6036           unsigned int i;
6037
6038           for (i = 0; i < num_in_list; i++)
6039             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6040
6041           /* Writeback makes things complicated.  We need to avoid clobbering
6042              the base register with one of the registers in our modified
6043              register list, but just using a different register can't work in
6044              all cases, e.g.:
6045
6046                ldm r14!, {r0-r13,pc}
6047
6048              which would need to be rewritten as:
6049
6050                ldm rN!, {r0-r14}
6051
6052              but that can't work, because there's no free register for N.
6053
6054              Solve this by turning off the writeback bit, and emulating
6055              writeback manually in the cleanup routine.  */
6056
6057           if (writeback)
6058             insn &= ~(1 << 21);
6059
6060           new_regmask = (1 << num_in_list) - 1;
6061
6062           if (debug_displaced)
6063             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6064                                 "{..., pc}: original reg list %.4x, modified "
6065                                 "list %.4x\n"), rn, writeback ? "!" : "",
6066                                 (int) insn & 0xffff, new_regmask);
6067
6068           dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6069
6070           dsc->cleanup = &cleanup_block_load_pc;
6071         }
6072     }
6073   else
6074     {
6075       /* STM of a list of registers which includes PC.  Run the instruction
6076          as-is, but out of line: this will store the wrong value for the PC,
6077          so we must manually fix up the memory in the cleanup routine.
6078          Doing things this way has the advantage that we can auto-detect
6079          the offset of the PC write (which is architecture-dependent) in
6080          the cleanup routine.  */
6081       dsc->modinsn[0] = insn;
6082
6083       dsc->cleanup = &cleanup_block_store_pc;
6084     }
6085
6086   return 0;
6087 }
6088
6089 static int
6090 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6091                         struct regcache *regs,
6092                         arm_displaced_step_closure *dsc)
6093 {
6094   int rn = bits (insn1, 0, 3);
6095   int load = bit (insn1, 4);
6096   int writeback = bit (insn1, 5);
6097
6098   /* Block transfers which don't mention PC can be run directly
6099      out-of-line.  */
6100   if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6101     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6102
6103   if (rn == ARM_PC_REGNUM)
6104     {
6105       warning (_("displaced: Unpredictable LDM or STM with "
6106                  "base register r15"));
6107       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6108                                           "unpredictable ldm/stm", dsc);
6109     }
6110
6111   if (debug_displaced)
6112     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6113                         "%.4x%.4x\n", insn1, insn2);
6114
6115   /* Clear bit 13, since it should be always zero.  */
6116   dsc->u.block.regmask = (insn2 & 0xdfff);
6117   dsc->u.block.rn = rn;
6118
6119   dsc->u.block.load = load;
6120   dsc->u.block.user = 0;
6121   dsc->u.block.increment = bit (insn1, 7);
6122   dsc->u.block.before = bit (insn1, 8);
6123   dsc->u.block.writeback = writeback;
6124   dsc->u.block.cond = INST_AL;
6125   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6126
6127   if (load)
6128     {
6129       if (dsc->u.block.regmask == 0xffff)
6130         {
6131           /* This branch is impossible to happen.  */
6132           gdb_assert (0);
6133         }
6134       else
6135         {
6136           unsigned int regmask = dsc->u.block.regmask;
6137           unsigned int num_in_list = bitcount (regmask), new_regmask;
6138           unsigned int i;
6139
6140           for (i = 0; i < num_in_list; i++)
6141             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6142
6143           if (writeback)
6144             insn1 &= ~(1 << 5);
6145
6146           new_regmask = (1 << num_in_list) - 1;
6147
6148           if (debug_displaced)
6149             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6150                                 "{..., pc}: original reg list %.4x, modified "
6151                                 "list %.4x\n"), rn, writeback ? "!" : "",
6152                                 (int) dsc->u.block.regmask, new_regmask);
6153
6154           dsc->modinsn[0] = insn1;
6155           dsc->modinsn[1] = (new_regmask & 0xffff);
6156           dsc->numinsns = 2;
6157
6158           dsc->cleanup = &cleanup_block_load_pc;
6159         }
6160     }
6161   else
6162     {
6163       dsc->modinsn[0] = insn1;
6164       dsc->modinsn[1] = insn2;
6165       dsc->numinsns = 2;
6166       dsc->cleanup = &cleanup_block_store_pc;
6167     }
6168   return 0;
6169 }
6170
6171 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6172  This is used to avoid a dependency on BFD's bfd_endian enum.  */
6173
6174 ULONGEST
6175 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6176                                                int byte_order)
6177 {
6178   return read_memory_unsigned_integer (memaddr, len,
6179                                        (enum bfd_endian) byte_order);
6180 }
6181
6182 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs.  */
6183
6184 CORE_ADDR
6185 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6186                                    CORE_ADDR val)
6187 {
6188   return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6189 }
6190
6191 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
6192
6193 static CORE_ADDR
6194 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6195 {
6196   return 0;
6197 }
6198
6199 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs.  */
6200
6201 int
6202 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6203 {
6204   return arm_is_thumb (self->regcache);
6205 }
6206
6207 /* single_step() is called just before we want to resume the inferior,
6208    if we want to single-step it but there is no hardware or kernel
6209    single-step support.  We find the target of the coming instructions
6210    and breakpoint them.  */
6211
6212 std::vector<CORE_ADDR>
6213 arm_software_single_step (struct regcache *regcache)
6214 {
6215   struct gdbarch *gdbarch = regcache->arch ();
6216   struct arm_get_next_pcs next_pcs_ctx;
6217
6218   arm_get_next_pcs_ctor (&next_pcs_ctx,
6219                          &arm_get_next_pcs_ops,
6220                          gdbarch_byte_order (gdbarch),
6221                          gdbarch_byte_order_for_code (gdbarch),
6222                          0,
6223                          regcache);
6224
6225   std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6226
6227   for (CORE_ADDR &pc_ref : next_pcs)
6228     pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6229
6230   return next_pcs;
6231 }
6232
6233 /* Cleanup/copy SVC (SWI) instructions.  These two functions are overridden
6234    for Linux, where some SVC instructions must be treated specially.  */
6235
6236 static void
6237 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6238              arm_displaced_step_closure *dsc)
6239 {
6240   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6241
6242   if (debug_displaced)
6243     fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
6244                         "%.8lx\n", (unsigned long) resume_addr);
6245
6246   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6247 }
6248
6249
6250 /* Common copy routine for svc instruciton.  */
6251
6252 static int
6253 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6254              arm_displaced_step_closure *dsc)
6255 {
6256   /* Preparation: none.
6257      Insn: unmodified svc.
6258      Cleanup: pc <- insn_addr + insn_size.  */
6259
6260   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6261      instruction.  */
6262   dsc->wrote_to_pc = 1;
6263
6264   /* Allow OS-specific code to override SVC handling.  */
6265   if (dsc->u.svc.copy_svc_os)
6266     return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6267   else
6268     {
6269       dsc->cleanup = &cleanup_svc;
6270       return 0;
6271     }
6272 }
6273
6274 static int
6275 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6276               struct regcache *regs, arm_displaced_step_closure *dsc)
6277 {
6278
6279   if (debug_displaced)
6280     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
6281                         (unsigned long) insn);
6282
6283   dsc->modinsn[0] = insn;
6284
6285   return install_svc (gdbarch, regs, dsc);
6286 }
6287
6288 static int
6289 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6290                 struct regcache *regs, arm_displaced_step_closure *dsc)
6291 {
6292
6293   if (debug_displaced)
6294     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
6295                         insn);
6296
6297   dsc->modinsn[0] = insn;
6298
6299   return install_svc (gdbarch, regs, dsc);
6300 }
6301
6302 /* Copy undefined instructions.  */
6303
6304 static int
6305 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6306                 arm_displaced_step_closure *dsc)
6307 {
6308   if (debug_displaced)
6309     fprintf_unfiltered (gdb_stdlog,
6310                         "displaced: copying undefined insn %.8lx\n",
6311                         (unsigned long) insn);
6312
6313   dsc->modinsn[0] = insn;
6314
6315   return 0;
6316 }
6317
6318 static int
6319 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6320                        arm_displaced_step_closure *dsc)
6321 {
6322
6323   if (debug_displaced)
6324     fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
6325                        "%.4x %.4x\n", (unsigned short) insn1,
6326                        (unsigned short) insn2);
6327
6328   dsc->modinsn[0] = insn1;
6329   dsc->modinsn[1] = insn2;
6330   dsc->numinsns = 2;
6331
6332   return 0;
6333 }
6334
6335 /* Copy unpredictable instructions.  */
6336
6337 static int
6338 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6339                  arm_displaced_step_closure *dsc)
6340 {
6341   if (debug_displaced)
6342     fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
6343                         "%.8lx\n", (unsigned long) insn);
6344
6345   dsc->modinsn[0] = insn;
6346
6347   return 0;
6348 }
6349
6350 /* The decode_* functions are instruction decoding helpers.  They mostly follow
6351    the presentation in the ARM ARM.  */
6352
6353 static int
6354 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6355                               struct regcache *regs,
6356                               arm_displaced_step_closure *dsc)
6357 {
6358   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6359   unsigned int rn = bits (insn, 16, 19);
6360
6361   if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6362     return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6363   else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6364     return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6365   else if ((op1 & 0x60) == 0x20)
6366     return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6367   else if ((op1 & 0x71) == 0x40)
6368     return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6369                                 dsc);
6370   else if ((op1 & 0x77) == 0x41)
6371     return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6372   else if ((op1 & 0x77) == 0x45)
6373     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pli.  */
6374   else if ((op1 & 0x77) == 0x51)
6375     {
6376       if (rn != 0xf)
6377         return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6378       else
6379         return arm_copy_unpred (gdbarch, insn, dsc);
6380     }
6381   else if ((op1 & 0x77) == 0x55)
6382     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6383   else if (op1 == 0x57)
6384     switch (op2)
6385       {
6386       case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6387       case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6388       case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6389       case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6390       default: return arm_copy_unpred (gdbarch, insn, dsc);
6391       }
6392   else if ((op1 & 0x63) == 0x43)
6393     return arm_copy_unpred (gdbarch, insn, dsc);
6394   else if ((op2 & 0x1) == 0x0)
6395     switch (op1 & ~0x80)
6396       {
6397       case 0x61:
6398         return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6399       case 0x65:
6400         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
6401       case 0x71: case 0x75:
6402         /* pld/pldw reg.  */
6403         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6404       case 0x63: case 0x67: case 0x73: case 0x77:
6405         return arm_copy_unpred (gdbarch, insn, dsc);
6406       default:
6407         return arm_copy_undef (gdbarch, insn, dsc);
6408       }
6409   else
6410     return arm_copy_undef (gdbarch, insn, dsc);  /* Probably unreachable.  */
6411 }
6412
6413 static int
6414 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6415                           struct regcache *regs,
6416                           arm_displaced_step_closure *dsc)
6417 {
6418   if (bit (insn, 27) == 0)
6419     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6420   /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx.  */
6421   else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6422     {
6423     case 0x0: case 0x2:
6424       return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6425
6426     case 0x1: case 0x3:
6427       return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6428
6429     case 0x4: case 0x5: case 0x6: case 0x7:
6430       return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6431
6432     case 0x8:
6433       switch ((insn & 0xe00000) >> 21)
6434         {
6435         case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6436           /* stc/stc2.  */
6437           return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6438
6439         case 0x2:
6440           return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6441
6442         default:
6443           return arm_copy_undef (gdbarch, insn, dsc);
6444         }
6445
6446     case 0x9:
6447       {
6448          int rn_f = (bits (insn, 16, 19) == 0xf);
6449         switch ((insn & 0xe00000) >> 21)
6450           {
6451           case 0x1: case 0x3:
6452             /* ldc/ldc2 imm (undefined for rn == pc).  */
6453             return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6454                         : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6455
6456           case 0x2:
6457             return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6458
6459           case 0x4: case 0x5: case 0x6: case 0x7:
6460             /* ldc/ldc2 lit (undefined for rn != pc).  */
6461             return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6462                         : arm_copy_undef (gdbarch, insn, dsc);
6463
6464           default:
6465             return arm_copy_undef (gdbarch, insn, dsc);
6466           }
6467       }
6468
6469     case 0xa:
6470       return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6471
6472     case 0xb:
6473       if (bits (insn, 16, 19) == 0xf)
6474         /* ldc/ldc2 lit.  */
6475         return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6476       else
6477         return arm_copy_undef (gdbarch, insn, dsc);
6478
6479     case 0xc:
6480       if (bit (insn, 4))
6481         return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6482       else
6483         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6484
6485     case 0xd:
6486       if (bit (insn, 4))
6487         return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6488       else
6489         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6490
6491     default:
6492       return arm_copy_undef (gdbarch, insn, dsc);
6493     }
6494 }
6495
6496 /* Decode miscellaneous instructions in dp/misc encoding space.  */
6497
6498 static int
6499 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6500                           struct regcache *regs,
6501                           arm_displaced_step_closure *dsc)
6502 {
6503   unsigned int op2 = bits (insn, 4, 6);
6504   unsigned int op = bits (insn, 21, 22);
6505
6506   switch (op2)
6507     {
6508     case 0x0:
6509       return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6510
6511     case 0x1:
6512       if (op == 0x1)  /* bx.  */
6513         return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6514       else if (op == 0x3)
6515         return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6516       else
6517         return arm_copy_undef (gdbarch, insn, dsc);
6518
6519     case 0x2:
6520       if (op == 0x1)
6521         /* Not really supported.  */
6522         return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6523       else
6524         return arm_copy_undef (gdbarch, insn, dsc);
6525
6526     case 0x3:
6527       if (op == 0x1)
6528         return arm_copy_bx_blx_reg (gdbarch, insn,
6529                                 regs, dsc);  /* blx register.  */
6530       else
6531         return arm_copy_undef (gdbarch, insn, dsc);
6532
6533     case 0x5:
6534       return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6535
6536     case 0x7:
6537       if (op == 0x1)
6538         return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6539       else if (op == 0x3)
6540         /* Not really supported.  */
6541         return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
6542       /* Fall through.  */
6543
6544     default:
6545       return arm_copy_undef (gdbarch, insn, dsc);
6546     }
6547 }
6548
6549 static int
6550 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
6551                     struct regcache *regs,
6552                     arm_displaced_step_closure *dsc)
6553 {
6554   if (bit (insn, 25))
6555     switch (bits (insn, 20, 24))
6556       {
6557       case 0x10:
6558         return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
6559
6560       case 0x14:
6561         return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
6562
6563       case 0x12: case 0x16:
6564         return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
6565
6566       default:
6567         return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
6568       }
6569   else
6570     {
6571       uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
6572
6573       if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
6574         return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
6575       else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
6576         return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
6577       else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
6578         return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
6579       else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
6580         return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
6581       else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
6582         return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
6583       else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
6584         return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
6585       else if (op2 == 0xb || (op2 & 0xd) == 0xd)
6586         /* 2nd arg means "unprivileged".  */
6587         return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
6588                                      dsc);
6589     }
6590
6591   /* Should be unreachable.  */
6592   return 1;
6593 }
6594
6595 static int
6596 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
6597                              struct regcache *regs,
6598                              arm_displaced_step_closure *dsc)
6599 {
6600   int a = bit (insn, 25), b = bit (insn, 4);
6601   uint32_t op1 = bits (insn, 20, 24);
6602
6603   if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
6604       || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
6605     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
6606   else if ((!a && (op1 & 0x17) == 0x02)
6607             || (a && (op1 & 0x17) == 0x02 && !b))
6608     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
6609   else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
6610             || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
6611     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
6612   else if ((!a && (op1 & 0x17) == 0x03)
6613            || (a && (op1 & 0x17) == 0x03 && !b))
6614     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
6615   else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
6616             || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
6617     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
6618   else if ((!a && (op1 & 0x17) == 0x06)
6619            || (a && (op1 & 0x17) == 0x06 && !b))
6620     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
6621   else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
6622            || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
6623     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
6624   else if ((!a && (op1 & 0x17) == 0x07)
6625            || (a && (op1 & 0x17) == 0x07 && !b))
6626     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
6627
6628   /* Should be unreachable.  */
6629   return 1;
6630 }
6631
6632 static int
6633 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
6634                   arm_displaced_step_closure *dsc)
6635 {
6636   switch (bits (insn, 20, 24))
6637     {
6638     case 0x00: case 0x01: case 0x02: case 0x03:
6639       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
6640
6641     case 0x04: case 0x05: case 0x06: case 0x07:
6642       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
6643
6644     case 0x08: case 0x09: case 0x0a: case 0x0b:
6645     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
6646       return arm_copy_unmodified (gdbarch, insn,
6647                               "decode/pack/unpack/saturate/reverse", dsc);
6648
6649     case 0x18:
6650       if (bits (insn, 5, 7) == 0)  /* op2.  */
6651          {
6652           if (bits (insn, 12, 15) == 0xf)
6653             return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
6654           else
6655             return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
6656         }
6657       else
6658          return arm_copy_undef (gdbarch, insn, dsc);
6659
6660     case 0x1a: case 0x1b:
6661       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6662         return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
6663       else
6664         return arm_copy_undef (gdbarch, insn, dsc);
6665
6666     case 0x1c: case 0x1d:
6667       if (bits (insn, 5, 6) == 0x0)  /* op2[1:0].  */
6668          {
6669           if (bits (insn, 0, 3) == 0xf)
6670             return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
6671           else
6672             return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
6673         }
6674       else
6675         return arm_copy_undef (gdbarch, insn, dsc);
6676
6677     case 0x1e: case 0x1f:
6678       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6679         return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
6680       else
6681         return arm_copy_undef (gdbarch, insn, dsc);
6682     }
6683
6684   /* Should be unreachable.  */
6685   return 1;
6686 }
6687
6688 static int
6689 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
6690                         struct regcache *regs,
6691                         arm_displaced_step_closure *dsc)
6692 {
6693   if (bit (insn, 25))
6694     return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6695   else
6696     return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
6697 }
6698
6699 static int
6700 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
6701                           struct regcache *regs,
6702                           arm_displaced_step_closure *dsc)
6703 {
6704   unsigned int opcode = bits (insn, 20, 24);
6705
6706   switch (opcode)
6707     {
6708     case 0x04: case 0x05:  /* VFP/Neon mrrc/mcrr.  */
6709       return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
6710
6711     case 0x08: case 0x0a: case 0x0c: case 0x0e:
6712     case 0x12: case 0x16:
6713       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
6714
6715     case 0x09: case 0x0b: case 0x0d: case 0x0f:
6716     case 0x13: case 0x17:
6717       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
6718
6719     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6720     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6721       /* Note: no writeback for these instructions.  Bit 25 will always be
6722          zero though (via caller), so the following works OK.  */
6723       return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6724     }
6725
6726   /* Should be unreachable.  */
6727   return 1;
6728 }
6729
6730 /* Decode shifted register instructions.  */
6731
6732 static int
6733 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
6734                             uint16_t insn2,  struct regcache *regs,
6735                             arm_displaced_step_closure *dsc)
6736 {
6737   /* PC is only allowed to be used in instruction MOV.  */
6738
6739   unsigned int op = bits (insn1, 5, 8);
6740   unsigned int rn = bits (insn1, 0, 3);
6741
6742   if (op == 0x2 && rn == 0xf) /* MOV */
6743     return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
6744   else
6745     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6746                                         "dp (shift reg)", dsc);
6747 }
6748
6749
6750 /* Decode extension register load/store.  Exactly the same as
6751    arm_decode_ext_reg_ld_st.  */
6752
6753 static int
6754 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
6755                              uint16_t insn2,  struct regcache *regs,
6756                              arm_displaced_step_closure *dsc)
6757 {
6758   unsigned int opcode = bits (insn1, 4, 8);
6759
6760   switch (opcode)
6761     {
6762     case 0x04: case 0x05:
6763       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6764                                           "vfp/neon vmov", dsc);
6765
6766     case 0x08: case 0x0c: /* 01x00 */
6767     case 0x0a: case 0x0e: /* 01x10 */
6768     case 0x12: case 0x16: /* 10x10 */
6769       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6770                                           "vfp/neon vstm/vpush", dsc);
6771
6772     case 0x09: case 0x0d: /* 01x01 */
6773     case 0x0b: case 0x0f: /* 01x11 */
6774     case 0x13: case 0x17: /* 10x11 */
6775       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6776                                           "vfp/neon vldm/vpop", dsc);
6777
6778     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6779       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6780                                           "vstr", dsc);
6781     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6782       return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
6783     }
6784
6785   /* Should be unreachable.  */
6786   return 1;
6787 }
6788
6789 static int
6790 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
6791                       struct regcache *regs, arm_displaced_step_closure *dsc)
6792 {
6793   unsigned int op1 = bits (insn, 20, 25);
6794   int op = bit (insn, 4);
6795   unsigned int coproc = bits (insn, 8, 11);
6796
6797   if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
6798     return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
6799   else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
6800            && (coproc & 0xe) != 0xa)
6801     /* stc/stc2.  */
6802     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6803   else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
6804            && (coproc & 0xe) != 0xa)
6805     /* ldc/ldc2 imm/lit.  */
6806     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6807   else if ((op1 & 0x3e) == 0x00)
6808     return arm_copy_undef (gdbarch, insn, dsc);
6809   else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
6810     return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
6811   else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
6812     return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6813   else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
6814     return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6815   else if ((op1 & 0x30) == 0x20 && !op)
6816     {
6817       if ((coproc & 0xe) == 0xa)
6818         return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
6819       else
6820         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6821     }
6822   else if ((op1 & 0x30) == 0x20 && op)
6823     return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
6824   else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
6825     return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6826   else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
6827     return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6828   else if ((op1 & 0x30) == 0x30)
6829     return arm_copy_svc (gdbarch, insn, regs, dsc);
6830   else
6831     return arm_copy_undef (gdbarch, insn, dsc);  /* Possibly unreachable.  */
6832 }
6833
6834 static int
6835 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
6836                          uint16_t insn2, struct regcache *regs,
6837                          arm_displaced_step_closure *dsc)
6838 {
6839   unsigned int coproc = bits (insn2, 8, 11);
6840   unsigned int bit_5_8 = bits (insn1, 5, 8);
6841   unsigned int bit_9 = bit (insn1, 9);
6842   unsigned int bit_4 = bit (insn1, 4);
6843
6844   if (bit_9 == 0)
6845     {
6846       if (bit_5_8 == 2)
6847         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6848                                             "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
6849                                             dsc);
6850       else if (bit_5_8 == 0) /* UNDEFINED.  */
6851         return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
6852       else
6853         {
6854            /*coproc is 101x.  SIMD/VFP, ext registers load/store.  */
6855           if ((coproc & 0xe) == 0xa)
6856             return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
6857                                                 dsc);
6858           else /* coproc is not 101x.  */
6859             {
6860               if (bit_4 == 0) /* STC/STC2.  */
6861                 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6862                                                     "stc/stc2", dsc);
6863               else /* LDC/LDC2 {literal, immeidate}.  */
6864                 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
6865                                                      regs, dsc);
6866             }
6867         }
6868     }
6869   else
6870     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
6871
6872   return 0;
6873 }
6874
6875 static void
6876 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
6877                      arm_displaced_step_closure *dsc, int rd)
6878 {
6879   /* ADR Rd, #imm
6880
6881      Rewrite as:
6882
6883      Preparation: Rd <- PC
6884      Insn: ADD Rd, #imm
6885      Cleanup: Null.
6886   */
6887
6888   /* Rd <- PC */
6889   int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6890   displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
6891 }
6892
6893 static int
6894 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
6895                               arm_displaced_step_closure *dsc,
6896                               int rd, unsigned int imm)
6897 {
6898
6899   /* Encoding T2: ADDS Rd, #imm */
6900   dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
6901
6902   install_pc_relative (gdbarch, regs, dsc, rd);
6903
6904   return 0;
6905 }
6906
6907 static int
6908 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
6909                                 struct regcache *regs,
6910                                 arm_displaced_step_closure *dsc)
6911 {
6912   unsigned int rd = bits (insn, 8, 10);
6913   unsigned int imm8 = bits (insn, 0, 7);
6914
6915   if (debug_displaced)
6916     fprintf_unfiltered (gdb_stdlog,
6917                         "displaced: copying thumb adr r%d, #%d insn %.4x\n",
6918                         rd, imm8, insn);
6919
6920   return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
6921 }
6922
6923 static int
6924 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
6925                               uint16_t insn2, struct regcache *regs,
6926                               arm_displaced_step_closure *dsc)
6927 {
6928   unsigned int rd = bits (insn2, 8, 11);
6929   /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
6930      extract raw immediate encoding rather than computing immediate.  When
6931      generating ADD or SUB instruction, we can simply perform OR operation to
6932      set immediate into ADD.  */
6933   unsigned int imm_3_8 = insn2 & 0x70ff;
6934   unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10.  */
6935
6936   if (debug_displaced)
6937     fprintf_unfiltered (gdb_stdlog,
6938                         "displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
6939                         rd, imm_i, imm_3_8, insn1, insn2);
6940
6941   if (bit (insn1, 7)) /* Encoding T2 */
6942     {
6943       /* Encoding T3: SUB Rd, Rd, #imm */
6944       dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
6945       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6946     }
6947   else /* Encoding T3 */
6948     {
6949       /* Encoding T3: ADD Rd, Rd, #imm */
6950       dsc->modinsn[0] = (0xf100 | rd | imm_i);
6951       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6952     }
6953   dsc->numinsns = 2;
6954
6955   install_pc_relative (gdbarch, regs, dsc, rd);
6956
6957   return 0;
6958 }
6959
6960 static int
6961 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
6962                               struct regcache *regs,
6963                               arm_displaced_step_closure *dsc)
6964 {
6965   unsigned int rt = bits (insn1, 8, 10);
6966   unsigned int pc;
6967   int imm8 = (bits (insn1, 0, 7) << 2);
6968
6969   /* LDR Rd, #imm8
6970
6971      Rwrite as:
6972
6973      Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
6974
6975      Insn: LDR R0, [R2, R3];
6976      Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
6977
6978   if (debug_displaced)
6979     fprintf_unfiltered (gdb_stdlog,
6980                         "displaced: copying thumb ldr r%d [pc #%d]\n"
6981                         , rt, imm8);
6982
6983   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6984   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
6985   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
6986   pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6987   /* The assembler calculates the required value of the offset from the
6988      Align(PC,4) value of this instruction to the label.  */
6989   pc = pc & 0xfffffffc;
6990
6991   displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
6992   displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
6993
6994   dsc->rd = rt;
6995   dsc->u.ldst.xfersize = 4;
6996   dsc->u.ldst.rn = 0;
6997   dsc->u.ldst.immed = 0;
6998   dsc->u.ldst.writeback = 0;
6999   dsc->u.ldst.restore_r4 = 0;
7000
7001   dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
7002
7003   dsc->cleanup = &cleanup_load;
7004
7005   return 0;
7006 }
7007
7008 /* Copy Thumb cbnz/cbz insruction.  */
7009
7010 static int
7011 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
7012                      struct regcache *regs,
7013                      arm_displaced_step_closure *dsc)
7014 {
7015   int non_zero = bit (insn1, 11);
7016   unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
7017   CORE_ADDR from = dsc->insn_addr;
7018   int rn = bits (insn1, 0, 2);
7019   int rn_val = displaced_read_reg (regs, dsc, rn);
7020
7021   dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
7022   /* CBNZ and CBZ do not affect the condition flags.  If condition is true,
7023      set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
7024      condition is false, let it be, cleanup_branch will do nothing.  */
7025   if (dsc->u.branch.cond)
7026     {
7027       dsc->u.branch.cond = INST_AL;
7028       dsc->u.branch.dest = from + 4 + imm5;
7029     }
7030   else
7031       dsc->u.branch.dest = from + 2;
7032
7033   dsc->u.branch.link = 0;
7034   dsc->u.branch.exchange = 0;
7035
7036   if (debug_displaced)
7037     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
7038                         " insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
7039                         rn, rn_val, insn1, dsc->u.branch.dest);
7040
7041   dsc->modinsn[0] = THUMB_NOP;
7042
7043   dsc->cleanup = &cleanup_branch;
7044   return 0;
7045 }
7046
7047 /* Copy Table Branch Byte/Halfword */
7048 static int
7049 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
7050                           uint16_t insn2, struct regcache *regs,
7051                           arm_displaced_step_closure *dsc)
7052 {
7053   ULONGEST rn_val, rm_val;
7054   int is_tbh = bit (insn2, 4);
7055   CORE_ADDR halfwords = 0;
7056   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7057
7058   rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
7059   rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
7060
7061   if (is_tbh)
7062     {
7063       gdb_byte buf[2];
7064
7065       target_read_memory (rn_val + 2 * rm_val, buf, 2);
7066       halfwords = extract_unsigned_integer (buf, 2, byte_order);
7067     }
7068   else
7069     {
7070       gdb_byte buf[1];
7071
7072       target_read_memory (rn_val + rm_val, buf, 1);
7073       halfwords = extract_unsigned_integer (buf, 1, byte_order);
7074     }
7075
7076   if (debug_displaced)
7077     fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
7078                         " offset 0x%x\n", is_tbh ? "tbh" : "tbb",
7079                         (unsigned int) rn_val, (unsigned int) rm_val,
7080                         (unsigned int) halfwords);
7081
7082   dsc->u.branch.cond = INST_AL;
7083   dsc->u.branch.link = 0;
7084   dsc->u.branch.exchange = 0;
7085   dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
7086
7087   dsc->cleanup = &cleanup_branch;
7088
7089   return 0;
7090 }
7091
7092 static void
7093 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
7094                           arm_displaced_step_closure *dsc)
7095 {
7096   /* PC <- r7 */
7097   int val = displaced_read_reg (regs, dsc, 7);
7098   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
7099
7100   /* r7 <- r8 */
7101   val = displaced_read_reg (regs, dsc, 8);
7102   displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
7103
7104   /* r8 <- tmp[0] */
7105   displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
7106
7107 }
7108
7109 static int
7110 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
7111                          struct regcache *regs,
7112                          arm_displaced_step_closure *dsc)
7113 {
7114   dsc->u.block.regmask = insn1 & 0x00ff;
7115
7116   /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
7117      to :
7118
7119      (1) register list is full, that is, r0-r7 are used.
7120      Prepare: tmp[0] <- r8
7121
7122      POP {r0, r1, ...., r6, r7}; remove PC from reglist
7123      MOV r8, r7; Move value of r7 to r8;
7124      POP {r7}; Store PC value into r7.
7125
7126      Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
7127
7128      (2) register list is not full, supposing there are N registers in
7129      register list (except PC, 0 <= N <= 7).
7130      Prepare: for each i, 0 - N, tmp[i] <- ri.
7131
7132      POP {r0, r1, ...., rN};
7133
7134      Cleanup: Set registers in original reglist from r0 - rN.  Restore r0 - rN
7135      from tmp[] properly.
7136   */
7137   if (debug_displaced)
7138     fprintf_unfiltered (gdb_stdlog,
7139                         "displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
7140                         dsc->u.block.regmask, insn1);
7141
7142   if (dsc->u.block.regmask == 0xff)
7143     {
7144       dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
7145
7146       dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
7147       dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
7148       dsc->modinsn[2] = 0xbc80; /* POP {r7} */
7149
7150       dsc->numinsns = 3;
7151       dsc->cleanup = &cleanup_pop_pc_16bit_all;
7152     }
7153   else
7154     {
7155       unsigned int num_in_list = bitcount (dsc->u.block.regmask);
7156       unsigned int i;
7157       unsigned int new_regmask;
7158
7159       for (i = 0; i < num_in_list + 1; i++)
7160         dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7161
7162       new_regmask = (1 << (num_in_list + 1)) - 1;
7163
7164       if (debug_displaced)
7165         fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
7166                                           "{..., pc}: original reg list %.4x,"
7167                                           " modified list %.4x\n"),
7168                             (int) dsc->u.block.regmask, new_regmask);
7169
7170       dsc->u.block.regmask |= 0x8000;
7171       dsc->u.block.writeback = 0;
7172       dsc->u.block.cond = INST_AL;
7173
7174       dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
7175
7176       dsc->cleanup = &cleanup_block_load_pc;
7177     }
7178
7179   return 0;
7180 }
7181
7182 static void
7183 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7184                                     struct regcache *regs,
7185                                     arm_displaced_step_closure *dsc)
7186 {
7187   unsigned short op_bit_12_15 = bits (insn1, 12, 15);
7188   unsigned short op_bit_10_11 = bits (insn1, 10, 11);
7189   int err = 0;
7190
7191   /* 16-bit thumb instructions.  */
7192   switch (op_bit_12_15)
7193     {
7194       /* Shift (imme), add, subtract, move and compare.  */
7195     case 0: case 1: case 2: case 3:
7196       err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7197                                          "shift/add/sub/mov/cmp",
7198                                          dsc);
7199       break;
7200     case 4:
7201       switch (op_bit_10_11)
7202         {
7203         case 0: /* Data-processing */
7204           err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7205                                              "data-processing",
7206                                              dsc);
7207           break;
7208         case 1: /* Special data instructions and branch and exchange.  */
7209           {
7210             unsigned short op = bits (insn1, 7, 9);
7211             if (op == 6 || op == 7) /* BX or BLX */
7212               err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
7213             else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers.  */
7214               err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
7215             else
7216               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
7217                                                  dsc);
7218           }
7219           break;
7220         default: /* LDR (literal) */
7221           err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
7222         }
7223       break;
7224     case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
7225       err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
7226       break;
7227     case 10:
7228       if (op_bit_10_11 < 2) /* Generate PC-relative address */
7229         err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
7230       else /* Generate SP-relative address */
7231         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
7232       break;
7233     case 11: /* Misc 16-bit instructions */
7234       {
7235         switch (bits (insn1, 8, 11))
7236           {
7237           case 1: case 3:  case 9: case 11: /* CBNZ, CBZ */
7238             err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
7239             break;
7240           case 12: case 13: /* POP */
7241             if (bit (insn1, 8)) /* PC is in register list.  */
7242               err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
7243             else
7244               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
7245             break;
7246           case 15: /* If-Then, and hints */
7247             if (bits (insn1, 0, 3))
7248               /* If-Then makes up to four following instructions conditional.
7249                  IT instruction itself is not conditional, so handle it as a
7250                  common unmodified instruction.  */
7251               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
7252                                                  dsc);
7253             else
7254               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
7255             break;
7256           default:
7257             err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
7258           }
7259       }
7260       break;
7261     case 12:
7262       if (op_bit_10_11 < 2) /* Store multiple registers */
7263         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
7264       else /* Load multiple registers */
7265         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
7266       break;
7267     case 13: /* Conditional branch and supervisor call */
7268       if (bits (insn1, 9, 11) != 7) /* conditional branch */
7269         err = thumb_copy_b (gdbarch, insn1, dsc);
7270       else
7271         err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
7272       break;
7273     case 14: /* Unconditional branch */
7274       err = thumb_copy_b (gdbarch, insn1, dsc);
7275       break;
7276     default:
7277       err = 1;
7278     }
7279
7280   if (err)
7281     internal_error (__FILE__, __LINE__,
7282                     _("thumb_process_displaced_16bit_insn: Instruction decode error"));
7283 }
7284
7285 static int
7286 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
7287                                  uint16_t insn1, uint16_t insn2,
7288                                  struct regcache *regs,
7289                                  arm_displaced_step_closure *dsc)
7290 {
7291   int rt = bits (insn2, 12, 15);
7292   int rn = bits (insn1, 0, 3);
7293   int op1 = bits (insn1, 7, 8);
7294
7295   switch (bits (insn1, 5, 6))
7296     {
7297     case 0: /* Load byte and memory hints */
7298       if (rt == 0xf) /* PLD/PLI */
7299         {
7300           if (rn == 0xf)
7301             /* PLD literal or Encoding T3 of PLI(immediate, literal).  */
7302             return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
7303           else
7304             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7305                                                 "pli/pld", dsc);
7306         }
7307       else
7308         {
7309           if (rn == 0xf) /* LDRB/LDRSB (literal) */
7310             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7311                                              1);
7312           else
7313             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7314                                                 "ldrb{reg, immediate}/ldrbt",
7315                                                 dsc);
7316         }
7317
7318       break;
7319     case 1: /* Load halfword and memory hints.  */
7320       if (rt == 0xf) /* PLD{W} and Unalloc memory hint.  */
7321         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7322                                             "pld/unalloc memhint", dsc);
7323       else
7324         {
7325           if (rn == 0xf)
7326             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7327                                              2);
7328           else
7329             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7330                                                 "ldrh/ldrht", dsc);
7331         }
7332       break;
7333     case 2: /* Load word */
7334       {
7335         int insn2_bit_8_11 = bits (insn2, 8, 11);
7336
7337         if (rn == 0xf)
7338           return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
7339         else if (op1 == 0x1) /* Encoding T3 */
7340           return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
7341                                            0, 1);
7342         else /* op1 == 0x0 */
7343           {
7344             if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
7345               /* LDR (immediate) */
7346               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7347                                                dsc, bit (insn2, 8), 1);
7348             else if (insn2_bit_8_11 == 0xe) /* LDRT */
7349               return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7350                                                   "ldrt", dsc);
7351             else
7352               /* LDR (register) */
7353               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7354                                                dsc, 0, 0);
7355           }
7356         break;
7357       }
7358     default:
7359       return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7360       break;
7361     }
7362   return 0;
7363 }
7364
7365 static void
7366 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7367                                     uint16_t insn2, struct regcache *regs,
7368                                     arm_displaced_step_closure *dsc)
7369 {
7370   int err = 0;
7371   unsigned short op = bit (insn2, 15);
7372   unsigned int op1 = bits (insn1, 11, 12);
7373
7374   switch (op1)
7375     {
7376     case 1:
7377       {
7378         switch (bits (insn1, 9, 10))
7379           {
7380           case 0:
7381             if (bit (insn1, 6))
7382               {
7383                 /* Load/store {dual, execlusive}, table branch.  */
7384                 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
7385                     && bits (insn2, 5, 7) == 0)
7386                   err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
7387                                                   dsc);
7388                 else
7389                   /* PC is not allowed to use in load/store {dual, exclusive}
7390                      instructions.  */
7391                   err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7392                                                      "load/store dual/ex", dsc);
7393               }
7394             else /* load/store multiple */
7395               {
7396                 switch (bits (insn1, 7, 8))
7397                   {
7398                   case 0: case 3: /* SRS, RFE */
7399                     err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7400                                                        "srs/rfe", dsc);
7401                     break;
7402                   case 1: case 2: /* LDM/STM/PUSH/POP */
7403                     err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
7404                     break;
7405                   }
7406               }
7407             break;
7408
7409           case 1:
7410             /* Data-processing (shift register).  */
7411             err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
7412                                               dsc);
7413             break;
7414           default: /* Coprocessor instructions.  */
7415             err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7416             break;
7417           }
7418       break;
7419       }
7420     case 2: /* op1 = 2 */
7421       if (op) /* Branch and misc control.  */
7422         {
7423           if (bit (insn2, 14)  /* BLX/BL */
7424               || bit (insn2, 12) /* Unconditional branch */
7425               || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
7426             err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
7427           else
7428             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7429                                                "misc ctrl", dsc);
7430         }
7431       else
7432         {
7433           if (bit (insn1, 9)) /* Data processing (plain binary imm).  */
7434             {
7435               int dp_op = bits (insn1, 4, 8);
7436               int rn = bits (insn1, 0, 3);
7437               if ((dp_op == 0 || dp_op == 0xa) && rn == 0xf)
7438                 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
7439                                                     regs, dsc);
7440               else
7441                 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7442                                                    "dp/pb", dsc);
7443             }
7444           else /* Data processing (modified immeidate) */
7445             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7446                                                "dp/mi", dsc);
7447         }
7448       break;
7449     case 3: /* op1 = 3 */
7450       switch (bits (insn1, 9, 10))
7451         {
7452         case 0:
7453           if (bit (insn1, 4))
7454             err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
7455                                                    regs, dsc);
7456           else /* NEON Load/Store and Store single data item */
7457             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7458                                                "neon elt/struct load/store",
7459                                                dsc);
7460           break;
7461         case 1: /* op1 = 3, bits (9, 10) == 1 */
7462           switch (bits (insn1, 7, 8))
7463             {
7464             case 0: case 1: /* Data processing (register) */
7465               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7466                                                  "dp(reg)", dsc);
7467               break;
7468             case 2: /* Multiply and absolute difference */
7469               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7470                                                  "mul/mua/diff", dsc);
7471               break;
7472             case 3: /* Long multiply and divide */
7473               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7474                                                  "lmul/lmua", dsc);
7475               break;
7476             }
7477           break;
7478         default: /* Coprocessor instructions */
7479           err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7480           break;
7481         }
7482       break;
7483     default:
7484       err = 1;
7485     }
7486
7487   if (err)
7488     internal_error (__FILE__, __LINE__,
7489                     _("thumb_process_displaced_32bit_insn: Instruction decode error"));
7490
7491 }
7492
7493 static void
7494 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7495                               struct regcache *regs,
7496                               arm_displaced_step_closure *dsc)
7497 {
7498   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7499   uint16_t insn1
7500     = read_memory_unsigned_integer (from, 2, byte_order_for_code);
7501
7502   if (debug_displaced)
7503     fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
7504                         "at %.8lx\n", insn1, (unsigned long) from);
7505
7506   dsc->is_thumb = 1;
7507   dsc->insn_size = thumb_insn_size (insn1);
7508   if (thumb_insn_size (insn1) == 4)
7509     {
7510       uint16_t insn2
7511         = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
7512       thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
7513     }
7514   else
7515     thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
7516 }
7517
7518 void
7519 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7520                             CORE_ADDR to, struct regcache *regs,
7521                             arm_displaced_step_closure *dsc)
7522 {
7523   int err = 0;
7524   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7525   uint32_t insn;
7526
7527   /* Most displaced instructions use a 1-instruction scratch space, so set this
7528      here and override below if/when necessary.  */
7529   dsc->numinsns = 1;
7530   dsc->insn_addr = from;
7531   dsc->scratch_base = to;
7532   dsc->cleanup = NULL;
7533   dsc->wrote_to_pc = 0;
7534
7535   if (!displaced_in_arm_mode (regs))
7536     return thumb_process_displaced_insn (gdbarch, from, regs, dsc);
7537
7538   dsc->is_thumb = 0;
7539   dsc->insn_size = 4;
7540   insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
7541   if (debug_displaced)
7542     fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
7543                         "at %.8lx\n", (unsigned long) insn,
7544                         (unsigned long) from);
7545
7546   if ((insn & 0xf0000000) == 0xf0000000)
7547     err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
7548   else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
7549     {
7550     case 0x0: case 0x1: case 0x2: case 0x3:
7551       err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
7552       break;
7553
7554     case 0x4: case 0x5: case 0x6:
7555       err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
7556       break;
7557
7558     case 0x7:
7559       err = arm_decode_media (gdbarch, insn, dsc);
7560       break;
7561
7562     case 0x8: case 0x9: case 0xa: case 0xb:
7563       err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
7564       break;
7565
7566     case 0xc: case 0xd: case 0xe: case 0xf:
7567       err = arm_decode_svc_copro (gdbarch, insn, regs, dsc);
7568       break;
7569     }
7570
7571   if (err)
7572     internal_error (__FILE__, __LINE__,
7573                     _("arm_process_displaced_insn: Instruction decode error"));
7574 }
7575
7576 /* Actually set up the scratch space for a displaced instruction.  */
7577
7578 void
7579 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
7580                             CORE_ADDR to, arm_displaced_step_closure *dsc)
7581 {
7582   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7583   unsigned int i, len, offset;
7584   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7585   int size = dsc->is_thumb? 2 : 4;
7586   const gdb_byte *bkp_insn;
7587
7588   offset = 0;
7589   /* Poke modified instruction(s).  */
7590   for (i = 0; i < dsc->numinsns; i++)
7591     {
7592       if (debug_displaced)
7593         {
7594           fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
7595           if (size == 4)
7596             fprintf_unfiltered (gdb_stdlog, "%.8lx",
7597                                 dsc->modinsn[i]);
7598           else if (size == 2)
7599             fprintf_unfiltered (gdb_stdlog, "%.4x",
7600                                 (unsigned short)dsc->modinsn[i]);
7601
7602           fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
7603                               (unsigned long) to + offset);
7604
7605         }
7606       write_memory_unsigned_integer (to + offset, size,
7607                                      byte_order_for_code,
7608                                      dsc->modinsn[i]);
7609       offset += size;
7610     }
7611
7612   /* Choose the correct breakpoint instruction.  */
7613   if (dsc->is_thumb)
7614     {
7615       bkp_insn = tdep->thumb_breakpoint;
7616       len = tdep->thumb_breakpoint_size;
7617     }
7618   else
7619     {
7620       bkp_insn = tdep->arm_breakpoint;
7621       len = tdep->arm_breakpoint_size;
7622     }
7623
7624   /* Put breakpoint afterwards.  */
7625   write_memory (to + offset, bkp_insn, len);
7626
7627   if (debug_displaced)
7628     fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
7629                         paddress (gdbarch, from), paddress (gdbarch, to));
7630 }
7631
7632 /* Entry point for cleaning things up after a displaced instruction has been
7633    single-stepped.  */
7634
7635 void
7636 arm_displaced_step_fixup (struct gdbarch *gdbarch,
7637                           struct displaced_step_closure *dsc_,
7638                           CORE_ADDR from, CORE_ADDR to,
7639                           struct regcache *regs)
7640 {
7641   arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
7642
7643   if (dsc->cleanup)
7644     dsc->cleanup (gdbarch, regs, dsc);
7645
7646   if (!dsc->wrote_to_pc)
7647     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
7648                                     dsc->insn_addr + dsc->insn_size);
7649
7650 }
7651
7652 #include "bfd-in2.h"
7653 #include "libcoff.h"
7654
7655 static int
7656 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
7657 {
7658   gdb_disassembler *di
7659     = static_cast<gdb_disassembler *>(info->application_data);
7660   struct gdbarch *gdbarch = di->arch ();
7661
7662   if (arm_pc_is_thumb (gdbarch, memaddr))
7663     {
7664       static asymbol *asym;
7665       static combined_entry_type ce;
7666       static struct coff_symbol_struct csym;
7667       static struct bfd fake_bfd;
7668       static bfd_target fake_target;
7669
7670       if (csym.native == NULL)
7671         {
7672           /* Create a fake symbol vector containing a Thumb symbol.
7673              This is solely so that the code in print_insn_little_arm() 
7674              and print_insn_big_arm() in opcodes/arm-dis.c will detect
7675              the presence of a Thumb symbol and switch to decoding
7676              Thumb instructions.  */
7677
7678           fake_target.flavour = bfd_target_coff_flavour;
7679           fake_bfd.xvec = &fake_target;
7680           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
7681           csym.native = &ce;
7682           csym.symbol.the_bfd = &fake_bfd;
7683           csym.symbol.name = "fake";
7684           asym = (asymbol *) & csym;
7685         }
7686
7687       memaddr = UNMAKE_THUMB_ADDR (memaddr);
7688       info->symbols = &asym;
7689     }
7690   else
7691     info->symbols = NULL;
7692
7693   /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
7694      accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit.  Otherwise,
7695      opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
7696      the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
7697      in default_print_insn.  */
7698   if (exec_bfd != NULL)
7699     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
7700
7701   return default_print_insn (memaddr, info);
7702 }
7703
7704 /* The following define instruction sequences that will cause ARM
7705    cpu's to take an undefined instruction trap.  These are used to
7706    signal a breakpoint to GDB.
7707    
7708    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
7709    modes.  A different instruction is required for each mode.  The ARM
7710    cpu's can also be big or little endian.  Thus four different
7711    instructions are needed to support all cases.
7712    
7713    Note: ARMv4 defines several new instructions that will take the
7714    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
7715    not in fact add the new instructions.  The new undefined
7716    instructions in ARMv4 are all instructions that had no defined
7717    behaviour in earlier chips.  There is no guarantee that they will
7718    raise an exception, but may be treated as NOP's.  In practice, it
7719    may only safe to rely on instructions matching:
7720    
7721    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
7722    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
7723    C C C C 0 1 1 x x x x x x x x x x x x x x x x x x x x 1 x x x x
7724    
7725    Even this may only true if the condition predicate is true.  The
7726    following use a condition predicate of ALWAYS so it is always TRUE.
7727    
7728    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
7729    and NetBSD all use a software interrupt rather than an undefined
7730    instruction to force a trap.  This can be handled by by the
7731    abi-specific code during establishment of the gdbarch vector.  */
7732
7733 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
7734 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
7735 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
7736 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
7737
7738 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
7739 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
7740 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
7741 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
7742
7743 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
7744
7745 static int
7746 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7747 {
7748   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7749   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7750
7751   if (arm_pc_is_thumb (gdbarch, *pcptr))
7752     {
7753       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
7754
7755       /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
7756          check whether we are replacing a 32-bit instruction.  */
7757       if (tdep->thumb2_breakpoint != NULL)
7758         {
7759           gdb_byte buf[2];
7760
7761           if (target_read_memory (*pcptr, buf, 2) == 0)
7762             {
7763               unsigned short inst1;
7764
7765               inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
7766               if (thumb_insn_size (inst1) == 4)
7767                 return ARM_BP_KIND_THUMB2;
7768             }
7769         }
7770
7771       return ARM_BP_KIND_THUMB;
7772     }
7773   else
7774     return ARM_BP_KIND_ARM;
7775
7776 }
7777
7778 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
7779
7780 static const gdb_byte *
7781 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7782 {
7783   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7784
7785   switch (kind)
7786     {
7787     case ARM_BP_KIND_ARM:
7788       *size = tdep->arm_breakpoint_size;
7789       return tdep->arm_breakpoint;
7790     case ARM_BP_KIND_THUMB:
7791       *size = tdep->thumb_breakpoint_size;
7792       return tdep->thumb_breakpoint;
7793     case ARM_BP_KIND_THUMB2:
7794       *size = tdep->thumb2_breakpoint_size;
7795       return tdep->thumb2_breakpoint;
7796     default:
7797       gdb_assert_not_reached ("unexpected arm breakpoint kind");
7798     }
7799 }
7800
7801 /* Implement the breakpoint_kind_from_current_state gdbarch method.  */
7802
7803 static int
7804 arm_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
7805                                         struct regcache *regcache,
7806                                         CORE_ADDR *pcptr)
7807 {
7808   gdb_byte buf[4];
7809
7810   /* Check the memory pointed by PC is readable.  */
7811   if (target_read_memory (regcache_read_pc (regcache), buf, 4) == 0)
7812     {
7813       struct arm_get_next_pcs next_pcs_ctx;
7814
7815       arm_get_next_pcs_ctor (&next_pcs_ctx,
7816                              &arm_get_next_pcs_ops,
7817                              gdbarch_byte_order (gdbarch),
7818                              gdbarch_byte_order_for_code (gdbarch),
7819                              0,
7820                              regcache);
7821
7822       std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
7823
7824       /* If MEMADDR is the next instruction of current pc, do the
7825          software single step computation, and get the thumb mode by
7826          the destination address.  */
7827       for (CORE_ADDR pc : next_pcs)
7828         {
7829           if (UNMAKE_THUMB_ADDR (pc) == *pcptr)
7830             {
7831               if (IS_THUMB_ADDR (pc))
7832                 {
7833                   *pcptr = MAKE_THUMB_ADDR (*pcptr);
7834                   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7835                 }
7836               else
7837                 return ARM_BP_KIND_ARM;
7838             }
7839         }
7840     }
7841
7842   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7843 }
7844
7845 /* Extract from an array REGBUF containing the (raw) register state a
7846    function return value of type TYPE, and copy that, in virtual
7847    format, into VALBUF.  */
7848
7849 static void
7850 arm_extract_return_value (struct type *type, struct regcache *regs,
7851                           gdb_byte *valbuf)
7852 {
7853   struct gdbarch *gdbarch = regs->arch ();
7854   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7855
7856   if (TYPE_CODE_FLT == TYPE_CODE (type))
7857     {
7858       switch (gdbarch_tdep (gdbarch)->fp_model)
7859         {
7860         case ARM_FLOAT_FPA:
7861           {
7862             /* The value is in register F0 in internal format.  We need to
7863                extract the raw value and then convert it to the desired
7864                internal type.  */
7865             bfd_byte tmpbuf[FP_REGISTER_SIZE];
7866
7867             regs->cooked_read (ARM_F0_REGNUM, tmpbuf);
7868             target_float_convert (tmpbuf, arm_ext_type (gdbarch),
7869                                   valbuf, type);
7870           }
7871           break;
7872
7873         case ARM_FLOAT_SOFT_FPA:
7874         case ARM_FLOAT_SOFT_VFP:
7875           /* ARM_FLOAT_VFP can arise if this is a variadic function so
7876              not using the VFP ABI code.  */
7877         case ARM_FLOAT_VFP:
7878           regs->cooked_read (ARM_A1_REGNUM, valbuf);
7879           if (TYPE_LENGTH (type) > 4)
7880             regs->cooked_read (ARM_A1_REGNUM + 1, valbuf + INT_REGISTER_SIZE);
7881           break;
7882
7883         default:
7884           internal_error (__FILE__, __LINE__,
7885                           _("arm_extract_return_value: "
7886                             "Floating point model not supported"));
7887           break;
7888         }
7889     }
7890   else if (TYPE_CODE (type) == TYPE_CODE_INT
7891            || TYPE_CODE (type) == TYPE_CODE_CHAR
7892            || TYPE_CODE (type) == TYPE_CODE_BOOL
7893            || TYPE_CODE (type) == TYPE_CODE_PTR
7894            || TYPE_IS_REFERENCE (type)
7895            || TYPE_CODE (type) == TYPE_CODE_ENUM)
7896     {
7897       /* If the type is a plain integer, then the access is
7898          straight-forward.  Otherwise we have to play around a bit
7899          more.  */
7900       int len = TYPE_LENGTH (type);
7901       int regno = ARM_A1_REGNUM;
7902       ULONGEST tmp;
7903
7904       while (len > 0)
7905         {
7906           /* By using store_unsigned_integer we avoid having to do
7907              anything special for small big-endian values.  */
7908           regcache_cooked_read_unsigned (regs, regno++, &tmp);
7909           store_unsigned_integer (valbuf, 
7910                                   (len > INT_REGISTER_SIZE
7911                                    ? INT_REGISTER_SIZE : len),
7912                                   byte_order, tmp);
7913           len -= INT_REGISTER_SIZE;
7914           valbuf += INT_REGISTER_SIZE;
7915         }
7916     }
7917   else
7918     {
7919       /* For a structure or union the behaviour is as if the value had
7920          been stored to word-aligned memory and then loaded into 
7921          registers with 32-bit load instruction(s).  */
7922       int len = TYPE_LENGTH (type);
7923       int regno = ARM_A1_REGNUM;
7924       bfd_byte tmpbuf[INT_REGISTER_SIZE];
7925
7926       while (len > 0)
7927         {
7928           regs->cooked_read (regno++, tmpbuf);
7929           memcpy (valbuf, tmpbuf,
7930                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
7931           len -= INT_REGISTER_SIZE;
7932           valbuf += INT_REGISTER_SIZE;
7933         }
7934     }
7935 }
7936
7937
7938 /* Will a function return an aggregate type in memory or in a
7939    register?  Return 0 if an aggregate type can be returned in a
7940    register, 1 if it must be returned in memory.  */
7941
7942 static int
7943 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7944 {
7945   enum type_code code;
7946
7947   type = check_typedef (type);
7948
7949   /* Simple, non-aggregate types (ie not including vectors and
7950      complex) are always returned in a register (or registers).  */
7951   code = TYPE_CODE (type);
7952   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7953       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7954     return 0;
7955
7956   if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
7957     {
7958       /* Vector values should be returned using ARM registers if they
7959          are not over 16 bytes.  */
7960       return (TYPE_LENGTH (type) > 16);
7961     }
7962
7963   if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
7964     {
7965       /* The AAPCS says all aggregates not larger than a word are returned
7966          in a register.  */
7967       if (TYPE_LENGTH (type) <= INT_REGISTER_SIZE)
7968         return 0;
7969
7970       return 1;
7971     }
7972   else
7973     {
7974       int nRc;
7975
7976       /* All aggregate types that won't fit in a register must be returned
7977          in memory.  */
7978       if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
7979         return 1;
7980
7981       /* In the ARM ABI, "integer" like aggregate types are returned in
7982          registers.  For an aggregate type to be integer like, its size
7983          must be less than or equal to INT_REGISTER_SIZE and the
7984          offset of each addressable subfield must be zero.  Note that bit
7985          fields are not addressable, and all addressable subfields of
7986          unions always start at offset zero.
7987
7988          This function is based on the behaviour of GCC 2.95.1.
7989          See: gcc/arm.c: arm_return_in_memory() for details.
7990
7991          Note: All versions of GCC before GCC 2.95.2 do not set up the
7992          parameters correctly for a function returning the following
7993          structure: struct { float f;}; This should be returned in memory,
7994          not a register.  Richard Earnshaw sent me a patch, but I do not
7995          know of any way to detect if a function like the above has been
7996          compiled with the correct calling convention.  */
7997
7998       /* Assume all other aggregate types can be returned in a register.
7999          Run a check for structures, unions and arrays.  */
8000       nRc = 0;
8001
8002       if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
8003         {
8004           int i;
8005           /* Need to check if this struct/union is "integer" like.  For
8006              this to be true, its size must be less than or equal to
8007              INT_REGISTER_SIZE and the offset of each addressable
8008              subfield must be zero.  Note that bit fields are not
8009              addressable, and unions always start at offset zero.  If any
8010              of the subfields is a floating point type, the struct/union
8011              cannot be an integer type.  */
8012
8013           /* For each field in the object, check:
8014              1) Is it FP? --> yes, nRc = 1;
8015              2) Is it addressable (bitpos != 0) and
8016              not packed (bitsize == 0)?
8017              --> yes, nRc = 1
8018           */
8019
8020           for (i = 0; i < TYPE_NFIELDS (type); i++)
8021             {
8022               enum type_code field_type_code;
8023
8024               field_type_code
8025                 = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
8026                                                              i)));
8027
8028               /* Is it a floating point type field?  */
8029               if (field_type_code == TYPE_CODE_FLT)
8030                 {
8031                   nRc = 1;
8032                   break;
8033                 }
8034
8035               /* If bitpos != 0, then we have to care about it.  */
8036               if (TYPE_FIELD_BITPOS (type, i) != 0)
8037                 {
8038                   /* Bitfields are not addressable.  If the field bitsize is 
8039                      zero, then the field is not packed.  Hence it cannot be
8040                      a bitfield or any other packed type.  */
8041                   if (TYPE_FIELD_BITSIZE (type, i) == 0)
8042                     {
8043                       nRc = 1;
8044                       break;
8045                     }
8046                 }
8047             }
8048         }
8049
8050       return nRc;
8051     }
8052 }
8053
8054 /* Write into appropriate registers a function return value of type
8055    TYPE, given in virtual format.  */
8056
8057 static void
8058 arm_store_return_value (struct type *type, struct regcache *regs,
8059                         const gdb_byte *valbuf)
8060 {
8061   struct gdbarch *gdbarch = regs->arch ();
8062   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8063
8064   if (TYPE_CODE (type) == TYPE_CODE_FLT)
8065     {
8066       gdb_byte buf[FP_REGISTER_SIZE];
8067
8068       switch (gdbarch_tdep (gdbarch)->fp_model)
8069         {
8070         case ARM_FLOAT_FPA:
8071
8072           target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8073           regs->cooked_write (ARM_F0_REGNUM, buf);
8074           break;
8075
8076         case ARM_FLOAT_SOFT_FPA:
8077         case ARM_FLOAT_SOFT_VFP:
8078           /* ARM_FLOAT_VFP can arise if this is a variadic function so
8079              not using the VFP ABI code.  */
8080         case ARM_FLOAT_VFP:
8081           regs->cooked_write (ARM_A1_REGNUM, valbuf);
8082           if (TYPE_LENGTH (type) > 4)
8083             regs->cooked_write (ARM_A1_REGNUM + 1, valbuf + INT_REGISTER_SIZE);
8084           break;
8085
8086         default:
8087           internal_error (__FILE__, __LINE__,
8088                           _("arm_store_return_value: Floating "
8089                             "point model not supported"));
8090           break;
8091         }
8092     }
8093   else if (TYPE_CODE (type) == TYPE_CODE_INT
8094            || TYPE_CODE (type) == TYPE_CODE_CHAR
8095            || TYPE_CODE (type) == TYPE_CODE_BOOL
8096            || TYPE_CODE (type) == TYPE_CODE_PTR
8097            || TYPE_IS_REFERENCE (type)
8098            || TYPE_CODE (type) == TYPE_CODE_ENUM)
8099     {
8100       if (TYPE_LENGTH (type) <= 4)
8101         {
8102           /* Values of one word or less are zero/sign-extended and
8103              returned in r0.  */
8104           bfd_byte tmpbuf[INT_REGISTER_SIZE];
8105           LONGEST val = unpack_long (type, valbuf);
8106
8107           store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
8108           regs->cooked_write (ARM_A1_REGNUM, tmpbuf);
8109         }
8110       else
8111         {
8112           /* Integral values greater than one word are stored in consecutive
8113              registers starting with r0.  This will always be a multiple of
8114              the regiser size.  */
8115           int len = TYPE_LENGTH (type);
8116           int regno = ARM_A1_REGNUM;
8117
8118           while (len > 0)
8119             {
8120               regs->cooked_write (regno++, valbuf);
8121               len -= INT_REGISTER_SIZE;
8122               valbuf += INT_REGISTER_SIZE;
8123             }
8124         }
8125     }
8126   else
8127     {
8128       /* For a structure or union the behaviour is as if the value had
8129          been stored to word-aligned memory and then loaded into 
8130          registers with 32-bit load instruction(s).  */
8131       int len = TYPE_LENGTH (type);
8132       int regno = ARM_A1_REGNUM;
8133       bfd_byte tmpbuf[INT_REGISTER_SIZE];
8134
8135       while (len > 0)
8136         {
8137           memcpy (tmpbuf, valbuf,
8138                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8139           regs->cooked_write (regno++, tmpbuf);
8140           len -= INT_REGISTER_SIZE;
8141           valbuf += INT_REGISTER_SIZE;
8142         }
8143     }
8144 }
8145
8146
8147 /* Handle function return values.  */
8148
8149 static enum return_value_convention
8150 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8151                   struct type *valtype, struct regcache *regcache,
8152                   gdb_byte *readbuf, const gdb_byte *writebuf)
8153 {
8154   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8155   struct type *func_type = function ? value_type (function) : NULL;
8156   enum arm_vfp_cprc_base_type vfp_base_type;
8157   int vfp_base_count;
8158
8159   if (arm_vfp_abi_for_function (gdbarch, func_type)
8160       && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8161     {
8162       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8163       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8164       int i;
8165       for (i = 0; i < vfp_base_count; i++)
8166         {
8167           if (reg_char == 'q')
8168             {
8169               if (writebuf)
8170                 arm_neon_quad_write (gdbarch, regcache, i,
8171                                      writebuf + i * unit_length);
8172
8173               if (readbuf)
8174                 arm_neon_quad_read (gdbarch, regcache, i,
8175                                     readbuf + i * unit_length);
8176             }
8177           else
8178             {
8179               char name_buf[4];
8180               int regnum;
8181
8182               xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8183               regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8184                                                     strlen (name_buf));
8185               if (writebuf)
8186                 regcache->cooked_write (regnum, writebuf + i * unit_length);
8187               if (readbuf)
8188                 regcache->cooked_read (regnum, readbuf + i * unit_length);
8189             }
8190         }
8191       return RETURN_VALUE_REGISTER_CONVENTION;
8192     }
8193
8194   if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
8195       || TYPE_CODE (valtype) == TYPE_CODE_UNION
8196       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
8197     {
8198       if (tdep->struct_return == pcc_struct_return
8199           || arm_return_in_memory (gdbarch, valtype))
8200         return RETURN_VALUE_STRUCT_CONVENTION;
8201     }
8202   else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
8203     {
8204       if (arm_return_in_memory (gdbarch, valtype))
8205         return RETURN_VALUE_STRUCT_CONVENTION;
8206     }
8207
8208   if (writebuf)
8209     arm_store_return_value (valtype, regcache, writebuf);
8210
8211   if (readbuf)
8212     arm_extract_return_value (valtype, regcache, readbuf);
8213
8214   return RETURN_VALUE_REGISTER_CONVENTION;
8215 }
8216
8217
8218 static int
8219 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8220 {
8221   struct gdbarch *gdbarch = get_frame_arch (frame);
8222   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8223   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8224   CORE_ADDR jb_addr;
8225   gdb_byte buf[INT_REGISTER_SIZE];
8226   
8227   jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8228
8229   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8230                           INT_REGISTER_SIZE))
8231     return 0;
8232
8233   *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
8234   return 1;
8235 }
8236
8237 /* Recognize GCC and GNU ld's trampolines.  If we are in a trampoline,
8238    return the target PC.  Otherwise return 0.  */
8239
8240 CORE_ADDR
8241 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8242 {
8243   const char *name;
8244   int namelen;
8245   CORE_ADDR start_addr;
8246
8247   /* Find the starting address and name of the function containing the PC.  */
8248   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8249     {
8250       /* Trampoline 'bx reg' doesn't belong to any functions.  Do the
8251          check here.  */
8252       start_addr = arm_skip_bx_reg (frame, pc);
8253       if (start_addr != 0)
8254         return start_addr;
8255
8256       return 0;
8257     }
8258
8259   /* If PC is in a Thumb call or return stub, return the address of the
8260      target PC, which is in a register.  The thunk functions are called
8261      _call_via_xx, where x is the register name.  The possible names
8262      are r0-r9, sl, fp, ip, sp, and lr.  ARM RealView has similar
8263      functions, named __ARM_call_via_r[0-7].  */
8264   if (startswith (name, "_call_via_")
8265       || startswith (name, "__ARM_call_via_"))
8266     {
8267       /* Use the name suffix to determine which register contains the
8268          target PC.  */
8269       static const char *table[15] =
8270       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8271        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8272       };
8273       int regno;
8274       int offset = strlen (name) - 2;
8275
8276       for (regno = 0; regno <= 14; regno++)
8277         if (strcmp (&name[offset], table[regno]) == 0)
8278           return get_frame_register_unsigned (frame, regno);
8279     }
8280
8281   /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8282      non-interworking calls to foo.  We could decode the stubs
8283      to find the target but it's easier to use the symbol table.  */
8284   namelen = strlen (name);
8285   if (name[0] == '_' && name[1] == '_'
8286       && ((namelen > 2 + strlen ("_from_thumb")
8287            && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8288           || (namelen > 2 + strlen ("_from_arm")
8289               && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8290     {
8291       char *target_name;
8292       int target_len = namelen - 2;
8293       struct bound_minimal_symbol minsym;
8294       struct objfile *objfile;
8295       struct obj_section *sec;
8296
8297       if (name[namelen - 1] == 'b')
8298         target_len -= strlen ("_from_thumb");
8299       else
8300         target_len -= strlen ("_from_arm");
8301
8302       target_name = (char *) alloca (target_len + 1);
8303       memcpy (target_name, name + 2, target_len);
8304       target_name[target_len] = '\0';
8305
8306       sec = find_pc_section (pc);
8307       objfile = (sec == NULL) ? NULL : sec->objfile;
8308       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8309       if (minsym.minsym != NULL)
8310         return BMSYMBOL_VALUE_ADDRESS (minsym);
8311       else
8312         return 0;
8313     }
8314
8315   return 0;                     /* not a stub */
8316 }
8317
8318 static void
8319 set_arm_command (const char *args, int from_tty)
8320 {
8321   printf_unfiltered (_("\
8322 \"set arm\" must be followed by an apporpriate subcommand.\n"));
8323   help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
8324 }
8325
8326 static void
8327 show_arm_command (const char *args, int from_tty)
8328 {
8329   cmd_show_list (showarmcmdlist, from_tty, "");
8330 }
8331
8332 static void
8333 arm_update_current_architecture (void)
8334 {
8335   struct gdbarch_info info;
8336
8337   /* If the current architecture is not ARM, we have nothing to do.  */
8338   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8339     return;
8340
8341   /* Update the architecture.  */
8342   gdbarch_info_init (&info);
8343
8344   if (!gdbarch_update_p (info))
8345     internal_error (__FILE__, __LINE__, _("could not update architecture"));
8346 }
8347
8348 static void
8349 set_fp_model_sfunc (const char *args, int from_tty,
8350                     struct cmd_list_element *c)
8351 {
8352   int fp_model;
8353
8354   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8355     if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8356       {
8357         arm_fp_model = (enum arm_float_model) fp_model;
8358         break;
8359       }
8360
8361   if (fp_model == ARM_FLOAT_LAST)
8362     internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8363                     current_fp_model);
8364
8365   arm_update_current_architecture ();
8366 }
8367
8368 static void
8369 show_fp_model (struct ui_file *file, int from_tty,
8370                struct cmd_list_element *c, const char *value)
8371 {
8372   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8373
8374   if (arm_fp_model == ARM_FLOAT_AUTO
8375       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8376     fprintf_filtered (file, _("\
8377 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8378                       fp_model_strings[tdep->fp_model]);
8379   else
8380     fprintf_filtered (file, _("\
8381 The current ARM floating point model is \"%s\".\n"),
8382                       fp_model_strings[arm_fp_model]);
8383 }
8384
8385 static void
8386 arm_set_abi (const char *args, int from_tty,
8387              struct cmd_list_element *c)
8388 {
8389   int arm_abi;
8390
8391   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8392     if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8393       {
8394         arm_abi_global = (enum arm_abi_kind) arm_abi;
8395         break;
8396       }
8397
8398   if (arm_abi == ARM_ABI_LAST)
8399     internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8400                     arm_abi_string);
8401
8402   arm_update_current_architecture ();
8403 }
8404
8405 static void
8406 arm_show_abi (struct ui_file *file, int from_tty,
8407              struct cmd_list_element *c, const char *value)
8408 {
8409   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8410
8411   if (arm_abi_global == ARM_ABI_AUTO
8412       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8413     fprintf_filtered (file, _("\
8414 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8415                       arm_abi_strings[tdep->arm_abi]);
8416   else
8417     fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8418                       arm_abi_string);
8419 }
8420
8421 static void
8422 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8423                         struct cmd_list_element *c, const char *value)
8424 {
8425   fprintf_filtered (file,
8426                     _("The current execution mode assumed "
8427                       "(when symbols are unavailable) is \"%s\".\n"),
8428                     arm_fallback_mode_string);
8429 }
8430
8431 static void
8432 arm_show_force_mode (struct ui_file *file, int from_tty,
8433                      struct cmd_list_element *c, const char *value)
8434 {
8435   fprintf_filtered (file,
8436                     _("The current execution mode assumed "
8437                       "(even when symbols are available) is \"%s\".\n"),
8438                     arm_force_mode_string);
8439 }
8440
8441 /* If the user changes the register disassembly style used for info
8442    register and other commands, we have to also switch the style used
8443    in opcodes for disassembly output.  This function is run in the "set
8444    arm disassembly" command, and does that.  */
8445
8446 static void
8447 set_disassembly_style_sfunc (const char *args, int from_tty,
8448                              struct cmd_list_element *c)
8449 {
8450   /* Convert the short style name into the long style name (eg, reg-names-*)
8451      before calling the generic set_disassembler_options() function.  */
8452   std::string long_name = std::string ("reg-names-") + disassembly_style;
8453   set_disassembler_options (&long_name[0]);
8454 }
8455
8456 static void
8457 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8458                               struct cmd_list_element *c, const char *value)
8459 {
8460   struct gdbarch *gdbarch = get_current_arch ();
8461   char *options = get_disassembler_options (gdbarch);
8462   const char *style = "";
8463   int len = 0;
8464   const char *opt;
8465
8466   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8467     if (CONST_STRNEQ (opt, "reg-names-"))
8468       {
8469         style = &opt[strlen ("reg-names-")];
8470         len = strcspn (style, ",");
8471       }
8472
8473   fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8474 }
8475 \f
8476 /* Return the ARM register name corresponding to register I.  */
8477 static const char *
8478 arm_register_name (struct gdbarch *gdbarch, int i)
8479 {
8480   const int num_regs = gdbarch_num_regs (gdbarch);
8481
8482   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8483       && i >= num_regs && i < num_regs + 32)
8484     {
8485       static const char *const vfp_pseudo_names[] = {
8486         "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8487         "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8488         "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8489         "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8490       };
8491
8492       return vfp_pseudo_names[i - num_regs];
8493     }
8494
8495   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8496       && i >= num_regs + 32 && i < num_regs + 32 + 16)
8497     {
8498       static const char *const neon_pseudo_names[] = {
8499         "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8500         "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8501       };
8502
8503       return neon_pseudo_names[i - num_regs - 32];
8504     }
8505
8506   if (i >= ARRAY_SIZE (arm_register_names))
8507     /* These registers are only supported on targets which supply
8508        an XML description.  */
8509     return "";
8510
8511   return arm_register_names[i];
8512 }
8513
8514 /* Test whether the coff symbol specific value corresponds to a Thumb
8515    function.  */
8516
8517 static int
8518 coff_sym_is_thumb (int val)
8519 {
8520   return (val == C_THUMBEXT
8521           || val == C_THUMBSTAT
8522           || val == C_THUMBEXTFUNC
8523           || val == C_THUMBSTATFUNC
8524           || val == C_THUMBLABEL);
8525 }
8526
8527 /* arm_coff_make_msymbol_special()
8528    arm_elf_make_msymbol_special()
8529    
8530    These functions test whether the COFF or ELF symbol corresponds to
8531    an address in thumb code, and set a "special" bit in a minimal
8532    symbol to indicate that it does.  */
8533    
8534 static void
8535 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8536 {
8537   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8538
8539   if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8540       == ST_BRANCH_TO_THUMB)
8541     MSYMBOL_SET_SPECIAL (msym);
8542 }
8543
8544 static void
8545 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8546 {
8547   if (coff_sym_is_thumb (val))
8548     MSYMBOL_SET_SPECIAL (msym);
8549 }
8550
8551 static void
8552 arm_objfile_data_free (struct objfile *objfile, void *arg)
8553 {
8554   struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
8555   unsigned int i;
8556
8557   for (i = 0; i < objfile->obfd->section_count; i++)
8558     VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
8559 }
8560
8561 static void
8562 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8563                            asymbol *sym)
8564 {
8565   const char *name = bfd_asymbol_name (sym);
8566   struct arm_per_objfile *data;
8567   VEC(arm_mapping_symbol_s) **map_p;
8568   struct arm_mapping_symbol new_map_sym;
8569
8570   gdb_assert (name[0] == '$');
8571   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8572     return;
8573
8574   data = (struct arm_per_objfile *) objfile_data (objfile,
8575                                                   arm_objfile_data_key);
8576   if (data == NULL)
8577     {
8578       data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
8579                              struct arm_per_objfile);
8580       set_objfile_data (objfile, arm_objfile_data_key, data);
8581       data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
8582                                            objfile->obfd->section_count,
8583                                            VEC(arm_mapping_symbol_s) *);
8584     }
8585   map_p = &data->section_maps[bfd_get_section (sym)->index];
8586
8587   new_map_sym.value = sym->value;
8588   new_map_sym.type = name[1];
8589
8590   /* Assume that most mapping symbols appear in order of increasing
8591      value.  If they were randomly distributed, it would be faster to
8592      always push here and then sort at first use.  */
8593   if (!VEC_empty (arm_mapping_symbol_s, *map_p))
8594     {
8595       struct arm_mapping_symbol *prev_map_sym;
8596
8597       prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
8598       if (prev_map_sym->value >= sym->value)
8599         {
8600           unsigned int idx;
8601           idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
8602                                  arm_compare_mapping_symbols);
8603           VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
8604           return;
8605         }
8606     }
8607
8608   VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
8609 }
8610
8611 static void
8612 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8613 {
8614   struct gdbarch *gdbarch = regcache->arch ();
8615   regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8616
8617   /* If necessary, set the T bit.  */
8618   if (arm_apcs_32)
8619     {
8620       ULONGEST val, t_bit;
8621       regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8622       t_bit = arm_psr_thumb_bit (gdbarch);
8623       if (arm_pc_is_thumb (gdbarch, pc))
8624         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8625                                         val | t_bit);
8626       else
8627         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8628                                         val & ~t_bit);
8629     }
8630 }
8631
8632 /* Read the contents of a NEON quad register, by reading from two
8633    double registers.  This is used to implement the quad pseudo
8634    registers, and for argument passing in case the quad registers are
8635    missing; vectors are passed in quad registers when using the VFP
8636    ABI, even if a NEON unit is not present.  REGNUM is the index of
8637    the quad register, in [0, 15].  */
8638
8639 static enum register_status
8640 arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8641                     int regnum, gdb_byte *buf)
8642 {
8643   char name_buf[4];
8644   gdb_byte reg_buf[8];
8645   int offset, double_regnum;
8646   enum register_status status;
8647
8648   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8649   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8650                                                strlen (name_buf));
8651
8652   /* d0 is always the least significant half of q0.  */
8653   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8654     offset = 8;
8655   else
8656     offset = 0;
8657
8658   status = regcache->raw_read (double_regnum, reg_buf);
8659   if (status != REG_VALID)
8660     return status;
8661   memcpy (buf + offset, reg_buf, 8);
8662
8663   offset = 8 - offset;
8664   status = regcache->raw_read (double_regnum + 1, reg_buf);
8665   if (status != REG_VALID)
8666     return status;
8667   memcpy (buf + offset, reg_buf, 8);
8668
8669   return REG_VALID;
8670 }
8671
8672 static enum register_status
8673 arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8674                  int regnum, gdb_byte *buf)
8675 {
8676   const int num_regs = gdbarch_num_regs (gdbarch);
8677   char name_buf[4];
8678   gdb_byte reg_buf[8];
8679   int offset, double_regnum;
8680
8681   gdb_assert (regnum >= num_regs);
8682   regnum -= num_regs;
8683
8684   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8685     /* Quad-precision register.  */
8686     return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8687   else
8688     {
8689       enum register_status status;
8690
8691       /* Single-precision register.  */
8692       gdb_assert (regnum < 32);
8693
8694       /* s0 is always the least significant half of d0.  */
8695       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8696         offset = (regnum & 1) ? 0 : 4;
8697       else
8698         offset = (regnum & 1) ? 4 : 0;
8699
8700       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8701       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8702                                                    strlen (name_buf));
8703
8704       status = regcache->raw_read (double_regnum, reg_buf);
8705       if (status == REG_VALID)
8706         memcpy (buf, reg_buf + offset, 4);
8707       return status;
8708     }
8709 }
8710
8711 /* Store the contents of BUF to a NEON quad register, by writing to
8712    two double registers.  This is used to implement the quad pseudo
8713    registers, and for argument passing in case the quad registers are
8714    missing; vectors are passed in quad registers when using the VFP
8715    ABI, even if a NEON unit is not present.  REGNUM is the index
8716    of the quad register, in [0, 15].  */
8717
8718 static void
8719 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8720                      int regnum, const gdb_byte *buf)
8721 {
8722   char name_buf[4];
8723   int offset, double_regnum;
8724
8725   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8726   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8727                                                strlen (name_buf));
8728
8729   /* d0 is always the least significant half of q0.  */
8730   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8731     offset = 8;
8732   else
8733     offset = 0;
8734
8735   regcache->raw_write (double_regnum, buf + offset);
8736   offset = 8 - offset;
8737   regcache->raw_write (double_regnum + 1, buf + offset);
8738 }
8739
8740 static void
8741 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8742                   int regnum, const gdb_byte *buf)
8743 {
8744   const int num_regs = gdbarch_num_regs (gdbarch);
8745   char name_buf[4];
8746   gdb_byte reg_buf[8];
8747   int offset, double_regnum;
8748
8749   gdb_assert (regnum >= num_regs);
8750   regnum -= num_regs;
8751
8752   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8753     /* Quad-precision register.  */
8754     arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8755   else
8756     {
8757       /* Single-precision register.  */
8758       gdb_assert (regnum < 32);
8759
8760       /* s0 is always the least significant half of d0.  */
8761       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8762         offset = (regnum & 1) ? 0 : 4;
8763       else
8764         offset = (regnum & 1) ? 4 : 0;
8765
8766       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8767       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8768                                                    strlen (name_buf));
8769
8770       regcache->raw_read (double_regnum, reg_buf);
8771       memcpy (reg_buf + offset, buf, 4);
8772       regcache->raw_write (double_regnum, reg_buf);
8773     }
8774 }
8775
8776 static struct value *
8777 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8778 {
8779   const int *reg_p = (const int *) baton;
8780   return value_of_register (*reg_p, frame);
8781 }
8782 \f
8783 static enum gdb_osabi
8784 arm_elf_osabi_sniffer (bfd *abfd)
8785 {
8786   unsigned int elfosabi;
8787   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8788
8789   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8790
8791   if (elfosabi == ELFOSABI_ARM)
8792     /* GNU tools use this value.  Check note sections in this case,
8793        as well.  */
8794     bfd_map_over_sections (abfd,
8795                            generic_elf_osabi_sniff_abi_tag_sections, 
8796                            &osabi);
8797
8798   /* Anything else will be handled by the generic ELF sniffer.  */
8799   return osabi;
8800 }
8801
8802 static int
8803 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8804                           struct reggroup *group)
8805 {
8806   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
8807      this, FPS register belongs to save_regroup, restore_reggroup, and
8808      all_reggroup, of course.  */
8809   if (regnum == ARM_FPS_REGNUM)
8810     return (group == float_reggroup
8811             || group == save_reggroup
8812             || group == restore_reggroup
8813             || group == all_reggroup);
8814   else
8815     return default_register_reggroup_p (gdbarch, regnum, group);
8816 }
8817
8818 \f
8819 /* For backward-compatibility we allow two 'g' packet lengths with
8820    the remote protocol depending on whether FPA registers are
8821    supplied.  M-profile targets do not have FPA registers, but some
8822    stubs already exist in the wild which use a 'g' packet which
8823    supplies them albeit with dummy values.  The packet format which
8824    includes FPA registers should be considered deprecated for
8825    M-profile targets.  */
8826
8827 static void
8828 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8829 {
8830   if (gdbarch_tdep (gdbarch)->is_m)
8831     {
8832       /* If we know from the executable this is an M-profile target,
8833          cater for remote targets whose register set layout is the
8834          same as the FPA layout.  */
8835       register_remote_g_packet_guess (gdbarch,
8836                                       /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
8837                                       (16 * INT_REGISTER_SIZE)
8838                                       + (8 * FP_REGISTER_SIZE)
8839                                       + (2 * INT_REGISTER_SIZE),
8840                                       tdesc_arm_with_m_fpa_layout);
8841
8842       /* The regular M-profile layout.  */
8843       register_remote_g_packet_guess (gdbarch,
8844                                       /* r0-r12,sp,lr,pc; xpsr */
8845                                       (16 * INT_REGISTER_SIZE)
8846                                       + INT_REGISTER_SIZE,
8847                                       tdesc_arm_with_m);
8848
8849       /* M-profile plus M4F VFP.  */
8850       register_remote_g_packet_guess (gdbarch,
8851                                       /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
8852                                       (16 * INT_REGISTER_SIZE)
8853                                       + (16 * VFP_REGISTER_SIZE)
8854                                       + (2 * INT_REGISTER_SIZE),
8855                                       tdesc_arm_with_m_vfp_d16);
8856     }
8857
8858   /* Otherwise we don't have a useful guess.  */
8859 }
8860
8861 /* Implement the code_of_frame_writable gdbarch method.  */
8862
8863 static int
8864 arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
8865 {
8866   if (gdbarch_tdep (gdbarch)->is_m
8867       && get_frame_type (frame) == SIGTRAMP_FRAME)
8868     {
8869       /* M-profile exception frames return to some magic PCs, where
8870          isn't writable at all.  */
8871       return 0;
8872     }
8873   else
8874     return 1;
8875 }
8876
8877 \f
8878 /* Initialize the current architecture based on INFO.  If possible,
8879    re-use an architecture from ARCHES, which is a list of
8880    architectures already created during this debugging session.
8881
8882    Called e.g. at program startup, when reading a core file, and when
8883    reading a binary file.  */
8884
8885 static struct gdbarch *
8886 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8887 {
8888   struct gdbarch_tdep *tdep;
8889   struct gdbarch *gdbarch;
8890   struct gdbarch_list *best_arch;
8891   enum arm_abi_kind arm_abi = arm_abi_global;
8892   enum arm_float_model fp_model = arm_fp_model;
8893   struct tdesc_arch_data *tdesc_data = NULL;
8894   int i, is_m = 0;
8895   int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
8896   int have_wmmx_registers = 0;
8897   int have_neon = 0;
8898   int have_fpa_registers = 1;
8899   const struct target_desc *tdesc = info.target_desc;
8900
8901   /* If we have an object to base this architecture on, try to determine
8902      its ABI.  */
8903
8904   if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8905     {
8906       int ei_osabi, e_flags;
8907
8908       switch (bfd_get_flavour (info.abfd))
8909         {
8910         case bfd_target_coff_flavour:
8911           /* Assume it's an old APCS-style ABI.  */
8912           /* XXX WinCE?  */
8913           arm_abi = ARM_ABI_APCS;
8914           break;
8915
8916         case bfd_target_elf_flavour:
8917           ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8918           e_flags = elf_elfheader (info.abfd)->e_flags;
8919
8920           if (ei_osabi == ELFOSABI_ARM)
8921             {
8922               /* GNU tools used to use this value, but do not for EABI
8923                  objects.  There's nowhere to tag an EABI version
8924                  anyway, so assume APCS.  */
8925               arm_abi = ARM_ABI_APCS;
8926             }
8927           else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8928             {
8929               int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8930
8931               switch (eabi_ver)
8932                 {
8933                 case EF_ARM_EABI_UNKNOWN:
8934                   /* Assume GNU tools.  */
8935                   arm_abi = ARM_ABI_APCS;
8936                   break;
8937
8938                 case EF_ARM_EABI_VER4:
8939                 case EF_ARM_EABI_VER5:
8940                   arm_abi = ARM_ABI_AAPCS;
8941                   /* EABI binaries default to VFP float ordering.
8942                      They may also contain build attributes that can
8943                      be used to identify if the VFP argument-passing
8944                      ABI is in use.  */
8945                   if (fp_model == ARM_FLOAT_AUTO)
8946                     {
8947 #ifdef HAVE_ELF
8948                       switch (bfd_elf_get_obj_attr_int (info.abfd,
8949                                                         OBJ_ATTR_PROC,
8950                                                         Tag_ABI_VFP_args))
8951                         {
8952                         case AEABI_VFP_args_base:
8953                           /* "The user intended FP parameter/result
8954                              passing to conform to AAPCS, base
8955                              variant".  */
8956                           fp_model = ARM_FLOAT_SOFT_VFP;
8957                           break;
8958                         case AEABI_VFP_args_vfp:
8959                           /* "The user intended FP parameter/result
8960                              passing to conform to AAPCS, VFP
8961                              variant".  */
8962                           fp_model = ARM_FLOAT_VFP;
8963                           break;
8964                         case AEABI_VFP_args_toolchain:
8965                           /* "The user intended FP parameter/result
8966                              passing to conform to tool chain-specific
8967                              conventions" - we don't know any such
8968                              conventions, so leave it as "auto".  */
8969                           break;
8970                         case AEABI_VFP_args_compatible:
8971                           /* "Code is compatible with both the base
8972                              and VFP variants; the user did not permit
8973                              non-variadic functions to pass FP
8974                              parameters/results" - leave it as
8975                              "auto".  */
8976                           break;
8977                         default:
8978                           /* Attribute value not mentioned in the
8979                              November 2012 ABI, so leave it as
8980                              "auto".  */
8981                           break;
8982                         }
8983 #else
8984                       fp_model = ARM_FLOAT_SOFT_VFP;
8985 #endif
8986                     }
8987                   break;
8988
8989                 default:
8990                   /* Leave it as "auto".  */
8991                   warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
8992                   break;
8993                 }
8994
8995 #ifdef HAVE_ELF
8996               /* Detect M-profile programs.  This only works if the
8997                  executable file includes build attributes; GCC does
8998                  copy them to the executable, but e.g. RealView does
8999                  not.  */
9000               int attr_arch
9001                 = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9002                                             Tag_CPU_arch);
9003               int attr_profile
9004                 = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9005                                             Tag_CPU_arch_profile);
9006
9007               /* GCC specifies the profile for v6-M; RealView only
9008                  specifies the profile for architectures starting with
9009                  V7 (as opposed to architectures with a tag
9010                  numerically greater than TAG_CPU_ARCH_V7).  */
9011               if (!tdesc_has_registers (tdesc)
9012                   && (attr_arch == TAG_CPU_ARCH_V6_M
9013                       || attr_arch == TAG_CPU_ARCH_V6S_M
9014                       || attr_profile == 'M'))
9015                 is_m = 1;
9016 #endif
9017             }
9018
9019           if (fp_model == ARM_FLOAT_AUTO)
9020             {
9021               switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
9022                 {
9023                 case 0:
9024                   /* Leave it as "auto".  Strictly speaking this case
9025                      means FPA, but almost nobody uses that now, and
9026                      many toolchains fail to set the appropriate bits
9027                      for the floating-point model they use.  */
9028                   break;
9029                 case EF_ARM_SOFT_FLOAT:
9030                   fp_model = ARM_FLOAT_SOFT_FPA;
9031                   break;
9032                 case EF_ARM_VFP_FLOAT:
9033                   fp_model = ARM_FLOAT_VFP;
9034                   break;
9035                 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9036                   fp_model = ARM_FLOAT_SOFT_VFP;
9037                   break;
9038                 }
9039             }
9040
9041           if (e_flags & EF_ARM_BE8)
9042             info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9043
9044           break;
9045
9046         default:
9047           /* Leave it as "auto".  */
9048           break;
9049         }
9050     }
9051
9052   /* Check any target description for validity.  */
9053   if (tdesc_has_registers (tdesc))
9054     {
9055       /* For most registers we require GDB's default names; but also allow
9056          the numeric names for sp / lr / pc, as a convenience.  */
9057       static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9058       static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9059       static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9060
9061       const struct tdesc_feature *feature;
9062       int valid_p;
9063
9064       feature = tdesc_find_feature (tdesc,
9065                                     "org.gnu.gdb.arm.core");
9066       if (feature == NULL)
9067         {
9068           feature = tdesc_find_feature (tdesc,
9069                                         "org.gnu.gdb.arm.m-profile");
9070           if (feature == NULL)
9071             return NULL;
9072           else
9073             is_m = 1;
9074         }
9075
9076       tdesc_data = tdesc_data_alloc ();
9077
9078       valid_p = 1;
9079       for (i = 0; i < ARM_SP_REGNUM; i++)
9080         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9081                                             arm_register_names[i]);
9082       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9083                                                   ARM_SP_REGNUM,
9084                                                   arm_sp_names);
9085       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9086                                                   ARM_LR_REGNUM,
9087                                                   arm_lr_names);
9088       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9089                                                   ARM_PC_REGNUM,
9090                                                   arm_pc_names);
9091       if (is_m)
9092         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9093                                             ARM_PS_REGNUM, "xpsr");
9094       else
9095         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9096                                             ARM_PS_REGNUM, "cpsr");
9097
9098       if (!valid_p)
9099         {
9100           tdesc_data_cleanup (tdesc_data);
9101           return NULL;
9102         }
9103
9104       feature = tdesc_find_feature (tdesc,
9105                                     "org.gnu.gdb.arm.fpa");
9106       if (feature != NULL)
9107         {
9108           valid_p = 1;
9109           for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9110             valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9111                                                 arm_register_names[i]);
9112           if (!valid_p)
9113             {
9114               tdesc_data_cleanup (tdesc_data);
9115               return NULL;
9116             }
9117         }
9118       else
9119         have_fpa_registers = 0;
9120
9121       feature = tdesc_find_feature (tdesc,
9122                                     "org.gnu.gdb.xscale.iwmmxt");
9123       if (feature != NULL)
9124         {
9125           static const char *const iwmmxt_names[] = {
9126             "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9127             "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9128             "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9129             "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9130           };
9131
9132           valid_p = 1;
9133           for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9134             valid_p
9135               &= tdesc_numbered_register (feature, tdesc_data, i,
9136                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9137
9138           /* Check for the control registers, but do not fail if they
9139              are missing.  */
9140           for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9141             tdesc_numbered_register (feature, tdesc_data, i,
9142                                      iwmmxt_names[i - ARM_WR0_REGNUM]);
9143
9144           for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9145             valid_p
9146               &= tdesc_numbered_register (feature, tdesc_data, i,
9147                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9148
9149           if (!valid_p)
9150             {
9151               tdesc_data_cleanup (tdesc_data);
9152               return NULL;
9153             }
9154
9155           have_wmmx_registers = 1;
9156         }
9157
9158       /* If we have a VFP unit, check whether the single precision registers
9159          are present.  If not, then we will synthesize them as pseudo
9160          registers.  */
9161       feature = tdesc_find_feature (tdesc,
9162                                     "org.gnu.gdb.arm.vfp");
9163       if (feature != NULL)
9164         {
9165           static const char *const vfp_double_names[] = {
9166             "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9167             "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9168             "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9169             "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9170           };
9171
9172           /* Require the double precision registers.  There must be either
9173              16 or 32.  */
9174           valid_p = 1;
9175           for (i = 0; i < 32; i++)
9176             {
9177               valid_p &= tdesc_numbered_register (feature, tdesc_data,
9178                                                   ARM_D0_REGNUM + i,
9179                                                   vfp_double_names[i]);
9180               if (!valid_p)
9181                 break;
9182             }
9183           if (!valid_p && i == 16)
9184             valid_p = 1;
9185
9186           /* Also require FPSCR.  */
9187           valid_p &= tdesc_numbered_register (feature, tdesc_data,
9188                                               ARM_FPSCR_REGNUM, "fpscr");
9189           if (!valid_p)
9190             {
9191               tdesc_data_cleanup (tdesc_data);
9192               return NULL;
9193             }
9194
9195           if (tdesc_unnumbered_register (feature, "s0") == 0)
9196             have_vfp_pseudos = 1;
9197
9198           vfp_register_count = i;
9199
9200           /* If we have VFP, also check for NEON.  The architecture allows
9201              NEON without VFP (integer vector operations only), but GDB
9202              does not support that.  */
9203           feature = tdesc_find_feature (tdesc,
9204                                         "org.gnu.gdb.arm.neon");
9205           if (feature != NULL)
9206             {
9207               /* NEON requires 32 double-precision registers.  */
9208               if (i != 32)
9209                 {
9210                   tdesc_data_cleanup (tdesc_data);
9211                   return NULL;
9212                 }
9213
9214               /* If there are quad registers defined by the stub, use
9215                  their type; otherwise (normally) provide them with
9216                  the default type.  */
9217               if (tdesc_unnumbered_register (feature, "q0") == 0)
9218                 have_neon_pseudos = 1;
9219
9220               have_neon = 1;
9221             }
9222         }
9223     }
9224
9225   /* If there is already a candidate, use it.  */
9226   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9227        best_arch != NULL;
9228        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9229     {
9230       if (arm_abi != ARM_ABI_AUTO
9231           && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9232         continue;
9233
9234       if (fp_model != ARM_FLOAT_AUTO
9235           && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9236         continue;
9237
9238       /* There are various other properties in tdep that we do not
9239          need to check here: those derived from a target description,
9240          since gdbarches with a different target description are
9241          automatically disqualified.  */
9242
9243       /* Do check is_m, though, since it might come from the binary.  */
9244       if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9245         continue;
9246
9247       /* Found a match.  */
9248       break;
9249     }
9250
9251   if (best_arch != NULL)
9252     {
9253       if (tdesc_data != NULL)
9254         tdesc_data_cleanup (tdesc_data);
9255       return best_arch->gdbarch;
9256     }
9257
9258   tdep = XCNEW (struct gdbarch_tdep);
9259   gdbarch = gdbarch_alloc (&info, tdep);
9260
9261   /* Record additional information about the architecture we are defining.
9262      These are gdbarch discriminators, like the OSABI.  */
9263   tdep->arm_abi = arm_abi;
9264   tdep->fp_model = fp_model;
9265   tdep->is_m = is_m;
9266   tdep->have_fpa_registers = have_fpa_registers;
9267   tdep->have_wmmx_registers = have_wmmx_registers;
9268   gdb_assert (vfp_register_count == 0
9269               || vfp_register_count == 16
9270               || vfp_register_count == 32);
9271   tdep->vfp_register_count = vfp_register_count;
9272   tdep->have_vfp_pseudos = have_vfp_pseudos;
9273   tdep->have_neon_pseudos = have_neon_pseudos;
9274   tdep->have_neon = have_neon;
9275
9276   arm_register_g_packet_guesses (gdbarch);
9277
9278   /* Breakpoints.  */
9279   switch (info.byte_order_for_code)
9280     {
9281     case BFD_ENDIAN_BIG:
9282       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9283       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9284       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9285       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9286
9287       break;
9288
9289     case BFD_ENDIAN_LITTLE:
9290       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9291       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9292       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9293       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9294
9295       break;
9296
9297     default:
9298       internal_error (__FILE__, __LINE__,
9299                       _("arm_gdbarch_init: bad byte order for float format"));
9300     }
9301
9302   /* On ARM targets char defaults to unsigned.  */
9303   set_gdbarch_char_signed (gdbarch, 0);
9304
9305   /* wchar_t is unsigned under the AAPCS.  */
9306   if (tdep->arm_abi == ARM_ABI_AAPCS)
9307     set_gdbarch_wchar_signed (gdbarch, 0);
9308   else
9309     set_gdbarch_wchar_signed (gdbarch, 1);
9310
9311   /* Note: for displaced stepping, this includes the breakpoint, and one word
9312      of additional scratch space.  This setting isn't used for anything beside
9313      displaced stepping at present.  */
9314   set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
9315
9316   /* This should be low enough for everything.  */
9317   tdep->lowest_pc = 0x20;
9318   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
9319
9320   /* The default, for both APCS and AAPCS, is to return small
9321      structures in registers.  */
9322   tdep->struct_return = reg_struct_return;
9323
9324   set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9325   set_gdbarch_frame_align (gdbarch, arm_frame_align);
9326
9327   if (is_m)
9328     set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9329
9330   set_gdbarch_write_pc (gdbarch, arm_write_pc);
9331
9332   frame_base_set_default (gdbarch, &arm_normal_base);
9333
9334   /* Address manipulation.  */
9335   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9336
9337   /* Advance PC across function entry code.  */
9338   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9339
9340   /* Detect whether PC is at a point where the stack has been destroyed.  */
9341   set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9342
9343   /* Skip trampolines.  */
9344   set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9345
9346   /* The stack grows downward.  */
9347   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9348
9349   /* Breakpoint manipulation.  */
9350   set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9351   set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9352   set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9353                                                   arm_breakpoint_kind_from_current_state);
9354
9355   /* Information about registers, etc.  */
9356   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9357   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9358   set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9359   set_gdbarch_register_type (gdbarch, arm_register_type);
9360   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9361
9362   /* This "info float" is FPA-specific.  Use the generic version if we
9363      do not have FPA.  */
9364   if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9365     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9366
9367   /* Internal <-> external register number maps.  */
9368   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9369   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9370
9371   set_gdbarch_register_name (gdbarch, arm_register_name);
9372
9373   /* Returning results.  */
9374   set_gdbarch_return_value (gdbarch, arm_return_value);
9375
9376   /* Disassembly.  */
9377   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9378
9379   /* Minsymbol frobbing.  */
9380   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9381   set_gdbarch_coff_make_msymbol_special (gdbarch,
9382                                          arm_coff_make_msymbol_special);
9383   set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9384
9385   /* Thumb-2 IT block support.  */
9386   set_gdbarch_adjust_breakpoint_address (gdbarch,
9387                                          arm_adjust_breakpoint_address);
9388
9389   /* Virtual tables.  */
9390   set_gdbarch_vbit_in_delta (gdbarch, 1);
9391
9392   /* Hook in the ABI-specific overrides, if they have been registered.  */
9393   gdbarch_init_osabi (info, gdbarch);
9394
9395   dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9396
9397   /* Add some default predicates.  */
9398   if (is_m)
9399     frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9400   frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9401   dwarf2_append_unwinders (gdbarch);
9402   frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9403   frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9404   frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9405
9406   /* Now we have tuned the configuration, set a few final things,
9407      based on what the OS ABI has told us.  */
9408
9409   /* If the ABI is not otherwise marked, assume the old GNU APCS.  EABI
9410      binaries are always marked.  */
9411   if (tdep->arm_abi == ARM_ABI_AUTO)
9412     tdep->arm_abi = ARM_ABI_APCS;
9413
9414   /* Watchpoints are not steppable.  */
9415   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9416
9417   /* We used to default to FPA for generic ARM, but almost nobody
9418      uses that now, and we now provide a way for the user to force
9419      the model.  So default to the most useful variant.  */
9420   if (tdep->fp_model == ARM_FLOAT_AUTO)
9421     tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9422
9423   if (tdep->jb_pc >= 0)
9424     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9425
9426   /* Floating point sizes and format.  */
9427   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9428   if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9429     {
9430       set_gdbarch_double_format
9431         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9432       set_gdbarch_long_double_format
9433         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9434     }
9435   else
9436     {
9437       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9438       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9439     }
9440
9441   if (have_vfp_pseudos)
9442     {
9443       /* NOTE: These are the only pseudo registers used by
9444          the ARM target at the moment.  If more are added, a
9445          little more care in numbering will be needed.  */
9446
9447       int num_pseudos = 32;
9448       if (have_neon_pseudos)
9449         num_pseudos += 16;
9450       set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9451       set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9452       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9453     }
9454
9455   if (tdesc_data)
9456     {
9457       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9458
9459       tdesc_use_registers (gdbarch, tdesc, tdesc_data);
9460
9461       /* Override tdesc_register_type to adjust the types of VFP
9462          registers for NEON.  */
9463       set_gdbarch_register_type (gdbarch, arm_register_type);
9464     }
9465
9466   /* Add standard register aliases.  We add aliases even for those
9467      nanes which are used by the current architecture - it's simpler,
9468      and does no harm, since nothing ever lists user registers.  */
9469   for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9470     user_reg_add (gdbarch, arm_register_aliases[i].name,
9471                   value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9472
9473   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9474   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9475
9476   return gdbarch;
9477 }
9478
9479 static void
9480 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9481 {
9482   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9483
9484   if (tdep == NULL)
9485     return;
9486
9487   fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
9488                       (unsigned long) tdep->lowest_pc);
9489 }
9490
9491 #if GDB_SELF_TEST
9492 namespace selftests
9493 {
9494 static void arm_record_test (void);
9495 }
9496 #endif
9497
9498 void
9499 _initialize_arm_tdep (void)
9500 {
9501   long length;
9502   int i, j;
9503   char regdesc[1024], *rdptr = regdesc;
9504   size_t rest = sizeof (regdesc);
9505
9506   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9507
9508   arm_objfile_data_key
9509     = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
9510
9511   /* Add ourselves to objfile event chain.  */
9512   gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
9513   arm_exidx_data_key
9514     = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
9515
9516   /* Register an ELF OS ABI sniffer for ARM binaries.  */
9517   gdbarch_register_osabi_sniffer (bfd_arch_arm,
9518                                   bfd_target_elf_flavour,
9519                                   arm_elf_osabi_sniffer);
9520
9521   /* Initialize the standard target descriptions.  */
9522   initialize_tdesc_arm_with_m ();
9523   initialize_tdesc_arm_with_m_fpa_layout ();
9524   initialize_tdesc_arm_with_m_vfp_d16 ();
9525   initialize_tdesc_arm_with_iwmmxt ();
9526   initialize_tdesc_arm_with_vfpv2 ();
9527   initialize_tdesc_arm_with_vfpv3 ();
9528   initialize_tdesc_arm_with_neon ();
9529
9530   /* Add root prefix command for all "set arm"/"show arm" commands.  */
9531   add_prefix_cmd ("arm", no_class, set_arm_command,
9532                   _("Various ARM-specific commands."),
9533                   &setarmcmdlist, "set arm ", 0, &setlist);
9534
9535   add_prefix_cmd ("arm", no_class, show_arm_command,
9536                   _("Various ARM-specific commands."),
9537                   &showarmcmdlist, "show arm ", 0, &showlist);
9538
9539
9540   arm_disassembler_options = xstrdup ("reg-names-std");
9541   const disasm_options_t *disasm_options
9542     = &disassembler_options_arm ()->options;
9543   int num_disassembly_styles = 0;
9544   for (i = 0; disasm_options->name[i] != NULL; i++)
9545     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9546       num_disassembly_styles++;
9547
9548   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
9549   valid_disassembly_styles = XNEWVEC (const char *,
9550                                       num_disassembly_styles + 1);
9551   for (i = j = 0; disasm_options->name[i] != NULL; i++)
9552     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9553       {
9554         size_t offset = strlen ("reg-names-");
9555         const char *style = disasm_options->name[i];
9556         valid_disassembly_styles[j++] = &style[offset];
9557         length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9558                            disasm_options->description[i]);
9559         rdptr += length;
9560         rest -= length;
9561       }
9562   /* Mark the end of valid options.  */
9563   valid_disassembly_styles[num_disassembly_styles] = NULL;
9564
9565   /* Create the help text.  */
9566   std::string helptext = string_printf ("%s%s%s",
9567                                         _("The valid values are:\n"),
9568                                         regdesc,
9569                                         _("The default is \"std\"."));
9570
9571   add_setshow_enum_cmd("disassembler", no_class,
9572                        valid_disassembly_styles, &disassembly_style,
9573                        _("Set the disassembly style."),
9574                        _("Show the disassembly style."),
9575                        helptext.c_str (),
9576                        set_disassembly_style_sfunc,
9577                        show_disassembly_style_sfunc,
9578                        &setarmcmdlist, &showarmcmdlist);
9579
9580   add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9581                            _("Set usage of ARM 32-bit mode."),
9582                            _("Show usage of ARM 32-bit mode."),
9583                            _("When off, a 26-bit PC will be used."),
9584                            NULL,
9585                            NULL, /* FIXME: i18n: Usage of ARM 32-bit
9586                                     mode is %s.  */
9587                            &setarmcmdlist, &showarmcmdlist);
9588
9589   /* Add a command to allow the user to force the FPU model.  */
9590   add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9591                         _("Set the floating point type."),
9592                         _("Show the floating point type."),
9593                         _("auto - Determine the FP typefrom the OS-ABI.\n\
9594 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9595 fpa - FPA co-processor (GCC compiled).\n\
9596 softvfp - Software FP with pure-endian doubles.\n\
9597 vfp - VFP co-processor."),
9598                         set_fp_model_sfunc, show_fp_model,
9599                         &setarmcmdlist, &showarmcmdlist);
9600
9601   /* Add a command to allow the user to force the ABI.  */
9602   add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9603                         _("Set the ABI."),
9604                         _("Show the ABI."),
9605                         NULL, arm_set_abi, arm_show_abi,
9606                         &setarmcmdlist, &showarmcmdlist);
9607
9608   /* Add two commands to allow the user to force the assumed
9609      execution mode.  */
9610   add_setshow_enum_cmd ("fallback-mode", class_support,
9611                         arm_mode_strings, &arm_fallback_mode_string,
9612                         _("Set the mode assumed when symbols are unavailable."),
9613                         _("Show the mode assumed when symbols are unavailable."),
9614                         NULL, NULL, arm_show_fallback_mode,
9615                         &setarmcmdlist, &showarmcmdlist);
9616   add_setshow_enum_cmd ("force-mode", class_support,
9617                         arm_mode_strings, &arm_force_mode_string,
9618                         _("Set the mode assumed even when symbols are available."),
9619                         _("Show the mode assumed even when symbols are available."),
9620                         NULL, NULL, arm_show_force_mode,
9621                         &setarmcmdlist, &showarmcmdlist);
9622
9623   /* Debugging flag.  */
9624   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9625                            _("Set ARM debugging."),
9626                            _("Show ARM debugging."),
9627                            _("When on, arm-specific debugging is enabled."),
9628                            NULL,
9629                            NULL, /* FIXME: i18n: "ARM debugging is %s.  */
9630                            &setdebuglist, &showdebuglist);
9631
9632 #if GDB_SELF_TEST
9633   selftests::register_test ("arm-record", selftests::arm_record_test);
9634 #endif
9635
9636 }
9637
9638 /* ARM-reversible process record data structures.  */
9639
9640 #define ARM_INSN_SIZE_BYTES 4    
9641 #define THUMB_INSN_SIZE_BYTES 2
9642 #define THUMB2_INSN_SIZE_BYTES 4
9643
9644
9645 /* Position of the bit within a 32-bit ARM instruction
9646    that defines whether the instruction is a load or store.  */
9647 #define INSN_S_L_BIT_NUM 20
9648
9649 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9650         do  \
9651           { \
9652             unsigned int reg_len = LENGTH; \
9653             if (reg_len) \
9654               { \
9655                 REGS = XNEWVEC (uint32_t, reg_len); \
9656                 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9657               } \
9658           } \
9659         while (0)
9660
9661 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9662         do  \
9663           { \
9664             unsigned int mem_len = LENGTH; \
9665             if (mem_len) \
9666             { \
9667               MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
9668               memcpy(&MEMS->len, &RECORD_BUF[0], \
9669                      sizeof(struct arm_mem_r) * LENGTH); \
9670             } \
9671           } \
9672           while (0)
9673
9674 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
9675 #define INSN_RECORDED(ARM_RECORD) \
9676         (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9677
9678 /* ARM memory record structure.  */
9679 struct arm_mem_r
9680 {
9681   uint32_t len;    /* Record length.  */
9682   uint32_t addr;   /* Memory address.  */
9683 };
9684
9685 /* ARM instruction record contains opcode of current insn
9686    and execution state (before entry to decode_insn()),
9687    contains list of to-be-modified registers and
9688    memory blocks (on return from decode_insn()).  */
9689
9690 typedef struct insn_decode_record_t
9691 {
9692   struct gdbarch *gdbarch;
9693   struct regcache *regcache;
9694   CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
9695   uint32_t arm_insn;            /* Should accommodate thumb.  */
9696   uint32_t cond;                /* Condition code.  */
9697   uint32_t opcode;              /* Insn opcode.  */
9698   uint32_t decode;              /* Insn decode bits.  */
9699   uint32_t mem_rec_count;       /* No of mem records.  */
9700   uint32_t reg_rec_count;       /* No of reg records.  */
9701   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
9702   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
9703 } insn_decode_record;
9704
9705
9706 /* Checks ARM SBZ and SBO mandatory fields.  */
9707
9708 static int
9709 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9710 {
9711   uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9712
9713   if (!len)
9714     return 1;
9715
9716   if (!sbo)
9717     ones = ~ones;
9718
9719   while (ones)
9720     {
9721       if (!(ones & sbo))
9722         {
9723           return 0;
9724         }
9725       ones = ones >> 1;
9726     }
9727   return 1;
9728 }
9729
9730 enum arm_record_result
9731 {
9732   ARM_RECORD_SUCCESS = 0,
9733   ARM_RECORD_FAILURE = 1
9734 };
9735
9736 typedef enum
9737 {
9738   ARM_RECORD_STRH=1,
9739   ARM_RECORD_STRD
9740 } arm_record_strx_t;
9741
9742 typedef enum
9743 {
9744   ARM_RECORD=1,
9745   THUMB_RECORD,
9746   THUMB2_RECORD
9747 } record_type_t;
9748
9749
9750 static int
9751 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
9752                  uint32_t *record_buf_mem, arm_record_strx_t str_type)
9753 {
9754
9755   struct regcache *reg_cache = arm_insn_r->regcache;
9756   ULONGEST u_regval[2]= {0};
9757
9758   uint32_t reg_src1 = 0, reg_src2 = 0;
9759   uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9760
9761   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9762   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9763
9764   if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9765     {
9766       /* 1) Handle misc store, immediate offset.  */
9767       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9768       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9769       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9770       regcache_raw_read_unsigned (reg_cache, reg_src1,
9771                                   &u_regval[0]);
9772       if (ARM_PC_REGNUM == reg_src1)
9773         {
9774           /* If R15 was used as Rn, hence current PC+8.  */
9775           u_regval[0] = u_regval[0] + 8;
9776         }
9777       offset_8 = (immed_high << 4) | immed_low;
9778       /* Calculate target store address.  */
9779       if (14 == arm_insn_r->opcode)
9780         {
9781           tgt_mem_addr = u_regval[0] + offset_8;
9782         }
9783       else
9784         {
9785           tgt_mem_addr = u_regval[0] - offset_8;
9786         }
9787       if (ARM_RECORD_STRH == str_type)
9788         {
9789           record_buf_mem[0] = 2;
9790           record_buf_mem[1] = tgt_mem_addr;
9791           arm_insn_r->mem_rec_count = 1;
9792         }
9793       else if (ARM_RECORD_STRD == str_type)
9794         {
9795           record_buf_mem[0] = 4;
9796           record_buf_mem[1] = tgt_mem_addr;
9797           record_buf_mem[2] = 4;
9798           record_buf_mem[3] = tgt_mem_addr + 4;
9799           arm_insn_r->mem_rec_count = 2;
9800         }
9801     }
9802   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9803     {
9804       /* 2) Store, register offset.  */
9805       /* Get Rm.  */
9806       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9807       /* Get Rn.  */
9808       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9809       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9810       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9811       if (15 == reg_src2)
9812         {
9813           /* If R15 was used as Rn, hence current PC+8.  */
9814           u_regval[0] = u_regval[0] + 8;
9815         }
9816       /* Calculate target store address, Rn +/- Rm, register offset.  */
9817       if (12 == arm_insn_r->opcode)
9818         {
9819           tgt_mem_addr = u_regval[0] + u_regval[1];
9820         }
9821       else
9822         {
9823           tgt_mem_addr = u_regval[1] - u_regval[0];
9824         }
9825       if (ARM_RECORD_STRH == str_type)
9826         {
9827           record_buf_mem[0] = 2;
9828           record_buf_mem[1] = tgt_mem_addr;
9829           arm_insn_r->mem_rec_count = 1;
9830         }
9831       else if (ARM_RECORD_STRD == str_type)
9832         {
9833           record_buf_mem[0] = 4;
9834           record_buf_mem[1] = tgt_mem_addr;
9835           record_buf_mem[2] = 4;
9836           record_buf_mem[3] = tgt_mem_addr + 4;
9837           arm_insn_r->mem_rec_count = 2;
9838         }
9839     }
9840   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9841            || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
9842     {
9843       /* 3) Store, immediate pre-indexed.  */
9844       /* 5) Store, immediate post-indexed.  */
9845       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9846       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9847       offset_8 = (immed_high << 4) | immed_low;
9848       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9849       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9850       /* Calculate target store address, Rn +/- Rm, register offset.  */
9851       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9852         {
9853           tgt_mem_addr = u_regval[0] + offset_8;
9854         }
9855       else
9856         {
9857           tgt_mem_addr = u_regval[0] - offset_8;
9858         }
9859       if (ARM_RECORD_STRH == str_type)
9860         {
9861           record_buf_mem[0] = 2;
9862           record_buf_mem[1] = tgt_mem_addr;
9863           arm_insn_r->mem_rec_count = 1;
9864         }
9865       else if (ARM_RECORD_STRD == str_type)
9866         {
9867           record_buf_mem[0] = 4;
9868           record_buf_mem[1] = tgt_mem_addr;
9869           record_buf_mem[2] = 4;
9870           record_buf_mem[3] = tgt_mem_addr + 4;
9871           arm_insn_r->mem_rec_count = 2;
9872         }
9873       /* Record Rn also as it changes.  */
9874       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9875       arm_insn_r->reg_rec_count = 1;
9876     }
9877   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9878            || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9879     {
9880       /* 4) Store, register pre-indexed.  */
9881       /* 6) Store, register post -indexed.  */
9882       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9883       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9884       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9885       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9886       /* Calculate target store address, Rn +/- Rm, register offset.  */
9887       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9888         {
9889           tgt_mem_addr = u_regval[0] + u_regval[1];
9890         }
9891       else
9892         {
9893           tgt_mem_addr = u_regval[1] - u_regval[0];
9894         }
9895       if (ARM_RECORD_STRH == str_type)
9896         {
9897           record_buf_mem[0] = 2;
9898           record_buf_mem[1] = tgt_mem_addr;
9899           arm_insn_r->mem_rec_count = 1;
9900         }
9901       else if (ARM_RECORD_STRD == str_type)
9902         {
9903           record_buf_mem[0] = 4;
9904           record_buf_mem[1] = tgt_mem_addr;
9905           record_buf_mem[2] = 4;
9906           record_buf_mem[3] = tgt_mem_addr + 4;
9907           arm_insn_r->mem_rec_count = 2;
9908         }
9909       /* Record Rn also as it changes.  */
9910       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9911       arm_insn_r->reg_rec_count = 1;
9912     }
9913   return 0;
9914 }
9915
9916 /* Handling ARM extension space insns.  */
9917
9918 static int
9919 arm_record_extension_space (insn_decode_record *arm_insn_r)
9920 {
9921   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
9922   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9923   uint32_t record_buf[8], record_buf_mem[8];
9924   uint32_t reg_src1 = 0;
9925   struct regcache *reg_cache = arm_insn_r->regcache;
9926   ULONGEST u_regval = 0;
9927
9928   gdb_assert (!INSN_RECORDED(arm_insn_r));
9929   /* Handle unconditional insn extension space.  */
9930
9931   opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9932   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9933   if (arm_insn_r->cond)
9934     {
9935       /* PLD has no affect on architectural state, it just affects
9936          the caches.  */
9937       if (5 == ((opcode1 & 0xE0) >> 5))
9938         {
9939           /* BLX(1) */
9940           record_buf[0] = ARM_PS_REGNUM;
9941           record_buf[1] = ARM_LR_REGNUM;
9942           arm_insn_r->reg_rec_count = 2;
9943         }
9944       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
9945     }
9946
9947
9948   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9949   if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9950     {
9951       ret = -1;
9952       /* Undefined instruction on ARM V5; need to handle if later 
9953          versions define it.  */
9954     }
9955
9956   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
9957   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9958   insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
9959
9960   /* Handle arithmetic insn extension space.  */
9961   if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
9962       && !INSN_RECORDED(arm_insn_r))
9963     {
9964       /* Handle MLA(S) and MUL(S).  */
9965       if (in_inclusive_range (insn_op1, 0U, 3U))
9966       {
9967         record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
9968         record_buf[1] = ARM_PS_REGNUM;
9969         arm_insn_r->reg_rec_count = 2;
9970       }
9971       else if (in_inclusive_range (insn_op1, 4U, 15U))
9972       {
9973         /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
9974         record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
9975         record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
9976         record_buf[2] = ARM_PS_REGNUM;
9977         arm_insn_r->reg_rec_count = 3;
9978       }
9979     }
9980
9981   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
9982   opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
9983   insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
9984
9985   /* Handle control insn extension space.  */
9986
9987   if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
9988       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
9989     {
9990       if (!bit (arm_insn_r->arm_insn,25))
9991         {
9992           if (!bits (arm_insn_r->arm_insn, 4, 7))
9993             {
9994               if ((0 == insn_op1) || (2 == insn_op1))
9995                 {
9996                   /* MRS.  */
9997                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
9998                   arm_insn_r->reg_rec_count = 1;
9999                 }
10000               else if (1 == insn_op1)
10001                 {
10002                   /* CSPR is going to be changed.  */
10003                   record_buf[0] = ARM_PS_REGNUM;
10004                   arm_insn_r->reg_rec_count = 1;
10005                 }
10006               else if (3 == insn_op1)
10007                 {
10008                   /* SPSR is going to be changed.  */
10009                   /* We need to get SPSR value, which is yet to be done.  */
10010                   return -1;
10011                 }
10012             }
10013           else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
10014             {
10015               if (1 == insn_op1)
10016                 {
10017                   /* BX.  */
10018                   record_buf[0] = ARM_PS_REGNUM;
10019                   arm_insn_r->reg_rec_count = 1;
10020                 }
10021               else if (3 == insn_op1)
10022                 {
10023                   /* CLZ.  */
10024                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10025                   arm_insn_r->reg_rec_count = 1;
10026                 }
10027             }
10028           else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
10029             {
10030               /* BLX.  */
10031               record_buf[0] = ARM_PS_REGNUM;
10032               record_buf[1] = ARM_LR_REGNUM;
10033               arm_insn_r->reg_rec_count = 2;
10034             }
10035           else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10036             {
10037               /* QADD, QSUB, QDADD, QDSUB */
10038               record_buf[0] = ARM_PS_REGNUM;
10039               record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10040               arm_insn_r->reg_rec_count = 2;
10041             }
10042           else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10043             {
10044               /* BKPT.  */
10045               record_buf[0] = ARM_PS_REGNUM;
10046               record_buf[1] = ARM_LR_REGNUM;
10047               arm_insn_r->reg_rec_count = 2;
10048
10049               /* Save SPSR also;how?  */
10050               return -1;
10051             }
10052           else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
10053                   || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10054                   || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10055                   || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10056                  )
10057             {
10058               if (0 == insn_op1 || 1 == insn_op1)
10059                 {
10060                   /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
10061                   /* We dont do optimization for SMULW<y> where we
10062                      need only Rd.  */
10063                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10064                   record_buf[1] = ARM_PS_REGNUM;
10065                   arm_insn_r->reg_rec_count = 2;
10066                 }
10067               else if (2 == insn_op1)
10068                 {
10069                   /* SMLAL<x><y>.  */
10070                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10071                   record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10072                   arm_insn_r->reg_rec_count = 2;
10073                 }
10074               else if (3 == insn_op1)
10075                 {
10076                   /* SMUL<x><y>.  */
10077                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10078                   arm_insn_r->reg_rec_count = 1;
10079                 }
10080             }
10081         }
10082       else
10083         {
10084           /* MSR : immediate form.  */
10085           if (1 == insn_op1)
10086             {
10087               /* CSPR is going to be changed.  */
10088               record_buf[0] = ARM_PS_REGNUM;
10089               arm_insn_r->reg_rec_count = 1;
10090             }
10091           else if (3 == insn_op1)
10092             {
10093               /* SPSR is going to be changed.  */
10094               /* we need to get SPSR value, which is yet to be done  */
10095               return -1;
10096             }
10097         }
10098     }
10099
10100   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10101   opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10102   insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10103
10104   /* Handle load/store insn extension space.  */
10105
10106   if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
10107       && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10108       && !INSN_RECORDED(arm_insn_r))
10109     {
10110       /* SWP/SWPB.  */
10111       if (0 == insn_op1)
10112         {
10113           /* These insn, changes register and memory as well.  */
10114           /* SWP or SWPB insn.  */
10115           /* Get memory address given by Rn.  */
10116           reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10117           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10118           /* SWP insn ?, swaps word.  */
10119           if (8 == arm_insn_r->opcode)
10120             {
10121               record_buf_mem[0] = 4;
10122             }
10123           else
10124             {
10125               /* SWPB insn, swaps only byte.  */
10126               record_buf_mem[0] = 1;
10127             }
10128           record_buf_mem[1] = u_regval;
10129           arm_insn_r->mem_rec_count = 1;
10130           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10131           arm_insn_r->reg_rec_count = 1;
10132         }
10133       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10134         {
10135           /* STRH.  */
10136           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10137                           ARM_RECORD_STRH);
10138         }
10139       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10140         {
10141           /* LDRD.  */
10142           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10143           record_buf[1] = record_buf[0] + 1;
10144           arm_insn_r->reg_rec_count = 2;
10145         }
10146       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10147         {
10148           /* STRD.  */
10149           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10150                         ARM_RECORD_STRD);
10151         }
10152       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10153         {
10154           /* LDRH, LDRSB, LDRSH.  */
10155           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10156           arm_insn_r->reg_rec_count = 1;
10157         }
10158
10159     }
10160
10161   opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10162   if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10163       && !INSN_RECORDED(arm_insn_r))
10164     {
10165       ret = -1;
10166       /* Handle coprocessor insn extension space.  */
10167     }
10168
10169   /* To be done for ARMv5 and later; as of now we return -1.  */
10170   if (-1 == ret)
10171     return ret;
10172
10173   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10174   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10175
10176   return ret;
10177 }
10178
10179 /* Handling opcode 000 insns.  */
10180
10181 static int
10182 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10183 {
10184   struct regcache *reg_cache = arm_insn_r->regcache;
10185   uint32_t record_buf[8], record_buf_mem[8];
10186   ULONGEST u_regval[2] = {0};
10187
10188   uint32_t reg_src1 = 0;
10189   uint32_t opcode1 = 0;
10190
10191   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10192   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10193   opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10194
10195   if (!((opcode1 & 0x19) == 0x10))
10196     {
10197       /* Data-processing (register) and Data-processing (register-shifted
10198          register */
10199       /* Out of 11 shifter operands mode, all the insn modifies destination
10200          register, which is specified by 13-16 decode.  */
10201       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10202       record_buf[1] = ARM_PS_REGNUM;
10203       arm_insn_r->reg_rec_count = 2;
10204     }
10205   else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10206     {
10207       /* Miscellaneous instructions */
10208
10209       if (3 == arm_insn_r->decode && 0x12 == opcode1
10210           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10211         {
10212           /* Handle BLX, branch and link/exchange.  */
10213           if (9 == arm_insn_r->opcode)
10214             {
10215               /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10216                  and R14 stores the return address.  */
10217               record_buf[0] = ARM_PS_REGNUM;
10218               record_buf[1] = ARM_LR_REGNUM;
10219               arm_insn_r->reg_rec_count = 2;
10220             }
10221         }
10222       else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10223         {
10224           /* Handle enhanced software breakpoint insn, BKPT.  */
10225           /* CPSR is changed to be executed in ARM state,  disabling normal
10226              interrupts, entering abort mode.  */
10227           /* According to high vector configuration PC is set.  */
10228           /* user hit breakpoint and type reverse, in
10229              that case, we need to go back with previous CPSR and
10230              Program Counter.  */
10231           record_buf[0] = ARM_PS_REGNUM;
10232           record_buf[1] = ARM_LR_REGNUM;
10233           arm_insn_r->reg_rec_count = 2;
10234
10235           /* Save SPSR also; how?  */
10236           return -1;
10237         }
10238       else if (1 == arm_insn_r->decode && 0x12 == opcode1
10239                && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10240         {
10241           /* Handle BX, branch and link/exchange.  */
10242           /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
10243           record_buf[0] = ARM_PS_REGNUM;
10244           arm_insn_r->reg_rec_count = 1;
10245         }
10246       else if (1 == arm_insn_r->decode && 0x16 == opcode1
10247                && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10248                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10249         {
10250           /* Count leading zeros: CLZ.  */
10251           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10252           arm_insn_r->reg_rec_count = 1;
10253         }
10254       else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10255                && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10256                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10257                && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10258         {
10259           /* Handle MRS insn.  */
10260           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10261           arm_insn_r->reg_rec_count = 1;
10262         }
10263     }
10264   else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10265     {
10266       /* Multiply and multiply-accumulate */
10267
10268       /* Handle multiply instructions.  */
10269       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
10270       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10271           {
10272             /* Handle MLA and MUL.  */
10273             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10274             record_buf[1] = ARM_PS_REGNUM;
10275             arm_insn_r->reg_rec_count = 2;
10276           }
10277         else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10278           {
10279             /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
10280             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10281             record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10282             record_buf[2] = ARM_PS_REGNUM;
10283             arm_insn_r->reg_rec_count = 3;
10284           }
10285     }
10286   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
10287     {
10288       /* Synchronization primitives */
10289
10290       /* Handling SWP, SWPB.  */
10291       /* These insn, changes register and memory as well.  */
10292       /* SWP or SWPB insn.  */
10293
10294       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10295       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10296       /* SWP insn ?, swaps word.  */
10297       if (8 == arm_insn_r->opcode)
10298         {
10299           record_buf_mem[0] = 4;
10300         }
10301       else
10302         {
10303           /* SWPB insn, swaps only byte.  */
10304           record_buf_mem[0] = 1;
10305         }
10306       record_buf_mem[1] = u_regval[0];
10307       arm_insn_r->mem_rec_count = 1;
10308       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10309       arm_insn_r->reg_rec_count = 1;
10310     }
10311   else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10312            || 15 == arm_insn_r->decode)
10313     {
10314       if ((opcode1 & 0x12) == 2)
10315         {
10316           /* Extra load/store (unprivileged) */
10317           return -1;
10318         }
10319       else
10320         {
10321           /* Extra load/store */
10322           switch (bits (arm_insn_r->arm_insn, 5, 6))
10323             {
10324             case 1:
10325               if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10326                 {
10327                   /* STRH (register), STRH (immediate) */
10328                   arm_record_strx (arm_insn_r, &record_buf[0],
10329                                    &record_buf_mem[0], ARM_RECORD_STRH);
10330                 }
10331               else if ((opcode1 & 0x05) == 0x1)
10332                 {
10333                   /* LDRH (register) */
10334                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10335                   arm_insn_r->reg_rec_count = 1;
10336
10337                   if (bit (arm_insn_r->arm_insn, 21))
10338                     {
10339                       /* Write back to Rn.  */
10340                       record_buf[arm_insn_r->reg_rec_count++]
10341                         = bits (arm_insn_r->arm_insn, 16, 19);
10342                     }
10343                 }
10344               else if ((opcode1 & 0x05) == 0x5)
10345                 {
10346                   /* LDRH (immediate), LDRH (literal) */
10347                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10348
10349                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10350                   arm_insn_r->reg_rec_count = 1;
10351
10352                   if (rn != 15)
10353                     {
10354                       /*LDRH (immediate) */
10355                       if (bit (arm_insn_r->arm_insn, 21))
10356                         {
10357                           /* Write back to Rn.  */
10358                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10359                         }
10360                     }
10361                 }
10362               else
10363                 return -1;
10364               break;
10365             case 2:
10366               if ((opcode1 & 0x05) == 0x0)
10367                 {
10368                   /* LDRD (register) */
10369                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10370                   record_buf[1] = record_buf[0] + 1;
10371                   arm_insn_r->reg_rec_count = 2;
10372
10373                   if (bit (arm_insn_r->arm_insn, 21))
10374                     {
10375                       /* Write back to Rn.  */
10376                       record_buf[arm_insn_r->reg_rec_count++]
10377                         = bits (arm_insn_r->arm_insn, 16, 19);
10378                     }
10379                 }
10380               else if ((opcode1 & 0x05) == 0x1)
10381                 {
10382                   /* LDRSB (register) */
10383                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10384                   arm_insn_r->reg_rec_count = 1;
10385
10386                   if (bit (arm_insn_r->arm_insn, 21))
10387                     {
10388                       /* Write back to Rn.  */
10389                       record_buf[arm_insn_r->reg_rec_count++]
10390                         = bits (arm_insn_r->arm_insn, 16, 19);
10391                     }
10392                 }
10393               else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10394                 {
10395                   /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10396                      LDRSB (literal) */
10397                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10398
10399                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10400                   arm_insn_r->reg_rec_count = 1;
10401
10402                   if (rn != 15)
10403                     {
10404                       /*LDRD (immediate), LDRSB (immediate) */
10405                       if (bit (arm_insn_r->arm_insn, 21))
10406                         {
10407                           /* Write back to Rn.  */
10408                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10409                         }
10410                     }
10411                 }
10412               else
10413                 return -1;
10414               break;
10415             case 3:
10416               if ((opcode1 & 0x05) == 0x0)
10417                 {
10418                   /* STRD (register) */
10419                   arm_record_strx (arm_insn_r, &record_buf[0],
10420                                    &record_buf_mem[0], ARM_RECORD_STRD);
10421                 }
10422               else if ((opcode1 & 0x05) == 0x1)
10423                 {
10424                   /* LDRSH (register) */
10425                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10426                   arm_insn_r->reg_rec_count = 1;
10427
10428                   if (bit (arm_insn_r->arm_insn, 21))
10429                     {
10430                       /* Write back to Rn.  */
10431                       record_buf[arm_insn_r->reg_rec_count++]
10432                         = bits (arm_insn_r->arm_insn, 16, 19);
10433                     }
10434                 }
10435               else if ((opcode1 & 0x05) == 0x4)
10436                 {
10437                   /* STRD (immediate) */
10438                   arm_record_strx (arm_insn_r, &record_buf[0],
10439                                    &record_buf_mem[0], ARM_RECORD_STRD);
10440                 }
10441               else if ((opcode1 & 0x05) == 0x5)
10442                 {
10443                   /* LDRSH (immediate), LDRSH (literal) */
10444                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10445                   arm_insn_r->reg_rec_count = 1;
10446
10447                   if (bit (arm_insn_r->arm_insn, 21))
10448                     {
10449                       /* Write back to Rn.  */
10450                       record_buf[arm_insn_r->reg_rec_count++]
10451                         = bits (arm_insn_r->arm_insn, 16, 19);
10452                     }
10453                 }
10454               else
10455                 return -1;
10456               break;
10457             default:
10458               return -1;
10459             }
10460         }
10461     }
10462   else
10463     {
10464       return -1;
10465     }
10466
10467   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10468   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10469   return 0;
10470 }
10471
10472 /* Handling opcode 001 insns.  */
10473
10474 static int
10475 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10476 {
10477   uint32_t record_buf[8], record_buf_mem[8];
10478
10479   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10480   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10481
10482   if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10483       && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10484       && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10485      )
10486     {
10487       /* Handle MSR insn.  */
10488       if (9 == arm_insn_r->opcode)
10489         {
10490           /* CSPR is going to be changed.  */
10491           record_buf[0] = ARM_PS_REGNUM;
10492           arm_insn_r->reg_rec_count = 1;
10493         }
10494       else
10495         {
10496           /* SPSR is going to be changed.  */
10497         }
10498     }
10499   else if (arm_insn_r->opcode <= 15)
10500     {
10501       /* Normal data processing insns.  */
10502       /* Out of 11 shifter operands mode, all the insn modifies destination
10503          register, which is specified by 13-16 decode.  */
10504       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10505       record_buf[1] = ARM_PS_REGNUM;
10506       arm_insn_r->reg_rec_count = 2;
10507     }
10508   else
10509     {
10510       return -1;
10511     }
10512
10513   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10514   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10515   return 0;
10516 }
10517
10518 static int
10519 arm_record_media (insn_decode_record *arm_insn_r)
10520 {
10521   uint32_t record_buf[8];
10522
10523   switch (bits (arm_insn_r->arm_insn, 22, 24))
10524     {
10525     case 0:
10526       /* Parallel addition and subtraction, signed */
10527     case 1:
10528       /* Parallel addition and subtraction, unsigned */
10529     case 2:
10530     case 3:
10531       /* Packing, unpacking, saturation and reversal */
10532       {
10533         int rd = bits (arm_insn_r->arm_insn, 12, 15);
10534
10535         record_buf[arm_insn_r->reg_rec_count++] = rd;
10536       }
10537       break;
10538
10539     case 4:
10540     case 5:
10541       /* Signed multiplies */
10542       {
10543         int rd = bits (arm_insn_r->arm_insn, 16, 19);
10544         unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10545
10546         record_buf[arm_insn_r->reg_rec_count++] = rd;
10547         if (op1 == 0x0)
10548           record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10549         else if (op1 == 0x4)
10550           record_buf[arm_insn_r->reg_rec_count++]
10551             = bits (arm_insn_r->arm_insn, 12, 15);
10552       }
10553       break;
10554
10555     case 6:
10556       {
10557         if (bit (arm_insn_r->arm_insn, 21)
10558             && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10559           {
10560             /* SBFX */
10561             record_buf[arm_insn_r->reg_rec_count++]
10562               = bits (arm_insn_r->arm_insn, 12, 15);
10563           }
10564         else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10565                  && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10566           {
10567             /* USAD8 and USADA8 */
10568             record_buf[arm_insn_r->reg_rec_count++]
10569               = bits (arm_insn_r->arm_insn, 16, 19);
10570           }
10571       }
10572       break;
10573
10574     case 7:
10575       {
10576         if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10577             && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10578           {
10579             /* Permanently UNDEFINED */
10580             return -1;
10581           }
10582         else
10583           {
10584             /* BFC, BFI and UBFX */
10585             record_buf[arm_insn_r->reg_rec_count++]
10586               = bits (arm_insn_r->arm_insn, 12, 15);
10587           }
10588       }
10589       break;
10590
10591     default:
10592       return -1;
10593     }
10594
10595   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10596
10597   return 0;
10598 }
10599
10600 /* Handle ARM mode instructions with opcode 010.  */
10601
10602 static int
10603 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10604 {
10605   struct regcache *reg_cache = arm_insn_r->regcache;
10606
10607   uint32_t reg_base , reg_dest;
10608   uint32_t offset_12, tgt_mem_addr;
10609   uint32_t record_buf[8], record_buf_mem[8];
10610   unsigned char wback;
10611   ULONGEST u_regval;
10612
10613   /* Calculate wback.  */
10614   wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10615           || (bit (arm_insn_r->arm_insn, 21) == 1);
10616
10617   arm_insn_r->reg_rec_count = 0;
10618   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10619
10620   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10621     {
10622       /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10623          and LDRT.  */
10624
10625       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10626       record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10627
10628       /* The LDR instruction is capable of doing branching.  If MOV LR, PC
10629          preceeds a LDR instruction having R15 as reg_base, it
10630          emulates a branch and link instruction, and hence we need to save
10631          CPSR and PC as well.  */
10632       if (ARM_PC_REGNUM == reg_dest)
10633         record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10634
10635       /* If wback is true, also save the base register, which is going to be
10636          written to.  */
10637       if (wback)
10638         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10639     }
10640   else
10641     {
10642       /* STR (immediate), STRB (immediate), STRBT and STRT.  */
10643
10644       offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10645       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10646
10647       /* Handle bit U.  */
10648       if (bit (arm_insn_r->arm_insn, 23))
10649         {
10650           /* U == 1: Add the offset. */
10651           tgt_mem_addr = (uint32_t) u_regval + offset_12;
10652         }
10653       else
10654         {
10655           /* U == 0: subtract the offset. */
10656           tgt_mem_addr = (uint32_t) u_regval - offset_12;
10657         }
10658
10659       /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10660          bytes.  */
10661       if (bit (arm_insn_r->arm_insn, 22))
10662         {
10663           /* STRB and STRBT: 1 byte.  */
10664           record_buf_mem[0] = 1;
10665         }
10666       else
10667         {
10668           /* STR and STRT: 4 bytes.  */
10669           record_buf_mem[0] = 4;
10670         }
10671
10672       /* Handle bit P.  */
10673       if (bit (arm_insn_r->arm_insn, 24))
10674         record_buf_mem[1] = tgt_mem_addr;
10675       else
10676         record_buf_mem[1] = (uint32_t) u_regval;
10677
10678       arm_insn_r->mem_rec_count = 1;
10679
10680       /* If wback is true, also save the base register, which is going to be
10681          written to.  */
10682       if (wback)
10683         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10684     }
10685
10686   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10687   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10688   return 0;
10689 }
10690
10691 /* Handling opcode 011 insns.  */
10692
10693 static int
10694 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10695 {
10696   struct regcache *reg_cache = arm_insn_r->regcache;
10697
10698   uint32_t shift_imm = 0;
10699   uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10700   uint32_t offset_12 = 0, tgt_mem_addr = 0;
10701   uint32_t record_buf[8], record_buf_mem[8];
10702
10703   LONGEST s_word;
10704   ULONGEST u_regval[2];
10705
10706   if (bit (arm_insn_r->arm_insn, 4))
10707     return arm_record_media (arm_insn_r);
10708
10709   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10710   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10711
10712   /* Handle enhanced store insns and LDRD DSP insn,
10713      order begins according to addressing modes for store insns
10714      STRH insn.  */
10715
10716   /* LDR or STR?  */
10717   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10718     {
10719       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10720       /* LDR insn has a capability to do branching, if
10721          MOV LR, PC is precedded by LDR insn having Rn as R15
10722          in that case, it emulates branch and link insn, and hence we
10723          need to save CSPR and PC as well.  */
10724       if (15 != reg_dest)
10725         {
10726           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10727           arm_insn_r->reg_rec_count = 1;
10728         }
10729       else
10730         {
10731           record_buf[0] = reg_dest;
10732           record_buf[1] = ARM_PS_REGNUM;
10733           arm_insn_r->reg_rec_count = 2;
10734         }
10735     }
10736   else
10737     {
10738       if (! bits (arm_insn_r->arm_insn, 4, 11))
10739         {
10740           /* Store insn, register offset and register pre-indexed,
10741              register post-indexed.  */
10742           /* Get Rm.  */
10743           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10744           /* Get Rn.  */
10745           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10746           regcache_raw_read_unsigned (reg_cache, reg_src1
10747                                       , &u_regval[0]);
10748           regcache_raw_read_unsigned (reg_cache, reg_src2
10749                                       , &u_regval[1]);
10750           if (15 == reg_src2)
10751             {
10752               /* If R15 was used as Rn, hence current PC+8.  */
10753               /* Pre-indexed mode doesnt reach here ; illegal insn.  */
10754                 u_regval[0] = u_regval[0] + 8;
10755             }
10756           /* Calculate target store address, Rn +/- Rm, register offset.  */
10757           /* U == 1.  */
10758           if (bit (arm_insn_r->arm_insn, 23))
10759             {
10760               tgt_mem_addr = u_regval[0] + u_regval[1];
10761             }
10762           else
10763             {
10764               tgt_mem_addr = u_regval[1] - u_regval[0];
10765             }
10766
10767           switch (arm_insn_r->opcode)
10768             {
10769               /* STR.  */
10770               case 8:
10771               case 12:
10772               /* STR.  */    
10773               case 9:
10774               case 13:
10775               /* STRT.  */
10776               case 1:
10777               case 5:
10778               /* STR.  */
10779               case 0:
10780               case 4:
10781                 record_buf_mem[0] = 4;
10782               break;
10783
10784               /* STRB.  */
10785               case 10:
10786               case 14:
10787               /* STRB.  */
10788               case 11:
10789               case 15:
10790               /* STRBT.  */    
10791               case 3:
10792               case 7:
10793               /* STRB.  */
10794               case 2:
10795               case 6:
10796                 record_buf_mem[0] = 1;
10797               break;
10798
10799               default:
10800                 gdb_assert_not_reached ("no decoding pattern found");
10801               break;
10802             }
10803           record_buf_mem[1] = tgt_mem_addr;
10804           arm_insn_r->mem_rec_count = 1;
10805
10806           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10807               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10808               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10809               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10810               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10811               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10812              )
10813             {
10814               /* Rn is going to be changed in pre-indexed mode and
10815                  post-indexed mode as well.  */
10816               record_buf[0] = reg_src2;
10817               arm_insn_r->reg_rec_count = 1;
10818             }
10819         }
10820       else
10821         {
10822           /* Store insn, scaled register offset; scaled pre-indexed.  */
10823           offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10824           /* Get Rm.  */
10825           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10826           /* Get Rn.  */
10827           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10828           /* Get shift_imm.  */
10829           shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10830           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10831           regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10832           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10833           /* Offset_12 used as shift.  */
10834           switch (offset_12)
10835             {
10836               case 0:
10837                 /* Offset_12 used as index.  */
10838                 offset_12 = u_regval[0] << shift_imm;
10839               break;
10840
10841               case 1:
10842                 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10843               break;
10844
10845               case 2:
10846                 if (!shift_imm)
10847                   {
10848                     if (bit (u_regval[0], 31))
10849                       {
10850                         offset_12 = 0xFFFFFFFF;
10851                       }
10852                     else
10853                       {
10854                         offset_12 = 0;
10855                       }
10856                   }
10857                 else
10858                   {
10859                     /* This is arithmetic shift.  */
10860                     offset_12 = s_word >> shift_imm;
10861                   }
10862                 break;
10863
10864               case 3:
10865                 if (!shift_imm)
10866                   {
10867                     regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10868                                                 &u_regval[1]);
10869                     /* Get C flag value and shift it by 31.  */
10870                     offset_12 = (((bit (u_regval[1], 29)) << 31) \
10871                                   | (u_regval[0]) >> 1);
10872                   }
10873                 else
10874                   {
10875                     offset_12 = (u_regval[0] >> shift_imm) \
10876                                 | (u_regval[0] <<
10877                                 (sizeof(uint32_t) - shift_imm));
10878                   }
10879               break;
10880
10881               default:
10882                 gdb_assert_not_reached ("no decoding pattern found");
10883               break;
10884             }
10885
10886           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10887           /* bit U set.  */
10888           if (bit (arm_insn_r->arm_insn, 23))
10889             {
10890               tgt_mem_addr = u_regval[1] + offset_12;
10891             }
10892           else
10893             {
10894               tgt_mem_addr = u_regval[1] - offset_12;
10895             }
10896
10897           switch (arm_insn_r->opcode)
10898             {
10899               /* STR.  */
10900               case 8:
10901               case 12:
10902               /* STR.  */    
10903               case 9:
10904               case 13:
10905               /* STRT.  */
10906               case 1:
10907               case 5:
10908               /* STR.  */
10909               case 0:
10910               case 4:
10911                 record_buf_mem[0] = 4;
10912               break;
10913
10914               /* STRB.  */
10915               case 10:
10916               case 14:
10917               /* STRB.  */
10918               case 11:
10919               case 15:
10920               /* STRBT.  */    
10921               case 3:
10922               case 7:
10923               /* STRB.  */
10924               case 2:
10925               case 6:
10926                 record_buf_mem[0] = 1;
10927               break;
10928
10929               default:
10930                 gdb_assert_not_reached ("no decoding pattern found");
10931               break;
10932             }
10933           record_buf_mem[1] = tgt_mem_addr;
10934           arm_insn_r->mem_rec_count = 1;
10935
10936           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10937               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10938               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10939               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10940               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10941               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10942              )
10943             {
10944               /* Rn is going to be changed in register scaled pre-indexed
10945                  mode,and scaled post indexed mode.  */
10946               record_buf[0] = reg_src2;
10947               arm_insn_r->reg_rec_count = 1;
10948             }
10949         }
10950     }
10951
10952   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10953   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10954   return 0;
10955 }
10956
10957 /* Handle ARM mode instructions with opcode 100.  */
10958
10959 static int
10960 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
10961 {
10962   struct regcache *reg_cache = arm_insn_r->regcache;
10963   uint32_t register_count = 0, register_bits;
10964   uint32_t reg_base, addr_mode;
10965   uint32_t record_buf[24], record_buf_mem[48];
10966   uint32_t wback;
10967   ULONGEST u_regval;
10968
10969   /* Fetch the list of registers.  */
10970   register_bits = bits (arm_insn_r->arm_insn, 0, 15);
10971   arm_insn_r->reg_rec_count = 0;
10972
10973   /* Fetch the base register that contains the address we are loading data
10974      to.  */
10975   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10976
10977   /* Calculate wback.  */
10978   wback = (bit (arm_insn_r->arm_insn, 21) == 1);
10979
10980   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10981     {
10982       /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB.  */
10983
10984       /* Find out which registers are going to be loaded from memory.  */
10985       while (register_bits)
10986         {
10987           if (register_bits & 0x00000001)
10988             record_buf[arm_insn_r->reg_rec_count++] = register_count;
10989           register_bits = register_bits >> 1;
10990           register_count++;
10991         }
10992
10993   
10994       /* If wback is true, also save the base register, which is going to be
10995          written to.  */
10996       if (wback)
10997         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10998
10999       /* Save the CPSR register.  */
11000       record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11001     }
11002   else
11003     {
11004       /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA).  */
11005
11006       addr_mode = bits (arm_insn_r->arm_insn, 23, 24); 
11007
11008       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11009
11010       /* Find out how many registers are going to be stored to memory.  */
11011       while (register_bits)
11012         {
11013           if (register_bits & 0x00000001)
11014             register_count++;
11015           register_bits = register_bits >> 1;
11016         }
11017
11018       switch (addr_mode)
11019         {
11020           /* STMDA (STMED): Decrement after.  */
11021           case 0:
11022           record_buf_mem[1] = (uint32_t) u_regval
11023                               - register_count * INT_REGISTER_SIZE + 4;
11024           break;
11025           /* STM (STMIA, STMEA): Increment after.  */
11026           case 1:
11027           record_buf_mem[1] = (uint32_t) u_regval;
11028           break;
11029           /* STMDB (STMFD): Decrement before.  */
11030           case 2:
11031           record_buf_mem[1] = (uint32_t) u_regval
11032                               - register_count * INT_REGISTER_SIZE;
11033           break;
11034           /* STMIB (STMFA): Increment before.  */
11035           case 3:
11036           record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11037           break;
11038           default:
11039             gdb_assert_not_reached ("no decoding pattern found");
11040           break;
11041         }
11042
11043       record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11044       arm_insn_r->mem_rec_count = 1;
11045
11046       /* If wback is true, also save the base register, which is going to be
11047          written to.  */
11048       if (wback)
11049         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11050     }
11051
11052   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11053   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11054   return 0;
11055 }
11056
11057 /* Handling opcode 101 insns.  */
11058
11059 static int
11060 arm_record_b_bl (insn_decode_record *arm_insn_r)
11061 {
11062   uint32_t record_buf[8];
11063
11064   /* Handle B, BL, BLX(1) insns.  */
11065   /* B simply branches so we do nothing here.  */
11066   /* Note: BLX(1) doesnt fall here but instead it falls into
11067      extension space.  */
11068   if (bit (arm_insn_r->arm_insn, 24))
11069   {
11070     record_buf[0] = ARM_LR_REGNUM;
11071     arm_insn_r->reg_rec_count = 1;
11072   }
11073
11074   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11075
11076   return 0;
11077 }
11078
11079 static int
11080 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11081 {
11082   printf_unfiltered (_("Process record does not support instruction "
11083                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11084                      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11085
11086   return -1;
11087 }
11088
11089 /* Record handler for vector data transfer instructions.  */
11090
11091 static int
11092 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11093 {
11094   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11095   uint32_t record_buf[4];
11096
11097   reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11098   reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11099   bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11100   bit_l = bit (arm_insn_r->arm_insn, 20);
11101   bit_c = bit (arm_insn_r->arm_insn, 8);
11102
11103   /* Handle VMOV instruction.  */
11104   if (bit_l && bit_c)
11105     {
11106       record_buf[0] = reg_t;
11107       arm_insn_r->reg_rec_count = 1;
11108     }
11109   else if (bit_l && !bit_c)
11110     {
11111       /* Handle VMOV instruction.  */
11112       if (bits_a == 0x00)
11113         {
11114           record_buf[0] = reg_t;
11115           arm_insn_r->reg_rec_count = 1;
11116         }
11117       /* Handle VMRS instruction.  */
11118       else if (bits_a == 0x07)
11119         {
11120           if (reg_t == 15)
11121             reg_t = ARM_PS_REGNUM;
11122
11123           record_buf[0] = reg_t;
11124           arm_insn_r->reg_rec_count = 1;
11125         }
11126     }
11127   else if (!bit_l && !bit_c)
11128     {
11129       /* Handle VMOV instruction.  */
11130       if (bits_a == 0x00)
11131         {
11132           record_buf[0] = ARM_D0_REGNUM + reg_v;
11133
11134           arm_insn_r->reg_rec_count = 1;
11135         }
11136       /* Handle VMSR instruction.  */
11137       else if (bits_a == 0x07)
11138         {
11139           record_buf[0] = ARM_FPSCR_REGNUM;
11140           arm_insn_r->reg_rec_count = 1;
11141         }
11142     }
11143   else if (!bit_l && bit_c)
11144     {
11145       /* Handle VMOV instruction.  */
11146       if (!(bits_a & 0x04))
11147         {
11148           record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11149                           + ARM_D0_REGNUM;
11150           arm_insn_r->reg_rec_count = 1;
11151         }
11152       /* Handle VDUP instruction.  */
11153       else
11154         {
11155           if (bit (arm_insn_r->arm_insn, 21))
11156             {
11157               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11158               record_buf[0] = reg_v + ARM_D0_REGNUM;
11159               record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11160               arm_insn_r->reg_rec_count = 2;
11161             }
11162           else
11163             {
11164               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11165               record_buf[0] = reg_v + ARM_D0_REGNUM;
11166               arm_insn_r->reg_rec_count = 1;
11167             }
11168         }
11169     }
11170
11171   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11172   return 0;
11173 }
11174
11175 /* Record handler for extension register load/store instructions.  */
11176
11177 static int
11178 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11179 {
11180   uint32_t opcode, single_reg;
11181   uint8_t op_vldm_vstm;
11182   uint32_t record_buf[8], record_buf_mem[128];
11183   ULONGEST u_regval = 0;
11184
11185   struct regcache *reg_cache = arm_insn_r->regcache;
11186
11187   opcode = bits (arm_insn_r->arm_insn, 20, 24);
11188   single_reg = !bit (arm_insn_r->arm_insn, 8);
11189   op_vldm_vstm = opcode & 0x1b;
11190
11191   /* Handle VMOV instructions.  */
11192   if ((opcode & 0x1e) == 0x04)
11193     {
11194       if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11195         {
11196           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11197           record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11198           arm_insn_r->reg_rec_count = 2;
11199         }
11200       else
11201         {
11202           uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11203           uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11204
11205           if (single_reg)
11206             {
11207               /* The first S register number m is REG_M:M (M is bit 5),
11208                  the corresponding D register number is REG_M:M / 2, which
11209                  is REG_M.  */
11210               record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11211               /* The second S register number is REG_M:M + 1, the
11212                  corresponding D register number is (REG_M:M + 1) / 2.
11213                  IOW, if bit M is 1, the first and second S registers
11214                  are mapped to different D registers, otherwise, they are
11215                  in the same D register.  */
11216               if (bit_m)
11217                 {
11218                   record_buf[arm_insn_r->reg_rec_count++]
11219                     = ARM_D0_REGNUM + reg_m + 1;
11220                 }
11221             }
11222           else
11223             {
11224               record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11225               arm_insn_r->reg_rec_count = 1;
11226             }
11227         }
11228     }
11229   /* Handle VSTM and VPUSH instructions.  */
11230   else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11231            || op_vldm_vstm == 0x12)
11232     {
11233       uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11234       uint32_t memory_index = 0;
11235
11236       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11237       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11238       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11239       imm_off32 = imm_off8 << 2;
11240       memory_count = imm_off8;
11241
11242       if (bit (arm_insn_r->arm_insn, 23))
11243         start_address = u_regval;
11244       else
11245         start_address = u_regval - imm_off32;
11246
11247       if (bit (arm_insn_r->arm_insn, 21))
11248         {
11249           record_buf[0] = reg_rn;
11250           arm_insn_r->reg_rec_count = 1;
11251         }
11252
11253       while (memory_count > 0)
11254         {
11255           if (single_reg)
11256             {
11257               record_buf_mem[memory_index] = 4;
11258               record_buf_mem[memory_index + 1] = start_address;
11259               start_address = start_address + 4;
11260               memory_index = memory_index + 2;
11261             }
11262           else
11263             {
11264               record_buf_mem[memory_index] = 4;
11265               record_buf_mem[memory_index + 1] = start_address;
11266               record_buf_mem[memory_index + 2] = 4;
11267               record_buf_mem[memory_index + 3] = start_address + 4;
11268               start_address = start_address + 8;
11269               memory_index = memory_index + 4;
11270             }
11271           memory_count--;
11272         }
11273       arm_insn_r->mem_rec_count = (memory_index >> 1);
11274     }
11275   /* Handle VLDM instructions.  */
11276   else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11277            || op_vldm_vstm == 0x13)
11278     {
11279       uint32_t reg_count, reg_vd;
11280       uint32_t reg_index = 0;
11281       uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11282
11283       reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11284       reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11285
11286       /* REG_VD is the first D register number.  If the instruction
11287          loads memory to S registers (SINGLE_REG is TRUE), the register
11288          number is (REG_VD << 1 | bit D), so the corresponding D
11289          register number is (REG_VD << 1 | bit D) / 2 = REG_VD.  */
11290       if (!single_reg)
11291         reg_vd = reg_vd | (bit_d << 4);
11292
11293       if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11294         record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11295
11296       /* If the instruction loads memory to D register, REG_COUNT should
11297          be divided by 2, according to the ARM Architecture Reference
11298          Manual.  If the instruction loads memory to S register, divide by
11299          2 as well because two S registers are mapped to D register.  */
11300       reg_count  = reg_count / 2;
11301       if (single_reg && bit_d)
11302         {
11303           /* Increase the register count if S register list starts from
11304              an odd number (bit d is one).  */
11305           reg_count++;
11306         }
11307
11308       while (reg_count > 0)
11309         {
11310           record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11311           reg_count--;
11312         }
11313       arm_insn_r->reg_rec_count = reg_index;
11314     }
11315   /* VSTR Vector store register.  */
11316   else if ((opcode & 0x13) == 0x10)
11317     {
11318       uint32_t start_address, reg_rn, imm_off32, imm_off8;
11319       uint32_t memory_index = 0;
11320
11321       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11322       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11323       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11324       imm_off32 = imm_off8 << 2;
11325
11326       if (bit (arm_insn_r->arm_insn, 23))
11327         start_address = u_regval + imm_off32;
11328       else
11329         start_address = u_regval - imm_off32;
11330
11331       if (single_reg)
11332         {
11333           record_buf_mem[memory_index] = 4;
11334           record_buf_mem[memory_index + 1] = start_address;
11335           arm_insn_r->mem_rec_count = 1;
11336         }
11337       else
11338         {
11339           record_buf_mem[memory_index] = 4;
11340           record_buf_mem[memory_index + 1] = start_address;
11341           record_buf_mem[memory_index + 2] = 4;
11342           record_buf_mem[memory_index + 3] = start_address + 4;
11343           arm_insn_r->mem_rec_count = 2;
11344         }
11345     }
11346   /* VLDR Vector load register.  */
11347   else if ((opcode & 0x13) == 0x11)
11348     {
11349       uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11350
11351       if (!single_reg)
11352         {
11353           reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11354           record_buf[0] = ARM_D0_REGNUM + reg_vd;
11355         }
11356       else
11357         {
11358           reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11359           /* Record register D rather than pseudo register S.  */
11360           record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11361         }
11362       arm_insn_r->reg_rec_count = 1;
11363     }
11364
11365   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11366   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11367   return 0;
11368 }
11369
11370 /* Record handler for arm/thumb mode VFP data processing instructions.  */
11371
11372 static int
11373 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11374 {
11375   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11376   uint32_t record_buf[4];
11377   enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11378   enum insn_types curr_insn_type = INSN_INV;
11379
11380   reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11381   opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11382   opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11383   opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11384   dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11385   bit_d = bit (arm_insn_r->arm_insn, 22);
11386   /* Mask off the "D" bit.  */
11387   opc1 = opc1 & ~0x04;
11388
11389   /* Handle VMLA, VMLS.  */
11390   if (opc1 == 0x00)
11391     {
11392       if (bit (arm_insn_r->arm_insn, 10))
11393         {
11394           if (bit (arm_insn_r->arm_insn, 6))
11395             curr_insn_type = INSN_T0;
11396           else
11397             curr_insn_type = INSN_T1;
11398         }
11399       else
11400         {
11401           if (dp_op_sz)
11402             curr_insn_type = INSN_T1;
11403           else
11404             curr_insn_type = INSN_T2;
11405         }
11406     }
11407   /* Handle VNMLA, VNMLS, VNMUL.  */
11408   else if (opc1 == 0x01)
11409     {
11410       if (dp_op_sz)
11411         curr_insn_type = INSN_T1;
11412       else
11413         curr_insn_type = INSN_T2;
11414     }
11415   /* Handle VMUL.  */
11416   else if (opc1 == 0x02 && !(opc3 & 0x01))
11417     {
11418       if (bit (arm_insn_r->arm_insn, 10))
11419         {
11420           if (bit (arm_insn_r->arm_insn, 6))
11421             curr_insn_type = INSN_T0;
11422           else
11423             curr_insn_type = INSN_T1;
11424         }
11425       else
11426         {
11427           if (dp_op_sz)
11428             curr_insn_type = INSN_T1;
11429           else
11430             curr_insn_type = INSN_T2;
11431         }
11432     }
11433   /* Handle VADD, VSUB.  */
11434   else if (opc1 == 0x03)
11435     {
11436       if (!bit (arm_insn_r->arm_insn, 9))
11437         {
11438           if (bit (arm_insn_r->arm_insn, 6))
11439             curr_insn_type = INSN_T0;
11440           else
11441             curr_insn_type = INSN_T1;
11442         }
11443       else
11444         {
11445           if (dp_op_sz)
11446             curr_insn_type = INSN_T1;
11447           else
11448             curr_insn_type = INSN_T2;
11449         }
11450     }
11451   /* Handle VDIV.  */
11452   else if (opc1 == 0x08)
11453     {
11454       if (dp_op_sz)
11455         curr_insn_type = INSN_T1;
11456       else
11457         curr_insn_type = INSN_T2;
11458     }
11459   /* Handle all other vfp data processing instructions.  */
11460   else if (opc1 == 0x0b)
11461     {
11462       /* Handle VMOV.  */
11463       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11464         {
11465           if (bit (arm_insn_r->arm_insn, 4))
11466             {
11467               if (bit (arm_insn_r->arm_insn, 6))
11468                 curr_insn_type = INSN_T0;
11469               else
11470                 curr_insn_type = INSN_T1;
11471             }
11472           else
11473             {
11474               if (dp_op_sz)
11475                 curr_insn_type = INSN_T1;
11476               else
11477                 curr_insn_type = INSN_T2;
11478             }
11479         }
11480       /* Handle VNEG and VABS.  */
11481       else if ((opc2 == 0x01 && opc3 == 0x01)
11482               || (opc2 == 0x00 && opc3 == 0x03))
11483         {
11484           if (!bit (arm_insn_r->arm_insn, 11))
11485             {
11486               if (bit (arm_insn_r->arm_insn, 6))
11487                 curr_insn_type = INSN_T0;
11488               else
11489                 curr_insn_type = INSN_T1;
11490             }
11491           else
11492             {
11493               if (dp_op_sz)
11494                 curr_insn_type = INSN_T1;
11495               else
11496                 curr_insn_type = INSN_T2;
11497             }
11498         }
11499       /* Handle VSQRT.  */
11500       else if (opc2 == 0x01 && opc3 == 0x03)
11501         {
11502           if (dp_op_sz)
11503             curr_insn_type = INSN_T1;
11504           else
11505             curr_insn_type = INSN_T2;
11506         }
11507       /* Handle VCVT.  */
11508       else if (opc2 == 0x07 && opc3 == 0x03)
11509         {
11510           if (!dp_op_sz)
11511             curr_insn_type = INSN_T1;
11512           else
11513             curr_insn_type = INSN_T2;
11514         }
11515       else if (opc3 & 0x01)
11516         {
11517           /* Handle VCVT.  */
11518           if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11519             {
11520               if (!bit (arm_insn_r->arm_insn, 18))
11521                 curr_insn_type = INSN_T2;
11522               else
11523                 {
11524                   if (dp_op_sz)
11525                     curr_insn_type = INSN_T1;
11526                   else
11527                     curr_insn_type = INSN_T2;
11528                 }
11529             }
11530           /* Handle VCVT.  */
11531           else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11532             {
11533               if (dp_op_sz)
11534                 curr_insn_type = INSN_T1;
11535               else
11536                 curr_insn_type = INSN_T2;
11537             }
11538           /* Handle VCVTB, VCVTT.  */
11539           else if ((opc2 & 0x0e) == 0x02)
11540             curr_insn_type = INSN_T2;
11541           /* Handle VCMP, VCMPE.  */
11542           else if ((opc2 & 0x0e) == 0x04)
11543             curr_insn_type = INSN_T3;
11544         }
11545     }
11546
11547   switch (curr_insn_type)
11548     {
11549       case INSN_T0:
11550         reg_vd = reg_vd | (bit_d << 4);
11551         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11552         record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11553         arm_insn_r->reg_rec_count = 2;
11554         break;
11555
11556       case INSN_T1:
11557         reg_vd = reg_vd | (bit_d << 4);
11558         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11559         arm_insn_r->reg_rec_count = 1;
11560         break;
11561
11562       case INSN_T2:
11563         reg_vd = (reg_vd << 1) | bit_d;
11564         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11565         arm_insn_r->reg_rec_count = 1;
11566         break;
11567
11568       case INSN_T3:
11569         record_buf[0] = ARM_FPSCR_REGNUM;
11570         arm_insn_r->reg_rec_count = 1;
11571         break;
11572
11573       default:
11574         gdb_assert_not_reached ("no decoding pattern found");
11575         break;
11576     }
11577
11578   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11579   return 0;
11580 }
11581
11582 /* Handling opcode 110 insns.  */
11583
11584 static int
11585 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11586 {
11587   uint32_t op1, op1_ebit, coproc;
11588
11589   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11590   op1 = bits (arm_insn_r->arm_insn, 20, 25);
11591   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11592
11593   if ((coproc & 0x0e) == 0x0a)
11594     {
11595       /* Handle extension register ld/st instructions.  */
11596       if (!(op1 & 0x20))
11597         return arm_record_exreg_ld_st_insn (arm_insn_r);
11598
11599       /* 64-bit transfers between arm core and extension registers.  */
11600       if ((op1 & 0x3e) == 0x04)
11601         return arm_record_exreg_ld_st_insn (arm_insn_r);
11602     }
11603   else
11604     {
11605       /* Handle coprocessor ld/st instructions.  */
11606       if (!(op1 & 0x3a))
11607         {
11608           /* Store.  */
11609           if (!op1_ebit)
11610             return arm_record_unsupported_insn (arm_insn_r);
11611           else
11612             /* Load.  */
11613             return arm_record_unsupported_insn (arm_insn_r);
11614         }
11615
11616       /* Move to coprocessor from two arm core registers.  */
11617       if (op1 == 0x4)
11618         return arm_record_unsupported_insn (arm_insn_r);
11619
11620       /* Move to two arm core registers from coprocessor.  */
11621       if (op1 == 0x5)
11622         {
11623           uint32_t reg_t[2];
11624
11625           reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11626           reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11627           arm_insn_r->reg_rec_count = 2;
11628
11629           REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11630           return 0;
11631        }
11632     }
11633   return arm_record_unsupported_insn (arm_insn_r);
11634 }
11635
11636 /* Handling opcode 111 insns.  */
11637
11638 static int
11639 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11640 {
11641   uint32_t op, op1_ebit, coproc, bits_24_25;
11642   struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11643   struct regcache *reg_cache = arm_insn_r->regcache;
11644
11645   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11646   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11647   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11648   op = bit (arm_insn_r->arm_insn, 4);
11649   bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11650
11651   /* Handle arm SWI/SVC system call instructions.  */
11652   if (bits_24_25 == 0x3)
11653     {
11654       if (tdep->arm_syscall_record != NULL)
11655         {
11656           ULONGEST svc_operand, svc_number;
11657
11658           svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11659
11660           if (svc_operand)  /* OABI.  */
11661             svc_number = svc_operand - 0x900000;
11662           else /* EABI.  */
11663             regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11664
11665           return tdep->arm_syscall_record (reg_cache, svc_number);
11666         }
11667       else
11668         {
11669           printf_unfiltered (_("no syscall record support\n"));
11670           return -1;
11671         }
11672     }
11673   else if (bits_24_25 == 0x02)
11674     {
11675       if (op)
11676         {
11677           if ((coproc & 0x0e) == 0x0a)
11678             {
11679               /* 8, 16, and 32-bit transfer */
11680               return arm_record_vdata_transfer_insn (arm_insn_r);
11681             }
11682           else
11683             {
11684               if (op1_ebit)
11685                 {
11686                   /* MRC, MRC2 */
11687                   uint32_t record_buf[1];
11688
11689                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11690                   if (record_buf[0] == 15)
11691                     record_buf[0] = ARM_PS_REGNUM;
11692
11693                   arm_insn_r->reg_rec_count = 1;
11694                   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11695                              record_buf);
11696                   return 0;
11697                 }
11698               else
11699                 {
11700                   /* MCR, MCR2 */
11701                   return -1;
11702                 }
11703             }
11704         }
11705       else
11706         {
11707           if ((coproc & 0x0e) == 0x0a)
11708             {
11709               /* VFP data-processing instructions.  */
11710               return arm_record_vfp_data_proc_insn (arm_insn_r);
11711             }
11712           else
11713             {
11714               /* CDP, CDP2 */
11715               return -1;
11716             }
11717         }
11718     }
11719   else
11720     {
11721       unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11722
11723       if (op1 == 5)
11724         {
11725           if ((coproc & 0x0e) != 0x0a)
11726             {
11727               /* MRRC, MRRC2 */
11728               return -1;
11729             }
11730         }
11731       else if (op1 == 4 || op1 == 5)
11732         {
11733           if ((coproc & 0x0e) == 0x0a)
11734             {
11735               /* 64-bit transfers between ARM core and extension */
11736               return -1;
11737             }
11738           else if (op1 == 4)
11739             {
11740               /* MCRR, MCRR2 */
11741               return -1;
11742             }
11743         }
11744       else if (op1 == 0 || op1 == 1)
11745         {
11746           /* UNDEFINED */
11747           return -1;
11748         }
11749       else
11750         {
11751           if ((coproc & 0x0e) == 0x0a)
11752             {
11753               /* Extension register load/store */
11754             }
11755           else
11756             {
11757               /* STC, STC2, LDC, LDC2 */
11758             }
11759           return -1;
11760         }
11761     }
11762
11763   return -1;
11764 }
11765
11766 /* Handling opcode 000 insns.  */
11767
11768 static int
11769 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11770 {
11771   uint32_t record_buf[8];
11772   uint32_t reg_src1 = 0;
11773
11774   reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11775
11776   record_buf[0] = ARM_PS_REGNUM;
11777   record_buf[1] = reg_src1;
11778   thumb_insn_r->reg_rec_count = 2;
11779
11780   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11781
11782   return 0;
11783 }
11784
11785
11786 /* Handling opcode 001 insns.  */
11787
11788 static int
11789 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11790 {
11791   uint32_t record_buf[8];
11792   uint32_t reg_src1 = 0;
11793
11794   reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11795
11796   record_buf[0] = ARM_PS_REGNUM;
11797   record_buf[1] = reg_src1;
11798   thumb_insn_r->reg_rec_count = 2;
11799
11800   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11801
11802   return 0;
11803 }
11804
11805 /* Handling opcode 010 insns.  */
11806
11807 static int
11808 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11809 {
11810   struct regcache *reg_cache =  thumb_insn_r->regcache;
11811   uint32_t record_buf[8], record_buf_mem[8];
11812
11813   uint32_t reg_src1 = 0, reg_src2 = 0;
11814   uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11815
11816   ULONGEST u_regval[2] = {0};
11817
11818   opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11819
11820   if (bit (thumb_insn_r->arm_insn, 12))
11821     {
11822       /* Handle load/store register offset.  */
11823       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11824
11825       if (in_inclusive_range (opB, 4U, 7U))
11826         {
11827           /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
11828           reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11829           record_buf[0] = reg_src1;
11830           thumb_insn_r->reg_rec_count = 1;
11831         }
11832       else if (in_inclusive_range (opB, 0U, 2U))
11833         {
11834           /* STR(2), STRB(2), STRH(2) .  */
11835           reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11836           reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11837           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11838           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11839           if (0 == opB)
11840             record_buf_mem[0] = 4;    /* STR (2).  */
11841           else if (2 == opB)
11842             record_buf_mem[0] = 1;    /*  STRB (2).  */
11843           else if (1 == opB)
11844             record_buf_mem[0] = 2;    /* STRH (2).  */
11845           record_buf_mem[1] = u_regval[0] + u_regval[1];
11846           thumb_insn_r->mem_rec_count = 1;
11847         }
11848     }
11849   else if (bit (thumb_insn_r->arm_insn, 11))
11850     {
11851       /* Handle load from literal pool.  */
11852       /* LDR(3).  */
11853       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11854       record_buf[0] = reg_src1;
11855       thumb_insn_r->reg_rec_count = 1;
11856     }
11857   else if (opcode1)
11858     {
11859       /* Special data instructions and branch and exchange */
11860       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11861       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11862       if ((3 == opcode2) && (!opcode3))
11863         {
11864           /* Branch with exchange.  */
11865           record_buf[0] = ARM_PS_REGNUM;
11866           thumb_insn_r->reg_rec_count = 1;
11867         }
11868       else
11869         {
11870           /* Format 8; special data processing insns.  */
11871           record_buf[0] = ARM_PS_REGNUM;
11872           record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11873                            | bits (thumb_insn_r->arm_insn, 0, 2));
11874           thumb_insn_r->reg_rec_count = 2;
11875         }
11876     }
11877   else
11878     {
11879       /* Format 5; data processing insns.  */
11880       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11881       if (bit (thumb_insn_r->arm_insn, 7))
11882         {
11883           reg_src1 = reg_src1 + 8;
11884         }
11885       record_buf[0] = ARM_PS_REGNUM;
11886       record_buf[1] = reg_src1;
11887       thumb_insn_r->reg_rec_count = 2;
11888     }
11889
11890   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11891   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11892              record_buf_mem);
11893
11894   return 0;
11895 }
11896
11897 /* Handling opcode 001 insns.  */
11898
11899 static int
11900 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11901 {
11902   struct regcache *reg_cache = thumb_insn_r->regcache;
11903   uint32_t record_buf[8], record_buf_mem[8];
11904
11905   uint32_t reg_src1 = 0;
11906   uint32_t opcode = 0, immed_5 = 0;
11907
11908   ULONGEST u_regval = 0;
11909
11910   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11911
11912   if (opcode)
11913     {
11914       /* LDR(1).  */
11915       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11916       record_buf[0] = reg_src1;
11917       thumb_insn_r->reg_rec_count = 1;
11918     }
11919   else
11920     {
11921       /* STR(1).  */
11922       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11923       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11924       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11925       record_buf_mem[0] = 4;
11926       record_buf_mem[1] = u_regval + (immed_5 * 4);
11927       thumb_insn_r->mem_rec_count = 1;
11928     }
11929
11930   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11931   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
11932              record_buf_mem);
11933
11934   return 0;
11935 }
11936
11937 /* Handling opcode 100 insns.  */
11938
11939 static int
11940 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11941 {
11942   struct regcache *reg_cache = thumb_insn_r->regcache;
11943   uint32_t record_buf[8], record_buf_mem[8];
11944
11945   uint32_t reg_src1 = 0;
11946   uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11947
11948   ULONGEST u_regval = 0;
11949
11950   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11951
11952   if (3 == opcode)
11953     {
11954       /* LDR(4).  */
11955       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11956       record_buf[0] = reg_src1;
11957       thumb_insn_r->reg_rec_count = 1;
11958     }
11959   else if (1 == opcode)
11960     {
11961       /* LDRH(1).  */
11962       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11963       record_buf[0] = reg_src1;
11964       thumb_insn_r->reg_rec_count = 1;
11965     }
11966   else if (2 == opcode)
11967     {
11968       /* STR(3).  */
11969       immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
11970       regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
11971       record_buf_mem[0] = 4;
11972       record_buf_mem[1] = u_regval + (immed_8 * 4);
11973       thumb_insn_r->mem_rec_count = 1;
11974     }
11975   else if (0 == opcode)
11976     {
11977       /* STRH(1).  */
11978       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11979       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11980       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11981       record_buf_mem[0] = 2;
11982       record_buf_mem[1] = u_regval + (immed_5 * 2);
11983       thumb_insn_r->mem_rec_count = 1;
11984     }
11985
11986   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11987   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11988              record_buf_mem);
11989
11990   return 0;
11991 }
11992
11993 /* Handling opcode 101 insns.  */
11994
11995 static int
11996 thumb_record_misc (insn_decode_record *thumb_insn_r)
11997 {
11998   struct regcache *reg_cache = thumb_insn_r->regcache;
11999
12000   uint32_t opcode = 0;
12001   uint32_t register_bits = 0, register_count = 0;
12002   uint32_t index = 0, start_address = 0;
12003   uint32_t record_buf[24], record_buf_mem[48];
12004   uint32_t reg_src1;
12005
12006   ULONGEST u_regval = 0;
12007
12008   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12009
12010   if (opcode == 0 || opcode == 1)
12011     {
12012       /* ADR and ADD (SP plus immediate) */
12013
12014       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12015       record_buf[0] = reg_src1;
12016       thumb_insn_r->reg_rec_count = 1;
12017     }
12018   else
12019     {
12020       /* Miscellaneous 16-bit instructions */
12021       uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
12022
12023       switch (opcode2)
12024         {
12025         case 6:
12026           /* SETEND and CPS */
12027           break;
12028         case 0:
12029           /* ADD/SUB (SP plus immediate)  */
12030           reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12031           record_buf[0] = ARM_SP_REGNUM;
12032           thumb_insn_r->reg_rec_count = 1;
12033           break;
12034         case 1: /* fall through  */
12035         case 3: /* fall through  */
12036         case 9: /* fall through  */
12037         case 11:
12038           /* CBNZ, CBZ */
12039           break;
12040         case 2:
12041           /* SXTH, SXTB, UXTH, UXTB */
12042           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12043           thumb_insn_r->reg_rec_count = 1;
12044           break;
12045         case 4: /* fall through  */
12046         case 5:
12047           /* PUSH.  */
12048           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12049           regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12050           while (register_bits)
12051             {
12052               if (register_bits & 0x00000001)
12053                 register_count++;
12054               register_bits = register_bits >> 1;
12055             }
12056           start_address = u_regval -  \
12057             (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12058           thumb_insn_r->mem_rec_count = register_count;
12059           while (register_count)
12060             {
12061               record_buf_mem[(register_count * 2) - 1] = start_address;
12062               record_buf_mem[(register_count * 2) - 2] = 4;
12063               start_address = start_address + 4;
12064               register_count--;
12065             }
12066           record_buf[0] = ARM_SP_REGNUM;
12067           thumb_insn_r->reg_rec_count = 1;
12068           break;
12069         case 10:
12070           /* REV, REV16, REVSH */
12071           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12072           thumb_insn_r->reg_rec_count = 1;
12073           break;
12074         case 12: /* fall through  */
12075         case 13:
12076           /* POP.  */
12077           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12078           while (register_bits)
12079             {
12080               if (register_bits & 0x00000001)
12081                 record_buf[index++] = register_count;
12082               register_bits = register_bits >> 1;
12083               register_count++;
12084             }
12085           record_buf[index++] = ARM_PS_REGNUM;
12086           record_buf[index++] = ARM_SP_REGNUM;
12087           thumb_insn_r->reg_rec_count = index;
12088           break;
12089         case 0xe:
12090           /* BKPT insn.  */
12091           /* Handle enhanced software breakpoint insn, BKPT.  */
12092           /* CPSR is changed to be executed in ARM state,  disabling normal
12093              interrupts, entering abort mode.  */
12094           /* According to high vector configuration PC is set.  */
12095           /* User hits breakpoint and type reverse, in that case, we need to go back with 
12096              previous CPSR and Program Counter.  */
12097           record_buf[0] = ARM_PS_REGNUM;
12098           record_buf[1] = ARM_LR_REGNUM;
12099           thumb_insn_r->reg_rec_count = 2;
12100           /* We need to save SPSR value, which is not yet done.  */
12101           printf_unfiltered (_("Process record does not support instruction "
12102                                "0x%0x at address %s.\n"),
12103                              thumb_insn_r->arm_insn,
12104                              paddress (thumb_insn_r->gdbarch,
12105                                        thumb_insn_r->this_addr));
12106           return -1;
12107
12108         case 0xf:
12109           /* If-Then, and hints */
12110           break;
12111         default:
12112           return -1;
12113         };
12114     }
12115
12116   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12117   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12118              record_buf_mem);
12119
12120   return 0;
12121 }
12122
12123 /* Handling opcode 110 insns.  */
12124
12125 static int
12126 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
12127 {
12128   struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12129   struct regcache *reg_cache = thumb_insn_r->regcache;
12130
12131   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
12132   uint32_t reg_src1 = 0;
12133   uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12134   uint32_t index = 0, start_address = 0;
12135   uint32_t record_buf[24], record_buf_mem[48];
12136
12137   ULONGEST u_regval = 0;
12138
12139   opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12140   opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12141
12142   if (1 == opcode2)
12143     {
12144
12145       /* LDMIA.  */
12146       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12147       /* Get Rn.  */
12148       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12149       while (register_bits)
12150         {
12151           if (register_bits & 0x00000001)
12152             record_buf[index++] = register_count;
12153           register_bits = register_bits >> 1;
12154           register_count++;
12155         }
12156       record_buf[index++] = reg_src1;
12157       thumb_insn_r->reg_rec_count = index;
12158     }
12159   else if (0 == opcode2)
12160     {
12161       /* It handles both STMIA.  */
12162       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12163       /* Get Rn.  */
12164       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12165       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12166       while (register_bits)
12167         {
12168           if (register_bits & 0x00000001)
12169             register_count++;
12170           register_bits = register_bits >> 1;
12171         }
12172       start_address = u_regval;
12173       thumb_insn_r->mem_rec_count = register_count;
12174       while (register_count)
12175         {
12176           record_buf_mem[(register_count * 2) - 1] = start_address;
12177           record_buf_mem[(register_count * 2) - 2] = 4;
12178           start_address = start_address + 4;
12179           register_count--;
12180         }
12181     }
12182   else if (0x1F == opcode1)
12183     {
12184         /* Handle arm syscall insn.  */
12185         if (tdep->arm_syscall_record != NULL)
12186           {
12187             regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12188             ret = tdep->arm_syscall_record (reg_cache, u_regval);
12189           }
12190         else
12191           {
12192             printf_unfiltered (_("no syscall record support\n"));
12193             return -1;
12194           }
12195     }
12196
12197   /* B (1), conditional branch is automatically taken care in process_record,
12198     as PC is saved there.  */
12199
12200   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12201   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12202              record_buf_mem);
12203
12204   return ret;
12205 }
12206
12207 /* Handling opcode 111 insns.  */
12208
12209 static int
12210 thumb_record_branch (insn_decode_record *thumb_insn_r)
12211 {
12212   uint32_t record_buf[8];
12213   uint32_t bits_h = 0;
12214
12215   bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12216
12217   if (2 == bits_h || 3 == bits_h)
12218     {
12219       /* BL */
12220       record_buf[0] = ARM_LR_REGNUM;
12221       thumb_insn_r->reg_rec_count = 1;
12222     }
12223   else if (1 == bits_h)
12224     {
12225       /* BLX(1). */
12226       record_buf[0] = ARM_PS_REGNUM;
12227       record_buf[1] = ARM_LR_REGNUM;
12228       thumb_insn_r->reg_rec_count = 2;
12229     }
12230
12231   /* B(2) is automatically taken care in process_record, as PC is 
12232      saved there.  */
12233
12234   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12235
12236   return 0;     
12237 }
12238
12239 /* Handler for thumb2 load/store multiple instructions.  */
12240
12241 static int
12242 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12243 {
12244   struct regcache *reg_cache = thumb2_insn_r->regcache;
12245
12246   uint32_t reg_rn, op;
12247   uint32_t register_bits = 0, register_count = 0;
12248   uint32_t index = 0, start_address = 0;
12249   uint32_t record_buf[24], record_buf_mem[48];
12250
12251   ULONGEST u_regval = 0;
12252
12253   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12254   op = bits (thumb2_insn_r->arm_insn, 23, 24);
12255
12256   if (0 == op || 3 == op)
12257     {
12258       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12259         {
12260           /* Handle RFE instruction.  */
12261           record_buf[0] = ARM_PS_REGNUM;
12262           thumb2_insn_r->reg_rec_count = 1;
12263         }
12264       else
12265         {
12266           /* Handle SRS instruction after reading banked SP.  */
12267           return arm_record_unsupported_insn (thumb2_insn_r);
12268         }
12269     }
12270   else if (1 == op || 2 == op)
12271     {
12272       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12273         {
12274           /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
12275           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12276           while (register_bits)
12277             {
12278               if (register_bits & 0x00000001)
12279                 record_buf[index++] = register_count;
12280
12281               register_count++;
12282               register_bits = register_bits >> 1;
12283             }
12284           record_buf[index++] = reg_rn;
12285           record_buf[index++] = ARM_PS_REGNUM;
12286           thumb2_insn_r->reg_rec_count = index;
12287         }
12288       else
12289         {
12290           /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
12291           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12292           regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12293           while (register_bits)
12294             {
12295               if (register_bits & 0x00000001)
12296                 register_count++;
12297
12298               register_bits = register_bits >> 1;
12299             }
12300
12301           if (1 == op)
12302             {
12303               /* Start address calculation for LDMDB/LDMEA.  */
12304               start_address = u_regval;
12305             }
12306           else if (2 == op)
12307             {
12308               /* Start address calculation for LDMDB/LDMEA.  */
12309               start_address = u_regval - register_count * 4;
12310             }
12311
12312           thumb2_insn_r->mem_rec_count = register_count;
12313           while (register_count)
12314             {
12315               record_buf_mem[register_count * 2 - 1] = start_address;
12316               record_buf_mem[register_count * 2 - 2] = 4;
12317               start_address = start_address + 4;
12318               register_count--;
12319             }
12320           record_buf[0] = reg_rn;
12321           record_buf[1] = ARM_PS_REGNUM;
12322           thumb2_insn_r->reg_rec_count = 2;
12323         }
12324     }
12325
12326   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12327             record_buf_mem);
12328   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12329             record_buf);
12330   return ARM_RECORD_SUCCESS;
12331 }
12332
12333 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12334    instructions.  */
12335
12336 static int
12337 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12338 {
12339   struct regcache *reg_cache = thumb2_insn_r->regcache;
12340
12341   uint32_t reg_rd, reg_rn, offset_imm;
12342   uint32_t reg_dest1, reg_dest2;
12343   uint32_t address, offset_addr;
12344   uint32_t record_buf[8], record_buf_mem[8];
12345   uint32_t op1, op2, op3;
12346
12347   ULONGEST u_regval[2];
12348
12349   op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12350   op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12351   op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12352
12353   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12354     {
12355       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12356         {
12357           reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12358           record_buf[0] = reg_dest1;
12359           record_buf[1] = ARM_PS_REGNUM;
12360           thumb2_insn_r->reg_rec_count = 2;
12361         }
12362
12363       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12364         {
12365           reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12366           record_buf[2] = reg_dest2;
12367           thumb2_insn_r->reg_rec_count = 3;
12368         }
12369     }
12370   else
12371     {
12372       reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12373       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12374
12375       if (0 == op1 && 0 == op2)
12376         {
12377           /* Handle STREX.  */
12378           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12379           address = u_regval[0] + (offset_imm * 4);
12380           record_buf_mem[0] = 4;
12381           record_buf_mem[1] = address;
12382           thumb2_insn_r->mem_rec_count = 1;
12383           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12384           record_buf[0] = reg_rd;
12385           thumb2_insn_r->reg_rec_count = 1;
12386         }
12387       else if (1 == op1 && 0 == op2)
12388         {
12389           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12390           record_buf[0] = reg_rd;
12391           thumb2_insn_r->reg_rec_count = 1;
12392           address = u_regval[0];
12393           record_buf_mem[1] = address;
12394
12395           if (4 == op3)
12396             {
12397               /* Handle STREXB.  */
12398               record_buf_mem[0] = 1;
12399               thumb2_insn_r->mem_rec_count = 1;
12400             }
12401           else if (5 == op3)
12402             {
12403               /* Handle STREXH.  */
12404               record_buf_mem[0] = 2 ;
12405               thumb2_insn_r->mem_rec_count = 1;
12406             }
12407           else if (7 == op3)
12408             {
12409               /* Handle STREXD.  */
12410               address = u_regval[0];
12411               record_buf_mem[0] = 4;
12412               record_buf_mem[2] = 4;
12413               record_buf_mem[3] = address + 4;
12414               thumb2_insn_r->mem_rec_count = 2;
12415             }
12416         }
12417       else
12418         {
12419           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12420
12421           if (bit (thumb2_insn_r->arm_insn, 24))
12422             {
12423               if (bit (thumb2_insn_r->arm_insn, 23))
12424                 offset_addr = u_regval[0] + (offset_imm * 4);
12425               else
12426                 offset_addr = u_regval[0] - (offset_imm * 4);
12427
12428               address = offset_addr;
12429             }
12430           else
12431             address = u_regval[0];
12432
12433           record_buf_mem[0] = 4;
12434           record_buf_mem[1] = address;
12435           record_buf_mem[2] = 4;
12436           record_buf_mem[3] = address + 4;
12437           thumb2_insn_r->mem_rec_count = 2;
12438           record_buf[0] = reg_rn;
12439           thumb2_insn_r->reg_rec_count = 1;
12440         }
12441     }
12442
12443   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12444             record_buf);
12445   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12446             record_buf_mem);
12447   return ARM_RECORD_SUCCESS;
12448 }
12449
12450 /* Handler for thumb2 data processing (shift register and modified immediate)
12451    instructions.  */
12452
12453 static int
12454 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12455 {
12456   uint32_t reg_rd, op;
12457   uint32_t record_buf[8];
12458
12459   op = bits (thumb2_insn_r->arm_insn, 21, 24);
12460   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12461
12462   if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12463     {
12464       record_buf[0] = ARM_PS_REGNUM;
12465       thumb2_insn_r->reg_rec_count = 1;
12466     }
12467   else
12468     {
12469       record_buf[0] = reg_rd;
12470       record_buf[1] = ARM_PS_REGNUM;
12471       thumb2_insn_r->reg_rec_count = 2;
12472     }
12473
12474   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12475             record_buf);
12476   return ARM_RECORD_SUCCESS;
12477 }
12478
12479 /* Generic handler for thumb2 instructions which effect destination and PS
12480    registers.  */
12481
12482 static int
12483 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12484 {
12485   uint32_t reg_rd;
12486   uint32_t record_buf[8];
12487
12488   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12489
12490   record_buf[0] = reg_rd;
12491   record_buf[1] = ARM_PS_REGNUM;
12492   thumb2_insn_r->reg_rec_count = 2;
12493
12494   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12495             record_buf);
12496   return ARM_RECORD_SUCCESS;
12497 }
12498
12499 /* Handler for thumb2 branch and miscellaneous control instructions.  */
12500
12501 static int
12502 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12503 {
12504   uint32_t op, op1, op2;
12505   uint32_t record_buf[8];
12506
12507   op = bits (thumb2_insn_r->arm_insn, 20, 26);
12508   op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12509   op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12510
12511   /* Handle MSR insn.  */
12512   if (!(op1 & 0x2) && 0x38 == op)
12513     {
12514       if (!(op2 & 0x3))
12515         {
12516           /* CPSR is going to be changed.  */
12517           record_buf[0] = ARM_PS_REGNUM;
12518           thumb2_insn_r->reg_rec_count = 1;
12519         }
12520       else
12521         {
12522           arm_record_unsupported_insn(thumb2_insn_r);
12523           return -1;
12524         }
12525     }
12526   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12527     {
12528       /* BLX.  */
12529       record_buf[0] = ARM_PS_REGNUM;
12530       record_buf[1] = ARM_LR_REGNUM;
12531       thumb2_insn_r->reg_rec_count = 2;
12532     }
12533
12534   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12535             record_buf);
12536   return ARM_RECORD_SUCCESS;
12537 }
12538
12539 /* Handler for thumb2 store single data item instructions.  */
12540
12541 static int
12542 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12543 {
12544   struct regcache *reg_cache = thumb2_insn_r->regcache;
12545
12546   uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12547   uint32_t address, offset_addr;
12548   uint32_t record_buf[8], record_buf_mem[8];
12549   uint32_t op1, op2;
12550
12551   ULONGEST u_regval[2];
12552
12553   op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12554   op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12555   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12556   regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12557
12558   if (bit (thumb2_insn_r->arm_insn, 23))
12559     {
12560       /* T2 encoding.  */
12561       offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12562       offset_addr = u_regval[0] + offset_imm;
12563       address = offset_addr;
12564     }
12565   else
12566     {
12567       /* T3 encoding.  */
12568       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12569         {
12570           /* Handle STRB (register).  */
12571           reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12572           regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12573           shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12574           offset_addr = u_regval[1] << shift_imm;
12575           address = u_regval[0] + offset_addr;
12576         }
12577       else
12578         {
12579           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12580           if (bit (thumb2_insn_r->arm_insn, 10))
12581             {
12582               if (bit (thumb2_insn_r->arm_insn, 9))
12583                 offset_addr = u_regval[0] + offset_imm;
12584               else
12585                 offset_addr = u_regval[0] - offset_imm;
12586
12587               address = offset_addr;
12588             }
12589           else
12590             address = u_regval[0];
12591         }
12592     }
12593
12594   switch (op1)
12595     {
12596       /* Store byte instructions.  */
12597       case 4:
12598       case 0:
12599         record_buf_mem[0] = 1;
12600         break;
12601       /* Store half word instructions.  */
12602       case 1:
12603       case 5:
12604         record_buf_mem[0] = 2;
12605         break;
12606       /* Store word instructions.  */
12607       case 2:
12608       case 6:
12609         record_buf_mem[0] = 4;
12610         break;
12611
12612       default:
12613         gdb_assert_not_reached ("no decoding pattern found");
12614         break;
12615     }
12616
12617   record_buf_mem[1] = address;
12618   thumb2_insn_r->mem_rec_count = 1;
12619   record_buf[0] = reg_rn;
12620   thumb2_insn_r->reg_rec_count = 1;
12621
12622   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12623             record_buf);
12624   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12625             record_buf_mem);
12626   return ARM_RECORD_SUCCESS;
12627 }
12628
12629 /* Handler for thumb2 load memory hints instructions.  */
12630
12631 static int
12632 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12633 {
12634   uint32_t record_buf[8];
12635   uint32_t reg_rt, reg_rn;
12636
12637   reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12638   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12639
12640   if (ARM_PC_REGNUM != reg_rt)
12641     {
12642       record_buf[0] = reg_rt;
12643       record_buf[1] = reg_rn;
12644       record_buf[2] = ARM_PS_REGNUM;
12645       thumb2_insn_r->reg_rec_count = 3;
12646
12647       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12648                 record_buf);
12649       return ARM_RECORD_SUCCESS;
12650     }
12651
12652   return ARM_RECORD_FAILURE;
12653 }
12654
12655 /* Handler for thumb2 load word instructions.  */
12656
12657 static int
12658 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12659 {
12660   uint32_t record_buf[8];
12661
12662   record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12663   record_buf[1] = ARM_PS_REGNUM;
12664   thumb2_insn_r->reg_rec_count = 2;
12665
12666   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12667             record_buf);
12668   return ARM_RECORD_SUCCESS;
12669 }
12670
12671 /* Handler for thumb2 long multiply, long multiply accumulate, and
12672    divide instructions.  */
12673
12674 static int
12675 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12676 {
12677   uint32_t opcode1 = 0, opcode2 = 0;
12678   uint32_t record_buf[8];
12679
12680   opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12681   opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12682
12683   if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12684     {
12685       /* Handle SMULL, UMULL, SMULAL.  */
12686       /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
12687       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12688       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12689       record_buf[2] = ARM_PS_REGNUM;
12690       thumb2_insn_r->reg_rec_count = 3;
12691     }
12692   else if (1 == opcode1 || 3 == opcode2)
12693     {
12694       /* Handle SDIV and UDIV.  */
12695       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12696       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12697       record_buf[2] = ARM_PS_REGNUM;
12698       thumb2_insn_r->reg_rec_count = 3;
12699     }
12700   else
12701     return ARM_RECORD_FAILURE;
12702
12703   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12704             record_buf);
12705   return ARM_RECORD_SUCCESS;
12706 }
12707
12708 /* Record handler for thumb32 coprocessor instructions.  */
12709
12710 static int
12711 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12712 {
12713   if (bit (thumb2_insn_r->arm_insn, 25))
12714     return arm_record_coproc_data_proc (thumb2_insn_r);
12715   else
12716     return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12717 }
12718
12719 /* Record handler for advance SIMD structure load/store instructions.  */
12720
12721 static int
12722 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12723 {
12724   struct regcache *reg_cache = thumb2_insn_r->regcache;
12725   uint32_t l_bit, a_bit, b_bits;
12726   uint32_t record_buf[128], record_buf_mem[128];
12727   uint32_t reg_rn, reg_vd, address, f_elem;
12728   uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12729   uint8_t f_ebytes;
12730
12731   l_bit = bit (thumb2_insn_r->arm_insn, 21);
12732   a_bit = bit (thumb2_insn_r->arm_insn, 23);
12733   b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12734   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12735   reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12736   reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12737   f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12738   f_elem = 8 / f_ebytes;
12739
12740   if (!l_bit)
12741     {
12742       ULONGEST u_regval = 0;
12743       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12744       address = u_regval;
12745
12746       if (!a_bit)
12747         {
12748           /* Handle VST1.  */
12749           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12750             {
12751               if (b_bits == 0x07)
12752                 bf_regs = 1;
12753               else if (b_bits == 0x0a)
12754                 bf_regs = 2;
12755               else if (b_bits == 0x06)
12756                 bf_regs = 3;
12757               else if (b_bits == 0x02)
12758                 bf_regs = 4;
12759               else
12760                 bf_regs = 0;
12761
12762               for (index_r = 0; index_r < bf_regs; index_r++)
12763                 {
12764                   for (index_e = 0; index_e < f_elem; index_e++)
12765                     {
12766                       record_buf_mem[index_m++] = f_ebytes;
12767                       record_buf_mem[index_m++] = address;
12768                       address = address + f_ebytes;
12769                       thumb2_insn_r->mem_rec_count += 1;
12770                     }
12771                 }
12772             }
12773           /* Handle VST2.  */
12774           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12775             {
12776               if (b_bits == 0x09 || b_bits == 0x08)
12777                 bf_regs = 1;
12778               else if (b_bits == 0x03)
12779                 bf_regs = 2;
12780               else
12781                 bf_regs = 0;
12782
12783               for (index_r = 0; index_r < bf_regs; index_r++)
12784                 for (index_e = 0; index_e < f_elem; index_e++)
12785                   {
12786                     for (loop_t = 0; loop_t < 2; loop_t++)
12787                       {
12788                         record_buf_mem[index_m++] = f_ebytes;
12789                         record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12790                         thumb2_insn_r->mem_rec_count += 1;
12791                       }
12792                     address = address + (2 * f_ebytes);
12793                   }
12794             }
12795           /* Handle VST3.  */
12796           else if ((b_bits & 0x0e) == 0x04)
12797             {
12798               for (index_e = 0; index_e < f_elem; index_e++)
12799                 {
12800                   for (loop_t = 0; loop_t < 3; loop_t++)
12801                     {
12802                       record_buf_mem[index_m++] = f_ebytes;
12803                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12804                       thumb2_insn_r->mem_rec_count += 1;
12805                     }
12806                   address = address + (3 * f_ebytes);
12807                 }
12808             }
12809           /* Handle VST4.  */
12810           else if (!(b_bits & 0x0e))
12811             {
12812               for (index_e = 0; index_e < f_elem; index_e++)
12813                 {
12814                   for (loop_t = 0; loop_t < 4; loop_t++)
12815                     {
12816                       record_buf_mem[index_m++] = f_ebytes;
12817                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12818                       thumb2_insn_r->mem_rec_count += 1;
12819                     }
12820                   address = address + (4 * f_ebytes);
12821                 }
12822             }
12823         }
12824       else
12825         {
12826           uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12827
12828           if (bft_size == 0x00)
12829             f_ebytes = 1;
12830           else if (bft_size == 0x01)
12831             f_ebytes = 2;
12832           else if (bft_size == 0x02)
12833             f_ebytes = 4;
12834           else
12835             f_ebytes = 0;
12836
12837           /* Handle VST1.  */
12838           if (!(b_bits & 0x0b) || b_bits == 0x08)
12839             thumb2_insn_r->mem_rec_count = 1;
12840           /* Handle VST2.  */
12841           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12842             thumb2_insn_r->mem_rec_count = 2;
12843           /* Handle VST3.  */
12844           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12845             thumb2_insn_r->mem_rec_count = 3;
12846           /* Handle VST4.  */
12847           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12848             thumb2_insn_r->mem_rec_count = 4;
12849
12850           for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12851             {
12852               record_buf_mem[index_m] = f_ebytes;
12853               record_buf_mem[index_m] = address + (index_m * f_ebytes);
12854             }
12855         }
12856     }
12857   else
12858     {
12859       if (!a_bit)
12860         {
12861           /* Handle VLD1.  */
12862           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12863             thumb2_insn_r->reg_rec_count = 1;
12864           /* Handle VLD2.  */
12865           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12866             thumb2_insn_r->reg_rec_count = 2;
12867           /* Handle VLD3.  */
12868           else if ((b_bits & 0x0e) == 0x04)
12869             thumb2_insn_r->reg_rec_count = 3;
12870           /* Handle VLD4.  */
12871           else if (!(b_bits & 0x0e))
12872             thumb2_insn_r->reg_rec_count = 4;
12873         }
12874       else
12875         {
12876           /* Handle VLD1.  */
12877           if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12878             thumb2_insn_r->reg_rec_count = 1;
12879           /* Handle VLD2.  */
12880           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12881             thumb2_insn_r->reg_rec_count = 2;
12882           /* Handle VLD3.  */
12883           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12884             thumb2_insn_r->reg_rec_count = 3;
12885           /* Handle VLD4.  */
12886           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12887             thumb2_insn_r->reg_rec_count = 4;
12888
12889           for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12890             record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12891         }
12892     }
12893
12894   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12895     {
12896       record_buf[index_r] = reg_rn;
12897       thumb2_insn_r->reg_rec_count += 1;
12898     }
12899
12900   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12901             record_buf);
12902   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12903             record_buf_mem);
12904   return 0;
12905 }
12906
12907 /* Decodes thumb2 instruction type and invokes its record handler.  */
12908
12909 static unsigned int
12910 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12911 {
12912   uint32_t op, op1, op2;
12913
12914   op = bit (thumb2_insn_r->arm_insn, 15);
12915   op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12916   op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12917
12918   if (op1 == 0x01)
12919     {
12920       if (!(op2 & 0x64 ))
12921         {
12922           /* Load/store multiple instruction.  */
12923           return thumb2_record_ld_st_multiple (thumb2_insn_r);
12924         }
12925       else if ((op2 & 0x64) == 0x4)
12926         {
12927           /* Load/store (dual/exclusive) and table branch instruction.  */
12928           return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12929         }
12930       else if ((op2 & 0x60) == 0x20)
12931         {
12932           /* Data-processing (shifted register).  */
12933           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12934         }
12935       else if (op2 & 0x40)
12936         {
12937           /* Co-processor instructions.  */
12938           return thumb2_record_coproc_insn (thumb2_insn_r);
12939         }
12940     }
12941   else if (op1 == 0x02)
12942     {
12943       if (op)
12944         {
12945           /* Branches and miscellaneous control instructions.  */
12946           return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12947         }
12948       else if (op2 & 0x20)
12949         {
12950           /* Data-processing (plain binary immediate) instruction.  */
12951           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12952         }
12953       else
12954         {
12955           /* Data-processing (modified immediate).  */
12956           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12957         }
12958     }
12959   else if (op1 == 0x03)
12960     {
12961       if (!(op2 & 0x71 ))
12962         {
12963           /* Store single data item.  */
12964           return thumb2_record_str_single_data (thumb2_insn_r);
12965         }
12966       else if (!((op2 & 0x71) ^ 0x10))
12967         {
12968           /* Advanced SIMD or structure load/store instructions.  */
12969           return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
12970         }
12971       else if (!((op2 & 0x67) ^ 0x01))
12972         {
12973           /* Load byte, memory hints instruction.  */
12974           return thumb2_record_ld_mem_hints (thumb2_insn_r);
12975         }
12976       else if (!((op2 & 0x67) ^ 0x03))
12977         {
12978           /* Load halfword, memory hints instruction.  */
12979           return thumb2_record_ld_mem_hints (thumb2_insn_r);
12980         }
12981       else if (!((op2 & 0x67) ^ 0x05))
12982         {
12983           /* Load word instruction.  */
12984           return thumb2_record_ld_word (thumb2_insn_r);
12985         }
12986       else if (!((op2 & 0x70) ^ 0x20))
12987         {
12988           /* Data-processing (register) instruction.  */
12989           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12990         }
12991       else if (!((op2 & 0x78) ^ 0x30))
12992         {
12993           /* Multiply, multiply accumulate, abs diff instruction.  */
12994           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12995         }
12996       else if (!((op2 & 0x78) ^ 0x38))
12997         {
12998           /* Long multiply, long multiply accumulate, and divide.  */
12999           return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13000         }
13001       else if (op2 & 0x40)
13002         {
13003           /* Co-processor instructions.  */
13004           return thumb2_record_coproc_insn (thumb2_insn_r);
13005         }
13006    }
13007
13008   return -1;
13009 }
13010
13011 namespace {
13012 /* Abstract memory reader.  */
13013
13014 class abstract_memory_reader
13015 {
13016 public:
13017   /* Read LEN bytes of target memory at address MEMADDR, placing the
13018      results in GDB's memory at BUF.  Return true on success.  */
13019
13020   virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
13021 };
13022
13023 /* Instruction reader from real target.  */
13024
13025 class instruction_reader : public abstract_memory_reader
13026 {
13027  public:
13028   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13029   {
13030     if (target_read_memory (memaddr, buf, len))
13031       return false;
13032     else
13033       return true;
13034   }
13035 };
13036
13037 } // namespace
13038
13039 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
13040 and positive val on fauilure.  */
13041
13042 static int
13043 extract_arm_insn (abstract_memory_reader& reader,
13044                   insn_decode_record *insn_record, uint32_t insn_size)
13045 {
13046   gdb_byte buf[insn_size];
13047
13048   memset (&buf[0], 0, insn_size);
13049   
13050   if (!reader.read (insn_record->this_addr, buf, insn_size))
13051     return 1;
13052   insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13053                            insn_size, 
13054                            gdbarch_byte_order_for_code (insn_record->gdbarch));
13055   return 0;
13056 }
13057
13058 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13059
13060 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13061    dispatch it.  */
13062
13063 static int
13064 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13065              record_type_t record_type, uint32_t insn_size)
13066 {
13067
13068   /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13069      instruction.  */
13070   static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13071   {
13072     arm_record_data_proc_misc_ld_str,   /* 000.  */
13073     arm_record_data_proc_imm,           /* 001.  */
13074     arm_record_ld_st_imm_offset,        /* 010.  */
13075     arm_record_ld_st_reg_offset,        /* 011.  */
13076     arm_record_ld_st_multiple,          /* 100.  */
13077     arm_record_b_bl,                    /* 101.  */
13078     arm_record_asimd_vfp_coproc,        /* 110.  */
13079     arm_record_coproc_data_proc         /* 111.  */
13080   };
13081
13082   /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13083      instruction.  */
13084   static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13085   { \
13086     thumb_record_shift_add_sub,        /* 000.  */
13087     thumb_record_add_sub_cmp_mov,      /* 001.  */
13088     thumb_record_ld_st_reg_offset,     /* 010.  */
13089     thumb_record_ld_st_imm_offset,     /* 011.  */
13090     thumb_record_ld_st_stack,          /* 100.  */
13091     thumb_record_misc,                 /* 101.  */
13092     thumb_record_ldm_stm_swi,          /* 110.  */
13093     thumb_record_branch                /* 111.  */
13094   };
13095
13096   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
13097   uint32_t insn_id = 0;
13098
13099   if (extract_arm_insn (reader, arm_record, insn_size))
13100     {
13101       if (record_debug)
13102         {
13103           printf_unfiltered (_("Process record: error reading memory at "
13104                                "addr %s len = %d.\n"),
13105                              paddress (arm_record->gdbarch,
13106                                        arm_record->this_addr), insn_size);
13107         }
13108       return -1;
13109     }
13110   else if (ARM_RECORD == record_type)
13111     {
13112       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13113       insn_id = bits (arm_record->arm_insn, 25, 27);
13114
13115       if (arm_record->cond == 0xf)
13116         ret = arm_record_extension_space (arm_record);
13117       else
13118         {
13119           /* If this insn has fallen into extension space
13120              then we need not decode it anymore.  */
13121           ret = arm_handle_insn[insn_id] (arm_record);
13122         }
13123       if (ret != ARM_RECORD_SUCCESS)
13124         {
13125           arm_record_unsupported_insn (arm_record);
13126           ret = -1;
13127         }
13128     }
13129   else if (THUMB_RECORD == record_type)
13130     {
13131       /* As thumb does not have condition codes, we set negative.  */
13132       arm_record->cond = -1;
13133       insn_id = bits (arm_record->arm_insn, 13, 15);
13134       ret = thumb_handle_insn[insn_id] (arm_record);
13135       if (ret != ARM_RECORD_SUCCESS)
13136         {
13137           arm_record_unsupported_insn (arm_record);
13138           ret = -1;
13139         }
13140     }
13141   else if (THUMB2_RECORD == record_type)
13142     {
13143       /* As thumb does not have condition codes, we set negative.  */
13144       arm_record->cond = -1;
13145
13146       /* Swap first half of 32bit thumb instruction with second half.  */
13147       arm_record->arm_insn
13148         = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13149
13150       ret = thumb2_record_decode_insn_handler (arm_record);
13151
13152       if (ret != ARM_RECORD_SUCCESS)
13153         {
13154           arm_record_unsupported_insn (arm_record);
13155           ret = -1;
13156         }
13157     }
13158   else
13159     {
13160       /* Throw assertion.  */
13161       gdb_assert_not_reached ("not a valid instruction, could not decode");
13162     }
13163
13164   return ret;
13165 }
13166
13167 #if GDB_SELF_TEST
13168 namespace selftests {
13169
13170 /* Provide both 16-bit and 32-bit thumb instructions.  */
13171
13172 class instruction_reader_thumb : public abstract_memory_reader
13173 {
13174 public:
13175   template<size_t SIZE>
13176   instruction_reader_thumb (enum bfd_endian endian,
13177                             const uint16_t (&insns)[SIZE])
13178     : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13179   {}
13180
13181   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13182   {
13183     SELF_CHECK (len == 4 || len == 2);
13184     SELF_CHECK (memaddr % 2 == 0);
13185     SELF_CHECK ((memaddr / 2) < m_insns_size);
13186
13187     store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13188     if (len == 4)
13189       {
13190         store_unsigned_integer (&buf[2], 2, m_endian,
13191                                 m_insns[memaddr / 2 + 1]);
13192       }
13193     return true;
13194   }
13195
13196 private:
13197   enum bfd_endian m_endian;
13198   const uint16_t *m_insns;
13199   size_t m_insns_size;
13200 };
13201
13202 static void
13203 arm_record_test (void)
13204 {
13205   struct gdbarch_info info;
13206   gdbarch_info_init (&info);
13207   info.bfd_arch_info = bfd_scan_arch ("arm");
13208
13209   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13210
13211   SELF_CHECK (gdbarch != NULL);
13212
13213   /* 16-bit Thumb instructions.  */
13214   {
13215     insn_decode_record arm_record;
13216
13217     memset (&arm_record, 0, sizeof (insn_decode_record));
13218     arm_record.gdbarch = gdbarch;
13219
13220     static const uint16_t insns[] = {
13221       /* db b2  uxtb    r3, r3 */
13222       0xb2db,
13223       /* cd 58  ldr     r5, [r1, r3] */
13224       0x58cd,
13225     };
13226
13227     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13228     instruction_reader_thumb reader (endian, insns);
13229     int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13230                            THUMB_INSN_SIZE_BYTES);
13231
13232     SELF_CHECK (ret == 0);
13233     SELF_CHECK (arm_record.mem_rec_count == 0);
13234     SELF_CHECK (arm_record.reg_rec_count == 1);
13235     SELF_CHECK (arm_record.arm_regs[0] == 3);
13236
13237     arm_record.this_addr += 2;
13238     ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13239                        THUMB_INSN_SIZE_BYTES);
13240
13241     SELF_CHECK (ret == 0);
13242     SELF_CHECK (arm_record.mem_rec_count == 0);
13243     SELF_CHECK (arm_record.reg_rec_count == 1);
13244     SELF_CHECK (arm_record.arm_regs[0] == 5);
13245   }
13246
13247   /* 32-bit Thumb-2 instructions.  */
13248   {
13249     insn_decode_record arm_record;
13250
13251     memset (&arm_record, 0, sizeof (insn_decode_record));
13252     arm_record.gdbarch = gdbarch;
13253
13254     static const uint16_t insns[] = {
13255       /* 1d ee 70 7f     mrc    15, 0, r7, cr13, cr0, {3} */
13256       0xee1d, 0x7f70,
13257     };
13258
13259     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13260     instruction_reader_thumb reader (endian, insns);
13261     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13262                            THUMB2_INSN_SIZE_BYTES);
13263
13264     SELF_CHECK (ret == 0);
13265     SELF_CHECK (arm_record.mem_rec_count == 0);
13266     SELF_CHECK (arm_record.reg_rec_count == 1);
13267     SELF_CHECK (arm_record.arm_regs[0] == 7);
13268   }
13269 }
13270 } // namespace selftests
13271 #endif /* GDB_SELF_TEST */
13272
13273 /* Cleans up local record registers and memory allocations.  */
13274
13275 static void 
13276 deallocate_reg_mem (insn_decode_record *record)
13277 {
13278   xfree (record->arm_regs);
13279   xfree (record->arm_mems);    
13280 }
13281
13282
13283 /* Parse the current instruction and record the values of the registers and
13284    memory that will be changed in current instruction to record_arch_list".
13285    Return -1 if something is wrong.  */
13286
13287 int
13288 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13289                     CORE_ADDR insn_addr)
13290 {
13291
13292   uint32_t no_of_rec = 0;
13293   uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
13294   ULONGEST t_bit = 0, insn_id = 0;
13295
13296   ULONGEST u_regval = 0;
13297
13298   insn_decode_record arm_record;
13299
13300   memset (&arm_record, 0, sizeof (insn_decode_record));
13301   arm_record.regcache = regcache;
13302   arm_record.this_addr = insn_addr;
13303   arm_record.gdbarch = gdbarch;
13304
13305
13306   if (record_debug > 1)
13307     {
13308       fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13309                           "addr = %s\n",
13310       paddress (gdbarch, arm_record.this_addr));
13311     }
13312
13313   instruction_reader reader;
13314   if (extract_arm_insn (reader, &arm_record, 2))
13315     {
13316       if (record_debug)
13317         {
13318           printf_unfiltered (_("Process record: error reading memory at "
13319                                "addr %s len = %d.\n"),
13320                              paddress (arm_record.gdbarch,
13321                                        arm_record.this_addr), 2);
13322         }
13323       return -1;
13324     }
13325
13326   /* Check the insn, whether it is thumb or arm one.  */
13327
13328   t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13329   regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13330
13331
13332   if (!(u_regval & t_bit))
13333     {
13334       /* We are decoding arm insn.  */
13335       ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13336     }
13337   else
13338     {
13339       insn_id = bits (arm_record.arm_insn, 11, 15);
13340       /* is it thumb2 insn?  */
13341       if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13342         {
13343           ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13344                              THUMB2_INSN_SIZE_BYTES);
13345         }
13346       else
13347         {
13348           /* We are decoding thumb insn.  */
13349           ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13350                              THUMB_INSN_SIZE_BYTES);
13351         }
13352     }
13353
13354   if (0 == ret)
13355     {
13356       /* Record registers.  */
13357       record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13358       if (arm_record.arm_regs)
13359         {
13360           for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13361             {
13362               if (record_full_arch_list_add_reg
13363                   (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13364                 ret = -1;
13365             }
13366         }
13367       /* Record memories.  */
13368       if (arm_record.arm_mems)
13369         {
13370           for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13371             {
13372               if (record_full_arch_list_add_mem
13373                   ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13374                    arm_record.arm_mems[no_of_rec].len))
13375                 ret = -1;
13376             }
13377         }
13378
13379       if (record_full_arch_list_add_end ())
13380         ret = -1;
13381     }
13382
13383
13384   deallocate_reg_mem (&arm_record);
13385
13386   return ret;
13387 }
This page took 0.780176 seconds and 4 git commands to generate.