Enable -Wsuggest-override
[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 (regcache, regnum,
3808                                              val + i * unit_length);
3809                     }
3810                 }
3811               continue;
3812             }
3813           else
3814             {
3815               /* This CPRC could not go in VFP registers, so all VFP
3816                  registers are now marked as used.  */
3817               vfp_regs_free = 0;
3818             }
3819         }
3820
3821       /* Push stack padding for dowubleword alignment.  */
3822       if (nstack & (align - 1))
3823         {
3824           si = push_stack_item (si, val, INT_REGISTER_SIZE);
3825           nstack += INT_REGISTER_SIZE;
3826         }
3827       
3828       /* Doubleword aligned quantities must go in even register pairs.  */
3829       if (may_use_core_reg
3830           && argreg <= ARM_LAST_ARG_REGNUM
3831           && align > INT_REGISTER_SIZE
3832           && argreg & 1)
3833         argreg++;
3834
3835       /* If the argument is a pointer to a function, and it is a
3836          Thumb function, create a LOCAL copy of the value and set
3837          the THUMB bit in it.  */
3838       if (TYPE_CODE_PTR == typecode
3839           && target_type != NULL
3840           && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3841         {
3842           CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3843           if (arm_pc_is_thumb (gdbarch, regval))
3844             {
3845               bfd_byte *copy = (bfd_byte *) alloca (len);
3846               store_unsigned_integer (copy, len, byte_order,
3847                                       MAKE_THUMB_ADDR (regval));
3848               val = copy;
3849             }
3850         }
3851
3852       /* Copy the argument to general registers or the stack in
3853          register-sized pieces.  Large arguments are split between
3854          registers and stack.  */
3855       while (len > 0)
3856         {
3857           int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3858           CORE_ADDR regval
3859             = extract_unsigned_integer (val, partial_len, byte_order);
3860
3861           if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3862             {
3863               /* The argument is being passed in a general purpose
3864                  register.  */
3865               if (byte_order == BFD_ENDIAN_BIG)
3866                 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3867               if (arm_debug)
3868                 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3869                                     argnum,
3870                                     gdbarch_register_name
3871                                       (gdbarch, argreg),
3872                                     phex (regval, INT_REGISTER_SIZE));
3873               regcache_cooked_write_unsigned (regcache, argreg, regval);
3874               argreg++;
3875             }
3876           else
3877             {
3878               gdb_byte buf[INT_REGISTER_SIZE];
3879
3880               memset (buf, 0, sizeof (buf));
3881               store_unsigned_integer (buf, partial_len, byte_order, regval);
3882
3883               /* Push the arguments onto the stack.  */
3884               if (arm_debug)
3885                 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3886                                     argnum, nstack);
3887               si = push_stack_item (si, buf, INT_REGISTER_SIZE);
3888               nstack += INT_REGISTER_SIZE;
3889             }
3890               
3891           len -= partial_len;
3892           val += partial_len;
3893         }
3894     }
3895   /* If we have an odd number of words to push, then decrement the stack
3896      by one word now, so first stack argument will be dword aligned.  */
3897   if (nstack & 4)
3898     sp -= 4;
3899
3900   while (si)
3901     {
3902       sp -= si->len;
3903       write_memory (sp, si->data, si->len);
3904       si = pop_stack_item (si);
3905     }
3906
3907   /* Finally, update teh SP register.  */
3908   regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3909
3910   return sp;
3911 }
3912
3913
3914 /* Always align the frame to an 8-byte boundary.  This is required on
3915    some platforms and harmless on the rest.  */
3916
3917 static CORE_ADDR
3918 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3919 {
3920   /* Align the stack to eight bytes.  */
3921   return sp & ~ (CORE_ADDR) 7;
3922 }
3923
3924 static void
3925 print_fpu_flags (struct ui_file *file, int flags)
3926 {
3927   if (flags & (1 << 0))
3928     fputs_filtered ("IVO ", file);
3929   if (flags & (1 << 1))
3930     fputs_filtered ("DVZ ", file);
3931   if (flags & (1 << 2))
3932     fputs_filtered ("OFL ", file);
3933   if (flags & (1 << 3))
3934     fputs_filtered ("UFL ", file);
3935   if (flags & (1 << 4))
3936     fputs_filtered ("INX ", file);
3937   fputc_filtered ('\n', file);
3938 }
3939
3940 /* Print interesting information about the floating point processor
3941    (if present) or emulator.  */
3942 static void
3943 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3944                       struct frame_info *frame, const char *args)
3945 {
3946   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3947   int type;
3948
3949   type = (status >> 24) & 127;
3950   if (status & (1 << 31))
3951     fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3952   else
3953     fprintf_filtered (file, _("Software FPU type %d\n"), type);
3954   /* i18n: [floating point unit] mask */
3955   fputs_filtered (_("mask: "), file);
3956   print_fpu_flags (file, status >> 16);
3957   /* i18n: [floating point unit] flags */
3958   fputs_filtered (_("flags: "), file);
3959   print_fpu_flags (file, status);
3960 }
3961
3962 /* Construct the ARM extended floating point type.  */
3963 static struct type *
3964 arm_ext_type (struct gdbarch *gdbarch)
3965 {
3966   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3967
3968   if (!tdep->arm_ext_type)
3969     tdep->arm_ext_type
3970       = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
3971                          floatformats_arm_ext);
3972
3973   return tdep->arm_ext_type;
3974 }
3975
3976 static struct type *
3977 arm_neon_double_type (struct gdbarch *gdbarch)
3978 {
3979   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3980
3981   if (tdep->neon_double_type == NULL)
3982     {
3983       struct type *t, *elem;
3984
3985       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
3986                                TYPE_CODE_UNION);
3987       elem = builtin_type (gdbarch)->builtin_uint8;
3988       append_composite_type_field (t, "u8", init_vector_type (elem, 8));
3989       elem = builtin_type (gdbarch)->builtin_uint16;
3990       append_composite_type_field (t, "u16", init_vector_type (elem, 4));
3991       elem = builtin_type (gdbarch)->builtin_uint32;
3992       append_composite_type_field (t, "u32", init_vector_type (elem, 2));
3993       elem = builtin_type (gdbarch)->builtin_uint64;
3994       append_composite_type_field (t, "u64", elem);
3995       elem = builtin_type (gdbarch)->builtin_float;
3996       append_composite_type_field (t, "f32", init_vector_type (elem, 2));
3997       elem = builtin_type (gdbarch)->builtin_double;
3998       append_composite_type_field (t, "f64", elem);
3999
4000       TYPE_VECTOR (t) = 1;
4001       TYPE_NAME (t) = "neon_d";
4002       tdep->neon_double_type = t;
4003     }
4004
4005   return tdep->neon_double_type;
4006 }
4007
4008 /* FIXME: The vector types are not correctly ordered on big-endian
4009    targets.  Just as s0 is the low bits of d0, d0[0] is also the low
4010    bits of d0 - regardless of what unit size is being held in d0.  So
4011    the offset of the first uint8 in d0 is 7, but the offset of the
4012    first float is 4.  This code works as-is for little-endian
4013    targets.  */
4014
4015 static struct type *
4016 arm_neon_quad_type (struct gdbarch *gdbarch)
4017 {
4018   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4019
4020   if (tdep->neon_quad_type == NULL)
4021     {
4022       struct type *t, *elem;
4023
4024       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
4025                                TYPE_CODE_UNION);
4026       elem = builtin_type (gdbarch)->builtin_uint8;
4027       append_composite_type_field (t, "u8", init_vector_type (elem, 16));
4028       elem = builtin_type (gdbarch)->builtin_uint16;
4029       append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4030       elem = builtin_type (gdbarch)->builtin_uint32;
4031       append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4032       elem = builtin_type (gdbarch)->builtin_uint64;
4033       append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4034       elem = builtin_type (gdbarch)->builtin_float;
4035       append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4036       elem = builtin_type (gdbarch)->builtin_double;
4037       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4038
4039       TYPE_VECTOR (t) = 1;
4040       TYPE_NAME (t) = "neon_q";
4041       tdep->neon_quad_type = t;
4042     }
4043
4044   return tdep->neon_quad_type;
4045 }
4046
4047 /* Return the GDB type object for the "standard" data type of data in
4048    register N.  */
4049
4050 static struct type *
4051 arm_register_type (struct gdbarch *gdbarch, int regnum)
4052 {
4053   int num_regs = gdbarch_num_regs (gdbarch);
4054
4055   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4056       && regnum >= num_regs && regnum < num_regs + 32)
4057     return builtin_type (gdbarch)->builtin_float;
4058
4059   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4060       && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4061     return arm_neon_quad_type (gdbarch);
4062
4063   /* If the target description has register information, we are only
4064      in this function so that we can override the types of
4065      double-precision registers for NEON.  */
4066   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4067     {
4068       struct type *t = tdesc_register_type (gdbarch, regnum);
4069
4070       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4071           && TYPE_CODE (t) == TYPE_CODE_FLT
4072           && gdbarch_tdep (gdbarch)->have_neon)
4073         return arm_neon_double_type (gdbarch);
4074       else
4075         return t;
4076     }
4077
4078   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4079     {
4080       if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4081         return builtin_type (gdbarch)->builtin_void;
4082
4083       return arm_ext_type (gdbarch);
4084     }
4085   else if (regnum == ARM_SP_REGNUM)
4086     return builtin_type (gdbarch)->builtin_data_ptr;
4087   else if (regnum == ARM_PC_REGNUM)
4088     return builtin_type (gdbarch)->builtin_func_ptr;
4089   else if (regnum >= ARRAY_SIZE (arm_register_names))
4090     /* These registers are only supported on targets which supply
4091        an XML description.  */
4092     return builtin_type (gdbarch)->builtin_int0;
4093   else
4094     return builtin_type (gdbarch)->builtin_uint32;
4095 }
4096
4097 /* Map a DWARF register REGNUM onto the appropriate GDB register
4098    number.  */
4099
4100 static int
4101 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4102 {
4103   /* Core integer regs.  */
4104   if (reg >= 0 && reg <= 15)
4105     return reg;
4106
4107   /* Legacy FPA encoding.  These were once used in a way which
4108      overlapped with VFP register numbering, so their use is
4109      discouraged, but GDB doesn't support the ARM toolchain
4110      which used them for VFP.  */
4111   if (reg >= 16 && reg <= 23)
4112     return ARM_F0_REGNUM + reg - 16;
4113
4114   /* New assignments for the FPA registers.  */
4115   if (reg >= 96 && reg <= 103)
4116     return ARM_F0_REGNUM + reg - 96;
4117
4118   /* WMMX register assignments.  */
4119   if (reg >= 104 && reg <= 111)
4120     return ARM_WCGR0_REGNUM + reg - 104;
4121
4122   if (reg >= 112 && reg <= 127)
4123     return ARM_WR0_REGNUM + reg - 112;
4124
4125   if (reg >= 192 && reg <= 199)
4126     return ARM_WC0_REGNUM + reg - 192;
4127
4128   /* VFP v2 registers.  A double precision value is actually
4129      in d1 rather than s2, but the ABI only defines numbering
4130      for the single precision registers.  This will "just work"
4131      in GDB for little endian targets (we'll read eight bytes,
4132      starting in s0 and then progressing to s1), but will be
4133      reversed on big endian targets with VFP.  This won't
4134      be a problem for the new Neon quad registers; you're supposed
4135      to use DW_OP_piece for those.  */
4136   if (reg >= 64 && reg <= 95)
4137     {
4138       char name_buf[4];
4139
4140       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4141       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4142                                           strlen (name_buf));
4143     }
4144
4145   /* VFP v3 / Neon registers.  This range is also used for VFP v2
4146      registers, except that it now describes d0 instead of s0.  */
4147   if (reg >= 256 && reg <= 287)
4148     {
4149       char name_buf[4];
4150
4151       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4152       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4153                                           strlen (name_buf));
4154     }
4155
4156   return -1;
4157 }
4158
4159 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
4160 static int
4161 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4162 {
4163   int reg = regnum;
4164   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4165
4166   if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4167     return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4168
4169   if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4170     return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4171
4172   if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4173     return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4174
4175   if (reg < NUM_GREGS)
4176     return SIM_ARM_R0_REGNUM + reg;
4177   reg -= NUM_GREGS;
4178
4179   if (reg < NUM_FREGS)
4180     return SIM_ARM_FP0_REGNUM + reg;
4181   reg -= NUM_FREGS;
4182
4183   if (reg < NUM_SREGS)
4184     return SIM_ARM_FPS_REGNUM + reg;
4185   reg -= NUM_SREGS;
4186
4187   internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4188 }
4189
4190 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4191    the buffer to be NEW_LEN bytes ending at ENDADDR.  Return
4192    NULL if an error occurs.  BUF is freed.  */
4193
4194 static gdb_byte *
4195 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4196                        int old_len, int new_len)
4197 {
4198   gdb_byte *new_buf;
4199   int bytes_to_read = new_len - old_len;
4200
4201   new_buf = (gdb_byte *) xmalloc (new_len);
4202   memcpy (new_buf + bytes_to_read, buf, old_len);
4203   xfree (buf);
4204   if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4205     {
4206       xfree (new_buf);
4207       return NULL;
4208     }
4209   return new_buf;
4210 }
4211
4212 /* An IT block is at most the 2-byte IT instruction followed by
4213    four 4-byte instructions.  The furthest back we must search to
4214    find an IT block that affects the current instruction is thus
4215    2 + 3 * 4 == 14 bytes.  */
4216 #define MAX_IT_BLOCK_PREFIX 14
4217
4218 /* Use a quick scan if there are more than this many bytes of
4219    code.  */
4220 #define IT_SCAN_THRESHOLD 32
4221
4222 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4223    A breakpoint in an IT block may not be hit, depending on the
4224    condition flags.  */
4225 static CORE_ADDR
4226 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4227 {
4228   gdb_byte *buf;
4229   char map_type;
4230   CORE_ADDR boundary, func_start;
4231   int buf_len;
4232   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4233   int i, any, last_it, last_it_count;
4234
4235   /* If we are using BKPT breakpoints, none of this is necessary.  */
4236   if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4237     return bpaddr;
4238
4239   /* ARM mode does not have this problem.  */
4240   if (!arm_pc_is_thumb (gdbarch, bpaddr))
4241     return bpaddr;
4242
4243   /* We are setting a breakpoint in Thumb code that could potentially
4244      contain an IT block.  The first step is to find how much Thumb
4245      code there is; we do not need to read outside of known Thumb
4246      sequences.  */
4247   map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4248   if (map_type == 0)
4249     /* Thumb-2 code must have mapping symbols to have a chance.  */
4250     return bpaddr;
4251
4252   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4253
4254   if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4255       && func_start > boundary)
4256     boundary = func_start;
4257
4258   /* Search for a candidate IT instruction.  We have to do some fancy
4259      footwork to distinguish a real IT instruction from the second
4260      half of a 32-bit instruction, but there is no need for that if
4261      there's no candidate.  */
4262   buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4263   if (buf_len == 0)
4264     /* No room for an IT instruction.  */
4265     return bpaddr;
4266
4267   buf = (gdb_byte *) xmalloc (buf_len);
4268   if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4269     return bpaddr;
4270   any = 0;
4271   for (i = 0; i < buf_len; i += 2)
4272     {
4273       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4274       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4275         {
4276           any = 1;
4277           break;
4278         }
4279     }
4280
4281   if (any == 0)
4282     {
4283       xfree (buf);
4284       return bpaddr;
4285     }
4286
4287   /* OK, the code bytes before this instruction contain at least one
4288      halfword which resembles an IT instruction.  We know that it's
4289      Thumb code, but there are still two possibilities.  Either the
4290      halfword really is an IT instruction, or it is the second half of
4291      a 32-bit Thumb instruction.  The only way we can tell is to
4292      scan forwards from a known instruction boundary.  */
4293   if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4294     {
4295       int definite;
4296
4297       /* There's a lot of code before this instruction.  Start with an
4298          optimistic search; it's easy to recognize halfwords that can
4299          not be the start of a 32-bit instruction, and use that to
4300          lock on to the instruction boundaries.  */
4301       buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4302       if (buf == NULL)
4303         return bpaddr;
4304       buf_len = IT_SCAN_THRESHOLD;
4305
4306       definite = 0;
4307       for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4308         {
4309           unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4310           if (thumb_insn_size (inst1) == 2)
4311             {
4312               definite = 1;
4313               break;
4314             }
4315         }
4316
4317       /* At this point, if DEFINITE, BUF[I] is the first place we
4318          are sure that we know the instruction boundaries, and it is far
4319          enough from BPADDR that we could not miss an IT instruction
4320          affecting BPADDR.  If ! DEFINITE, give up - start from a
4321          known boundary.  */
4322       if (! definite)
4323         {
4324           buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4325                                        bpaddr - boundary);
4326           if (buf == NULL)
4327             return bpaddr;
4328           buf_len = bpaddr - boundary;
4329           i = 0;
4330         }
4331     }
4332   else
4333     {
4334       buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4335       if (buf == NULL)
4336         return bpaddr;
4337       buf_len = bpaddr - boundary;
4338       i = 0;
4339     }
4340
4341   /* Scan forwards.  Find the last IT instruction before BPADDR.  */
4342   last_it = -1;
4343   last_it_count = 0;
4344   while (i < buf_len)
4345     {
4346       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4347       last_it_count--;
4348       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4349         {
4350           last_it = i;
4351           if (inst1 & 0x0001)
4352             last_it_count = 4;
4353           else if (inst1 & 0x0002)
4354             last_it_count = 3;
4355           else if (inst1 & 0x0004)
4356             last_it_count = 2;
4357           else
4358             last_it_count = 1;
4359         }
4360       i += thumb_insn_size (inst1);
4361     }
4362
4363   xfree (buf);
4364
4365   if (last_it == -1)
4366     /* There wasn't really an IT instruction after all.  */
4367     return bpaddr;
4368
4369   if (last_it_count < 1)
4370     /* It was too far away.  */
4371     return bpaddr;
4372
4373   /* This really is a trouble spot.  Move the breakpoint to the IT
4374      instruction.  */
4375   return bpaddr - buf_len + last_it;
4376 }
4377
4378 /* ARM displaced stepping support.
4379
4380    Generally ARM displaced stepping works as follows:
4381
4382    1. When an instruction is to be single-stepped, it is first decoded by
4383       arm_process_displaced_insn.  Depending on the type of instruction, it is
4384       then copied to a scratch location, possibly in a modified form.  The
4385       copy_* set of functions performs such modification, as necessary.  A
4386       breakpoint is placed after the modified instruction in the scratch space
4387       to return control to GDB.  Note in particular that instructions which
4388       modify the PC will no longer do so after modification.
4389
4390    2. The instruction is single-stepped, by setting the PC to the scratch
4391       location address, and resuming.  Control returns to GDB when the
4392       breakpoint is hit.
4393
4394    3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4395       function used for the current instruction.  This function's job is to
4396       put the CPU/memory state back to what it would have been if the
4397       instruction had been executed unmodified in its original location.  */
4398
4399 /* NOP instruction (mov r0, r0).  */
4400 #define ARM_NOP                         0xe1a00000
4401 #define THUMB_NOP 0x4600
4402
4403 /* Helper for register reads for displaced stepping.  In particular, this
4404    returns the PC as it would be seen by the instruction at its original
4405    location.  */
4406
4407 ULONGEST
4408 displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4409                     int regno)
4410 {
4411   ULONGEST ret;
4412   CORE_ADDR from = dsc->insn_addr;
4413
4414   if (regno == ARM_PC_REGNUM)
4415     {
4416       /* Compute pipeline offset:
4417          - When executing an ARM instruction, PC reads as the address of the
4418          current instruction plus 8.
4419          - When executing a Thumb instruction, PC reads as the address of the
4420          current instruction plus 4.  */
4421
4422       if (!dsc->is_thumb)
4423         from += 8;
4424       else
4425         from += 4;
4426
4427       if (debug_displaced)
4428         fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
4429                             (unsigned long) from);
4430       return (ULONGEST) from;
4431     }
4432   else
4433     {
4434       regcache_cooked_read_unsigned (regs, regno, &ret);
4435       if (debug_displaced)
4436         fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
4437                             regno, (unsigned long) ret);
4438       return ret;
4439     }
4440 }
4441
4442 static int
4443 displaced_in_arm_mode (struct regcache *regs)
4444 {
4445   ULONGEST ps;
4446   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4447
4448   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4449
4450   return (ps & t_bit) == 0;
4451 }
4452
4453 /* Write to the PC as from a branch instruction.  */
4454
4455 static void
4456 branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4457                  ULONGEST val)
4458 {
4459   if (!dsc->is_thumb)
4460     /* Note: If bits 0/1 are set, this branch would be unpredictable for
4461        architecture versions < 6.  */
4462     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4463                                     val & ~(ULONGEST) 0x3);
4464   else
4465     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4466                                     val & ~(ULONGEST) 0x1);
4467 }
4468
4469 /* Write to the PC as from a branch-exchange instruction.  */
4470
4471 static void
4472 bx_write_pc (struct regcache *regs, ULONGEST val)
4473 {
4474   ULONGEST ps;
4475   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4476
4477   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4478
4479   if ((val & 1) == 1)
4480     {
4481       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4482       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4483     }
4484   else if ((val & 2) == 0)
4485     {
4486       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4487       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4488     }
4489   else
4490     {
4491       /* Unpredictable behaviour.  Try to do something sensible (switch to ARM
4492           mode, align dest to 4 bytes).  */
4493       warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4494       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4495       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4496     }
4497 }
4498
4499 /* Write to the PC as if from a load instruction.  */
4500
4501 static void
4502 load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4503                ULONGEST val)
4504 {
4505   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4506     bx_write_pc (regs, val);
4507   else
4508     branch_write_pc (regs, dsc, val);
4509 }
4510
4511 /* Write to the PC as if from an ALU instruction.  */
4512
4513 static void
4514 alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4515               ULONGEST val)
4516 {
4517   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4518     bx_write_pc (regs, val);
4519   else
4520     branch_write_pc (regs, dsc, val);
4521 }
4522
4523 /* Helper for writing to registers for displaced stepping.  Writing to the PC
4524    has a varying effects depending on the instruction which does the write:
4525    this is controlled by the WRITE_PC argument.  */
4526
4527 void
4528 displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4529                      int regno, ULONGEST val, enum pc_write_style write_pc)
4530 {
4531   if (regno == ARM_PC_REGNUM)
4532     {
4533       if (debug_displaced)
4534         fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
4535                             (unsigned long) val);
4536       switch (write_pc)
4537         {
4538         case BRANCH_WRITE_PC:
4539           branch_write_pc (regs, dsc, val);
4540           break;
4541
4542         case BX_WRITE_PC:
4543           bx_write_pc (regs, val);
4544           break;
4545
4546         case LOAD_WRITE_PC:
4547           load_write_pc (regs, dsc, val);
4548           break;
4549
4550         case ALU_WRITE_PC:
4551           alu_write_pc (regs, dsc, val);
4552           break;
4553
4554         case CANNOT_WRITE_PC:
4555           warning (_("Instruction wrote to PC in an unexpected way when "
4556                      "single-stepping"));
4557           break;
4558
4559         default:
4560           internal_error (__FILE__, __LINE__,
4561                           _("Invalid argument to displaced_write_reg"));
4562         }
4563
4564       dsc->wrote_to_pc = 1;
4565     }
4566   else
4567     {
4568       if (debug_displaced)
4569         fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
4570                             regno, (unsigned long) val);
4571       regcache_cooked_write_unsigned (regs, regno, val);
4572     }
4573 }
4574
4575 /* This function is used to concisely determine if an instruction INSN
4576    references PC.  Register fields of interest in INSN should have the
4577    corresponding fields of BITMASK set to 0b1111.  The function
4578    returns return 1 if any of these fields in INSN reference the PC
4579    (also 0b1111, r15), else it returns 0.  */
4580
4581 static int
4582 insn_references_pc (uint32_t insn, uint32_t bitmask)
4583 {
4584   uint32_t lowbit = 1;
4585
4586   while (bitmask != 0)
4587     {
4588       uint32_t mask;
4589
4590       for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4591         ;
4592
4593       if (!lowbit)
4594         break;
4595
4596       mask = lowbit * 0xf;
4597
4598       if ((insn & mask) == mask)
4599         return 1;
4600
4601       bitmask &= ~mask;
4602     }
4603
4604   return 0;
4605 }
4606
4607 /* The simplest copy function.  Many instructions have the same effect no
4608    matter what address they are executed at: in those cases, use this.  */
4609
4610 static int
4611 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
4612                      const char *iname, arm_displaced_step_closure *dsc)
4613 {
4614   if (debug_displaced)
4615     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
4616                         "opcode/class '%s' unmodified\n", (unsigned long) insn,
4617                         iname);
4618
4619   dsc->modinsn[0] = insn;
4620
4621   return 0;
4622 }
4623
4624 static int
4625 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4626                              uint16_t insn2, const char *iname,
4627                              arm_displaced_step_closure *dsc)
4628 {
4629   if (debug_displaced)
4630     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
4631                         "opcode/class '%s' unmodified\n", insn1, insn2,
4632                         iname);
4633
4634   dsc->modinsn[0] = insn1;
4635   dsc->modinsn[1] = insn2;
4636   dsc->numinsns = 2;
4637
4638   return 0;
4639 }
4640
4641 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4642    modification.  */
4643 static int
4644 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4645                              const char *iname,
4646                              arm_displaced_step_closure *dsc)
4647 {
4648   if (debug_displaced)
4649     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
4650                         "opcode/class '%s' unmodified\n", insn,
4651                         iname);
4652
4653   dsc->modinsn[0] = insn;
4654
4655   return 0;
4656 }
4657
4658 /* Preload instructions with immediate offset.  */
4659
4660 static void
4661 cleanup_preload (struct gdbarch *gdbarch,
4662                  struct regcache *regs, arm_displaced_step_closure *dsc)
4663 {
4664   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4665   if (!dsc->u.preload.immed)
4666     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4667 }
4668
4669 static void
4670 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4671                  arm_displaced_step_closure *dsc, unsigned int rn)
4672 {
4673   ULONGEST rn_val;
4674   /* Preload instructions:
4675
4676      {pli/pld} [rn, #+/-imm]
4677      ->
4678      {pli/pld} [r0, #+/-imm].  */
4679
4680   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4681   rn_val = displaced_read_reg (regs, dsc, rn);
4682   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4683   dsc->u.preload.immed = 1;
4684
4685   dsc->cleanup = &cleanup_preload;
4686 }
4687
4688 static int
4689 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4690                   arm_displaced_step_closure *dsc)
4691 {
4692   unsigned int rn = bits (insn, 16, 19);
4693
4694   if (!insn_references_pc (insn, 0x000f0000ul))
4695     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4696
4697   if (debug_displaced)
4698     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4699                         (unsigned long) insn);
4700
4701   dsc->modinsn[0] = insn & 0xfff0ffff;
4702
4703   install_preload (gdbarch, regs, dsc, rn);
4704
4705   return 0;
4706 }
4707
4708 static int
4709 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4710                      struct regcache *regs, arm_displaced_step_closure *dsc)
4711 {
4712   unsigned int rn = bits (insn1, 0, 3);
4713   unsigned int u_bit = bit (insn1, 7);
4714   int imm12 = bits (insn2, 0, 11);
4715   ULONGEST pc_val;
4716
4717   if (rn != ARM_PC_REGNUM)
4718     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4719
4720   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4721      PLD (literal) Encoding T1.  */
4722   if (debug_displaced)
4723     fprintf_unfiltered (gdb_stdlog,
4724                         "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
4725                         (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4726                         imm12);
4727
4728   if (!u_bit)
4729     imm12 = -1 * imm12;
4730
4731   /* Rewrite instruction {pli/pld} PC imm12 into:
4732      Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4733
4734      {pli/pld} [r0, r1]
4735
4736      Cleanup: r0 <- tmp[0], r1 <- tmp[1].  */
4737
4738   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4739   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4740
4741   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4742
4743   displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4744   displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4745   dsc->u.preload.immed = 0;
4746
4747   /* {pli/pld} [r0, r1] */
4748   dsc->modinsn[0] = insn1 & 0xfff0;
4749   dsc->modinsn[1] = 0xf001;
4750   dsc->numinsns = 2;
4751
4752   dsc->cleanup = &cleanup_preload;
4753   return 0;
4754 }
4755
4756 /* Preload instructions with register offset.  */
4757
4758 static void
4759 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4760                     arm_displaced_step_closure *dsc, unsigned int rn,
4761                     unsigned int rm)
4762 {
4763   ULONGEST rn_val, rm_val;
4764
4765   /* Preload register-offset instructions:
4766
4767      {pli/pld} [rn, rm {, shift}]
4768      ->
4769      {pli/pld} [r0, r1 {, shift}].  */
4770
4771   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4772   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4773   rn_val = displaced_read_reg (regs, dsc, rn);
4774   rm_val = displaced_read_reg (regs, dsc, rm);
4775   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4776   displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4777   dsc->u.preload.immed = 0;
4778
4779   dsc->cleanup = &cleanup_preload;
4780 }
4781
4782 static int
4783 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4784                       struct regcache *regs,
4785                       arm_displaced_step_closure *dsc)
4786 {
4787   unsigned int rn = bits (insn, 16, 19);
4788   unsigned int rm = bits (insn, 0, 3);
4789
4790
4791   if (!insn_references_pc (insn, 0x000f000ful))
4792     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4793
4794   if (debug_displaced)
4795     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4796                         (unsigned long) insn);
4797
4798   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4799
4800   install_preload_reg (gdbarch, regs, dsc, rn, rm);
4801   return 0;
4802 }
4803
4804 /* Copy/cleanup coprocessor load and store instructions.  */
4805
4806 static void
4807 cleanup_copro_load_store (struct gdbarch *gdbarch,
4808                           struct regcache *regs,
4809                           arm_displaced_step_closure *dsc)
4810 {
4811   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4812
4813   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4814
4815   if (dsc->u.ldst.writeback)
4816     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4817 }
4818
4819 static void
4820 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4821                           arm_displaced_step_closure *dsc,
4822                           int writeback, unsigned int rn)
4823 {
4824   ULONGEST rn_val;
4825
4826   /* Coprocessor load/store instructions:
4827
4828      {stc/stc2} [<Rn>, #+/-imm]  (and other immediate addressing modes)
4829      ->
4830      {stc/stc2} [r0, #+/-imm].
4831
4832      ldc/ldc2 are handled identically.  */
4833
4834   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4835   rn_val = displaced_read_reg (regs, dsc, rn);
4836   /* PC should be 4-byte aligned.  */
4837   rn_val = rn_val & 0xfffffffc;
4838   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4839
4840   dsc->u.ldst.writeback = writeback;
4841   dsc->u.ldst.rn = rn;
4842
4843   dsc->cleanup = &cleanup_copro_load_store;
4844 }
4845
4846 static int
4847 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4848                            struct regcache *regs,
4849                            arm_displaced_step_closure *dsc)
4850 {
4851   unsigned int rn = bits (insn, 16, 19);
4852
4853   if (!insn_references_pc (insn, 0x000f0000ul))
4854     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4855
4856   if (debug_displaced)
4857     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4858                         "load/store insn %.8lx\n", (unsigned long) insn);
4859
4860   dsc->modinsn[0] = insn & 0xfff0ffff;
4861
4862   install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4863
4864   return 0;
4865 }
4866
4867 static int
4868 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4869                               uint16_t insn2, struct regcache *regs,
4870                               arm_displaced_step_closure *dsc)
4871 {
4872   unsigned int rn = bits (insn1, 0, 3);
4873
4874   if (rn != ARM_PC_REGNUM)
4875     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4876                                         "copro load/store", dsc);
4877
4878   if (debug_displaced)
4879     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4880                         "load/store insn %.4x%.4x\n", insn1, insn2);
4881
4882   dsc->modinsn[0] = insn1 & 0xfff0;
4883   dsc->modinsn[1] = insn2;
4884   dsc->numinsns = 2;
4885
4886   /* This function is called for copying instruction LDC/LDC2/VLDR, which
4887      doesn't support writeback, so pass 0.  */
4888   install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4889
4890   return 0;
4891 }
4892
4893 /* Clean up branch instructions (actually perform the branch, by setting
4894    PC).  */
4895
4896 static void
4897 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4898                 arm_displaced_step_closure *dsc)
4899 {
4900   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4901   int branch_taken = condition_true (dsc->u.branch.cond, status);
4902   enum pc_write_style write_pc = dsc->u.branch.exchange
4903                                  ? BX_WRITE_PC : BRANCH_WRITE_PC;
4904
4905   if (!branch_taken)
4906     return;
4907
4908   if (dsc->u.branch.link)
4909     {
4910       /* The value of LR should be the next insn of current one.  In order
4911        not to confuse logic hanlding later insn `bx lr', if current insn mode
4912        is Thumb, the bit 0 of LR value should be set to 1.  */
4913       ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4914
4915       if (dsc->is_thumb)
4916         next_insn_addr |= 0x1;
4917
4918       displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4919                            CANNOT_WRITE_PC);
4920     }
4921
4922   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4923 }
4924
4925 /* Copy B/BL/BLX instructions with immediate destinations.  */
4926
4927 static void
4928 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4929                   arm_displaced_step_closure *dsc,
4930                   unsigned int cond, int exchange, int link, long offset)
4931 {
4932   /* Implement "BL<cond> <label>" as:
4933
4934      Preparation: cond <- instruction condition
4935      Insn: mov r0, r0  (nop)
4936      Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4937
4938      B<cond> similar, but don't set r14 in cleanup.  */
4939
4940   dsc->u.branch.cond = cond;
4941   dsc->u.branch.link = link;
4942   dsc->u.branch.exchange = exchange;
4943
4944   dsc->u.branch.dest = dsc->insn_addr;
4945   if (link && exchange)
4946     /* For BLX, offset is computed from the Align (PC, 4).  */
4947     dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
4948
4949   if (dsc->is_thumb)
4950     dsc->u.branch.dest += 4 + offset;
4951   else
4952     dsc->u.branch.dest += 8 + offset;
4953
4954   dsc->cleanup = &cleanup_branch;
4955 }
4956 static int
4957 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
4958                    struct regcache *regs, arm_displaced_step_closure *dsc)
4959 {
4960   unsigned int cond = bits (insn, 28, 31);
4961   int exchange = (cond == 0xf);
4962   int link = exchange || bit (insn, 24);
4963   long offset;
4964
4965   if (debug_displaced)
4966     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
4967                         "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
4968                         (unsigned long) insn);
4969   if (exchange)
4970     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
4971        then arrange the switch into Thumb mode.  */
4972     offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
4973   else
4974     offset = bits (insn, 0, 23) << 2;
4975
4976   if (bit (offset, 25))
4977     offset = offset | ~0x3ffffff;
4978
4979   dsc->modinsn[0] = ARM_NOP;
4980
4981   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4982   return 0;
4983 }
4984
4985 static int
4986 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
4987                       uint16_t insn2, struct regcache *regs,
4988                       arm_displaced_step_closure *dsc)
4989 {
4990   int link = bit (insn2, 14);
4991   int exchange = link && !bit (insn2, 12);
4992   int cond = INST_AL;
4993   long offset = 0;
4994   int j1 = bit (insn2, 13);
4995   int j2 = bit (insn2, 11);
4996   int s = sbits (insn1, 10, 10);
4997   int i1 = !(j1 ^ bit (insn1, 10));
4998   int i2 = !(j2 ^ bit (insn1, 10));
4999
5000   if (!link && !exchange) /* B */
5001     {
5002       offset = (bits (insn2, 0, 10) << 1);
5003       if (bit (insn2, 12)) /* Encoding T4 */
5004         {
5005           offset |= (bits (insn1, 0, 9) << 12)
5006             | (i2 << 22)
5007             | (i1 << 23)
5008             | (s << 24);
5009           cond = INST_AL;
5010         }
5011       else /* Encoding T3 */
5012         {
5013           offset |= (bits (insn1, 0, 5) << 12)
5014             | (j1 << 18)
5015             | (j2 << 19)
5016             | (s << 20);
5017           cond = bits (insn1, 6, 9);
5018         }
5019     }
5020   else
5021     {
5022       offset = (bits (insn1, 0, 9) << 12);
5023       offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
5024       offset |= exchange ?
5025         (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
5026     }
5027
5028   if (debug_displaced)
5029     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
5030                         "%.4x %.4x with offset %.8lx\n",
5031                         link ? (exchange) ? "blx" : "bl" : "b",
5032                         insn1, insn2, offset);
5033
5034   dsc->modinsn[0] = THUMB_NOP;
5035
5036   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5037   return 0;
5038 }
5039
5040 /* Copy B Thumb instructions.  */
5041 static int
5042 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
5043               arm_displaced_step_closure *dsc)
5044 {
5045   unsigned int cond = 0;
5046   int offset = 0;
5047   unsigned short bit_12_15 = bits (insn, 12, 15);
5048   CORE_ADDR from = dsc->insn_addr;
5049
5050   if (bit_12_15 == 0xd)
5051     {
5052       /* offset = SignExtend (imm8:0, 32) */
5053       offset = sbits ((insn << 1), 0, 8);
5054       cond = bits (insn, 8, 11);
5055     }
5056   else if (bit_12_15 == 0xe) /* Encoding T2 */
5057     {
5058       offset = sbits ((insn << 1), 0, 11);
5059       cond = INST_AL;
5060     }
5061
5062   if (debug_displaced)
5063     fprintf_unfiltered (gdb_stdlog,
5064                         "displaced: copying b immediate insn %.4x "
5065                         "with offset %d\n", insn, offset);
5066
5067   dsc->u.branch.cond = cond;
5068   dsc->u.branch.link = 0;
5069   dsc->u.branch.exchange = 0;
5070   dsc->u.branch.dest = from + 4 + offset;
5071
5072   dsc->modinsn[0] = THUMB_NOP;
5073
5074   dsc->cleanup = &cleanup_branch;
5075
5076   return 0;
5077 }
5078
5079 /* Copy BX/BLX with register-specified destinations.  */
5080
5081 static void
5082 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5083                     arm_displaced_step_closure *dsc, int link,
5084                     unsigned int cond, unsigned int rm)
5085 {
5086   /* Implement {BX,BLX}<cond> <reg>" as:
5087
5088      Preparation: cond <- instruction condition
5089      Insn: mov r0, r0 (nop)
5090      Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5091
5092      Don't set r14 in cleanup for BX.  */
5093
5094   dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5095
5096   dsc->u.branch.cond = cond;
5097   dsc->u.branch.link = link;
5098
5099   dsc->u.branch.exchange = 1;
5100
5101   dsc->cleanup = &cleanup_branch;
5102 }
5103
5104 static int
5105 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5106                      struct regcache *regs, arm_displaced_step_closure *dsc)
5107 {
5108   unsigned int cond = bits (insn, 28, 31);
5109   /* BX:  x12xxx1x
5110      BLX: x12xxx3x.  */
5111   int link = bit (insn, 5);
5112   unsigned int rm = bits (insn, 0, 3);
5113
5114   if (debug_displaced)
5115     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
5116                         (unsigned long) insn);
5117
5118   dsc->modinsn[0] = ARM_NOP;
5119
5120   install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5121   return 0;
5122 }
5123
5124 static int
5125 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5126                        struct regcache *regs,
5127                        arm_displaced_step_closure *dsc)
5128 {
5129   int link = bit (insn, 7);
5130   unsigned int rm = bits (insn, 3, 6);
5131
5132   if (debug_displaced)
5133     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
5134                         (unsigned short) insn);
5135
5136   dsc->modinsn[0] = THUMB_NOP;
5137
5138   install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5139
5140   return 0;
5141 }
5142
5143
5144 /* Copy/cleanup arithmetic/logic instruction with immediate RHS.  */
5145
5146 static void
5147 cleanup_alu_imm (struct gdbarch *gdbarch,
5148                  struct regcache *regs, arm_displaced_step_closure *dsc)
5149 {
5150   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5151   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5152   displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5153   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5154 }
5155
5156 static int
5157 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5158                   arm_displaced_step_closure *dsc)
5159 {
5160   unsigned int rn = bits (insn, 16, 19);
5161   unsigned int rd = bits (insn, 12, 15);
5162   unsigned int op = bits (insn, 21, 24);
5163   int is_mov = (op == 0xd);
5164   ULONGEST rd_val, rn_val;
5165
5166   if (!insn_references_pc (insn, 0x000ff000ul))
5167     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5168
5169   if (debug_displaced)
5170     fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
5171                         "%.8lx\n", is_mov ? "move" : "ALU",
5172                         (unsigned long) insn);
5173
5174   /* Instruction is of form:
5175
5176      <op><cond> rd, [rn,] #imm
5177
5178      Rewrite as:
5179
5180      Preparation: tmp1, tmp2 <- r0, r1;
5181                   r0, r1 <- rd, rn
5182      Insn: <op><cond> r0, r1, #imm
5183      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5184   */
5185
5186   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5187   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5188   rn_val = displaced_read_reg (regs, dsc, rn);
5189   rd_val = displaced_read_reg (regs, dsc, rd);
5190   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5191   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5192   dsc->rd = rd;
5193
5194   if (is_mov)
5195     dsc->modinsn[0] = insn & 0xfff00fff;
5196   else
5197     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5198
5199   dsc->cleanup = &cleanup_alu_imm;
5200
5201   return 0;
5202 }
5203
5204 static int
5205 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5206                      uint16_t insn2, struct regcache *regs,
5207                      arm_displaced_step_closure *dsc)
5208 {
5209   unsigned int op = bits (insn1, 5, 8);
5210   unsigned int rn, rm, rd;
5211   ULONGEST rd_val, rn_val;
5212
5213   rn = bits (insn1, 0, 3); /* Rn */
5214   rm = bits (insn2, 0, 3); /* Rm */
5215   rd = bits (insn2, 8, 11); /* Rd */
5216
5217   /* This routine is only called for instruction MOV.  */
5218   gdb_assert (op == 0x2 && rn == 0xf);
5219
5220   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5221     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5222
5223   if (debug_displaced)
5224     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
5225                         "ALU", insn1, insn2);
5226
5227   /* Instruction is of form:
5228
5229      <op><cond> rd, [rn,] #imm
5230
5231      Rewrite as:
5232
5233      Preparation: tmp1, tmp2 <- r0, r1;
5234                   r0, r1 <- rd, rn
5235      Insn: <op><cond> r0, r1, #imm
5236      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5237   */
5238
5239   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5240   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5241   rn_val = displaced_read_reg (regs, dsc, rn);
5242   rd_val = displaced_read_reg (regs, dsc, rd);
5243   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5244   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5245   dsc->rd = rd;
5246
5247   dsc->modinsn[0] = insn1;
5248   dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5249   dsc->numinsns = 2;
5250
5251   dsc->cleanup = &cleanup_alu_imm;
5252
5253   return 0;
5254 }
5255
5256 /* Copy/cleanup arithmetic/logic insns with register RHS.  */
5257
5258 static void
5259 cleanup_alu_reg (struct gdbarch *gdbarch,
5260                  struct regcache *regs, arm_displaced_step_closure *dsc)
5261 {
5262   ULONGEST rd_val;
5263   int i;
5264
5265   rd_val = displaced_read_reg (regs, dsc, 0);
5266
5267   for (i = 0; i < 3; i++)
5268     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5269
5270   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5271 }
5272
5273 static void
5274 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5275                  arm_displaced_step_closure *dsc,
5276                  unsigned int rd, unsigned int rn, unsigned int rm)
5277 {
5278   ULONGEST rd_val, rn_val, rm_val;
5279
5280   /* Instruction is of form:
5281
5282      <op><cond> rd, [rn,] rm [, <shift>]
5283
5284      Rewrite as:
5285
5286      Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5287                   r0, r1, r2 <- rd, rn, rm
5288      Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5289      Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5290   */
5291
5292   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5293   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5294   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5295   rd_val = displaced_read_reg (regs, dsc, rd);
5296   rn_val = displaced_read_reg (regs, dsc, rn);
5297   rm_val = displaced_read_reg (regs, dsc, rm);
5298   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5299   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5300   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5301   dsc->rd = rd;
5302
5303   dsc->cleanup = &cleanup_alu_reg;
5304 }
5305
5306 static int
5307 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5308                   arm_displaced_step_closure *dsc)
5309 {
5310   unsigned int op = bits (insn, 21, 24);
5311   int is_mov = (op == 0xd);
5312
5313   if (!insn_references_pc (insn, 0x000ff00ful))
5314     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5315
5316   if (debug_displaced)
5317     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
5318                         is_mov ? "move" : "ALU", (unsigned long) insn);
5319
5320   if (is_mov)
5321     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5322   else
5323     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5324
5325   install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5326                    bits (insn, 0, 3));
5327   return 0;
5328 }
5329
5330 static int
5331 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5332                     struct regcache *regs,
5333                     arm_displaced_step_closure *dsc)
5334 {
5335   unsigned rm, rd;
5336
5337   rm = bits (insn, 3, 6);
5338   rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5339
5340   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5341     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5342
5343   if (debug_displaced)
5344     fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
5345                         (unsigned short) insn);
5346
5347   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5348
5349   install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5350
5351   return 0;
5352 }
5353
5354 /* Cleanup/copy arithmetic/logic insns with shifted register RHS.  */
5355
5356 static void
5357 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5358                          struct regcache *regs,
5359                          arm_displaced_step_closure *dsc)
5360 {
5361   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5362   int i;
5363
5364   for (i = 0; i < 4; i++)
5365     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5366
5367   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5368 }
5369
5370 static void
5371 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5372                          arm_displaced_step_closure *dsc,
5373                          unsigned int rd, unsigned int rn, unsigned int rm,
5374                          unsigned rs)
5375 {
5376   int i;
5377   ULONGEST rd_val, rn_val, rm_val, rs_val;
5378
5379   /* Instruction is of form:
5380
5381      <op><cond> rd, [rn,] rm, <shift> rs
5382
5383      Rewrite as:
5384
5385      Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5386                   r0, r1, r2, r3 <- rd, rn, rm, rs
5387      Insn: <op><cond> r0, r1, r2, <shift> r3
5388      Cleanup: tmp5 <- r0
5389               r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5390               rd <- tmp5
5391   */
5392
5393   for (i = 0; i < 4; i++)
5394     dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5395
5396   rd_val = displaced_read_reg (regs, dsc, rd);
5397   rn_val = displaced_read_reg (regs, dsc, rn);
5398   rm_val = displaced_read_reg (regs, dsc, rm);
5399   rs_val = displaced_read_reg (regs, dsc, rs);
5400   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5401   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5402   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5403   displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5404   dsc->rd = rd;
5405   dsc->cleanup = &cleanup_alu_shifted_reg;
5406 }
5407
5408 static int
5409 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5410                           struct regcache *regs,
5411                           arm_displaced_step_closure *dsc)
5412 {
5413   unsigned int op = bits (insn, 21, 24);
5414   int is_mov = (op == 0xd);
5415   unsigned int rd, rn, rm, rs;
5416
5417   if (!insn_references_pc (insn, 0x000fff0ful))
5418     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5419
5420   if (debug_displaced)
5421     fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
5422                         "%.8lx\n", is_mov ? "move" : "ALU",
5423                         (unsigned long) insn);
5424
5425   rn = bits (insn, 16, 19);
5426   rm = bits (insn, 0, 3);
5427   rs = bits (insn, 8, 11);
5428   rd = bits (insn, 12, 15);
5429
5430   if (is_mov)
5431     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5432   else
5433     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5434
5435   install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5436
5437   return 0;
5438 }
5439
5440 /* Clean up load instructions.  */
5441
5442 static void
5443 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5444               arm_displaced_step_closure *dsc)
5445 {
5446   ULONGEST rt_val, rt_val2 = 0, rn_val;
5447
5448   rt_val = displaced_read_reg (regs, dsc, 0);
5449   if (dsc->u.ldst.xfersize == 8)
5450     rt_val2 = displaced_read_reg (regs, dsc, 1);
5451   rn_val = displaced_read_reg (regs, dsc, 2);
5452
5453   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5454   if (dsc->u.ldst.xfersize > 4)
5455     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5456   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5457   if (!dsc->u.ldst.immed)
5458     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5459
5460   /* Handle register writeback.  */
5461   if (dsc->u.ldst.writeback)
5462     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5463   /* Put result in right place.  */
5464   displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5465   if (dsc->u.ldst.xfersize == 8)
5466     displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5467 }
5468
5469 /* Clean up store instructions.  */
5470
5471 static void
5472 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5473                arm_displaced_step_closure *dsc)
5474 {
5475   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5476
5477   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5478   if (dsc->u.ldst.xfersize > 4)
5479     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5480   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5481   if (!dsc->u.ldst.immed)
5482     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5483   if (!dsc->u.ldst.restore_r4)
5484     displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5485
5486   /* Writeback.  */
5487   if (dsc->u.ldst.writeback)
5488     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5489 }
5490
5491 /* Copy "extra" load/store instructions.  These are halfword/doubleword
5492    transfers, which have a different encoding to byte/word transfers.  */
5493
5494 static int
5495 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5496                       struct regcache *regs, arm_displaced_step_closure *dsc)
5497 {
5498   unsigned int op1 = bits (insn, 20, 24);
5499   unsigned int op2 = bits (insn, 5, 6);
5500   unsigned int rt = bits (insn, 12, 15);
5501   unsigned int rn = bits (insn, 16, 19);
5502   unsigned int rm = bits (insn, 0, 3);
5503   char load[12]     = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5504   char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5505   int immed = (op1 & 0x4) != 0;
5506   int opcode;
5507   ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5508
5509   if (!insn_references_pc (insn, 0x000ff00ful))
5510     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5511
5512   if (debug_displaced)
5513     fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
5514                         "insn %.8lx\n", unprivileged ? "unprivileged " : "",
5515                         (unsigned long) insn);
5516
5517   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5518
5519   if (opcode < 0)
5520     internal_error (__FILE__, __LINE__,
5521                     _("copy_extra_ld_st: instruction decode error"));
5522
5523   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5524   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5525   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5526   if (!immed)
5527     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5528
5529   rt_val = displaced_read_reg (regs, dsc, rt);
5530   if (bytesize[opcode] == 8)
5531     rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5532   rn_val = displaced_read_reg (regs, dsc, rn);
5533   if (!immed)
5534     rm_val = displaced_read_reg (regs, dsc, rm);
5535
5536   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5537   if (bytesize[opcode] == 8)
5538     displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5539   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5540   if (!immed)
5541     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5542
5543   dsc->rd = rt;
5544   dsc->u.ldst.xfersize = bytesize[opcode];
5545   dsc->u.ldst.rn = rn;
5546   dsc->u.ldst.immed = immed;
5547   dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5548   dsc->u.ldst.restore_r4 = 0;
5549
5550   if (immed)
5551     /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5552         ->
5553        {ldr,str}<width><cond> r0, [r1,] [r2, #imm].  */
5554     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5555   else
5556     /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5557         ->
5558        {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3].  */
5559     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5560
5561   dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5562
5563   return 0;
5564 }
5565
5566 /* Copy byte/half word/word loads and stores.  */
5567
5568 static void
5569 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5570                     arm_displaced_step_closure *dsc, int load,
5571                     int immed, int writeback, int size, int usermode,
5572                     int rt, int rm, int rn)
5573 {
5574   ULONGEST rt_val, rn_val, rm_val = 0;
5575
5576   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5577   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5578   if (!immed)
5579     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5580   if (!load)
5581     dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5582
5583   rt_val = displaced_read_reg (regs, dsc, rt);
5584   rn_val = displaced_read_reg (regs, dsc, rn);
5585   if (!immed)
5586     rm_val = displaced_read_reg (regs, dsc, rm);
5587
5588   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5589   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5590   if (!immed)
5591     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5592   dsc->rd = rt;
5593   dsc->u.ldst.xfersize = size;
5594   dsc->u.ldst.rn = rn;
5595   dsc->u.ldst.immed = immed;
5596   dsc->u.ldst.writeback = writeback;
5597
5598   /* To write PC we can do:
5599
5600      Before this sequence of instructions:
5601      r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5602      r2 is the Rn value got from dispalced_read_reg.
5603
5604      Insn1: push {pc} Write address of STR instruction + offset on stack
5605      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
5606      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
5607                                 = addr(Insn1) + offset - addr(Insn3) - 8
5608                                 = offset - 16
5609      Insn4: add r4, r4, #8   r4 = offset - 8
5610      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
5611                                 = from + offset
5612      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5613
5614      Otherwise we don't know what value to write for PC, since the offset is
5615      architecture-dependent (sometimes PC+8, sometimes PC+12).  More details
5616      of this can be found in Section "Saving from r15" in
5617      http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5618
5619   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5620 }
5621
5622
5623 static int
5624 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5625                           uint16_t insn2, struct regcache *regs,
5626                           arm_displaced_step_closure *dsc, int size)
5627 {
5628   unsigned int u_bit = bit (insn1, 7);
5629   unsigned int rt = bits (insn2, 12, 15);
5630   int imm12 = bits (insn2, 0, 11);
5631   ULONGEST pc_val;
5632
5633   if (debug_displaced)
5634     fprintf_unfiltered (gdb_stdlog,
5635                         "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
5636                         (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5637                         imm12);
5638
5639   if (!u_bit)
5640     imm12 = -1 * imm12;
5641
5642   /* Rewrite instruction LDR Rt imm12 into:
5643
5644      Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5645
5646      LDR R0, R2, R3,
5647
5648      Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2].  */
5649
5650
5651   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5652   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5653   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5654
5655   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5656
5657   pc_val = pc_val & 0xfffffffc;
5658
5659   displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5660   displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5661
5662   dsc->rd = rt;
5663
5664   dsc->u.ldst.xfersize = size;
5665   dsc->u.ldst.immed = 0;
5666   dsc->u.ldst.writeback = 0;
5667   dsc->u.ldst.restore_r4 = 0;
5668
5669   /* LDR R0, R2, R3 */
5670   dsc->modinsn[0] = 0xf852;
5671   dsc->modinsn[1] = 0x3;
5672   dsc->numinsns = 2;
5673
5674   dsc->cleanup = &cleanup_load;
5675
5676   return 0;
5677 }
5678
5679 static int
5680 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5681                           uint16_t insn2, struct regcache *regs,
5682                           arm_displaced_step_closure *dsc,
5683                           int writeback, int immed)
5684 {
5685   unsigned int rt = bits (insn2, 12, 15);
5686   unsigned int rn = bits (insn1, 0, 3);
5687   unsigned int rm = bits (insn2, 0, 3);  /* Only valid if !immed.  */
5688   /* In LDR (register), there is also a register Rm, which is not allowed to
5689      be PC, so we don't have to check it.  */
5690
5691   if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5692     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5693                                         dsc);
5694
5695   if (debug_displaced)
5696     fprintf_unfiltered (gdb_stdlog,
5697                         "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
5698                          rt, rn, insn1, insn2);
5699
5700   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5701                       0, rt, rm, rn);
5702
5703   dsc->u.ldst.restore_r4 = 0;
5704
5705   if (immed)
5706     /* ldr[b]<cond> rt, [rn, #imm], etc.
5707        ->
5708        ldr[b]<cond> r0, [r2, #imm].  */
5709     {
5710       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5711       dsc->modinsn[1] = insn2 & 0x0fff;
5712     }
5713   else
5714     /* ldr[b]<cond> rt, [rn, rm], etc.
5715        ->
5716        ldr[b]<cond> r0, [r2, r3].  */
5717     {
5718       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5719       dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5720     }
5721
5722   dsc->numinsns = 2;
5723
5724   return 0;
5725 }
5726
5727
5728 static int
5729 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5730                             struct regcache *regs,
5731                             arm_displaced_step_closure *dsc,
5732                             int load, int size, int usermode)
5733 {
5734   int immed = !bit (insn, 25);
5735   int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5736   unsigned int rt = bits (insn, 12, 15);
5737   unsigned int rn = bits (insn, 16, 19);
5738   unsigned int rm = bits (insn, 0, 3);  /* Only valid if !immed.  */
5739
5740   if (!insn_references_pc (insn, 0x000ff00ful))
5741     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5742
5743   if (debug_displaced)
5744     fprintf_unfiltered (gdb_stdlog,
5745                         "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
5746                         load ? (size == 1 ? "ldrb" : "ldr")
5747                              : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
5748                         rt, rn,
5749                         (unsigned long) insn);
5750
5751   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5752                       usermode, rt, rm, rn);
5753
5754   if (load || rt != ARM_PC_REGNUM)
5755     {
5756       dsc->u.ldst.restore_r4 = 0;
5757
5758       if (immed)
5759         /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5760            ->
5761            {ldr,str}[b]<cond> r0, [r2, #imm].  */
5762         dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5763       else
5764         /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5765            ->
5766            {ldr,str}[b]<cond> r0, [r2, r3].  */
5767         dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5768     }
5769   else
5770     {
5771       /* We need to use r4 as scratch.  Make sure it's restored afterwards.  */
5772       dsc->u.ldst.restore_r4 = 1;
5773       dsc->modinsn[0] = 0xe92d8000;  /* push {pc} */
5774       dsc->modinsn[1] = 0xe8bd0010;  /* pop  {r4} */
5775       dsc->modinsn[2] = 0xe044400f;  /* sub r4, r4, pc.  */
5776       dsc->modinsn[3] = 0xe2844008;  /* add r4, r4, #8.  */
5777       dsc->modinsn[4] = 0xe0800004;  /* add r0, r0, r4.  */
5778
5779       /* As above.  */
5780       if (immed)
5781         dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5782       else
5783         dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5784
5785       dsc->numinsns = 6;
5786     }
5787
5788   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5789
5790   return 0;
5791 }
5792
5793 /* Cleanup LDM instructions with fully-populated register list.  This is an
5794    unfortunate corner case: it's impossible to implement correctly by modifying
5795    the instruction.  The issue is as follows: we have an instruction,
5796
5797    ldm rN, {r0-r15}
5798
5799    which we must rewrite to avoid loading PC.  A possible solution would be to
5800    do the load in two halves, something like (with suitable cleanup
5801    afterwards):
5802
5803    mov r8, rN
5804    ldm[id][ab] r8!, {r0-r7}
5805    str r7, <temp>
5806    ldm[id][ab] r8, {r7-r14}
5807    <bkpt>
5808
5809    but at present there's no suitable place for <temp>, since the scratch space
5810    is overwritten before the cleanup routine is called.  For now, we simply
5811    emulate the instruction.  */
5812
5813 static void
5814 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5815                         arm_displaced_step_closure *dsc)
5816 {
5817   int inc = dsc->u.block.increment;
5818   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5819   int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5820   uint32_t regmask = dsc->u.block.regmask;
5821   int regno = inc ? 0 : 15;
5822   CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5823   int exception_return = dsc->u.block.load && dsc->u.block.user
5824                          && (regmask & 0x8000) != 0;
5825   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5826   int do_transfer = condition_true (dsc->u.block.cond, status);
5827   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5828
5829   if (!do_transfer)
5830     return;
5831
5832   /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5833      sensible we can do here.  Complain loudly.  */
5834   if (exception_return)
5835     error (_("Cannot single-step exception return"));
5836
5837   /* We don't handle any stores here for now.  */
5838   gdb_assert (dsc->u.block.load != 0);
5839
5840   if (debug_displaced)
5841     fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
5842                         "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
5843                         dsc->u.block.increment ? "inc" : "dec",
5844                         dsc->u.block.before ? "before" : "after");
5845
5846   while (regmask)
5847     {
5848       uint32_t memword;
5849
5850       if (inc)
5851         while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5852           regno++;
5853       else
5854         while (regno >= 0 && (regmask & (1 << regno)) == 0)
5855           regno--;
5856
5857       xfer_addr += bump_before;
5858
5859       memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5860       displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5861
5862       xfer_addr += bump_after;
5863
5864       regmask &= ~(1 << regno);
5865     }
5866
5867   if (dsc->u.block.writeback)
5868     displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5869                          CANNOT_WRITE_PC);
5870 }
5871
5872 /* Clean up an STM which included the PC in the register list.  */
5873
5874 static void
5875 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5876                         arm_displaced_step_closure *dsc)
5877 {
5878   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5879   int store_executed = condition_true (dsc->u.block.cond, status);
5880   CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
5881   CORE_ADDR stm_insn_addr;
5882   uint32_t pc_val;
5883   long offset;
5884   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5885
5886   /* If condition code fails, there's nothing else to do.  */
5887   if (!store_executed)
5888     return;
5889
5890   if (dsc->u.block.increment)
5891     {
5892       pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5893
5894       if (dsc->u.block.before)
5895          pc_stored_at += 4;
5896     }
5897   else
5898     {
5899       pc_stored_at = dsc->u.block.xfer_addr;
5900
5901       if (dsc->u.block.before)
5902          pc_stored_at -= 4;
5903     }
5904
5905   pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5906   stm_insn_addr = dsc->scratch_base;
5907   offset = pc_val - stm_insn_addr;
5908
5909   if (debug_displaced)
5910     fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
5911                         "STM instruction\n", offset);
5912
5913   /* Rewrite the stored PC to the proper value for the non-displaced original
5914      instruction.  */
5915   write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5916                                  dsc->insn_addr + offset);
5917 }
5918
5919 /* Clean up an LDM which includes the PC in the register list.  We clumped all
5920    the registers in the transferred list into a contiguous range r0...rX (to
5921    avoid loading PC directly and losing control of the debugged program), so we
5922    must undo that here.  */
5923
5924 static void
5925 cleanup_block_load_pc (struct gdbarch *gdbarch,
5926                        struct regcache *regs,
5927                        arm_displaced_step_closure *dsc)
5928 {
5929   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5930   int load_executed = condition_true (dsc->u.block.cond, status);
5931   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5932   unsigned int regs_loaded = bitcount (mask);
5933   unsigned int num_to_shuffle = regs_loaded, clobbered;
5934
5935   /* The method employed here will fail if the register list is fully populated
5936      (we need to avoid loading PC directly).  */
5937   gdb_assert (num_to_shuffle < 16);
5938
5939   if (!load_executed)
5940     return;
5941
5942   clobbered = (1 << num_to_shuffle) - 1;
5943
5944   while (num_to_shuffle > 0)
5945     {
5946       if ((mask & (1 << write_reg)) != 0)
5947         {
5948           unsigned int read_reg = num_to_shuffle - 1;
5949
5950           if (read_reg != write_reg)
5951             {
5952               ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5953               displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5954               if (debug_displaced)
5955                 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
5956                                     "loaded register r%d to r%d\n"), read_reg,
5957                                     write_reg);
5958             }
5959           else if (debug_displaced)
5960             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
5961                                 "r%d already in the right place\n"),
5962                                 write_reg);
5963
5964           clobbered &= ~(1 << write_reg);
5965
5966           num_to_shuffle--;
5967         }
5968
5969       write_reg--;
5970     }
5971
5972   /* Restore any registers we scribbled over.  */
5973   for (write_reg = 0; clobbered != 0; write_reg++)
5974     {
5975       if ((clobbered & (1 << write_reg)) != 0)
5976         {
5977           displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
5978                                CANNOT_WRITE_PC);
5979           if (debug_displaced)
5980             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
5981                                 "clobbered register r%d\n"), write_reg);
5982           clobbered &= ~(1 << write_reg);
5983         }
5984     }
5985
5986   /* Perform register writeback manually.  */
5987   if (dsc->u.block.writeback)
5988     {
5989       ULONGEST new_rn_val = dsc->u.block.xfer_addr;
5990
5991       if (dsc->u.block.increment)
5992         new_rn_val += regs_loaded * 4;
5993       else
5994         new_rn_val -= regs_loaded * 4;
5995
5996       displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
5997                            CANNOT_WRITE_PC);
5998     }
5999 }
6000
6001 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
6002    in user-level code (in particular exception return, ldm rn, {...pc}^).  */
6003
6004 static int
6005 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
6006                      struct regcache *regs,
6007                      arm_displaced_step_closure *dsc)
6008 {
6009   int load = bit (insn, 20);
6010   int user = bit (insn, 22);
6011   int increment = bit (insn, 23);
6012   int before = bit (insn, 24);
6013   int writeback = bit (insn, 21);
6014   int rn = bits (insn, 16, 19);
6015
6016   /* Block transfers which don't mention PC can be run directly
6017      out-of-line.  */
6018   if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
6019     return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
6020
6021   if (rn == ARM_PC_REGNUM)
6022     {
6023       warning (_("displaced: Unpredictable LDM or STM with "
6024                  "base register r15"));
6025       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
6026     }
6027
6028   if (debug_displaced)
6029     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6030                         "%.8lx\n", (unsigned long) insn);
6031
6032   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6033   dsc->u.block.rn = rn;
6034
6035   dsc->u.block.load = load;
6036   dsc->u.block.user = user;
6037   dsc->u.block.increment = increment;
6038   dsc->u.block.before = before;
6039   dsc->u.block.writeback = writeback;
6040   dsc->u.block.cond = bits (insn, 28, 31);
6041
6042   dsc->u.block.regmask = insn & 0xffff;
6043
6044   if (load)
6045     {
6046       if ((insn & 0xffff) == 0xffff)
6047         {
6048           /* LDM with a fully-populated register list.  This case is
6049              particularly tricky.  Implement for now by fully emulating the
6050              instruction (which might not behave perfectly in all cases, but
6051              these instructions should be rare enough for that not to matter
6052              too much).  */
6053           dsc->modinsn[0] = ARM_NOP;
6054
6055           dsc->cleanup = &cleanup_block_load_all;
6056         }
6057       else
6058         {
6059           /* LDM of a list of registers which includes PC.  Implement by
6060              rewriting the list of registers to be transferred into a
6061              contiguous chunk r0...rX before doing the transfer, then shuffling
6062              registers into the correct places in the cleanup routine.  */
6063           unsigned int regmask = insn & 0xffff;
6064           unsigned int num_in_list = bitcount (regmask), new_regmask;
6065           unsigned int i;
6066
6067           for (i = 0; i < num_in_list; i++)
6068             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6069
6070           /* Writeback makes things complicated.  We need to avoid clobbering
6071              the base register with one of the registers in our modified
6072              register list, but just using a different register can't work in
6073              all cases, e.g.:
6074
6075                ldm r14!, {r0-r13,pc}
6076
6077              which would need to be rewritten as:
6078
6079                ldm rN!, {r0-r14}
6080
6081              but that can't work, because there's no free register for N.
6082
6083              Solve this by turning off the writeback bit, and emulating
6084              writeback manually in the cleanup routine.  */
6085
6086           if (writeback)
6087             insn &= ~(1 << 21);
6088
6089           new_regmask = (1 << num_in_list) - 1;
6090
6091           if (debug_displaced)
6092             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6093                                 "{..., pc}: original reg list %.4x, modified "
6094                                 "list %.4x\n"), rn, writeback ? "!" : "",
6095                                 (int) insn & 0xffff, new_regmask);
6096
6097           dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6098
6099           dsc->cleanup = &cleanup_block_load_pc;
6100         }
6101     }
6102   else
6103     {
6104       /* STM of a list of registers which includes PC.  Run the instruction
6105          as-is, but out of line: this will store the wrong value for the PC,
6106          so we must manually fix up the memory in the cleanup routine.
6107          Doing things this way has the advantage that we can auto-detect
6108          the offset of the PC write (which is architecture-dependent) in
6109          the cleanup routine.  */
6110       dsc->modinsn[0] = insn;
6111
6112       dsc->cleanup = &cleanup_block_store_pc;
6113     }
6114
6115   return 0;
6116 }
6117
6118 static int
6119 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6120                         struct regcache *regs,
6121                         arm_displaced_step_closure *dsc)
6122 {
6123   int rn = bits (insn1, 0, 3);
6124   int load = bit (insn1, 4);
6125   int writeback = bit (insn1, 5);
6126
6127   /* Block transfers which don't mention PC can be run directly
6128      out-of-line.  */
6129   if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6130     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6131
6132   if (rn == ARM_PC_REGNUM)
6133     {
6134       warning (_("displaced: Unpredictable LDM or STM with "
6135                  "base register r15"));
6136       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6137                                           "unpredictable ldm/stm", dsc);
6138     }
6139
6140   if (debug_displaced)
6141     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6142                         "%.4x%.4x\n", insn1, insn2);
6143
6144   /* Clear bit 13, since it should be always zero.  */
6145   dsc->u.block.regmask = (insn2 & 0xdfff);
6146   dsc->u.block.rn = rn;
6147
6148   dsc->u.block.load = load;
6149   dsc->u.block.user = 0;
6150   dsc->u.block.increment = bit (insn1, 7);
6151   dsc->u.block.before = bit (insn1, 8);
6152   dsc->u.block.writeback = writeback;
6153   dsc->u.block.cond = INST_AL;
6154   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6155
6156   if (load)
6157     {
6158       if (dsc->u.block.regmask == 0xffff)
6159         {
6160           /* This branch is impossible to happen.  */
6161           gdb_assert (0);
6162         }
6163       else
6164         {
6165           unsigned int regmask = dsc->u.block.regmask;
6166           unsigned int num_in_list = bitcount (regmask), new_regmask;
6167           unsigned int i;
6168
6169           for (i = 0; i < num_in_list; i++)
6170             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6171
6172           if (writeback)
6173             insn1 &= ~(1 << 5);
6174
6175           new_regmask = (1 << num_in_list) - 1;
6176
6177           if (debug_displaced)
6178             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6179                                 "{..., pc}: original reg list %.4x, modified "
6180                                 "list %.4x\n"), rn, writeback ? "!" : "",
6181                                 (int) dsc->u.block.regmask, new_regmask);
6182
6183           dsc->modinsn[0] = insn1;
6184           dsc->modinsn[1] = (new_regmask & 0xffff);
6185           dsc->numinsns = 2;
6186
6187           dsc->cleanup = &cleanup_block_load_pc;
6188         }
6189     }
6190   else
6191     {
6192       dsc->modinsn[0] = insn1;
6193       dsc->modinsn[1] = insn2;
6194       dsc->numinsns = 2;
6195       dsc->cleanup = &cleanup_block_store_pc;
6196     }
6197   return 0;
6198 }
6199
6200 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6201  This is used to avoid a dependency on BFD's bfd_endian enum.  */
6202
6203 ULONGEST
6204 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6205                                                int byte_order)
6206 {
6207   return read_memory_unsigned_integer (memaddr, len,
6208                                        (enum bfd_endian) byte_order);
6209 }
6210
6211 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs.  */
6212
6213 CORE_ADDR
6214 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6215                                    CORE_ADDR val)
6216 {
6217   return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6218 }
6219
6220 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
6221
6222 static CORE_ADDR
6223 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6224 {
6225   return 0;
6226 }
6227
6228 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs.  */
6229
6230 int
6231 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6232 {
6233   return arm_is_thumb (self->regcache);
6234 }
6235
6236 /* single_step() is called just before we want to resume the inferior,
6237    if we want to single-step it but there is no hardware or kernel
6238    single-step support.  We find the target of the coming instructions
6239    and breakpoint them.  */
6240
6241 std::vector<CORE_ADDR>
6242 arm_software_single_step (struct regcache *regcache)
6243 {
6244   struct gdbarch *gdbarch = regcache->arch ();
6245   struct arm_get_next_pcs next_pcs_ctx;
6246
6247   arm_get_next_pcs_ctor (&next_pcs_ctx,
6248                          &arm_get_next_pcs_ops,
6249                          gdbarch_byte_order (gdbarch),
6250                          gdbarch_byte_order_for_code (gdbarch),
6251                          0,
6252                          regcache);
6253
6254   std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6255
6256   for (CORE_ADDR &pc_ref : next_pcs)
6257     pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6258
6259   return next_pcs;
6260 }
6261
6262 /* Cleanup/copy SVC (SWI) instructions.  These two functions are overridden
6263    for Linux, where some SVC instructions must be treated specially.  */
6264
6265 static void
6266 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6267              arm_displaced_step_closure *dsc)
6268 {
6269   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6270
6271   if (debug_displaced)
6272     fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
6273                         "%.8lx\n", (unsigned long) resume_addr);
6274
6275   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6276 }
6277
6278
6279 /* Common copy routine for svc instruciton.  */
6280
6281 static int
6282 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6283              arm_displaced_step_closure *dsc)
6284 {
6285   /* Preparation: none.
6286      Insn: unmodified svc.
6287      Cleanup: pc <- insn_addr + insn_size.  */
6288
6289   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6290      instruction.  */
6291   dsc->wrote_to_pc = 1;
6292
6293   /* Allow OS-specific code to override SVC handling.  */
6294   if (dsc->u.svc.copy_svc_os)
6295     return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6296   else
6297     {
6298       dsc->cleanup = &cleanup_svc;
6299       return 0;
6300     }
6301 }
6302
6303 static int
6304 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6305               struct regcache *regs, arm_displaced_step_closure *dsc)
6306 {
6307
6308   if (debug_displaced)
6309     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
6310                         (unsigned long) insn);
6311
6312   dsc->modinsn[0] = insn;
6313
6314   return install_svc (gdbarch, regs, dsc);
6315 }
6316
6317 static int
6318 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6319                 struct regcache *regs, arm_displaced_step_closure *dsc)
6320 {
6321
6322   if (debug_displaced)
6323     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
6324                         insn);
6325
6326   dsc->modinsn[0] = insn;
6327
6328   return install_svc (gdbarch, regs, dsc);
6329 }
6330
6331 /* Copy undefined instructions.  */
6332
6333 static int
6334 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6335                 arm_displaced_step_closure *dsc)
6336 {
6337   if (debug_displaced)
6338     fprintf_unfiltered (gdb_stdlog,
6339                         "displaced: copying undefined insn %.8lx\n",
6340                         (unsigned long) insn);
6341
6342   dsc->modinsn[0] = insn;
6343
6344   return 0;
6345 }
6346
6347 static int
6348 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6349                        arm_displaced_step_closure *dsc)
6350 {
6351
6352   if (debug_displaced)
6353     fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
6354                        "%.4x %.4x\n", (unsigned short) insn1,
6355                        (unsigned short) insn2);
6356
6357   dsc->modinsn[0] = insn1;
6358   dsc->modinsn[1] = insn2;
6359   dsc->numinsns = 2;
6360
6361   return 0;
6362 }
6363
6364 /* Copy unpredictable instructions.  */
6365
6366 static int
6367 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6368                  arm_displaced_step_closure *dsc)
6369 {
6370   if (debug_displaced)
6371     fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
6372                         "%.8lx\n", (unsigned long) insn);
6373
6374   dsc->modinsn[0] = insn;
6375
6376   return 0;
6377 }
6378
6379 /* The decode_* functions are instruction decoding helpers.  They mostly follow
6380    the presentation in the ARM ARM.  */
6381
6382 static int
6383 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6384                               struct regcache *regs,
6385                               arm_displaced_step_closure *dsc)
6386 {
6387   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6388   unsigned int rn = bits (insn, 16, 19);
6389
6390   if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6391     return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6392   else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6393     return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6394   else if ((op1 & 0x60) == 0x20)
6395     return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6396   else if ((op1 & 0x71) == 0x40)
6397     return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6398                                 dsc);
6399   else if ((op1 & 0x77) == 0x41)
6400     return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6401   else if ((op1 & 0x77) == 0x45)
6402     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pli.  */
6403   else if ((op1 & 0x77) == 0x51)
6404     {
6405       if (rn != 0xf)
6406         return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6407       else
6408         return arm_copy_unpred (gdbarch, insn, dsc);
6409     }
6410   else if ((op1 & 0x77) == 0x55)
6411     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6412   else if (op1 == 0x57)
6413     switch (op2)
6414       {
6415       case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6416       case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6417       case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6418       case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6419       default: return arm_copy_unpred (gdbarch, insn, dsc);
6420       }
6421   else if ((op1 & 0x63) == 0x43)
6422     return arm_copy_unpred (gdbarch, insn, dsc);
6423   else if ((op2 & 0x1) == 0x0)
6424     switch (op1 & ~0x80)
6425       {
6426       case 0x61:
6427         return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6428       case 0x65:
6429         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
6430       case 0x71: case 0x75:
6431         /* pld/pldw reg.  */
6432         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6433       case 0x63: case 0x67: case 0x73: case 0x77:
6434         return arm_copy_unpred (gdbarch, insn, dsc);
6435       default:
6436         return arm_copy_undef (gdbarch, insn, dsc);
6437       }
6438   else
6439     return arm_copy_undef (gdbarch, insn, dsc);  /* Probably unreachable.  */
6440 }
6441
6442 static int
6443 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6444                           struct regcache *regs,
6445                           arm_displaced_step_closure *dsc)
6446 {
6447   if (bit (insn, 27) == 0)
6448     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6449   /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx.  */
6450   else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6451     {
6452     case 0x0: case 0x2:
6453       return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6454
6455     case 0x1: case 0x3:
6456       return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6457
6458     case 0x4: case 0x5: case 0x6: case 0x7:
6459       return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6460
6461     case 0x8:
6462       switch ((insn & 0xe00000) >> 21)
6463         {
6464         case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6465           /* stc/stc2.  */
6466           return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6467
6468         case 0x2:
6469           return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6470
6471         default:
6472           return arm_copy_undef (gdbarch, insn, dsc);
6473         }
6474
6475     case 0x9:
6476       {
6477          int rn_f = (bits (insn, 16, 19) == 0xf);
6478         switch ((insn & 0xe00000) >> 21)
6479           {
6480           case 0x1: case 0x3:
6481             /* ldc/ldc2 imm (undefined for rn == pc).  */
6482             return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6483                         : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6484
6485           case 0x2:
6486             return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6487
6488           case 0x4: case 0x5: case 0x6: case 0x7:
6489             /* ldc/ldc2 lit (undefined for rn != pc).  */
6490             return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6491                         : arm_copy_undef (gdbarch, insn, dsc);
6492
6493           default:
6494             return arm_copy_undef (gdbarch, insn, dsc);
6495           }
6496       }
6497
6498     case 0xa:
6499       return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6500
6501     case 0xb:
6502       if (bits (insn, 16, 19) == 0xf)
6503         /* ldc/ldc2 lit.  */
6504         return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6505       else
6506         return arm_copy_undef (gdbarch, insn, dsc);
6507
6508     case 0xc:
6509       if (bit (insn, 4))
6510         return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6511       else
6512         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6513
6514     case 0xd:
6515       if (bit (insn, 4))
6516         return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6517       else
6518         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6519
6520     default:
6521       return arm_copy_undef (gdbarch, insn, dsc);
6522     }
6523 }
6524
6525 /* Decode miscellaneous instructions in dp/misc encoding space.  */
6526
6527 static int
6528 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6529                           struct regcache *regs,
6530                           arm_displaced_step_closure *dsc)
6531 {
6532   unsigned int op2 = bits (insn, 4, 6);
6533   unsigned int op = bits (insn, 21, 22);
6534
6535   switch (op2)
6536     {
6537     case 0x0:
6538       return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6539
6540     case 0x1:
6541       if (op == 0x1)  /* bx.  */
6542         return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6543       else if (op == 0x3)
6544         return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6545       else
6546         return arm_copy_undef (gdbarch, insn, dsc);
6547
6548     case 0x2:
6549       if (op == 0x1)
6550         /* Not really supported.  */
6551         return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6552       else
6553         return arm_copy_undef (gdbarch, insn, dsc);
6554
6555     case 0x3:
6556       if (op == 0x1)
6557         return arm_copy_bx_blx_reg (gdbarch, insn,
6558                                 regs, dsc);  /* blx register.  */
6559       else
6560         return arm_copy_undef (gdbarch, insn, dsc);
6561
6562     case 0x5:
6563       return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6564
6565     case 0x7:
6566       if (op == 0x1)
6567         return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6568       else if (op == 0x3)
6569         /* Not really supported.  */
6570         return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
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             regcache_cooked_read (regs, 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           regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
7907           if (TYPE_LENGTH (type) > 4)
7908             regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
7909                                   valbuf + INT_REGISTER_SIZE);
7910           break;
7911
7912         default:
7913           internal_error (__FILE__, __LINE__,
7914                           _("arm_extract_return_value: "
7915                             "Floating point model not supported"));
7916           break;
7917         }
7918     }
7919   else if (TYPE_CODE (type) == TYPE_CODE_INT
7920            || TYPE_CODE (type) == TYPE_CODE_CHAR
7921            || TYPE_CODE (type) == TYPE_CODE_BOOL
7922            || TYPE_CODE (type) == TYPE_CODE_PTR
7923            || TYPE_IS_REFERENCE (type)
7924            || TYPE_CODE (type) == TYPE_CODE_ENUM)
7925     {
7926       /* If the type is a plain integer, then the access is
7927          straight-forward.  Otherwise we have to play around a bit
7928          more.  */
7929       int len = TYPE_LENGTH (type);
7930       int regno = ARM_A1_REGNUM;
7931       ULONGEST tmp;
7932
7933       while (len > 0)
7934         {
7935           /* By using store_unsigned_integer we avoid having to do
7936              anything special for small big-endian values.  */
7937           regcache_cooked_read_unsigned (regs, regno++, &tmp);
7938           store_unsigned_integer (valbuf, 
7939                                   (len > INT_REGISTER_SIZE
7940                                    ? INT_REGISTER_SIZE : len),
7941                                   byte_order, tmp);
7942           len -= INT_REGISTER_SIZE;
7943           valbuf += INT_REGISTER_SIZE;
7944         }
7945     }
7946   else
7947     {
7948       /* For a structure or union the behaviour is as if the value had
7949          been stored to word-aligned memory and then loaded into 
7950          registers with 32-bit load instruction(s).  */
7951       int len = TYPE_LENGTH (type);
7952       int regno = ARM_A1_REGNUM;
7953       bfd_byte tmpbuf[INT_REGISTER_SIZE];
7954
7955       while (len > 0)
7956         {
7957           regcache_cooked_read (regs, regno++, tmpbuf);
7958           memcpy (valbuf, tmpbuf,
7959                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
7960           len -= INT_REGISTER_SIZE;
7961           valbuf += INT_REGISTER_SIZE;
7962         }
7963     }
7964 }
7965
7966
7967 /* Will a function return an aggregate type in memory or in a
7968    register?  Return 0 if an aggregate type can be returned in a
7969    register, 1 if it must be returned in memory.  */
7970
7971 static int
7972 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7973 {
7974   enum type_code code;
7975
7976   type = check_typedef (type);
7977
7978   /* Simple, non-aggregate types (ie not including vectors and
7979      complex) are always returned in a register (or registers).  */
7980   code = TYPE_CODE (type);
7981   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7982       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7983     return 0;
7984
7985   if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
7986     {
7987       /* Vector values should be returned using ARM registers if they
7988          are not over 16 bytes.  */
7989       return (TYPE_LENGTH (type) > 16);
7990     }
7991
7992   if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
7993     {
7994       /* The AAPCS says all aggregates not larger than a word are returned
7995          in a register.  */
7996       if (TYPE_LENGTH (type) <= INT_REGISTER_SIZE)
7997         return 0;
7998
7999       return 1;
8000     }
8001   else
8002     {
8003       int nRc;
8004
8005       /* All aggregate types that won't fit in a register must be returned
8006          in memory.  */
8007       if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
8008         return 1;
8009
8010       /* In the ARM ABI, "integer" like aggregate types are returned in
8011          registers.  For an aggregate type to be integer like, its size
8012          must be less than or equal to INT_REGISTER_SIZE and the
8013          offset of each addressable subfield must be zero.  Note that bit
8014          fields are not addressable, and all addressable subfields of
8015          unions always start at offset zero.
8016
8017          This function is based on the behaviour of GCC 2.95.1.
8018          See: gcc/arm.c: arm_return_in_memory() for details.
8019
8020          Note: All versions of GCC before GCC 2.95.2 do not set up the
8021          parameters correctly for a function returning the following
8022          structure: struct { float f;}; This should be returned in memory,
8023          not a register.  Richard Earnshaw sent me a patch, but I do not
8024          know of any way to detect if a function like the above has been
8025          compiled with the correct calling convention.  */
8026
8027       /* Assume all other aggregate types can be returned in a register.
8028          Run a check for structures, unions and arrays.  */
8029       nRc = 0;
8030
8031       if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
8032         {
8033           int i;
8034           /* Need to check if this struct/union is "integer" like.  For
8035              this to be true, its size must be less than or equal to
8036              INT_REGISTER_SIZE and the offset of each addressable
8037              subfield must be zero.  Note that bit fields are not
8038              addressable, and unions always start at offset zero.  If any
8039              of the subfields is a floating point type, the struct/union
8040              cannot be an integer type.  */
8041
8042           /* For each field in the object, check:
8043              1) Is it FP? --> yes, nRc = 1;
8044              2) Is it addressable (bitpos != 0) and
8045              not packed (bitsize == 0)?
8046              --> yes, nRc = 1
8047           */
8048
8049           for (i = 0; i < TYPE_NFIELDS (type); i++)
8050             {
8051               enum type_code field_type_code;
8052
8053               field_type_code
8054                 = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
8055                                                              i)));
8056
8057               /* Is it a floating point type field?  */
8058               if (field_type_code == TYPE_CODE_FLT)
8059                 {
8060                   nRc = 1;
8061                   break;
8062                 }
8063
8064               /* If bitpos != 0, then we have to care about it.  */
8065               if (TYPE_FIELD_BITPOS (type, i) != 0)
8066                 {
8067                   /* Bitfields are not addressable.  If the field bitsize is 
8068                      zero, then the field is not packed.  Hence it cannot be
8069                      a bitfield or any other packed type.  */
8070                   if (TYPE_FIELD_BITSIZE (type, i) == 0)
8071                     {
8072                       nRc = 1;
8073                       break;
8074                     }
8075                 }
8076             }
8077         }
8078
8079       return nRc;
8080     }
8081 }
8082
8083 /* Write into appropriate registers a function return value of type
8084    TYPE, given in virtual format.  */
8085
8086 static void
8087 arm_store_return_value (struct type *type, struct regcache *regs,
8088                         const gdb_byte *valbuf)
8089 {
8090   struct gdbarch *gdbarch = regs->arch ();
8091   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8092
8093   if (TYPE_CODE (type) == TYPE_CODE_FLT)
8094     {
8095       gdb_byte buf[FP_REGISTER_SIZE];
8096
8097       switch (gdbarch_tdep (gdbarch)->fp_model)
8098         {
8099         case ARM_FLOAT_FPA:
8100
8101           target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8102           regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
8103           break;
8104
8105         case ARM_FLOAT_SOFT_FPA:
8106         case ARM_FLOAT_SOFT_VFP:
8107           /* ARM_FLOAT_VFP can arise if this is a variadic function so
8108              not using the VFP ABI code.  */
8109         case ARM_FLOAT_VFP:
8110           regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
8111           if (TYPE_LENGTH (type) > 4)
8112             regcache_cooked_write (regs, ARM_A1_REGNUM + 1, 
8113                                    valbuf + INT_REGISTER_SIZE);
8114           break;
8115
8116         default:
8117           internal_error (__FILE__, __LINE__,
8118                           _("arm_store_return_value: Floating "
8119                             "point model not supported"));
8120           break;
8121         }
8122     }
8123   else if (TYPE_CODE (type) == TYPE_CODE_INT
8124            || TYPE_CODE (type) == TYPE_CODE_CHAR
8125            || TYPE_CODE (type) == TYPE_CODE_BOOL
8126            || TYPE_CODE (type) == TYPE_CODE_PTR
8127            || TYPE_IS_REFERENCE (type)
8128            || TYPE_CODE (type) == TYPE_CODE_ENUM)
8129     {
8130       if (TYPE_LENGTH (type) <= 4)
8131         {
8132           /* Values of one word or less are zero/sign-extended and
8133              returned in r0.  */
8134           bfd_byte tmpbuf[INT_REGISTER_SIZE];
8135           LONGEST val = unpack_long (type, valbuf);
8136
8137           store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
8138           regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
8139         }
8140       else
8141         {
8142           /* Integral values greater than one word are stored in consecutive
8143              registers starting with r0.  This will always be a multiple of
8144              the regiser size.  */
8145           int len = TYPE_LENGTH (type);
8146           int regno = ARM_A1_REGNUM;
8147
8148           while (len > 0)
8149             {
8150               regcache_cooked_write (regs, regno++, valbuf);
8151               len -= INT_REGISTER_SIZE;
8152               valbuf += INT_REGISTER_SIZE;
8153             }
8154         }
8155     }
8156   else
8157     {
8158       /* For a structure or union the behaviour is as if the value had
8159          been stored to word-aligned memory and then loaded into 
8160          registers with 32-bit load instruction(s).  */
8161       int len = TYPE_LENGTH (type);
8162       int regno = ARM_A1_REGNUM;
8163       bfd_byte tmpbuf[INT_REGISTER_SIZE];
8164
8165       while (len > 0)
8166         {
8167           memcpy (tmpbuf, valbuf,
8168                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8169           regcache_cooked_write (regs, regno++, tmpbuf);
8170           len -= INT_REGISTER_SIZE;
8171           valbuf += INT_REGISTER_SIZE;
8172         }
8173     }
8174 }
8175
8176
8177 /* Handle function return values.  */
8178
8179 static enum return_value_convention
8180 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8181                   struct type *valtype, struct regcache *regcache,
8182                   gdb_byte *readbuf, const gdb_byte *writebuf)
8183 {
8184   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8185   struct type *func_type = function ? value_type (function) : NULL;
8186   enum arm_vfp_cprc_base_type vfp_base_type;
8187   int vfp_base_count;
8188
8189   if (arm_vfp_abi_for_function (gdbarch, func_type)
8190       && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8191     {
8192       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8193       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8194       int i;
8195       for (i = 0; i < vfp_base_count; i++)
8196         {
8197           if (reg_char == 'q')
8198             {
8199               if (writebuf)
8200                 arm_neon_quad_write (gdbarch, regcache, i,
8201                                      writebuf + i * unit_length);
8202
8203               if (readbuf)
8204                 arm_neon_quad_read (gdbarch, regcache, i,
8205                                     readbuf + i * unit_length);
8206             }
8207           else
8208             {
8209               char name_buf[4];
8210               int regnum;
8211
8212               xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8213               regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8214                                                     strlen (name_buf));
8215               if (writebuf)
8216                 regcache_cooked_write (regcache, regnum,
8217                                        writebuf + i * unit_length);
8218               if (readbuf)
8219                 regcache_cooked_read (regcache, regnum,
8220                                       readbuf + i * unit_length);
8221             }
8222         }
8223       return RETURN_VALUE_REGISTER_CONVENTION;
8224     }
8225
8226   if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
8227       || TYPE_CODE (valtype) == TYPE_CODE_UNION
8228       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
8229     {
8230       if (tdep->struct_return == pcc_struct_return
8231           || arm_return_in_memory (gdbarch, valtype))
8232         return RETURN_VALUE_STRUCT_CONVENTION;
8233     }
8234   else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
8235     {
8236       if (arm_return_in_memory (gdbarch, valtype))
8237         return RETURN_VALUE_STRUCT_CONVENTION;
8238     }
8239
8240   if (writebuf)
8241     arm_store_return_value (valtype, regcache, writebuf);
8242
8243   if (readbuf)
8244     arm_extract_return_value (valtype, regcache, readbuf);
8245
8246   return RETURN_VALUE_REGISTER_CONVENTION;
8247 }
8248
8249
8250 static int
8251 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8252 {
8253   struct gdbarch *gdbarch = get_frame_arch (frame);
8254   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8255   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8256   CORE_ADDR jb_addr;
8257   gdb_byte buf[INT_REGISTER_SIZE];
8258   
8259   jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8260
8261   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8262                           INT_REGISTER_SIZE))
8263     return 0;
8264
8265   *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
8266   return 1;
8267 }
8268
8269 /* Recognize GCC and GNU ld's trampolines.  If we are in a trampoline,
8270    return the target PC.  Otherwise return 0.  */
8271
8272 CORE_ADDR
8273 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8274 {
8275   const char *name;
8276   int namelen;
8277   CORE_ADDR start_addr;
8278
8279   /* Find the starting address and name of the function containing the PC.  */
8280   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8281     {
8282       /* Trampoline 'bx reg' doesn't belong to any functions.  Do the
8283          check here.  */
8284       start_addr = arm_skip_bx_reg (frame, pc);
8285       if (start_addr != 0)
8286         return start_addr;
8287
8288       return 0;
8289     }
8290
8291   /* If PC is in a Thumb call or return stub, return the address of the
8292      target PC, which is in a register.  The thunk functions are called
8293      _call_via_xx, where x is the register name.  The possible names
8294      are r0-r9, sl, fp, ip, sp, and lr.  ARM RealView has similar
8295      functions, named __ARM_call_via_r[0-7].  */
8296   if (startswith (name, "_call_via_")
8297       || startswith (name, "__ARM_call_via_"))
8298     {
8299       /* Use the name suffix to determine which register contains the
8300          target PC.  */
8301       static const char *table[15] =
8302       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8303        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8304       };
8305       int regno;
8306       int offset = strlen (name) - 2;
8307
8308       for (regno = 0; regno <= 14; regno++)
8309         if (strcmp (&name[offset], table[regno]) == 0)
8310           return get_frame_register_unsigned (frame, regno);
8311     }
8312
8313   /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8314      non-interworking calls to foo.  We could decode the stubs
8315      to find the target but it's easier to use the symbol table.  */
8316   namelen = strlen (name);
8317   if (name[0] == '_' && name[1] == '_'
8318       && ((namelen > 2 + strlen ("_from_thumb")
8319            && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8320           || (namelen > 2 + strlen ("_from_arm")
8321               && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8322     {
8323       char *target_name;
8324       int target_len = namelen - 2;
8325       struct bound_minimal_symbol minsym;
8326       struct objfile *objfile;
8327       struct obj_section *sec;
8328
8329       if (name[namelen - 1] == 'b')
8330         target_len -= strlen ("_from_thumb");
8331       else
8332         target_len -= strlen ("_from_arm");
8333
8334       target_name = (char *) alloca (target_len + 1);
8335       memcpy (target_name, name + 2, target_len);
8336       target_name[target_len] = '\0';
8337
8338       sec = find_pc_section (pc);
8339       objfile = (sec == NULL) ? NULL : sec->objfile;
8340       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8341       if (minsym.minsym != NULL)
8342         return BMSYMBOL_VALUE_ADDRESS (minsym);
8343       else
8344         return 0;
8345     }
8346
8347   return 0;                     /* not a stub */
8348 }
8349
8350 static void
8351 set_arm_command (const char *args, int from_tty)
8352 {
8353   printf_unfiltered (_("\
8354 \"set arm\" must be followed by an apporpriate subcommand.\n"));
8355   help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
8356 }
8357
8358 static void
8359 show_arm_command (const char *args, int from_tty)
8360 {
8361   cmd_show_list (showarmcmdlist, from_tty, "");
8362 }
8363
8364 static void
8365 arm_update_current_architecture (void)
8366 {
8367   struct gdbarch_info info;
8368
8369   /* If the current architecture is not ARM, we have nothing to do.  */
8370   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8371     return;
8372
8373   /* Update the architecture.  */
8374   gdbarch_info_init (&info);
8375
8376   if (!gdbarch_update_p (info))
8377     internal_error (__FILE__, __LINE__, _("could not update architecture"));
8378 }
8379
8380 static void
8381 set_fp_model_sfunc (const char *args, int from_tty,
8382                     struct cmd_list_element *c)
8383 {
8384   int fp_model;
8385
8386   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8387     if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8388       {
8389         arm_fp_model = (enum arm_float_model) fp_model;
8390         break;
8391       }
8392
8393   if (fp_model == ARM_FLOAT_LAST)
8394     internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8395                     current_fp_model);
8396
8397   arm_update_current_architecture ();
8398 }
8399
8400 static void
8401 show_fp_model (struct ui_file *file, int from_tty,
8402                struct cmd_list_element *c, const char *value)
8403 {
8404   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8405
8406   if (arm_fp_model == ARM_FLOAT_AUTO
8407       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8408     fprintf_filtered (file, _("\
8409 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8410                       fp_model_strings[tdep->fp_model]);
8411   else
8412     fprintf_filtered (file, _("\
8413 The current ARM floating point model is \"%s\".\n"),
8414                       fp_model_strings[arm_fp_model]);
8415 }
8416
8417 static void
8418 arm_set_abi (const char *args, int from_tty,
8419              struct cmd_list_element *c)
8420 {
8421   int arm_abi;
8422
8423   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8424     if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8425       {
8426         arm_abi_global = (enum arm_abi_kind) arm_abi;
8427         break;
8428       }
8429
8430   if (arm_abi == ARM_ABI_LAST)
8431     internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8432                     arm_abi_string);
8433
8434   arm_update_current_architecture ();
8435 }
8436
8437 static void
8438 arm_show_abi (struct ui_file *file, int from_tty,
8439              struct cmd_list_element *c, const char *value)
8440 {
8441   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8442
8443   if (arm_abi_global == ARM_ABI_AUTO
8444       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8445     fprintf_filtered (file, _("\
8446 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8447                       arm_abi_strings[tdep->arm_abi]);
8448   else
8449     fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8450                       arm_abi_string);
8451 }
8452
8453 static void
8454 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8455                         struct cmd_list_element *c, const char *value)
8456 {
8457   fprintf_filtered (file,
8458                     _("The current execution mode assumed "
8459                       "(when symbols are unavailable) is \"%s\".\n"),
8460                     arm_fallback_mode_string);
8461 }
8462
8463 static void
8464 arm_show_force_mode (struct ui_file *file, int from_tty,
8465                      struct cmd_list_element *c, const char *value)
8466 {
8467   fprintf_filtered (file,
8468                     _("The current execution mode assumed "
8469                       "(even when symbols are available) is \"%s\".\n"),
8470                     arm_force_mode_string);
8471 }
8472
8473 /* If the user changes the register disassembly style used for info
8474    register and other commands, we have to also switch the style used
8475    in opcodes for disassembly output.  This function is run in the "set
8476    arm disassembly" command, and does that.  */
8477
8478 static void
8479 set_disassembly_style_sfunc (const char *args, int from_tty,
8480                              struct cmd_list_element *c)
8481 {
8482   /* Convert the short style name into the long style name (eg, reg-names-*)
8483      before calling the generic set_disassembler_options() function.  */
8484   std::string long_name = std::string ("reg-names-") + disassembly_style;
8485   set_disassembler_options (&long_name[0]);
8486 }
8487
8488 static void
8489 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8490                               struct cmd_list_element *c, const char *value)
8491 {
8492   struct gdbarch *gdbarch = get_current_arch ();
8493   char *options = get_disassembler_options (gdbarch);
8494   const char *style = "";
8495   int len = 0;
8496   const char *opt;
8497
8498   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8499     if (CONST_STRNEQ (opt, "reg-names-"))
8500       {
8501         style = &opt[strlen ("reg-names-")];
8502         len = strcspn (style, ",");
8503       }
8504
8505   fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8506 }
8507 \f
8508 /* Return the ARM register name corresponding to register I.  */
8509 static const char *
8510 arm_register_name (struct gdbarch *gdbarch, int i)
8511 {
8512   const int num_regs = gdbarch_num_regs (gdbarch);
8513
8514   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8515       && i >= num_regs && i < num_regs + 32)
8516     {
8517       static const char *const vfp_pseudo_names[] = {
8518         "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8519         "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8520         "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8521         "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8522       };
8523
8524       return vfp_pseudo_names[i - num_regs];
8525     }
8526
8527   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8528       && i >= num_regs + 32 && i < num_regs + 32 + 16)
8529     {
8530       static const char *const neon_pseudo_names[] = {
8531         "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8532         "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8533       };
8534
8535       return neon_pseudo_names[i - num_regs - 32];
8536     }
8537
8538   if (i >= ARRAY_SIZE (arm_register_names))
8539     /* These registers are only supported on targets which supply
8540        an XML description.  */
8541     return "";
8542
8543   return arm_register_names[i];
8544 }
8545
8546 /* Test whether the coff symbol specific value corresponds to a Thumb
8547    function.  */
8548
8549 static int
8550 coff_sym_is_thumb (int val)
8551 {
8552   return (val == C_THUMBEXT
8553           || val == C_THUMBSTAT
8554           || val == C_THUMBEXTFUNC
8555           || val == C_THUMBSTATFUNC
8556           || val == C_THUMBLABEL);
8557 }
8558
8559 /* arm_coff_make_msymbol_special()
8560    arm_elf_make_msymbol_special()
8561    
8562    These functions test whether the COFF or ELF symbol corresponds to
8563    an address in thumb code, and set a "special" bit in a minimal
8564    symbol to indicate that it does.  */
8565    
8566 static void
8567 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8568 {
8569   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8570
8571   if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8572       == ST_BRANCH_TO_THUMB)
8573     MSYMBOL_SET_SPECIAL (msym);
8574 }
8575
8576 static void
8577 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8578 {
8579   if (coff_sym_is_thumb (val))
8580     MSYMBOL_SET_SPECIAL (msym);
8581 }
8582
8583 static void
8584 arm_objfile_data_free (struct objfile *objfile, void *arg)
8585 {
8586   struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
8587   unsigned int i;
8588
8589   for (i = 0; i < objfile->obfd->section_count; i++)
8590     VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
8591 }
8592
8593 static void
8594 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8595                            asymbol *sym)
8596 {
8597   const char *name = bfd_asymbol_name (sym);
8598   struct arm_per_objfile *data;
8599   VEC(arm_mapping_symbol_s) **map_p;
8600   struct arm_mapping_symbol new_map_sym;
8601
8602   gdb_assert (name[0] == '$');
8603   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8604     return;
8605
8606   data = (struct arm_per_objfile *) objfile_data (objfile,
8607                                                   arm_objfile_data_key);
8608   if (data == NULL)
8609     {
8610       data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
8611                              struct arm_per_objfile);
8612       set_objfile_data (objfile, arm_objfile_data_key, data);
8613       data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
8614                                            objfile->obfd->section_count,
8615                                            VEC(arm_mapping_symbol_s) *);
8616     }
8617   map_p = &data->section_maps[bfd_get_section (sym)->index];
8618
8619   new_map_sym.value = sym->value;
8620   new_map_sym.type = name[1];
8621
8622   /* Assume that most mapping symbols appear in order of increasing
8623      value.  If they were randomly distributed, it would be faster to
8624      always push here and then sort at first use.  */
8625   if (!VEC_empty (arm_mapping_symbol_s, *map_p))
8626     {
8627       struct arm_mapping_symbol *prev_map_sym;
8628
8629       prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
8630       if (prev_map_sym->value >= sym->value)
8631         {
8632           unsigned int idx;
8633           idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
8634                                  arm_compare_mapping_symbols);
8635           VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
8636           return;
8637         }
8638     }
8639
8640   VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
8641 }
8642
8643 static void
8644 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8645 {
8646   struct gdbarch *gdbarch = regcache->arch ();
8647   regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8648
8649   /* If necessary, set the T bit.  */
8650   if (arm_apcs_32)
8651     {
8652       ULONGEST val, t_bit;
8653       regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8654       t_bit = arm_psr_thumb_bit (gdbarch);
8655       if (arm_pc_is_thumb (gdbarch, pc))
8656         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8657                                         val | t_bit);
8658       else
8659         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8660                                         val & ~t_bit);
8661     }
8662 }
8663
8664 /* Read the contents of a NEON quad register, by reading from two
8665    double registers.  This is used to implement the quad pseudo
8666    registers, and for argument passing in case the quad registers are
8667    missing; vectors are passed in quad registers when using the VFP
8668    ABI, even if a NEON unit is not present.  REGNUM is the index of
8669    the quad register, in [0, 15].  */
8670
8671 static enum register_status
8672 arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8673                     int regnum, gdb_byte *buf)
8674 {
8675   char name_buf[4];
8676   gdb_byte reg_buf[8];
8677   int offset, double_regnum;
8678   enum register_status status;
8679
8680   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8681   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8682                                                strlen (name_buf));
8683
8684   /* d0 is always the least significant half of q0.  */
8685   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8686     offset = 8;
8687   else
8688     offset = 0;
8689
8690   status = regcache->raw_read (double_regnum, reg_buf);
8691   if (status != REG_VALID)
8692     return status;
8693   memcpy (buf + offset, reg_buf, 8);
8694
8695   offset = 8 - offset;
8696   status = regcache->raw_read (double_regnum + 1, reg_buf);
8697   if (status != REG_VALID)
8698     return status;
8699   memcpy (buf + offset, reg_buf, 8);
8700
8701   return REG_VALID;
8702 }
8703
8704 static enum register_status
8705 arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8706                  int regnum, gdb_byte *buf)
8707 {
8708   const int num_regs = gdbarch_num_regs (gdbarch);
8709   char name_buf[4];
8710   gdb_byte reg_buf[8];
8711   int offset, double_regnum;
8712
8713   gdb_assert (regnum >= num_regs);
8714   regnum -= num_regs;
8715
8716   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8717     /* Quad-precision register.  */
8718     return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8719   else
8720     {
8721       enum register_status status;
8722
8723       /* Single-precision register.  */
8724       gdb_assert (regnum < 32);
8725
8726       /* s0 is always the least significant half of d0.  */
8727       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8728         offset = (regnum & 1) ? 0 : 4;
8729       else
8730         offset = (regnum & 1) ? 4 : 0;
8731
8732       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8733       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8734                                                    strlen (name_buf));
8735
8736       status = regcache->raw_read (double_regnum, reg_buf);
8737       if (status == REG_VALID)
8738         memcpy (buf, reg_buf + offset, 4);
8739       return status;
8740     }
8741 }
8742
8743 /* Store the contents of BUF to a NEON quad register, by writing to
8744    two double registers.  This is used to implement the quad pseudo
8745    registers, and for argument passing in case the quad registers are
8746    missing; vectors are passed in quad registers when using the VFP
8747    ABI, even if a NEON unit is not present.  REGNUM is the index
8748    of the quad register, in [0, 15].  */
8749
8750 static void
8751 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8752                      int regnum, const gdb_byte *buf)
8753 {
8754   char name_buf[4];
8755   int offset, double_regnum;
8756
8757   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8758   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8759                                                strlen (name_buf));
8760
8761   /* d0 is always the least significant half of q0.  */
8762   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8763     offset = 8;
8764   else
8765     offset = 0;
8766
8767   regcache_raw_write (regcache, double_regnum, buf + offset);
8768   offset = 8 - offset;
8769   regcache_raw_write (regcache, double_regnum + 1, buf + offset);
8770 }
8771
8772 static void
8773 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8774                   int regnum, const gdb_byte *buf)
8775 {
8776   const int num_regs = gdbarch_num_regs (gdbarch);
8777   char name_buf[4];
8778   gdb_byte reg_buf[8];
8779   int offset, double_regnum;
8780
8781   gdb_assert (regnum >= num_regs);
8782   regnum -= num_regs;
8783
8784   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8785     /* Quad-precision register.  */
8786     arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8787   else
8788     {
8789       /* Single-precision register.  */
8790       gdb_assert (regnum < 32);
8791
8792       /* s0 is always the least significant half of d0.  */
8793       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8794         offset = (regnum & 1) ? 0 : 4;
8795       else
8796         offset = (regnum & 1) ? 4 : 0;
8797
8798       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8799       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8800                                                    strlen (name_buf));
8801
8802       regcache_raw_read (regcache, double_regnum, reg_buf);
8803       memcpy (reg_buf + offset, buf, 4);
8804       regcache_raw_write (regcache, double_regnum, reg_buf);
8805     }
8806 }
8807
8808 static struct value *
8809 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8810 {
8811   const int *reg_p = (const int *) baton;
8812   return value_of_register (*reg_p, frame);
8813 }
8814 \f
8815 static enum gdb_osabi
8816 arm_elf_osabi_sniffer (bfd *abfd)
8817 {
8818   unsigned int elfosabi;
8819   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8820
8821   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8822
8823   if (elfosabi == ELFOSABI_ARM)
8824     /* GNU tools use this value.  Check note sections in this case,
8825        as well.  */
8826     bfd_map_over_sections (abfd,
8827                            generic_elf_osabi_sniff_abi_tag_sections, 
8828                            &osabi);
8829
8830   /* Anything else will be handled by the generic ELF sniffer.  */
8831   return osabi;
8832 }
8833
8834 static int
8835 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8836                           struct reggroup *group)
8837 {
8838   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
8839      this, FPS register belongs to save_regroup, restore_reggroup, and
8840      all_reggroup, of course.  */
8841   if (regnum == ARM_FPS_REGNUM)
8842     return (group == float_reggroup
8843             || group == save_reggroup
8844             || group == restore_reggroup
8845             || group == all_reggroup);
8846   else
8847     return default_register_reggroup_p (gdbarch, regnum, group);
8848 }
8849
8850 \f
8851 /* For backward-compatibility we allow two 'g' packet lengths with
8852    the remote protocol depending on whether FPA registers are
8853    supplied.  M-profile targets do not have FPA registers, but some
8854    stubs already exist in the wild which use a 'g' packet which
8855    supplies them albeit with dummy values.  The packet format which
8856    includes FPA registers should be considered deprecated for
8857    M-profile targets.  */
8858
8859 static void
8860 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8861 {
8862   if (gdbarch_tdep (gdbarch)->is_m)
8863     {
8864       /* If we know from the executable this is an M-profile target,
8865          cater for remote targets whose register set layout is the
8866          same as the FPA layout.  */
8867       register_remote_g_packet_guess (gdbarch,
8868                                       /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
8869                                       (16 * INT_REGISTER_SIZE)
8870                                       + (8 * FP_REGISTER_SIZE)
8871                                       + (2 * INT_REGISTER_SIZE),
8872                                       tdesc_arm_with_m_fpa_layout);
8873
8874       /* The regular M-profile layout.  */
8875       register_remote_g_packet_guess (gdbarch,
8876                                       /* r0-r12,sp,lr,pc; xpsr */
8877                                       (16 * INT_REGISTER_SIZE)
8878                                       + INT_REGISTER_SIZE,
8879                                       tdesc_arm_with_m);
8880
8881       /* M-profile plus M4F VFP.  */
8882       register_remote_g_packet_guess (gdbarch,
8883                                       /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
8884                                       (16 * INT_REGISTER_SIZE)
8885                                       + (16 * VFP_REGISTER_SIZE)
8886                                       + (2 * INT_REGISTER_SIZE),
8887                                       tdesc_arm_with_m_vfp_d16);
8888     }
8889
8890   /* Otherwise we don't have a useful guess.  */
8891 }
8892
8893 /* Implement the code_of_frame_writable gdbarch method.  */
8894
8895 static int
8896 arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
8897 {
8898   if (gdbarch_tdep (gdbarch)->is_m
8899       && get_frame_type (frame) == SIGTRAMP_FRAME)
8900     {
8901       /* M-profile exception frames return to some magic PCs, where
8902          isn't writable at all.  */
8903       return 0;
8904     }
8905   else
8906     return 1;
8907 }
8908
8909 \f
8910 /* Initialize the current architecture based on INFO.  If possible,
8911    re-use an architecture from ARCHES, which is a list of
8912    architectures already created during this debugging session.
8913
8914    Called e.g. at program startup, when reading a core file, and when
8915    reading a binary file.  */
8916
8917 static struct gdbarch *
8918 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8919 {
8920   struct gdbarch_tdep *tdep;
8921   struct gdbarch *gdbarch;
8922   struct gdbarch_list *best_arch;
8923   enum arm_abi_kind arm_abi = arm_abi_global;
8924   enum arm_float_model fp_model = arm_fp_model;
8925   struct tdesc_arch_data *tdesc_data = NULL;
8926   int i, is_m = 0;
8927   int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
8928   int have_wmmx_registers = 0;
8929   int have_neon = 0;
8930   int have_fpa_registers = 1;
8931   const struct target_desc *tdesc = info.target_desc;
8932
8933   /* If we have an object to base this architecture on, try to determine
8934      its ABI.  */
8935
8936   if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8937     {
8938       int ei_osabi, e_flags;
8939
8940       switch (bfd_get_flavour (info.abfd))
8941         {
8942         case bfd_target_coff_flavour:
8943           /* Assume it's an old APCS-style ABI.  */
8944           /* XXX WinCE?  */
8945           arm_abi = ARM_ABI_APCS;
8946           break;
8947
8948         case bfd_target_elf_flavour:
8949           ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8950           e_flags = elf_elfheader (info.abfd)->e_flags;
8951
8952           if (ei_osabi == ELFOSABI_ARM)
8953             {
8954               /* GNU tools used to use this value, but do not for EABI
8955                  objects.  There's nowhere to tag an EABI version
8956                  anyway, so assume APCS.  */
8957               arm_abi = ARM_ABI_APCS;
8958             }
8959           else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8960             {
8961               int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8962               int attr_arch, attr_profile;
8963
8964               switch (eabi_ver)
8965                 {
8966                 case EF_ARM_EABI_UNKNOWN:
8967                   /* Assume GNU tools.  */
8968                   arm_abi = ARM_ABI_APCS;
8969                   break;
8970
8971                 case EF_ARM_EABI_VER4:
8972                 case EF_ARM_EABI_VER5:
8973                   arm_abi = ARM_ABI_AAPCS;
8974                   /* EABI binaries default to VFP float ordering.
8975                      They may also contain build attributes that can
8976                      be used to identify if the VFP argument-passing
8977                      ABI is in use.  */
8978                   if (fp_model == ARM_FLOAT_AUTO)
8979                     {
8980 #ifdef HAVE_ELF
8981                       switch (bfd_elf_get_obj_attr_int (info.abfd,
8982                                                         OBJ_ATTR_PROC,
8983                                                         Tag_ABI_VFP_args))
8984                         {
8985                         case AEABI_VFP_args_base:
8986                           /* "The user intended FP parameter/result
8987                              passing to conform to AAPCS, base
8988                              variant".  */
8989                           fp_model = ARM_FLOAT_SOFT_VFP;
8990                           break;
8991                         case AEABI_VFP_args_vfp:
8992                           /* "The user intended FP parameter/result
8993                              passing to conform to AAPCS, VFP
8994                              variant".  */
8995                           fp_model = ARM_FLOAT_VFP;
8996                           break;
8997                         case AEABI_VFP_args_toolchain:
8998                           /* "The user intended FP parameter/result
8999                              passing to conform to tool chain-specific
9000                              conventions" - we don't know any such
9001                              conventions, so leave it as "auto".  */
9002                           break;
9003                         case AEABI_VFP_args_compatible:
9004                           /* "Code is compatible with both the base
9005                              and VFP variants; the user did not permit
9006                              non-variadic functions to pass FP
9007                              parameters/results" - leave it as
9008                              "auto".  */
9009                           break;
9010                         default:
9011                           /* Attribute value not mentioned in the
9012                              November 2012 ABI, so leave it as
9013                              "auto".  */
9014                           break;
9015                         }
9016 #else
9017                       fp_model = ARM_FLOAT_SOFT_VFP;
9018 #endif
9019                     }
9020                   break;
9021
9022                 default:
9023                   /* Leave it as "auto".  */
9024                   warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
9025                   break;
9026                 }
9027
9028 #ifdef HAVE_ELF
9029               /* Detect M-profile programs.  This only works if the
9030                  executable file includes build attributes; GCC does
9031                  copy them to the executable, but e.g. RealView does
9032                  not.  */
9033               attr_arch = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9034                                                     Tag_CPU_arch);
9035               attr_profile = bfd_elf_get_obj_attr_int (info.abfd,
9036                                                        OBJ_ATTR_PROC,
9037                                                        Tag_CPU_arch_profile);
9038               /* GCC specifies the profile for v6-M; RealView only
9039                  specifies the profile for architectures starting with
9040                  V7 (as opposed to architectures with a tag
9041                  numerically greater than TAG_CPU_ARCH_V7).  */
9042               if (!tdesc_has_registers (tdesc)
9043                   && (attr_arch == TAG_CPU_ARCH_V6_M
9044                       || attr_arch == TAG_CPU_ARCH_V6S_M
9045                       || attr_profile == 'M'))
9046                 is_m = 1;
9047 #endif
9048             }
9049
9050           if (fp_model == ARM_FLOAT_AUTO)
9051             {
9052               int e_flags = elf_elfheader (info.abfd)->e_flags;
9053
9054               switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
9055                 {
9056                 case 0:
9057                   /* Leave it as "auto".  Strictly speaking this case
9058                      means FPA, but almost nobody uses that now, and
9059                      many toolchains fail to set the appropriate bits
9060                      for the floating-point model they use.  */
9061                   break;
9062                 case EF_ARM_SOFT_FLOAT:
9063                   fp_model = ARM_FLOAT_SOFT_FPA;
9064                   break;
9065                 case EF_ARM_VFP_FLOAT:
9066                   fp_model = ARM_FLOAT_VFP;
9067                   break;
9068                 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9069                   fp_model = ARM_FLOAT_SOFT_VFP;
9070                   break;
9071                 }
9072             }
9073
9074           if (e_flags & EF_ARM_BE8)
9075             info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9076
9077           break;
9078
9079         default:
9080           /* Leave it as "auto".  */
9081           break;
9082         }
9083     }
9084
9085   /* Check any target description for validity.  */
9086   if (tdesc_has_registers (tdesc))
9087     {
9088       /* For most registers we require GDB's default names; but also allow
9089          the numeric names for sp / lr / pc, as a convenience.  */
9090       static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9091       static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9092       static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9093
9094       const struct tdesc_feature *feature;
9095       int valid_p;
9096
9097       feature = tdesc_find_feature (tdesc,
9098                                     "org.gnu.gdb.arm.core");
9099       if (feature == NULL)
9100         {
9101           feature = tdesc_find_feature (tdesc,
9102                                         "org.gnu.gdb.arm.m-profile");
9103           if (feature == NULL)
9104             return NULL;
9105           else
9106             is_m = 1;
9107         }
9108
9109       tdesc_data = tdesc_data_alloc ();
9110
9111       valid_p = 1;
9112       for (i = 0; i < ARM_SP_REGNUM; i++)
9113         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9114                                             arm_register_names[i]);
9115       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9116                                                   ARM_SP_REGNUM,
9117                                                   arm_sp_names);
9118       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9119                                                   ARM_LR_REGNUM,
9120                                                   arm_lr_names);
9121       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9122                                                   ARM_PC_REGNUM,
9123                                                   arm_pc_names);
9124       if (is_m)
9125         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9126                                             ARM_PS_REGNUM, "xpsr");
9127       else
9128         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9129                                             ARM_PS_REGNUM, "cpsr");
9130
9131       if (!valid_p)
9132         {
9133           tdesc_data_cleanup (tdesc_data);
9134           return NULL;
9135         }
9136
9137       feature = tdesc_find_feature (tdesc,
9138                                     "org.gnu.gdb.arm.fpa");
9139       if (feature != NULL)
9140         {
9141           valid_p = 1;
9142           for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9143             valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9144                                                 arm_register_names[i]);
9145           if (!valid_p)
9146             {
9147               tdesc_data_cleanup (tdesc_data);
9148               return NULL;
9149             }
9150         }
9151       else
9152         have_fpa_registers = 0;
9153
9154       feature = tdesc_find_feature (tdesc,
9155                                     "org.gnu.gdb.xscale.iwmmxt");
9156       if (feature != NULL)
9157         {
9158           static const char *const iwmmxt_names[] = {
9159             "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9160             "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9161             "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9162             "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9163           };
9164
9165           valid_p = 1;
9166           for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9167             valid_p
9168               &= tdesc_numbered_register (feature, tdesc_data, i,
9169                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9170
9171           /* Check for the control registers, but do not fail if they
9172              are missing.  */
9173           for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9174             tdesc_numbered_register (feature, tdesc_data, i,
9175                                      iwmmxt_names[i - ARM_WR0_REGNUM]);
9176
9177           for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9178             valid_p
9179               &= tdesc_numbered_register (feature, tdesc_data, i,
9180                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9181
9182           if (!valid_p)
9183             {
9184               tdesc_data_cleanup (tdesc_data);
9185               return NULL;
9186             }
9187
9188           have_wmmx_registers = 1;
9189         }
9190
9191       /* If we have a VFP unit, check whether the single precision registers
9192          are present.  If not, then we will synthesize them as pseudo
9193          registers.  */
9194       feature = tdesc_find_feature (tdesc,
9195                                     "org.gnu.gdb.arm.vfp");
9196       if (feature != NULL)
9197         {
9198           static const char *const vfp_double_names[] = {
9199             "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9200             "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9201             "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9202             "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9203           };
9204
9205           /* Require the double precision registers.  There must be either
9206              16 or 32.  */
9207           valid_p = 1;
9208           for (i = 0; i < 32; i++)
9209             {
9210               valid_p &= tdesc_numbered_register (feature, tdesc_data,
9211                                                   ARM_D0_REGNUM + i,
9212                                                   vfp_double_names[i]);
9213               if (!valid_p)
9214                 break;
9215             }
9216           if (!valid_p && i == 16)
9217             valid_p = 1;
9218
9219           /* Also require FPSCR.  */
9220           valid_p &= tdesc_numbered_register (feature, tdesc_data,
9221                                               ARM_FPSCR_REGNUM, "fpscr");
9222           if (!valid_p)
9223             {
9224               tdesc_data_cleanup (tdesc_data);
9225               return NULL;
9226             }
9227
9228           if (tdesc_unnumbered_register (feature, "s0") == 0)
9229             have_vfp_pseudos = 1;
9230
9231           vfp_register_count = i;
9232
9233           /* If we have VFP, also check for NEON.  The architecture allows
9234              NEON without VFP (integer vector operations only), but GDB
9235              does not support that.  */
9236           feature = tdesc_find_feature (tdesc,
9237                                         "org.gnu.gdb.arm.neon");
9238           if (feature != NULL)
9239             {
9240               /* NEON requires 32 double-precision registers.  */
9241               if (i != 32)
9242                 {
9243                   tdesc_data_cleanup (tdesc_data);
9244                   return NULL;
9245                 }
9246
9247               /* If there are quad registers defined by the stub, use
9248                  their type; otherwise (normally) provide them with
9249                  the default type.  */
9250               if (tdesc_unnumbered_register (feature, "q0") == 0)
9251                 have_neon_pseudos = 1;
9252
9253               have_neon = 1;
9254             }
9255         }
9256     }
9257
9258   /* If there is already a candidate, use it.  */
9259   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9260        best_arch != NULL;
9261        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9262     {
9263       if (arm_abi != ARM_ABI_AUTO
9264           && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9265         continue;
9266
9267       if (fp_model != ARM_FLOAT_AUTO
9268           && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9269         continue;
9270
9271       /* There are various other properties in tdep that we do not
9272          need to check here: those derived from a target description,
9273          since gdbarches with a different target description are
9274          automatically disqualified.  */
9275
9276       /* Do check is_m, though, since it might come from the binary.  */
9277       if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9278         continue;
9279
9280       /* Found a match.  */
9281       break;
9282     }
9283
9284   if (best_arch != NULL)
9285     {
9286       if (tdesc_data != NULL)
9287         tdesc_data_cleanup (tdesc_data);
9288       return best_arch->gdbarch;
9289     }
9290
9291   tdep = XCNEW (struct gdbarch_tdep);
9292   gdbarch = gdbarch_alloc (&info, tdep);
9293
9294   /* Record additional information about the architecture we are defining.
9295      These are gdbarch discriminators, like the OSABI.  */
9296   tdep->arm_abi = arm_abi;
9297   tdep->fp_model = fp_model;
9298   tdep->is_m = is_m;
9299   tdep->have_fpa_registers = have_fpa_registers;
9300   tdep->have_wmmx_registers = have_wmmx_registers;
9301   gdb_assert (vfp_register_count == 0
9302               || vfp_register_count == 16
9303               || vfp_register_count == 32);
9304   tdep->vfp_register_count = vfp_register_count;
9305   tdep->have_vfp_pseudos = have_vfp_pseudos;
9306   tdep->have_neon_pseudos = have_neon_pseudos;
9307   tdep->have_neon = have_neon;
9308
9309   arm_register_g_packet_guesses (gdbarch);
9310
9311   /* Breakpoints.  */
9312   switch (info.byte_order_for_code)
9313     {
9314     case BFD_ENDIAN_BIG:
9315       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9316       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9317       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9318       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9319
9320       break;
9321
9322     case BFD_ENDIAN_LITTLE:
9323       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9324       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9325       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9326       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9327
9328       break;
9329
9330     default:
9331       internal_error (__FILE__, __LINE__,
9332                       _("arm_gdbarch_init: bad byte order for float format"));
9333     }
9334
9335   /* On ARM targets char defaults to unsigned.  */
9336   set_gdbarch_char_signed (gdbarch, 0);
9337
9338   /* wchar_t is unsigned under the AAPCS.  */
9339   if (tdep->arm_abi == ARM_ABI_AAPCS)
9340     set_gdbarch_wchar_signed (gdbarch, 0);
9341   else
9342     set_gdbarch_wchar_signed (gdbarch, 1);
9343
9344   /* Note: for displaced stepping, this includes the breakpoint, and one word
9345      of additional scratch space.  This setting isn't used for anything beside
9346      displaced stepping at present.  */
9347   set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
9348
9349   /* This should be low enough for everything.  */
9350   tdep->lowest_pc = 0x20;
9351   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
9352
9353   /* The default, for both APCS and AAPCS, is to return small
9354      structures in registers.  */
9355   tdep->struct_return = reg_struct_return;
9356
9357   set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9358   set_gdbarch_frame_align (gdbarch, arm_frame_align);
9359
9360   if (is_m)
9361     set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9362
9363   set_gdbarch_write_pc (gdbarch, arm_write_pc);
9364
9365   /* Frame handling.  */
9366   set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
9367   set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
9368   set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
9369
9370   frame_base_set_default (gdbarch, &arm_normal_base);
9371
9372   /* Address manipulation.  */
9373   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9374
9375   /* Advance PC across function entry code.  */
9376   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9377
9378   /* Detect whether PC is at a point where the stack has been destroyed.  */
9379   set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9380
9381   /* Skip trampolines.  */
9382   set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9383
9384   /* The stack grows downward.  */
9385   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9386
9387   /* Breakpoint manipulation.  */
9388   set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9389   set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9390   set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9391                                                   arm_breakpoint_kind_from_current_state);
9392
9393   /* Information about registers, etc.  */
9394   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9395   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9396   set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9397   set_gdbarch_register_type (gdbarch, arm_register_type);
9398   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9399
9400   /* This "info float" is FPA-specific.  Use the generic version if we
9401      do not have FPA.  */
9402   if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9403     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9404
9405   /* Internal <-> external register number maps.  */
9406   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9407   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9408
9409   set_gdbarch_register_name (gdbarch, arm_register_name);
9410
9411   /* Returning results.  */
9412   set_gdbarch_return_value (gdbarch, arm_return_value);
9413
9414   /* Disassembly.  */
9415   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9416
9417   /* Minsymbol frobbing.  */
9418   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9419   set_gdbarch_coff_make_msymbol_special (gdbarch,
9420                                          arm_coff_make_msymbol_special);
9421   set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9422
9423   /* Thumb-2 IT block support.  */
9424   set_gdbarch_adjust_breakpoint_address (gdbarch,
9425                                          arm_adjust_breakpoint_address);
9426
9427   /* Virtual tables.  */
9428   set_gdbarch_vbit_in_delta (gdbarch, 1);
9429
9430   /* Hook in the ABI-specific overrides, if they have been registered.  */
9431   gdbarch_init_osabi (info, gdbarch);
9432
9433   dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9434
9435   /* Add some default predicates.  */
9436   if (is_m)
9437     frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9438   frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9439   dwarf2_append_unwinders (gdbarch);
9440   frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9441   frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9442   frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9443
9444   /* Now we have tuned the configuration, set a few final things,
9445      based on what the OS ABI has told us.  */
9446
9447   /* If the ABI is not otherwise marked, assume the old GNU APCS.  EABI
9448      binaries are always marked.  */
9449   if (tdep->arm_abi == ARM_ABI_AUTO)
9450     tdep->arm_abi = ARM_ABI_APCS;
9451
9452   /* Watchpoints are not steppable.  */
9453   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9454
9455   /* We used to default to FPA for generic ARM, but almost nobody
9456      uses that now, and we now provide a way for the user to force
9457      the model.  So default to the most useful variant.  */
9458   if (tdep->fp_model == ARM_FLOAT_AUTO)
9459     tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9460
9461   if (tdep->jb_pc >= 0)
9462     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9463
9464   /* Floating point sizes and format.  */
9465   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9466   if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9467     {
9468       set_gdbarch_double_format
9469         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9470       set_gdbarch_long_double_format
9471         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9472     }
9473   else
9474     {
9475       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9476       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9477     }
9478
9479   if (have_vfp_pseudos)
9480     {
9481       /* NOTE: These are the only pseudo registers used by
9482          the ARM target at the moment.  If more are added, a
9483          little more care in numbering will be needed.  */
9484
9485       int num_pseudos = 32;
9486       if (have_neon_pseudos)
9487         num_pseudos += 16;
9488       set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9489       set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9490       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9491     }
9492
9493   if (tdesc_data)
9494     {
9495       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9496
9497       tdesc_use_registers (gdbarch, tdesc, tdesc_data);
9498
9499       /* Override tdesc_register_type to adjust the types of VFP
9500          registers for NEON.  */
9501       set_gdbarch_register_type (gdbarch, arm_register_type);
9502     }
9503
9504   /* Add standard register aliases.  We add aliases even for those
9505      nanes which are used by the current architecture - it's simpler,
9506      and does no harm, since nothing ever lists user registers.  */
9507   for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9508     user_reg_add (gdbarch, arm_register_aliases[i].name,
9509                   value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9510
9511   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9512   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9513
9514   return gdbarch;
9515 }
9516
9517 static void
9518 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9519 {
9520   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9521
9522   if (tdep == NULL)
9523     return;
9524
9525   fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
9526                       (unsigned long) tdep->lowest_pc);
9527 }
9528
9529 #if GDB_SELF_TEST
9530 namespace selftests
9531 {
9532 static void arm_record_test (void);
9533 }
9534 #endif
9535
9536 void
9537 _initialize_arm_tdep (void)
9538 {
9539   long length;
9540   int i, j;
9541   char regdesc[1024], *rdptr = regdesc;
9542   size_t rest = sizeof (regdesc);
9543
9544   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9545
9546   arm_objfile_data_key
9547     = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
9548
9549   /* Add ourselves to objfile event chain.  */
9550   gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
9551   arm_exidx_data_key
9552     = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
9553
9554   /* Register an ELF OS ABI sniffer for ARM binaries.  */
9555   gdbarch_register_osabi_sniffer (bfd_arch_arm,
9556                                   bfd_target_elf_flavour,
9557                                   arm_elf_osabi_sniffer);
9558
9559   /* Initialize the standard target descriptions.  */
9560   initialize_tdesc_arm_with_m ();
9561   initialize_tdesc_arm_with_m_fpa_layout ();
9562   initialize_tdesc_arm_with_m_vfp_d16 ();
9563   initialize_tdesc_arm_with_iwmmxt ();
9564   initialize_tdesc_arm_with_vfpv2 ();
9565   initialize_tdesc_arm_with_vfpv3 ();
9566   initialize_tdesc_arm_with_neon ();
9567
9568   /* Add root prefix command for all "set arm"/"show arm" commands.  */
9569   add_prefix_cmd ("arm", no_class, set_arm_command,
9570                   _("Various ARM-specific commands."),
9571                   &setarmcmdlist, "set arm ", 0, &setlist);
9572
9573   add_prefix_cmd ("arm", no_class, show_arm_command,
9574                   _("Various ARM-specific commands."),
9575                   &showarmcmdlist, "show arm ", 0, &showlist);
9576
9577
9578   arm_disassembler_options = xstrdup ("reg-names-std");
9579   const disasm_options_t *disasm_options = disassembler_options_arm ();
9580   int num_disassembly_styles = 0;
9581   for (i = 0; disasm_options->name[i] != NULL; i++)
9582     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9583       num_disassembly_styles++;
9584
9585   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
9586   valid_disassembly_styles = XNEWVEC (const char *,
9587                                       num_disassembly_styles + 1);
9588   for (i = j = 0; disasm_options->name[i] != NULL; i++)
9589     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9590       {
9591         size_t offset = strlen ("reg-names-");
9592         const char *style = disasm_options->name[i];
9593         valid_disassembly_styles[j++] = &style[offset];
9594         length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9595                            disasm_options->description[i]);
9596         rdptr += length;
9597         rest -= length;
9598       }
9599   /* Mark the end of valid options.  */
9600   valid_disassembly_styles[num_disassembly_styles] = NULL;
9601
9602   /* Create the help text.  */
9603   std::string helptext = string_printf ("%s%s%s",
9604                                         _("The valid values are:\n"),
9605                                         regdesc,
9606                                         _("The default is \"std\"."));
9607
9608   add_setshow_enum_cmd("disassembler", no_class,
9609                        valid_disassembly_styles, &disassembly_style,
9610                        _("Set the disassembly style."),
9611                        _("Show the disassembly style."),
9612                        helptext.c_str (),
9613                        set_disassembly_style_sfunc,
9614                        show_disassembly_style_sfunc,
9615                        &setarmcmdlist, &showarmcmdlist);
9616
9617   add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9618                            _("Set usage of ARM 32-bit mode."),
9619                            _("Show usage of ARM 32-bit mode."),
9620                            _("When off, a 26-bit PC will be used."),
9621                            NULL,
9622                            NULL, /* FIXME: i18n: Usage of ARM 32-bit
9623                                     mode is %s.  */
9624                            &setarmcmdlist, &showarmcmdlist);
9625
9626   /* Add a command to allow the user to force the FPU model.  */
9627   add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9628                         _("Set the floating point type."),
9629                         _("Show the floating point type."),
9630                         _("auto - Determine the FP typefrom the OS-ABI.\n\
9631 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9632 fpa - FPA co-processor (GCC compiled).\n\
9633 softvfp - Software FP with pure-endian doubles.\n\
9634 vfp - VFP co-processor."),
9635                         set_fp_model_sfunc, show_fp_model,
9636                         &setarmcmdlist, &showarmcmdlist);
9637
9638   /* Add a command to allow the user to force the ABI.  */
9639   add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9640                         _("Set the ABI."),
9641                         _("Show the ABI."),
9642                         NULL, arm_set_abi, arm_show_abi,
9643                         &setarmcmdlist, &showarmcmdlist);
9644
9645   /* Add two commands to allow the user to force the assumed
9646      execution mode.  */
9647   add_setshow_enum_cmd ("fallback-mode", class_support,
9648                         arm_mode_strings, &arm_fallback_mode_string,
9649                         _("Set the mode assumed when symbols are unavailable."),
9650                         _("Show the mode assumed when symbols are unavailable."),
9651                         NULL, NULL, arm_show_fallback_mode,
9652                         &setarmcmdlist, &showarmcmdlist);
9653   add_setshow_enum_cmd ("force-mode", class_support,
9654                         arm_mode_strings, &arm_force_mode_string,
9655                         _("Set the mode assumed even when symbols are available."),
9656                         _("Show the mode assumed even when symbols are available."),
9657                         NULL, NULL, arm_show_force_mode,
9658                         &setarmcmdlist, &showarmcmdlist);
9659
9660   /* Debugging flag.  */
9661   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9662                            _("Set ARM debugging."),
9663                            _("Show ARM debugging."),
9664                            _("When on, arm-specific debugging is enabled."),
9665                            NULL,
9666                            NULL, /* FIXME: i18n: "ARM debugging is %s.  */
9667                            &setdebuglist, &showdebuglist);
9668
9669 #if GDB_SELF_TEST
9670   selftests::register_test ("arm-record", selftests::arm_record_test);
9671 #endif
9672
9673 }
9674
9675 /* ARM-reversible process record data structures.  */
9676
9677 #define ARM_INSN_SIZE_BYTES 4    
9678 #define THUMB_INSN_SIZE_BYTES 2
9679 #define THUMB2_INSN_SIZE_BYTES 4
9680
9681
9682 /* Position of the bit within a 32-bit ARM instruction
9683    that defines whether the instruction is a load or store.  */
9684 #define INSN_S_L_BIT_NUM 20
9685
9686 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9687         do  \
9688           { \
9689             unsigned int reg_len = LENGTH; \
9690             if (reg_len) \
9691               { \
9692                 REGS = XNEWVEC (uint32_t, reg_len); \
9693                 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9694               } \
9695           } \
9696         while (0)
9697
9698 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9699         do  \
9700           { \
9701             unsigned int mem_len = LENGTH; \
9702             if (mem_len) \
9703             { \
9704               MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
9705               memcpy(&MEMS->len, &RECORD_BUF[0], \
9706                      sizeof(struct arm_mem_r) * LENGTH); \
9707             } \
9708           } \
9709           while (0)
9710
9711 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
9712 #define INSN_RECORDED(ARM_RECORD) \
9713         (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9714
9715 /* ARM memory record structure.  */
9716 struct arm_mem_r
9717 {
9718   uint32_t len;    /* Record length.  */
9719   uint32_t addr;   /* Memory address.  */
9720 };
9721
9722 /* ARM instruction record contains opcode of current insn
9723    and execution state (before entry to decode_insn()),
9724    contains list of to-be-modified registers and
9725    memory blocks (on return from decode_insn()).  */
9726
9727 typedef struct insn_decode_record_t
9728 {
9729   struct gdbarch *gdbarch;
9730   struct regcache *regcache;
9731   CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
9732   uint32_t arm_insn;            /* Should accommodate thumb.  */
9733   uint32_t cond;                /* Condition code.  */
9734   uint32_t opcode;              /* Insn opcode.  */
9735   uint32_t decode;              /* Insn decode bits.  */
9736   uint32_t mem_rec_count;       /* No of mem records.  */
9737   uint32_t reg_rec_count;       /* No of reg records.  */
9738   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
9739   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
9740 } insn_decode_record;
9741
9742
9743 /* Checks ARM SBZ and SBO mandatory fields.  */
9744
9745 static int
9746 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9747 {
9748   uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9749
9750   if (!len)
9751     return 1;
9752
9753   if (!sbo)
9754     ones = ~ones;
9755
9756   while (ones)
9757     {
9758       if (!(ones & sbo))
9759         {
9760           return 0;
9761         }
9762       ones = ones >> 1;
9763     }
9764   return 1;
9765 }
9766
9767 enum arm_record_result
9768 {
9769   ARM_RECORD_SUCCESS = 0,
9770   ARM_RECORD_FAILURE = 1
9771 };
9772
9773 typedef enum
9774 {
9775   ARM_RECORD_STRH=1,
9776   ARM_RECORD_STRD
9777 } arm_record_strx_t;
9778
9779 typedef enum
9780 {
9781   ARM_RECORD=1,
9782   THUMB_RECORD,
9783   THUMB2_RECORD
9784 } record_type_t;
9785
9786
9787 static int
9788 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
9789                  uint32_t *record_buf_mem, arm_record_strx_t str_type)
9790 {
9791
9792   struct regcache *reg_cache = arm_insn_r->regcache;
9793   ULONGEST u_regval[2]= {0};
9794
9795   uint32_t reg_src1 = 0, reg_src2 = 0;
9796   uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9797
9798   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9799   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9800
9801   if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9802     {
9803       /* 1) Handle misc store, immediate offset.  */
9804       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9805       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9806       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9807       regcache_raw_read_unsigned (reg_cache, reg_src1,
9808                                   &u_regval[0]);
9809       if (ARM_PC_REGNUM == reg_src1)
9810         {
9811           /* If R15 was used as Rn, hence current PC+8.  */
9812           u_regval[0] = u_regval[0] + 8;
9813         }
9814       offset_8 = (immed_high << 4) | immed_low;
9815       /* Calculate target store address.  */
9816       if (14 == arm_insn_r->opcode)
9817         {
9818           tgt_mem_addr = u_regval[0] + offset_8;
9819         }
9820       else
9821         {
9822           tgt_mem_addr = u_regval[0] - offset_8;
9823         }
9824       if (ARM_RECORD_STRH == str_type)
9825         {
9826           record_buf_mem[0] = 2;
9827           record_buf_mem[1] = tgt_mem_addr;
9828           arm_insn_r->mem_rec_count = 1;
9829         }
9830       else if (ARM_RECORD_STRD == str_type)
9831         {
9832           record_buf_mem[0] = 4;
9833           record_buf_mem[1] = tgt_mem_addr;
9834           record_buf_mem[2] = 4;
9835           record_buf_mem[3] = tgt_mem_addr + 4;
9836           arm_insn_r->mem_rec_count = 2;
9837         }
9838     }
9839   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9840     {
9841       /* 2) Store, register offset.  */
9842       /* Get Rm.  */
9843       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9844       /* Get Rn.  */
9845       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9846       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9847       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9848       if (15 == reg_src2)
9849         {
9850           /* If R15 was used as Rn, hence current PC+8.  */
9851           u_regval[0] = u_regval[0] + 8;
9852         }
9853       /* Calculate target store address, Rn +/- Rm, register offset.  */
9854       if (12 == arm_insn_r->opcode)
9855         {
9856           tgt_mem_addr = u_regval[0] + u_regval[1];
9857         }
9858       else
9859         {
9860           tgt_mem_addr = u_regval[1] - u_regval[0];
9861         }
9862       if (ARM_RECORD_STRH == str_type)
9863         {
9864           record_buf_mem[0] = 2;
9865           record_buf_mem[1] = tgt_mem_addr;
9866           arm_insn_r->mem_rec_count = 1;
9867         }
9868       else if (ARM_RECORD_STRD == str_type)
9869         {
9870           record_buf_mem[0] = 4;
9871           record_buf_mem[1] = tgt_mem_addr;
9872           record_buf_mem[2] = 4;
9873           record_buf_mem[3] = tgt_mem_addr + 4;
9874           arm_insn_r->mem_rec_count = 2;
9875         }
9876     }
9877   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9878            || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
9879     {
9880       /* 3) Store, immediate pre-indexed.  */
9881       /* 5) Store, immediate post-indexed.  */
9882       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9883       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9884       offset_8 = (immed_high << 4) | immed_low;
9885       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9886       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9887       /* Calculate target store address, Rn +/- Rm, register offset.  */
9888       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9889         {
9890           tgt_mem_addr = u_regval[0] + offset_8;
9891         }
9892       else
9893         {
9894           tgt_mem_addr = u_regval[0] - offset_8;
9895         }
9896       if (ARM_RECORD_STRH == str_type)
9897         {
9898           record_buf_mem[0] = 2;
9899           record_buf_mem[1] = tgt_mem_addr;
9900           arm_insn_r->mem_rec_count = 1;
9901         }
9902       else if (ARM_RECORD_STRD == str_type)
9903         {
9904           record_buf_mem[0] = 4;
9905           record_buf_mem[1] = tgt_mem_addr;
9906           record_buf_mem[2] = 4;
9907           record_buf_mem[3] = tgt_mem_addr + 4;
9908           arm_insn_r->mem_rec_count = 2;
9909         }
9910       /* Record Rn also as it changes.  */
9911       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9912       arm_insn_r->reg_rec_count = 1;
9913     }
9914   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9915            || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9916     {
9917       /* 4) Store, register pre-indexed.  */
9918       /* 6) Store, register post -indexed.  */
9919       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9920       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9921       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9922       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9923       /* Calculate target store address, Rn +/- Rm, register offset.  */
9924       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9925         {
9926           tgt_mem_addr = u_regval[0] + u_regval[1];
9927         }
9928       else
9929         {
9930           tgt_mem_addr = u_regval[1] - u_regval[0];
9931         }
9932       if (ARM_RECORD_STRH == str_type)
9933         {
9934           record_buf_mem[0] = 2;
9935           record_buf_mem[1] = tgt_mem_addr;
9936           arm_insn_r->mem_rec_count = 1;
9937         }
9938       else if (ARM_RECORD_STRD == str_type)
9939         {
9940           record_buf_mem[0] = 4;
9941           record_buf_mem[1] = tgt_mem_addr;
9942           record_buf_mem[2] = 4;
9943           record_buf_mem[3] = tgt_mem_addr + 4;
9944           arm_insn_r->mem_rec_count = 2;
9945         }
9946       /* Record Rn also as it changes.  */
9947       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9948       arm_insn_r->reg_rec_count = 1;
9949     }
9950   return 0;
9951 }
9952
9953 /* Handling ARM extension space insns.  */
9954
9955 static int
9956 arm_record_extension_space (insn_decode_record *arm_insn_r)
9957 {
9958   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
9959   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9960   uint32_t record_buf[8], record_buf_mem[8];
9961   uint32_t reg_src1 = 0;
9962   struct regcache *reg_cache = arm_insn_r->regcache;
9963   ULONGEST u_regval = 0;
9964
9965   gdb_assert (!INSN_RECORDED(arm_insn_r));
9966   /* Handle unconditional insn extension space.  */
9967
9968   opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9969   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9970   if (arm_insn_r->cond)
9971     {
9972       /* PLD has no affect on architectural state, it just affects
9973          the caches.  */
9974       if (5 == ((opcode1 & 0xE0) >> 5))
9975         {
9976           /* BLX(1) */
9977           record_buf[0] = ARM_PS_REGNUM;
9978           record_buf[1] = ARM_LR_REGNUM;
9979           arm_insn_r->reg_rec_count = 2;
9980         }
9981       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
9982     }
9983
9984
9985   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9986   if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9987     {
9988       ret = -1;
9989       /* Undefined instruction on ARM V5; need to handle if later 
9990          versions define it.  */
9991     }
9992
9993   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
9994   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9995   insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
9996
9997   /* Handle arithmetic insn extension space.  */
9998   if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
9999       && !INSN_RECORDED(arm_insn_r))
10000     {
10001       /* Handle MLA(S) and MUL(S).  */
10002       if (in_inclusive_range (insn_op1, 0U, 3U))
10003       {
10004         record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10005         record_buf[1] = ARM_PS_REGNUM;
10006         arm_insn_r->reg_rec_count = 2;
10007       }
10008       else if (in_inclusive_range (insn_op1, 4U, 15U))
10009       {
10010         /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
10011         record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10012         record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10013         record_buf[2] = ARM_PS_REGNUM;
10014         arm_insn_r->reg_rec_count = 3;
10015       }
10016     }
10017
10018   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
10019   opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
10020   insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
10021
10022   /* Handle control insn extension space.  */
10023
10024   if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
10025       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
10026     {
10027       if (!bit (arm_insn_r->arm_insn,25))
10028         {
10029           if (!bits (arm_insn_r->arm_insn, 4, 7))
10030             {
10031               if ((0 == insn_op1) || (2 == insn_op1))
10032                 {
10033                   /* MRS.  */
10034                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10035                   arm_insn_r->reg_rec_count = 1;
10036                 }
10037               else if (1 == insn_op1)
10038                 {
10039                   /* CSPR is going to be changed.  */
10040                   record_buf[0] = ARM_PS_REGNUM;
10041                   arm_insn_r->reg_rec_count = 1;
10042                 }
10043               else if (3 == insn_op1)
10044                 {
10045                   /* SPSR is going to be changed.  */
10046                   /* We need to get SPSR value, which is yet to be done.  */
10047                   return -1;
10048                 }
10049             }
10050           else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
10051             {
10052               if (1 == insn_op1)
10053                 {
10054                   /* BX.  */
10055                   record_buf[0] = ARM_PS_REGNUM;
10056                   arm_insn_r->reg_rec_count = 1;
10057                 }
10058               else if (3 == insn_op1)
10059                 {
10060                   /* CLZ.  */
10061                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10062                   arm_insn_r->reg_rec_count = 1;
10063                 }
10064             }
10065           else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
10066             {
10067               /* BLX.  */
10068               record_buf[0] = ARM_PS_REGNUM;
10069               record_buf[1] = ARM_LR_REGNUM;
10070               arm_insn_r->reg_rec_count = 2;
10071             }
10072           else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10073             {
10074               /* QADD, QSUB, QDADD, QDSUB */
10075               record_buf[0] = ARM_PS_REGNUM;
10076               record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10077               arm_insn_r->reg_rec_count = 2;
10078             }
10079           else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10080             {
10081               /* BKPT.  */
10082               record_buf[0] = ARM_PS_REGNUM;
10083               record_buf[1] = ARM_LR_REGNUM;
10084               arm_insn_r->reg_rec_count = 2;
10085
10086               /* Save SPSR also;how?  */
10087               return -1;
10088             }
10089           else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
10090                   || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10091                   || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10092                   || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10093                  )
10094             {
10095               if (0 == insn_op1 || 1 == insn_op1)
10096                 {
10097                   /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
10098                   /* We dont do optimization for SMULW<y> where we
10099                      need only Rd.  */
10100                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10101                   record_buf[1] = ARM_PS_REGNUM;
10102                   arm_insn_r->reg_rec_count = 2;
10103                 }
10104               else if (2 == insn_op1)
10105                 {
10106                   /* SMLAL<x><y>.  */
10107                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10108                   record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10109                   arm_insn_r->reg_rec_count = 2;
10110                 }
10111               else if (3 == insn_op1)
10112                 {
10113                   /* SMUL<x><y>.  */
10114                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10115                   arm_insn_r->reg_rec_count = 1;
10116                 }
10117             }
10118         }
10119       else
10120         {
10121           /* MSR : immediate form.  */
10122           if (1 == insn_op1)
10123             {
10124               /* CSPR is going to be changed.  */
10125               record_buf[0] = ARM_PS_REGNUM;
10126               arm_insn_r->reg_rec_count = 1;
10127             }
10128           else if (3 == insn_op1)
10129             {
10130               /* SPSR is going to be changed.  */
10131               /* we need to get SPSR value, which is yet to be done  */
10132               return -1;
10133             }
10134         }
10135     }
10136
10137   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10138   opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10139   insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10140
10141   /* Handle load/store insn extension space.  */
10142
10143   if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
10144       && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10145       && !INSN_RECORDED(arm_insn_r))
10146     {
10147       /* SWP/SWPB.  */
10148       if (0 == insn_op1)
10149         {
10150           /* These insn, changes register and memory as well.  */
10151           /* SWP or SWPB insn.  */
10152           /* Get memory address given by Rn.  */
10153           reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10154           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10155           /* SWP insn ?, swaps word.  */
10156           if (8 == arm_insn_r->opcode)
10157             {
10158               record_buf_mem[0] = 4;
10159             }
10160           else
10161             {
10162               /* SWPB insn, swaps only byte.  */
10163               record_buf_mem[0] = 1;
10164             }
10165           record_buf_mem[1] = u_regval;
10166           arm_insn_r->mem_rec_count = 1;
10167           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10168           arm_insn_r->reg_rec_count = 1;
10169         }
10170       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10171         {
10172           /* STRH.  */
10173           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10174                           ARM_RECORD_STRH);
10175         }
10176       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10177         {
10178           /* LDRD.  */
10179           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10180           record_buf[1] = record_buf[0] + 1;
10181           arm_insn_r->reg_rec_count = 2;
10182         }
10183       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10184         {
10185           /* STRD.  */
10186           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10187                         ARM_RECORD_STRD);
10188         }
10189       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10190         {
10191           /* LDRH, LDRSB, LDRSH.  */
10192           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10193           arm_insn_r->reg_rec_count = 1;
10194         }
10195
10196     }
10197
10198   opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10199   if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10200       && !INSN_RECORDED(arm_insn_r))
10201     {
10202       ret = -1;
10203       /* Handle coprocessor insn extension space.  */
10204     }
10205
10206   /* To be done for ARMv5 and later; as of now we return -1.  */
10207   if (-1 == ret)
10208     return ret;
10209
10210   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10211   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10212
10213   return ret;
10214 }
10215
10216 /* Handling opcode 000 insns.  */
10217
10218 static int
10219 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10220 {
10221   struct regcache *reg_cache = arm_insn_r->regcache;
10222   uint32_t record_buf[8], record_buf_mem[8];
10223   ULONGEST u_regval[2] = {0};
10224
10225   uint32_t reg_src1 = 0, reg_dest = 0;
10226   uint32_t opcode1 = 0;
10227
10228   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10229   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10230   opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10231
10232   if (!((opcode1 & 0x19) == 0x10))
10233     {
10234       /* Data-processing (register) and Data-processing (register-shifted
10235          register */
10236       /* Out of 11 shifter operands mode, all the insn modifies destination
10237          register, which is specified by 13-16 decode.  */
10238       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10239       record_buf[1] = ARM_PS_REGNUM;
10240       arm_insn_r->reg_rec_count = 2;
10241     }
10242   else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10243     {
10244       /* Miscellaneous instructions */
10245
10246       if (3 == arm_insn_r->decode && 0x12 == opcode1
10247           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10248         {
10249           /* Handle BLX, branch and link/exchange.  */
10250           if (9 == arm_insn_r->opcode)
10251             {
10252               /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10253                  and R14 stores the return address.  */
10254               record_buf[0] = ARM_PS_REGNUM;
10255               record_buf[1] = ARM_LR_REGNUM;
10256               arm_insn_r->reg_rec_count = 2;
10257             }
10258         }
10259       else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10260         {
10261           /* Handle enhanced software breakpoint insn, BKPT.  */
10262           /* CPSR is changed to be executed in ARM state,  disabling normal
10263              interrupts, entering abort mode.  */
10264           /* According to high vector configuration PC is set.  */
10265           /* user hit breakpoint and type reverse, in
10266              that case, we need to go back with previous CPSR and
10267              Program Counter.  */
10268           record_buf[0] = ARM_PS_REGNUM;
10269           record_buf[1] = ARM_LR_REGNUM;
10270           arm_insn_r->reg_rec_count = 2;
10271
10272           /* Save SPSR also; how?  */
10273           return -1;
10274         }
10275       else if (1 == arm_insn_r->decode && 0x12 == opcode1
10276                && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10277         {
10278           /* Handle BX, branch and link/exchange.  */
10279           /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
10280           record_buf[0] = ARM_PS_REGNUM;
10281           arm_insn_r->reg_rec_count = 1;
10282         }
10283       else if (1 == arm_insn_r->decode && 0x16 == opcode1
10284                && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10285                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10286         {
10287           /* Count leading zeros: CLZ.  */
10288           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10289           arm_insn_r->reg_rec_count = 1;
10290         }
10291       else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10292                && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10293                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10294                && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10295         {
10296           /* Handle MRS insn.  */
10297           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10298           arm_insn_r->reg_rec_count = 1;
10299         }
10300     }
10301   else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10302     {
10303       /* Multiply and multiply-accumulate */
10304
10305       /* Handle multiply instructions.  */
10306       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
10307       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10308           {
10309             /* Handle MLA and MUL.  */
10310             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10311             record_buf[1] = ARM_PS_REGNUM;
10312             arm_insn_r->reg_rec_count = 2;
10313           }
10314         else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10315           {
10316             /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
10317             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10318             record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10319             record_buf[2] = ARM_PS_REGNUM;
10320             arm_insn_r->reg_rec_count = 3;
10321           }
10322     }
10323   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
10324     {
10325       /* Synchronization primitives */
10326
10327       /* Handling SWP, SWPB.  */
10328       /* These insn, changes register and memory as well.  */
10329       /* SWP or SWPB insn.  */
10330
10331       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10332       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10333       /* SWP insn ?, swaps word.  */
10334       if (8 == arm_insn_r->opcode)
10335         {
10336           record_buf_mem[0] = 4;
10337         }
10338       else
10339         {
10340           /* SWPB insn, swaps only byte.  */
10341           record_buf_mem[0] = 1;
10342         }
10343       record_buf_mem[1] = u_regval[0];
10344       arm_insn_r->mem_rec_count = 1;
10345       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10346       arm_insn_r->reg_rec_count = 1;
10347     }
10348   else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10349            || 15 == arm_insn_r->decode)
10350     {
10351       if ((opcode1 & 0x12) == 2)
10352         {
10353           /* Extra load/store (unprivileged) */
10354           return -1;
10355         }
10356       else
10357         {
10358           /* Extra load/store */
10359           switch (bits (arm_insn_r->arm_insn, 5, 6))
10360             {
10361             case 1:
10362               if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10363                 {
10364                   /* STRH (register), STRH (immediate) */
10365                   arm_record_strx (arm_insn_r, &record_buf[0],
10366                                    &record_buf_mem[0], ARM_RECORD_STRH);
10367                 }
10368               else if ((opcode1 & 0x05) == 0x1)
10369                 {
10370                   /* LDRH (register) */
10371                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10372                   arm_insn_r->reg_rec_count = 1;
10373
10374                   if (bit (arm_insn_r->arm_insn, 21))
10375                     {
10376                       /* Write back to Rn.  */
10377                       record_buf[arm_insn_r->reg_rec_count++]
10378                         = bits (arm_insn_r->arm_insn, 16, 19);
10379                     }
10380                 }
10381               else if ((opcode1 & 0x05) == 0x5)
10382                 {
10383                   /* LDRH (immediate), LDRH (literal) */
10384                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10385
10386                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10387                   arm_insn_r->reg_rec_count = 1;
10388
10389                   if (rn != 15)
10390                     {
10391                       /*LDRH (immediate) */
10392                       if (bit (arm_insn_r->arm_insn, 21))
10393                         {
10394                           /* Write back to Rn.  */
10395                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10396                         }
10397                     }
10398                 }
10399               else
10400                 return -1;
10401               break;
10402             case 2:
10403               if ((opcode1 & 0x05) == 0x0)
10404                 {
10405                   /* LDRD (register) */
10406                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10407                   record_buf[1] = record_buf[0] + 1;
10408                   arm_insn_r->reg_rec_count = 2;
10409
10410                   if (bit (arm_insn_r->arm_insn, 21))
10411                     {
10412                       /* Write back to Rn.  */
10413                       record_buf[arm_insn_r->reg_rec_count++]
10414                         = bits (arm_insn_r->arm_insn, 16, 19);
10415                     }
10416                 }
10417               else if ((opcode1 & 0x05) == 0x1)
10418                 {
10419                   /* LDRSB (register) */
10420                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10421                   arm_insn_r->reg_rec_count = 1;
10422
10423                   if (bit (arm_insn_r->arm_insn, 21))
10424                     {
10425                       /* Write back to Rn.  */
10426                       record_buf[arm_insn_r->reg_rec_count++]
10427                         = bits (arm_insn_r->arm_insn, 16, 19);
10428                     }
10429                 }
10430               else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10431                 {
10432                   /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10433                      LDRSB (literal) */
10434                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10435
10436                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10437                   arm_insn_r->reg_rec_count = 1;
10438
10439                   if (rn != 15)
10440                     {
10441                       /*LDRD (immediate), LDRSB (immediate) */
10442                       if (bit (arm_insn_r->arm_insn, 21))
10443                         {
10444                           /* Write back to Rn.  */
10445                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10446                         }
10447                     }
10448                 }
10449               else
10450                 return -1;
10451               break;
10452             case 3:
10453               if ((opcode1 & 0x05) == 0x0)
10454                 {
10455                   /* STRD (register) */
10456                   arm_record_strx (arm_insn_r, &record_buf[0],
10457                                    &record_buf_mem[0], ARM_RECORD_STRD);
10458                 }
10459               else if ((opcode1 & 0x05) == 0x1)
10460                 {
10461                   /* LDRSH (register) */
10462                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10463                   arm_insn_r->reg_rec_count = 1;
10464
10465                   if (bit (arm_insn_r->arm_insn, 21))
10466                     {
10467                       /* Write back to Rn.  */
10468                       record_buf[arm_insn_r->reg_rec_count++]
10469                         = bits (arm_insn_r->arm_insn, 16, 19);
10470                     }
10471                 }
10472               else if ((opcode1 & 0x05) == 0x4)
10473                 {
10474                   /* STRD (immediate) */
10475                   arm_record_strx (arm_insn_r, &record_buf[0],
10476                                    &record_buf_mem[0], ARM_RECORD_STRD);
10477                 }
10478               else if ((opcode1 & 0x05) == 0x5)
10479                 {
10480                   /* LDRSH (immediate), LDRSH (literal) */
10481                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10482                   arm_insn_r->reg_rec_count = 1;
10483
10484                   if (bit (arm_insn_r->arm_insn, 21))
10485                     {
10486                       /* Write back to Rn.  */
10487                       record_buf[arm_insn_r->reg_rec_count++]
10488                         = bits (arm_insn_r->arm_insn, 16, 19);
10489                     }
10490                 }
10491               else
10492                 return -1;
10493               break;
10494             default:
10495               return -1;
10496             }
10497         }
10498     }
10499   else
10500     {
10501       return -1;
10502     }
10503
10504   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10505   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10506   return 0;
10507 }
10508
10509 /* Handling opcode 001 insns.  */
10510
10511 static int
10512 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10513 {
10514   uint32_t record_buf[8], record_buf_mem[8];
10515
10516   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10517   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10518
10519   if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10520       && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10521       && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10522      )
10523     {
10524       /* Handle MSR insn.  */
10525       if (9 == arm_insn_r->opcode)
10526         {
10527           /* CSPR is going to be changed.  */
10528           record_buf[0] = ARM_PS_REGNUM;
10529           arm_insn_r->reg_rec_count = 1;
10530         }
10531       else
10532         {
10533           /* SPSR is going to be changed.  */
10534         }
10535     }
10536   else if (arm_insn_r->opcode <= 15)
10537     {
10538       /* Normal data processing insns.  */
10539       /* Out of 11 shifter operands mode, all the insn modifies destination
10540          register, which is specified by 13-16 decode.  */
10541       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10542       record_buf[1] = ARM_PS_REGNUM;
10543       arm_insn_r->reg_rec_count = 2;
10544     }
10545   else
10546     {
10547       return -1;
10548     }
10549
10550   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10551   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10552   return 0;
10553 }
10554
10555 static int
10556 arm_record_media (insn_decode_record *arm_insn_r)
10557 {
10558   uint32_t record_buf[8];
10559
10560   switch (bits (arm_insn_r->arm_insn, 22, 24))
10561     {
10562     case 0:
10563       /* Parallel addition and subtraction, signed */
10564     case 1:
10565       /* Parallel addition and subtraction, unsigned */
10566     case 2:
10567     case 3:
10568       /* Packing, unpacking, saturation and reversal */
10569       {
10570         int rd = bits (arm_insn_r->arm_insn, 12, 15);
10571
10572         record_buf[arm_insn_r->reg_rec_count++] = rd;
10573       }
10574       break;
10575
10576     case 4:
10577     case 5:
10578       /* Signed multiplies */
10579       {
10580         int rd = bits (arm_insn_r->arm_insn, 16, 19);
10581         unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10582
10583         record_buf[arm_insn_r->reg_rec_count++] = rd;
10584         if (op1 == 0x0)
10585           record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10586         else if (op1 == 0x4)
10587           record_buf[arm_insn_r->reg_rec_count++]
10588             = bits (arm_insn_r->arm_insn, 12, 15);
10589       }
10590       break;
10591
10592     case 6:
10593       {
10594         if (bit (arm_insn_r->arm_insn, 21)
10595             && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10596           {
10597             /* SBFX */
10598             record_buf[arm_insn_r->reg_rec_count++]
10599               = bits (arm_insn_r->arm_insn, 12, 15);
10600           }
10601         else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10602                  && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10603           {
10604             /* USAD8 and USADA8 */
10605             record_buf[arm_insn_r->reg_rec_count++]
10606               = bits (arm_insn_r->arm_insn, 16, 19);
10607           }
10608       }
10609       break;
10610
10611     case 7:
10612       {
10613         if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10614             && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10615           {
10616             /* Permanently UNDEFINED */
10617             return -1;
10618           }
10619         else
10620           {
10621             /* BFC, BFI and UBFX */
10622             record_buf[arm_insn_r->reg_rec_count++]
10623               = bits (arm_insn_r->arm_insn, 12, 15);
10624           }
10625       }
10626       break;
10627
10628     default:
10629       return -1;
10630     }
10631
10632   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10633
10634   return 0;
10635 }
10636
10637 /* Handle ARM mode instructions with opcode 010.  */
10638
10639 static int
10640 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10641 {
10642   struct regcache *reg_cache = arm_insn_r->regcache;
10643
10644   uint32_t reg_base , reg_dest;
10645   uint32_t offset_12, tgt_mem_addr;
10646   uint32_t record_buf[8], record_buf_mem[8];
10647   unsigned char wback;
10648   ULONGEST u_regval;
10649
10650   /* Calculate wback.  */
10651   wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10652           || (bit (arm_insn_r->arm_insn, 21) == 1);
10653
10654   arm_insn_r->reg_rec_count = 0;
10655   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10656
10657   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10658     {
10659       /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10660          and LDRT.  */
10661
10662       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10663       record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10664
10665       /* The LDR instruction is capable of doing branching.  If MOV LR, PC
10666          preceeds a LDR instruction having R15 as reg_base, it
10667          emulates a branch and link instruction, and hence we need to save
10668          CPSR and PC as well.  */
10669       if (ARM_PC_REGNUM == reg_dest)
10670         record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10671
10672       /* If wback is true, also save the base register, which is going to be
10673          written to.  */
10674       if (wback)
10675         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10676     }
10677   else
10678     {
10679       /* STR (immediate), STRB (immediate), STRBT and STRT.  */
10680
10681       offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10682       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10683
10684       /* Handle bit U.  */
10685       if (bit (arm_insn_r->arm_insn, 23))
10686         {
10687           /* U == 1: Add the offset. */
10688           tgt_mem_addr = (uint32_t) u_regval + offset_12;
10689         }
10690       else
10691         {
10692           /* U == 0: subtract the offset. */
10693           tgt_mem_addr = (uint32_t) u_regval - offset_12;
10694         }
10695
10696       /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10697          bytes.  */
10698       if (bit (arm_insn_r->arm_insn, 22))
10699         {
10700           /* STRB and STRBT: 1 byte.  */
10701           record_buf_mem[0] = 1;
10702         }
10703       else
10704         {
10705           /* STR and STRT: 4 bytes.  */
10706           record_buf_mem[0] = 4;
10707         }
10708
10709       /* Handle bit P.  */
10710       if (bit (arm_insn_r->arm_insn, 24))
10711         record_buf_mem[1] = tgt_mem_addr;
10712       else
10713         record_buf_mem[1] = (uint32_t) u_regval;
10714
10715       arm_insn_r->mem_rec_count = 1;
10716
10717       /* If wback is true, also save the base register, which is going to be
10718          written to.  */
10719       if (wback)
10720         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10721     }
10722
10723   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10724   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10725   return 0;
10726 }
10727
10728 /* Handling opcode 011 insns.  */
10729
10730 static int
10731 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10732 {
10733   struct regcache *reg_cache = arm_insn_r->regcache;
10734
10735   uint32_t shift_imm = 0;
10736   uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10737   uint32_t offset_12 = 0, tgt_mem_addr = 0;
10738   uint32_t record_buf[8], record_buf_mem[8];
10739
10740   LONGEST s_word;
10741   ULONGEST u_regval[2];
10742
10743   if (bit (arm_insn_r->arm_insn, 4))
10744     return arm_record_media (arm_insn_r);
10745
10746   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10747   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10748
10749   /* Handle enhanced store insns and LDRD DSP insn,
10750      order begins according to addressing modes for store insns
10751      STRH insn.  */
10752
10753   /* LDR or STR?  */
10754   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10755     {
10756       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10757       /* LDR insn has a capability to do branching, if
10758          MOV LR, PC is precedded by LDR insn having Rn as R15
10759          in that case, it emulates branch and link insn, and hence we
10760          need to save CSPR and PC as well.  */
10761       if (15 != reg_dest)
10762         {
10763           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10764           arm_insn_r->reg_rec_count = 1;
10765         }
10766       else
10767         {
10768           record_buf[0] = reg_dest;
10769           record_buf[1] = ARM_PS_REGNUM;
10770           arm_insn_r->reg_rec_count = 2;
10771         }
10772     }
10773   else
10774     {
10775       if (! bits (arm_insn_r->arm_insn, 4, 11))
10776         {
10777           /* Store insn, register offset and register pre-indexed,
10778              register post-indexed.  */
10779           /* Get Rm.  */
10780           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10781           /* Get Rn.  */
10782           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10783           regcache_raw_read_unsigned (reg_cache, reg_src1
10784                                       , &u_regval[0]);
10785           regcache_raw_read_unsigned (reg_cache, reg_src2
10786                                       , &u_regval[1]);
10787           if (15 == reg_src2)
10788             {
10789               /* If R15 was used as Rn, hence current PC+8.  */
10790               /* Pre-indexed mode doesnt reach here ; illegal insn.  */
10791                 u_regval[0] = u_regval[0] + 8;
10792             }
10793           /* Calculate target store address, Rn +/- Rm, register offset.  */
10794           /* U == 1.  */
10795           if (bit (arm_insn_r->arm_insn, 23))
10796             {
10797               tgt_mem_addr = u_regval[0] + u_regval[1];
10798             }
10799           else
10800             {
10801               tgt_mem_addr = u_regval[1] - u_regval[0];
10802             }
10803
10804           switch (arm_insn_r->opcode)
10805             {
10806               /* STR.  */
10807               case 8:
10808               case 12:
10809               /* STR.  */    
10810               case 9:
10811               case 13:
10812               /* STRT.  */
10813               case 1:
10814               case 5:
10815               /* STR.  */
10816               case 0:
10817               case 4:
10818                 record_buf_mem[0] = 4;
10819               break;
10820
10821               /* STRB.  */
10822               case 10:
10823               case 14:
10824               /* STRB.  */
10825               case 11:
10826               case 15:
10827               /* STRBT.  */    
10828               case 3:
10829               case 7:
10830               /* STRB.  */
10831               case 2:
10832               case 6:
10833                 record_buf_mem[0] = 1;
10834               break;
10835
10836               default:
10837                 gdb_assert_not_reached ("no decoding pattern found");
10838               break;
10839             }
10840           record_buf_mem[1] = tgt_mem_addr;
10841           arm_insn_r->mem_rec_count = 1;
10842
10843           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10844               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10845               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10846               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10847               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10848               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10849              )
10850             {
10851               /* Rn is going to be changed in pre-indexed mode and
10852                  post-indexed mode as well.  */
10853               record_buf[0] = reg_src2;
10854               arm_insn_r->reg_rec_count = 1;
10855             }
10856         }
10857       else
10858         {
10859           /* Store insn, scaled register offset; scaled pre-indexed.  */
10860           offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10861           /* Get Rm.  */
10862           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10863           /* Get Rn.  */
10864           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10865           /* Get shift_imm.  */
10866           shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10867           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10868           regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10869           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10870           /* Offset_12 used as shift.  */
10871           switch (offset_12)
10872             {
10873               case 0:
10874                 /* Offset_12 used as index.  */
10875                 offset_12 = u_regval[0] << shift_imm;
10876               break;
10877
10878               case 1:
10879                 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10880               break;
10881
10882               case 2:
10883                 if (!shift_imm)
10884                   {
10885                     if (bit (u_regval[0], 31))
10886                       {
10887                         offset_12 = 0xFFFFFFFF;
10888                       }
10889                     else
10890                       {
10891                         offset_12 = 0;
10892                       }
10893                   }
10894                 else
10895                   {
10896                     /* This is arithmetic shift.  */
10897                     offset_12 = s_word >> shift_imm;
10898                   }
10899                 break;
10900
10901               case 3:
10902                 if (!shift_imm)
10903                   {
10904                     regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10905                                                 &u_regval[1]);
10906                     /* Get C flag value and shift it by 31.  */
10907                     offset_12 = (((bit (u_regval[1], 29)) << 31) \
10908                                   | (u_regval[0]) >> 1);
10909                   }
10910                 else
10911                   {
10912                     offset_12 = (u_regval[0] >> shift_imm) \
10913                                 | (u_regval[0] <<
10914                                 (sizeof(uint32_t) - shift_imm));
10915                   }
10916               break;
10917
10918               default:
10919                 gdb_assert_not_reached ("no decoding pattern found");
10920               break;
10921             }
10922
10923           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10924           /* bit U set.  */
10925           if (bit (arm_insn_r->arm_insn, 23))
10926             {
10927               tgt_mem_addr = u_regval[1] + offset_12;
10928             }
10929           else
10930             {
10931               tgt_mem_addr = u_regval[1] - offset_12;
10932             }
10933
10934           switch (arm_insn_r->opcode)
10935             {
10936               /* STR.  */
10937               case 8:
10938               case 12:
10939               /* STR.  */    
10940               case 9:
10941               case 13:
10942               /* STRT.  */
10943               case 1:
10944               case 5:
10945               /* STR.  */
10946               case 0:
10947               case 4:
10948                 record_buf_mem[0] = 4;
10949               break;
10950
10951               /* STRB.  */
10952               case 10:
10953               case 14:
10954               /* STRB.  */
10955               case 11:
10956               case 15:
10957               /* STRBT.  */    
10958               case 3:
10959               case 7:
10960               /* STRB.  */
10961               case 2:
10962               case 6:
10963                 record_buf_mem[0] = 1;
10964               break;
10965
10966               default:
10967                 gdb_assert_not_reached ("no decoding pattern found");
10968               break;
10969             }
10970           record_buf_mem[1] = tgt_mem_addr;
10971           arm_insn_r->mem_rec_count = 1;
10972
10973           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10974               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10975               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10976               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10977               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10978               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10979              )
10980             {
10981               /* Rn is going to be changed in register scaled pre-indexed
10982                  mode,and scaled post indexed mode.  */
10983               record_buf[0] = reg_src2;
10984               arm_insn_r->reg_rec_count = 1;
10985             }
10986         }
10987     }
10988
10989   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10990   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10991   return 0;
10992 }
10993
10994 /* Handle ARM mode instructions with opcode 100.  */
10995
10996 static int
10997 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
10998 {
10999   struct regcache *reg_cache = arm_insn_r->regcache;
11000   uint32_t register_count = 0, register_bits;
11001   uint32_t reg_base, addr_mode;
11002   uint32_t record_buf[24], record_buf_mem[48];
11003   uint32_t wback;
11004   ULONGEST u_regval;
11005
11006   /* Fetch the list of registers.  */
11007   register_bits = bits (arm_insn_r->arm_insn, 0, 15);
11008   arm_insn_r->reg_rec_count = 0;
11009
11010   /* Fetch the base register that contains the address we are loading data
11011      to.  */
11012   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11013
11014   /* Calculate wback.  */
11015   wback = (bit (arm_insn_r->arm_insn, 21) == 1);
11016
11017   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11018     {
11019       /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB.  */
11020
11021       /* Find out which registers are going to be loaded from memory.  */
11022       while (register_bits)
11023         {
11024           if (register_bits & 0x00000001)
11025             record_buf[arm_insn_r->reg_rec_count++] = register_count;
11026           register_bits = register_bits >> 1;
11027           register_count++;
11028         }
11029
11030   
11031       /* If wback is true, also save the base register, which is going to be
11032          written to.  */
11033       if (wback)
11034         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11035
11036       /* Save the CPSR register.  */
11037       record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11038     }
11039   else
11040     {
11041       /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA).  */
11042
11043       addr_mode = bits (arm_insn_r->arm_insn, 23, 24); 
11044
11045       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11046
11047       /* Find out how many registers are going to be stored to memory.  */
11048       while (register_bits)
11049         {
11050           if (register_bits & 0x00000001)
11051             register_count++;
11052           register_bits = register_bits >> 1;
11053         }
11054
11055       switch (addr_mode)
11056         {
11057           /* STMDA (STMED): Decrement after.  */
11058           case 0:
11059           record_buf_mem[1] = (uint32_t) u_regval
11060                               - register_count * INT_REGISTER_SIZE + 4;
11061           break;
11062           /* STM (STMIA, STMEA): Increment after.  */
11063           case 1:
11064           record_buf_mem[1] = (uint32_t) u_regval;
11065           break;
11066           /* STMDB (STMFD): Decrement before.  */
11067           case 2:
11068           record_buf_mem[1] = (uint32_t) u_regval
11069                               - register_count * INT_REGISTER_SIZE;
11070           break;
11071           /* STMIB (STMFA): Increment before.  */
11072           case 3:
11073           record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11074           break;
11075           default:
11076             gdb_assert_not_reached ("no decoding pattern found");
11077           break;
11078         }
11079
11080       record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11081       arm_insn_r->mem_rec_count = 1;
11082
11083       /* If wback is true, also save the base register, which is going to be
11084          written to.  */
11085       if (wback)
11086         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11087     }
11088
11089   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11090   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11091   return 0;
11092 }
11093
11094 /* Handling opcode 101 insns.  */
11095
11096 static int
11097 arm_record_b_bl (insn_decode_record *arm_insn_r)
11098 {
11099   uint32_t record_buf[8];
11100
11101   /* Handle B, BL, BLX(1) insns.  */
11102   /* B simply branches so we do nothing here.  */
11103   /* Note: BLX(1) doesnt fall here but instead it falls into
11104      extension space.  */
11105   if (bit (arm_insn_r->arm_insn, 24))
11106   {
11107     record_buf[0] = ARM_LR_REGNUM;
11108     arm_insn_r->reg_rec_count = 1;
11109   }
11110
11111   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11112
11113   return 0;
11114 }
11115
11116 static int
11117 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11118 {
11119   printf_unfiltered (_("Process record does not support instruction "
11120                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11121                      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11122
11123   return -1;
11124 }
11125
11126 /* Record handler for vector data transfer instructions.  */
11127
11128 static int
11129 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11130 {
11131   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11132   uint32_t record_buf[4];
11133
11134   reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11135   reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11136   bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11137   bit_l = bit (arm_insn_r->arm_insn, 20);
11138   bit_c = bit (arm_insn_r->arm_insn, 8);
11139
11140   /* Handle VMOV instruction.  */
11141   if (bit_l && bit_c)
11142     {
11143       record_buf[0] = reg_t;
11144       arm_insn_r->reg_rec_count = 1;
11145     }
11146   else if (bit_l && !bit_c)
11147     {
11148       /* Handle VMOV instruction.  */
11149       if (bits_a == 0x00)
11150         {
11151           record_buf[0] = reg_t;
11152           arm_insn_r->reg_rec_count = 1;
11153         }
11154       /* Handle VMRS instruction.  */
11155       else if (bits_a == 0x07)
11156         {
11157           if (reg_t == 15)
11158             reg_t = ARM_PS_REGNUM;
11159
11160           record_buf[0] = reg_t;
11161           arm_insn_r->reg_rec_count = 1;
11162         }
11163     }
11164   else if (!bit_l && !bit_c)
11165     {
11166       /* Handle VMOV instruction.  */
11167       if (bits_a == 0x00)
11168         {
11169           record_buf[0] = ARM_D0_REGNUM + reg_v;
11170
11171           arm_insn_r->reg_rec_count = 1;
11172         }
11173       /* Handle VMSR instruction.  */
11174       else if (bits_a == 0x07)
11175         {
11176           record_buf[0] = ARM_FPSCR_REGNUM;
11177           arm_insn_r->reg_rec_count = 1;
11178         }
11179     }
11180   else if (!bit_l && bit_c)
11181     {
11182       /* Handle VMOV instruction.  */
11183       if (!(bits_a & 0x04))
11184         {
11185           record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11186                           + ARM_D0_REGNUM;
11187           arm_insn_r->reg_rec_count = 1;
11188         }
11189       /* Handle VDUP instruction.  */
11190       else
11191         {
11192           if (bit (arm_insn_r->arm_insn, 21))
11193             {
11194               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11195               record_buf[0] = reg_v + ARM_D0_REGNUM;
11196               record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11197               arm_insn_r->reg_rec_count = 2;
11198             }
11199           else
11200             {
11201               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11202               record_buf[0] = reg_v + ARM_D0_REGNUM;
11203               arm_insn_r->reg_rec_count = 1;
11204             }
11205         }
11206     }
11207
11208   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11209   return 0;
11210 }
11211
11212 /* Record handler for extension register load/store instructions.  */
11213
11214 static int
11215 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11216 {
11217   uint32_t opcode, single_reg;
11218   uint8_t op_vldm_vstm;
11219   uint32_t record_buf[8], record_buf_mem[128];
11220   ULONGEST u_regval = 0;
11221
11222   struct regcache *reg_cache = arm_insn_r->regcache;
11223
11224   opcode = bits (arm_insn_r->arm_insn, 20, 24);
11225   single_reg = !bit (arm_insn_r->arm_insn, 8);
11226   op_vldm_vstm = opcode & 0x1b;
11227
11228   /* Handle VMOV instructions.  */
11229   if ((opcode & 0x1e) == 0x04)
11230     {
11231       if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11232         {
11233           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11234           record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11235           arm_insn_r->reg_rec_count = 2;
11236         }
11237       else
11238         {
11239           uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11240           uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11241
11242           if (single_reg)
11243             {
11244               /* The first S register number m is REG_M:M (M is bit 5),
11245                  the corresponding D register number is REG_M:M / 2, which
11246                  is REG_M.  */
11247               record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11248               /* The second S register number is REG_M:M + 1, the
11249                  corresponding D register number is (REG_M:M + 1) / 2.
11250                  IOW, if bit M is 1, the first and second S registers
11251                  are mapped to different D registers, otherwise, they are
11252                  in the same D register.  */
11253               if (bit_m)
11254                 {
11255                   record_buf[arm_insn_r->reg_rec_count++]
11256                     = ARM_D0_REGNUM + reg_m + 1;
11257                 }
11258             }
11259           else
11260             {
11261               record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11262               arm_insn_r->reg_rec_count = 1;
11263             }
11264         }
11265     }
11266   /* Handle VSTM and VPUSH instructions.  */
11267   else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11268            || op_vldm_vstm == 0x12)
11269     {
11270       uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11271       uint32_t memory_index = 0;
11272
11273       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11274       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11275       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11276       imm_off32 = imm_off8 << 2;
11277       memory_count = imm_off8;
11278
11279       if (bit (arm_insn_r->arm_insn, 23))
11280         start_address = u_regval;
11281       else
11282         start_address = u_regval - imm_off32;
11283
11284       if (bit (arm_insn_r->arm_insn, 21))
11285         {
11286           record_buf[0] = reg_rn;
11287           arm_insn_r->reg_rec_count = 1;
11288         }
11289
11290       while (memory_count > 0)
11291         {
11292           if (single_reg)
11293             {
11294               record_buf_mem[memory_index] = 4;
11295               record_buf_mem[memory_index + 1] = start_address;
11296               start_address = start_address + 4;
11297               memory_index = memory_index + 2;
11298             }
11299           else
11300             {
11301               record_buf_mem[memory_index] = 4;
11302               record_buf_mem[memory_index + 1] = start_address;
11303               record_buf_mem[memory_index + 2] = 4;
11304               record_buf_mem[memory_index + 3] = start_address + 4;
11305               start_address = start_address + 8;
11306               memory_index = memory_index + 4;
11307             }
11308           memory_count--;
11309         }
11310       arm_insn_r->mem_rec_count = (memory_index >> 1);
11311     }
11312   /* Handle VLDM instructions.  */
11313   else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11314            || op_vldm_vstm == 0x13)
11315     {
11316       uint32_t reg_count, reg_vd;
11317       uint32_t reg_index = 0;
11318       uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11319
11320       reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11321       reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11322
11323       /* REG_VD is the first D register number.  If the instruction
11324          loads memory to S registers (SINGLE_REG is TRUE), the register
11325          number is (REG_VD << 1 | bit D), so the corresponding D
11326          register number is (REG_VD << 1 | bit D) / 2 = REG_VD.  */
11327       if (!single_reg)
11328         reg_vd = reg_vd | (bit_d << 4);
11329
11330       if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11331         record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11332
11333       /* If the instruction loads memory to D register, REG_COUNT should
11334          be divided by 2, according to the ARM Architecture Reference
11335          Manual.  If the instruction loads memory to S register, divide by
11336          2 as well because two S registers are mapped to D register.  */
11337       reg_count  = reg_count / 2;
11338       if (single_reg && bit_d)
11339         {
11340           /* Increase the register count if S register list starts from
11341              an odd number (bit d is one).  */
11342           reg_count++;
11343         }
11344
11345       while (reg_count > 0)
11346         {
11347           record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11348           reg_count--;
11349         }
11350       arm_insn_r->reg_rec_count = reg_index;
11351     }
11352   /* VSTR Vector store register.  */
11353   else if ((opcode & 0x13) == 0x10)
11354     {
11355       uint32_t start_address, reg_rn, imm_off32, imm_off8;
11356       uint32_t memory_index = 0;
11357
11358       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11359       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11360       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11361       imm_off32 = imm_off8 << 2;
11362
11363       if (bit (arm_insn_r->arm_insn, 23))
11364         start_address = u_regval + imm_off32;
11365       else
11366         start_address = u_regval - imm_off32;
11367
11368       if (single_reg)
11369         {
11370           record_buf_mem[memory_index] = 4;
11371           record_buf_mem[memory_index + 1] = start_address;
11372           arm_insn_r->mem_rec_count = 1;
11373         }
11374       else
11375         {
11376           record_buf_mem[memory_index] = 4;
11377           record_buf_mem[memory_index + 1] = start_address;
11378           record_buf_mem[memory_index + 2] = 4;
11379           record_buf_mem[memory_index + 3] = start_address + 4;
11380           arm_insn_r->mem_rec_count = 2;
11381         }
11382     }
11383   /* VLDR Vector load register.  */
11384   else if ((opcode & 0x13) == 0x11)
11385     {
11386       uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11387
11388       if (!single_reg)
11389         {
11390           reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11391           record_buf[0] = ARM_D0_REGNUM + reg_vd;
11392         }
11393       else
11394         {
11395           reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11396           /* Record register D rather than pseudo register S.  */
11397           record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11398         }
11399       arm_insn_r->reg_rec_count = 1;
11400     }
11401
11402   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11403   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11404   return 0;
11405 }
11406
11407 /* Record handler for arm/thumb mode VFP data processing instructions.  */
11408
11409 static int
11410 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11411 {
11412   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11413   uint32_t record_buf[4];
11414   enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11415   enum insn_types curr_insn_type = INSN_INV;
11416
11417   reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11418   opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11419   opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11420   opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11421   dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11422   bit_d = bit (arm_insn_r->arm_insn, 22);
11423   opc1 = opc1 & 0x04;
11424
11425   /* Handle VMLA, VMLS.  */
11426   if (opc1 == 0x00)
11427     {
11428       if (bit (arm_insn_r->arm_insn, 10))
11429         {
11430           if (bit (arm_insn_r->arm_insn, 6))
11431             curr_insn_type = INSN_T0;
11432           else
11433             curr_insn_type = INSN_T1;
11434         }
11435       else
11436         {
11437           if (dp_op_sz)
11438             curr_insn_type = INSN_T1;
11439           else
11440             curr_insn_type = INSN_T2;
11441         }
11442     }
11443   /* Handle VNMLA, VNMLS, VNMUL.  */
11444   else if (opc1 == 0x01)
11445     {
11446       if (dp_op_sz)
11447         curr_insn_type = INSN_T1;
11448       else
11449         curr_insn_type = INSN_T2;
11450     }
11451   /* Handle VMUL.  */
11452   else if (opc1 == 0x02 && !(opc3 & 0x01))
11453     {
11454       if (bit (arm_insn_r->arm_insn, 10))
11455         {
11456           if (bit (arm_insn_r->arm_insn, 6))
11457             curr_insn_type = INSN_T0;
11458           else
11459             curr_insn_type = INSN_T1;
11460         }
11461       else
11462         {
11463           if (dp_op_sz)
11464             curr_insn_type = INSN_T1;
11465           else
11466             curr_insn_type = INSN_T2;
11467         }
11468     }
11469   /* Handle VADD, VSUB.  */
11470   else if (opc1 == 0x03)
11471     {
11472       if (!bit (arm_insn_r->arm_insn, 9))
11473         {
11474           if (bit (arm_insn_r->arm_insn, 6))
11475             curr_insn_type = INSN_T0;
11476           else
11477             curr_insn_type = INSN_T1;
11478         }
11479       else
11480         {
11481           if (dp_op_sz)
11482             curr_insn_type = INSN_T1;
11483           else
11484             curr_insn_type = INSN_T2;
11485         }
11486     }
11487   /* Handle VDIV.  */
11488   else if (opc1 == 0x0b)
11489     {
11490       if (dp_op_sz)
11491         curr_insn_type = INSN_T1;
11492       else
11493         curr_insn_type = INSN_T2;
11494     }
11495   /* Handle all other vfp data processing instructions.  */
11496   else if (opc1 == 0x0b)
11497     {
11498       /* Handle VMOV.  */
11499       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11500         {
11501           if (bit (arm_insn_r->arm_insn, 4))
11502             {
11503               if (bit (arm_insn_r->arm_insn, 6))
11504                 curr_insn_type = INSN_T0;
11505               else
11506                 curr_insn_type = INSN_T1;
11507             }
11508           else
11509             {
11510               if (dp_op_sz)
11511                 curr_insn_type = INSN_T1;
11512               else
11513                 curr_insn_type = INSN_T2;
11514             }
11515         }
11516       /* Handle VNEG and VABS.  */
11517       else if ((opc2 == 0x01 && opc3 == 0x01)
11518               || (opc2 == 0x00 && opc3 == 0x03))
11519         {
11520           if (!bit (arm_insn_r->arm_insn, 11))
11521             {
11522               if (bit (arm_insn_r->arm_insn, 6))
11523                 curr_insn_type = INSN_T0;
11524               else
11525                 curr_insn_type = INSN_T1;
11526             }
11527           else
11528             {
11529               if (dp_op_sz)
11530                 curr_insn_type = INSN_T1;
11531               else
11532                 curr_insn_type = INSN_T2;
11533             }
11534         }
11535       /* Handle VSQRT.  */
11536       else if (opc2 == 0x01 && opc3 == 0x03)
11537         {
11538           if (dp_op_sz)
11539             curr_insn_type = INSN_T1;
11540           else
11541             curr_insn_type = INSN_T2;
11542         }
11543       /* Handle VCVT.  */
11544       else if (opc2 == 0x07 && opc3 == 0x03)
11545         {
11546           if (!dp_op_sz)
11547             curr_insn_type = INSN_T1;
11548           else
11549             curr_insn_type = INSN_T2;
11550         }
11551       else if (opc3 & 0x01)
11552         {
11553           /* Handle VCVT.  */
11554           if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11555             {
11556               if (!bit (arm_insn_r->arm_insn, 18))
11557                 curr_insn_type = INSN_T2;
11558               else
11559                 {
11560                   if (dp_op_sz)
11561                     curr_insn_type = INSN_T1;
11562                   else
11563                     curr_insn_type = INSN_T2;
11564                 }
11565             }
11566           /* Handle VCVT.  */
11567           else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11568             {
11569               if (dp_op_sz)
11570                 curr_insn_type = INSN_T1;
11571               else
11572                 curr_insn_type = INSN_T2;
11573             }
11574           /* Handle VCVTB, VCVTT.  */
11575           else if ((opc2 & 0x0e) == 0x02)
11576             curr_insn_type = INSN_T2;
11577           /* Handle VCMP, VCMPE.  */
11578           else if ((opc2 & 0x0e) == 0x04)
11579             curr_insn_type = INSN_T3;
11580         }
11581     }
11582
11583   switch (curr_insn_type)
11584     {
11585       case INSN_T0:
11586         reg_vd = reg_vd | (bit_d << 4);
11587         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11588         record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11589         arm_insn_r->reg_rec_count = 2;
11590         break;
11591
11592       case INSN_T1:
11593         reg_vd = reg_vd | (bit_d << 4);
11594         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11595         arm_insn_r->reg_rec_count = 1;
11596         break;
11597
11598       case INSN_T2:
11599         reg_vd = (reg_vd << 1) | bit_d;
11600         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11601         arm_insn_r->reg_rec_count = 1;
11602         break;
11603
11604       case INSN_T3:
11605         record_buf[0] = ARM_FPSCR_REGNUM;
11606         arm_insn_r->reg_rec_count = 1;
11607         break;
11608
11609       default:
11610         gdb_assert_not_reached ("no decoding pattern found");
11611         break;
11612     }
11613
11614   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11615   return 0;
11616 }
11617
11618 /* Handling opcode 110 insns.  */
11619
11620 static int
11621 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11622 {
11623   uint32_t op1, op1_ebit, coproc;
11624
11625   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11626   op1 = bits (arm_insn_r->arm_insn, 20, 25);
11627   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11628
11629   if ((coproc & 0x0e) == 0x0a)
11630     {
11631       /* Handle extension register ld/st instructions.  */
11632       if (!(op1 & 0x20))
11633         return arm_record_exreg_ld_st_insn (arm_insn_r);
11634
11635       /* 64-bit transfers between arm core and extension registers.  */
11636       if ((op1 & 0x3e) == 0x04)
11637         return arm_record_exreg_ld_st_insn (arm_insn_r);
11638     }
11639   else
11640     {
11641       /* Handle coprocessor ld/st instructions.  */
11642       if (!(op1 & 0x3a))
11643         {
11644           /* Store.  */
11645           if (!op1_ebit)
11646             return arm_record_unsupported_insn (arm_insn_r);
11647           else
11648             /* Load.  */
11649             return arm_record_unsupported_insn (arm_insn_r);
11650         }
11651
11652       /* Move to coprocessor from two arm core registers.  */
11653       if (op1 == 0x4)
11654         return arm_record_unsupported_insn (arm_insn_r);
11655
11656       /* Move to two arm core registers from coprocessor.  */
11657       if (op1 == 0x5)
11658         {
11659           uint32_t reg_t[2];
11660
11661           reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11662           reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11663           arm_insn_r->reg_rec_count = 2;
11664
11665           REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11666           return 0;
11667        }
11668     }
11669   return arm_record_unsupported_insn (arm_insn_r);
11670 }
11671
11672 /* Handling opcode 111 insns.  */
11673
11674 static int
11675 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11676 {
11677   uint32_t op, op1_ebit, coproc, bits_24_25;
11678   struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11679   struct regcache *reg_cache = arm_insn_r->regcache;
11680
11681   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11682   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11683   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11684   op = bit (arm_insn_r->arm_insn, 4);
11685   bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11686
11687   /* Handle arm SWI/SVC system call instructions.  */
11688   if (bits_24_25 == 0x3)
11689     {
11690       if (tdep->arm_syscall_record != NULL)
11691         {
11692           ULONGEST svc_operand, svc_number;
11693
11694           svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11695
11696           if (svc_operand)  /* OABI.  */
11697             svc_number = svc_operand - 0x900000;
11698           else /* EABI.  */
11699             regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11700
11701           return tdep->arm_syscall_record (reg_cache, svc_number);
11702         }
11703       else
11704         {
11705           printf_unfiltered (_("no syscall record support\n"));
11706           return -1;
11707         }
11708     }
11709   else if (bits_24_25 == 0x02)
11710     {
11711       if (op)
11712         {
11713           if ((coproc & 0x0e) == 0x0a)
11714             {
11715               /* 8, 16, and 32-bit transfer */
11716               return arm_record_vdata_transfer_insn (arm_insn_r);
11717             }
11718           else
11719             {
11720               if (op1_ebit)
11721                 {
11722                   /* MRC, MRC2 */
11723                   uint32_t record_buf[1];
11724
11725                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11726                   if (record_buf[0] == 15)
11727                     record_buf[0] = ARM_PS_REGNUM;
11728
11729                   arm_insn_r->reg_rec_count = 1;
11730                   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11731                              record_buf);
11732                   return 0;
11733                 }
11734               else
11735                 {
11736                   /* MCR, MCR2 */
11737                   return -1;
11738                 }
11739             }
11740         }
11741       else
11742         {
11743           if ((coproc & 0x0e) == 0x0a)
11744             {
11745               /* VFP data-processing instructions.  */
11746               return arm_record_vfp_data_proc_insn (arm_insn_r);
11747             }
11748           else
11749             {
11750               /* CDP, CDP2 */
11751               return -1;
11752             }
11753         }
11754     }
11755   else
11756     {
11757       unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11758
11759       if (op1 == 5)
11760         {
11761           if ((coproc & 0x0e) != 0x0a)
11762             {
11763               /* MRRC, MRRC2 */
11764               return -1;
11765             }
11766         }
11767       else if (op1 == 4 || op1 == 5)
11768         {
11769           if ((coproc & 0x0e) == 0x0a)
11770             {
11771               /* 64-bit transfers between ARM core and extension */
11772               return -1;
11773             }
11774           else if (op1 == 4)
11775             {
11776               /* MCRR, MCRR2 */
11777               return -1;
11778             }
11779         }
11780       else if (op1 == 0 || op1 == 1)
11781         {
11782           /* UNDEFINED */
11783           return -1;
11784         }
11785       else
11786         {
11787           if ((coproc & 0x0e) == 0x0a)
11788             {
11789               /* Extension register load/store */
11790             }
11791           else
11792             {
11793               /* STC, STC2, LDC, LDC2 */
11794             }
11795           return -1;
11796         }
11797     }
11798
11799   return -1;
11800 }
11801
11802 /* Handling opcode 000 insns.  */
11803
11804 static int
11805 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11806 {
11807   uint32_t record_buf[8];
11808   uint32_t reg_src1 = 0;
11809
11810   reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11811
11812   record_buf[0] = ARM_PS_REGNUM;
11813   record_buf[1] = reg_src1;
11814   thumb_insn_r->reg_rec_count = 2;
11815
11816   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11817
11818   return 0;
11819 }
11820
11821
11822 /* Handling opcode 001 insns.  */
11823
11824 static int
11825 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11826 {
11827   uint32_t record_buf[8];
11828   uint32_t reg_src1 = 0;
11829
11830   reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11831
11832   record_buf[0] = ARM_PS_REGNUM;
11833   record_buf[1] = reg_src1;
11834   thumb_insn_r->reg_rec_count = 2;
11835
11836   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11837
11838   return 0;
11839 }
11840
11841 /* Handling opcode 010 insns.  */
11842
11843 static int
11844 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11845 {
11846   struct regcache *reg_cache =  thumb_insn_r->regcache;
11847   uint32_t record_buf[8], record_buf_mem[8];
11848
11849   uint32_t reg_src1 = 0, reg_src2 = 0;
11850   uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11851
11852   ULONGEST u_regval[2] = {0};
11853
11854   opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11855
11856   if (bit (thumb_insn_r->arm_insn, 12))
11857     {
11858       /* Handle load/store register offset.  */
11859       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11860
11861       if (in_inclusive_range (opB, 4U, 7U))
11862         {
11863           /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
11864           reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11865           record_buf[0] = reg_src1;
11866           thumb_insn_r->reg_rec_count = 1;
11867         }
11868       else if (in_inclusive_range (opB, 0U, 2U))
11869         {
11870           /* STR(2), STRB(2), STRH(2) .  */
11871           reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11872           reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11873           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11874           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11875           if (0 == opB)
11876             record_buf_mem[0] = 4;    /* STR (2).  */
11877           else if (2 == opB)
11878             record_buf_mem[0] = 1;    /*  STRB (2).  */
11879           else if (1 == opB)
11880             record_buf_mem[0] = 2;    /* STRH (2).  */
11881           record_buf_mem[1] = u_regval[0] + u_regval[1];
11882           thumb_insn_r->mem_rec_count = 1;
11883         }
11884     }
11885   else if (bit (thumb_insn_r->arm_insn, 11))
11886     {
11887       /* Handle load from literal pool.  */
11888       /* LDR(3).  */
11889       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11890       record_buf[0] = reg_src1;
11891       thumb_insn_r->reg_rec_count = 1;
11892     }
11893   else if (opcode1)
11894     {
11895       /* Special data instructions and branch and exchange */
11896       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11897       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11898       if ((3 == opcode2) && (!opcode3))
11899         {
11900           /* Branch with exchange.  */
11901           record_buf[0] = ARM_PS_REGNUM;
11902           thumb_insn_r->reg_rec_count = 1;
11903         }
11904       else
11905         {
11906           /* Format 8; special data processing insns.  */
11907           record_buf[0] = ARM_PS_REGNUM;
11908           record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11909                            | bits (thumb_insn_r->arm_insn, 0, 2));
11910           thumb_insn_r->reg_rec_count = 2;
11911         }
11912     }
11913   else
11914     {
11915       /* Format 5; data processing insns.  */
11916       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11917       if (bit (thumb_insn_r->arm_insn, 7))
11918         {
11919           reg_src1 = reg_src1 + 8;
11920         }
11921       record_buf[0] = ARM_PS_REGNUM;
11922       record_buf[1] = reg_src1;
11923       thumb_insn_r->reg_rec_count = 2;
11924     }
11925
11926   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11927   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11928              record_buf_mem);
11929
11930   return 0;
11931 }
11932
11933 /* Handling opcode 001 insns.  */
11934
11935 static int
11936 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11937 {
11938   struct regcache *reg_cache = thumb_insn_r->regcache;
11939   uint32_t record_buf[8], record_buf_mem[8];
11940
11941   uint32_t reg_src1 = 0;
11942   uint32_t opcode = 0, immed_5 = 0;
11943
11944   ULONGEST u_regval = 0;
11945
11946   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11947
11948   if (opcode)
11949     {
11950       /* LDR(1).  */
11951       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11952       record_buf[0] = reg_src1;
11953       thumb_insn_r->reg_rec_count = 1;
11954     }
11955   else
11956     {
11957       /* STR(1).  */
11958       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11959       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11960       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11961       record_buf_mem[0] = 4;
11962       record_buf_mem[1] = u_regval + (immed_5 * 4);
11963       thumb_insn_r->mem_rec_count = 1;
11964     }
11965
11966   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11967   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
11968              record_buf_mem);
11969
11970   return 0;
11971 }
11972
11973 /* Handling opcode 100 insns.  */
11974
11975 static int
11976 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11977 {
11978   struct regcache *reg_cache = thumb_insn_r->regcache;
11979   uint32_t record_buf[8], record_buf_mem[8];
11980
11981   uint32_t reg_src1 = 0;
11982   uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11983
11984   ULONGEST u_regval = 0;
11985
11986   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11987
11988   if (3 == opcode)
11989     {
11990       /* LDR(4).  */
11991       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11992       record_buf[0] = reg_src1;
11993       thumb_insn_r->reg_rec_count = 1;
11994     }
11995   else if (1 == opcode)
11996     {
11997       /* LDRH(1).  */
11998       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11999       record_buf[0] = reg_src1;
12000       thumb_insn_r->reg_rec_count = 1;
12001     }
12002   else if (2 == opcode)
12003     {
12004       /* STR(3).  */
12005       immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
12006       regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12007       record_buf_mem[0] = 4;
12008       record_buf_mem[1] = u_regval + (immed_8 * 4);
12009       thumb_insn_r->mem_rec_count = 1;
12010     }
12011   else if (0 == opcode)
12012     {
12013       /* STRH(1).  */
12014       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12015       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12016       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12017       record_buf_mem[0] = 2;
12018       record_buf_mem[1] = u_regval + (immed_5 * 2);
12019       thumb_insn_r->mem_rec_count = 1;
12020     }
12021
12022   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12023   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12024              record_buf_mem);
12025
12026   return 0;
12027 }
12028
12029 /* Handling opcode 101 insns.  */
12030
12031 static int
12032 thumb_record_misc (insn_decode_record *thumb_insn_r)
12033 {
12034   struct regcache *reg_cache = thumb_insn_r->regcache;
12035
12036   uint32_t opcode = 0;
12037   uint32_t register_bits = 0, register_count = 0;
12038   uint32_t index = 0, start_address = 0;
12039   uint32_t record_buf[24], record_buf_mem[48];
12040   uint32_t reg_src1;
12041
12042   ULONGEST u_regval = 0;
12043
12044   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12045
12046   if (opcode == 0 || opcode == 1)
12047     {
12048       /* ADR and ADD (SP plus immediate) */
12049
12050       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12051       record_buf[0] = reg_src1;
12052       thumb_insn_r->reg_rec_count = 1;
12053     }
12054   else
12055     {
12056       /* Miscellaneous 16-bit instructions */
12057       uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
12058
12059       switch (opcode2)
12060         {
12061         case 6:
12062           /* SETEND and CPS */
12063           break;
12064         case 0:
12065           /* ADD/SUB (SP plus immediate)  */
12066           reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12067           record_buf[0] = ARM_SP_REGNUM;
12068           thumb_insn_r->reg_rec_count = 1;
12069           break;
12070         case 1: /* fall through  */
12071         case 3: /* fall through  */
12072         case 9: /* fall through  */
12073         case 11:
12074           /* CBNZ, CBZ */
12075           break;
12076         case 2:
12077           /* SXTH, SXTB, UXTH, UXTB */
12078           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12079           thumb_insn_r->reg_rec_count = 1;
12080           break;
12081         case 4: /* fall through  */
12082         case 5:
12083           /* PUSH.  */
12084           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12085           regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12086           while (register_bits)
12087             {
12088               if (register_bits & 0x00000001)
12089                 register_count++;
12090               register_bits = register_bits >> 1;
12091             }
12092           start_address = u_regval -  \
12093             (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12094           thumb_insn_r->mem_rec_count = register_count;
12095           while (register_count)
12096             {
12097               record_buf_mem[(register_count * 2) - 1] = start_address;
12098               record_buf_mem[(register_count * 2) - 2] = 4;
12099               start_address = start_address + 4;
12100               register_count--;
12101             }
12102           record_buf[0] = ARM_SP_REGNUM;
12103           thumb_insn_r->reg_rec_count = 1;
12104           break;
12105         case 10:
12106           /* REV, REV16, REVSH */
12107           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12108           thumb_insn_r->reg_rec_count = 1;
12109           break;
12110         case 12: /* fall through  */
12111         case 13:
12112           /* POP.  */
12113           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12114           while (register_bits)
12115             {
12116               if (register_bits & 0x00000001)
12117                 record_buf[index++] = register_count;
12118               register_bits = register_bits >> 1;
12119               register_count++;
12120             }
12121           record_buf[index++] = ARM_PS_REGNUM;
12122           record_buf[index++] = ARM_SP_REGNUM;
12123           thumb_insn_r->reg_rec_count = index;
12124           break;
12125         case 0xe:
12126           /* BKPT insn.  */
12127           /* Handle enhanced software breakpoint insn, BKPT.  */
12128           /* CPSR is changed to be executed in ARM state,  disabling normal
12129              interrupts, entering abort mode.  */
12130           /* According to high vector configuration PC is set.  */
12131           /* User hits breakpoint and type reverse, in that case, we need to go back with 
12132              previous CPSR and Program Counter.  */
12133           record_buf[0] = ARM_PS_REGNUM;
12134           record_buf[1] = ARM_LR_REGNUM;
12135           thumb_insn_r->reg_rec_count = 2;
12136           /* We need to save SPSR value, which is not yet done.  */
12137           printf_unfiltered (_("Process record does not support instruction "
12138                                "0x%0x at address %s.\n"),
12139                              thumb_insn_r->arm_insn,
12140                              paddress (thumb_insn_r->gdbarch,
12141                                        thumb_insn_r->this_addr));
12142           return -1;
12143
12144         case 0xf:
12145           /* If-Then, and hints */
12146           break;
12147         default:
12148           return -1;
12149         };
12150     }
12151
12152   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12153   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12154              record_buf_mem);
12155
12156   return 0;
12157 }
12158
12159 /* Handling opcode 110 insns.  */
12160
12161 static int
12162 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
12163 {
12164   struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12165   struct regcache *reg_cache = thumb_insn_r->regcache;
12166
12167   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
12168   uint32_t reg_src1 = 0;
12169   uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12170   uint32_t index = 0, start_address = 0;
12171   uint32_t record_buf[24], record_buf_mem[48];
12172
12173   ULONGEST u_regval = 0;
12174
12175   opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12176   opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12177
12178   if (1 == opcode2)
12179     {
12180
12181       /* LDMIA.  */
12182       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12183       /* Get Rn.  */
12184       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12185       while (register_bits)
12186         {
12187           if (register_bits & 0x00000001)
12188             record_buf[index++] = register_count;
12189           register_bits = register_bits >> 1;
12190           register_count++;
12191         }
12192       record_buf[index++] = reg_src1;
12193       thumb_insn_r->reg_rec_count = index;
12194     }
12195   else if (0 == opcode2)
12196     {
12197       /* It handles both STMIA.  */
12198       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12199       /* Get Rn.  */
12200       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12201       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12202       while (register_bits)
12203         {
12204           if (register_bits & 0x00000001)
12205             register_count++;
12206           register_bits = register_bits >> 1;
12207         }
12208       start_address = u_regval;
12209       thumb_insn_r->mem_rec_count = register_count;
12210       while (register_count)
12211         {
12212           record_buf_mem[(register_count * 2) - 1] = start_address;
12213           record_buf_mem[(register_count * 2) - 2] = 4;
12214           start_address = start_address + 4;
12215           register_count--;
12216         }
12217     }
12218   else if (0x1F == opcode1)
12219     {
12220         /* Handle arm syscall insn.  */
12221         if (tdep->arm_syscall_record != NULL)
12222           {
12223             regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12224             ret = tdep->arm_syscall_record (reg_cache, u_regval);
12225           }
12226         else
12227           {
12228             printf_unfiltered (_("no syscall record support\n"));
12229             return -1;
12230           }
12231     }
12232
12233   /* B (1), conditional branch is automatically taken care in process_record,
12234     as PC is saved there.  */
12235
12236   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12237   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12238              record_buf_mem);
12239
12240   return ret;
12241 }
12242
12243 /* Handling opcode 111 insns.  */
12244
12245 static int
12246 thumb_record_branch (insn_decode_record *thumb_insn_r)
12247 {
12248   uint32_t record_buf[8];
12249   uint32_t bits_h = 0;
12250
12251   bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12252
12253   if (2 == bits_h || 3 == bits_h)
12254     {
12255       /* BL */
12256       record_buf[0] = ARM_LR_REGNUM;
12257       thumb_insn_r->reg_rec_count = 1;
12258     }
12259   else if (1 == bits_h)
12260     {
12261       /* BLX(1). */
12262       record_buf[0] = ARM_PS_REGNUM;
12263       record_buf[1] = ARM_LR_REGNUM;
12264       thumb_insn_r->reg_rec_count = 2;
12265     }
12266
12267   /* B(2) is automatically taken care in process_record, as PC is 
12268      saved there.  */
12269
12270   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12271
12272   return 0;     
12273 }
12274
12275 /* Handler for thumb2 load/store multiple instructions.  */
12276
12277 static int
12278 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12279 {
12280   struct regcache *reg_cache = thumb2_insn_r->regcache;
12281
12282   uint32_t reg_rn, op;
12283   uint32_t register_bits = 0, register_count = 0;
12284   uint32_t index = 0, start_address = 0;
12285   uint32_t record_buf[24], record_buf_mem[48];
12286
12287   ULONGEST u_regval = 0;
12288
12289   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12290   op = bits (thumb2_insn_r->arm_insn, 23, 24);
12291
12292   if (0 == op || 3 == op)
12293     {
12294       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12295         {
12296           /* Handle RFE instruction.  */
12297           record_buf[0] = ARM_PS_REGNUM;
12298           thumb2_insn_r->reg_rec_count = 1;
12299         }
12300       else
12301         {
12302           /* Handle SRS instruction after reading banked SP.  */
12303           return arm_record_unsupported_insn (thumb2_insn_r);
12304         }
12305     }
12306   else if (1 == op || 2 == op)
12307     {
12308       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12309         {
12310           /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
12311           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12312           while (register_bits)
12313             {
12314               if (register_bits & 0x00000001)
12315                 record_buf[index++] = register_count;
12316
12317               register_count++;
12318               register_bits = register_bits >> 1;
12319             }
12320           record_buf[index++] = reg_rn;
12321           record_buf[index++] = ARM_PS_REGNUM;
12322           thumb2_insn_r->reg_rec_count = index;
12323         }
12324       else
12325         {
12326           /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
12327           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12328           regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12329           while (register_bits)
12330             {
12331               if (register_bits & 0x00000001)
12332                 register_count++;
12333
12334               register_bits = register_bits >> 1;
12335             }
12336
12337           if (1 == op)
12338             {
12339               /* Start address calculation for LDMDB/LDMEA.  */
12340               start_address = u_regval;
12341             }
12342           else if (2 == op)
12343             {
12344               /* Start address calculation for LDMDB/LDMEA.  */
12345               start_address = u_regval - register_count * 4;
12346             }
12347
12348           thumb2_insn_r->mem_rec_count = register_count;
12349           while (register_count)
12350             {
12351               record_buf_mem[register_count * 2 - 1] = start_address;
12352               record_buf_mem[register_count * 2 - 2] = 4;
12353               start_address = start_address + 4;
12354               register_count--;
12355             }
12356           record_buf[0] = reg_rn;
12357           record_buf[1] = ARM_PS_REGNUM;
12358           thumb2_insn_r->reg_rec_count = 2;
12359         }
12360     }
12361
12362   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12363             record_buf_mem);
12364   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12365             record_buf);
12366   return ARM_RECORD_SUCCESS;
12367 }
12368
12369 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12370    instructions.  */
12371
12372 static int
12373 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12374 {
12375   struct regcache *reg_cache = thumb2_insn_r->regcache;
12376
12377   uint32_t reg_rd, reg_rn, offset_imm;
12378   uint32_t reg_dest1, reg_dest2;
12379   uint32_t address, offset_addr;
12380   uint32_t record_buf[8], record_buf_mem[8];
12381   uint32_t op1, op2, op3;
12382
12383   ULONGEST u_regval[2];
12384
12385   op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12386   op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12387   op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12388
12389   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12390     {
12391       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12392         {
12393           reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12394           record_buf[0] = reg_dest1;
12395           record_buf[1] = ARM_PS_REGNUM;
12396           thumb2_insn_r->reg_rec_count = 2;
12397         }
12398
12399       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12400         {
12401           reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12402           record_buf[2] = reg_dest2;
12403           thumb2_insn_r->reg_rec_count = 3;
12404         }
12405     }
12406   else
12407     {
12408       reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12409       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12410
12411       if (0 == op1 && 0 == op2)
12412         {
12413           /* Handle STREX.  */
12414           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12415           address = u_regval[0] + (offset_imm * 4);
12416           record_buf_mem[0] = 4;
12417           record_buf_mem[1] = address;
12418           thumb2_insn_r->mem_rec_count = 1;
12419           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12420           record_buf[0] = reg_rd;
12421           thumb2_insn_r->reg_rec_count = 1;
12422         }
12423       else if (1 == op1 && 0 == op2)
12424         {
12425           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12426           record_buf[0] = reg_rd;
12427           thumb2_insn_r->reg_rec_count = 1;
12428           address = u_regval[0];
12429           record_buf_mem[1] = address;
12430
12431           if (4 == op3)
12432             {
12433               /* Handle STREXB.  */
12434               record_buf_mem[0] = 1;
12435               thumb2_insn_r->mem_rec_count = 1;
12436             }
12437           else if (5 == op3)
12438             {
12439               /* Handle STREXH.  */
12440               record_buf_mem[0] = 2 ;
12441               thumb2_insn_r->mem_rec_count = 1;
12442             }
12443           else if (7 == op3)
12444             {
12445               /* Handle STREXD.  */
12446               address = u_regval[0];
12447               record_buf_mem[0] = 4;
12448               record_buf_mem[2] = 4;
12449               record_buf_mem[3] = address + 4;
12450               thumb2_insn_r->mem_rec_count = 2;
12451             }
12452         }
12453       else
12454         {
12455           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12456
12457           if (bit (thumb2_insn_r->arm_insn, 24))
12458             {
12459               if (bit (thumb2_insn_r->arm_insn, 23))
12460                 offset_addr = u_regval[0] + (offset_imm * 4);
12461               else
12462                 offset_addr = u_regval[0] - (offset_imm * 4);
12463
12464               address = offset_addr;
12465             }
12466           else
12467             address = u_regval[0];
12468
12469           record_buf_mem[0] = 4;
12470           record_buf_mem[1] = address;
12471           record_buf_mem[2] = 4;
12472           record_buf_mem[3] = address + 4;
12473           thumb2_insn_r->mem_rec_count = 2;
12474           record_buf[0] = reg_rn;
12475           thumb2_insn_r->reg_rec_count = 1;
12476         }
12477     }
12478
12479   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12480             record_buf);
12481   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12482             record_buf_mem);
12483   return ARM_RECORD_SUCCESS;
12484 }
12485
12486 /* Handler for thumb2 data processing (shift register and modified immediate)
12487    instructions.  */
12488
12489 static int
12490 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12491 {
12492   uint32_t reg_rd, op;
12493   uint32_t record_buf[8];
12494
12495   op = bits (thumb2_insn_r->arm_insn, 21, 24);
12496   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12497
12498   if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12499     {
12500       record_buf[0] = ARM_PS_REGNUM;
12501       thumb2_insn_r->reg_rec_count = 1;
12502     }
12503   else
12504     {
12505       record_buf[0] = reg_rd;
12506       record_buf[1] = ARM_PS_REGNUM;
12507       thumb2_insn_r->reg_rec_count = 2;
12508     }
12509
12510   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12511             record_buf);
12512   return ARM_RECORD_SUCCESS;
12513 }
12514
12515 /* Generic handler for thumb2 instructions which effect destination and PS
12516    registers.  */
12517
12518 static int
12519 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12520 {
12521   uint32_t reg_rd;
12522   uint32_t record_buf[8];
12523
12524   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12525
12526   record_buf[0] = reg_rd;
12527   record_buf[1] = ARM_PS_REGNUM;
12528   thumb2_insn_r->reg_rec_count = 2;
12529
12530   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12531             record_buf);
12532   return ARM_RECORD_SUCCESS;
12533 }
12534
12535 /* Handler for thumb2 branch and miscellaneous control instructions.  */
12536
12537 static int
12538 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12539 {
12540   uint32_t op, op1, op2;
12541   uint32_t record_buf[8];
12542
12543   op = bits (thumb2_insn_r->arm_insn, 20, 26);
12544   op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12545   op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12546
12547   /* Handle MSR insn.  */
12548   if (!(op1 & 0x2) && 0x38 == op)
12549     {
12550       if (!(op2 & 0x3))
12551         {
12552           /* CPSR is going to be changed.  */
12553           record_buf[0] = ARM_PS_REGNUM;
12554           thumb2_insn_r->reg_rec_count = 1;
12555         }
12556       else
12557         {
12558           arm_record_unsupported_insn(thumb2_insn_r);
12559           return -1;
12560         }
12561     }
12562   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12563     {
12564       /* BLX.  */
12565       record_buf[0] = ARM_PS_REGNUM;
12566       record_buf[1] = ARM_LR_REGNUM;
12567       thumb2_insn_r->reg_rec_count = 2;
12568     }
12569
12570   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12571             record_buf);
12572   return ARM_RECORD_SUCCESS;
12573 }
12574
12575 /* Handler for thumb2 store single data item instructions.  */
12576
12577 static int
12578 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12579 {
12580   struct regcache *reg_cache = thumb2_insn_r->regcache;
12581
12582   uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12583   uint32_t address, offset_addr;
12584   uint32_t record_buf[8], record_buf_mem[8];
12585   uint32_t op1, op2;
12586
12587   ULONGEST u_regval[2];
12588
12589   op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12590   op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12591   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12592   regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12593
12594   if (bit (thumb2_insn_r->arm_insn, 23))
12595     {
12596       /* T2 encoding.  */
12597       offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12598       offset_addr = u_regval[0] + offset_imm;
12599       address = offset_addr;
12600     }
12601   else
12602     {
12603       /* T3 encoding.  */
12604       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12605         {
12606           /* Handle STRB (register).  */
12607           reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12608           regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12609           shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12610           offset_addr = u_regval[1] << shift_imm;
12611           address = u_regval[0] + offset_addr;
12612         }
12613       else
12614         {
12615           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12616           if (bit (thumb2_insn_r->arm_insn, 10))
12617             {
12618               if (bit (thumb2_insn_r->arm_insn, 9))
12619                 offset_addr = u_regval[0] + offset_imm;
12620               else
12621                 offset_addr = u_regval[0] - offset_imm;
12622
12623               address = offset_addr;
12624             }
12625           else
12626             address = u_regval[0];
12627         }
12628     }
12629
12630   switch (op1)
12631     {
12632       /* Store byte instructions.  */
12633       case 4:
12634       case 0:
12635         record_buf_mem[0] = 1;
12636         break;
12637       /* Store half word instructions.  */
12638       case 1:
12639       case 5:
12640         record_buf_mem[0] = 2;
12641         break;
12642       /* Store word instructions.  */
12643       case 2:
12644       case 6:
12645         record_buf_mem[0] = 4;
12646         break;
12647
12648       default:
12649         gdb_assert_not_reached ("no decoding pattern found");
12650         break;
12651     }
12652
12653   record_buf_mem[1] = address;
12654   thumb2_insn_r->mem_rec_count = 1;
12655   record_buf[0] = reg_rn;
12656   thumb2_insn_r->reg_rec_count = 1;
12657
12658   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12659             record_buf);
12660   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12661             record_buf_mem);
12662   return ARM_RECORD_SUCCESS;
12663 }
12664
12665 /* Handler for thumb2 load memory hints instructions.  */
12666
12667 static int
12668 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12669 {
12670   uint32_t record_buf[8];
12671   uint32_t reg_rt, reg_rn;
12672
12673   reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12674   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12675
12676   if (ARM_PC_REGNUM != reg_rt)
12677     {
12678       record_buf[0] = reg_rt;
12679       record_buf[1] = reg_rn;
12680       record_buf[2] = ARM_PS_REGNUM;
12681       thumb2_insn_r->reg_rec_count = 3;
12682
12683       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12684                 record_buf);
12685       return ARM_RECORD_SUCCESS;
12686     }
12687
12688   return ARM_RECORD_FAILURE;
12689 }
12690
12691 /* Handler for thumb2 load word instructions.  */
12692
12693 static int
12694 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12695 {
12696   uint32_t record_buf[8];
12697
12698   record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12699   record_buf[1] = ARM_PS_REGNUM;
12700   thumb2_insn_r->reg_rec_count = 2;
12701
12702   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12703             record_buf);
12704   return ARM_RECORD_SUCCESS;
12705 }
12706
12707 /* Handler for thumb2 long multiply, long multiply accumulate, and
12708    divide instructions.  */
12709
12710 static int
12711 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12712 {
12713   uint32_t opcode1 = 0, opcode2 = 0;
12714   uint32_t record_buf[8];
12715
12716   opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12717   opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12718
12719   if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12720     {
12721       /* Handle SMULL, UMULL, SMULAL.  */
12722       /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
12723       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12724       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12725       record_buf[2] = ARM_PS_REGNUM;
12726       thumb2_insn_r->reg_rec_count = 3;
12727     }
12728   else if (1 == opcode1 || 3 == opcode2)
12729     {
12730       /* Handle SDIV and UDIV.  */
12731       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12732       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12733       record_buf[2] = ARM_PS_REGNUM;
12734       thumb2_insn_r->reg_rec_count = 3;
12735     }
12736   else
12737     return ARM_RECORD_FAILURE;
12738
12739   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12740             record_buf);
12741   return ARM_RECORD_SUCCESS;
12742 }
12743
12744 /* Record handler for thumb32 coprocessor instructions.  */
12745
12746 static int
12747 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12748 {
12749   if (bit (thumb2_insn_r->arm_insn, 25))
12750     return arm_record_coproc_data_proc (thumb2_insn_r);
12751   else
12752     return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12753 }
12754
12755 /* Record handler for advance SIMD structure load/store instructions.  */
12756
12757 static int
12758 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12759 {
12760   struct regcache *reg_cache = thumb2_insn_r->regcache;
12761   uint32_t l_bit, a_bit, b_bits;
12762   uint32_t record_buf[128], record_buf_mem[128];
12763   uint32_t reg_rn, reg_vd, address, f_elem;
12764   uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12765   uint8_t f_ebytes;
12766
12767   l_bit = bit (thumb2_insn_r->arm_insn, 21);
12768   a_bit = bit (thumb2_insn_r->arm_insn, 23);
12769   b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12770   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12771   reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12772   reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12773   f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12774   f_elem = 8 / f_ebytes;
12775
12776   if (!l_bit)
12777     {
12778       ULONGEST u_regval = 0;
12779       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12780       address = u_regval;
12781
12782       if (!a_bit)
12783         {
12784           /* Handle VST1.  */
12785           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12786             {
12787               if (b_bits == 0x07)
12788                 bf_regs = 1;
12789               else if (b_bits == 0x0a)
12790                 bf_regs = 2;
12791               else if (b_bits == 0x06)
12792                 bf_regs = 3;
12793               else if (b_bits == 0x02)
12794                 bf_regs = 4;
12795               else
12796                 bf_regs = 0;
12797
12798               for (index_r = 0; index_r < bf_regs; index_r++)
12799                 {
12800                   for (index_e = 0; index_e < f_elem; index_e++)
12801                     {
12802                       record_buf_mem[index_m++] = f_ebytes;
12803                       record_buf_mem[index_m++] = address;
12804                       address = address + f_ebytes;
12805                       thumb2_insn_r->mem_rec_count += 1;
12806                     }
12807                 }
12808             }
12809           /* Handle VST2.  */
12810           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12811             {
12812               if (b_bits == 0x09 || b_bits == 0x08)
12813                 bf_regs = 1;
12814               else if (b_bits == 0x03)
12815                 bf_regs = 2;
12816               else
12817                 bf_regs = 0;
12818
12819               for (index_r = 0; index_r < bf_regs; index_r++)
12820                 for (index_e = 0; index_e < f_elem; index_e++)
12821                   {
12822                     for (loop_t = 0; loop_t < 2; loop_t++)
12823                       {
12824                         record_buf_mem[index_m++] = f_ebytes;
12825                         record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12826                         thumb2_insn_r->mem_rec_count += 1;
12827                       }
12828                     address = address + (2 * f_ebytes);
12829                   }
12830             }
12831           /* Handle VST3.  */
12832           else if ((b_bits & 0x0e) == 0x04)
12833             {
12834               for (index_e = 0; index_e < f_elem; index_e++)
12835                 {
12836                   for (loop_t = 0; loop_t < 3; loop_t++)
12837                     {
12838                       record_buf_mem[index_m++] = f_ebytes;
12839                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12840                       thumb2_insn_r->mem_rec_count += 1;
12841                     }
12842                   address = address + (3 * f_ebytes);
12843                 }
12844             }
12845           /* Handle VST4.  */
12846           else if (!(b_bits & 0x0e))
12847             {
12848               for (index_e = 0; index_e < f_elem; index_e++)
12849                 {
12850                   for (loop_t = 0; loop_t < 4; loop_t++)
12851                     {
12852                       record_buf_mem[index_m++] = f_ebytes;
12853                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12854                       thumb2_insn_r->mem_rec_count += 1;
12855                     }
12856                   address = address + (4 * f_ebytes);
12857                 }
12858             }
12859         }
12860       else
12861         {
12862           uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12863
12864           if (bft_size == 0x00)
12865             f_ebytes = 1;
12866           else if (bft_size == 0x01)
12867             f_ebytes = 2;
12868           else if (bft_size == 0x02)
12869             f_ebytes = 4;
12870           else
12871             f_ebytes = 0;
12872
12873           /* Handle VST1.  */
12874           if (!(b_bits & 0x0b) || b_bits == 0x08)
12875             thumb2_insn_r->mem_rec_count = 1;
12876           /* Handle VST2.  */
12877           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12878             thumb2_insn_r->mem_rec_count = 2;
12879           /* Handle VST3.  */
12880           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12881             thumb2_insn_r->mem_rec_count = 3;
12882           /* Handle VST4.  */
12883           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12884             thumb2_insn_r->mem_rec_count = 4;
12885
12886           for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12887             {
12888               record_buf_mem[index_m] = f_ebytes;
12889               record_buf_mem[index_m] = address + (index_m * f_ebytes);
12890             }
12891         }
12892     }
12893   else
12894     {
12895       if (!a_bit)
12896         {
12897           /* Handle VLD1.  */
12898           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12899             thumb2_insn_r->reg_rec_count = 1;
12900           /* Handle VLD2.  */
12901           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12902             thumb2_insn_r->reg_rec_count = 2;
12903           /* Handle VLD3.  */
12904           else if ((b_bits & 0x0e) == 0x04)
12905             thumb2_insn_r->reg_rec_count = 3;
12906           /* Handle VLD4.  */
12907           else if (!(b_bits & 0x0e))
12908             thumb2_insn_r->reg_rec_count = 4;
12909         }
12910       else
12911         {
12912           /* Handle VLD1.  */
12913           if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12914             thumb2_insn_r->reg_rec_count = 1;
12915           /* Handle VLD2.  */
12916           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12917             thumb2_insn_r->reg_rec_count = 2;
12918           /* Handle VLD3.  */
12919           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12920             thumb2_insn_r->reg_rec_count = 3;
12921           /* Handle VLD4.  */
12922           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12923             thumb2_insn_r->reg_rec_count = 4;
12924
12925           for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12926             record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12927         }
12928     }
12929
12930   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12931     {
12932       record_buf[index_r] = reg_rn;
12933       thumb2_insn_r->reg_rec_count += 1;
12934     }
12935
12936   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12937             record_buf);
12938   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12939             record_buf_mem);
12940   return 0;
12941 }
12942
12943 /* Decodes thumb2 instruction type and invokes its record handler.  */
12944
12945 static unsigned int
12946 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12947 {
12948   uint32_t op, op1, op2;
12949
12950   op = bit (thumb2_insn_r->arm_insn, 15);
12951   op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12952   op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12953
12954   if (op1 == 0x01)
12955     {
12956       if (!(op2 & 0x64 ))
12957         {
12958           /* Load/store multiple instruction.  */
12959           return thumb2_record_ld_st_multiple (thumb2_insn_r);
12960         }
12961       else if ((op2 & 0x64) == 0x4)
12962         {
12963           /* Load/store (dual/exclusive) and table branch instruction.  */
12964           return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12965         }
12966       else if ((op2 & 0x60) == 0x20)
12967         {
12968           /* Data-processing (shifted register).  */
12969           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12970         }
12971       else if (op2 & 0x40)
12972         {
12973           /* Co-processor instructions.  */
12974           return thumb2_record_coproc_insn (thumb2_insn_r);
12975         }
12976     }
12977   else if (op1 == 0x02)
12978     {
12979       if (op)
12980         {
12981           /* Branches and miscellaneous control instructions.  */
12982           return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12983         }
12984       else if (op2 & 0x20)
12985         {
12986           /* Data-processing (plain binary immediate) instruction.  */
12987           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12988         }
12989       else
12990         {
12991           /* Data-processing (modified immediate).  */
12992           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12993         }
12994     }
12995   else if (op1 == 0x03)
12996     {
12997       if (!(op2 & 0x71 ))
12998         {
12999           /* Store single data item.  */
13000           return thumb2_record_str_single_data (thumb2_insn_r);
13001         }
13002       else if (!((op2 & 0x71) ^ 0x10))
13003         {
13004           /* Advanced SIMD or structure load/store instructions.  */
13005           return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
13006         }
13007       else if (!((op2 & 0x67) ^ 0x01))
13008         {
13009           /* Load byte, memory hints instruction.  */
13010           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13011         }
13012       else if (!((op2 & 0x67) ^ 0x03))
13013         {
13014           /* Load halfword, memory hints instruction.  */
13015           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13016         }
13017       else if (!((op2 & 0x67) ^ 0x05))
13018         {
13019           /* Load word instruction.  */
13020           return thumb2_record_ld_word (thumb2_insn_r);
13021         }
13022       else if (!((op2 & 0x70) ^ 0x20))
13023         {
13024           /* Data-processing (register) instruction.  */
13025           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13026         }
13027       else if (!((op2 & 0x78) ^ 0x30))
13028         {
13029           /* Multiply, multiply accumulate, abs diff instruction.  */
13030           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13031         }
13032       else if (!((op2 & 0x78) ^ 0x38))
13033         {
13034           /* Long multiply, long multiply accumulate, and divide.  */
13035           return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13036         }
13037       else if (op2 & 0x40)
13038         {
13039           /* Co-processor instructions.  */
13040           return thumb2_record_coproc_insn (thumb2_insn_r);
13041         }
13042    }
13043
13044   return -1;
13045 }
13046
13047 namespace {
13048 /* Abstract memory reader.  */
13049
13050 class abstract_memory_reader
13051 {
13052 public:
13053   /* Read LEN bytes of target memory at address MEMADDR, placing the
13054      results in GDB's memory at BUF.  Return true on success.  */
13055
13056   virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
13057 };
13058
13059 /* Instruction reader from real target.  */
13060
13061 class instruction_reader : public abstract_memory_reader
13062 {
13063  public:
13064   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13065   {
13066     if (target_read_memory (memaddr, buf, len))
13067       return false;
13068     else
13069       return true;
13070   }
13071 };
13072
13073 } // namespace
13074
13075 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
13076 and positive val on fauilure.  */
13077
13078 static int
13079 extract_arm_insn (abstract_memory_reader& reader,
13080                   insn_decode_record *insn_record, uint32_t insn_size)
13081 {
13082   gdb_byte buf[insn_size];
13083
13084   memset (&buf[0], 0, insn_size);
13085   
13086   if (!reader.read (insn_record->this_addr, buf, insn_size))
13087     return 1;
13088   insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13089                            insn_size, 
13090                            gdbarch_byte_order_for_code (insn_record->gdbarch));
13091   return 0;
13092 }
13093
13094 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13095
13096 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13097    dispatch it.  */
13098
13099 static int
13100 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13101              record_type_t record_type, uint32_t insn_size)
13102 {
13103
13104   /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13105      instruction.  */
13106   static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13107   {
13108     arm_record_data_proc_misc_ld_str,   /* 000.  */
13109     arm_record_data_proc_imm,           /* 001.  */
13110     arm_record_ld_st_imm_offset,        /* 010.  */
13111     arm_record_ld_st_reg_offset,        /* 011.  */
13112     arm_record_ld_st_multiple,          /* 100.  */
13113     arm_record_b_bl,                    /* 101.  */
13114     arm_record_asimd_vfp_coproc,        /* 110.  */
13115     arm_record_coproc_data_proc         /* 111.  */
13116   };
13117
13118   /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13119      instruction.  */
13120   static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13121   { \
13122     thumb_record_shift_add_sub,        /* 000.  */
13123     thumb_record_add_sub_cmp_mov,      /* 001.  */
13124     thumb_record_ld_st_reg_offset,     /* 010.  */
13125     thumb_record_ld_st_imm_offset,     /* 011.  */
13126     thumb_record_ld_st_stack,          /* 100.  */
13127     thumb_record_misc,                 /* 101.  */
13128     thumb_record_ldm_stm_swi,          /* 110.  */
13129     thumb_record_branch                /* 111.  */
13130   };
13131
13132   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
13133   uint32_t insn_id = 0;
13134
13135   if (extract_arm_insn (reader, arm_record, insn_size))
13136     {
13137       if (record_debug)
13138         {
13139           printf_unfiltered (_("Process record: error reading memory at "
13140                                "addr %s len = %d.\n"),
13141                              paddress (arm_record->gdbarch,
13142                                        arm_record->this_addr), insn_size);
13143         }
13144       return -1;
13145     }
13146   else if (ARM_RECORD == record_type)
13147     {
13148       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13149       insn_id = bits (arm_record->arm_insn, 25, 27);
13150
13151       if (arm_record->cond == 0xf)
13152         ret = arm_record_extension_space (arm_record);
13153       else
13154         {
13155           /* If this insn has fallen into extension space
13156              then we need not decode it anymore.  */
13157           ret = arm_handle_insn[insn_id] (arm_record);
13158         }
13159       if (ret != ARM_RECORD_SUCCESS)
13160         {
13161           arm_record_unsupported_insn (arm_record);
13162           ret = -1;
13163         }
13164     }
13165   else if (THUMB_RECORD == record_type)
13166     {
13167       /* As thumb does not have condition codes, we set negative.  */
13168       arm_record->cond = -1;
13169       insn_id = bits (arm_record->arm_insn, 13, 15);
13170       ret = thumb_handle_insn[insn_id] (arm_record);
13171       if (ret != ARM_RECORD_SUCCESS)
13172         {
13173           arm_record_unsupported_insn (arm_record);
13174           ret = -1;
13175         }
13176     }
13177   else if (THUMB2_RECORD == record_type)
13178     {
13179       /* As thumb does not have condition codes, we set negative.  */
13180       arm_record->cond = -1;
13181
13182       /* Swap first half of 32bit thumb instruction with second half.  */
13183       arm_record->arm_insn
13184         = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13185
13186       ret = thumb2_record_decode_insn_handler (arm_record);
13187
13188       if (ret != ARM_RECORD_SUCCESS)
13189         {
13190           arm_record_unsupported_insn (arm_record);
13191           ret = -1;
13192         }
13193     }
13194   else
13195     {
13196       /* Throw assertion.  */
13197       gdb_assert_not_reached ("not a valid instruction, could not decode");
13198     }
13199
13200   return ret;
13201 }
13202
13203 #if GDB_SELF_TEST
13204 namespace selftests {
13205
13206 /* Provide both 16-bit and 32-bit thumb instructions.  */
13207
13208 class instruction_reader_thumb : public abstract_memory_reader
13209 {
13210 public:
13211   template<size_t SIZE>
13212   instruction_reader_thumb (enum bfd_endian endian,
13213                             const uint16_t (&insns)[SIZE])
13214     : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13215   {}
13216
13217   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13218   {
13219     SELF_CHECK (len == 4 || len == 2);
13220     SELF_CHECK (memaddr % 2 == 0);
13221     SELF_CHECK ((memaddr / 2) < m_insns_size);
13222
13223     store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13224     if (len == 4)
13225       {
13226         store_unsigned_integer (&buf[2], 2, m_endian,
13227                                 m_insns[memaddr / 2 + 1]);
13228       }
13229     return true;
13230   }
13231
13232 private:
13233   enum bfd_endian m_endian;
13234   const uint16_t *m_insns;
13235   size_t m_insns_size;
13236 };
13237
13238 static void
13239 arm_record_test (void)
13240 {
13241   struct gdbarch_info info;
13242   gdbarch_info_init (&info);
13243   info.bfd_arch_info = bfd_scan_arch ("arm");
13244
13245   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13246
13247   SELF_CHECK (gdbarch != NULL);
13248
13249   /* 16-bit Thumb instructions.  */
13250   {
13251     insn_decode_record arm_record;
13252
13253     memset (&arm_record, 0, sizeof (insn_decode_record));
13254     arm_record.gdbarch = gdbarch;
13255
13256     static const uint16_t insns[] = {
13257       /* db b2  uxtb    r3, r3 */
13258       0xb2db,
13259       /* cd 58  ldr     r5, [r1, r3] */
13260       0x58cd,
13261     };
13262
13263     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13264     instruction_reader_thumb reader (endian, insns);
13265     int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13266                            THUMB_INSN_SIZE_BYTES);
13267
13268     SELF_CHECK (ret == 0);
13269     SELF_CHECK (arm_record.mem_rec_count == 0);
13270     SELF_CHECK (arm_record.reg_rec_count == 1);
13271     SELF_CHECK (arm_record.arm_regs[0] == 3);
13272
13273     arm_record.this_addr += 2;
13274     ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13275                        THUMB_INSN_SIZE_BYTES);
13276
13277     SELF_CHECK (ret == 0);
13278     SELF_CHECK (arm_record.mem_rec_count == 0);
13279     SELF_CHECK (arm_record.reg_rec_count == 1);
13280     SELF_CHECK (arm_record.arm_regs[0] == 5);
13281   }
13282
13283   /* 32-bit Thumb-2 instructions.  */
13284   {
13285     insn_decode_record arm_record;
13286
13287     memset (&arm_record, 0, sizeof (insn_decode_record));
13288     arm_record.gdbarch = gdbarch;
13289
13290     static const uint16_t insns[] = {
13291       /* 1d ee 70 7f     mrc    15, 0, r7, cr13, cr0, {3} */
13292       0xee1d, 0x7f70,
13293     };
13294
13295     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13296     instruction_reader_thumb reader (endian, insns);
13297     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13298                            THUMB2_INSN_SIZE_BYTES);
13299
13300     SELF_CHECK (ret == 0);
13301     SELF_CHECK (arm_record.mem_rec_count == 0);
13302     SELF_CHECK (arm_record.reg_rec_count == 1);
13303     SELF_CHECK (arm_record.arm_regs[0] == 7);
13304   }
13305 }
13306 } // namespace selftests
13307 #endif /* GDB_SELF_TEST */
13308
13309 /* Cleans up local record registers and memory allocations.  */
13310
13311 static void 
13312 deallocate_reg_mem (insn_decode_record *record)
13313 {
13314   xfree (record->arm_regs);
13315   xfree (record->arm_mems);    
13316 }
13317
13318
13319 /* Parse the current instruction and record the values of the registers and
13320    memory that will be changed in current instruction to record_arch_list".
13321    Return -1 if something is wrong.  */
13322
13323 int
13324 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13325                     CORE_ADDR insn_addr)
13326 {
13327
13328   uint32_t no_of_rec = 0;
13329   uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
13330   ULONGEST t_bit = 0, insn_id = 0;
13331
13332   ULONGEST u_regval = 0;
13333
13334   insn_decode_record arm_record;
13335
13336   memset (&arm_record, 0, sizeof (insn_decode_record));
13337   arm_record.regcache = regcache;
13338   arm_record.this_addr = insn_addr;
13339   arm_record.gdbarch = gdbarch;
13340
13341
13342   if (record_debug > 1)
13343     {
13344       fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13345                           "addr = %s\n",
13346       paddress (gdbarch, arm_record.this_addr));
13347     }
13348
13349   instruction_reader reader;
13350   if (extract_arm_insn (reader, &arm_record, 2))
13351     {
13352       if (record_debug)
13353         {
13354           printf_unfiltered (_("Process record: error reading memory at "
13355                                "addr %s len = %d.\n"),
13356                              paddress (arm_record.gdbarch,
13357                                        arm_record.this_addr), 2);
13358         }
13359       return -1;
13360     }
13361
13362   /* Check the insn, whether it is thumb or arm one.  */
13363
13364   t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13365   regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13366
13367
13368   if (!(u_regval & t_bit))
13369     {
13370       /* We are decoding arm insn.  */
13371       ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13372     }
13373   else
13374     {
13375       insn_id = bits (arm_record.arm_insn, 11, 15);
13376       /* is it thumb2 insn?  */
13377       if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13378         {
13379           ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13380                              THUMB2_INSN_SIZE_BYTES);
13381         }
13382       else
13383         {
13384           /* We are decoding thumb insn.  */
13385           ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13386                              THUMB_INSN_SIZE_BYTES);
13387         }
13388     }
13389
13390   if (0 == ret)
13391     {
13392       /* Record registers.  */
13393       record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13394       if (arm_record.arm_regs)
13395         {
13396           for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13397             {
13398               if (record_full_arch_list_add_reg
13399                   (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13400                 ret = -1;
13401             }
13402         }
13403       /* Record memories.  */
13404       if (arm_record.arm_mems)
13405         {
13406           for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13407             {
13408               if (record_full_arch_list_add_mem
13409                   ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13410                    arm_record.arm_mems[no_of_rec].len))
13411                 ret = -1;
13412             }
13413         }
13414
13415       if (record_full_arch_list_add_end ())
13416         ret = -1;
13417     }
13418
13419
13420   deallocate_reg_mem (&arm_record);
13421
13422   return ret;
13423 }