Remove regcache_cooked_write
[external/binutils.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2
3    Copyright (C) 1988-2018 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 #include <ctype.h>              /* XXX for isupper ().  */
23
24 #include "frame.h"
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "dis-asm.h"            /* For register styles.  */
30 #include "disasm.h"
31 #include "regcache.h"
32 #include "reggroups.h"
33 #include "target-float.h"
34 #include "value.h"
35 #include "arch-utils.h"
36 #include "osabi.h"
37 #include "frame-unwind.h"
38 #include "frame-base.h"
39 #include "trad-frame.h"
40 #include "objfiles.h"
41 #include "dwarf2-frame.h"
42 #include "gdbtypes.h"
43 #include "prologue-value.h"
44 #include "remote.h"
45 #include "target-descriptions.h"
46 #include "user-regs.h"
47 #include "observable.h"
48
49 #include "arch/arm.h"
50 #include "arch/arm-get-next-pcs.h"
51 #include "arm-tdep.h"
52 #include "gdb/sim-arm.h"
53
54 #include "elf-bfd.h"
55 #include "coff/internal.h"
56 #include "elf/arm.h"
57
58 #include "vec.h"
59
60 #include "record.h"
61 #include "record-full.h"
62 #include <algorithm>
63
64 #include "features/arm/arm-with-m.c"
65 #include "features/arm/arm-with-m-fpa-layout.c"
66 #include "features/arm/arm-with-m-vfp-d16.c"
67 #include "features/arm/arm-with-iwmmxt.c"
68 #include "features/arm/arm-with-vfpv2.c"
69 #include "features/arm/arm-with-vfpv3.c"
70 #include "features/arm/arm-with-neon.c"
71
72 #if GDB_SELF_TEST
73 #include "selftest.h"
74 #endif
75
76 static int arm_debug;
77
78 /* Macros for setting and testing a bit in a minimal symbol that marks
79    it as Thumb function.  The MSB of the minimal symbol's "info" field
80    is used for this purpose.
81
82    MSYMBOL_SET_SPECIAL  Actually sets the "special" bit.
83    MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.  */
84
85 #define MSYMBOL_SET_SPECIAL(msym)                               \
86         MSYMBOL_TARGET_FLAG_1 (msym) = 1
87
88 #define MSYMBOL_IS_SPECIAL(msym)                                \
89         MSYMBOL_TARGET_FLAG_1 (msym)
90
91 /* Per-objfile data used for mapping symbols.  */
92 static const struct objfile_data *arm_objfile_data_key;
93
94 struct arm_mapping_symbol
95 {
96   bfd_vma value;
97   char type;
98 };
99 typedef struct arm_mapping_symbol arm_mapping_symbol_s;
100 DEF_VEC_O(arm_mapping_symbol_s);
101
102 struct arm_per_objfile
103 {
104   VEC(arm_mapping_symbol_s) **section_maps;
105 };
106
107 /* The list of available "set arm ..." and "show arm ..." commands.  */
108 static struct cmd_list_element *setarmcmdlist = NULL;
109 static struct cmd_list_element *showarmcmdlist = NULL;
110
111 /* The type of floating-point to use.  Keep this in sync with enum
112    arm_float_model, and the help string in _initialize_arm_tdep.  */
113 static const char *const fp_model_strings[] =
114 {
115   "auto",
116   "softfpa",
117   "fpa",
118   "softvfp",
119   "vfp",
120   NULL
121 };
122
123 /* A variable that can be configured by the user.  */
124 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
125 static const char *current_fp_model = "auto";
126
127 /* The ABI to use.  Keep this in sync with arm_abi_kind.  */
128 static const char *const arm_abi_strings[] =
129 {
130   "auto",
131   "APCS",
132   "AAPCS",
133   NULL
134 };
135
136 /* A variable that can be configured by the user.  */
137 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
138 static const char *arm_abi_string = "auto";
139
140 /* The execution mode to assume.  */
141 static const char *const arm_mode_strings[] =
142   {
143     "auto",
144     "arm",
145     "thumb",
146     NULL
147   };
148
149 static const char *arm_fallback_mode_string = "auto";
150 static const char *arm_force_mode_string = "auto";
151
152 /* The standard register names, and all the valid aliases for them.  Note
153    that `fp', `sp' and `pc' are not added in this alias list, because they
154    have been added as builtin user registers in
155    std-regs.c:_initialize_frame_reg.  */
156 static const struct
157 {
158   const char *name;
159   int regnum;
160 } arm_register_aliases[] = {
161   /* Basic register numbers.  */
162   { "r0", 0 },
163   { "r1", 1 },
164   { "r2", 2 },
165   { "r3", 3 },
166   { "r4", 4 },
167   { "r5", 5 },
168   { "r6", 6 },
169   { "r7", 7 },
170   { "r8", 8 },
171   { "r9", 9 },
172   { "r10", 10 },
173   { "r11", 11 },
174   { "r12", 12 },
175   { "r13", 13 },
176   { "r14", 14 },
177   { "r15", 15 },
178   /* Synonyms (argument and variable registers).  */
179   { "a1", 0 },
180   { "a2", 1 },
181   { "a3", 2 },
182   { "a4", 3 },
183   { "v1", 4 },
184   { "v2", 5 },
185   { "v3", 6 },
186   { "v4", 7 },
187   { "v5", 8 },
188   { "v6", 9 },
189   { "v7", 10 },
190   { "v8", 11 },
191   /* Other platform-specific names for r9.  */
192   { "sb", 9 },
193   { "tr", 9 },
194   /* Special names.  */
195   { "ip", 12 },
196   { "lr", 14 },
197   /* Names used by GCC (not listed in the ARM EABI).  */
198   { "sl", 10 },
199   /* A special name from the older ATPCS.  */
200   { "wr", 7 },
201 };
202
203 static const char *const arm_register_names[] =
204 {"r0",  "r1",  "r2",  "r3",     /*  0  1  2  3 */
205  "r4",  "r5",  "r6",  "r7",     /*  4  5  6  7 */
206  "r8",  "r9",  "r10", "r11",    /*  8  9 10 11 */
207  "r12", "sp",  "lr",  "pc",     /* 12 13 14 15 */
208  "f0",  "f1",  "f2",  "f3",     /* 16 17 18 19 */
209  "f4",  "f5",  "f6",  "f7",     /* 20 21 22 23 */
210  "fps", "cpsr" };               /* 24 25       */
211
212 /* Holds the current set of options to be passed to the disassembler.  */
213 static char *arm_disassembler_options;
214
215 /* Valid register name styles.  */
216 static const char **valid_disassembly_styles;
217
218 /* Disassembly style to use. Default to "std" register names.  */
219 static const char *disassembly_style;
220
221 /* This is used to keep the bfd arch_info in sync with the disassembly
222    style.  */
223 static void set_disassembly_style_sfunc (const char *, int,
224                                          struct cmd_list_element *);
225 static void show_disassembly_style_sfunc (struct ui_file *, int,
226                                           struct cmd_list_element *,
227                                           const char *);
228
229 static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch,
230                                                 readable_regcache *regcache,
231                                                 int regnum, gdb_byte *buf);
232 static void arm_neon_quad_write (struct gdbarch *gdbarch,
233                                  struct regcache *regcache,
234                                  int regnum, const gdb_byte *buf);
235
236 static CORE_ADDR
237   arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
238
239
240 /* get_next_pcs operations.  */
241 static struct arm_get_next_pcs_ops arm_get_next_pcs_ops = {
242   arm_get_next_pcs_read_memory_unsigned_integer,
243   arm_get_next_pcs_syscall_next_pc,
244   arm_get_next_pcs_addr_bits_remove,
245   arm_get_next_pcs_is_thumb,
246   NULL,
247 };
248
249 struct arm_prologue_cache
250 {
251   /* The stack pointer at the time this frame was created; i.e. the
252      caller's stack pointer when this function was called.  It is used
253      to identify this frame.  */
254   CORE_ADDR prev_sp;
255
256   /* The frame base for this frame is just prev_sp - frame size.
257      FRAMESIZE is the distance from the frame pointer to the
258      initial stack pointer.  */
259
260   int framesize;
261
262   /* The register used to hold the frame pointer for this frame.  */
263   int framereg;
264
265   /* Saved register offsets.  */
266   struct trad_frame_saved_reg *saved_regs;
267 };
268
269 static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
270                                        CORE_ADDR prologue_start,
271                                        CORE_ADDR prologue_end,
272                                        struct arm_prologue_cache *cache);
273
274 /* Architecture version for displaced stepping.  This effects the behaviour of
275    certain instructions, and really should not be hard-wired.  */
276
277 #define DISPLACED_STEPPING_ARCH_VERSION         5
278
279 /* Set to true if the 32-bit mode is in use.  */
280
281 int arm_apcs_32 = 1;
282
283 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
284
285 int
286 arm_psr_thumb_bit (struct gdbarch *gdbarch)
287 {
288   if (gdbarch_tdep (gdbarch)->is_m)
289     return XPSR_T;
290   else
291     return CPSR_T;
292 }
293
294 /* Determine if the processor is currently executing in Thumb mode.  */
295
296 int
297 arm_is_thumb (struct regcache *regcache)
298 {
299   ULONGEST cpsr;
300   ULONGEST t_bit = arm_psr_thumb_bit (regcache->arch ());
301
302   cpsr = regcache_raw_get_unsigned (regcache, ARM_PS_REGNUM);
303
304   return (cpsr & t_bit) != 0;
305 }
306
307 /* Determine if FRAME is executing in Thumb mode.  */
308
309 int
310 arm_frame_is_thumb (struct frame_info *frame)
311 {
312   CORE_ADDR cpsr;
313   ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
314
315   /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
316      directly (from a signal frame or dummy frame) or by interpreting
317      the saved LR (from a prologue or DWARF frame).  So consult it and
318      trust the unwinders.  */
319   cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
320
321   return (cpsr & t_bit) != 0;
322 }
323
324 /* Callback for VEC_lower_bound.  */
325
326 static inline int
327 arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
328                              const struct arm_mapping_symbol *rhs)
329 {
330   return lhs->value < rhs->value;
331 }
332
333 /* Search for the mapping symbol covering MEMADDR.  If one is found,
334    return its type.  Otherwise, return 0.  If START is non-NULL,
335    set *START to the location of the mapping symbol.  */
336
337 static char
338 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
339 {
340   struct obj_section *sec;
341
342   /* If there are mapping symbols, consult them.  */
343   sec = find_pc_section (memaddr);
344   if (sec != NULL)
345     {
346       struct arm_per_objfile *data;
347       VEC(arm_mapping_symbol_s) *map;
348       struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
349                                             0 };
350       unsigned int idx;
351
352       data = (struct arm_per_objfile *) objfile_data (sec->objfile,
353                                                       arm_objfile_data_key);
354       if (data != NULL)
355         {
356           map = data->section_maps[sec->the_bfd_section->index];
357           if (!VEC_empty (arm_mapping_symbol_s, map))
358             {
359               struct arm_mapping_symbol *map_sym;
360
361               idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
362                                      arm_compare_mapping_symbols);
363
364               /* VEC_lower_bound finds the earliest ordered insertion
365                  point.  If the following symbol starts at this exact
366                  address, we use that; otherwise, the preceding
367                  mapping symbol covers this address.  */
368               if (idx < VEC_length (arm_mapping_symbol_s, map))
369                 {
370                   map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
371                   if (map_sym->value == map_key.value)
372                     {
373                       if (start)
374                         *start = map_sym->value + obj_section_addr (sec);
375                       return map_sym->type;
376                     }
377                 }
378
379               if (idx > 0)
380                 {
381                   map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
382                   if (start)
383                     *start = map_sym->value + obj_section_addr (sec);
384                   return map_sym->type;
385                 }
386             }
387         }
388     }
389
390   return 0;
391 }
392
393 /* Determine if the program counter specified in MEMADDR is in a Thumb
394    function.  This function should be called for addresses unrelated to
395    any executing frame; otherwise, prefer arm_frame_is_thumb.  */
396
397 int
398 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
399 {
400   struct bound_minimal_symbol sym;
401   char type;
402   arm_displaced_step_closure *dsc
403     = ((arm_displaced_step_closure * )
404         get_displaced_step_closure_by_addr (memaddr));
405
406   /* If checking the mode of displaced instruction in copy area, the mode
407      should be determined by instruction on the original address.  */
408   if (dsc)
409     {
410       if (debug_displaced)
411         fprintf_unfiltered (gdb_stdlog,
412                             "displaced: check mode of %.8lx instead of %.8lx\n",
413                             (unsigned long) dsc->insn_addr,
414                             (unsigned long) memaddr);
415       memaddr = dsc->insn_addr;
416     }
417
418   /* If bit 0 of the address is set, assume this is a Thumb address.  */
419   if (IS_THUMB_ADDR (memaddr))
420     return 1;
421
422   /* If the user wants to override the symbol table, let him.  */
423   if (strcmp (arm_force_mode_string, "arm") == 0)
424     return 0;
425   if (strcmp (arm_force_mode_string, "thumb") == 0)
426     return 1;
427
428   /* ARM v6-M and v7-M are always in Thumb mode.  */
429   if (gdbarch_tdep (gdbarch)->is_m)
430     return 1;
431
432   /* If there are mapping symbols, consult them.  */
433   type = arm_find_mapping_symbol (memaddr, NULL);
434   if (type)
435     return type == 't';
436
437   /* Thumb functions have a "special" bit set in minimal symbols.  */
438   sym = lookup_minimal_symbol_by_pc (memaddr);
439   if (sym.minsym)
440     return (MSYMBOL_IS_SPECIAL (sym.minsym));
441
442   /* If the user wants to override the fallback mode, let them.  */
443   if (strcmp (arm_fallback_mode_string, "arm") == 0)
444     return 0;
445   if (strcmp (arm_fallback_mode_string, "thumb") == 0)
446     return 1;
447
448   /* If we couldn't find any symbol, but we're talking to a running
449      target, then trust the current value of $cpsr.  This lets
450      "display/i $pc" always show the correct mode (though if there is
451      a symbol table we will not reach here, so it still may not be
452      displayed in the mode it will be executed).  */
453   if (target_has_registers)
454     return arm_frame_is_thumb (get_current_frame ());
455
456   /* Otherwise we're out of luck; we assume ARM.  */
457   return 0;
458 }
459
460 /* Determine if the address specified equals any of these magic return
461    values, called EXC_RETURN, defined by the ARM v6-M and v7-M
462    architectures.
463
464    From ARMv6-M Reference Manual B1.5.8
465    Table B1-5 Exception return behavior
466
467    EXC_RETURN    Return To        Return Stack
468    0xFFFFFFF1    Handler mode     Main
469    0xFFFFFFF9    Thread mode      Main
470    0xFFFFFFFD    Thread mode      Process
471
472    From ARMv7-M Reference Manual B1.5.8
473    Table B1-8 EXC_RETURN definition of exception return behavior, no FP
474
475    EXC_RETURN    Return To        Return Stack
476    0xFFFFFFF1    Handler mode     Main
477    0xFFFFFFF9    Thread mode      Main
478    0xFFFFFFFD    Thread mode      Process
479
480    Table B1-9 EXC_RETURN definition of exception return behavior, with
481    FP
482
483    EXC_RETURN    Return To        Return Stack    Frame Type
484    0xFFFFFFE1    Handler mode     Main            Extended
485    0xFFFFFFE9    Thread mode      Main            Extended
486    0xFFFFFFED    Thread mode      Process         Extended
487    0xFFFFFFF1    Handler mode     Main            Basic
488    0xFFFFFFF9    Thread mode      Main            Basic
489    0xFFFFFFFD    Thread mode      Process         Basic
490
491    For more details see "B1.5.8 Exception return behavior"
492    in both ARMv6-M and ARMv7-M Architecture Reference Manuals.  */
493
494 static int
495 arm_m_addr_is_magic (CORE_ADDR addr)
496 {
497   switch (addr)
498     {
499       /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
500          the exception return behavior.  */
501       case 0xffffffe1:
502       case 0xffffffe9:
503       case 0xffffffed:
504       case 0xfffffff1:
505       case 0xfffffff9:
506       case 0xfffffffd:
507         /* Address is magic.  */
508         return 1;
509
510       default:
511         /* Address is not magic.  */
512         return 0;
513     }
514 }
515
516 /* Remove useless bits from addresses in a running program.  */
517 static CORE_ADDR
518 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
519 {
520   /* On M-profile devices, do not strip the low bit from EXC_RETURN
521      (the magic exception return address).  */
522   if (gdbarch_tdep (gdbarch)->is_m
523       && arm_m_addr_is_magic (val))
524     return val;
525
526   if (arm_apcs_32)
527     return UNMAKE_THUMB_ADDR (val);
528   else
529     return (val & 0x03fffffc);
530 }
531
532 /* Return 1 if PC is the start of a compiler helper function which
533    can be safely ignored during prologue skipping.  IS_THUMB is true
534    if the function is known to be a Thumb function due to the way it
535    is being called.  */
536 static int
537 skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
538 {
539   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
540   struct bound_minimal_symbol msym;
541
542   msym = lookup_minimal_symbol_by_pc (pc);
543   if (msym.minsym != NULL
544       && BMSYMBOL_VALUE_ADDRESS (msym) == pc
545       && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL)
546     {
547       const char *name = MSYMBOL_LINKAGE_NAME (msym.minsym);
548
549       /* The GNU linker's Thumb call stub to foo is named
550          __foo_from_thumb.  */
551       if (strstr (name, "_from_thumb") != NULL)
552         name += 2;
553
554       /* On soft-float targets, __truncdfsf2 is called to convert promoted
555          arguments to their argument types in non-prototyped
556          functions.  */
557       if (startswith (name, "__truncdfsf2"))
558         return 1;
559       if (startswith (name, "__aeabi_d2f"))
560         return 1;
561
562       /* Internal functions related to thread-local storage.  */
563       if (startswith (name, "__tls_get_addr"))
564         return 1;
565       if (startswith (name, "__aeabi_read_tp"))
566         return 1;
567     }
568   else
569     {
570       /* If we run against a stripped glibc, we may be unable to identify
571          special functions by name.  Check for one important case,
572          __aeabi_read_tp, by comparing the *code* against the default
573          implementation (this is hand-written ARM assembler in glibc).  */
574
575       if (!is_thumb
576           && read_code_unsigned_integer (pc, 4, byte_order_for_code)
577              == 0xe3e00a0f /* mov r0, #0xffff0fff */
578           && read_code_unsigned_integer (pc + 4, 4, byte_order_for_code)
579              == 0xe240f01f) /* sub pc, r0, #31 */
580         return 1;
581     }
582
583   return 0;
584 }
585
586 /* Extract the immediate from instruction movw/movt of encoding T.  INSN1 is
587    the first 16-bit of instruction, and INSN2 is the second 16-bit of
588    instruction.  */
589 #define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2) \
590   ((bits ((insn1), 0, 3) << 12)               \
591    | (bits ((insn1), 10, 10) << 11)           \
592    | (bits ((insn2), 12, 14) << 8)            \
593    | bits ((insn2), 0, 7))
594
595 /* Extract the immediate from instruction movw/movt of encoding A.  INSN is
596    the 32-bit instruction.  */
597 #define EXTRACT_MOVW_MOVT_IMM_A(insn) \
598   ((bits ((insn), 16, 19) << 12) \
599    | bits ((insn), 0, 11))
600
601 /* Decode immediate value; implements ThumbExpandImmediate pseudo-op.  */
602
603 static unsigned int
604 thumb_expand_immediate (unsigned int imm)
605 {
606   unsigned int count = imm >> 7;
607
608   if (count < 8)
609     switch (count / 2)
610       {
611       case 0:
612         return imm & 0xff;
613       case 1:
614         return (imm & 0xff) | ((imm & 0xff) << 16);
615       case 2:
616         return ((imm & 0xff) << 8) | ((imm & 0xff) << 24);
617       case 3:
618         return (imm & 0xff) | ((imm & 0xff) << 8)
619                 | ((imm & 0xff) << 16) | ((imm & 0xff) << 24);
620       }
621
622   return (0x80 | (imm & 0x7f)) << (32 - count);
623 }
624
625 /* Return 1 if the 16-bit Thumb instruction INSN restores SP in
626    epilogue, 0 otherwise.  */
627
628 static int
629 thumb_instruction_restores_sp (unsigned short insn)
630 {
631   return (insn == 0x46bd  /* mov sp, r7 */
632           || (insn & 0xff80) == 0xb000  /* add sp, imm */
633           || (insn & 0xfe00) == 0xbc00);  /* pop <registers> */
634 }
635
636 /* Analyze a Thumb prologue, looking for a recognizable stack frame
637    and frame pointer.  Scan until we encounter a store that could
638    clobber the stack frame unexpectedly, or an unknown instruction.
639    Return the last address which is definitely safe to skip for an
640    initial breakpoint.  */
641
642 static CORE_ADDR
643 thumb_analyze_prologue (struct gdbarch *gdbarch,
644                         CORE_ADDR start, CORE_ADDR limit,
645                         struct arm_prologue_cache *cache)
646 {
647   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
648   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
649   int i;
650   pv_t regs[16];
651   CORE_ADDR offset;
652   CORE_ADDR unrecognized_pc = 0;
653
654   for (i = 0; i < 16; i++)
655     regs[i] = pv_register (i, 0);
656   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
657
658   while (start < limit)
659     {
660       unsigned short insn;
661
662       insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
663
664       if ((insn & 0xfe00) == 0xb400)            /* push { rlist } */
665         {
666           int regno;
667           int mask;
668
669           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
670             break;
671
672           /* Bits 0-7 contain a mask for registers R0-R7.  Bit 8 says
673              whether to save LR (R14).  */
674           mask = (insn & 0xff) | ((insn & 0x100) << 6);
675
676           /* Calculate offsets of saved R0-R7 and LR.  */
677           for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
678             if (mask & (1 << regno))
679               {
680                 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
681                                                        -4);
682                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
683               }
684         }
685       else if ((insn & 0xff80) == 0xb080)       /* sub sp, #imm */
686         {
687           offset = (insn & 0x7f) << 2;          /* get scaled offset */
688           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
689                                                  -offset);
690         }
691       else if (thumb_instruction_restores_sp (insn))
692         {
693           /* Don't scan past the epilogue.  */
694           break;
695         }
696       else if ((insn & 0xf800) == 0xa800)       /* add Rd, sp, #imm */
697         regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
698                                                     (insn & 0xff) << 2);
699       else if ((insn & 0xfe00) == 0x1c00        /* add Rd, Rn, #imm */
700                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
701         regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
702                                                    bits (insn, 6, 8));
703       else if ((insn & 0xf800) == 0x3000        /* add Rd, #imm */
704                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
705         regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
706                                                     bits (insn, 0, 7));
707       else if ((insn & 0xfe00) == 0x1800        /* add Rd, Rn, Rm */
708                && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
709                && pv_is_constant (regs[bits (insn, 3, 5)]))
710         regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
711                                           regs[bits (insn, 6, 8)]);
712       else if ((insn & 0xff00) == 0x4400        /* add Rd, Rm */
713                && pv_is_constant (regs[bits (insn, 3, 6)]))
714         {
715           int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
716           int rm = bits (insn, 3, 6);
717           regs[rd] = pv_add (regs[rd], regs[rm]);
718         }
719       else if ((insn & 0xff00) == 0x4600)       /* mov hi, lo or mov lo, hi */
720         {
721           int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
722           int src_reg = (insn & 0x78) >> 3;
723           regs[dst_reg] = regs[src_reg];
724         }
725       else if ((insn & 0xf800) == 0x9000)       /* str rd, [sp, #off] */
726         {
727           /* Handle stores to the stack.  Normally pushes are used,
728              but with GCC -mtpcs-frame, there may be other stores
729              in the prologue to create the frame.  */
730           int regno = (insn >> 8) & 0x7;
731           pv_t addr;
732
733           offset = (insn & 0xff) << 2;
734           addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
735
736           if (stack.store_would_trash (addr))
737             break;
738
739           stack.store (addr, 4, regs[regno]);
740         }
741       else if ((insn & 0xf800) == 0x6000)       /* str rd, [rn, #off] */
742         {
743           int rd = bits (insn, 0, 2);
744           int rn = bits (insn, 3, 5);
745           pv_t addr;
746
747           offset = bits (insn, 6, 10) << 2;
748           addr = pv_add_constant (regs[rn], offset);
749
750           if (stack.store_would_trash (addr))
751             break;
752
753           stack.store (addr, 4, regs[rd]);
754         }
755       else if (((insn & 0xf800) == 0x7000       /* strb Rd, [Rn, #off] */
756                 || (insn & 0xf800) == 0x8000)   /* strh Rd, [Rn, #off] */
757                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
758         /* Ignore stores of argument registers to the stack.  */
759         ;
760       else if ((insn & 0xf800) == 0xc800        /* ldmia Rn!, { registers } */
761                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
762         /* Ignore block loads from the stack, potentially copying
763            parameters from memory.  */
764         ;
765       else if ((insn & 0xf800) == 0x9800        /* ldr Rd, [Rn, #immed] */
766                || ((insn & 0xf800) == 0x6800    /* ldr Rd, [sp, #immed] */
767                    && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
768         /* Similarly ignore single loads from the stack.  */
769         ;
770       else if ((insn & 0xffc0) == 0x0000        /* lsls Rd, Rm, #0 */
771                || (insn & 0xffc0) == 0x1c00)    /* add Rd, Rn, #0 */
772         /* Skip register copies, i.e. saves to another register
773            instead of the stack.  */
774         ;
775       else if ((insn & 0xf800) == 0x2000)       /* movs Rd, #imm */
776         /* Recognize constant loads; even with small stacks these are necessary
777            on Thumb.  */
778         regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
779       else if ((insn & 0xf800) == 0x4800)       /* ldr Rd, [pc, #imm] */
780         {
781           /* Constant pool loads, for the same reason.  */
782           unsigned int constant;
783           CORE_ADDR loc;
784
785           loc = start + 4 + bits (insn, 0, 7) * 4;
786           constant = read_memory_unsigned_integer (loc, 4, byte_order);
787           regs[bits (insn, 8, 10)] = pv_constant (constant);
788         }
789       else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instructions.  */
790         {
791           unsigned short inst2;
792
793           inst2 = read_code_unsigned_integer (start + 2, 2,
794                                               byte_order_for_code);
795
796           if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
797             {
798               /* BL, BLX.  Allow some special function calls when
799                  skipping the prologue; GCC generates these before
800                  storing arguments to the stack.  */
801               CORE_ADDR nextpc;
802               int j1, j2, imm1, imm2;
803
804               imm1 = sbits (insn, 0, 10);
805               imm2 = bits (inst2, 0, 10);
806               j1 = bit (inst2, 13);
807               j2 = bit (inst2, 11);
808
809               offset = ((imm1 << 12) + (imm2 << 1));
810               offset ^= ((!j2) << 22) | ((!j1) << 23);
811
812               nextpc = start + 4 + offset;
813               /* For BLX make sure to clear the low bits.  */
814               if (bit (inst2, 12) == 0)
815                 nextpc = nextpc & 0xfffffffc;
816
817               if (!skip_prologue_function (gdbarch, nextpc,
818                                            bit (inst2, 12) != 0))
819                 break;
820             }
821
822           else if ((insn & 0xffd0) == 0xe900    /* stmdb Rn{!},
823                                                    { registers } */
824                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
825             {
826               pv_t addr = regs[bits (insn, 0, 3)];
827               int regno;
828
829               if (stack.store_would_trash (addr))
830                 break;
831
832               /* Calculate offsets of saved registers.  */
833               for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
834                 if (inst2 & (1 << regno))
835                   {
836                     addr = pv_add_constant (addr, -4);
837                     stack.store (addr, 4, regs[regno]);
838                   }
839
840               if (insn & 0x0020)
841                 regs[bits (insn, 0, 3)] = addr;
842             }
843
844           else if ((insn & 0xff50) == 0xe940    /* strd Rt, Rt2,
845                                                    [Rn, #+/-imm]{!} */
846                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
847             {
848               int regno1 = bits (inst2, 12, 15);
849               int regno2 = bits (inst2, 8, 11);
850               pv_t addr = regs[bits (insn, 0, 3)];
851
852               offset = inst2 & 0xff;
853               if (insn & 0x0080)
854                 addr = pv_add_constant (addr, offset);
855               else
856                 addr = pv_add_constant (addr, -offset);
857
858               if (stack.store_would_trash (addr))
859                 break;
860
861               stack.store (addr, 4, regs[regno1]);
862               stack.store (pv_add_constant (addr, 4),
863                            4, regs[regno2]);
864
865               if (insn & 0x0020)
866                 regs[bits (insn, 0, 3)] = addr;
867             }
868
869           else if ((insn & 0xfff0) == 0xf8c0    /* str Rt,[Rn,+/-#imm]{!} */
870                    && (inst2 & 0x0c00) == 0x0c00
871                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
872             {
873               int regno = bits (inst2, 12, 15);
874               pv_t addr = regs[bits (insn, 0, 3)];
875
876               offset = inst2 & 0xff;
877               if (inst2 & 0x0200)
878                 addr = pv_add_constant (addr, offset);
879               else
880                 addr = pv_add_constant (addr, -offset);
881
882               if (stack.store_would_trash (addr))
883                 break;
884
885               stack.store (addr, 4, regs[regno]);
886
887               if (inst2 & 0x0100)
888                 regs[bits (insn, 0, 3)] = addr;
889             }
890
891           else if ((insn & 0xfff0) == 0xf8c0    /* str.w Rt,[Rn,#imm] */
892                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
893             {
894               int regno = bits (inst2, 12, 15);
895               pv_t addr;
896
897               offset = inst2 & 0xfff;
898               addr = pv_add_constant (regs[bits (insn, 0, 3)], offset);
899
900               if (stack.store_would_trash (addr))
901                 break;
902
903               stack.store (addr, 4, regs[regno]);
904             }
905
906           else if ((insn & 0xffd0) == 0xf880    /* str{bh}.w Rt,[Rn,#imm] */
907                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
908             /* Ignore stores of argument registers to the stack.  */
909             ;
910
911           else if ((insn & 0xffd0) == 0xf800    /* str{bh} Rt,[Rn,#+/-imm] */
912                    && (inst2 & 0x0d00) == 0x0c00
913                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
914             /* Ignore stores of argument registers to the stack.  */
915             ;
916
917           else if ((insn & 0xffd0) == 0xe890    /* ldmia Rn[!],
918                                                    { registers } */
919                    && (inst2 & 0x8000) == 0x0000
920                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
921             /* Ignore block loads from the stack, potentially copying
922                parameters from memory.  */
923             ;
924
925           else if ((insn & 0xffb0) == 0xe950    /* ldrd Rt, Rt2,
926                                                    [Rn, #+/-imm] */
927                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
928             /* Similarly ignore dual loads from the stack.  */
929             ;
930
931           else if ((insn & 0xfff0) == 0xf850    /* ldr Rt,[Rn,#+/-imm] */
932                    && (inst2 & 0x0d00) == 0x0c00
933                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
934             /* Similarly ignore single loads from the stack.  */
935             ;
936
937           else if ((insn & 0xfff0) == 0xf8d0    /* ldr.w Rt,[Rn,#imm] */
938                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
939             /* Similarly ignore single loads from the stack.  */
940             ;
941
942           else if ((insn & 0xfbf0) == 0xf100    /* add.w Rd, Rn, #imm */
943                    && (inst2 & 0x8000) == 0x0000)
944             {
945               unsigned int imm = ((bits (insn, 10, 10) << 11)
946                                   | (bits (inst2, 12, 14) << 8)
947                                   | bits (inst2, 0, 7));
948
949               regs[bits (inst2, 8, 11)]
950                 = pv_add_constant (regs[bits (insn, 0, 3)],
951                                    thumb_expand_immediate (imm));
952             }
953
954           else if ((insn & 0xfbf0) == 0xf200    /* addw Rd, Rn, #imm */
955                    && (inst2 & 0x8000) == 0x0000)
956             {
957               unsigned int imm = ((bits (insn, 10, 10) << 11)
958                                   | (bits (inst2, 12, 14) << 8)
959                                   | bits (inst2, 0, 7));
960
961               regs[bits (inst2, 8, 11)]
962                 = pv_add_constant (regs[bits (insn, 0, 3)], imm);
963             }
964
965           else if ((insn & 0xfbf0) == 0xf1a0    /* sub.w Rd, Rn, #imm */
966                    && (inst2 & 0x8000) == 0x0000)
967             {
968               unsigned int imm = ((bits (insn, 10, 10) << 11)
969                                   | (bits (inst2, 12, 14) << 8)
970                                   | bits (inst2, 0, 7));
971
972               regs[bits (inst2, 8, 11)]
973                 = pv_add_constant (regs[bits (insn, 0, 3)],
974                                    - (CORE_ADDR) thumb_expand_immediate (imm));
975             }
976
977           else if ((insn & 0xfbf0) == 0xf2a0    /* subw Rd, Rn, #imm */
978                    && (inst2 & 0x8000) == 0x0000)
979             {
980               unsigned int imm = ((bits (insn, 10, 10) << 11)
981                                   | (bits (inst2, 12, 14) << 8)
982                                   | bits (inst2, 0, 7));
983
984               regs[bits (inst2, 8, 11)]
985                 = pv_add_constant (regs[bits (insn, 0, 3)], - (CORE_ADDR) imm);
986             }
987
988           else if ((insn & 0xfbff) == 0xf04f)   /* mov.w Rd, #const */
989             {
990               unsigned int imm = ((bits (insn, 10, 10) << 11)
991                                   | (bits (inst2, 12, 14) << 8)
992                                   | bits (inst2, 0, 7));
993
994               regs[bits (inst2, 8, 11)]
995                 = pv_constant (thumb_expand_immediate (imm));
996             }
997
998           else if ((insn & 0xfbf0) == 0xf240)   /* movw Rd, #const */
999             {
1000               unsigned int imm
1001                 = EXTRACT_MOVW_MOVT_IMM_T (insn, inst2);
1002
1003               regs[bits (inst2, 8, 11)] = pv_constant (imm);
1004             }
1005
1006           else if (insn == 0xea5f               /* mov.w Rd,Rm */
1007                    && (inst2 & 0xf0f0) == 0)
1008             {
1009               int dst_reg = (inst2 & 0x0f00) >> 8;
1010               int src_reg = inst2 & 0xf;
1011               regs[dst_reg] = regs[src_reg];
1012             }
1013
1014           else if ((insn & 0xff7f) == 0xf85f)   /* ldr.w Rt,<label> */
1015             {
1016               /* Constant pool loads.  */
1017               unsigned int constant;
1018               CORE_ADDR loc;
1019
1020               offset = bits (inst2, 0, 11);
1021               if (insn & 0x0080)
1022                 loc = start + 4 + offset;
1023               else
1024                 loc = start + 4 - offset;
1025
1026               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1027               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1028             }
1029
1030           else if ((insn & 0xff7f) == 0xe95f)   /* ldrd Rt,Rt2,<label> */
1031             {
1032               /* Constant pool loads.  */
1033               unsigned int constant;
1034               CORE_ADDR loc;
1035
1036               offset = bits (inst2, 0, 7) << 2;
1037               if (insn & 0x0080)
1038                 loc = start + 4 + offset;
1039               else
1040                 loc = start + 4 - offset;
1041
1042               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1043               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1044
1045               constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
1046               regs[bits (inst2, 8, 11)] = pv_constant (constant);
1047             }
1048
1049           else if (thumb2_instruction_changes_pc (insn, inst2))
1050             {
1051               /* Don't scan past anything that might change control flow.  */
1052               break;
1053             }
1054           else
1055             {
1056               /* The optimizer might shove anything into the prologue,
1057                  so we just skip what we don't recognize.  */
1058               unrecognized_pc = start;
1059             }
1060
1061           start += 2;
1062         }
1063       else if (thumb_instruction_changes_pc (insn))
1064         {
1065           /* Don't scan past anything that might change control flow.  */
1066           break;
1067         }
1068       else
1069         {
1070           /* The optimizer might shove anything into the prologue,
1071              so we just skip what we don't recognize.  */
1072           unrecognized_pc = start;
1073         }
1074
1075       start += 2;
1076     }
1077
1078   if (arm_debug)
1079     fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1080                         paddress (gdbarch, start));
1081
1082   if (unrecognized_pc == 0)
1083     unrecognized_pc = start;
1084
1085   if (cache == NULL)
1086     return unrecognized_pc;
1087
1088   if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1089     {
1090       /* Frame pointer is fp.  Frame size is constant.  */
1091       cache->framereg = ARM_FP_REGNUM;
1092       cache->framesize = -regs[ARM_FP_REGNUM].k;
1093     }
1094   else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
1095     {
1096       /* Frame pointer is r7.  Frame size is constant.  */
1097       cache->framereg = THUMB_FP_REGNUM;
1098       cache->framesize = -regs[THUMB_FP_REGNUM].k;
1099     }
1100   else
1101     {
1102       /* Try the stack pointer... this is a bit desperate.  */
1103       cache->framereg = ARM_SP_REGNUM;
1104       cache->framesize = -regs[ARM_SP_REGNUM].k;
1105     }
1106
1107   for (i = 0; i < 16; i++)
1108     if (stack.find_reg (gdbarch, i, &offset))
1109       cache->saved_regs[i].addr = offset;
1110
1111   return unrecognized_pc;
1112 }
1113
1114
1115 /* Try to analyze the instructions starting from PC, which load symbol
1116    __stack_chk_guard.  Return the address of instruction after loading this
1117    symbol, set the dest register number to *BASEREG, and set the size of
1118    instructions for loading symbol in OFFSET.  Return 0 if instructions are
1119    not recognized.  */
1120
1121 static CORE_ADDR
1122 arm_analyze_load_stack_chk_guard(CORE_ADDR pc, struct gdbarch *gdbarch,
1123                                  unsigned int *destreg, int *offset)
1124 {
1125   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1126   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1127   unsigned int low, high, address;
1128
1129   address = 0;
1130   if (is_thumb)
1131     {
1132       unsigned short insn1
1133         = read_code_unsigned_integer (pc, 2, byte_order_for_code);
1134
1135       if ((insn1 & 0xf800) == 0x4800) /* ldr Rd, #immed */
1136         {
1137           *destreg = bits (insn1, 8, 10);
1138           *offset = 2;
1139           address = (pc & 0xfffffffc) + 4 + (bits (insn1, 0, 7) << 2);
1140           address = read_memory_unsigned_integer (address, 4,
1141                                                   byte_order_for_code);
1142         }
1143       else if ((insn1 & 0xfbf0) == 0xf240) /* movw Rd, #const */
1144         {
1145           unsigned short insn2
1146             = read_code_unsigned_integer (pc + 2, 2, byte_order_for_code);
1147
1148           low = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1149
1150           insn1
1151             = read_code_unsigned_integer (pc + 4, 2, byte_order_for_code);
1152           insn2
1153             = read_code_unsigned_integer (pc + 6, 2, byte_order_for_code);
1154
1155           /* movt Rd, #const */
1156           if ((insn1 & 0xfbc0) == 0xf2c0)
1157             {
1158               high = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1159               *destreg = bits (insn2, 8, 11);
1160               *offset = 8;
1161               address = (high << 16 | low);
1162             }
1163         }
1164     }
1165   else
1166     {
1167       unsigned int insn
1168         = read_code_unsigned_integer (pc, 4, byte_order_for_code);
1169
1170       if ((insn & 0x0e5f0000) == 0x041f0000) /* ldr Rd, [PC, #immed] */
1171         {
1172           address = bits (insn, 0, 11) + pc + 8;
1173           address = read_memory_unsigned_integer (address, 4,
1174                                                   byte_order_for_code);
1175
1176           *destreg = bits (insn, 12, 15);
1177           *offset = 4;
1178         }
1179       else if ((insn & 0x0ff00000) == 0x03000000) /* movw Rd, #const */
1180         {
1181           low = EXTRACT_MOVW_MOVT_IMM_A (insn);
1182
1183           insn
1184             = read_code_unsigned_integer (pc + 4, 4, byte_order_for_code);
1185
1186           if ((insn & 0x0ff00000) == 0x03400000) /* movt Rd, #const */
1187             {
1188               high = EXTRACT_MOVW_MOVT_IMM_A (insn);
1189               *destreg = bits (insn, 12, 15);
1190               *offset = 8;
1191               address = (high << 16 | low);
1192             }
1193         }
1194     }
1195
1196   return address;
1197 }
1198
1199 /* Try to skip a sequence of instructions used for stack protector.  If PC
1200    points to the first instruction of this sequence, return the address of
1201    first instruction after this sequence, otherwise, return original PC.
1202
1203    On arm, this sequence of instructions is composed of mainly three steps,
1204      Step 1: load symbol __stack_chk_guard,
1205      Step 2: load from address of __stack_chk_guard,
1206      Step 3: store it to somewhere else.
1207
1208    Usually, instructions on step 2 and step 3 are the same on various ARM
1209    architectures.  On step 2, it is one instruction 'ldr Rx, [Rn, #0]', and
1210    on step 3, it is also one instruction 'str Rx, [r7, #immd]'.  However,
1211    instructions in step 1 vary from different ARM architectures.  On ARMv7,
1212    they are,
1213
1214         movw    Rn, #:lower16:__stack_chk_guard
1215         movt    Rn, #:upper16:__stack_chk_guard
1216
1217    On ARMv5t, it is,
1218
1219         ldr     Rn, .Label
1220         ....
1221         .Lable:
1222         .word   __stack_chk_guard
1223
1224    Since ldr/str is a very popular instruction, we can't use them as
1225    'fingerprint' or 'signature' of stack protector sequence.  Here we choose
1226    sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1227    stripped, as the 'fingerprint' of a stack protector cdoe sequence.  */
1228
1229 static CORE_ADDR
1230 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1231 {
1232   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1233   unsigned int basereg;
1234   struct bound_minimal_symbol stack_chk_guard;
1235   int offset;
1236   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1237   CORE_ADDR addr;
1238
1239   /* Try to parse the instructions in Step 1.  */
1240   addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1241                                            &basereg, &offset);
1242   if (!addr)
1243     return pc;
1244
1245   stack_chk_guard = lookup_minimal_symbol_by_pc (addr);
1246   /* ADDR must correspond to a symbol whose name is __stack_chk_guard.
1247      Otherwise, this sequence cannot be for stack protector.  */
1248   if (stack_chk_guard.minsym == NULL
1249       || !startswith (MSYMBOL_LINKAGE_NAME (stack_chk_guard.minsym), "__stack_chk_guard"))
1250    return pc;
1251
1252   if (is_thumb)
1253     {
1254       unsigned int destreg;
1255       unsigned short insn
1256         = read_code_unsigned_integer (pc + offset, 2, byte_order_for_code);
1257
1258       /* Step 2: ldr Rd, [Rn, #immed], encoding T1.  */
1259       if ((insn & 0xf800) != 0x6800)
1260         return pc;
1261       if (bits (insn, 3, 5) != basereg)
1262         return pc;
1263       destreg = bits (insn, 0, 2);
1264
1265       insn = read_code_unsigned_integer (pc + offset + 2, 2,
1266                                          byte_order_for_code);
1267       /* Step 3: str Rd, [Rn, #immed], encoding T1.  */
1268       if ((insn & 0xf800) != 0x6000)
1269         return pc;
1270       if (destreg != bits (insn, 0, 2))
1271         return pc;
1272     }
1273   else
1274     {
1275       unsigned int destreg;
1276       unsigned int insn
1277         = read_code_unsigned_integer (pc + offset, 4, byte_order_for_code);
1278
1279       /* Step 2: ldr Rd, [Rn, #immed], encoding A1.  */
1280       if ((insn & 0x0e500000) != 0x04100000)
1281         return pc;
1282       if (bits (insn, 16, 19) != basereg)
1283         return pc;
1284       destreg = bits (insn, 12, 15);
1285       /* Step 3: str Rd, [Rn, #immed], encoding A1.  */
1286       insn = read_code_unsigned_integer (pc + offset + 4,
1287                                            4, byte_order_for_code);
1288       if ((insn & 0x0e500000) != 0x04000000)
1289         return pc;
1290       if (bits (insn, 12, 15) != destreg)
1291         return pc;
1292     }
1293   /* The size of total two instructions ldr/str is 4 on Thumb-2, while 8
1294      on arm.  */
1295   if (is_thumb)
1296     return pc + offset + 4;
1297   else
1298     return pc + offset + 8;
1299 }
1300
1301 /* Advance the PC across any function entry prologue instructions to
1302    reach some "real" code.
1303
1304    The APCS (ARM Procedure Call Standard) defines the following
1305    prologue:
1306
1307    mov          ip, sp
1308    [stmfd       sp!, {a1,a2,a3,a4}]
1309    stmfd        sp!, {...,fp,ip,lr,pc}
1310    [stfe        f7, [sp, #-12]!]
1311    [stfe        f6, [sp, #-12]!]
1312    [stfe        f5, [sp, #-12]!]
1313    [stfe        f4, [sp, #-12]!]
1314    sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn.  */
1315
1316 static CORE_ADDR
1317 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1318 {
1319   CORE_ADDR func_addr, limit_pc;
1320
1321   /* See if we can determine the end of the prologue via the symbol table.
1322      If so, then return either PC, or the PC after the prologue, whichever
1323      is greater.  */
1324   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1325     {
1326       CORE_ADDR post_prologue_pc
1327         = skip_prologue_using_sal (gdbarch, func_addr);
1328       struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
1329
1330       if (post_prologue_pc)
1331         post_prologue_pc
1332           = arm_skip_stack_protector (post_prologue_pc, gdbarch);
1333
1334
1335       /* GCC always emits a line note before the prologue and another
1336          one after, even if the two are at the same address or on the
1337          same line.  Take advantage of this so that we do not need to
1338          know every instruction that might appear in the prologue.  We
1339          will have producer information for most binaries; if it is
1340          missing (e.g. for -gstabs), assuming the GNU tools.  */
1341       if (post_prologue_pc
1342           && (cust == NULL
1343               || COMPUNIT_PRODUCER (cust) == NULL
1344               || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
1345               || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
1346         return post_prologue_pc;
1347
1348       if (post_prologue_pc != 0)
1349         {
1350           CORE_ADDR analyzed_limit;
1351
1352           /* For non-GCC compilers, make sure the entire line is an
1353              acceptable prologue; GDB will round this function's
1354              return value up to the end of the following line so we
1355              can not skip just part of a line (and we do not want to).
1356
1357              RealView does not treat the prologue specially, but does
1358              associate prologue code with the opening brace; so this
1359              lets us skip the first line if we think it is the opening
1360              brace.  */
1361           if (arm_pc_is_thumb (gdbarch, func_addr))
1362             analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
1363                                                      post_prologue_pc, NULL);
1364           else
1365             analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
1366                                                    post_prologue_pc, NULL);
1367
1368           if (analyzed_limit != post_prologue_pc)
1369             return func_addr;
1370
1371           return post_prologue_pc;
1372         }
1373     }
1374
1375   /* Can't determine prologue from the symbol table, need to examine
1376      instructions.  */
1377
1378   /* Find an upper limit on the function prologue using the debug
1379      information.  If the debug information could not be used to provide
1380      that bound, then use an arbitrary large number as the upper bound.  */
1381   /* Like arm_scan_prologue, stop no later than pc + 64.  */
1382   limit_pc = skip_prologue_using_sal (gdbarch, pc);
1383   if (limit_pc == 0)
1384     limit_pc = pc + 64;          /* Magic.  */
1385
1386
1387   /* Check if this is Thumb code.  */
1388   if (arm_pc_is_thumb (gdbarch, pc))
1389     return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1390   else
1391     return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1392 }
1393
1394 /* *INDENT-OFF* */
1395 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
1396    This function decodes a Thumb function prologue to determine:
1397      1) the size of the stack frame
1398      2) which registers are saved on it
1399      3) the offsets of saved regs
1400      4) the offset from the stack pointer to the frame pointer
1401
1402    A typical Thumb function prologue would create this stack frame
1403    (offsets relative to FP)
1404      old SP ->  24  stack parameters
1405                 20  LR
1406                 16  R7
1407      R7 ->       0  local variables (16 bytes)
1408      SP ->     -12  additional stack space (12 bytes)
1409    The frame size would thus be 36 bytes, and the frame offset would be
1410    12 bytes.  The frame register is R7.
1411    
1412    The comments for thumb_skip_prolog() describe the algorithm we use
1413    to detect the end of the prolog.  */
1414 /* *INDENT-ON* */
1415
1416 static void
1417 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1418                      CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1419 {
1420   CORE_ADDR prologue_start;
1421   CORE_ADDR prologue_end;
1422
1423   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1424                                 &prologue_end))
1425     {
1426       /* See comment in arm_scan_prologue for an explanation of
1427          this heuristics.  */
1428       if (prologue_end > prologue_start + 64)
1429         {
1430           prologue_end = prologue_start + 64;
1431         }
1432     }
1433   else
1434     /* We're in the boondocks: we have no idea where the start of the
1435        function is.  */
1436     return;
1437
1438   prologue_end = std::min (prologue_end, prev_pc);
1439
1440   thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1441 }
1442
1443 /* Return 1 if the ARM instruction INSN restores SP in epilogue, 0
1444    otherwise.  */
1445
1446 static int
1447 arm_instruction_restores_sp (unsigned int insn)
1448 {
1449   if (bits (insn, 28, 31) != INST_NV)
1450     {
1451       if ((insn & 0x0df0f000) == 0x0080d000
1452           /* ADD SP (register or immediate).  */
1453           || (insn & 0x0df0f000) == 0x0040d000
1454           /* SUB SP (register or immediate).  */
1455           || (insn & 0x0ffffff0) == 0x01a0d000
1456           /* MOV SP.  */
1457           || (insn & 0x0fff0000) == 0x08bd0000
1458           /* POP (LDMIA).  */
1459           || (insn & 0x0fff0000) == 0x049d0000)
1460           /* POP of a single register.  */
1461         return 1;
1462     }
1463
1464   return 0;
1465 }
1466
1467 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
1468    continuing no further than PROLOGUE_END.  If CACHE is non-NULL,
1469    fill it in.  Return the first address not recognized as a prologue
1470    instruction.
1471
1472    We recognize all the instructions typically found in ARM prologues,
1473    plus harmless instructions which can be skipped (either for analysis
1474    purposes, or a more restrictive set that can be skipped when finding
1475    the end of the prologue).  */
1476
1477 static CORE_ADDR
1478 arm_analyze_prologue (struct gdbarch *gdbarch,
1479                       CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1480                       struct arm_prologue_cache *cache)
1481 {
1482   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1483   int regno;
1484   CORE_ADDR offset, current_pc;
1485   pv_t regs[ARM_FPS_REGNUM];
1486   CORE_ADDR unrecognized_pc = 0;
1487
1488   /* Search the prologue looking for instructions that set up the
1489      frame pointer, adjust the stack pointer, and save registers.
1490
1491      Be careful, however, and if it doesn't look like a prologue,
1492      don't try to scan it.  If, for instance, a frameless function
1493      begins with stmfd sp!, then we will tell ourselves there is
1494      a frame, which will confuse stack traceback, as well as "finish" 
1495      and other operations that rely on a knowledge of the stack
1496      traceback.  */
1497
1498   for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1499     regs[regno] = pv_register (regno, 0);
1500   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1501
1502   for (current_pc = prologue_start;
1503        current_pc < prologue_end;
1504        current_pc += 4)
1505     {
1506       unsigned int insn
1507         = read_code_unsigned_integer (current_pc, 4, byte_order_for_code);
1508
1509       if (insn == 0xe1a0c00d)           /* mov ip, sp */
1510         {
1511           regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
1512           continue;
1513         }
1514       else if ((insn & 0xfff00000) == 0xe2800000        /* add Rd, Rn, #n */
1515                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1516         {
1517           unsigned imm = insn & 0xff;                   /* immediate value */
1518           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1519           int rd = bits (insn, 12, 15);
1520           imm = (imm >> rot) | (imm << (32 - rot));
1521           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
1522           continue;
1523         }
1524       else if ((insn & 0xfff00000) == 0xe2400000        /* sub Rd, Rn, #n */
1525                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1526         {
1527           unsigned imm = insn & 0xff;                   /* immediate value */
1528           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1529           int rd = bits (insn, 12, 15);
1530           imm = (imm >> rot) | (imm << (32 - rot));
1531           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
1532           continue;
1533         }
1534       else if ((insn & 0xffff0fff) == 0xe52d0004)       /* str Rd,
1535                                                            [sp, #-4]! */
1536         {
1537           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1538             break;
1539           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1540           stack.store (regs[ARM_SP_REGNUM], 4,
1541                        regs[bits (insn, 12, 15)]);
1542           continue;
1543         }
1544       else if ((insn & 0xffff0000) == 0xe92d0000)
1545         /* stmfd sp!, {..., fp, ip, lr, pc}
1546            or
1547            stmfd sp!, {a1, a2, a3, a4}  */
1548         {
1549           int mask = insn & 0xffff;
1550
1551           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1552             break;
1553
1554           /* Calculate offsets of saved registers.  */
1555           for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
1556             if (mask & (1 << regno))
1557               {
1558                 regs[ARM_SP_REGNUM]
1559                   = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1560                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
1561               }
1562         }
1563       else if ((insn & 0xffff0000) == 0xe54b0000        /* strb rx,[r11,#-n] */
1564                || (insn & 0xffff00f0) == 0xe14b00b0     /* strh rx,[r11,#-n] */
1565                || (insn & 0xffffc000) == 0xe50b0000)    /* str  rx,[r11,#-n] */
1566         {
1567           /* No need to add this to saved_regs -- it's just an arg reg.  */
1568           continue;
1569         }
1570       else if ((insn & 0xffff0000) == 0xe5cd0000        /* strb rx,[sp,#n] */
1571                || (insn & 0xffff00f0) == 0xe1cd00b0     /* strh rx,[sp,#n] */
1572                || (insn & 0xffffc000) == 0xe58d0000)    /* str  rx,[sp,#n] */
1573         {
1574           /* No need to add this to saved_regs -- it's just an arg reg.  */
1575           continue;
1576         }
1577       else if ((insn & 0xfff00000) == 0xe8800000        /* stm Rn,
1578                                                            { registers } */
1579                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1580         {
1581           /* No need to add this to saved_regs -- it's just arg regs.  */
1582           continue;
1583         }
1584       else if ((insn & 0xfffff000) == 0xe24cb000)       /* sub fp, ip #n */
1585         {
1586           unsigned imm = insn & 0xff;                   /* immediate value */
1587           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1588           imm = (imm >> rot) | (imm << (32 - rot));
1589           regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
1590         }
1591       else if ((insn & 0xfffff000) == 0xe24dd000)       /* sub sp, sp #n */
1592         {
1593           unsigned imm = insn & 0xff;                   /* immediate value */
1594           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1595           imm = (imm >> rot) | (imm << (32 - rot));
1596           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
1597         }
1598       else if ((insn & 0xffff7fff) == 0xed6d0103        /* stfe f?,
1599                                                            [sp, -#c]! */
1600                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1601         {
1602           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1603             break;
1604
1605           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1606           regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
1607           stack.store (regs[ARM_SP_REGNUM], 12, regs[regno]);
1608         }
1609       else if ((insn & 0xffbf0fff) == 0xec2d0200        /* sfmfd f0, 4,
1610                                                            [sp!] */
1611                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1612         {
1613           int n_saved_fp_regs;
1614           unsigned int fp_start_reg, fp_bound_reg;
1615
1616           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1617             break;
1618
1619           if ((insn & 0x800) == 0x800)          /* N0 is set */
1620             {
1621               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1622                 n_saved_fp_regs = 3;
1623               else
1624                 n_saved_fp_regs = 1;
1625             }
1626           else
1627             {
1628               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1629                 n_saved_fp_regs = 2;
1630               else
1631                 n_saved_fp_regs = 4;
1632             }
1633
1634           fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1635           fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1636           for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1637             {
1638               regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1639               stack.store (regs[ARM_SP_REGNUM], 12,
1640                            regs[fp_start_reg++]);
1641             }
1642         }
1643       else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1644         {
1645           /* Allow some special function calls when skipping the
1646              prologue; GCC generates these before storing arguments to
1647              the stack.  */
1648           CORE_ADDR dest = BranchDest (current_pc, insn);
1649
1650           if (skip_prologue_function (gdbarch, dest, 0))
1651             continue;
1652           else
1653             break;
1654         }
1655       else if ((insn & 0xf0000000) != 0xe0000000)
1656         break;                  /* Condition not true, exit early.  */
1657       else if (arm_instruction_changes_pc (insn))
1658         /* Don't scan past anything that might change control flow.  */
1659         break;
1660       else if (arm_instruction_restores_sp (insn))
1661         {
1662           /* Don't scan past the epilogue.  */
1663           break;
1664         }
1665       else if ((insn & 0xfe500000) == 0xe8100000        /* ldm */
1666                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1667         /* Ignore block loads from the stack, potentially copying
1668            parameters from memory.  */
1669         continue;
1670       else if ((insn & 0xfc500000) == 0xe4100000
1671                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1672         /* Similarly ignore single loads from the stack.  */
1673         continue;
1674       else if ((insn & 0xffff0ff0) == 0xe1a00000)
1675         /* MOV Rd, Rm.  Skip register copies, i.e. saves to another
1676            register instead of the stack.  */
1677         continue;
1678       else
1679         {
1680           /* The optimizer might shove anything into the prologue, if
1681              we build up cache (cache != NULL) from scanning prologue,
1682              we just skip what we don't recognize and scan further to
1683              make cache as complete as possible.  However, if we skip
1684              prologue, we'll stop immediately on unrecognized
1685              instruction.  */
1686           unrecognized_pc = current_pc;
1687           if (cache != NULL)
1688             continue;
1689           else
1690             break;
1691         }
1692     }
1693
1694   if (unrecognized_pc == 0)
1695     unrecognized_pc = current_pc;
1696
1697   if (cache)
1698     {
1699       int framereg, framesize;
1700
1701       /* The frame size is just the distance from the frame register
1702          to the original stack pointer.  */
1703       if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1704         {
1705           /* Frame pointer is fp.  */
1706           framereg = ARM_FP_REGNUM;
1707           framesize = -regs[ARM_FP_REGNUM].k;
1708         }
1709       else
1710         {
1711           /* Try the stack pointer... this is a bit desperate.  */
1712           framereg = ARM_SP_REGNUM;
1713           framesize = -regs[ARM_SP_REGNUM].k;
1714         }
1715
1716       cache->framereg = framereg;
1717       cache->framesize = framesize;
1718
1719       for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1720         if (stack.find_reg (gdbarch, regno, &offset))
1721           cache->saved_regs[regno].addr = offset;
1722     }
1723
1724   if (arm_debug)
1725     fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1726                         paddress (gdbarch, unrecognized_pc));
1727
1728   return unrecognized_pc;
1729 }
1730
1731 static void
1732 arm_scan_prologue (struct frame_info *this_frame,
1733                    struct arm_prologue_cache *cache)
1734 {
1735   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1736   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1737   CORE_ADDR prologue_start, prologue_end;
1738   CORE_ADDR prev_pc = get_frame_pc (this_frame);
1739   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1740
1741   /* Assume there is no frame until proven otherwise.  */
1742   cache->framereg = ARM_SP_REGNUM;
1743   cache->framesize = 0;
1744
1745   /* Check for Thumb prologue.  */
1746   if (arm_frame_is_thumb (this_frame))
1747     {
1748       thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1749       return;
1750     }
1751
1752   /* Find the function prologue.  If we can't find the function in
1753      the symbol table, peek in the stack frame to find the PC.  */
1754   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1755                                 &prologue_end))
1756     {
1757       /* One way to find the end of the prologue (which works well
1758          for unoptimized code) is to do the following:
1759
1760             struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1761
1762             if (sal.line == 0)
1763               prologue_end = prev_pc;
1764             else if (sal.end < prologue_end)
1765               prologue_end = sal.end;
1766
1767          This mechanism is very accurate so long as the optimizer
1768          doesn't move any instructions from the function body into the
1769          prologue.  If this happens, sal.end will be the last
1770          instruction in the first hunk of prologue code just before
1771          the first instruction that the scheduler has moved from
1772          the body to the prologue.
1773
1774          In order to make sure that we scan all of the prologue
1775          instructions, we use a slightly less accurate mechanism which
1776          may scan more than necessary.  To help compensate for this
1777          lack of accuracy, the prologue scanning loop below contains
1778          several clauses which'll cause the loop to terminate early if
1779          an implausible prologue instruction is encountered.
1780
1781          The expression
1782
1783               prologue_start + 64
1784
1785          is a suitable endpoint since it accounts for the largest
1786          possible prologue plus up to five instructions inserted by
1787          the scheduler.  */
1788
1789       if (prologue_end > prologue_start + 64)
1790         {
1791           prologue_end = prologue_start + 64;   /* See above.  */
1792         }
1793     }
1794   else
1795     {
1796       /* We have no symbol information.  Our only option is to assume this
1797          function has a standard stack frame and the normal frame register.
1798          Then, we can find the value of our frame pointer on entrance to
1799          the callee (or at the present moment if this is the innermost frame).
1800          The value stored there should be the address of the stmfd + 8.  */
1801       CORE_ADDR frame_loc;
1802       ULONGEST return_value;
1803
1804       frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1805       if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
1806                                               &return_value))
1807         return;
1808       else
1809         {
1810           prologue_start = gdbarch_addr_bits_remove
1811                              (gdbarch, return_value) - 8;
1812           prologue_end = prologue_start + 64;   /* See above.  */
1813         }
1814     }
1815
1816   if (prev_pc < prologue_end)
1817     prologue_end = prev_pc;
1818
1819   arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1820 }
1821
1822 static struct arm_prologue_cache *
1823 arm_make_prologue_cache (struct frame_info *this_frame)
1824 {
1825   int reg;
1826   struct arm_prologue_cache *cache;
1827   CORE_ADDR unwound_fp;
1828
1829   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1830   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1831
1832   arm_scan_prologue (this_frame, cache);
1833
1834   unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
1835   if (unwound_fp == 0)
1836     return cache;
1837
1838   cache->prev_sp = unwound_fp + cache->framesize;
1839
1840   /* Calculate actual addresses of saved registers using offsets
1841      determined by arm_scan_prologue.  */
1842   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
1843     if (trad_frame_addr_p (cache->saved_regs, reg))
1844       cache->saved_regs[reg].addr += cache->prev_sp;
1845
1846   return cache;
1847 }
1848
1849 /* Implementation of the stop_reason hook for arm_prologue frames.  */
1850
1851 static enum unwind_stop_reason
1852 arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
1853                                  void **this_cache)
1854 {
1855   struct arm_prologue_cache *cache;
1856   CORE_ADDR pc;
1857
1858   if (*this_cache == NULL)
1859     *this_cache = arm_make_prologue_cache (this_frame);
1860   cache = (struct arm_prologue_cache *) *this_cache;
1861
1862   /* This is meant to halt the backtrace at "_start".  */
1863   pc = get_frame_pc (this_frame);
1864   if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
1865     return UNWIND_OUTERMOST;
1866
1867   /* If we've hit a wall, stop.  */
1868   if (cache->prev_sp == 0)
1869     return UNWIND_OUTERMOST;
1870
1871   return UNWIND_NO_REASON;
1872 }
1873
1874 /* Our frame ID for a normal frame is the current function's starting PC
1875    and the caller's SP when we were called.  */
1876
1877 static void
1878 arm_prologue_this_id (struct frame_info *this_frame,
1879                       void **this_cache,
1880                       struct frame_id *this_id)
1881 {
1882   struct arm_prologue_cache *cache;
1883   struct frame_id id;
1884   CORE_ADDR pc, func;
1885
1886   if (*this_cache == NULL)
1887     *this_cache = arm_make_prologue_cache (this_frame);
1888   cache = (struct arm_prologue_cache *) *this_cache;
1889
1890   /* Use function start address as part of the frame ID.  If we cannot
1891      identify the start address (due to missing symbol information),
1892      fall back to just using the current PC.  */
1893   pc = get_frame_pc (this_frame);
1894   func = get_frame_func (this_frame);
1895   if (!func)
1896     func = pc;
1897
1898   id = frame_id_build (cache->prev_sp, func);
1899   *this_id = id;
1900 }
1901
1902 static struct value *
1903 arm_prologue_prev_register (struct frame_info *this_frame,
1904                             void **this_cache,
1905                             int prev_regnum)
1906 {
1907   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1908   struct arm_prologue_cache *cache;
1909
1910   if (*this_cache == NULL)
1911     *this_cache = arm_make_prologue_cache (this_frame);
1912   cache = (struct arm_prologue_cache *) *this_cache;
1913
1914   /* If we are asked to unwind the PC, then we need to return the LR
1915      instead.  The prologue may save PC, but it will point into this
1916      frame's prologue, not the next frame's resume location.  Also
1917      strip the saved T bit.  A valid LR may have the low bit set, but
1918      a valid PC never does.  */
1919   if (prev_regnum == ARM_PC_REGNUM)
1920     {
1921       CORE_ADDR lr;
1922
1923       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1924       return frame_unwind_got_constant (this_frame, prev_regnum,
1925                                         arm_addr_bits_remove (gdbarch, lr));
1926     }
1927
1928   /* SP is generally not saved to the stack, but this frame is
1929      identified by the next frame's stack pointer at the time of the call.
1930      The value was already reconstructed into PREV_SP.  */
1931   if (prev_regnum == ARM_SP_REGNUM)
1932     return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
1933
1934   /* The CPSR may have been changed by the call instruction and by the
1935      called function.  The only bit we can reconstruct is the T bit,
1936      by checking the low bit of LR as of the call.  This is a reliable
1937      indicator of Thumb-ness except for some ARM v4T pre-interworking
1938      Thumb code, which could get away with a clear low bit as long as
1939      the called function did not use bx.  Guess that all other
1940      bits are unchanged; the condition flags are presumably lost,
1941      but the processor status is likely valid.  */
1942   if (prev_regnum == ARM_PS_REGNUM)
1943     {
1944       CORE_ADDR lr, cpsr;
1945       ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
1946
1947       cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
1948       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1949       if (IS_THUMB_ADDR (lr))
1950         cpsr |= t_bit;
1951       else
1952         cpsr &= ~t_bit;
1953       return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
1954     }
1955
1956   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1957                                        prev_regnum);
1958 }
1959
1960 struct frame_unwind arm_prologue_unwind = {
1961   NORMAL_FRAME,
1962   arm_prologue_unwind_stop_reason,
1963   arm_prologue_this_id,
1964   arm_prologue_prev_register,
1965   NULL,
1966   default_frame_sniffer
1967 };
1968
1969 /* Maintain a list of ARM exception table entries per objfile, similar to the
1970    list of mapping symbols.  We only cache entries for standard ARM-defined
1971    personality routines; the cache will contain only the frame unwinding
1972    instructions associated with the entry (not the descriptors).  */
1973
1974 static const struct objfile_data *arm_exidx_data_key;
1975
1976 struct arm_exidx_entry
1977 {
1978   bfd_vma addr;
1979   gdb_byte *entry;
1980 };
1981 typedef struct arm_exidx_entry arm_exidx_entry_s;
1982 DEF_VEC_O(arm_exidx_entry_s);
1983
1984 struct arm_exidx_data
1985 {
1986   VEC(arm_exidx_entry_s) **section_maps;
1987 };
1988
1989 static void
1990 arm_exidx_data_free (struct objfile *objfile, void *arg)
1991 {
1992   struct arm_exidx_data *data = (struct arm_exidx_data *) arg;
1993   unsigned int i;
1994
1995   for (i = 0; i < objfile->obfd->section_count; i++)
1996     VEC_free (arm_exidx_entry_s, data->section_maps[i]);
1997 }
1998
1999 static inline int
2000 arm_compare_exidx_entries (const struct arm_exidx_entry *lhs,
2001                            const struct arm_exidx_entry *rhs)
2002 {
2003   return lhs->addr < rhs->addr;
2004 }
2005
2006 static struct obj_section *
2007 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
2008 {
2009   struct obj_section *osect;
2010
2011   ALL_OBJFILE_OSECTIONS (objfile, osect)
2012     if (bfd_get_section_flags (objfile->obfd,
2013                                osect->the_bfd_section) & SEC_ALLOC)
2014       {
2015         bfd_vma start, size;
2016         start = bfd_get_section_vma (objfile->obfd, osect->the_bfd_section);
2017         size = bfd_get_section_size (osect->the_bfd_section);
2018
2019         if (start <= vma && vma < start + size)
2020           return osect;
2021       }
2022
2023   return NULL;
2024 }
2025
2026 /* Parse contents of exception table and exception index sections
2027    of OBJFILE, and fill in the exception table entry cache.
2028
2029    For each entry that refers to a standard ARM-defined personality
2030    routine, extract the frame unwinding instructions (from either
2031    the index or the table section).  The unwinding instructions
2032    are normalized by:
2033     - extracting them from the rest of the table data
2034     - converting to host endianness
2035     - appending the implicit 0xb0 ("Finish") code
2036
2037    The extracted and normalized instructions are stored for later
2038    retrieval by the arm_find_exidx_entry routine.  */
2039  
2040 static void
2041 arm_exidx_new_objfile (struct objfile *objfile)
2042 {
2043   struct arm_exidx_data *data;
2044   asection *exidx, *extab;
2045   bfd_vma exidx_vma = 0, extab_vma = 0;
2046   LONGEST i;
2047
2048   /* If we've already touched this file, do nothing.  */
2049   if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
2050     return;
2051
2052   /* Read contents of exception table and index.  */
2053   exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
2054   gdb::byte_vector exidx_data;
2055   if (exidx)
2056     {
2057       exidx_vma = bfd_section_vma (objfile->obfd, exidx);
2058       exidx_data.resize (bfd_get_section_size (exidx));
2059
2060       if (!bfd_get_section_contents (objfile->obfd, exidx,
2061                                      exidx_data.data (), 0,
2062                                      exidx_data.size ()))
2063         return;
2064     }
2065
2066   extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2067   gdb::byte_vector extab_data;
2068   if (extab)
2069     {
2070       extab_vma = bfd_section_vma (objfile->obfd, extab);
2071       extab_data.resize (bfd_get_section_size (extab));
2072
2073       if (!bfd_get_section_contents (objfile->obfd, extab,
2074                                      extab_data.data (), 0,
2075                                      extab_data.size ()))
2076         return;
2077     }
2078
2079   /* Allocate exception table data structure.  */
2080   data = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct arm_exidx_data);
2081   set_objfile_data (objfile, arm_exidx_data_key, data);
2082   data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
2083                                        objfile->obfd->section_count,
2084                                        VEC(arm_exidx_entry_s) *);
2085
2086   /* Fill in exception table.  */
2087   for (i = 0; i < exidx_data.size () / 8; i++)
2088     {
2089       struct arm_exidx_entry new_exidx_entry;
2090       bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data.data () + i * 8);
2091       bfd_vma val = bfd_h_get_32 (objfile->obfd,
2092                                   exidx_data.data () + i * 8 + 4);
2093       bfd_vma addr = 0, word = 0;
2094       int n_bytes = 0, n_words = 0;
2095       struct obj_section *sec;
2096       gdb_byte *entry = NULL;
2097
2098       /* Extract address of start of function.  */
2099       idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2100       idx += exidx_vma + i * 8;
2101
2102       /* Find section containing function and compute section offset.  */
2103       sec = arm_obj_section_from_vma (objfile, idx);
2104       if (sec == NULL)
2105         continue;
2106       idx -= bfd_get_section_vma (objfile->obfd, sec->the_bfd_section);
2107
2108       /* Determine address of exception table entry.  */
2109       if (val == 1)
2110         {
2111           /* EXIDX_CANTUNWIND -- no exception table entry present.  */
2112         }
2113       else if ((val & 0xff000000) == 0x80000000)
2114         {
2115           /* Exception table entry embedded in .ARM.exidx
2116              -- must be short form.  */
2117           word = val;
2118           n_bytes = 3;
2119         }
2120       else if (!(val & 0x80000000))
2121         {
2122           /* Exception table entry in .ARM.extab.  */
2123           addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2124           addr += exidx_vma + i * 8 + 4;
2125
2126           if (addr >= extab_vma && addr + 4 <= extab_vma + extab_data.size ())
2127             {
2128               word = bfd_h_get_32 (objfile->obfd,
2129                                    extab_data.data () + addr - extab_vma);
2130               addr += 4;
2131
2132               if ((word & 0xff000000) == 0x80000000)
2133                 {
2134                   /* Short form.  */
2135                   n_bytes = 3;
2136                 }
2137               else if ((word & 0xff000000) == 0x81000000
2138                        || (word & 0xff000000) == 0x82000000)
2139                 {
2140                   /* Long form.  */
2141                   n_bytes = 2;
2142                   n_words = ((word >> 16) & 0xff);
2143                 }
2144               else if (!(word & 0x80000000))
2145                 {
2146                   bfd_vma pers;
2147                   struct obj_section *pers_sec;
2148                   int gnu_personality = 0;
2149
2150                   /* Custom personality routine.  */
2151                   pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2152                   pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2153
2154                   /* Check whether we've got one of the variants of the
2155                      GNU personality routines.  */
2156                   pers_sec = arm_obj_section_from_vma (objfile, pers);
2157                   if (pers_sec)
2158                     {
2159                       static const char *personality[] = 
2160                         {
2161                           "__gcc_personality_v0",
2162                           "__gxx_personality_v0",
2163                           "__gcj_personality_v0",
2164                           "__gnu_objc_personality_v0",
2165                           NULL
2166                         };
2167
2168                       CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2169                       int k;
2170
2171                       for (k = 0; personality[k]; k++)
2172                         if (lookup_minimal_symbol_by_pc_name
2173                               (pc, personality[k], objfile))
2174                           {
2175                             gnu_personality = 1;
2176                             break;
2177                           }
2178                     }
2179
2180                   /* If so, the next word contains a word count in the high
2181                      byte, followed by the same unwind instructions as the
2182                      pre-defined forms.  */
2183                   if (gnu_personality
2184                       && addr + 4 <= extab_vma + extab_data.size ())
2185                     {
2186                       word = bfd_h_get_32 (objfile->obfd,
2187                                            (extab_data.data ()
2188                                             + addr - extab_vma));
2189                       addr += 4;
2190                       n_bytes = 3;
2191                       n_words = ((word >> 24) & 0xff);
2192                     }
2193                 }
2194             }
2195         }
2196
2197       /* Sanity check address.  */
2198       if (n_words)
2199         if (addr < extab_vma
2200             || addr + 4 * n_words > extab_vma + extab_data.size ())
2201           n_words = n_bytes = 0;
2202
2203       /* The unwind instructions reside in WORD (only the N_BYTES least
2204          significant bytes are valid), followed by N_WORDS words in the
2205          extab section starting at ADDR.  */
2206       if (n_bytes || n_words)
2207         {
2208           gdb_byte *p = entry
2209             = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
2210                                           n_bytes + n_words * 4 + 1);
2211
2212           while (n_bytes--)
2213             *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2214
2215           while (n_words--)
2216             {
2217               word = bfd_h_get_32 (objfile->obfd,
2218                                    extab_data.data () + addr - extab_vma);
2219               addr += 4;
2220
2221               *p++ = (gdb_byte) ((word >> 24) & 0xff);
2222               *p++ = (gdb_byte) ((word >> 16) & 0xff);
2223               *p++ = (gdb_byte) ((word >> 8) & 0xff);
2224               *p++ = (gdb_byte) (word & 0xff);
2225             }
2226
2227           /* Implied "Finish" to terminate the list.  */
2228           *p++ = 0xb0;
2229         }
2230
2231       /* Push entry onto vector.  They are guaranteed to always
2232          appear in order of increasing addresses.  */
2233       new_exidx_entry.addr = idx;
2234       new_exidx_entry.entry = entry;
2235       VEC_safe_push (arm_exidx_entry_s,
2236                      data->section_maps[sec->the_bfd_section->index],
2237                      &new_exidx_entry);
2238     }
2239 }
2240
2241 /* Search for the exception table entry covering MEMADDR.  If one is found,
2242    return a pointer to its data.  Otherwise, return 0.  If START is non-NULL,
2243    set *START to the start of the region covered by this entry.  */
2244
2245 static gdb_byte *
2246 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2247 {
2248   struct obj_section *sec;
2249
2250   sec = find_pc_section (memaddr);
2251   if (sec != NULL)
2252     {
2253       struct arm_exidx_data *data;
2254       VEC(arm_exidx_entry_s) *map;
2255       struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2256       unsigned int idx;
2257
2258       data = ((struct arm_exidx_data *)
2259               objfile_data (sec->objfile, arm_exidx_data_key));
2260       if (data != NULL)
2261         {
2262           map = data->section_maps[sec->the_bfd_section->index];
2263           if (!VEC_empty (arm_exidx_entry_s, map))
2264             {
2265               struct arm_exidx_entry *map_sym;
2266
2267               idx = VEC_lower_bound (arm_exidx_entry_s, map, &map_key,
2268                                      arm_compare_exidx_entries);
2269
2270               /* VEC_lower_bound finds the earliest ordered insertion
2271                  point.  If the following symbol starts at this exact
2272                  address, we use that; otherwise, the preceding
2273                  exception table entry covers this address.  */
2274               if (idx < VEC_length (arm_exidx_entry_s, map))
2275                 {
2276                   map_sym = VEC_index (arm_exidx_entry_s, map, idx);
2277                   if (map_sym->addr == map_key.addr)
2278                     {
2279                       if (start)
2280                         *start = map_sym->addr + obj_section_addr (sec);
2281                       return map_sym->entry;
2282                     }
2283                 }
2284
2285               if (idx > 0)
2286                 {
2287                   map_sym = VEC_index (arm_exidx_entry_s, map, idx - 1);
2288                   if (start)
2289                     *start = map_sym->addr + obj_section_addr (sec);
2290                   return map_sym->entry;
2291                 }
2292             }
2293         }
2294     }
2295
2296   return NULL;
2297 }
2298
2299 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2300    instruction list from the ARM exception table entry ENTRY, allocate and
2301    return a prologue cache structure describing how to unwind this frame.
2302
2303    Return NULL if the unwinding instruction list contains a "spare",
2304    "reserved" or "refuse to unwind" instruction as defined in section
2305    "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2306    for the ARM Architecture" document.  */
2307
2308 static struct arm_prologue_cache *
2309 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2310 {
2311   CORE_ADDR vsp = 0;
2312   int vsp_valid = 0;
2313
2314   struct arm_prologue_cache *cache;
2315   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2316   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2317
2318   for (;;)
2319     {
2320       gdb_byte insn;
2321
2322       /* Whenever we reload SP, we actually have to retrieve its
2323          actual value in the current frame.  */
2324       if (!vsp_valid)
2325         {
2326           if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2327             {
2328               int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2329               vsp = get_frame_register_unsigned (this_frame, reg);
2330             }
2331           else
2332             {
2333               CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
2334               vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2335             }
2336
2337           vsp_valid = 1;
2338         }
2339
2340       /* Decode next unwind instruction.  */
2341       insn = *entry++;
2342
2343       if ((insn & 0xc0) == 0)
2344         {
2345           int offset = insn & 0x3f;
2346           vsp += (offset << 2) + 4;
2347         }
2348       else if ((insn & 0xc0) == 0x40)
2349         {
2350           int offset = insn & 0x3f;
2351           vsp -= (offset << 2) + 4;
2352         }
2353       else if ((insn & 0xf0) == 0x80)
2354         {
2355           int mask = ((insn & 0xf) << 8) | *entry++;
2356           int i;
2357
2358           /* The special case of an all-zero mask identifies
2359              "Refuse to unwind".  We return NULL to fall back
2360              to the prologue analyzer.  */
2361           if (mask == 0)
2362             return NULL;
2363
2364           /* Pop registers r4..r15 under mask.  */
2365           for (i = 0; i < 12; i++)
2366             if (mask & (1 << i))
2367               {
2368                 cache->saved_regs[4 + i].addr = vsp;
2369                 vsp += 4;
2370               }
2371
2372           /* Special-case popping SP -- we need to reload vsp.  */
2373           if (mask & (1 << (ARM_SP_REGNUM - 4)))
2374             vsp_valid = 0;
2375         }
2376       else if ((insn & 0xf0) == 0x90)
2377         {
2378           int reg = insn & 0xf;
2379
2380           /* Reserved cases.  */
2381           if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2382             return NULL;
2383
2384           /* Set SP from another register and mark VSP for reload.  */
2385           cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2386           vsp_valid = 0;
2387         }
2388       else if ((insn & 0xf0) == 0xa0)
2389         {
2390           int count = insn & 0x7;
2391           int pop_lr = (insn & 0x8) != 0;
2392           int i;
2393
2394           /* Pop r4..r[4+count].  */
2395           for (i = 0; i <= count; i++)
2396             {
2397               cache->saved_regs[4 + i].addr = vsp;
2398               vsp += 4;
2399             }
2400
2401           /* If indicated by flag, pop LR as well.  */
2402           if (pop_lr)
2403             {
2404               cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
2405               vsp += 4;
2406             }
2407         }
2408       else if (insn == 0xb0)
2409         {
2410           /* We could only have updated PC by popping into it; if so, it
2411              will show up as address.  Otherwise, copy LR into PC.  */
2412           if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
2413             cache->saved_regs[ARM_PC_REGNUM]
2414               = cache->saved_regs[ARM_LR_REGNUM];
2415
2416           /* We're done.  */
2417           break;
2418         }
2419       else if (insn == 0xb1)
2420         {
2421           int mask = *entry++;
2422           int i;
2423
2424           /* All-zero mask and mask >= 16 is "spare".  */
2425           if (mask == 0 || mask >= 16)
2426             return NULL;
2427
2428           /* Pop r0..r3 under mask.  */
2429           for (i = 0; i < 4; i++)
2430             if (mask & (1 << i))
2431               {
2432                 cache->saved_regs[i].addr = vsp;
2433                 vsp += 4;
2434               }
2435         }
2436       else if (insn == 0xb2)
2437         {
2438           ULONGEST offset = 0;
2439           unsigned shift = 0;
2440
2441           do
2442             {
2443               offset |= (*entry & 0x7f) << shift;
2444               shift += 7;
2445             }
2446           while (*entry++ & 0x80);
2447
2448           vsp += 0x204 + (offset << 2);
2449         }
2450       else if (insn == 0xb3)
2451         {
2452           int start = *entry >> 4;
2453           int count = (*entry++) & 0xf;
2454           int i;
2455
2456           /* Only registers D0..D15 are valid here.  */
2457           if (start + count >= 16)
2458             return NULL;
2459
2460           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2461           for (i = 0; i <= count; i++)
2462             {
2463               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2464               vsp += 8;
2465             }
2466
2467           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2468           vsp += 4;
2469         }
2470       else if ((insn & 0xf8) == 0xb8)
2471         {
2472           int count = insn & 0x7;
2473           int i;
2474
2475           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2476           for (i = 0; i <= count; i++)
2477             {
2478               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2479               vsp += 8;
2480             }
2481
2482           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2483           vsp += 4;
2484         }
2485       else if (insn == 0xc6)
2486         {
2487           int start = *entry >> 4;
2488           int count = (*entry++) & 0xf;
2489           int i;
2490
2491           /* Only registers WR0..WR15 are valid.  */
2492           if (start + count >= 16)
2493             return NULL;
2494
2495           /* Pop iwmmx registers WR[start]..WR[start+count].  */
2496           for (i = 0; i <= count; i++)
2497             {
2498               cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
2499               vsp += 8;
2500             }
2501         }
2502       else if (insn == 0xc7)
2503         {
2504           int mask = *entry++;
2505           int i;
2506
2507           /* All-zero mask and mask >= 16 is "spare".  */
2508           if (mask == 0 || mask >= 16)
2509             return NULL;
2510
2511           /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask.  */
2512           for (i = 0; i < 4; i++)
2513             if (mask & (1 << i))
2514               {
2515                 cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
2516                 vsp += 4;
2517               }
2518         }
2519       else if ((insn & 0xf8) == 0xc0)
2520         {
2521           int count = insn & 0x7;
2522           int i;
2523
2524           /* Pop iwmmx registers WR[10]..WR[10+count].  */
2525           for (i = 0; i <= count; i++)
2526             {
2527               cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
2528               vsp += 8;
2529             }
2530         }
2531       else if (insn == 0xc8)
2532         {
2533           int start = *entry >> 4;
2534           int count = (*entry++) & 0xf;
2535           int i;
2536
2537           /* Only registers D0..D31 are valid.  */
2538           if (start + count >= 16)
2539             return NULL;
2540
2541           /* Pop VFP double-precision registers
2542              D[16+start]..D[16+start+count].  */
2543           for (i = 0; i <= count; i++)
2544             {
2545               cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
2546               vsp += 8;
2547             }
2548         }
2549       else if (insn == 0xc9)
2550         {
2551           int start = *entry >> 4;
2552           int count = (*entry++) & 0xf;
2553           int i;
2554
2555           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2556           for (i = 0; i <= count; i++)
2557             {
2558               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2559               vsp += 8;
2560             }
2561         }
2562       else if ((insn & 0xf8) == 0xd0)
2563         {
2564           int count = insn & 0x7;
2565           int i;
2566
2567           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2568           for (i = 0; i <= count; i++)
2569             {
2570               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2571               vsp += 8;
2572             }
2573         }
2574       else
2575         {
2576           /* Everything else is "spare".  */
2577           return NULL;
2578         }
2579     }
2580
2581   /* If we restore SP from a register, assume this was the frame register.
2582      Otherwise just fall back to SP as frame register.  */
2583   if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2584     cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2585   else
2586     cache->framereg = ARM_SP_REGNUM;
2587
2588   /* Determine offset to previous frame.  */
2589   cache->framesize
2590     = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2591
2592   /* We already got the previous SP.  */
2593   cache->prev_sp = vsp;
2594
2595   return cache;
2596 }
2597
2598 /* Unwinding via ARM exception table entries.  Note that the sniffer
2599    already computes a filled-in prologue cache, which is then used
2600    with the same arm_prologue_this_id and arm_prologue_prev_register
2601    routines also used for prologue-parsing based unwinding.  */
2602
2603 static int
2604 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2605                           struct frame_info *this_frame,
2606                           void **this_prologue_cache)
2607 {
2608   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2609   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2610   CORE_ADDR addr_in_block, exidx_region, func_start;
2611   struct arm_prologue_cache *cache;
2612   gdb_byte *entry;
2613
2614   /* See if we have an ARM exception table entry covering this address.  */
2615   addr_in_block = get_frame_address_in_block (this_frame);
2616   entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2617   if (!entry)
2618     return 0;
2619
2620   /* The ARM exception table does not describe unwind information
2621      for arbitrary PC values, but is guaranteed to be correct only
2622      at call sites.  We have to decide here whether we want to use
2623      ARM exception table information for this frame, or fall back
2624      to using prologue parsing.  (Note that if we have DWARF CFI,
2625      this sniffer isn't even called -- CFI is always preferred.)
2626
2627      Before we make this decision, however, we check whether we
2628      actually have *symbol* information for the current frame.
2629      If not, prologue parsing would not work anyway, so we might
2630      as well use the exception table and hope for the best.  */
2631   if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2632     {
2633       int exc_valid = 0;
2634
2635       /* If the next frame is "normal", we are at a call site in this
2636          frame, so exception information is guaranteed to be valid.  */
2637       if (get_next_frame (this_frame)
2638           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2639         exc_valid = 1;
2640
2641       /* We also assume exception information is valid if we're currently
2642          blocked in a system call.  The system library is supposed to
2643          ensure this, so that e.g. pthread cancellation works.  */
2644       if (arm_frame_is_thumb (this_frame))
2645         {
2646           ULONGEST insn;
2647
2648           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
2649                                                  2, byte_order_for_code, &insn)
2650               && (insn & 0xff00) == 0xdf00 /* svc */)
2651             exc_valid = 1;
2652         }
2653       else
2654         {
2655           ULONGEST insn;
2656
2657           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
2658                                                  4, byte_order_for_code, &insn)
2659               && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2660             exc_valid = 1;
2661         }
2662         
2663       /* Bail out if we don't know that exception information is valid.  */
2664       if (!exc_valid)
2665         return 0;
2666
2667      /* The ARM exception index does not mark the *end* of the region
2668         covered by the entry, and some functions will not have any entry.
2669         To correctly recognize the end of the covered region, the linker
2670         should have inserted dummy records with a CANTUNWIND marker.
2671
2672         Unfortunately, current versions of GNU ld do not reliably do
2673         this, and thus we may have found an incorrect entry above.
2674         As a (temporary) sanity check, we only use the entry if it
2675         lies *within* the bounds of the function.  Note that this check
2676         might reject perfectly valid entries that just happen to cover
2677         multiple functions; therefore this check ought to be removed
2678         once the linker is fixed.  */
2679       if (func_start > exidx_region)
2680         return 0;
2681     }
2682
2683   /* Decode the list of unwinding instructions into a prologue cache.
2684      Note that this may fail due to e.g. a "refuse to unwind" code.  */
2685   cache = arm_exidx_fill_cache (this_frame, entry);
2686   if (!cache)
2687     return 0;
2688
2689   *this_prologue_cache = cache;
2690   return 1;
2691 }
2692
2693 struct frame_unwind arm_exidx_unwind = {
2694   NORMAL_FRAME,
2695   default_frame_unwind_stop_reason,
2696   arm_prologue_this_id,
2697   arm_prologue_prev_register,
2698   NULL,
2699   arm_exidx_unwind_sniffer
2700 };
2701
2702 static struct arm_prologue_cache *
2703 arm_make_epilogue_frame_cache (struct frame_info *this_frame)
2704 {
2705   struct arm_prologue_cache *cache;
2706   int reg;
2707
2708   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2709   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2710
2711   /* Still rely on the offset calculated from prologue.  */
2712   arm_scan_prologue (this_frame, cache);
2713
2714   /* Since we are in epilogue, the SP has been restored.  */
2715   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2716
2717   /* Calculate actual addresses of saved registers using offsets
2718      determined by arm_scan_prologue.  */
2719   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2720     if (trad_frame_addr_p (cache->saved_regs, reg))
2721       cache->saved_regs[reg].addr += cache->prev_sp;
2722
2723   return cache;
2724 }
2725
2726 /* Implementation of function hook 'this_id' in
2727    'struct frame_uwnind' for epilogue unwinder.  */
2728
2729 static void
2730 arm_epilogue_frame_this_id (struct frame_info *this_frame,
2731                             void **this_cache,
2732                             struct frame_id *this_id)
2733 {
2734   struct arm_prologue_cache *cache;
2735   CORE_ADDR pc, func;
2736
2737   if (*this_cache == NULL)
2738     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2739   cache = (struct arm_prologue_cache *) *this_cache;
2740
2741   /* Use function start address as part of the frame ID.  If we cannot
2742      identify the start address (due to missing symbol information),
2743      fall back to just using the current PC.  */
2744   pc = get_frame_pc (this_frame);
2745   func = get_frame_func (this_frame);
2746   if (func == 0)
2747     func = pc;
2748
2749   (*this_id) = frame_id_build (cache->prev_sp, pc);
2750 }
2751
2752 /* Implementation of function hook 'prev_register' in
2753    'struct frame_uwnind' for epilogue unwinder.  */
2754
2755 static struct value *
2756 arm_epilogue_frame_prev_register (struct frame_info *this_frame,
2757                                   void **this_cache, int regnum)
2758 {
2759   if (*this_cache == NULL)
2760     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2761
2762   return arm_prologue_prev_register (this_frame, this_cache, regnum);
2763 }
2764
2765 static int arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch,
2766                                           CORE_ADDR pc);
2767 static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
2768                                           CORE_ADDR pc);
2769
2770 /* Implementation of function hook 'sniffer' in
2771    'struct frame_uwnind' for epilogue unwinder.  */
2772
2773 static int
2774 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
2775                             struct frame_info *this_frame,
2776                             void **this_prologue_cache)
2777 {
2778   if (frame_relative_level (this_frame) == 0)
2779     {
2780       struct gdbarch *gdbarch = get_frame_arch (this_frame);
2781       CORE_ADDR pc = get_frame_pc (this_frame);
2782
2783       if (arm_frame_is_thumb (this_frame))
2784         return thumb_stack_frame_destroyed_p (gdbarch, pc);
2785       else
2786         return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
2787     }
2788   else
2789     return 0;
2790 }
2791
2792 /* Frame unwinder from epilogue.  */
2793
2794 static const struct frame_unwind arm_epilogue_frame_unwind =
2795 {
2796   NORMAL_FRAME,
2797   default_frame_unwind_stop_reason,
2798   arm_epilogue_frame_this_id,
2799   arm_epilogue_frame_prev_register,
2800   NULL,
2801   arm_epilogue_frame_sniffer,
2802 };
2803
2804 /* Recognize GCC's trampoline for thumb call-indirect.  If we are in a
2805    trampoline, return the target PC.  Otherwise return 0.
2806
2807    void call0a (char c, short s, int i, long l) {}
2808
2809    int main (void)
2810    {
2811      (*pointer_to_call0a) (c, s, i, l);
2812    }
2813
2814    Instead of calling a stub library function  _call_via_xx (xx is
2815    the register name), GCC may inline the trampoline in the object
2816    file as below (register r2 has the address of call0a).
2817
2818    .global main
2819    .type main, %function
2820    ...
2821    bl .L1
2822    ...
2823    .size main, .-main
2824
2825    .L1:
2826    bx r2
2827
2828    The trampoline 'bx r2' doesn't belong to main.  */
2829
2830 static CORE_ADDR
2831 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2832 {
2833   /* The heuristics of recognizing such trampoline is that FRAME is
2834      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
2835   if (arm_frame_is_thumb (frame))
2836     {
2837       gdb_byte buf[2];
2838
2839       if (target_read_memory (pc, buf, 2) == 0)
2840         {
2841           struct gdbarch *gdbarch = get_frame_arch (frame);
2842           enum bfd_endian byte_order_for_code
2843             = gdbarch_byte_order_for_code (gdbarch);
2844           uint16_t insn
2845             = extract_unsigned_integer (buf, 2, byte_order_for_code);
2846
2847           if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
2848             {
2849               CORE_ADDR dest
2850                 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2851
2852               /* Clear the LSB so that gdb core sets step-resume
2853                  breakpoint at the right address.  */
2854               return UNMAKE_THUMB_ADDR (dest);
2855             }
2856         }
2857     }
2858
2859   return 0;
2860 }
2861
2862 static struct arm_prologue_cache *
2863 arm_make_stub_cache (struct frame_info *this_frame)
2864 {
2865   struct arm_prologue_cache *cache;
2866
2867   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2868   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2869
2870   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2871
2872   return cache;
2873 }
2874
2875 /* Our frame ID for a stub frame is the current SP and LR.  */
2876
2877 static void
2878 arm_stub_this_id (struct frame_info *this_frame,
2879                   void **this_cache,
2880                   struct frame_id *this_id)
2881 {
2882   struct arm_prologue_cache *cache;
2883
2884   if (*this_cache == NULL)
2885     *this_cache = arm_make_stub_cache (this_frame);
2886   cache = (struct arm_prologue_cache *) *this_cache;
2887
2888   *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2889 }
2890
2891 static int
2892 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2893                          struct frame_info *this_frame,
2894                          void **this_prologue_cache)
2895 {
2896   CORE_ADDR addr_in_block;
2897   gdb_byte dummy[4];
2898   CORE_ADDR pc, start_addr;
2899   const char *name;
2900
2901   addr_in_block = get_frame_address_in_block (this_frame);
2902   pc = get_frame_pc (this_frame);
2903   if (in_plt_section (addr_in_block)
2904       /* We also use the stub winder if the target memory is unreadable
2905          to avoid having the prologue unwinder trying to read it.  */
2906       || target_read_memory (pc, dummy, 4) != 0)
2907     return 1;
2908
2909   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2910       && arm_skip_bx_reg (this_frame, pc) != 0)
2911     return 1;
2912
2913   return 0;
2914 }
2915
2916 struct frame_unwind arm_stub_unwind = {
2917   NORMAL_FRAME,
2918   default_frame_unwind_stop_reason,
2919   arm_stub_this_id,
2920   arm_prologue_prev_register,
2921   NULL,
2922   arm_stub_unwind_sniffer
2923 };
2924
2925 /* Put here the code to store, into CACHE->saved_regs, the addresses
2926    of the saved registers of frame described by THIS_FRAME.  CACHE is
2927    returned.  */
2928
2929 static struct arm_prologue_cache *
2930 arm_m_exception_cache (struct frame_info *this_frame)
2931 {
2932   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2933   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2934   struct arm_prologue_cache *cache;
2935   CORE_ADDR unwound_sp;
2936   LONGEST xpsr;
2937
2938   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2939   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2940
2941   unwound_sp = get_frame_register_unsigned (this_frame,
2942                                             ARM_SP_REGNUM);
2943
2944   /* The hardware saves eight 32-bit words, comprising xPSR,
2945      ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
2946      "B1.5.6 Exception entry behavior" in
2947      "ARMv7-M Architecture Reference Manual".  */
2948   cache->saved_regs[0].addr = unwound_sp;
2949   cache->saved_regs[1].addr = unwound_sp + 4;
2950   cache->saved_regs[2].addr = unwound_sp + 8;
2951   cache->saved_regs[3].addr = unwound_sp + 12;
2952   cache->saved_regs[12].addr = unwound_sp + 16;
2953   cache->saved_regs[14].addr = unwound_sp + 20;
2954   cache->saved_regs[15].addr = unwound_sp + 24;
2955   cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
2956
2957   /* If bit 9 of the saved xPSR is set, then there is a four-byte
2958      aligner between the top of the 32-byte stack frame and the
2959      previous context's stack pointer.  */
2960   cache->prev_sp = unwound_sp + 32;
2961   if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
2962       && (xpsr & (1 << 9)) != 0)
2963     cache->prev_sp += 4;
2964
2965   return cache;
2966 }
2967
2968 /* Implementation of function hook 'this_id' in
2969    'struct frame_uwnind'.  */
2970
2971 static void
2972 arm_m_exception_this_id (struct frame_info *this_frame,
2973                          void **this_cache,
2974                          struct frame_id *this_id)
2975 {
2976   struct arm_prologue_cache *cache;
2977
2978   if (*this_cache == NULL)
2979     *this_cache = arm_m_exception_cache (this_frame);
2980   cache = (struct arm_prologue_cache *) *this_cache;
2981
2982   /* Our frame ID for a stub frame is the current SP and LR.  */
2983   *this_id = frame_id_build (cache->prev_sp,
2984                              get_frame_pc (this_frame));
2985 }
2986
2987 /* Implementation of function hook 'prev_register' in
2988    'struct frame_uwnind'.  */
2989
2990 static struct value *
2991 arm_m_exception_prev_register (struct frame_info *this_frame,
2992                                void **this_cache,
2993                                int prev_regnum)
2994 {
2995   struct arm_prologue_cache *cache;
2996
2997   if (*this_cache == NULL)
2998     *this_cache = arm_m_exception_cache (this_frame);
2999   cache = (struct arm_prologue_cache *) *this_cache;
3000
3001   /* The value was already reconstructed into PREV_SP.  */
3002   if (prev_regnum == ARM_SP_REGNUM)
3003     return frame_unwind_got_constant (this_frame, prev_regnum,
3004                                       cache->prev_sp);
3005
3006   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3007                                        prev_regnum);
3008 }
3009
3010 /* Implementation of function hook 'sniffer' in
3011    'struct frame_uwnind'.  */
3012
3013 static int
3014 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3015                                 struct frame_info *this_frame,
3016                                 void **this_prologue_cache)
3017 {
3018   CORE_ADDR this_pc = get_frame_pc (this_frame);
3019
3020   /* No need to check is_m; this sniffer is only registered for
3021      M-profile architectures.  */
3022
3023   /* Check if exception frame returns to a magic PC value.  */
3024   return arm_m_addr_is_magic (this_pc);
3025 }
3026
3027 /* Frame unwinder for M-profile exceptions.  */
3028
3029 struct frame_unwind arm_m_exception_unwind =
3030 {
3031   SIGTRAMP_FRAME,
3032   default_frame_unwind_stop_reason,
3033   arm_m_exception_this_id,
3034   arm_m_exception_prev_register,
3035   NULL,
3036   arm_m_exception_unwind_sniffer
3037 };
3038
3039 static CORE_ADDR
3040 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3041 {
3042   struct arm_prologue_cache *cache;
3043
3044   if (*this_cache == NULL)
3045     *this_cache = arm_make_prologue_cache (this_frame);
3046   cache = (struct arm_prologue_cache *) *this_cache;
3047
3048   return cache->prev_sp - cache->framesize;
3049 }
3050
3051 struct frame_base arm_normal_base = {
3052   &arm_prologue_unwind,
3053   arm_normal_frame_base,
3054   arm_normal_frame_base,
3055   arm_normal_frame_base
3056 };
3057
3058 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
3059    dummy frame.  The frame ID's base needs to match the TOS value
3060    saved by save_dummy_frame_tos() and returned from
3061    arm_push_dummy_call, and the PC needs to match the dummy frame's
3062    breakpoint.  */
3063
3064 static struct frame_id
3065 arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3066 {
3067   return frame_id_build (get_frame_register_unsigned (this_frame,
3068                                                       ARM_SP_REGNUM),
3069                          get_frame_pc (this_frame));
3070 }
3071
3072 /* Given THIS_FRAME, find the previous frame's resume PC (which will
3073    be used to construct the previous frame's ID, after looking up the
3074    containing function).  */
3075
3076 static CORE_ADDR
3077 arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
3078 {
3079   CORE_ADDR pc;
3080   pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
3081   return arm_addr_bits_remove (gdbarch, pc);
3082 }
3083
3084 static CORE_ADDR
3085 arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
3086 {
3087   return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
3088 }
3089
3090 static struct value *
3091 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3092                           int regnum)
3093 {
3094   struct gdbarch * gdbarch = get_frame_arch (this_frame);
3095   CORE_ADDR lr, cpsr;
3096   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3097
3098   switch (regnum)
3099     {
3100     case ARM_PC_REGNUM:
3101       /* The PC is normally copied from the return column, which
3102          describes saves of LR.  However, that version may have an
3103          extra bit set to indicate Thumb state.  The bit is not
3104          part of the PC.  */
3105       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3106       return frame_unwind_got_constant (this_frame, regnum,
3107                                         arm_addr_bits_remove (gdbarch, lr));
3108
3109     case ARM_PS_REGNUM:
3110       /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
3111       cpsr = get_frame_register_unsigned (this_frame, regnum);
3112       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3113       if (IS_THUMB_ADDR (lr))
3114         cpsr |= t_bit;
3115       else
3116         cpsr &= ~t_bit;
3117       return frame_unwind_got_constant (this_frame, regnum, cpsr);
3118
3119     default:
3120       internal_error (__FILE__, __LINE__,
3121                       _("Unexpected register %d"), regnum);
3122     }
3123 }
3124
3125 static void
3126 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3127                            struct dwarf2_frame_state_reg *reg,
3128                            struct frame_info *this_frame)
3129 {
3130   switch (regnum)
3131     {
3132     case ARM_PC_REGNUM:
3133     case ARM_PS_REGNUM:
3134       reg->how = DWARF2_FRAME_REG_FN;
3135       reg->loc.fn = arm_dwarf2_prev_register;
3136       break;
3137     case ARM_SP_REGNUM:
3138       reg->how = DWARF2_FRAME_REG_CFA;
3139       break;
3140     }
3141 }
3142
3143 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3144
3145 static int
3146 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3147 {
3148   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3149   unsigned int insn, insn2;
3150   int found_return = 0, found_stack_adjust = 0;
3151   CORE_ADDR func_start, func_end;
3152   CORE_ADDR scan_pc;
3153   gdb_byte buf[4];
3154
3155   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3156     return 0;
3157
3158   /* The epilogue is a sequence of instructions along the following lines:
3159
3160     - add stack frame size to SP or FP
3161     - [if frame pointer used] restore SP from FP
3162     - restore registers from SP [may include PC]
3163     - a return-type instruction [if PC wasn't already restored]
3164
3165     In a first pass, we scan forward from the current PC and verify the
3166     instructions we find as compatible with this sequence, ending in a
3167     return instruction.
3168
3169     However, this is not sufficient to distinguish indirect function calls
3170     within a function from indirect tail calls in the epilogue in some cases.
3171     Therefore, if we didn't already find any SP-changing instruction during
3172     forward scan, we add a backward scanning heuristic to ensure we actually
3173     are in the epilogue.  */
3174
3175   scan_pc = pc;
3176   while (scan_pc < func_end && !found_return)
3177     {
3178       if (target_read_memory (scan_pc, buf, 2))
3179         break;
3180
3181       scan_pc += 2;
3182       insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3183
3184       if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
3185         found_return = 1;
3186       else if (insn == 0x46f7)  /* mov pc, lr */
3187         found_return = 1;
3188       else if (thumb_instruction_restores_sp (insn))
3189         {
3190           if ((insn & 0xff00) == 0xbd00)  /* pop <registers, PC> */
3191             found_return = 1;
3192         }
3193       else if (thumb_insn_size (insn) == 4)  /* 32-bit Thumb-2 instruction */
3194         {
3195           if (target_read_memory (scan_pc, buf, 2))
3196             break;
3197
3198           scan_pc += 2;
3199           insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3200
3201           if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3202             {
3203               if (insn2 & 0x8000)  /* <registers> include PC.  */
3204                 found_return = 1;
3205             }
3206           else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3207                    && (insn2 & 0x0fff) == 0x0b04)
3208             {
3209               if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC.  */
3210                 found_return = 1;
3211             }
3212           else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3213                    && (insn2 & 0x0e00) == 0x0a00)
3214             ;
3215           else
3216             break;
3217         }
3218       else
3219         break;
3220     }
3221
3222   if (!found_return)
3223     return 0;
3224
3225   /* Since any instruction in the epilogue sequence, with the possible
3226      exception of return itself, updates the stack pointer, we need to
3227      scan backwards for at most one instruction.  Try either a 16-bit or
3228      a 32-bit instruction.  This is just a heuristic, so we do not worry
3229      too much about false positives.  */
3230
3231   if (pc - 4 < func_start)
3232     return 0;
3233   if (target_read_memory (pc - 4, buf, 4))
3234     return 0;
3235
3236   insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3237   insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3238
3239   if (thumb_instruction_restores_sp (insn2))
3240     found_stack_adjust = 1;
3241   else if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3242     found_stack_adjust = 1;
3243   else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3244            && (insn2 & 0x0fff) == 0x0b04)
3245     found_stack_adjust = 1;
3246   else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3247            && (insn2 & 0x0e00) == 0x0a00)
3248     found_stack_adjust = 1;
3249
3250   return found_stack_adjust;
3251 }
3252
3253 static int
3254 arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
3255 {
3256   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3257   unsigned int insn;
3258   int found_return;
3259   CORE_ADDR func_start, func_end;
3260
3261   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3262     return 0;
3263
3264   /* We are in the epilogue if the previous instruction was a stack
3265      adjustment and the next instruction is a possible return (bx, mov
3266      pc, or pop).  We could have to scan backwards to find the stack
3267      adjustment, or forwards to find the return, but this is a decent
3268      approximation.  First scan forwards.  */
3269
3270   found_return = 0;
3271   insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3272   if (bits (insn, 28, 31) != INST_NV)
3273     {
3274       if ((insn & 0x0ffffff0) == 0x012fff10)
3275         /* BX.  */
3276         found_return = 1;
3277       else if ((insn & 0x0ffffff0) == 0x01a0f000)
3278         /* MOV PC.  */
3279         found_return = 1;
3280       else if ((insn & 0x0fff0000) == 0x08bd0000
3281           && (insn & 0x0000c000) != 0)
3282         /* POP (LDMIA), including PC or LR.  */
3283         found_return = 1;
3284     }
3285
3286   if (!found_return)
3287     return 0;
3288
3289   /* Scan backwards.  This is just a heuristic, so do not worry about
3290      false positives from mode changes.  */
3291
3292   if (pc < func_start + 4)
3293     return 0;
3294
3295   insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3296   if (arm_instruction_restores_sp (insn))
3297     return 1;
3298
3299   return 0;
3300 }
3301
3302 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3303
3304 static int
3305 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3306 {
3307   if (arm_pc_is_thumb (gdbarch, pc))
3308     return thumb_stack_frame_destroyed_p (gdbarch, pc);
3309   else
3310     return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
3311 }
3312
3313 /* When arguments must be pushed onto the stack, they go on in reverse
3314    order.  The code below implements a FILO (stack) to do this.  */
3315
3316 struct stack_item
3317 {
3318   int len;
3319   struct stack_item *prev;
3320   gdb_byte *data;
3321 };
3322
3323 static struct stack_item *
3324 push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
3325 {
3326   struct stack_item *si;
3327   si = XNEW (struct stack_item);
3328   si->data = (gdb_byte *) xmalloc (len);
3329   si->len = len;
3330   si->prev = prev;
3331   memcpy (si->data, contents, len);
3332   return si;
3333 }
3334
3335 static struct stack_item *
3336 pop_stack_item (struct stack_item *si)
3337 {
3338   struct stack_item *dead = si;
3339   si = si->prev;
3340   xfree (dead->data);
3341   xfree (dead);
3342   return si;
3343 }
3344
3345
3346 /* Return the alignment (in bytes) of the given type.  */
3347
3348 static int
3349 arm_type_align (struct type *t)
3350 {
3351   int n;
3352   int align;
3353   int falign;
3354
3355   t = check_typedef (t);
3356   switch (TYPE_CODE (t))
3357     {
3358     default:
3359       /* Should never happen.  */
3360       internal_error (__FILE__, __LINE__, _("unknown type alignment"));
3361       return 4;
3362
3363     case TYPE_CODE_PTR:
3364     case TYPE_CODE_ENUM:
3365     case TYPE_CODE_INT:
3366     case TYPE_CODE_FLT:
3367     case TYPE_CODE_SET:
3368     case TYPE_CODE_RANGE:
3369     case TYPE_CODE_REF:
3370     case TYPE_CODE_RVALUE_REF:
3371     case TYPE_CODE_CHAR:
3372     case TYPE_CODE_BOOL:
3373       return TYPE_LENGTH (t);
3374
3375     case TYPE_CODE_ARRAY:
3376       if (TYPE_VECTOR (t))
3377         {
3378           /* Use the natural alignment for vector types (the same for
3379              scalar type), but the maximum alignment is 64-bit.  */
3380           if (TYPE_LENGTH (t) > 8)
3381             return 8;
3382           else
3383             return TYPE_LENGTH (t);
3384         }
3385       else
3386         return arm_type_align (TYPE_TARGET_TYPE (t));
3387     case TYPE_CODE_COMPLEX:
3388       return arm_type_align (TYPE_TARGET_TYPE (t));
3389
3390     case TYPE_CODE_STRUCT:
3391     case TYPE_CODE_UNION:
3392       align = 1;
3393       for (n = 0; n < TYPE_NFIELDS (t); n++)
3394         {
3395           falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
3396           if (falign > align)
3397             align = falign;
3398         }
3399       return align;
3400     }
3401 }
3402
3403 /* Possible base types for a candidate for passing and returning in
3404    VFP registers.  */
3405
3406 enum arm_vfp_cprc_base_type
3407 {
3408   VFP_CPRC_UNKNOWN,
3409   VFP_CPRC_SINGLE,
3410   VFP_CPRC_DOUBLE,
3411   VFP_CPRC_VEC64,
3412   VFP_CPRC_VEC128
3413 };
3414
3415 /* The length of one element of base type B.  */
3416
3417 static unsigned
3418 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3419 {
3420   switch (b)
3421     {
3422     case VFP_CPRC_SINGLE:
3423       return 4;
3424     case VFP_CPRC_DOUBLE:
3425       return 8;
3426     case VFP_CPRC_VEC64:
3427       return 8;
3428     case VFP_CPRC_VEC128:
3429       return 16;
3430     default:
3431       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3432                       (int) b);
3433     }
3434 }
3435
3436 /* The character ('s', 'd' or 'q') for the type of VFP register used
3437    for passing base type B.  */
3438
3439 static int
3440 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3441 {
3442   switch (b)
3443     {
3444     case VFP_CPRC_SINGLE:
3445       return 's';
3446     case VFP_CPRC_DOUBLE:
3447       return 'd';
3448     case VFP_CPRC_VEC64:
3449       return 'd';
3450     case VFP_CPRC_VEC128:
3451       return 'q';
3452     default:
3453       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3454                       (int) b);
3455     }
3456 }
3457
3458 /* Determine whether T may be part of a candidate for passing and
3459    returning in VFP registers, ignoring the limit on the total number
3460    of components.  If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3461    classification of the first valid component found; if it is not
3462    VFP_CPRC_UNKNOWN, all components must have the same classification
3463    as *BASE_TYPE.  If it is found that T contains a type not permitted
3464    for passing and returning in VFP registers, a type differently
3465    classified from *BASE_TYPE, or two types differently classified
3466    from each other, return -1, otherwise return the total number of
3467    base-type elements found (possibly 0 in an empty structure or
3468    array).  Vector types are not currently supported, matching the
3469    generic AAPCS support.  */
3470
3471 static int
3472 arm_vfp_cprc_sub_candidate (struct type *t,
3473                             enum arm_vfp_cprc_base_type *base_type)
3474 {
3475   t = check_typedef (t);
3476   switch (TYPE_CODE (t))
3477     {
3478     case TYPE_CODE_FLT:
3479       switch (TYPE_LENGTH (t))
3480         {
3481         case 4:
3482           if (*base_type == VFP_CPRC_UNKNOWN)
3483             *base_type = VFP_CPRC_SINGLE;
3484           else if (*base_type != VFP_CPRC_SINGLE)
3485             return -1;
3486           return 1;
3487
3488         case 8:
3489           if (*base_type == VFP_CPRC_UNKNOWN)
3490             *base_type = VFP_CPRC_DOUBLE;
3491           else if (*base_type != VFP_CPRC_DOUBLE)
3492             return -1;
3493           return 1;
3494
3495         default:
3496           return -1;
3497         }
3498       break;
3499
3500     case TYPE_CODE_COMPLEX:
3501       /* Arguments of complex T where T is one of the types float or
3502          double get treated as if they are implemented as:
3503
3504          struct complexT
3505          {
3506            T real;
3507            T imag;
3508          };
3509
3510       */
3511       switch (TYPE_LENGTH (t))
3512         {
3513         case 8:
3514           if (*base_type == VFP_CPRC_UNKNOWN)
3515             *base_type = VFP_CPRC_SINGLE;
3516           else if (*base_type != VFP_CPRC_SINGLE)
3517             return -1;
3518           return 2;
3519
3520         case 16:
3521           if (*base_type == VFP_CPRC_UNKNOWN)
3522             *base_type = VFP_CPRC_DOUBLE;
3523           else if (*base_type != VFP_CPRC_DOUBLE)
3524             return -1;
3525           return 2;
3526
3527         default:
3528           return -1;
3529         }
3530       break;
3531
3532     case TYPE_CODE_ARRAY:
3533       {
3534         if (TYPE_VECTOR (t))
3535           {
3536             /* A 64-bit or 128-bit containerized vector type are VFP
3537                CPRCs.  */
3538             switch (TYPE_LENGTH (t))
3539               {
3540               case 8:
3541                 if (*base_type == VFP_CPRC_UNKNOWN)
3542                   *base_type = VFP_CPRC_VEC64;
3543                 return 1;
3544               case 16:
3545                 if (*base_type == VFP_CPRC_UNKNOWN)
3546                   *base_type = VFP_CPRC_VEC128;
3547                 return 1;
3548               default:
3549                 return -1;
3550               }
3551           }
3552         else
3553           {
3554             int count;
3555             unsigned unitlen;
3556
3557             count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
3558                                                 base_type);
3559             if (count == -1)
3560               return -1;
3561             if (TYPE_LENGTH (t) == 0)
3562               {
3563                 gdb_assert (count == 0);
3564                 return 0;
3565               }
3566             else if (count == 0)
3567               return -1;
3568             unitlen = arm_vfp_cprc_unit_length (*base_type);
3569             gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3570             return TYPE_LENGTH (t) / unitlen;
3571           }
3572       }
3573       break;
3574
3575     case TYPE_CODE_STRUCT:
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 = 0;
3583
3584             if (!field_is_static (&TYPE_FIELD (t, i)))
3585               sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3586                                                       base_type);
3587             if (sub_count == -1)
3588               return -1;
3589             count += sub_count;
3590           }
3591         if (TYPE_LENGTH (t) == 0)
3592           {
3593             gdb_assert (count == 0);
3594             return 0;
3595           }
3596         else if (count == 0)
3597           return -1;
3598         unitlen = arm_vfp_cprc_unit_length (*base_type);
3599         if (TYPE_LENGTH (t) != unitlen * count)
3600           return -1;
3601         return count;
3602       }
3603
3604     case TYPE_CODE_UNION:
3605       {
3606         int count = 0;
3607         unsigned unitlen;
3608         int i;
3609         for (i = 0; i < TYPE_NFIELDS (t); i++)
3610           {
3611             int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3612                                                         base_type);
3613             if (sub_count == -1)
3614               return -1;
3615             count = (count > sub_count ? count : sub_count);
3616           }
3617         if (TYPE_LENGTH (t) == 0)
3618           {
3619             gdb_assert (count == 0);
3620             return 0;
3621           }
3622         else if (count == 0)
3623           return -1;
3624         unitlen = arm_vfp_cprc_unit_length (*base_type);
3625         if (TYPE_LENGTH (t) != unitlen * count)
3626           return -1;
3627         return count;
3628       }
3629
3630     default:
3631       break;
3632     }
3633
3634   return -1;
3635 }
3636
3637 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3638    if passed to or returned from a non-variadic function with the VFP
3639    ABI in effect.  Return 1 if it is, 0 otherwise.  If it is, set
3640    *BASE_TYPE to the base type for T and *COUNT to the number of
3641    elements of that base type before returning.  */
3642
3643 static int
3644 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3645                         int *count)
3646 {
3647   enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3648   int c = arm_vfp_cprc_sub_candidate (t, &b);
3649   if (c <= 0 || c > 4)
3650     return 0;
3651   *base_type = b;
3652   *count = c;
3653   return 1;
3654 }
3655
3656 /* Return 1 if the VFP ABI should be used for passing arguments to and
3657    returning values from a function of type FUNC_TYPE, 0
3658    otherwise.  */
3659
3660 static int
3661 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3662 {
3663   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3664   /* Variadic functions always use the base ABI.  Assume that functions
3665      without debug info are not variadic.  */
3666   if (func_type && TYPE_VARARGS (check_typedef (func_type)))
3667     return 0;
3668   /* The VFP ABI is only supported as a variant of AAPCS.  */
3669   if (tdep->arm_abi != ARM_ABI_AAPCS)
3670     return 0;
3671   return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3672 }
3673
3674 /* We currently only support passing parameters in integer registers, which
3675    conforms with GCC's default model, and VFP argument passing following
3676    the VFP variant of AAPCS.  Several other variants exist and
3677    we should probably support some of them based on the selected ABI.  */
3678
3679 static CORE_ADDR
3680 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3681                      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3682                      struct value **args, CORE_ADDR sp, int struct_return,
3683                      CORE_ADDR struct_addr)
3684 {
3685   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3686   int argnum;
3687   int argreg;
3688   int nstack;
3689   struct stack_item *si = NULL;
3690   int use_vfp_abi;
3691   struct type *ftype;
3692   unsigned vfp_regs_free = (1 << 16) - 1;
3693
3694   /* Determine the type of this function and whether the VFP ABI
3695      applies.  */
3696   ftype = check_typedef (value_type (function));
3697   if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
3698     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3699   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3700
3701   /* Set the return address.  For the ARM, the return breakpoint is
3702      always at BP_ADDR.  */
3703   if (arm_pc_is_thumb (gdbarch, bp_addr))
3704     bp_addr |= 1;
3705   regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3706
3707   /* Walk through the list of args and determine how large a temporary
3708      stack is required.  Need to take care here as structs may be
3709      passed on the stack, and we have to push them.  */
3710   nstack = 0;
3711
3712   argreg = ARM_A1_REGNUM;
3713   nstack = 0;
3714
3715   /* The struct_return pointer occupies the first parameter
3716      passing register.  */
3717   if (struct_return)
3718     {
3719       if (arm_debug)
3720         fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
3721                             gdbarch_register_name (gdbarch, argreg),
3722                             paddress (gdbarch, struct_addr));
3723       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3724       argreg++;
3725     }
3726
3727   for (argnum = 0; argnum < nargs; argnum++)
3728     {
3729       int len;
3730       struct type *arg_type;
3731       struct type *target_type;
3732       enum type_code typecode;
3733       const bfd_byte *val;
3734       int align;
3735       enum arm_vfp_cprc_base_type vfp_base_type;
3736       int vfp_base_count;
3737       int may_use_core_reg = 1;
3738
3739       arg_type = check_typedef (value_type (args[argnum]));
3740       len = TYPE_LENGTH (arg_type);
3741       target_type = TYPE_TARGET_TYPE (arg_type);
3742       typecode = TYPE_CODE (arg_type);
3743       val = value_contents (args[argnum]);
3744
3745       align = arm_type_align (arg_type);
3746       /* Round alignment up to a whole number of words.  */
3747       align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
3748       /* Different ABIs have different maximum alignments.  */
3749       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3750         {
3751           /* The APCS ABI only requires word alignment.  */
3752           align = INT_REGISTER_SIZE;
3753         }
3754       else
3755         {
3756           /* The AAPCS requires at most doubleword alignment.  */
3757           if (align > INT_REGISTER_SIZE * 2)
3758             align = INT_REGISTER_SIZE * 2;
3759         }
3760
3761       if (use_vfp_abi
3762           && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3763                                      &vfp_base_count))
3764         {
3765           int regno;
3766           int unit_length;
3767           int shift;
3768           unsigned mask;
3769
3770           /* Because this is a CPRC it cannot go in a core register or
3771              cause a core register to be skipped for alignment.
3772              Either it goes in VFP registers and the rest of this loop
3773              iteration is skipped for this argument, or it goes on the
3774              stack (and the stack alignment code is correct for this
3775              case).  */
3776           may_use_core_reg = 0;
3777
3778           unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3779           shift = unit_length / 4;
3780           mask = (1 << (shift * vfp_base_count)) - 1;
3781           for (regno = 0; regno < 16; regno += shift)
3782             if (((vfp_regs_free >> regno) & mask) == mask)
3783               break;
3784
3785           if (regno < 16)
3786             {
3787               int reg_char;
3788               int reg_scaled;
3789               int i;
3790
3791               vfp_regs_free &= ~(mask << regno);
3792               reg_scaled = regno / shift;
3793               reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3794               for (i = 0; i < vfp_base_count; i++)
3795                 {
3796                   char name_buf[4];
3797                   int regnum;
3798                   if (reg_char == 'q')
3799                     arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3800                                          val + i * unit_length);
3801                   else
3802                     {
3803                       xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3804                                  reg_char, reg_scaled + i);
3805                       regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3806                                                             strlen (name_buf));
3807                       regcache->cooked_write (regnum, val + i * unit_length);
3808                     }
3809                 }
3810               continue;
3811             }
3812           else
3813             {
3814               /* This CPRC could not go in VFP registers, so all VFP
3815                  registers are now marked as used.  */
3816               vfp_regs_free = 0;
3817             }
3818         }
3819
3820       /* Push stack padding for dowubleword alignment.  */
3821       if (nstack & (align - 1))
3822         {
3823           si = push_stack_item (si, val, INT_REGISTER_SIZE);
3824           nstack += INT_REGISTER_SIZE;
3825         }
3826       
3827       /* Doubleword aligned quantities must go in even register pairs.  */
3828       if (may_use_core_reg
3829           && argreg <= ARM_LAST_ARG_REGNUM
3830           && align > INT_REGISTER_SIZE
3831           && argreg & 1)
3832         argreg++;
3833
3834       /* If the argument is a pointer to a function, and it is a
3835          Thumb function, create a LOCAL copy of the value and set
3836          the THUMB bit in it.  */
3837       if (TYPE_CODE_PTR == typecode
3838           && target_type != NULL
3839           && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3840         {
3841           CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3842           if (arm_pc_is_thumb (gdbarch, regval))
3843             {
3844               bfd_byte *copy = (bfd_byte *) alloca (len);
3845               store_unsigned_integer (copy, len, byte_order,
3846                                       MAKE_THUMB_ADDR (regval));
3847               val = copy;
3848             }
3849         }
3850
3851       /* Copy the argument to general registers or the stack in
3852          register-sized pieces.  Large arguments are split between
3853          registers and stack.  */
3854       while (len > 0)
3855         {
3856           int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3857           CORE_ADDR regval
3858             = extract_unsigned_integer (val, partial_len, byte_order);
3859
3860           if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3861             {
3862               /* The argument is being passed in a general purpose
3863                  register.  */
3864               if (byte_order == BFD_ENDIAN_BIG)
3865                 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3866               if (arm_debug)
3867                 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3868                                     argnum,
3869                                     gdbarch_register_name
3870                                       (gdbarch, argreg),
3871                                     phex (regval, INT_REGISTER_SIZE));
3872               regcache_cooked_write_unsigned (regcache, argreg, regval);
3873               argreg++;
3874             }
3875           else
3876             {
3877               gdb_byte buf[INT_REGISTER_SIZE];
3878
3879               memset (buf, 0, sizeof (buf));
3880               store_unsigned_integer (buf, partial_len, byte_order, regval);
3881
3882               /* Push the arguments onto the stack.  */
3883               if (arm_debug)
3884                 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3885                                     argnum, nstack);
3886               si = push_stack_item (si, buf, INT_REGISTER_SIZE);
3887               nstack += INT_REGISTER_SIZE;
3888             }
3889               
3890           len -= partial_len;
3891           val += partial_len;
3892         }
3893     }
3894   /* If we have an odd number of words to push, then decrement the stack
3895      by one word now, so first stack argument will be dword aligned.  */
3896   if (nstack & 4)
3897     sp -= 4;
3898
3899   while (si)
3900     {
3901       sp -= si->len;
3902       write_memory (sp, si->data, si->len);
3903       si = pop_stack_item (si);
3904     }
3905
3906   /* Finally, update teh SP register.  */
3907   regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3908
3909   return sp;
3910 }
3911
3912
3913 /* Always align the frame to an 8-byte boundary.  This is required on
3914    some platforms and harmless on the rest.  */
3915
3916 static CORE_ADDR
3917 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3918 {
3919   /* Align the stack to eight bytes.  */
3920   return sp & ~ (CORE_ADDR) 7;
3921 }
3922
3923 static void
3924 print_fpu_flags (struct ui_file *file, int flags)
3925 {
3926   if (flags & (1 << 0))
3927     fputs_filtered ("IVO ", file);
3928   if (flags & (1 << 1))
3929     fputs_filtered ("DVZ ", file);
3930   if (flags & (1 << 2))
3931     fputs_filtered ("OFL ", file);
3932   if (flags & (1 << 3))
3933     fputs_filtered ("UFL ", file);
3934   if (flags & (1 << 4))
3935     fputs_filtered ("INX ", file);
3936   fputc_filtered ('\n', file);
3937 }
3938
3939 /* Print interesting information about the floating point processor
3940    (if present) or emulator.  */
3941 static void
3942 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3943                       struct frame_info *frame, const char *args)
3944 {
3945   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3946   int type;
3947
3948   type = (status >> 24) & 127;
3949   if (status & (1 << 31))
3950     fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3951   else
3952     fprintf_filtered (file, _("Software FPU type %d\n"), type);
3953   /* i18n: [floating point unit] mask */
3954   fputs_filtered (_("mask: "), file);
3955   print_fpu_flags (file, status >> 16);
3956   /* i18n: [floating point unit] flags */
3957   fputs_filtered (_("flags: "), file);
3958   print_fpu_flags (file, status);
3959 }
3960
3961 /* Construct the ARM extended floating point type.  */
3962 static struct type *
3963 arm_ext_type (struct gdbarch *gdbarch)
3964 {
3965   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3966
3967   if (!tdep->arm_ext_type)
3968     tdep->arm_ext_type
3969       = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
3970                          floatformats_arm_ext);
3971
3972   return tdep->arm_ext_type;
3973 }
3974
3975 static struct type *
3976 arm_neon_double_type (struct gdbarch *gdbarch)
3977 {
3978   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3979
3980   if (tdep->neon_double_type == NULL)
3981     {
3982       struct type *t, *elem;
3983
3984       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
3985                                TYPE_CODE_UNION);
3986       elem = builtin_type (gdbarch)->builtin_uint8;
3987       append_composite_type_field (t, "u8", init_vector_type (elem, 8));
3988       elem = builtin_type (gdbarch)->builtin_uint16;
3989       append_composite_type_field (t, "u16", init_vector_type (elem, 4));
3990       elem = builtin_type (gdbarch)->builtin_uint32;
3991       append_composite_type_field (t, "u32", init_vector_type (elem, 2));
3992       elem = builtin_type (gdbarch)->builtin_uint64;
3993       append_composite_type_field (t, "u64", elem);
3994       elem = builtin_type (gdbarch)->builtin_float;
3995       append_composite_type_field (t, "f32", init_vector_type (elem, 2));
3996       elem = builtin_type (gdbarch)->builtin_double;
3997       append_composite_type_field (t, "f64", elem);
3998
3999       TYPE_VECTOR (t) = 1;
4000       TYPE_NAME (t) = "neon_d";
4001       tdep->neon_double_type = t;
4002     }
4003
4004   return tdep->neon_double_type;
4005 }
4006
4007 /* FIXME: The vector types are not correctly ordered on big-endian
4008    targets.  Just as s0 is the low bits of d0, d0[0] is also the low
4009    bits of d0 - regardless of what unit size is being held in d0.  So
4010    the offset of the first uint8 in d0 is 7, but the offset of the
4011    first float is 4.  This code works as-is for little-endian
4012    targets.  */
4013
4014 static struct type *
4015 arm_neon_quad_type (struct gdbarch *gdbarch)
4016 {
4017   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4018
4019   if (tdep->neon_quad_type == NULL)
4020     {
4021       struct type *t, *elem;
4022
4023       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
4024                                TYPE_CODE_UNION);
4025       elem = builtin_type (gdbarch)->builtin_uint8;
4026       append_composite_type_field (t, "u8", init_vector_type (elem, 16));
4027       elem = builtin_type (gdbarch)->builtin_uint16;
4028       append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4029       elem = builtin_type (gdbarch)->builtin_uint32;
4030       append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4031       elem = builtin_type (gdbarch)->builtin_uint64;
4032       append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4033       elem = builtin_type (gdbarch)->builtin_float;
4034       append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4035       elem = builtin_type (gdbarch)->builtin_double;
4036       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4037
4038       TYPE_VECTOR (t) = 1;
4039       TYPE_NAME (t) = "neon_q";
4040       tdep->neon_quad_type = t;
4041     }
4042
4043   return tdep->neon_quad_type;
4044 }
4045
4046 /* Return the GDB type object for the "standard" data type of data in
4047    register N.  */
4048
4049 static struct type *
4050 arm_register_type (struct gdbarch *gdbarch, int regnum)
4051 {
4052   int num_regs = gdbarch_num_regs (gdbarch);
4053
4054   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4055       && regnum >= num_regs && regnum < num_regs + 32)
4056     return builtin_type (gdbarch)->builtin_float;
4057
4058   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4059       && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4060     return arm_neon_quad_type (gdbarch);
4061
4062   /* If the target description has register information, we are only
4063      in this function so that we can override the types of
4064      double-precision registers for NEON.  */
4065   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4066     {
4067       struct type *t = tdesc_register_type (gdbarch, regnum);
4068
4069       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4070           && TYPE_CODE (t) == TYPE_CODE_FLT
4071           && gdbarch_tdep (gdbarch)->have_neon)
4072         return arm_neon_double_type (gdbarch);
4073       else
4074         return t;
4075     }
4076
4077   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4078     {
4079       if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4080         return builtin_type (gdbarch)->builtin_void;
4081
4082       return arm_ext_type (gdbarch);
4083     }
4084   else if (regnum == ARM_SP_REGNUM)
4085     return builtin_type (gdbarch)->builtin_data_ptr;
4086   else if (regnum == ARM_PC_REGNUM)
4087     return builtin_type (gdbarch)->builtin_func_ptr;
4088   else if (regnum >= ARRAY_SIZE (arm_register_names))
4089     /* These registers are only supported on targets which supply
4090        an XML description.  */
4091     return builtin_type (gdbarch)->builtin_int0;
4092   else
4093     return builtin_type (gdbarch)->builtin_uint32;
4094 }
4095
4096 /* Map a DWARF register REGNUM onto the appropriate GDB register
4097    number.  */
4098
4099 static int
4100 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4101 {
4102   /* Core integer regs.  */
4103   if (reg >= 0 && reg <= 15)
4104     return reg;
4105
4106   /* Legacy FPA encoding.  These were once used in a way which
4107      overlapped with VFP register numbering, so their use is
4108      discouraged, but GDB doesn't support the ARM toolchain
4109      which used them for VFP.  */
4110   if (reg >= 16 && reg <= 23)
4111     return ARM_F0_REGNUM + reg - 16;
4112
4113   /* New assignments for the FPA registers.  */
4114   if (reg >= 96 && reg <= 103)
4115     return ARM_F0_REGNUM + reg - 96;
4116
4117   /* WMMX register assignments.  */
4118   if (reg >= 104 && reg <= 111)
4119     return ARM_WCGR0_REGNUM + reg - 104;
4120
4121   if (reg >= 112 && reg <= 127)
4122     return ARM_WR0_REGNUM + reg - 112;
4123
4124   if (reg >= 192 && reg <= 199)
4125     return ARM_WC0_REGNUM + reg - 192;
4126
4127   /* VFP v2 registers.  A double precision value is actually
4128      in d1 rather than s2, but the ABI only defines numbering
4129      for the single precision registers.  This will "just work"
4130      in GDB for little endian targets (we'll read eight bytes,
4131      starting in s0 and then progressing to s1), but will be
4132      reversed on big endian targets with VFP.  This won't
4133      be a problem for the new Neon quad registers; you're supposed
4134      to use DW_OP_piece for those.  */
4135   if (reg >= 64 && reg <= 95)
4136     {
4137       char name_buf[4];
4138
4139       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4140       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4141                                           strlen (name_buf));
4142     }
4143
4144   /* VFP v3 / Neon registers.  This range is also used for VFP v2
4145      registers, except that it now describes d0 instead of s0.  */
4146   if (reg >= 256 && reg <= 287)
4147     {
4148       char name_buf[4];
4149
4150       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4151       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4152                                           strlen (name_buf));
4153     }
4154
4155   return -1;
4156 }
4157
4158 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
4159 static int
4160 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4161 {
4162   int reg = regnum;
4163   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4164
4165   if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4166     return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4167
4168   if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4169     return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4170
4171   if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4172     return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4173
4174   if (reg < NUM_GREGS)
4175     return SIM_ARM_R0_REGNUM + reg;
4176   reg -= NUM_GREGS;
4177
4178   if (reg < NUM_FREGS)
4179     return SIM_ARM_FP0_REGNUM + reg;
4180   reg -= NUM_FREGS;
4181
4182   if (reg < NUM_SREGS)
4183     return SIM_ARM_FPS_REGNUM + reg;
4184   reg -= NUM_SREGS;
4185
4186   internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4187 }
4188
4189 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4190    the buffer to be NEW_LEN bytes ending at ENDADDR.  Return
4191    NULL if an error occurs.  BUF is freed.  */
4192
4193 static gdb_byte *
4194 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4195                        int old_len, int new_len)
4196 {
4197   gdb_byte *new_buf;
4198   int bytes_to_read = new_len - old_len;
4199
4200   new_buf = (gdb_byte *) xmalloc (new_len);
4201   memcpy (new_buf + bytes_to_read, buf, old_len);
4202   xfree (buf);
4203   if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4204     {
4205       xfree (new_buf);
4206       return NULL;
4207     }
4208   return new_buf;
4209 }
4210
4211 /* An IT block is at most the 2-byte IT instruction followed by
4212    four 4-byte instructions.  The furthest back we must search to
4213    find an IT block that affects the current instruction is thus
4214    2 + 3 * 4 == 14 bytes.  */
4215 #define MAX_IT_BLOCK_PREFIX 14
4216
4217 /* Use a quick scan if there are more than this many bytes of
4218    code.  */
4219 #define IT_SCAN_THRESHOLD 32
4220
4221 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4222    A breakpoint in an IT block may not be hit, depending on the
4223    condition flags.  */
4224 static CORE_ADDR
4225 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4226 {
4227   gdb_byte *buf;
4228   char map_type;
4229   CORE_ADDR boundary, func_start;
4230   int buf_len;
4231   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4232   int i, any, last_it, last_it_count;
4233
4234   /* If we are using BKPT breakpoints, none of this is necessary.  */
4235   if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4236     return bpaddr;
4237
4238   /* ARM mode does not have this problem.  */
4239   if (!arm_pc_is_thumb (gdbarch, bpaddr))
4240     return bpaddr;
4241
4242   /* We are setting a breakpoint in Thumb code that could potentially
4243      contain an IT block.  The first step is to find how much Thumb
4244      code there is; we do not need to read outside of known Thumb
4245      sequences.  */
4246   map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4247   if (map_type == 0)
4248     /* Thumb-2 code must have mapping symbols to have a chance.  */
4249     return bpaddr;
4250
4251   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4252
4253   if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4254       && func_start > boundary)
4255     boundary = func_start;
4256
4257   /* Search for a candidate IT instruction.  We have to do some fancy
4258      footwork to distinguish a real IT instruction from the second
4259      half of a 32-bit instruction, but there is no need for that if
4260      there's no candidate.  */
4261   buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4262   if (buf_len == 0)
4263     /* No room for an IT instruction.  */
4264     return bpaddr;
4265
4266   buf = (gdb_byte *) xmalloc (buf_len);
4267   if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4268     return bpaddr;
4269   any = 0;
4270   for (i = 0; i < buf_len; i += 2)
4271     {
4272       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4273       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4274         {
4275           any = 1;
4276           break;
4277         }
4278     }
4279
4280   if (any == 0)
4281     {
4282       xfree (buf);
4283       return bpaddr;
4284     }
4285
4286   /* OK, the code bytes before this instruction contain at least one
4287      halfword which resembles an IT instruction.  We know that it's
4288      Thumb code, but there are still two possibilities.  Either the
4289      halfword really is an IT instruction, or it is the second half of
4290      a 32-bit Thumb instruction.  The only way we can tell is to
4291      scan forwards from a known instruction boundary.  */
4292   if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4293     {
4294       int definite;
4295
4296       /* There's a lot of code before this instruction.  Start with an
4297          optimistic search; it's easy to recognize halfwords that can
4298          not be the start of a 32-bit instruction, and use that to
4299          lock on to the instruction boundaries.  */
4300       buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4301       if (buf == NULL)
4302         return bpaddr;
4303       buf_len = IT_SCAN_THRESHOLD;
4304
4305       definite = 0;
4306       for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4307         {
4308           unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4309           if (thumb_insn_size (inst1) == 2)
4310             {
4311               definite = 1;
4312               break;
4313             }
4314         }
4315
4316       /* At this point, if DEFINITE, BUF[I] is the first place we
4317          are sure that we know the instruction boundaries, and it is far
4318          enough from BPADDR that we could not miss an IT instruction
4319          affecting BPADDR.  If ! DEFINITE, give up - start from a
4320          known boundary.  */
4321       if (! definite)
4322         {
4323           buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4324                                        bpaddr - boundary);
4325           if (buf == NULL)
4326             return bpaddr;
4327           buf_len = bpaddr - boundary;
4328           i = 0;
4329         }
4330     }
4331   else
4332     {
4333       buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4334       if (buf == NULL)
4335         return bpaddr;
4336       buf_len = bpaddr - boundary;
4337       i = 0;
4338     }
4339
4340   /* Scan forwards.  Find the last IT instruction before BPADDR.  */
4341   last_it = -1;
4342   last_it_count = 0;
4343   while (i < buf_len)
4344     {
4345       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4346       last_it_count--;
4347       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4348         {
4349           last_it = i;
4350           if (inst1 & 0x0001)
4351             last_it_count = 4;
4352           else if (inst1 & 0x0002)
4353             last_it_count = 3;
4354           else if (inst1 & 0x0004)
4355             last_it_count = 2;
4356           else
4357             last_it_count = 1;
4358         }
4359       i += thumb_insn_size (inst1);
4360     }
4361
4362   xfree (buf);
4363
4364   if (last_it == -1)
4365     /* There wasn't really an IT instruction after all.  */
4366     return bpaddr;
4367
4368   if (last_it_count < 1)
4369     /* It was too far away.  */
4370     return bpaddr;
4371
4372   /* This really is a trouble spot.  Move the breakpoint to the IT
4373      instruction.  */
4374   return bpaddr - buf_len + last_it;
4375 }
4376
4377 /* ARM displaced stepping support.
4378
4379    Generally ARM displaced stepping works as follows:
4380
4381    1. When an instruction is to be single-stepped, it is first decoded by
4382       arm_process_displaced_insn.  Depending on the type of instruction, it is
4383       then copied to a scratch location, possibly in a modified form.  The
4384       copy_* set of functions performs such modification, as necessary.  A
4385       breakpoint is placed after the modified instruction in the scratch space
4386       to return control to GDB.  Note in particular that instructions which
4387       modify the PC will no longer do so after modification.
4388
4389    2. The instruction is single-stepped, by setting the PC to the scratch
4390       location address, and resuming.  Control returns to GDB when the
4391       breakpoint is hit.
4392
4393    3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4394       function used for the current instruction.  This function's job is to
4395       put the CPU/memory state back to what it would have been if the
4396       instruction had been executed unmodified in its original location.  */
4397
4398 /* NOP instruction (mov r0, r0).  */
4399 #define ARM_NOP                         0xe1a00000
4400 #define THUMB_NOP 0x4600
4401
4402 /* Helper for register reads for displaced stepping.  In particular, this
4403    returns the PC as it would be seen by the instruction at its original
4404    location.  */
4405
4406 ULONGEST
4407 displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4408                     int regno)
4409 {
4410   ULONGEST ret;
4411   CORE_ADDR from = dsc->insn_addr;
4412
4413   if (regno == ARM_PC_REGNUM)
4414     {
4415       /* Compute pipeline offset:
4416          - When executing an ARM instruction, PC reads as the address of the
4417          current instruction plus 8.
4418          - When executing a Thumb instruction, PC reads as the address of the
4419          current instruction plus 4.  */
4420
4421       if (!dsc->is_thumb)
4422         from += 8;
4423       else
4424         from += 4;
4425
4426       if (debug_displaced)
4427         fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
4428                             (unsigned long) from);
4429       return (ULONGEST) from;
4430     }
4431   else
4432     {
4433       regcache_cooked_read_unsigned (regs, regno, &ret);
4434       if (debug_displaced)
4435         fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
4436                             regno, (unsigned long) ret);
4437       return ret;
4438     }
4439 }
4440
4441 static int
4442 displaced_in_arm_mode (struct regcache *regs)
4443 {
4444   ULONGEST ps;
4445   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4446
4447   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4448
4449   return (ps & t_bit) == 0;
4450 }
4451
4452 /* Write to the PC as from a branch instruction.  */
4453
4454 static void
4455 branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4456                  ULONGEST val)
4457 {
4458   if (!dsc->is_thumb)
4459     /* Note: If bits 0/1 are set, this branch would be unpredictable for
4460        architecture versions < 6.  */
4461     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4462                                     val & ~(ULONGEST) 0x3);
4463   else
4464     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4465                                     val & ~(ULONGEST) 0x1);
4466 }
4467
4468 /* Write to the PC as from a branch-exchange instruction.  */
4469
4470 static void
4471 bx_write_pc (struct regcache *regs, ULONGEST val)
4472 {
4473   ULONGEST ps;
4474   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4475
4476   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4477
4478   if ((val & 1) == 1)
4479     {
4480       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4481       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4482     }
4483   else if ((val & 2) == 0)
4484     {
4485       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4486       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4487     }
4488   else
4489     {
4490       /* Unpredictable behaviour.  Try to do something sensible (switch to ARM
4491           mode, align dest to 4 bytes).  */
4492       warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4493       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4494       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4495     }
4496 }
4497
4498 /* Write to the PC as if from a load instruction.  */
4499
4500 static void
4501 load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4502                ULONGEST val)
4503 {
4504   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4505     bx_write_pc (regs, val);
4506   else
4507     branch_write_pc (regs, dsc, val);
4508 }
4509
4510 /* Write to the PC as if from an ALU instruction.  */
4511
4512 static void
4513 alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4514               ULONGEST val)
4515 {
4516   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4517     bx_write_pc (regs, val);
4518   else
4519     branch_write_pc (regs, dsc, val);
4520 }
4521
4522 /* Helper for writing to registers for displaced stepping.  Writing to the PC
4523    has a varying effects depending on the instruction which does the write:
4524    this is controlled by the WRITE_PC argument.  */
4525
4526 void
4527 displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4528                      int regno, ULONGEST val, enum pc_write_style write_pc)
4529 {
4530   if (regno == ARM_PC_REGNUM)
4531     {
4532       if (debug_displaced)
4533         fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
4534                             (unsigned long) val);
4535       switch (write_pc)
4536         {
4537         case BRANCH_WRITE_PC:
4538           branch_write_pc (regs, dsc, val);
4539           break;
4540
4541         case BX_WRITE_PC:
4542           bx_write_pc (regs, val);
4543           break;
4544
4545         case LOAD_WRITE_PC:
4546           load_write_pc (regs, dsc, val);
4547           break;
4548
4549         case ALU_WRITE_PC:
4550           alu_write_pc (regs, dsc, val);
4551           break;
4552
4553         case CANNOT_WRITE_PC:
4554           warning (_("Instruction wrote to PC in an unexpected way when "
4555                      "single-stepping"));
4556           break;
4557
4558         default:
4559           internal_error (__FILE__, __LINE__,
4560                           _("Invalid argument to displaced_write_reg"));
4561         }
4562
4563       dsc->wrote_to_pc = 1;
4564     }
4565   else
4566     {
4567       if (debug_displaced)
4568         fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
4569                             regno, (unsigned long) val);
4570       regcache_cooked_write_unsigned (regs, regno, val);
4571     }
4572 }
4573
4574 /* This function is used to concisely determine if an instruction INSN
4575    references PC.  Register fields of interest in INSN should have the
4576    corresponding fields of BITMASK set to 0b1111.  The function
4577    returns return 1 if any of these fields in INSN reference the PC
4578    (also 0b1111, r15), else it returns 0.  */
4579
4580 static int
4581 insn_references_pc (uint32_t insn, uint32_t bitmask)
4582 {
4583   uint32_t lowbit = 1;
4584
4585   while (bitmask != 0)
4586     {
4587       uint32_t mask;
4588
4589       for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4590         ;
4591
4592       if (!lowbit)
4593         break;
4594
4595       mask = lowbit * 0xf;
4596
4597       if ((insn & mask) == mask)
4598         return 1;
4599
4600       bitmask &= ~mask;
4601     }
4602
4603   return 0;
4604 }
4605
4606 /* The simplest copy function.  Many instructions have the same effect no
4607    matter what address they are executed at: in those cases, use this.  */
4608
4609 static int
4610 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
4611                      const char *iname, arm_displaced_step_closure *dsc)
4612 {
4613   if (debug_displaced)
4614     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
4615                         "opcode/class '%s' unmodified\n", (unsigned long) insn,
4616                         iname);
4617
4618   dsc->modinsn[0] = insn;
4619
4620   return 0;
4621 }
4622
4623 static int
4624 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4625                              uint16_t insn2, const char *iname,
4626                              arm_displaced_step_closure *dsc)
4627 {
4628   if (debug_displaced)
4629     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
4630                         "opcode/class '%s' unmodified\n", insn1, insn2,
4631                         iname);
4632
4633   dsc->modinsn[0] = insn1;
4634   dsc->modinsn[1] = insn2;
4635   dsc->numinsns = 2;
4636
4637   return 0;
4638 }
4639
4640 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4641    modification.  */
4642 static int
4643 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4644                              const char *iname,
4645                              arm_displaced_step_closure *dsc)
4646 {
4647   if (debug_displaced)
4648     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
4649                         "opcode/class '%s' unmodified\n", insn,
4650                         iname);
4651
4652   dsc->modinsn[0] = insn;
4653
4654   return 0;
4655 }
4656
4657 /* Preload instructions with immediate offset.  */
4658
4659 static void
4660 cleanup_preload (struct gdbarch *gdbarch,
4661                  struct regcache *regs, arm_displaced_step_closure *dsc)
4662 {
4663   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4664   if (!dsc->u.preload.immed)
4665     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4666 }
4667
4668 static void
4669 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4670                  arm_displaced_step_closure *dsc, unsigned int rn)
4671 {
4672   ULONGEST rn_val;
4673   /* Preload instructions:
4674
4675      {pli/pld} [rn, #+/-imm]
4676      ->
4677      {pli/pld} [r0, #+/-imm].  */
4678
4679   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4680   rn_val = displaced_read_reg (regs, dsc, rn);
4681   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4682   dsc->u.preload.immed = 1;
4683
4684   dsc->cleanup = &cleanup_preload;
4685 }
4686
4687 static int
4688 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4689                   arm_displaced_step_closure *dsc)
4690 {
4691   unsigned int rn = bits (insn, 16, 19);
4692
4693   if (!insn_references_pc (insn, 0x000f0000ul))
4694     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4695
4696   if (debug_displaced)
4697     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4698                         (unsigned long) insn);
4699
4700   dsc->modinsn[0] = insn & 0xfff0ffff;
4701
4702   install_preload (gdbarch, regs, dsc, rn);
4703
4704   return 0;
4705 }
4706
4707 static int
4708 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4709                      struct regcache *regs, arm_displaced_step_closure *dsc)
4710 {
4711   unsigned int rn = bits (insn1, 0, 3);
4712   unsigned int u_bit = bit (insn1, 7);
4713   int imm12 = bits (insn2, 0, 11);
4714   ULONGEST pc_val;
4715
4716   if (rn != ARM_PC_REGNUM)
4717     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4718
4719   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4720      PLD (literal) Encoding T1.  */
4721   if (debug_displaced)
4722     fprintf_unfiltered (gdb_stdlog,
4723                         "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
4724                         (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4725                         imm12);
4726
4727   if (!u_bit)
4728     imm12 = -1 * imm12;
4729
4730   /* Rewrite instruction {pli/pld} PC imm12 into:
4731      Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4732
4733      {pli/pld} [r0, r1]
4734
4735      Cleanup: r0 <- tmp[0], r1 <- tmp[1].  */
4736
4737   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4738   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4739
4740   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4741
4742   displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4743   displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4744   dsc->u.preload.immed = 0;
4745
4746   /* {pli/pld} [r0, r1] */
4747   dsc->modinsn[0] = insn1 & 0xfff0;
4748   dsc->modinsn[1] = 0xf001;
4749   dsc->numinsns = 2;
4750
4751   dsc->cleanup = &cleanup_preload;
4752   return 0;
4753 }
4754
4755 /* Preload instructions with register offset.  */
4756
4757 static void
4758 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4759                     arm_displaced_step_closure *dsc, unsigned int rn,
4760                     unsigned int rm)
4761 {
4762   ULONGEST rn_val, rm_val;
4763
4764   /* Preload register-offset instructions:
4765
4766      {pli/pld} [rn, rm {, shift}]
4767      ->
4768      {pli/pld} [r0, r1 {, shift}].  */
4769
4770   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4771   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4772   rn_val = displaced_read_reg (regs, dsc, rn);
4773   rm_val = displaced_read_reg (regs, dsc, rm);
4774   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4775   displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4776   dsc->u.preload.immed = 0;
4777
4778   dsc->cleanup = &cleanup_preload;
4779 }
4780
4781 static int
4782 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4783                       struct regcache *regs,
4784                       arm_displaced_step_closure *dsc)
4785 {
4786   unsigned int rn = bits (insn, 16, 19);
4787   unsigned int rm = bits (insn, 0, 3);
4788
4789
4790   if (!insn_references_pc (insn, 0x000f000ful))
4791     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4792
4793   if (debug_displaced)
4794     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4795                         (unsigned long) insn);
4796
4797   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4798
4799   install_preload_reg (gdbarch, regs, dsc, rn, rm);
4800   return 0;
4801 }
4802
4803 /* Copy/cleanup coprocessor load and store instructions.  */
4804
4805 static void
4806 cleanup_copro_load_store (struct gdbarch *gdbarch,
4807                           struct regcache *regs,
4808                           arm_displaced_step_closure *dsc)
4809 {
4810   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4811
4812   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4813
4814   if (dsc->u.ldst.writeback)
4815     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4816 }
4817
4818 static void
4819 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4820                           arm_displaced_step_closure *dsc,
4821                           int writeback, unsigned int rn)
4822 {
4823   ULONGEST rn_val;
4824
4825   /* Coprocessor load/store instructions:
4826
4827      {stc/stc2} [<Rn>, #+/-imm]  (and other immediate addressing modes)
4828      ->
4829      {stc/stc2} [r0, #+/-imm].
4830
4831      ldc/ldc2 are handled identically.  */
4832
4833   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4834   rn_val = displaced_read_reg (regs, dsc, rn);
4835   /* PC should be 4-byte aligned.  */
4836   rn_val = rn_val & 0xfffffffc;
4837   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4838
4839   dsc->u.ldst.writeback = writeback;
4840   dsc->u.ldst.rn = rn;
4841
4842   dsc->cleanup = &cleanup_copro_load_store;
4843 }
4844
4845 static int
4846 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4847                            struct regcache *regs,
4848                            arm_displaced_step_closure *dsc)
4849 {
4850   unsigned int rn = bits (insn, 16, 19);
4851
4852   if (!insn_references_pc (insn, 0x000f0000ul))
4853     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4854
4855   if (debug_displaced)
4856     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4857                         "load/store insn %.8lx\n", (unsigned long) insn);
4858
4859   dsc->modinsn[0] = insn & 0xfff0ffff;
4860
4861   install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4862
4863   return 0;
4864 }
4865
4866 static int
4867 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4868                               uint16_t insn2, struct regcache *regs,
4869                               arm_displaced_step_closure *dsc)
4870 {
4871   unsigned int rn = bits (insn1, 0, 3);
4872
4873   if (rn != ARM_PC_REGNUM)
4874     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4875                                         "copro load/store", dsc);
4876
4877   if (debug_displaced)
4878     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4879                         "load/store insn %.4x%.4x\n", insn1, insn2);
4880
4881   dsc->modinsn[0] = insn1 & 0xfff0;
4882   dsc->modinsn[1] = insn2;
4883   dsc->numinsns = 2;
4884
4885   /* This function is called for copying instruction LDC/LDC2/VLDR, which
4886      doesn't support writeback, so pass 0.  */
4887   install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4888
4889   return 0;
4890 }
4891
4892 /* Clean up branch instructions (actually perform the branch, by setting
4893    PC).  */
4894
4895 static void
4896 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4897                 arm_displaced_step_closure *dsc)
4898 {
4899   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4900   int branch_taken = condition_true (dsc->u.branch.cond, status);
4901   enum pc_write_style write_pc = dsc->u.branch.exchange
4902                                  ? BX_WRITE_PC : BRANCH_WRITE_PC;
4903
4904   if (!branch_taken)
4905     return;
4906
4907   if (dsc->u.branch.link)
4908     {
4909       /* The value of LR should be the next insn of current one.  In order
4910        not to confuse logic hanlding later insn `bx lr', if current insn mode
4911        is Thumb, the bit 0 of LR value should be set to 1.  */
4912       ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4913
4914       if (dsc->is_thumb)
4915         next_insn_addr |= 0x1;
4916
4917       displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4918                            CANNOT_WRITE_PC);
4919     }
4920
4921   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4922 }
4923
4924 /* Copy B/BL/BLX instructions with immediate destinations.  */
4925
4926 static void
4927 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4928                   arm_displaced_step_closure *dsc,
4929                   unsigned int cond, int exchange, int link, long offset)
4930 {
4931   /* Implement "BL<cond> <label>" as:
4932
4933      Preparation: cond <- instruction condition
4934      Insn: mov r0, r0  (nop)
4935      Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4936
4937      B<cond> similar, but don't set r14 in cleanup.  */
4938
4939   dsc->u.branch.cond = cond;
4940   dsc->u.branch.link = link;
4941   dsc->u.branch.exchange = exchange;
4942
4943   dsc->u.branch.dest = dsc->insn_addr;
4944   if (link && exchange)
4945     /* For BLX, offset is computed from the Align (PC, 4).  */
4946     dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
4947
4948   if (dsc->is_thumb)
4949     dsc->u.branch.dest += 4 + offset;
4950   else
4951     dsc->u.branch.dest += 8 + offset;
4952
4953   dsc->cleanup = &cleanup_branch;
4954 }
4955 static int
4956 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
4957                    struct regcache *regs, arm_displaced_step_closure *dsc)
4958 {
4959   unsigned int cond = bits (insn, 28, 31);
4960   int exchange = (cond == 0xf);
4961   int link = exchange || bit (insn, 24);
4962   long offset;
4963
4964   if (debug_displaced)
4965     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
4966                         "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
4967                         (unsigned long) insn);
4968   if (exchange)
4969     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
4970        then arrange the switch into Thumb mode.  */
4971     offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
4972   else
4973     offset = bits (insn, 0, 23) << 2;
4974
4975   if (bit (offset, 25))
4976     offset = offset | ~0x3ffffff;
4977
4978   dsc->modinsn[0] = ARM_NOP;
4979
4980   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4981   return 0;
4982 }
4983
4984 static int
4985 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
4986                       uint16_t insn2, struct regcache *regs,
4987                       arm_displaced_step_closure *dsc)
4988 {
4989   int link = bit (insn2, 14);
4990   int exchange = link && !bit (insn2, 12);
4991   int cond = INST_AL;
4992   long offset = 0;
4993   int j1 = bit (insn2, 13);
4994   int j2 = bit (insn2, 11);
4995   int s = sbits (insn1, 10, 10);
4996   int i1 = !(j1 ^ bit (insn1, 10));
4997   int i2 = !(j2 ^ bit (insn1, 10));
4998
4999   if (!link && !exchange) /* B */
5000     {
5001       offset = (bits (insn2, 0, 10) << 1);
5002       if (bit (insn2, 12)) /* Encoding T4 */
5003         {
5004           offset |= (bits (insn1, 0, 9) << 12)
5005             | (i2 << 22)
5006             | (i1 << 23)
5007             | (s << 24);
5008           cond = INST_AL;
5009         }
5010       else /* Encoding T3 */
5011         {
5012           offset |= (bits (insn1, 0, 5) << 12)
5013             | (j1 << 18)
5014             | (j2 << 19)
5015             | (s << 20);
5016           cond = bits (insn1, 6, 9);
5017         }
5018     }
5019   else
5020     {
5021       offset = (bits (insn1, 0, 9) << 12);
5022       offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
5023       offset |= exchange ?
5024         (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
5025     }
5026
5027   if (debug_displaced)
5028     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
5029                         "%.4x %.4x with offset %.8lx\n",
5030                         link ? (exchange) ? "blx" : "bl" : "b",
5031                         insn1, insn2, offset);
5032
5033   dsc->modinsn[0] = THUMB_NOP;
5034
5035   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5036   return 0;
5037 }
5038
5039 /* Copy B Thumb instructions.  */
5040 static int
5041 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
5042               arm_displaced_step_closure *dsc)
5043 {
5044   unsigned int cond = 0;
5045   int offset = 0;
5046   unsigned short bit_12_15 = bits (insn, 12, 15);
5047   CORE_ADDR from = dsc->insn_addr;
5048
5049   if (bit_12_15 == 0xd)
5050     {
5051       /* offset = SignExtend (imm8:0, 32) */
5052       offset = sbits ((insn << 1), 0, 8);
5053       cond = bits (insn, 8, 11);
5054     }
5055   else if (bit_12_15 == 0xe) /* Encoding T2 */
5056     {
5057       offset = sbits ((insn << 1), 0, 11);
5058       cond = INST_AL;
5059     }
5060
5061   if (debug_displaced)
5062     fprintf_unfiltered (gdb_stdlog,
5063                         "displaced: copying b immediate insn %.4x "
5064                         "with offset %d\n", insn, offset);
5065
5066   dsc->u.branch.cond = cond;
5067   dsc->u.branch.link = 0;
5068   dsc->u.branch.exchange = 0;
5069   dsc->u.branch.dest = from + 4 + offset;
5070
5071   dsc->modinsn[0] = THUMB_NOP;
5072
5073   dsc->cleanup = &cleanup_branch;
5074
5075   return 0;
5076 }
5077
5078 /* Copy BX/BLX with register-specified destinations.  */
5079
5080 static void
5081 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5082                     arm_displaced_step_closure *dsc, int link,
5083                     unsigned int cond, unsigned int rm)
5084 {
5085   /* Implement {BX,BLX}<cond> <reg>" as:
5086
5087      Preparation: cond <- instruction condition
5088      Insn: mov r0, r0 (nop)
5089      Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5090
5091      Don't set r14 in cleanup for BX.  */
5092
5093   dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5094
5095   dsc->u.branch.cond = cond;
5096   dsc->u.branch.link = link;
5097
5098   dsc->u.branch.exchange = 1;
5099
5100   dsc->cleanup = &cleanup_branch;
5101 }
5102
5103 static int
5104 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5105                      struct regcache *regs, arm_displaced_step_closure *dsc)
5106 {
5107   unsigned int cond = bits (insn, 28, 31);
5108   /* BX:  x12xxx1x
5109      BLX: x12xxx3x.  */
5110   int link = bit (insn, 5);
5111   unsigned int rm = bits (insn, 0, 3);
5112
5113   if (debug_displaced)
5114     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
5115                         (unsigned long) insn);
5116
5117   dsc->modinsn[0] = ARM_NOP;
5118
5119   install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5120   return 0;
5121 }
5122
5123 static int
5124 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5125                        struct regcache *regs,
5126                        arm_displaced_step_closure *dsc)
5127 {
5128   int link = bit (insn, 7);
5129   unsigned int rm = bits (insn, 3, 6);
5130
5131   if (debug_displaced)
5132     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
5133                         (unsigned short) insn);
5134
5135   dsc->modinsn[0] = THUMB_NOP;
5136
5137   install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5138
5139   return 0;
5140 }
5141
5142
5143 /* Copy/cleanup arithmetic/logic instruction with immediate RHS.  */
5144
5145 static void
5146 cleanup_alu_imm (struct gdbarch *gdbarch,
5147                  struct regcache *regs, arm_displaced_step_closure *dsc)
5148 {
5149   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5150   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5151   displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5152   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5153 }
5154
5155 static int
5156 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5157                   arm_displaced_step_closure *dsc)
5158 {
5159   unsigned int rn = bits (insn, 16, 19);
5160   unsigned int rd = bits (insn, 12, 15);
5161   unsigned int op = bits (insn, 21, 24);
5162   int is_mov = (op == 0xd);
5163   ULONGEST rd_val, rn_val;
5164
5165   if (!insn_references_pc (insn, 0x000ff000ul))
5166     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5167
5168   if (debug_displaced)
5169     fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
5170                         "%.8lx\n", is_mov ? "move" : "ALU",
5171                         (unsigned long) insn);
5172
5173   /* Instruction is of form:
5174
5175      <op><cond> rd, [rn,] #imm
5176
5177      Rewrite as:
5178
5179      Preparation: tmp1, tmp2 <- r0, r1;
5180                   r0, r1 <- rd, rn
5181      Insn: <op><cond> r0, r1, #imm
5182      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5183   */
5184
5185   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5186   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5187   rn_val = displaced_read_reg (regs, dsc, rn);
5188   rd_val = displaced_read_reg (regs, dsc, rd);
5189   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5190   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5191   dsc->rd = rd;
5192
5193   if (is_mov)
5194     dsc->modinsn[0] = insn & 0xfff00fff;
5195   else
5196     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5197
5198   dsc->cleanup = &cleanup_alu_imm;
5199
5200   return 0;
5201 }
5202
5203 static int
5204 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5205                      uint16_t insn2, struct regcache *regs,
5206                      arm_displaced_step_closure *dsc)
5207 {
5208   unsigned int op = bits (insn1, 5, 8);
5209   unsigned int rn, rm, rd;
5210   ULONGEST rd_val, rn_val;
5211
5212   rn = bits (insn1, 0, 3); /* Rn */
5213   rm = bits (insn2, 0, 3); /* Rm */
5214   rd = bits (insn2, 8, 11); /* Rd */
5215
5216   /* This routine is only called for instruction MOV.  */
5217   gdb_assert (op == 0x2 && rn == 0xf);
5218
5219   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5220     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5221
5222   if (debug_displaced)
5223     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
5224                         "ALU", insn1, insn2);
5225
5226   /* Instruction is of form:
5227
5228      <op><cond> rd, [rn,] #imm
5229
5230      Rewrite as:
5231
5232      Preparation: tmp1, tmp2 <- r0, r1;
5233                   r0, r1 <- rd, rn
5234      Insn: <op><cond> r0, r1, #imm
5235      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5236   */
5237
5238   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5239   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5240   rn_val = displaced_read_reg (regs, dsc, rn);
5241   rd_val = displaced_read_reg (regs, dsc, rd);
5242   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5243   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5244   dsc->rd = rd;
5245
5246   dsc->modinsn[0] = insn1;
5247   dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5248   dsc->numinsns = 2;
5249
5250   dsc->cleanup = &cleanup_alu_imm;
5251
5252   return 0;
5253 }
5254
5255 /* Copy/cleanup arithmetic/logic insns with register RHS.  */
5256
5257 static void
5258 cleanup_alu_reg (struct gdbarch *gdbarch,
5259                  struct regcache *regs, arm_displaced_step_closure *dsc)
5260 {
5261   ULONGEST rd_val;
5262   int i;
5263
5264   rd_val = displaced_read_reg (regs, dsc, 0);
5265
5266   for (i = 0; i < 3; i++)
5267     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5268
5269   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5270 }
5271
5272 static void
5273 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5274                  arm_displaced_step_closure *dsc,
5275                  unsigned int rd, unsigned int rn, unsigned int rm)
5276 {
5277   ULONGEST rd_val, rn_val, rm_val;
5278
5279   /* Instruction is of form:
5280
5281      <op><cond> rd, [rn,] rm [, <shift>]
5282
5283      Rewrite as:
5284
5285      Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5286                   r0, r1, r2 <- rd, rn, rm
5287      Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5288      Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5289   */
5290
5291   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5292   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5293   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5294   rd_val = displaced_read_reg (regs, dsc, rd);
5295   rn_val = displaced_read_reg (regs, dsc, rn);
5296   rm_val = displaced_read_reg (regs, dsc, rm);
5297   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5298   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5299   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5300   dsc->rd = rd;
5301
5302   dsc->cleanup = &cleanup_alu_reg;
5303 }
5304
5305 static int
5306 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5307                   arm_displaced_step_closure *dsc)
5308 {
5309   unsigned int op = bits (insn, 21, 24);
5310   int is_mov = (op == 0xd);
5311
5312   if (!insn_references_pc (insn, 0x000ff00ful))
5313     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5314
5315   if (debug_displaced)
5316     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
5317                         is_mov ? "move" : "ALU", (unsigned long) insn);
5318
5319   if (is_mov)
5320     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5321   else
5322     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5323
5324   install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5325                    bits (insn, 0, 3));
5326   return 0;
5327 }
5328
5329 static int
5330 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5331                     struct regcache *regs,
5332                     arm_displaced_step_closure *dsc)
5333 {
5334   unsigned rm, rd;
5335
5336   rm = bits (insn, 3, 6);
5337   rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5338
5339   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5340     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5341
5342   if (debug_displaced)
5343     fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
5344                         (unsigned short) insn);
5345
5346   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5347
5348   install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5349
5350   return 0;
5351 }
5352
5353 /* Cleanup/copy arithmetic/logic insns with shifted register RHS.  */
5354
5355 static void
5356 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5357                          struct regcache *regs,
5358                          arm_displaced_step_closure *dsc)
5359 {
5360   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5361   int i;
5362
5363   for (i = 0; i < 4; i++)
5364     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5365
5366   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5367 }
5368
5369 static void
5370 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5371                          arm_displaced_step_closure *dsc,
5372                          unsigned int rd, unsigned int rn, unsigned int rm,
5373                          unsigned rs)
5374 {
5375   int i;
5376   ULONGEST rd_val, rn_val, rm_val, rs_val;
5377
5378   /* Instruction is of form:
5379
5380      <op><cond> rd, [rn,] rm, <shift> rs
5381
5382      Rewrite as:
5383
5384      Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5385                   r0, r1, r2, r3 <- rd, rn, rm, rs
5386      Insn: <op><cond> r0, r1, r2, <shift> r3
5387      Cleanup: tmp5 <- r0
5388               r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5389               rd <- tmp5
5390   */
5391
5392   for (i = 0; i < 4; i++)
5393     dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5394
5395   rd_val = displaced_read_reg (regs, dsc, rd);
5396   rn_val = displaced_read_reg (regs, dsc, rn);
5397   rm_val = displaced_read_reg (regs, dsc, rm);
5398   rs_val = displaced_read_reg (regs, dsc, rs);
5399   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5400   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5401   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5402   displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5403   dsc->rd = rd;
5404   dsc->cleanup = &cleanup_alu_shifted_reg;
5405 }
5406
5407 static int
5408 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5409                           struct regcache *regs,
5410                           arm_displaced_step_closure *dsc)
5411 {
5412   unsigned int op = bits (insn, 21, 24);
5413   int is_mov = (op == 0xd);
5414   unsigned int rd, rn, rm, rs;
5415
5416   if (!insn_references_pc (insn, 0x000fff0ful))
5417     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5418
5419   if (debug_displaced)
5420     fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
5421                         "%.8lx\n", is_mov ? "move" : "ALU",
5422                         (unsigned long) insn);
5423
5424   rn = bits (insn, 16, 19);
5425   rm = bits (insn, 0, 3);
5426   rs = bits (insn, 8, 11);
5427   rd = bits (insn, 12, 15);
5428
5429   if (is_mov)
5430     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5431   else
5432     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5433
5434   install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5435
5436   return 0;
5437 }
5438
5439 /* Clean up load instructions.  */
5440
5441 static void
5442 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5443               arm_displaced_step_closure *dsc)
5444 {
5445   ULONGEST rt_val, rt_val2 = 0, rn_val;
5446
5447   rt_val = displaced_read_reg (regs, dsc, 0);
5448   if (dsc->u.ldst.xfersize == 8)
5449     rt_val2 = displaced_read_reg (regs, dsc, 1);
5450   rn_val = displaced_read_reg (regs, dsc, 2);
5451
5452   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5453   if (dsc->u.ldst.xfersize > 4)
5454     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5455   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5456   if (!dsc->u.ldst.immed)
5457     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5458
5459   /* Handle register writeback.  */
5460   if (dsc->u.ldst.writeback)
5461     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5462   /* Put result in right place.  */
5463   displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5464   if (dsc->u.ldst.xfersize == 8)
5465     displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5466 }
5467
5468 /* Clean up store instructions.  */
5469
5470 static void
5471 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5472                arm_displaced_step_closure *dsc)
5473 {
5474   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5475
5476   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5477   if (dsc->u.ldst.xfersize > 4)
5478     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5479   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5480   if (!dsc->u.ldst.immed)
5481     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5482   if (!dsc->u.ldst.restore_r4)
5483     displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5484
5485   /* Writeback.  */
5486   if (dsc->u.ldst.writeback)
5487     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5488 }
5489
5490 /* Copy "extra" load/store instructions.  These are halfword/doubleword
5491    transfers, which have a different encoding to byte/word transfers.  */
5492
5493 static int
5494 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5495                       struct regcache *regs, arm_displaced_step_closure *dsc)
5496 {
5497   unsigned int op1 = bits (insn, 20, 24);
5498   unsigned int op2 = bits (insn, 5, 6);
5499   unsigned int rt = bits (insn, 12, 15);
5500   unsigned int rn = bits (insn, 16, 19);
5501   unsigned int rm = bits (insn, 0, 3);
5502   char load[12]     = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5503   char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5504   int immed = (op1 & 0x4) != 0;
5505   int opcode;
5506   ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5507
5508   if (!insn_references_pc (insn, 0x000ff00ful))
5509     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5510
5511   if (debug_displaced)
5512     fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
5513                         "insn %.8lx\n", unprivileged ? "unprivileged " : "",
5514                         (unsigned long) insn);
5515
5516   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5517
5518   if (opcode < 0)
5519     internal_error (__FILE__, __LINE__,
5520                     _("copy_extra_ld_st: instruction decode error"));
5521
5522   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5523   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5524   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5525   if (!immed)
5526     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5527
5528   rt_val = displaced_read_reg (regs, dsc, rt);
5529   if (bytesize[opcode] == 8)
5530     rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5531   rn_val = displaced_read_reg (regs, dsc, rn);
5532   if (!immed)
5533     rm_val = displaced_read_reg (regs, dsc, rm);
5534
5535   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5536   if (bytesize[opcode] == 8)
5537     displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5538   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5539   if (!immed)
5540     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5541
5542   dsc->rd = rt;
5543   dsc->u.ldst.xfersize = bytesize[opcode];
5544   dsc->u.ldst.rn = rn;
5545   dsc->u.ldst.immed = immed;
5546   dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5547   dsc->u.ldst.restore_r4 = 0;
5548
5549   if (immed)
5550     /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5551         ->
5552        {ldr,str}<width><cond> r0, [r1,] [r2, #imm].  */
5553     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5554   else
5555     /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5556         ->
5557        {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3].  */
5558     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5559
5560   dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5561
5562   return 0;
5563 }
5564
5565 /* Copy byte/half word/word loads and stores.  */
5566
5567 static void
5568 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5569                     arm_displaced_step_closure *dsc, int load,
5570                     int immed, int writeback, int size, int usermode,
5571                     int rt, int rm, int rn)
5572 {
5573   ULONGEST rt_val, rn_val, rm_val = 0;
5574
5575   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5576   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5577   if (!immed)
5578     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5579   if (!load)
5580     dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5581
5582   rt_val = displaced_read_reg (regs, dsc, rt);
5583   rn_val = displaced_read_reg (regs, dsc, rn);
5584   if (!immed)
5585     rm_val = displaced_read_reg (regs, dsc, rm);
5586
5587   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5588   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5589   if (!immed)
5590     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5591   dsc->rd = rt;
5592   dsc->u.ldst.xfersize = size;
5593   dsc->u.ldst.rn = rn;
5594   dsc->u.ldst.immed = immed;
5595   dsc->u.ldst.writeback = writeback;
5596
5597   /* To write PC we can do:
5598
5599      Before this sequence of instructions:
5600      r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5601      r2 is the Rn value got from dispalced_read_reg.
5602
5603      Insn1: push {pc} Write address of STR instruction + offset on stack
5604      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
5605      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
5606                                 = addr(Insn1) + offset - addr(Insn3) - 8
5607                                 = offset - 16
5608      Insn4: add r4, r4, #8   r4 = offset - 8
5609      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
5610                                 = from + offset
5611      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5612
5613      Otherwise we don't know what value to write for PC, since the offset is
5614      architecture-dependent (sometimes PC+8, sometimes PC+12).  More details
5615      of this can be found in Section "Saving from r15" in
5616      http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5617
5618   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5619 }
5620
5621
5622 static int
5623 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5624                           uint16_t insn2, struct regcache *regs,
5625                           arm_displaced_step_closure *dsc, int size)
5626 {
5627   unsigned int u_bit = bit (insn1, 7);
5628   unsigned int rt = bits (insn2, 12, 15);
5629   int imm12 = bits (insn2, 0, 11);
5630   ULONGEST pc_val;
5631
5632   if (debug_displaced)
5633     fprintf_unfiltered (gdb_stdlog,
5634                         "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
5635                         (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5636                         imm12);
5637
5638   if (!u_bit)
5639     imm12 = -1 * imm12;
5640
5641   /* Rewrite instruction LDR Rt imm12 into:
5642
5643      Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5644
5645      LDR R0, R2, R3,
5646
5647      Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2].  */
5648
5649
5650   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5651   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5652   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5653
5654   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5655
5656   pc_val = pc_val & 0xfffffffc;
5657
5658   displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5659   displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5660
5661   dsc->rd = rt;
5662
5663   dsc->u.ldst.xfersize = size;
5664   dsc->u.ldst.immed = 0;
5665   dsc->u.ldst.writeback = 0;
5666   dsc->u.ldst.restore_r4 = 0;
5667
5668   /* LDR R0, R2, R3 */
5669   dsc->modinsn[0] = 0xf852;
5670   dsc->modinsn[1] = 0x3;
5671   dsc->numinsns = 2;
5672
5673   dsc->cleanup = &cleanup_load;
5674
5675   return 0;
5676 }
5677
5678 static int
5679 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5680                           uint16_t insn2, struct regcache *regs,
5681                           arm_displaced_step_closure *dsc,
5682                           int writeback, int immed)
5683 {
5684   unsigned int rt = bits (insn2, 12, 15);
5685   unsigned int rn = bits (insn1, 0, 3);
5686   unsigned int rm = bits (insn2, 0, 3);  /* Only valid if !immed.  */
5687   /* In LDR (register), there is also a register Rm, which is not allowed to
5688      be PC, so we don't have to check it.  */
5689
5690   if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5691     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5692                                         dsc);
5693
5694   if (debug_displaced)
5695     fprintf_unfiltered (gdb_stdlog,
5696                         "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
5697                          rt, rn, insn1, insn2);
5698
5699   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5700                       0, rt, rm, rn);
5701
5702   dsc->u.ldst.restore_r4 = 0;
5703
5704   if (immed)
5705     /* ldr[b]<cond> rt, [rn, #imm], etc.
5706        ->
5707        ldr[b]<cond> r0, [r2, #imm].  */
5708     {
5709       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5710       dsc->modinsn[1] = insn2 & 0x0fff;
5711     }
5712   else
5713     /* ldr[b]<cond> rt, [rn, rm], etc.
5714        ->
5715        ldr[b]<cond> r0, [r2, r3].  */
5716     {
5717       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5718       dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5719     }
5720
5721   dsc->numinsns = 2;
5722
5723   return 0;
5724 }
5725
5726
5727 static int
5728 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5729                             struct regcache *regs,
5730                             arm_displaced_step_closure *dsc,
5731                             int load, int size, int usermode)
5732 {
5733   int immed = !bit (insn, 25);
5734   int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5735   unsigned int rt = bits (insn, 12, 15);
5736   unsigned int rn = bits (insn, 16, 19);
5737   unsigned int rm = bits (insn, 0, 3);  /* Only valid if !immed.  */
5738
5739   if (!insn_references_pc (insn, 0x000ff00ful))
5740     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5741
5742   if (debug_displaced)
5743     fprintf_unfiltered (gdb_stdlog,
5744                         "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
5745                         load ? (size == 1 ? "ldrb" : "ldr")
5746                              : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
5747                         rt, rn,
5748                         (unsigned long) insn);
5749
5750   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5751                       usermode, rt, rm, rn);
5752
5753   if (load || rt != ARM_PC_REGNUM)
5754     {
5755       dsc->u.ldst.restore_r4 = 0;
5756
5757       if (immed)
5758         /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5759            ->
5760            {ldr,str}[b]<cond> r0, [r2, #imm].  */
5761         dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5762       else
5763         /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5764            ->
5765            {ldr,str}[b]<cond> r0, [r2, r3].  */
5766         dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5767     }
5768   else
5769     {
5770       /* We need to use r4 as scratch.  Make sure it's restored afterwards.  */
5771       dsc->u.ldst.restore_r4 = 1;
5772       dsc->modinsn[0] = 0xe92d8000;  /* push {pc} */
5773       dsc->modinsn[1] = 0xe8bd0010;  /* pop  {r4} */
5774       dsc->modinsn[2] = 0xe044400f;  /* sub r4, r4, pc.  */
5775       dsc->modinsn[3] = 0xe2844008;  /* add r4, r4, #8.  */
5776       dsc->modinsn[4] = 0xe0800004;  /* add r0, r0, r4.  */
5777
5778       /* As above.  */
5779       if (immed)
5780         dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5781       else
5782         dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5783
5784       dsc->numinsns = 6;
5785     }
5786
5787   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5788
5789   return 0;
5790 }
5791
5792 /* Cleanup LDM instructions with fully-populated register list.  This is an
5793    unfortunate corner case: it's impossible to implement correctly by modifying
5794    the instruction.  The issue is as follows: we have an instruction,
5795
5796    ldm rN, {r0-r15}
5797
5798    which we must rewrite to avoid loading PC.  A possible solution would be to
5799    do the load in two halves, something like (with suitable cleanup
5800    afterwards):
5801
5802    mov r8, rN
5803    ldm[id][ab] r8!, {r0-r7}
5804    str r7, <temp>
5805    ldm[id][ab] r8, {r7-r14}
5806    <bkpt>
5807
5808    but at present there's no suitable place for <temp>, since the scratch space
5809    is overwritten before the cleanup routine is called.  For now, we simply
5810    emulate the instruction.  */
5811
5812 static void
5813 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5814                         arm_displaced_step_closure *dsc)
5815 {
5816   int inc = dsc->u.block.increment;
5817   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5818   int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5819   uint32_t regmask = dsc->u.block.regmask;
5820   int regno = inc ? 0 : 15;
5821   CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5822   int exception_return = dsc->u.block.load && dsc->u.block.user
5823                          && (regmask & 0x8000) != 0;
5824   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5825   int do_transfer = condition_true (dsc->u.block.cond, status);
5826   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5827
5828   if (!do_transfer)
5829     return;
5830
5831   /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5832      sensible we can do here.  Complain loudly.  */
5833   if (exception_return)
5834     error (_("Cannot single-step exception return"));
5835
5836   /* We don't handle any stores here for now.  */
5837   gdb_assert (dsc->u.block.load != 0);
5838
5839   if (debug_displaced)
5840     fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
5841                         "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
5842                         dsc->u.block.increment ? "inc" : "dec",
5843                         dsc->u.block.before ? "before" : "after");
5844
5845   while (regmask)
5846     {
5847       uint32_t memword;
5848
5849       if (inc)
5850         while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5851           regno++;
5852       else
5853         while (regno >= 0 && (regmask & (1 << regno)) == 0)
5854           regno--;
5855
5856       xfer_addr += bump_before;
5857
5858       memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5859       displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5860
5861       xfer_addr += bump_after;
5862
5863       regmask &= ~(1 << regno);
5864     }
5865
5866   if (dsc->u.block.writeback)
5867     displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5868                          CANNOT_WRITE_PC);
5869 }
5870
5871 /* Clean up an STM which included the PC in the register list.  */
5872
5873 static void
5874 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5875                         arm_displaced_step_closure *dsc)
5876 {
5877   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5878   int store_executed = condition_true (dsc->u.block.cond, status);
5879   CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
5880   CORE_ADDR stm_insn_addr;
5881   uint32_t pc_val;
5882   long offset;
5883   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5884
5885   /* If condition code fails, there's nothing else to do.  */
5886   if (!store_executed)
5887     return;
5888
5889   if (dsc->u.block.increment)
5890     {
5891       pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5892
5893       if (dsc->u.block.before)
5894          pc_stored_at += 4;
5895     }
5896   else
5897     {
5898       pc_stored_at = dsc->u.block.xfer_addr;
5899
5900       if (dsc->u.block.before)
5901          pc_stored_at -= 4;
5902     }
5903
5904   pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5905   stm_insn_addr = dsc->scratch_base;
5906   offset = pc_val - stm_insn_addr;
5907
5908   if (debug_displaced)
5909     fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
5910                         "STM instruction\n", offset);
5911
5912   /* Rewrite the stored PC to the proper value for the non-displaced original
5913      instruction.  */
5914   write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5915                                  dsc->insn_addr + offset);
5916 }
5917
5918 /* Clean up an LDM which includes the PC in the register list.  We clumped all
5919    the registers in the transferred list into a contiguous range r0...rX (to
5920    avoid loading PC directly and losing control of the debugged program), so we
5921    must undo that here.  */
5922
5923 static void
5924 cleanup_block_load_pc (struct gdbarch *gdbarch,
5925                        struct regcache *regs,
5926                        arm_displaced_step_closure *dsc)
5927 {
5928   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5929   int load_executed = condition_true (dsc->u.block.cond, status);
5930   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5931   unsigned int regs_loaded = bitcount (mask);
5932   unsigned int num_to_shuffle = regs_loaded, clobbered;
5933
5934   /* The method employed here will fail if the register list is fully populated
5935      (we need to avoid loading PC directly).  */
5936   gdb_assert (num_to_shuffle < 16);
5937
5938   if (!load_executed)
5939     return;
5940
5941   clobbered = (1 << num_to_shuffle) - 1;
5942
5943   while (num_to_shuffle > 0)
5944     {
5945       if ((mask & (1 << write_reg)) != 0)
5946         {
5947           unsigned int read_reg = num_to_shuffle - 1;
5948
5949           if (read_reg != write_reg)
5950             {
5951               ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5952               displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5953               if (debug_displaced)
5954                 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
5955                                     "loaded register r%d to r%d\n"), read_reg,
5956                                     write_reg);
5957             }
5958           else if (debug_displaced)
5959             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
5960                                 "r%d already in the right place\n"),
5961                                 write_reg);
5962
5963           clobbered &= ~(1 << write_reg);
5964
5965           num_to_shuffle--;
5966         }
5967
5968       write_reg--;
5969     }
5970
5971   /* Restore any registers we scribbled over.  */
5972   for (write_reg = 0; clobbered != 0; write_reg++)
5973     {
5974       if ((clobbered & (1 << write_reg)) != 0)
5975         {
5976           displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
5977                                CANNOT_WRITE_PC);
5978           if (debug_displaced)
5979             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
5980                                 "clobbered register r%d\n"), write_reg);
5981           clobbered &= ~(1 << write_reg);
5982         }
5983     }
5984
5985   /* Perform register writeback manually.  */
5986   if (dsc->u.block.writeback)
5987     {
5988       ULONGEST new_rn_val = dsc->u.block.xfer_addr;
5989
5990       if (dsc->u.block.increment)
5991         new_rn_val += regs_loaded * 4;
5992       else
5993         new_rn_val -= regs_loaded * 4;
5994
5995       displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
5996                            CANNOT_WRITE_PC);
5997     }
5998 }
5999
6000 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
6001    in user-level code (in particular exception return, ldm rn, {...pc}^).  */
6002
6003 static int
6004 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
6005                      struct regcache *regs,
6006                      arm_displaced_step_closure *dsc)
6007 {
6008   int load = bit (insn, 20);
6009   int user = bit (insn, 22);
6010   int increment = bit (insn, 23);
6011   int before = bit (insn, 24);
6012   int writeback = bit (insn, 21);
6013   int rn = bits (insn, 16, 19);
6014
6015   /* Block transfers which don't mention PC can be run directly
6016      out-of-line.  */
6017   if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
6018     return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
6019
6020   if (rn == ARM_PC_REGNUM)
6021     {
6022       warning (_("displaced: Unpredictable LDM or STM with "
6023                  "base register r15"));
6024       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
6025     }
6026
6027   if (debug_displaced)
6028     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6029                         "%.8lx\n", (unsigned long) insn);
6030
6031   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6032   dsc->u.block.rn = rn;
6033
6034   dsc->u.block.load = load;
6035   dsc->u.block.user = user;
6036   dsc->u.block.increment = increment;
6037   dsc->u.block.before = before;
6038   dsc->u.block.writeback = writeback;
6039   dsc->u.block.cond = bits (insn, 28, 31);
6040
6041   dsc->u.block.regmask = insn & 0xffff;
6042
6043   if (load)
6044     {
6045       if ((insn & 0xffff) == 0xffff)
6046         {
6047           /* LDM with a fully-populated register list.  This case is
6048              particularly tricky.  Implement for now by fully emulating the
6049              instruction (which might not behave perfectly in all cases, but
6050              these instructions should be rare enough for that not to matter
6051              too much).  */
6052           dsc->modinsn[0] = ARM_NOP;
6053
6054           dsc->cleanup = &cleanup_block_load_all;
6055         }
6056       else
6057         {
6058           /* LDM of a list of registers which includes PC.  Implement by
6059              rewriting the list of registers to be transferred into a
6060              contiguous chunk r0...rX before doing the transfer, then shuffling
6061              registers into the correct places in the cleanup routine.  */
6062           unsigned int regmask = insn & 0xffff;
6063           unsigned int num_in_list = bitcount (regmask), new_regmask;
6064           unsigned int i;
6065
6066           for (i = 0; i < num_in_list; i++)
6067             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6068
6069           /* Writeback makes things complicated.  We need to avoid clobbering
6070              the base register with one of the registers in our modified
6071              register list, but just using a different register can't work in
6072              all cases, e.g.:
6073
6074                ldm r14!, {r0-r13,pc}
6075
6076              which would need to be rewritten as:
6077
6078                ldm rN!, {r0-r14}
6079
6080              but that can't work, because there's no free register for N.
6081
6082              Solve this by turning off the writeback bit, and emulating
6083              writeback manually in the cleanup routine.  */
6084
6085           if (writeback)
6086             insn &= ~(1 << 21);
6087
6088           new_regmask = (1 << num_in_list) - 1;
6089
6090           if (debug_displaced)
6091             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6092                                 "{..., pc}: original reg list %.4x, modified "
6093                                 "list %.4x\n"), rn, writeback ? "!" : "",
6094                                 (int) insn & 0xffff, new_regmask);
6095
6096           dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6097
6098           dsc->cleanup = &cleanup_block_load_pc;
6099         }
6100     }
6101   else
6102     {
6103       /* STM of a list of registers which includes PC.  Run the instruction
6104          as-is, but out of line: this will store the wrong value for the PC,
6105          so we must manually fix up the memory in the cleanup routine.
6106          Doing things this way has the advantage that we can auto-detect
6107          the offset of the PC write (which is architecture-dependent) in
6108          the cleanup routine.  */
6109       dsc->modinsn[0] = insn;
6110
6111       dsc->cleanup = &cleanup_block_store_pc;
6112     }
6113
6114   return 0;
6115 }
6116
6117 static int
6118 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6119                         struct regcache *regs,
6120                         arm_displaced_step_closure *dsc)
6121 {
6122   int rn = bits (insn1, 0, 3);
6123   int load = bit (insn1, 4);
6124   int writeback = bit (insn1, 5);
6125
6126   /* Block transfers which don't mention PC can be run directly
6127      out-of-line.  */
6128   if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6129     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6130
6131   if (rn == ARM_PC_REGNUM)
6132     {
6133       warning (_("displaced: Unpredictable LDM or STM with "
6134                  "base register r15"));
6135       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6136                                           "unpredictable ldm/stm", dsc);
6137     }
6138
6139   if (debug_displaced)
6140     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6141                         "%.4x%.4x\n", insn1, insn2);
6142
6143   /* Clear bit 13, since it should be always zero.  */
6144   dsc->u.block.regmask = (insn2 & 0xdfff);
6145   dsc->u.block.rn = rn;
6146
6147   dsc->u.block.load = load;
6148   dsc->u.block.user = 0;
6149   dsc->u.block.increment = bit (insn1, 7);
6150   dsc->u.block.before = bit (insn1, 8);
6151   dsc->u.block.writeback = writeback;
6152   dsc->u.block.cond = INST_AL;
6153   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6154
6155   if (load)
6156     {
6157       if (dsc->u.block.regmask == 0xffff)
6158         {
6159           /* This branch is impossible to happen.  */
6160           gdb_assert (0);
6161         }
6162       else
6163         {
6164           unsigned int regmask = dsc->u.block.regmask;
6165           unsigned int num_in_list = bitcount (regmask), new_regmask;
6166           unsigned int i;
6167
6168           for (i = 0; i < num_in_list; i++)
6169             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6170
6171           if (writeback)
6172             insn1 &= ~(1 << 5);
6173
6174           new_regmask = (1 << num_in_list) - 1;
6175
6176           if (debug_displaced)
6177             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6178                                 "{..., pc}: original reg list %.4x, modified "
6179                                 "list %.4x\n"), rn, writeback ? "!" : "",
6180                                 (int) dsc->u.block.regmask, new_regmask);
6181
6182           dsc->modinsn[0] = insn1;
6183           dsc->modinsn[1] = (new_regmask & 0xffff);
6184           dsc->numinsns = 2;
6185
6186           dsc->cleanup = &cleanup_block_load_pc;
6187         }
6188     }
6189   else
6190     {
6191       dsc->modinsn[0] = insn1;
6192       dsc->modinsn[1] = insn2;
6193       dsc->numinsns = 2;
6194       dsc->cleanup = &cleanup_block_store_pc;
6195     }
6196   return 0;
6197 }
6198
6199 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6200  This is used to avoid a dependency on BFD's bfd_endian enum.  */
6201
6202 ULONGEST
6203 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6204                                                int byte_order)
6205 {
6206   return read_memory_unsigned_integer (memaddr, len,
6207                                        (enum bfd_endian) byte_order);
6208 }
6209
6210 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs.  */
6211
6212 CORE_ADDR
6213 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6214                                    CORE_ADDR val)
6215 {
6216   return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6217 }
6218
6219 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
6220
6221 static CORE_ADDR
6222 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6223 {
6224   return 0;
6225 }
6226
6227 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs.  */
6228
6229 int
6230 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6231 {
6232   return arm_is_thumb (self->regcache);
6233 }
6234
6235 /* single_step() is called just before we want to resume the inferior,
6236    if we want to single-step it but there is no hardware or kernel
6237    single-step support.  We find the target of the coming instructions
6238    and breakpoint them.  */
6239
6240 std::vector<CORE_ADDR>
6241 arm_software_single_step (struct regcache *regcache)
6242 {
6243   struct gdbarch *gdbarch = regcache->arch ();
6244   struct arm_get_next_pcs next_pcs_ctx;
6245
6246   arm_get_next_pcs_ctor (&next_pcs_ctx,
6247                          &arm_get_next_pcs_ops,
6248                          gdbarch_byte_order (gdbarch),
6249                          gdbarch_byte_order_for_code (gdbarch),
6250                          0,
6251                          regcache);
6252
6253   std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6254
6255   for (CORE_ADDR &pc_ref : next_pcs)
6256     pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6257
6258   return next_pcs;
6259 }
6260
6261 /* Cleanup/copy SVC (SWI) instructions.  These two functions are overridden
6262    for Linux, where some SVC instructions must be treated specially.  */
6263
6264 static void
6265 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6266              arm_displaced_step_closure *dsc)
6267 {
6268   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6269
6270   if (debug_displaced)
6271     fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
6272                         "%.8lx\n", (unsigned long) resume_addr);
6273
6274   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6275 }
6276
6277
6278 /* Common copy routine for svc instruciton.  */
6279
6280 static int
6281 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6282              arm_displaced_step_closure *dsc)
6283 {
6284   /* Preparation: none.
6285      Insn: unmodified svc.
6286      Cleanup: pc <- insn_addr + insn_size.  */
6287
6288   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6289      instruction.  */
6290   dsc->wrote_to_pc = 1;
6291
6292   /* Allow OS-specific code to override SVC handling.  */
6293   if (dsc->u.svc.copy_svc_os)
6294     return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6295   else
6296     {
6297       dsc->cleanup = &cleanup_svc;
6298       return 0;
6299     }
6300 }
6301
6302 static int
6303 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6304               struct regcache *regs, arm_displaced_step_closure *dsc)
6305 {
6306
6307   if (debug_displaced)
6308     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
6309                         (unsigned long) insn);
6310
6311   dsc->modinsn[0] = insn;
6312
6313   return install_svc (gdbarch, regs, dsc);
6314 }
6315
6316 static int
6317 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6318                 struct regcache *regs, arm_displaced_step_closure *dsc)
6319 {
6320
6321   if (debug_displaced)
6322     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
6323                         insn);
6324
6325   dsc->modinsn[0] = insn;
6326
6327   return install_svc (gdbarch, regs, dsc);
6328 }
6329
6330 /* Copy undefined instructions.  */
6331
6332 static int
6333 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6334                 arm_displaced_step_closure *dsc)
6335 {
6336   if (debug_displaced)
6337     fprintf_unfiltered (gdb_stdlog,
6338                         "displaced: copying undefined insn %.8lx\n",
6339                         (unsigned long) insn);
6340
6341   dsc->modinsn[0] = insn;
6342
6343   return 0;
6344 }
6345
6346 static int
6347 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6348                        arm_displaced_step_closure *dsc)
6349 {
6350
6351   if (debug_displaced)
6352     fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
6353                        "%.4x %.4x\n", (unsigned short) insn1,
6354                        (unsigned short) insn2);
6355
6356   dsc->modinsn[0] = insn1;
6357   dsc->modinsn[1] = insn2;
6358   dsc->numinsns = 2;
6359
6360   return 0;
6361 }
6362
6363 /* Copy unpredictable instructions.  */
6364
6365 static int
6366 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6367                  arm_displaced_step_closure *dsc)
6368 {
6369   if (debug_displaced)
6370     fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
6371                         "%.8lx\n", (unsigned long) insn);
6372
6373   dsc->modinsn[0] = insn;
6374
6375   return 0;
6376 }
6377
6378 /* The decode_* functions are instruction decoding helpers.  They mostly follow
6379    the presentation in the ARM ARM.  */
6380
6381 static int
6382 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6383                               struct regcache *regs,
6384                               arm_displaced_step_closure *dsc)
6385 {
6386   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6387   unsigned int rn = bits (insn, 16, 19);
6388
6389   if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6390     return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6391   else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6392     return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6393   else if ((op1 & 0x60) == 0x20)
6394     return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6395   else if ((op1 & 0x71) == 0x40)
6396     return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6397                                 dsc);
6398   else if ((op1 & 0x77) == 0x41)
6399     return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6400   else if ((op1 & 0x77) == 0x45)
6401     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pli.  */
6402   else if ((op1 & 0x77) == 0x51)
6403     {
6404       if (rn != 0xf)
6405         return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6406       else
6407         return arm_copy_unpred (gdbarch, insn, dsc);
6408     }
6409   else if ((op1 & 0x77) == 0x55)
6410     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6411   else if (op1 == 0x57)
6412     switch (op2)
6413       {
6414       case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6415       case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6416       case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6417       case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6418       default: return arm_copy_unpred (gdbarch, insn, dsc);
6419       }
6420   else if ((op1 & 0x63) == 0x43)
6421     return arm_copy_unpred (gdbarch, insn, dsc);
6422   else if ((op2 & 0x1) == 0x0)
6423     switch (op1 & ~0x80)
6424       {
6425       case 0x61:
6426         return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6427       case 0x65:
6428         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
6429       case 0x71: case 0x75:
6430         /* pld/pldw reg.  */
6431         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6432       case 0x63: case 0x67: case 0x73: case 0x77:
6433         return arm_copy_unpred (gdbarch, insn, dsc);
6434       default:
6435         return arm_copy_undef (gdbarch, insn, dsc);
6436       }
6437   else
6438     return arm_copy_undef (gdbarch, insn, dsc);  /* Probably unreachable.  */
6439 }
6440
6441 static int
6442 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6443                           struct regcache *regs,
6444                           arm_displaced_step_closure *dsc)
6445 {
6446   if (bit (insn, 27) == 0)
6447     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6448   /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx.  */
6449   else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6450     {
6451     case 0x0: case 0x2:
6452       return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6453
6454     case 0x1: case 0x3:
6455       return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6456
6457     case 0x4: case 0x5: case 0x6: case 0x7:
6458       return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6459
6460     case 0x8:
6461       switch ((insn & 0xe00000) >> 21)
6462         {
6463         case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6464           /* stc/stc2.  */
6465           return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6466
6467         case 0x2:
6468           return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6469
6470         default:
6471           return arm_copy_undef (gdbarch, insn, dsc);
6472         }
6473
6474     case 0x9:
6475       {
6476          int rn_f = (bits (insn, 16, 19) == 0xf);
6477         switch ((insn & 0xe00000) >> 21)
6478           {
6479           case 0x1: case 0x3:
6480             /* ldc/ldc2 imm (undefined for rn == pc).  */
6481             return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6482                         : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6483
6484           case 0x2:
6485             return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6486
6487           case 0x4: case 0x5: case 0x6: case 0x7:
6488             /* ldc/ldc2 lit (undefined for rn != pc).  */
6489             return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6490                         : arm_copy_undef (gdbarch, insn, dsc);
6491
6492           default:
6493             return arm_copy_undef (gdbarch, insn, dsc);
6494           }
6495       }
6496
6497     case 0xa:
6498       return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6499
6500     case 0xb:
6501       if (bits (insn, 16, 19) == 0xf)
6502         /* ldc/ldc2 lit.  */
6503         return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6504       else
6505         return arm_copy_undef (gdbarch, insn, dsc);
6506
6507     case 0xc:
6508       if (bit (insn, 4))
6509         return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6510       else
6511         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6512
6513     case 0xd:
6514       if (bit (insn, 4))
6515         return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6516       else
6517         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6518
6519     default:
6520       return arm_copy_undef (gdbarch, insn, dsc);
6521     }
6522 }
6523
6524 /* Decode miscellaneous instructions in dp/misc encoding space.  */
6525
6526 static int
6527 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6528                           struct regcache *regs,
6529                           arm_displaced_step_closure *dsc)
6530 {
6531   unsigned int op2 = bits (insn, 4, 6);
6532   unsigned int op = bits (insn, 21, 22);
6533
6534   switch (op2)
6535     {
6536     case 0x0:
6537       return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6538
6539     case 0x1:
6540       if (op == 0x1)  /* bx.  */
6541         return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6542       else if (op == 0x3)
6543         return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6544       else
6545         return arm_copy_undef (gdbarch, insn, dsc);
6546
6547     case 0x2:
6548       if (op == 0x1)
6549         /* Not really supported.  */
6550         return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6551       else
6552         return arm_copy_undef (gdbarch, insn, dsc);
6553
6554     case 0x3:
6555       if (op == 0x1)
6556         return arm_copy_bx_blx_reg (gdbarch, insn,
6557                                 regs, dsc);  /* blx register.  */
6558       else
6559         return arm_copy_undef (gdbarch, insn, dsc);
6560
6561     case 0x5:
6562       return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6563
6564     case 0x7:
6565       if (op == 0x1)
6566         return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6567       else if (op == 0x3)
6568         /* Not really supported.  */
6569         return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
6570       /* Fall through.  */
6571
6572     default:
6573       return arm_copy_undef (gdbarch, insn, dsc);
6574     }
6575 }
6576
6577 static int
6578 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
6579                     struct regcache *regs,
6580                     arm_displaced_step_closure *dsc)
6581 {
6582   if (bit (insn, 25))
6583     switch (bits (insn, 20, 24))
6584       {
6585       case 0x10:
6586         return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
6587
6588       case 0x14:
6589         return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
6590
6591       case 0x12: case 0x16:
6592         return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
6593
6594       default:
6595         return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
6596       }
6597   else
6598     {
6599       uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
6600
6601       if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
6602         return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
6603       else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
6604         return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
6605       else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
6606         return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
6607       else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
6608         return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
6609       else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
6610         return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
6611       else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
6612         return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
6613       else if (op2 == 0xb || (op2 & 0xd) == 0xd)
6614         /* 2nd arg means "unprivileged".  */
6615         return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
6616                                      dsc);
6617     }
6618
6619   /* Should be unreachable.  */
6620   return 1;
6621 }
6622
6623 static int
6624 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
6625                              struct regcache *regs,
6626                              arm_displaced_step_closure *dsc)
6627 {
6628   int a = bit (insn, 25), b = bit (insn, 4);
6629   uint32_t op1 = bits (insn, 20, 24);
6630
6631   if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
6632       || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
6633     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
6634   else if ((!a && (op1 & 0x17) == 0x02)
6635             || (a && (op1 & 0x17) == 0x02 && !b))
6636     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
6637   else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
6638             || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
6639     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
6640   else if ((!a && (op1 & 0x17) == 0x03)
6641            || (a && (op1 & 0x17) == 0x03 && !b))
6642     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
6643   else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
6644             || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
6645     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
6646   else if ((!a && (op1 & 0x17) == 0x06)
6647            || (a && (op1 & 0x17) == 0x06 && !b))
6648     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
6649   else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
6650            || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
6651     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
6652   else if ((!a && (op1 & 0x17) == 0x07)
6653            || (a && (op1 & 0x17) == 0x07 && !b))
6654     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
6655
6656   /* Should be unreachable.  */
6657   return 1;
6658 }
6659
6660 static int
6661 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
6662                   arm_displaced_step_closure *dsc)
6663 {
6664   switch (bits (insn, 20, 24))
6665     {
6666     case 0x00: case 0x01: case 0x02: case 0x03:
6667       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
6668
6669     case 0x04: case 0x05: case 0x06: case 0x07:
6670       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
6671
6672     case 0x08: case 0x09: case 0x0a: case 0x0b:
6673     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
6674       return arm_copy_unmodified (gdbarch, insn,
6675                               "decode/pack/unpack/saturate/reverse", dsc);
6676
6677     case 0x18:
6678       if (bits (insn, 5, 7) == 0)  /* op2.  */
6679          {
6680           if (bits (insn, 12, 15) == 0xf)
6681             return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
6682           else
6683             return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
6684         }
6685       else
6686          return arm_copy_undef (gdbarch, insn, dsc);
6687
6688     case 0x1a: case 0x1b:
6689       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6690         return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
6691       else
6692         return arm_copy_undef (gdbarch, insn, dsc);
6693
6694     case 0x1c: case 0x1d:
6695       if (bits (insn, 5, 6) == 0x0)  /* op2[1:0].  */
6696          {
6697           if (bits (insn, 0, 3) == 0xf)
6698             return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
6699           else
6700             return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
6701         }
6702       else
6703         return arm_copy_undef (gdbarch, insn, dsc);
6704
6705     case 0x1e: case 0x1f:
6706       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6707         return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
6708       else
6709         return arm_copy_undef (gdbarch, insn, dsc);
6710     }
6711
6712   /* Should be unreachable.  */
6713   return 1;
6714 }
6715
6716 static int
6717 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
6718                         struct regcache *regs,
6719                         arm_displaced_step_closure *dsc)
6720 {
6721   if (bit (insn, 25))
6722     return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6723   else
6724     return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
6725 }
6726
6727 static int
6728 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
6729                           struct regcache *regs,
6730                           arm_displaced_step_closure *dsc)
6731 {
6732   unsigned int opcode = bits (insn, 20, 24);
6733
6734   switch (opcode)
6735     {
6736     case 0x04: case 0x05:  /* VFP/Neon mrrc/mcrr.  */
6737       return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
6738
6739     case 0x08: case 0x0a: case 0x0c: case 0x0e:
6740     case 0x12: case 0x16:
6741       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
6742
6743     case 0x09: case 0x0b: case 0x0d: case 0x0f:
6744     case 0x13: case 0x17:
6745       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
6746
6747     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6748     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6749       /* Note: no writeback for these instructions.  Bit 25 will always be
6750          zero though (via caller), so the following works OK.  */
6751       return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6752     }
6753
6754   /* Should be unreachable.  */
6755   return 1;
6756 }
6757
6758 /* Decode shifted register instructions.  */
6759
6760 static int
6761 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
6762                             uint16_t insn2,  struct regcache *regs,
6763                             arm_displaced_step_closure *dsc)
6764 {
6765   /* PC is only allowed to be used in instruction MOV.  */
6766
6767   unsigned int op = bits (insn1, 5, 8);
6768   unsigned int rn = bits (insn1, 0, 3);
6769
6770   if (op == 0x2 && rn == 0xf) /* MOV */
6771     return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
6772   else
6773     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6774                                         "dp (shift reg)", dsc);
6775 }
6776
6777
6778 /* Decode extension register load/store.  Exactly the same as
6779    arm_decode_ext_reg_ld_st.  */
6780
6781 static int
6782 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
6783                              uint16_t insn2,  struct regcache *regs,
6784                              arm_displaced_step_closure *dsc)
6785 {
6786   unsigned int opcode = bits (insn1, 4, 8);
6787
6788   switch (opcode)
6789     {
6790     case 0x04: case 0x05:
6791       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6792                                           "vfp/neon vmov", dsc);
6793
6794     case 0x08: case 0x0c: /* 01x00 */
6795     case 0x0a: case 0x0e: /* 01x10 */
6796     case 0x12: case 0x16: /* 10x10 */
6797       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6798                                           "vfp/neon vstm/vpush", dsc);
6799
6800     case 0x09: case 0x0d: /* 01x01 */
6801     case 0x0b: case 0x0f: /* 01x11 */
6802     case 0x13: case 0x17: /* 10x11 */
6803       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6804                                           "vfp/neon vldm/vpop", dsc);
6805
6806     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6807       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6808                                           "vstr", dsc);
6809     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6810       return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
6811     }
6812
6813   /* Should be unreachable.  */
6814   return 1;
6815 }
6816
6817 static int
6818 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
6819                       struct regcache *regs, arm_displaced_step_closure *dsc)
6820 {
6821   unsigned int op1 = bits (insn, 20, 25);
6822   int op = bit (insn, 4);
6823   unsigned int coproc = bits (insn, 8, 11);
6824
6825   if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
6826     return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
6827   else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
6828            && (coproc & 0xe) != 0xa)
6829     /* stc/stc2.  */
6830     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6831   else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
6832            && (coproc & 0xe) != 0xa)
6833     /* ldc/ldc2 imm/lit.  */
6834     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6835   else if ((op1 & 0x3e) == 0x00)
6836     return arm_copy_undef (gdbarch, insn, dsc);
6837   else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
6838     return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
6839   else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
6840     return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6841   else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
6842     return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6843   else if ((op1 & 0x30) == 0x20 && !op)
6844     {
6845       if ((coproc & 0xe) == 0xa)
6846         return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
6847       else
6848         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6849     }
6850   else if ((op1 & 0x30) == 0x20 && op)
6851     return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
6852   else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
6853     return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6854   else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
6855     return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6856   else if ((op1 & 0x30) == 0x30)
6857     return arm_copy_svc (gdbarch, insn, regs, dsc);
6858   else
6859     return arm_copy_undef (gdbarch, insn, dsc);  /* Possibly unreachable.  */
6860 }
6861
6862 static int
6863 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
6864                          uint16_t insn2, struct regcache *regs,
6865                          arm_displaced_step_closure *dsc)
6866 {
6867   unsigned int coproc = bits (insn2, 8, 11);
6868   unsigned int bit_5_8 = bits (insn1, 5, 8);
6869   unsigned int bit_9 = bit (insn1, 9);
6870   unsigned int bit_4 = bit (insn1, 4);
6871
6872   if (bit_9 == 0)
6873     {
6874       if (bit_5_8 == 2)
6875         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6876                                             "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
6877                                             dsc);
6878       else if (bit_5_8 == 0) /* UNDEFINED.  */
6879         return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
6880       else
6881         {
6882            /*coproc is 101x.  SIMD/VFP, ext registers load/store.  */
6883           if ((coproc & 0xe) == 0xa)
6884             return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
6885                                                 dsc);
6886           else /* coproc is not 101x.  */
6887             {
6888               if (bit_4 == 0) /* STC/STC2.  */
6889                 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6890                                                     "stc/stc2", dsc);
6891               else /* LDC/LDC2 {literal, immeidate}.  */
6892                 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
6893                                                      regs, dsc);
6894             }
6895         }
6896     }
6897   else
6898     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
6899
6900   return 0;
6901 }
6902
6903 static void
6904 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
6905                      arm_displaced_step_closure *dsc, int rd)
6906 {
6907   /* ADR Rd, #imm
6908
6909      Rewrite as:
6910
6911      Preparation: Rd <- PC
6912      Insn: ADD Rd, #imm
6913      Cleanup: Null.
6914   */
6915
6916   /* Rd <- PC */
6917   int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6918   displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
6919 }
6920
6921 static int
6922 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
6923                               arm_displaced_step_closure *dsc,
6924                               int rd, unsigned int imm)
6925 {
6926
6927   /* Encoding T2: ADDS Rd, #imm */
6928   dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
6929
6930   install_pc_relative (gdbarch, regs, dsc, rd);
6931
6932   return 0;
6933 }
6934
6935 static int
6936 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
6937                                 struct regcache *regs,
6938                                 arm_displaced_step_closure *dsc)
6939 {
6940   unsigned int rd = bits (insn, 8, 10);
6941   unsigned int imm8 = bits (insn, 0, 7);
6942
6943   if (debug_displaced)
6944     fprintf_unfiltered (gdb_stdlog,
6945                         "displaced: copying thumb adr r%d, #%d insn %.4x\n",
6946                         rd, imm8, insn);
6947
6948   return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
6949 }
6950
6951 static int
6952 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
6953                               uint16_t insn2, struct regcache *regs,
6954                               arm_displaced_step_closure *dsc)
6955 {
6956   unsigned int rd = bits (insn2, 8, 11);
6957   /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
6958      extract raw immediate encoding rather than computing immediate.  When
6959      generating ADD or SUB instruction, we can simply perform OR operation to
6960      set immediate into ADD.  */
6961   unsigned int imm_3_8 = insn2 & 0x70ff;
6962   unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10.  */
6963
6964   if (debug_displaced)
6965     fprintf_unfiltered (gdb_stdlog,
6966                         "displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
6967                         rd, imm_i, imm_3_8, insn1, insn2);
6968
6969   if (bit (insn1, 7)) /* Encoding T2 */
6970     {
6971       /* Encoding T3: SUB Rd, Rd, #imm */
6972       dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
6973       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6974     }
6975   else /* Encoding T3 */
6976     {
6977       /* Encoding T3: ADD Rd, Rd, #imm */
6978       dsc->modinsn[0] = (0xf100 | rd | imm_i);
6979       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6980     }
6981   dsc->numinsns = 2;
6982
6983   install_pc_relative (gdbarch, regs, dsc, rd);
6984
6985   return 0;
6986 }
6987
6988 static int
6989 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
6990                               struct regcache *regs,
6991                               arm_displaced_step_closure *dsc)
6992 {
6993   unsigned int rt = bits (insn1, 8, 10);
6994   unsigned int pc;
6995   int imm8 = (bits (insn1, 0, 7) << 2);
6996
6997   /* LDR Rd, #imm8
6998
6999      Rwrite as:
7000
7001      Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
7002
7003      Insn: LDR R0, [R2, R3];
7004      Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
7005
7006   if (debug_displaced)
7007     fprintf_unfiltered (gdb_stdlog,
7008                         "displaced: copying thumb ldr r%d [pc #%d]\n"
7009                         , rt, imm8);
7010
7011   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
7012   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
7013   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
7014   pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
7015   /* The assembler calculates the required value of the offset from the
7016      Align(PC,4) value of this instruction to the label.  */
7017   pc = pc & 0xfffffffc;
7018
7019   displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
7020   displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
7021
7022   dsc->rd = rt;
7023   dsc->u.ldst.xfersize = 4;
7024   dsc->u.ldst.rn = 0;
7025   dsc->u.ldst.immed = 0;
7026   dsc->u.ldst.writeback = 0;
7027   dsc->u.ldst.restore_r4 = 0;
7028
7029   dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
7030
7031   dsc->cleanup = &cleanup_load;
7032
7033   return 0;
7034 }
7035
7036 /* Copy Thumb cbnz/cbz insruction.  */
7037
7038 static int
7039 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
7040                      struct regcache *regs,
7041                      arm_displaced_step_closure *dsc)
7042 {
7043   int non_zero = bit (insn1, 11);
7044   unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
7045   CORE_ADDR from = dsc->insn_addr;
7046   int rn = bits (insn1, 0, 2);
7047   int rn_val = displaced_read_reg (regs, dsc, rn);
7048
7049   dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
7050   /* CBNZ and CBZ do not affect the condition flags.  If condition is true,
7051      set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
7052      condition is false, let it be, cleanup_branch will do nothing.  */
7053   if (dsc->u.branch.cond)
7054     {
7055       dsc->u.branch.cond = INST_AL;
7056       dsc->u.branch.dest = from + 4 + imm5;
7057     }
7058   else
7059       dsc->u.branch.dest = from + 2;
7060
7061   dsc->u.branch.link = 0;
7062   dsc->u.branch.exchange = 0;
7063
7064   if (debug_displaced)
7065     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
7066                         " insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
7067                         rn, rn_val, insn1, dsc->u.branch.dest);
7068
7069   dsc->modinsn[0] = THUMB_NOP;
7070
7071   dsc->cleanup = &cleanup_branch;
7072   return 0;
7073 }
7074
7075 /* Copy Table Branch Byte/Halfword */
7076 static int
7077 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
7078                           uint16_t insn2, struct regcache *regs,
7079                           arm_displaced_step_closure *dsc)
7080 {
7081   ULONGEST rn_val, rm_val;
7082   int is_tbh = bit (insn2, 4);
7083   CORE_ADDR halfwords = 0;
7084   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7085
7086   rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
7087   rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
7088
7089   if (is_tbh)
7090     {
7091       gdb_byte buf[2];
7092
7093       target_read_memory (rn_val + 2 * rm_val, buf, 2);
7094       halfwords = extract_unsigned_integer (buf, 2, byte_order);
7095     }
7096   else
7097     {
7098       gdb_byte buf[1];
7099
7100       target_read_memory (rn_val + rm_val, buf, 1);
7101       halfwords = extract_unsigned_integer (buf, 1, byte_order);
7102     }
7103
7104   if (debug_displaced)
7105     fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
7106                         " offset 0x%x\n", is_tbh ? "tbh" : "tbb",
7107                         (unsigned int) rn_val, (unsigned int) rm_val,
7108                         (unsigned int) halfwords);
7109
7110   dsc->u.branch.cond = INST_AL;
7111   dsc->u.branch.link = 0;
7112   dsc->u.branch.exchange = 0;
7113   dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
7114
7115   dsc->cleanup = &cleanup_branch;
7116
7117   return 0;
7118 }
7119
7120 static void
7121 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
7122                           arm_displaced_step_closure *dsc)
7123 {
7124   /* PC <- r7 */
7125   int val = displaced_read_reg (regs, dsc, 7);
7126   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
7127
7128   /* r7 <- r8 */
7129   val = displaced_read_reg (regs, dsc, 8);
7130   displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
7131
7132   /* r8 <- tmp[0] */
7133   displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
7134
7135 }
7136
7137 static int
7138 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
7139                          struct regcache *regs,
7140                          arm_displaced_step_closure *dsc)
7141 {
7142   dsc->u.block.regmask = insn1 & 0x00ff;
7143
7144   /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
7145      to :
7146
7147      (1) register list is full, that is, r0-r7 are used.
7148      Prepare: tmp[0] <- r8
7149
7150      POP {r0, r1, ...., r6, r7}; remove PC from reglist
7151      MOV r8, r7; Move value of r7 to r8;
7152      POP {r7}; Store PC value into r7.
7153
7154      Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
7155
7156      (2) register list is not full, supposing there are N registers in
7157      register list (except PC, 0 <= N <= 7).
7158      Prepare: for each i, 0 - N, tmp[i] <- ri.
7159
7160      POP {r0, r1, ...., rN};
7161
7162      Cleanup: Set registers in original reglist from r0 - rN.  Restore r0 - rN
7163      from tmp[] properly.
7164   */
7165   if (debug_displaced)
7166     fprintf_unfiltered (gdb_stdlog,
7167                         "displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
7168                         dsc->u.block.regmask, insn1);
7169
7170   if (dsc->u.block.regmask == 0xff)
7171     {
7172       dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
7173
7174       dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
7175       dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
7176       dsc->modinsn[2] = 0xbc80; /* POP {r7} */
7177
7178       dsc->numinsns = 3;
7179       dsc->cleanup = &cleanup_pop_pc_16bit_all;
7180     }
7181   else
7182     {
7183       unsigned int num_in_list = bitcount (dsc->u.block.regmask);
7184       unsigned int i;
7185       unsigned int new_regmask;
7186
7187       for (i = 0; i < num_in_list + 1; i++)
7188         dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7189
7190       new_regmask = (1 << (num_in_list + 1)) - 1;
7191
7192       if (debug_displaced)
7193         fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
7194                                           "{..., pc}: original reg list %.4x,"
7195                                           " modified list %.4x\n"),
7196                             (int) dsc->u.block.regmask, new_regmask);
7197
7198       dsc->u.block.regmask |= 0x8000;
7199       dsc->u.block.writeback = 0;
7200       dsc->u.block.cond = INST_AL;
7201
7202       dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
7203
7204       dsc->cleanup = &cleanup_block_load_pc;
7205     }
7206
7207   return 0;
7208 }
7209
7210 static void
7211 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7212                                     struct regcache *regs,
7213                                     arm_displaced_step_closure *dsc)
7214 {
7215   unsigned short op_bit_12_15 = bits (insn1, 12, 15);
7216   unsigned short op_bit_10_11 = bits (insn1, 10, 11);
7217   int err = 0;
7218
7219   /* 16-bit thumb instructions.  */
7220   switch (op_bit_12_15)
7221     {
7222       /* Shift (imme), add, subtract, move and compare.  */
7223     case 0: case 1: case 2: case 3:
7224       err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7225                                          "shift/add/sub/mov/cmp",
7226                                          dsc);
7227       break;
7228     case 4:
7229       switch (op_bit_10_11)
7230         {
7231         case 0: /* Data-processing */
7232           err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7233                                              "data-processing",
7234                                              dsc);
7235           break;
7236         case 1: /* Special data instructions and branch and exchange.  */
7237           {
7238             unsigned short op = bits (insn1, 7, 9);
7239             if (op == 6 || op == 7) /* BX or BLX */
7240               err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
7241             else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers.  */
7242               err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
7243             else
7244               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
7245                                                  dsc);
7246           }
7247           break;
7248         default: /* LDR (literal) */
7249           err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
7250         }
7251       break;
7252     case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
7253       err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
7254       break;
7255     case 10:
7256       if (op_bit_10_11 < 2) /* Generate PC-relative address */
7257         err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
7258       else /* Generate SP-relative address */
7259         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
7260       break;
7261     case 11: /* Misc 16-bit instructions */
7262       {
7263         switch (bits (insn1, 8, 11))
7264           {
7265           case 1: case 3:  case 9: case 11: /* CBNZ, CBZ */
7266             err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
7267             break;
7268           case 12: case 13: /* POP */
7269             if (bit (insn1, 8)) /* PC is in register list.  */
7270               err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
7271             else
7272               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
7273             break;
7274           case 15: /* If-Then, and hints */
7275             if (bits (insn1, 0, 3))
7276               /* If-Then makes up to four following instructions conditional.
7277                  IT instruction itself is not conditional, so handle it as a
7278                  common unmodified instruction.  */
7279               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
7280                                                  dsc);
7281             else
7282               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
7283             break;
7284           default:
7285             err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
7286           }
7287       }
7288       break;
7289     case 12:
7290       if (op_bit_10_11 < 2) /* Store multiple registers */
7291         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
7292       else /* Load multiple registers */
7293         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
7294       break;
7295     case 13: /* Conditional branch and supervisor call */
7296       if (bits (insn1, 9, 11) != 7) /* conditional branch */
7297         err = thumb_copy_b (gdbarch, insn1, dsc);
7298       else
7299         err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
7300       break;
7301     case 14: /* Unconditional branch */
7302       err = thumb_copy_b (gdbarch, insn1, dsc);
7303       break;
7304     default:
7305       err = 1;
7306     }
7307
7308   if (err)
7309     internal_error (__FILE__, __LINE__,
7310                     _("thumb_process_displaced_16bit_insn: Instruction decode error"));
7311 }
7312
7313 static int
7314 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
7315                                  uint16_t insn1, uint16_t insn2,
7316                                  struct regcache *regs,
7317                                  arm_displaced_step_closure *dsc)
7318 {
7319   int rt = bits (insn2, 12, 15);
7320   int rn = bits (insn1, 0, 3);
7321   int op1 = bits (insn1, 7, 8);
7322
7323   switch (bits (insn1, 5, 6))
7324     {
7325     case 0: /* Load byte and memory hints */
7326       if (rt == 0xf) /* PLD/PLI */
7327         {
7328           if (rn == 0xf)
7329             /* PLD literal or Encoding T3 of PLI(immediate, literal).  */
7330             return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
7331           else
7332             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7333                                                 "pli/pld", dsc);
7334         }
7335       else
7336         {
7337           if (rn == 0xf) /* LDRB/LDRSB (literal) */
7338             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7339                                              1);
7340           else
7341             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7342                                                 "ldrb{reg, immediate}/ldrbt",
7343                                                 dsc);
7344         }
7345
7346       break;
7347     case 1: /* Load halfword and memory hints.  */
7348       if (rt == 0xf) /* PLD{W} and Unalloc memory hint.  */
7349         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7350                                             "pld/unalloc memhint", dsc);
7351       else
7352         {
7353           if (rn == 0xf)
7354             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7355                                              2);
7356           else
7357             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7358                                                 "ldrh/ldrht", dsc);
7359         }
7360       break;
7361     case 2: /* Load word */
7362       {
7363         int insn2_bit_8_11 = bits (insn2, 8, 11);
7364
7365         if (rn == 0xf)
7366           return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
7367         else if (op1 == 0x1) /* Encoding T3 */
7368           return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
7369                                            0, 1);
7370         else /* op1 == 0x0 */
7371           {
7372             if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
7373               /* LDR (immediate) */
7374               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7375                                                dsc, bit (insn2, 8), 1);
7376             else if (insn2_bit_8_11 == 0xe) /* LDRT */
7377               return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7378                                                   "ldrt", dsc);
7379             else
7380               /* LDR (register) */
7381               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7382                                                dsc, 0, 0);
7383           }
7384         break;
7385       }
7386     default:
7387       return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7388       break;
7389     }
7390   return 0;
7391 }
7392
7393 static void
7394 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7395                                     uint16_t insn2, struct regcache *regs,
7396                                     arm_displaced_step_closure *dsc)
7397 {
7398   int err = 0;
7399   unsigned short op = bit (insn2, 15);
7400   unsigned int op1 = bits (insn1, 11, 12);
7401
7402   switch (op1)
7403     {
7404     case 1:
7405       {
7406         switch (bits (insn1, 9, 10))
7407           {
7408           case 0:
7409             if (bit (insn1, 6))
7410               {
7411                 /* Load/store {dual, execlusive}, table branch.  */
7412                 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
7413                     && bits (insn2, 5, 7) == 0)
7414                   err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
7415                                                   dsc);
7416                 else
7417                   /* PC is not allowed to use in load/store {dual, exclusive}
7418                      instructions.  */
7419                   err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7420                                                      "load/store dual/ex", dsc);
7421               }
7422             else /* load/store multiple */
7423               {
7424                 switch (bits (insn1, 7, 8))
7425                   {
7426                   case 0: case 3: /* SRS, RFE */
7427                     err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7428                                                        "srs/rfe", dsc);
7429                     break;
7430                   case 1: case 2: /* LDM/STM/PUSH/POP */
7431                     err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
7432                     break;
7433                   }
7434               }
7435             break;
7436
7437           case 1:
7438             /* Data-processing (shift register).  */
7439             err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
7440                                               dsc);
7441             break;
7442           default: /* Coprocessor instructions.  */
7443             err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7444             break;
7445           }
7446       break;
7447       }
7448     case 2: /* op1 = 2 */
7449       if (op) /* Branch and misc control.  */
7450         {
7451           if (bit (insn2, 14)  /* BLX/BL */
7452               || bit (insn2, 12) /* Unconditional branch */
7453               || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
7454             err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
7455           else
7456             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7457                                                "misc ctrl", dsc);
7458         }
7459       else
7460         {
7461           if (bit (insn1, 9)) /* Data processing (plain binary imm).  */
7462             {
7463               int op = bits (insn1, 4, 8);
7464               int rn = bits (insn1, 0, 3);
7465               if ((op == 0 || op == 0xa) && rn == 0xf)
7466                 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
7467                                                     regs, dsc);
7468               else
7469                 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7470                                                    "dp/pb", dsc);
7471             }
7472           else /* Data processing (modified immeidate) */
7473             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7474                                                "dp/mi", dsc);
7475         }
7476       break;
7477     case 3: /* op1 = 3 */
7478       switch (bits (insn1, 9, 10))
7479         {
7480         case 0:
7481           if (bit (insn1, 4))
7482             err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
7483                                                    regs, dsc);
7484           else /* NEON Load/Store and Store single data item */
7485             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7486                                                "neon elt/struct load/store",
7487                                                dsc);
7488           break;
7489         case 1: /* op1 = 3, bits (9, 10) == 1 */
7490           switch (bits (insn1, 7, 8))
7491             {
7492             case 0: case 1: /* Data processing (register) */
7493               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7494                                                  "dp(reg)", dsc);
7495               break;
7496             case 2: /* Multiply and absolute difference */
7497               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7498                                                  "mul/mua/diff", dsc);
7499               break;
7500             case 3: /* Long multiply and divide */
7501               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7502                                                  "lmul/lmua", dsc);
7503               break;
7504             }
7505           break;
7506         default: /* Coprocessor instructions */
7507           err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7508           break;
7509         }
7510       break;
7511     default:
7512       err = 1;
7513     }
7514
7515   if (err)
7516     internal_error (__FILE__, __LINE__,
7517                     _("thumb_process_displaced_32bit_insn: Instruction decode error"));
7518
7519 }
7520
7521 static void
7522 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7523                               struct regcache *regs,
7524                               arm_displaced_step_closure *dsc)
7525 {
7526   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7527   uint16_t insn1
7528     = read_memory_unsigned_integer (from, 2, byte_order_for_code);
7529
7530   if (debug_displaced)
7531     fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
7532                         "at %.8lx\n", insn1, (unsigned long) from);
7533
7534   dsc->is_thumb = 1;
7535   dsc->insn_size = thumb_insn_size (insn1);
7536   if (thumb_insn_size (insn1) == 4)
7537     {
7538       uint16_t insn2
7539         = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
7540       thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
7541     }
7542   else
7543     thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
7544 }
7545
7546 void
7547 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7548                             CORE_ADDR to, struct regcache *regs,
7549                             arm_displaced_step_closure *dsc)
7550 {
7551   int err = 0;
7552   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7553   uint32_t insn;
7554
7555   /* Most displaced instructions use a 1-instruction scratch space, so set this
7556      here and override below if/when necessary.  */
7557   dsc->numinsns = 1;
7558   dsc->insn_addr = from;
7559   dsc->scratch_base = to;
7560   dsc->cleanup = NULL;
7561   dsc->wrote_to_pc = 0;
7562
7563   if (!displaced_in_arm_mode (regs))
7564     return thumb_process_displaced_insn (gdbarch, from, regs, dsc);
7565
7566   dsc->is_thumb = 0;
7567   dsc->insn_size = 4;
7568   insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
7569   if (debug_displaced)
7570     fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
7571                         "at %.8lx\n", (unsigned long) insn,
7572                         (unsigned long) from);
7573
7574   if ((insn & 0xf0000000) == 0xf0000000)
7575     err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
7576   else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
7577     {
7578     case 0x0: case 0x1: case 0x2: case 0x3:
7579       err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
7580       break;
7581
7582     case 0x4: case 0x5: case 0x6:
7583       err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
7584       break;
7585
7586     case 0x7:
7587       err = arm_decode_media (gdbarch, insn, dsc);
7588       break;
7589
7590     case 0x8: case 0x9: case 0xa: case 0xb:
7591       err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
7592       break;
7593
7594     case 0xc: case 0xd: case 0xe: case 0xf:
7595       err = arm_decode_svc_copro (gdbarch, insn, regs, dsc);
7596       break;
7597     }
7598
7599   if (err)
7600     internal_error (__FILE__, __LINE__,
7601                     _("arm_process_displaced_insn: Instruction decode error"));
7602 }
7603
7604 /* Actually set up the scratch space for a displaced instruction.  */
7605
7606 void
7607 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
7608                             CORE_ADDR to, arm_displaced_step_closure *dsc)
7609 {
7610   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7611   unsigned int i, len, offset;
7612   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7613   int size = dsc->is_thumb? 2 : 4;
7614   const gdb_byte *bkp_insn;
7615
7616   offset = 0;
7617   /* Poke modified instruction(s).  */
7618   for (i = 0; i < dsc->numinsns; i++)
7619     {
7620       if (debug_displaced)
7621         {
7622           fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
7623           if (size == 4)
7624             fprintf_unfiltered (gdb_stdlog, "%.8lx",
7625                                 dsc->modinsn[i]);
7626           else if (size == 2)
7627             fprintf_unfiltered (gdb_stdlog, "%.4x",
7628                                 (unsigned short)dsc->modinsn[i]);
7629
7630           fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
7631                               (unsigned long) to + offset);
7632
7633         }
7634       write_memory_unsigned_integer (to + offset, size,
7635                                      byte_order_for_code,
7636                                      dsc->modinsn[i]);
7637       offset += size;
7638     }
7639
7640   /* Choose the correct breakpoint instruction.  */
7641   if (dsc->is_thumb)
7642     {
7643       bkp_insn = tdep->thumb_breakpoint;
7644       len = tdep->thumb_breakpoint_size;
7645     }
7646   else
7647     {
7648       bkp_insn = tdep->arm_breakpoint;
7649       len = tdep->arm_breakpoint_size;
7650     }
7651
7652   /* Put breakpoint afterwards.  */
7653   write_memory (to + offset, bkp_insn, len);
7654
7655   if (debug_displaced)
7656     fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
7657                         paddress (gdbarch, from), paddress (gdbarch, to));
7658 }
7659
7660 /* Entry point for cleaning things up after a displaced instruction has been
7661    single-stepped.  */
7662
7663 void
7664 arm_displaced_step_fixup (struct gdbarch *gdbarch,
7665                           struct displaced_step_closure *dsc_,
7666                           CORE_ADDR from, CORE_ADDR to,
7667                           struct regcache *regs)
7668 {
7669   arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
7670
7671   if (dsc->cleanup)
7672     dsc->cleanup (gdbarch, regs, dsc);
7673
7674   if (!dsc->wrote_to_pc)
7675     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
7676                                     dsc->insn_addr + dsc->insn_size);
7677
7678 }
7679
7680 #include "bfd-in2.h"
7681 #include "libcoff.h"
7682
7683 static int
7684 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
7685 {
7686   gdb_disassembler *di
7687     = static_cast<gdb_disassembler *>(info->application_data);
7688   struct gdbarch *gdbarch = di->arch ();
7689
7690   if (arm_pc_is_thumb (gdbarch, memaddr))
7691     {
7692       static asymbol *asym;
7693       static combined_entry_type ce;
7694       static struct coff_symbol_struct csym;
7695       static struct bfd fake_bfd;
7696       static bfd_target fake_target;
7697
7698       if (csym.native == NULL)
7699         {
7700           /* Create a fake symbol vector containing a Thumb symbol.
7701              This is solely so that the code in print_insn_little_arm() 
7702              and print_insn_big_arm() in opcodes/arm-dis.c will detect
7703              the presence of a Thumb symbol and switch to decoding
7704              Thumb instructions.  */
7705
7706           fake_target.flavour = bfd_target_coff_flavour;
7707           fake_bfd.xvec = &fake_target;
7708           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
7709           csym.native = &ce;
7710           csym.symbol.the_bfd = &fake_bfd;
7711           csym.symbol.name = "fake";
7712           asym = (asymbol *) & csym;
7713         }
7714
7715       memaddr = UNMAKE_THUMB_ADDR (memaddr);
7716       info->symbols = &asym;
7717     }
7718   else
7719     info->symbols = NULL;
7720
7721   /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
7722      accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit.  Otherwise,
7723      opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
7724      the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
7725      in default_print_insn.  */
7726   if (exec_bfd != NULL)
7727     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
7728
7729   return default_print_insn (memaddr, info);
7730 }
7731
7732 /* The following define instruction sequences that will cause ARM
7733    cpu's to take an undefined instruction trap.  These are used to
7734    signal a breakpoint to GDB.
7735    
7736    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
7737    modes.  A different instruction is required for each mode.  The ARM
7738    cpu's can also be big or little endian.  Thus four different
7739    instructions are needed to support all cases.
7740    
7741    Note: ARMv4 defines several new instructions that will take the
7742    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
7743    not in fact add the new instructions.  The new undefined
7744    instructions in ARMv4 are all instructions that had no defined
7745    behaviour in earlier chips.  There is no guarantee that they will
7746    raise an exception, but may be treated as NOP's.  In practice, it
7747    may only safe to rely on instructions matching:
7748    
7749    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
7750    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
7751    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
7752    
7753    Even this may only true if the condition predicate is true.  The
7754    following use a condition predicate of ALWAYS so it is always TRUE.
7755    
7756    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
7757    and NetBSD all use a software interrupt rather than an undefined
7758    instruction to force a trap.  This can be handled by by the
7759    abi-specific code during establishment of the gdbarch vector.  */
7760
7761 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
7762 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
7763 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
7764 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
7765
7766 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
7767 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
7768 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
7769 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
7770
7771 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
7772
7773 static int
7774 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7775 {
7776   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7777   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7778
7779   if (arm_pc_is_thumb (gdbarch, *pcptr))
7780     {
7781       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
7782
7783       /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
7784          check whether we are replacing a 32-bit instruction.  */
7785       if (tdep->thumb2_breakpoint != NULL)
7786         {
7787           gdb_byte buf[2];
7788
7789           if (target_read_memory (*pcptr, buf, 2) == 0)
7790             {
7791               unsigned short inst1;
7792
7793               inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
7794               if (thumb_insn_size (inst1) == 4)
7795                 return ARM_BP_KIND_THUMB2;
7796             }
7797         }
7798
7799       return ARM_BP_KIND_THUMB;
7800     }
7801   else
7802     return ARM_BP_KIND_ARM;
7803
7804 }
7805
7806 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
7807
7808 static const gdb_byte *
7809 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7810 {
7811   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7812
7813   switch (kind)
7814     {
7815     case ARM_BP_KIND_ARM:
7816       *size = tdep->arm_breakpoint_size;
7817       return tdep->arm_breakpoint;
7818     case ARM_BP_KIND_THUMB:
7819       *size = tdep->thumb_breakpoint_size;
7820       return tdep->thumb_breakpoint;
7821     case ARM_BP_KIND_THUMB2:
7822       *size = tdep->thumb2_breakpoint_size;
7823       return tdep->thumb2_breakpoint;
7824     default:
7825       gdb_assert_not_reached ("unexpected arm breakpoint kind");
7826     }
7827 }
7828
7829 /* Implement the breakpoint_kind_from_current_state gdbarch method.  */
7830
7831 static int
7832 arm_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
7833                                         struct regcache *regcache,
7834                                         CORE_ADDR *pcptr)
7835 {
7836   gdb_byte buf[4];
7837
7838   /* Check the memory pointed by PC is readable.  */
7839   if (target_read_memory (regcache_read_pc (regcache), buf, 4) == 0)
7840     {
7841       struct arm_get_next_pcs next_pcs_ctx;
7842
7843       arm_get_next_pcs_ctor (&next_pcs_ctx,
7844                              &arm_get_next_pcs_ops,
7845                              gdbarch_byte_order (gdbarch),
7846                              gdbarch_byte_order_for_code (gdbarch),
7847                              0,
7848                              regcache);
7849
7850       std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
7851
7852       /* If MEMADDR is the next instruction of current pc, do the
7853          software single step computation, and get the thumb mode by
7854          the destination address.  */
7855       for (CORE_ADDR pc : next_pcs)
7856         {
7857           if (UNMAKE_THUMB_ADDR (pc) == *pcptr)
7858             {
7859               if (IS_THUMB_ADDR (pc))
7860                 {
7861                   *pcptr = MAKE_THUMB_ADDR (*pcptr);
7862                   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7863                 }
7864               else
7865                 return ARM_BP_KIND_ARM;
7866             }
7867         }
7868     }
7869
7870   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7871 }
7872
7873 /* Extract from an array REGBUF containing the (raw) register state a
7874    function return value of type TYPE, and copy that, in virtual
7875    format, into VALBUF.  */
7876
7877 static void
7878 arm_extract_return_value (struct type *type, struct regcache *regs,
7879                           gdb_byte *valbuf)
7880 {
7881   struct gdbarch *gdbarch = regs->arch ();
7882   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7883
7884   if (TYPE_CODE_FLT == TYPE_CODE (type))
7885     {
7886       switch (gdbarch_tdep (gdbarch)->fp_model)
7887         {
7888         case ARM_FLOAT_FPA:
7889           {
7890             /* The value is in register F0 in internal format.  We need to
7891                extract the raw value and then convert it to the desired
7892                internal type.  */
7893             bfd_byte tmpbuf[FP_REGISTER_SIZE];
7894
7895             regs->cooked_read (ARM_F0_REGNUM, tmpbuf);
7896             target_float_convert (tmpbuf, arm_ext_type (gdbarch),
7897                                   valbuf, type);
7898           }
7899           break;
7900
7901         case ARM_FLOAT_SOFT_FPA:
7902         case ARM_FLOAT_SOFT_VFP:
7903           /* ARM_FLOAT_VFP can arise if this is a variadic function so
7904              not using the VFP ABI code.  */
7905         case ARM_FLOAT_VFP:
7906           regs->cooked_read (ARM_A1_REGNUM, valbuf);
7907           if (TYPE_LENGTH (type) > 4)
7908             regs->cooked_read (ARM_A1_REGNUM + 1, valbuf + INT_REGISTER_SIZE);
7909           break;
7910
7911         default:
7912           internal_error (__FILE__, __LINE__,
7913                           _("arm_extract_return_value: "
7914                             "Floating point model not supported"));
7915           break;
7916         }
7917     }
7918   else if (TYPE_CODE (type) == TYPE_CODE_INT
7919            || TYPE_CODE (type) == TYPE_CODE_CHAR
7920            || TYPE_CODE (type) == TYPE_CODE_BOOL
7921            || TYPE_CODE (type) == TYPE_CODE_PTR
7922            || TYPE_IS_REFERENCE (type)
7923            || TYPE_CODE (type) == TYPE_CODE_ENUM)
7924     {
7925       /* If the type is a plain integer, then the access is
7926          straight-forward.  Otherwise we have to play around a bit
7927          more.  */
7928       int len = TYPE_LENGTH (type);
7929       int regno = ARM_A1_REGNUM;
7930       ULONGEST tmp;
7931
7932       while (len > 0)
7933         {
7934           /* By using store_unsigned_integer we avoid having to do
7935              anything special for small big-endian values.  */
7936           regcache_cooked_read_unsigned (regs, regno++, &tmp);
7937           store_unsigned_integer (valbuf, 
7938                                   (len > INT_REGISTER_SIZE
7939                                    ? INT_REGISTER_SIZE : len),
7940                                   byte_order, tmp);
7941           len -= INT_REGISTER_SIZE;
7942           valbuf += INT_REGISTER_SIZE;
7943         }
7944     }
7945   else
7946     {
7947       /* For a structure or union the behaviour is as if the value had
7948          been stored to word-aligned memory and then loaded into 
7949          registers with 32-bit load instruction(s).  */
7950       int len = TYPE_LENGTH (type);
7951       int regno = ARM_A1_REGNUM;
7952       bfd_byte tmpbuf[INT_REGISTER_SIZE];
7953
7954       while (len > 0)
7955         {
7956           regs->cooked_read (regno++, tmpbuf);
7957           memcpy (valbuf, tmpbuf,
7958                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
7959           len -= INT_REGISTER_SIZE;
7960           valbuf += INT_REGISTER_SIZE;
7961         }
7962     }
7963 }
7964
7965
7966 /* Will a function return an aggregate type in memory or in a
7967    register?  Return 0 if an aggregate type can be returned in a
7968    register, 1 if it must be returned in memory.  */
7969
7970 static int
7971 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7972 {
7973   enum type_code code;
7974
7975   type = check_typedef (type);
7976
7977   /* Simple, non-aggregate types (ie not including vectors and
7978      complex) are always returned in a register (or registers).  */
7979   code = TYPE_CODE (type);
7980   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7981       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7982     return 0;
7983
7984   if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
7985     {
7986       /* Vector values should be returned using ARM registers if they
7987          are not over 16 bytes.  */
7988       return (TYPE_LENGTH (type) > 16);
7989     }
7990
7991   if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
7992     {
7993       /* The AAPCS says all aggregates not larger than a word are returned
7994          in a register.  */
7995       if (TYPE_LENGTH (type) <= INT_REGISTER_SIZE)
7996         return 0;
7997
7998       return 1;
7999     }
8000   else
8001     {
8002       int nRc;
8003
8004       /* All aggregate types that won't fit in a register must be returned
8005          in memory.  */
8006       if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
8007         return 1;
8008
8009       /* In the ARM ABI, "integer" like aggregate types are returned in
8010          registers.  For an aggregate type to be integer like, its size
8011          must be less than or equal to INT_REGISTER_SIZE and the
8012          offset of each addressable subfield must be zero.  Note that bit
8013          fields are not addressable, and all addressable subfields of
8014          unions always start at offset zero.
8015
8016          This function is based on the behaviour of GCC 2.95.1.
8017          See: gcc/arm.c: arm_return_in_memory() for details.
8018
8019          Note: All versions of GCC before GCC 2.95.2 do not set up the
8020          parameters correctly for a function returning the following
8021          structure: struct { float f;}; This should be returned in memory,
8022          not a register.  Richard Earnshaw sent me a patch, but I do not
8023          know of any way to detect if a function like the above has been
8024          compiled with the correct calling convention.  */
8025
8026       /* Assume all other aggregate types can be returned in a register.
8027          Run a check for structures, unions and arrays.  */
8028       nRc = 0;
8029
8030       if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
8031         {
8032           int i;
8033           /* Need to check if this struct/union is "integer" like.  For
8034              this to be true, its size must be less than or equal to
8035              INT_REGISTER_SIZE and the offset of each addressable
8036              subfield must be zero.  Note that bit fields are not
8037              addressable, and unions always start at offset zero.  If any
8038              of the subfields is a floating point type, the struct/union
8039              cannot be an integer type.  */
8040
8041           /* For each field in the object, check:
8042              1) Is it FP? --> yes, nRc = 1;
8043              2) Is it addressable (bitpos != 0) and
8044              not packed (bitsize == 0)?
8045              --> yes, nRc = 1
8046           */
8047
8048           for (i = 0; i < TYPE_NFIELDS (type); i++)
8049             {
8050               enum type_code field_type_code;
8051
8052               field_type_code
8053                 = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
8054                                                              i)));
8055
8056               /* Is it a floating point type field?  */
8057               if (field_type_code == TYPE_CODE_FLT)
8058                 {
8059                   nRc = 1;
8060                   break;
8061                 }
8062
8063               /* If bitpos != 0, then we have to care about it.  */
8064               if (TYPE_FIELD_BITPOS (type, i) != 0)
8065                 {
8066                   /* Bitfields are not addressable.  If the field bitsize is 
8067                      zero, then the field is not packed.  Hence it cannot be
8068                      a bitfield or any other packed type.  */
8069                   if (TYPE_FIELD_BITSIZE (type, i) == 0)
8070                     {
8071                       nRc = 1;
8072                       break;
8073                     }
8074                 }
8075             }
8076         }
8077
8078       return nRc;
8079     }
8080 }
8081
8082 /* Write into appropriate registers a function return value of type
8083    TYPE, given in virtual format.  */
8084
8085 static void
8086 arm_store_return_value (struct type *type, struct regcache *regs,
8087                         const gdb_byte *valbuf)
8088 {
8089   struct gdbarch *gdbarch = regs->arch ();
8090   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8091
8092   if (TYPE_CODE (type) == TYPE_CODE_FLT)
8093     {
8094       gdb_byte buf[FP_REGISTER_SIZE];
8095
8096       switch (gdbarch_tdep (gdbarch)->fp_model)
8097         {
8098         case ARM_FLOAT_FPA:
8099
8100           target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8101           regs->cooked_write (ARM_F0_REGNUM, buf);
8102           break;
8103
8104         case ARM_FLOAT_SOFT_FPA:
8105         case ARM_FLOAT_SOFT_VFP:
8106           /* ARM_FLOAT_VFP can arise if this is a variadic function so
8107              not using the VFP ABI code.  */
8108         case ARM_FLOAT_VFP:
8109           regs->cooked_write (ARM_A1_REGNUM, valbuf);
8110           if (TYPE_LENGTH (type) > 4)
8111             regs->cooked_write (ARM_A1_REGNUM + 1, valbuf + INT_REGISTER_SIZE);
8112           break;
8113
8114         default:
8115           internal_error (__FILE__, __LINE__,
8116                           _("arm_store_return_value: Floating "
8117                             "point model not supported"));
8118           break;
8119         }
8120     }
8121   else if (TYPE_CODE (type) == TYPE_CODE_INT
8122            || TYPE_CODE (type) == TYPE_CODE_CHAR
8123            || TYPE_CODE (type) == TYPE_CODE_BOOL
8124            || TYPE_CODE (type) == TYPE_CODE_PTR
8125            || TYPE_IS_REFERENCE (type)
8126            || TYPE_CODE (type) == TYPE_CODE_ENUM)
8127     {
8128       if (TYPE_LENGTH (type) <= 4)
8129         {
8130           /* Values of one word or less are zero/sign-extended and
8131              returned in r0.  */
8132           bfd_byte tmpbuf[INT_REGISTER_SIZE];
8133           LONGEST val = unpack_long (type, valbuf);
8134
8135           store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
8136           regs->cooked_write (ARM_A1_REGNUM, tmpbuf);
8137         }
8138       else
8139         {
8140           /* Integral values greater than one word are stored in consecutive
8141              registers starting with r0.  This will always be a multiple of
8142              the regiser size.  */
8143           int len = TYPE_LENGTH (type);
8144           int regno = ARM_A1_REGNUM;
8145
8146           while (len > 0)
8147             {
8148               regs->cooked_write (regno++, valbuf);
8149               len -= INT_REGISTER_SIZE;
8150               valbuf += INT_REGISTER_SIZE;
8151             }
8152         }
8153     }
8154   else
8155     {
8156       /* For a structure or union the behaviour is as if the value had
8157          been stored to word-aligned memory and then loaded into 
8158          registers with 32-bit load instruction(s).  */
8159       int len = TYPE_LENGTH (type);
8160       int regno = ARM_A1_REGNUM;
8161       bfd_byte tmpbuf[INT_REGISTER_SIZE];
8162
8163       while (len > 0)
8164         {
8165           memcpy (tmpbuf, valbuf,
8166                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8167           regs->cooked_write (regno++, tmpbuf);
8168           len -= INT_REGISTER_SIZE;
8169           valbuf += INT_REGISTER_SIZE;
8170         }
8171     }
8172 }
8173
8174
8175 /* Handle function return values.  */
8176
8177 static enum return_value_convention
8178 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8179                   struct type *valtype, struct regcache *regcache,
8180                   gdb_byte *readbuf, const gdb_byte *writebuf)
8181 {
8182   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8183   struct type *func_type = function ? value_type (function) : NULL;
8184   enum arm_vfp_cprc_base_type vfp_base_type;
8185   int vfp_base_count;
8186
8187   if (arm_vfp_abi_for_function (gdbarch, func_type)
8188       && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8189     {
8190       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8191       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8192       int i;
8193       for (i = 0; i < vfp_base_count; i++)
8194         {
8195           if (reg_char == 'q')
8196             {
8197               if (writebuf)
8198                 arm_neon_quad_write (gdbarch, regcache, i,
8199                                      writebuf + i * unit_length);
8200
8201               if (readbuf)
8202                 arm_neon_quad_read (gdbarch, regcache, i,
8203                                     readbuf + i * unit_length);
8204             }
8205           else
8206             {
8207               char name_buf[4];
8208               int regnum;
8209
8210               xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8211               regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8212                                                     strlen (name_buf));
8213               if (writebuf)
8214                 regcache->cooked_write (regnum, writebuf + i * unit_length);
8215               if (readbuf)
8216                 regcache->cooked_read (regnum, readbuf + i * unit_length);
8217             }
8218         }
8219       return RETURN_VALUE_REGISTER_CONVENTION;
8220     }
8221
8222   if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
8223       || TYPE_CODE (valtype) == TYPE_CODE_UNION
8224       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
8225     {
8226       if (tdep->struct_return == pcc_struct_return
8227           || arm_return_in_memory (gdbarch, valtype))
8228         return RETURN_VALUE_STRUCT_CONVENTION;
8229     }
8230   else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
8231     {
8232       if (arm_return_in_memory (gdbarch, valtype))
8233         return RETURN_VALUE_STRUCT_CONVENTION;
8234     }
8235
8236   if (writebuf)
8237     arm_store_return_value (valtype, regcache, writebuf);
8238
8239   if (readbuf)
8240     arm_extract_return_value (valtype, regcache, readbuf);
8241
8242   return RETURN_VALUE_REGISTER_CONVENTION;
8243 }
8244
8245
8246 static int
8247 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8248 {
8249   struct gdbarch *gdbarch = get_frame_arch (frame);
8250   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8251   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8252   CORE_ADDR jb_addr;
8253   gdb_byte buf[INT_REGISTER_SIZE];
8254   
8255   jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8256
8257   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8258                           INT_REGISTER_SIZE))
8259     return 0;
8260
8261   *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
8262   return 1;
8263 }
8264
8265 /* Recognize GCC and GNU ld's trampolines.  If we are in a trampoline,
8266    return the target PC.  Otherwise return 0.  */
8267
8268 CORE_ADDR
8269 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8270 {
8271   const char *name;
8272   int namelen;
8273   CORE_ADDR start_addr;
8274
8275   /* Find the starting address and name of the function containing the PC.  */
8276   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8277     {
8278       /* Trampoline 'bx reg' doesn't belong to any functions.  Do the
8279          check here.  */
8280       start_addr = arm_skip_bx_reg (frame, pc);
8281       if (start_addr != 0)
8282         return start_addr;
8283
8284       return 0;
8285     }
8286
8287   /* If PC is in a Thumb call or return stub, return the address of the
8288      target PC, which is in a register.  The thunk functions are called
8289      _call_via_xx, where x is the register name.  The possible names
8290      are r0-r9, sl, fp, ip, sp, and lr.  ARM RealView has similar
8291      functions, named __ARM_call_via_r[0-7].  */
8292   if (startswith (name, "_call_via_")
8293       || startswith (name, "__ARM_call_via_"))
8294     {
8295       /* Use the name suffix to determine which register contains the
8296          target PC.  */
8297       static const char *table[15] =
8298       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8299        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8300       };
8301       int regno;
8302       int offset = strlen (name) - 2;
8303
8304       for (regno = 0; regno <= 14; regno++)
8305         if (strcmp (&name[offset], table[regno]) == 0)
8306           return get_frame_register_unsigned (frame, regno);
8307     }
8308
8309   /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8310      non-interworking calls to foo.  We could decode the stubs
8311      to find the target but it's easier to use the symbol table.  */
8312   namelen = strlen (name);
8313   if (name[0] == '_' && name[1] == '_'
8314       && ((namelen > 2 + strlen ("_from_thumb")
8315            && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8316           || (namelen > 2 + strlen ("_from_arm")
8317               && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8318     {
8319       char *target_name;
8320       int target_len = namelen - 2;
8321       struct bound_minimal_symbol minsym;
8322       struct objfile *objfile;
8323       struct obj_section *sec;
8324
8325       if (name[namelen - 1] == 'b')
8326         target_len -= strlen ("_from_thumb");
8327       else
8328         target_len -= strlen ("_from_arm");
8329
8330       target_name = (char *) alloca (target_len + 1);
8331       memcpy (target_name, name + 2, target_len);
8332       target_name[target_len] = '\0';
8333
8334       sec = find_pc_section (pc);
8335       objfile = (sec == NULL) ? NULL : sec->objfile;
8336       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8337       if (minsym.minsym != NULL)
8338         return BMSYMBOL_VALUE_ADDRESS (minsym);
8339       else
8340         return 0;
8341     }
8342
8343   return 0;                     /* not a stub */
8344 }
8345
8346 static void
8347 set_arm_command (const char *args, int from_tty)
8348 {
8349   printf_unfiltered (_("\
8350 \"set arm\" must be followed by an apporpriate subcommand.\n"));
8351   help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
8352 }
8353
8354 static void
8355 show_arm_command (const char *args, int from_tty)
8356 {
8357   cmd_show_list (showarmcmdlist, from_tty, "");
8358 }
8359
8360 static void
8361 arm_update_current_architecture (void)
8362 {
8363   struct gdbarch_info info;
8364
8365   /* If the current architecture is not ARM, we have nothing to do.  */
8366   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8367     return;
8368
8369   /* Update the architecture.  */
8370   gdbarch_info_init (&info);
8371
8372   if (!gdbarch_update_p (info))
8373     internal_error (__FILE__, __LINE__, _("could not update architecture"));
8374 }
8375
8376 static void
8377 set_fp_model_sfunc (const char *args, int from_tty,
8378                     struct cmd_list_element *c)
8379 {
8380   int fp_model;
8381
8382   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8383     if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8384       {
8385         arm_fp_model = (enum arm_float_model) fp_model;
8386         break;
8387       }
8388
8389   if (fp_model == ARM_FLOAT_LAST)
8390     internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8391                     current_fp_model);
8392
8393   arm_update_current_architecture ();
8394 }
8395
8396 static void
8397 show_fp_model (struct ui_file *file, int from_tty,
8398                struct cmd_list_element *c, const char *value)
8399 {
8400   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8401
8402   if (arm_fp_model == ARM_FLOAT_AUTO
8403       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8404     fprintf_filtered (file, _("\
8405 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8406                       fp_model_strings[tdep->fp_model]);
8407   else
8408     fprintf_filtered (file, _("\
8409 The current ARM floating point model is \"%s\".\n"),
8410                       fp_model_strings[arm_fp_model]);
8411 }
8412
8413 static void
8414 arm_set_abi (const char *args, int from_tty,
8415              struct cmd_list_element *c)
8416 {
8417   int arm_abi;
8418
8419   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8420     if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8421       {
8422         arm_abi_global = (enum arm_abi_kind) arm_abi;
8423         break;
8424       }
8425
8426   if (arm_abi == ARM_ABI_LAST)
8427     internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8428                     arm_abi_string);
8429
8430   arm_update_current_architecture ();
8431 }
8432
8433 static void
8434 arm_show_abi (struct ui_file *file, int from_tty,
8435              struct cmd_list_element *c, const char *value)
8436 {
8437   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8438
8439   if (arm_abi_global == ARM_ABI_AUTO
8440       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8441     fprintf_filtered (file, _("\
8442 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8443                       arm_abi_strings[tdep->arm_abi]);
8444   else
8445     fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8446                       arm_abi_string);
8447 }
8448
8449 static void
8450 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8451                         struct cmd_list_element *c, const char *value)
8452 {
8453   fprintf_filtered (file,
8454                     _("The current execution mode assumed "
8455                       "(when symbols are unavailable) is \"%s\".\n"),
8456                     arm_fallback_mode_string);
8457 }
8458
8459 static void
8460 arm_show_force_mode (struct ui_file *file, int from_tty,
8461                      struct cmd_list_element *c, const char *value)
8462 {
8463   fprintf_filtered (file,
8464                     _("The current execution mode assumed "
8465                       "(even when symbols are available) is \"%s\".\n"),
8466                     arm_force_mode_string);
8467 }
8468
8469 /* If the user changes the register disassembly style used for info
8470    register and other commands, we have to also switch the style used
8471    in opcodes for disassembly output.  This function is run in the "set
8472    arm disassembly" command, and does that.  */
8473
8474 static void
8475 set_disassembly_style_sfunc (const char *args, int from_tty,
8476                              struct cmd_list_element *c)
8477 {
8478   /* Convert the short style name into the long style name (eg, reg-names-*)
8479      before calling the generic set_disassembler_options() function.  */
8480   std::string long_name = std::string ("reg-names-") + disassembly_style;
8481   set_disassembler_options (&long_name[0]);
8482 }
8483
8484 static void
8485 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8486                               struct cmd_list_element *c, const char *value)
8487 {
8488   struct gdbarch *gdbarch = get_current_arch ();
8489   char *options = get_disassembler_options (gdbarch);
8490   const char *style = "";
8491   int len = 0;
8492   const char *opt;
8493
8494   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8495     if (CONST_STRNEQ (opt, "reg-names-"))
8496       {
8497         style = &opt[strlen ("reg-names-")];
8498         len = strcspn (style, ",");
8499       }
8500
8501   fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8502 }
8503 \f
8504 /* Return the ARM register name corresponding to register I.  */
8505 static const char *
8506 arm_register_name (struct gdbarch *gdbarch, int i)
8507 {
8508   const int num_regs = gdbarch_num_regs (gdbarch);
8509
8510   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8511       && i >= num_regs && i < num_regs + 32)
8512     {
8513       static const char *const vfp_pseudo_names[] = {
8514         "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8515         "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8516         "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8517         "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8518       };
8519
8520       return vfp_pseudo_names[i - num_regs];
8521     }
8522
8523   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8524       && i >= num_regs + 32 && i < num_regs + 32 + 16)
8525     {
8526       static const char *const neon_pseudo_names[] = {
8527         "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8528         "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8529       };
8530
8531       return neon_pseudo_names[i - num_regs - 32];
8532     }
8533
8534   if (i >= ARRAY_SIZE (arm_register_names))
8535     /* These registers are only supported on targets which supply
8536        an XML description.  */
8537     return "";
8538
8539   return arm_register_names[i];
8540 }
8541
8542 /* Test whether the coff symbol specific value corresponds to a Thumb
8543    function.  */
8544
8545 static int
8546 coff_sym_is_thumb (int val)
8547 {
8548   return (val == C_THUMBEXT
8549           || val == C_THUMBSTAT
8550           || val == C_THUMBEXTFUNC
8551           || val == C_THUMBSTATFUNC
8552           || val == C_THUMBLABEL);
8553 }
8554
8555 /* arm_coff_make_msymbol_special()
8556    arm_elf_make_msymbol_special()
8557    
8558    These functions test whether the COFF or ELF symbol corresponds to
8559    an address in thumb code, and set a "special" bit in a minimal
8560    symbol to indicate that it does.  */
8561    
8562 static void
8563 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8564 {
8565   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8566
8567   if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8568       == ST_BRANCH_TO_THUMB)
8569     MSYMBOL_SET_SPECIAL (msym);
8570 }
8571
8572 static void
8573 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8574 {
8575   if (coff_sym_is_thumb (val))
8576     MSYMBOL_SET_SPECIAL (msym);
8577 }
8578
8579 static void
8580 arm_objfile_data_free (struct objfile *objfile, void *arg)
8581 {
8582   struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
8583   unsigned int i;
8584
8585   for (i = 0; i < objfile->obfd->section_count; i++)
8586     VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
8587 }
8588
8589 static void
8590 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8591                            asymbol *sym)
8592 {
8593   const char *name = bfd_asymbol_name (sym);
8594   struct arm_per_objfile *data;
8595   VEC(arm_mapping_symbol_s) **map_p;
8596   struct arm_mapping_symbol new_map_sym;
8597
8598   gdb_assert (name[0] == '$');
8599   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8600     return;
8601
8602   data = (struct arm_per_objfile *) objfile_data (objfile,
8603                                                   arm_objfile_data_key);
8604   if (data == NULL)
8605     {
8606       data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
8607                              struct arm_per_objfile);
8608       set_objfile_data (objfile, arm_objfile_data_key, data);
8609       data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
8610                                            objfile->obfd->section_count,
8611                                            VEC(arm_mapping_symbol_s) *);
8612     }
8613   map_p = &data->section_maps[bfd_get_section (sym)->index];
8614
8615   new_map_sym.value = sym->value;
8616   new_map_sym.type = name[1];
8617
8618   /* Assume that most mapping symbols appear in order of increasing
8619      value.  If they were randomly distributed, it would be faster to
8620      always push here and then sort at first use.  */
8621   if (!VEC_empty (arm_mapping_symbol_s, *map_p))
8622     {
8623       struct arm_mapping_symbol *prev_map_sym;
8624
8625       prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
8626       if (prev_map_sym->value >= sym->value)
8627         {
8628           unsigned int idx;
8629           idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
8630                                  arm_compare_mapping_symbols);
8631           VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
8632           return;
8633         }
8634     }
8635
8636   VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
8637 }
8638
8639 static void
8640 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8641 {
8642   struct gdbarch *gdbarch = regcache->arch ();
8643   regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8644
8645   /* If necessary, set the T bit.  */
8646   if (arm_apcs_32)
8647     {
8648       ULONGEST val, t_bit;
8649       regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8650       t_bit = arm_psr_thumb_bit (gdbarch);
8651       if (arm_pc_is_thumb (gdbarch, pc))
8652         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8653                                         val | t_bit);
8654       else
8655         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8656                                         val & ~t_bit);
8657     }
8658 }
8659
8660 /* Read the contents of a NEON quad register, by reading from two
8661    double registers.  This is used to implement the quad pseudo
8662    registers, and for argument passing in case the quad registers are
8663    missing; vectors are passed in quad registers when using the VFP
8664    ABI, even if a NEON unit is not present.  REGNUM is the index of
8665    the quad register, in [0, 15].  */
8666
8667 static enum register_status
8668 arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8669                     int regnum, gdb_byte *buf)
8670 {
8671   char name_buf[4];
8672   gdb_byte reg_buf[8];
8673   int offset, double_regnum;
8674   enum register_status status;
8675
8676   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8677   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8678                                                strlen (name_buf));
8679
8680   /* d0 is always the least significant half of q0.  */
8681   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8682     offset = 8;
8683   else
8684     offset = 0;
8685
8686   status = regcache->raw_read (double_regnum, reg_buf);
8687   if (status != REG_VALID)
8688     return status;
8689   memcpy (buf + offset, reg_buf, 8);
8690
8691   offset = 8 - offset;
8692   status = regcache->raw_read (double_regnum + 1, reg_buf);
8693   if (status != REG_VALID)
8694     return status;
8695   memcpy (buf + offset, reg_buf, 8);
8696
8697   return REG_VALID;
8698 }
8699
8700 static enum register_status
8701 arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8702                  int regnum, gdb_byte *buf)
8703 {
8704   const int num_regs = gdbarch_num_regs (gdbarch);
8705   char name_buf[4];
8706   gdb_byte reg_buf[8];
8707   int offset, double_regnum;
8708
8709   gdb_assert (regnum >= num_regs);
8710   regnum -= num_regs;
8711
8712   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8713     /* Quad-precision register.  */
8714     return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8715   else
8716     {
8717       enum register_status status;
8718
8719       /* Single-precision register.  */
8720       gdb_assert (regnum < 32);
8721
8722       /* s0 is always the least significant half of d0.  */
8723       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8724         offset = (regnum & 1) ? 0 : 4;
8725       else
8726         offset = (regnum & 1) ? 4 : 0;
8727
8728       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8729       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8730                                                    strlen (name_buf));
8731
8732       status = regcache->raw_read (double_regnum, reg_buf);
8733       if (status == REG_VALID)
8734         memcpy (buf, reg_buf + offset, 4);
8735       return status;
8736     }
8737 }
8738
8739 /* Store the contents of BUF to a NEON quad register, by writing to
8740    two double registers.  This is used to implement the quad pseudo
8741    registers, and for argument passing in case the quad registers are
8742    missing; vectors are passed in quad registers when using the VFP
8743    ABI, even if a NEON unit is not present.  REGNUM is the index
8744    of the quad register, in [0, 15].  */
8745
8746 static void
8747 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8748                      int regnum, const gdb_byte *buf)
8749 {
8750   char name_buf[4];
8751   int offset, double_regnum;
8752
8753   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8754   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8755                                                strlen (name_buf));
8756
8757   /* d0 is always the least significant half of q0.  */
8758   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8759     offset = 8;
8760   else
8761     offset = 0;
8762
8763   regcache->raw_write (double_regnum, buf + offset);
8764   offset = 8 - offset;
8765   regcache->raw_write (double_regnum + 1, buf + offset);
8766 }
8767
8768 static void
8769 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8770                   int regnum, const gdb_byte *buf)
8771 {
8772   const int num_regs = gdbarch_num_regs (gdbarch);
8773   char name_buf[4];
8774   gdb_byte reg_buf[8];
8775   int offset, double_regnum;
8776
8777   gdb_assert (regnum >= num_regs);
8778   regnum -= num_regs;
8779
8780   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8781     /* Quad-precision register.  */
8782     arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8783   else
8784     {
8785       /* Single-precision register.  */
8786       gdb_assert (regnum < 32);
8787
8788       /* s0 is always the least significant half of d0.  */
8789       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8790         offset = (regnum & 1) ? 0 : 4;
8791       else
8792         offset = (regnum & 1) ? 4 : 0;
8793
8794       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8795       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8796                                                    strlen (name_buf));
8797
8798       regcache->raw_read (double_regnum, reg_buf);
8799       memcpy (reg_buf + offset, buf, 4);
8800       regcache->raw_write (double_regnum, reg_buf);
8801     }
8802 }
8803
8804 static struct value *
8805 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8806 {
8807   const int *reg_p = (const int *) baton;
8808   return value_of_register (*reg_p, frame);
8809 }
8810 \f
8811 static enum gdb_osabi
8812 arm_elf_osabi_sniffer (bfd *abfd)
8813 {
8814   unsigned int elfosabi;
8815   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8816
8817   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8818
8819   if (elfosabi == ELFOSABI_ARM)
8820     /* GNU tools use this value.  Check note sections in this case,
8821        as well.  */
8822     bfd_map_over_sections (abfd,
8823                            generic_elf_osabi_sniff_abi_tag_sections, 
8824                            &osabi);
8825
8826   /* Anything else will be handled by the generic ELF sniffer.  */
8827   return osabi;
8828 }
8829
8830 static int
8831 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8832                           struct reggroup *group)
8833 {
8834   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
8835      this, FPS register belongs to save_regroup, restore_reggroup, and
8836      all_reggroup, of course.  */
8837   if (regnum == ARM_FPS_REGNUM)
8838     return (group == float_reggroup
8839             || group == save_reggroup
8840             || group == restore_reggroup
8841             || group == all_reggroup);
8842   else
8843     return default_register_reggroup_p (gdbarch, regnum, group);
8844 }
8845
8846 \f
8847 /* For backward-compatibility we allow two 'g' packet lengths with
8848    the remote protocol depending on whether FPA registers are
8849    supplied.  M-profile targets do not have FPA registers, but some
8850    stubs already exist in the wild which use a 'g' packet which
8851    supplies them albeit with dummy values.  The packet format which
8852    includes FPA registers should be considered deprecated for
8853    M-profile targets.  */
8854
8855 static void
8856 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8857 {
8858   if (gdbarch_tdep (gdbarch)->is_m)
8859     {
8860       /* If we know from the executable this is an M-profile target,
8861          cater for remote targets whose register set layout is the
8862          same as the FPA layout.  */
8863       register_remote_g_packet_guess (gdbarch,
8864                                       /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
8865                                       (16 * INT_REGISTER_SIZE)
8866                                       + (8 * FP_REGISTER_SIZE)
8867                                       + (2 * INT_REGISTER_SIZE),
8868                                       tdesc_arm_with_m_fpa_layout);
8869
8870       /* The regular M-profile layout.  */
8871       register_remote_g_packet_guess (gdbarch,
8872                                       /* r0-r12,sp,lr,pc; xpsr */
8873                                       (16 * INT_REGISTER_SIZE)
8874                                       + INT_REGISTER_SIZE,
8875                                       tdesc_arm_with_m);
8876
8877       /* M-profile plus M4F VFP.  */
8878       register_remote_g_packet_guess (gdbarch,
8879                                       /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
8880                                       (16 * INT_REGISTER_SIZE)
8881                                       + (16 * VFP_REGISTER_SIZE)
8882                                       + (2 * INT_REGISTER_SIZE),
8883                                       tdesc_arm_with_m_vfp_d16);
8884     }
8885
8886   /* Otherwise we don't have a useful guess.  */
8887 }
8888
8889 /* Implement the code_of_frame_writable gdbarch method.  */
8890
8891 static int
8892 arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
8893 {
8894   if (gdbarch_tdep (gdbarch)->is_m
8895       && get_frame_type (frame) == SIGTRAMP_FRAME)
8896     {
8897       /* M-profile exception frames return to some magic PCs, where
8898          isn't writable at all.  */
8899       return 0;
8900     }
8901   else
8902     return 1;
8903 }
8904
8905 \f
8906 /* Initialize the current architecture based on INFO.  If possible,
8907    re-use an architecture from ARCHES, which is a list of
8908    architectures already created during this debugging session.
8909
8910    Called e.g. at program startup, when reading a core file, and when
8911    reading a binary file.  */
8912
8913 static struct gdbarch *
8914 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8915 {
8916   struct gdbarch_tdep *tdep;
8917   struct gdbarch *gdbarch;
8918   struct gdbarch_list *best_arch;
8919   enum arm_abi_kind arm_abi = arm_abi_global;
8920   enum arm_float_model fp_model = arm_fp_model;
8921   struct tdesc_arch_data *tdesc_data = NULL;
8922   int i, is_m = 0;
8923   int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
8924   int have_wmmx_registers = 0;
8925   int have_neon = 0;
8926   int have_fpa_registers = 1;
8927   const struct target_desc *tdesc = info.target_desc;
8928
8929   /* If we have an object to base this architecture on, try to determine
8930      its ABI.  */
8931
8932   if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8933     {
8934       int ei_osabi, e_flags;
8935
8936       switch (bfd_get_flavour (info.abfd))
8937         {
8938         case bfd_target_coff_flavour:
8939           /* Assume it's an old APCS-style ABI.  */
8940           /* XXX WinCE?  */
8941           arm_abi = ARM_ABI_APCS;
8942           break;
8943
8944         case bfd_target_elf_flavour:
8945           ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8946           e_flags = elf_elfheader (info.abfd)->e_flags;
8947
8948           if (ei_osabi == ELFOSABI_ARM)
8949             {
8950               /* GNU tools used to use this value, but do not for EABI
8951                  objects.  There's nowhere to tag an EABI version
8952                  anyway, so assume APCS.  */
8953               arm_abi = ARM_ABI_APCS;
8954             }
8955           else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8956             {
8957               int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8958               int attr_arch, attr_profile;
8959
8960               switch (eabi_ver)
8961                 {
8962                 case EF_ARM_EABI_UNKNOWN:
8963                   /* Assume GNU tools.  */
8964                   arm_abi = ARM_ABI_APCS;
8965                   break;
8966
8967                 case EF_ARM_EABI_VER4:
8968                 case EF_ARM_EABI_VER5:
8969                   arm_abi = ARM_ABI_AAPCS;
8970                   /* EABI binaries default to VFP float ordering.
8971                      They may also contain build attributes that can
8972                      be used to identify if the VFP argument-passing
8973                      ABI is in use.  */
8974                   if (fp_model == ARM_FLOAT_AUTO)
8975                     {
8976 #ifdef HAVE_ELF
8977                       switch (bfd_elf_get_obj_attr_int (info.abfd,
8978                                                         OBJ_ATTR_PROC,
8979                                                         Tag_ABI_VFP_args))
8980                         {
8981                         case AEABI_VFP_args_base:
8982                           /* "The user intended FP parameter/result
8983                              passing to conform to AAPCS, base
8984                              variant".  */
8985                           fp_model = ARM_FLOAT_SOFT_VFP;
8986                           break;
8987                         case AEABI_VFP_args_vfp:
8988                           /* "The user intended FP parameter/result
8989                              passing to conform to AAPCS, VFP
8990                              variant".  */
8991                           fp_model = ARM_FLOAT_VFP;
8992                           break;
8993                         case AEABI_VFP_args_toolchain:
8994                           /* "The user intended FP parameter/result
8995                              passing to conform to tool chain-specific
8996                              conventions" - we don't know any such
8997                              conventions, so leave it as "auto".  */
8998                           break;
8999                         case AEABI_VFP_args_compatible:
9000                           /* "Code is compatible with both the base
9001                              and VFP variants; the user did not permit
9002                              non-variadic functions to pass FP
9003                              parameters/results" - leave it as
9004                              "auto".  */
9005                           break;
9006                         default:
9007                           /* Attribute value not mentioned in the
9008                              November 2012 ABI, so leave it as
9009                              "auto".  */
9010                           break;
9011                         }
9012 #else
9013                       fp_model = ARM_FLOAT_SOFT_VFP;
9014 #endif
9015                     }
9016                   break;
9017
9018                 default:
9019                   /* Leave it as "auto".  */
9020                   warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
9021                   break;
9022                 }
9023
9024 #ifdef HAVE_ELF
9025               /* Detect M-profile programs.  This only works if the
9026                  executable file includes build attributes; GCC does
9027                  copy them to the executable, but e.g. RealView does
9028                  not.  */
9029               attr_arch = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9030                                                     Tag_CPU_arch);
9031               attr_profile = bfd_elf_get_obj_attr_int (info.abfd,
9032                                                        OBJ_ATTR_PROC,
9033                                                        Tag_CPU_arch_profile);
9034               /* GCC specifies the profile for v6-M; RealView only
9035                  specifies the profile for architectures starting with
9036                  V7 (as opposed to architectures with a tag
9037                  numerically greater than TAG_CPU_ARCH_V7).  */
9038               if (!tdesc_has_registers (tdesc)
9039                   && (attr_arch == TAG_CPU_ARCH_V6_M
9040                       || attr_arch == TAG_CPU_ARCH_V6S_M
9041                       || attr_profile == 'M'))
9042                 is_m = 1;
9043 #endif
9044             }
9045
9046           if (fp_model == ARM_FLOAT_AUTO)
9047             {
9048               int e_flags = elf_elfheader (info.abfd)->e_flags;
9049
9050               switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
9051                 {
9052                 case 0:
9053                   /* Leave it as "auto".  Strictly speaking this case
9054                      means FPA, but almost nobody uses that now, and
9055                      many toolchains fail to set the appropriate bits
9056                      for the floating-point model they use.  */
9057                   break;
9058                 case EF_ARM_SOFT_FLOAT:
9059                   fp_model = ARM_FLOAT_SOFT_FPA;
9060                   break;
9061                 case EF_ARM_VFP_FLOAT:
9062                   fp_model = ARM_FLOAT_VFP;
9063                   break;
9064                 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9065                   fp_model = ARM_FLOAT_SOFT_VFP;
9066                   break;
9067                 }
9068             }
9069
9070           if (e_flags & EF_ARM_BE8)
9071             info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9072
9073           break;
9074
9075         default:
9076           /* Leave it as "auto".  */
9077           break;
9078         }
9079     }
9080
9081   /* Check any target description for validity.  */
9082   if (tdesc_has_registers (tdesc))
9083     {
9084       /* For most registers we require GDB's default names; but also allow
9085          the numeric names for sp / lr / pc, as a convenience.  */
9086       static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9087       static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9088       static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9089
9090       const struct tdesc_feature *feature;
9091       int valid_p;
9092
9093       feature = tdesc_find_feature (tdesc,
9094                                     "org.gnu.gdb.arm.core");
9095       if (feature == NULL)
9096         {
9097           feature = tdesc_find_feature (tdesc,
9098                                         "org.gnu.gdb.arm.m-profile");
9099           if (feature == NULL)
9100             return NULL;
9101           else
9102             is_m = 1;
9103         }
9104
9105       tdesc_data = tdesc_data_alloc ();
9106
9107       valid_p = 1;
9108       for (i = 0; i < ARM_SP_REGNUM; i++)
9109         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9110                                             arm_register_names[i]);
9111       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9112                                                   ARM_SP_REGNUM,
9113                                                   arm_sp_names);
9114       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9115                                                   ARM_LR_REGNUM,
9116                                                   arm_lr_names);
9117       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9118                                                   ARM_PC_REGNUM,
9119                                                   arm_pc_names);
9120       if (is_m)
9121         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9122                                             ARM_PS_REGNUM, "xpsr");
9123       else
9124         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9125                                             ARM_PS_REGNUM, "cpsr");
9126
9127       if (!valid_p)
9128         {
9129           tdesc_data_cleanup (tdesc_data);
9130           return NULL;
9131         }
9132
9133       feature = tdesc_find_feature (tdesc,
9134                                     "org.gnu.gdb.arm.fpa");
9135       if (feature != NULL)
9136         {
9137           valid_p = 1;
9138           for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9139             valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9140                                                 arm_register_names[i]);
9141           if (!valid_p)
9142             {
9143               tdesc_data_cleanup (tdesc_data);
9144               return NULL;
9145             }
9146         }
9147       else
9148         have_fpa_registers = 0;
9149
9150       feature = tdesc_find_feature (tdesc,
9151                                     "org.gnu.gdb.xscale.iwmmxt");
9152       if (feature != NULL)
9153         {
9154           static const char *const iwmmxt_names[] = {
9155             "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9156             "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9157             "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9158             "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9159           };
9160
9161           valid_p = 1;
9162           for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9163             valid_p
9164               &= tdesc_numbered_register (feature, tdesc_data, i,
9165                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9166
9167           /* Check for the control registers, but do not fail if they
9168              are missing.  */
9169           for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9170             tdesc_numbered_register (feature, tdesc_data, i,
9171                                      iwmmxt_names[i - ARM_WR0_REGNUM]);
9172
9173           for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9174             valid_p
9175               &= tdesc_numbered_register (feature, tdesc_data, i,
9176                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9177
9178           if (!valid_p)
9179             {
9180               tdesc_data_cleanup (tdesc_data);
9181               return NULL;
9182             }
9183
9184           have_wmmx_registers = 1;
9185         }
9186
9187       /* If we have a VFP unit, check whether the single precision registers
9188          are present.  If not, then we will synthesize them as pseudo
9189          registers.  */
9190       feature = tdesc_find_feature (tdesc,
9191                                     "org.gnu.gdb.arm.vfp");
9192       if (feature != NULL)
9193         {
9194           static const char *const vfp_double_names[] = {
9195             "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9196             "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9197             "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9198             "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9199           };
9200
9201           /* Require the double precision registers.  There must be either
9202              16 or 32.  */
9203           valid_p = 1;
9204           for (i = 0; i < 32; i++)
9205             {
9206               valid_p &= tdesc_numbered_register (feature, tdesc_data,
9207                                                   ARM_D0_REGNUM + i,
9208                                                   vfp_double_names[i]);
9209               if (!valid_p)
9210                 break;
9211             }
9212           if (!valid_p && i == 16)
9213             valid_p = 1;
9214
9215           /* Also require FPSCR.  */
9216           valid_p &= tdesc_numbered_register (feature, tdesc_data,
9217                                               ARM_FPSCR_REGNUM, "fpscr");
9218           if (!valid_p)
9219             {
9220               tdesc_data_cleanup (tdesc_data);
9221               return NULL;
9222             }
9223
9224           if (tdesc_unnumbered_register (feature, "s0") == 0)
9225             have_vfp_pseudos = 1;
9226
9227           vfp_register_count = i;
9228
9229           /* If we have VFP, also check for NEON.  The architecture allows
9230              NEON without VFP (integer vector operations only), but GDB
9231              does not support that.  */
9232           feature = tdesc_find_feature (tdesc,
9233                                         "org.gnu.gdb.arm.neon");
9234           if (feature != NULL)
9235             {
9236               /* NEON requires 32 double-precision registers.  */
9237               if (i != 32)
9238                 {
9239                   tdesc_data_cleanup (tdesc_data);
9240                   return NULL;
9241                 }
9242
9243               /* If there are quad registers defined by the stub, use
9244                  their type; otherwise (normally) provide them with
9245                  the default type.  */
9246               if (tdesc_unnumbered_register (feature, "q0") == 0)
9247                 have_neon_pseudos = 1;
9248
9249               have_neon = 1;
9250             }
9251         }
9252     }
9253
9254   /* If there is already a candidate, use it.  */
9255   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9256        best_arch != NULL;
9257        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9258     {
9259       if (arm_abi != ARM_ABI_AUTO
9260           && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9261         continue;
9262
9263       if (fp_model != ARM_FLOAT_AUTO
9264           && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9265         continue;
9266
9267       /* There are various other properties in tdep that we do not
9268          need to check here: those derived from a target description,
9269          since gdbarches with a different target description are
9270          automatically disqualified.  */
9271
9272       /* Do check is_m, though, since it might come from the binary.  */
9273       if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9274         continue;
9275
9276       /* Found a match.  */
9277       break;
9278     }
9279
9280   if (best_arch != NULL)
9281     {
9282       if (tdesc_data != NULL)
9283         tdesc_data_cleanup (tdesc_data);
9284       return best_arch->gdbarch;
9285     }
9286
9287   tdep = XCNEW (struct gdbarch_tdep);
9288   gdbarch = gdbarch_alloc (&info, tdep);
9289
9290   /* Record additional information about the architecture we are defining.
9291      These are gdbarch discriminators, like the OSABI.  */
9292   tdep->arm_abi = arm_abi;
9293   tdep->fp_model = fp_model;
9294   tdep->is_m = is_m;
9295   tdep->have_fpa_registers = have_fpa_registers;
9296   tdep->have_wmmx_registers = have_wmmx_registers;
9297   gdb_assert (vfp_register_count == 0
9298               || vfp_register_count == 16
9299               || vfp_register_count == 32);
9300   tdep->vfp_register_count = vfp_register_count;
9301   tdep->have_vfp_pseudos = have_vfp_pseudos;
9302   tdep->have_neon_pseudos = have_neon_pseudos;
9303   tdep->have_neon = have_neon;
9304
9305   arm_register_g_packet_guesses (gdbarch);
9306
9307   /* Breakpoints.  */
9308   switch (info.byte_order_for_code)
9309     {
9310     case BFD_ENDIAN_BIG:
9311       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9312       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9313       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9314       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9315
9316       break;
9317
9318     case BFD_ENDIAN_LITTLE:
9319       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9320       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9321       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9322       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9323
9324       break;
9325
9326     default:
9327       internal_error (__FILE__, __LINE__,
9328                       _("arm_gdbarch_init: bad byte order for float format"));
9329     }
9330
9331   /* On ARM targets char defaults to unsigned.  */
9332   set_gdbarch_char_signed (gdbarch, 0);
9333
9334   /* wchar_t is unsigned under the AAPCS.  */
9335   if (tdep->arm_abi == ARM_ABI_AAPCS)
9336     set_gdbarch_wchar_signed (gdbarch, 0);
9337   else
9338     set_gdbarch_wchar_signed (gdbarch, 1);
9339
9340   /* Note: for displaced stepping, this includes the breakpoint, and one word
9341      of additional scratch space.  This setting isn't used for anything beside
9342      displaced stepping at present.  */
9343   set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
9344
9345   /* This should be low enough for everything.  */
9346   tdep->lowest_pc = 0x20;
9347   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
9348
9349   /* The default, for both APCS and AAPCS, is to return small
9350      structures in registers.  */
9351   tdep->struct_return = reg_struct_return;
9352
9353   set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9354   set_gdbarch_frame_align (gdbarch, arm_frame_align);
9355
9356   if (is_m)
9357     set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9358
9359   set_gdbarch_write_pc (gdbarch, arm_write_pc);
9360
9361   /* Frame handling.  */
9362   set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
9363   set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
9364   set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
9365
9366   frame_base_set_default (gdbarch, &arm_normal_base);
9367
9368   /* Address manipulation.  */
9369   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9370
9371   /* Advance PC across function entry code.  */
9372   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9373
9374   /* Detect whether PC is at a point where the stack has been destroyed.  */
9375   set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9376
9377   /* Skip trampolines.  */
9378   set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9379
9380   /* The stack grows downward.  */
9381   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9382
9383   /* Breakpoint manipulation.  */
9384   set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9385   set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9386   set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9387                                                   arm_breakpoint_kind_from_current_state);
9388
9389   /* Information about registers, etc.  */
9390   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9391   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9392   set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9393   set_gdbarch_register_type (gdbarch, arm_register_type);
9394   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9395
9396   /* This "info float" is FPA-specific.  Use the generic version if we
9397      do not have FPA.  */
9398   if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9399     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9400
9401   /* Internal <-> external register number maps.  */
9402   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9403   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9404
9405   set_gdbarch_register_name (gdbarch, arm_register_name);
9406
9407   /* Returning results.  */
9408   set_gdbarch_return_value (gdbarch, arm_return_value);
9409
9410   /* Disassembly.  */
9411   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9412
9413   /* Minsymbol frobbing.  */
9414   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9415   set_gdbarch_coff_make_msymbol_special (gdbarch,
9416                                          arm_coff_make_msymbol_special);
9417   set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9418
9419   /* Thumb-2 IT block support.  */
9420   set_gdbarch_adjust_breakpoint_address (gdbarch,
9421                                          arm_adjust_breakpoint_address);
9422
9423   /* Virtual tables.  */
9424   set_gdbarch_vbit_in_delta (gdbarch, 1);
9425
9426   /* Hook in the ABI-specific overrides, if they have been registered.  */
9427   gdbarch_init_osabi (info, gdbarch);
9428
9429   dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9430
9431   /* Add some default predicates.  */
9432   if (is_m)
9433     frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9434   frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9435   dwarf2_append_unwinders (gdbarch);
9436   frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9437   frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9438   frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9439
9440   /* Now we have tuned the configuration, set a few final things,
9441      based on what the OS ABI has told us.  */
9442
9443   /* If the ABI is not otherwise marked, assume the old GNU APCS.  EABI
9444      binaries are always marked.  */
9445   if (tdep->arm_abi == ARM_ABI_AUTO)
9446     tdep->arm_abi = ARM_ABI_APCS;
9447
9448   /* Watchpoints are not steppable.  */
9449   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9450
9451   /* We used to default to FPA for generic ARM, but almost nobody
9452      uses that now, and we now provide a way for the user to force
9453      the model.  So default to the most useful variant.  */
9454   if (tdep->fp_model == ARM_FLOAT_AUTO)
9455     tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9456
9457   if (tdep->jb_pc >= 0)
9458     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9459
9460   /* Floating point sizes and format.  */
9461   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9462   if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9463     {
9464       set_gdbarch_double_format
9465         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9466       set_gdbarch_long_double_format
9467         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9468     }
9469   else
9470     {
9471       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9472       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9473     }
9474
9475   if (have_vfp_pseudos)
9476     {
9477       /* NOTE: These are the only pseudo registers used by
9478          the ARM target at the moment.  If more are added, a
9479          little more care in numbering will be needed.  */
9480
9481       int num_pseudos = 32;
9482       if (have_neon_pseudos)
9483         num_pseudos += 16;
9484       set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9485       set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9486       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9487     }
9488
9489   if (tdesc_data)
9490     {
9491       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9492
9493       tdesc_use_registers (gdbarch, tdesc, tdesc_data);
9494
9495       /* Override tdesc_register_type to adjust the types of VFP
9496          registers for NEON.  */
9497       set_gdbarch_register_type (gdbarch, arm_register_type);
9498     }
9499
9500   /* Add standard register aliases.  We add aliases even for those
9501      nanes which are used by the current architecture - it's simpler,
9502      and does no harm, since nothing ever lists user registers.  */
9503   for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9504     user_reg_add (gdbarch, arm_register_aliases[i].name,
9505                   value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9506
9507   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9508   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9509
9510   return gdbarch;
9511 }
9512
9513 static void
9514 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9515 {
9516   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9517
9518   if (tdep == NULL)
9519     return;
9520
9521   fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
9522                       (unsigned long) tdep->lowest_pc);
9523 }
9524
9525 #if GDB_SELF_TEST
9526 namespace selftests
9527 {
9528 static void arm_record_test (void);
9529 }
9530 #endif
9531
9532 void
9533 _initialize_arm_tdep (void)
9534 {
9535   long length;
9536   int i, j;
9537   char regdesc[1024], *rdptr = regdesc;
9538   size_t rest = sizeof (regdesc);
9539
9540   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9541
9542   arm_objfile_data_key
9543     = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
9544
9545   /* Add ourselves to objfile event chain.  */
9546   gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
9547   arm_exidx_data_key
9548     = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
9549
9550   /* Register an ELF OS ABI sniffer for ARM binaries.  */
9551   gdbarch_register_osabi_sniffer (bfd_arch_arm,
9552                                   bfd_target_elf_flavour,
9553                                   arm_elf_osabi_sniffer);
9554
9555   /* Initialize the standard target descriptions.  */
9556   initialize_tdesc_arm_with_m ();
9557   initialize_tdesc_arm_with_m_fpa_layout ();
9558   initialize_tdesc_arm_with_m_vfp_d16 ();
9559   initialize_tdesc_arm_with_iwmmxt ();
9560   initialize_tdesc_arm_with_vfpv2 ();
9561   initialize_tdesc_arm_with_vfpv3 ();
9562   initialize_tdesc_arm_with_neon ();
9563
9564   /* Add root prefix command for all "set arm"/"show arm" commands.  */
9565   add_prefix_cmd ("arm", no_class, set_arm_command,
9566                   _("Various ARM-specific commands."),
9567                   &setarmcmdlist, "set arm ", 0, &setlist);
9568
9569   add_prefix_cmd ("arm", no_class, show_arm_command,
9570                   _("Various ARM-specific commands."),
9571                   &showarmcmdlist, "show arm ", 0, &showlist);
9572
9573
9574   arm_disassembler_options = xstrdup ("reg-names-std");
9575   const disasm_options_t *disasm_options = disassembler_options_arm ();
9576   int num_disassembly_styles = 0;
9577   for (i = 0; disasm_options->name[i] != NULL; i++)
9578     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9579       num_disassembly_styles++;
9580
9581   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
9582   valid_disassembly_styles = XNEWVEC (const char *,
9583                                       num_disassembly_styles + 1);
9584   for (i = j = 0; disasm_options->name[i] != NULL; i++)
9585     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9586       {
9587         size_t offset = strlen ("reg-names-");
9588         const char *style = disasm_options->name[i];
9589         valid_disassembly_styles[j++] = &style[offset];
9590         length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9591                            disasm_options->description[i]);
9592         rdptr += length;
9593         rest -= length;
9594       }
9595   /* Mark the end of valid options.  */
9596   valid_disassembly_styles[num_disassembly_styles] = NULL;
9597
9598   /* Create the help text.  */
9599   std::string helptext = string_printf ("%s%s%s",
9600                                         _("The valid values are:\n"),
9601                                         regdesc,
9602                                         _("The default is \"std\"."));
9603
9604   add_setshow_enum_cmd("disassembler", no_class,
9605                        valid_disassembly_styles, &disassembly_style,
9606                        _("Set the disassembly style."),
9607                        _("Show the disassembly style."),
9608                        helptext.c_str (),
9609                        set_disassembly_style_sfunc,
9610                        show_disassembly_style_sfunc,
9611                        &setarmcmdlist, &showarmcmdlist);
9612
9613   add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9614                            _("Set usage of ARM 32-bit mode."),
9615                            _("Show usage of ARM 32-bit mode."),
9616                            _("When off, a 26-bit PC will be used."),
9617                            NULL,
9618                            NULL, /* FIXME: i18n: Usage of ARM 32-bit
9619                                     mode is %s.  */
9620                            &setarmcmdlist, &showarmcmdlist);
9621
9622   /* Add a command to allow the user to force the FPU model.  */
9623   add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9624                         _("Set the floating point type."),
9625                         _("Show the floating point type."),
9626                         _("auto - Determine the FP typefrom the OS-ABI.\n\
9627 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9628 fpa - FPA co-processor (GCC compiled).\n\
9629 softvfp - Software FP with pure-endian doubles.\n\
9630 vfp - VFP co-processor."),
9631                         set_fp_model_sfunc, show_fp_model,
9632                         &setarmcmdlist, &showarmcmdlist);
9633
9634   /* Add a command to allow the user to force the ABI.  */
9635   add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9636                         _("Set the ABI."),
9637                         _("Show the ABI."),
9638                         NULL, arm_set_abi, arm_show_abi,
9639                         &setarmcmdlist, &showarmcmdlist);
9640
9641   /* Add two commands to allow the user to force the assumed
9642      execution mode.  */
9643   add_setshow_enum_cmd ("fallback-mode", class_support,
9644                         arm_mode_strings, &arm_fallback_mode_string,
9645                         _("Set the mode assumed when symbols are unavailable."),
9646                         _("Show the mode assumed when symbols are unavailable."),
9647                         NULL, NULL, arm_show_fallback_mode,
9648                         &setarmcmdlist, &showarmcmdlist);
9649   add_setshow_enum_cmd ("force-mode", class_support,
9650                         arm_mode_strings, &arm_force_mode_string,
9651                         _("Set the mode assumed even when symbols are available."),
9652                         _("Show the mode assumed even when symbols are available."),
9653                         NULL, NULL, arm_show_force_mode,
9654                         &setarmcmdlist, &showarmcmdlist);
9655
9656   /* Debugging flag.  */
9657   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9658                            _("Set ARM debugging."),
9659                            _("Show ARM debugging."),
9660                            _("When on, arm-specific debugging is enabled."),
9661                            NULL,
9662                            NULL, /* FIXME: i18n: "ARM debugging is %s.  */
9663                            &setdebuglist, &showdebuglist);
9664
9665 #if GDB_SELF_TEST
9666   selftests::register_test ("arm-record", selftests::arm_record_test);
9667 #endif
9668
9669 }
9670
9671 /* ARM-reversible process record data structures.  */
9672
9673 #define ARM_INSN_SIZE_BYTES 4    
9674 #define THUMB_INSN_SIZE_BYTES 2
9675 #define THUMB2_INSN_SIZE_BYTES 4
9676
9677
9678 /* Position of the bit within a 32-bit ARM instruction
9679    that defines whether the instruction is a load or store.  */
9680 #define INSN_S_L_BIT_NUM 20
9681
9682 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9683         do  \
9684           { \
9685             unsigned int reg_len = LENGTH; \
9686             if (reg_len) \
9687               { \
9688                 REGS = XNEWVEC (uint32_t, reg_len); \
9689                 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9690               } \
9691           } \
9692         while (0)
9693
9694 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9695         do  \
9696           { \
9697             unsigned int mem_len = LENGTH; \
9698             if (mem_len) \
9699             { \
9700               MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
9701               memcpy(&MEMS->len, &RECORD_BUF[0], \
9702                      sizeof(struct arm_mem_r) * LENGTH); \
9703             } \
9704           } \
9705           while (0)
9706
9707 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
9708 #define INSN_RECORDED(ARM_RECORD) \
9709         (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9710
9711 /* ARM memory record structure.  */
9712 struct arm_mem_r
9713 {
9714   uint32_t len;    /* Record length.  */
9715   uint32_t addr;   /* Memory address.  */
9716 };
9717
9718 /* ARM instruction record contains opcode of current insn
9719    and execution state (before entry to decode_insn()),
9720    contains list of to-be-modified registers and
9721    memory blocks (on return from decode_insn()).  */
9722
9723 typedef struct insn_decode_record_t
9724 {
9725   struct gdbarch *gdbarch;
9726   struct regcache *regcache;
9727   CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
9728   uint32_t arm_insn;            /* Should accommodate thumb.  */
9729   uint32_t cond;                /* Condition code.  */
9730   uint32_t opcode;              /* Insn opcode.  */
9731   uint32_t decode;              /* Insn decode bits.  */
9732   uint32_t mem_rec_count;       /* No of mem records.  */
9733   uint32_t reg_rec_count;       /* No of reg records.  */
9734   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
9735   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
9736 } insn_decode_record;
9737
9738
9739 /* Checks ARM SBZ and SBO mandatory fields.  */
9740
9741 static int
9742 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9743 {
9744   uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9745
9746   if (!len)
9747     return 1;
9748
9749   if (!sbo)
9750     ones = ~ones;
9751
9752   while (ones)
9753     {
9754       if (!(ones & sbo))
9755         {
9756           return 0;
9757         }
9758       ones = ones >> 1;
9759     }
9760   return 1;
9761 }
9762
9763 enum arm_record_result
9764 {
9765   ARM_RECORD_SUCCESS = 0,
9766   ARM_RECORD_FAILURE = 1
9767 };
9768
9769 typedef enum
9770 {
9771   ARM_RECORD_STRH=1,
9772   ARM_RECORD_STRD
9773 } arm_record_strx_t;
9774
9775 typedef enum
9776 {
9777   ARM_RECORD=1,
9778   THUMB_RECORD,
9779   THUMB2_RECORD
9780 } record_type_t;
9781
9782
9783 static int
9784 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
9785                  uint32_t *record_buf_mem, arm_record_strx_t str_type)
9786 {
9787
9788   struct regcache *reg_cache = arm_insn_r->regcache;
9789   ULONGEST u_regval[2]= {0};
9790
9791   uint32_t reg_src1 = 0, reg_src2 = 0;
9792   uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9793
9794   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9795   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9796
9797   if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9798     {
9799       /* 1) Handle misc store, immediate offset.  */
9800       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9801       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9802       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9803       regcache_raw_read_unsigned (reg_cache, reg_src1,
9804                                   &u_regval[0]);
9805       if (ARM_PC_REGNUM == reg_src1)
9806         {
9807           /* If R15 was used as Rn, hence current PC+8.  */
9808           u_regval[0] = u_regval[0] + 8;
9809         }
9810       offset_8 = (immed_high << 4) | immed_low;
9811       /* Calculate target store address.  */
9812       if (14 == arm_insn_r->opcode)
9813         {
9814           tgt_mem_addr = u_regval[0] + offset_8;
9815         }
9816       else
9817         {
9818           tgt_mem_addr = u_regval[0] - offset_8;
9819         }
9820       if (ARM_RECORD_STRH == str_type)
9821         {
9822           record_buf_mem[0] = 2;
9823           record_buf_mem[1] = tgt_mem_addr;
9824           arm_insn_r->mem_rec_count = 1;
9825         }
9826       else if (ARM_RECORD_STRD == str_type)
9827         {
9828           record_buf_mem[0] = 4;
9829           record_buf_mem[1] = tgt_mem_addr;
9830           record_buf_mem[2] = 4;
9831           record_buf_mem[3] = tgt_mem_addr + 4;
9832           arm_insn_r->mem_rec_count = 2;
9833         }
9834     }
9835   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9836     {
9837       /* 2) Store, register offset.  */
9838       /* Get Rm.  */
9839       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9840       /* Get Rn.  */
9841       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9842       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9843       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9844       if (15 == reg_src2)
9845         {
9846           /* If R15 was used as Rn, hence current PC+8.  */
9847           u_regval[0] = u_regval[0] + 8;
9848         }
9849       /* Calculate target store address, Rn +/- Rm, register offset.  */
9850       if (12 == arm_insn_r->opcode)
9851         {
9852           tgt_mem_addr = u_regval[0] + u_regval[1];
9853         }
9854       else
9855         {
9856           tgt_mem_addr = u_regval[1] - u_regval[0];
9857         }
9858       if (ARM_RECORD_STRH == str_type)
9859         {
9860           record_buf_mem[0] = 2;
9861           record_buf_mem[1] = tgt_mem_addr;
9862           arm_insn_r->mem_rec_count = 1;
9863         }
9864       else if (ARM_RECORD_STRD == str_type)
9865         {
9866           record_buf_mem[0] = 4;
9867           record_buf_mem[1] = tgt_mem_addr;
9868           record_buf_mem[2] = 4;
9869           record_buf_mem[3] = tgt_mem_addr + 4;
9870           arm_insn_r->mem_rec_count = 2;
9871         }
9872     }
9873   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9874            || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
9875     {
9876       /* 3) Store, immediate pre-indexed.  */
9877       /* 5) Store, immediate post-indexed.  */
9878       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9879       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9880       offset_8 = (immed_high << 4) | immed_low;
9881       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9882       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9883       /* Calculate target store address, Rn +/- Rm, register offset.  */
9884       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9885         {
9886           tgt_mem_addr = u_regval[0] + offset_8;
9887         }
9888       else
9889         {
9890           tgt_mem_addr = u_regval[0] - offset_8;
9891         }
9892       if (ARM_RECORD_STRH == str_type)
9893         {
9894           record_buf_mem[0] = 2;
9895           record_buf_mem[1] = tgt_mem_addr;
9896           arm_insn_r->mem_rec_count = 1;
9897         }
9898       else if (ARM_RECORD_STRD == str_type)
9899         {
9900           record_buf_mem[0] = 4;
9901           record_buf_mem[1] = tgt_mem_addr;
9902           record_buf_mem[2] = 4;
9903           record_buf_mem[3] = tgt_mem_addr + 4;
9904           arm_insn_r->mem_rec_count = 2;
9905         }
9906       /* Record Rn also as it changes.  */
9907       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9908       arm_insn_r->reg_rec_count = 1;
9909     }
9910   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9911            || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9912     {
9913       /* 4) Store, register pre-indexed.  */
9914       /* 6) Store, register post -indexed.  */
9915       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9916       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9917       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9918       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9919       /* Calculate target store address, Rn +/- Rm, register offset.  */
9920       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9921         {
9922           tgt_mem_addr = u_regval[0] + u_regval[1];
9923         }
9924       else
9925         {
9926           tgt_mem_addr = u_regval[1] - u_regval[0];
9927         }
9928       if (ARM_RECORD_STRH == str_type)
9929         {
9930           record_buf_mem[0] = 2;
9931           record_buf_mem[1] = tgt_mem_addr;
9932           arm_insn_r->mem_rec_count = 1;
9933         }
9934       else if (ARM_RECORD_STRD == str_type)
9935         {
9936           record_buf_mem[0] = 4;
9937           record_buf_mem[1] = tgt_mem_addr;
9938           record_buf_mem[2] = 4;
9939           record_buf_mem[3] = tgt_mem_addr + 4;
9940           arm_insn_r->mem_rec_count = 2;
9941         }
9942       /* Record Rn also as it changes.  */
9943       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9944       arm_insn_r->reg_rec_count = 1;
9945     }
9946   return 0;
9947 }
9948
9949 /* Handling ARM extension space insns.  */
9950
9951 static int
9952 arm_record_extension_space (insn_decode_record *arm_insn_r)
9953 {
9954   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
9955   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9956   uint32_t record_buf[8], record_buf_mem[8];
9957   uint32_t reg_src1 = 0;
9958   struct regcache *reg_cache = arm_insn_r->regcache;
9959   ULONGEST u_regval = 0;
9960
9961   gdb_assert (!INSN_RECORDED(arm_insn_r));
9962   /* Handle unconditional insn extension space.  */
9963
9964   opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9965   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9966   if (arm_insn_r->cond)
9967     {
9968       /* PLD has no affect on architectural state, it just affects
9969          the caches.  */
9970       if (5 == ((opcode1 & 0xE0) >> 5))
9971         {
9972           /* BLX(1) */
9973           record_buf[0] = ARM_PS_REGNUM;
9974           record_buf[1] = ARM_LR_REGNUM;
9975           arm_insn_r->reg_rec_count = 2;
9976         }
9977       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
9978     }
9979
9980
9981   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9982   if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9983     {
9984       ret = -1;
9985       /* Undefined instruction on ARM V5; need to handle if later 
9986          versions define it.  */
9987     }
9988
9989   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
9990   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9991   insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
9992
9993   /* Handle arithmetic insn extension space.  */
9994   if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
9995       && !INSN_RECORDED(arm_insn_r))
9996     {
9997       /* Handle MLA(S) and MUL(S).  */
9998       if (in_inclusive_range (insn_op1, 0U, 3U))
9999       {
10000         record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10001         record_buf[1] = ARM_PS_REGNUM;
10002         arm_insn_r->reg_rec_count = 2;
10003       }
10004       else if (in_inclusive_range (insn_op1, 4U, 15U))
10005       {
10006         /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
10007         record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10008         record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10009         record_buf[2] = ARM_PS_REGNUM;
10010         arm_insn_r->reg_rec_count = 3;
10011       }
10012     }
10013
10014   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
10015   opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
10016   insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
10017
10018   /* Handle control insn extension space.  */
10019
10020   if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
10021       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
10022     {
10023       if (!bit (arm_insn_r->arm_insn,25))
10024         {
10025           if (!bits (arm_insn_r->arm_insn, 4, 7))
10026             {
10027               if ((0 == insn_op1) || (2 == insn_op1))
10028                 {
10029                   /* MRS.  */
10030                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10031                   arm_insn_r->reg_rec_count = 1;
10032                 }
10033               else if (1 == insn_op1)
10034                 {
10035                   /* CSPR is going to be changed.  */
10036                   record_buf[0] = ARM_PS_REGNUM;
10037                   arm_insn_r->reg_rec_count = 1;
10038                 }
10039               else if (3 == insn_op1)
10040                 {
10041                   /* SPSR is going to be changed.  */
10042                   /* We need to get SPSR value, which is yet to be done.  */
10043                   return -1;
10044                 }
10045             }
10046           else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
10047             {
10048               if (1 == insn_op1)
10049                 {
10050                   /* BX.  */
10051                   record_buf[0] = ARM_PS_REGNUM;
10052                   arm_insn_r->reg_rec_count = 1;
10053                 }
10054               else if (3 == insn_op1)
10055                 {
10056                   /* CLZ.  */
10057                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10058                   arm_insn_r->reg_rec_count = 1;
10059                 }
10060             }
10061           else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
10062             {
10063               /* BLX.  */
10064               record_buf[0] = ARM_PS_REGNUM;
10065               record_buf[1] = ARM_LR_REGNUM;
10066               arm_insn_r->reg_rec_count = 2;
10067             }
10068           else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10069             {
10070               /* QADD, QSUB, QDADD, QDSUB */
10071               record_buf[0] = ARM_PS_REGNUM;
10072               record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10073               arm_insn_r->reg_rec_count = 2;
10074             }
10075           else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10076             {
10077               /* BKPT.  */
10078               record_buf[0] = ARM_PS_REGNUM;
10079               record_buf[1] = ARM_LR_REGNUM;
10080               arm_insn_r->reg_rec_count = 2;
10081
10082               /* Save SPSR also;how?  */
10083               return -1;
10084             }
10085           else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
10086                   || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10087                   || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10088                   || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10089                  )
10090             {
10091               if (0 == insn_op1 || 1 == insn_op1)
10092                 {
10093                   /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
10094                   /* We dont do optimization for SMULW<y> where we
10095                      need only Rd.  */
10096                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10097                   record_buf[1] = ARM_PS_REGNUM;
10098                   arm_insn_r->reg_rec_count = 2;
10099                 }
10100               else if (2 == insn_op1)
10101                 {
10102                   /* SMLAL<x><y>.  */
10103                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10104                   record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10105                   arm_insn_r->reg_rec_count = 2;
10106                 }
10107               else if (3 == insn_op1)
10108                 {
10109                   /* SMUL<x><y>.  */
10110                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10111                   arm_insn_r->reg_rec_count = 1;
10112                 }
10113             }
10114         }
10115       else
10116         {
10117           /* MSR : immediate form.  */
10118           if (1 == insn_op1)
10119             {
10120               /* CSPR is going to be changed.  */
10121               record_buf[0] = ARM_PS_REGNUM;
10122               arm_insn_r->reg_rec_count = 1;
10123             }
10124           else if (3 == insn_op1)
10125             {
10126               /* SPSR is going to be changed.  */
10127               /* we need to get SPSR value, which is yet to be done  */
10128               return -1;
10129             }
10130         }
10131     }
10132
10133   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10134   opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10135   insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10136
10137   /* Handle load/store insn extension space.  */
10138
10139   if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
10140       && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10141       && !INSN_RECORDED(arm_insn_r))
10142     {
10143       /* SWP/SWPB.  */
10144       if (0 == insn_op1)
10145         {
10146           /* These insn, changes register and memory as well.  */
10147           /* SWP or SWPB insn.  */
10148           /* Get memory address given by Rn.  */
10149           reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10150           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10151           /* SWP insn ?, swaps word.  */
10152           if (8 == arm_insn_r->opcode)
10153             {
10154               record_buf_mem[0] = 4;
10155             }
10156           else
10157             {
10158               /* SWPB insn, swaps only byte.  */
10159               record_buf_mem[0] = 1;
10160             }
10161           record_buf_mem[1] = u_regval;
10162           arm_insn_r->mem_rec_count = 1;
10163           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10164           arm_insn_r->reg_rec_count = 1;
10165         }
10166       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10167         {
10168           /* STRH.  */
10169           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10170                           ARM_RECORD_STRH);
10171         }
10172       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10173         {
10174           /* LDRD.  */
10175           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10176           record_buf[1] = record_buf[0] + 1;
10177           arm_insn_r->reg_rec_count = 2;
10178         }
10179       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10180         {
10181           /* STRD.  */
10182           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10183                         ARM_RECORD_STRD);
10184         }
10185       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10186         {
10187           /* LDRH, LDRSB, LDRSH.  */
10188           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10189           arm_insn_r->reg_rec_count = 1;
10190         }
10191
10192     }
10193
10194   opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10195   if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10196       && !INSN_RECORDED(arm_insn_r))
10197     {
10198       ret = -1;
10199       /* Handle coprocessor insn extension space.  */
10200     }
10201
10202   /* To be done for ARMv5 and later; as of now we return -1.  */
10203   if (-1 == ret)
10204     return ret;
10205
10206   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10207   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10208
10209   return ret;
10210 }
10211
10212 /* Handling opcode 000 insns.  */
10213
10214 static int
10215 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10216 {
10217   struct regcache *reg_cache = arm_insn_r->regcache;
10218   uint32_t record_buf[8], record_buf_mem[8];
10219   ULONGEST u_regval[2] = {0};
10220
10221   uint32_t reg_src1 = 0, reg_dest = 0;
10222   uint32_t opcode1 = 0;
10223
10224   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10225   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10226   opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10227
10228   if (!((opcode1 & 0x19) == 0x10))
10229     {
10230       /* Data-processing (register) and Data-processing (register-shifted
10231          register */
10232       /* Out of 11 shifter operands mode, all the insn modifies destination
10233          register, which is specified by 13-16 decode.  */
10234       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10235       record_buf[1] = ARM_PS_REGNUM;
10236       arm_insn_r->reg_rec_count = 2;
10237     }
10238   else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10239     {
10240       /* Miscellaneous instructions */
10241
10242       if (3 == arm_insn_r->decode && 0x12 == opcode1
10243           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10244         {
10245           /* Handle BLX, branch and link/exchange.  */
10246           if (9 == arm_insn_r->opcode)
10247             {
10248               /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10249                  and R14 stores the return address.  */
10250               record_buf[0] = ARM_PS_REGNUM;
10251               record_buf[1] = ARM_LR_REGNUM;
10252               arm_insn_r->reg_rec_count = 2;
10253             }
10254         }
10255       else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10256         {
10257           /* Handle enhanced software breakpoint insn, BKPT.  */
10258           /* CPSR is changed to be executed in ARM state,  disabling normal
10259              interrupts, entering abort mode.  */
10260           /* According to high vector configuration PC is set.  */
10261           /* user hit breakpoint and type reverse, in
10262              that case, we need to go back with previous CPSR and
10263              Program Counter.  */
10264           record_buf[0] = ARM_PS_REGNUM;
10265           record_buf[1] = ARM_LR_REGNUM;
10266           arm_insn_r->reg_rec_count = 2;
10267
10268           /* Save SPSR also; how?  */
10269           return -1;
10270         }
10271       else if (1 == arm_insn_r->decode && 0x12 == opcode1
10272                && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10273         {
10274           /* Handle BX, branch and link/exchange.  */
10275           /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
10276           record_buf[0] = ARM_PS_REGNUM;
10277           arm_insn_r->reg_rec_count = 1;
10278         }
10279       else if (1 == arm_insn_r->decode && 0x16 == opcode1
10280                && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10281                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10282         {
10283           /* Count leading zeros: CLZ.  */
10284           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10285           arm_insn_r->reg_rec_count = 1;
10286         }
10287       else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10288                && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10289                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10290                && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10291         {
10292           /* Handle MRS insn.  */
10293           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10294           arm_insn_r->reg_rec_count = 1;
10295         }
10296     }
10297   else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10298     {
10299       /* Multiply and multiply-accumulate */
10300
10301       /* Handle multiply instructions.  */
10302       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
10303       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10304           {
10305             /* Handle MLA and MUL.  */
10306             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10307             record_buf[1] = ARM_PS_REGNUM;
10308             arm_insn_r->reg_rec_count = 2;
10309           }
10310         else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10311           {
10312             /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
10313             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10314             record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10315             record_buf[2] = ARM_PS_REGNUM;
10316             arm_insn_r->reg_rec_count = 3;
10317           }
10318     }
10319   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
10320     {
10321       /* Synchronization primitives */
10322
10323       /* Handling SWP, SWPB.  */
10324       /* These insn, changes register and memory as well.  */
10325       /* SWP or SWPB insn.  */
10326
10327       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10328       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10329       /* SWP insn ?, swaps word.  */
10330       if (8 == arm_insn_r->opcode)
10331         {
10332           record_buf_mem[0] = 4;
10333         }
10334       else
10335         {
10336           /* SWPB insn, swaps only byte.  */
10337           record_buf_mem[0] = 1;
10338         }
10339       record_buf_mem[1] = u_regval[0];
10340       arm_insn_r->mem_rec_count = 1;
10341       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10342       arm_insn_r->reg_rec_count = 1;
10343     }
10344   else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10345            || 15 == arm_insn_r->decode)
10346     {
10347       if ((opcode1 & 0x12) == 2)
10348         {
10349           /* Extra load/store (unprivileged) */
10350           return -1;
10351         }
10352       else
10353         {
10354           /* Extra load/store */
10355           switch (bits (arm_insn_r->arm_insn, 5, 6))
10356             {
10357             case 1:
10358               if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10359                 {
10360                   /* STRH (register), STRH (immediate) */
10361                   arm_record_strx (arm_insn_r, &record_buf[0],
10362                                    &record_buf_mem[0], ARM_RECORD_STRH);
10363                 }
10364               else if ((opcode1 & 0x05) == 0x1)
10365                 {
10366                   /* LDRH (register) */
10367                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10368                   arm_insn_r->reg_rec_count = 1;
10369
10370                   if (bit (arm_insn_r->arm_insn, 21))
10371                     {
10372                       /* Write back to Rn.  */
10373                       record_buf[arm_insn_r->reg_rec_count++]
10374                         = bits (arm_insn_r->arm_insn, 16, 19);
10375                     }
10376                 }
10377               else if ((opcode1 & 0x05) == 0x5)
10378                 {
10379                   /* LDRH (immediate), LDRH (literal) */
10380                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10381
10382                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10383                   arm_insn_r->reg_rec_count = 1;
10384
10385                   if (rn != 15)
10386                     {
10387                       /*LDRH (immediate) */
10388                       if (bit (arm_insn_r->arm_insn, 21))
10389                         {
10390                           /* Write back to Rn.  */
10391                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10392                         }
10393                     }
10394                 }
10395               else
10396                 return -1;
10397               break;
10398             case 2:
10399               if ((opcode1 & 0x05) == 0x0)
10400                 {
10401                   /* LDRD (register) */
10402                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10403                   record_buf[1] = record_buf[0] + 1;
10404                   arm_insn_r->reg_rec_count = 2;
10405
10406                   if (bit (arm_insn_r->arm_insn, 21))
10407                     {
10408                       /* Write back to Rn.  */
10409                       record_buf[arm_insn_r->reg_rec_count++]
10410                         = bits (arm_insn_r->arm_insn, 16, 19);
10411                     }
10412                 }
10413               else if ((opcode1 & 0x05) == 0x1)
10414                 {
10415                   /* LDRSB (register) */
10416                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10417                   arm_insn_r->reg_rec_count = 1;
10418
10419                   if (bit (arm_insn_r->arm_insn, 21))
10420                     {
10421                       /* Write back to Rn.  */
10422                       record_buf[arm_insn_r->reg_rec_count++]
10423                         = bits (arm_insn_r->arm_insn, 16, 19);
10424                     }
10425                 }
10426               else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10427                 {
10428                   /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10429                      LDRSB (literal) */
10430                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10431
10432                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10433                   arm_insn_r->reg_rec_count = 1;
10434
10435                   if (rn != 15)
10436                     {
10437                       /*LDRD (immediate), LDRSB (immediate) */
10438                       if (bit (arm_insn_r->arm_insn, 21))
10439                         {
10440                           /* Write back to Rn.  */
10441                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10442                         }
10443                     }
10444                 }
10445               else
10446                 return -1;
10447               break;
10448             case 3:
10449               if ((opcode1 & 0x05) == 0x0)
10450                 {
10451                   /* STRD (register) */
10452                   arm_record_strx (arm_insn_r, &record_buf[0],
10453                                    &record_buf_mem[0], ARM_RECORD_STRD);
10454                 }
10455               else if ((opcode1 & 0x05) == 0x1)
10456                 {
10457                   /* LDRSH (register) */
10458                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10459                   arm_insn_r->reg_rec_count = 1;
10460
10461                   if (bit (arm_insn_r->arm_insn, 21))
10462                     {
10463                       /* Write back to Rn.  */
10464                       record_buf[arm_insn_r->reg_rec_count++]
10465                         = bits (arm_insn_r->arm_insn, 16, 19);
10466                     }
10467                 }
10468               else if ((opcode1 & 0x05) == 0x4)
10469                 {
10470                   /* STRD (immediate) */
10471                   arm_record_strx (arm_insn_r, &record_buf[0],
10472                                    &record_buf_mem[0], ARM_RECORD_STRD);
10473                 }
10474               else if ((opcode1 & 0x05) == 0x5)
10475                 {
10476                   /* LDRSH (immediate), LDRSH (literal) */
10477                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10478                   arm_insn_r->reg_rec_count = 1;
10479
10480                   if (bit (arm_insn_r->arm_insn, 21))
10481                     {
10482                       /* Write back to Rn.  */
10483                       record_buf[arm_insn_r->reg_rec_count++]
10484                         = bits (arm_insn_r->arm_insn, 16, 19);
10485                     }
10486                 }
10487               else
10488                 return -1;
10489               break;
10490             default:
10491               return -1;
10492             }
10493         }
10494     }
10495   else
10496     {
10497       return -1;
10498     }
10499
10500   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10501   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10502   return 0;
10503 }
10504
10505 /* Handling opcode 001 insns.  */
10506
10507 static int
10508 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10509 {
10510   uint32_t record_buf[8], record_buf_mem[8];
10511
10512   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10513   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10514
10515   if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10516       && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10517       && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10518      )
10519     {
10520       /* Handle MSR insn.  */
10521       if (9 == arm_insn_r->opcode)
10522         {
10523           /* CSPR is going to be changed.  */
10524           record_buf[0] = ARM_PS_REGNUM;
10525           arm_insn_r->reg_rec_count = 1;
10526         }
10527       else
10528         {
10529           /* SPSR is going to be changed.  */
10530         }
10531     }
10532   else if (arm_insn_r->opcode <= 15)
10533     {
10534       /* Normal data processing insns.  */
10535       /* Out of 11 shifter operands mode, all the insn modifies destination
10536          register, which is specified by 13-16 decode.  */
10537       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10538       record_buf[1] = ARM_PS_REGNUM;
10539       arm_insn_r->reg_rec_count = 2;
10540     }
10541   else
10542     {
10543       return -1;
10544     }
10545
10546   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10547   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10548   return 0;
10549 }
10550
10551 static int
10552 arm_record_media (insn_decode_record *arm_insn_r)
10553 {
10554   uint32_t record_buf[8];
10555
10556   switch (bits (arm_insn_r->arm_insn, 22, 24))
10557     {
10558     case 0:
10559       /* Parallel addition and subtraction, signed */
10560     case 1:
10561       /* Parallel addition and subtraction, unsigned */
10562     case 2:
10563     case 3:
10564       /* Packing, unpacking, saturation and reversal */
10565       {
10566         int rd = bits (arm_insn_r->arm_insn, 12, 15);
10567
10568         record_buf[arm_insn_r->reg_rec_count++] = rd;
10569       }
10570       break;
10571
10572     case 4:
10573     case 5:
10574       /* Signed multiplies */
10575       {
10576         int rd = bits (arm_insn_r->arm_insn, 16, 19);
10577         unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10578
10579         record_buf[arm_insn_r->reg_rec_count++] = rd;
10580         if (op1 == 0x0)
10581           record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10582         else if (op1 == 0x4)
10583           record_buf[arm_insn_r->reg_rec_count++]
10584             = bits (arm_insn_r->arm_insn, 12, 15);
10585       }
10586       break;
10587
10588     case 6:
10589       {
10590         if (bit (arm_insn_r->arm_insn, 21)
10591             && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10592           {
10593             /* SBFX */
10594             record_buf[arm_insn_r->reg_rec_count++]
10595               = bits (arm_insn_r->arm_insn, 12, 15);
10596           }
10597         else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10598                  && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10599           {
10600             /* USAD8 and USADA8 */
10601             record_buf[arm_insn_r->reg_rec_count++]
10602               = bits (arm_insn_r->arm_insn, 16, 19);
10603           }
10604       }
10605       break;
10606
10607     case 7:
10608       {
10609         if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10610             && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10611           {
10612             /* Permanently UNDEFINED */
10613             return -1;
10614           }
10615         else
10616           {
10617             /* BFC, BFI and UBFX */
10618             record_buf[arm_insn_r->reg_rec_count++]
10619               = bits (arm_insn_r->arm_insn, 12, 15);
10620           }
10621       }
10622       break;
10623
10624     default:
10625       return -1;
10626     }
10627
10628   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10629
10630   return 0;
10631 }
10632
10633 /* Handle ARM mode instructions with opcode 010.  */
10634
10635 static int
10636 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10637 {
10638   struct regcache *reg_cache = arm_insn_r->regcache;
10639
10640   uint32_t reg_base , reg_dest;
10641   uint32_t offset_12, tgt_mem_addr;
10642   uint32_t record_buf[8], record_buf_mem[8];
10643   unsigned char wback;
10644   ULONGEST u_regval;
10645
10646   /* Calculate wback.  */
10647   wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10648           || (bit (arm_insn_r->arm_insn, 21) == 1);
10649
10650   arm_insn_r->reg_rec_count = 0;
10651   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10652
10653   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10654     {
10655       /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10656          and LDRT.  */
10657
10658       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10659       record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10660
10661       /* The LDR instruction is capable of doing branching.  If MOV LR, PC
10662          preceeds a LDR instruction having R15 as reg_base, it
10663          emulates a branch and link instruction, and hence we need to save
10664          CPSR and PC as well.  */
10665       if (ARM_PC_REGNUM == reg_dest)
10666         record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10667
10668       /* If wback is true, also save the base register, which is going to be
10669          written to.  */
10670       if (wback)
10671         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10672     }
10673   else
10674     {
10675       /* STR (immediate), STRB (immediate), STRBT and STRT.  */
10676
10677       offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10678       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10679
10680       /* Handle bit U.  */
10681       if (bit (arm_insn_r->arm_insn, 23))
10682         {
10683           /* U == 1: Add the offset. */
10684           tgt_mem_addr = (uint32_t) u_regval + offset_12;
10685         }
10686       else
10687         {
10688           /* U == 0: subtract the offset. */
10689           tgt_mem_addr = (uint32_t) u_regval - offset_12;
10690         }
10691
10692       /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10693          bytes.  */
10694       if (bit (arm_insn_r->arm_insn, 22))
10695         {
10696           /* STRB and STRBT: 1 byte.  */
10697           record_buf_mem[0] = 1;
10698         }
10699       else
10700         {
10701           /* STR and STRT: 4 bytes.  */
10702           record_buf_mem[0] = 4;
10703         }
10704
10705       /* Handle bit P.  */
10706       if (bit (arm_insn_r->arm_insn, 24))
10707         record_buf_mem[1] = tgt_mem_addr;
10708       else
10709         record_buf_mem[1] = (uint32_t) u_regval;
10710
10711       arm_insn_r->mem_rec_count = 1;
10712
10713       /* If wback is true, also save the base register, which is going to be
10714          written to.  */
10715       if (wback)
10716         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10717     }
10718
10719   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10720   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10721   return 0;
10722 }
10723
10724 /* Handling opcode 011 insns.  */
10725
10726 static int
10727 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10728 {
10729   struct regcache *reg_cache = arm_insn_r->regcache;
10730
10731   uint32_t shift_imm = 0;
10732   uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10733   uint32_t offset_12 = 0, tgt_mem_addr = 0;
10734   uint32_t record_buf[8], record_buf_mem[8];
10735
10736   LONGEST s_word;
10737   ULONGEST u_regval[2];
10738
10739   if (bit (arm_insn_r->arm_insn, 4))
10740     return arm_record_media (arm_insn_r);
10741
10742   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10743   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10744
10745   /* Handle enhanced store insns and LDRD DSP insn,
10746      order begins according to addressing modes for store insns
10747      STRH insn.  */
10748
10749   /* LDR or STR?  */
10750   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10751     {
10752       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10753       /* LDR insn has a capability to do branching, if
10754          MOV LR, PC is precedded by LDR insn having Rn as R15
10755          in that case, it emulates branch and link insn, and hence we
10756          need to save CSPR and PC as well.  */
10757       if (15 != reg_dest)
10758         {
10759           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10760           arm_insn_r->reg_rec_count = 1;
10761         }
10762       else
10763         {
10764           record_buf[0] = reg_dest;
10765           record_buf[1] = ARM_PS_REGNUM;
10766           arm_insn_r->reg_rec_count = 2;
10767         }
10768     }
10769   else
10770     {
10771       if (! bits (arm_insn_r->arm_insn, 4, 11))
10772         {
10773           /* Store insn, register offset and register pre-indexed,
10774              register post-indexed.  */
10775           /* Get Rm.  */
10776           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10777           /* Get Rn.  */
10778           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10779           regcache_raw_read_unsigned (reg_cache, reg_src1
10780                                       , &u_regval[0]);
10781           regcache_raw_read_unsigned (reg_cache, reg_src2
10782                                       , &u_regval[1]);
10783           if (15 == reg_src2)
10784             {
10785               /* If R15 was used as Rn, hence current PC+8.  */
10786               /* Pre-indexed mode doesnt reach here ; illegal insn.  */
10787                 u_regval[0] = u_regval[0] + 8;
10788             }
10789           /* Calculate target store address, Rn +/- Rm, register offset.  */
10790           /* U == 1.  */
10791           if (bit (arm_insn_r->arm_insn, 23))
10792             {
10793               tgt_mem_addr = u_regval[0] + u_regval[1];
10794             }
10795           else
10796             {
10797               tgt_mem_addr = u_regval[1] - u_regval[0];
10798             }
10799
10800           switch (arm_insn_r->opcode)
10801             {
10802               /* STR.  */
10803               case 8:
10804               case 12:
10805               /* STR.  */    
10806               case 9:
10807               case 13:
10808               /* STRT.  */
10809               case 1:
10810               case 5:
10811               /* STR.  */
10812               case 0:
10813               case 4:
10814                 record_buf_mem[0] = 4;
10815               break;
10816
10817               /* STRB.  */
10818               case 10:
10819               case 14:
10820               /* STRB.  */
10821               case 11:
10822               case 15:
10823               /* STRBT.  */    
10824               case 3:
10825               case 7:
10826               /* STRB.  */
10827               case 2:
10828               case 6:
10829                 record_buf_mem[0] = 1;
10830               break;
10831
10832               default:
10833                 gdb_assert_not_reached ("no decoding pattern found");
10834               break;
10835             }
10836           record_buf_mem[1] = tgt_mem_addr;
10837           arm_insn_r->mem_rec_count = 1;
10838
10839           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10840               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10841               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10842               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10843               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10844               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10845              )
10846             {
10847               /* Rn is going to be changed in pre-indexed mode and
10848                  post-indexed mode as well.  */
10849               record_buf[0] = reg_src2;
10850               arm_insn_r->reg_rec_count = 1;
10851             }
10852         }
10853       else
10854         {
10855           /* Store insn, scaled register offset; scaled pre-indexed.  */
10856           offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10857           /* Get Rm.  */
10858           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10859           /* Get Rn.  */
10860           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10861           /* Get shift_imm.  */
10862           shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10863           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10864           regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10865           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10866           /* Offset_12 used as shift.  */
10867           switch (offset_12)
10868             {
10869               case 0:
10870                 /* Offset_12 used as index.  */
10871                 offset_12 = u_regval[0] << shift_imm;
10872               break;
10873
10874               case 1:
10875                 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10876               break;
10877
10878               case 2:
10879                 if (!shift_imm)
10880                   {
10881                     if (bit (u_regval[0], 31))
10882                       {
10883                         offset_12 = 0xFFFFFFFF;
10884                       }
10885                     else
10886                       {
10887                         offset_12 = 0;
10888                       }
10889                   }
10890                 else
10891                   {
10892                     /* This is arithmetic shift.  */
10893                     offset_12 = s_word >> shift_imm;
10894                   }
10895                 break;
10896
10897               case 3:
10898                 if (!shift_imm)
10899                   {
10900                     regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10901                                                 &u_regval[1]);
10902                     /* Get C flag value and shift it by 31.  */
10903                     offset_12 = (((bit (u_regval[1], 29)) << 31) \
10904                                   | (u_regval[0]) >> 1);
10905                   }
10906                 else
10907                   {
10908                     offset_12 = (u_regval[0] >> shift_imm) \
10909                                 | (u_regval[0] <<
10910                                 (sizeof(uint32_t) - shift_imm));
10911                   }
10912               break;
10913
10914               default:
10915                 gdb_assert_not_reached ("no decoding pattern found");
10916               break;
10917             }
10918
10919           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10920           /* bit U set.  */
10921           if (bit (arm_insn_r->arm_insn, 23))
10922             {
10923               tgt_mem_addr = u_regval[1] + offset_12;
10924             }
10925           else
10926             {
10927               tgt_mem_addr = u_regval[1] - offset_12;
10928             }
10929
10930           switch (arm_insn_r->opcode)
10931             {
10932               /* STR.  */
10933               case 8:
10934               case 12:
10935               /* STR.  */    
10936               case 9:
10937               case 13:
10938               /* STRT.  */
10939               case 1:
10940               case 5:
10941               /* STR.  */
10942               case 0:
10943               case 4:
10944                 record_buf_mem[0] = 4;
10945               break;
10946
10947               /* STRB.  */
10948               case 10:
10949               case 14:
10950               /* STRB.  */
10951               case 11:
10952               case 15:
10953               /* STRBT.  */    
10954               case 3:
10955               case 7:
10956               /* STRB.  */
10957               case 2:
10958               case 6:
10959                 record_buf_mem[0] = 1;
10960               break;
10961
10962               default:
10963                 gdb_assert_not_reached ("no decoding pattern found");
10964               break;
10965             }
10966           record_buf_mem[1] = tgt_mem_addr;
10967           arm_insn_r->mem_rec_count = 1;
10968
10969           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10970               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10971               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10972               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10973               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10974               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10975              )
10976             {
10977               /* Rn is going to be changed in register scaled pre-indexed
10978                  mode,and scaled post indexed mode.  */
10979               record_buf[0] = reg_src2;
10980               arm_insn_r->reg_rec_count = 1;
10981             }
10982         }
10983     }
10984
10985   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10986   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10987   return 0;
10988 }
10989
10990 /* Handle ARM mode instructions with opcode 100.  */
10991
10992 static int
10993 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
10994 {
10995   struct regcache *reg_cache = arm_insn_r->regcache;
10996   uint32_t register_count = 0, register_bits;
10997   uint32_t reg_base, addr_mode;
10998   uint32_t record_buf[24], record_buf_mem[48];
10999   uint32_t wback;
11000   ULONGEST u_regval;
11001
11002   /* Fetch the list of registers.  */
11003   register_bits = bits (arm_insn_r->arm_insn, 0, 15);
11004   arm_insn_r->reg_rec_count = 0;
11005
11006   /* Fetch the base register that contains the address we are loading data
11007      to.  */
11008   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11009
11010   /* Calculate wback.  */
11011   wback = (bit (arm_insn_r->arm_insn, 21) == 1);
11012
11013   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11014     {
11015       /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB.  */
11016
11017       /* Find out which registers are going to be loaded from memory.  */
11018       while (register_bits)
11019         {
11020           if (register_bits & 0x00000001)
11021             record_buf[arm_insn_r->reg_rec_count++] = register_count;
11022           register_bits = register_bits >> 1;
11023           register_count++;
11024         }
11025
11026   
11027       /* If wback is true, also save the base register, which is going to be
11028          written to.  */
11029       if (wback)
11030         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11031
11032       /* Save the CPSR register.  */
11033       record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11034     }
11035   else
11036     {
11037       /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA).  */
11038
11039       addr_mode = bits (arm_insn_r->arm_insn, 23, 24); 
11040
11041       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11042
11043       /* Find out how many registers are going to be stored to memory.  */
11044       while (register_bits)
11045         {
11046           if (register_bits & 0x00000001)
11047             register_count++;
11048           register_bits = register_bits >> 1;
11049         }
11050
11051       switch (addr_mode)
11052         {
11053           /* STMDA (STMED): Decrement after.  */
11054           case 0:
11055           record_buf_mem[1] = (uint32_t) u_regval
11056                               - register_count * INT_REGISTER_SIZE + 4;
11057           break;
11058           /* STM (STMIA, STMEA): Increment after.  */
11059           case 1:
11060           record_buf_mem[1] = (uint32_t) u_regval;
11061           break;
11062           /* STMDB (STMFD): Decrement before.  */
11063           case 2:
11064           record_buf_mem[1] = (uint32_t) u_regval
11065                               - register_count * INT_REGISTER_SIZE;
11066           break;
11067           /* STMIB (STMFA): Increment before.  */
11068           case 3:
11069           record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11070           break;
11071           default:
11072             gdb_assert_not_reached ("no decoding pattern found");
11073           break;
11074         }
11075
11076       record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11077       arm_insn_r->mem_rec_count = 1;
11078
11079       /* If wback is true, also save the base register, which is going to be
11080          written to.  */
11081       if (wback)
11082         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11083     }
11084
11085   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11086   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11087   return 0;
11088 }
11089
11090 /* Handling opcode 101 insns.  */
11091
11092 static int
11093 arm_record_b_bl (insn_decode_record *arm_insn_r)
11094 {
11095   uint32_t record_buf[8];
11096
11097   /* Handle B, BL, BLX(1) insns.  */
11098   /* B simply branches so we do nothing here.  */
11099   /* Note: BLX(1) doesnt fall here but instead it falls into
11100      extension space.  */
11101   if (bit (arm_insn_r->arm_insn, 24))
11102   {
11103     record_buf[0] = ARM_LR_REGNUM;
11104     arm_insn_r->reg_rec_count = 1;
11105   }
11106
11107   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11108
11109   return 0;
11110 }
11111
11112 static int
11113 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11114 {
11115   printf_unfiltered (_("Process record does not support instruction "
11116                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11117                      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11118
11119   return -1;
11120 }
11121
11122 /* Record handler for vector data transfer instructions.  */
11123
11124 static int
11125 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11126 {
11127   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11128   uint32_t record_buf[4];
11129
11130   reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11131   reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11132   bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11133   bit_l = bit (arm_insn_r->arm_insn, 20);
11134   bit_c = bit (arm_insn_r->arm_insn, 8);
11135
11136   /* Handle VMOV instruction.  */
11137   if (bit_l && bit_c)
11138     {
11139       record_buf[0] = reg_t;
11140       arm_insn_r->reg_rec_count = 1;
11141     }
11142   else if (bit_l && !bit_c)
11143     {
11144       /* Handle VMOV instruction.  */
11145       if (bits_a == 0x00)
11146         {
11147           record_buf[0] = reg_t;
11148           arm_insn_r->reg_rec_count = 1;
11149         }
11150       /* Handle VMRS instruction.  */
11151       else if (bits_a == 0x07)
11152         {
11153           if (reg_t == 15)
11154             reg_t = ARM_PS_REGNUM;
11155
11156           record_buf[0] = reg_t;
11157           arm_insn_r->reg_rec_count = 1;
11158         }
11159     }
11160   else if (!bit_l && !bit_c)
11161     {
11162       /* Handle VMOV instruction.  */
11163       if (bits_a == 0x00)
11164         {
11165           record_buf[0] = ARM_D0_REGNUM + reg_v;
11166
11167           arm_insn_r->reg_rec_count = 1;
11168         }
11169       /* Handle VMSR instruction.  */
11170       else if (bits_a == 0x07)
11171         {
11172           record_buf[0] = ARM_FPSCR_REGNUM;
11173           arm_insn_r->reg_rec_count = 1;
11174         }
11175     }
11176   else if (!bit_l && bit_c)
11177     {
11178       /* Handle VMOV instruction.  */
11179       if (!(bits_a & 0x04))
11180         {
11181           record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11182                           + ARM_D0_REGNUM;
11183           arm_insn_r->reg_rec_count = 1;
11184         }
11185       /* Handle VDUP instruction.  */
11186       else
11187         {
11188           if (bit (arm_insn_r->arm_insn, 21))
11189             {
11190               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11191               record_buf[0] = reg_v + ARM_D0_REGNUM;
11192               record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11193               arm_insn_r->reg_rec_count = 2;
11194             }
11195           else
11196             {
11197               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11198               record_buf[0] = reg_v + ARM_D0_REGNUM;
11199               arm_insn_r->reg_rec_count = 1;
11200             }
11201         }
11202     }
11203
11204   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11205   return 0;
11206 }
11207
11208 /* Record handler for extension register load/store instructions.  */
11209
11210 static int
11211 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11212 {
11213   uint32_t opcode, single_reg;
11214   uint8_t op_vldm_vstm;
11215   uint32_t record_buf[8], record_buf_mem[128];
11216   ULONGEST u_regval = 0;
11217
11218   struct regcache *reg_cache = arm_insn_r->regcache;
11219
11220   opcode = bits (arm_insn_r->arm_insn, 20, 24);
11221   single_reg = !bit (arm_insn_r->arm_insn, 8);
11222   op_vldm_vstm = opcode & 0x1b;
11223
11224   /* Handle VMOV instructions.  */
11225   if ((opcode & 0x1e) == 0x04)
11226     {
11227       if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11228         {
11229           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11230           record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11231           arm_insn_r->reg_rec_count = 2;
11232         }
11233       else
11234         {
11235           uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11236           uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11237
11238           if (single_reg)
11239             {
11240               /* The first S register number m is REG_M:M (M is bit 5),
11241                  the corresponding D register number is REG_M:M / 2, which
11242                  is REG_M.  */
11243               record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11244               /* The second S register number is REG_M:M + 1, the
11245                  corresponding D register number is (REG_M:M + 1) / 2.
11246                  IOW, if bit M is 1, the first and second S registers
11247                  are mapped to different D registers, otherwise, they are
11248                  in the same D register.  */
11249               if (bit_m)
11250                 {
11251                   record_buf[arm_insn_r->reg_rec_count++]
11252                     = ARM_D0_REGNUM + reg_m + 1;
11253                 }
11254             }
11255           else
11256             {
11257               record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11258               arm_insn_r->reg_rec_count = 1;
11259             }
11260         }
11261     }
11262   /* Handle VSTM and VPUSH instructions.  */
11263   else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11264            || op_vldm_vstm == 0x12)
11265     {
11266       uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11267       uint32_t memory_index = 0;
11268
11269       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11270       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11271       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11272       imm_off32 = imm_off8 << 2;
11273       memory_count = imm_off8;
11274
11275       if (bit (arm_insn_r->arm_insn, 23))
11276         start_address = u_regval;
11277       else
11278         start_address = u_regval - imm_off32;
11279
11280       if (bit (arm_insn_r->arm_insn, 21))
11281         {
11282           record_buf[0] = reg_rn;
11283           arm_insn_r->reg_rec_count = 1;
11284         }
11285
11286       while (memory_count > 0)
11287         {
11288           if (single_reg)
11289             {
11290               record_buf_mem[memory_index] = 4;
11291               record_buf_mem[memory_index + 1] = start_address;
11292               start_address = start_address + 4;
11293               memory_index = memory_index + 2;
11294             }
11295           else
11296             {
11297               record_buf_mem[memory_index] = 4;
11298               record_buf_mem[memory_index + 1] = start_address;
11299               record_buf_mem[memory_index + 2] = 4;
11300               record_buf_mem[memory_index + 3] = start_address + 4;
11301               start_address = start_address + 8;
11302               memory_index = memory_index + 4;
11303             }
11304           memory_count--;
11305         }
11306       arm_insn_r->mem_rec_count = (memory_index >> 1);
11307     }
11308   /* Handle VLDM instructions.  */
11309   else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11310            || op_vldm_vstm == 0x13)
11311     {
11312       uint32_t reg_count, reg_vd;
11313       uint32_t reg_index = 0;
11314       uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11315
11316       reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11317       reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11318
11319       /* REG_VD is the first D register number.  If the instruction
11320          loads memory to S registers (SINGLE_REG is TRUE), the register
11321          number is (REG_VD << 1 | bit D), so the corresponding D
11322          register number is (REG_VD << 1 | bit D) / 2 = REG_VD.  */
11323       if (!single_reg)
11324         reg_vd = reg_vd | (bit_d << 4);
11325
11326       if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11327         record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11328
11329       /* If the instruction loads memory to D register, REG_COUNT should
11330          be divided by 2, according to the ARM Architecture Reference
11331          Manual.  If the instruction loads memory to S register, divide by
11332          2 as well because two S registers are mapped to D register.  */
11333       reg_count  = reg_count / 2;
11334       if (single_reg && bit_d)
11335         {
11336           /* Increase the register count if S register list starts from
11337              an odd number (bit d is one).  */
11338           reg_count++;
11339         }
11340
11341       while (reg_count > 0)
11342         {
11343           record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11344           reg_count--;
11345         }
11346       arm_insn_r->reg_rec_count = reg_index;
11347     }
11348   /* VSTR Vector store register.  */
11349   else if ((opcode & 0x13) == 0x10)
11350     {
11351       uint32_t start_address, reg_rn, imm_off32, imm_off8;
11352       uint32_t memory_index = 0;
11353
11354       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11355       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11356       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11357       imm_off32 = imm_off8 << 2;
11358
11359       if (bit (arm_insn_r->arm_insn, 23))
11360         start_address = u_regval + imm_off32;
11361       else
11362         start_address = u_regval - imm_off32;
11363
11364       if (single_reg)
11365         {
11366           record_buf_mem[memory_index] = 4;
11367           record_buf_mem[memory_index + 1] = start_address;
11368           arm_insn_r->mem_rec_count = 1;
11369         }
11370       else
11371         {
11372           record_buf_mem[memory_index] = 4;
11373           record_buf_mem[memory_index + 1] = start_address;
11374           record_buf_mem[memory_index + 2] = 4;
11375           record_buf_mem[memory_index + 3] = start_address + 4;
11376           arm_insn_r->mem_rec_count = 2;
11377         }
11378     }
11379   /* VLDR Vector load register.  */
11380   else if ((opcode & 0x13) == 0x11)
11381     {
11382       uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11383
11384       if (!single_reg)
11385         {
11386           reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11387           record_buf[0] = ARM_D0_REGNUM + reg_vd;
11388         }
11389       else
11390         {
11391           reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11392           /* Record register D rather than pseudo register S.  */
11393           record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11394         }
11395       arm_insn_r->reg_rec_count = 1;
11396     }
11397
11398   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11399   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11400   return 0;
11401 }
11402
11403 /* Record handler for arm/thumb mode VFP data processing instructions.  */
11404
11405 static int
11406 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11407 {
11408   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11409   uint32_t record_buf[4];
11410   enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11411   enum insn_types curr_insn_type = INSN_INV;
11412
11413   reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11414   opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11415   opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11416   opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11417   dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11418   bit_d = bit (arm_insn_r->arm_insn, 22);
11419   /* Mask off the "D" bit.  */
11420   opc1 = opc1 & ~0x04;
11421
11422   /* Handle VMLA, VMLS.  */
11423   if (opc1 == 0x00)
11424     {
11425       if (bit (arm_insn_r->arm_insn, 10))
11426         {
11427           if (bit (arm_insn_r->arm_insn, 6))
11428             curr_insn_type = INSN_T0;
11429           else
11430             curr_insn_type = INSN_T1;
11431         }
11432       else
11433         {
11434           if (dp_op_sz)
11435             curr_insn_type = INSN_T1;
11436           else
11437             curr_insn_type = INSN_T2;
11438         }
11439     }
11440   /* Handle VNMLA, VNMLS, VNMUL.  */
11441   else if (opc1 == 0x01)
11442     {
11443       if (dp_op_sz)
11444         curr_insn_type = INSN_T1;
11445       else
11446         curr_insn_type = INSN_T2;
11447     }
11448   /* Handle VMUL.  */
11449   else if (opc1 == 0x02 && !(opc3 & 0x01))
11450     {
11451       if (bit (arm_insn_r->arm_insn, 10))
11452         {
11453           if (bit (arm_insn_r->arm_insn, 6))
11454             curr_insn_type = INSN_T0;
11455           else
11456             curr_insn_type = INSN_T1;
11457         }
11458       else
11459         {
11460           if (dp_op_sz)
11461             curr_insn_type = INSN_T1;
11462           else
11463             curr_insn_type = INSN_T2;
11464         }
11465     }
11466   /* Handle VADD, VSUB.  */
11467   else if (opc1 == 0x03)
11468     {
11469       if (!bit (arm_insn_r->arm_insn, 9))
11470         {
11471           if (bit (arm_insn_r->arm_insn, 6))
11472             curr_insn_type = INSN_T0;
11473           else
11474             curr_insn_type = INSN_T1;
11475         }
11476       else
11477         {
11478           if (dp_op_sz)
11479             curr_insn_type = INSN_T1;
11480           else
11481             curr_insn_type = INSN_T2;
11482         }
11483     }
11484   /* Handle VDIV.  */
11485   else if (opc1 == 0x08)
11486     {
11487       if (dp_op_sz)
11488         curr_insn_type = INSN_T1;
11489       else
11490         curr_insn_type = INSN_T2;
11491     }
11492   /* Handle all other vfp data processing instructions.  */
11493   else if (opc1 == 0x0b)
11494     {
11495       /* Handle VMOV.  */
11496       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11497         {
11498           if (bit (arm_insn_r->arm_insn, 4))
11499             {
11500               if (bit (arm_insn_r->arm_insn, 6))
11501                 curr_insn_type = INSN_T0;
11502               else
11503                 curr_insn_type = INSN_T1;
11504             }
11505           else
11506             {
11507               if (dp_op_sz)
11508                 curr_insn_type = INSN_T1;
11509               else
11510                 curr_insn_type = INSN_T2;
11511             }
11512         }
11513       /* Handle VNEG and VABS.  */
11514       else if ((opc2 == 0x01 && opc3 == 0x01)
11515               || (opc2 == 0x00 && opc3 == 0x03))
11516         {
11517           if (!bit (arm_insn_r->arm_insn, 11))
11518             {
11519               if (bit (arm_insn_r->arm_insn, 6))
11520                 curr_insn_type = INSN_T0;
11521               else
11522                 curr_insn_type = INSN_T1;
11523             }
11524           else
11525             {
11526               if (dp_op_sz)
11527                 curr_insn_type = INSN_T1;
11528               else
11529                 curr_insn_type = INSN_T2;
11530             }
11531         }
11532       /* Handle VSQRT.  */
11533       else if (opc2 == 0x01 && opc3 == 0x03)
11534         {
11535           if (dp_op_sz)
11536             curr_insn_type = INSN_T1;
11537           else
11538             curr_insn_type = INSN_T2;
11539         }
11540       /* Handle VCVT.  */
11541       else if (opc2 == 0x07 && opc3 == 0x03)
11542         {
11543           if (!dp_op_sz)
11544             curr_insn_type = INSN_T1;
11545           else
11546             curr_insn_type = INSN_T2;
11547         }
11548       else if (opc3 & 0x01)
11549         {
11550           /* Handle VCVT.  */
11551           if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11552             {
11553               if (!bit (arm_insn_r->arm_insn, 18))
11554                 curr_insn_type = INSN_T2;
11555               else
11556                 {
11557                   if (dp_op_sz)
11558                     curr_insn_type = INSN_T1;
11559                   else
11560                     curr_insn_type = INSN_T2;
11561                 }
11562             }
11563           /* Handle VCVT.  */
11564           else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11565             {
11566               if (dp_op_sz)
11567                 curr_insn_type = INSN_T1;
11568               else
11569                 curr_insn_type = INSN_T2;
11570             }
11571           /* Handle VCVTB, VCVTT.  */
11572           else if ((opc2 & 0x0e) == 0x02)
11573             curr_insn_type = INSN_T2;
11574           /* Handle VCMP, VCMPE.  */
11575           else if ((opc2 & 0x0e) == 0x04)
11576             curr_insn_type = INSN_T3;
11577         }
11578     }
11579
11580   switch (curr_insn_type)
11581     {
11582       case INSN_T0:
11583         reg_vd = reg_vd | (bit_d << 4);
11584         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11585         record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11586         arm_insn_r->reg_rec_count = 2;
11587         break;
11588
11589       case INSN_T1:
11590         reg_vd = reg_vd | (bit_d << 4);
11591         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11592         arm_insn_r->reg_rec_count = 1;
11593         break;
11594
11595       case INSN_T2:
11596         reg_vd = (reg_vd << 1) | bit_d;
11597         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11598         arm_insn_r->reg_rec_count = 1;
11599         break;
11600
11601       case INSN_T3:
11602         record_buf[0] = ARM_FPSCR_REGNUM;
11603         arm_insn_r->reg_rec_count = 1;
11604         break;
11605
11606       default:
11607         gdb_assert_not_reached ("no decoding pattern found");
11608         break;
11609     }
11610
11611   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11612   return 0;
11613 }
11614
11615 /* Handling opcode 110 insns.  */
11616
11617 static int
11618 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11619 {
11620   uint32_t op1, op1_ebit, coproc;
11621
11622   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11623   op1 = bits (arm_insn_r->arm_insn, 20, 25);
11624   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11625
11626   if ((coproc & 0x0e) == 0x0a)
11627     {
11628       /* Handle extension register ld/st instructions.  */
11629       if (!(op1 & 0x20))
11630         return arm_record_exreg_ld_st_insn (arm_insn_r);
11631
11632       /* 64-bit transfers between arm core and extension registers.  */
11633       if ((op1 & 0x3e) == 0x04)
11634         return arm_record_exreg_ld_st_insn (arm_insn_r);
11635     }
11636   else
11637     {
11638       /* Handle coprocessor ld/st instructions.  */
11639       if (!(op1 & 0x3a))
11640         {
11641           /* Store.  */
11642           if (!op1_ebit)
11643             return arm_record_unsupported_insn (arm_insn_r);
11644           else
11645             /* Load.  */
11646             return arm_record_unsupported_insn (arm_insn_r);
11647         }
11648
11649       /* Move to coprocessor from two arm core registers.  */
11650       if (op1 == 0x4)
11651         return arm_record_unsupported_insn (arm_insn_r);
11652
11653       /* Move to two arm core registers from coprocessor.  */
11654       if (op1 == 0x5)
11655         {
11656           uint32_t reg_t[2];
11657
11658           reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11659           reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11660           arm_insn_r->reg_rec_count = 2;
11661
11662           REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11663           return 0;
11664        }
11665     }
11666   return arm_record_unsupported_insn (arm_insn_r);
11667 }
11668
11669 /* Handling opcode 111 insns.  */
11670
11671 static int
11672 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11673 {
11674   uint32_t op, op1_ebit, coproc, bits_24_25;
11675   struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11676   struct regcache *reg_cache = arm_insn_r->regcache;
11677
11678   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11679   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11680   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11681   op = bit (arm_insn_r->arm_insn, 4);
11682   bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11683
11684   /* Handle arm SWI/SVC system call instructions.  */
11685   if (bits_24_25 == 0x3)
11686     {
11687       if (tdep->arm_syscall_record != NULL)
11688         {
11689           ULONGEST svc_operand, svc_number;
11690
11691           svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11692
11693           if (svc_operand)  /* OABI.  */
11694             svc_number = svc_operand - 0x900000;
11695           else /* EABI.  */
11696             regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11697
11698           return tdep->arm_syscall_record (reg_cache, svc_number);
11699         }
11700       else
11701         {
11702           printf_unfiltered (_("no syscall record support\n"));
11703           return -1;
11704         }
11705     }
11706   else if (bits_24_25 == 0x02)
11707     {
11708       if (op)
11709         {
11710           if ((coproc & 0x0e) == 0x0a)
11711             {
11712               /* 8, 16, and 32-bit transfer */
11713               return arm_record_vdata_transfer_insn (arm_insn_r);
11714             }
11715           else
11716             {
11717               if (op1_ebit)
11718                 {
11719                   /* MRC, MRC2 */
11720                   uint32_t record_buf[1];
11721
11722                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11723                   if (record_buf[0] == 15)
11724                     record_buf[0] = ARM_PS_REGNUM;
11725
11726                   arm_insn_r->reg_rec_count = 1;
11727                   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11728                              record_buf);
11729                   return 0;
11730                 }
11731               else
11732                 {
11733                   /* MCR, MCR2 */
11734                   return -1;
11735                 }
11736             }
11737         }
11738       else
11739         {
11740           if ((coproc & 0x0e) == 0x0a)
11741             {
11742               /* VFP data-processing instructions.  */
11743               return arm_record_vfp_data_proc_insn (arm_insn_r);
11744             }
11745           else
11746             {
11747               /* CDP, CDP2 */
11748               return -1;
11749             }
11750         }
11751     }
11752   else
11753     {
11754       unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11755
11756       if (op1 == 5)
11757         {
11758           if ((coproc & 0x0e) != 0x0a)
11759             {
11760               /* MRRC, MRRC2 */
11761               return -1;
11762             }
11763         }
11764       else if (op1 == 4 || op1 == 5)
11765         {
11766           if ((coproc & 0x0e) == 0x0a)
11767             {
11768               /* 64-bit transfers between ARM core and extension */
11769               return -1;
11770             }
11771           else if (op1 == 4)
11772             {
11773               /* MCRR, MCRR2 */
11774               return -1;
11775             }
11776         }
11777       else if (op1 == 0 || op1 == 1)
11778         {
11779           /* UNDEFINED */
11780           return -1;
11781         }
11782       else
11783         {
11784           if ((coproc & 0x0e) == 0x0a)
11785             {
11786               /* Extension register load/store */
11787             }
11788           else
11789             {
11790               /* STC, STC2, LDC, LDC2 */
11791             }
11792           return -1;
11793         }
11794     }
11795
11796   return -1;
11797 }
11798
11799 /* Handling opcode 000 insns.  */
11800
11801 static int
11802 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11803 {
11804   uint32_t record_buf[8];
11805   uint32_t reg_src1 = 0;
11806
11807   reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11808
11809   record_buf[0] = ARM_PS_REGNUM;
11810   record_buf[1] = reg_src1;
11811   thumb_insn_r->reg_rec_count = 2;
11812
11813   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11814
11815   return 0;
11816 }
11817
11818
11819 /* Handling opcode 001 insns.  */
11820
11821 static int
11822 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11823 {
11824   uint32_t record_buf[8];
11825   uint32_t reg_src1 = 0;
11826
11827   reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11828
11829   record_buf[0] = ARM_PS_REGNUM;
11830   record_buf[1] = reg_src1;
11831   thumb_insn_r->reg_rec_count = 2;
11832
11833   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11834
11835   return 0;
11836 }
11837
11838 /* Handling opcode 010 insns.  */
11839
11840 static int
11841 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11842 {
11843   struct regcache *reg_cache =  thumb_insn_r->regcache;
11844   uint32_t record_buf[8], record_buf_mem[8];
11845
11846   uint32_t reg_src1 = 0, reg_src2 = 0;
11847   uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11848
11849   ULONGEST u_regval[2] = {0};
11850
11851   opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11852
11853   if (bit (thumb_insn_r->arm_insn, 12))
11854     {
11855       /* Handle load/store register offset.  */
11856       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11857
11858       if (in_inclusive_range (opB, 4U, 7U))
11859         {
11860           /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
11861           reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11862           record_buf[0] = reg_src1;
11863           thumb_insn_r->reg_rec_count = 1;
11864         }
11865       else if (in_inclusive_range (opB, 0U, 2U))
11866         {
11867           /* STR(2), STRB(2), STRH(2) .  */
11868           reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11869           reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11870           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11871           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11872           if (0 == opB)
11873             record_buf_mem[0] = 4;    /* STR (2).  */
11874           else if (2 == opB)
11875             record_buf_mem[0] = 1;    /*  STRB (2).  */
11876           else if (1 == opB)
11877             record_buf_mem[0] = 2;    /* STRH (2).  */
11878           record_buf_mem[1] = u_regval[0] + u_regval[1];
11879           thumb_insn_r->mem_rec_count = 1;
11880         }
11881     }
11882   else if (bit (thumb_insn_r->arm_insn, 11))
11883     {
11884       /* Handle load from literal pool.  */
11885       /* LDR(3).  */
11886       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11887       record_buf[0] = reg_src1;
11888       thumb_insn_r->reg_rec_count = 1;
11889     }
11890   else if (opcode1)
11891     {
11892       /* Special data instructions and branch and exchange */
11893       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11894       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11895       if ((3 == opcode2) && (!opcode3))
11896         {
11897           /* Branch with exchange.  */
11898           record_buf[0] = ARM_PS_REGNUM;
11899           thumb_insn_r->reg_rec_count = 1;
11900         }
11901       else
11902         {
11903           /* Format 8; special data processing insns.  */
11904           record_buf[0] = ARM_PS_REGNUM;
11905           record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11906                            | bits (thumb_insn_r->arm_insn, 0, 2));
11907           thumb_insn_r->reg_rec_count = 2;
11908         }
11909     }
11910   else
11911     {
11912       /* Format 5; data processing insns.  */
11913       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11914       if (bit (thumb_insn_r->arm_insn, 7))
11915         {
11916           reg_src1 = reg_src1 + 8;
11917         }
11918       record_buf[0] = ARM_PS_REGNUM;
11919       record_buf[1] = reg_src1;
11920       thumb_insn_r->reg_rec_count = 2;
11921     }
11922
11923   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11924   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11925              record_buf_mem);
11926
11927   return 0;
11928 }
11929
11930 /* Handling opcode 001 insns.  */
11931
11932 static int
11933 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11934 {
11935   struct regcache *reg_cache = thumb_insn_r->regcache;
11936   uint32_t record_buf[8], record_buf_mem[8];
11937
11938   uint32_t reg_src1 = 0;
11939   uint32_t opcode = 0, immed_5 = 0;
11940
11941   ULONGEST u_regval = 0;
11942
11943   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11944
11945   if (opcode)
11946     {
11947       /* LDR(1).  */
11948       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11949       record_buf[0] = reg_src1;
11950       thumb_insn_r->reg_rec_count = 1;
11951     }
11952   else
11953     {
11954       /* STR(1).  */
11955       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11956       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11957       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11958       record_buf_mem[0] = 4;
11959       record_buf_mem[1] = u_regval + (immed_5 * 4);
11960       thumb_insn_r->mem_rec_count = 1;
11961     }
11962
11963   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11964   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
11965              record_buf_mem);
11966
11967   return 0;
11968 }
11969
11970 /* Handling opcode 100 insns.  */
11971
11972 static int
11973 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11974 {
11975   struct regcache *reg_cache = thumb_insn_r->regcache;
11976   uint32_t record_buf[8], record_buf_mem[8];
11977
11978   uint32_t reg_src1 = 0;
11979   uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11980
11981   ULONGEST u_regval = 0;
11982
11983   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11984
11985   if (3 == opcode)
11986     {
11987       /* LDR(4).  */
11988       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11989       record_buf[0] = reg_src1;
11990       thumb_insn_r->reg_rec_count = 1;
11991     }
11992   else if (1 == opcode)
11993     {
11994       /* LDRH(1).  */
11995       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11996       record_buf[0] = reg_src1;
11997       thumb_insn_r->reg_rec_count = 1;
11998     }
11999   else if (2 == opcode)
12000     {
12001       /* STR(3).  */
12002       immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
12003       regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12004       record_buf_mem[0] = 4;
12005       record_buf_mem[1] = u_regval + (immed_8 * 4);
12006       thumb_insn_r->mem_rec_count = 1;
12007     }
12008   else if (0 == opcode)
12009     {
12010       /* STRH(1).  */
12011       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12012       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12013       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12014       record_buf_mem[0] = 2;
12015       record_buf_mem[1] = u_regval + (immed_5 * 2);
12016       thumb_insn_r->mem_rec_count = 1;
12017     }
12018
12019   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12020   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12021              record_buf_mem);
12022
12023   return 0;
12024 }
12025
12026 /* Handling opcode 101 insns.  */
12027
12028 static int
12029 thumb_record_misc (insn_decode_record *thumb_insn_r)
12030 {
12031   struct regcache *reg_cache = thumb_insn_r->regcache;
12032
12033   uint32_t opcode = 0;
12034   uint32_t register_bits = 0, register_count = 0;
12035   uint32_t index = 0, start_address = 0;
12036   uint32_t record_buf[24], record_buf_mem[48];
12037   uint32_t reg_src1;
12038
12039   ULONGEST u_regval = 0;
12040
12041   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12042
12043   if (opcode == 0 || opcode == 1)
12044     {
12045       /* ADR and ADD (SP plus immediate) */
12046
12047       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12048       record_buf[0] = reg_src1;
12049       thumb_insn_r->reg_rec_count = 1;
12050     }
12051   else
12052     {
12053       /* Miscellaneous 16-bit instructions */
12054       uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
12055
12056       switch (opcode2)
12057         {
12058         case 6:
12059           /* SETEND and CPS */
12060           break;
12061         case 0:
12062           /* ADD/SUB (SP plus immediate)  */
12063           reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12064           record_buf[0] = ARM_SP_REGNUM;
12065           thumb_insn_r->reg_rec_count = 1;
12066           break;
12067         case 1: /* fall through  */
12068         case 3: /* fall through  */
12069         case 9: /* fall through  */
12070         case 11:
12071           /* CBNZ, CBZ */
12072           break;
12073         case 2:
12074           /* SXTH, SXTB, UXTH, UXTB */
12075           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12076           thumb_insn_r->reg_rec_count = 1;
12077           break;
12078         case 4: /* fall through  */
12079         case 5:
12080           /* PUSH.  */
12081           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12082           regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12083           while (register_bits)
12084             {
12085               if (register_bits & 0x00000001)
12086                 register_count++;
12087               register_bits = register_bits >> 1;
12088             }
12089           start_address = u_regval -  \
12090             (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12091           thumb_insn_r->mem_rec_count = register_count;
12092           while (register_count)
12093             {
12094               record_buf_mem[(register_count * 2) - 1] = start_address;
12095               record_buf_mem[(register_count * 2) - 2] = 4;
12096               start_address = start_address + 4;
12097               register_count--;
12098             }
12099           record_buf[0] = ARM_SP_REGNUM;
12100           thumb_insn_r->reg_rec_count = 1;
12101           break;
12102         case 10:
12103           /* REV, REV16, REVSH */
12104           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12105           thumb_insn_r->reg_rec_count = 1;
12106           break;
12107         case 12: /* fall through  */
12108         case 13:
12109           /* POP.  */
12110           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12111           while (register_bits)
12112             {
12113               if (register_bits & 0x00000001)
12114                 record_buf[index++] = register_count;
12115               register_bits = register_bits >> 1;
12116               register_count++;
12117             }
12118           record_buf[index++] = ARM_PS_REGNUM;
12119           record_buf[index++] = ARM_SP_REGNUM;
12120           thumb_insn_r->reg_rec_count = index;
12121           break;
12122         case 0xe:
12123           /* BKPT insn.  */
12124           /* Handle enhanced software breakpoint insn, BKPT.  */
12125           /* CPSR is changed to be executed in ARM state,  disabling normal
12126              interrupts, entering abort mode.  */
12127           /* According to high vector configuration PC is set.  */
12128           /* User hits breakpoint and type reverse, in that case, we need to go back with 
12129              previous CPSR and Program Counter.  */
12130           record_buf[0] = ARM_PS_REGNUM;
12131           record_buf[1] = ARM_LR_REGNUM;
12132           thumb_insn_r->reg_rec_count = 2;
12133           /* We need to save SPSR value, which is not yet done.  */
12134           printf_unfiltered (_("Process record does not support instruction "
12135                                "0x%0x at address %s.\n"),
12136                              thumb_insn_r->arm_insn,
12137                              paddress (thumb_insn_r->gdbarch,
12138                                        thumb_insn_r->this_addr));
12139           return -1;
12140
12141         case 0xf:
12142           /* If-Then, and hints */
12143           break;
12144         default:
12145           return -1;
12146         };
12147     }
12148
12149   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12150   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12151              record_buf_mem);
12152
12153   return 0;
12154 }
12155
12156 /* Handling opcode 110 insns.  */
12157
12158 static int
12159 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
12160 {
12161   struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12162   struct regcache *reg_cache = thumb_insn_r->regcache;
12163
12164   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
12165   uint32_t reg_src1 = 0;
12166   uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12167   uint32_t index = 0, start_address = 0;
12168   uint32_t record_buf[24], record_buf_mem[48];
12169
12170   ULONGEST u_regval = 0;
12171
12172   opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12173   opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12174
12175   if (1 == opcode2)
12176     {
12177
12178       /* LDMIA.  */
12179       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12180       /* Get Rn.  */
12181       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12182       while (register_bits)
12183         {
12184           if (register_bits & 0x00000001)
12185             record_buf[index++] = register_count;
12186           register_bits = register_bits >> 1;
12187           register_count++;
12188         }
12189       record_buf[index++] = reg_src1;
12190       thumb_insn_r->reg_rec_count = index;
12191     }
12192   else if (0 == opcode2)
12193     {
12194       /* It handles both STMIA.  */
12195       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12196       /* Get Rn.  */
12197       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12198       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12199       while (register_bits)
12200         {
12201           if (register_bits & 0x00000001)
12202             register_count++;
12203           register_bits = register_bits >> 1;
12204         }
12205       start_address = u_regval;
12206       thumb_insn_r->mem_rec_count = register_count;
12207       while (register_count)
12208         {
12209           record_buf_mem[(register_count * 2) - 1] = start_address;
12210           record_buf_mem[(register_count * 2) - 2] = 4;
12211           start_address = start_address + 4;
12212           register_count--;
12213         }
12214     }
12215   else if (0x1F == opcode1)
12216     {
12217         /* Handle arm syscall insn.  */
12218         if (tdep->arm_syscall_record != NULL)
12219           {
12220             regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12221             ret = tdep->arm_syscall_record (reg_cache, u_regval);
12222           }
12223         else
12224           {
12225             printf_unfiltered (_("no syscall record support\n"));
12226             return -1;
12227           }
12228     }
12229
12230   /* B (1), conditional branch is automatically taken care in process_record,
12231     as PC is saved there.  */
12232
12233   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12234   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12235              record_buf_mem);
12236
12237   return ret;
12238 }
12239
12240 /* Handling opcode 111 insns.  */
12241
12242 static int
12243 thumb_record_branch (insn_decode_record *thumb_insn_r)
12244 {
12245   uint32_t record_buf[8];
12246   uint32_t bits_h = 0;
12247
12248   bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12249
12250   if (2 == bits_h || 3 == bits_h)
12251     {
12252       /* BL */
12253       record_buf[0] = ARM_LR_REGNUM;
12254       thumb_insn_r->reg_rec_count = 1;
12255     }
12256   else if (1 == bits_h)
12257     {
12258       /* BLX(1). */
12259       record_buf[0] = ARM_PS_REGNUM;
12260       record_buf[1] = ARM_LR_REGNUM;
12261       thumb_insn_r->reg_rec_count = 2;
12262     }
12263
12264   /* B(2) is automatically taken care in process_record, as PC is 
12265      saved there.  */
12266
12267   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12268
12269   return 0;     
12270 }
12271
12272 /* Handler for thumb2 load/store multiple instructions.  */
12273
12274 static int
12275 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12276 {
12277   struct regcache *reg_cache = thumb2_insn_r->regcache;
12278
12279   uint32_t reg_rn, op;
12280   uint32_t register_bits = 0, register_count = 0;
12281   uint32_t index = 0, start_address = 0;
12282   uint32_t record_buf[24], record_buf_mem[48];
12283
12284   ULONGEST u_regval = 0;
12285
12286   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12287   op = bits (thumb2_insn_r->arm_insn, 23, 24);
12288
12289   if (0 == op || 3 == op)
12290     {
12291       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12292         {
12293           /* Handle RFE instruction.  */
12294           record_buf[0] = ARM_PS_REGNUM;
12295           thumb2_insn_r->reg_rec_count = 1;
12296         }
12297       else
12298         {
12299           /* Handle SRS instruction after reading banked SP.  */
12300           return arm_record_unsupported_insn (thumb2_insn_r);
12301         }
12302     }
12303   else if (1 == op || 2 == op)
12304     {
12305       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12306         {
12307           /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
12308           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12309           while (register_bits)
12310             {
12311               if (register_bits & 0x00000001)
12312                 record_buf[index++] = register_count;
12313
12314               register_count++;
12315               register_bits = register_bits >> 1;
12316             }
12317           record_buf[index++] = reg_rn;
12318           record_buf[index++] = ARM_PS_REGNUM;
12319           thumb2_insn_r->reg_rec_count = index;
12320         }
12321       else
12322         {
12323           /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
12324           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12325           regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12326           while (register_bits)
12327             {
12328               if (register_bits & 0x00000001)
12329                 register_count++;
12330
12331               register_bits = register_bits >> 1;
12332             }
12333
12334           if (1 == op)
12335             {
12336               /* Start address calculation for LDMDB/LDMEA.  */
12337               start_address = u_regval;
12338             }
12339           else if (2 == op)
12340             {
12341               /* Start address calculation for LDMDB/LDMEA.  */
12342               start_address = u_regval - register_count * 4;
12343             }
12344
12345           thumb2_insn_r->mem_rec_count = register_count;
12346           while (register_count)
12347             {
12348               record_buf_mem[register_count * 2 - 1] = start_address;
12349               record_buf_mem[register_count * 2 - 2] = 4;
12350               start_address = start_address + 4;
12351               register_count--;
12352             }
12353           record_buf[0] = reg_rn;
12354           record_buf[1] = ARM_PS_REGNUM;
12355           thumb2_insn_r->reg_rec_count = 2;
12356         }
12357     }
12358
12359   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12360             record_buf_mem);
12361   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12362             record_buf);
12363   return ARM_RECORD_SUCCESS;
12364 }
12365
12366 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12367    instructions.  */
12368
12369 static int
12370 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12371 {
12372   struct regcache *reg_cache = thumb2_insn_r->regcache;
12373
12374   uint32_t reg_rd, reg_rn, offset_imm;
12375   uint32_t reg_dest1, reg_dest2;
12376   uint32_t address, offset_addr;
12377   uint32_t record_buf[8], record_buf_mem[8];
12378   uint32_t op1, op2, op3;
12379
12380   ULONGEST u_regval[2];
12381
12382   op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12383   op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12384   op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12385
12386   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12387     {
12388       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12389         {
12390           reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12391           record_buf[0] = reg_dest1;
12392           record_buf[1] = ARM_PS_REGNUM;
12393           thumb2_insn_r->reg_rec_count = 2;
12394         }
12395
12396       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12397         {
12398           reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12399           record_buf[2] = reg_dest2;
12400           thumb2_insn_r->reg_rec_count = 3;
12401         }
12402     }
12403   else
12404     {
12405       reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12406       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12407
12408       if (0 == op1 && 0 == op2)
12409         {
12410           /* Handle STREX.  */
12411           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12412           address = u_regval[0] + (offset_imm * 4);
12413           record_buf_mem[0] = 4;
12414           record_buf_mem[1] = address;
12415           thumb2_insn_r->mem_rec_count = 1;
12416           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12417           record_buf[0] = reg_rd;
12418           thumb2_insn_r->reg_rec_count = 1;
12419         }
12420       else if (1 == op1 && 0 == op2)
12421         {
12422           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12423           record_buf[0] = reg_rd;
12424           thumb2_insn_r->reg_rec_count = 1;
12425           address = u_regval[0];
12426           record_buf_mem[1] = address;
12427
12428           if (4 == op3)
12429             {
12430               /* Handle STREXB.  */
12431               record_buf_mem[0] = 1;
12432               thumb2_insn_r->mem_rec_count = 1;
12433             }
12434           else if (5 == op3)
12435             {
12436               /* Handle STREXH.  */
12437               record_buf_mem[0] = 2 ;
12438               thumb2_insn_r->mem_rec_count = 1;
12439             }
12440           else if (7 == op3)
12441             {
12442               /* Handle STREXD.  */
12443               address = u_regval[0];
12444               record_buf_mem[0] = 4;
12445               record_buf_mem[2] = 4;
12446               record_buf_mem[3] = address + 4;
12447               thumb2_insn_r->mem_rec_count = 2;
12448             }
12449         }
12450       else
12451         {
12452           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12453
12454           if (bit (thumb2_insn_r->arm_insn, 24))
12455             {
12456               if (bit (thumb2_insn_r->arm_insn, 23))
12457                 offset_addr = u_regval[0] + (offset_imm * 4);
12458               else
12459                 offset_addr = u_regval[0] - (offset_imm * 4);
12460
12461               address = offset_addr;
12462             }
12463           else
12464             address = u_regval[0];
12465
12466           record_buf_mem[0] = 4;
12467           record_buf_mem[1] = address;
12468           record_buf_mem[2] = 4;
12469           record_buf_mem[3] = address + 4;
12470           thumb2_insn_r->mem_rec_count = 2;
12471           record_buf[0] = reg_rn;
12472           thumb2_insn_r->reg_rec_count = 1;
12473         }
12474     }
12475
12476   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12477             record_buf);
12478   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12479             record_buf_mem);
12480   return ARM_RECORD_SUCCESS;
12481 }
12482
12483 /* Handler for thumb2 data processing (shift register and modified immediate)
12484    instructions.  */
12485
12486 static int
12487 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12488 {
12489   uint32_t reg_rd, op;
12490   uint32_t record_buf[8];
12491
12492   op = bits (thumb2_insn_r->arm_insn, 21, 24);
12493   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12494
12495   if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12496     {
12497       record_buf[0] = ARM_PS_REGNUM;
12498       thumb2_insn_r->reg_rec_count = 1;
12499     }
12500   else
12501     {
12502       record_buf[0] = reg_rd;
12503       record_buf[1] = ARM_PS_REGNUM;
12504       thumb2_insn_r->reg_rec_count = 2;
12505     }
12506
12507   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12508             record_buf);
12509   return ARM_RECORD_SUCCESS;
12510 }
12511
12512 /* Generic handler for thumb2 instructions which effect destination and PS
12513    registers.  */
12514
12515 static int
12516 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12517 {
12518   uint32_t reg_rd;
12519   uint32_t record_buf[8];
12520
12521   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12522
12523   record_buf[0] = reg_rd;
12524   record_buf[1] = ARM_PS_REGNUM;
12525   thumb2_insn_r->reg_rec_count = 2;
12526
12527   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12528             record_buf);
12529   return ARM_RECORD_SUCCESS;
12530 }
12531
12532 /* Handler for thumb2 branch and miscellaneous control instructions.  */
12533
12534 static int
12535 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12536 {
12537   uint32_t op, op1, op2;
12538   uint32_t record_buf[8];
12539
12540   op = bits (thumb2_insn_r->arm_insn, 20, 26);
12541   op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12542   op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12543
12544   /* Handle MSR insn.  */
12545   if (!(op1 & 0x2) && 0x38 == op)
12546     {
12547       if (!(op2 & 0x3))
12548         {
12549           /* CPSR is going to be changed.  */
12550           record_buf[0] = ARM_PS_REGNUM;
12551           thumb2_insn_r->reg_rec_count = 1;
12552         }
12553       else
12554         {
12555           arm_record_unsupported_insn(thumb2_insn_r);
12556           return -1;
12557         }
12558     }
12559   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12560     {
12561       /* BLX.  */
12562       record_buf[0] = ARM_PS_REGNUM;
12563       record_buf[1] = ARM_LR_REGNUM;
12564       thumb2_insn_r->reg_rec_count = 2;
12565     }
12566
12567   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12568             record_buf);
12569   return ARM_RECORD_SUCCESS;
12570 }
12571
12572 /* Handler for thumb2 store single data item instructions.  */
12573
12574 static int
12575 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12576 {
12577   struct regcache *reg_cache = thumb2_insn_r->regcache;
12578
12579   uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12580   uint32_t address, offset_addr;
12581   uint32_t record_buf[8], record_buf_mem[8];
12582   uint32_t op1, op2;
12583
12584   ULONGEST u_regval[2];
12585
12586   op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12587   op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12588   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12589   regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12590
12591   if (bit (thumb2_insn_r->arm_insn, 23))
12592     {
12593       /* T2 encoding.  */
12594       offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12595       offset_addr = u_regval[0] + offset_imm;
12596       address = offset_addr;
12597     }
12598   else
12599     {
12600       /* T3 encoding.  */
12601       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12602         {
12603           /* Handle STRB (register).  */
12604           reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12605           regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12606           shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12607           offset_addr = u_regval[1] << shift_imm;
12608           address = u_regval[0] + offset_addr;
12609         }
12610       else
12611         {
12612           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12613           if (bit (thumb2_insn_r->arm_insn, 10))
12614             {
12615               if (bit (thumb2_insn_r->arm_insn, 9))
12616                 offset_addr = u_regval[0] + offset_imm;
12617               else
12618                 offset_addr = u_regval[0] - offset_imm;
12619
12620               address = offset_addr;
12621             }
12622           else
12623             address = u_regval[0];
12624         }
12625     }
12626
12627   switch (op1)
12628     {
12629       /* Store byte instructions.  */
12630       case 4:
12631       case 0:
12632         record_buf_mem[0] = 1;
12633         break;
12634       /* Store half word instructions.  */
12635       case 1:
12636       case 5:
12637         record_buf_mem[0] = 2;
12638         break;
12639       /* Store word instructions.  */
12640       case 2:
12641       case 6:
12642         record_buf_mem[0] = 4;
12643         break;
12644
12645       default:
12646         gdb_assert_not_reached ("no decoding pattern found");
12647         break;
12648     }
12649
12650   record_buf_mem[1] = address;
12651   thumb2_insn_r->mem_rec_count = 1;
12652   record_buf[0] = reg_rn;
12653   thumb2_insn_r->reg_rec_count = 1;
12654
12655   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12656             record_buf);
12657   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12658             record_buf_mem);
12659   return ARM_RECORD_SUCCESS;
12660 }
12661
12662 /* Handler for thumb2 load memory hints instructions.  */
12663
12664 static int
12665 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12666 {
12667   uint32_t record_buf[8];
12668   uint32_t reg_rt, reg_rn;
12669
12670   reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12671   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12672
12673   if (ARM_PC_REGNUM != reg_rt)
12674     {
12675       record_buf[0] = reg_rt;
12676       record_buf[1] = reg_rn;
12677       record_buf[2] = ARM_PS_REGNUM;
12678       thumb2_insn_r->reg_rec_count = 3;
12679
12680       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12681                 record_buf);
12682       return ARM_RECORD_SUCCESS;
12683     }
12684
12685   return ARM_RECORD_FAILURE;
12686 }
12687
12688 /* Handler for thumb2 load word instructions.  */
12689
12690 static int
12691 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12692 {
12693   uint32_t record_buf[8];
12694
12695   record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12696   record_buf[1] = ARM_PS_REGNUM;
12697   thumb2_insn_r->reg_rec_count = 2;
12698
12699   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12700             record_buf);
12701   return ARM_RECORD_SUCCESS;
12702 }
12703
12704 /* Handler for thumb2 long multiply, long multiply accumulate, and
12705    divide instructions.  */
12706
12707 static int
12708 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12709 {
12710   uint32_t opcode1 = 0, opcode2 = 0;
12711   uint32_t record_buf[8];
12712
12713   opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12714   opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12715
12716   if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12717     {
12718       /* Handle SMULL, UMULL, SMULAL.  */
12719       /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
12720       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12721       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12722       record_buf[2] = ARM_PS_REGNUM;
12723       thumb2_insn_r->reg_rec_count = 3;
12724     }
12725   else if (1 == opcode1 || 3 == opcode2)
12726     {
12727       /* Handle SDIV and UDIV.  */
12728       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12729       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12730       record_buf[2] = ARM_PS_REGNUM;
12731       thumb2_insn_r->reg_rec_count = 3;
12732     }
12733   else
12734     return ARM_RECORD_FAILURE;
12735
12736   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12737             record_buf);
12738   return ARM_RECORD_SUCCESS;
12739 }
12740
12741 /* Record handler for thumb32 coprocessor instructions.  */
12742
12743 static int
12744 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12745 {
12746   if (bit (thumb2_insn_r->arm_insn, 25))
12747     return arm_record_coproc_data_proc (thumb2_insn_r);
12748   else
12749     return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12750 }
12751
12752 /* Record handler for advance SIMD structure load/store instructions.  */
12753
12754 static int
12755 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12756 {
12757   struct regcache *reg_cache = thumb2_insn_r->regcache;
12758   uint32_t l_bit, a_bit, b_bits;
12759   uint32_t record_buf[128], record_buf_mem[128];
12760   uint32_t reg_rn, reg_vd, address, f_elem;
12761   uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12762   uint8_t f_ebytes;
12763
12764   l_bit = bit (thumb2_insn_r->arm_insn, 21);
12765   a_bit = bit (thumb2_insn_r->arm_insn, 23);
12766   b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12767   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12768   reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12769   reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12770   f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12771   f_elem = 8 / f_ebytes;
12772
12773   if (!l_bit)
12774     {
12775       ULONGEST u_regval = 0;
12776       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12777       address = u_regval;
12778
12779       if (!a_bit)
12780         {
12781           /* Handle VST1.  */
12782           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12783             {
12784               if (b_bits == 0x07)
12785                 bf_regs = 1;
12786               else if (b_bits == 0x0a)
12787                 bf_regs = 2;
12788               else if (b_bits == 0x06)
12789                 bf_regs = 3;
12790               else if (b_bits == 0x02)
12791                 bf_regs = 4;
12792               else
12793                 bf_regs = 0;
12794
12795               for (index_r = 0; index_r < bf_regs; index_r++)
12796                 {
12797                   for (index_e = 0; index_e < f_elem; index_e++)
12798                     {
12799                       record_buf_mem[index_m++] = f_ebytes;
12800                       record_buf_mem[index_m++] = address;
12801                       address = address + f_ebytes;
12802                       thumb2_insn_r->mem_rec_count += 1;
12803                     }
12804                 }
12805             }
12806           /* Handle VST2.  */
12807           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12808             {
12809               if (b_bits == 0x09 || b_bits == 0x08)
12810                 bf_regs = 1;
12811               else if (b_bits == 0x03)
12812                 bf_regs = 2;
12813               else
12814                 bf_regs = 0;
12815
12816               for (index_r = 0; index_r < bf_regs; index_r++)
12817                 for (index_e = 0; index_e < f_elem; index_e++)
12818                   {
12819                     for (loop_t = 0; loop_t < 2; loop_t++)
12820                       {
12821                         record_buf_mem[index_m++] = f_ebytes;
12822                         record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12823                         thumb2_insn_r->mem_rec_count += 1;
12824                       }
12825                     address = address + (2 * f_ebytes);
12826                   }
12827             }
12828           /* Handle VST3.  */
12829           else if ((b_bits & 0x0e) == 0x04)
12830             {
12831               for (index_e = 0; index_e < f_elem; index_e++)
12832                 {
12833                   for (loop_t = 0; loop_t < 3; loop_t++)
12834                     {
12835                       record_buf_mem[index_m++] = f_ebytes;
12836                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12837                       thumb2_insn_r->mem_rec_count += 1;
12838                     }
12839                   address = address + (3 * f_ebytes);
12840                 }
12841             }
12842           /* Handle VST4.  */
12843           else if (!(b_bits & 0x0e))
12844             {
12845               for (index_e = 0; index_e < f_elem; index_e++)
12846                 {
12847                   for (loop_t = 0; loop_t < 4; loop_t++)
12848                     {
12849                       record_buf_mem[index_m++] = f_ebytes;
12850                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12851                       thumb2_insn_r->mem_rec_count += 1;
12852                     }
12853                   address = address + (4 * f_ebytes);
12854                 }
12855             }
12856         }
12857       else
12858         {
12859           uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12860
12861           if (bft_size == 0x00)
12862             f_ebytes = 1;
12863           else if (bft_size == 0x01)
12864             f_ebytes = 2;
12865           else if (bft_size == 0x02)
12866             f_ebytes = 4;
12867           else
12868             f_ebytes = 0;
12869
12870           /* Handle VST1.  */
12871           if (!(b_bits & 0x0b) || b_bits == 0x08)
12872             thumb2_insn_r->mem_rec_count = 1;
12873           /* Handle VST2.  */
12874           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12875             thumb2_insn_r->mem_rec_count = 2;
12876           /* Handle VST3.  */
12877           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12878             thumb2_insn_r->mem_rec_count = 3;
12879           /* Handle VST4.  */
12880           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12881             thumb2_insn_r->mem_rec_count = 4;
12882
12883           for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12884             {
12885               record_buf_mem[index_m] = f_ebytes;
12886               record_buf_mem[index_m] = address + (index_m * f_ebytes);
12887             }
12888         }
12889     }
12890   else
12891     {
12892       if (!a_bit)
12893         {
12894           /* Handle VLD1.  */
12895           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12896             thumb2_insn_r->reg_rec_count = 1;
12897           /* Handle VLD2.  */
12898           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12899             thumb2_insn_r->reg_rec_count = 2;
12900           /* Handle VLD3.  */
12901           else if ((b_bits & 0x0e) == 0x04)
12902             thumb2_insn_r->reg_rec_count = 3;
12903           /* Handle VLD4.  */
12904           else if (!(b_bits & 0x0e))
12905             thumb2_insn_r->reg_rec_count = 4;
12906         }
12907       else
12908         {
12909           /* Handle VLD1.  */
12910           if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12911             thumb2_insn_r->reg_rec_count = 1;
12912           /* Handle VLD2.  */
12913           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12914             thumb2_insn_r->reg_rec_count = 2;
12915           /* Handle VLD3.  */
12916           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12917             thumb2_insn_r->reg_rec_count = 3;
12918           /* Handle VLD4.  */
12919           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12920             thumb2_insn_r->reg_rec_count = 4;
12921
12922           for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12923             record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12924         }
12925     }
12926
12927   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12928     {
12929       record_buf[index_r] = reg_rn;
12930       thumb2_insn_r->reg_rec_count += 1;
12931     }
12932
12933   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12934             record_buf);
12935   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12936             record_buf_mem);
12937   return 0;
12938 }
12939
12940 /* Decodes thumb2 instruction type and invokes its record handler.  */
12941
12942 static unsigned int
12943 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12944 {
12945   uint32_t op, op1, op2;
12946
12947   op = bit (thumb2_insn_r->arm_insn, 15);
12948   op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12949   op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12950
12951   if (op1 == 0x01)
12952     {
12953       if (!(op2 & 0x64 ))
12954         {
12955           /* Load/store multiple instruction.  */
12956           return thumb2_record_ld_st_multiple (thumb2_insn_r);
12957         }
12958       else if ((op2 & 0x64) == 0x4)
12959         {
12960           /* Load/store (dual/exclusive) and table branch instruction.  */
12961           return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12962         }
12963       else if ((op2 & 0x60) == 0x20)
12964         {
12965           /* Data-processing (shifted register).  */
12966           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12967         }
12968       else if (op2 & 0x40)
12969         {
12970           /* Co-processor instructions.  */
12971           return thumb2_record_coproc_insn (thumb2_insn_r);
12972         }
12973     }
12974   else if (op1 == 0x02)
12975     {
12976       if (op)
12977         {
12978           /* Branches and miscellaneous control instructions.  */
12979           return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12980         }
12981       else if (op2 & 0x20)
12982         {
12983           /* Data-processing (plain binary immediate) instruction.  */
12984           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12985         }
12986       else
12987         {
12988           /* Data-processing (modified immediate).  */
12989           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12990         }
12991     }
12992   else if (op1 == 0x03)
12993     {
12994       if (!(op2 & 0x71 ))
12995         {
12996           /* Store single data item.  */
12997           return thumb2_record_str_single_data (thumb2_insn_r);
12998         }
12999       else if (!((op2 & 0x71) ^ 0x10))
13000         {
13001           /* Advanced SIMD or structure load/store instructions.  */
13002           return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
13003         }
13004       else if (!((op2 & 0x67) ^ 0x01))
13005         {
13006           /* Load byte, memory hints instruction.  */
13007           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13008         }
13009       else if (!((op2 & 0x67) ^ 0x03))
13010         {
13011           /* Load halfword, memory hints instruction.  */
13012           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13013         }
13014       else if (!((op2 & 0x67) ^ 0x05))
13015         {
13016           /* Load word instruction.  */
13017           return thumb2_record_ld_word (thumb2_insn_r);
13018         }
13019       else if (!((op2 & 0x70) ^ 0x20))
13020         {
13021           /* Data-processing (register) instruction.  */
13022           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13023         }
13024       else if (!((op2 & 0x78) ^ 0x30))
13025         {
13026           /* Multiply, multiply accumulate, abs diff instruction.  */
13027           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13028         }
13029       else if (!((op2 & 0x78) ^ 0x38))
13030         {
13031           /* Long multiply, long multiply accumulate, and divide.  */
13032           return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13033         }
13034       else if (op2 & 0x40)
13035         {
13036           /* Co-processor instructions.  */
13037           return thumb2_record_coproc_insn (thumb2_insn_r);
13038         }
13039    }
13040
13041   return -1;
13042 }
13043
13044 namespace {
13045 /* Abstract memory reader.  */
13046
13047 class abstract_memory_reader
13048 {
13049 public:
13050   /* Read LEN bytes of target memory at address MEMADDR, placing the
13051      results in GDB's memory at BUF.  Return true on success.  */
13052
13053   virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
13054 };
13055
13056 /* Instruction reader from real target.  */
13057
13058 class instruction_reader : public abstract_memory_reader
13059 {
13060  public:
13061   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13062   {
13063     if (target_read_memory (memaddr, buf, len))
13064       return false;
13065     else
13066       return true;
13067   }
13068 };
13069
13070 } // namespace
13071
13072 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
13073 and positive val on fauilure.  */
13074
13075 static int
13076 extract_arm_insn (abstract_memory_reader& reader,
13077                   insn_decode_record *insn_record, uint32_t insn_size)
13078 {
13079   gdb_byte buf[insn_size];
13080
13081   memset (&buf[0], 0, insn_size);
13082   
13083   if (!reader.read (insn_record->this_addr, buf, insn_size))
13084     return 1;
13085   insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13086                            insn_size, 
13087                            gdbarch_byte_order_for_code (insn_record->gdbarch));
13088   return 0;
13089 }
13090
13091 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13092
13093 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13094    dispatch it.  */
13095
13096 static int
13097 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13098              record_type_t record_type, uint32_t insn_size)
13099 {
13100
13101   /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13102      instruction.  */
13103   static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13104   {
13105     arm_record_data_proc_misc_ld_str,   /* 000.  */
13106     arm_record_data_proc_imm,           /* 001.  */
13107     arm_record_ld_st_imm_offset,        /* 010.  */
13108     arm_record_ld_st_reg_offset,        /* 011.  */
13109     arm_record_ld_st_multiple,          /* 100.  */
13110     arm_record_b_bl,                    /* 101.  */
13111     arm_record_asimd_vfp_coproc,        /* 110.  */
13112     arm_record_coproc_data_proc         /* 111.  */
13113   };
13114
13115   /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13116      instruction.  */
13117   static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13118   { \
13119     thumb_record_shift_add_sub,        /* 000.  */
13120     thumb_record_add_sub_cmp_mov,      /* 001.  */
13121     thumb_record_ld_st_reg_offset,     /* 010.  */
13122     thumb_record_ld_st_imm_offset,     /* 011.  */
13123     thumb_record_ld_st_stack,          /* 100.  */
13124     thumb_record_misc,                 /* 101.  */
13125     thumb_record_ldm_stm_swi,          /* 110.  */
13126     thumb_record_branch                /* 111.  */
13127   };
13128
13129   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
13130   uint32_t insn_id = 0;
13131
13132   if (extract_arm_insn (reader, arm_record, insn_size))
13133     {
13134       if (record_debug)
13135         {
13136           printf_unfiltered (_("Process record: error reading memory at "
13137                                "addr %s len = %d.\n"),
13138                              paddress (arm_record->gdbarch,
13139                                        arm_record->this_addr), insn_size);
13140         }
13141       return -1;
13142     }
13143   else if (ARM_RECORD == record_type)
13144     {
13145       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13146       insn_id = bits (arm_record->arm_insn, 25, 27);
13147
13148       if (arm_record->cond == 0xf)
13149         ret = arm_record_extension_space (arm_record);
13150       else
13151         {
13152           /* If this insn has fallen into extension space
13153              then we need not decode it anymore.  */
13154           ret = arm_handle_insn[insn_id] (arm_record);
13155         }
13156       if (ret != ARM_RECORD_SUCCESS)
13157         {
13158           arm_record_unsupported_insn (arm_record);
13159           ret = -1;
13160         }
13161     }
13162   else if (THUMB_RECORD == record_type)
13163     {
13164       /* As thumb does not have condition codes, we set negative.  */
13165       arm_record->cond = -1;
13166       insn_id = bits (arm_record->arm_insn, 13, 15);
13167       ret = thumb_handle_insn[insn_id] (arm_record);
13168       if (ret != ARM_RECORD_SUCCESS)
13169         {
13170           arm_record_unsupported_insn (arm_record);
13171           ret = -1;
13172         }
13173     }
13174   else if (THUMB2_RECORD == record_type)
13175     {
13176       /* As thumb does not have condition codes, we set negative.  */
13177       arm_record->cond = -1;
13178
13179       /* Swap first half of 32bit thumb instruction with second half.  */
13180       arm_record->arm_insn
13181         = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13182
13183       ret = thumb2_record_decode_insn_handler (arm_record);
13184
13185       if (ret != ARM_RECORD_SUCCESS)
13186         {
13187           arm_record_unsupported_insn (arm_record);
13188           ret = -1;
13189         }
13190     }
13191   else
13192     {
13193       /* Throw assertion.  */
13194       gdb_assert_not_reached ("not a valid instruction, could not decode");
13195     }
13196
13197   return ret;
13198 }
13199
13200 #if GDB_SELF_TEST
13201 namespace selftests {
13202
13203 /* Provide both 16-bit and 32-bit thumb instructions.  */
13204
13205 class instruction_reader_thumb : public abstract_memory_reader
13206 {
13207 public:
13208   template<size_t SIZE>
13209   instruction_reader_thumb (enum bfd_endian endian,
13210                             const uint16_t (&insns)[SIZE])
13211     : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13212   {}
13213
13214   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13215   {
13216     SELF_CHECK (len == 4 || len == 2);
13217     SELF_CHECK (memaddr % 2 == 0);
13218     SELF_CHECK ((memaddr / 2) < m_insns_size);
13219
13220     store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13221     if (len == 4)
13222       {
13223         store_unsigned_integer (&buf[2], 2, m_endian,
13224                                 m_insns[memaddr / 2 + 1]);
13225       }
13226     return true;
13227   }
13228
13229 private:
13230   enum bfd_endian m_endian;
13231   const uint16_t *m_insns;
13232   size_t m_insns_size;
13233 };
13234
13235 static void
13236 arm_record_test (void)
13237 {
13238   struct gdbarch_info info;
13239   gdbarch_info_init (&info);
13240   info.bfd_arch_info = bfd_scan_arch ("arm");
13241
13242   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13243
13244   SELF_CHECK (gdbarch != NULL);
13245
13246   /* 16-bit Thumb instructions.  */
13247   {
13248     insn_decode_record arm_record;
13249
13250     memset (&arm_record, 0, sizeof (insn_decode_record));
13251     arm_record.gdbarch = gdbarch;
13252
13253     static const uint16_t insns[] = {
13254       /* db b2  uxtb    r3, r3 */
13255       0xb2db,
13256       /* cd 58  ldr     r5, [r1, r3] */
13257       0x58cd,
13258     };
13259
13260     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13261     instruction_reader_thumb reader (endian, insns);
13262     int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13263                            THUMB_INSN_SIZE_BYTES);
13264
13265     SELF_CHECK (ret == 0);
13266     SELF_CHECK (arm_record.mem_rec_count == 0);
13267     SELF_CHECK (arm_record.reg_rec_count == 1);
13268     SELF_CHECK (arm_record.arm_regs[0] == 3);
13269
13270     arm_record.this_addr += 2;
13271     ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13272                        THUMB_INSN_SIZE_BYTES);
13273
13274     SELF_CHECK (ret == 0);
13275     SELF_CHECK (arm_record.mem_rec_count == 0);
13276     SELF_CHECK (arm_record.reg_rec_count == 1);
13277     SELF_CHECK (arm_record.arm_regs[0] == 5);
13278   }
13279
13280   /* 32-bit Thumb-2 instructions.  */
13281   {
13282     insn_decode_record arm_record;
13283
13284     memset (&arm_record, 0, sizeof (insn_decode_record));
13285     arm_record.gdbarch = gdbarch;
13286
13287     static const uint16_t insns[] = {
13288       /* 1d ee 70 7f     mrc    15, 0, r7, cr13, cr0, {3} */
13289       0xee1d, 0x7f70,
13290     };
13291
13292     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13293     instruction_reader_thumb reader (endian, insns);
13294     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13295                            THUMB2_INSN_SIZE_BYTES);
13296
13297     SELF_CHECK (ret == 0);
13298     SELF_CHECK (arm_record.mem_rec_count == 0);
13299     SELF_CHECK (arm_record.reg_rec_count == 1);
13300     SELF_CHECK (arm_record.arm_regs[0] == 7);
13301   }
13302 }
13303 } // namespace selftests
13304 #endif /* GDB_SELF_TEST */
13305
13306 /* Cleans up local record registers and memory allocations.  */
13307
13308 static void 
13309 deallocate_reg_mem (insn_decode_record *record)
13310 {
13311   xfree (record->arm_regs);
13312   xfree (record->arm_mems);    
13313 }
13314
13315
13316 /* Parse the current instruction and record the values of the registers and
13317    memory that will be changed in current instruction to record_arch_list".
13318    Return -1 if something is wrong.  */
13319
13320 int
13321 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13322                     CORE_ADDR insn_addr)
13323 {
13324
13325   uint32_t no_of_rec = 0;
13326   uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
13327   ULONGEST t_bit = 0, insn_id = 0;
13328
13329   ULONGEST u_regval = 0;
13330
13331   insn_decode_record arm_record;
13332
13333   memset (&arm_record, 0, sizeof (insn_decode_record));
13334   arm_record.regcache = regcache;
13335   arm_record.this_addr = insn_addr;
13336   arm_record.gdbarch = gdbarch;
13337
13338
13339   if (record_debug > 1)
13340     {
13341       fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13342                           "addr = %s\n",
13343       paddress (gdbarch, arm_record.this_addr));
13344     }
13345
13346   instruction_reader reader;
13347   if (extract_arm_insn (reader, &arm_record, 2))
13348     {
13349       if (record_debug)
13350         {
13351           printf_unfiltered (_("Process record: error reading memory at "
13352                                "addr %s len = %d.\n"),
13353                              paddress (arm_record.gdbarch,
13354                                        arm_record.this_addr), 2);
13355         }
13356       return -1;
13357     }
13358
13359   /* Check the insn, whether it is thumb or arm one.  */
13360
13361   t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13362   regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13363
13364
13365   if (!(u_regval & t_bit))
13366     {
13367       /* We are decoding arm insn.  */
13368       ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13369     }
13370   else
13371     {
13372       insn_id = bits (arm_record.arm_insn, 11, 15);
13373       /* is it thumb2 insn?  */
13374       if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13375         {
13376           ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13377                              THUMB2_INSN_SIZE_BYTES);
13378         }
13379       else
13380         {
13381           /* We are decoding thumb insn.  */
13382           ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13383                              THUMB_INSN_SIZE_BYTES);
13384         }
13385     }
13386
13387   if (0 == ret)
13388     {
13389       /* Record registers.  */
13390       record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13391       if (arm_record.arm_regs)
13392         {
13393           for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13394             {
13395               if (record_full_arch_list_add_reg
13396                   (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13397                 ret = -1;
13398             }
13399         }
13400       /* Record memories.  */
13401       if (arm_record.arm_mems)
13402         {
13403           for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13404             {
13405               if (record_full_arch_list_add_mem
13406                   ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13407                    arm_record.arm_mems[no_of_rec].len))
13408                 ret = -1;
13409             }
13410         }
13411
13412       if (record_full_arch_list_add_end ())
13413         ret = -1;
13414     }
13415
13416
13417   deallocate_reg_mem (&arm_record);
13418
13419   return ret;
13420 }