Rewrite arm_record_coproc_data_proc and arm_record_data_proc_misc_ld_str
[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 "observer.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                                                 struct 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 cleanup *cleanups;
2044   struct arm_exidx_data *data;
2045   asection *exidx, *extab;
2046   bfd_vma exidx_vma = 0, extab_vma = 0;
2047   bfd_size_type exidx_size = 0, extab_size = 0;
2048   gdb_byte *exidx_data = NULL, *extab_data = NULL;
2049   LONGEST i;
2050
2051   /* If we've already touched this file, do nothing.  */
2052   if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
2053     return;
2054   cleanups = make_cleanup (null_cleanup, NULL);
2055
2056   /* Read contents of exception table and index.  */
2057   exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
2058   if (exidx)
2059     {
2060       exidx_vma = bfd_section_vma (objfile->obfd, exidx);
2061       exidx_size = bfd_get_section_size (exidx);
2062       exidx_data = (gdb_byte *) xmalloc (exidx_size);
2063       make_cleanup (xfree, exidx_data);
2064
2065       if (!bfd_get_section_contents (objfile->obfd, exidx,
2066                                      exidx_data, 0, exidx_size))
2067         {
2068           do_cleanups (cleanups);
2069           return;
2070         }
2071     }
2072
2073   extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2074   if (extab)
2075     {
2076       extab_vma = bfd_section_vma (objfile->obfd, extab);
2077       extab_size = bfd_get_section_size (extab);
2078       extab_data = (gdb_byte *) xmalloc (extab_size);
2079       make_cleanup (xfree, extab_data);
2080
2081       if (!bfd_get_section_contents (objfile->obfd, extab,
2082                                      extab_data, 0, extab_size))
2083         {
2084           do_cleanups (cleanups);
2085           return;
2086         }
2087     }
2088
2089   /* Allocate exception table data structure.  */
2090   data = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct arm_exidx_data);
2091   set_objfile_data (objfile, arm_exidx_data_key, data);
2092   data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
2093                                        objfile->obfd->section_count,
2094                                        VEC(arm_exidx_entry_s) *);
2095
2096   /* Fill in exception table.  */
2097   for (i = 0; i < exidx_size / 8; i++)
2098     {
2099       struct arm_exidx_entry new_exidx_entry;
2100       bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data + i * 8);
2101       bfd_vma val = bfd_h_get_32 (objfile->obfd, exidx_data + i * 8 + 4);
2102       bfd_vma addr = 0, word = 0;
2103       int n_bytes = 0, n_words = 0;
2104       struct obj_section *sec;
2105       gdb_byte *entry = NULL;
2106
2107       /* Extract address of start of function.  */
2108       idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2109       idx += exidx_vma + i * 8;
2110
2111       /* Find section containing function and compute section offset.  */
2112       sec = arm_obj_section_from_vma (objfile, idx);
2113       if (sec == NULL)
2114         continue;
2115       idx -= bfd_get_section_vma (objfile->obfd, sec->the_bfd_section);
2116
2117       /* Determine address of exception table entry.  */
2118       if (val == 1)
2119         {
2120           /* EXIDX_CANTUNWIND -- no exception table entry present.  */
2121         }
2122       else if ((val & 0xff000000) == 0x80000000)
2123         {
2124           /* Exception table entry embedded in .ARM.exidx
2125              -- must be short form.  */
2126           word = val;
2127           n_bytes = 3;
2128         }
2129       else if (!(val & 0x80000000))
2130         {
2131           /* Exception table entry in .ARM.extab.  */
2132           addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2133           addr += exidx_vma + i * 8 + 4;
2134
2135           if (addr >= extab_vma && addr + 4 <= extab_vma + extab_size)
2136             {
2137               word = bfd_h_get_32 (objfile->obfd,
2138                                    extab_data + addr - extab_vma);
2139               addr += 4;
2140
2141               if ((word & 0xff000000) == 0x80000000)
2142                 {
2143                   /* Short form.  */
2144                   n_bytes = 3;
2145                 }
2146               else if ((word & 0xff000000) == 0x81000000
2147                        || (word & 0xff000000) == 0x82000000)
2148                 {
2149                   /* Long form.  */
2150                   n_bytes = 2;
2151                   n_words = ((word >> 16) & 0xff);
2152                 }
2153               else if (!(word & 0x80000000))
2154                 {
2155                   bfd_vma pers;
2156                   struct obj_section *pers_sec;
2157                   int gnu_personality = 0;
2158
2159                   /* Custom personality routine.  */
2160                   pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2161                   pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2162
2163                   /* Check whether we've got one of the variants of the
2164                      GNU personality routines.  */
2165                   pers_sec = arm_obj_section_from_vma (objfile, pers);
2166                   if (pers_sec)
2167                     {
2168                       static const char *personality[] = 
2169                         {
2170                           "__gcc_personality_v0",
2171                           "__gxx_personality_v0",
2172                           "__gcj_personality_v0",
2173                           "__gnu_objc_personality_v0",
2174                           NULL
2175                         };
2176
2177                       CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2178                       int k;
2179
2180                       for (k = 0; personality[k]; k++)
2181                         if (lookup_minimal_symbol_by_pc_name
2182                               (pc, personality[k], objfile))
2183                           {
2184                             gnu_personality = 1;
2185                             break;
2186                           }
2187                     }
2188
2189                   /* If so, the next word contains a word count in the high
2190                      byte, followed by the same unwind instructions as the
2191                      pre-defined forms.  */
2192                   if (gnu_personality
2193                       && addr + 4 <= extab_vma + extab_size)
2194                     {
2195                       word = bfd_h_get_32 (objfile->obfd,
2196                                            extab_data + addr - extab_vma);
2197                       addr += 4;
2198                       n_bytes = 3;
2199                       n_words = ((word >> 24) & 0xff);
2200                     }
2201                 }
2202             }
2203         }
2204
2205       /* Sanity check address.  */
2206       if (n_words)
2207         if (addr < extab_vma || addr + 4 * n_words > extab_vma + extab_size)
2208           n_words = n_bytes = 0;
2209
2210       /* The unwind instructions reside in WORD (only the N_BYTES least
2211          significant bytes are valid), followed by N_WORDS words in the
2212          extab section starting at ADDR.  */
2213       if (n_bytes || n_words)
2214         {
2215           gdb_byte *p = entry
2216             = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
2217                                           n_bytes + n_words * 4 + 1);
2218
2219           while (n_bytes--)
2220             *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2221
2222           while (n_words--)
2223             {
2224               word = bfd_h_get_32 (objfile->obfd,
2225                                    extab_data + addr - extab_vma);
2226               addr += 4;
2227
2228               *p++ = (gdb_byte) ((word >> 24) & 0xff);
2229               *p++ = (gdb_byte) ((word >> 16) & 0xff);
2230               *p++ = (gdb_byte) ((word >> 8) & 0xff);
2231               *p++ = (gdb_byte) (word & 0xff);
2232             }
2233
2234           /* Implied "Finish" to terminate the list.  */
2235           *p++ = 0xb0;
2236         }
2237
2238       /* Push entry onto vector.  They are guaranteed to always
2239          appear in order of increasing addresses.  */
2240       new_exidx_entry.addr = idx;
2241       new_exidx_entry.entry = entry;
2242       VEC_safe_push (arm_exidx_entry_s,
2243                      data->section_maps[sec->the_bfd_section->index],
2244                      &new_exidx_entry);
2245     }
2246
2247   do_cleanups (cleanups);
2248 }
2249
2250 /* Search for the exception table entry covering MEMADDR.  If one is found,
2251    return a pointer to its data.  Otherwise, return 0.  If START is non-NULL,
2252    set *START to the start of the region covered by this entry.  */
2253
2254 static gdb_byte *
2255 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2256 {
2257   struct obj_section *sec;
2258
2259   sec = find_pc_section (memaddr);
2260   if (sec != NULL)
2261     {
2262       struct arm_exidx_data *data;
2263       VEC(arm_exidx_entry_s) *map;
2264       struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2265       unsigned int idx;
2266
2267       data = ((struct arm_exidx_data *)
2268               objfile_data (sec->objfile, arm_exidx_data_key));
2269       if (data != NULL)
2270         {
2271           map = data->section_maps[sec->the_bfd_section->index];
2272           if (!VEC_empty (arm_exidx_entry_s, map))
2273             {
2274               struct arm_exidx_entry *map_sym;
2275
2276               idx = VEC_lower_bound (arm_exidx_entry_s, map, &map_key,
2277                                      arm_compare_exidx_entries);
2278
2279               /* VEC_lower_bound finds the earliest ordered insertion
2280                  point.  If the following symbol starts at this exact
2281                  address, we use that; otherwise, the preceding
2282                  exception table entry covers this address.  */
2283               if (idx < VEC_length (arm_exidx_entry_s, map))
2284                 {
2285                   map_sym = VEC_index (arm_exidx_entry_s, map, idx);
2286                   if (map_sym->addr == map_key.addr)
2287                     {
2288                       if (start)
2289                         *start = map_sym->addr + obj_section_addr (sec);
2290                       return map_sym->entry;
2291                     }
2292                 }
2293
2294               if (idx > 0)
2295                 {
2296                   map_sym = VEC_index (arm_exidx_entry_s, map, idx - 1);
2297                   if (start)
2298                     *start = map_sym->addr + obj_section_addr (sec);
2299                   return map_sym->entry;
2300                 }
2301             }
2302         }
2303     }
2304
2305   return NULL;
2306 }
2307
2308 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2309    instruction list from the ARM exception table entry ENTRY, allocate and
2310    return a prologue cache structure describing how to unwind this frame.
2311
2312    Return NULL if the unwinding instruction list contains a "spare",
2313    "reserved" or "refuse to unwind" instruction as defined in section
2314    "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2315    for the ARM Architecture" document.  */
2316
2317 static struct arm_prologue_cache *
2318 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2319 {
2320   CORE_ADDR vsp = 0;
2321   int vsp_valid = 0;
2322
2323   struct arm_prologue_cache *cache;
2324   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2325   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2326
2327   for (;;)
2328     {
2329       gdb_byte insn;
2330
2331       /* Whenever we reload SP, we actually have to retrieve its
2332          actual value in the current frame.  */
2333       if (!vsp_valid)
2334         {
2335           if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2336             {
2337               int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2338               vsp = get_frame_register_unsigned (this_frame, reg);
2339             }
2340           else
2341             {
2342               CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
2343               vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2344             }
2345
2346           vsp_valid = 1;
2347         }
2348
2349       /* Decode next unwind instruction.  */
2350       insn = *entry++;
2351
2352       if ((insn & 0xc0) == 0)
2353         {
2354           int offset = insn & 0x3f;
2355           vsp += (offset << 2) + 4;
2356         }
2357       else if ((insn & 0xc0) == 0x40)
2358         {
2359           int offset = insn & 0x3f;
2360           vsp -= (offset << 2) + 4;
2361         }
2362       else if ((insn & 0xf0) == 0x80)
2363         {
2364           int mask = ((insn & 0xf) << 8) | *entry++;
2365           int i;
2366
2367           /* The special case of an all-zero mask identifies
2368              "Refuse to unwind".  We return NULL to fall back
2369              to the prologue analyzer.  */
2370           if (mask == 0)
2371             return NULL;
2372
2373           /* Pop registers r4..r15 under mask.  */
2374           for (i = 0; i < 12; i++)
2375             if (mask & (1 << i))
2376               {
2377                 cache->saved_regs[4 + i].addr = vsp;
2378                 vsp += 4;
2379               }
2380
2381           /* Special-case popping SP -- we need to reload vsp.  */
2382           if (mask & (1 << (ARM_SP_REGNUM - 4)))
2383             vsp_valid = 0;
2384         }
2385       else if ((insn & 0xf0) == 0x90)
2386         {
2387           int reg = insn & 0xf;
2388
2389           /* Reserved cases.  */
2390           if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2391             return NULL;
2392
2393           /* Set SP from another register and mark VSP for reload.  */
2394           cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2395           vsp_valid = 0;
2396         }
2397       else if ((insn & 0xf0) == 0xa0)
2398         {
2399           int count = insn & 0x7;
2400           int pop_lr = (insn & 0x8) != 0;
2401           int i;
2402
2403           /* Pop r4..r[4+count].  */
2404           for (i = 0; i <= count; i++)
2405             {
2406               cache->saved_regs[4 + i].addr = vsp;
2407               vsp += 4;
2408             }
2409
2410           /* If indicated by flag, pop LR as well.  */
2411           if (pop_lr)
2412             {
2413               cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
2414               vsp += 4;
2415             }
2416         }
2417       else if (insn == 0xb0)
2418         {
2419           /* We could only have updated PC by popping into it; if so, it
2420              will show up as address.  Otherwise, copy LR into PC.  */
2421           if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
2422             cache->saved_regs[ARM_PC_REGNUM]
2423               = cache->saved_regs[ARM_LR_REGNUM];
2424
2425           /* We're done.  */
2426           break;
2427         }
2428       else if (insn == 0xb1)
2429         {
2430           int mask = *entry++;
2431           int i;
2432
2433           /* All-zero mask and mask >= 16 is "spare".  */
2434           if (mask == 0 || mask >= 16)
2435             return NULL;
2436
2437           /* Pop r0..r3 under mask.  */
2438           for (i = 0; i < 4; i++)
2439             if (mask & (1 << i))
2440               {
2441                 cache->saved_regs[i].addr = vsp;
2442                 vsp += 4;
2443               }
2444         }
2445       else if (insn == 0xb2)
2446         {
2447           ULONGEST offset = 0;
2448           unsigned shift = 0;
2449
2450           do
2451             {
2452               offset |= (*entry & 0x7f) << shift;
2453               shift += 7;
2454             }
2455           while (*entry++ & 0x80);
2456
2457           vsp += 0x204 + (offset << 2);
2458         }
2459       else if (insn == 0xb3)
2460         {
2461           int start = *entry >> 4;
2462           int count = (*entry++) & 0xf;
2463           int i;
2464
2465           /* Only registers D0..D15 are valid here.  */
2466           if (start + count >= 16)
2467             return NULL;
2468
2469           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2470           for (i = 0; i <= count; i++)
2471             {
2472               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2473               vsp += 8;
2474             }
2475
2476           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2477           vsp += 4;
2478         }
2479       else if ((insn & 0xf8) == 0xb8)
2480         {
2481           int count = insn & 0x7;
2482           int i;
2483
2484           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2485           for (i = 0; i <= count; i++)
2486             {
2487               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2488               vsp += 8;
2489             }
2490
2491           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2492           vsp += 4;
2493         }
2494       else if (insn == 0xc6)
2495         {
2496           int start = *entry >> 4;
2497           int count = (*entry++) & 0xf;
2498           int i;
2499
2500           /* Only registers WR0..WR15 are valid.  */
2501           if (start + count >= 16)
2502             return NULL;
2503
2504           /* Pop iwmmx registers WR[start]..WR[start+count].  */
2505           for (i = 0; i <= count; i++)
2506             {
2507               cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
2508               vsp += 8;
2509             }
2510         }
2511       else if (insn == 0xc7)
2512         {
2513           int mask = *entry++;
2514           int i;
2515
2516           /* All-zero mask and mask >= 16 is "spare".  */
2517           if (mask == 0 || mask >= 16)
2518             return NULL;
2519
2520           /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask.  */
2521           for (i = 0; i < 4; i++)
2522             if (mask & (1 << i))
2523               {
2524                 cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
2525                 vsp += 4;
2526               }
2527         }
2528       else if ((insn & 0xf8) == 0xc0)
2529         {
2530           int count = insn & 0x7;
2531           int i;
2532
2533           /* Pop iwmmx registers WR[10]..WR[10+count].  */
2534           for (i = 0; i <= count; i++)
2535             {
2536               cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
2537               vsp += 8;
2538             }
2539         }
2540       else if (insn == 0xc8)
2541         {
2542           int start = *entry >> 4;
2543           int count = (*entry++) & 0xf;
2544           int i;
2545
2546           /* Only registers D0..D31 are valid.  */
2547           if (start + count >= 16)
2548             return NULL;
2549
2550           /* Pop VFP double-precision registers
2551              D[16+start]..D[16+start+count].  */
2552           for (i = 0; i <= count; i++)
2553             {
2554               cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
2555               vsp += 8;
2556             }
2557         }
2558       else if (insn == 0xc9)
2559         {
2560           int start = *entry >> 4;
2561           int count = (*entry++) & 0xf;
2562           int i;
2563
2564           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2565           for (i = 0; i <= count; i++)
2566             {
2567               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2568               vsp += 8;
2569             }
2570         }
2571       else if ((insn & 0xf8) == 0xd0)
2572         {
2573           int count = insn & 0x7;
2574           int i;
2575
2576           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2577           for (i = 0; i <= count; i++)
2578             {
2579               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2580               vsp += 8;
2581             }
2582         }
2583       else
2584         {
2585           /* Everything else is "spare".  */
2586           return NULL;
2587         }
2588     }
2589
2590   /* If we restore SP from a register, assume this was the frame register.
2591      Otherwise just fall back to SP as frame register.  */
2592   if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2593     cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2594   else
2595     cache->framereg = ARM_SP_REGNUM;
2596
2597   /* Determine offset to previous frame.  */
2598   cache->framesize
2599     = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2600
2601   /* We already got the previous SP.  */
2602   cache->prev_sp = vsp;
2603
2604   return cache;
2605 }
2606
2607 /* Unwinding via ARM exception table entries.  Note that the sniffer
2608    already computes a filled-in prologue cache, which is then used
2609    with the same arm_prologue_this_id and arm_prologue_prev_register
2610    routines also used for prologue-parsing based unwinding.  */
2611
2612 static int
2613 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2614                           struct frame_info *this_frame,
2615                           void **this_prologue_cache)
2616 {
2617   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2618   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2619   CORE_ADDR addr_in_block, exidx_region, func_start;
2620   struct arm_prologue_cache *cache;
2621   gdb_byte *entry;
2622
2623   /* See if we have an ARM exception table entry covering this address.  */
2624   addr_in_block = get_frame_address_in_block (this_frame);
2625   entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2626   if (!entry)
2627     return 0;
2628
2629   /* The ARM exception table does not describe unwind information
2630      for arbitrary PC values, but is guaranteed to be correct only
2631      at call sites.  We have to decide here whether we want to use
2632      ARM exception table information for this frame, or fall back
2633      to using prologue parsing.  (Note that if we have DWARF CFI,
2634      this sniffer isn't even called -- CFI is always preferred.)
2635
2636      Before we make this decision, however, we check whether we
2637      actually have *symbol* information for the current frame.
2638      If not, prologue parsing would not work anyway, so we might
2639      as well use the exception table and hope for the best.  */
2640   if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2641     {
2642       int exc_valid = 0;
2643
2644       /* If the next frame is "normal", we are at a call site in this
2645          frame, so exception information is guaranteed to be valid.  */
2646       if (get_next_frame (this_frame)
2647           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2648         exc_valid = 1;
2649
2650       /* We also assume exception information is valid if we're currently
2651          blocked in a system call.  The system library is supposed to
2652          ensure this, so that e.g. pthread cancellation works.  */
2653       if (arm_frame_is_thumb (this_frame))
2654         {
2655           ULONGEST insn;
2656
2657           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
2658                                                  2, byte_order_for_code, &insn)
2659               && (insn & 0xff00) == 0xdf00 /* svc */)
2660             exc_valid = 1;
2661         }
2662       else
2663         {
2664           ULONGEST insn;
2665
2666           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
2667                                                  4, byte_order_for_code, &insn)
2668               && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2669             exc_valid = 1;
2670         }
2671         
2672       /* Bail out if we don't know that exception information is valid.  */
2673       if (!exc_valid)
2674         return 0;
2675
2676      /* The ARM exception index does not mark the *end* of the region
2677         covered by the entry, and some functions will not have any entry.
2678         To correctly recognize the end of the covered region, the linker
2679         should have inserted dummy records with a CANTUNWIND marker.
2680
2681         Unfortunately, current versions of GNU ld do not reliably do
2682         this, and thus we may have found an incorrect entry above.
2683         As a (temporary) sanity check, we only use the entry if it
2684         lies *within* the bounds of the function.  Note that this check
2685         might reject perfectly valid entries that just happen to cover
2686         multiple functions; therefore this check ought to be removed
2687         once the linker is fixed.  */
2688       if (func_start > exidx_region)
2689         return 0;
2690     }
2691
2692   /* Decode the list of unwinding instructions into a prologue cache.
2693      Note that this may fail due to e.g. a "refuse to unwind" code.  */
2694   cache = arm_exidx_fill_cache (this_frame, entry);
2695   if (!cache)
2696     return 0;
2697
2698   *this_prologue_cache = cache;
2699   return 1;
2700 }
2701
2702 struct frame_unwind arm_exidx_unwind = {
2703   NORMAL_FRAME,
2704   default_frame_unwind_stop_reason,
2705   arm_prologue_this_id,
2706   arm_prologue_prev_register,
2707   NULL,
2708   arm_exidx_unwind_sniffer
2709 };
2710
2711 static struct arm_prologue_cache *
2712 arm_make_epilogue_frame_cache (struct frame_info *this_frame)
2713 {
2714   struct arm_prologue_cache *cache;
2715   int reg;
2716
2717   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2718   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2719
2720   /* Still rely on the offset calculated from prologue.  */
2721   arm_scan_prologue (this_frame, cache);
2722
2723   /* Since we are in epilogue, the SP has been restored.  */
2724   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2725
2726   /* Calculate actual addresses of saved registers using offsets
2727      determined by arm_scan_prologue.  */
2728   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2729     if (trad_frame_addr_p (cache->saved_regs, reg))
2730       cache->saved_regs[reg].addr += cache->prev_sp;
2731
2732   return cache;
2733 }
2734
2735 /* Implementation of function hook 'this_id' in
2736    'struct frame_uwnind' for epilogue unwinder.  */
2737
2738 static void
2739 arm_epilogue_frame_this_id (struct frame_info *this_frame,
2740                             void **this_cache,
2741                             struct frame_id *this_id)
2742 {
2743   struct arm_prologue_cache *cache;
2744   CORE_ADDR pc, func;
2745
2746   if (*this_cache == NULL)
2747     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2748   cache = (struct arm_prologue_cache *) *this_cache;
2749
2750   /* Use function start address as part of the frame ID.  If we cannot
2751      identify the start address (due to missing symbol information),
2752      fall back to just using the current PC.  */
2753   pc = get_frame_pc (this_frame);
2754   func = get_frame_func (this_frame);
2755   if (func == 0)
2756     func = pc;
2757
2758   (*this_id) = frame_id_build (cache->prev_sp, pc);
2759 }
2760
2761 /* Implementation of function hook 'prev_register' in
2762    'struct frame_uwnind' for epilogue unwinder.  */
2763
2764 static struct value *
2765 arm_epilogue_frame_prev_register (struct frame_info *this_frame,
2766                                   void **this_cache, int regnum)
2767 {
2768   if (*this_cache == NULL)
2769     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2770
2771   return arm_prologue_prev_register (this_frame, this_cache, regnum);
2772 }
2773
2774 static int arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch,
2775                                           CORE_ADDR pc);
2776 static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
2777                                           CORE_ADDR pc);
2778
2779 /* Implementation of function hook 'sniffer' in
2780    'struct frame_uwnind' for epilogue unwinder.  */
2781
2782 static int
2783 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
2784                             struct frame_info *this_frame,
2785                             void **this_prologue_cache)
2786 {
2787   if (frame_relative_level (this_frame) == 0)
2788     {
2789       struct gdbarch *gdbarch = get_frame_arch (this_frame);
2790       CORE_ADDR pc = get_frame_pc (this_frame);
2791
2792       if (arm_frame_is_thumb (this_frame))
2793         return thumb_stack_frame_destroyed_p (gdbarch, pc);
2794       else
2795         return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
2796     }
2797   else
2798     return 0;
2799 }
2800
2801 /* Frame unwinder from epilogue.  */
2802
2803 static const struct frame_unwind arm_epilogue_frame_unwind =
2804 {
2805   NORMAL_FRAME,
2806   default_frame_unwind_stop_reason,
2807   arm_epilogue_frame_this_id,
2808   arm_epilogue_frame_prev_register,
2809   NULL,
2810   arm_epilogue_frame_sniffer,
2811 };
2812
2813 /* Recognize GCC's trampoline for thumb call-indirect.  If we are in a
2814    trampoline, return the target PC.  Otherwise return 0.
2815
2816    void call0a (char c, short s, int i, long l) {}
2817
2818    int main (void)
2819    {
2820      (*pointer_to_call0a) (c, s, i, l);
2821    }
2822
2823    Instead of calling a stub library function  _call_via_xx (xx is
2824    the register name), GCC may inline the trampoline in the object
2825    file as below (register r2 has the address of call0a).
2826
2827    .global main
2828    .type main, %function
2829    ...
2830    bl .L1
2831    ...
2832    .size main, .-main
2833
2834    .L1:
2835    bx r2
2836
2837    The trampoline 'bx r2' doesn't belong to main.  */
2838
2839 static CORE_ADDR
2840 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2841 {
2842   /* The heuristics of recognizing such trampoline is that FRAME is
2843      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
2844   if (arm_frame_is_thumb (frame))
2845     {
2846       gdb_byte buf[2];
2847
2848       if (target_read_memory (pc, buf, 2) == 0)
2849         {
2850           struct gdbarch *gdbarch = get_frame_arch (frame);
2851           enum bfd_endian byte_order_for_code
2852             = gdbarch_byte_order_for_code (gdbarch);
2853           uint16_t insn
2854             = extract_unsigned_integer (buf, 2, byte_order_for_code);
2855
2856           if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
2857             {
2858               CORE_ADDR dest
2859                 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2860
2861               /* Clear the LSB so that gdb core sets step-resume
2862                  breakpoint at the right address.  */
2863               return UNMAKE_THUMB_ADDR (dest);
2864             }
2865         }
2866     }
2867
2868   return 0;
2869 }
2870
2871 static struct arm_prologue_cache *
2872 arm_make_stub_cache (struct frame_info *this_frame)
2873 {
2874   struct arm_prologue_cache *cache;
2875
2876   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2877   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2878
2879   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2880
2881   return cache;
2882 }
2883
2884 /* Our frame ID for a stub frame is the current SP and LR.  */
2885
2886 static void
2887 arm_stub_this_id (struct frame_info *this_frame,
2888                   void **this_cache,
2889                   struct frame_id *this_id)
2890 {
2891   struct arm_prologue_cache *cache;
2892
2893   if (*this_cache == NULL)
2894     *this_cache = arm_make_stub_cache (this_frame);
2895   cache = (struct arm_prologue_cache *) *this_cache;
2896
2897   *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2898 }
2899
2900 static int
2901 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2902                          struct frame_info *this_frame,
2903                          void **this_prologue_cache)
2904 {
2905   CORE_ADDR addr_in_block;
2906   gdb_byte dummy[4];
2907   CORE_ADDR pc, start_addr;
2908   const char *name;
2909
2910   addr_in_block = get_frame_address_in_block (this_frame);
2911   pc = get_frame_pc (this_frame);
2912   if (in_plt_section (addr_in_block)
2913       /* We also use the stub winder if the target memory is unreadable
2914          to avoid having the prologue unwinder trying to read it.  */
2915       || target_read_memory (pc, dummy, 4) != 0)
2916     return 1;
2917
2918   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2919       && arm_skip_bx_reg (this_frame, pc) != 0)
2920     return 1;
2921
2922   return 0;
2923 }
2924
2925 struct frame_unwind arm_stub_unwind = {
2926   NORMAL_FRAME,
2927   default_frame_unwind_stop_reason,
2928   arm_stub_this_id,
2929   arm_prologue_prev_register,
2930   NULL,
2931   arm_stub_unwind_sniffer
2932 };
2933
2934 /* Put here the code to store, into CACHE->saved_regs, the addresses
2935    of the saved registers of frame described by THIS_FRAME.  CACHE is
2936    returned.  */
2937
2938 static struct arm_prologue_cache *
2939 arm_m_exception_cache (struct frame_info *this_frame)
2940 {
2941   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2942   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2943   struct arm_prologue_cache *cache;
2944   CORE_ADDR unwound_sp;
2945   LONGEST xpsr;
2946
2947   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2948   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2949
2950   unwound_sp = get_frame_register_unsigned (this_frame,
2951                                             ARM_SP_REGNUM);
2952
2953   /* The hardware saves eight 32-bit words, comprising xPSR,
2954      ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
2955      "B1.5.6 Exception entry behavior" in
2956      "ARMv7-M Architecture Reference Manual".  */
2957   cache->saved_regs[0].addr = unwound_sp;
2958   cache->saved_regs[1].addr = unwound_sp + 4;
2959   cache->saved_regs[2].addr = unwound_sp + 8;
2960   cache->saved_regs[3].addr = unwound_sp + 12;
2961   cache->saved_regs[12].addr = unwound_sp + 16;
2962   cache->saved_regs[14].addr = unwound_sp + 20;
2963   cache->saved_regs[15].addr = unwound_sp + 24;
2964   cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
2965
2966   /* If bit 9 of the saved xPSR is set, then there is a four-byte
2967      aligner between the top of the 32-byte stack frame and the
2968      previous context's stack pointer.  */
2969   cache->prev_sp = unwound_sp + 32;
2970   if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
2971       && (xpsr & (1 << 9)) != 0)
2972     cache->prev_sp += 4;
2973
2974   return cache;
2975 }
2976
2977 /* Implementation of function hook 'this_id' in
2978    'struct frame_uwnind'.  */
2979
2980 static void
2981 arm_m_exception_this_id (struct frame_info *this_frame,
2982                          void **this_cache,
2983                          struct frame_id *this_id)
2984 {
2985   struct arm_prologue_cache *cache;
2986
2987   if (*this_cache == NULL)
2988     *this_cache = arm_m_exception_cache (this_frame);
2989   cache = (struct arm_prologue_cache *) *this_cache;
2990
2991   /* Our frame ID for a stub frame is the current SP and LR.  */
2992   *this_id = frame_id_build (cache->prev_sp,
2993                              get_frame_pc (this_frame));
2994 }
2995
2996 /* Implementation of function hook 'prev_register' in
2997    'struct frame_uwnind'.  */
2998
2999 static struct value *
3000 arm_m_exception_prev_register (struct frame_info *this_frame,
3001                                void **this_cache,
3002                                int prev_regnum)
3003 {
3004   struct arm_prologue_cache *cache;
3005
3006   if (*this_cache == NULL)
3007     *this_cache = arm_m_exception_cache (this_frame);
3008   cache = (struct arm_prologue_cache *) *this_cache;
3009
3010   /* The value was already reconstructed into PREV_SP.  */
3011   if (prev_regnum == ARM_SP_REGNUM)
3012     return frame_unwind_got_constant (this_frame, prev_regnum,
3013                                       cache->prev_sp);
3014
3015   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3016                                        prev_regnum);
3017 }
3018
3019 /* Implementation of function hook 'sniffer' in
3020    'struct frame_uwnind'.  */
3021
3022 static int
3023 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3024                                 struct frame_info *this_frame,
3025                                 void **this_prologue_cache)
3026 {
3027   CORE_ADDR this_pc = get_frame_pc (this_frame);
3028
3029   /* No need to check is_m; this sniffer is only registered for
3030      M-profile architectures.  */
3031
3032   /* Check if exception frame returns to a magic PC value.  */
3033   return arm_m_addr_is_magic (this_pc);
3034 }
3035
3036 /* Frame unwinder for M-profile exceptions.  */
3037
3038 struct frame_unwind arm_m_exception_unwind =
3039 {
3040   SIGTRAMP_FRAME,
3041   default_frame_unwind_stop_reason,
3042   arm_m_exception_this_id,
3043   arm_m_exception_prev_register,
3044   NULL,
3045   arm_m_exception_unwind_sniffer
3046 };
3047
3048 static CORE_ADDR
3049 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3050 {
3051   struct arm_prologue_cache *cache;
3052
3053   if (*this_cache == NULL)
3054     *this_cache = arm_make_prologue_cache (this_frame);
3055   cache = (struct arm_prologue_cache *) *this_cache;
3056
3057   return cache->prev_sp - cache->framesize;
3058 }
3059
3060 struct frame_base arm_normal_base = {
3061   &arm_prologue_unwind,
3062   arm_normal_frame_base,
3063   arm_normal_frame_base,
3064   arm_normal_frame_base
3065 };
3066
3067 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
3068    dummy frame.  The frame ID's base needs to match the TOS value
3069    saved by save_dummy_frame_tos() and returned from
3070    arm_push_dummy_call, and the PC needs to match the dummy frame's
3071    breakpoint.  */
3072
3073 static struct frame_id
3074 arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3075 {
3076   return frame_id_build (get_frame_register_unsigned (this_frame,
3077                                                       ARM_SP_REGNUM),
3078                          get_frame_pc (this_frame));
3079 }
3080
3081 /* Given THIS_FRAME, find the previous frame's resume PC (which will
3082    be used to construct the previous frame's ID, after looking up the
3083    containing function).  */
3084
3085 static CORE_ADDR
3086 arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
3087 {
3088   CORE_ADDR pc;
3089   pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
3090   return arm_addr_bits_remove (gdbarch, pc);
3091 }
3092
3093 static CORE_ADDR
3094 arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
3095 {
3096   return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
3097 }
3098
3099 static struct value *
3100 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3101                           int regnum)
3102 {
3103   struct gdbarch * gdbarch = get_frame_arch (this_frame);
3104   CORE_ADDR lr, cpsr;
3105   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3106
3107   switch (regnum)
3108     {
3109     case ARM_PC_REGNUM:
3110       /* The PC is normally copied from the return column, which
3111          describes saves of LR.  However, that version may have an
3112          extra bit set to indicate Thumb state.  The bit is not
3113          part of the PC.  */
3114       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3115       return frame_unwind_got_constant (this_frame, regnum,
3116                                         arm_addr_bits_remove (gdbarch, lr));
3117
3118     case ARM_PS_REGNUM:
3119       /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
3120       cpsr = get_frame_register_unsigned (this_frame, regnum);
3121       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3122       if (IS_THUMB_ADDR (lr))
3123         cpsr |= t_bit;
3124       else
3125         cpsr &= ~t_bit;
3126       return frame_unwind_got_constant (this_frame, regnum, cpsr);
3127
3128     default:
3129       internal_error (__FILE__, __LINE__,
3130                       _("Unexpected register %d"), regnum);
3131     }
3132 }
3133
3134 static void
3135 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3136                            struct dwarf2_frame_state_reg *reg,
3137                            struct frame_info *this_frame)
3138 {
3139   switch (regnum)
3140     {
3141     case ARM_PC_REGNUM:
3142     case ARM_PS_REGNUM:
3143       reg->how = DWARF2_FRAME_REG_FN;
3144       reg->loc.fn = arm_dwarf2_prev_register;
3145       break;
3146     case ARM_SP_REGNUM:
3147       reg->how = DWARF2_FRAME_REG_CFA;
3148       break;
3149     }
3150 }
3151
3152 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3153
3154 static int
3155 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3156 {
3157   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3158   unsigned int insn, insn2;
3159   int found_return = 0, found_stack_adjust = 0;
3160   CORE_ADDR func_start, func_end;
3161   CORE_ADDR scan_pc;
3162   gdb_byte buf[4];
3163
3164   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3165     return 0;
3166
3167   /* The epilogue is a sequence of instructions along the following lines:
3168
3169     - add stack frame size to SP or FP
3170     - [if frame pointer used] restore SP from FP
3171     - restore registers from SP [may include PC]
3172     - a return-type instruction [if PC wasn't already restored]
3173
3174     In a first pass, we scan forward from the current PC and verify the
3175     instructions we find as compatible with this sequence, ending in a
3176     return instruction.
3177
3178     However, this is not sufficient to distinguish indirect function calls
3179     within a function from indirect tail calls in the epilogue in some cases.
3180     Therefore, if we didn't already find any SP-changing instruction during
3181     forward scan, we add a backward scanning heuristic to ensure we actually
3182     are in the epilogue.  */
3183
3184   scan_pc = pc;
3185   while (scan_pc < func_end && !found_return)
3186     {
3187       if (target_read_memory (scan_pc, buf, 2))
3188         break;
3189
3190       scan_pc += 2;
3191       insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3192
3193       if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
3194         found_return = 1;
3195       else if (insn == 0x46f7)  /* mov pc, lr */
3196         found_return = 1;
3197       else if (thumb_instruction_restores_sp (insn))
3198         {
3199           if ((insn & 0xff00) == 0xbd00)  /* pop <registers, PC> */
3200             found_return = 1;
3201         }
3202       else if (thumb_insn_size (insn) == 4)  /* 32-bit Thumb-2 instruction */
3203         {
3204           if (target_read_memory (scan_pc, buf, 2))
3205             break;
3206
3207           scan_pc += 2;
3208           insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3209
3210           if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3211             {
3212               if (insn2 & 0x8000)  /* <registers> include PC.  */
3213                 found_return = 1;
3214             }
3215           else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3216                    && (insn2 & 0x0fff) == 0x0b04)
3217             {
3218               if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC.  */
3219                 found_return = 1;
3220             }
3221           else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3222                    && (insn2 & 0x0e00) == 0x0a00)
3223             ;
3224           else
3225             break;
3226         }
3227       else
3228         break;
3229     }
3230
3231   if (!found_return)
3232     return 0;
3233
3234   /* Since any instruction in the epilogue sequence, with the possible
3235      exception of return itself, updates the stack pointer, we need to
3236      scan backwards for at most one instruction.  Try either a 16-bit or
3237      a 32-bit instruction.  This is just a heuristic, so we do not worry
3238      too much about false positives.  */
3239
3240   if (pc - 4 < func_start)
3241     return 0;
3242   if (target_read_memory (pc - 4, buf, 4))
3243     return 0;
3244
3245   insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3246   insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3247
3248   if (thumb_instruction_restores_sp (insn2))
3249     found_stack_adjust = 1;
3250   else if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3251     found_stack_adjust = 1;
3252   else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3253            && (insn2 & 0x0fff) == 0x0b04)
3254     found_stack_adjust = 1;
3255   else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3256            && (insn2 & 0x0e00) == 0x0a00)
3257     found_stack_adjust = 1;
3258
3259   return found_stack_adjust;
3260 }
3261
3262 static int
3263 arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
3264 {
3265   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3266   unsigned int insn;
3267   int found_return;
3268   CORE_ADDR func_start, func_end;
3269
3270   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3271     return 0;
3272
3273   /* We are in the epilogue if the previous instruction was a stack
3274      adjustment and the next instruction is a possible return (bx, mov
3275      pc, or pop).  We could have to scan backwards to find the stack
3276      adjustment, or forwards to find the return, but this is a decent
3277      approximation.  First scan forwards.  */
3278
3279   found_return = 0;
3280   insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3281   if (bits (insn, 28, 31) != INST_NV)
3282     {
3283       if ((insn & 0x0ffffff0) == 0x012fff10)
3284         /* BX.  */
3285         found_return = 1;
3286       else if ((insn & 0x0ffffff0) == 0x01a0f000)
3287         /* MOV PC.  */
3288         found_return = 1;
3289       else if ((insn & 0x0fff0000) == 0x08bd0000
3290           && (insn & 0x0000c000) != 0)
3291         /* POP (LDMIA), including PC or LR.  */
3292         found_return = 1;
3293     }
3294
3295   if (!found_return)
3296     return 0;
3297
3298   /* Scan backwards.  This is just a heuristic, so do not worry about
3299      false positives from mode changes.  */
3300
3301   if (pc < func_start + 4)
3302     return 0;
3303
3304   insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3305   if (arm_instruction_restores_sp (insn))
3306     return 1;
3307
3308   return 0;
3309 }
3310
3311 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3312
3313 static int
3314 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3315 {
3316   if (arm_pc_is_thumb (gdbarch, pc))
3317     return thumb_stack_frame_destroyed_p (gdbarch, pc);
3318   else
3319     return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
3320 }
3321
3322 /* When arguments must be pushed onto the stack, they go on in reverse
3323    order.  The code below implements a FILO (stack) to do this.  */
3324
3325 struct stack_item
3326 {
3327   int len;
3328   struct stack_item *prev;
3329   gdb_byte *data;
3330 };
3331
3332 static struct stack_item *
3333 push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
3334 {
3335   struct stack_item *si;
3336   si = XNEW (struct stack_item);
3337   si->data = (gdb_byte *) xmalloc (len);
3338   si->len = len;
3339   si->prev = prev;
3340   memcpy (si->data, contents, len);
3341   return si;
3342 }
3343
3344 static struct stack_item *
3345 pop_stack_item (struct stack_item *si)
3346 {
3347   struct stack_item *dead = si;
3348   si = si->prev;
3349   xfree (dead->data);
3350   xfree (dead);
3351   return si;
3352 }
3353
3354
3355 /* Return the alignment (in bytes) of the given type.  */
3356
3357 static int
3358 arm_type_align (struct type *t)
3359 {
3360   int n;
3361   int align;
3362   int falign;
3363
3364   t = check_typedef (t);
3365   switch (TYPE_CODE (t))
3366     {
3367     default:
3368       /* Should never happen.  */
3369       internal_error (__FILE__, __LINE__, _("unknown type alignment"));
3370       return 4;
3371
3372     case TYPE_CODE_PTR:
3373     case TYPE_CODE_ENUM:
3374     case TYPE_CODE_INT:
3375     case TYPE_CODE_FLT:
3376     case TYPE_CODE_SET:
3377     case TYPE_CODE_RANGE:
3378     case TYPE_CODE_REF:
3379     case TYPE_CODE_RVALUE_REF:
3380     case TYPE_CODE_CHAR:
3381     case TYPE_CODE_BOOL:
3382       return TYPE_LENGTH (t);
3383
3384     case TYPE_CODE_ARRAY:
3385       if (TYPE_VECTOR (t))
3386         {
3387           /* Use the natural alignment for vector types (the same for
3388              scalar type), but the maximum alignment is 64-bit.  */
3389           if (TYPE_LENGTH (t) > 8)
3390             return 8;
3391           else
3392             return TYPE_LENGTH (t);
3393         }
3394       else
3395         return arm_type_align (TYPE_TARGET_TYPE (t));
3396     case TYPE_CODE_COMPLEX:
3397       return arm_type_align (TYPE_TARGET_TYPE (t));
3398
3399     case TYPE_CODE_STRUCT:
3400     case TYPE_CODE_UNION:
3401       align = 1;
3402       for (n = 0; n < TYPE_NFIELDS (t); n++)
3403         {
3404           falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
3405           if (falign > align)
3406             align = falign;
3407         }
3408       return align;
3409     }
3410 }
3411
3412 /* Possible base types for a candidate for passing and returning in
3413    VFP registers.  */
3414
3415 enum arm_vfp_cprc_base_type
3416 {
3417   VFP_CPRC_UNKNOWN,
3418   VFP_CPRC_SINGLE,
3419   VFP_CPRC_DOUBLE,
3420   VFP_CPRC_VEC64,
3421   VFP_CPRC_VEC128
3422 };
3423
3424 /* The length of one element of base type B.  */
3425
3426 static unsigned
3427 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3428 {
3429   switch (b)
3430     {
3431     case VFP_CPRC_SINGLE:
3432       return 4;
3433     case VFP_CPRC_DOUBLE:
3434       return 8;
3435     case VFP_CPRC_VEC64:
3436       return 8;
3437     case VFP_CPRC_VEC128:
3438       return 16;
3439     default:
3440       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3441                       (int) b);
3442     }
3443 }
3444
3445 /* The character ('s', 'd' or 'q') for the type of VFP register used
3446    for passing base type B.  */
3447
3448 static int
3449 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3450 {
3451   switch (b)
3452     {
3453     case VFP_CPRC_SINGLE:
3454       return 's';
3455     case VFP_CPRC_DOUBLE:
3456       return 'd';
3457     case VFP_CPRC_VEC64:
3458       return 'd';
3459     case VFP_CPRC_VEC128:
3460       return 'q';
3461     default:
3462       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3463                       (int) b);
3464     }
3465 }
3466
3467 /* Determine whether T may be part of a candidate for passing and
3468    returning in VFP registers, ignoring the limit on the total number
3469    of components.  If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3470    classification of the first valid component found; if it is not
3471    VFP_CPRC_UNKNOWN, all components must have the same classification
3472    as *BASE_TYPE.  If it is found that T contains a type not permitted
3473    for passing and returning in VFP registers, a type differently
3474    classified from *BASE_TYPE, or two types differently classified
3475    from each other, return -1, otherwise return the total number of
3476    base-type elements found (possibly 0 in an empty structure or
3477    array).  Vector types are not currently supported, matching the
3478    generic AAPCS support.  */
3479
3480 static int
3481 arm_vfp_cprc_sub_candidate (struct type *t,
3482                             enum arm_vfp_cprc_base_type *base_type)
3483 {
3484   t = check_typedef (t);
3485   switch (TYPE_CODE (t))
3486     {
3487     case TYPE_CODE_FLT:
3488       switch (TYPE_LENGTH (t))
3489         {
3490         case 4:
3491           if (*base_type == VFP_CPRC_UNKNOWN)
3492             *base_type = VFP_CPRC_SINGLE;
3493           else if (*base_type != VFP_CPRC_SINGLE)
3494             return -1;
3495           return 1;
3496
3497         case 8:
3498           if (*base_type == VFP_CPRC_UNKNOWN)
3499             *base_type = VFP_CPRC_DOUBLE;
3500           else if (*base_type != VFP_CPRC_DOUBLE)
3501             return -1;
3502           return 1;
3503
3504         default:
3505           return -1;
3506         }
3507       break;
3508
3509     case TYPE_CODE_COMPLEX:
3510       /* Arguments of complex T where T is one of the types float or
3511          double get treated as if they are implemented as:
3512
3513          struct complexT
3514          {
3515            T real;
3516            T imag;
3517          };
3518
3519       */
3520       switch (TYPE_LENGTH (t))
3521         {
3522         case 8:
3523           if (*base_type == VFP_CPRC_UNKNOWN)
3524             *base_type = VFP_CPRC_SINGLE;
3525           else if (*base_type != VFP_CPRC_SINGLE)
3526             return -1;
3527           return 2;
3528
3529         case 16:
3530           if (*base_type == VFP_CPRC_UNKNOWN)
3531             *base_type = VFP_CPRC_DOUBLE;
3532           else if (*base_type != VFP_CPRC_DOUBLE)
3533             return -1;
3534           return 2;
3535
3536         default:
3537           return -1;
3538         }
3539       break;
3540
3541     case TYPE_CODE_ARRAY:
3542       {
3543         if (TYPE_VECTOR (t))
3544           {
3545             /* A 64-bit or 128-bit containerized vector type are VFP
3546                CPRCs.  */
3547             switch (TYPE_LENGTH (t))
3548               {
3549               case 8:
3550                 if (*base_type == VFP_CPRC_UNKNOWN)
3551                   *base_type = VFP_CPRC_VEC64;
3552                 return 1;
3553               case 16:
3554                 if (*base_type == VFP_CPRC_UNKNOWN)
3555                   *base_type = VFP_CPRC_VEC128;
3556                 return 1;
3557               default:
3558                 return -1;
3559               }
3560           }
3561         else
3562           {
3563             int count;
3564             unsigned unitlen;
3565
3566             count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
3567                                                 base_type);
3568             if (count == -1)
3569               return -1;
3570             if (TYPE_LENGTH (t) == 0)
3571               {
3572                 gdb_assert (count == 0);
3573                 return 0;
3574               }
3575             else if (count == 0)
3576               return -1;
3577             unitlen = arm_vfp_cprc_unit_length (*base_type);
3578             gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3579             return TYPE_LENGTH (t) / unitlen;
3580           }
3581       }
3582       break;
3583
3584     case TYPE_CODE_STRUCT:
3585       {
3586         int count = 0;
3587         unsigned unitlen;
3588         int i;
3589         for (i = 0; i < TYPE_NFIELDS (t); i++)
3590           {
3591             int sub_count = 0;
3592
3593             if (!field_is_static (&TYPE_FIELD (t, i)))
3594               sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3595                                                       base_type);
3596             if (sub_count == -1)
3597               return -1;
3598             count += sub_count;
3599           }
3600         if (TYPE_LENGTH (t) == 0)
3601           {
3602             gdb_assert (count == 0);
3603             return 0;
3604           }
3605         else if (count == 0)
3606           return -1;
3607         unitlen = arm_vfp_cprc_unit_length (*base_type);
3608         if (TYPE_LENGTH (t) != unitlen * count)
3609           return -1;
3610         return count;
3611       }
3612
3613     case TYPE_CODE_UNION:
3614       {
3615         int count = 0;
3616         unsigned unitlen;
3617         int i;
3618         for (i = 0; i < TYPE_NFIELDS (t); i++)
3619           {
3620             int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3621                                                         base_type);
3622             if (sub_count == -1)
3623               return -1;
3624             count = (count > sub_count ? count : sub_count);
3625           }
3626         if (TYPE_LENGTH (t) == 0)
3627           {
3628             gdb_assert (count == 0);
3629             return 0;
3630           }
3631         else if (count == 0)
3632           return -1;
3633         unitlen = arm_vfp_cprc_unit_length (*base_type);
3634         if (TYPE_LENGTH (t) != unitlen * count)
3635           return -1;
3636         return count;
3637       }
3638
3639     default:
3640       break;
3641     }
3642
3643   return -1;
3644 }
3645
3646 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3647    if passed to or returned from a non-variadic function with the VFP
3648    ABI in effect.  Return 1 if it is, 0 otherwise.  If it is, set
3649    *BASE_TYPE to the base type for T and *COUNT to the number of
3650    elements of that base type before returning.  */
3651
3652 static int
3653 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3654                         int *count)
3655 {
3656   enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3657   int c = arm_vfp_cprc_sub_candidate (t, &b);
3658   if (c <= 0 || c > 4)
3659     return 0;
3660   *base_type = b;
3661   *count = c;
3662   return 1;
3663 }
3664
3665 /* Return 1 if the VFP ABI should be used for passing arguments to and
3666    returning values from a function of type FUNC_TYPE, 0
3667    otherwise.  */
3668
3669 static int
3670 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3671 {
3672   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3673   /* Variadic functions always use the base ABI.  Assume that functions
3674      without debug info are not variadic.  */
3675   if (func_type && TYPE_VARARGS (check_typedef (func_type)))
3676     return 0;
3677   /* The VFP ABI is only supported as a variant of AAPCS.  */
3678   if (tdep->arm_abi != ARM_ABI_AAPCS)
3679     return 0;
3680   return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3681 }
3682
3683 /* We currently only support passing parameters in integer registers, which
3684    conforms with GCC's default model, and VFP argument passing following
3685    the VFP variant of AAPCS.  Several other variants exist and
3686    we should probably support some of them based on the selected ABI.  */
3687
3688 static CORE_ADDR
3689 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3690                      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3691                      struct value **args, CORE_ADDR sp, int struct_return,
3692                      CORE_ADDR struct_addr)
3693 {
3694   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3695   int argnum;
3696   int argreg;
3697   int nstack;
3698   struct stack_item *si = NULL;
3699   int use_vfp_abi;
3700   struct type *ftype;
3701   unsigned vfp_regs_free = (1 << 16) - 1;
3702
3703   /* Determine the type of this function and whether the VFP ABI
3704      applies.  */
3705   ftype = check_typedef (value_type (function));
3706   if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
3707     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3708   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3709
3710   /* Set the return address.  For the ARM, the return breakpoint is
3711      always at BP_ADDR.  */
3712   if (arm_pc_is_thumb (gdbarch, bp_addr))
3713     bp_addr |= 1;
3714   regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3715
3716   /* Walk through the list of args and determine how large a temporary
3717      stack is required.  Need to take care here as structs may be
3718      passed on the stack, and we have to push them.  */
3719   nstack = 0;
3720
3721   argreg = ARM_A1_REGNUM;
3722   nstack = 0;
3723
3724   /* The struct_return pointer occupies the first parameter
3725      passing register.  */
3726   if (struct_return)
3727     {
3728       if (arm_debug)
3729         fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
3730                             gdbarch_register_name (gdbarch, argreg),
3731                             paddress (gdbarch, struct_addr));
3732       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3733       argreg++;
3734     }
3735
3736   for (argnum = 0; argnum < nargs; argnum++)
3737     {
3738       int len;
3739       struct type *arg_type;
3740       struct type *target_type;
3741       enum type_code typecode;
3742       const bfd_byte *val;
3743       int align;
3744       enum arm_vfp_cprc_base_type vfp_base_type;
3745       int vfp_base_count;
3746       int may_use_core_reg = 1;
3747
3748       arg_type = check_typedef (value_type (args[argnum]));
3749       len = TYPE_LENGTH (arg_type);
3750       target_type = TYPE_TARGET_TYPE (arg_type);
3751       typecode = TYPE_CODE (arg_type);
3752       val = value_contents (args[argnum]);
3753
3754       align = arm_type_align (arg_type);
3755       /* Round alignment up to a whole number of words.  */
3756       align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
3757       /* Different ABIs have different maximum alignments.  */
3758       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3759         {
3760           /* The APCS ABI only requires word alignment.  */
3761           align = INT_REGISTER_SIZE;
3762         }
3763       else
3764         {
3765           /* The AAPCS requires at most doubleword alignment.  */
3766           if (align > INT_REGISTER_SIZE * 2)
3767             align = INT_REGISTER_SIZE * 2;
3768         }
3769
3770       if (use_vfp_abi
3771           && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3772                                      &vfp_base_count))
3773         {
3774           int regno;
3775           int unit_length;
3776           int shift;
3777           unsigned mask;
3778
3779           /* Because this is a CPRC it cannot go in a core register or
3780              cause a core register to be skipped for alignment.
3781              Either it goes in VFP registers and the rest of this loop
3782              iteration is skipped for this argument, or it goes on the
3783              stack (and the stack alignment code is correct for this
3784              case).  */
3785           may_use_core_reg = 0;
3786
3787           unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3788           shift = unit_length / 4;
3789           mask = (1 << (shift * vfp_base_count)) - 1;
3790           for (regno = 0; regno < 16; regno += shift)
3791             if (((vfp_regs_free >> regno) & mask) == mask)
3792               break;
3793
3794           if (regno < 16)
3795             {
3796               int reg_char;
3797               int reg_scaled;
3798               int i;
3799
3800               vfp_regs_free &= ~(mask << regno);
3801               reg_scaled = regno / shift;
3802               reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3803               for (i = 0; i < vfp_base_count; i++)
3804                 {
3805                   char name_buf[4];
3806                   int regnum;
3807                   if (reg_char == 'q')
3808                     arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3809                                          val + i * unit_length);
3810                   else
3811                     {
3812                       xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3813                                  reg_char, reg_scaled + i);
3814                       regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3815                                                             strlen (name_buf));
3816                       regcache_cooked_write (regcache, regnum,
3817                                              val + i * unit_length);
3818                     }
3819                 }
3820               continue;
3821             }
3822           else
3823             {
3824               /* This CPRC could not go in VFP registers, so all VFP
3825                  registers are now marked as used.  */
3826               vfp_regs_free = 0;
3827             }
3828         }
3829
3830       /* Push stack padding for dowubleword alignment.  */
3831       if (nstack & (align - 1))
3832         {
3833           si = push_stack_item (si, val, INT_REGISTER_SIZE);
3834           nstack += INT_REGISTER_SIZE;
3835         }
3836       
3837       /* Doubleword aligned quantities must go in even register pairs.  */
3838       if (may_use_core_reg
3839           && argreg <= ARM_LAST_ARG_REGNUM
3840           && align > INT_REGISTER_SIZE
3841           && argreg & 1)
3842         argreg++;
3843
3844       /* If the argument is a pointer to a function, and it is a
3845          Thumb function, create a LOCAL copy of the value and set
3846          the THUMB bit in it.  */
3847       if (TYPE_CODE_PTR == typecode
3848           && target_type != NULL
3849           && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3850         {
3851           CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3852           if (arm_pc_is_thumb (gdbarch, regval))
3853             {
3854               bfd_byte *copy = (bfd_byte *) alloca (len);
3855               store_unsigned_integer (copy, len, byte_order,
3856                                       MAKE_THUMB_ADDR (regval));
3857               val = copy;
3858             }
3859         }
3860
3861       /* Copy the argument to general registers or the stack in
3862          register-sized pieces.  Large arguments are split between
3863          registers and stack.  */
3864       while (len > 0)
3865         {
3866           int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3867           CORE_ADDR regval
3868             = extract_unsigned_integer (val, partial_len, byte_order);
3869
3870           if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3871             {
3872               /* The argument is being passed in a general purpose
3873                  register.  */
3874               if (byte_order == BFD_ENDIAN_BIG)
3875                 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3876               if (arm_debug)
3877                 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3878                                     argnum,
3879                                     gdbarch_register_name
3880                                       (gdbarch, argreg),
3881                                     phex (regval, INT_REGISTER_SIZE));
3882               regcache_cooked_write_unsigned (regcache, argreg, regval);
3883               argreg++;
3884             }
3885           else
3886             {
3887               gdb_byte buf[INT_REGISTER_SIZE];
3888
3889               memset (buf, 0, sizeof (buf));
3890               store_unsigned_integer (buf, partial_len, byte_order, regval);
3891
3892               /* Push the arguments onto the stack.  */
3893               if (arm_debug)
3894                 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3895                                     argnum, nstack);
3896               si = push_stack_item (si, buf, INT_REGISTER_SIZE);
3897               nstack += INT_REGISTER_SIZE;
3898             }
3899               
3900           len -= partial_len;
3901           val += partial_len;
3902         }
3903     }
3904   /* If we have an odd number of words to push, then decrement the stack
3905      by one word now, so first stack argument will be dword aligned.  */
3906   if (nstack & 4)
3907     sp -= 4;
3908
3909   while (si)
3910     {
3911       sp -= si->len;
3912       write_memory (sp, si->data, si->len);
3913       si = pop_stack_item (si);
3914     }
3915
3916   /* Finally, update teh SP register.  */
3917   regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3918
3919   return sp;
3920 }
3921
3922
3923 /* Always align the frame to an 8-byte boundary.  This is required on
3924    some platforms and harmless on the rest.  */
3925
3926 static CORE_ADDR
3927 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3928 {
3929   /* Align the stack to eight bytes.  */
3930   return sp & ~ (CORE_ADDR) 7;
3931 }
3932
3933 static void
3934 print_fpu_flags (struct ui_file *file, int flags)
3935 {
3936   if (flags & (1 << 0))
3937     fputs_filtered ("IVO ", file);
3938   if (flags & (1 << 1))
3939     fputs_filtered ("DVZ ", file);
3940   if (flags & (1 << 2))
3941     fputs_filtered ("OFL ", file);
3942   if (flags & (1 << 3))
3943     fputs_filtered ("UFL ", file);
3944   if (flags & (1 << 4))
3945     fputs_filtered ("INX ", file);
3946   fputc_filtered ('\n', file);
3947 }
3948
3949 /* Print interesting information about the floating point processor
3950    (if present) or emulator.  */
3951 static void
3952 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3953                       struct frame_info *frame, const char *args)
3954 {
3955   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3956   int type;
3957
3958   type = (status >> 24) & 127;
3959   if (status & (1 << 31))
3960     fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3961   else
3962     fprintf_filtered (file, _("Software FPU type %d\n"), type);
3963   /* i18n: [floating point unit] mask */
3964   fputs_filtered (_("mask: "), file);
3965   print_fpu_flags (file, status >> 16);
3966   /* i18n: [floating point unit] flags */
3967   fputs_filtered (_("flags: "), file);
3968   print_fpu_flags (file, status);
3969 }
3970
3971 /* Construct the ARM extended floating point type.  */
3972 static struct type *
3973 arm_ext_type (struct gdbarch *gdbarch)
3974 {
3975   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3976
3977   if (!tdep->arm_ext_type)
3978     tdep->arm_ext_type
3979       = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
3980                          floatformats_arm_ext);
3981
3982   return tdep->arm_ext_type;
3983 }
3984
3985 static struct type *
3986 arm_neon_double_type (struct gdbarch *gdbarch)
3987 {
3988   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3989
3990   if (tdep->neon_double_type == NULL)
3991     {
3992       struct type *t, *elem;
3993
3994       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
3995                                TYPE_CODE_UNION);
3996       elem = builtin_type (gdbarch)->builtin_uint8;
3997       append_composite_type_field (t, "u8", init_vector_type (elem, 8));
3998       elem = builtin_type (gdbarch)->builtin_uint16;
3999       append_composite_type_field (t, "u16", init_vector_type (elem, 4));
4000       elem = builtin_type (gdbarch)->builtin_uint32;
4001       append_composite_type_field (t, "u32", init_vector_type (elem, 2));
4002       elem = builtin_type (gdbarch)->builtin_uint64;
4003       append_composite_type_field (t, "u64", elem);
4004       elem = builtin_type (gdbarch)->builtin_float;
4005       append_composite_type_field (t, "f32", init_vector_type (elem, 2));
4006       elem = builtin_type (gdbarch)->builtin_double;
4007       append_composite_type_field (t, "f64", elem);
4008
4009       TYPE_VECTOR (t) = 1;
4010       TYPE_NAME (t) = "neon_d";
4011       tdep->neon_double_type = t;
4012     }
4013
4014   return tdep->neon_double_type;
4015 }
4016
4017 /* FIXME: The vector types are not correctly ordered on big-endian
4018    targets.  Just as s0 is the low bits of d0, d0[0] is also the low
4019    bits of d0 - regardless of what unit size is being held in d0.  So
4020    the offset of the first uint8 in d0 is 7, but the offset of the
4021    first float is 4.  This code works as-is for little-endian
4022    targets.  */
4023
4024 static struct type *
4025 arm_neon_quad_type (struct gdbarch *gdbarch)
4026 {
4027   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4028
4029   if (tdep->neon_quad_type == NULL)
4030     {
4031       struct type *t, *elem;
4032
4033       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
4034                                TYPE_CODE_UNION);
4035       elem = builtin_type (gdbarch)->builtin_uint8;
4036       append_composite_type_field (t, "u8", init_vector_type (elem, 16));
4037       elem = builtin_type (gdbarch)->builtin_uint16;
4038       append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4039       elem = builtin_type (gdbarch)->builtin_uint32;
4040       append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4041       elem = builtin_type (gdbarch)->builtin_uint64;
4042       append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4043       elem = builtin_type (gdbarch)->builtin_float;
4044       append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4045       elem = builtin_type (gdbarch)->builtin_double;
4046       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4047
4048       TYPE_VECTOR (t) = 1;
4049       TYPE_NAME (t) = "neon_q";
4050       tdep->neon_quad_type = t;
4051     }
4052
4053   return tdep->neon_quad_type;
4054 }
4055
4056 /* Return the GDB type object for the "standard" data type of data in
4057    register N.  */
4058
4059 static struct type *
4060 arm_register_type (struct gdbarch *gdbarch, int regnum)
4061 {
4062   int num_regs = gdbarch_num_regs (gdbarch);
4063
4064   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4065       && regnum >= num_regs && regnum < num_regs + 32)
4066     return builtin_type (gdbarch)->builtin_float;
4067
4068   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4069       && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4070     return arm_neon_quad_type (gdbarch);
4071
4072   /* If the target description has register information, we are only
4073      in this function so that we can override the types of
4074      double-precision registers for NEON.  */
4075   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4076     {
4077       struct type *t = tdesc_register_type (gdbarch, regnum);
4078
4079       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4080           && TYPE_CODE (t) == TYPE_CODE_FLT
4081           && gdbarch_tdep (gdbarch)->have_neon)
4082         return arm_neon_double_type (gdbarch);
4083       else
4084         return t;
4085     }
4086
4087   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4088     {
4089       if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4090         return builtin_type (gdbarch)->builtin_void;
4091
4092       return arm_ext_type (gdbarch);
4093     }
4094   else if (regnum == ARM_SP_REGNUM)
4095     return builtin_type (gdbarch)->builtin_data_ptr;
4096   else if (regnum == ARM_PC_REGNUM)
4097     return builtin_type (gdbarch)->builtin_func_ptr;
4098   else if (regnum >= ARRAY_SIZE (arm_register_names))
4099     /* These registers are only supported on targets which supply
4100        an XML description.  */
4101     return builtin_type (gdbarch)->builtin_int0;
4102   else
4103     return builtin_type (gdbarch)->builtin_uint32;
4104 }
4105
4106 /* Map a DWARF register REGNUM onto the appropriate GDB register
4107    number.  */
4108
4109 static int
4110 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4111 {
4112   /* Core integer regs.  */
4113   if (reg >= 0 && reg <= 15)
4114     return reg;
4115
4116   /* Legacy FPA encoding.  These were once used in a way which
4117      overlapped with VFP register numbering, so their use is
4118      discouraged, but GDB doesn't support the ARM toolchain
4119      which used them for VFP.  */
4120   if (reg >= 16 && reg <= 23)
4121     return ARM_F0_REGNUM + reg - 16;
4122
4123   /* New assignments for the FPA registers.  */
4124   if (reg >= 96 && reg <= 103)
4125     return ARM_F0_REGNUM + reg - 96;
4126
4127   /* WMMX register assignments.  */
4128   if (reg >= 104 && reg <= 111)
4129     return ARM_WCGR0_REGNUM + reg - 104;
4130
4131   if (reg >= 112 && reg <= 127)
4132     return ARM_WR0_REGNUM + reg - 112;
4133
4134   if (reg >= 192 && reg <= 199)
4135     return ARM_WC0_REGNUM + reg - 192;
4136
4137   /* VFP v2 registers.  A double precision value is actually
4138      in d1 rather than s2, but the ABI only defines numbering
4139      for the single precision registers.  This will "just work"
4140      in GDB for little endian targets (we'll read eight bytes,
4141      starting in s0 and then progressing to s1), but will be
4142      reversed on big endian targets with VFP.  This won't
4143      be a problem for the new Neon quad registers; you're supposed
4144      to use DW_OP_piece for those.  */
4145   if (reg >= 64 && reg <= 95)
4146     {
4147       char name_buf[4];
4148
4149       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4150       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4151                                           strlen (name_buf));
4152     }
4153
4154   /* VFP v3 / Neon registers.  This range is also used for VFP v2
4155      registers, except that it now describes d0 instead of s0.  */
4156   if (reg >= 256 && reg <= 287)
4157     {
4158       char name_buf[4];
4159
4160       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4161       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4162                                           strlen (name_buf));
4163     }
4164
4165   return -1;
4166 }
4167
4168 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
4169 static int
4170 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4171 {
4172   int reg = regnum;
4173   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4174
4175   if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4176     return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4177
4178   if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4179     return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4180
4181   if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4182     return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4183
4184   if (reg < NUM_GREGS)
4185     return SIM_ARM_R0_REGNUM + reg;
4186   reg -= NUM_GREGS;
4187
4188   if (reg < NUM_FREGS)
4189     return SIM_ARM_FP0_REGNUM + reg;
4190   reg -= NUM_FREGS;
4191
4192   if (reg < NUM_SREGS)
4193     return SIM_ARM_FPS_REGNUM + reg;
4194   reg -= NUM_SREGS;
4195
4196   internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4197 }
4198
4199 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4200    the buffer to be NEW_LEN bytes ending at ENDADDR.  Return
4201    NULL if an error occurs.  BUF is freed.  */
4202
4203 static gdb_byte *
4204 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4205                        int old_len, int new_len)
4206 {
4207   gdb_byte *new_buf;
4208   int bytes_to_read = new_len - old_len;
4209
4210   new_buf = (gdb_byte *) xmalloc (new_len);
4211   memcpy (new_buf + bytes_to_read, buf, old_len);
4212   xfree (buf);
4213   if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4214     {
4215       xfree (new_buf);
4216       return NULL;
4217     }
4218   return new_buf;
4219 }
4220
4221 /* An IT block is at most the 2-byte IT instruction followed by
4222    four 4-byte instructions.  The furthest back we must search to
4223    find an IT block that affects the current instruction is thus
4224    2 + 3 * 4 == 14 bytes.  */
4225 #define MAX_IT_BLOCK_PREFIX 14
4226
4227 /* Use a quick scan if there are more than this many bytes of
4228    code.  */
4229 #define IT_SCAN_THRESHOLD 32
4230
4231 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4232    A breakpoint in an IT block may not be hit, depending on the
4233    condition flags.  */
4234 static CORE_ADDR
4235 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4236 {
4237   gdb_byte *buf;
4238   char map_type;
4239   CORE_ADDR boundary, func_start;
4240   int buf_len;
4241   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4242   int i, any, last_it, last_it_count;
4243
4244   /* If we are using BKPT breakpoints, none of this is necessary.  */
4245   if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4246     return bpaddr;
4247
4248   /* ARM mode does not have this problem.  */
4249   if (!arm_pc_is_thumb (gdbarch, bpaddr))
4250     return bpaddr;
4251
4252   /* We are setting a breakpoint in Thumb code that could potentially
4253      contain an IT block.  The first step is to find how much Thumb
4254      code there is; we do not need to read outside of known Thumb
4255      sequences.  */
4256   map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4257   if (map_type == 0)
4258     /* Thumb-2 code must have mapping symbols to have a chance.  */
4259     return bpaddr;
4260
4261   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4262
4263   if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4264       && func_start > boundary)
4265     boundary = func_start;
4266
4267   /* Search for a candidate IT instruction.  We have to do some fancy
4268      footwork to distinguish a real IT instruction from the second
4269      half of a 32-bit instruction, but there is no need for that if
4270      there's no candidate.  */
4271   buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4272   if (buf_len == 0)
4273     /* No room for an IT instruction.  */
4274     return bpaddr;
4275
4276   buf = (gdb_byte *) xmalloc (buf_len);
4277   if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4278     return bpaddr;
4279   any = 0;
4280   for (i = 0; i < buf_len; i += 2)
4281     {
4282       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4283       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4284         {
4285           any = 1;
4286           break;
4287         }
4288     }
4289
4290   if (any == 0)
4291     {
4292       xfree (buf);
4293       return bpaddr;
4294     }
4295
4296   /* OK, the code bytes before this instruction contain at least one
4297      halfword which resembles an IT instruction.  We know that it's
4298      Thumb code, but there are still two possibilities.  Either the
4299      halfword really is an IT instruction, or it is the second half of
4300      a 32-bit Thumb instruction.  The only way we can tell is to
4301      scan forwards from a known instruction boundary.  */
4302   if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4303     {
4304       int definite;
4305
4306       /* There's a lot of code before this instruction.  Start with an
4307          optimistic search; it's easy to recognize halfwords that can
4308          not be the start of a 32-bit instruction, and use that to
4309          lock on to the instruction boundaries.  */
4310       buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4311       if (buf == NULL)
4312         return bpaddr;
4313       buf_len = IT_SCAN_THRESHOLD;
4314
4315       definite = 0;
4316       for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4317         {
4318           unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4319           if (thumb_insn_size (inst1) == 2)
4320             {
4321               definite = 1;
4322               break;
4323             }
4324         }
4325
4326       /* At this point, if DEFINITE, BUF[I] is the first place we
4327          are sure that we know the instruction boundaries, and it is far
4328          enough from BPADDR that we could not miss an IT instruction
4329          affecting BPADDR.  If ! DEFINITE, give up - start from a
4330          known boundary.  */
4331       if (! definite)
4332         {
4333           buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4334                                        bpaddr - boundary);
4335           if (buf == NULL)
4336             return bpaddr;
4337           buf_len = bpaddr - boundary;
4338           i = 0;
4339         }
4340     }
4341   else
4342     {
4343       buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4344       if (buf == NULL)
4345         return bpaddr;
4346       buf_len = bpaddr - boundary;
4347       i = 0;
4348     }
4349
4350   /* Scan forwards.  Find the last IT instruction before BPADDR.  */
4351   last_it = -1;
4352   last_it_count = 0;
4353   while (i < buf_len)
4354     {
4355       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4356       last_it_count--;
4357       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4358         {
4359           last_it = i;
4360           if (inst1 & 0x0001)
4361             last_it_count = 4;
4362           else if (inst1 & 0x0002)
4363             last_it_count = 3;
4364           else if (inst1 & 0x0004)
4365             last_it_count = 2;
4366           else
4367             last_it_count = 1;
4368         }
4369       i += thumb_insn_size (inst1);
4370     }
4371
4372   xfree (buf);
4373
4374   if (last_it == -1)
4375     /* There wasn't really an IT instruction after all.  */
4376     return bpaddr;
4377
4378   if (last_it_count < 1)
4379     /* It was too far away.  */
4380     return bpaddr;
4381
4382   /* This really is a trouble spot.  Move the breakpoint to the IT
4383      instruction.  */
4384   return bpaddr - buf_len + last_it;
4385 }
4386
4387 /* ARM displaced stepping support.
4388
4389    Generally ARM displaced stepping works as follows:
4390
4391    1. When an instruction is to be single-stepped, it is first decoded by
4392       arm_process_displaced_insn.  Depending on the type of instruction, it is
4393       then copied to a scratch location, possibly in a modified form.  The
4394       copy_* set of functions performs such modification, as necessary.  A
4395       breakpoint is placed after the modified instruction in the scratch space
4396       to return control to GDB.  Note in particular that instructions which
4397       modify the PC will no longer do so after modification.
4398
4399    2. The instruction is single-stepped, by setting the PC to the scratch
4400       location address, and resuming.  Control returns to GDB when the
4401       breakpoint is hit.
4402
4403    3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4404       function used for the current instruction.  This function's job is to
4405       put the CPU/memory state back to what it would have been if the
4406       instruction had been executed unmodified in its original location.  */
4407
4408 /* NOP instruction (mov r0, r0).  */
4409 #define ARM_NOP                         0xe1a00000
4410 #define THUMB_NOP 0x4600
4411
4412 /* Helper for register reads for displaced stepping.  In particular, this
4413    returns the PC as it would be seen by the instruction at its original
4414    location.  */
4415
4416 ULONGEST
4417 displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4418                     int regno)
4419 {
4420   ULONGEST ret;
4421   CORE_ADDR from = dsc->insn_addr;
4422
4423   if (regno == ARM_PC_REGNUM)
4424     {
4425       /* Compute pipeline offset:
4426          - When executing an ARM instruction, PC reads as the address of the
4427          current instruction plus 8.
4428          - When executing a Thumb instruction, PC reads as the address of the
4429          current instruction plus 4.  */
4430
4431       if (!dsc->is_thumb)
4432         from += 8;
4433       else
4434         from += 4;
4435
4436       if (debug_displaced)
4437         fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
4438                             (unsigned long) from);
4439       return (ULONGEST) from;
4440     }
4441   else
4442     {
4443       regcache_cooked_read_unsigned (regs, regno, &ret);
4444       if (debug_displaced)
4445         fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
4446                             regno, (unsigned long) ret);
4447       return ret;
4448     }
4449 }
4450
4451 static int
4452 displaced_in_arm_mode (struct regcache *regs)
4453 {
4454   ULONGEST ps;
4455   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4456
4457   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4458
4459   return (ps & t_bit) == 0;
4460 }
4461
4462 /* Write to the PC as from a branch instruction.  */
4463
4464 static void
4465 branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4466                  ULONGEST val)
4467 {
4468   if (!dsc->is_thumb)
4469     /* Note: If bits 0/1 are set, this branch would be unpredictable for
4470        architecture versions < 6.  */
4471     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4472                                     val & ~(ULONGEST) 0x3);
4473   else
4474     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4475                                     val & ~(ULONGEST) 0x1);
4476 }
4477
4478 /* Write to the PC as from a branch-exchange instruction.  */
4479
4480 static void
4481 bx_write_pc (struct regcache *regs, ULONGEST val)
4482 {
4483   ULONGEST ps;
4484   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4485
4486   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4487
4488   if ((val & 1) == 1)
4489     {
4490       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4491       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4492     }
4493   else if ((val & 2) == 0)
4494     {
4495       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4496       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4497     }
4498   else
4499     {
4500       /* Unpredictable behaviour.  Try to do something sensible (switch to ARM
4501           mode, align dest to 4 bytes).  */
4502       warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4503       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4504       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4505     }
4506 }
4507
4508 /* Write to the PC as if from a load instruction.  */
4509
4510 static void
4511 load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4512                ULONGEST val)
4513 {
4514   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4515     bx_write_pc (regs, val);
4516   else
4517     branch_write_pc (regs, dsc, val);
4518 }
4519
4520 /* Write to the PC as if from an ALU instruction.  */
4521
4522 static void
4523 alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4524               ULONGEST val)
4525 {
4526   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4527     bx_write_pc (regs, val);
4528   else
4529     branch_write_pc (regs, dsc, val);
4530 }
4531
4532 /* Helper for writing to registers for displaced stepping.  Writing to the PC
4533    has a varying effects depending on the instruction which does the write:
4534    this is controlled by the WRITE_PC argument.  */
4535
4536 void
4537 displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4538                      int regno, ULONGEST val, enum pc_write_style write_pc)
4539 {
4540   if (regno == ARM_PC_REGNUM)
4541     {
4542       if (debug_displaced)
4543         fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
4544                             (unsigned long) val);
4545       switch (write_pc)
4546         {
4547         case BRANCH_WRITE_PC:
4548           branch_write_pc (regs, dsc, val);
4549           break;
4550
4551         case BX_WRITE_PC:
4552           bx_write_pc (regs, val);
4553           break;
4554
4555         case LOAD_WRITE_PC:
4556           load_write_pc (regs, dsc, val);
4557           break;
4558
4559         case ALU_WRITE_PC:
4560           alu_write_pc (regs, dsc, val);
4561           break;
4562
4563         case CANNOT_WRITE_PC:
4564           warning (_("Instruction wrote to PC in an unexpected way when "
4565                      "single-stepping"));
4566           break;
4567
4568         default:
4569           internal_error (__FILE__, __LINE__,
4570                           _("Invalid argument to displaced_write_reg"));
4571         }
4572
4573       dsc->wrote_to_pc = 1;
4574     }
4575   else
4576     {
4577       if (debug_displaced)
4578         fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
4579                             regno, (unsigned long) val);
4580       regcache_cooked_write_unsigned (regs, regno, val);
4581     }
4582 }
4583
4584 /* This function is used to concisely determine if an instruction INSN
4585    references PC.  Register fields of interest in INSN should have the
4586    corresponding fields of BITMASK set to 0b1111.  The function
4587    returns return 1 if any of these fields in INSN reference the PC
4588    (also 0b1111, r15), else it returns 0.  */
4589
4590 static int
4591 insn_references_pc (uint32_t insn, uint32_t bitmask)
4592 {
4593   uint32_t lowbit = 1;
4594
4595   while (bitmask != 0)
4596     {
4597       uint32_t mask;
4598
4599       for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4600         ;
4601
4602       if (!lowbit)
4603         break;
4604
4605       mask = lowbit * 0xf;
4606
4607       if ((insn & mask) == mask)
4608         return 1;
4609
4610       bitmask &= ~mask;
4611     }
4612
4613   return 0;
4614 }
4615
4616 /* The simplest copy function.  Many instructions have the same effect no
4617    matter what address they are executed at: in those cases, use this.  */
4618
4619 static int
4620 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
4621                      const char *iname, arm_displaced_step_closure *dsc)
4622 {
4623   if (debug_displaced)
4624     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
4625                         "opcode/class '%s' unmodified\n", (unsigned long) insn,
4626                         iname);
4627
4628   dsc->modinsn[0] = insn;
4629
4630   return 0;
4631 }
4632
4633 static int
4634 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4635                              uint16_t insn2, const char *iname,
4636                              arm_displaced_step_closure *dsc)
4637 {
4638   if (debug_displaced)
4639     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
4640                         "opcode/class '%s' unmodified\n", insn1, insn2,
4641                         iname);
4642
4643   dsc->modinsn[0] = insn1;
4644   dsc->modinsn[1] = insn2;
4645   dsc->numinsns = 2;
4646
4647   return 0;
4648 }
4649
4650 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4651    modification.  */
4652 static int
4653 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4654                              const char *iname,
4655                              arm_displaced_step_closure *dsc)
4656 {
4657   if (debug_displaced)
4658     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
4659                         "opcode/class '%s' unmodified\n", insn,
4660                         iname);
4661
4662   dsc->modinsn[0] = insn;
4663
4664   return 0;
4665 }
4666
4667 /* Preload instructions with immediate offset.  */
4668
4669 static void
4670 cleanup_preload (struct gdbarch *gdbarch,
4671                  struct regcache *regs, arm_displaced_step_closure *dsc)
4672 {
4673   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4674   if (!dsc->u.preload.immed)
4675     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4676 }
4677
4678 static void
4679 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4680                  arm_displaced_step_closure *dsc, unsigned int rn)
4681 {
4682   ULONGEST rn_val;
4683   /* Preload instructions:
4684
4685      {pli/pld} [rn, #+/-imm]
4686      ->
4687      {pli/pld} [r0, #+/-imm].  */
4688
4689   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4690   rn_val = displaced_read_reg (regs, dsc, rn);
4691   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4692   dsc->u.preload.immed = 1;
4693
4694   dsc->cleanup = &cleanup_preload;
4695 }
4696
4697 static int
4698 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4699                   arm_displaced_step_closure *dsc)
4700 {
4701   unsigned int rn = bits (insn, 16, 19);
4702
4703   if (!insn_references_pc (insn, 0x000f0000ul))
4704     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4705
4706   if (debug_displaced)
4707     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4708                         (unsigned long) insn);
4709
4710   dsc->modinsn[0] = insn & 0xfff0ffff;
4711
4712   install_preload (gdbarch, regs, dsc, rn);
4713
4714   return 0;
4715 }
4716
4717 static int
4718 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4719                      struct regcache *regs, arm_displaced_step_closure *dsc)
4720 {
4721   unsigned int rn = bits (insn1, 0, 3);
4722   unsigned int u_bit = bit (insn1, 7);
4723   int imm12 = bits (insn2, 0, 11);
4724   ULONGEST pc_val;
4725
4726   if (rn != ARM_PC_REGNUM)
4727     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4728
4729   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4730      PLD (literal) Encoding T1.  */
4731   if (debug_displaced)
4732     fprintf_unfiltered (gdb_stdlog,
4733                         "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
4734                         (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4735                         imm12);
4736
4737   if (!u_bit)
4738     imm12 = -1 * imm12;
4739
4740   /* Rewrite instruction {pli/pld} PC imm12 into:
4741      Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4742
4743      {pli/pld} [r0, r1]
4744
4745      Cleanup: r0 <- tmp[0], r1 <- tmp[1].  */
4746
4747   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4748   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4749
4750   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4751
4752   displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4753   displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4754   dsc->u.preload.immed = 0;
4755
4756   /* {pli/pld} [r0, r1] */
4757   dsc->modinsn[0] = insn1 & 0xfff0;
4758   dsc->modinsn[1] = 0xf001;
4759   dsc->numinsns = 2;
4760
4761   dsc->cleanup = &cleanup_preload;
4762   return 0;
4763 }
4764
4765 /* Preload instructions with register offset.  */
4766
4767 static void
4768 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4769                     arm_displaced_step_closure *dsc, unsigned int rn,
4770                     unsigned int rm)
4771 {
4772   ULONGEST rn_val, rm_val;
4773
4774   /* Preload register-offset instructions:
4775
4776      {pli/pld} [rn, rm {, shift}]
4777      ->
4778      {pli/pld} [r0, r1 {, shift}].  */
4779
4780   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4781   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4782   rn_val = displaced_read_reg (regs, dsc, rn);
4783   rm_val = displaced_read_reg (regs, dsc, rm);
4784   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4785   displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4786   dsc->u.preload.immed = 0;
4787
4788   dsc->cleanup = &cleanup_preload;
4789 }
4790
4791 static int
4792 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4793                       struct regcache *regs,
4794                       arm_displaced_step_closure *dsc)
4795 {
4796   unsigned int rn = bits (insn, 16, 19);
4797   unsigned int rm = bits (insn, 0, 3);
4798
4799
4800   if (!insn_references_pc (insn, 0x000f000ful))
4801     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4802
4803   if (debug_displaced)
4804     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4805                         (unsigned long) insn);
4806
4807   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4808
4809   install_preload_reg (gdbarch, regs, dsc, rn, rm);
4810   return 0;
4811 }
4812
4813 /* Copy/cleanup coprocessor load and store instructions.  */
4814
4815 static void
4816 cleanup_copro_load_store (struct gdbarch *gdbarch,
4817                           struct regcache *regs,
4818                           arm_displaced_step_closure *dsc)
4819 {
4820   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4821
4822   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4823
4824   if (dsc->u.ldst.writeback)
4825     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4826 }
4827
4828 static void
4829 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4830                           arm_displaced_step_closure *dsc,
4831                           int writeback, unsigned int rn)
4832 {
4833   ULONGEST rn_val;
4834
4835   /* Coprocessor load/store instructions:
4836
4837      {stc/stc2} [<Rn>, #+/-imm]  (and other immediate addressing modes)
4838      ->
4839      {stc/stc2} [r0, #+/-imm].
4840
4841      ldc/ldc2 are handled identically.  */
4842
4843   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4844   rn_val = displaced_read_reg (regs, dsc, rn);
4845   /* PC should be 4-byte aligned.  */
4846   rn_val = rn_val & 0xfffffffc;
4847   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4848
4849   dsc->u.ldst.writeback = writeback;
4850   dsc->u.ldst.rn = rn;
4851
4852   dsc->cleanup = &cleanup_copro_load_store;
4853 }
4854
4855 static int
4856 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4857                            struct regcache *regs,
4858                            arm_displaced_step_closure *dsc)
4859 {
4860   unsigned int rn = bits (insn, 16, 19);
4861
4862   if (!insn_references_pc (insn, 0x000f0000ul))
4863     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4864
4865   if (debug_displaced)
4866     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4867                         "load/store insn %.8lx\n", (unsigned long) insn);
4868
4869   dsc->modinsn[0] = insn & 0xfff0ffff;
4870
4871   install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4872
4873   return 0;
4874 }
4875
4876 static int
4877 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4878                               uint16_t insn2, struct regcache *regs,
4879                               arm_displaced_step_closure *dsc)
4880 {
4881   unsigned int rn = bits (insn1, 0, 3);
4882
4883   if (rn != ARM_PC_REGNUM)
4884     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4885                                         "copro load/store", dsc);
4886
4887   if (debug_displaced)
4888     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4889                         "load/store insn %.4x%.4x\n", insn1, insn2);
4890
4891   dsc->modinsn[0] = insn1 & 0xfff0;
4892   dsc->modinsn[1] = insn2;
4893   dsc->numinsns = 2;
4894
4895   /* This function is called for copying instruction LDC/LDC2/VLDR, which
4896      doesn't support writeback, so pass 0.  */
4897   install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4898
4899   return 0;
4900 }
4901
4902 /* Clean up branch instructions (actually perform the branch, by setting
4903    PC).  */
4904
4905 static void
4906 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4907                 arm_displaced_step_closure *dsc)
4908 {
4909   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4910   int branch_taken = condition_true (dsc->u.branch.cond, status);
4911   enum pc_write_style write_pc = dsc->u.branch.exchange
4912                                  ? BX_WRITE_PC : BRANCH_WRITE_PC;
4913
4914   if (!branch_taken)
4915     return;
4916
4917   if (dsc->u.branch.link)
4918     {
4919       /* The value of LR should be the next insn of current one.  In order
4920        not to confuse logic hanlding later insn `bx lr', if current insn mode
4921        is Thumb, the bit 0 of LR value should be set to 1.  */
4922       ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4923
4924       if (dsc->is_thumb)
4925         next_insn_addr |= 0x1;
4926
4927       displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4928                            CANNOT_WRITE_PC);
4929     }
4930
4931   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4932 }
4933
4934 /* Copy B/BL/BLX instructions with immediate destinations.  */
4935
4936 static void
4937 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4938                   arm_displaced_step_closure *dsc,
4939                   unsigned int cond, int exchange, int link, long offset)
4940 {
4941   /* Implement "BL<cond> <label>" as:
4942
4943      Preparation: cond <- instruction condition
4944      Insn: mov r0, r0  (nop)
4945      Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4946
4947      B<cond> similar, but don't set r14 in cleanup.  */
4948
4949   dsc->u.branch.cond = cond;
4950   dsc->u.branch.link = link;
4951   dsc->u.branch.exchange = exchange;
4952
4953   dsc->u.branch.dest = dsc->insn_addr;
4954   if (link && exchange)
4955     /* For BLX, offset is computed from the Align (PC, 4).  */
4956     dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
4957
4958   if (dsc->is_thumb)
4959     dsc->u.branch.dest += 4 + offset;
4960   else
4961     dsc->u.branch.dest += 8 + offset;
4962
4963   dsc->cleanup = &cleanup_branch;
4964 }
4965 static int
4966 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
4967                    struct regcache *regs, arm_displaced_step_closure *dsc)
4968 {
4969   unsigned int cond = bits (insn, 28, 31);
4970   int exchange = (cond == 0xf);
4971   int link = exchange || bit (insn, 24);
4972   long offset;
4973
4974   if (debug_displaced)
4975     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
4976                         "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
4977                         (unsigned long) insn);
4978   if (exchange)
4979     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
4980        then arrange the switch into Thumb mode.  */
4981     offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
4982   else
4983     offset = bits (insn, 0, 23) << 2;
4984
4985   if (bit (offset, 25))
4986     offset = offset | ~0x3ffffff;
4987
4988   dsc->modinsn[0] = ARM_NOP;
4989
4990   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4991   return 0;
4992 }
4993
4994 static int
4995 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
4996                       uint16_t insn2, struct regcache *regs,
4997                       arm_displaced_step_closure *dsc)
4998 {
4999   int link = bit (insn2, 14);
5000   int exchange = link && !bit (insn2, 12);
5001   int cond = INST_AL;
5002   long offset = 0;
5003   int j1 = bit (insn2, 13);
5004   int j2 = bit (insn2, 11);
5005   int s = sbits (insn1, 10, 10);
5006   int i1 = !(j1 ^ bit (insn1, 10));
5007   int i2 = !(j2 ^ bit (insn1, 10));
5008
5009   if (!link && !exchange) /* B */
5010     {
5011       offset = (bits (insn2, 0, 10) << 1);
5012       if (bit (insn2, 12)) /* Encoding T4 */
5013         {
5014           offset |= (bits (insn1, 0, 9) << 12)
5015             | (i2 << 22)
5016             | (i1 << 23)
5017             | (s << 24);
5018           cond = INST_AL;
5019         }
5020       else /* Encoding T3 */
5021         {
5022           offset |= (bits (insn1, 0, 5) << 12)
5023             | (j1 << 18)
5024             | (j2 << 19)
5025             | (s << 20);
5026           cond = bits (insn1, 6, 9);
5027         }
5028     }
5029   else
5030     {
5031       offset = (bits (insn1, 0, 9) << 12);
5032       offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
5033       offset |= exchange ?
5034         (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
5035     }
5036
5037   if (debug_displaced)
5038     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
5039                         "%.4x %.4x with offset %.8lx\n",
5040                         link ? (exchange) ? "blx" : "bl" : "b",
5041                         insn1, insn2, offset);
5042
5043   dsc->modinsn[0] = THUMB_NOP;
5044
5045   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5046   return 0;
5047 }
5048
5049 /* Copy B Thumb instructions.  */
5050 static int
5051 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
5052               arm_displaced_step_closure *dsc)
5053 {
5054   unsigned int cond = 0;
5055   int offset = 0;
5056   unsigned short bit_12_15 = bits (insn, 12, 15);
5057   CORE_ADDR from = dsc->insn_addr;
5058
5059   if (bit_12_15 == 0xd)
5060     {
5061       /* offset = SignExtend (imm8:0, 32) */
5062       offset = sbits ((insn << 1), 0, 8);
5063       cond = bits (insn, 8, 11);
5064     }
5065   else if (bit_12_15 == 0xe) /* Encoding T2 */
5066     {
5067       offset = sbits ((insn << 1), 0, 11);
5068       cond = INST_AL;
5069     }
5070
5071   if (debug_displaced)
5072     fprintf_unfiltered (gdb_stdlog,
5073                         "displaced: copying b immediate insn %.4x "
5074                         "with offset %d\n", insn, offset);
5075
5076   dsc->u.branch.cond = cond;
5077   dsc->u.branch.link = 0;
5078   dsc->u.branch.exchange = 0;
5079   dsc->u.branch.dest = from + 4 + offset;
5080
5081   dsc->modinsn[0] = THUMB_NOP;
5082
5083   dsc->cleanup = &cleanup_branch;
5084
5085   return 0;
5086 }
5087
5088 /* Copy BX/BLX with register-specified destinations.  */
5089
5090 static void
5091 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5092                     arm_displaced_step_closure *dsc, int link,
5093                     unsigned int cond, unsigned int rm)
5094 {
5095   /* Implement {BX,BLX}<cond> <reg>" as:
5096
5097      Preparation: cond <- instruction condition
5098      Insn: mov r0, r0 (nop)
5099      Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5100
5101      Don't set r14 in cleanup for BX.  */
5102
5103   dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5104
5105   dsc->u.branch.cond = cond;
5106   dsc->u.branch.link = link;
5107
5108   dsc->u.branch.exchange = 1;
5109
5110   dsc->cleanup = &cleanup_branch;
5111 }
5112
5113 static int
5114 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5115                      struct regcache *regs, arm_displaced_step_closure *dsc)
5116 {
5117   unsigned int cond = bits (insn, 28, 31);
5118   /* BX:  x12xxx1x
5119      BLX: x12xxx3x.  */
5120   int link = bit (insn, 5);
5121   unsigned int rm = bits (insn, 0, 3);
5122
5123   if (debug_displaced)
5124     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
5125                         (unsigned long) insn);
5126
5127   dsc->modinsn[0] = ARM_NOP;
5128
5129   install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5130   return 0;
5131 }
5132
5133 static int
5134 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5135                        struct regcache *regs,
5136                        arm_displaced_step_closure *dsc)
5137 {
5138   int link = bit (insn, 7);
5139   unsigned int rm = bits (insn, 3, 6);
5140
5141   if (debug_displaced)
5142     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
5143                         (unsigned short) insn);
5144
5145   dsc->modinsn[0] = THUMB_NOP;
5146
5147   install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5148
5149   return 0;
5150 }
5151
5152
5153 /* Copy/cleanup arithmetic/logic instruction with immediate RHS.  */
5154
5155 static void
5156 cleanup_alu_imm (struct gdbarch *gdbarch,
5157                  struct regcache *regs, arm_displaced_step_closure *dsc)
5158 {
5159   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5160   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5161   displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5162   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5163 }
5164
5165 static int
5166 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5167                   arm_displaced_step_closure *dsc)
5168 {
5169   unsigned int rn = bits (insn, 16, 19);
5170   unsigned int rd = bits (insn, 12, 15);
5171   unsigned int op = bits (insn, 21, 24);
5172   int is_mov = (op == 0xd);
5173   ULONGEST rd_val, rn_val;
5174
5175   if (!insn_references_pc (insn, 0x000ff000ul))
5176     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5177
5178   if (debug_displaced)
5179     fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
5180                         "%.8lx\n", is_mov ? "move" : "ALU",
5181                         (unsigned long) insn);
5182
5183   /* Instruction is of form:
5184
5185      <op><cond> rd, [rn,] #imm
5186
5187      Rewrite as:
5188
5189      Preparation: tmp1, tmp2 <- r0, r1;
5190                   r0, r1 <- rd, rn
5191      Insn: <op><cond> r0, r1, #imm
5192      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5193   */
5194
5195   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5196   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5197   rn_val = displaced_read_reg (regs, dsc, rn);
5198   rd_val = displaced_read_reg (regs, dsc, rd);
5199   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5200   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5201   dsc->rd = rd;
5202
5203   if (is_mov)
5204     dsc->modinsn[0] = insn & 0xfff00fff;
5205   else
5206     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5207
5208   dsc->cleanup = &cleanup_alu_imm;
5209
5210   return 0;
5211 }
5212
5213 static int
5214 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5215                      uint16_t insn2, struct regcache *regs,
5216                      arm_displaced_step_closure *dsc)
5217 {
5218   unsigned int op = bits (insn1, 5, 8);
5219   unsigned int rn, rm, rd;
5220   ULONGEST rd_val, rn_val;
5221
5222   rn = bits (insn1, 0, 3); /* Rn */
5223   rm = bits (insn2, 0, 3); /* Rm */
5224   rd = bits (insn2, 8, 11); /* Rd */
5225
5226   /* This routine is only called for instruction MOV.  */
5227   gdb_assert (op == 0x2 && rn == 0xf);
5228
5229   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5230     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5231
5232   if (debug_displaced)
5233     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
5234                         "ALU", insn1, insn2);
5235
5236   /* Instruction is of form:
5237
5238      <op><cond> rd, [rn,] #imm
5239
5240      Rewrite as:
5241
5242      Preparation: tmp1, tmp2 <- r0, r1;
5243                   r0, r1 <- rd, rn
5244      Insn: <op><cond> r0, r1, #imm
5245      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5246   */
5247
5248   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5249   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5250   rn_val = displaced_read_reg (regs, dsc, rn);
5251   rd_val = displaced_read_reg (regs, dsc, rd);
5252   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5253   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5254   dsc->rd = rd;
5255
5256   dsc->modinsn[0] = insn1;
5257   dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5258   dsc->numinsns = 2;
5259
5260   dsc->cleanup = &cleanup_alu_imm;
5261
5262   return 0;
5263 }
5264
5265 /* Copy/cleanup arithmetic/logic insns with register RHS.  */
5266
5267 static void
5268 cleanup_alu_reg (struct gdbarch *gdbarch,
5269                  struct regcache *regs, arm_displaced_step_closure *dsc)
5270 {
5271   ULONGEST rd_val;
5272   int i;
5273
5274   rd_val = displaced_read_reg (regs, dsc, 0);
5275
5276   for (i = 0; i < 3; i++)
5277     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5278
5279   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5280 }
5281
5282 static void
5283 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5284                  arm_displaced_step_closure *dsc,
5285                  unsigned int rd, unsigned int rn, unsigned int rm)
5286 {
5287   ULONGEST rd_val, rn_val, rm_val;
5288
5289   /* Instruction is of form:
5290
5291      <op><cond> rd, [rn,] rm [, <shift>]
5292
5293      Rewrite as:
5294
5295      Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5296                   r0, r1, r2 <- rd, rn, rm
5297      Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5298      Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5299   */
5300
5301   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5302   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5303   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5304   rd_val = displaced_read_reg (regs, dsc, rd);
5305   rn_val = displaced_read_reg (regs, dsc, rn);
5306   rm_val = displaced_read_reg (regs, dsc, rm);
5307   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5308   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5309   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5310   dsc->rd = rd;
5311
5312   dsc->cleanup = &cleanup_alu_reg;
5313 }
5314
5315 static int
5316 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5317                   arm_displaced_step_closure *dsc)
5318 {
5319   unsigned int op = bits (insn, 21, 24);
5320   int is_mov = (op == 0xd);
5321
5322   if (!insn_references_pc (insn, 0x000ff00ful))
5323     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5324
5325   if (debug_displaced)
5326     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
5327                         is_mov ? "move" : "ALU", (unsigned long) insn);
5328
5329   if (is_mov)
5330     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5331   else
5332     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5333
5334   install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5335                    bits (insn, 0, 3));
5336   return 0;
5337 }
5338
5339 static int
5340 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5341                     struct regcache *regs,
5342                     arm_displaced_step_closure *dsc)
5343 {
5344   unsigned rm, rd;
5345
5346   rm = bits (insn, 3, 6);
5347   rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5348
5349   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5350     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5351
5352   if (debug_displaced)
5353     fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
5354                         (unsigned short) insn);
5355
5356   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5357
5358   install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5359
5360   return 0;
5361 }
5362
5363 /* Cleanup/copy arithmetic/logic insns with shifted register RHS.  */
5364
5365 static void
5366 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5367                          struct regcache *regs,
5368                          arm_displaced_step_closure *dsc)
5369 {
5370   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5371   int i;
5372
5373   for (i = 0; i < 4; i++)
5374     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5375
5376   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5377 }
5378
5379 static void
5380 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5381                          arm_displaced_step_closure *dsc,
5382                          unsigned int rd, unsigned int rn, unsigned int rm,
5383                          unsigned rs)
5384 {
5385   int i;
5386   ULONGEST rd_val, rn_val, rm_val, rs_val;
5387
5388   /* Instruction is of form:
5389
5390      <op><cond> rd, [rn,] rm, <shift> rs
5391
5392      Rewrite as:
5393
5394      Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5395                   r0, r1, r2, r3 <- rd, rn, rm, rs
5396      Insn: <op><cond> r0, r1, r2, <shift> r3
5397      Cleanup: tmp5 <- r0
5398               r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5399               rd <- tmp5
5400   */
5401
5402   for (i = 0; i < 4; i++)
5403     dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5404
5405   rd_val = displaced_read_reg (regs, dsc, rd);
5406   rn_val = displaced_read_reg (regs, dsc, rn);
5407   rm_val = displaced_read_reg (regs, dsc, rm);
5408   rs_val = displaced_read_reg (regs, dsc, rs);
5409   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5410   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5411   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5412   displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5413   dsc->rd = rd;
5414   dsc->cleanup = &cleanup_alu_shifted_reg;
5415 }
5416
5417 static int
5418 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5419                           struct regcache *regs,
5420                           arm_displaced_step_closure *dsc)
5421 {
5422   unsigned int op = bits (insn, 21, 24);
5423   int is_mov = (op == 0xd);
5424   unsigned int rd, rn, rm, rs;
5425
5426   if (!insn_references_pc (insn, 0x000fff0ful))
5427     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5428
5429   if (debug_displaced)
5430     fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
5431                         "%.8lx\n", is_mov ? "move" : "ALU",
5432                         (unsigned long) insn);
5433
5434   rn = bits (insn, 16, 19);
5435   rm = bits (insn, 0, 3);
5436   rs = bits (insn, 8, 11);
5437   rd = bits (insn, 12, 15);
5438
5439   if (is_mov)
5440     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5441   else
5442     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5443
5444   install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5445
5446   return 0;
5447 }
5448
5449 /* Clean up load instructions.  */
5450
5451 static void
5452 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5453               arm_displaced_step_closure *dsc)
5454 {
5455   ULONGEST rt_val, rt_val2 = 0, rn_val;
5456
5457   rt_val = displaced_read_reg (regs, dsc, 0);
5458   if (dsc->u.ldst.xfersize == 8)
5459     rt_val2 = displaced_read_reg (regs, dsc, 1);
5460   rn_val = displaced_read_reg (regs, dsc, 2);
5461
5462   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5463   if (dsc->u.ldst.xfersize > 4)
5464     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5465   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5466   if (!dsc->u.ldst.immed)
5467     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5468
5469   /* Handle register writeback.  */
5470   if (dsc->u.ldst.writeback)
5471     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5472   /* Put result in right place.  */
5473   displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5474   if (dsc->u.ldst.xfersize == 8)
5475     displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5476 }
5477
5478 /* Clean up store instructions.  */
5479
5480 static void
5481 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5482                arm_displaced_step_closure *dsc)
5483 {
5484   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5485
5486   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5487   if (dsc->u.ldst.xfersize > 4)
5488     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5489   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5490   if (!dsc->u.ldst.immed)
5491     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5492   if (!dsc->u.ldst.restore_r4)
5493     displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5494
5495   /* Writeback.  */
5496   if (dsc->u.ldst.writeback)
5497     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5498 }
5499
5500 /* Copy "extra" load/store instructions.  These are halfword/doubleword
5501    transfers, which have a different encoding to byte/word transfers.  */
5502
5503 static int
5504 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5505                       struct regcache *regs, arm_displaced_step_closure *dsc)
5506 {
5507   unsigned int op1 = bits (insn, 20, 24);
5508   unsigned int op2 = bits (insn, 5, 6);
5509   unsigned int rt = bits (insn, 12, 15);
5510   unsigned int rn = bits (insn, 16, 19);
5511   unsigned int rm = bits (insn, 0, 3);
5512   char load[12]     = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5513   char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5514   int immed = (op1 & 0x4) != 0;
5515   int opcode;
5516   ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5517
5518   if (!insn_references_pc (insn, 0x000ff00ful))
5519     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5520
5521   if (debug_displaced)
5522     fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
5523                         "insn %.8lx\n", unprivileged ? "unprivileged " : "",
5524                         (unsigned long) insn);
5525
5526   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5527
5528   if (opcode < 0)
5529     internal_error (__FILE__, __LINE__,
5530                     _("copy_extra_ld_st: instruction decode error"));
5531
5532   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5533   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5534   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5535   if (!immed)
5536     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5537
5538   rt_val = displaced_read_reg (regs, dsc, rt);
5539   if (bytesize[opcode] == 8)
5540     rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5541   rn_val = displaced_read_reg (regs, dsc, rn);
5542   if (!immed)
5543     rm_val = displaced_read_reg (regs, dsc, rm);
5544
5545   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5546   if (bytesize[opcode] == 8)
5547     displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5548   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5549   if (!immed)
5550     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5551
5552   dsc->rd = rt;
5553   dsc->u.ldst.xfersize = bytesize[opcode];
5554   dsc->u.ldst.rn = rn;
5555   dsc->u.ldst.immed = immed;
5556   dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5557   dsc->u.ldst.restore_r4 = 0;
5558
5559   if (immed)
5560     /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5561         ->
5562        {ldr,str}<width><cond> r0, [r1,] [r2, #imm].  */
5563     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5564   else
5565     /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5566         ->
5567        {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3].  */
5568     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5569
5570   dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5571
5572   return 0;
5573 }
5574
5575 /* Copy byte/half word/word loads and stores.  */
5576
5577 static void
5578 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5579                     arm_displaced_step_closure *dsc, int load,
5580                     int immed, int writeback, int size, int usermode,
5581                     int rt, int rm, int rn)
5582 {
5583   ULONGEST rt_val, rn_val, rm_val = 0;
5584
5585   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5586   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5587   if (!immed)
5588     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5589   if (!load)
5590     dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5591
5592   rt_val = displaced_read_reg (regs, dsc, rt);
5593   rn_val = displaced_read_reg (regs, dsc, rn);
5594   if (!immed)
5595     rm_val = displaced_read_reg (regs, dsc, rm);
5596
5597   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5598   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5599   if (!immed)
5600     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5601   dsc->rd = rt;
5602   dsc->u.ldst.xfersize = size;
5603   dsc->u.ldst.rn = rn;
5604   dsc->u.ldst.immed = immed;
5605   dsc->u.ldst.writeback = writeback;
5606
5607   /* To write PC we can do:
5608
5609      Before this sequence of instructions:
5610      r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5611      r2 is the Rn value got from dispalced_read_reg.
5612
5613      Insn1: push {pc} Write address of STR instruction + offset on stack
5614      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
5615      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
5616                                 = addr(Insn1) + offset - addr(Insn3) - 8
5617                                 = offset - 16
5618      Insn4: add r4, r4, #8   r4 = offset - 8
5619      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
5620                                 = from + offset
5621      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5622
5623      Otherwise we don't know what value to write for PC, since the offset is
5624      architecture-dependent (sometimes PC+8, sometimes PC+12).  More details
5625      of this can be found in Section "Saving from r15" in
5626      http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5627
5628   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5629 }
5630
5631
5632 static int
5633 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5634                           uint16_t insn2, struct regcache *regs,
5635                           arm_displaced_step_closure *dsc, int size)
5636 {
5637   unsigned int u_bit = bit (insn1, 7);
5638   unsigned int rt = bits (insn2, 12, 15);
5639   int imm12 = bits (insn2, 0, 11);
5640   ULONGEST pc_val;
5641
5642   if (debug_displaced)
5643     fprintf_unfiltered (gdb_stdlog,
5644                         "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
5645                         (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5646                         imm12);
5647
5648   if (!u_bit)
5649     imm12 = -1 * imm12;
5650
5651   /* Rewrite instruction LDR Rt imm12 into:
5652
5653      Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5654
5655      LDR R0, R2, R3,
5656
5657      Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2].  */
5658
5659
5660   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5661   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5662   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5663
5664   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5665
5666   pc_val = pc_val & 0xfffffffc;
5667
5668   displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5669   displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5670
5671   dsc->rd = rt;
5672
5673   dsc->u.ldst.xfersize = size;
5674   dsc->u.ldst.immed = 0;
5675   dsc->u.ldst.writeback = 0;
5676   dsc->u.ldst.restore_r4 = 0;
5677
5678   /* LDR R0, R2, R3 */
5679   dsc->modinsn[0] = 0xf852;
5680   dsc->modinsn[1] = 0x3;
5681   dsc->numinsns = 2;
5682
5683   dsc->cleanup = &cleanup_load;
5684
5685   return 0;
5686 }
5687
5688 static int
5689 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5690                           uint16_t insn2, struct regcache *regs,
5691                           arm_displaced_step_closure *dsc,
5692                           int writeback, int immed)
5693 {
5694   unsigned int rt = bits (insn2, 12, 15);
5695   unsigned int rn = bits (insn1, 0, 3);
5696   unsigned int rm = bits (insn2, 0, 3);  /* Only valid if !immed.  */
5697   /* In LDR (register), there is also a register Rm, which is not allowed to
5698      be PC, so we don't have to check it.  */
5699
5700   if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5701     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5702                                         dsc);
5703
5704   if (debug_displaced)
5705     fprintf_unfiltered (gdb_stdlog,
5706                         "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
5707                          rt, rn, insn1, insn2);
5708
5709   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5710                       0, rt, rm, rn);
5711
5712   dsc->u.ldst.restore_r4 = 0;
5713
5714   if (immed)
5715     /* ldr[b]<cond> rt, [rn, #imm], etc.
5716        ->
5717        ldr[b]<cond> r0, [r2, #imm].  */
5718     {
5719       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5720       dsc->modinsn[1] = insn2 & 0x0fff;
5721     }
5722   else
5723     /* ldr[b]<cond> rt, [rn, rm], etc.
5724        ->
5725        ldr[b]<cond> r0, [r2, r3].  */
5726     {
5727       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5728       dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5729     }
5730
5731   dsc->numinsns = 2;
5732
5733   return 0;
5734 }
5735
5736
5737 static int
5738 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5739                             struct regcache *regs,
5740                             arm_displaced_step_closure *dsc,
5741                             int load, int size, int usermode)
5742 {
5743   int immed = !bit (insn, 25);
5744   int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5745   unsigned int rt = bits (insn, 12, 15);
5746   unsigned int rn = bits (insn, 16, 19);
5747   unsigned int rm = bits (insn, 0, 3);  /* Only valid if !immed.  */
5748
5749   if (!insn_references_pc (insn, 0x000ff00ful))
5750     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5751
5752   if (debug_displaced)
5753     fprintf_unfiltered (gdb_stdlog,
5754                         "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
5755                         load ? (size == 1 ? "ldrb" : "ldr")
5756                              : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
5757                         rt, rn,
5758                         (unsigned long) insn);
5759
5760   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5761                       usermode, rt, rm, rn);
5762
5763   if (load || rt != ARM_PC_REGNUM)
5764     {
5765       dsc->u.ldst.restore_r4 = 0;
5766
5767       if (immed)
5768         /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5769            ->
5770            {ldr,str}[b]<cond> r0, [r2, #imm].  */
5771         dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5772       else
5773         /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5774            ->
5775            {ldr,str}[b]<cond> r0, [r2, r3].  */
5776         dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5777     }
5778   else
5779     {
5780       /* We need to use r4 as scratch.  Make sure it's restored afterwards.  */
5781       dsc->u.ldst.restore_r4 = 1;
5782       dsc->modinsn[0] = 0xe92d8000;  /* push {pc} */
5783       dsc->modinsn[1] = 0xe8bd0010;  /* pop  {r4} */
5784       dsc->modinsn[2] = 0xe044400f;  /* sub r4, r4, pc.  */
5785       dsc->modinsn[3] = 0xe2844008;  /* add r4, r4, #8.  */
5786       dsc->modinsn[4] = 0xe0800004;  /* add r0, r0, r4.  */
5787
5788       /* As above.  */
5789       if (immed)
5790         dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5791       else
5792         dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5793
5794       dsc->numinsns = 6;
5795     }
5796
5797   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5798
5799   return 0;
5800 }
5801
5802 /* Cleanup LDM instructions with fully-populated register list.  This is an
5803    unfortunate corner case: it's impossible to implement correctly by modifying
5804    the instruction.  The issue is as follows: we have an instruction,
5805
5806    ldm rN, {r0-r15}
5807
5808    which we must rewrite to avoid loading PC.  A possible solution would be to
5809    do the load in two halves, something like (with suitable cleanup
5810    afterwards):
5811
5812    mov r8, rN
5813    ldm[id][ab] r8!, {r0-r7}
5814    str r7, <temp>
5815    ldm[id][ab] r8, {r7-r14}
5816    <bkpt>
5817
5818    but at present there's no suitable place for <temp>, since the scratch space
5819    is overwritten before the cleanup routine is called.  For now, we simply
5820    emulate the instruction.  */
5821
5822 static void
5823 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5824                         arm_displaced_step_closure *dsc)
5825 {
5826   int inc = dsc->u.block.increment;
5827   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5828   int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5829   uint32_t regmask = dsc->u.block.regmask;
5830   int regno = inc ? 0 : 15;
5831   CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5832   int exception_return = dsc->u.block.load && dsc->u.block.user
5833                          && (regmask & 0x8000) != 0;
5834   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5835   int do_transfer = condition_true (dsc->u.block.cond, status);
5836   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5837
5838   if (!do_transfer)
5839     return;
5840
5841   /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5842      sensible we can do here.  Complain loudly.  */
5843   if (exception_return)
5844     error (_("Cannot single-step exception return"));
5845
5846   /* We don't handle any stores here for now.  */
5847   gdb_assert (dsc->u.block.load != 0);
5848
5849   if (debug_displaced)
5850     fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
5851                         "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
5852                         dsc->u.block.increment ? "inc" : "dec",
5853                         dsc->u.block.before ? "before" : "after");
5854
5855   while (regmask)
5856     {
5857       uint32_t memword;
5858
5859       if (inc)
5860         while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5861           regno++;
5862       else
5863         while (regno >= 0 && (regmask & (1 << regno)) == 0)
5864           regno--;
5865
5866       xfer_addr += bump_before;
5867
5868       memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5869       displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5870
5871       xfer_addr += bump_after;
5872
5873       regmask &= ~(1 << regno);
5874     }
5875
5876   if (dsc->u.block.writeback)
5877     displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5878                          CANNOT_WRITE_PC);
5879 }
5880
5881 /* Clean up an STM which included the PC in the register list.  */
5882
5883 static void
5884 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5885                         arm_displaced_step_closure *dsc)
5886 {
5887   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5888   int store_executed = condition_true (dsc->u.block.cond, status);
5889   CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
5890   CORE_ADDR stm_insn_addr;
5891   uint32_t pc_val;
5892   long offset;
5893   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5894
5895   /* If condition code fails, there's nothing else to do.  */
5896   if (!store_executed)
5897     return;
5898
5899   if (dsc->u.block.increment)
5900     {
5901       pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5902
5903       if (dsc->u.block.before)
5904          pc_stored_at += 4;
5905     }
5906   else
5907     {
5908       pc_stored_at = dsc->u.block.xfer_addr;
5909
5910       if (dsc->u.block.before)
5911          pc_stored_at -= 4;
5912     }
5913
5914   pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5915   stm_insn_addr = dsc->scratch_base;
5916   offset = pc_val - stm_insn_addr;
5917
5918   if (debug_displaced)
5919     fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
5920                         "STM instruction\n", offset);
5921
5922   /* Rewrite the stored PC to the proper value for the non-displaced original
5923      instruction.  */
5924   write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5925                                  dsc->insn_addr + offset);
5926 }
5927
5928 /* Clean up an LDM which includes the PC in the register list.  We clumped all
5929    the registers in the transferred list into a contiguous range r0...rX (to
5930    avoid loading PC directly and losing control of the debugged program), so we
5931    must undo that here.  */
5932
5933 static void
5934 cleanup_block_load_pc (struct gdbarch *gdbarch,
5935                        struct regcache *regs,
5936                        arm_displaced_step_closure *dsc)
5937 {
5938   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5939   int load_executed = condition_true (dsc->u.block.cond, status);
5940   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5941   unsigned int regs_loaded = bitcount (mask);
5942   unsigned int num_to_shuffle = regs_loaded, clobbered;
5943
5944   /* The method employed here will fail if the register list is fully populated
5945      (we need to avoid loading PC directly).  */
5946   gdb_assert (num_to_shuffle < 16);
5947
5948   if (!load_executed)
5949     return;
5950
5951   clobbered = (1 << num_to_shuffle) - 1;
5952
5953   while (num_to_shuffle > 0)
5954     {
5955       if ((mask & (1 << write_reg)) != 0)
5956         {
5957           unsigned int read_reg = num_to_shuffle - 1;
5958
5959           if (read_reg != write_reg)
5960             {
5961               ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5962               displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5963               if (debug_displaced)
5964                 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
5965                                     "loaded register r%d to r%d\n"), read_reg,
5966                                     write_reg);
5967             }
5968           else if (debug_displaced)
5969             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
5970                                 "r%d already in the right place\n"),
5971                                 write_reg);
5972
5973           clobbered &= ~(1 << write_reg);
5974
5975           num_to_shuffle--;
5976         }
5977
5978       write_reg--;
5979     }
5980
5981   /* Restore any registers we scribbled over.  */
5982   for (write_reg = 0; clobbered != 0; write_reg++)
5983     {
5984       if ((clobbered & (1 << write_reg)) != 0)
5985         {
5986           displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
5987                                CANNOT_WRITE_PC);
5988           if (debug_displaced)
5989             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
5990                                 "clobbered register r%d\n"), write_reg);
5991           clobbered &= ~(1 << write_reg);
5992         }
5993     }
5994
5995   /* Perform register writeback manually.  */
5996   if (dsc->u.block.writeback)
5997     {
5998       ULONGEST new_rn_val = dsc->u.block.xfer_addr;
5999
6000       if (dsc->u.block.increment)
6001         new_rn_val += regs_loaded * 4;
6002       else
6003         new_rn_val -= regs_loaded * 4;
6004
6005       displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
6006                            CANNOT_WRITE_PC);
6007     }
6008 }
6009
6010 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
6011    in user-level code (in particular exception return, ldm rn, {...pc}^).  */
6012
6013 static int
6014 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
6015                      struct regcache *regs,
6016                      arm_displaced_step_closure *dsc)
6017 {
6018   int load = bit (insn, 20);
6019   int user = bit (insn, 22);
6020   int increment = bit (insn, 23);
6021   int before = bit (insn, 24);
6022   int writeback = bit (insn, 21);
6023   int rn = bits (insn, 16, 19);
6024
6025   /* Block transfers which don't mention PC can be run directly
6026      out-of-line.  */
6027   if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
6028     return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
6029
6030   if (rn == ARM_PC_REGNUM)
6031     {
6032       warning (_("displaced: Unpredictable LDM or STM with "
6033                  "base register r15"));
6034       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
6035     }
6036
6037   if (debug_displaced)
6038     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6039                         "%.8lx\n", (unsigned long) insn);
6040
6041   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6042   dsc->u.block.rn = rn;
6043
6044   dsc->u.block.load = load;
6045   dsc->u.block.user = user;
6046   dsc->u.block.increment = increment;
6047   dsc->u.block.before = before;
6048   dsc->u.block.writeback = writeback;
6049   dsc->u.block.cond = bits (insn, 28, 31);
6050
6051   dsc->u.block.regmask = insn & 0xffff;
6052
6053   if (load)
6054     {
6055       if ((insn & 0xffff) == 0xffff)
6056         {
6057           /* LDM with a fully-populated register list.  This case is
6058              particularly tricky.  Implement for now by fully emulating the
6059              instruction (which might not behave perfectly in all cases, but
6060              these instructions should be rare enough for that not to matter
6061              too much).  */
6062           dsc->modinsn[0] = ARM_NOP;
6063
6064           dsc->cleanup = &cleanup_block_load_all;
6065         }
6066       else
6067         {
6068           /* LDM of a list of registers which includes PC.  Implement by
6069              rewriting the list of registers to be transferred into a
6070              contiguous chunk r0...rX before doing the transfer, then shuffling
6071              registers into the correct places in the cleanup routine.  */
6072           unsigned int regmask = insn & 0xffff;
6073           unsigned int num_in_list = bitcount (regmask), new_regmask;
6074           unsigned int i;
6075
6076           for (i = 0; i < num_in_list; i++)
6077             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6078
6079           /* Writeback makes things complicated.  We need to avoid clobbering
6080              the base register with one of the registers in our modified
6081              register list, but just using a different register can't work in
6082              all cases, e.g.:
6083
6084                ldm r14!, {r0-r13,pc}
6085
6086              which would need to be rewritten as:
6087
6088                ldm rN!, {r0-r14}
6089
6090              but that can't work, because there's no free register for N.
6091
6092              Solve this by turning off the writeback bit, and emulating
6093              writeback manually in the cleanup routine.  */
6094
6095           if (writeback)
6096             insn &= ~(1 << 21);
6097
6098           new_regmask = (1 << num_in_list) - 1;
6099
6100           if (debug_displaced)
6101             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6102                                 "{..., pc}: original reg list %.4x, modified "
6103                                 "list %.4x\n"), rn, writeback ? "!" : "",
6104                                 (int) insn & 0xffff, new_regmask);
6105
6106           dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6107
6108           dsc->cleanup = &cleanup_block_load_pc;
6109         }
6110     }
6111   else
6112     {
6113       /* STM of a list of registers which includes PC.  Run the instruction
6114          as-is, but out of line: this will store the wrong value for the PC,
6115          so we must manually fix up the memory in the cleanup routine.
6116          Doing things this way has the advantage that we can auto-detect
6117          the offset of the PC write (which is architecture-dependent) in
6118          the cleanup routine.  */
6119       dsc->modinsn[0] = insn;
6120
6121       dsc->cleanup = &cleanup_block_store_pc;
6122     }
6123
6124   return 0;
6125 }
6126
6127 static int
6128 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6129                         struct regcache *regs,
6130                         arm_displaced_step_closure *dsc)
6131 {
6132   int rn = bits (insn1, 0, 3);
6133   int load = bit (insn1, 4);
6134   int writeback = bit (insn1, 5);
6135
6136   /* Block transfers which don't mention PC can be run directly
6137      out-of-line.  */
6138   if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6139     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6140
6141   if (rn == ARM_PC_REGNUM)
6142     {
6143       warning (_("displaced: Unpredictable LDM or STM with "
6144                  "base register r15"));
6145       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6146                                           "unpredictable ldm/stm", dsc);
6147     }
6148
6149   if (debug_displaced)
6150     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6151                         "%.4x%.4x\n", insn1, insn2);
6152
6153   /* Clear bit 13, since it should be always zero.  */
6154   dsc->u.block.regmask = (insn2 & 0xdfff);
6155   dsc->u.block.rn = rn;
6156
6157   dsc->u.block.load = load;
6158   dsc->u.block.user = 0;
6159   dsc->u.block.increment = bit (insn1, 7);
6160   dsc->u.block.before = bit (insn1, 8);
6161   dsc->u.block.writeback = writeback;
6162   dsc->u.block.cond = INST_AL;
6163   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6164
6165   if (load)
6166     {
6167       if (dsc->u.block.regmask == 0xffff)
6168         {
6169           /* This branch is impossible to happen.  */
6170           gdb_assert (0);
6171         }
6172       else
6173         {
6174           unsigned int regmask = dsc->u.block.regmask;
6175           unsigned int num_in_list = bitcount (regmask), new_regmask;
6176           unsigned int i;
6177
6178           for (i = 0; i < num_in_list; i++)
6179             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6180
6181           if (writeback)
6182             insn1 &= ~(1 << 5);
6183
6184           new_regmask = (1 << num_in_list) - 1;
6185
6186           if (debug_displaced)
6187             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6188                                 "{..., pc}: original reg list %.4x, modified "
6189                                 "list %.4x\n"), rn, writeback ? "!" : "",
6190                                 (int) dsc->u.block.regmask, new_regmask);
6191
6192           dsc->modinsn[0] = insn1;
6193           dsc->modinsn[1] = (new_regmask & 0xffff);
6194           dsc->numinsns = 2;
6195
6196           dsc->cleanup = &cleanup_block_load_pc;
6197         }
6198     }
6199   else
6200     {
6201       dsc->modinsn[0] = insn1;
6202       dsc->modinsn[1] = insn2;
6203       dsc->numinsns = 2;
6204       dsc->cleanup = &cleanup_block_store_pc;
6205     }
6206   return 0;
6207 }
6208
6209 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6210  This is used to avoid a dependency on BFD's bfd_endian enum.  */
6211
6212 ULONGEST
6213 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6214                                                int byte_order)
6215 {
6216   return read_memory_unsigned_integer (memaddr, len,
6217                                        (enum bfd_endian) byte_order);
6218 }
6219
6220 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs.  */
6221
6222 CORE_ADDR
6223 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6224                                    CORE_ADDR val)
6225 {
6226   return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6227 }
6228
6229 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
6230
6231 static CORE_ADDR
6232 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6233 {
6234   return 0;
6235 }
6236
6237 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs.  */
6238
6239 int
6240 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6241 {
6242   return arm_is_thumb (self->regcache);
6243 }
6244
6245 /* single_step() is called just before we want to resume the inferior,
6246    if we want to single-step it but there is no hardware or kernel
6247    single-step support.  We find the target of the coming instructions
6248    and breakpoint them.  */
6249
6250 std::vector<CORE_ADDR>
6251 arm_software_single_step (struct regcache *regcache)
6252 {
6253   struct gdbarch *gdbarch = regcache->arch ();
6254   struct arm_get_next_pcs next_pcs_ctx;
6255
6256   arm_get_next_pcs_ctor (&next_pcs_ctx,
6257                          &arm_get_next_pcs_ops,
6258                          gdbarch_byte_order (gdbarch),
6259                          gdbarch_byte_order_for_code (gdbarch),
6260                          0,
6261                          regcache);
6262
6263   std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6264
6265   for (CORE_ADDR &pc_ref : next_pcs)
6266     pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6267
6268   return next_pcs;
6269 }
6270
6271 /* Cleanup/copy SVC (SWI) instructions.  These two functions are overridden
6272    for Linux, where some SVC instructions must be treated specially.  */
6273
6274 static void
6275 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6276              arm_displaced_step_closure *dsc)
6277 {
6278   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6279
6280   if (debug_displaced)
6281     fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
6282                         "%.8lx\n", (unsigned long) resume_addr);
6283
6284   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6285 }
6286
6287
6288 /* Common copy routine for svc instruciton.  */
6289
6290 static int
6291 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6292              arm_displaced_step_closure *dsc)
6293 {
6294   /* Preparation: none.
6295      Insn: unmodified svc.
6296      Cleanup: pc <- insn_addr + insn_size.  */
6297
6298   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6299      instruction.  */
6300   dsc->wrote_to_pc = 1;
6301
6302   /* Allow OS-specific code to override SVC handling.  */
6303   if (dsc->u.svc.copy_svc_os)
6304     return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6305   else
6306     {
6307       dsc->cleanup = &cleanup_svc;
6308       return 0;
6309     }
6310 }
6311
6312 static int
6313 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6314               struct regcache *regs, arm_displaced_step_closure *dsc)
6315 {
6316
6317   if (debug_displaced)
6318     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
6319                         (unsigned long) insn);
6320
6321   dsc->modinsn[0] = insn;
6322
6323   return install_svc (gdbarch, regs, dsc);
6324 }
6325
6326 static int
6327 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6328                 struct regcache *regs, arm_displaced_step_closure *dsc)
6329 {
6330
6331   if (debug_displaced)
6332     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
6333                         insn);
6334
6335   dsc->modinsn[0] = insn;
6336
6337   return install_svc (gdbarch, regs, dsc);
6338 }
6339
6340 /* Copy undefined instructions.  */
6341
6342 static int
6343 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6344                 arm_displaced_step_closure *dsc)
6345 {
6346   if (debug_displaced)
6347     fprintf_unfiltered (gdb_stdlog,
6348                         "displaced: copying undefined insn %.8lx\n",
6349                         (unsigned long) insn);
6350
6351   dsc->modinsn[0] = insn;
6352
6353   return 0;
6354 }
6355
6356 static int
6357 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6358                        arm_displaced_step_closure *dsc)
6359 {
6360
6361   if (debug_displaced)
6362     fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
6363                        "%.4x %.4x\n", (unsigned short) insn1,
6364                        (unsigned short) insn2);
6365
6366   dsc->modinsn[0] = insn1;
6367   dsc->modinsn[1] = insn2;
6368   dsc->numinsns = 2;
6369
6370   return 0;
6371 }
6372
6373 /* Copy unpredictable instructions.  */
6374
6375 static int
6376 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6377                  arm_displaced_step_closure *dsc)
6378 {
6379   if (debug_displaced)
6380     fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
6381                         "%.8lx\n", (unsigned long) insn);
6382
6383   dsc->modinsn[0] = insn;
6384
6385   return 0;
6386 }
6387
6388 /* The decode_* functions are instruction decoding helpers.  They mostly follow
6389    the presentation in the ARM ARM.  */
6390
6391 static int
6392 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6393                               struct regcache *regs,
6394                               arm_displaced_step_closure *dsc)
6395 {
6396   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6397   unsigned int rn = bits (insn, 16, 19);
6398
6399   if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6400     return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6401   else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6402     return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6403   else if ((op1 & 0x60) == 0x20)
6404     return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6405   else if ((op1 & 0x71) == 0x40)
6406     return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6407                                 dsc);
6408   else if ((op1 & 0x77) == 0x41)
6409     return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6410   else if ((op1 & 0x77) == 0x45)
6411     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pli.  */
6412   else if ((op1 & 0x77) == 0x51)
6413     {
6414       if (rn != 0xf)
6415         return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6416       else
6417         return arm_copy_unpred (gdbarch, insn, dsc);
6418     }
6419   else if ((op1 & 0x77) == 0x55)
6420     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6421   else if (op1 == 0x57)
6422     switch (op2)
6423       {
6424       case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6425       case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6426       case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6427       case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6428       default: return arm_copy_unpred (gdbarch, insn, dsc);
6429       }
6430   else if ((op1 & 0x63) == 0x43)
6431     return arm_copy_unpred (gdbarch, insn, dsc);
6432   else if ((op2 & 0x1) == 0x0)
6433     switch (op1 & ~0x80)
6434       {
6435       case 0x61:
6436         return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6437       case 0x65:
6438         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
6439       case 0x71: case 0x75:
6440         /* pld/pldw reg.  */
6441         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6442       case 0x63: case 0x67: case 0x73: case 0x77:
6443         return arm_copy_unpred (gdbarch, insn, dsc);
6444       default:
6445         return arm_copy_undef (gdbarch, insn, dsc);
6446       }
6447   else
6448     return arm_copy_undef (gdbarch, insn, dsc);  /* Probably unreachable.  */
6449 }
6450
6451 static int
6452 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6453                           struct regcache *regs,
6454                           arm_displaced_step_closure *dsc)
6455 {
6456   if (bit (insn, 27) == 0)
6457     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6458   /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx.  */
6459   else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6460     {
6461     case 0x0: case 0x2:
6462       return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6463
6464     case 0x1: case 0x3:
6465       return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6466
6467     case 0x4: case 0x5: case 0x6: case 0x7:
6468       return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6469
6470     case 0x8:
6471       switch ((insn & 0xe00000) >> 21)
6472         {
6473         case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6474           /* stc/stc2.  */
6475           return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6476
6477         case 0x2:
6478           return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6479
6480         default:
6481           return arm_copy_undef (gdbarch, insn, dsc);
6482         }
6483
6484     case 0x9:
6485       {
6486          int rn_f = (bits (insn, 16, 19) == 0xf);
6487         switch ((insn & 0xe00000) >> 21)
6488           {
6489           case 0x1: case 0x3:
6490             /* ldc/ldc2 imm (undefined for rn == pc).  */
6491             return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6492                         : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6493
6494           case 0x2:
6495             return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6496
6497           case 0x4: case 0x5: case 0x6: case 0x7:
6498             /* ldc/ldc2 lit (undefined for rn != pc).  */
6499             return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6500                         : arm_copy_undef (gdbarch, insn, dsc);
6501
6502           default:
6503             return arm_copy_undef (gdbarch, insn, dsc);
6504           }
6505       }
6506
6507     case 0xa:
6508       return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6509
6510     case 0xb:
6511       if (bits (insn, 16, 19) == 0xf)
6512         /* ldc/ldc2 lit.  */
6513         return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6514       else
6515         return arm_copy_undef (gdbarch, insn, dsc);
6516
6517     case 0xc:
6518       if (bit (insn, 4))
6519         return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6520       else
6521         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6522
6523     case 0xd:
6524       if (bit (insn, 4))
6525         return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6526       else
6527         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6528
6529     default:
6530       return arm_copy_undef (gdbarch, insn, dsc);
6531     }
6532 }
6533
6534 /* Decode miscellaneous instructions in dp/misc encoding space.  */
6535
6536 static int
6537 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6538                           struct regcache *regs,
6539                           arm_displaced_step_closure *dsc)
6540 {
6541   unsigned int op2 = bits (insn, 4, 6);
6542   unsigned int op = bits (insn, 21, 22);
6543
6544   switch (op2)
6545     {
6546     case 0x0:
6547       return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6548
6549     case 0x1:
6550       if (op == 0x1)  /* bx.  */
6551         return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6552       else if (op == 0x3)
6553         return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6554       else
6555         return arm_copy_undef (gdbarch, insn, dsc);
6556
6557     case 0x2:
6558       if (op == 0x1)
6559         /* Not really supported.  */
6560         return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6561       else
6562         return arm_copy_undef (gdbarch, insn, dsc);
6563
6564     case 0x3:
6565       if (op == 0x1)
6566         return arm_copy_bx_blx_reg (gdbarch, insn,
6567                                 regs, dsc);  /* blx register.  */
6568       else
6569         return arm_copy_undef (gdbarch, insn, dsc);
6570
6571     case 0x5:
6572       return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6573
6574     case 0x7:
6575       if (op == 0x1)
6576         return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6577       else if (op == 0x3)
6578         /* Not really supported.  */
6579         return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
6580
6581     default:
6582       return arm_copy_undef (gdbarch, insn, dsc);
6583     }
6584 }
6585
6586 static int
6587 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
6588                     struct regcache *regs,
6589                     arm_displaced_step_closure *dsc)
6590 {
6591   if (bit (insn, 25))
6592     switch (bits (insn, 20, 24))
6593       {
6594       case 0x10:
6595         return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
6596
6597       case 0x14:
6598         return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
6599
6600       case 0x12: case 0x16:
6601         return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
6602
6603       default:
6604         return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
6605       }
6606   else
6607     {
6608       uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
6609
6610       if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
6611         return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
6612       else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
6613         return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
6614       else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
6615         return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
6616       else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
6617         return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
6618       else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
6619         return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
6620       else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
6621         return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
6622       else if (op2 == 0xb || (op2 & 0xd) == 0xd)
6623         /* 2nd arg means "unprivileged".  */
6624         return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
6625                                      dsc);
6626     }
6627
6628   /* Should be unreachable.  */
6629   return 1;
6630 }
6631
6632 static int
6633 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
6634                              struct regcache *regs,
6635                              arm_displaced_step_closure *dsc)
6636 {
6637   int a = bit (insn, 25), b = bit (insn, 4);
6638   uint32_t op1 = bits (insn, 20, 24);
6639
6640   if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
6641       || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
6642     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
6643   else if ((!a && (op1 & 0x17) == 0x02)
6644             || (a && (op1 & 0x17) == 0x02 && !b))
6645     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
6646   else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
6647             || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
6648     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
6649   else if ((!a && (op1 & 0x17) == 0x03)
6650            || (a && (op1 & 0x17) == 0x03 && !b))
6651     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
6652   else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
6653             || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
6654     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
6655   else if ((!a && (op1 & 0x17) == 0x06)
6656            || (a && (op1 & 0x17) == 0x06 && !b))
6657     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
6658   else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
6659            || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
6660     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
6661   else if ((!a && (op1 & 0x17) == 0x07)
6662            || (a && (op1 & 0x17) == 0x07 && !b))
6663     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
6664
6665   /* Should be unreachable.  */
6666   return 1;
6667 }
6668
6669 static int
6670 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
6671                   arm_displaced_step_closure *dsc)
6672 {
6673   switch (bits (insn, 20, 24))
6674     {
6675     case 0x00: case 0x01: case 0x02: case 0x03:
6676       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
6677
6678     case 0x04: case 0x05: case 0x06: case 0x07:
6679       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
6680
6681     case 0x08: case 0x09: case 0x0a: case 0x0b:
6682     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
6683       return arm_copy_unmodified (gdbarch, insn,
6684                               "decode/pack/unpack/saturate/reverse", dsc);
6685
6686     case 0x18:
6687       if (bits (insn, 5, 7) == 0)  /* op2.  */
6688          {
6689           if (bits (insn, 12, 15) == 0xf)
6690             return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
6691           else
6692             return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
6693         }
6694       else
6695          return arm_copy_undef (gdbarch, insn, dsc);
6696
6697     case 0x1a: case 0x1b:
6698       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6699         return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
6700       else
6701         return arm_copy_undef (gdbarch, insn, dsc);
6702
6703     case 0x1c: case 0x1d:
6704       if (bits (insn, 5, 6) == 0x0)  /* op2[1:0].  */
6705          {
6706           if (bits (insn, 0, 3) == 0xf)
6707             return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
6708           else
6709             return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
6710         }
6711       else
6712         return arm_copy_undef (gdbarch, insn, dsc);
6713
6714     case 0x1e: case 0x1f:
6715       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6716         return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
6717       else
6718         return arm_copy_undef (gdbarch, insn, dsc);
6719     }
6720
6721   /* Should be unreachable.  */
6722   return 1;
6723 }
6724
6725 static int
6726 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
6727                         struct regcache *regs,
6728                         arm_displaced_step_closure *dsc)
6729 {
6730   if (bit (insn, 25))
6731     return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6732   else
6733     return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
6734 }
6735
6736 static int
6737 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
6738                           struct regcache *regs,
6739                           arm_displaced_step_closure *dsc)
6740 {
6741   unsigned int opcode = bits (insn, 20, 24);
6742
6743   switch (opcode)
6744     {
6745     case 0x04: case 0x05:  /* VFP/Neon mrrc/mcrr.  */
6746       return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
6747
6748     case 0x08: case 0x0a: case 0x0c: case 0x0e:
6749     case 0x12: case 0x16:
6750       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
6751
6752     case 0x09: case 0x0b: case 0x0d: case 0x0f:
6753     case 0x13: case 0x17:
6754       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
6755
6756     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6757     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6758       /* Note: no writeback for these instructions.  Bit 25 will always be
6759          zero though (via caller), so the following works OK.  */
6760       return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6761     }
6762
6763   /* Should be unreachable.  */
6764   return 1;
6765 }
6766
6767 /* Decode shifted register instructions.  */
6768
6769 static int
6770 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
6771                             uint16_t insn2,  struct regcache *regs,
6772                             arm_displaced_step_closure *dsc)
6773 {
6774   /* PC is only allowed to be used in instruction MOV.  */
6775
6776   unsigned int op = bits (insn1, 5, 8);
6777   unsigned int rn = bits (insn1, 0, 3);
6778
6779   if (op == 0x2 && rn == 0xf) /* MOV */
6780     return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
6781   else
6782     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6783                                         "dp (shift reg)", dsc);
6784 }
6785
6786
6787 /* Decode extension register load/store.  Exactly the same as
6788    arm_decode_ext_reg_ld_st.  */
6789
6790 static int
6791 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
6792                              uint16_t insn2,  struct regcache *regs,
6793                              arm_displaced_step_closure *dsc)
6794 {
6795   unsigned int opcode = bits (insn1, 4, 8);
6796
6797   switch (opcode)
6798     {
6799     case 0x04: case 0x05:
6800       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6801                                           "vfp/neon vmov", dsc);
6802
6803     case 0x08: case 0x0c: /* 01x00 */
6804     case 0x0a: case 0x0e: /* 01x10 */
6805     case 0x12: case 0x16: /* 10x10 */
6806       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6807                                           "vfp/neon vstm/vpush", dsc);
6808
6809     case 0x09: case 0x0d: /* 01x01 */
6810     case 0x0b: case 0x0f: /* 01x11 */
6811     case 0x13: case 0x17: /* 10x11 */
6812       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6813                                           "vfp/neon vldm/vpop", dsc);
6814
6815     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6816       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6817                                           "vstr", dsc);
6818     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6819       return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
6820     }
6821
6822   /* Should be unreachable.  */
6823   return 1;
6824 }
6825
6826 static int
6827 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
6828                       struct regcache *regs, arm_displaced_step_closure *dsc)
6829 {
6830   unsigned int op1 = bits (insn, 20, 25);
6831   int op = bit (insn, 4);
6832   unsigned int coproc = bits (insn, 8, 11);
6833
6834   if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
6835     return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
6836   else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
6837            && (coproc & 0xe) != 0xa)
6838     /* stc/stc2.  */
6839     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6840   else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
6841            && (coproc & 0xe) != 0xa)
6842     /* ldc/ldc2 imm/lit.  */
6843     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6844   else if ((op1 & 0x3e) == 0x00)
6845     return arm_copy_undef (gdbarch, insn, dsc);
6846   else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
6847     return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
6848   else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
6849     return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6850   else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
6851     return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6852   else if ((op1 & 0x30) == 0x20 && !op)
6853     {
6854       if ((coproc & 0xe) == 0xa)
6855         return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
6856       else
6857         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6858     }
6859   else if ((op1 & 0x30) == 0x20 && op)
6860     return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
6861   else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
6862     return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6863   else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
6864     return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6865   else if ((op1 & 0x30) == 0x30)
6866     return arm_copy_svc (gdbarch, insn, regs, dsc);
6867   else
6868     return arm_copy_undef (gdbarch, insn, dsc);  /* Possibly unreachable.  */
6869 }
6870
6871 static int
6872 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
6873                          uint16_t insn2, struct regcache *regs,
6874                          arm_displaced_step_closure *dsc)
6875 {
6876   unsigned int coproc = bits (insn2, 8, 11);
6877   unsigned int bit_5_8 = bits (insn1, 5, 8);
6878   unsigned int bit_9 = bit (insn1, 9);
6879   unsigned int bit_4 = bit (insn1, 4);
6880
6881   if (bit_9 == 0)
6882     {
6883       if (bit_5_8 == 2)
6884         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6885                                             "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
6886                                             dsc);
6887       else if (bit_5_8 == 0) /* UNDEFINED.  */
6888         return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
6889       else
6890         {
6891            /*coproc is 101x.  SIMD/VFP, ext registers load/store.  */
6892           if ((coproc & 0xe) == 0xa)
6893             return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
6894                                                 dsc);
6895           else /* coproc is not 101x.  */
6896             {
6897               if (bit_4 == 0) /* STC/STC2.  */
6898                 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6899                                                     "stc/stc2", dsc);
6900               else /* LDC/LDC2 {literal, immeidate}.  */
6901                 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
6902                                                      regs, dsc);
6903             }
6904         }
6905     }
6906   else
6907     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
6908
6909   return 0;
6910 }
6911
6912 static void
6913 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
6914                      arm_displaced_step_closure *dsc, int rd)
6915 {
6916   /* ADR Rd, #imm
6917
6918      Rewrite as:
6919
6920      Preparation: Rd <- PC
6921      Insn: ADD Rd, #imm
6922      Cleanup: Null.
6923   */
6924
6925   /* Rd <- PC */
6926   int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6927   displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
6928 }
6929
6930 static int
6931 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
6932                               arm_displaced_step_closure *dsc,
6933                               int rd, unsigned int imm)
6934 {
6935
6936   /* Encoding T2: ADDS Rd, #imm */
6937   dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
6938
6939   install_pc_relative (gdbarch, regs, dsc, rd);
6940
6941   return 0;
6942 }
6943
6944 static int
6945 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
6946                                 struct regcache *regs,
6947                                 arm_displaced_step_closure *dsc)
6948 {
6949   unsigned int rd = bits (insn, 8, 10);
6950   unsigned int imm8 = bits (insn, 0, 7);
6951
6952   if (debug_displaced)
6953     fprintf_unfiltered (gdb_stdlog,
6954                         "displaced: copying thumb adr r%d, #%d insn %.4x\n",
6955                         rd, imm8, insn);
6956
6957   return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
6958 }
6959
6960 static int
6961 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
6962                               uint16_t insn2, struct regcache *regs,
6963                               arm_displaced_step_closure *dsc)
6964 {
6965   unsigned int rd = bits (insn2, 8, 11);
6966   /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
6967      extract raw immediate encoding rather than computing immediate.  When
6968      generating ADD or SUB instruction, we can simply perform OR operation to
6969      set immediate into ADD.  */
6970   unsigned int imm_3_8 = insn2 & 0x70ff;
6971   unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10.  */
6972
6973   if (debug_displaced)
6974     fprintf_unfiltered (gdb_stdlog,
6975                         "displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
6976                         rd, imm_i, imm_3_8, insn1, insn2);
6977
6978   if (bit (insn1, 7)) /* Encoding T2 */
6979     {
6980       /* Encoding T3: SUB Rd, Rd, #imm */
6981       dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
6982       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6983     }
6984   else /* Encoding T3 */
6985     {
6986       /* Encoding T3: ADD Rd, Rd, #imm */
6987       dsc->modinsn[0] = (0xf100 | rd | imm_i);
6988       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6989     }
6990   dsc->numinsns = 2;
6991
6992   install_pc_relative (gdbarch, regs, dsc, rd);
6993
6994   return 0;
6995 }
6996
6997 static int
6998 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
6999                               struct regcache *regs,
7000                               arm_displaced_step_closure *dsc)
7001 {
7002   unsigned int rt = bits (insn1, 8, 10);
7003   unsigned int pc;
7004   int imm8 = (bits (insn1, 0, 7) << 2);
7005
7006   /* LDR Rd, #imm8
7007
7008      Rwrite as:
7009
7010      Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
7011
7012      Insn: LDR R0, [R2, R3];
7013      Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
7014
7015   if (debug_displaced)
7016     fprintf_unfiltered (gdb_stdlog,
7017                         "displaced: copying thumb ldr r%d [pc #%d]\n"
7018                         , rt, imm8);
7019
7020   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
7021   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
7022   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
7023   pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
7024   /* The assembler calculates the required value of the offset from the
7025      Align(PC,4) value of this instruction to the label.  */
7026   pc = pc & 0xfffffffc;
7027
7028   displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
7029   displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
7030
7031   dsc->rd = rt;
7032   dsc->u.ldst.xfersize = 4;
7033   dsc->u.ldst.rn = 0;
7034   dsc->u.ldst.immed = 0;
7035   dsc->u.ldst.writeback = 0;
7036   dsc->u.ldst.restore_r4 = 0;
7037
7038   dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
7039
7040   dsc->cleanup = &cleanup_load;
7041
7042   return 0;
7043 }
7044
7045 /* Copy Thumb cbnz/cbz insruction.  */
7046
7047 static int
7048 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
7049                      struct regcache *regs,
7050                      arm_displaced_step_closure *dsc)
7051 {
7052   int non_zero = bit (insn1, 11);
7053   unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
7054   CORE_ADDR from = dsc->insn_addr;
7055   int rn = bits (insn1, 0, 2);
7056   int rn_val = displaced_read_reg (regs, dsc, rn);
7057
7058   dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
7059   /* CBNZ and CBZ do not affect the condition flags.  If condition is true,
7060      set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
7061      condition is false, let it be, cleanup_branch will do nothing.  */
7062   if (dsc->u.branch.cond)
7063     {
7064       dsc->u.branch.cond = INST_AL;
7065       dsc->u.branch.dest = from + 4 + imm5;
7066     }
7067   else
7068       dsc->u.branch.dest = from + 2;
7069
7070   dsc->u.branch.link = 0;
7071   dsc->u.branch.exchange = 0;
7072
7073   if (debug_displaced)
7074     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
7075                         " insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
7076                         rn, rn_val, insn1, dsc->u.branch.dest);
7077
7078   dsc->modinsn[0] = THUMB_NOP;
7079
7080   dsc->cleanup = &cleanup_branch;
7081   return 0;
7082 }
7083
7084 /* Copy Table Branch Byte/Halfword */
7085 static int
7086 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
7087                           uint16_t insn2, struct regcache *regs,
7088                           arm_displaced_step_closure *dsc)
7089 {
7090   ULONGEST rn_val, rm_val;
7091   int is_tbh = bit (insn2, 4);
7092   CORE_ADDR halfwords = 0;
7093   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7094
7095   rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
7096   rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
7097
7098   if (is_tbh)
7099     {
7100       gdb_byte buf[2];
7101
7102       target_read_memory (rn_val + 2 * rm_val, buf, 2);
7103       halfwords = extract_unsigned_integer (buf, 2, byte_order);
7104     }
7105   else
7106     {
7107       gdb_byte buf[1];
7108
7109       target_read_memory (rn_val + rm_val, buf, 1);
7110       halfwords = extract_unsigned_integer (buf, 1, byte_order);
7111     }
7112
7113   if (debug_displaced)
7114     fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
7115                         " offset 0x%x\n", is_tbh ? "tbh" : "tbb",
7116                         (unsigned int) rn_val, (unsigned int) rm_val,
7117                         (unsigned int) halfwords);
7118
7119   dsc->u.branch.cond = INST_AL;
7120   dsc->u.branch.link = 0;
7121   dsc->u.branch.exchange = 0;
7122   dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
7123
7124   dsc->cleanup = &cleanup_branch;
7125
7126   return 0;
7127 }
7128
7129 static void
7130 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
7131                           arm_displaced_step_closure *dsc)
7132 {
7133   /* PC <- r7 */
7134   int val = displaced_read_reg (regs, dsc, 7);
7135   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
7136
7137   /* r7 <- r8 */
7138   val = displaced_read_reg (regs, dsc, 8);
7139   displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
7140
7141   /* r8 <- tmp[0] */
7142   displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
7143
7144 }
7145
7146 static int
7147 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
7148                          struct regcache *regs,
7149                          arm_displaced_step_closure *dsc)
7150 {
7151   dsc->u.block.regmask = insn1 & 0x00ff;
7152
7153   /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
7154      to :
7155
7156      (1) register list is full, that is, r0-r7 are used.
7157      Prepare: tmp[0] <- r8
7158
7159      POP {r0, r1, ...., r6, r7}; remove PC from reglist
7160      MOV r8, r7; Move value of r7 to r8;
7161      POP {r7}; Store PC value into r7.
7162
7163      Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
7164
7165      (2) register list is not full, supposing there are N registers in
7166      register list (except PC, 0 <= N <= 7).
7167      Prepare: for each i, 0 - N, tmp[i] <- ri.
7168
7169      POP {r0, r1, ...., rN};
7170
7171      Cleanup: Set registers in original reglist from r0 - rN.  Restore r0 - rN
7172      from tmp[] properly.
7173   */
7174   if (debug_displaced)
7175     fprintf_unfiltered (gdb_stdlog,
7176                         "displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
7177                         dsc->u.block.regmask, insn1);
7178
7179   if (dsc->u.block.regmask == 0xff)
7180     {
7181       dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
7182
7183       dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
7184       dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
7185       dsc->modinsn[2] = 0xbc80; /* POP {r7} */
7186
7187       dsc->numinsns = 3;
7188       dsc->cleanup = &cleanup_pop_pc_16bit_all;
7189     }
7190   else
7191     {
7192       unsigned int num_in_list = bitcount (dsc->u.block.regmask);
7193       unsigned int i;
7194       unsigned int new_regmask;
7195
7196       for (i = 0; i < num_in_list + 1; i++)
7197         dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7198
7199       new_regmask = (1 << (num_in_list + 1)) - 1;
7200
7201       if (debug_displaced)
7202         fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
7203                                           "{..., pc}: original reg list %.4x,"
7204                                           " modified list %.4x\n"),
7205                             (int) dsc->u.block.regmask, new_regmask);
7206
7207       dsc->u.block.regmask |= 0x8000;
7208       dsc->u.block.writeback = 0;
7209       dsc->u.block.cond = INST_AL;
7210
7211       dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
7212
7213       dsc->cleanup = &cleanup_block_load_pc;
7214     }
7215
7216   return 0;
7217 }
7218
7219 static void
7220 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7221                                     struct regcache *regs,
7222                                     arm_displaced_step_closure *dsc)
7223 {
7224   unsigned short op_bit_12_15 = bits (insn1, 12, 15);
7225   unsigned short op_bit_10_11 = bits (insn1, 10, 11);
7226   int err = 0;
7227
7228   /* 16-bit thumb instructions.  */
7229   switch (op_bit_12_15)
7230     {
7231       /* Shift (imme), add, subtract, move and compare.  */
7232     case 0: case 1: case 2: case 3:
7233       err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7234                                          "shift/add/sub/mov/cmp",
7235                                          dsc);
7236       break;
7237     case 4:
7238       switch (op_bit_10_11)
7239         {
7240         case 0: /* Data-processing */
7241           err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7242                                              "data-processing",
7243                                              dsc);
7244           break;
7245         case 1: /* Special data instructions and branch and exchange.  */
7246           {
7247             unsigned short op = bits (insn1, 7, 9);
7248             if (op == 6 || op == 7) /* BX or BLX */
7249               err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
7250             else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers.  */
7251               err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
7252             else
7253               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
7254                                                  dsc);
7255           }
7256           break;
7257         default: /* LDR (literal) */
7258           err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
7259         }
7260       break;
7261     case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
7262       err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
7263       break;
7264     case 10:
7265       if (op_bit_10_11 < 2) /* Generate PC-relative address */
7266         err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
7267       else /* Generate SP-relative address */
7268         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
7269       break;
7270     case 11: /* Misc 16-bit instructions */
7271       {
7272         switch (bits (insn1, 8, 11))
7273           {
7274           case 1: case 3:  case 9: case 11: /* CBNZ, CBZ */
7275             err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
7276             break;
7277           case 12: case 13: /* POP */
7278             if (bit (insn1, 8)) /* PC is in register list.  */
7279               err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
7280             else
7281               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
7282             break;
7283           case 15: /* If-Then, and hints */
7284             if (bits (insn1, 0, 3))
7285               /* If-Then makes up to four following instructions conditional.
7286                  IT instruction itself is not conditional, so handle it as a
7287                  common unmodified instruction.  */
7288               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
7289                                                  dsc);
7290             else
7291               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
7292             break;
7293           default:
7294             err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
7295           }
7296       }
7297       break;
7298     case 12:
7299       if (op_bit_10_11 < 2) /* Store multiple registers */
7300         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
7301       else /* Load multiple registers */
7302         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
7303       break;
7304     case 13: /* Conditional branch and supervisor call */
7305       if (bits (insn1, 9, 11) != 7) /* conditional branch */
7306         err = thumb_copy_b (gdbarch, insn1, dsc);
7307       else
7308         err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
7309       break;
7310     case 14: /* Unconditional branch */
7311       err = thumb_copy_b (gdbarch, insn1, dsc);
7312       break;
7313     default:
7314       err = 1;
7315     }
7316
7317   if (err)
7318     internal_error (__FILE__, __LINE__,
7319                     _("thumb_process_displaced_16bit_insn: Instruction decode error"));
7320 }
7321
7322 static int
7323 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
7324                                  uint16_t insn1, uint16_t insn2,
7325                                  struct regcache *regs,
7326                                  arm_displaced_step_closure *dsc)
7327 {
7328   int rt = bits (insn2, 12, 15);
7329   int rn = bits (insn1, 0, 3);
7330   int op1 = bits (insn1, 7, 8);
7331
7332   switch (bits (insn1, 5, 6))
7333     {
7334     case 0: /* Load byte and memory hints */
7335       if (rt == 0xf) /* PLD/PLI */
7336         {
7337           if (rn == 0xf)
7338             /* PLD literal or Encoding T3 of PLI(immediate, literal).  */
7339             return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
7340           else
7341             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7342                                                 "pli/pld", dsc);
7343         }
7344       else
7345         {
7346           if (rn == 0xf) /* LDRB/LDRSB (literal) */
7347             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7348                                              1);
7349           else
7350             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7351                                                 "ldrb{reg, immediate}/ldrbt",
7352                                                 dsc);
7353         }
7354
7355       break;
7356     case 1: /* Load halfword and memory hints.  */
7357       if (rt == 0xf) /* PLD{W} and Unalloc memory hint.  */
7358         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7359                                             "pld/unalloc memhint", dsc);
7360       else
7361         {
7362           if (rn == 0xf)
7363             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7364                                              2);
7365           else
7366             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7367                                                 "ldrh/ldrht", dsc);
7368         }
7369       break;
7370     case 2: /* Load word */
7371       {
7372         int insn2_bit_8_11 = bits (insn2, 8, 11);
7373
7374         if (rn == 0xf)
7375           return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
7376         else if (op1 == 0x1) /* Encoding T3 */
7377           return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
7378                                            0, 1);
7379         else /* op1 == 0x0 */
7380           {
7381             if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
7382               /* LDR (immediate) */
7383               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7384                                                dsc, bit (insn2, 8), 1);
7385             else if (insn2_bit_8_11 == 0xe) /* LDRT */
7386               return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7387                                                   "ldrt", dsc);
7388             else
7389               /* LDR (register) */
7390               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7391                                                dsc, 0, 0);
7392           }
7393         break;
7394       }
7395     default:
7396       return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7397       break;
7398     }
7399   return 0;
7400 }
7401
7402 static void
7403 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7404                                     uint16_t insn2, struct regcache *regs,
7405                                     arm_displaced_step_closure *dsc)
7406 {
7407   int err = 0;
7408   unsigned short op = bit (insn2, 15);
7409   unsigned int op1 = bits (insn1, 11, 12);
7410
7411   switch (op1)
7412     {
7413     case 1:
7414       {
7415         switch (bits (insn1, 9, 10))
7416           {
7417           case 0:
7418             if (bit (insn1, 6))
7419               {
7420                 /* Load/store {dual, execlusive}, table branch.  */
7421                 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
7422                     && bits (insn2, 5, 7) == 0)
7423                   err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
7424                                                   dsc);
7425                 else
7426                   /* PC is not allowed to use in load/store {dual, exclusive}
7427                      instructions.  */
7428                   err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7429                                                      "load/store dual/ex", dsc);
7430               }
7431             else /* load/store multiple */
7432               {
7433                 switch (bits (insn1, 7, 8))
7434                   {
7435                   case 0: case 3: /* SRS, RFE */
7436                     err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7437                                                        "srs/rfe", dsc);
7438                     break;
7439                   case 1: case 2: /* LDM/STM/PUSH/POP */
7440                     err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
7441                     break;
7442                   }
7443               }
7444             break;
7445
7446           case 1:
7447             /* Data-processing (shift register).  */
7448             err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
7449                                               dsc);
7450             break;
7451           default: /* Coprocessor instructions.  */
7452             err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7453             break;
7454           }
7455       break;
7456       }
7457     case 2: /* op1 = 2 */
7458       if (op) /* Branch and misc control.  */
7459         {
7460           if (bit (insn2, 14)  /* BLX/BL */
7461               || bit (insn2, 12) /* Unconditional branch */
7462               || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
7463             err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
7464           else
7465             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7466                                                "misc ctrl", dsc);
7467         }
7468       else
7469         {
7470           if (bit (insn1, 9)) /* Data processing (plain binary imm).  */
7471             {
7472               int op = bits (insn1, 4, 8);
7473               int rn = bits (insn1, 0, 3);
7474               if ((op == 0 || op == 0xa) && rn == 0xf)
7475                 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
7476                                                     regs, dsc);
7477               else
7478                 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7479                                                    "dp/pb", dsc);
7480             }
7481           else /* Data processing (modified immeidate) */
7482             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7483                                                "dp/mi", dsc);
7484         }
7485       break;
7486     case 3: /* op1 = 3 */
7487       switch (bits (insn1, 9, 10))
7488         {
7489         case 0:
7490           if (bit (insn1, 4))
7491             err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
7492                                                    regs, dsc);
7493           else /* NEON Load/Store and Store single data item */
7494             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7495                                                "neon elt/struct load/store",
7496                                                dsc);
7497           break;
7498         case 1: /* op1 = 3, bits (9, 10) == 1 */
7499           switch (bits (insn1, 7, 8))
7500             {
7501             case 0: case 1: /* Data processing (register) */
7502               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7503                                                  "dp(reg)", dsc);
7504               break;
7505             case 2: /* Multiply and absolute difference */
7506               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7507                                                  "mul/mua/diff", dsc);
7508               break;
7509             case 3: /* Long multiply and divide */
7510               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7511                                                  "lmul/lmua", dsc);
7512               break;
7513             }
7514           break;
7515         default: /* Coprocessor instructions */
7516           err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7517           break;
7518         }
7519       break;
7520     default:
7521       err = 1;
7522     }
7523
7524   if (err)
7525     internal_error (__FILE__, __LINE__,
7526                     _("thumb_process_displaced_32bit_insn: Instruction decode error"));
7527
7528 }
7529
7530 static void
7531 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7532                               struct regcache *regs,
7533                               arm_displaced_step_closure *dsc)
7534 {
7535   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7536   uint16_t insn1
7537     = read_memory_unsigned_integer (from, 2, byte_order_for_code);
7538
7539   if (debug_displaced)
7540     fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
7541                         "at %.8lx\n", insn1, (unsigned long) from);
7542
7543   dsc->is_thumb = 1;
7544   dsc->insn_size = thumb_insn_size (insn1);
7545   if (thumb_insn_size (insn1) == 4)
7546     {
7547       uint16_t insn2
7548         = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
7549       thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
7550     }
7551   else
7552     thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
7553 }
7554
7555 void
7556 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7557                             CORE_ADDR to, struct regcache *regs,
7558                             arm_displaced_step_closure *dsc)
7559 {
7560   int err = 0;
7561   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7562   uint32_t insn;
7563
7564   /* Most displaced instructions use a 1-instruction scratch space, so set this
7565      here and override below if/when necessary.  */
7566   dsc->numinsns = 1;
7567   dsc->insn_addr = from;
7568   dsc->scratch_base = to;
7569   dsc->cleanup = NULL;
7570   dsc->wrote_to_pc = 0;
7571
7572   if (!displaced_in_arm_mode (regs))
7573     return thumb_process_displaced_insn (gdbarch, from, regs, dsc);
7574
7575   dsc->is_thumb = 0;
7576   dsc->insn_size = 4;
7577   insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
7578   if (debug_displaced)
7579     fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
7580                         "at %.8lx\n", (unsigned long) insn,
7581                         (unsigned long) from);
7582
7583   if ((insn & 0xf0000000) == 0xf0000000)
7584     err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
7585   else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
7586     {
7587     case 0x0: case 0x1: case 0x2: case 0x3:
7588       err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
7589       break;
7590
7591     case 0x4: case 0x5: case 0x6:
7592       err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
7593       break;
7594
7595     case 0x7:
7596       err = arm_decode_media (gdbarch, insn, dsc);
7597       break;
7598
7599     case 0x8: case 0x9: case 0xa: case 0xb:
7600       err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
7601       break;
7602
7603     case 0xc: case 0xd: case 0xe: case 0xf:
7604       err = arm_decode_svc_copro (gdbarch, insn, regs, dsc);
7605       break;
7606     }
7607
7608   if (err)
7609     internal_error (__FILE__, __LINE__,
7610                     _("arm_process_displaced_insn: Instruction decode error"));
7611 }
7612
7613 /* Actually set up the scratch space for a displaced instruction.  */
7614
7615 void
7616 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
7617                             CORE_ADDR to, arm_displaced_step_closure *dsc)
7618 {
7619   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7620   unsigned int i, len, offset;
7621   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7622   int size = dsc->is_thumb? 2 : 4;
7623   const gdb_byte *bkp_insn;
7624
7625   offset = 0;
7626   /* Poke modified instruction(s).  */
7627   for (i = 0; i < dsc->numinsns; i++)
7628     {
7629       if (debug_displaced)
7630         {
7631           fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
7632           if (size == 4)
7633             fprintf_unfiltered (gdb_stdlog, "%.8lx",
7634                                 dsc->modinsn[i]);
7635           else if (size == 2)
7636             fprintf_unfiltered (gdb_stdlog, "%.4x",
7637                                 (unsigned short)dsc->modinsn[i]);
7638
7639           fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
7640                               (unsigned long) to + offset);
7641
7642         }
7643       write_memory_unsigned_integer (to + offset, size,
7644                                      byte_order_for_code,
7645                                      dsc->modinsn[i]);
7646       offset += size;
7647     }
7648
7649   /* Choose the correct breakpoint instruction.  */
7650   if (dsc->is_thumb)
7651     {
7652       bkp_insn = tdep->thumb_breakpoint;
7653       len = tdep->thumb_breakpoint_size;
7654     }
7655   else
7656     {
7657       bkp_insn = tdep->arm_breakpoint;
7658       len = tdep->arm_breakpoint_size;
7659     }
7660
7661   /* Put breakpoint afterwards.  */
7662   write_memory (to + offset, bkp_insn, len);
7663
7664   if (debug_displaced)
7665     fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
7666                         paddress (gdbarch, from), paddress (gdbarch, to));
7667 }
7668
7669 /* Entry point for cleaning things up after a displaced instruction has been
7670    single-stepped.  */
7671
7672 void
7673 arm_displaced_step_fixup (struct gdbarch *gdbarch,
7674                           struct displaced_step_closure *dsc_,
7675                           CORE_ADDR from, CORE_ADDR to,
7676                           struct regcache *regs)
7677 {
7678   arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
7679
7680   if (dsc->cleanup)
7681     dsc->cleanup (gdbarch, regs, dsc);
7682
7683   if (!dsc->wrote_to_pc)
7684     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
7685                                     dsc->insn_addr + dsc->insn_size);
7686
7687 }
7688
7689 #include "bfd-in2.h"
7690 #include "libcoff.h"
7691
7692 static int
7693 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
7694 {
7695   gdb_disassembler *di
7696     = static_cast<gdb_disassembler *>(info->application_data);
7697   struct gdbarch *gdbarch = di->arch ();
7698
7699   if (arm_pc_is_thumb (gdbarch, memaddr))
7700     {
7701       static asymbol *asym;
7702       static combined_entry_type ce;
7703       static struct coff_symbol_struct csym;
7704       static struct bfd fake_bfd;
7705       static bfd_target fake_target;
7706
7707       if (csym.native == NULL)
7708         {
7709           /* Create a fake symbol vector containing a Thumb symbol.
7710              This is solely so that the code in print_insn_little_arm() 
7711              and print_insn_big_arm() in opcodes/arm-dis.c will detect
7712              the presence of a Thumb symbol and switch to decoding
7713              Thumb instructions.  */
7714
7715           fake_target.flavour = bfd_target_coff_flavour;
7716           fake_bfd.xvec = &fake_target;
7717           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
7718           csym.native = &ce;
7719           csym.symbol.the_bfd = &fake_bfd;
7720           csym.symbol.name = "fake";
7721           asym = (asymbol *) & csym;
7722         }
7723
7724       memaddr = UNMAKE_THUMB_ADDR (memaddr);
7725       info->symbols = &asym;
7726     }
7727   else
7728     info->symbols = NULL;
7729
7730   /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
7731      accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit.  Otherwise,
7732      opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
7733      the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
7734      in default_print_insn.  */
7735   if (exec_bfd != NULL)
7736     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
7737
7738   return default_print_insn (memaddr, info);
7739 }
7740
7741 /* The following define instruction sequences that will cause ARM
7742    cpu's to take an undefined instruction trap.  These are used to
7743    signal a breakpoint to GDB.
7744    
7745    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
7746    modes.  A different instruction is required for each mode.  The ARM
7747    cpu's can also be big or little endian.  Thus four different
7748    instructions are needed to support all cases.
7749    
7750    Note: ARMv4 defines several new instructions that will take the
7751    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
7752    not in fact add the new instructions.  The new undefined
7753    instructions in ARMv4 are all instructions that had no defined
7754    behaviour in earlier chips.  There is no guarantee that they will
7755    raise an exception, but may be treated as NOP's.  In practice, it
7756    may only safe to rely on instructions matching:
7757    
7758    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
7759    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
7760    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
7761    
7762    Even this may only true if the condition predicate is true.  The
7763    following use a condition predicate of ALWAYS so it is always TRUE.
7764    
7765    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
7766    and NetBSD all use a software interrupt rather than an undefined
7767    instruction to force a trap.  This can be handled by by the
7768    abi-specific code during establishment of the gdbarch vector.  */
7769
7770 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
7771 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
7772 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
7773 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
7774
7775 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
7776 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
7777 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
7778 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
7779
7780 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
7781
7782 static int
7783 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7784 {
7785   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7786   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7787
7788   if (arm_pc_is_thumb (gdbarch, *pcptr))
7789     {
7790       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
7791
7792       /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
7793          check whether we are replacing a 32-bit instruction.  */
7794       if (tdep->thumb2_breakpoint != NULL)
7795         {
7796           gdb_byte buf[2];
7797
7798           if (target_read_memory (*pcptr, buf, 2) == 0)
7799             {
7800               unsigned short inst1;
7801
7802               inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
7803               if (thumb_insn_size (inst1) == 4)
7804                 return ARM_BP_KIND_THUMB2;
7805             }
7806         }
7807
7808       return ARM_BP_KIND_THUMB;
7809     }
7810   else
7811     return ARM_BP_KIND_ARM;
7812
7813 }
7814
7815 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
7816
7817 static const gdb_byte *
7818 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7819 {
7820   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7821
7822   switch (kind)
7823     {
7824     case ARM_BP_KIND_ARM:
7825       *size = tdep->arm_breakpoint_size;
7826       return tdep->arm_breakpoint;
7827     case ARM_BP_KIND_THUMB:
7828       *size = tdep->thumb_breakpoint_size;
7829       return tdep->thumb_breakpoint;
7830     case ARM_BP_KIND_THUMB2:
7831       *size = tdep->thumb2_breakpoint_size;
7832       return tdep->thumb2_breakpoint;
7833     default:
7834       gdb_assert_not_reached ("unexpected arm breakpoint kind");
7835     }
7836 }
7837
7838 /* Implement the breakpoint_kind_from_current_state gdbarch method.  */
7839
7840 static int
7841 arm_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
7842                                         struct regcache *regcache,
7843                                         CORE_ADDR *pcptr)
7844 {
7845   gdb_byte buf[4];
7846
7847   /* Check the memory pointed by PC is readable.  */
7848   if (target_read_memory (regcache_read_pc (regcache), buf, 4) == 0)
7849     {
7850       struct arm_get_next_pcs next_pcs_ctx;
7851
7852       arm_get_next_pcs_ctor (&next_pcs_ctx,
7853                              &arm_get_next_pcs_ops,
7854                              gdbarch_byte_order (gdbarch),
7855                              gdbarch_byte_order_for_code (gdbarch),
7856                              0,
7857                              regcache);
7858
7859       std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
7860
7861       /* If MEMADDR is the next instruction of current pc, do the
7862          software single step computation, and get the thumb mode by
7863          the destination address.  */
7864       for (CORE_ADDR pc : next_pcs)
7865         {
7866           if (UNMAKE_THUMB_ADDR (pc) == *pcptr)
7867             {
7868               if (IS_THUMB_ADDR (pc))
7869                 {
7870                   *pcptr = MAKE_THUMB_ADDR (*pcptr);
7871                   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7872                 }
7873               else
7874                 return ARM_BP_KIND_ARM;
7875             }
7876         }
7877     }
7878
7879   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7880 }
7881
7882 /* Extract from an array REGBUF containing the (raw) register state a
7883    function return value of type TYPE, and copy that, in virtual
7884    format, into VALBUF.  */
7885
7886 static void
7887 arm_extract_return_value (struct type *type, struct regcache *regs,
7888                           gdb_byte *valbuf)
7889 {
7890   struct gdbarch *gdbarch = regs->arch ();
7891   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7892
7893   if (TYPE_CODE_FLT == TYPE_CODE (type))
7894     {
7895       switch (gdbarch_tdep (gdbarch)->fp_model)
7896         {
7897         case ARM_FLOAT_FPA:
7898           {
7899             /* The value is in register F0 in internal format.  We need to
7900                extract the raw value and then convert it to the desired
7901                internal type.  */
7902             bfd_byte tmpbuf[FP_REGISTER_SIZE];
7903
7904             regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
7905             target_float_convert (tmpbuf, arm_ext_type (gdbarch),
7906                                   valbuf, type);
7907           }
7908           break;
7909
7910         case ARM_FLOAT_SOFT_FPA:
7911         case ARM_FLOAT_SOFT_VFP:
7912           /* ARM_FLOAT_VFP can arise if this is a variadic function so
7913              not using the VFP ABI code.  */
7914         case ARM_FLOAT_VFP:
7915           regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
7916           if (TYPE_LENGTH (type) > 4)
7917             regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
7918                                   valbuf + INT_REGISTER_SIZE);
7919           break;
7920
7921         default:
7922           internal_error (__FILE__, __LINE__,
7923                           _("arm_extract_return_value: "
7924                             "Floating point model not supported"));
7925           break;
7926         }
7927     }
7928   else if (TYPE_CODE (type) == TYPE_CODE_INT
7929            || TYPE_CODE (type) == TYPE_CODE_CHAR
7930            || TYPE_CODE (type) == TYPE_CODE_BOOL
7931            || TYPE_CODE (type) == TYPE_CODE_PTR
7932            || TYPE_IS_REFERENCE (type)
7933            || TYPE_CODE (type) == TYPE_CODE_ENUM)
7934     {
7935       /* If the type is a plain integer, then the access is
7936          straight-forward.  Otherwise we have to play around a bit
7937          more.  */
7938       int len = TYPE_LENGTH (type);
7939       int regno = ARM_A1_REGNUM;
7940       ULONGEST tmp;
7941
7942       while (len > 0)
7943         {
7944           /* By using store_unsigned_integer we avoid having to do
7945              anything special for small big-endian values.  */
7946           regcache_cooked_read_unsigned (regs, regno++, &tmp);
7947           store_unsigned_integer (valbuf, 
7948                                   (len > INT_REGISTER_SIZE
7949                                    ? INT_REGISTER_SIZE : len),
7950                                   byte_order, tmp);
7951           len -= INT_REGISTER_SIZE;
7952           valbuf += INT_REGISTER_SIZE;
7953         }
7954     }
7955   else
7956     {
7957       /* For a structure or union the behaviour is as if the value had
7958          been stored to word-aligned memory and then loaded into 
7959          registers with 32-bit load instruction(s).  */
7960       int len = TYPE_LENGTH (type);
7961       int regno = ARM_A1_REGNUM;
7962       bfd_byte tmpbuf[INT_REGISTER_SIZE];
7963
7964       while (len > 0)
7965         {
7966           regcache_cooked_read (regs, regno++, tmpbuf);
7967           memcpy (valbuf, tmpbuf,
7968                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
7969           len -= INT_REGISTER_SIZE;
7970           valbuf += INT_REGISTER_SIZE;
7971         }
7972     }
7973 }
7974
7975
7976 /* Will a function return an aggregate type in memory or in a
7977    register?  Return 0 if an aggregate type can be returned in a
7978    register, 1 if it must be returned in memory.  */
7979
7980 static int
7981 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7982 {
7983   enum type_code code;
7984
7985   type = check_typedef (type);
7986
7987   /* Simple, non-aggregate types (ie not including vectors and
7988      complex) are always returned in a register (or registers).  */
7989   code = TYPE_CODE (type);
7990   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7991       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7992     return 0;
7993
7994   if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
7995     {
7996       /* Vector values should be returned using ARM registers if they
7997          are not over 16 bytes.  */
7998       return (TYPE_LENGTH (type) > 16);
7999     }
8000
8001   if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
8002     {
8003       /* The AAPCS says all aggregates not larger than a word are returned
8004          in a register.  */
8005       if (TYPE_LENGTH (type) <= INT_REGISTER_SIZE)
8006         return 0;
8007
8008       return 1;
8009     }
8010   else
8011     {
8012       int nRc;
8013
8014       /* All aggregate types that won't fit in a register must be returned
8015          in memory.  */
8016       if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
8017         return 1;
8018
8019       /* In the ARM ABI, "integer" like aggregate types are returned in
8020          registers.  For an aggregate type to be integer like, its size
8021          must be less than or equal to INT_REGISTER_SIZE and the
8022          offset of each addressable subfield must be zero.  Note that bit
8023          fields are not addressable, and all addressable subfields of
8024          unions always start at offset zero.
8025
8026          This function is based on the behaviour of GCC 2.95.1.
8027          See: gcc/arm.c: arm_return_in_memory() for details.
8028
8029          Note: All versions of GCC before GCC 2.95.2 do not set up the
8030          parameters correctly for a function returning the following
8031          structure: struct { float f;}; This should be returned in memory,
8032          not a register.  Richard Earnshaw sent me a patch, but I do not
8033          know of any way to detect if a function like the above has been
8034          compiled with the correct calling convention.  */
8035
8036       /* Assume all other aggregate types can be returned in a register.
8037          Run a check for structures, unions and arrays.  */
8038       nRc = 0;
8039
8040       if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
8041         {
8042           int i;
8043           /* Need to check if this struct/union is "integer" like.  For
8044              this to be true, its size must be less than or equal to
8045              INT_REGISTER_SIZE and the offset of each addressable
8046              subfield must be zero.  Note that bit fields are not
8047              addressable, and unions always start at offset zero.  If any
8048              of the subfields is a floating point type, the struct/union
8049              cannot be an integer type.  */
8050
8051           /* For each field in the object, check:
8052              1) Is it FP? --> yes, nRc = 1;
8053              2) Is it addressable (bitpos != 0) and
8054              not packed (bitsize == 0)?
8055              --> yes, nRc = 1
8056           */
8057
8058           for (i = 0; i < TYPE_NFIELDS (type); i++)
8059             {
8060               enum type_code field_type_code;
8061
8062               field_type_code
8063                 = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
8064                                                              i)));
8065
8066               /* Is it a floating point type field?  */
8067               if (field_type_code == TYPE_CODE_FLT)
8068                 {
8069                   nRc = 1;
8070                   break;
8071                 }
8072
8073               /* If bitpos != 0, then we have to care about it.  */
8074               if (TYPE_FIELD_BITPOS (type, i) != 0)
8075                 {
8076                   /* Bitfields are not addressable.  If the field bitsize is 
8077                      zero, then the field is not packed.  Hence it cannot be
8078                      a bitfield or any other packed type.  */
8079                   if (TYPE_FIELD_BITSIZE (type, i) == 0)
8080                     {
8081                       nRc = 1;
8082                       break;
8083                     }
8084                 }
8085             }
8086         }
8087
8088       return nRc;
8089     }
8090 }
8091
8092 /* Write into appropriate registers a function return value of type
8093    TYPE, given in virtual format.  */
8094
8095 static void
8096 arm_store_return_value (struct type *type, struct regcache *regs,
8097                         const gdb_byte *valbuf)
8098 {
8099   struct gdbarch *gdbarch = regs->arch ();
8100   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8101
8102   if (TYPE_CODE (type) == TYPE_CODE_FLT)
8103     {
8104       gdb_byte buf[FP_REGISTER_SIZE];
8105
8106       switch (gdbarch_tdep (gdbarch)->fp_model)
8107         {
8108         case ARM_FLOAT_FPA:
8109
8110           target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8111           regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
8112           break;
8113
8114         case ARM_FLOAT_SOFT_FPA:
8115         case ARM_FLOAT_SOFT_VFP:
8116           /* ARM_FLOAT_VFP can arise if this is a variadic function so
8117              not using the VFP ABI code.  */
8118         case ARM_FLOAT_VFP:
8119           regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
8120           if (TYPE_LENGTH (type) > 4)
8121             regcache_cooked_write (regs, ARM_A1_REGNUM + 1, 
8122                                    valbuf + INT_REGISTER_SIZE);
8123           break;
8124
8125         default:
8126           internal_error (__FILE__, __LINE__,
8127                           _("arm_store_return_value: Floating "
8128                             "point model not supported"));
8129           break;
8130         }
8131     }
8132   else if (TYPE_CODE (type) == TYPE_CODE_INT
8133            || TYPE_CODE (type) == TYPE_CODE_CHAR
8134            || TYPE_CODE (type) == TYPE_CODE_BOOL
8135            || TYPE_CODE (type) == TYPE_CODE_PTR
8136            || TYPE_IS_REFERENCE (type)
8137            || TYPE_CODE (type) == TYPE_CODE_ENUM)
8138     {
8139       if (TYPE_LENGTH (type) <= 4)
8140         {
8141           /* Values of one word or less are zero/sign-extended and
8142              returned in r0.  */
8143           bfd_byte tmpbuf[INT_REGISTER_SIZE];
8144           LONGEST val = unpack_long (type, valbuf);
8145
8146           store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
8147           regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
8148         }
8149       else
8150         {
8151           /* Integral values greater than one word are stored in consecutive
8152              registers starting with r0.  This will always be a multiple of
8153              the regiser size.  */
8154           int len = TYPE_LENGTH (type);
8155           int regno = ARM_A1_REGNUM;
8156
8157           while (len > 0)
8158             {
8159               regcache_cooked_write (regs, regno++, valbuf);
8160               len -= INT_REGISTER_SIZE;
8161               valbuf += INT_REGISTER_SIZE;
8162             }
8163         }
8164     }
8165   else
8166     {
8167       /* For a structure or union the behaviour is as if the value had
8168          been stored to word-aligned memory and then loaded into 
8169          registers with 32-bit load instruction(s).  */
8170       int len = TYPE_LENGTH (type);
8171       int regno = ARM_A1_REGNUM;
8172       bfd_byte tmpbuf[INT_REGISTER_SIZE];
8173
8174       while (len > 0)
8175         {
8176           memcpy (tmpbuf, valbuf,
8177                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8178           regcache_cooked_write (regs, regno++, tmpbuf);
8179           len -= INT_REGISTER_SIZE;
8180           valbuf += INT_REGISTER_SIZE;
8181         }
8182     }
8183 }
8184
8185
8186 /* Handle function return values.  */
8187
8188 static enum return_value_convention
8189 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8190                   struct type *valtype, struct regcache *regcache,
8191                   gdb_byte *readbuf, const gdb_byte *writebuf)
8192 {
8193   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8194   struct type *func_type = function ? value_type (function) : NULL;
8195   enum arm_vfp_cprc_base_type vfp_base_type;
8196   int vfp_base_count;
8197
8198   if (arm_vfp_abi_for_function (gdbarch, func_type)
8199       && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8200     {
8201       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8202       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8203       int i;
8204       for (i = 0; i < vfp_base_count; i++)
8205         {
8206           if (reg_char == 'q')
8207             {
8208               if (writebuf)
8209                 arm_neon_quad_write (gdbarch, regcache, i,
8210                                      writebuf + i * unit_length);
8211
8212               if (readbuf)
8213                 arm_neon_quad_read (gdbarch, regcache, i,
8214                                     readbuf + i * unit_length);
8215             }
8216           else
8217             {
8218               char name_buf[4];
8219               int regnum;
8220
8221               xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8222               regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8223                                                     strlen (name_buf));
8224               if (writebuf)
8225                 regcache_cooked_write (regcache, regnum,
8226                                        writebuf + i * unit_length);
8227               if (readbuf)
8228                 regcache_cooked_read (regcache, regnum,
8229                                       readbuf + i * unit_length);
8230             }
8231         }
8232       return RETURN_VALUE_REGISTER_CONVENTION;
8233     }
8234
8235   if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
8236       || TYPE_CODE (valtype) == TYPE_CODE_UNION
8237       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
8238     {
8239       if (tdep->struct_return == pcc_struct_return
8240           || arm_return_in_memory (gdbarch, valtype))
8241         return RETURN_VALUE_STRUCT_CONVENTION;
8242     }
8243   else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
8244     {
8245       if (arm_return_in_memory (gdbarch, valtype))
8246         return RETURN_VALUE_STRUCT_CONVENTION;
8247     }
8248
8249   if (writebuf)
8250     arm_store_return_value (valtype, regcache, writebuf);
8251
8252   if (readbuf)
8253     arm_extract_return_value (valtype, regcache, readbuf);
8254
8255   return RETURN_VALUE_REGISTER_CONVENTION;
8256 }
8257
8258
8259 static int
8260 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8261 {
8262   struct gdbarch *gdbarch = get_frame_arch (frame);
8263   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8264   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8265   CORE_ADDR jb_addr;
8266   gdb_byte buf[INT_REGISTER_SIZE];
8267   
8268   jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8269
8270   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8271                           INT_REGISTER_SIZE))
8272     return 0;
8273
8274   *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
8275   return 1;
8276 }
8277
8278 /* Recognize GCC and GNU ld's trampolines.  If we are in a trampoline,
8279    return the target PC.  Otherwise return 0.  */
8280
8281 CORE_ADDR
8282 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8283 {
8284   const char *name;
8285   int namelen;
8286   CORE_ADDR start_addr;
8287
8288   /* Find the starting address and name of the function containing the PC.  */
8289   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8290     {
8291       /* Trampoline 'bx reg' doesn't belong to any functions.  Do the
8292          check here.  */
8293       start_addr = arm_skip_bx_reg (frame, pc);
8294       if (start_addr != 0)
8295         return start_addr;
8296
8297       return 0;
8298     }
8299
8300   /* If PC is in a Thumb call or return stub, return the address of the
8301      target PC, which is in a register.  The thunk functions are called
8302      _call_via_xx, where x is the register name.  The possible names
8303      are r0-r9, sl, fp, ip, sp, and lr.  ARM RealView has similar
8304      functions, named __ARM_call_via_r[0-7].  */
8305   if (startswith (name, "_call_via_")
8306       || startswith (name, "__ARM_call_via_"))
8307     {
8308       /* Use the name suffix to determine which register contains the
8309          target PC.  */
8310       static const char *table[15] =
8311       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8312        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8313       };
8314       int regno;
8315       int offset = strlen (name) - 2;
8316
8317       for (regno = 0; regno <= 14; regno++)
8318         if (strcmp (&name[offset], table[regno]) == 0)
8319           return get_frame_register_unsigned (frame, regno);
8320     }
8321
8322   /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8323      non-interworking calls to foo.  We could decode the stubs
8324      to find the target but it's easier to use the symbol table.  */
8325   namelen = strlen (name);
8326   if (name[0] == '_' && name[1] == '_'
8327       && ((namelen > 2 + strlen ("_from_thumb")
8328            && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8329           || (namelen > 2 + strlen ("_from_arm")
8330               && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8331     {
8332       char *target_name;
8333       int target_len = namelen - 2;
8334       struct bound_minimal_symbol minsym;
8335       struct objfile *objfile;
8336       struct obj_section *sec;
8337
8338       if (name[namelen - 1] == 'b')
8339         target_len -= strlen ("_from_thumb");
8340       else
8341         target_len -= strlen ("_from_arm");
8342
8343       target_name = (char *) alloca (target_len + 1);
8344       memcpy (target_name, name + 2, target_len);
8345       target_name[target_len] = '\0';
8346
8347       sec = find_pc_section (pc);
8348       objfile = (sec == NULL) ? NULL : sec->objfile;
8349       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8350       if (minsym.minsym != NULL)
8351         return BMSYMBOL_VALUE_ADDRESS (minsym);
8352       else
8353         return 0;
8354     }
8355
8356   return 0;                     /* not a stub */
8357 }
8358
8359 static void
8360 set_arm_command (const char *args, int from_tty)
8361 {
8362   printf_unfiltered (_("\
8363 \"set arm\" must be followed by an apporpriate subcommand.\n"));
8364   help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
8365 }
8366
8367 static void
8368 show_arm_command (const char *args, int from_tty)
8369 {
8370   cmd_show_list (showarmcmdlist, from_tty, "");
8371 }
8372
8373 static void
8374 arm_update_current_architecture (void)
8375 {
8376   struct gdbarch_info info;
8377
8378   /* If the current architecture is not ARM, we have nothing to do.  */
8379   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8380     return;
8381
8382   /* Update the architecture.  */
8383   gdbarch_info_init (&info);
8384
8385   if (!gdbarch_update_p (info))
8386     internal_error (__FILE__, __LINE__, _("could not update architecture"));
8387 }
8388
8389 static void
8390 set_fp_model_sfunc (const char *args, int from_tty,
8391                     struct cmd_list_element *c)
8392 {
8393   int fp_model;
8394
8395   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8396     if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8397       {
8398         arm_fp_model = (enum arm_float_model) fp_model;
8399         break;
8400       }
8401
8402   if (fp_model == ARM_FLOAT_LAST)
8403     internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8404                     current_fp_model);
8405
8406   arm_update_current_architecture ();
8407 }
8408
8409 static void
8410 show_fp_model (struct ui_file *file, int from_tty,
8411                struct cmd_list_element *c, const char *value)
8412 {
8413   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8414
8415   if (arm_fp_model == ARM_FLOAT_AUTO
8416       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8417     fprintf_filtered (file, _("\
8418 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8419                       fp_model_strings[tdep->fp_model]);
8420   else
8421     fprintf_filtered (file, _("\
8422 The current ARM floating point model is \"%s\".\n"),
8423                       fp_model_strings[arm_fp_model]);
8424 }
8425
8426 static void
8427 arm_set_abi (const char *args, int from_tty,
8428              struct cmd_list_element *c)
8429 {
8430   int arm_abi;
8431
8432   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8433     if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8434       {
8435         arm_abi_global = (enum arm_abi_kind) arm_abi;
8436         break;
8437       }
8438
8439   if (arm_abi == ARM_ABI_LAST)
8440     internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8441                     arm_abi_string);
8442
8443   arm_update_current_architecture ();
8444 }
8445
8446 static void
8447 arm_show_abi (struct ui_file *file, int from_tty,
8448              struct cmd_list_element *c, const char *value)
8449 {
8450   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8451
8452   if (arm_abi_global == ARM_ABI_AUTO
8453       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8454     fprintf_filtered (file, _("\
8455 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8456                       arm_abi_strings[tdep->arm_abi]);
8457   else
8458     fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8459                       arm_abi_string);
8460 }
8461
8462 static void
8463 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8464                         struct cmd_list_element *c, const char *value)
8465 {
8466   fprintf_filtered (file,
8467                     _("The current execution mode assumed "
8468                       "(when symbols are unavailable) is \"%s\".\n"),
8469                     arm_fallback_mode_string);
8470 }
8471
8472 static void
8473 arm_show_force_mode (struct ui_file *file, int from_tty,
8474                      struct cmd_list_element *c, const char *value)
8475 {
8476   fprintf_filtered (file,
8477                     _("The current execution mode assumed "
8478                       "(even when symbols are available) is \"%s\".\n"),
8479                     arm_force_mode_string);
8480 }
8481
8482 /* If the user changes the register disassembly style used for info
8483    register and other commands, we have to also switch the style used
8484    in opcodes for disassembly output.  This function is run in the "set
8485    arm disassembly" command, and does that.  */
8486
8487 static void
8488 set_disassembly_style_sfunc (const char *args, int from_tty,
8489                              struct cmd_list_element *c)
8490 {
8491   /* Convert the short style name into the long style name (eg, reg-names-*)
8492      before calling the generic set_disassembler_options() function.  */
8493   std::string long_name = std::string ("reg-names-") + disassembly_style;
8494   set_disassembler_options (&long_name[0]);
8495 }
8496
8497 static void
8498 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8499                               struct cmd_list_element *c, const char *value)
8500 {
8501   struct gdbarch *gdbarch = get_current_arch ();
8502   char *options = get_disassembler_options (gdbarch);
8503   const char *style = "";
8504   int len = 0;
8505   const char *opt;
8506
8507   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8508     if (CONST_STRNEQ (opt, "reg-names-"))
8509       {
8510         style = &opt[strlen ("reg-names-")];
8511         len = strcspn (style, ",");
8512       }
8513
8514   fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8515 }
8516 \f
8517 /* Return the ARM register name corresponding to register I.  */
8518 static const char *
8519 arm_register_name (struct gdbarch *gdbarch, int i)
8520 {
8521   const int num_regs = gdbarch_num_regs (gdbarch);
8522
8523   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8524       && i >= num_regs && i < num_regs + 32)
8525     {
8526       static const char *const vfp_pseudo_names[] = {
8527         "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8528         "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8529         "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8530         "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8531       };
8532
8533       return vfp_pseudo_names[i - num_regs];
8534     }
8535
8536   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8537       && i >= num_regs + 32 && i < num_regs + 32 + 16)
8538     {
8539       static const char *const neon_pseudo_names[] = {
8540         "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8541         "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8542       };
8543
8544       return neon_pseudo_names[i - num_regs - 32];
8545     }
8546
8547   if (i >= ARRAY_SIZE (arm_register_names))
8548     /* These registers are only supported on targets which supply
8549        an XML description.  */
8550     return "";
8551
8552   return arm_register_names[i];
8553 }
8554
8555 /* Test whether the coff symbol specific value corresponds to a Thumb
8556    function.  */
8557
8558 static int
8559 coff_sym_is_thumb (int val)
8560 {
8561   return (val == C_THUMBEXT
8562           || val == C_THUMBSTAT
8563           || val == C_THUMBEXTFUNC
8564           || val == C_THUMBSTATFUNC
8565           || val == C_THUMBLABEL);
8566 }
8567
8568 /* arm_coff_make_msymbol_special()
8569    arm_elf_make_msymbol_special()
8570    
8571    These functions test whether the COFF or ELF symbol corresponds to
8572    an address in thumb code, and set a "special" bit in a minimal
8573    symbol to indicate that it does.  */
8574    
8575 static void
8576 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8577 {
8578   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8579
8580   if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8581       == ST_BRANCH_TO_THUMB)
8582     MSYMBOL_SET_SPECIAL (msym);
8583 }
8584
8585 static void
8586 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8587 {
8588   if (coff_sym_is_thumb (val))
8589     MSYMBOL_SET_SPECIAL (msym);
8590 }
8591
8592 static void
8593 arm_objfile_data_free (struct objfile *objfile, void *arg)
8594 {
8595   struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
8596   unsigned int i;
8597
8598   for (i = 0; i < objfile->obfd->section_count; i++)
8599     VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
8600 }
8601
8602 static void
8603 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8604                            asymbol *sym)
8605 {
8606   const char *name = bfd_asymbol_name (sym);
8607   struct arm_per_objfile *data;
8608   VEC(arm_mapping_symbol_s) **map_p;
8609   struct arm_mapping_symbol new_map_sym;
8610
8611   gdb_assert (name[0] == '$');
8612   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8613     return;
8614
8615   data = (struct arm_per_objfile *) objfile_data (objfile,
8616                                                   arm_objfile_data_key);
8617   if (data == NULL)
8618     {
8619       data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
8620                              struct arm_per_objfile);
8621       set_objfile_data (objfile, arm_objfile_data_key, data);
8622       data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
8623                                            objfile->obfd->section_count,
8624                                            VEC(arm_mapping_symbol_s) *);
8625     }
8626   map_p = &data->section_maps[bfd_get_section (sym)->index];
8627
8628   new_map_sym.value = sym->value;
8629   new_map_sym.type = name[1];
8630
8631   /* Assume that most mapping symbols appear in order of increasing
8632      value.  If they were randomly distributed, it would be faster to
8633      always push here and then sort at first use.  */
8634   if (!VEC_empty (arm_mapping_symbol_s, *map_p))
8635     {
8636       struct arm_mapping_symbol *prev_map_sym;
8637
8638       prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
8639       if (prev_map_sym->value >= sym->value)
8640         {
8641           unsigned int idx;
8642           idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
8643                                  arm_compare_mapping_symbols);
8644           VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
8645           return;
8646         }
8647     }
8648
8649   VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
8650 }
8651
8652 static void
8653 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8654 {
8655   struct gdbarch *gdbarch = regcache->arch ();
8656   regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8657
8658   /* If necessary, set the T bit.  */
8659   if (arm_apcs_32)
8660     {
8661       ULONGEST val, t_bit;
8662       regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8663       t_bit = arm_psr_thumb_bit (gdbarch);
8664       if (arm_pc_is_thumb (gdbarch, pc))
8665         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8666                                         val | t_bit);
8667       else
8668         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8669                                         val & ~t_bit);
8670     }
8671 }
8672
8673 /* Read the contents of a NEON quad register, by reading from two
8674    double registers.  This is used to implement the quad pseudo
8675    registers, and for argument passing in case the quad registers are
8676    missing; vectors are passed in quad registers when using the VFP
8677    ABI, even if a NEON unit is not present.  REGNUM is the index of
8678    the quad register, in [0, 15].  */
8679
8680 static enum register_status
8681 arm_neon_quad_read (struct gdbarch *gdbarch, struct regcache *regcache,
8682                     int regnum, gdb_byte *buf)
8683 {
8684   char name_buf[4];
8685   gdb_byte reg_buf[8];
8686   int offset, double_regnum;
8687   enum register_status status;
8688
8689   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8690   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8691                                                strlen (name_buf));
8692
8693   /* d0 is always the least significant half of q0.  */
8694   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8695     offset = 8;
8696   else
8697     offset = 0;
8698
8699   status = regcache->raw_read (double_regnum, reg_buf);
8700   if (status != REG_VALID)
8701     return status;
8702   memcpy (buf + offset, reg_buf, 8);
8703
8704   offset = 8 - offset;
8705   status = regcache->raw_read (double_regnum + 1, reg_buf);
8706   if (status != REG_VALID)
8707     return status;
8708   memcpy (buf + offset, reg_buf, 8);
8709
8710   return REG_VALID;
8711 }
8712
8713 static enum register_status
8714 arm_pseudo_read (struct gdbarch *gdbarch, struct regcache *regcache,
8715                  int regnum, gdb_byte *buf)
8716 {
8717   const int num_regs = gdbarch_num_regs (gdbarch);
8718   char name_buf[4];
8719   gdb_byte reg_buf[8];
8720   int offset, double_regnum;
8721
8722   gdb_assert (regnum >= num_regs);
8723   regnum -= num_regs;
8724
8725   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8726     /* Quad-precision register.  */
8727     return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8728   else
8729     {
8730       enum register_status status;
8731
8732       /* Single-precision register.  */
8733       gdb_assert (regnum < 32);
8734
8735       /* s0 is always the least significant half of d0.  */
8736       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8737         offset = (regnum & 1) ? 0 : 4;
8738       else
8739         offset = (regnum & 1) ? 4 : 0;
8740
8741       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8742       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8743                                                    strlen (name_buf));
8744
8745       status = regcache->raw_read (double_regnum, reg_buf);
8746       if (status == REG_VALID)
8747         memcpy (buf, reg_buf + offset, 4);
8748       return status;
8749     }
8750 }
8751
8752 /* Store the contents of BUF to a NEON quad register, by writing to
8753    two double registers.  This is used to implement the quad pseudo
8754    registers, and for argument passing in case the quad registers are
8755    missing; vectors are passed in quad registers when using the VFP
8756    ABI, even if a NEON unit is not present.  REGNUM is the index
8757    of the quad register, in [0, 15].  */
8758
8759 static void
8760 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8761                      int regnum, const gdb_byte *buf)
8762 {
8763   char name_buf[4];
8764   int offset, double_regnum;
8765
8766   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8767   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8768                                                strlen (name_buf));
8769
8770   /* d0 is always the least significant half of q0.  */
8771   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8772     offset = 8;
8773   else
8774     offset = 0;
8775
8776   regcache_raw_write (regcache, double_regnum, buf + offset);
8777   offset = 8 - offset;
8778   regcache_raw_write (regcache, double_regnum + 1, buf + offset);
8779 }
8780
8781 static void
8782 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8783                   int regnum, const gdb_byte *buf)
8784 {
8785   const int num_regs = gdbarch_num_regs (gdbarch);
8786   char name_buf[4];
8787   gdb_byte reg_buf[8];
8788   int offset, double_regnum;
8789
8790   gdb_assert (regnum >= num_regs);
8791   regnum -= num_regs;
8792
8793   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8794     /* Quad-precision register.  */
8795     arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8796   else
8797     {
8798       /* Single-precision register.  */
8799       gdb_assert (regnum < 32);
8800
8801       /* s0 is always the least significant half of d0.  */
8802       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8803         offset = (regnum & 1) ? 0 : 4;
8804       else
8805         offset = (regnum & 1) ? 4 : 0;
8806
8807       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8808       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8809                                                    strlen (name_buf));
8810
8811       regcache_raw_read (regcache, double_regnum, reg_buf);
8812       memcpy (reg_buf + offset, buf, 4);
8813       regcache_raw_write (regcache, double_regnum, reg_buf);
8814     }
8815 }
8816
8817 static struct value *
8818 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8819 {
8820   const int *reg_p = (const int *) baton;
8821   return value_of_register (*reg_p, frame);
8822 }
8823 \f
8824 static enum gdb_osabi
8825 arm_elf_osabi_sniffer (bfd *abfd)
8826 {
8827   unsigned int elfosabi;
8828   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8829
8830   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8831
8832   if (elfosabi == ELFOSABI_ARM)
8833     /* GNU tools use this value.  Check note sections in this case,
8834        as well.  */
8835     bfd_map_over_sections (abfd,
8836                            generic_elf_osabi_sniff_abi_tag_sections, 
8837                            &osabi);
8838
8839   /* Anything else will be handled by the generic ELF sniffer.  */
8840   return osabi;
8841 }
8842
8843 static int
8844 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8845                           struct reggroup *group)
8846 {
8847   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
8848      this, FPS register belongs to save_regroup, restore_reggroup, and
8849      all_reggroup, of course.  */
8850   if (regnum == ARM_FPS_REGNUM)
8851     return (group == float_reggroup
8852             || group == save_reggroup
8853             || group == restore_reggroup
8854             || group == all_reggroup);
8855   else
8856     return default_register_reggroup_p (gdbarch, regnum, group);
8857 }
8858
8859 \f
8860 /* For backward-compatibility we allow two 'g' packet lengths with
8861    the remote protocol depending on whether FPA registers are
8862    supplied.  M-profile targets do not have FPA registers, but some
8863    stubs already exist in the wild which use a 'g' packet which
8864    supplies them albeit with dummy values.  The packet format which
8865    includes FPA registers should be considered deprecated for
8866    M-profile targets.  */
8867
8868 static void
8869 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8870 {
8871   if (gdbarch_tdep (gdbarch)->is_m)
8872     {
8873       /* If we know from the executable this is an M-profile target,
8874          cater for remote targets whose register set layout is the
8875          same as the FPA layout.  */
8876       register_remote_g_packet_guess (gdbarch,
8877                                       /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
8878                                       (16 * INT_REGISTER_SIZE)
8879                                       + (8 * FP_REGISTER_SIZE)
8880                                       + (2 * INT_REGISTER_SIZE),
8881                                       tdesc_arm_with_m_fpa_layout);
8882
8883       /* The regular M-profile layout.  */
8884       register_remote_g_packet_guess (gdbarch,
8885                                       /* r0-r12,sp,lr,pc; xpsr */
8886                                       (16 * INT_REGISTER_SIZE)
8887                                       + INT_REGISTER_SIZE,
8888                                       tdesc_arm_with_m);
8889
8890       /* M-profile plus M4F VFP.  */
8891       register_remote_g_packet_guess (gdbarch,
8892                                       /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
8893                                       (16 * INT_REGISTER_SIZE)
8894                                       + (16 * VFP_REGISTER_SIZE)
8895                                       + (2 * INT_REGISTER_SIZE),
8896                                       tdesc_arm_with_m_vfp_d16);
8897     }
8898
8899   /* Otherwise we don't have a useful guess.  */
8900 }
8901
8902 /* Implement the code_of_frame_writable gdbarch method.  */
8903
8904 static int
8905 arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
8906 {
8907   if (gdbarch_tdep (gdbarch)->is_m
8908       && get_frame_type (frame) == SIGTRAMP_FRAME)
8909     {
8910       /* M-profile exception frames return to some magic PCs, where
8911          isn't writable at all.  */
8912       return 0;
8913     }
8914   else
8915     return 1;
8916 }
8917
8918 \f
8919 /* Initialize the current architecture based on INFO.  If possible,
8920    re-use an architecture from ARCHES, which is a list of
8921    architectures already created during this debugging session.
8922
8923    Called e.g. at program startup, when reading a core file, and when
8924    reading a binary file.  */
8925
8926 static struct gdbarch *
8927 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8928 {
8929   struct gdbarch_tdep *tdep;
8930   struct gdbarch *gdbarch;
8931   struct gdbarch_list *best_arch;
8932   enum arm_abi_kind arm_abi = arm_abi_global;
8933   enum arm_float_model fp_model = arm_fp_model;
8934   struct tdesc_arch_data *tdesc_data = NULL;
8935   int i, is_m = 0;
8936   int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
8937   int have_wmmx_registers = 0;
8938   int have_neon = 0;
8939   int have_fpa_registers = 1;
8940   const struct target_desc *tdesc = info.target_desc;
8941
8942   /* If we have an object to base this architecture on, try to determine
8943      its ABI.  */
8944
8945   if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8946     {
8947       int ei_osabi, e_flags;
8948
8949       switch (bfd_get_flavour (info.abfd))
8950         {
8951         case bfd_target_coff_flavour:
8952           /* Assume it's an old APCS-style ABI.  */
8953           /* XXX WinCE?  */
8954           arm_abi = ARM_ABI_APCS;
8955           break;
8956
8957         case bfd_target_elf_flavour:
8958           ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8959           e_flags = elf_elfheader (info.abfd)->e_flags;
8960
8961           if (ei_osabi == ELFOSABI_ARM)
8962             {
8963               /* GNU tools used to use this value, but do not for EABI
8964                  objects.  There's nowhere to tag an EABI version
8965                  anyway, so assume APCS.  */
8966               arm_abi = ARM_ABI_APCS;
8967             }
8968           else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8969             {
8970               int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8971               int attr_arch, attr_profile;
8972
8973               switch (eabi_ver)
8974                 {
8975                 case EF_ARM_EABI_UNKNOWN:
8976                   /* Assume GNU tools.  */
8977                   arm_abi = ARM_ABI_APCS;
8978                   break;
8979
8980                 case EF_ARM_EABI_VER4:
8981                 case EF_ARM_EABI_VER5:
8982                   arm_abi = ARM_ABI_AAPCS;
8983                   /* EABI binaries default to VFP float ordering.
8984                      They may also contain build attributes that can
8985                      be used to identify if the VFP argument-passing
8986                      ABI is in use.  */
8987                   if (fp_model == ARM_FLOAT_AUTO)
8988                     {
8989 #ifdef HAVE_ELF
8990                       switch (bfd_elf_get_obj_attr_int (info.abfd,
8991                                                         OBJ_ATTR_PROC,
8992                                                         Tag_ABI_VFP_args))
8993                         {
8994                         case AEABI_VFP_args_base:
8995                           /* "The user intended FP parameter/result
8996                              passing to conform to AAPCS, base
8997                              variant".  */
8998                           fp_model = ARM_FLOAT_SOFT_VFP;
8999                           break;
9000                         case AEABI_VFP_args_vfp:
9001                           /* "The user intended FP parameter/result
9002                              passing to conform to AAPCS, VFP
9003                              variant".  */
9004                           fp_model = ARM_FLOAT_VFP;
9005                           break;
9006                         case AEABI_VFP_args_toolchain:
9007                           /* "The user intended FP parameter/result
9008                              passing to conform to tool chain-specific
9009                              conventions" - we don't know any such
9010                              conventions, so leave it as "auto".  */
9011                           break;
9012                         case AEABI_VFP_args_compatible:
9013                           /* "Code is compatible with both the base
9014                              and VFP variants; the user did not permit
9015                              non-variadic functions to pass FP
9016                              parameters/results" - leave it as
9017                              "auto".  */
9018                           break;
9019                         default:
9020                           /* Attribute value not mentioned in the
9021                              November 2012 ABI, so leave it as
9022                              "auto".  */
9023                           break;
9024                         }
9025 #else
9026                       fp_model = ARM_FLOAT_SOFT_VFP;
9027 #endif
9028                     }
9029                   break;
9030
9031                 default:
9032                   /* Leave it as "auto".  */
9033                   warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
9034                   break;
9035                 }
9036
9037 #ifdef HAVE_ELF
9038               /* Detect M-profile programs.  This only works if the
9039                  executable file includes build attributes; GCC does
9040                  copy them to the executable, but e.g. RealView does
9041                  not.  */
9042               attr_arch = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9043                                                     Tag_CPU_arch);
9044               attr_profile = bfd_elf_get_obj_attr_int (info.abfd,
9045                                                        OBJ_ATTR_PROC,
9046                                                        Tag_CPU_arch_profile);
9047               /* GCC specifies the profile for v6-M; RealView only
9048                  specifies the profile for architectures starting with
9049                  V7 (as opposed to architectures with a tag
9050                  numerically greater than TAG_CPU_ARCH_V7).  */
9051               if (!tdesc_has_registers (tdesc)
9052                   && (attr_arch == TAG_CPU_ARCH_V6_M
9053                       || attr_arch == TAG_CPU_ARCH_V6S_M
9054                       || attr_profile == 'M'))
9055                 is_m = 1;
9056 #endif
9057             }
9058
9059           if (fp_model == ARM_FLOAT_AUTO)
9060             {
9061               int e_flags = elf_elfheader (info.abfd)->e_flags;
9062
9063               switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
9064                 {
9065                 case 0:
9066                   /* Leave it as "auto".  Strictly speaking this case
9067                      means FPA, but almost nobody uses that now, and
9068                      many toolchains fail to set the appropriate bits
9069                      for the floating-point model they use.  */
9070                   break;
9071                 case EF_ARM_SOFT_FLOAT:
9072                   fp_model = ARM_FLOAT_SOFT_FPA;
9073                   break;
9074                 case EF_ARM_VFP_FLOAT:
9075                   fp_model = ARM_FLOAT_VFP;
9076                   break;
9077                 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9078                   fp_model = ARM_FLOAT_SOFT_VFP;
9079                   break;
9080                 }
9081             }
9082
9083           if (e_flags & EF_ARM_BE8)
9084             info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9085
9086           break;
9087
9088         default:
9089           /* Leave it as "auto".  */
9090           break;
9091         }
9092     }
9093
9094   /* Check any target description for validity.  */
9095   if (tdesc_has_registers (tdesc))
9096     {
9097       /* For most registers we require GDB's default names; but also allow
9098          the numeric names for sp / lr / pc, as a convenience.  */
9099       static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9100       static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9101       static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9102
9103       const struct tdesc_feature *feature;
9104       int valid_p;
9105
9106       feature = tdesc_find_feature (tdesc,
9107                                     "org.gnu.gdb.arm.core");
9108       if (feature == NULL)
9109         {
9110           feature = tdesc_find_feature (tdesc,
9111                                         "org.gnu.gdb.arm.m-profile");
9112           if (feature == NULL)
9113             return NULL;
9114           else
9115             is_m = 1;
9116         }
9117
9118       tdesc_data = tdesc_data_alloc ();
9119
9120       valid_p = 1;
9121       for (i = 0; i < ARM_SP_REGNUM; i++)
9122         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9123                                             arm_register_names[i]);
9124       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9125                                                   ARM_SP_REGNUM,
9126                                                   arm_sp_names);
9127       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9128                                                   ARM_LR_REGNUM,
9129                                                   arm_lr_names);
9130       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9131                                                   ARM_PC_REGNUM,
9132                                                   arm_pc_names);
9133       if (is_m)
9134         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9135                                             ARM_PS_REGNUM, "xpsr");
9136       else
9137         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9138                                             ARM_PS_REGNUM, "cpsr");
9139
9140       if (!valid_p)
9141         {
9142           tdesc_data_cleanup (tdesc_data);
9143           return NULL;
9144         }
9145
9146       feature = tdesc_find_feature (tdesc,
9147                                     "org.gnu.gdb.arm.fpa");
9148       if (feature != NULL)
9149         {
9150           valid_p = 1;
9151           for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9152             valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9153                                                 arm_register_names[i]);
9154           if (!valid_p)
9155             {
9156               tdesc_data_cleanup (tdesc_data);
9157               return NULL;
9158             }
9159         }
9160       else
9161         have_fpa_registers = 0;
9162
9163       feature = tdesc_find_feature (tdesc,
9164                                     "org.gnu.gdb.xscale.iwmmxt");
9165       if (feature != NULL)
9166         {
9167           static const char *const iwmmxt_names[] = {
9168             "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9169             "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9170             "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9171             "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9172           };
9173
9174           valid_p = 1;
9175           for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9176             valid_p
9177               &= tdesc_numbered_register (feature, tdesc_data, i,
9178                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9179
9180           /* Check for the control registers, but do not fail if they
9181              are missing.  */
9182           for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9183             tdesc_numbered_register (feature, tdesc_data, i,
9184                                      iwmmxt_names[i - ARM_WR0_REGNUM]);
9185
9186           for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9187             valid_p
9188               &= tdesc_numbered_register (feature, tdesc_data, i,
9189                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9190
9191           if (!valid_p)
9192             {
9193               tdesc_data_cleanup (tdesc_data);
9194               return NULL;
9195             }
9196
9197           have_wmmx_registers = 1;
9198         }
9199
9200       /* If we have a VFP unit, check whether the single precision registers
9201          are present.  If not, then we will synthesize them as pseudo
9202          registers.  */
9203       feature = tdesc_find_feature (tdesc,
9204                                     "org.gnu.gdb.arm.vfp");
9205       if (feature != NULL)
9206         {
9207           static const char *const vfp_double_names[] = {
9208             "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9209             "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9210             "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9211             "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9212           };
9213
9214           /* Require the double precision registers.  There must be either
9215              16 or 32.  */
9216           valid_p = 1;
9217           for (i = 0; i < 32; i++)
9218             {
9219               valid_p &= tdesc_numbered_register (feature, tdesc_data,
9220                                                   ARM_D0_REGNUM + i,
9221                                                   vfp_double_names[i]);
9222               if (!valid_p)
9223                 break;
9224             }
9225           if (!valid_p && i == 16)
9226             valid_p = 1;
9227
9228           /* Also require FPSCR.  */
9229           valid_p &= tdesc_numbered_register (feature, tdesc_data,
9230                                               ARM_FPSCR_REGNUM, "fpscr");
9231           if (!valid_p)
9232             {
9233               tdesc_data_cleanup (tdesc_data);
9234               return NULL;
9235             }
9236
9237           if (tdesc_unnumbered_register (feature, "s0") == 0)
9238             have_vfp_pseudos = 1;
9239
9240           vfp_register_count = i;
9241
9242           /* If we have VFP, also check for NEON.  The architecture allows
9243              NEON without VFP (integer vector operations only), but GDB
9244              does not support that.  */
9245           feature = tdesc_find_feature (tdesc,
9246                                         "org.gnu.gdb.arm.neon");
9247           if (feature != NULL)
9248             {
9249               /* NEON requires 32 double-precision registers.  */
9250               if (i != 32)
9251                 {
9252                   tdesc_data_cleanup (tdesc_data);
9253                   return NULL;
9254                 }
9255
9256               /* If there are quad registers defined by the stub, use
9257                  their type; otherwise (normally) provide them with
9258                  the default type.  */
9259               if (tdesc_unnumbered_register (feature, "q0") == 0)
9260                 have_neon_pseudos = 1;
9261
9262               have_neon = 1;
9263             }
9264         }
9265     }
9266
9267   /* If there is already a candidate, use it.  */
9268   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9269        best_arch != NULL;
9270        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9271     {
9272       if (arm_abi != ARM_ABI_AUTO
9273           && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9274         continue;
9275
9276       if (fp_model != ARM_FLOAT_AUTO
9277           && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9278         continue;
9279
9280       /* There are various other properties in tdep that we do not
9281          need to check here: those derived from a target description,
9282          since gdbarches with a different target description are
9283          automatically disqualified.  */
9284
9285       /* Do check is_m, though, since it might come from the binary.  */
9286       if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9287         continue;
9288
9289       /* Found a match.  */
9290       break;
9291     }
9292
9293   if (best_arch != NULL)
9294     {
9295       if (tdesc_data != NULL)
9296         tdesc_data_cleanup (tdesc_data);
9297       return best_arch->gdbarch;
9298     }
9299
9300   tdep = XCNEW (struct gdbarch_tdep);
9301   gdbarch = gdbarch_alloc (&info, tdep);
9302
9303   /* Record additional information about the architecture we are defining.
9304      These are gdbarch discriminators, like the OSABI.  */
9305   tdep->arm_abi = arm_abi;
9306   tdep->fp_model = fp_model;
9307   tdep->is_m = is_m;
9308   tdep->have_fpa_registers = have_fpa_registers;
9309   tdep->have_wmmx_registers = have_wmmx_registers;
9310   gdb_assert (vfp_register_count == 0
9311               || vfp_register_count == 16
9312               || vfp_register_count == 32);
9313   tdep->vfp_register_count = vfp_register_count;
9314   tdep->have_vfp_pseudos = have_vfp_pseudos;
9315   tdep->have_neon_pseudos = have_neon_pseudos;
9316   tdep->have_neon = have_neon;
9317
9318   arm_register_g_packet_guesses (gdbarch);
9319
9320   /* Breakpoints.  */
9321   switch (info.byte_order_for_code)
9322     {
9323     case BFD_ENDIAN_BIG:
9324       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9325       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9326       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9327       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9328
9329       break;
9330
9331     case BFD_ENDIAN_LITTLE:
9332       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9333       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9334       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9335       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9336
9337       break;
9338
9339     default:
9340       internal_error (__FILE__, __LINE__,
9341                       _("arm_gdbarch_init: bad byte order for float format"));
9342     }
9343
9344   /* On ARM targets char defaults to unsigned.  */
9345   set_gdbarch_char_signed (gdbarch, 0);
9346
9347   /* wchar_t is unsigned under the AAPCS.  */
9348   if (tdep->arm_abi == ARM_ABI_AAPCS)
9349     set_gdbarch_wchar_signed (gdbarch, 0);
9350   else
9351     set_gdbarch_wchar_signed (gdbarch, 1);
9352
9353   /* Note: for displaced stepping, this includes the breakpoint, and one word
9354      of additional scratch space.  This setting isn't used for anything beside
9355      displaced stepping at present.  */
9356   set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
9357
9358   /* This should be low enough for everything.  */
9359   tdep->lowest_pc = 0x20;
9360   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
9361
9362   /* The default, for both APCS and AAPCS, is to return small
9363      structures in registers.  */
9364   tdep->struct_return = reg_struct_return;
9365
9366   set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9367   set_gdbarch_frame_align (gdbarch, arm_frame_align);
9368
9369   if (is_m)
9370     set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9371
9372   set_gdbarch_write_pc (gdbarch, arm_write_pc);
9373
9374   /* Frame handling.  */
9375   set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
9376   set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
9377   set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
9378
9379   frame_base_set_default (gdbarch, &arm_normal_base);
9380
9381   /* Address manipulation.  */
9382   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9383
9384   /* Advance PC across function entry code.  */
9385   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9386
9387   /* Detect whether PC is at a point where the stack has been destroyed.  */
9388   set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9389
9390   /* Skip trampolines.  */
9391   set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9392
9393   /* The stack grows downward.  */
9394   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9395
9396   /* Breakpoint manipulation.  */
9397   set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9398   set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9399   set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9400                                                   arm_breakpoint_kind_from_current_state);
9401
9402   /* Information about registers, etc.  */
9403   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9404   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9405   set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9406   set_gdbarch_register_type (gdbarch, arm_register_type);
9407   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9408
9409   /* This "info float" is FPA-specific.  Use the generic version if we
9410      do not have FPA.  */
9411   if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9412     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9413
9414   /* Internal <-> external register number maps.  */
9415   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9416   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9417
9418   set_gdbarch_register_name (gdbarch, arm_register_name);
9419
9420   /* Returning results.  */
9421   set_gdbarch_return_value (gdbarch, arm_return_value);
9422
9423   /* Disassembly.  */
9424   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9425
9426   /* Minsymbol frobbing.  */
9427   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9428   set_gdbarch_coff_make_msymbol_special (gdbarch,
9429                                          arm_coff_make_msymbol_special);
9430   set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9431
9432   /* Thumb-2 IT block support.  */
9433   set_gdbarch_adjust_breakpoint_address (gdbarch,
9434                                          arm_adjust_breakpoint_address);
9435
9436   /* Virtual tables.  */
9437   set_gdbarch_vbit_in_delta (gdbarch, 1);
9438
9439   /* Hook in the ABI-specific overrides, if they have been registered.  */
9440   gdbarch_init_osabi (info, gdbarch);
9441
9442   dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9443
9444   /* Add some default predicates.  */
9445   if (is_m)
9446     frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9447   frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9448   dwarf2_append_unwinders (gdbarch);
9449   frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9450   frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9451   frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9452
9453   /* Now we have tuned the configuration, set a few final things,
9454      based on what the OS ABI has told us.  */
9455
9456   /* If the ABI is not otherwise marked, assume the old GNU APCS.  EABI
9457      binaries are always marked.  */
9458   if (tdep->arm_abi == ARM_ABI_AUTO)
9459     tdep->arm_abi = ARM_ABI_APCS;
9460
9461   /* Watchpoints are not steppable.  */
9462   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9463
9464   /* We used to default to FPA for generic ARM, but almost nobody
9465      uses that now, and we now provide a way for the user to force
9466      the model.  So default to the most useful variant.  */
9467   if (tdep->fp_model == ARM_FLOAT_AUTO)
9468     tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9469
9470   if (tdep->jb_pc >= 0)
9471     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9472
9473   /* Floating point sizes and format.  */
9474   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9475   if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9476     {
9477       set_gdbarch_double_format
9478         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9479       set_gdbarch_long_double_format
9480         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9481     }
9482   else
9483     {
9484       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9485       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9486     }
9487
9488   if (have_vfp_pseudos)
9489     {
9490       /* NOTE: These are the only pseudo registers used by
9491          the ARM target at the moment.  If more are added, a
9492          little more care in numbering will be needed.  */
9493
9494       int num_pseudos = 32;
9495       if (have_neon_pseudos)
9496         num_pseudos += 16;
9497       set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9498       set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9499       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9500     }
9501
9502   if (tdesc_data)
9503     {
9504       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9505
9506       tdesc_use_registers (gdbarch, tdesc, tdesc_data);
9507
9508       /* Override tdesc_register_type to adjust the types of VFP
9509          registers for NEON.  */
9510       set_gdbarch_register_type (gdbarch, arm_register_type);
9511     }
9512
9513   /* Add standard register aliases.  We add aliases even for those
9514      nanes which are used by the current architecture - it's simpler,
9515      and does no harm, since nothing ever lists user registers.  */
9516   for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9517     user_reg_add (gdbarch, arm_register_aliases[i].name,
9518                   value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9519
9520   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9521   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9522
9523   return gdbarch;
9524 }
9525
9526 static void
9527 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9528 {
9529   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9530
9531   if (tdep == NULL)
9532     return;
9533
9534   fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
9535                       (unsigned long) tdep->lowest_pc);
9536 }
9537
9538 #if GDB_SELF_TEST
9539 namespace selftests
9540 {
9541 static void arm_record_test (void);
9542 }
9543 #endif
9544
9545 void
9546 _initialize_arm_tdep (void)
9547 {
9548   long length;
9549   int i, j;
9550   char regdesc[1024], *rdptr = regdesc;
9551   size_t rest = sizeof (regdesc);
9552
9553   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9554
9555   arm_objfile_data_key
9556     = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
9557
9558   /* Add ourselves to objfile event chain.  */
9559   observer_attach_new_objfile (arm_exidx_new_objfile);
9560   arm_exidx_data_key
9561     = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
9562
9563   /* Register an ELF OS ABI sniffer for ARM binaries.  */
9564   gdbarch_register_osabi_sniffer (bfd_arch_arm,
9565                                   bfd_target_elf_flavour,
9566                                   arm_elf_osabi_sniffer);
9567
9568   /* Initialize the standard target descriptions.  */
9569   initialize_tdesc_arm_with_m ();
9570   initialize_tdesc_arm_with_m_fpa_layout ();
9571   initialize_tdesc_arm_with_m_vfp_d16 ();
9572   initialize_tdesc_arm_with_iwmmxt ();
9573   initialize_tdesc_arm_with_vfpv2 ();
9574   initialize_tdesc_arm_with_vfpv3 ();
9575   initialize_tdesc_arm_with_neon ();
9576
9577   /* Add root prefix command for all "set arm"/"show arm" commands.  */
9578   add_prefix_cmd ("arm", no_class, set_arm_command,
9579                   _("Various ARM-specific commands."),
9580                   &setarmcmdlist, "set arm ", 0, &setlist);
9581
9582   add_prefix_cmd ("arm", no_class, show_arm_command,
9583                   _("Various ARM-specific commands."),
9584                   &showarmcmdlist, "show arm ", 0, &showlist);
9585
9586
9587   arm_disassembler_options = xstrdup ("reg-names-std");
9588   const disasm_options_t *disasm_options = disassembler_options_arm ();
9589   int num_disassembly_styles = 0;
9590   for (i = 0; disasm_options->name[i] != NULL; i++)
9591     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9592       num_disassembly_styles++;
9593
9594   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
9595   valid_disassembly_styles = XNEWVEC (const char *,
9596                                       num_disassembly_styles + 1);
9597   for (i = j = 0; disasm_options->name[i] != NULL; i++)
9598     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9599       {
9600         size_t offset = strlen ("reg-names-");
9601         const char *style = disasm_options->name[i];
9602         valid_disassembly_styles[j++] = &style[offset];
9603         length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9604                            disasm_options->description[i]);
9605         rdptr += length;
9606         rest -= length;
9607       }
9608   /* Mark the end of valid options.  */
9609   valid_disassembly_styles[num_disassembly_styles] = NULL;
9610
9611   /* Create the help text.  */
9612   std::string helptext = string_printf ("%s%s%s",
9613                                         _("The valid values are:\n"),
9614                                         regdesc,
9615                                         _("The default is \"std\"."));
9616
9617   add_setshow_enum_cmd("disassembler", no_class,
9618                        valid_disassembly_styles, &disassembly_style,
9619                        _("Set the disassembly style."),
9620                        _("Show the disassembly style."),
9621                        helptext.c_str (),
9622                        set_disassembly_style_sfunc,
9623                        show_disassembly_style_sfunc,
9624                        &setarmcmdlist, &showarmcmdlist);
9625
9626   add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9627                            _("Set usage of ARM 32-bit mode."),
9628                            _("Show usage of ARM 32-bit mode."),
9629                            _("When off, a 26-bit PC will be used."),
9630                            NULL,
9631                            NULL, /* FIXME: i18n: Usage of ARM 32-bit
9632                                     mode is %s.  */
9633                            &setarmcmdlist, &showarmcmdlist);
9634
9635   /* Add a command to allow the user to force the FPU model.  */
9636   add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9637                         _("Set the floating point type."),
9638                         _("Show the floating point type."),
9639                         _("auto - Determine the FP typefrom the OS-ABI.\n\
9640 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9641 fpa - FPA co-processor (GCC compiled).\n\
9642 softvfp - Software FP with pure-endian doubles.\n\
9643 vfp - VFP co-processor."),
9644                         set_fp_model_sfunc, show_fp_model,
9645                         &setarmcmdlist, &showarmcmdlist);
9646
9647   /* Add a command to allow the user to force the ABI.  */
9648   add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9649                         _("Set the ABI."),
9650                         _("Show the ABI."),
9651                         NULL, arm_set_abi, arm_show_abi,
9652                         &setarmcmdlist, &showarmcmdlist);
9653
9654   /* Add two commands to allow the user to force the assumed
9655      execution mode.  */
9656   add_setshow_enum_cmd ("fallback-mode", class_support,
9657                         arm_mode_strings, &arm_fallback_mode_string,
9658                         _("Set the mode assumed when symbols are unavailable."),
9659                         _("Show the mode assumed when symbols are unavailable."),
9660                         NULL, NULL, arm_show_fallback_mode,
9661                         &setarmcmdlist, &showarmcmdlist);
9662   add_setshow_enum_cmd ("force-mode", class_support,
9663                         arm_mode_strings, &arm_force_mode_string,
9664                         _("Set the mode assumed even when symbols are available."),
9665                         _("Show the mode assumed even when symbols are available."),
9666                         NULL, NULL, arm_show_force_mode,
9667                         &setarmcmdlist, &showarmcmdlist);
9668
9669   /* Debugging flag.  */
9670   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9671                            _("Set ARM debugging."),
9672                            _("Show ARM debugging."),
9673                            _("When on, arm-specific debugging is enabled."),
9674                            NULL,
9675                            NULL, /* FIXME: i18n: "ARM debugging is %s.  */
9676                            &setdebuglist, &showdebuglist);
9677
9678 #if GDB_SELF_TEST
9679   selftests::register_test ("arm-record", selftests::arm_record_test);
9680 #endif
9681
9682 }
9683
9684 /* ARM-reversible process record data structures.  */
9685
9686 #define ARM_INSN_SIZE_BYTES 4    
9687 #define THUMB_INSN_SIZE_BYTES 2
9688 #define THUMB2_INSN_SIZE_BYTES 4
9689
9690
9691 /* Position of the bit within a 32-bit ARM instruction
9692    that defines whether the instruction is a load or store.  */
9693 #define INSN_S_L_BIT_NUM 20
9694
9695 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9696         do  \
9697           { \
9698             unsigned int reg_len = LENGTH; \
9699             if (reg_len) \
9700               { \
9701                 REGS = XNEWVEC (uint32_t, reg_len); \
9702                 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9703               } \
9704           } \
9705         while (0)
9706
9707 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9708         do  \
9709           { \
9710             unsigned int mem_len = LENGTH; \
9711             if (mem_len) \
9712             { \
9713               MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
9714               memcpy(&MEMS->len, &RECORD_BUF[0], \
9715                      sizeof(struct arm_mem_r) * LENGTH); \
9716             } \
9717           } \
9718           while (0)
9719
9720 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
9721 #define INSN_RECORDED(ARM_RECORD) \
9722         (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9723
9724 /* ARM memory record structure.  */
9725 struct arm_mem_r
9726 {
9727   uint32_t len;    /* Record length.  */
9728   uint32_t addr;   /* Memory address.  */
9729 };
9730
9731 /* ARM instruction record contains opcode of current insn
9732    and execution state (before entry to decode_insn()),
9733    contains list of to-be-modified registers and
9734    memory blocks (on return from decode_insn()).  */
9735
9736 typedef struct insn_decode_record_t
9737 {
9738   struct gdbarch *gdbarch;
9739   struct regcache *regcache;
9740   CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
9741   uint32_t arm_insn;            /* Should accommodate thumb.  */
9742   uint32_t cond;                /* Condition code.  */
9743   uint32_t opcode;              /* Insn opcode.  */
9744   uint32_t decode;              /* Insn decode bits.  */
9745   uint32_t mem_rec_count;       /* No of mem records.  */
9746   uint32_t reg_rec_count;       /* No of reg records.  */
9747   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
9748   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
9749 } insn_decode_record;
9750
9751
9752 /* Checks ARM SBZ and SBO mandatory fields.  */
9753
9754 static int
9755 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9756 {
9757   uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9758
9759   if (!len)
9760     return 1;
9761
9762   if (!sbo)
9763     ones = ~ones;
9764
9765   while (ones)
9766     {
9767       if (!(ones & sbo))
9768         {
9769           return 0;
9770         }
9771       ones = ones >> 1;
9772     }
9773   return 1;
9774 }
9775
9776 enum arm_record_result
9777 {
9778   ARM_RECORD_SUCCESS = 0,
9779   ARM_RECORD_FAILURE = 1
9780 };
9781
9782 typedef enum
9783 {
9784   ARM_RECORD_STRH=1,
9785   ARM_RECORD_STRD
9786 } arm_record_strx_t;
9787
9788 typedef enum
9789 {
9790   ARM_RECORD=1,
9791   THUMB_RECORD,
9792   THUMB2_RECORD
9793 } record_type_t;
9794
9795
9796 static int
9797 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
9798                  uint32_t *record_buf_mem, arm_record_strx_t str_type)
9799 {
9800
9801   struct regcache *reg_cache = arm_insn_r->regcache;
9802   ULONGEST u_regval[2]= {0};
9803
9804   uint32_t reg_src1 = 0, reg_src2 = 0;
9805   uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9806
9807   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9808   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9809
9810   if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9811     {
9812       /* 1) Handle misc store, immediate offset.  */
9813       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9814       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9815       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9816       regcache_raw_read_unsigned (reg_cache, reg_src1,
9817                                   &u_regval[0]);
9818       if (ARM_PC_REGNUM == reg_src1)
9819         {
9820           /* If R15 was used as Rn, hence current PC+8.  */
9821           u_regval[0] = u_regval[0] + 8;
9822         }
9823       offset_8 = (immed_high << 4) | immed_low;
9824       /* Calculate target store address.  */
9825       if (14 == arm_insn_r->opcode)
9826         {
9827           tgt_mem_addr = u_regval[0] + offset_8;
9828         }
9829       else
9830         {
9831           tgt_mem_addr = u_regval[0] - offset_8;
9832         }
9833       if (ARM_RECORD_STRH == str_type)
9834         {
9835           record_buf_mem[0] = 2;
9836           record_buf_mem[1] = tgt_mem_addr;
9837           arm_insn_r->mem_rec_count = 1;
9838         }
9839       else if (ARM_RECORD_STRD == str_type)
9840         {
9841           record_buf_mem[0] = 4;
9842           record_buf_mem[1] = tgt_mem_addr;
9843           record_buf_mem[2] = 4;
9844           record_buf_mem[3] = tgt_mem_addr + 4;
9845           arm_insn_r->mem_rec_count = 2;
9846         }
9847     }
9848   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9849     {
9850       /* 2) Store, register offset.  */
9851       /* Get Rm.  */
9852       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9853       /* Get Rn.  */
9854       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9855       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9856       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9857       if (15 == reg_src2)
9858         {
9859           /* If R15 was used as Rn, hence current PC+8.  */
9860           u_regval[0] = u_regval[0] + 8;
9861         }
9862       /* Calculate target store address, Rn +/- Rm, register offset.  */
9863       if (12 == arm_insn_r->opcode)
9864         {
9865           tgt_mem_addr = u_regval[0] + u_regval[1];
9866         }
9867       else
9868         {
9869           tgt_mem_addr = u_regval[1] - u_regval[0];
9870         }
9871       if (ARM_RECORD_STRH == str_type)
9872         {
9873           record_buf_mem[0] = 2;
9874           record_buf_mem[1] = tgt_mem_addr;
9875           arm_insn_r->mem_rec_count = 1;
9876         }
9877       else if (ARM_RECORD_STRD == str_type)
9878         {
9879           record_buf_mem[0] = 4;
9880           record_buf_mem[1] = tgt_mem_addr;
9881           record_buf_mem[2] = 4;
9882           record_buf_mem[3] = tgt_mem_addr + 4;
9883           arm_insn_r->mem_rec_count = 2;
9884         }
9885     }
9886   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9887            || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
9888     {
9889       /* 3) Store, immediate pre-indexed.  */
9890       /* 5) Store, immediate post-indexed.  */
9891       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9892       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9893       offset_8 = (immed_high << 4) | immed_low;
9894       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9895       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9896       /* Calculate target store address, Rn +/- Rm, register offset.  */
9897       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9898         {
9899           tgt_mem_addr = u_regval[0] + offset_8;
9900         }
9901       else
9902         {
9903           tgt_mem_addr = u_regval[0] - offset_8;
9904         }
9905       if (ARM_RECORD_STRH == str_type)
9906         {
9907           record_buf_mem[0] = 2;
9908           record_buf_mem[1] = tgt_mem_addr;
9909           arm_insn_r->mem_rec_count = 1;
9910         }
9911       else if (ARM_RECORD_STRD == str_type)
9912         {
9913           record_buf_mem[0] = 4;
9914           record_buf_mem[1] = tgt_mem_addr;
9915           record_buf_mem[2] = 4;
9916           record_buf_mem[3] = tgt_mem_addr + 4;
9917           arm_insn_r->mem_rec_count = 2;
9918         }
9919       /* Record Rn also as it changes.  */
9920       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9921       arm_insn_r->reg_rec_count = 1;
9922     }
9923   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9924            || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9925     {
9926       /* 4) Store, register pre-indexed.  */
9927       /* 6) Store, register post -indexed.  */
9928       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9929       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9930       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9931       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9932       /* Calculate target store address, Rn +/- Rm, register offset.  */
9933       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9934         {
9935           tgt_mem_addr = u_regval[0] + u_regval[1];
9936         }
9937       else
9938         {
9939           tgt_mem_addr = u_regval[1] - u_regval[0];
9940         }
9941       if (ARM_RECORD_STRH == str_type)
9942         {
9943           record_buf_mem[0] = 2;
9944           record_buf_mem[1] = tgt_mem_addr;
9945           arm_insn_r->mem_rec_count = 1;
9946         }
9947       else if (ARM_RECORD_STRD == str_type)
9948         {
9949           record_buf_mem[0] = 4;
9950           record_buf_mem[1] = tgt_mem_addr;
9951           record_buf_mem[2] = 4;
9952           record_buf_mem[3] = tgt_mem_addr + 4;
9953           arm_insn_r->mem_rec_count = 2;
9954         }
9955       /* Record Rn also as it changes.  */
9956       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9957       arm_insn_r->reg_rec_count = 1;
9958     }
9959   return 0;
9960 }
9961
9962 /* Handling ARM extension space insns.  */
9963
9964 static int
9965 arm_record_extension_space (insn_decode_record *arm_insn_r)
9966 {
9967   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
9968   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9969   uint32_t record_buf[8], record_buf_mem[8];
9970   uint32_t reg_src1 = 0;
9971   struct regcache *reg_cache = arm_insn_r->regcache;
9972   ULONGEST u_regval = 0;
9973
9974   gdb_assert (!INSN_RECORDED(arm_insn_r));
9975   /* Handle unconditional insn extension space.  */
9976
9977   opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9978   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9979   if (arm_insn_r->cond)
9980     {
9981       /* PLD has no affect on architectural state, it just affects
9982          the caches.  */
9983       if (5 == ((opcode1 & 0xE0) >> 5))
9984         {
9985           /* BLX(1) */
9986           record_buf[0] = ARM_PS_REGNUM;
9987           record_buf[1] = ARM_LR_REGNUM;
9988           arm_insn_r->reg_rec_count = 2;
9989         }
9990       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
9991     }
9992
9993
9994   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9995   if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9996     {
9997       ret = -1;
9998       /* Undefined instruction on ARM V5; need to handle if later 
9999          versions define it.  */
10000     }
10001
10002   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
10003   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
10004   insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
10005
10006   /* Handle arithmetic insn extension space.  */
10007   if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
10008       && !INSN_RECORDED(arm_insn_r))
10009     {
10010       /* Handle MLA(S) and MUL(S).  */
10011       if (in_inclusive_range (insn_op1, 0U, 3U))
10012       {
10013         record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10014         record_buf[1] = ARM_PS_REGNUM;
10015         arm_insn_r->reg_rec_count = 2;
10016       }
10017       else if (in_inclusive_range (insn_op1, 4U, 15U))
10018       {
10019         /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
10020         record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10021         record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10022         record_buf[2] = ARM_PS_REGNUM;
10023         arm_insn_r->reg_rec_count = 3;
10024       }
10025     }
10026
10027   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
10028   opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
10029   insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
10030
10031   /* Handle control insn extension space.  */
10032
10033   if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
10034       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
10035     {
10036       if (!bit (arm_insn_r->arm_insn,25))
10037         {
10038           if (!bits (arm_insn_r->arm_insn, 4, 7))
10039             {
10040               if ((0 == insn_op1) || (2 == insn_op1))
10041                 {
10042                   /* MRS.  */
10043                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10044                   arm_insn_r->reg_rec_count = 1;
10045                 }
10046               else if (1 == insn_op1)
10047                 {
10048                   /* CSPR is going to be changed.  */
10049                   record_buf[0] = ARM_PS_REGNUM;
10050                   arm_insn_r->reg_rec_count = 1;
10051                 }
10052               else if (3 == insn_op1)
10053                 {
10054                   /* SPSR is going to be changed.  */
10055                   /* We need to get SPSR value, which is yet to be done.  */
10056                   return -1;
10057                 }
10058             }
10059           else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
10060             {
10061               if (1 == insn_op1)
10062                 {
10063                   /* BX.  */
10064                   record_buf[0] = ARM_PS_REGNUM;
10065                   arm_insn_r->reg_rec_count = 1;
10066                 }
10067               else if (3 == insn_op1)
10068                 {
10069                   /* CLZ.  */
10070                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10071                   arm_insn_r->reg_rec_count = 1;
10072                 }
10073             }
10074           else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
10075             {
10076               /* BLX.  */
10077               record_buf[0] = ARM_PS_REGNUM;
10078               record_buf[1] = ARM_LR_REGNUM;
10079               arm_insn_r->reg_rec_count = 2;
10080             }
10081           else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10082             {
10083               /* QADD, QSUB, QDADD, QDSUB */
10084               record_buf[0] = ARM_PS_REGNUM;
10085               record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10086               arm_insn_r->reg_rec_count = 2;
10087             }
10088           else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10089             {
10090               /* BKPT.  */
10091               record_buf[0] = ARM_PS_REGNUM;
10092               record_buf[1] = ARM_LR_REGNUM;
10093               arm_insn_r->reg_rec_count = 2;
10094
10095               /* Save SPSR also;how?  */
10096               return -1;
10097             }
10098           else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
10099                   || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10100                   || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10101                   || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10102                  )
10103             {
10104               if (0 == insn_op1 || 1 == insn_op1)
10105                 {
10106                   /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
10107                   /* We dont do optimization for SMULW<y> where we
10108                      need only Rd.  */
10109                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10110                   record_buf[1] = ARM_PS_REGNUM;
10111                   arm_insn_r->reg_rec_count = 2;
10112                 }
10113               else if (2 == insn_op1)
10114                 {
10115                   /* SMLAL<x><y>.  */
10116                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10117                   record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10118                   arm_insn_r->reg_rec_count = 2;
10119                 }
10120               else if (3 == insn_op1)
10121                 {
10122                   /* SMUL<x><y>.  */
10123                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10124                   arm_insn_r->reg_rec_count = 1;
10125                 }
10126             }
10127         }
10128       else
10129         {
10130           /* MSR : immediate form.  */
10131           if (1 == insn_op1)
10132             {
10133               /* CSPR is going to be changed.  */
10134               record_buf[0] = ARM_PS_REGNUM;
10135               arm_insn_r->reg_rec_count = 1;
10136             }
10137           else if (3 == insn_op1)
10138             {
10139               /* SPSR is going to be changed.  */
10140               /* we need to get SPSR value, which is yet to be done  */
10141               return -1;
10142             }
10143         }
10144     }
10145
10146   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10147   opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10148   insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10149
10150   /* Handle load/store insn extension space.  */
10151
10152   if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
10153       && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10154       && !INSN_RECORDED(arm_insn_r))
10155     {
10156       /* SWP/SWPB.  */
10157       if (0 == insn_op1)
10158         {
10159           /* These insn, changes register and memory as well.  */
10160           /* SWP or SWPB insn.  */
10161           /* Get memory address given by Rn.  */
10162           reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10163           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10164           /* SWP insn ?, swaps word.  */
10165           if (8 == arm_insn_r->opcode)
10166             {
10167               record_buf_mem[0] = 4;
10168             }
10169           else
10170             {
10171               /* SWPB insn, swaps only byte.  */
10172               record_buf_mem[0] = 1;
10173             }
10174           record_buf_mem[1] = u_regval;
10175           arm_insn_r->mem_rec_count = 1;
10176           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10177           arm_insn_r->reg_rec_count = 1;
10178         }
10179       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10180         {
10181           /* STRH.  */
10182           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10183                           ARM_RECORD_STRH);
10184         }
10185       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10186         {
10187           /* LDRD.  */
10188           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10189           record_buf[1] = record_buf[0] + 1;
10190           arm_insn_r->reg_rec_count = 2;
10191         }
10192       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10193         {
10194           /* STRD.  */
10195           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10196                         ARM_RECORD_STRD);
10197         }
10198       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10199         {
10200           /* LDRH, LDRSB, LDRSH.  */
10201           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10202           arm_insn_r->reg_rec_count = 1;
10203         }
10204
10205     }
10206
10207   opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10208   if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10209       && !INSN_RECORDED(arm_insn_r))
10210     {
10211       ret = -1;
10212       /* Handle coprocessor insn extension space.  */
10213     }
10214
10215   /* To be done for ARMv5 and later; as of now we return -1.  */
10216   if (-1 == ret)
10217     return ret;
10218
10219   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10220   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10221
10222   return ret;
10223 }
10224
10225 /* Handling opcode 000 insns.  */
10226
10227 static int
10228 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10229 {
10230   struct regcache *reg_cache = arm_insn_r->regcache;
10231   uint32_t record_buf[8], record_buf_mem[8];
10232   ULONGEST u_regval[2] = {0};
10233
10234   uint32_t reg_src1 = 0, reg_dest = 0;
10235   uint32_t opcode1 = 0;
10236
10237   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10238   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10239   opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10240
10241   if (!((opcode1 & 0x19) == 0x10))
10242     {
10243       /* Data-processing (register) and Data-processing (register-shifted
10244          register */
10245       /* Out of 11 shifter operands mode, all the insn modifies destination
10246          register, which is specified by 13-16 decode.  */
10247       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10248       record_buf[1] = ARM_PS_REGNUM;
10249       arm_insn_r->reg_rec_count = 2;
10250     }
10251   else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10252     {
10253       /* Miscellaneous instructions */
10254
10255       if (3 == arm_insn_r->decode && 0x12 == opcode1
10256           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10257         {
10258           /* Handle BLX, branch and link/exchange.  */
10259           if (9 == arm_insn_r->opcode)
10260             {
10261               /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10262                  and R14 stores the return address.  */
10263               record_buf[0] = ARM_PS_REGNUM;
10264               record_buf[1] = ARM_LR_REGNUM;
10265               arm_insn_r->reg_rec_count = 2;
10266             }
10267         }
10268       else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10269         {
10270           /* Handle enhanced software breakpoint insn, BKPT.  */
10271           /* CPSR is changed to be executed in ARM state,  disabling normal
10272              interrupts, entering abort mode.  */
10273           /* According to high vector configuration PC is set.  */
10274           /* user hit breakpoint and type reverse, in
10275              that case, we need to go back with previous CPSR and
10276              Program Counter.  */
10277           record_buf[0] = ARM_PS_REGNUM;
10278           record_buf[1] = ARM_LR_REGNUM;
10279           arm_insn_r->reg_rec_count = 2;
10280
10281           /* Save SPSR also; how?  */
10282           return -1;
10283         }
10284       else if (1 == arm_insn_r->decode && 0x12 == opcode1
10285                && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10286         {
10287           /* Handle BX, branch and link/exchange.  */
10288           /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
10289           record_buf[0] = ARM_PS_REGNUM;
10290           arm_insn_r->reg_rec_count = 1;
10291         }
10292       else if (1 == arm_insn_r->decode && 0x16 == opcode1
10293                && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10294                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10295         {
10296           /* Count leading zeros: CLZ.  */
10297           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10298           arm_insn_r->reg_rec_count = 1;
10299         }
10300       else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10301                && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10302                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10303                && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10304         {
10305           /* Handle MRS insn.  */
10306           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10307           arm_insn_r->reg_rec_count = 1;
10308         }
10309     }
10310   else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10311     {
10312       /* Multiply and multiply-accumulate */
10313
10314       /* Handle multiply instructions.  */
10315       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
10316       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10317           {
10318             /* Handle MLA and MUL.  */
10319             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10320             record_buf[1] = ARM_PS_REGNUM;
10321             arm_insn_r->reg_rec_count = 2;
10322           }
10323         else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10324           {
10325             /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
10326             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10327             record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10328             record_buf[2] = ARM_PS_REGNUM;
10329             arm_insn_r->reg_rec_count = 3;
10330           }
10331     }
10332   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
10333     {
10334       /* Synchronization primitives */
10335
10336       /* Handling SWP, SWPB.  */
10337       /* These insn, changes register and memory as well.  */
10338       /* SWP or SWPB insn.  */
10339
10340       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10341       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10342       /* SWP insn ?, swaps word.  */
10343       if (8 == arm_insn_r->opcode)
10344         {
10345           record_buf_mem[0] = 4;
10346         }
10347       else
10348         {
10349           /* SWPB insn, swaps only byte.  */
10350           record_buf_mem[0] = 1;
10351         }
10352       record_buf_mem[1] = u_regval[0];
10353       arm_insn_r->mem_rec_count = 1;
10354       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10355       arm_insn_r->reg_rec_count = 1;
10356     }
10357   else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10358            || 15 == arm_insn_r->decode)
10359     {
10360       if ((opcode1 & 0x12) == 2)
10361         {
10362           /* Extra load/store (unprivileged) */
10363           return -1;
10364         }
10365       else
10366         {
10367           /* Extra load/store */
10368           switch (bits (arm_insn_r->arm_insn, 5, 6))
10369             {
10370             case 1:
10371               if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10372                 {
10373                   /* STRH (register), STRH (immediate) */
10374                   arm_record_strx (arm_insn_r, &record_buf[0],
10375                                    &record_buf_mem[0], ARM_RECORD_STRH);
10376                 }
10377               else if ((opcode1 & 0x05) == 0x1)
10378                 {
10379                   /* LDRH (register) */
10380                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10381                   arm_insn_r->reg_rec_count = 1;
10382
10383                   if (bit (arm_insn_r->arm_insn, 21))
10384                     {
10385                       /* Write back to Rn.  */
10386                       record_buf[arm_insn_r->reg_rec_count++]
10387                         = bits (arm_insn_r->arm_insn, 16, 19);
10388                     }
10389                 }
10390               else if ((opcode1 & 0x05) == 0x5)
10391                 {
10392                   /* LDRH (immediate), LDRH (literal) */
10393                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10394
10395                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10396                   arm_insn_r->reg_rec_count = 1;
10397
10398                   if (rn != 15)
10399                     {
10400                       /*LDRH (immediate) */
10401                       if (bit (arm_insn_r->arm_insn, 21))
10402                         {
10403                           /* Write back to Rn.  */
10404                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10405                         }
10406                     }
10407                 }
10408               else
10409                 return -1;
10410               break;
10411             case 2:
10412               if ((opcode1 & 0x05) == 0x0)
10413                 {
10414                   /* LDRD (register) */
10415                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10416                   record_buf[1] = record_buf[0] + 1;
10417                   arm_insn_r->reg_rec_count = 2;
10418
10419                   if (bit (arm_insn_r->arm_insn, 21))
10420                     {
10421                       /* Write back to Rn.  */
10422                       record_buf[arm_insn_r->reg_rec_count++]
10423                         = bits (arm_insn_r->arm_insn, 16, 19);
10424                     }
10425                 }
10426               else if ((opcode1 & 0x05) == 0x1)
10427                 {
10428                   /* LDRSB (register) */
10429                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10430                   arm_insn_r->reg_rec_count = 1;
10431
10432                   if (bit (arm_insn_r->arm_insn, 21))
10433                     {
10434                       /* Write back to Rn.  */
10435                       record_buf[arm_insn_r->reg_rec_count++]
10436                         = bits (arm_insn_r->arm_insn, 16, 19);
10437                     }
10438                 }
10439               else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10440                 {
10441                   /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10442                      LDRSB (literal) */
10443                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10444
10445                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10446                   arm_insn_r->reg_rec_count = 1;
10447
10448                   if (rn != 15)
10449                     {
10450                       /*LDRD (immediate), LDRSB (immediate) */
10451                       if (bit (arm_insn_r->arm_insn, 21))
10452                         {
10453                           /* Write back to Rn.  */
10454                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10455                         }
10456                     }
10457                 }
10458               else
10459                 return -1;
10460               break;
10461             case 3:
10462               if ((opcode1 & 0x05) == 0x0)
10463                 {
10464                   /* STRD (register) */
10465                   arm_record_strx (arm_insn_r, &record_buf[0],
10466                                    &record_buf_mem[0], ARM_RECORD_STRD);
10467                 }
10468               else if ((opcode1 & 0x05) == 0x1)
10469                 {
10470                   /* LDRSH (register) */
10471                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10472                   arm_insn_r->reg_rec_count = 1;
10473
10474                   if (bit (arm_insn_r->arm_insn, 21))
10475                     {
10476                       /* Write back to Rn.  */
10477                       record_buf[arm_insn_r->reg_rec_count++]
10478                         = bits (arm_insn_r->arm_insn, 16, 19);
10479                     }
10480                 }
10481               else if ((opcode1 & 0x05) == 0x4)
10482                 {
10483                   /* STRD (immediate) */
10484                   arm_record_strx (arm_insn_r, &record_buf[0],
10485                                    &record_buf_mem[0], ARM_RECORD_STRD);
10486                 }
10487               else if ((opcode1 & 0x05) == 0x5)
10488                 {
10489                   /* LDRSH (immediate), LDRSH (literal) */
10490                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10491                   arm_insn_r->reg_rec_count = 1;
10492
10493                   if (bit (arm_insn_r->arm_insn, 21))
10494                     {
10495                       /* Write back to Rn.  */
10496                       record_buf[arm_insn_r->reg_rec_count++]
10497                         = bits (arm_insn_r->arm_insn, 16, 19);
10498                     }
10499                 }
10500               else
10501                 return -1;
10502               break;
10503             default:
10504               return -1;
10505             }
10506         }
10507     }
10508   else
10509     {
10510       return -1;
10511     }
10512
10513   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10514   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10515   return 0;
10516 }
10517
10518 /* Handling opcode 001 insns.  */
10519
10520 static int
10521 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10522 {
10523   uint32_t record_buf[8], record_buf_mem[8];
10524
10525   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10526   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10527
10528   if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10529       && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10530       && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10531      )
10532     {
10533       /* Handle MSR insn.  */
10534       if (9 == arm_insn_r->opcode)
10535         {
10536           /* CSPR is going to be changed.  */
10537           record_buf[0] = ARM_PS_REGNUM;
10538           arm_insn_r->reg_rec_count = 1;
10539         }
10540       else
10541         {
10542           /* SPSR is going to be changed.  */
10543         }
10544     }
10545   else if (arm_insn_r->opcode <= 15)
10546     {
10547       /* Normal data processing insns.  */
10548       /* Out of 11 shifter operands mode, all the insn modifies destination
10549          register, which is specified by 13-16 decode.  */
10550       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10551       record_buf[1] = ARM_PS_REGNUM;
10552       arm_insn_r->reg_rec_count = 2;
10553     }
10554   else
10555     {
10556       return -1;
10557     }
10558
10559   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10560   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10561   return 0;
10562 }
10563
10564 static int
10565 arm_record_media (insn_decode_record *arm_insn_r)
10566 {
10567   uint32_t record_buf[8];
10568
10569   switch (bits (arm_insn_r->arm_insn, 22, 24))
10570     {
10571     case 0:
10572       /* Parallel addition and subtraction, signed */
10573     case 1:
10574       /* Parallel addition and subtraction, unsigned */
10575     case 2:
10576     case 3:
10577       /* Packing, unpacking, saturation and reversal */
10578       {
10579         int rd = bits (arm_insn_r->arm_insn, 12, 15);
10580
10581         record_buf[arm_insn_r->reg_rec_count++] = rd;
10582       }
10583       break;
10584
10585     case 4:
10586     case 5:
10587       /* Signed multiplies */
10588       {
10589         int rd = bits (arm_insn_r->arm_insn, 16, 19);
10590         unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10591
10592         record_buf[arm_insn_r->reg_rec_count++] = rd;
10593         if (op1 == 0x0)
10594           record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10595         else if (op1 == 0x4)
10596           record_buf[arm_insn_r->reg_rec_count++]
10597             = bits (arm_insn_r->arm_insn, 12, 15);
10598       }
10599       break;
10600
10601     case 6:
10602       {
10603         if (bit (arm_insn_r->arm_insn, 21)
10604             && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10605           {
10606             /* SBFX */
10607             record_buf[arm_insn_r->reg_rec_count++]
10608               = bits (arm_insn_r->arm_insn, 12, 15);
10609           }
10610         else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10611                  && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10612           {
10613             /* USAD8 and USADA8 */
10614             record_buf[arm_insn_r->reg_rec_count++]
10615               = bits (arm_insn_r->arm_insn, 16, 19);
10616           }
10617       }
10618       break;
10619
10620     case 7:
10621       {
10622         if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10623             && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10624           {
10625             /* Permanently UNDEFINED */
10626             return -1;
10627           }
10628         else
10629           {
10630             /* BFC, BFI and UBFX */
10631             record_buf[arm_insn_r->reg_rec_count++]
10632               = bits (arm_insn_r->arm_insn, 12, 15);
10633           }
10634       }
10635       break;
10636
10637     default:
10638       return -1;
10639     }
10640
10641   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10642
10643   return 0;
10644 }
10645
10646 /* Handle ARM mode instructions with opcode 010.  */
10647
10648 static int
10649 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10650 {
10651   struct regcache *reg_cache = arm_insn_r->regcache;
10652
10653   uint32_t reg_base , reg_dest;
10654   uint32_t offset_12, tgt_mem_addr;
10655   uint32_t record_buf[8], record_buf_mem[8];
10656   unsigned char wback;
10657   ULONGEST u_regval;
10658
10659   /* Calculate wback.  */
10660   wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10661           || (bit (arm_insn_r->arm_insn, 21) == 1);
10662
10663   arm_insn_r->reg_rec_count = 0;
10664   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10665
10666   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10667     {
10668       /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10669          and LDRT.  */
10670
10671       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10672       record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10673
10674       /* The LDR instruction is capable of doing branching.  If MOV LR, PC
10675          preceeds a LDR instruction having R15 as reg_base, it
10676          emulates a branch and link instruction, and hence we need to save
10677          CPSR and PC as well.  */
10678       if (ARM_PC_REGNUM == reg_dest)
10679         record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10680
10681       /* If wback is true, also save the base register, which is going to be
10682          written to.  */
10683       if (wback)
10684         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10685     }
10686   else
10687     {
10688       /* STR (immediate), STRB (immediate), STRBT and STRT.  */
10689
10690       offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10691       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10692
10693       /* Handle bit U.  */
10694       if (bit (arm_insn_r->arm_insn, 23))
10695         {
10696           /* U == 1: Add the offset. */
10697           tgt_mem_addr = (uint32_t) u_regval + offset_12;
10698         }
10699       else
10700         {
10701           /* U == 0: subtract the offset. */
10702           tgt_mem_addr = (uint32_t) u_regval - offset_12;
10703         }
10704
10705       /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10706          bytes.  */
10707       if (bit (arm_insn_r->arm_insn, 22))
10708         {
10709           /* STRB and STRBT: 1 byte.  */
10710           record_buf_mem[0] = 1;
10711         }
10712       else
10713         {
10714           /* STR and STRT: 4 bytes.  */
10715           record_buf_mem[0] = 4;
10716         }
10717
10718       /* Handle bit P.  */
10719       if (bit (arm_insn_r->arm_insn, 24))
10720         record_buf_mem[1] = tgt_mem_addr;
10721       else
10722         record_buf_mem[1] = (uint32_t) u_regval;
10723
10724       arm_insn_r->mem_rec_count = 1;
10725
10726       /* If wback is true, also save the base register, which is going to be
10727          written to.  */
10728       if (wback)
10729         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10730     }
10731
10732   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10733   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10734   return 0;
10735 }
10736
10737 /* Handling opcode 011 insns.  */
10738
10739 static int
10740 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10741 {
10742   struct regcache *reg_cache = arm_insn_r->regcache;
10743
10744   uint32_t shift_imm = 0;
10745   uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10746   uint32_t offset_12 = 0, tgt_mem_addr = 0;
10747   uint32_t record_buf[8], record_buf_mem[8];
10748
10749   LONGEST s_word;
10750   ULONGEST u_regval[2];
10751
10752   if (bit (arm_insn_r->arm_insn, 4))
10753     return arm_record_media (arm_insn_r);
10754
10755   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10756   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10757
10758   /* Handle enhanced store insns and LDRD DSP insn,
10759      order begins according to addressing modes for store insns
10760      STRH insn.  */
10761
10762   /* LDR or STR?  */
10763   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10764     {
10765       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10766       /* LDR insn has a capability to do branching, if
10767          MOV LR, PC is precedded by LDR insn having Rn as R15
10768          in that case, it emulates branch and link insn, and hence we
10769          need to save CSPR and PC as well.  */
10770       if (15 != reg_dest)
10771         {
10772           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10773           arm_insn_r->reg_rec_count = 1;
10774         }
10775       else
10776         {
10777           record_buf[0] = reg_dest;
10778           record_buf[1] = ARM_PS_REGNUM;
10779           arm_insn_r->reg_rec_count = 2;
10780         }
10781     }
10782   else
10783     {
10784       if (! bits (arm_insn_r->arm_insn, 4, 11))
10785         {
10786           /* Store insn, register offset and register pre-indexed,
10787              register post-indexed.  */
10788           /* Get Rm.  */
10789           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10790           /* Get Rn.  */
10791           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10792           regcache_raw_read_unsigned (reg_cache, reg_src1
10793                                       , &u_regval[0]);
10794           regcache_raw_read_unsigned (reg_cache, reg_src2
10795                                       , &u_regval[1]);
10796           if (15 == reg_src2)
10797             {
10798               /* If R15 was used as Rn, hence current PC+8.  */
10799               /* Pre-indexed mode doesnt reach here ; illegal insn.  */
10800                 u_regval[0] = u_regval[0] + 8;
10801             }
10802           /* Calculate target store address, Rn +/- Rm, register offset.  */
10803           /* U == 1.  */
10804           if (bit (arm_insn_r->arm_insn, 23))
10805             {
10806               tgt_mem_addr = u_regval[0] + u_regval[1];
10807             }
10808           else
10809             {
10810               tgt_mem_addr = u_regval[1] - u_regval[0];
10811             }
10812
10813           switch (arm_insn_r->opcode)
10814             {
10815               /* STR.  */
10816               case 8:
10817               case 12:
10818               /* STR.  */    
10819               case 9:
10820               case 13:
10821               /* STRT.  */
10822               case 1:
10823               case 5:
10824               /* STR.  */
10825               case 0:
10826               case 4:
10827                 record_buf_mem[0] = 4;
10828               break;
10829
10830               /* STRB.  */
10831               case 10:
10832               case 14:
10833               /* STRB.  */
10834               case 11:
10835               case 15:
10836               /* STRBT.  */    
10837               case 3:
10838               case 7:
10839               /* STRB.  */
10840               case 2:
10841               case 6:
10842                 record_buf_mem[0] = 1;
10843               break;
10844
10845               default:
10846                 gdb_assert_not_reached ("no decoding pattern found");
10847               break;
10848             }
10849           record_buf_mem[1] = tgt_mem_addr;
10850           arm_insn_r->mem_rec_count = 1;
10851
10852           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10853               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10854               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10855               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10856               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10857               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10858              )
10859             {
10860               /* Rn is going to be changed in pre-indexed mode and
10861                  post-indexed mode as well.  */
10862               record_buf[0] = reg_src2;
10863               arm_insn_r->reg_rec_count = 1;
10864             }
10865         }
10866       else
10867         {
10868           /* Store insn, scaled register offset; scaled pre-indexed.  */
10869           offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10870           /* Get Rm.  */
10871           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10872           /* Get Rn.  */
10873           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10874           /* Get shift_imm.  */
10875           shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10876           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10877           regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10878           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10879           /* Offset_12 used as shift.  */
10880           switch (offset_12)
10881             {
10882               case 0:
10883                 /* Offset_12 used as index.  */
10884                 offset_12 = u_regval[0] << shift_imm;
10885               break;
10886
10887               case 1:
10888                 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10889               break;
10890
10891               case 2:
10892                 if (!shift_imm)
10893                   {
10894                     if (bit (u_regval[0], 31))
10895                       {
10896                         offset_12 = 0xFFFFFFFF;
10897                       }
10898                     else
10899                       {
10900                         offset_12 = 0;
10901                       }
10902                   }
10903                 else
10904                   {
10905                     /* This is arithmetic shift.  */
10906                     offset_12 = s_word >> shift_imm;
10907                   }
10908                 break;
10909
10910               case 3:
10911                 if (!shift_imm)
10912                   {
10913                     regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10914                                                 &u_regval[1]);
10915                     /* Get C flag value and shift it by 31.  */
10916                     offset_12 = (((bit (u_regval[1], 29)) << 31) \
10917                                   | (u_regval[0]) >> 1);
10918                   }
10919                 else
10920                   {
10921                     offset_12 = (u_regval[0] >> shift_imm) \
10922                                 | (u_regval[0] <<
10923                                 (sizeof(uint32_t) - shift_imm));
10924                   }
10925               break;
10926
10927               default:
10928                 gdb_assert_not_reached ("no decoding pattern found");
10929               break;
10930             }
10931
10932           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10933           /* bit U set.  */
10934           if (bit (arm_insn_r->arm_insn, 23))
10935             {
10936               tgt_mem_addr = u_regval[1] + offset_12;
10937             }
10938           else
10939             {
10940               tgt_mem_addr = u_regval[1] - offset_12;
10941             }
10942
10943           switch (arm_insn_r->opcode)
10944             {
10945               /* STR.  */
10946               case 8:
10947               case 12:
10948               /* STR.  */    
10949               case 9:
10950               case 13:
10951               /* STRT.  */
10952               case 1:
10953               case 5:
10954               /* STR.  */
10955               case 0:
10956               case 4:
10957                 record_buf_mem[0] = 4;
10958               break;
10959
10960               /* STRB.  */
10961               case 10:
10962               case 14:
10963               /* STRB.  */
10964               case 11:
10965               case 15:
10966               /* STRBT.  */    
10967               case 3:
10968               case 7:
10969               /* STRB.  */
10970               case 2:
10971               case 6:
10972                 record_buf_mem[0] = 1;
10973               break;
10974
10975               default:
10976                 gdb_assert_not_reached ("no decoding pattern found");
10977               break;
10978             }
10979           record_buf_mem[1] = tgt_mem_addr;
10980           arm_insn_r->mem_rec_count = 1;
10981
10982           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10983               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10984               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10985               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10986               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10987               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10988              )
10989             {
10990               /* Rn is going to be changed in register scaled pre-indexed
10991                  mode,and scaled post indexed mode.  */
10992               record_buf[0] = reg_src2;
10993               arm_insn_r->reg_rec_count = 1;
10994             }
10995         }
10996     }
10997
10998   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10999   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11000   return 0;
11001 }
11002
11003 /* Handle ARM mode instructions with opcode 100.  */
11004
11005 static int
11006 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
11007 {
11008   struct regcache *reg_cache = arm_insn_r->regcache;
11009   uint32_t register_count = 0, register_bits;
11010   uint32_t reg_base, addr_mode;
11011   uint32_t record_buf[24], record_buf_mem[48];
11012   uint32_t wback;
11013   ULONGEST u_regval;
11014
11015   /* Fetch the list of registers.  */
11016   register_bits = bits (arm_insn_r->arm_insn, 0, 15);
11017   arm_insn_r->reg_rec_count = 0;
11018
11019   /* Fetch the base register that contains the address we are loading data
11020      to.  */
11021   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11022
11023   /* Calculate wback.  */
11024   wback = (bit (arm_insn_r->arm_insn, 21) == 1);
11025
11026   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11027     {
11028       /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB.  */
11029
11030       /* Find out which registers are going to be loaded from memory.  */
11031       while (register_bits)
11032         {
11033           if (register_bits & 0x00000001)
11034             record_buf[arm_insn_r->reg_rec_count++] = register_count;
11035           register_bits = register_bits >> 1;
11036           register_count++;
11037         }
11038
11039   
11040       /* If wback is true, also save the base register, which is going to be
11041          written to.  */
11042       if (wback)
11043         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11044
11045       /* Save the CPSR register.  */
11046       record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11047     }
11048   else
11049     {
11050       /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA).  */
11051
11052       addr_mode = bits (arm_insn_r->arm_insn, 23, 24); 
11053
11054       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11055
11056       /* Find out how many registers are going to be stored to memory.  */
11057       while (register_bits)
11058         {
11059           if (register_bits & 0x00000001)
11060             register_count++;
11061           register_bits = register_bits >> 1;
11062         }
11063
11064       switch (addr_mode)
11065         {
11066           /* STMDA (STMED): Decrement after.  */
11067           case 0:
11068           record_buf_mem[1] = (uint32_t) u_regval
11069                               - register_count * INT_REGISTER_SIZE + 4;
11070           break;
11071           /* STM (STMIA, STMEA): Increment after.  */
11072           case 1:
11073           record_buf_mem[1] = (uint32_t) u_regval;
11074           break;
11075           /* STMDB (STMFD): Decrement before.  */
11076           case 2:
11077           record_buf_mem[1] = (uint32_t) u_regval
11078                               - register_count * INT_REGISTER_SIZE;
11079           break;
11080           /* STMIB (STMFA): Increment before.  */
11081           case 3:
11082           record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11083           break;
11084           default:
11085             gdb_assert_not_reached ("no decoding pattern found");
11086           break;
11087         }
11088
11089       record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11090       arm_insn_r->mem_rec_count = 1;
11091
11092       /* If wback is true, also save the base register, which is going to be
11093          written to.  */
11094       if (wback)
11095         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11096     }
11097
11098   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11099   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11100   return 0;
11101 }
11102
11103 /* Handling opcode 101 insns.  */
11104
11105 static int
11106 arm_record_b_bl (insn_decode_record *arm_insn_r)
11107 {
11108   uint32_t record_buf[8];
11109
11110   /* Handle B, BL, BLX(1) insns.  */
11111   /* B simply branches so we do nothing here.  */
11112   /* Note: BLX(1) doesnt fall here but instead it falls into
11113      extension space.  */
11114   if (bit (arm_insn_r->arm_insn, 24))
11115   {
11116     record_buf[0] = ARM_LR_REGNUM;
11117     arm_insn_r->reg_rec_count = 1;
11118   }
11119
11120   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11121
11122   return 0;
11123 }
11124
11125 static int
11126 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11127 {
11128   printf_unfiltered (_("Process record does not support instruction "
11129                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11130                      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11131
11132   return -1;
11133 }
11134
11135 /* Record handler for vector data transfer instructions.  */
11136
11137 static int
11138 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11139 {
11140   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11141   uint32_t record_buf[4];
11142
11143   reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11144   reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11145   bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11146   bit_l = bit (arm_insn_r->arm_insn, 20);
11147   bit_c = bit (arm_insn_r->arm_insn, 8);
11148
11149   /* Handle VMOV instruction.  */
11150   if (bit_l && bit_c)
11151     {
11152       record_buf[0] = reg_t;
11153       arm_insn_r->reg_rec_count = 1;
11154     }
11155   else if (bit_l && !bit_c)
11156     {
11157       /* Handle VMOV instruction.  */
11158       if (bits_a == 0x00)
11159         {
11160           record_buf[0] = reg_t;
11161           arm_insn_r->reg_rec_count = 1;
11162         }
11163       /* Handle VMRS instruction.  */
11164       else if (bits_a == 0x07)
11165         {
11166           if (reg_t == 15)
11167             reg_t = ARM_PS_REGNUM;
11168
11169           record_buf[0] = reg_t;
11170           arm_insn_r->reg_rec_count = 1;
11171         }
11172     }
11173   else if (!bit_l && !bit_c)
11174     {
11175       /* Handle VMOV instruction.  */
11176       if (bits_a == 0x00)
11177         {
11178           record_buf[0] = ARM_D0_REGNUM + reg_v;
11179
11180           arm_insn_r->reg_rec_count = 1;
11181         }
11182       /* Handle VMSR instruction.  */
11183       else if (bits_a == 0x07)
11184         {
11185           record_buf[0] = ARM_FPSCR_REGNUM;
11186           arm_insn_r->reg_rec_count = 1;
11187         }
11188     }
11189   else if (!bit_l && bit_c)
11190     {
11191       /* Handle VMOV instruction.  */
11192       if (!(bits_a & 0x04))
11193         {
11194           record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11195                           + ARM_D0_REGNUM;
11196           arm_insn_r->reg_rec_count = 1;
11197         }
11198       /* Handle VDUP instruction.  */
11199       else
11200         {
11201           if (bit (arm_insn_r->arm_insn, 21))
11202             {
11203               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11204               record_buf[0] = reg_v + ARM_D0_REGNUM;
11205               record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11206               arm_insn_r->reg_rec_count = 2;
11207             }
11208           else
11209             {
11210               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11211               record_buf[0] = reg_v + ARM_D0_REGNUM;
11212               arm_insn_r->reg_rec_count = 1;
11213             }
11214         }
11215     }
11216
11217   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11218   return 0;
11219 }
11220
11221 /* Record handler for extension register load/store instructions.  */
11222
11223 static int
11224 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11225 {
11226   uint32_t opcode, single_reg;
11227   uint8_t op_vldm_vstm;
11228   uint32_t record_buf[8], record_buf_mem[128];
11229   ULONGEST u_regval = 0;
11230
11231   struct regcache *reg_cache = arm_insn_r->regcache;
11232
11233   opcode = bits (arm_insn_r->arm_insn, 20, 24);
11234   single_reg = !bit (arm_insn_r->arm_insn, 8);
11235   op_vldm_vstm = opcode & 0x1b;
11236
11237   /* Handle VMOV instructions.  */
11238   if ((opcode & 0x1e) == 0x04)
11239     {
11240       if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11241         {
11242           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11243           record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11244           arm_insn_r->reg_rec_count = 2;
11245         }
11246       else
11247         {
11248           uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11249           uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11250
11251           if (single_reg)
11252             {
11253               /* The first S register number m is REG_M:M (M is bit 5),
11254                  the corresponding D register number is REG_M:M / 2, which
11255                  is REG_M.  */
11256               record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11257               /* The second S register number is REG_M:M + 1, the
11258                  corresponding D register number is (REG_M:M + 1) / 2.
11259                  IOW, if bit M is 1, the first and second S registers
11260                  are mapped to different D registers, otherwise, they are
11261                  in the same D register.  */
11262               if (bit_m)
11263                 {
11264                   record_buf[arm_insn_r->reg_rec_count++]
11265                     = ARM_D0_REGNUM + reg_m + 1;
11266                 }
11267             }
11268           else
11269             {
11270               record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11271               arm_insn_r->reg_rec_count = 1;
11272             }
11273         }
11274     }
11275   /* Handle VSTM and VPUSH instructions.  */
11276   else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11277            || op_vldm_vstm == 0x12)
11278     {
11279       uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11280       uint32_t memory_index = 0;
11281
11282       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11283       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11284       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11285       imm_off32 = imm_off8 << 2;
11286       memory_count = imm_off8;
11287
11288       if (bit (arm_insn_r->arm_insn, 23))
11289         start_address = u_regval;
11290       else
11291         start_address = u_regval - imm_off32;
11292
11293       if (bit (arm_insn_r->arm_insn, 21))
11294         {
11295           record_buf[0] = reg_rn;
11296           arm_insn_r->reg_rec_count = 1;
11297         }
11298
11299       while (memory_count > 0)
11300         {
11301           if (single_reg)
11302             {
11303               record_buf_mem[memory_index] = 4;
11304               record_buf_mem[memory_index + 1] = start_address;
11305               start_address = start_address + 4;
11306               memory_index = memory_index + 2;
11307             }
11308           else
11309             {
11310               record_buf_mem[memory_index] = 4;
11311               record_buf_mem[memory_index + 1] = start_address;
11312               record_buf_mem[memory_index + 2] = 4;
11313               record_buf_mem[memory_index + 3] = start_address + 4;
11314               start_address = start_address + 8;
11315               memory_index = memory_index + 4;
11316             }
11317           memory_count--;
11318         }
11319       arm_insn_r->mem_rec_count = (memory_index >> 1);
11320     }
11321   /* Handle VLDM instructions.  */
11322   else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11323            || op_vldm_vstm == 0x13)
11324     {
11325       uint32_t reg_count, reg_vd;
11326       uint32_t reg_index = 0;
11327       uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11328
11329       reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11330       reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11331
11332       /* REG_VD is the first D register number.  If the instruction
11333          loads memory to S registers (SINGLE_REG is TRUE), the register
11334          number is (REG_VD << 1 | bit D), so the corresponding D
11335          register number is (REG_VD << 1 | bit D) / 2 = REG_VD.  */
11336       if (!single_reg)
11337         reg_vd = reg_vd | (bit_d << 4);
11338
11339       if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11340         record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11341
11342       /* If the instruction loads memory to D register, REG_COUNT should
11343          be divided by 2, according to the ARM Architecture Reference
11344          Manual.  If the instruction loads memory to S register, divide by
11345          2 as well because two S registers are mapped to D register.  */
11346       reg_count  = reg_count / 2;
11347       if (single_reg && bit_d)
11348         {
11349           /* Increase the register count if S register list starts from
11350              an odd number (bit d is one).  */
11351           reg_count++;
11352         }
11353
11354       while (reg_count > 0)
11355         {
11356           record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11357           reg_count--;
11358         }
11359       arm_insn_r->reg_rec_count = reg_index;
11360     }
11361   /* VSTR Vector store register.  */
11362   else if ((opcode & 0x13) == 0x10)
11363     {
11364       uint32_t start_address, reg_rn, imm_off32, imm_off8;
11365       uint32_t memory_index = 0;
11366
11367       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11368       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11369       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11370       imm_off32 = imm_off8 << 2;
11371
11372       if (bit (arm_insn_r->arm_insn, 23))
11373         start_address = u_regval + imm_off32;
11374       else
11375         start_address = u_regval - imm_off32;
11376
11377       if (single_reg)
11378         {
11379           record_buf_mem[memory_index] = 4;
11380           record_buf_mem[memory_index + 1] = start_address;
11381           arm_insn_r->mem_rec_count = 1;
11382         }
11383       else
11384         {
11385           record_buf_mem[memory_index] = 4;
11386           record_buf_mem[memory_index + 1] = start_address;
11387           record_buf_mem[memory_index + 2] = 4;
11388           record_buf_mem[memory_index + 3] = start_address + 4;
11389           arm_insn_r->mem_rec_count = 2;
11390         }
11391     }
11392   /* VLDR Vector load register.  */
11393   else if ((opcode & 0x13) == 0x11)
11394     {
11395       uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11396
11397       if (!single_reg)
11398         {
11399           reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11400           record_buf[0] = ARM_D0_REGNUM + reg_vd;
11401         }
11402       else
11403         {
11404           reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11405           /* Record register D rather than pseudo register S.  */
11406           record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11407         }
11408       arm_insn_r->reg_rec_count = 1;
11409     }
11410
11411   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11412   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11413   return 0;
11414 }
11415
11416 /* Record handler for arm/thumb mode VFP data processing instructions.  */
11417
11418 static int
11419 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11420 {
11421   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11422   uint32_t record_buf[4];
11423   enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11424   enum insn_types curr_insn_type = INSN_INV;
11425
11426   reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11427   opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11428   opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11429   opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11430   dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11431   bit_d = bit (arm_insn_r->arm_insn, 22);
11432   opc1 = opc1 & 0x04;
11433
11434   /* Handle VMLA, VMLS.  */
11435   if (opc1 == 0x00)
11436     {
11437       if (bit (arm_insn_r->arm_insn, 10))
11438         {
11439           if (bit (arm_insn_r->arm_insn, 6))
11440             curr_insn_type = INSN_T0;
11441           else
11442             curr_insn_type = INSN_T1;
11443         }
11444       else
11445         {
11446           if (dp_op_sz)
11447             curr_insn_type = INSN_T1;
11448           else
11449             curr_insn_type = INSN_T2;
11450         }
11451     }
11452   /* Handle VNMLA, VNMLS, VNMUL.  */
11453   else if (opc1 == 0x01)
11454     {
11455       if (dp_op_sz)
11456         curr_insn_type = INSN_T1;
11457       else
11458         curr_insn_type = INSN_T2;
11459     }
11460   /* Handle VMUL.  */
11461   else if (opc1 == 0x02 && !(opc3 & 0x01))
11462     {
11463       if (bit (arm_insn_r->arm_insn, 10))
11464         {
11465           if (bit (arm_insn_r->arm_insn, 6))
11466             curr_insn_type = INSN_T0;
11467           else
11468             curr_insn_type = INSN_T1;
11469         }
11470       else
11471         {
11472           if (dp_op_sz)
11473             curr_insn_type = INSN_T1;
11474           else
11475             curr_insn_type = INSN_T2;
11476         }
11477     }
11478   /* Handle VADD, VSUB.  */
11479   else if (opc1 == 0x03)
11480     {
11481       if (!bit (arm_insn_r->arm_insn, 9))
11482         {
11483           if (bit (arm_insn_r->arm_insn, 6))
11484             curr_insn_type = INSN_T0;
11485           else
11486             curr_insn_type = INSN_T1;
11487         }
11488       else
11489         {
11490           if (dp_op_sz)
11491             curr_insn_type = INSN_T1;
11492           else
11493             curr_insn_type = INSN_T2;
11494         }
11495     }
11496   /* Handle VDIV.  */
11497   else if (opc1 == 0x0b)
11498     {
11499       if (dp_op_sz)
11500         curr_insn_type = INSN_T1;
11501       else
11502         curr_insn_type = INSN_T2;
11503     }
11504   /* Handle all other vfp data processing instructions.  */
11505   else if (opc1 == 0x0b)
11506     {
11507       /* Handle VMOV.  */
11508       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11509         {
11510           if (bit (arm_insn_r->arm_insn, 4))
11511             {
11512               if (bit (arm_insn_r->arm_insn, 6))
11513                 curr_insn_type = INSN_T0;
11514               else
11515                 curr_insn_type = INSN_T1;
11516             }
11517           else
11518             {
11519               if (dp_op_sz)
11520                 curr_insn_type = INSN_T1;
11521               else
11522                 curr_insn_type = INSN_T2;
11523             }
11524         }
11525       /* Handle VNEG and VABS.  */
11526       else if ((opc2 == 0x01 && opc3 == 0x01)
11527               || (opc2 == 0x00 && opc3 == 0x03))
11528         {
11529           if (!bit (arm_insn_r->arm_insn, 11))
11530             {
11531               if (bit (arm_insn_r->arm_insn, 6))
11532                 curr_insn_type = INSN_T0;
11533               else
11534                 curr_insn_type = INSN_T1;
11535             }
11536           else
11537             {
11538               if (dp_op_sz)
11539                 curr_insn_type = INSN_T1;
11540               else
11541                 curr_insn_type = INSN_T2;
11542             }
11543         }
11544       /* Handle VSQRT.  */
11545       else if (opc2 == 0x01 && opc3 == 0x03)
11546         {
11547           if (dp_op_sz)
11548             curr_insn_type = INSN_T1;
11549           else
11550             curr_insn_type = INSN_T2;
11551         }
11552       /* Handle VCVT.  */
11553       else if (opc2 == 0x07 && opc3 == 0x03)
11554         {
11555           if (!dp_op_sz)
11556             curr_insn_type = INSN_T1;
11557           else
11558             curr_insn_type = INSN_T2;
11559         }
11560       else if (opc3 & 0x01)
11561         {
11562           /* Handle VCVT.  */
11563           if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11564             {
11565               if (!bit (arm_insn_r->arm_insn, 18))
11566                 curr_insn_type = INSN_T2;
11567               else
11568                 {
11569                   if (dp_op_sz)
11570                     curr_insn_type = INSN_T1;
11571                   else
11572                     curr_insn_type = INSN_T2;
11573                 }
11574             }
11575           /* Handle VCVT.  */
11576           else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11577             {
11578               if (dp_op_sz)
11579                 curr_insn_type = INSN_T1;
11580               else
11581                 curr_insn_type = INSN_T2;
11582             }
11583           /* Handle VCVTB, VCVTT.  */
11584           else if ((opc2 & 0x0e) == 0x02)
11585             curr_insn_type = INSN_T2;
11586           /* Handle VCMP, VCMPE.  */
11587           else if ((opc2 & 0x0e) == 0x04)
11588             curr_insn_type = INSN_T3;
11589         }
11590     }
11591
11592   switch (curr_insn_type)
11593     {
11594       case INSN_T0:
11595         reg_vd = reg_vd | (bit_d << 4);
11596         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11597         record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11598         arm_insn_r->reg_rec_count = 2;
11599         break;
11600
11601       case INSN_T1:
11602         reg_vd = reg_vd | (bit_d << 4);
11603         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11604         arm_insn_r->reg_rec_count = 1;
11605         break;
11606
11607       case INSN_T2:
11608         reg_vd = (reg_vd << 1) | bit_d;
11609         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11610         arm_insn_r->reg_rec_count = 1;
11611         break;
11612
11613       case INSN_T3:
11614         record_buf[0] = ARM_FPSCR_REGNUM;
11615         arm_insn_r->reg_rec_count = 1;
11616         break;
11617
11618       default:
11619         gdb_assert_not_reached ("no decoding pattern found");
11620         break;
11621     }
11622
11623   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11624   return 0;
11625 }
11626
11627 /* Handling opcode 110 insns.  */
11628
11629 static int
11630 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11631 {
11632   uint32_t op1, op1_ebit, coproc;
11633
11634   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11635   op1 = bits (arm_insn_r->arm_insn, 20, 25);
11636   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11637
11638   if ((coproc & 0x0e) == 0x0a)
11639     {
11640       /* Handle extension register ld/st instructions.  */
11641       if (!(op1 & 0x20))
11642         return arm_record_exreg_ld_st_insn (arm_insn_r);
11643
11644       /* 64-bit transfers between arm core and extension registers.  */
11645       if ((op1 & 0x3e) == 0x04)
11646         return arm_record_exreg_ld_st_insn (arm_insn_r);
11647     }
11648   else
11649     {
11650       /* Handle coprocessor ld/st instructions.  */
11651       if (!(op1 & 0x3a))
11652         {
11653           /* Store.  */
11654           if (!op1_ebit)
11655             return arm_record_unsupported_insn (arm_insn_r);
11656           else
11657             /* Load.  */
11658             return arm_record_unsupported_insn (arm_insn_r);
11659         }
11660
11661       /* Move to coprocessor from two arm core registers.  */
11662       if (op1 == 0x4)
11663         return arm_record_unsupported_insn (arm_insn_r);
11664
11665       /* Move to two arm core registers from coprocessor.  */
11666       if (op1 == 0x5)
11667         {
11668           uint32_t reg_t[2];
11669
11670           reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11671           reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11672           arm_insn_r->reg_rec_count = 2;
11673
11674           REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11675           return 0;
11676        }
11677     }
11678   return arm_record_unsupported_insn (arm_insn_r);
11679 }
11680
11681 /* Handling opcode 111 insns.  */
11682
11683 static int
11684 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11685 {
11686   uint32_t op, op1_ebit, coproc, bits_24_25;
11687   struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11688   struct regcache *reg_cache = arm_insn_r->regcache;
11689
11690   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11691   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11692   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11693   op = bit (arm_insn_r->arm_insn, 4);
11694   bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11695
11696   /* Handle arm SWI/SVC system call instructions.  */
11697   if (bits_24_25 == 0x3)
11698     {
11699       if (tdep->arm_syscall_record != NULL)
11700         {
11701           ULONGEST svc_operand, svc_number;
11702
11703           svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11704
11705           if (svc_operand)  /* OABI.  */
11706             svc_number = svc_operand - 0x900000;
11707           else /* EABI.  */
11708             regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11709
11710           return tdep->arm_syscall_record (reg_cache, svc_number);
11711         }
11712       else
11713         {
11714           printf_unfiltered (_("no syscall record support\n"));
11715           return -1;
11716         }
11717     }
11718   else if (bits_24_25 == 0x02)
11719     {
11720       if (op)
11721         {
11722           if ((coproc & 0x0e) == 0x0a)
11723             {
11724               /* 8, 16, and 32-bit transfer */
11725               return arm_record_vdata_transfer_insn (arm_insn_r);
11726             }
11727           else
11728             {
11729               if (op1_ebit)
11730                 {
11731                   /* MRC, MRC2 */
11732                   uint32_t record_buf[1];
11733
11734                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11735                   if (record_buf[0] == 15)
11736                     record_buf[0] = ARM_PS_REGNUM;
11737
11738                   arm_insn_r->reg_rec_count = 1;
11739                   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11740                              record_buf);
11741                   return 0;
11742                 }
11743               else
11744                 {
11745                   /* MCR, MCR2 */
11746                   return -1;
11747                 }
11748             }
11749         }
11750       else
11751         {
11752           if ((coproc & 0x0e) == 0x0a)
11753             {
11754               /* VFP data-processing instructions.  */
11755               return arm_record_vfp_data_proc_insn (arm_insn_r);
11756             }
11757           else
11758             {
11759               /* CDP, CDP2 */
11760               return -1;
11761             }
11762         }
11763     }
11764   else
11765     {
11766       unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11767
11768       if (op1 == 5)
11769         {
11770           if ((coproc & 0x0e) != 0x0a)
11771             {
11772               /* MRRC, MRRC2 */
11773               return -1;
11774             }
11775         }
11776       else if (op1 == 4 || op1 == 5)
11777         {
11778           if ((coproc & 0x0e) == 0x0a)
11779             {
11780               /* 64-bit transfers between ARM core and extension */
11781               return -1;
11782             }
11783           else if (op1 == 4)
11784             {
11785               /* MCRR, MCRR2 */
11786               return -1;
11787             }
11788         }
11789       else if (op1 == 0 || op1 == 1)
11790         {
11791           /* UNDEFINED */
11792           return -1;
11793         }
11794       else
11795         {
11796           if ((coproc & 0x0e) == 0x0a)
11797             {
11798               /* Extension register load/store */
11799             }
11800           else
11801             {
11802               /* STC, STC2, LDC, LDC2 */
11803             }
11804           return -1;
11805         }
11806     }
11807
11808   return -1;
11809 }
11810
11811 /* Handling opcode 000 insns.  */
11812
11813 static int
11814 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11815 {
11816   uint32_t record_buf[8];
11817   uint32_t reg_src1 = 0;
11818
11819   reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11820
11821   record_buf[0] = ARM_PS_REGNUM;
11822   record_buf[1] = reg_src1;
11823   thumb_insn_r->reg_rec_count = 2;
11824
11825   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11826
11827   return 0;
11828 }
11829
11830
11831 /* Handling opcode 001 insns.  */
11832
11833 static int
11834 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11835 {
11836   uint32_t record_buf[8];
11837   uint32_t reg_src1 = 0;
11838
11839   reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11840
11841   record_buf[0] = ARM_PS_REGNUM;
11842   record_buf[1] = reg_src1;
11843   thumb_insn_r->reg_rec_count = 2;
11844
11845   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11846
11847   return 0;
11848 }
11849
11850 /* Handling opcode 010 insns.  */
11851
11852 static int
11853 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11854 {
11855   struct regcache *reg_cache =  thumb_insn_r->regcache;
11856   uint32_t record_buf[8], record_buf_mem[8];
11857
11858   uint32_t reg_src1 = 0, reg_src2 = 0;
11859   uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11860
11861   ULONGEST u_regval[2] = {0};
11862
11863   opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11864
11865   if (bit (thumb_insn_r->arm_insn, 12))
11866     {
11867       /* Handle load/store register offset.  */
11868       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11869
11870       if (in_inclusive_range (opB, 4U, 7U))
11871         {
11872           /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
11873           reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11874           record_buf[0] = reg_src1;
11875           thumb_insn_r->reg_rec_count = 1;
11876         }
11877       else if (in_inclusive_range (opB, 0U, 2U))
11878         {
11879           /* STR(2), STRB(2), STRH(2) .  */
11880           reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11881           reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11882           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11883           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11884           if (0 == opB)
11885             record_buf_mem[0] = 4;    /* STR (2).  */
11886           else if (2 == opB)
11887             record_buf_mem[0] = 1;    /*  STRB (2).  */
11888           else if (1 == opB)
11889             record_buf_mem[0] = 2;    /* STRH (2).  */
11890           record_buf_mem[1] = u_regval[0] + u_regval[1];
11891           thumb_insn_r->mem_rec_count = 1;
11892         }
11893     }
11894   else if (bit (thumb_insn_r->arm_insn, 11))
11895     {
11896       /* Handle load from literal pool.  */
11897       /* LDR(3).  */
11898       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11899       record_buf[0] = reg_src1;
11900       thumb_insn_r->reg_rec_count = 1;
11901     }
11902   else if (opcode1)
11903     {
11904       /* Special data instructions and branch and exchange */
11905       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11906       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11907       if ((3 == opcode2) && (!opcode3))
11908         {
11909           /* Branch with exchange.  */
11910           record_buf[0] = ARM_PS_REGNUM;
11911           thumb_insn_r->reg_rec_count = 1;
11912         }
11913       else
11914         {
11915           /* Format 8; special data processing insns.  */
11916           record_buf[0] = ARM_PS_REGNUM;
11917           record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11918                            | bits (thumb_insn_r->arm_insn, 0, 2));
11919           thumb_insn_r->reg_rec_count = 2;
11920         }
11921     }
11922   else
11923     {
11924       /* Format 5; data processing insns.  */
11925       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11926       if (bit (thumb_insn_r->arm_insn, 7))
11927         {
11928           reg_src1 = reg_src1 + 8;
11929         }
11930       record_buf[0] = ARM_PS_REGNUM;
11931       record_buf[1] = reg_src1;
11932       thumb_insn_r->reg_rec_count = 2;
11933     }
11934
11935   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11936   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11937              record_buf_mem);
11938
11939   return 0;
11940 }
11941
11942 /* Handling opcode 001 insns.  */
11943
11944 static int
11945 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11946 {
11947   struct regcache *reg_cache = thumb_insn_r->regcache;
11948   uint32_t record_buf[8], record_buf_mem[8];
11949
11950   uint32_t reg_src1 = 0;
11951   uint32_t opcode = 0, immed_5 = 0;
11952
11953   ULONGEST u_regval = 0;
11954
11955   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11956
11957   if (opcode)
11958     {
11959       /* LDR(1).  */
11960       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11961       record_buf[0] = reg_src1;
11962       thumb_insn_r->reg_rec_count = 1;
11963     }
11964   else
11965     {
11966       /* STR(1).  */
11967       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11968       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11969       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11970       record_buf_mem[0] = 4;
11971       record_buf_mem[1] = u_regval + (immed_5 * 4);
11972       thumb_insn_r->mem_rec_count = 1;
11973     }
11974
11975   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11976   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
11977              record_buf_mem);
11978
11979   return 0;
11980 }
11981
11982 /* Handling opcode 100 insns.  */
11983
11984 static int
11985 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11986 {
11987   struct regcache *reg_cache = thumb_insn_r->regcache;
11988   uint32_t record_buf[8], record_buf_mem[8];
11989
11990   uint32_t reg_src1 = 0;
11991   uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11992
11993   ULONGEST u_regval = 0;
11994
11995   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11996
11997   if (3 == opcode)
11998     {
11999       /* LDR(4).  */
12000       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12001       record_buf[0] = reg_src1;
12002       thumb_insn_r->reg_rec_count = 1;
12003     }
12004   else if (1 == opcode)
12005     {
12006       /* LDRH(1).  */
12007       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12008       record_buf[0] = reg_src1;
12009       thumb_insn_r->reg_rec_count = 1;
12010     }
12011   else if (2 == opcode)
12012     {
12013       /* STR(3).  */
12014       immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
12015       regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12016       record_buf_mem[0] = 4;
12017       record_buf_mem[1] = u_regval + (immed_8 * 4);
12018       thumb_insn_r->mem_rec_count = 1;
12019     }
12020   else if (0 == opcode)
12021     {
12022       /* STRH(1).  */
12023       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12024       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12025       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12026       record_buf_mem[0] = 2;
12027       record_buf_mem[1] = u_regval + (immed_5 * 2);
12028       thumb_insn_r->mem_rec_count = 1;
12029     }
12030
12031   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12032   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12033              record_buf_mem);
12034
12035   return 0;
12036 }
12037
12038 /* Handling opcode 101 insns.  */
12039
12040 static int
12041 thumb_record_misc (insn_decode_record *thumb_insn_r)
12042 {
12043   struct regcache *reg_cache = thumb_insn_r->regcache;
12044
12045   uint32_t opcode = 0;
12046   uint32_t register_bits = 0, register_count = 0;
12047   uint32_t index = 0, start_address = 0;
12048   uint32_t record_buf[24], record_buf_mem[48];
12049   uint32_t reg_src1;
12050
12051   ULONGEST u_regval = 0;
12052
12053   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12054
12055   if (opcode == 0 || opcode == 1)
12056     {
12057       /* ADR and ADD (SP plus immediate) */
12058
12059       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12060       record_buf[0] = reg_src1;
12061       thumb_insn_r->reg_rec_count = 1;
12062     }
12063   else
12064     {
12065       /* Miscellaneous 16-bit instructions */
12066       uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
12067
12068       switch (opcode2)
12069         {
12070         case 6:
12071           /* SETEND and CPS */
12072           break;
12073         case 0:
12074           /* ADD/SUB (SP plus immediate)  */
12075           reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12076           record_buf[0] = ARM_SP_REGNUM;
12077           thumb_insn_r->reg_rec_count = 1;
12078           break;
12079         case 1: /* fall through  */
12080         case 3: /* fall through  */
12081         case 9: /* fall through  */
12082         case 11:
12083           /* CBNZ, CBZ */
12084           break;
12085         case 2:
12086           /* SXTH, SXTB, UXTH, UXTB */
12087           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12088           thumb_insn_r->reg_rec_count = 1;
12089           break;
12090         case 4: /* fall through  */
12091         case 5:
12092           /* PUSH.  */
12093           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12094           regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12095           while (register_bits)
12096             {
12097               if (register_bits & 0x00000001)
12098                 register_count++;
12099               register_bits = register_bits >> 1;
12100             }
12101           start_address = u_regval -  \
12102             (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12103           thumb_insn_r->mem_rec_count = register_count;
12104           while (register_count)
12105             {
12106               record_buf_mem[(register_count * 2) - 1] = start_address;
12107               record_buf_mem[(register_count * 2) - 2] = 4;
12108               start_address = start_address + 4;
12109               register_count--;
12110             }
12111           record_buf[0] = ARM_SP_REGNUM;
12112           thumb_insn_r->reg_rec_count = 1;
12113           break;
12114         case 10:
12115           /* REV, REV16, REVSH */
12116           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12117           thumb_insn_r->reg_rec_count = 1;
12118           break;
12119         case 12: /* fall through  */
12120         case 13:
12121           /* POP.  */
12122           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12123           while (register_bits)
12124             {
12125               if (register_bits & 0x00000001)
12126                 record_buf[index++] = register_count;
12127               register_bits = register_bits >> 1;
12128               register_count++;
12129             }
12130           record_buf[index++] = ARM_PS_REGNUM;
12131           record_buf[index++] = ARM_SP_REGNUM;
12132           thumb_insn_r->reg_rec_count = index;
12133           break;
12134         case 0xe:
12135           /* BKPT insn.  */
12136           /* Handle enhanced software breakpoint insn, BKPT.  */
12137           /* CPSR is changed to be executed in ARM state,  disabling normal
12138              interrupts, entering abort mode.  */
12139           /* According to high vector configuration PC is set.  */
12140           /* User hits breakpoint and type reverse, in that case, we need to go back with 
12141              previous CPSR and Program Counter.  */
12142           record_buf[0] = ARM_PS_REGNUM;
12143           record_buf[1] = ARM_LR_REGNUM;
12144           thumb_insn_r->reg_rec_count = 2;
12145           /* We need to save SPSR value, which is not yet done.  */
12146           printf_unfiltered (_("Process record does not support instruction "
12147                                "0x%0x at address %s.\n"),
12148                              thumb_insn_r->arm_insn,
12149                              paddress (thumb_insn_r->gdbarch,
12150                                        thumb_insn_r->this_addr));
12151           return -1;
12152
12153         case 0xf:
12154           /* If-Then, and hints */
12155           break;
12156         default:
12157           return -1;
12158         };
12159     }
12160
12161   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12162   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12163              record_buf_mem);
12164
12165   return 0;
12166 }
12167
12168 /* Handling opcode 110 insns.  */
12169
12170 static int
12171 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
12172 {
12173   struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12174   struct regcache *reg_cache = thumb_insn_r->regcache;
12175
12176   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
12177   uint32_t reg_src1 = 0;
12178   uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12179   uint32_t index = 0, start_address = 0;
12180   uint32_t record_buf[24], record_buf_mem[48];
12181
12182   ULONGEST u_regval = 0;
12183
12184   opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12185   opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12186
12187   if (1 == opcode2)
12188     {
12189
12190       /* LDMIA.  */
12191       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12192       /* Get Rn.  */
12193       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12194       while (register_bits)
12195         {
12196           if (register_bits & 0x00000001)
12197             record_buf[index++] = register_count;
12198           register_bits = register_bits >> 1;
12199           register_count++;
12200         }
12201       record_buf[index++] = reg_src1;
12202       thumb_insn_r->reg_rec_count = index;
12203     }
12204   else if (0 == opcode2)
12205     {
12206       /* It handles both STMIA.  */
12207       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12208       /* Get Rn.  */
12209       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12210       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12211       while (register_bits)
12212         {
12213           if (register_bits & 0x00000001)
12214             register_count++;
12215           register_bits = register_bits >> 1;
12216         }
12217       start_address = u_regval;
12218       thumb_insn_r->mem_rec_count = register_count;
12219       while (register_count)
12220         {
12221           record_buf_mem[(register_count * 2) - 1] = start_address;
12222           record_buf_mem[(register_count * 2) - 2] = 4;
12223           start_address = start_address + 4;
12224           register_count--;
12225         }
12226     }
12227   else if (0x1F == opcode1)
12228     {
12229         /* Handle arm syscall insn.  */
12230         if (tdep->arm_syscall_record != NULL)
12231           {
12232             regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12233             ret = tdep->arm_syscall_record (reg_cache, u_regval);
12234           }
12235         else
12236           {
12237             printf_unfiltered (_("no syscall record support\n"));
12238             return -1;
12239           }
12240     }
12241
12242   /* B (1), conditional branch is automatically taken care in process_record,
12243     as PC is saved there.  */
12244
12245   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12246   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12247              record_buf_mem);
12248
12249   return ret;
12250 }
12251
12252 /* Handling opcode 111 insns.  */
12253
12254 static int
12255 thumb_record_branch (insn_decode_record *thumb_insn_r)
12256 {
12257   uint32_t record_buf[8];
12258   uint32_t bits_h = 0;
12259
12260   bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12261
12262   if (2 == bits_h || 3 == bits_h)
12263     {
12264       /* BL */
12265       record_buf[0] = ARM_LR_REGNUM;
12266       thumb_insn_r->reg_rec_count = 1;
12267     }
12268   else if (1 == bits_h)
12269     {
12270       /* BLX(1). */
12271       record_buf[0] = ARM_PS_REGNUM;
12272       record_buf[1] = ARM_LR_REGNUM;
12273       thumb_insn_r->reg_rec_count = 2;
12274     }
12275
12276   /* B(2) is automatically taken care in process_record, as PC is 
12277      saved there.  */
12278
12279   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12280
12281   return 0;     
12282 }
12283
12284 /* Handler for thumb2 load/store multiple instructions.  */
12285
12286 static int
12287 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12288 {
12289   struct regcache *reg_cache = thumb2_insn_r->regcache;
12290
12291   uint32_t reg_rn, op;
12292   uint32_t register_bits = 0, register_count = 0;
12293   uint32_t index = 0, start_address = 0;
12294   uint32_t record_buf[24], record_buf_mem[48];
12295
12296   ULONGEST u_regval = 0;
12297
12298   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12299   op = bits (thumb2_insn_r->arm_insn, 23, 24);
12300
12301   if (0 == op || 3 == op)
12302     {
12303       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12304         {
12305           /* Handle RFE instruction.  */
12306           record_buf[0] = ARM_PS_REGNUM;
12307           thumb2_insn_r->reg_rec_count = 1;
12308         }
12309       else
12310         {
12311           /* Handle SRS instruction after reading banked SP.  */
12312           return arm_record_unsupported_insn (thumb2_insn_r);
12313         }
12314     }
12315   else if (1 == op || 2 == op)
12316     {
12317       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12318         {
12319           /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
12320           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12321           while (register_bits)
12322             {
12323               if (register_bits & 0x00000001)
12324                 record_buf[index++] = register_count;
12325
12326               register_count++;
12327               register_bits = register_bits >> 1;
12328             }
12329           record_buf[index++] = reg_rn;
12330           record_buf[index++] = ARM_PS_REGNUM;
12331           thumb2_insn_r->reg_rec_count = index;
12332         }
12333       else
12334         {
12335           /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
12336           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12337           regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12338           while (register_bits)
12339             {
12340               if (register_bits & 0x00000001)
12341                 register_count++;
12342
12343               register_bits = register_bits >> 1;
12344             }
12345
12346           if (1 == op)
12347             {
12348               /* Start address calculation for LDMDB/LDMEA.  */
12349               start_address = u_regval;
12350             }
12351           else if (2 == op)
12352             {
12353               /* Start address calculation for LDMDB/LDMEA.  */
12354               start_address = u_regval - register_count * 4;
12355             }
12356
12357           thumb2_insn_r->mem_rec_count = register_count;
12358           while (register_count)
12359             {
12360               record_buf_mem[register_count * 2 - 1] = start_address;
12361               record_buf_mem[register_count * 2 - 2] = 4;
12362               start_address = start_address + 4;
12363               register_count--;
12364             }
12365           record_buf[0] = reg_rn;
12366           record_buf[1] = ARM_PS_REGNUM;
12367           thumb2_insn_r->reg_rec_count = 2;
12368         }
12369     }
12370
12371   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12372             record_buf_mem);
12373   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12374             record_buf);
12375   return ARM_RECORD_SUCCESS;
12376 }
12377
12378 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12379    instructions.  */
12380
12381 static int
12382 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12383 {
12384   struct regcache *reg_cache = thumb2_insn_r->regcache;
12385
12386   uint32_t reg_rd, reg_rn, offset_imm;
12387   uint32_t reg_dest1, reg_dest2;
12388   uint32_t address, offset_addr;
12389   uint32_t record_buf[8], record_buf_mem[8];
12390   uint32_t op1, op2, op3;
12391
12392   ULONGEST u_regval[2];
12393
12394   op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12395   op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12396   op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12397
12398   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12399     {
12400       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12401         {
12402           reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12403           record_buf[0] = reg_dest1;
12404           record_buf[1] = ARM_PS_REGNUM;
12405           thumb2_insn_r->reg_rec_count = 2;
12406         }
12407
12408       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12409         {
12410           reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12411           record_buf[2] = reg_dest2;
12412           thumb2_insn_r->reg_rec_count = 3;
12413         }
12414     }
12415   else
12416     {
12417       reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12418       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12419
12420       if (0 == op1 && 0 == op2)
12421         {
12422           /* Handle STREX.  */
12423           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12424           address = u_regval[0] + (offset_imm * 4);
12425           record_buf_mem[0] = 4;
12426           record_buf_mem[1] = address;
12427           thumb2_insn_r->mem_rec_count = 1;
12428           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12429           record_buf[0] = reg_rd;
12430           thumb2_insn_r->reg_rec_count = 1;
12431         }
12432       else if (1 == op1 && 0 == op2)
12433         {
12434           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12435           record_buf[0] = reg_rd;
12436           thumb2_insn_r->reg_rec_count = 1;
12437           address = u_regval[0];
12438           record_buf_mem[1] = address;
12439
12440           if (4 == op3)
12441             {
12442               /* Handle STREXB.  */
12443               record_buf_mem[0] = 1;
12444               thumb2_insn_r->mem_rec_count = 1;
12445             }
12446           else if (5 == op3)
12447             {
12448               /* Handle STREXH.  */
12449               record_buf_mem[0] = 2 ;
12450               thumb2_insn_r->mem_rec_count = 1;
12451             }
12452           else if (7 == op3)
12453             {
12454               /* Handle STREXD.  */
12455               address = u_regval[0];
12456               record_buf_mem[0] = 4;
12457               record_buf_mem[2] = 4;
12458               record_buf_mem[3] = address + 4;
12459               thumb2_insn_r->mem_rec_count = 2;
12460             }
12461         }
12462       else
12463         {
12464           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12465
12466           if (bit (thumb2_insn_r->arm_insn, 24))
12467             {
12468               if (bit (thumb2_insn_r->arm_insn, 23))
12469                 offset_addr = u_regval[0] + (offset_imm * 4);
12470               else
12471                 offset_addr = u_regval[0] - (offset_imm * 4);
12472
12473               address = offset_addr;
12474             }
12475           else
12476             address = u_regval[0];
12477
12478           record_buf_mem[0] = 4;
12479           record_buf_mem[1] = address;
12480           record_buf_mem[2] = 4;
12481           record_buf_mem[3] = address + 4;
12482           thumb2_insn_r->mem_rec_count = 2;
12483           record_buf[0] = reg_rn;
12484           thumb2_insn_r->reg_rec_count = 1;
12485         }
12486     }
12487
12488   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12489             record_buf);
12490   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12491             record_buf_mem);
12492   return ARM_RECORD_SUCCESS;
12493 }
12494
12495 /* Handler for thumb2 data processing (shift register and modified immediate)
12496    instructions.  */
12497
12498 static int
12499 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12500 {
12501   uint32_t reg_rd, op;
12502   uint32_t record_buf[8];
12503
12504   op = bits (thumb2_insn_r->arm_insn, 21, 24);
12505   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12506
12507   if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12508     {
12509       record_buf[0] = ARM_PS_REGNUM;
12510       thumb2_insn_r->reg_rec_count = 1;
12511     }
12512   else
12513     {
12514       record_buf[0] = reg_rd;
12515       record_buf[1] = ARM_PS_REGNUM;
12516       thumb2_insn_r->reg_rec_count = 2;
12517     }
12518
12519   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12520             record_buf);
12521   return ARM_RECORD_SUCCESS;
12522 }
12523
12524 /* Generic handler for thumb2 instructions which effect destination and PS
12525    registers.  */
12526
12527 static int
12528 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12529 {
12530   uint32_t reg_rd;
12531   uint32_t record_buf[8];
12532
12533   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12534
12535   record_buf[0] = reg_rd;
12536   record_buf[1] = ARM_PS_REGNUM;
12537   thumb2_insn_r->reg_rec_count = 2;
12538
12539   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12540             record_buf);
12541   return ARM_RECORD_SUCCESS;
12542 }
12543
12544 /* Handler for thumb2 branch and miscellaneous control instructions.  */
12545
12546 static int
12547 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12548 {
12549   uint32_t op, op1, op2;
12550   uint32_t record_buf[8];
12551
12552   op = bits (thumb2_insn_r->arm_insn, 20, 26);
12553   op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12554   op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12555
12556   /* Handle MSR insn.  */
12557   if (!(op1 & 0x2) && 0x38 == op)
12558     {
12559       if (!(op2 & 0x3))
12560         {
12561           /* CPSR is going to be changed.  */
12562           record_buf[0] = ARM_PS_REGNUM;
12563           thumb2_insn_r->reg_rec_count = 1;
12564         }
12565       else
12566         {
12567           arm_record_unsupported_insn(thumb2_insn_r);
12568           return -1;
12569         }
12570     }
12571   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12572     {
12573       /* BLX.  */
12574       record_buf[0] = ARM_PS_REGNUM;
12575       record_buf[1] = ARM_LR_REGNUM;
12576       thumb2_insn_r->reg_rec_count = 2;
12577     }
12578
12579   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12580             record_buf);
12581   return ARM_RECORD_SUCCESS;
12582 }
12583
12584 /* Handler for thumb2 store single data item instructions.  */
12585
12586 static int
12587 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12588 {
12589   struct regcache *reg_cache = thumb2_insn_r->regcache;
12590
12591   uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12592   uint32_t address, offset_addr;
12593   uint32_t record_buf[8], record_buf_mem[8];
12594   uint32_t op1, op2;
12595
12596   ULONGEST u_regval[2];
12597
12598   op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12599   op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12600   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12601   regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12602
12603   if (bit (thumb2_insn_r->arm_insn, 23))
12604     {
12605       /* T2 encoding.  */
12606       offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12607       offset_addr = u_regval[0] + offset_imm;
12608       address = offset_addr;
12609     }
12610   else
12611     {
12612       /* T3 encoding.  */
12613       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12614         {
12615           /* Handle STRB (register).  */
12616           reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12617           regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12618           shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12619           offset_addr = u_regval[1] << shift_imm;
12620           address = u_regval[0] + offset_addr;
12621         }
12622       else
12623         {
12624           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12625           if (bit (thumb2_insn_r->arm_insn, 10))
12626             {
12627               if (bit (thumb2_insn_r->arm_insn, 9))
12628                 offset_addr = u_regval[0] + offset_imm;
12629               else
12630                 offset_addr = u_regval[0] - offset_imm;
12631
12632               address = offset_addr;
12633             }
12634           else
12635             address = u_regval[0];
12636         }
12637     }
12638
12639   switch (op1)
12640     {
12641       /* Store byte instructions.  */
12642       case 4:
12643       case 0:
12644         record_buf_mem[0] = 1;
12645         break;
12646       /* Store half word instructions.  */
12647       case 1:
12648       case 5:
12649         record_buf_mem[0] = 2;
12650         break;
12651       /* Store word instructions.  */
12652       case 2:
12653       case 6:
12654         record_buf_mem[0] = 4;
12655         break;
12656
12657       default:
12658         gdb_assert_not_reached ("no decoding pattern found");
12659         break;
12660     }
12661
12662   record_buf_mem[1] = address;
12663   thumb2_insn_r->mem_rec_count = 1;
12664   record_buf[0] = reg_rn;
12665   thumb2_insn_r->reg_rec_count = 1;
12666
12667   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12668             record_buf);
12669   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12670             record_buf_mem);
12671   return ARM_RECORD_SUCCESS;
12672 }
12673
12674 /* Handler for thumb2 load memory hints instructions.  */
12675
12676 static int
12677 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12678 {
12679   uint32_t record_buf[8];
12680   uint32_t reg_rt, reg_rn;
12681
12682   reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12683   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12684
12685   if (ARM_PC_REGNUM != reg_rt)
12686     {
12687       record_buf[0] = reg_rt;
12688       record_buf[1] = reg_rn;
12689       record_buf[2] = ARM_PS_REGNUM;
12690       thumb2_insn_r->reg_rec_count = 3;
12691
12692       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12693                 record_buf);
12694       return ARM_RECORD_SUCCESS;
12695     }
12696
12697   return ARM_RECORD_FAILURE;
12698 }
12699
12700 /* Handler for thumb2 load word instructions.  */
12701
12702 static int
12703 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12704 {
12705   uint32_t record_buf[8];
12706
12707   record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12708   record_buf[1] = ARM_PS_REGNUM;
12709   thumb2_insn_r->reg_rec_count = 2;
12710
12711   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12712             record_buf);
12713   return ARM_RECORD_SUCCESS;
12714 }
12715
12716 /* Handler for thumb2 long multiply, long multiply accumulate, and
12717    divide instructions.  */
12718
12719 static int
12720 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12721 {
12722   uint32_t opcode1 = 0, opcode2 = 0;
12723   uint32_t record_buf[8];
12724
12725   opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12726   opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12727
12728   if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12729     {
12730       /* Handle SMULL, UMULL, SMULAL.  */
12731       /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
12732       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12733       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12734       record_buf[2] = ARM_PS_REGNUM;
12735       thumb2_insn_r->reg_rec_count = 3;
12736     }
12737   else if (1 == opcode1 || 3 == opcode2)
12738     {
12739       /* Handle SDIV and UDIV.  */
12740       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12741       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12742       record_buf[2] = ARM_PS_REGNUM;
12743       thumb2_insn_r->reg_rec_count = 3;
12744     }
12745   else
12746     return ARM_RECORD_FAILURE;
12747
12748   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12749             record_buf);
12750   return ARM_RECORD_SUCCESS;
12751 }
12752
12753 /* Record handler for thumb32 coprocessor instructions.  */
12754
12755 static int
12756 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12757 {
12758   if (bit (thumb2_insn_r->arm_insn, 25))
12759     return arm_record_coproc_data_proc (thumb2_insn_r);
12760   else
12761     return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12762 }
12763
12764 /* Record handler for advance SIMD structure load/store instructions.  */
12765
12766 static int
12767 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12768 {
12769   struct regcache *reg_cache = thumb2_insn_r->regcache;
12770   uint32_t l_bit, a_bit, b_bits;
12771   uint32_t record_buf[128], record_buf_mem[128];
12772   uint32_t reg_rn, reg_vd, address, f_elem;
12773   uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12774   uint8_t f_ebytes;
12775
12776   l_bit = bit (thumb2_insn_r->arm_insn, 21);
12777   a_bit = bit (thumb2_insn_r->arm_insn, 23);
12778   b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12779   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12780   reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12781   reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12782   f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12783   f_elem = 8 / f_ebytes;
12784
12785   if (!l_bit)
12786     {
12787       ULONGEST u_regval = 0;
12788       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12789       address = u_regval;
12790
12791       if (!a_bit)
12792         {
12793           /* Handle VST1.  */
12794           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12795             {
12796               if (b_bits == 0x07)
12797                 bf_regs = 1;
12798               else if (b_bits == 0x0a)
12799                 bf_regs = 2;
12800               else if (b_bits == 0x06)
12801                 bf_regs = 3;
12802               else if (b_bits == 0x02)
12803                 bf_regs = 4;
12804               else
12805                 bf_regs = 0;
12806
12807               for (index_r = 0; index_r < bf_regs; index_r++)
12808                 {
12809                   for (index_e = 0; index_e < f_elem; index_e++)
12810                     {
12811                       record_buf_mem[index_m++] = f_ebytes;
12812                       record_buf_mem[index_m++] = address;
12813                       address = address + f_ebytes;
12814                       thumb2_insn_r->mem_rec_count += 1;
12815                     }
12816                 }
12817             }
12818           /* Handle VST2.  */
12819           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12820             {
12821               if (b_bits == 0x09 || b_bits == 0x08)
12822                 bf_regs = 1;
12823               else if (b_bits == 0x03)
12824                 bf_regs = 2;
12825               else
12826                 bf_regs = 0;
12827
12828               for (index_r = 0; index_r < bf_regs; index_r++)
12829                 for (index_e = 0; index_e < f_elem; index_e++)
12830                   {
12831                     for (loop_t = 0; loop_t < 2; loop_t++)
12832                       {
12833                         record_buf_mem[index_m++] = f_ebytes;
12834                         record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12835                         thumb2_insn_r->mem_rec_count += 1;
12836                       }
12837                     address = address + (2 * f_ebytes);
12838                   }
12839             }
12840           /* Handle VST3.  */
12841           else if ((b_bits & 0x0e) == 0x04)
12842             {
12843               for (index_e = 0; index_e < f_elem; index_e++)
12844                 {
12845                   for (loop_t = 0; loop_t < 3; loop_t++)
12846                     {
12847                       record_buf_mem[index_m++] = f_ebytes;
12848                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12849                       thumb2_insn_r->mem_rec_count += 1;
12850                     }
12851                   address = address + (3 * f_ebytes);
12852                 }
12853             }
12854           /* Handle VST4.  */
12855           else if (!(b_bits & 0x0e))
12856             {
12857               for (index_e = 0; index_e < f_elem; index_e++)
12858                 {
12859                   for (loop_t = 0; loop_t < 4; loop_t++)
12860                     {
12861                       record_buf_mem[index_m++] = f_ebytes;
12862                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12863                       thumb2_insn_r->mem_rec_count += 1;
12864                     }
12865                   address = address + (4 * f_ebytes);
12866                 }
12867             }
12868         }
12869       else
12870         {
12871           uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12872
12873           if (bft_size == 0x00)
12874             f_ebytes = 1;
12875           else if (bft_size == 0x01)
12876             f_ebytes = 2;
12877           else if (bft_size == 0x02)
12878             f_ebytes = 4;
12879           else
12880             f_ebytes = 0;
12881
12882           /* Handle VST1.  */
12883           if (!(b_bits & 0x0b) || b_bits == 0x08)
12884             thumb2_insn_r->mem_rec_count = 1;
12885           /* Handle VST2.  */
12886           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12887             thumb2_insn_r->mem_rec_count = 2;
12888           /* Handle VST3.  */
12889           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12890             thumb2_insn_r->mem_rec_count = 3;
12891           /* Handle VST4.  */
12892           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12893             thumb2_insn_r->mem_rec_count = 4;
12894
12895           for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12896             {
12897               record_buf_mem[index_m] = f_ebytes;
12898               record_buf_mem[index_m] = address + (index_m * f_ebytes);
12899             }
12900         }
12901     }
12902   else
12903     {
12904       if (!a_bit)
12905         {
12906           /* Handle VLD1.  */
12907           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12908             thumb2_insn_r->reg_rec_count = 1;
12909           /* Handle VLD2.  */
12910           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12911             thumb2_insn_r->reg_rec_count = 2;
12912           /* Handle VLD3.  */
12913           else if ((b_bits & 0x0e) == 0x04)
12914             thumb2_insn_r->reg_rec_count = 3;
12915           /* Handle VLD4.  */
12916           else if (!(b_bits & 0x0e))
12917             thumb2_insn_r->reg_rec_count = 4;
12918         }
12919       else
12920         {
12921           /* Handle VLD1.  */
12922           if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12923             thumb2_insn_r->reg_rec_count = 1;
12924           /* Handle VLD2.  */
12925           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12926             thumb2_insn_r->reg_rec_count = 2;
12927           /* Handle VLD3.  */
12928           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12929             thumb2_insn_r->reg_rec_count = 3;
12930           /* Handle VLD4.  */
12931           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12932             thumb2_insn_r->reg_rec_count = 4;
12933
12934           for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12935             record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12936         }
12937     }
12938
12939   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12940     {
12941       record_buf[index_r] = reg_rn;
12942       thumb2_insn_r->reg_rec_count += 1;
12943     }
12944
12945   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12946             record_buf);
12947   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12948             record_buf_mem);
12949   return 0;
12950 }
12951
12952 /* Decodes thumb2 instruction type and invokes its record handler.  */
12953
12954 static unsigned int
12955 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12956 {
12957   uint32_t op, op1, op2;
12958
12959   op = bit (thumb2_insn_r->arm_insn, 15);
12960   op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12961   op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12962
12963   if (op1 == 0x01)
12964     {
12965       if (!(op2 & 0x64 ))
12966         {
12967           /* Load/store multiple instruction.  */
12968           return thumb2_record_ld_st_multiple (thumb2_insn_r);
12969         }
12970       else if ((op2 & 0x64) == 0x4)
12971         {
12972           /* Load/store (dual/exclusive) and table branch instruction.  */
12973           return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12974         }
12975       else if ((op2 & 0x60) == 0x20)
12976         {
12977           /* Data-processing (shifted register).  */
12978           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12979         }
12980       else if (op2 & 0x40)
12981         {
12982           /* Co-processor instructions.  */
12983           return thumb2_record_coproc_insn (thumb2_insn_r);
12984         }
12985     }
12986   else if (op1 == 0x02)
12987     {
12988       if (op)
12989         {
12990           /* Branches and miscellaneous control instructions.  */
12991           return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12992         }
12993       else if (op2 & 0x20)
12994         {
12995           /* Data-processing (plain binary immediate) instruction.  */
12996           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12997         }
12998       else
12999         {
13000           /* Data-processing (modified immediate).  */
13001           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
13002         }
13003     }
13004   else if (op1 == 0x03)
13005     {
13006       if (!(op2 & 0x71 ))
13007         {
13008           /* Store single data item.  */
13009           return thumb2_record_str_single_data (thumb2_insn_r);
13010         }
13011       else if (!((op2 & 0x71) ^ 0x10))
13012         {
13013           /* Advanced SIMD or structure load/store instructions.  */
13014           return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
13015         }
13016       else if (!((op2 & 0x67) ^ 0x01))
13017         {
13018           /* Load byte, memory hints instruction.  */
13019           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13020         }
13021       else if (!((op2 & 0x67) ^ 0x03))
13022         {
13023           /* Load halfword, memory hints instruction.  */
13024           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13025         }
13026       else if (!((op2 & 0x67) ^ 0x05))
13027         {
13028           /* Load word instruction.  */
13029           return thumb2_record_ld_word (thumb2_insn_r);
13030         }
13031       else if (!((op2 & 0x70) ^ 0x20))
13032         {
13033           /* Data-processing (register) instruction.  */
13034           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13035         }
13036       else if (!((op2 & 0x78) ^ 0x30))
13037         {
13038           /* Multiply, multiply accumulate, abs diff instruction.  */
13039           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13040         }
13041       else if (!((op2 & 0x78) ^ 0x38))
13042         {
13043           /* Long multiply, long multiply accumulate, and divide.  */
13044           return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13045         }
13046       else if (op2 & 0x40)
13047         {
13048           /* Co-processor instructions.  */
13049           return thumb2_record_coproc_insn (thumb2_insn_r);
13050         }
13051    }
13052
13053   return -1;
13054 }
13055
13056 namespace {
13057 /* Abstract memory reader.  */
13058
13059 class abstract_memory_reader
13060 {
13061 public:
13062   /* Read LEN bytes of target memory at address MEMADDR, placing the
13063      results in GDB's memory at BUF.  Return true on success.  */
13064
13065   virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
13066 };
13067
13068 /* Instruction reader from real target.  */
13069
13070 class instruction_reader : public abstract_memory_reader
13071 {
13072  public:
13073   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len)
13074   {
13075     if (target_read_memory (memaddr, buf, len))
13076       return false;
13077     else
13078       return true;
13079   }
13080 };
13081
13082 } // namespace
13083
13084 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
13085 and positive val on fauilure.  */
13086
13087 static int
13088 extract_arm_insn (abstract_memory_reader& reader,
13089                   insn_decode_record *insn_record, uint32_t insn_size)
13090 {
13091   gdb_byte buf[insn_size];
13092
13093   memset (&buf[0], 0, insn_size);
13094   
13095   if (!reader.read (insn_record->this_addr, buf, insn_size))
13096     return 1;
13097   insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13098                            insn_size, 
13099                            gdbarch_byte_order_for_code (insn_record->gdbarch));
13100   return 0;
13101 }
13102
13103 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13104
13105 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13106    dispatch it.  */
13107
13108 static int
13109 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13110              record_type_t record_type, uint32_t insn_size)
13111 {
13112
13113   /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13114      instruction.  */
13115   static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13116   {
13117     arm_record_data_proc_misc_ld_str,   /* 000.  */
13118     arm_record_data_proc_imm,           /* 001.  */
13119     arm_record_ld_st_imm_offset,        /* 010.  */
13120     arm_record_ld_st_reg_offset,        /* 011.  */
13121     arm_record_ld_st_multiple,          /* 100.  */
13122     arm_record_b_bl,                    /* 101.  */
13123     arm_record_asimd_vfp_coproc,        /* 110.  */
13124     arm_record_coproc_data_proc         /* 111.  */
13125   };
13126
13127   /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13128      instruction.  */
13129   static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13130   { \
13131     thumb_record_shift_add_sub,        /* 000.  */
13132     thumb_record_add_sub_cmp_mov,      /* 001.  */
13133     thumb_record_ld_st_reg_offset,     /* 010.  */
13134     thumb_record_ld_st_imm_offset,     /* 011.  */
13135     thumb_record_ld_st_stack,          /* 100.  */
13136     thumb_record_misc,                 /* 101.  */
13137     thumb_record_ldm_stm_swi,          /* 110.  */
13138     thumb_record_branch                /* 111.  */
13139   };
13140
13141   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
13142   uint32_t insn_id = 0;
13143
13144   if (extract_arm_insn (reader, arm_record, insn_size))
13145     {
13146       if (record_debug)
13147         {
13148           printf_unfiltered (_("Process record: error reading memory at "
13149                                "addr %s len = %d.\n"),
13150                              paddress (arm_record->gdbarch,
13151                                        arm_record->this_addr), insn_size);
13152         }
13153       return -1;
13154     }
13155   else if (ARM_RECORD == record_type)
13156     {
13157       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13158       insn_id = bits (arm_record->arm_insn, 25, 27);
13159
13160       if (arm_record->cond == 0xf)
13161         ret = arm_record_extension_space (arm_record);
13162       else
13163         {
13164           /* If this insn has fallen into extension space
13165              then we need not decode it anymore.  */
13166           ret = arm_handle_insn[insn_id] (arm_record);
13167         }
13168       if (ret != ARM_RECORD_SUCCESS)
13169         {
13170           arm_record_unsupported_insn (arm_record);
13171           ret = -1;
13172         }
13173     }
13174   else if (THUMB_RECORD == record_type)
13175     {
13176       /* As thumb does not have condition codes, we set negative.  */
13177       arm_record->cond = -1;
13178       insn_id = bits (arm_record->arm_insn, 13, 15);
13179       ret = thumb_handle_insn[insn_id] (arm_record);
13180       if (ret != ARM_RECORD_SUCCESS)
13181         {
13182           arm_record_unsupported_insn (arm_record);
13183           ret = -1;
13184         }
13185     }
13186   else if (THUMB2_RECORD == record_type)
13187     {
13188       /* As thumb does not have condition codes, we set negative.  */
13189       arm_record->cond = -1;
13190
13191       /* Swap first half of 32bit thumb instruction with second half.  */
13192       arm_record->arm_insn
13193         = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13194
13195       ret = thumb2_record_decode_insn_handler (arm_record);
13196
13197       if (ret != ARM_RECORD_SUCCESS)
13198         {
13199           arm_record_unsupported_insn (arm_record);
13200           ret = -1;
13201         }
13202     }
13203   else
13204     {
13205       /* Throw assertion.  */
13206       gdb_assert_not_reached ("not a valid instruction, could not decode");
13207     }
13208
13209   return ret;
13210 }
13211
13212 #if GDB_SELF_TEST
13213 namespace selftests {
13214
13215 /* Provide both 16-bit and 32-bit thumb instructions.  */
13216
13217 class instruction_reader_thumb : public abstract_memory_reader
13218 {
13219 public:
13220   template<size_t SIZE>
13221   instruction_reader_thumb (enum bfd_endian endian,
13222                             const uint16_t (&insns)[SIZE])
13223     : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13224   {}
13225
13226   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len)
13227   {
13228     SELF_CHECK (len == 4 || len == 2);
13229     SELF_CHECK (memaddr % 2 == 0);
13230     SELF_CHECK ((memaddr / 2) < m_insns_size);
13231
13232     store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13233     if (len == 4)
13234       {
13235         store_unsigned_integer (&buf[2], 2, m_endian,
13236                                 m_insns[memaddr / 2 + 1]);
13237       }
13238     return true;
13239   }
13240
13241 private:
13242   enum bfd_endian m_endian;
13243   const uint16_t *m_insns;
13244   size_t m_insns_size;
13245 };
13246
13247 static void
13248 arm_record_test (void)
13249 {
13250   struct gdbarch_info info;
13251   gdbarch_info_init (&info);
13252   info.bfd_arch_info = bfd_scan_arch ("arm");
13253
13254   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13255
13256   SELF_CHECK (gdbarch != NULL);
13257
13258   /* 16-bit Thumb instructions.  */
13259   {
13260     insn_decode_record arm_record;
13261
13262     memset (&arm_record, 0, sizeof (insn_decode_record));
13263     arm_record.gdbarch = gdbarch;
13264
13265     static const uint16_t insns[] = {
13266       /* db b2  uxtb    r3, r3 */
13267       0xb2db,
13268       /* cd 58  ldr     r5, [r1, r3] */
13269       0x58cd,
13270     };
13271
13272     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13273     instruction_reader_thumb reader (endian, insns);
13274     int 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] == 3);
13281
13282     arm_record.this_addr += 2;
13283     ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13284                        THUMB_INSN_SIZE_BYTES);
13285
13286     SELF_CHECK (ret == 0);
13287     SELF_CHECK (arm_record.mem_rec_count == 0);
13288     SELF_CHECK (arm_record.reg_rec_count == 1);
13289     SELF_CHECK (arm_record.arm_regs[0] == 5);
13290   }
13291
13292   /* 32-bit Thumb-2 instructions.  */
13293   {
13294     insn_decode_record arm_record;
13295
13296     memset (&arm_record, 0, sizeof (insn_decode_record));
13297     arm_record.gdbarch = gdbarch;
13298
13299     static const uint16_t insns[] = {
13300       /* 1d ee 70 7f     mrc    15, 0, r7, cr13, cr0, {3} */
13301       0xee1d, 0x7f70,
13302     };
13303
13304     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13305     instruction_reader_thumb reader (endian, insns);
13306     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13307                            THUMB2_INSN_SIZE_BYTES);
13308
13309     SELF_CHECK (ret == 0);
13310     SELF_CHECK (arm_record.mem_rec_count == 0);
13311     SELF_CHECK (arm_record.reg_rec_count == 1);
13312     SELF_CHECK (arm_record.arm_regs[0] == 7);
13313   }
13314 }
13315 } // namespace selftests
13316 #endif /* GDB_SELF_TEST */
13317
13318 /* Cleans up local record registers and memory allocations.  */
13319
13320 static void 
13321 deallocate_reg_mem (insn_decode_record *record)
13322 {
13323   xfree (record->arm_regs);
13324   xfree (record->arm_mems);    
13325 }
13326
13327
13328 /* Parse the current instruction and record the values of the registers and
13329    memory that will be changed in current instruction to record_arch_list".
13330    Return -1 if something is wrong.  */
13331
13332 int
13333 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13334                     CORE_ADDR insn_addr)
13335 {
13336
13337   uint32_t no_of_rec = 0;
13338   uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
13339   ULONGEST t_bit = 0, insn_id = 0;
13340
13341   ULONGEST u_regval = 0;
13342
13343   insn_decode_record arm_record;
13344
13345   memset (&arm_record, 0, sizeof (insn_decode_record));
13346   arm_record.regcache = regcache;
13347   arm_record.this_addr = insn_addr;
13348   arm_record.gdbarch = gdbarch;
13349
13350
13351   if (record_debug > 1)
13352     {
13353       fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13354                           "addr = %s\n",
13355       paddress (gdbarch, arm_record.this_addr));
13356     }
13357
13358   instruction_reader reader;
13359   if (extract_arm_insn (reader, &arm_record, 2))
13360     {
13361       if (record_debug)
13362         {
13363           printf_unfiltered (_("Process record: error reading memory at "
13364                                "addr %s len = %d.\n"),
13365                              paddress (arm_record.gdbarch,
13366                                        arm_record.this_addr), 2);
13367         }
13368       return -1;
13369     }
13370
13371   /* Check the insn, whether it is thumb or arm one.  */
13372
13373   t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13374   regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13375
13376
13377   if (!(u_regval & t_bit))
13378     {
13379       /* We are decoding arm insn.  */
13380       ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13381     }
13382   else
13383     {
13384       insn_id = bits (arm_record.arm_insn, 11, 15);
13385       /* is it thumb2 insn?  */
13386       if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13387         {
13388           ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13389                              THUMB2_INSN_SIZE_BYTES);
13390         }
13391       else
13392         {
13393           /* We are decoding thumb insn.  */
13394           ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13395                              THUMB_INSN_SIZE_BYTES);
13396         }
13397     }
13398
13399   if (0 == ret)
13400     {
13401       /* Record registers.  */
13402       record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13403       if (arm_record.arm_regs)
13404         {
13405           for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13406             {
13407               if (record_full_arch_list_add_reg
13408                   (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13409                 ret = -1;
13410             }
13411         }
13412       /* Record memories.  */
13413       if (arm_record.arm_mems)
13414         {
13415           for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13416             {
13417               if (record_full_arch_list_add_mem
13418                   ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13419                    arm_record.arm_mems[no_of_rec].len))
13420                 ret = -1;
13421             }
13422         }
13423
13424       if (record_full_arch_list_add_end ())
13425         ret = -1;
13426     }
13427
13428
13429   deallocate_reg_mem (&arm_record);
13430
13431   return ret;
13432 }