Fix "fall through" comments
[external/binutils.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2
3    Copyright (C) 1988-2018 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21
22 #include <ctype.h>              /* XXX for isupper ().  */
23
24 #include "frame.h"
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "dis-asm.h"            /* For register styles.  */
30 #include "disasm.h"
31 #include "regcache.h"
32 #include "reggroups.h"
33 #include "target-float.h"
34 #include "value.h"
35 #include "arch-utils.h"
36 #include "osabi.h"
37 #include "frame-unwind.h"
38 #include "frame-base.h"
39 #include "trad-frame.h"
40 #include "objfiles.h"
41 #include "dwarf2-frame.h"
42 #include "gdbtypes.h"
43 #include "prologue-value.h"
44 #include "remote.h"
45 #include "target-descriptions.h"
46 #include "user-regs.h"
47 #include "observable.h"
48
49 #include "arch/arm.h"
50 #include "arch/arm-get-next-pcs.h"
51 #include "arm-tdep.h"
52 #include "gdb/sim-arm.h"
53
54 #include "elf-bfd.h"
55 #include "coff/internal.h"
56 #include "elf/arm.h"
57
58 #include "vec.h"
59
60 #include "record.h"
61 #include "record-full.h"
62 #include <algorithm>
63
64 #include "features/arm/arm-with-m.c"
65 #include "features/arm/arm-with-m-fpa-layout.c"
66 #include "features/arm/arm-with-m-vfp-d16.c"
67 #include "features/arm/arm-with-iwmmxt.c"
68 #include "features/arm/arm-with-vfpv2.c"
69 #include "features/arm/arm-with-vfpv3.c"
70 #include "features/arm/arm-with-neon.c"
71
72 #if GDB_SELF_TEST
73 #include "selftest.h"
74 #endif
75
76 static int arm_debug;
77
78 /* Macros for setting and testing a bit in a minimal symbol that marks
79    it as Thumb function.  The MSB of the minimal symbol's "info" field
80    is used for this purpose.
81
82    MSYMBOL_SET_SPECIAL  Actually sets the "special" bit.
83    MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.  */
84
85 #define MSYMBOL_SET_SPECIAL(msym)                               \
86         MSYMBOL_TARGET_FLAG_1 (msym) = 1
87
88 #define MSYMBOL_IS_SPECIAL(msym)                                \
89         MSYMBOL_TARGET_FLAG_1 (msym)
90
91 /* Per-objfile data used for mapping symbols.  */
92 static const struct objfile_data *arm_objfile_data_key;
93
94 struct arm_mapping_symbol
95 {
96   bfd_vma value;
97   char type;
98 };
99 typedef struct arm_mapping_symbol arm_mapping_symbol_s;
100 DEF_VEC_O(arm_mapping_symbol_s);
101
102 struct arm_per_objfile
103 {
104   VEC(arm_mapping_symbol_s) **section_maps;
105 };
106
107 /* The list of available "set arm ..." and "show arm ..." commands.  */
108 static struct cmd_list_element *setarmcmdlist = NULL;
109 static struct cmd_list_element *showarmcmdlist = NULL;
110
111 /* The type of floating-point to use.  Keep this in sync with enum
112    arm_float_model, and the help string in _initialize_arm_tdep.  */
113 static const char *const fp_model_strings[] =
114 {
115   "auto",
116   "softfpa",
117   "fpa",
118   "softvfp",
119   "vfp",
120   NULL
121 };
122
123 /* A variable that can be configured by the user.  */
124 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
125 static const char *current_fp_model = "auto";
126
127 /* The ABI to use.  Keep this in sync with arm_abi_kind.  */
128 static const char *const arm_abi_strings[] =
129 {
130   "auto",
131   "APCS",
132   "AAPCS",
133   NULL
134 };
135
136 /* A variable that can be configured by the user.  */
137 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
138 static const char *arm_abi_string = "auto";
139
140 /* The execution mode to assume.  */
141 static const char *const arm_mode_strings[] =
142   {
143     "auto",
144     "arm",
145     "thumb",
146     NULL
147   };
148
149 static const char *arm_fallback_mode_string = "auto";
150 static const char *arm_force_mode_string = "auto";
151
152 /* The standard register names, and all the valid aliases for them.  Note
153    that `fp', `sp' and `pc' are not added in this alias list, because they
154    have been added as builtin user registers in
155    std-regs.c:_initialize_frame_reg.  */
156 static const struct
157 {
158   const char *name;
159   int regnum;
160 } arm_register_aliases[] = {
161   /* Basic register numbers.  */
162   { "r0", 0 },
163   { "r1", 1 },
164   { "r2", 2 },
165   { "r3", 3 },
166   { "r4", 4 },
167   { "r5", 5 },
168   { "r6", 6 },
169   { "r7", 7 },
170   { "r8", 8 },
171   { "r9", 9 },
172   { "r10", 10 },
173   { "r11", 11 },
174   { "r12", 12 },
175   { "r13", 13 },
176   { "r14", 14 },
177   { "r15", 15 },
178   /* Synonyms (argument and variable registers).  */
179   { "a1", 0 },
180   { "a2", 1 },
181   { "a3", 2 },
182   { "a4", 3 },
183   { "v1", 4 },
184   { "v2", 5 },
185   { "v3", 6 },
186   { "v4", 7 },
187   { "v5", 8 },
188   { "v6", 9 },
189   { "v7", 10 },
190   { "v8", 11 },
191   /* Other platform-specific names for r9.  */
192   { "sb", 9 },
193   { "tr", 9 },
194   /* Special names.  */
195   { "ip", 12 },
196   { "lr", 14 },
197   /* Names used by GCC (not listed in the ARM EABI).  */
198   { "sl", 10 },
199   /* A special name from the older ATPCS.  */
200   { "wr", 7 },
201 };
202
203 static const char *const arm_register_names[] =
204 {"r0",  "r1",  "r2",  "r3",     /*  0  1  2  3 */
205  "r4",  "r5",  "r6",  "r7",     /*  4  5  6  7 */
206  "r8",  "r9",  "r10", "r11",    /*  8  9 10 11 */
207  "r12", "sp",  "lr",  "pc",     /* 12 13 14 15 */
208  "f0",  "f1",  "f2",  "f3",     /* 16 17 18 19 */
209  "f4",  "f5",  "f6",  "f7",     /* 20 21 22 23 */
210  "fps", "cpsr" };               /* 24 25       */
211
212 /* Holds the current set of options to be passed to the disassembler.  */
213 static char *arm_disassembler_options;
214
215 /* Valid register name styles.  */
216 static const char **valid_disassembly_styles;
217
218 /* Disassembly style to use. Default to "std" register names.  */
219 static const char *disassembly_style;
220
221 /* This is used to keep the bfd arch_info in sync with the disassembly
222    style.  */
223 static void set_disassembly_style_sfunc (const char *, int,
224                                          struct cmd_list_element *);
225 static void show_disassembly_style_sfunc (struct ui_file *, int,
226                                           struct cmd_list_element *,
227                                           const char *);
228
229 static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch,
230                                                 readable_regcache *regcache,
231                                                 int regnum, gdb_byte *buf);
232 static void arm_neon_quad_write (struct gdbarch *gdbarch,
233                                  struct regcache *regcache,
234                                  int regnum, const gdb_byte *buf);
235
236 static CORE_ADDR
237   arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
238
239
240 /* get_next_pcs operations.  */
241 static struct arm_get_next_pcs_ops arm_get_next_pcs_ops = {
242   arm_get_next_pcs_read_memory_unsigned_integer,
243   arm_get_next_pcs_syscall_next_pc,
244   arm_get_next_pcs_addr_bits_remove,
245   arm_get_next_pcs_is_thumb,
246   NULL,
247 };
248
249 struct arm_prologue_cache
250 {
251   /* The stack pointer at the time this frame was created; i.e. the
252      caller's stack pointer when this function was called.  It is used
253      to identify this frame.  */
254   CORE_ADDR prev_sp;
255
256   /* The frame base for this frame is just prev_sp - frame size.
257      FRAMESIZE is the distance from the frame pointer to the
258      initial stack pointer.  */
259
260   int framesize;
261
262   /* The register used to hold the frame pointer for this frame.  */
263   int framereg;
264
265   /* Saved register offsets.  */
266   struct trad_frame_saved_reg *saved_regs;
267 };
268
269 static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
270                                        CORE_ADDR prologue_start,
271                                        CORE_ADDR prologue_end,
272                                        struct arm_prologue_cache *cache);
273
274 /* Architecture version for displaced stepping.  This effects the behaviour of
275    certain instructions, and really should not be hard-wired.  */
276
277 #define DISPLACED_STEPPING_ARCH_VERSION         5
278
279 /* Set to true if the 32-bit mode is in use.  */
280
281 int arm_apcs_32 = 1;
282
283 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
284
285 int
286 arm_psr_thumb_bit (struct gdbarch *gdbarch)
287 {
288   if (gdbarch_tdep (gdbarch)->is_m)
289     return XPSR_T;
290   else
291     return CPSR_T;
292 }
293
294 /* Determine if the processor is currently executing in Thumb mode.  */
295
296 int
297 arm_is_thumb (struct regcache *regcache)
298 {
299   ULONGEST cpsr;
300   ULONGEST t_bit = arm_psr_thumb_bit (regcache->arch ());
301
302   cpsr = regcache_raw_get_unsigned (regcache, ARM_PS_REGNUM);
303
304   return (cpsr & t_bit) != 0;
305 }
306
307 /* Determine if FRAME is executing in Thumb mode.  */
308
309 int
310 arm_frame_is_thumb (struct frame_info *frame)
311 {
312   CORE_ADDR cpsr;
313   ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
314
315   /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
316      directly (from a signal frame or dummy frame) or by interpreting
317      the saved LR (from a prologue or DWARF frame).  So consult it and
318      trust the unwinders.  */
319   cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
320
321   return (cpsr & t_bit) != 0;
322 }
323
324 /* Callback for VEC_lower_bound.  */
325
326 static inline int
327 arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
328                              const struct arm_mapping_symbol *rhs)
329 {
330   return lhs->value < rhs->value;
331 }
332
333 /* Search for the mapping symbol covering MEMADDR.  If one is found,
334    return its type.  Otherwise, return 0.  If START is non-NULL,
335    set *START to the location of the mapping symbol.  */
336
337 static char
338 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
339 {
340   struct obj_section *sec;
341
342   /* If there are mapping symbols, consult them.  */
343   sec = find_pc_section (memaddr);
344   if (sec != NULL)
345     {
346       struct arm_per_objfile *data;
347       VEC(arm_mapping_symbol_s) *map;
348       struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
349                                             0 };
350       unsigned int idx;
351
352       data = (struct arm_per_objfile *) objfile_data (sec->objfile,
353                                                       arm_objfile_data_key);
354       if (data != NULL)
355         {
356           map = data->section_maps[sec->the_bfd_section->index];
357           if (!VEC_empty (arm_mapping_symbol_s, map))
358             {
359               struct arm_mapping_symbol *map_sym;
360
361               idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
362                                      arm_compare_mapping_symbols);
363
364               /* VEC_lower_bound finds the earliest ordered insertion
365                  point.  If the following symbol starts at this exact
366                  address, we use that; otherwise, the preceding
367                  mapping symbol covers this address.  */
368               if (idx < VEC_length (arm_mapping_symbol_s, map))
369                 {
370                   map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
371                   if (map_sym->value == map_key.value)
372                     {
373                       if (start)
374                         *start = map_sym->value + obj_section_addr (sec);
375                       return map_sym->type;
376                     }
377                 }
378
379               if (idx > 0)
380                 {
381                   map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
382                   if (start)
383                     *start = map_sym->value + obj_section_addr (sec);
384                   return map_sym->type;
385                 }
386             }
387         }
388     }
389
390   return 0;
391 }
392
393 /* Determine if the program counter specified in MEMADDR is in a Thumb
394    function.  This function should be called for addresses unrelated to
395    any executing frame; otherwise, prefer arm_frame_is_thumb.  */
396
397 int
398 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
399 {
400   struct bound_minimal_symbol sym;
401   char type;
402   arm_displaced_step_closure *dsc
403     = ((arm_displaced_step_closure * )
404         get_displaced_step_closure_by_addr (memaddr));
405
406   /* If checking the mode of displaced instruction in copy area, the mode
407      should be determined by instruction on the original address.  */
408   if (dsc)
409     {
410       if (debug_displaced)
411         fprintf_unfiltered (gdb_stdlog,
412                             "displaced: check mode of %.8lx instead of %.8lx\n",
413                             (unsigned long) dsc->insn_addr,
414                             (unsigned long) memaddr);
415       memaddr = dsc->insn_addr;
416     }
417
418   /* If bit 0 of the address is set, assume this is a Thumb address.  */
419   if (IS_THUMB_ADDR (memaddr))
420     return 1;
421
422   /* If the user wants to override the symbol table, let him.  */
423   if (strcmp (arm_force_mode_string, "arm") == 0)
424     return 0;
425   if (strcmp (arm_force_mode_string, "thumb") == 0)
426     return 1;
427
428   /* ARM v6-M and v7-M are always in Thumb mode.  */
429   if (gdbarch_tdep (gdbarch)->is_m)
430     return 1;
431
432   /* If there are mapping symbols, consult them.  */
433   type = arm_find_mapping_symbol (memaddr, NULL);
434   if (type)
435     return type == 't';
436
437   /* Thumb functions have a "special" bit set in minimal symbols.  */
438   sym = lookup_minimal_symbol_by_pc (memaddr);
439   if (sym.minsym)
440     return (MSYMBOL_IS_SPECIAL (sym.minsym));
441
442   /* If the user wants to override the fallback mode, let them.  */
443   if (strcmp (arm_fallback_mode_string, "arm") == 0)
444     return 0;
445   if (strcmp (arm_fallback_mode_string, "thumb") == 0)
446     return 1;
447
448   /* If we couldn't find any symbol, but we're talking to a running
449      target, then trust the current value of $cpsr.  This lets
450      "display/i $pc" always show the correct mode (though if there is
451      a symbol table we will not reach here, so it still may not be
452      displayed in the mode it will be executed).  */
453   if (target_has_registers)
454     return arm_frame_is_thumb (get_current_frame ());
455
456   /* Otherwise we're out of luck; we assume ARM.  */
457   return 0;
458 }
459
460 /* Determine if the address specified equals any of these magic return
461    values, called EXC_RETURN, defined by the ARM v6-M and v7-M
462    architectures.
463
464    From ARMv6-M Reference Manual B1.5.8
465    Table B1-5 Exception return behavior
466
467    EXC_RETURN    Return To        Return Stack
468    0xFFFFFFF1    Handler mode     Main
469    0xFFFFFFF9    Thread mode      Main
470    0xFFFFFFFD    Thread mode      Process
471
472    From ARMv7-M Reference Manual B1.5.8
473    Table B1-8 EXC_RETURN definition of exception return behavior, no FP
474
475    EXC_RETURN    Return To        Return Stack
476    0xFFFFFFF1    Handler mode     Main
477    0xFFFFFFF9    Thread mode      Main
478    0xFFFFFFFD    Thread mode      Process
479
480    Table B1-9 EXC_RETURN definition of exception return behavior, with
481    FP
482
483    EXC_RETURN    Return To        Return Stack    Frame Type
484    0xFFFFFFE1    Handler mode     Main            Extended
485    0xFFFFFFE9    Thread mode      Main            Extended
486    0xFFFFFFED    Thread mode      Process         Extended
487    0xFFFFFFF1    Handler mode     Main            Basic
488    0xFFFFFFF9    Thread mode      Main            Basic
489    0xFFFFFFFD    Thread mode      Process         Basic
490
491    For more details see "B1.5.8 Exception return behavior"
492    in both ARMv6-M and ARMv7-M Architecture Reference Manuals.  */
493
494 static int
495 arm_m_addr_is_magic (CORE_ADDR addr)
496 {
497   switch (addr)
498     {
499       /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
500          the exception return behavior.  */
501       case 0xffffffe1:
502       case 0xffffffe9:
503       case 0xffffffed:
504       case 0xfffffff1:
505       case 0xfffffff9:
506       case 0xfffffffd:
507         /* Address is magic.  */
508         return 1;
509
510       default:
511         /* Address is not magic.  */
512         return 0;
513     }
514 }
515
516 /* Remove useless bits from addresses in a running program.  */
517 static CORE_ADDR
518 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
519 {
520   /* On M-profile devices, do not strip the low bit from EXC_RETURN
521      (the magic exception return address).  */
522   if (gdbarch_tdep (gdbarch)->is_m
523       && arm_m_addr_is_magic (val))
524     return val;
525
526   if (arm_apcs_32)
527     return UNMAKE_THUMB_ADDR (val);
528   else
529     return (val & 0x03fffffc);
530 }
531
532 /* Return 1 if PC is the start of a compiler helper function which
533    can be safely ignored during prologue skipping.  IS_THUMB is true
534    if the function is known to be a Thumb function due to the way it
535    is being called.  */
536 static int
537 skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
538 {
539   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
540   struct bound_minimal_symbol msym;
541
542   msym = lookup_minimal_symbol_by_pc (pc);
543   if (msym.minsym != NULL
544       && BMSYMBOL_VALUE_ADDRESS (msym) == pc
545       && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL)
546     {
547       const char *name = MSYMBOL_LINKAGE_NAME (msym.minsym);
548
549       /* The GNU linker's Thumb call stub to foo is named
550          __foo_from_thumb.  */
551       if (strstr (name, "_from_thumb") != NULL)
552         name += 2;
553
554       /* On soft-float targets, __truncdfsf2 is called to convert promoted
555          arguments to their argument types in non-prototyped
556          functions.  */
557       if (startswith (name, "__truncdfsf2"))
558         return 1;
559       if (startswith (name, "__aeabi_d2f"))
560         return 1;
561
562       /* Internal functions related to thread-local storage.  */
563       if (startswith (name, "__tls_get_addr"))
564         return 1;
565       if (startswith (name, "__aeabi_read_tp"))
566         return 1;
567     }
568   else
569     {
570       /* If we run against a stripped glibc, we may be unable to identify
571          special functions by name.  Check for one important case,
572          __aeabi_read_tp, by comparing the *code* against the default
573          implementation (this is hand-written ARM assembler in glibc).  */
574
575       if (!is_thumb
576           && read_code_unsigned_integer (pc, 4, byte_order_for_code)
577              == 0xe3e00a0f /* mov r0, #0xffff0fff */
578           && read_code_unsigned_integer (pc + 4, 4, byte_order_for_code)
579              == 0xe240f01f) /* sub pc, r0, #31 */
580         return 1;
581     }
582
583   return 0;
584 }
585
586 /* Extract the immediate from instruction movw/movt of encoding T.  INSN1 is
587    the first 16-bit of instruction, and INSN2 is the second 16-bit of
588    instruction.  */
589 #define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2) \
590   ((bits ((insn1), 0, 3) << 12)               \
591    | (bits ((insn1), 10, 10) << 11)           \
592    | (bits ((insn2), 12, 14) << 8)            \
593    | bits ((insn2), 0, 7))
594
595 /* Extract the immediate from instruction movw/movt of encoding A.  INSN is
596    the 32-bit instruction.  */
597 #define EXTRACT_MOVW_MOVT_IMM_A(insn) \
598   ((bits ((insn), 16, 19) << 12) \
599    | bits ((insn), 0, 11))
600
601 /* Decode immediate value; implements ThumbExpandImmediate pseudo-op.  */
602
603 static unsigned int
604 thumb_expand_immediate (unsigned int imm)
605 {
606   unsigned int count = imm >> 7;
607
608   if (count < 8)
609     switch (count / 2)
610       {
611       case 0:
612         return imm & 0xff;
613       case 1:
614         return (imm & 0xff) | ((imm & 0xff) << 16);
615       case 2:
616         return ((imm & 0xff) << 8) | ((imm & 0xff) << 24);
617       case 3:
618         return (imm & 0xff) | ((imm & 0xff) << 8)
619                 | ((imm & 0xff) << 16) | ((imm & 0xff) << 24);
620       }
621
622   return (0x80 | (imm & 0x7f)) << (32 - count);
623 }
624
625 /* Return 1 if the 16-bit Thumb instruction INSN restores SP in
626    epilogue, 0 otherwise.  */
627
628 static int
629 thumb_instruction_restores_sp (unsigned short insn)
630 {
631   return (insn == 0x46bd  /* mov sp, r7 */
632           || (insn & 0xff80) == 0xb000  /* add sp, imm */
633           || (insn & 0xfe00) == 0xbc00);  /* pop <registers> */
634 }
635
636 /* Analyze a Thumb prologue, looking for a recognizable stack frame
637    and frame pointer.  Scan until we encounter a store that could
638    clobber the stack frame unexpectedly, or an unknown instruction.
639    Return the last address which is definitely safe to skip for an
640    initial breakpoint.  */
641
642 static CORE_ADDR
643 thumb_analyze_prologue (struct gdbarch *gdbarch,
644                         CORE_ADDR start, CORE_ADDR limit,
645                         struct arm_prologue_cache *cache)
646 {
647   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
648   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
649   int i;
650   pv_t regs[16];
651   CORE_ADDR offset;
652   CORE_ADDR unrecognized_pc = 0;
653
654   for (i = 0; i < 16; i++)
655     regs[i] = pv_register (i, 0);
656   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
657
658   while (start < limit)
659     {
660       unsigned short insn;
661
662       insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
663
664       if ((insn & 0xfe00) == 0xb400)            /* push { rlist } */
665         {
666           int regno;
667           int mask;
668
669           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
670             break;
671
672           /* Bits 0-7 contain a mask for registers R0-R7.  Bit 8 says
673              whether to save LR (R14).  */
674           mask = (insn & 0xff) | ((insn & 0x100) << 6);
675
676           /* Calculate offsets of saved R0-R7 and LR.  */
677           for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
678             if (mask & (1 << regno))
679               {
680                 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
681                                                        -4);
682                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
683               }
684         }
685       else if ((insn & 0xff80) == 0xb080)       /* sub sp, #imm */
686         {
687           offset = (insn & 0x7f) << 2;          /* get scaled offset */
688           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
689                                                  -offset);
690         }
691       else if (thumb_instruction_restores_sp (insn))
692         {
693           /* Don't scan past the epilogue.  */
694           break;
695         }
696       else if ((insn & 0xf800) == 0xa800)       /* add Rd, sp, #imm */
697         regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
698                                                     (insn & 0xff) << 2);
699       else if ((insn & 0xfe00) == 0x1c00        /* add Rd, Rn, #imm */
700                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
701         regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
702                                                    bits (insn, 6, 8));
703       else if ((insn & 0xf800) == 0x3000        /* add Rd, #imm */
704                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
705         regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
706                                                     bits (insn, 0, 7));
707       else if ((insn & 0xfe00) == 0x1800        /* add Rd, Rn, Rm */
708                && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
709                && pv_is_constant (regs[bits (insn, 3, 5)]))
710         regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
711                                           regs[bits (insn, 6, 8)]);
712       else if ((insn & 0xff00) == 0x4400        /* add Rd, Rm */
713                && pv_is_constant (regs[bits (insn, 3, 6)]))
714         {
715           int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
716           int rm = bits (insn, 3, 6);
717           regs[rd] = pv_add (regs[rd], regs[rm]);
718         }
719       else if ((insn & 0xff00) == 0x4600)       /* mov hi, lo or mov lo, hi */
720         {
721           int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
722           int src_reg = (insn & 0x78) >> 3;
723           regs[dst_reg] = regs[src_reg];
724         }
725       else if ((insn & 0xf800) == 0x9000)       /* str rd, [sp, #off] */
726         {
727           /* Handle stores to the stack.  Normally pushes are used,
728              but with GCC -mtpcs-frame, there may be other stores
729              in the prologue to create the frame.  */
730           int regno = (insn >> 8) & 0x7;
731           pv_t addr;
732
733           offset = (insn & 0xff) << 2;
734           addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
735
736           if (stack.store_would_trash (addr))
737             break;
738
739           stack.store (addr, 4, regs[regno]);
740         }
741       else if ((insn & 0xf800) == 0x6000)       /* str rd, [rn, #off] */
742         {
743           int rd = bits (insn, 0, 2);
744           int rn = bits (insn, 3, 5);
745           pv_t addr;
746
747           offset = bits (insn, 6, 10) << 2;
748           addr = pv_add_constant (regs[rn], offset);
749
750           if (stack.store_would_trash (addr))
751             break;
752
753           stack.store (addr, 4, regs[rd]);
754         }
755       else if (((insn & 0xf800) == 0x7000       /* strb Rd, [Rn, #off] */
756                 || (insn & 0xf800) == 0x8000)   /* strh Rd, [Rn, #off] */
757                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
758         /* Ignore stores of argument registers to the stack.  */
759         ;
760       else if ((insn & 0xf800) == 0xc800        /* ldmia Rn!, { registers } */
761                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
762         /* Ignore block loads from the stack, potentially copying
763            parameters from memory.  */
764         ;
765       else if ((insn & 0xf800) == 0x9800        /* ldr Rd, [Rn, #immed] */
766                || ((insn & 0xf800) == 0x6800    /* ldr Rd, [sp, #immed] */
767                    && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
768         /* Similarly ignore single loads from the stack.  */
769         ;
770       else if ((insn & 0xffc0) == 0x0000        /* lsls Rd, Rm, #0 */
771                || (insn & 0xffc0) == 0x1c00)    /* add Rd, Rn, #0 */
772         /* Skip register copies, i.e. saves to another register
773            instead of the stack.  */
774         ;
775       else if ((insn & 0xf800) == 0x2000)       /* movs Rd, #imm */
776         /* Recognize constant loads; even with small stacks these are necessary
777            on Thumb.  */
778         regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
779       else if ((insn & 0xf800) == 0x4800)       /* ldr Rd, [pc, #imm] */
780         {
781           /* Constant pool loads, for the same reason.  */
782           unsigned int constant;
783           CORE_ADDR loc;
784
785           loc = start + 4 + bits (insn, 0, 7) * 4;
786           constant = read_memory_unsigned_integer (loc, 4, byte_order);
787           regs[bits (insn, 8, 10)] = pv_constant (constant);
788         }
789       else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instructions.  */
790         {
791           unsigned short inst2;
792
793           inst2 = read_code_unsigned_integer (start + 2, 2,
794                                               byte_order_for_code);
795
796           if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
797             {
798               /* BL, BLX.  Allow some special function calls when
799                  skipping the prologue; GCC generates these before
800                  storing arguments to the stack.  */
801               CORE_ADDR nextpc;
802               int j1, j2, imm1, imm2;
803
804               imm1 = sbits (insn, 0, 10);
805               imm2 = bits (inst2, 0, 10);
806               j1 = bit (inst2, 13);
807               j2 = bit (inst2, 11);
808
809               offset = ((imm1 << 12) + (imm2 << 1));
810               offset ^= ((!j2) << 22) | ((!j1) << 23);
811
812               nextpc = start + 4 + offset;
813               /* For BLX make sure to clear the low bits.  */
814               if (bit (inst2, 12) == 0)
815                 nextpc = nextpc & 0xfffffffc;
816
817               if (!skip_prologue_function (gdbarch, nextpc,
818                                            bit (inst2, 12) != 0))
819                 break;
820             }
821
822           else if ((insn & 0xffd0) == 0xe900    /* stmdb Rn{!},
823                                                    { registers } */
824                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
825             {
826               pv_t addr = regs[bits (insn, 0, 3)];
827               int regno;
828
829               if (stack.store_would_trash (addr))
830                 break;
831
832               /* Calculate offsets of saved registers.  */
833               for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
834                 if (inst2 & (1 << regno))
835                   {
836                     addr = pv_add_constant (addr, -4);
837                     stack.store (addr, 4, regs[regno]);
838                   }
839
840               if (insn & 0x0020)
841                 regs[bits (insn, 0, 3)] = addr;
842             }
843
844           else if ((insn & 0xff50) == 0xe940    /* strd Rt, Rt2,
845                                                    [Rn, #+/-imm]{!} */
846                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
847             {
848               int regno1 = bits (inst2, 12, 15);
849               int regno2 = bits (inst2, 8, 11);
850               pv_t addr = regs[bits (insn, 0, 3)];
851
852               offset = inst2 & 0xff;
853               if (insn & 0x0080)
854                 addr = pv_add_constant (addr, offset);
855               else
856                 addr = pv_add_constant (addr, -offset);
857
858               if (stack.store_would_trash (addr))
859                 break;
860
861               stack.store (addr, 4, regs[regno1]);
862               stack.store (pv_add_constant (addr, 4),
863                            4, regs[regno2]);
864
865               if (insn & 0x0020)
866                 regs[bits (insn, 0, 3)] = addr;
867             }
868
869           else if ((insn & 0xfff0) == 0xf8c0    /* str Rt,[Rn,+/-#imm]{!} */
870                    && (inst2 & 0x0c00) == 0x0c00
871                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
872             {
873               int regno = bits (inst2, 12, 15);
874               pv_t addr = regs[bits (insn, 0, 3)];
875
876               offset = inst2 & 0xff;
877               if (inst2 & 0x0200)
878                 addr = pv_add_constant (addr, offset);
879               else
880                 addr = pv_add_constant (addr, -offset);
881
882               if (stack.store_would_trash (addr))
883                 break;
884
885               stack.store (addr, 4, regs[regno]);
886
887               if (inst2 & 0x0100)
888                 regs[bits (insn, 0, 3)] = addr;
889             }
890
891           else if ((insn & 0xfff0) == 0xf8c0    /* str.w Rt,[Rn,#imm] */
892                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
893             {
894               int regno = bits (inst2, 12, 15);
895               pv_t addr;
896
897               offset = inst2 & 0xfff;
898               addr = pv_add_constant (regs[bits (insn, 0, 3)], offset);
899
900               if (stack.store_would_trash (addr))
901                 break;
902
903               stack.store (addr, 4, regs[regno]);
904             }
905
906           else if ((insn & 0xffd0) == 0xf880    /* str{bh}.w Rt,[Rn,#imm] */
907                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
908             /* Ignore stores of argument registers to the stack.  */
909             ;
910
911           else if ((insn & 0xffd0) == 0xf800    /* str{bh} Rt,[Rn,#+/-imm] */
912                    && (inst2 & 0x0d00) == 0x0c00
913                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
914             /* Ignore stores of argument registers to the stack.  */
915             ;
916
917           else if ((insn & 0xffd0) == 0xe890    /* ldmia Rn[!],
918                                                    { registers } */
919                    && (inst2 & 0x8000) == 0x0000
920                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
921             /* Ignore block loads from the stack, potentially copying
922                parameters from memory.  */
923             ;
924
925           else if ((insn & 0xffb0) == 0xe950    /* ldrd Rt, Rt2,
926                                                    [Rn, #+/-imm] */
927                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
928             /* Similarly ignore dual loads from the stack.  */
929             ;
930
931           else if ((insn & 0xfff0) == 0xf850    /* ldr Rt,[Rn,#+/-imm] */
932                    && (inst2 & 0x0d00) == 0x0c00
933                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
934             /* Similarly ignore single loads from the stack.  */
935             ;
936
937           else if ((insn & 0xfff0) == 0xf8d0    /* ldr.w Rt,[Rn,#imm] */
938                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
939             /* Similarly ignore single loads from the stack.  */
940             ;
941
942           else if ((insn & 0xfbf0) == 0xf100    /* add.w Rd, Rn, #imm */
943                    && (inst2 & 0x8000) == 0x0000)
944             {
945               unsigned int imm = ((bits (insn, 10, 10) << 11)
946                                   | (bits (inst2, 12, 14) << 8)
947                                   | bits (inst2, 0, 7));
948
949               regs[bits (inst2, 8, 11)]
950                 = pv_add_constant (regs[bits (insn, 0, 3)],
951                                    thumb_expand_immediate (imm));
952             }
953
954           else if ((insn & 0xfbf0) == 0xf200    /* addw Rd, Rn, #imm */
955                    && (inst2 & 0x8000) == 0x0000)
956             {
957               unsigned int imm = ((bits (insn, 10, 10) << 11)
958                                   | (bits (inst2, 12, 14) << 8)
959                                   | bits (inst2, 0, 7));
960
961               regs[bits (inst2, 8, 11)]
962                 = pv_add_constant (regs[bits (insn, 0, 3)], imm);
963             }
964
965           else if ((insn & 0xfbf0) == 0xf1a0    /* sub.w Rd, Rn, #imm */
966                    && (inst2 & 0x8000) == 0x0000)
967             {
968               unsigned int imm = ((bits (insn, 10, 10) << 11)
969                                   | (bits (inst2, 12, 14) << 8)
970                                   | bits (inst2, 0, 7));
971
972               regs[bits (inst2, 8, 11)]
973                 = pv_add_constant (regs[bits (insn, 0, 3)],
974                                    - (CORE_ADDR) thumb_expand_immediate (imm));
975             }
976
977           else if ((insn & 0xfbf0) == 0xf2a0    /* subw Rd, Rn, #imm */
978                    && (inst2 & 0x8000) == 0x0000)
979             {
980               unsigned int imm = ((bits (insn, 10, 10) << 11)
981                                   | (bits (inst2, 12, 14) << 8)
982                                   | bits (inst2, 0, 7));
983
984               regs[bits (inst2, 8, 11)]
985                 = pv_add_constant (regs[bits (insn, 0, 3)], - (CORE_ADDR) imm);
986             }
987
988           else if ((insn & 0xfbff) == 0xf04f)   /* mov.w Rd, #const */
989             {
990               unsigned int imm = ((bits (insn, 10, 10) << 11)
991                                   | (bits (inst2, 12, 14) << 8)
992                                   | bits (inst2, 0, 7));
993
994               regs[bits (inst2, 8, 11)]
995                 = pv_constant (thumb_expand_immediate (imm));
996             }
997
998           else if ((insn & 0xfbf0) == 0xf240)   /* movw Rd, #const */
999             {
1000               unsigned int imm
1001                 = EXTRACT_MOVW_MOVT_IMM_T (insn, inst2);
1002
1003               regs[bits (inst2, 8, 11)] = pv_constant (imm);
1004             }
1005
1006           else if (insn == 0xea5f               /* mov.w Rd,Rm */
1007                    && (inst2 & 0xf0f0) == 0)
1008             {
1009               int dst_reg = (inst2 & 0x0f00) >> 8;
1010               int src_reg = inst2 & 0xf;
1011               regs[dst_reg] = regs[src_reg];
1012             }
1013
1014           else if ((insn & 0xff7f) == 0xf85f)   /* ldr.w Rt,<label> */
1015             {
1016               /* Constant pool loads.  */
1017               unsigned int constant;
1018               CORE_ADDR loc;
1019
1020               offset = bits (inst2, 0, 11);
1021               if (insn & 0x0080)
1022                 loc = start + 4 + offset;
1023               else
1024                 loc = start + 4 - offset;
1025
1026               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1027               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1028             }
1029
1030           else if ((insn & 0xff7f) == 0xe95f)   /* ldrd Rt,Rt2,<label> */
1031             {
1032               /* Constant pool loads.  */
1033               unsigned int constant;
1034               CORE_ADDR loc;
1035
1036               offset = bits (inst2, 0, 7) << 2;
1037               if (insn & 0x0080)
1038                 loc = start + 4 + offset;
1039               else
1040                 loc = start + 4 - offset;
1041
1042               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1043               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1044
1045               constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
1046               regs[bits (inst2, 8, 11)] = pv_constant (constant);
1047             }
1048
1049           else if (thumb2_instruction_changes_pc (insn, inst2))
1050             {
1051               /* Don't scan past anything that might change control flow.  */
1052               break;
1053             }
1054           else
1055             {
1056               /* The optimizer might shove anything into the prologue,
1057                  so we just skip what we don't recognize.  */
1058               unrecognized_pc = start;
1059             }
1060
1061           start += 2;
1062         }
1063       else if (thumb_instruction_changes_pc (insn))
1064         {
1065           /* Don't scan past anything that might change control flow.  */
1066           break;
1067         }
1068       else
1069         {
1070           /* The optimizer might shove anything into the prologue,
1071              so we just skip what we don't recognize.  */
1072           unrecognized_pc = start;
1073         }
1074
1075       start += 2;
1076     }
1077
1078   if (arm_debug)
1079     fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1080                         paddress (gdbarch, start));
1081
1082   if (unrecognized_pc == 0)
1083     unrecognized_pc = start;
1084
1085   if (cache == NULL)
1086     return unrecognized_pc;
1087
1088   if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1089     {
1090       /* Frame pointer is fp.  Frame size is constant.  */
1091       cache->framereg = ARM_FP_REGNUM;
1092       cache->framesize = -regs[ARM_FP_REGNUM].k;
1093     }
1094   else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
1095     {
1096       /* Frame pointer is r7.  Frame size is constant.  */
1097       cache->framereg = THUMB_FP_REGNUM;
1098       cache->framesize = -regs[THUMB_FP_REGNUM].k;
1099     }
1100   else
1101     {
1102       /* Try the stack pointer... this is a bit desperate.  */
1103       cache->framereg = ARM_SP_REGNUM;
1104       cache->framesize = -regs[ARM_SP_REGNUM].k;
1105     }
1106
1107   for (i = 0; i < 16; i++)
1108     if (stack.find_reg (gdbarch, i, &offset))
1109       cache->saved_regs[i].addr = offset;
1110
1111   return unrecognized_pc;
1112 }
1113
1114
1115 /* Try to analyze the instructions starting from PC, which load symbol
1116    __stack_chk_guard.  Return the address of instruction after loading this
1117    symbol, set the dest register number to *BASEREG, and set the size of
1118    instructions for loading symbol in OFFSET.  Return 0 if instructions are
1119    not recognized.  */
1120
1121 static CORE_ADDR
1122 arm_analyze_load_stack_chk_guard(CORE_ADDR pc, struct gdbarch *gdbarch,
1123                                  unsigned int *destreg, int *offset)
1124 {
1125   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1126   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1127   unsigned int low, high, address;
1128
1129   address = 0;
1130   if (is_thumb)
1131     {
1132       unsigned short insn1
1133         = read_code_unsigned_integer (pc, 2, byte_order_for_code);
1134
1135       if ((insn1 & 0xf800) == 0x4800) /* ldr Rd, #immed */
1136         {
1137           *destreg = bits (insn1, 8, 10);
1138           *offset = 2;
1139           address = (pc & 0xfffffffc) + 4 + (bits (insn1, 0, 7) << 2);
1140           address = read_memory_unsigned_integer (address, 4,
1141                                                   byte_order_for_code);
1142         }
1143       else if ((insn1 & 0xfbf0) == 0xf240) /* movw Rd, #const */
1144         {
1145           unsigned short insn2
1146             = read_code_unsigned_integer (pc + 2, 2, byte_order_for_code);
1147
1148           low = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1149
1150           insn1
1151             = read_code_unsigned_integer (pc + 4, 2, byte_order_for_code);
1152           insn2
1153             = read_code_unsigned_integer (pc + 6, 2, byte_order_for_code);
1154
1155           /* movt Rd, #const */
1156           if ((insn1 & 0xfbc0) == 0xf2c0)
1157             {
1158               high = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1159               *destreg = bits (insn2, 8, 11);
1160               *offset = 8;
1161               address = (high << 16 | low);
1162             }
1163         }
1164     }
1165   else
1166     {
1167       unsigned int insn
1168         = read_code_unsigned_integer (pc, 4, byte_order_for_code);
1169
1170       if ((insn & 0x0e5f0000) == 0x041f0000) /* ldr Rd, [PC, #immed] */
1171         {
1172           address = bits (insn, 0, 11) + pc + 8;
1173           address = read_memory_unsigned_integer (address, 4,
1174                                                   byte_order_for_code);
1175
1176           *destreg = bits (insn, 12, 15);
1177           *offset = 4;
1178         }
1179       else if ((insn & 0x0ff00000) == 0x03000000) /* movw Rd, #const */
1180         {
1181           low = EXTRACT_MOVW_MOVT_IMM_A (insn);
1182
1183           insn
1184             = read_code_unsigned_integer (pc + 4, 4, byte_order_for_code);
1185
1186           if ((insn & 0x0ff00000) == 0x03400000) /* movt Rd, #const */
1187             {
1188               high = EXTRACT_MOVW_MOVT_IMM_A (insn);
1189               *destreg = bits (insn, 12, 15);
1190               *offset = 8;
1191               address = (high << 16 | low);
1192             }
1193         }
1194     }
1195
1196   return address;
1197 }
1198
1199 /* Try to skip a sequence of instructions used for stack protector.  If PC
1200    points to the first instruction of this sequence, return the address of
1201    first instruction after this sequence, otherwise, return original PC.
1202
1203    On arm, this sequence of instructions is composed of mainly three steps,
1204      Step 1: load symbol __stack_chk_guard,
1205      Step 2: load from address of __stack_chk_guard,
1206      Step 3: store it to somewhere else.
1207
1208    Usually, instructions on step 2 and step 3 are the same on various ARM
1209    architectures.  On step 2, it is one instruction 'ldr Rx, [Rn, #0]', and
1210    on step 3, it is also one instruction 'str Rx, [r7, #immd]'.  However,
1211    instructions in step 1 vary from different ARM architectures.  On ARMv7,
1212    they are,
1213
1214         movw    Rn, #:lower16:__stack_chk_guard
1215         movt    Rn, #:upper16:__stack_chk_guard
1216
1217    On ARMv5t, it is,
1218
1219         ldr     Rn, .Label
1220         ....
1221         .Lable:
1222         .word   __stack_chk_guard
1223
1224    Since ldr/str is a very popular instruction, we can't use them as
1225    'fingerprint' or 'signature' of stack protector sequence.  Here we choose
1226    sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1227    stripped, as the 'fingerprint' of a stack protector cdoe sequence.  */
1228
1229 static CORE_ADDR
1230 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1231 {
1232   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1233   unsigned int basereg;
1234   struct bound_minimal_symbol stack_chk_guard;
1235   int offset;
1236   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1237   CORE_ADDR addr;
1238
1239   /* Try to parse the instructions in Step 1.  */
1240   addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1241                                            &basereg, &offset);
1242   if (!addr)
1243     return pc;
1244
1245   stack_chk_guard = lookup_minimal_symbol_by_pc (addr);
1246   /* ADDR must correspond to a symbol whose name is __stack_chk_guard.
1247      Otherwise, this sequence cannot be for stack protector.  */
1248   if (stack_chk_guard.minsym == NULL
1249       || !startswith (MSYMBOL_LINKAGE_NAME (stack_chk_guard.minsym), "__stack_chk_guard"))
1250    return pc;
1251
1252   if (is_thumb)
1253     {
1254       unsigned int destreg;
1255       unsigned short insn
1256         = read_code_unsigned_integer (pc + offset, 2, byte_order_for_code);
1257
1258       /* Step 2: ldr Rd, [Rn, #immed], encoding T1.  */
1259       if ((insn & 0xf800) != 0x6800)
1260         return pc;
1261       if (bits (insn, 3, 5) != basereg)
1262         return pc;
1263       destreg = bits (insn, 0, 2);
1264
1265       insn = read_code_unsigned_integer (pc + offset + 2, 2,
1266                                          byte_order_for_code);
1267       /* Step 3: str Rd, [Rn, #immed], encoding T1.  */
1268       if ((insn & 0xf800) != 0x6000)
1269         return pc;
1270       if (destreg != bits (insn, 0, 2))
1271         return pc;
1272     }
1273   else
1274     {
1275       unsigned int destreg;
1276       unsigned int insn
1277         = read_code_unsigned_integer (pc + offset, 4, byte_order_for_code);
1278
1279       /* Step 2: ldr Rd, [Rn, #immed], encoding A1.  */
1280       if ((insn & 0x0e500000) != 0x04100000)
1281         return pc;
1282       if (bits (insn, 16, 19) != basereg)
1283         return pc;
1284       destreg = bits (insn, 12, 15);
1285       /* Step 3: str Rd, [Rn, #immed], encoding A1.  */
1286       insn = read_code_unsigned_integer (pc + offset + 4,
1287                                            4, byte_order_for_code);
1288       if ((insn & 0x0e500000) != 0x04000000)
1289         return pc;
1290       if (bits (insn, 12, 15) != destreg)
1291         return pc;
1292     }
1293   /* The size of total two instructions ldr/str is 4 on Thumb-2, while 8
1294      on arm.  */
1295   if (is_thumb)
1296     return pc + offset + 4;
1297   else
1298     return pc + offset + 8;
1299 }
1300
1301 /* Advance the PC across any function entry prologue instructions to
1302    reach some "real" code.
1303
1304    The APCS (ARM Procedure Call Standard) defines the following
1305    prologue:
1306
1307    mov          ip, sp
1308    [stmfd       sp!, {a1,a2,a3,a4}]
1309    stmfd        sp!, {...,fp,ip,lr,pc}
1310    [stfe        f7, [sp, #-12]!]
1311    [stfe        f6, [sp, #-12]!]
1312    [stfe        f5, [sp, #-12]!]
1313    [stfe        f4, [sp, #-12]!]
1314    sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn.  */
1315
1316 static CORE_ADDR
1317 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1318 {
1319   CORE_ADDR func_addr, limit_pc;
1320
1321   /* See if we can determine the end of the prologue via the symbol table.
1322      If so, then return either PC, or the PC after the prologue, whichever
1323      is greater.  */
1324   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1325     {
1326       CORE_ADDR post_prologue_pc
1327         = skip_prologue_using_sal (gdbarch, func_addr);
1328       struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
1329
1330       if (post_prologue_pc)
1331         post_prologue_pc
1332           = arm_skip_stack_protector (post_prologue_pc, gdbarch);
1333
1334
1335       /* GCC always emits a line note before the prologue and another
1336          one after, even if the two are at the same address or on the
1337          same line.  Take advantage of this so that we do not need to
1338          know every instruction that might appear in the prologue.  We
1339          will have producer information for most binaries; if it is
1340          missing (e.g. for -gstabs), assuming the GNU tools.  */
1341       if (post_prologue_pc
1342           && (cust == NULL
1343               || COMPUNIT_PRODUCER (cust) == NULL
1344               || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
1345               || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
1346         return post_prologue_pc;
1347
1348       if (post_prologue_pc != 0)
1349         {
1350           CORE_ADDR analyzed_limit;
1351
1352           /* For non-GCC compilers, make sure the entire line is an
1353              acceptable prologue; GDB will round this function's
1354              return value up to the end of the following line so we
1355              can not skip just part of a line (and we do not want to).
1356
1357              RealView does not treat the prologue specially, but does
1358              associate prologue code with the opening brace; so this
1359              lets us skip the first line if we think it is the opening
1360              brace.  */
1361           if (arm_pc_is_thumb (gdbarch, func_addr))
1362             analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
1363                                                      post_prologue_pc, NULL);
1364           else
1365             analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
1366                                                    post_prologue_pc, NULL);
1367
1368           if (analyzed_limit != post_prologue_pc)
1369             return func_addr;
1370
1371           return post_prologue_pc;
1372         }
1373     }
1374
1375   /* Can't determine prologue from the symbol table, need to examine
1376      instructions.  */
1377
1378   /* Find an upper limit on the function prologue using the debug
1379      information.  If the debug information could not be used to provide
1380      that bound, then use an arbitrary large number as the upper bound.  */
1381   /* Like arm_scan_prologue, stop no later than pc + 64.  */
1382   limit_pc = skip_prologue_using_sal (gdbarch, pc);
1383   if (limit_pc == 0)
1384     limit_pc = pc + 64;          /* Magic.  */
1385
1386
1387   /* Check if this is Thumb code.  */
1388   if (arm_pc_is_thumb (gdbarch, pc))
1389     return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1390   else
1391     return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1392 }
1393
1394 /* *INDENT-OFF* */
1395 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
1396    This function decodes a Thumb function prologue to determine:
1397      1) the size of the stack frame
1398      2) which registers are saved on it
1399      3) the offsets of saved regs
1400      4) the offset from the stack pointer to the frame pointer
1401
1402    A typical Thumb function prologue would create this stack frame
1403    (offsets relative to FP)
1404      old SP ->  24  stack parameters
1405                 20  LR
1406                 16  R7
1407      R7 ->       0  local variables (16 bytes)
1408      SP ->     -12  additional stack space (12 bytes)
1409    The frame size would thus be 36 bytes, and the frame offset would be
1410    12 bytes.  The frame register is R7.
1411    
1412    The comments for thumb_skip_prolog() describe the algorithm we use
1413    to detect the end of the prolog.  */
1414 /* *INDENT-ON* */
1415
1416 static void
1417 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1418                      CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1419 {
1420   CORE_ADDR prologue_start;
1421   CORE_ADDR prologue_end;
1422
1423   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1424                                 &prologue_end))
1425     {
1426       /* See comment in arm_scan_prologue for an explanation of
1427          this heuristics.  */
1428       if (prologue_end > prologue_start + 64)
1429         {
1430           prologue_end = prologue_start + 64;
1431         }
1432     }
1433   else
1434     /* We're in the boondocks: we have no idea where the start of the
1435        function is.  */
1436     return;
1437
1438   prologue_end = std::min (prologue_end, prev_pc);
1439
1440   thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1441 }
1442
1443 /* Return 1 if the ARM instruction INSN restores SP in epilogue, 0
1444    otherwise.  */
1445
1446 static int
1447 arm_instruction_restores_sp (unsigned int insn)
1448 {
1449   if (bits (insn, 28, 31) != INST_NV)
1450     {
1451       if ((insn & 0x0df0f000) == 0x0080d000
1452           /* ADD SP (register or immediate).  */
1453           || (insn & 0x0df0f000) == 0x0040d000
1454           /* SUB SP (register or immediate).  */
1455           || (insn & 0x0ffffff0) == 0x01a0d000
1456           /* MOV SP.  */
1457           || (insn & 0x0fff0000) == 0x08bd0000
1458           /* POP (LDMIA).  */
1459           || (insn & 0x0fff0000) == 0x049d0000)
1460           /* POP of a single register.  */
1461         return 1;
1462     }
1463
1464   return 0;
1465 }
1466
1467 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
1468    continuing no further than PROLOGUE_END.  If CACHE is non-NULL,
1469    fill it in.  Return the first address not recognized as a prologue
1470    instruction.
1471
1472    We recognize all the instructions typically found in ARM prologues,
1473    plus harmless instructions which can be skipped (either for analysis
1474    purposes, or a more restrictive set that can be skipped when finding
1475    the end of the prologue).  */
1476
1477 static CORE_ADDR
1478 arm_analyze_prologue (struct gdbarch *gdbarch,
1479                       CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1480                       struct arm_prologue_cache *cache)
1481 {
1482   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1483   int regno;
1484   CORE_ADDR offset, current_pc;
1485   pv_t regs[ARM_FPS_REGNUM];
1486   CORE_ADDR unrecognized_pc = 0;
1487
1488   /* Search the prologue looking for instructions that set up the
1489      frame pointer, adjust the stack pointer, and save registers.
1490
1491      Be careful, however, and if it doesn't look like a prologue,
1492      don't try to scan it.  If, for instance, a frameless function
1493      begins with stmfd sp!, then we will tell ourselves there is
1494      a frame, which will confuse stack traceback, as well as "finish" 
1495      and other operations that rely on a knowledge of the stack
1496      traceback.  */
1497
1498   for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1499     regs[regno] = pv_register (regno, 0);
1500   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1501
1502   for (current_pc = prologue_start;
1503        current_pc < prologue_end;
1504        current_pc += 4)
1505     {
1506       unsigned int insn
1507         = read_code_unsigned_integer (current_pc, 4, byte_order_for_code);
1508
1509       if (insn == 0xe1a0c00d)           /* mov ip, sp */
1510         {
1511           regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
1512           continue;
1513         }
1514       else if ((insn & 0xfff00000) == 0xe2800000        /* add Rd, Rn, #n */
1515                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1516         {
1517           unsigned imm = insn & 0xff;                   /* immediate value */
1518           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1519           int rd = bits (insn, 12, 15);
1520           imm = (imm >> rot) | (imm << (32 - rot));
1521           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
1522           continue;
1523         }
1524       else if ((insn & 0xfff00000) == 0xe2400000        /* sub Rd, Rn, #n */
1525                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1526         {
1527           unsigned imm = insn & 0xff;                   /* immediate value */
1528           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1529           int rd = bits (insn, 12, 15);
1530           imm = (imm >> rot) | (imm << (32 - rot));
1531           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
1532           continue;
1533         }
1534       else if ((insn & 0xffff0fff) == 0xe52d0004)       /* str Rd,
1535                                                            [sp, #-4]! */
1536         {
1537           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1538             break;
1539           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1540           stack.store (regs[ARM_SP_REGNUM], 4,
1541                        regs[bits (insn, 12, 15)]);
1542           continue;
1543         }
1544       else if ((insn & 0xffff0000) == 0xe92d0000)
1545         /* stmfd sp!, {..., fp, ip, lr, pc}
1546            or
1547            stmfd sp!, {a1, a2, a3, a4}  */
1548         {
1549           int mask = insn & 0xffff;
1550
1551           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1552             break;
1553
1554           /* Calculate offsets of saved registers.  */
1555           for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
1556             if (mask & (1 << regno))
1557               {
1558                 regs[ARM_SP_REGNUM]
1559                   = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1560                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
1561               }
1562         }
1563       else if ((insn & 0xffff0000) == 0xe54b0000        /* strb rx,[r11,#-n] */
1564                || (insn & 0xffff00f0) == 0xe14b00b0     /* strh rx,[r11,#-n] */
1565                || (insn & 0xffffc000) == 0xe50b0000)    /* str  rx,[r11,#-n] */
1566         {
1567           /* No need to add this to saved_regs -- it's just an arg reg.  */
1568           continue;
1569         }
1570       else if ((insn & 0xffff0000) == 0xe5cd0000        /* strb rx,[sp,#n] */
1571                || (insn & 0xffff00f0) == 0xe1cd00b0     /* strh rx,[sp,#n] */
1572                || (insn & 0xffffc000) == 0xe58d0000)    /* str  rx,[sp,#n] */
1573         {
1574           /* No need to add this to saved_regs -- it's just an arg reg.  */
1575           continue;
1576         }
1577       else if ((insn & 0xfff00000) == 0xe8800000        /* stm Rn,
1578                                                            { registers } */
1579                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1580         {
1581           /* No need to add this to saved_regs -- it's just arg regs.  */
1582           continue;
1583         }
1584       else if ((insn & 0xfffff000) == 0xe24cb000)       /* sub fp, ip #n */
1585         {
1586           unsigned imm = insn & 0xff;                   /* immediate value */
1587           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1588           imm = (imm >> rot) | (imm << (32 - rot));
1589           regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
1590         }
1591       else if ((insn & 0xfffff000) == 0xe24dd000)       /* sub sp, sp #n */
1592         {
1593           unsigned imm = insn & 0xff;                   /* immediate value */
1594           unsigned rot = (insn & 0xf00) >> 7;           /* rotate amount */
1595           imm = (imm >> rot) | (imm << (32 - rot));
1596           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
1597         }
1598       else if ((insn & 0xffff7fff) == 0xed6d0103        /* stfe f?,
1599                                                            [sp, -#c]! */
1600                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1601         {
1602           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1603             break;
1604
1605           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1606           regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
1607           stack.store (regs[ARM_SP_REGNUM], 12, regs[regno]);
1608         }
1609       else if ((insn & 0xffbf0fff) == 0xec2d0200        /* sfmfd f0, 4,
1610                                                            [sp!] */
1611                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1612         {
1613           int n_saved_fp_regs;
1614           unsigned int fp_start_reg, fp_bound_reg;
1615
1616           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1617             break;
1618
1619           if ((insn & 0x800) == 0x800)          /* N0 is set */
1620             {
1621               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1622                 n_saved_fp_regs = 3;
1623               else
1624                 n_saved_fp_regs = 1;
1625             }
1626           else
1627             {
1628               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1629                 n_saved_fp_regs = 2;
1630               else
1631                 n_saved_fp_regs = 4;
1632             }
1633
1634           fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1635           fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1636           for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1637             {
1638               regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1639               stack.store (regs[ARM_SP_REGNUM], 12,
1640                            regs[fp_start_reg++]);
1641             }
1642         }
1643       else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1644         {
1645           /* Allow some special function calls when skipping the
1646              prologue; GCC generates these before storing arguments to
1647              the stack.  */
1648           CORE_ADDR dest = BranchDest (current_pc, insn);
1649
1650           if (skip_prologue_function (gdbarch, dest, 0))
1651             continue;
1652           else
1653             break;
1654         }
1655       else if ((insn & 0xf0000000) != 0xe0000000)
1656         break;                  /* Condition not true, exit early.  */
1657       else if (arm_instruction_changes_pc (insn))
1658         /* Don't scan past anything that might change control flow.  */
1659         break;
1660       else if (arm_instruction_restores_sp (insn))
1661         {
1662           /* Don't scan past the epilogue.  */
1663           break;
1664         }
1665       else if ((insn & 0xfe500000) == 0xe8100000        /* ldm */
1666                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1667         /* Ignore block loads from the stack, potentially copying
1668            parameters from memory.  */
1669         continue;
1670       else if ((insn & 0xfc500000) == 0xe4100000
1671                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1672         /* Similarly ignore single loads from the stack.  */
1673         continue;
1674       else if ((insn & 0xffff0ff0) == 0xe1a00000)
1675         /* MOV Rd, Rm.  Skip register copies, i.e. saves to another
1676            register instead of the stack.  */
1677         continue;
1678       else
1679         {
1680           /* The optimizer might shove anything into the prologue, if
1681              we build up cache (cache != NULL) from scanning prologue,
1682              we just skip what we don't recognize and scan further to
1683              make cache as complete as possible.  However, if we skip
1684              prologue, we'll stop immediately on unrecognized
1685              instruction.  */
1686           unrecognized_pc = current_pc;
1687           if (cache != NULL)
1688             continue;
1689           else
1690             break;
1691         }
1692     }
1693
1694   if (unrecognized_pc == 0)
1695     unrecognized_pc = current_pc;
1696
1697   if (cache)
1698     {
1699       int framereg, framesize;
1700
1701       /* The frame size is just the distance from the frame register
1702          to the original stack pointer.  */
1703       if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1704         {
1705           /* Frame pointer is fp.  */
1706           framereg = ARM_FP_REGNUM;
1707           framesize = -regs[ARM_FP_REGNUM].k;
1708         }
1709       else
1710         {
1711           /* Try the stack pointer... this is a bit desperate.  */
1712           framereg = ARM_SP_REGNUM;
1713           framesize = -regs[ARM_SP_REGNUM].k;
1714         }
1715
1716       cache->framereg = framereg;
1717       cache->framesize = framesize;
1718
1719       for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1720         if (stack.find_reg (gdbarch, regno, &offset))
1721           cache->saved_regs[regno].addr = offset;
1722     }
1723
1724   if (arm_debug)
1725     fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1726                         paddress (gdbarch, unrecognized_pc));
1727
1728   return unrecognized_pc;
1729 }
1730
1731 static void
1732 arm_scan_prologue (struct frame_info *this_frame,
1733                    struct arm_prologue_cache *cache)
1734 {
1735   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1736   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1737   CORE_ADDR prologue_start, prologue_end;
1738   CORE_ADDR prev_pc = get_frame_pc (this_frame);
1739   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1740
1741   /* Assume there is no frame until proven otherwise.  */
1742   cache->framereg = ARM_SP_REGNUM;
1743   cache->framesize = 0;
1744
1745   /* Check for Thumb prologue.  */
1746   if (arm_frame_is_thumb (this_frame))
1747     {
1748       thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1749       return;
1750     }
1751
1752   /* Find the function prologue.  If we can't find the function in
1753      the symbol table, peek in the stack frame to find the PC.  */
1754   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1755                                 &prologue_end))
1756     {
1757       /* One way to find the end of the prologue (which works well
1758          for unoptimized code) is to do the following:
1759
1760             struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1761
1762             if (sal.line == 0)
1763               prologue_end = prev_pc;
1764             else if (sal.end < prologue_end)
1765               prologue_end = sal.end;
1766
1767          This mechanism is very accurate so long as the optimizer
1768          doesn't move any instructions from the function body into the
1769          prologue.  If this happens, sal.end will be the last
1770          instruction in the first hunk of prologue code just before
1771          the first instruction that the scheduler has moved from
1772          the body to the prologue.
1773
1774          In order to make sure that we scan all of the prologue
1775          instructions, we use a slightly less accurate mechanism which
1776          may scan more than necessary.  To help compensate for this
1777          lack of accuracy, the prologue scanning loop below contains
1778          several clauses which'll cause the loop to terminate early if
1779          an implausible prologue instruction is encountered.
1780
1781          The expression
1782
1783               prologue_start + 64
1784
1785          is a suitable endpoint since it accounts for the largest
1786          possible prologue plus up to five instructions inserted by
1787          the scheduler.  */
1788
1789       if (prologue_end > prologue_start + 64)
1790         {
1791           prologue_end = prologue_start + 64;   /* See above.  */
1792         }
1793     }
1794   else
1795     {
1796       /* We have no symbol information.  Our only option is to assume this
1797          function has a standard stack frame and the normal frame register.
1798          Then, we can find the value of our frame pointer on entrance to
1799          the callee (or at the present moment if this is the innermost frame).
1800          The value stored there should be the address of the stmfd + 8.  */
1801       CORE_ADDR frame_loc;
1802       ULONGEST return_value;
1803
1804       frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1805       if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
1806                                               &return_value))
1807         return;
1808       else
1809         {
1810           prologue_start = gdbarch_addr_bits_remove
1811                              (gdbarch, return_value) - 8;
1812           prologue_end = prologue_start + 64;   /* See above.  */
1813         }
1814     }
1815
1816   if (prev_pc < prologue_end)
1817     prologue_end = prev_pc;
1818
1819   arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1820 }
1821
1822 static struct arm_prologue_cache *
1823 arm_make_prologue_cache (struct frame_info *this_frame)
1824 {
1825   int reg;
1826   struct arm_prologue_cache *cache;
1827   CORE_ADDR unwound_fp;
1828
1829   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1830   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1831
1832   arm_scan_prologue (this_frame, cache);
1833
1834   unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
1835   if (unwound_fp == 0)
1836     return cache;
1837
1838   cache->prev_sp = unwound_fp + cache->framesize;
1839
1840   /* Calculate actual addresses of saved registers using offsets
1841      determined by arm_scan_prologue.  */
1842   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
1843     if (trad_frame_addr_p (cache->saved_regs, reg))
1844       cache->saved_regs[reg].addr += cache->prev_sp;
1845
1846   return cache;
1847 }
1848
1849 /* Implementation of the stop_reason hook for arm_prologue frames.  */
1850
1851 static enum unwind_stop_reason
1852 arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
1853                                  void **this_cache)
1854 {
1855   struct arm_prologue_cache *cache;
1856   CORE_ADDR pc;
1857
1858   if (*this_cache == NULL)
1859     *this_cache = arm_make_prologue_cache (this_frame);
1860   cache = (struct arm_prologue_cache *) *this_cache;
1861
1862   /* This is meant to halt the backtrace at "_start".  */
1863   pc = get_frame_pc (this_frame);
1864   if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
1865     return UNWIND_OUTERMOST;
1866
1867   /* If we've hit a wall, stop.  */
1868   if (cache->prev_sp == 0)
1869     return UNWIND_OUTERMOST;
1870
1871   return UNWIND_NO_REASON;
1872 }
1873
1874 /* Our frame ID for a normal frame is the current function's starting PC
1875    and the caller's SP when we were called.  */
1876
1877 static void
1878 arm_prologue_this_id (struct frame_info *this_frame,
1879                       void **this_cache,
1880                       struct frame_id *this_id)
1881 {
1882   struct arm_prologue_cache *cache;
1883   struct frame_id id;
1884   CORE_ADDR pc, func;
1885
1886   if (*this_cache == NULL)
1887     *this_cache = arm_make_prologue_cache (this_frame);
1888   cache = (struct arm_prologue_cache *) *this_cache;
1889
1890   /* Use function start address as part of the frame ID.  If we cannot
1891      identify the start address (due to missing symbol information),
1892      fall back to just using the current PC.  */
1893   pc = get_frame_pc (this_frame);
1894   func = get_frame_func (this_frame);
1895   if (!func)
1896     func = pc;
1897
1898   id = frame_id_build (cache->prev_sp, func);
1899   *this_id = id;
1900 }
1901
1902 static struct value *
1903 arm_prologue_prev_register (struct frame_info *this_frame,
1904                             void **this_cache,
1905                             int prev_regnum)
1906 {
1907   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1908   struct arm_prologue_cache *cache;
1909
1910   if (*this_cache == NULL)
1911     *this_cache = arm_make_prologue_cache (this_frame);
1912   cache = (struct arm_prologue_cache *) *this_cache;
1913
1914   /* If we are asked to unwind the PC, then we need to return the LR
1915      instead.  The prologue may save PC, but it will point into this
1916      frame's prologue, not the next frame's resume location.  Also
1917      strip the saved T bit.  A valid LR may have the low bit set, but
1918      a valid PC never does.  */
1919   if (prev_regnum == ARM_PC_REGNUM)
1920     {
1921       CORE_ADDR lr;
1922
1923       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1924       return frame_unwind_got_constant (this_frame, prev_regnum,
1925                                         arm_addr_bits_remove (gdbarch, lr));
1926     }
1927
1928   /* SP is generally not saved to the stack, but this frame is
1929      identified by the next frame's stack pointer at the time of the call.
1930      The value was already reconstructed into PREV_SP.  */
1931   if (prev_regnum == ARM_SP_REGNUM)
1932     return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
1933
1934   /* The CPSR may have been changed by the call instruction and by the
1935      called function.  The only bit we can reconstruct is the T bit,
1936      by checking the low bit of LR as of the call.  This is a reliable
1937      indicator of Thumb-ness except for some ARM v4T pre-interworking
1938      Thumb code, which could get away with a clear low bit as long as
1939      the called function did not use bx.  Guess that all other
1940      bits are unchanged; the condition flags are presumably lost,
1941      but the processor status is likely valid.  */
1942   if (prev_regnum == ARM_PS_REGNUM)
1943     {
1944       CORE_ADDR lr, cpsr;
1945       ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
1946
1947       cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
1948       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1949       if (IS_THUMB_ADDR (lr))
1950         cpsr |= t_bit;
1951       else
1952         cpsr &= ~t_bit;
1953       return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
1954     }
1955
1956   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1957                                        prev_regnum);
1958 }
1959
1960 struct frame_unwind arm_prologue_unwind = {
1961   NORMAL_FRAME,
1962   arm_prologue_unwind_stop_reason,
1963   arm_prologue_this_id,
1964   arm_prologue_prev_register,
1965   NULL,
1966   default_frame_sniffer
1967 };
1968
1969 /* Maintain a list of ARM exception table entries per objfile, similar to the
1970    list of mapping symbols.  We only cache entries for standard ARM-defined
1971    personality routines; the cache will contain only the frame unwinding
1972    instructions associated with the entry (not the descriptors).  */
1973
1974 static const struct objfile_data *arm_exidx_data_key;
1975
1976 struct arm_exidx_entry
1977 {
1978   bfd_vma addr;
1979   gdb_byte *entry;
1980 };
1981 typedef struct arm_exidx_entry arm_exidx_entry_s;
1982 DEF_VEC_O(arm_exidx_entry_s);
1983
1984 struct arm_exidx_data
1985 {
1986   VEC(arm_exidx_entry_s) **section_maps;
1987 };
1988
1989 static void
1990 arm_exidx_data_free (struct objfile *objfile, void *arg)
1991 {
1992   struct arm_exidx_data *data = (struct arm_exidx_data *) arg;
1993   unsigned int i;
1994
1995   for (i = 0; i < objfile->obfd->section_count; i++)
1996     VEC_free (arm_exidx_entry_s, data->section_maps[i]);
1997 }
1998
1999 static inline int
2000 arm_compare_exidx_entries (const struct arm_exidx_entry *lhs,
2001                            const struct arm_exidx_entry *rhs)
2002 {
2003   return lhs->addr < rhs->addr;
2004 }
2005
2006 static struct obj_section *
2007 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
2008 {
2009   struct obj_section *osect;
2010
2011   ALL_OBJFILE_OSECTIONS (objfile, osect)
2012     if (bfd_get_section_flags (objfile->obfd,
2013                                osect->the_bfd_section) & SEC_ALLOC)
2014       {
2015         bfd_vma start, size;
2016         start = bfd_get_section_vma (objfile->obfd, osect->the_bfd_section);
2017         size = bfd_get_section_size (osect->the_bfd_section);
2018
2019         if (start <= vma && vma < start + size)
2020           return osect;
2021       }
2022
2023   return NULL;
2024 }
2025
2026 /* Parse contents of exception table and exception index sections
2027    of OBJFILE, and fill in the exception table entry cache.
2028
2029    For each entry that refers to a standard ARM-defined personality
2030    routine, extract the frame unwinding instructions (from either
2031    the index or the table section).  The unwinding instructions
2032    are normalized by:
2033     - extracting them from the rest of the table data
2034     - converting to host endianness
2035     - appending the implicit 0xb0 ("Finish") code
2036
2037    The extracted and normalized instructions are stored for later
2038    retrieval by the arm_find_exidx_entry routine.  */
2039  
2040 static void
2041 arm_exidx_new_objfile (struct objfile *objfile)
2042 {
2043   struct arm_exidx_data *data;
2044   asection *exidx, *extab;
2045   bfd_vma exidx_vma = 0, extab_vma = 0;
2046   LONGEST i;
2047
2048   /* If we've already touched this file, do nothing.  */
2049   if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
2050     return;
2051
2052   /* Read contents of exception table and index.  */
2053   exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
2054   gdb::byte_vector exidx_data;
2055   if (exidx)
2056     {
2057       exidx_vma = bfd_section_vma (objfile->obfd, exidx);
2058       exidx_data.resize (bfd_get_section_size (exidx));
2059
2060       if (!bfd_get_section_contents (objfile->obfd, exidx,
2061                                      exidx_data.data (), 0,
2062                                      exidx_data.size ()))
2063         return;
2064     }
2065
2066   extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2067   gdb::byte_vector extab_data;
2068   if (extab)
2069     {
2070       extab_vma = bfd_section_vma (objfile->obfd, extab);
2071       extab_data.resize (bfd_get_section_size (extab));
2072
2073       if (!bfd_get_section_contents (objfile->obfd, extab,
2074                                      extab_data.data (), 0,
2075                                      extab_data.size ()))
2076         return;
2077     }
2078
2079   /* Allocate exception table data structure.  */
2080   data = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct arm_exidx_data);
2081   set_objfile_data (objfile, arm_exidx_data_key, data);
2082   data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
2083                                        objfile->obfd->section_count,
2084                                        VEC(arm_exidx_entry_s) *);
2085
2086   /* Fill in exception table.  */
2087   for (i = 0; i < exidx_data.size () / 8; i++)
2088     {
2089       struct arm_exidx_entry new_exidx_entry;
2090       bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data.data () + i * 8);
2091       bfd_vma val = bfd_h_get_32 (objfile->obfd,
2092                                   exidx_data.data () + i * 8 + 4);
2093       bfd_vma addr = 0, word = 0;
2094       int n_bytes = 0, n_words = 0;
2095       struct obj_section *sec;
2096       gdb_byte *entry = NULL;
2097
2098       /* Extract address of start of function.  */
2099       idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2100       idx += exidx_vma + i * 8;
2101
2102       /* Find section containing function and compute section offset.  */
2103       sec = arm_obj_section_from_vma (objfile, idx);
2104       if (sec == NULL)
2105         continue;
2106       idx -= bfd_get_section_vma (objfile->obfd, sec->the_bfd_section);
2107
2108       /* Determine address of exception table entry.  */
2109       if (val == 1)
2110         {
2111           /* EXIDX_CANTUNWIND -- no exception table entry present.  */
2112         }
2113       else if ((val & 0xff000000) == 0x80000000)
2114         {
2115           /* Exception table entry embedded in .ARM.exidx
2116              -- must be short form.  */
2117           word = val;
2118           n_bytes = 3;
2119         }
2120       else if (!(val & 0x80000000))
2121         {
2122           /* Exception table entry in .ARM.extab.  */
2123           addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2124           addr += exidx_vma + i * 8 + 4;
2125
2126           if (addr >= extab_vma && addr + 4 <= extab_vma + extab_data.size ())
2127             {
2128               word = bfd_h_get_32 (objfile->obfd,
2129                                    extab_data.data () + addr - extab_vma);
2130               addr += 4;
2131
2132               if ((word & 0xff000000) == 0x80000000)
2133                 {
2134                   /* Short form.  */
2135                   n_bytes = 3;
2136                 }
2137               else if ((word & 0xff000000) == 0x81000000
2138                        || (word & 0xff000000) == 0x82000000)
2139                 {
2140                   /* Long form.  */
2141                   n_bytes = 2;
2142                   n_words = ((word >> 16) & 0xff);
2143                 }
2144               else if (!(word & 0x80000000))
2145                 {
2146                   bfd_vma pers;
2147                   struct obj_section *pers_sec;
2148                   int gnu_personality = 0;
2149
2150                   /* Custom personality routine.  */
2151                   pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2152                   pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2153
2154                   /* Check whether we've got one of the variants of the
2155                      GNU personality routines.  */
2156                   pers_sec = arm_obj_section_from_vma (objfile, pers);
2157                   if (pers_sec)
2158                     {
2159                       static const char *personality[] = 
2160                         {
2161                           "__gcc_personality_v0",
2162                           "__gxx_personality_v0",
2163                           "__gcj_personality_v0",
2164                           "__gnu_objc_personality_v0",
2165                           NULL
2166                         };
2167
2168                       CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2169                       int k;
2170
2171                       for (k = 0; personality[k]; k++)
2172                         if (lookup_minimal_symbol_by_pc_name
2173                               (pc, personality[k], objfile))
2174                           {
2175                             gnu_personality = 1;
2176                             break;
2177                           }
2178                     }
2179
2180                   /* If so, the next word contains a word count in the high
2181                      byte, followed by the same unwind instructions as the
2182                      pre-defined forms.  */
2183                   if (gnu_personality
2184                       && addr + 4 <= extab_vma + extab_data.size ())
2185                     {
2186                       word = bfd_h_get_32 (objfile->obfd,
2187                                            (extab_data.data ()
2188                                             + addr - extab_vma));
2189                       addr += 4;
2190                       n_bytes = 3;
2191                       n_words = ((word >> 24) & 0xff);
2192                     }
2193                 }
2194             }
2195         }
2196
2197       /* Sanity check address.  */
2198       if (n_words)
2199         if (addr < extab_vma
2200             || addr + 4 * n_words > extab_vma + extab_data.size ())
2201           n_words = n_bytes = 0;
2202
2203       /* The unwind instructions reside in WORD (only the N_BYTES least
2204          significant bytes are valid), followed by N_WORDS words in the
2205          extab section starting at ADDR.  */
2206       if (n_bytes || n_words)
2207         {
2208           gdb_byte *p = entry
2209             = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
2210                                           n_bytes + n_words * 4 + 1);
2211
2212           while (n_bytes--)
2213             *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2214
2215           while (n_words--)
2216             {
2217               word = bfd_h_get_32 (objfile->obfd,
2218                                    extab_data.data () + addr - extab_vma);
2219               addr += 4;
2220
2221               *p++ = (gdb_byte) ((word >> 24) & 0xff);
2222               *p++ = (gdb_byte) ((word >> 16) & 0xff);
2223               *p++ = (gdb_byte) ((word >> 8) & 0xff);
2224               *p++ = (gdb_byte) (word & 0xff);
2225             }
2226
2227           /* Implied "Finish" to terminate the list.  */
2228           *p++ = 0xb0;
2229         }
2230
2231       /* Push entry onto vector.  They are guaranteed to always
2232          appear in order of increasing addresses.  */
2233       new_exidx_entry.addr = idx;
2234       new_exidx_entry.entry = entry;
2235       VEC_safe_push (arm_exidx_entry_s,
2236                      data->section_maps[sec->the_bfd_section->index],
2237                      &new_exidx_entry);
2238     }
2239 }
2240
2241 /* Search for the exception table entry covering MEMADDR.  If one is found,
2242    return a pointer to its data.  Otherwise, return 0.  If START is non-NULL,
2243    set *START to the start of the region covered by this entry.  */
2244
2245 static gdb_byte *
2246 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2247 {
2248   struct obj_section *sec;
2249
2250   sec = find_pc_section (memaddr);
2251   if (sec != NULL)
2252     {
2253       struct arm_exidx_data *data;
2254       VEC(arm_exidx_entry_s) *map;
2255       struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2256       unsigned int idx;
2257
2258       data = ((struct arm_exidx_data *)
2259               objfile_data (sec->objfile, arm_exidx_data_key));
2260       if (data != NULL)
2261         {
2262           map = data->section_maps[sec->the_bfd_section->index];
2263           if (!VEC_empty (arm_exidx_entry_s, map))
2264             {
2265               struct arm_exidx_entry *map_sym;
2266
2267               idx = VEC_lower_bound (arm_exidx_entry_s, map, &map_key,
2268                                      arm_compare_exidx_entries);
2269
2270               /* VEC_lower_bound finds the earliest ordered insertion
2271                  point.  If the following symbol starts at this exact
2272                  address, we use that; otherwise, the preceding
2273                  exception table entry covers this address.  */
2274               if (idx < VEC_length (arm_exidx_entry_s, map))
2275                 {
2276                   map_sym = VEC_index (arm_exidx_entry_s, map, idx);
2277                   if (map_sym->addr == map_key.addr)
2278                     {
2279                       if (start)
2280                         *start = map_sym->addr + obj_section_addr (sec);
2281                       return map_sym->entry;
2282                     }
2283                 }
2284
2285               if (idx > 0)
2286                 {
2287                   map_sym = VEC_index (arm_exidx_entry_s, map, idx - 1);
2288                   if (start)
2289                     *start = map_sym->addr + obj_section_addr (sec);
2290                   return map_sym->entry;
2291                 }
2292             }
2293         }
2294     }
2295
2296   return NULL;
2297 }
2298
2299 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2300    instruction list from the ARM exception table entry ENTRY, allocate and
2301    return a prologue cache structure describing how to unwind this frame.
2302
2303    Return NULL if the unwinding instruction list contains a "spare",
2304    "reserved" or "refuse to unwind" instruction as defined in section
2305    "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2306    for the ARM Architecture" document.  */
2307
2308 static struct arm_prologue_cache *
2309 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2310 {
2311   CORE_ADDR vsp = 0;
2312   int vsp_valid = 0;
2313
2314   struct arm_prologue_cache *cache;
2315   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2316   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2317
2318   for (;;)
2319     {
2320       gdb_byte insn;
2321
2322       /* Whenever we reload SP, we actually have to retrieve its
2323          actual value in the current frame.  */
2324       if (!vsp_valid)
2325         {
2326           if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2327             {
2328               int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2329               vsp = get_frame_register_unsigned (this_frame, reg);
2330             }
2331           else
2332             {
2333               CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
2334               vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2335             }
2336
2337           vsp_valid = 1;
2338         }
2339
2340       /* Decode next unwind instruction.  */
2341       insn = *entry++;
2342
2343       if ((insn & 0xc0) == 0)
2344         {
2345           int offset = insn & 0x3f;
2346           vsp += (offset << 2) + 4;
2347         }
2348       else if ((insn & 0xc0) == 0x40)
2349         {
2350           int offset = insn & 0x3f;
2351           vsp -= (offset << 2) + 4;
2352         }
2353       else if ((insn & 0xf0) == 0x80)
2354         {
2355           int mask = ((insn & 0xf) << 8) | *entry++;
2356           int i;
2357
2358           /* The special case of an all-zero mask identifies
2359              "Refuse to unwind".  We return NULL to fall back
2360              to the prologue analyzer.  */
2361           if (mask == 0)
2362             return NULL;
2363
2364           /* Pop registers r4..r15 under mask.  */
2365           for (i = 0; i < 12; i++)
2366             if (mask & (1 << i))
2367               {
2368                 cache->saved_regs[4 + i].addr = vsp;
2369                 vsp += 4;
2370               }
2371
2372           /* Special-case popping SP -- we need to reload vsp.  */
2373           if (mask & (1 << (ARM_SP_REGNUM - 4)))
2374             vsp_valid = 0;
2375         }
2376       else if ((insn & 0xf0) == 0x90)
2377         {
2378           int reg = insn & 0xf;
2379
2380           /* Reserved cases.  */
2381           if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2382             return NULL;
2383
2384           /* Set SP from another register and mark VSP for reload.  */
2385           cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2386           vsp_valid = 0;
2387         }
2388       else if ((insn & 0xf0) == 0xa0)
2389         {
2390           int count = insn & 0x7;
2391           int pop_lr = (insn & 0x8) != 0;
2392           int i;
2393
2394           /* Pop r4..r[4+count].  */
2395           for (i = 0; i <= count; i++)
2396             {
2397               cache->saved_regs[4 + i].addr = vsp;
2398               vsp += 4;
2399             }
2400
2401           /* If indicated by flag, pop LR as well.  */
2402           if (pop_lr)
2403             {
2404               cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
2405               vsp += 4;
2406             }
2407         }
2408       else if (insn == 0xb0)
2409         {
2410           /* We could only have updated PC by popping into it; if so, it
2411              will show up as address.  Otherwise, copy LR into PC.  */
2412           if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
2413             cache->saved_regs[ARM_PC_REGNUM]
2414               = cache->saved_regs[ARM_LR_REGNUM];
2415
2416           /* We're done.  */
2417           break;
2418         }
2419       else if (insn == 0xb1)
2420         {
2421           int mask = *entry++;
2422           int i;
2423
2424           /* All-zero mask and mask >= 16 is "spare".  */
2425           if (mask == 0 || mask >= 16)
2426             return NULL;
2427
2428           /* Pop r0..r3 under mask.  */
2429           for (i = 0; i < 4; i++)
2430             if (mask & (1 << i))
2431               {
2432                 cache->saved_regs[i].addr = vsp;
2433                 vsp += 4;
2434               }
2435         }
2436       else if (insn == 0xb2)
2437         {
2438           ULONGEST offset = 0;
2439           unsigned shift = 0;
2440
2441           do
2442             {
2443               offset |= (*entry & 0x7f) << shift;
2444               shift += 7;
2445             }
2446           while (*entry++ & 0x80);
2447
2448           vsp += 0x204 + (offset << 2);
2449         }
2450       else if (insn == 0xb3)
2451         {
2452           int start = *entry >> 4;
2453           int count = (*entry++) & 0xf;
2454           int i;
2455
2456           /* Only registers D0..D15 are valid here.  */
2457           if (start + count >= 16)
2458             return NULL;
2459
2460           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2461           for (i = 0; i <= count; i++)
2462             {
2463               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2464               vsp += 8;
2465             }
2466
2467           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2468           vsp += 4;
2469         }
2470       else if ((insn & 0xf8) == 0xb8)
2471         {
2472           int count = insn & 0x7;
2473           int i;
2474
2475           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2476           for (i = 0; i <= count; i++)
2477             {
2478               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2479               vsp += 8;
2480             }
2481
2482           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2483           vsp += 4;
2484         }
2485       else if (insn == 0xc6)
2486         {
2487           int start = *entry >> 4;
2488           int count = (*entry++) & 0xf;
2489           int i;
2490
2491           /* Only registers WR0..WR15 are valid.  */
2492           if (start + count >= 16)
2493             return NULL;
2494
2495           /* Pop iwmmx registers WR[start]..WR[start+count].  */
2496           for (i = 0; i <= count; i++)
2497             {
2498               cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
2499               vsp += 8;
2500             }
2501         }
2502       else if (insn == 0xc7)
2503         {
2504           int mask = *entry++;
2505           int i;
2506
2507           /* All-zero mask and mask >= 16 is "spare".  */
2508           if (mask == 0 || mask >= 16)
2509             return NULL;
2510
2511           /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask.  */
2512           for (i = 0; i < 4; i++)
2513             if (mask & (1 << i))
2514               {
2515                 cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
2516                 vsp += 4;
2517               }
2518         }
2519       else if ((insn & 0xf8) == 0xc0)
2520         {
2521           int count = insn & 0x7;
2522           int i;
2523
2524           /* Pop iwmmx registers WR[10]..WR[10+count].  */
2525           for (i = 0; i <= count; i++)
2526             {
2527               cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
2528               vsp += 8;
2529             }
2530         }
2531       else if (insn == 0xc8)
2532         {
2533           int start = *entry >> 4;
2534           int count = (*entry++) & 0xf;
2535           int i;
2536
2537           /* Only registers D0..D31 are valid.  */
2538           if (start + count >= 16)
2539             return NULL;
2540
2541           /* Pop VFP double-precision registers
2542              D[16+start]..D[16+start+count].  */
2543           for (i = 0; i <= count; i++)
2544             {
2545               cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
2546               vsp += 8;
2547             }
2548         }
2549       else if (insn == 0xc9)
2550         {
2551           int start = *entry >> 4;
2552           int count = (*entry++) & 0xf;
2553           int i;
2554
2555           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2556           for (i = 0; i <= count; i++)
2557             {
2558               cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2559               vsp += 8;
2560             }
2561         }
2562       else if ((insn & 0xf8) == 0xd0)
2563         {
2564           int count = insn & 0x7;
2565           int i;
2566
2567           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2568           for (i = 0; i <= count; i++)
2569             {
2570               cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2571               vsp += 8;
2572             }
2573         }
2574       else
2575         {
2576           /* Everything else is "spare".  */
2577           return NULL;
2578         }
2579     }
2580
2581   /* If we restore SP from a register, assume this was the frame register.
2582      Otherwise just fall back to SP as frame register.  */
2583   if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2584     cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2585   else
2586     cache->framereg = ARM_SP_REGNUM;
2587
2588   /* Determine offset to previous frame.  */
2589   cache->framesize
2590     = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2591
2592   /* We already got the previous SP.  */
2593   cache->prev_sp = vsp;
2594
2595   return cache;
2596 }
2597
2598 /* Unwinding via ARM exception table entries.  Note that the sniffer
2599    already computes a filled-in prologue cache, which is then used
2600    with the same arm_prologue_this_id and arm_prologue_prev_register
2601    routines also used for prologue-parsing based unwinding.  */
2602
2603 static int
2604 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2605                           struct frame_info *this_frame,
2606                           void **this_prologue_cache)
2607 {
2608   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2609   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2610   CORE_ADDR addr_in_block, exidx_region, func_start;
2611   struct arm_prologue_cache *cache;
2612   gdb_byte *entry;
2613
2614   /* See if we have an ARM exception table entry covering this address.  */
2615   addr_in_block = get_frame_address_in_block (this_frame);
2616   entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2617   if (!entry)
2618     return 0;
2619
2620   /* The ARM exception table does not describe unwind information
2621      for arbitrary PC values, but is guaranteed to be correct only
2622      at call sites.  We have to decide here whether we want to use
2623      ARM exception table information for this frame, or fall back
2624      to using prologue parsing.  (Note that if we have DWARF CFI,
2625      this sniffer isn't even called -- CFI is always preferred.)
2626
2627      Before we make this decision, however, we check whether we
2628      actually have *symbol* information for the current frame.
2629      If not, prologue parsing would not work anyway, so we might
2630      as well use the exception table and hope for the best.  */
2631   if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2632     {
2633       int exc_valid = 0;
2634
2635       /* If the next frame is "normal", we are at a call site in this
2636          frame, so exception information is guaranteed to be valid.  */
2637       if (get_next_frame (this_frame)
2638           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2639         exc_valid = 1;
2640
2641       /* We also assume exception information is valid if we're currently
2642          blocked in a system call.  The system library is supposed to
2643          ensure this, so that e.g. pthread cancellation works.  */
2644       if (arm_frame_is_thumb (this_frame))
2645         {
2646           ULONGEST insn;
2647
2648           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
2649                                                  2, byte_order_for_code, &insn)
2650               && (insn & 0xff00) == 0xdf00 /* svc */)
2651             exc_valid = 1;
2652         }
2653       else
2654         {
2655           ULONGEST insn;
2656
2657           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
2658                                                  4, byte_order_for_code, &insn)
2659               && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2660             exc_valid = 1;
2661         }
2662         
2663       /* Bail out if we don't know that exception information is valid.  */
2664       if (!exc_valid)
2665         return 0;
2666
2667      /* The ARM exception index does not mark the *end* of the region
2668         covered by the entry, and some functions will not have any entry.
2669         To correctly recognize the end of the covered region, the linker
2670         should have inserted dummy records with a CANTUNWIND marker.
2671
2672         Unfortunately, current versions of GNU ld do not reliably do
2673         this, and thus we may have found an incorrect entry above.
2674         As a (temporary) sanity check, we only use the entry if it
2675         lies *within* the bounds of the function.  Note that this check
2676         might reject perfectly valid entries that just happen to cover
2677         multiple functions; therefore this check ought to be removed
2678         once the linker is fixed.  */
2679       if (func_start > exidx_region)
2680         return 0;
2681     }
2682
2683   /* Decode the list of unwinding instructions into a prologue cache.
2684      Note that this may fail due to e.g. a "refuse to unwind" code.  */
2685   cache = arm_exidx_fill_cache (this_frame, entry);
2686   if (!cache)
2687     return 0;
2688
2689   *this_prologue_cache = cache;
2690   return 1;
2691 }
2692
2693 struct frame_unwind arm_exidx_unwind = {
2694   NORMAL_FRAME,
2695   default_frame_unwind_stop_reason,
2696   arm_prologue_this_id,
2697   arm_prologue_prev_register,
2698   NULL,
2699   arm_exidx_unwind_sniffer
2700 };
2701
2702 static struct arm_prologue_cache *
2703 arm_make_epilogue_frame_cache (struct frame_info *this_frame)
2704 {
2705   struct arm_prologue_cache *cache;
2706   int reg;
2707
2708   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2709   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2710
2711   /* Still rely on the offset calculated from prologue.  */
2712   arm_scan_prologue (this_frame, cache);
2713
2714   /* Since we are in epilogue, the SP has been restored.  */
2715   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2716
2717   /* Calculate actual addresses of saved registers using offsets
2718      determined by arm_scan_prologue.  */
2719   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2720     if (trad_frame_addr_p (cache->saved_regs, reg))
2721       cache->saved_regs[reg].addr += cache->prev_sp;
2722
2723   return cache;
2724 }
2725
2726 /* Implementation of function hook 'this_id' in
2727    'struct frame_uwnind' for epilogue unwinder.  */
2728
2729 static void
2730 arm_epilogue_frame_this_id (struct frame_info *this_frame,
2731                             void **this_cache,
2732                             struct frame_id *this_id)
2733 {
2734   struct arm_prologue_cache *cache;
2735   CORE_ADDR pc, func;
2736
2737   if (*this_cache == NULL)
2738     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2739   cache = (struct arm_prologue_cache *) *this_cache;
2740
2741   /* Use function start address as part of the frame ID.  If we cannot
2742      identify the start address (due to missing symbol information),
2743      fall back to just using the current PC.  */
2744   pc = get_frame_pc (this_frame);
2745   func = get_frame_func (this_frame);
2746   if (func == 0)
2747     func = pc;
2748
2749   (*this_id) = frame_id_build (cache->prev_sp, pc);
2750 }
2751
2752 /* Implementation of function hook 'prev_register' in
2753    'struct frame_uwnind' for epilogue unwinder.  */
2754
2755 static struct value *
2756 arm_epilogue_frame_prev_register (struct frame_info *this_frame,
2757                                   void **this_cache, int regnum)
2758 {
2759   if (*this_cache == NULL)
2760     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2761
2762   return arm_prologue_prev_register (this_frame, this_cache, regnum);
2763 }
2764
2765 static int arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch,
2766                                           CORE_ADDR pc);
2767 static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
2768                                           CORE_ADDR pc);
2769
2770 /* Implementation of function hook 'sniffer' in
2771    'struct frame_uwnind' for epilogue unwinder.  */
2772
2773 static int
2774 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
2775                             struct frame_info *this_frame,
2776                             void **this_prologue_cache)
2777 {
2778   if (frame_relative_level (this_frame) == 0)
2779     {
2780       struct gdbarch *gdbarch = get_frame_arch (this_frame);
2781       CORE_ADDR pc = get_frame_pc (this_frame);
2782
2783       if (arm_frame_is_thumb (this_frame))
2784         return thumb_stack_frame_destroyed_p (gdbarch, pc);
2785       else
2786         return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
2787     }
2788   else
2789     return 0;
2790 }
2791
2792 /* Frame unwinder from epilogue.  */
2793
2794 static const struct frame_unwind arm_epilogue_frame_unwind =
2795 {
2796   NORMAL_FRAME,
2797   default_frame_unwind_stop_reason,
2798   arm_epilogue_frame_this_id,
2799   arm_epilogue_frame_prev_register,
2800   NULL,
2801   arm_epilogue_frame_sniffer,
2802 };
2803
2804 /* Recognize GCC's trampoline for thumb call-indirect.  If we are in a
2805    trampoline, return the target PC.  Otherwise return 0.
2806
2807    void call0a (char c, short s, int i, long l) {}
2808
2809    int main (void)
2810    {
2811      (*pointer_to_call0a) (c, s, i, l);
2812    }
2813
2814    Instead of calling a stub library function  _call_via_xx (xx is
2815    the register name), GCC may inline the trampoline in the object
2816    file as below (register r2 has the address of call0a).
2817
2818    .global main
2819    .type main, %function
2820    ...
2821    bl .L1
2822    ...
2823    .size main, .-main
2824
2825    .L1:
2826    bx r2
2827
2828    The trampoline 'bx r2' doesn't belong to main.  */
2829
2830 static CORE_ADDR
2831 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2832 {
2833   /* The heuristics of recognizing such trampoline is that FRAME is
2834      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
2835   if (arm_frame_is_thumb (frame))
2836     {
2837       gdb_byte buf[2];
2838
2839       if (target_read_memory (pc, buf, 2) == 0)
2840         {
2841           struct gdbarch *gdbarch = get_frame_arch (frame);
2842           enum bfd_endian byte_order_for_code
2843             = gdbarch_byte_order_for_code (gdbarch);
2844           uint16_t insn
2845             = extract_unsigned_integer (buf, 2, byte_order_for_code);
2846
2847           if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
2848             {
2849               CORE_ADDR dest
2850                 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2851
2852               /* Clear the LSB so that gdb core sets step-resume
2853                  breakpoint at the right address.  */
2854               return UNMAKE_THUMB_ADDR (dest);
2855             }
2856         }
2857     }
2858
2859   return 0;
2860 }
2861
2862 static struct arm_prologue_cache *
2863 arm_make_stub_cache (struct frame_info *this_frame)
2864 {
2865   struct arm_prologue_cache *cache;
2866
2867   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2868   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2869
2870   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2871
2872   return cache;
2873 }
2874
2875 /* Our frame ID for a stub frame is the current SP and LR.  */
2876
2877 static void
2878 arm_stub_this_id (struct frame_info *this_frame,
2879                   void **this_cache,
2880                   struct frame_id *this_id)
2881 {
2882   struct arm_prologue_cache *cache;
2883
2884   if (*this_cache == NULL)
2885     *this_cache = arm_make_stub_cache (this_frame);
2886   cache = (struct arm_prologue_cache *) *this_cache;
2887
2888   *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2889 }
2890
2891 static int
2892 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2893                          struct frame_info *this_frame,
2894                          void **this_prologue_cache)
2895 {
2896   CORE_ADDR addr_in_block;
2897   gdb_byte dummy[4];
2898   CORE_ADDR pc, start_addr;
2899   const char *name;
2900
2901   addr_in_block = get_frame_address_in_block (this_frame);
2902   pc = get_frame_pc (this_frame);
2903   if (in_plt_section (addr_in_block)
2904       /* We also use the stub winder if the target memory is unreadable
2905          to avoid having the prologue unwinder trying to read it.  */
2906       || target_read_memory (pc, dummy, 4) != 0)
2907     return 1;
2908
2909   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2910       && arm_skip_bx_reg (this_frame, pc) != 0)
2911     return 1;
2912
2913   return 0;
2914 }
2915
2916 struct frame_unwind arm_stub_unwind = {
2917   NORMAL_FRAME,
2918   default_frame_unwind_stop_reason,
2919   arm_stub_this_id,
2920   arm_prologue_prev_register,
2921   NULL,
2922   arm_stub_unwind_sniffer
2923 };
2924
2925 /* Put here the code to store, into CACHE->saved_regs, the addresses
2926    of the saved registers of frame described by THIS_FRAME.  CACHE is
2927    returned.  */
2928
2929 static struct arm_prologue_cache *
2930 arm_m_exception_cache (struct frame_info *this_frame)
2931 {
2932   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2933   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2934   struct arm_prologue_cache *cache;
2935   CORE_ADDR unwound_sp;
2936   LONGEST xpsr;
2937
2938   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2939   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2940
2941   unwound_sp = get_frame_register_unsigned (this_frame,
2942                                             ARM_SP_REGNUM);
2943
2944   /* The hardware saves eight 32-bit words, comprising xPSR,
2945      ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
2946      "B1.5.6 Exception entry behavior" in
2947      "ARMv7-M Architecture Reference Manual".  */
2948   cache->saved_regs[0].addr = unwound_sp;
2949   cache->saved_regs[1].addr = unwound_sp + 4;
2950   cache->saved_regs[2].addr = unwound_sp + 8;
2951   cache->saved_regs[3].addr = unwound_sp + 12;
2952   cache->saved_regs[12].addr = unwound_sp + 16;
2953   cache->saved_regs[14].addr = unwound_sp + 20;
2954   cache->saved_regs[15].addr = unwound_sp + 24;
2955   cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
2956
2957   /* If bit 9 of the saved xPSR is set, then there is a four-byte
2958      aligner between the top of the 32-byte stack frame and the
2959      previous context's stack pointer.  */
2960   cache->prev_sp = unwound_sp + 32;
2961   if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
2962       && (xpsr & (1 << 9)) != 0)
2963     cache->prev_sp += 4;
2964
2965   return cache;
2966 }
2967
2968 /* Implementation of function hook 'this_id' in
2969    'struct frame_uwnind'.  */
2970
2971 static void
2972 arm_m_exception_this_id (struct frame_info *this_frame,
2973                          void **this_cache,
2974                          struct frame_id *this_id)
2975 {
2976   struct arm_prologue_cache *cache;
2977
2978   if (*this_cache == NULL)
2979     *this_cache = arm_m_exception_cache (this_frame);
2980   cache = (struct arm_prologue_cache *) *this_cache;
2981
2982   /* Our frame ID for a stub frame is the current SP and LR.  */
2983   *this_id = frame_id_build (cache->prev_sp,
2984                              get_frame_pc (this_frame));
2985 }
2986
2987 /* Implementation of function hook 'prev_register' in
2988    'struct frame_uwnind'.  */
2989
2990 static struct value *
2991 arm_m_exception_prev_register (struct frame_info *this_frame,
2992                                void **this_cache,
2993                                int prev_regnum)
2994 {
2995   struct arm_prologue_cache *cache;
2996
2997   if (*this_cache == NULL)
2998     *this_cache = arm_m_exception_cache (this_frame);
2999   cache = (struct arm_prologue_cache *) *this_cache;
3000
3001   /* The value was already reconstructed into PREV_SP.  */
3002   if (prev_regnum == ARM_SP_REGNUM)
3003     return frame_unwind_got_constant (this_frame, prev_regnum,
3004                                       cache->prev_sp);
3005
3006   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3007                                        prev_regnum);
3008 }
3009
3010 /* Implementation of function hook 'sniffer' in
3011    'struct frame_uwnind'.  */
3012
3013 static int
3014 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3015                                 struct frame_info *this_frame,
3016                                 void **this_prologue_cache)
3017 {
3018   CORE_ADDR this_pc = get_frame_pc (this_frame);
3019
3020   /* No need to check is_m; this sniffer is only registered for
3021      M-profile architectures.  */
3022
3023   /* Check if exception frame returns to a magic PC value.  */
3024   return arm_m_addr_is_magic (this_pc);
3025 }
3026
3027 /* Frame unwinder for M-profile exceptions.  */
3028
3029 struct frame_unwind arm_m_exception_unwind =
3030 {
3031   SIGTRAMP_FRAME,
3032   default_frame_unwind_stop_reason,
3033   arm_m_exception_this_id,
3034   arm_m_exception_prev_register,
3035   NULL,
3036   arm_m_exception_unwind_sniffer
3037 };
3038
3039 static CORE_ADDR
3040 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3041 {
3042   struct arm_prologue_cache *cache;
3043
3044   if (*this_cache == NULL)
3045     *this_cache = arm_make_prologue_cache (this_frame);
3046   cache = (struct arm_prologue_cache *) *this_cache;
3047
3048   return cache->prev_sp - cache->framesize;
3049 }
3050
3051 struct frame_base arm_normal_base = {
3052   &arm_prologue_unwind,
3053   arm_normal_frame_base,
3054   arm_normal_frame_base,
3055   arm_normal_frame_base
3056 };
3057
3058 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
3059    dummy frame.  The frame ID's base needs to match the TOS value
3060    saved by save_dummy_frame_tos() and returned from
3061    arm_push_dummy_call, and the PC needs to match the dummy frame's
3062    breakpoint.  */
3063
3064 static struct frame_id
3065 arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3066 {
3067   return frame_id_build (get_frame_register_unsigned (this_frame,
3068                                                       ARM_SP_REGNUM),
3069                          get_frame_pc (this_frame));
3070 }
3071
3072 /* Given THIS_FRAME, find the previous frame's resume PC (which will
3073    be used to construct the previous frame's ID, after looking up the
3074    containing function).  */
3075
3076 static CORE_ADDR
3077 arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
3078 {
3079   CORE_ADDR pc;
3080   pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
3081   return arm_addr_bits_remove (gdbarch, pc);
3082 }
3083
3084 static CORE_ADDR
3085 arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
3086 {
3087   return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
3088 }
3089
3090 static struct value *
3091 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3092                           int regnum)
3093 {
3094   struct gdbarch * gdbarch = get_frame_arch (this_frame);
3095   CORE_ADDR lr, cpsr;
3096   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3097
3098   switch (regnum)
3099     {
3100     case ARM_PC_REGNUM:
3101       /* The PC is normally copied from the return column, which
3102          describes saves of LR.  However, that version may have an
3103          extra bit set to indicate Thumb state.  The bit is not
3104          part of the PC.  */
3105       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3106       return frame_unwind_got_constant (this_frame, regnum,
3107                                         arm_addr_bits_remove (gdbarch, lr));
3108
3109     case ARM_PS_REGNUM:
3110       /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
3111       cpsr = get_frame_register_unsigned (this_frame, regnum);
3112       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3113       if (IS_THUMB_ADDR (lr))
3114         cpsr |= t_bit;
3115       else
3116         cpsr &= ~t_bit;
3117       return frame_unwind_got_constant (this_frame, regnum, cpsr);
3118
3119     default:
3120       internal_error (__FILE__, __LINE__,
3121                       _("Unexpected register %d"), regnum);
3122     }
3123 }
3124
3125 static void
3126 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3127                            struct dwarf2_frame_state_reg *reg,
3128                            struct frame_info *this_frame)
3129 {
3130   switch (regnum)
3131     {
3132     case ARM_PC_REGNUM:
3133     case ARM_PS_REGNUM:
3134       reg->how = DWARF2_FRAME_REG_FN;
3135       reg->loc.fn = arm_dwarf2_prev_register;
3136       break;
3137     case ARM_SP_REGNUM:
3138       reg->how = DWARF2_FRAME_REG_CFA;
3139       break;
3140     }
3141 }
3142
3143 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3144
3145 static int
3146 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3147 {
3148   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3149   unsigned int insn, insn2;
3150   int found_return = 0, found_stack_adjust = 0;
3151   CORE_ADDR func_start, func_end;
3152   CORE_ADDR scan_pc;
3153   gdb_byte buf[4];
3154
3155   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3156     return 0;
3157
3158   /* The epilogue is a sequence of instructions along the following lines:
3159
3160     - add stack frame size to SP or FP
3161     - [if frame pointer used] restore SP from FP
3162     - restore registers from SP [may include PC]
3163     - a return-type instruction [if PC wasn't already restored]
3164
3165     In a first pass, we scan forward from the current PC and verify the
3166     instructions we find as compatible with this sequence, ending in a
3167     return instruction.
3168
3169     However, this is not sufficient to distinguish indirect function calls
3170     within a function from indirect tail calls in the epilogue in some cases.
3171     Therefore, if we didn't already find any SP-changing instruction during
3172     forward scan, we add a backward scanning heuristic to ensure we actually
3173     are in the epilogue.  */
3174
3175   scan_pc = pc;
3176   while (scan_pc < func_end && !found_return)
3177     {
3178       if (target_read_memory (scan_pc, buf, 2))
3179         break;
3180
3181       scan_pc += 2;
3182       insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3183
3184       if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
3185         found_return = 1;
3186       else if (insn == 0x46f7)  /* mov pc, lr */
3187         found_return = 1;
3188       else if (thumb_instruction_restores_sp (insn))
3189         {
3190           if ((insn & 0xff00) == 0xbd00)  /* pop <registers, PC> */
3191             found_return = 1;
3192         }
3193       else if (thumb_insn_size (insn) == 4)  /* 32-bit Thumb-2 instruction */
3194         {
3195           if (target_read_memory (scan_pc, buf, 2))
3196             break;
3197
3198           scan_pc += 2;
3199           insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3200
3201           if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3202             {
3203               if (insn2 & 0x8000)  /* <registers> include PC.  */
3204                 found_return = 1;
3205             }
3206           else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3207                    && (insn2 & 0x0fff) == 0x0b04)
3208             {
3209               if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC.  */
3210                 found_return = 1;
3211             }
3212           else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3213                    && (insn2 & 0x0e00) == 0x0a00)
3214             ;
3215           else
3216             break;
3217         }
3218       else
3219         break;
3220     }
3221
3222   if (!found_return)
3223     return 0;
3224
3225   /* Since any instruction in the epilogue sequence, with the possible
3226      exception of return itself, updates the stack pointer, we need to
3227      scan backwards for at most one instruction.  Try either a 16-bit or
3228      a 32-bit instruction.  This is just a heuristic, so we do not worry
3229      too much about false positives.  */
3230
3231   if (pc - 4 < func_start)
3232     return 0;
3233   if (target_read_memory (pc - 4, buf, 4))
3234     return 0;
3235
3236   insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3237   insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3238
3239   if (thumb_instruction_restores_sp (insn2))
3240     found_stack_adjust = 1;
3241   else if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3242     found_stack_adjust = 1;
3243   else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3244            && (insn2 & 0x0fff) == 0x0b04)
3245     found_stack_adjust = 1;
3246   else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3247            && (insn2 & 0x0e00) == 0x0a00)
3248     found_stack_adjust = 1;
3249
3250   return found_stack_adjust;
3251 }
3252
3253 static int
3254 arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
3255 {
3256   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3257   unsigned int insn;
3258   int found_return;
3259   CORE_ADDR func_start, func_end;
3260
3261   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3262     return 0;
3263
3264   /* We are in the epilogue if the previous instruction was a stack
3265      adjustment and the next instruction is a possible return (bx, mov
3266      pc, or pop).  We could have to scan backwards to find the stack
3267      adjustment, or forwards to find the return, but this is a decent
3268      approximation.  First scan forwards.  */
3269
3270   found_return = 0;
3271   insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3272   if (bits (insn, 28, 31) != INST_NV)
3273     {
3274       if ((insn & 0x0ffffff0) == 0x012fff10)
3275         /* BX.  */
3276         found_return = 1;
3277       else if ((insn & 0x0ffffff0) == 0x01a0f000)
3278         /* MOV PC.  */
3279         found_return = 1;
3280       else if ((insn & 0x0fff0000) == 0x08bd0000
3281           && (insn & 0x0000c000) != 0)
3282         /* POP (LDMIA), including PC or LR.  */
3283         found_return = 1;
3284     }
3285
3286   if (!found_return)
3287     return 0;
3288
3289   /* Scan backwards.  This is just a heuristic, so do not worry about
3290      false positives from mode changes.  */
3291
3292   if (pc < func_start + 4)
3293     return 0;
3294
3295   insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3296   if (arm_instruction_restores_sp (insn))
3297     return 1;
3298
3299   return 0;
3300 }
3301
3302 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3303
3304 static int
3305 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3306 {
3307   if (arm_pc_is_thumb (gdbarch, pc))
3308     return thumb_stack_frame_destroyed_p (gdbarch, pc);
3309   else
3310     return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
3311 }
3312
3313 /* When arguments must be pushed onto the stack, they go on in reverse
3314    order.  The code below implements a FILO (stack) to do this.  */
3315
3316 struct stack_item
3317 {
3318   int len;
3319   struct stack_item *prev;
3320   gdb_byte *data;
3321 };
3322
3323 static struct stack_item *
3324 push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
3325 {
3326   struct stack_item *si;
3327   si = XNEW (struct stack_item);
3328   si->data = (gdb_byte *) xmalloc (len);
3329   si->len = len;
3330   si->prev = prev;
3331   memcpy (si->data, contents, len);
3332   return si;
3333 }
3334
3335 static struct stack_item *
3336 pop_stack_item (struct stack_item *si)
3337 {
3338   struct stack_item *dead = si;
3339   si = si->prev;
3340   xfree (dead->data);
3341   xfree (dead);
3342   return si;
3343 }
3344
3345
3346 /* Return the alignment (in bytes) of the given type.  */
3347
3348 static int
3349 arm_type_align (struct type *t)
3350 {
3351   int n;
3352   int align;
3353   int falign;
3354
3355   t = check_typedef (t);
3356   switch (TYPE_CODE (t))
3357     {
3358     default:
3359       /* Should never happen.  */
3360       internal_error (__FILE__, __LINE__, _("unknown type alignment"));
3361       return 4;
3362
3363     case TYPE_CODE_PTR:
3364     case TYPE_CODE_ENUM:
3365     case TYPE_CODE_INT:
3366     case TYPE_CODE_FLT:
3367     case TYPE_CODE_SET:
3368     case TYPE_CODE_RANGE:
3369     case TYPE_CODE_REF:
3370     case TYPE_CODE_RVALUE_REF:
3371     case TYPE_CODE_CHAR:
3372     case TYPE_CODE_BOOL:
3373       return TYPE_LENGTH (t);
3374
3375     case TYPE_CODE_ARRAY:
3376       if (TYPE_VECTOR (t))
3377         {
3378           /* Use the natural alignment for vector types (the same for
3379              scalar type), but the maximum alignment is 64-bit.  */
3380           if (TYPE_LENGTH (t) > 8)
3381             return 8;
3382           else
3383             return TYPE_LENGTH (t);
3384         }
3385       else
3386         return arm_type_align (TYPE_TARGET_TYPE (t));
3387     case TYPE_CODE_COMPLEX:
3388       return arm_type_align (TYPE_TARGET_TYPE (t));
3389
3390     case TYPE_CODE_STRUCT:
3391     case TYPE_CODE_UNION:
3392       align = 1;
3393       for (n = 0; n < TYPE_NFIELDS (t); n++)
3394         {
3395           falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
3396           if (falign > align)
3397             align = falign;
3398         }
3399       return align;
3400     }
3401 }
3402
3403 /* Possible base types for a candidate for passing and returning in
3404    VFP registers.  */
3405
3406 enum arm_vfp_cprc_base_type
3407 {
3408   VFP_CPRC_UNKNOWN,
3409   VFP_CPRC_SINGLE,
3410   VFP_CPRC_DOUBLE,
3411   VFP_CPRC_VEC64,
3412   VFP_CPRC_VEC128
3413 };
3414
3415 /* The length of one element of base type B.  */
3416
3417 static unsigned
3418 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3419 {
3420   switch (b)
3421     {
3422     case VFP_CPRC_SINGLE:
3423       return 4;
3424     case VFP_CPRC_DOUBLE:
3425       return 8;
3426     case VFP_CPRC_VEC64:
3427       return 8;
3428     case VFP_CPRC_VEC128:
3429       return 16;
3430     default:
3431       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3432                       (int) b);
3433     }
3434 }
3435
3436 /* The character ('s', 'd' or 'q') for the type of VFP register used
3437    for passing base type B.  */
3438
3439 static int
3440 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3441 {
3442   switch (b)
3443     {
3444     case VFP_CPRC_SINGLE:
3445       return 's';
3446     case VFP_CPRC_DOUBLE:
3447       return 'd';
3448     case VFP_CPRC_VEC64:
3449       return 'd';
3450     case VFP_CPRC_VEC128:
3451       return 'q';
3452     default:
3453       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3454                       (int) b);
3455     }
3456 }
3457
3458 /* Determine whether T may be part of a candidate for passing and
3459    returning in VFP registers, ignoring the limit on the total number
3460    of components.  If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3461    classification of the first valid component found; if it is not
3462    VFP_CPRC_UNKNOWN, all components must have the same classification
3463    as *BASE_TYPE.  If it is found that T contains a type not permitted
3464    for passing and returning in VFP registers, a type differently
3465    classified from *BASE_TYPE, or two types differently classified
3466    from each other, return -1, otherwise return the total number of
3467    base-type elements found (possibly 0 in an empty structure or
3468    array).  Vector types are not currently supported, matching the
3469    generic AAPCS support.  */
3470
3471 static int
3472 arm_vfp_cprc_sub_candidate (struct type *t,
3473                             enum arm_vfp_cprc_base_type *base_type)
3474 {
3475   t = check_typedef (t);
3476   switch (TYPE_CODE (t))
3477     {
3478     case TYPE_CODE_FLT:
3479       switch (TYPE_LENGTH (t))
3480         {
3481         case 4:
3482           if (*base_type == VFP_CPRC_UNKNOWN)
3483             *base_type = VFP_CPRC_SINGLE;
3484           else if (*base_type != VFP_CPRC_SINGLE)
3485             return -1;
3486           return 1;
3487
3488         case 8:
3489           if (*base_type == VFP_CPRC_UNKNOWN)
3490             *base_type = VFP_CPRC_DOUBLE;
3491           else if (*base_type != VFP_CPRC_DOUBLE)
3492             return -1;
3493           return 1;
3494
3495         default:
3496           return -1;
3497         }
3498       break;
3499
3500     case TYPE_CODE_COMPLEX:
3501       /* Arguments of complex T where T is one of the types float or
3502          double get treated as if they are implemented as:
3503
3504          struct complexT
3505          {
3506            T real;
3507            T imag;
3508          };
3509
3510       */
3511       switch (TYPE_LENGTH (t))
3512         {
3513         case 8:
3514           if (*base_type == VFP_CPRC_UNKNOWN)
3515             *base_type = VFP_CPRC_SINGLE;
3516           else if (*base_type != VFP_CPRC_SINGLE)
3517             return -1;
3518           return 2;
3519
3520         case 16:
3521           if (*base_type == VFP_CPRC_UNKNOWN)
3522             *base_type = VFP_CPRC_DOUBLE;
3523           else if (*base_type != VFP_CPRC_DOUBLE)
3524             return -1;
3525           return 2;
3526
3527         default:
3528           return -1;
3529         }
3530       break;
3531
3532     case TYPE_CODE_ARRAY:
3533       {
3534         if (TYPE_VECTOR (t))
3535           {
3536             /* A 64-bit or 128-bit containerized vector type are VFP
3537                CPRCs.  */
3538             switch (TYPE_LENGTH (t))
3539               {
3540               case 8:
3541                 if (*base_type == VFP_CPRC_UNKNOWN)
3542                   *base_type = VFP_CPRC_VEC64;
3543                 return 1;
3544               case 16:
3545                 if (*base_type == VFP_CPRC_UNKNOWN)
3546                   *base_type = VFP_CPRC_VEC128;
3547                 return 1;
3548               default:
3549                 return -1;
3550               }
3551           }
3552         else
3553           {
3554             int count;
3555             unsigned unitlen;
3556
3557             count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
3558                                                 base_type);
3559             if (count == -1)
3560               return -1;
3561             if (TYPE_LENGTH (t) == 0)
3562               {
3563                 gdb_assert (count == 0);
3564                 return 0;
3565               }
3566             else if (count == 0)
3567               return -1;
3568             unitlen = arm_vfp_cprc_unit_length (*base_type);
3569             gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3570             return TYPE_LENGTH (t) / unitlen;
3571           }
3572       }
3573       break;
3574
3575     case TYPE_CODE_STRUCT:
3576       {
3577         int count = 0;
3578         unsigned unitlen;
3579         int i;
3580         for (i = 0; i < TYPE_NFIELDS (t); i++)
3581           {
3582             int sub_count = 0;
3583
3584             if (!field_is_static (&TYPE_FIELD (t, i)))
3585               sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3586                                                       base_type);
3587             if (sub_count == -1)
3588               return -1;
3589             count += sub_count;
3590           }
3591         if (TYPE_LENGTH (t) == 0)
3592           {
3593             gdb_assert (count == 0);
3594             return 0;
3595           }
3596         else if (count == 0)
3597           return -1;
3598         unitlen = arm_vfp_cprc_unit_length (*base_type);
3599         if (TYPE_LENGTH (t) != unitlen * count)
3600           return -1;
3601         return count;
3602       }
3603
3604     case TYPE_CODE_UNION:
3605       {
3606         int count = 0;
3607         unsigned unitlen;
3608         int i;
3609         for (i = 0; i < TYPE_NFIELDS (t); i++)
3610           {
3611             int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3612                                                         base_type);
3613             if (sub_count == -1)
3614               return -1;
3615             count = (count > sub_count ? count : sub_count);
3616           }
3617         if (TYPE_LENGTH (t) == 0)
3618           {
3619             gdb_assert (count == 0);
3620             return 0;
3621           }
3622         else if (count == 0)
3623           return -1;
3624         unitlen = arm_vfp_cprc_unit_length (*base_type);
3625         if (TYPE_LENGTH (t) != unitlen * count)
3626           return -1;
3627         return count;
3628       }
3629
3630     default:
3631       break;
3632     }
3633
3634   return -1;
3635 }
3636
3637 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3638    if passed to or returned from a non-variadic function with the VFP
3639    ABI in effect.  Return 1 if it is, 0 otherwise.  If it is, set
3640    *BASE_TYPE to the base type for T and *COUNT to the number of
3641    elements of that base type before returning.  */
3642
3643 static int
3644 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3645                         int *count)
3646 {
3647   enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3648   int c = arm_vfp_cprc_sub_candidate (t, &b);
3649   if (c <= 0 || c > 4)
3650     return 0;
3651   *base_type = b;
3652   *count = c;
3653   return 1;
3654 }
3655
3656 /* Return 1 if the VFP ABI should be used for passing arguments to and
3657    returning values from a function of type FUNC_TYPE, 0
3658    otherwise.  */
3659
3660 static int
3661 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3662 {
3663   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3664   /* Variadic functions always use the base ABI.  Assume that functions
3665      without debug info are not variadic.  */
3666   if (func_type && TYPE_VARARGS (check_typedef (func_type)))
3667     return 0;
3668   /* The VFP ABI is only supported as a variant of AAPCS.  */
3669   if (tdep->arm_abi != ARM_ABI_AAPCS)
3670     return 0;
3671   return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3672 }
3673
3674 /* We currently only support passing parameters in integer registers, which
3675    conforms with GCC's default model, and VFP argument passing following
3676    the VFP variant of AAPCS.  Several other variants exist and
3677    we should probably support some of them based on the selected ABI.  */
3678
3679 static CORE_ADDR
3680 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3681                      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3682                      struct value **args, CORE_ADDR sp, int struct_return,
3683                      CORE_ADDR struct_addr)
3684 {
3685   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3686   int argnum;
3687   int argreg;
3688   int nstack;
3689   struct stack_item *si = NULL;
3690   int use_vfp_abi;
3691   struct type *ftype;
3692   unsigned vfp_regs_free = (1 << 16) - 1;
3693
3694   /* Determine the type of this function and whether the VFP ABI
3695      applies.  */
3696   ftype = check_typedef (value_type (function));
3697   if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
3698     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3699   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3700
3701   /* Set the return address.  For the ARM, the return breakpoint is
3702      always at BP_ADDR.  */
3703   if (arm_pc_is_thumb (gdbarch, bp_addr))
3704     bp_addr |= 1;
3705   regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3706
3707   /* Walk through the list of args and determine how large a temporary
3708      stack is required.  Need to take care here as structs may be
3709      passed on the stack, and we have to push them.  */
3710   nstack = 0;
3711
3712   argreg = ARM_A1_REGNUM;
3713   nstack = 0;
3714
3715   /* The struct_return pointer occupies the first parameter
3716      passing register.  */
3717   if (struct_return)
3718     {
3719       if (arm_debug)
3720         fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
3721                             gdbarch_register_name (gdbarch, argreg),
3722                             paddress (gdbarch, struct_addr));
3723       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3724       argreg++;
3725     }
3726
3727   for (argnum = 0; argnum < nargs; argnum++)
3728     {
3729       int len;
3730       struct type *arg_type;
3731       struct type *target_type;
3732       enum type_code typecode;
3733       const bfd_byte *val;
3734       int align;
3735       enum arm_vfp_cprc_base_type vfp_base_type;
3736       int vfp_base_count;
3737       int may_use_core_reg = 1;
3738
3739       arg_type = check_typedef (value_type (args[argnum]));
3740       len = TYPE_LENGTH (arg_type);
3741       target_type = TYPE_TARGET_TYPE (arg_type);
3742       typecode = TYPE_CODE (arg_type);
3743       val = value_contents (args[argnum]);
3744
3745       align = arm_type_align (arg_type);
3746       /* Round alignment up to a whole number of words.  */
3747       align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
3748       /* Different ABIs have different maximum alignments.  */
3749       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3750         {
3751           /* The APCS ABI only requires word alignment.  */
3752           align = INT_REGISTER_SIZE;
3753         }
3754       else
3755         {
3756           /* The AAPCS requires at most doubleword alignment.  */
3757           if (align > INT_REGISTER_SIZE * 2)
3758             align = INT_REGISTER_SIZE * 2;
3759         }
3760
3761       if (use_vfp_abi
3762           && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3763                                      &vfp_base_count))
3764         {
3765           int regno;
3766           int unit_length;
3767           int shift;
3768           unsigned mask;
3769
3770           /* Because this is a CPRC it cannot go in a core register or
3771              cause a core register to be skipped for alignment.
3772              Either it goes in VFP registers and the rest of this loop
3773              iteration is skipped for this argument, or it goes on the
3774              stack (and the stack alignment code is correct for this
3775              case).  */
3776           may_use_core_reg = 0;
3777
3778           unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3779           shift = unit_length / 4;
3780           mask = (1 << (shift * vfp_base_count)) - 1;
3781           for (regno = 0; regno < 16; regno += shift)
3782             if (((vfp_regs_free >> regno) & mask) == mask)
3783               break;
3784
3785           if (regno < 16)
3786             {
3787               int reg_char;
3788               int reg_scaled;
3789               int i;
3790
3791               vfp_regs_free &= ~(mask << regno);
3792               reg_scaled = regno / shift;
3793               reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3794               for (i = 0; i < vfp_base_count; i++)
3795                 {
3796                   char name_buf[4];
3797                   int regnum;
3798                   if (reg_char == 'q')
3799                     arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3800                                          val + i * unit_length);
3801                   else
3802                     {
3803                       xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3804                                  reg_char, reg_scaled + i);
3805                       regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3806                                                             strlen (name_buf));
3807                       regcache_cooked_write (regcache, regnum,
3808                                              val + i * unit_length);
3809                     }
3810                 }
3811               continue;
3812             }
3813           else
3814             {
3815               /* This CPRC could not go in VFP registers, so all VFP
3816                  registers are now marked as used.  */
3817               vfp_regs_free = 0;
3818             }
3819         }
3820
3821       /* Push stack padding for dowubleword alignment.  */
3822       if (nstack & (align - 1))
3823         {
3824           si = push_stack_item (si, val, INT_REGISTER_SIZE);
3825           nstack += INT_REGISTER_SIZE;
3826         }
3827       
3828       /* Doubleword aligned quantities must go in even register pairs.  */
3829       if (may_use_core_reg
3830           && argreg <= ARM_LAST_ARG_REGNUM
3831           && align > INT_REGISTER_SIZE
3832           && argreg & 1)
3833         argreg++;
3834
3835       /* If the argument is a pointer to a function, and it is a
3836          Thumb function, create a LOCAL copy of the value and set
3837          the THUMB bit in it.  */
3838       if (TYPE_CODE_PTR == typecode
3839           && target_type != NULL
3840           && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3841         {
3842           CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3843           if (arm_pc_is_thumb (gdbarch, regval))
3844             {
3845               bfd_byte *copy = (bfd_byte *) alloca (len);
3846               store_unsigned_integer (copy, len, byte_order,
3847                                       MAKE_THUMB_ADDR (regval));
3848               val = copy;
3849             }
3850         }
3851
3852       /* Copy the argument to general registers or the stack in
3853          register-sized pieces.  Large arguments are split between
3854          registers and stack.  */
3855       while (len > 0)
3856         {
3857           int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3858           CORE_ADDR regval
3859             = extract_unsigned_integer (val, partial_len, byte_order);
3860
3861           if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3862             {
3863               /* The argument is being passed in a general purpose
3864                  register.  */
3865               if (byte_order == BFD_ENDIAN_BIG)
3866                 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3867               if (arm_debug)
3868                 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3869                                     argnum,
3870                                     gdbarch_register_name
3871                                       (gdbarch, argreg),
3872                                     phex (regval, INT_REGISTER_SIZE));
3873               regcache_cooked_write_unsigned (regcache, argreg, regval);
3874               argreg++;
3875             }
3876           else
3877             {
3878               gdb_byte buf[INT_REGISTER_SIZE];
3879
3880               memset (buf, 0, sizeof (buf));
3881               store_unsigned_integer (buf, partial_len, byte_order, regval);
3882
3883               /* Push the arguments onto the stack.  */
3884               if (arm_debug)
3885                 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3886                                     argnum, nstack);
3887               si = push_stack_item (si, buf, INT_REGISTER_SIZE);
3888               nstack += INT_REGISTER_SIZE;
3889             }
3890               
3891           len -= partial_len;
3892           val += partial_len;
3893         }
3894     }
3895   /* If we have an odd number of words to push, then decrement the stack
3896      by one word now, so first stack argument will be dword aligned.  */
3897   if (nstack & 4)
3898     sp -= 4;
3899
3900   while (si)
3901     {
3902       sp -= si->len;
3903       write_memory (sp, si->data, si->len);
3904       si = pop_stack_item (si);
3905     }
3906
3907   /* Finally, update teh SP register.  */
3908   regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3909
3910   return sp;
3911 }
3912
3913
3914 /* Always align the frame to an 8-byte boundary.  This is required on
3915    some platforms and harmless on the rest.  */
3916
3917 static CORE_ADDR
3918 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3919 {
3920   /* Align the stack to eight bytes.  */
3921   return sp & ~ (CORE_ADDR) 7;
3922 }
3923
3924 static void
3925 print_fpu_flags (struct ui_file *file, int flags)
3926 {
3927   if (flags & (1 << 0))
3928     fputs_filtered ("IVO ", file);
3929   if (flags & (1 << 1))
3930     fputs_filtered ("DVZ ", file);
3931   if (flags & (1 << 2))
3932     fputs_filtered ("OFL ", file);
3933   if (flags & (1 << 3))
3934     fputs_filtered ("UFL ", file);
3935   if (flags & (1 << 4))
3936     fputs_filtered ("INX ", file);
3937   fputc_filtered ('\n', file);
3938 }
3939
3940 /* Print interesting information about the floating point processor
3941    (if present) or emulator.  */
3942 static void
3943 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3944                       struct frame_info *frame, const char *args)
3945 {
3946   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3947   int type;
3948
3949   type = (status >> 24) & 127;
3950   if (status & (1 << 31))
3951     fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3952   else
3953     fprintf_filtered (file, _("Software FPU type %d\n"), type);
3954   /* i18n: [floating point unit] mask */
3955   fputs_filtered (_("mask: "), file);
3956   print_fpu_flags (file, status >> 16);
3957   /* i18n: [floating point unit] flags */
3958   fputs_filtered (_("flags: "), file);
3959   print_fpu_flags (file, status);
3960 }
3961
3962 /* Construct the ARM extended floating point type.  */
3963 static struct type *
3964 arm_ext_type (struct gdbarch *gdbarch)
3965 {
3966   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3967
3968   if (!tdep->arm_ext_type)
3969     tdep->arm_ext_type
3970       = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
3971                          floatformats_arm_ext);
3972
3973   return tdep->arm_ext_type;
3974 }
3975
3976 static struct type *
3977 arm_neon_double_type (struct gdbarch *gdbarch)
3978 {
3979   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3980
3981   if (tdep->neon_double_type == NULL)
3982     {
3983       struct type *t, *elem;
3984
3985       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
3986                                TYPE_CODE_UNION);
3987       elem = builtin_type (gdbarch)->builtin_uint8;
3988       append_composite_type_field (t, "u8", init_vector_type (elem, 8));
3989       elem = builtin_type (gdbarch)->builtin_uint16;
3990       append_composite_type_field (t, "u16", init_vector_type (elem, 4));
3991       elem = builtin_type (gdbarch)->builtin_uint32;
3992       append_composite_type_field (t, "u32", init_vector_type (elem, 2));
3993       elem = builtin_type (gdbarch)->builtin_uint64;
3994       append_composite_type_field (t, "u64", elem);
3995       elem = builtin_type (gdbarch)->builtin_float;
3996       append_composite_type_field (t, "f32", init_vector_type (elem, 2));
3997       elem = builtin_type (gdbarch)->builtin_double;
3998       append_composite_type_field (t, "f64", elem);
3999
4000       TYPE_VECTOR (t) = 1;
4001       TYPE_NAME (t) = "neon_d";
4002       tdep->neon_double_type = t;
4003     }
4004
4005   return tdep->neon_double_type;
4006 }
4007
4008 /* FIXME: The vector types are not correctly ordered on big-endian
4009    targets.  Just as s0 is the low bits of d0, d0[0] is also the low
4010    bits of d0 - regardless of what unit size is being held in d0.  So
4011    the offset of the first uint8 in d0 is 7, but the offset of the
4012    first float is 4.  This code works as-is for little-endian
4013    targets.  */
4014
4015 static struct type *
4016 arm_neon_quad_type (struct gdbarch *gdbarch)
4017 {
4018   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4019
4020   if (tdep->neon_quad_type == NULL)
4021     {
4022       struct type *t, *elem;
4023
4024       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
4025                                TYPE_CODE_UNION);
4026       elem = builtin_type (gdbarch)->builtin_uint8;
4027       append_composite_type_field (t, "u8", init_vector_type (elem, 16));
4028       elem = builtin_type (gdbarch)->builtin_uint16;
4029       append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4030       elem = builtin_type (gdbarch)->builtin_uint32;
4031       append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4032       elem = builtin_type (gdbarch)->builtin_uint64;
4033       append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4034       elem = builtin_type (gdbarch)->builtin_float;
4035       append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4036       elem = builtin_type (gdbarch)->builtin_double;
4037       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4038
4039       TYPE_VECTOR (t) = 1;
4040       TYPE_NAME (t) = "neon_q";
4041       tdep->neon_quad_type = t;
4042     }
4043
4044   return tdep->neon_quad_type;
4045 }
4046
4047 /* Return the GDB type object for the "standard" data type of data in
4048    register N.  */
4049
4050 static struct type *
4051 arm_register_type (struct gdbarch *gdbarch, int regnum)
4052 {
4053   int num_regs = gdbarch_num_regs (gdbarch);
4054
4055   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4056       && regnum >= num_regs && regnum < num_regs + 32)
4057     return builtin_type (gdbarch)->builtin_float;
4058
4059   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4060       && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4061     return arm_neon_quad_type (gdbarch);
4062
4063   /* If the target description has register information, we are only
4064      in this function so that we can override the types of
4065      double-precision registers for NEON.  */
4066   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4067     {
4068       struct type *t = tdesc_register_type (gdbarch, regnum);
4069
4070       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4071           && TYPE_CODE (t) == TYPE_CODE_FLT
4072           && gdbarch_tdep (gdbarch)->have_neon)
4073         return arm_neon_double_type (gdbarch);
4074       else
4075         return t;
4076     }
4077
4078   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4079     {
4080       if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4081         return builtin_type (gdbarch)->builtin_void;
4082
4083       return arm_ext_type (gdbarch);
4084     }
4085   else if (regnum == ARM_SP_REGNUM)
4086     return builtin_type (gdbarch)->builtin_data_ptr;
4087   else if (regnum == ARM_PC_REGNUM)
4088     return builtin_type (gdbarch)->builtin_func_ptr;
4089   else if (regnum >= ARRAY_SIZE (arm_register_names))
4090     /* These registers are only supported on targets which supply
4091        an XML description.  */
4092     return builtin_type (gdbarch)->builtin_int0;
4093   else
4094     return builtin_type (gdbarch)->builtin_uint32;
4095 }
4096
4097 /* Map a DWARF register REGNUM onto the appropriate GDB register
4098    number.  */
4099
4100 static int
4101 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4102 {
4103   /* Core integer regs.  */
4104   if (reg >= 0 && reg <= 15)
4105     return reg;
4106
4107   /* Legacy FPA encoding.  These were once used in a way which
4108      overlapped with VFP register numbering, so their use is
4109      discouraged, but GDB doesn't support the ARM toolchain
4110      which used them for VFP.  */
4111   if (reg >= 16 && reg <= 23)
4112     return ARM_F0_REGNUM + reg - 16;
4113
4114   /* New assignments for the FPA registers.  */
4115   if (reg >= 96 && reg <= 103)
4116     return ARM_F0_REGNUM + reg - 96;
4117
4118   /* WMMX register assignments.  */
4119   if (reg >= 104 && reg <= 111)
4120     return ARM_WCGR0_REGNUM + reg - 104;
4121
4122   if (reg >= 112 && reg <= 127)
4123     return ARM_WR0_REGNUM + reg - 112;
4124
4125   if (reg >= 192 && reg <= 199)
4126     return ARM_WC0_REGNUM + reg - 192;
4127
4128   /* VFP v2 registers.  A double precision value is actually
4129      in d1 rather than s2, but the ABI only defines numbering
4130      for the single precision registers.  This will "just work"
4131      in GDB for little endian targets (we'll read eight bytes,
4132      starting in s0 and then progressing to s1), but will be
4133      reversed on big endian targets with VFP.  This won't
4134      be a problem for the new Neon quad registers; you're supposed
4135      to use DW_OP_piece for those.  */
4136   if (reg >= 64 && reg <= 95)
4137     {
4138       char name_buf[4];
4139
4140       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4141       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4142                                           strlen (name_buf));
4143     }
4144
4145   /* VFP v3 / Neon registers.  This range is also used for VFP v2
4146      registers, except that it now describes d0 instead of s0.  */
4147   if (reg >= 256 && reg <= 287)
4148     {
4149       char name_buf[4];
4150
4151       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4152       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4153                                           strlen (name_buf));
4154     }
4155
4156   return -1;
4157 }
4158
4159 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
4160 static int
4161 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4162 {
4163   int reg = regnum;
4164   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4165
4166   if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4167     return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4168
4169   if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4170     return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4171
4172   if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4173     return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4174
4175   if (reg < NUM_GREGS)
4176     return SIM_ARM_R0_REGNUM + reg;
4177   reg -= NUM_GREGS;
4178
4179   if (reg < NUM_FREGS)
4180     return SIM_ARM_FP0_REGNUM + reg;
4181   reg -= NUM_FREGS;
4182
4183   if (reg < NUM_SREGS)
4184     return SIM_ARM_FPS_REGNUM + reg;
4185   reg -= NUM_SREGS;
4186
4187   internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4188 }
4189
4190 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4191    the buffer to be NEW_LEN bytes ending at ENDADDR.  Return
4192    NULL if an error occurs.  BUF is freed.  */
4193
4194 static gdb_byte *
4195 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4196                        int old_len, int new_len)
4197 {
4198   gdb_byte *new_buf;
4199   int bytes_to_read = new_len - old_len;
4200
4201   new_buf = (gdb_byte *) xmalloc (new_len);
4202   memcpy (new_buf + bytes_to_read, buf, old_len);
4203   xfree (buf);
4204   if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4205     {
4206       xfree (new_buf);
4207       return NULL;
4208     }
4209   return new_buf;
4210 }
4211
4212 /* An IT block is at most the 2-byte IT instruction followed by
4213    four 4-byte instructions.  The furthest back we must search to
4214    find an IT block that affects the current instruction is thus
4215    2 + 3 * 4 == 14 bytes.  */
4216 #define MAX_IT_BLOCK_PREFIX 14
4217
4218 /* Use a quick scan if there are more than this many bytes of
4219    code.  */
4220 #define IT_SCAN_THRESHOLD 32
4221
4222 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4223    A breakpoint in an IT block may not be hit, depending on the
4224    condition flags.  */
4225 static CORE_ADDR
4226 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4227 {
4228   gdb_byte *buf;
4229   char map_type;
4230   CORE_ADDR boundary, func_start;
4231   int buf_len;
4232   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4233   int i, any, last_it, last_it_count;
4234
4235   /* If we are using BKPT breakpoints, none of this is necessary.  */
4236   if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4237     return bpaddr;
4238
4239   /* ARM mode does not have this problem.  */
4240   if (!arm_pc_is_thumb (gdbarch, bpaddr))
4241     return bpaddr;
4242
4243   /* We are setting a breakpoint in Thumb code that could potentially
4244      contain an IT block.  The first step is to find how much Thumb
4245      code there is; we do not need to read outside of known Thumb
4246      sequences.  */
4247   map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4248   if (map_type == 0)
4249     /* Thumb-2 code must have mapping symbols to have a chance.  */
4250     return bpaddr;
4251
4252   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4253
4254   if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4255       && func_start > boundary)
4256     boundary = func_start;
4257
4258   /* Search for a candidate IT instruction.  We have to do some fancy
4259      footwork to distinguish a real IT instruction from the second
4260      half of a 32-bit instruction, but there is no need for that if
4261      there's no candidate.  */
4262   buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4263   if (buf_len == 0)
4264     /* No room for an IT instruction.  */
4265     return bpaddr;
4266
4267   buf = (gdb_byte *) xmalloc (buf_len);
4268   if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4269     return bpaddr;
4270   any = 0;
4271   for (i = 0; i < buf_len; i += 2)
4272     {
4273       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4274       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4275         {
4276           any = 1;
4277           break;
4278         }
4279     }
4280
4281   if (any == 0)
4282     {
4283       xfree (buf);
4284       return bpaddr;
4285     }
4286
4287   /* OK, the code bytes before this instruction contain at least one
4288      halfword which resembles an IT instruction.  We know that it's
4289      Thumb code, but there are still two possibilities.  Either the
4290      halfword really is an IT instruction, or it is the second half of
4291      a 32-bit Thumb instruction.  The only way we can tell is to
4292      scan forwards from a known instruction boundary.  */
4293   if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4294     {
4295       int definite;
4296
4297       /* There's a lot of code before this instruction.  Start with an
4298          optimistic search; it's easy to recognize halfwords that can
4299          not be the start of a 32-bit instruction, and use that to
4300          lock on to the instruction boundaries.  */
4301       buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4302       if (buf == NULL)
4303         return bpaddr;
4304       buf_len = IT_SCAN_THRESHOLD;
4305
4306       definite = 0;
4307       for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4308         {
4309           unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4310           if (thumb_insn_size (inst1) == 2)
4311             {
4312               definite = 1;
4313               break;
4314             }
4315         }
4316
4317       /* At this point, if DEFINITE, BUF[I] is the first place we
4318          are sure that we know the instruction boundaries, and it is far
4319          enough from BPADDR that we could not miss an IT instruction
4320          affecting BPADDR.  If ! DEFINITE, give up - start from a
4321          known boundary.  */
4322       if (! definite)
4323         {
4324           buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4325                                        bpaddr - boundary);
4326           if (buf == NULL)
4327             return bpaddr;
4328           buf_len = bpaddr - boundary;
4329           i = 0;
4330         }
4331     }
4332   else
4333     {
4334       buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4335       if (buf == NULL)
4336         return bpaddr;
4337       buf_len = bpaddr - boundary;
4338       i = 0;
4339     }
4340
4341   /* Scan forwards.  Find the last IT instruction before BPADDR.  */
4342   last_it = -1;
4343   last_it_count = 0;
4344   while (i < buf_len)
4345     {
4346       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4347       last_it_count--;
4348       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4349         {
4350           last_it = i;
4351           if (inst1 & 0x0001)
4352             last_it_count = 4;
4353           else if (inst1 & 0x0002)
4354             last_it_count = 3;
4355           else if (inst1 & 0x0004)
4356             last_it_count = 2;
4357           else
4358             last_it_count = 1;
4359         }
4360       i += thumb_insn_size (inst1);
4361     }
4362
4363   xfree (buf);
4364
4365   if (last_it == -1)
4366     /* There wasn't really an IT instruction after all.  */
4367     return bpaddr;
4368
4369   if (last_it_count < 1)
4370     /* It was too far away.  */
4371     return bpaddr;
4372
4373   /* This really is a trouble spot.  Move the breakpoint to the IT
4374      instruction.  */
4375   return bpaddr - buf_len + last_it;
4376 }
4377
4378 /* ARM displaced stepping support.
4379
4380    Generally ARM displaced stepping works as follows:
4381
4382    1. When an instruction is to be single-stepped, it is first decoded by
4383       arm_process_displaced_insn.  Depending on the type of instruction, it is
4384       then copied to a scratch location, possibly in a modified form.  The
4385       copy_* set of functions performs such modification, as necessary.  A
4386       breakpoint is placed after the modified instruction in the scratch space
4387       to return control to GDB.  Note in particular that instructions which
4388       modify the PC will no longer do so after modification.
4389
4390    2. The instruction is single-stepped, by setting the PC to the scratch
4391       location address, and resuming.  Control returns to GDB when the
4392       breakpoint is hit.
4393
4394    3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4395       function used for the current instruction.  This function's job is to
4396       put the CPU/memory state back to what it would have been if the
4397       instruction had been executed unmodified in its original location.  */
4398
4399 /* NOP instruction (mov r0, r0).  */
4400 #define ARM_NOP                         0xe1a00000
4401 #define THUMB_NOP 0x4600
4402
4403 /* Helper for register reads for displaced stepping.  In particular, this
4404    returns the PC as it would be seen by the instruction at its original
4405    location.  */
4406
4407 ULONGEST
4408 displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4409                     int regno)
4410 {
4411   ULONGEST ret;
4412   CORE_ADDR from = dsc->insn_addr;
4413
4414   if (regno == ARM_PC_REGNUM)
4415     {
4416       /* Compute pipeline offset:
4417          - When executing an ARM instruction, PC reads as the address of the
4418          current instruction plus 8.
4419          - When executing a Thumb instruction, PC reads as the address of the
4420          current instruction plus 4.  */
4421
4422       if (!dsc->is_thumb)
4423         from += 8;
4424       else
4425         from += 4;
4426
4427       if (debug_displaced)
4428         fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
4429                             (unsigned long) from);
4430       return (ULONGEST) from;
4431     }
4432   else
4433     {
4434       regcache_cooked_read_unsigned (regs, regno, &ret);
4435       if (debug_displaced)
4436         fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
4437                             regno, (unsigned long) ret);
4438       return ret;
4439     }
4440 }
4441
4442 static int
4443 displaced_in_arm_mode (struct regcache *regs)
4444 {
4445   ULONGEST ps;
4446   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4447
4448   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4449
4450   return (ps & t_bit) == 0;
4451 }
4452
4453 /* Write to the PC as from a branch instruction.  */
4454
4455 static void
4456 branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4457                  ULONGEST val)
4458 {
4459   if (!dsc->is_thumb)
4460     /* Note: If bits 0/1 are set, this branch would be unpredictable for
4461        architecture versions < 6.  */
4462     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4463                                     val & ~(ULONGEST) 0x3);
4464   else
4465     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4466                                     val & ~(ULONGEST) 0x1);
4467 }
4468
4469 /* Write to the PC as from a branch-exchange instruction.  */
4470
4471 static void
4472 bx_write_pc (struct regcache *regs, ULONGEST val)
4473 {
4474   ULONGEST ps;
4475   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4476
4477   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4478
4479   if ((val & 1) == 1)
4480     {
4481       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4482       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4483     }
4484   else if ((val & 2) == 0)
4485     {
4486       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4487       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4488     }
4489   else
4490     {
4491       /* Unpredictable behaviour.  Try to do something sensible (switch to ARM
4492           mode, align dest to 4 bytes).  */
4493       warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4494       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4495       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4496     }
4497 }
4498
4499 /* Write to the PC as if from a load instruction.  */
4500
4501 static void
4502 load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4503                ULONGEST val)
4504 {
4505   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4506     bx_write_pc (regs, val);
4507   else
4508     branch_write_pc (regs, dsc, val);
4509 }
4510
4511 /* Write to the PC as if from an ALU instruction.  */
4512
4513 static void
4514 alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4515               ULONGEST val)
4516 {
4517   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4518     bx_write_pc (regs, val);
4519   else
4520     branch_write_pc (regs, dsc, val);
4521 }
4522
4523 /* Helper for writing to registers for displaced stepping.  Writing to the PC
4524    has a varying effects depending on the instruction which does the write:
4525    this is controlled by the WRITE_PC argument.  */
4526
4527 void
4528 displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4529                      int regno, ULONGEST val, enum pc_write_style write_pc)
4530 {
4531   if (regno == ARM_PC_REGNUM)
4532     {
4533       if (debug_displaced)
4534         fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
4535                             (unsigned long) val);
4536       switch (write_pc)
4537         {
4538         case BRANCH_WRITE_PC:
4539           branch_write_pc (regs, dsc, val);
4540           break;
4541
4542         case BX_WRITE_PC:
4543           bx_write_pc (regs, val);
4544           break;
4545
4546         case LOAD_WRITE_PC:
4547           load_write_pc (regs, dsc, val);
4548           break;
4549
4550         case ALU_WRITE_PC:
4551           alu_write_pc (regs, dsc, val);
4552           break;
4553
4554         case CANNOT_WRITE_PC:
4555           warning (_("Instruction wrote to PC in an unexpected way when "
4556                      "single-stepping"));
4557           break;
4558
4559         default:
4560           internal_error (__FILE__, __LINE__,
4561                           _("Invalid argument to displaced_write_reg"));
4562         }
4563
4564       dsc->wrote_to_pc = 1;
4565     }
4566   else
4567     {
4568       if (debug_displaced)
4569         fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
4570                             regno, (unsigned long) val);
4571       regcache_cooked_write_unsigned (regs, regno, val);
4572     }
4573 }
4574
4575 /* This function is used to concisely determine if an instruction INSN
4576    references PC.  Register fields of interest in INSN should have the
4577    corresponding fields of BITMASK set to 0b1111.  The function
4578    returns return 1 if any of these fields in INSN reference the PC
4579    (also 0b1111, r15), else it returns 0.  */
4580
4581 static int
4582 insn_references_pc (uint32_t insn, uint32_t bitmask)
4583 {
4584   uint32_t lowbit = 1;
4585
4586   while (bitmask != 0)
4587     {
4588       uint32_t mask;
4589
4590       for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4591         ;
4592
4593       if (!lowbit)
4594         break;
4595
4596       mask = lowbit * 0xf;
4597
4598       if ((insn & mask) == mask)
4599         return 1;
4600
4601       bitmask &= ~mask;
4602     }
4603
4604   return 0;
4605 }
4606
4607 /* The simplest copy function.  Many instructions have the same effect no
4608    matter what address they are executed at: in those cases, use this.  */
4609
4610 static int
4611 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
4612                      const char *iname, arm_displaced_step_closure *dsc)
4613 {
4614   if (debug_displaced)
4615     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
4616                         "opcode/class '%s' unmodified\n", (unsigned long) insn,
4617                         iname);
4618
4619   dsc->modinsn[0] = insn;
4620
4621   return 0;
4622 }
4623
4624 static int
4625 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4626                              uint16_t insn2, const char *iname,
4627                              arm_displaced_step_closure *dsc)
4628 {
4629   if (debug_displaced)
4630     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
4631                         "opcode/class '%s' unmodified\n", insn1, insn2,
4632                         iname);
4633
4634   dsc->modinsn[0] = insn1;
4635   dsc->modinsn[1] = insn2;
4636   dsc->numinsns = 2;
4637
4638   return 0;
4639 }
4640
4641 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4642    modification.  */
4643 static int
4644 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4645                              const char *iname,
4646                              arm_displaced_step_closure *dsc)
4647 {
4648   if (debug_displaced)
4649     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
4650                         "opcode/class '%s' unmodified\n", insn,
4651                         iname);
4652
4653   dsc->modinsn[0] = insn;
4654
4655   return 0;
4656 }
4657
4658 /* Preload instructions with immediate offset.  */
4659
4660 static void
4661 cleanup_preload (struct gdbarch *gdbarch,
4662                  struct regcache *regs, arm_displaced_step_closure *dsc)
4663 {
4664   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4665   if (!dsc->u.preload.immed)
4666     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4667 }
4668
4669 static void
4670 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4671                  arm_displaced_step_closure *dsc, unsigned int rn)
4672 {
4673   ULONGEST rn_val;
4674   /* Preload instructions:
4675
4676      {pli/pld} [rn, #+/-imm]
4677      ->
4678      {pli/pld} [r0, #+/-imm].  */
4679
4680   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4681   rn_val = displaced_read_reg (regs, dsc, rn);
4682   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4683   dsc->u.preload.immed = 1;
4684
4685   dsc->cleanup = &cleanup_preload;
4686 }
4687
4688 static int
4689 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4690                   arm_displaced_step_closure *dsc)
4691 {
4692   unsigned int rn = bits (insn, 16, 19);
4693
4694   if (!insn_references_pc (insn, 0x000f0000ul))
4695     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4696
4697   if (debug_displaced)
4698     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4699                         (unsigned long) insn);
4700
4701   dsc->modinsn[0] = insn & 0xfff0ffff;
4702
4703   install_preload (gdbarch, regs, dsc, rn);
4704
4705   return 0;
4706 }
4707
4708 static int
4709 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4710                      struct regcache *regs, arm_displaced_step_closure *dsc)
4711 {
4712   unsigned int rn = bits (insn1, 0, 3);
4713   unsigned int u_bit = bit (insn1, 7);
4714   int imm12 = bits (insn2, 0, 11);
4715   ULONGEST pc_val;
4716
4717   if (rn != ARM_PC_REGNUM)
4718     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4719
4720   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4721      PLD (literal) Encoding T1.  */
4722   if (debug_displaced)
4723     fprintf_unfiltered (gdb_stdlog,
4724                         "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
4725                         (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4726                         imm12);
4727
4728   if (!u_bit)
4729     imm12 = -1 * imm12;
4730
4731   /* Rewrite instruction {pli/pld} PC imm12 into:
4732      Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4733
4734      {pli/pld} [r0, r1]
4735
4736      Cleanup: r0 <- tmp[0], r1 <- tmp[1].  */
4737
4738   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4739   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4740
4741   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4742
4743   displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4744   displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4745   dsc->u.preload.immed = 0;
4746
4747   /* {pli/pld} [r0, r1] */
4748   dsc->modinsn[0] = insn1 & 0xfff0;
4749   dsc->modinsn[1] = 0xf001;
4750   dsc->numinsns = 2;
4751
4752   dsc->cleanup = &cleanup_preload;
4753   return 0;
4754 }
4755
4756 /* Preload instructions with register offset.  */
4757
4758 static void
4759 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4760                     arm_displaced_step_closure *dsc, unsigned int rn,
4761                     unsigned int rm)
4762 {
4763   ULONGEST rn_val, rm_val;
4764
4765   /* Preload register-offset instructions:
4766
4767      {pli/pld} [rn, rm {, shift}]
4768      ->
4769      {pli/pld} [r0, r1 {, shift}].  */
4770
4771   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4772   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4773   rn_val = displaced_read_reg (regs, dsc, rn);
4774   rm_val = displaced_read_reg (regs, dsc, rm);
4775   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4776   displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4777   dsc->u.preload.immed = 0;
4778
4779   dsc->cleanup = &cleanup_preload;
4780 }
4781
4782 static int
4783 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4784                       struct regcache *regs,
4785                       arm_displaced_step_closure *dsc)
4786 {
4787   unsigned int rn = bits (insn, 16, 19);
4788   unsigned int rm = bits (insn, 0, 3);
4789
4790
4791   if (!insn_references_pc (insn, 0x000f000ful))
4792     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4793
4794   if (debug_displaced)
4795     fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4796                         (unsigned long) insn);
4797
4798   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4799
4800   install_preload_reg (gdbarch, regs, dsc, rn, rm);
4801   return 0;
4802 }
4803
4804 /* Copy/cleanup coprocessor load and store instructions.  */
4805
4806 static void
4807 cleanup_copro_load_store (struct gdbarch *gdbarch,
4808                           struct regcache *regs,
4809                           arm_displaced_step_closure *dsc)
4810 {
4811   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4812
4813   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4814
4815   if (dsc->u.ldst.writeback)
4816     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4817 }
4818
4819 static void
4820 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4821                           arm_displaced_step_closure *dsc,
4822                           int writeback, unsigned int rn)
4823 {
4824   ULONGEST rn_val;
4825
4826   /* Coprocessor load/store instructions:
4827
4828      {stc/stc2} [<Rn>, #+/-imm]  (and other immediate addressing modes)
4829      ->
4830      {stc/stc2} [r0, #+/-imm].
4831
4832      ldc/ldc2 are handled identically.  */
4833
4834   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4835   rn_val = displaced_read_reg (regs, dsc, rn);
4836   /* PC should be 4-byte aligned.  */
4837   rn_val = rn_val & 0xfffffffc;
4838   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4839
4840   dsc->u.ldst.writeback = writeback;
4841   dsc->u.ldst.rn = rn;
4842
4843   dsc->cleanup = &cleanup_copro_load_store;
4844 }
4845
4846 static int
4847 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4848                            struct regcache *regs,
4849                            arm_displaced_step_closure *dsc)
4850 {
4851   unsigned int rn = bits (insn, 16, 19);
4852
4853   if (!insn_references_pc (insn, 0x000f0000ul))
4854     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4855
4856   if (debug_displaced)
4857     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4858                         "load/store insn %.8lx\n", (unsigned long) insn);
4859
4860   dsc->modinsn[0] = insn & 0xfff0ffff;
4861
4862   install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4863
4864   return 0;
4865 }
4866
4867 static int
4868 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4869                               uint16_t insn2, struct regcache *regs,
4870                               arm_displaced_step_closure *dsc)
4871 {
4872   unsigned int rn = bits (insn1, 0, 3);
4873
4874   if (rn != ARM_PC_REGNUM)
4875     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4876                                         "copro load/store", dsc);
4877
4878   if (debug_displaced)
4879     fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4880                         "load/store insn %.4x%.4x\n", insn1, insn2);
4881
4882   dsc->modinsn[0] = insn1 & 0xfff0;
4883   dsc->modinsn[1] = insn2;
4884   dsc->numinsns = 2;
4885
4886   /* This function is called for copying instruction LDC/LDC2/VLDR, which
4887      doesn't support writeback, so pass 0.  */
4888   install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4889
4890   return 0;
4891 }
4892
4893 /* Clean up branch instructions (actually perform the branch, by setting
4894    PC).  */
4895
4896 static void
4897 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4898                 arm_displaced_step_closure *dsc)
4899 {
4900   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4901   int branch_taken = condition_true (dsc->u.branch.cond, status);
4902   enum pc_write_style write_pc = dsc->u.branch.exchange
4903                                  ? BX_WRITE_PC : BRANCH_WRITE_PC;
4904
4905   if (!branch_taken)
4906     return;
4907
4908   if (dsc->u.branch.link)
4909     {
4910       /* The value of LR should be the next insn of current one.  In order
4911        not to confuse logic hanlding later insn `bx lr', if current insn mode
4912        is Thumb, the bit 0 of LR value should be set to 1.  */
4913       ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4914
4915       if (dsc->is_thumb)
4916         next_insn_addr |= 0x1;
4917
4918       displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4919                            CANNOT_WRITE_PC);
4920     }
4921
4922   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4923 }
4924
4925 /* Copy B/BL/BLX instructions with immediate destinations.  */
4926
4927 static void
4928 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4929                   arm_displaced_step_closure *dsc,
4930                   unsigned int cond, int exchange, int link, long offset)
4931 {
4932   /* Implement "BL<cond> <label>" as:
4933
4934      Preparation: cond <- instruction condition
4935      Insn: mov r0, r0  (nop)
4936      Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4937
4938      B<cond> similar, but don't set r14 in cleanup.  */
4939
4940   dsc->u.branch.cond = cond;
4941   dsc->u.branch.link = link;
4942   dsc->u.branch.exchange = exchange;
4943
4944   dsc->u.branch.dest = dsc->insn_addr;
4945   if (link && exchange)
4946     /* For BLX, offset is computed from the Align (PC, 4).  */
4947     dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
4948
4949   if (dsc->is_thumb)
4950     dsc->u.branch.dest += 4 + offset;
4951   else
4952     dsc->u.branch.dest += 8 + offset;
4953
4954   dsc->cleanup = &cleanup_branch;
4955 }
4956 static int
4957 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
4958                    struct regcache *regs, arm_displaced_step_closure *dsc)
4959 {
4960   unsigned int cond = bits (insn, 28, 31);
4961   int exchange = (cond == 0xf);
4962   int link = exchange || bit (insn, 24);
4963   long offset;
4964
4965   if (debug_displaced)
4966     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
4967                         "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
4968                         (unsigned long) insn);
4969   if (exchange)
4970     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
4971        then arrange the switch into Thumb mode.  */
4972     offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
4973   else
4974     offset = bits (insn, 0, 23) << 2;
4975
4976   if (bit (offset, 25))
4977     offset = offset | ~0x3ffffff;
4978
4979   dsc->modinsn[0] = ARM_NOP;
4980
4981   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4982   return 0;
4983 }
4984
4985 static int
4986 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
4987                       uint16_t insn2, struct regcache *regs,
4988                       arm_displaced_step_closure *dsc)
4989 {
4990   int link = bit (insn2, 14);
4991   int exchange = link && !bit (insn2, 12);
4992   int cond = INST_AL;
4993   long offset = 0;
4994   int j1 = bit (insn2, 13);
4995   int j2 = bit (insn2, 11);
4996   int s = sbits (insn1, 10, 10);
4997   int i1 = !(j1 ^ bit (insn1, 10));
4998   int i2 = !(j2 ^ bit (insn1, 10));
4999
5000   if (!link && !exchange) /* B */
5001     {
5002       offset = (bits (insn2, 0, 10) << 1);
5003       if (bit (insn2, 12)) /* Encoding T4 */
5004         {
5005           offset |= (bits (insn1, 0, 9) << 12)
5006             | (i2 << 22)
5007             | (i1 << 23)
5008             | (s << 24);
5009           cond = INST_AL;
5010         }
5011       else /* Encoding T3 */
5012         {
5013           offset |= (bits (insn1, 0, 5) << 12)
5014             | (j1 << 18)
5015             | (j2 << 19)
5016             | (s << 20);
5017           cond = bits (insn1, 6, 9);
5018         }
5019     }
5020   else
5021     {
5022       offset = (bits (insn1, 0, 9) << 12);
5023       offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
5024       offset |= exchange ?
5025         (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
5026     }
5027
5028   if (debug_displaced)
5029     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
5030                         "%.4x %.4x with offset %.8lx\n",
5031                         link ? (exchange) ? "blx" : "bl" : "b",
5032                         insn1, insn2, offset);
5033
5034   dsc->modinsn[0] = THUMB_NOP;
5035
5036   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5037   return 0;
5038 }
5039
5040 /* Copy B Thumb instructions.  */
5041 static int
5042 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
5043               arm_displaced_step_closure *dsc)
5044 {
5045   unsigned int cond = 0;
5046   int offset = 0;
5047   unsigned short bit_12_15 = bits (insn, 12, 15);
5048   CORE_ADDR from = dsc->insn_addr;
5049
5050   if (bit_12_15 == 0xd)
5051     {
5052       /* offset = SignExtend (imm8:0, 32) */
5053       offset = sbits ((insn << 1), 0, 8);
5054       cond = bits (insn, 8, 11);
5055     }
5056   else if (bit_12_15 == 0xe) /* Encoding T2 */
5057     {
5058       offset = sbits ((insn << 1), 0, 11);
5059       cond = INST_AL;
5060     }
5061
5062   if (debug_displaced)
5063     fprintf_unfiltered (gdb_stdlog,
5064                         "displaced: copying b immediate insn %.4x "
5065                         "with offset %d\n", insn, offset);
5066
5067   dsc->u.branch.cond = cond;
5068   dsc->u.branch.link = 0;
5069   dsc->u.branch.exchange = 0;
5070   dsc->u.branch.dest = from + 4 + offset;
5071
5072   dsc->modinsn[0] = THUMB_NOP;
5073
5074   dsc->cleanup = &cleanup_branch;
5075
5076   return 0;
5077 }
5078
5079 /* Copy BX/BLX with register-specified destinations.  */
5080
5081 static void
5082 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5083                     arm_displaced_step_closure *dsc, int link,
5084                     unsigned int cond, unsigned int rm)
5085 {
5086   /* Implement {BX,BLX}<cond> <reg>" as:
5087
5088      Preparation: cond <- instruction condition
5089      Insn: mov r0, r0 (nop)
5090      Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5091
5092      Don't set r14 in cleanup for BX.  */
5093
5094   dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5095
5096   dsc->u.branch.cond = cond;
5097   dsc->u.branch.link = link;
5098
5099   dsc->u.branch.exchange = 1;
5100
5101   dsc->cleanup = &cleanup_branch;
5102 }
5103
5104 static int
5105 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5106                      struct regcache *regs, arm_displaced_step_closure *dsc)
5107 {
5108   unsigned int cond = bits (insn, 28, 31);
5109   /* BX:  x12xxx1x
5110      BLX: x12xxx3x.  */
5111   int link = bit (insn, 5);
5112   unsigned int rm = bits (insn, 0, 3);
5113
5114   if (debug_displaced)
5115     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
5116                         (unsigned long) insn);
5117
5118   dsc->modinsn[0] = ARM_NOP;
5119
5120   install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5121   return 0;
5122 }
5123
5124 static int
5125 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5126                        struct regcache *regs,
5127                        arm_displaced_step_closure *dsc)
5128 {
5129   int link = bit (insn, 7);
5130   unsigned int rm = bits (insn, 3, 6);
5131
5132   if (debug_displaced)
5133     fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
5134                         (unsigned short) insn);
5135
5136   dsc->modinsn[0] = THUMB_NOP;
5137
5138   install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5139
5140   return 0;
5141 }
5142
5143
5144 /* Copy/cleanup arithmetic/logic instruction with immediate RHS.  */
5145
5146 static void
5147 cleanup_alu_imm (struct gdbarch *gdbarch,
5148                  struct regcache *regs, arm_displaced_step_closure *dsc)
5149 {
5150   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5151   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5152   displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5153   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5154 }
5155
5156 static int
5157 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5158                   arm_displaced_step_closure *dsc)
5159 {
5160   unsigned int rn = bits (insn, 16, 19);
5161   unsigned int rd = bits (insn, 12, 15);
5162   unsigned int op = bits (insn, 21, 24);
5163   int is_mov = (op == 0xd);
5164   ULONGEST rd_val, rn_val;
5165
5166   if (!insn_references_pc (insn, 0x000ff000ul))
5167     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5168
5169   if (debug_displaced)
5170     fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
5171                         "%.8lx\n", is_mov ? "move" : "ALU",
5172                         (unsigned long) insn);
5173
5174   /* Instruction is of form:
5175
5176      <op><cond> rd, [rn,] #imm
5177
5178      Rewrite as:
5179
5180      Preparation: tmp1, tmp2 <- r0, r1;
5181                   r0, r1 <- rd, rn
5182      Insn: <op><cond> r0, r1, #imm
5183      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5184   */
5185
5186   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5187   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5188   rn_val = displaced_read_reg (regs, dsc, rn);
5189   rd_val = displaced_read_reg (regs, dsc, rd);
5190   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5191   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5192   dsc->rd = rd;
5193
5194   if (is_mov)
5195     dsc->modinsn[0] = insn & 0xfff00fff;
5196   else
5197     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5198
5199   dsc->cleanup = &cleanup_alu_imm;
5200
5201   return 0;
5202 }
5203
5204 static int
5205 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5206                      uint16_t insn2, struct regcache *regs,
5207                      arm_displaced_step_closure *dsc)
5208 {
5209   unsigned int op = bits (insn1, 5, 8);
5210   unsigned int rn, rm, rd;
5211   ULONGEST rd_val, rn_val;
5212
5213   rn = bits (insn1, 0, 3); /* Rn */
5214   rm = bits (insn2, 0, 3); /* Rm */
5215   rd = bits (insn2, 8, 11); /* Rd */
5216
5217   /* This routine is only called for instruction MOV.  */
5218   gdb_assert (op == 0x2 && rn == 0xf);
5219
5220   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5221     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5222
5223   if (debug_displaced)
5224     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
5225                         "ALU", insn1, insn2);
5226
5227   /* Instruction is of form:
5228
5229      <op><cond> rd, [rn,] #imm
5230
5231      Rewrite as:
5232
5233      Preparation: tmp1, tmp2 <- r0, r1;
5234                   r0, r1 <- rd, rn
5235      Insn: <op><cond> r0, r1, #imm
5236      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5237   */
5238
5239   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5240   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5241   rn_val = displaced_read_reg (regs, dsc, rn);
5242   rd_val = displaced_read_reg (regs, dsc, rd);
5243   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5244   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5245   dsc->rd = rd;
5246
5247   dsc->modinsn[0] = insn1;
5248   dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5249   dsc->numinsns = 2;
5250
5251   dsc->cleanup = &cleanup_alu_imm;
5252
5253   return 0;
5254 }
5255
5256 /* Copy/cleanup arithmetic/logic insns with register RHS.  */
5257
5258 static void
5259 cleanup_alu_reg (struct gdbarch *gdbarch,
5260                  struct regcache *regs, arm_displaced_step_closure *dsc)
5261 {
5262   ULONGEST rd_val;
5263   int i;
5264
5265   rd_val = displaced_read_reg (regs, dsc, 0);
5266
5267   for (i = 0; i < 3; i++)
5268     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5269
5270   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5271 }
5272
5273 static void
5274 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5275                  arm_displaced_step_closure *dsc,
5276                  unsigned int rd, unsigned int rn, unsigned int rm)
5277 {
5278   ULONGEST rd_val, rn_val, rm_val;
5279
5280   /* Instruction is of form:
5281
5282      <op><cond> rd, [rn,] rm [, <shift>]
5283
5284      Rewrite as:
5285
5286      Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5287                   r0, r1, r2 <- rd, rn, rm
5288      Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5289      Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5290   */
5291
5292   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5293   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5294   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5295   rd_val = displaced_read_reg (regs, dsc, rd);
5296   rn_val = displaced_read_reg (regs, dsc, rn);
5297   rm_val = displaced_read_reg (regs, dsc, rm);
5298   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5299   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5300   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5301   dsc->rd = rd;
5302
5303   dsc->cleanup = &cleanup_alu_reg;
5304 }
5305
5306 static int
5307 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5308                   arm_displaced_step_closure *dsc)
5309 {
5310   unsigned int op = bits (insn, 21, 24);
5311   int is_mov = (op == 0xd);
5312
5313   if (!insn_references_pc (insn, 0x000ff00ful))
5314     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5315
5316   if (debug_displaced)
5317     fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
5318                         is_mov ? "move" : "ALU", (unsigned long) insn);
5319
5320   if (is_mov)
5321     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5322   else
5323     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5324
5325   install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5326                    bits (insn, 0, 3));
5327   return 0;
5328 }
5329
5330 static int
5331 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5332                     struct regcache *regs,
5333                     arm_displaced_step_closure *dsc)
5334 {
5335   unsigned rm, rd;
5336
5337   rm = bits (insn, 3, 6);
5338   rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5339
5340   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5341     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5342
5343   if (debug_displaced)
5344     fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
5345                         (unsigned short) insn);
5346
5347   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5348
5349   install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5350
5351   return 0;
5352 }
5353
5354 /* Cleanup/copy arithmetic/logic insns with shifted register RHS.  */
5355
5356 static void
5357 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5358                          struct regcache *regs,
5359                          arm_displaced_step_closure *dsc)
5360 {
5361   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5362   int i;
5363
5364   for (i = 0; i < 4; i++)
5365     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5366
5367   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5368 }
5369
5370 static void
5371 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5372                          arm_displaced_step_closure *dsc,
5373                          unsigned int rd, unsigned int rn, unsigned int rm,
5374                          unsigned rs)
5375 {
5376   int i;
5377   ULONGEST rd_val, rn_val, rm_val, rs_val;
5378
5379   /* Instruction is of form:
5380
5381      <op><cond> rd, [rn,] rm, <shift> rs
5382
5383      Rewrite as:
5384
5385      Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5386                   r0, r1, r2, r3 <- rd, rn, rm, rs
5387      Insn: <op><cond> r0, r1, r2, <shift> r3
5388      Cleanup: tmp5 <- r0
5389               r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5390               rd <- tmp5
5391   */
5392
5393   for (i = 0; i < 4; i++)
5394     dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5395
5396   rd_val = displaced_read_reg (regs, dsc, rd);
5397   rn_val = displaced_read_reg (regs, dsc, rn);
5398   rm_val = displaced_read_reg (regs, dsc, rm);
5399   rs_val = displaced_read_reg (regs, dsc, rs);
5400   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5401   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5402   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5403   displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5404   dsc->rd = rd;
5405   dsc->cleanup = &cleanup_alu_shifted_reg;
5406 }
5407
5408 static int
5409 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5410                           struct regcache *regs,
5411                           arm_displaced_step_closure *dsc)
5412 {
5413   unsigned int op = bits (insn, 21, 24);
5414   int is_mov = (op == 0xd);
5415   unsigned int rd, rn, rm, rs;
5416
5417   if (!insn_references_pc (insn, 0x000fff0ful))
5418     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5419
5420   if (debug_displaced)
5421     fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
5422                         "%.8lx\n", is_mov ? "move" : "ALU",
5423                         (unsigned long) insn);
5424
5425   rn = bits (insn, 16, 19);
5426   rm = bits (insn, 0, 3);
5427   rs = bits (insn, 8, 11);
5428   rd = bits (insn, 12, 15);
5429
5430   if (is_mov)
5431     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5432   else
5433     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5434
5435   install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5436
5437   return 0;
5438 }
5439
5440 /* Clean up load instructions.  */
5441
5442 static void
5443 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5444               arm_displaced_step_closure *dsc)
5445 {
5446   ULONGEST rt_val, rt_val2 = 0, rn_val;
5447
5448   rt_val = displaced_read_reg (regs, dsc, 0);
5449   if (dsc->u.ldst.xfersize == 8)
5450     rt_val2 = displaced_read_reg (regs, dsc, 1);
5451   rn_val = displaced_read_reg (regs, dsc, 2);
5452
5453   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5454   if (dsc->u.ldst.xfersize > 4)
5455     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5456   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5457   if (!dsc->u.ldst.immed)
5458     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5459
5460   /* Handle register writeback.  */
5461   if (dsc->u.ldst.writeback)
5462     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5463   /* Put result in right place.  */
5464   displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5465   if (dsc->u.ldst.xfersize == 8)
5466     displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5467 }
5468
5469 /* Clean up store instructions.  */
5470
5471 static void
5472 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5473                arm_displaced_step_closure *dsc)
5474 {
5475   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5476
5477   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5478   if (dsc->u.ldst.xfersize > 4)
5479     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5480   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5481   if (!dsc->u.ldst.immed)
5482     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5483   if (!dsc->u.ldst.restore_r4)
5484     displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5485
5486   /* Writeback.  */
5487   if (dsc->u.ldst.writeback)
5488     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5489 }
5490
5491 /* Copy "extra" load/store instructions.  These are halfword/doubleword
5492    transfers, which have a different encoding to byte/word transfers.  */
5493
5494 static int
5495 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5496                       struct regcache *regs, arm_displaced_step_closure *dsc)
5497 {
5498   unsigned int op1 = bits (insn, 20, 24);
5499   unsigned int op2 = bits (insn, 5, 6);
5500   unsigned int rt = bits (insn, 12, 15);
5501   unsigned int rn = bits (insn, 16, 19);
5502   unsigned int rm = bits (insn, 0, 3);
5503   char load[12]     = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5504   char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5505   int immed = (op1 & 0x4) != 0;
5506   int opcode;
5507   ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5508
5509   if (!insn_references_pc (insn, 0x000ff00ful))
5510     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5511
5512   if (debug_displaced)
5513     fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
5514                         "insn %.8lx\n", unprivileged ? "unprivileged " : "",
5515                         (unsigned long) insn);
5516
5517   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5518
5519   if (opcode < 0)
5520     internal_error (__FILE__, __LINE__,
5521                     _("copy_extra_ld_st: instruction decode error"));
5522
5523   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5524   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5525   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5526   if (!immed)
5527     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5528
5529   rt_val = displaced_read_reg (regs, dsc, rt);
5530   if (bytesize[opcode] == 8)
5531     rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5532   rn_val = displaced_read_reg (regs, dsc, rn);
5533   if (!immed)
5534     rm_val = displaced_read_reg (regs, dsc, rm);
5535
5536   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5537   if (bytesize[opcode] == 8)
5538     displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5539   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5540   if (!immed)
5541     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5542
5543   dsc->rd = rt;
5544   dsc->u.ldst.xfersize = bytesize[opcode];
5545   dsc->u.ldst.rn = rn;
5546   dsc->u.ldst.immed = immed;
5547   dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5548   dsc->u.ldst.restore_r4 = 0;
5549
5550   if (immed)
5551     /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5552         ->
5553        {ldr,str}<width><cond> r0, [r1,] [r2, #imm].  */
5554     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5555   else
5556     /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5557         ->
5558        {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3].  */
5559     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5560
5561   dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5562
5563   return 0;
5564 }
5565
5566 /* Copy byte/half word/word loads and stores.  */
5567
5568 static void
5569 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5570                     arm_displaced_step_closure *dsc, int load,
5571                     int immed, int writeback, int size, int usermode,
5572                     int rt, int rm, int rn)
5573 {
5574   ULONGEST rt_val, rn_val, rm_val = 0;
5575
5576   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5577   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5578   if (!immed)
5579     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5580   if (!load)
5581     dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5582
5583   rt_val = displaced_read_reg (regs, dsc, rt);
5584   rn_val = displaced_read_reg (regs, dsc, rn);
5585   if (!immed)
5586     rm_val = displaced_read_reg (regs, dsc, rm);
5587
5588   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5589   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5590   if (!immed)
5591     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5592   dsc->rd = rt;
5593   dsc->u.ldst.xfersize = size;
5594   dsc->u.ldst.rn = rn;
5595   dsc->u.ldst.immed = immed;
5596   dsc->u.ldst.writeback = writeback;
5597
5598   /* To write PC we can do:
5599
5600      Before this sequence of instructions:
5601      r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5602      r2 is the Rn value got from dispalced_read_reg.
5603
5604      Insn1: push {pc} Write address of STR instruction + offset on stack
5605      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
5606      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
5607                                 = addr(Insn1) + offset - addr(Insn3) - 8
5608                                 = offset - 16
5609      Insn4: add r4, r4, #8   r4 = offset - 8
5610      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
5611                                 = from + offset
5612      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5613
5614      Otherwise we don't know what value to write for PC, since the offset is
5615      architecture-dependent (sometimes PC+8, sometimes PC+12).  More details
5616      of this can be found in Section "Saving from r15" in
5617      http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5618
5619   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5620 }
5621
5622
5623 static int
5624 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5625                           uint16_t insn2, struct regcache *regs,
5626                           arm_displaced_step_closure *dsc, int size)
5627 {
5628   unsigned int u_bit = bit (insn1, 7);
5629   unsigned int rt = bits (insn2, 12, 15);
5630   int imm12 = bits (insn2, 0, 11);
5631   ULONGEST pc_val;
5632
5633   if (debug_displaced)
5634     fprintf_unfiltered (gdb_stdlog,
5635                         "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
5636                         (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5637                         imm12);
5638
5639   if (!u_bit)
5640     imm12 = -1 * imm12;
5641
5642   /* Rewrite instruction LDR Rt imm12 into:
5643
5644      Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5645
5646      LDR R0, R2, R3,
5647
5648      Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2].  */
5649
5650
5651   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5652   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5653   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5654
5655   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5656
5657   pc_val = pc_val & 0xfffffffc;
5658
5659   displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5660   displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5661
5662   dsc->rd = rt;
5663
5664   dsc->u.ldst.xfersize = size;
5665   dsc->u.ldst.immed = 0;
5666   dsc->u.ldst.writeback = 0;
5667   dsc->u.ldst.restore_r4 = 0;
5668
5669   /* LDR R0, R2, R3 */
5670   dsc->modinsn[0] = 0xf852;
5671   dsc->modinsn[1] = 0x3;
5672   dsc->numinsns = 2;
5673
5674   dsc->cleanup = &cleanup_load;
5675
5676   return 0;
5677 }
5678
5679 static int
5680 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5681                           uint16_t insn2, struct regcache *regs,
5682                           arm_displaced_step_closure *dsc,
5683                           int writeback, int immed)
5684 {
5685   unsigned int rt = bits (insn2, 12, 15);
5686   unsigned int rn = bits (insn1, 0, 3);
5687   unsigned int rm = bits (insn2, 0, 3);  /* Only valid if !immed.  */
5688   /* In LDR (register), there is also a register Rm, which is not allowed to
5689      be PC, so we don't have to check it.  */
5690
5691   if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5692     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5693                                         dsc);
5694
5695   if (debug_displaced)
5696     fprintf_unfiltered (gdb_stdlog,
5697                         "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
5698                          rt, rn, insn1, insn2);
5699
5700   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5701                       0, rt, rm, rn);
5702
5703   dsc->u.ldst.restore_r4 = 0;
5704
5705   if (immed)
5706     /* ldr[b]<cond> rt, [rn, #imm], etc.
5707        ->
5708        ldr[b]<cond> r0, [r2, #imm].  */
5709     {
5710       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5711       dsc->modinsn[1] = insn2 & 0x0fff;
5712     }
5713   else
5714     /* ldr[b]<cond> rt, [rn, rm], etc.
5715        ->
5716        ldr[b]<cond> r0, [r2, r3].  */
5717     {
5718       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5719       dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5720     }
5721
5722   dsc->numinsns = 2;
5723
5724   return 0;
5725 }
5726
5727
5728 static int
5729 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5730                             struct regcache *regs,
5731                             arm_displaced_step_closure *dsc,
5732                             int load, int size, int usermode)
5733 {
5734   int immed = !bit (insn, 25);
5735   int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5736   unsigned int rt = bits (insn, 12, 15);
5737   unsigned int rn = bits (insn, 16, 19);
5738   unsigned int rm = bits (insn, 0, 3);  /* Only valid if !immed.  */
5739
5740   if (!insn_references_pc (insn, 0x000ff00ful))
5741     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5742
5743   if (debug_displaced)
5744     fprintf_unfiltered (gdb_stdlog,
5745                         "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
5746                         load ? (size == 1 ? "ldrb" : "ldr")
5747                              : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
5748                         rt, rn,
5749                         (unsigned long) insn);
5750
5751   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5752                       usermode, rt, rm, rn);
5753
5754   if (load || rt != ARM_PC_REGNUM)
5755     {
5756       dsc->u.ldst.restore_r4 = 0;
5757
5758       if (immed)
5759         /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5760            ->
5761            {ldr,str}[b]<cond> r0, [r2, #imm].  */
5762         dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5763       else
5764         /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5765            ->
5766            {ldr,str}[b]<cond> r0, [r2, r3].  */
5767         dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5768     }
5769   else
5770     {
5771       /* We need to use r4 as scratch.  Make sure it's restored afterwards.  */
5772       dsc->u.ldst.restore_r4 = 1;
5773       dsc->modinsn[0] = 0xe92d8000;  /* push {pc} */
5774       dsc->modinsn[1] = 0xe8bd0010;  /* pop  {r4} */
5775       dsc->modinsn[2] = 0xe044400f;  /* sub r4, r4, pc.  */
5776       dsc->modinsn[3] = 0xe2844008;  /* add r4, r4, #8.  */
5777       dsc->modinsn[4] = 0xe0800004;  /* add r0, r0, r4.  */
5778
5779       /* As above.  */
5780       if (immed)
5781         dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5782       else
5783         dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5784
5785       dsc->numinsns = 6;
5786     }
5787
5788   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5789
5790   return 0;
5791 }
5792
5793 /* Cleanup LDM instructions with fully-populated register list.  This is an
5794    unfortunate corner case: it's impossible to implement correctly by modifying
5795    the instruction.  The issue is as follows: we have an instruction,
5796
5797    ldm rN, {r0-r15}
5798
5799    which we must rewrite to avoid loading PC.  A possible solution would be to
5800    do the load in two halves, something like (with suitable cleanup
5801    afterwards):
5802
5803    mov r8, rN
5804    ldm[id][ab] r8!, {r0-r7}
5805    str r7, <temp>
5806    ldm[id][ab] r8, {r7-r14}
5807    <bkpt>
5808
5809    but at present there's no suitable place for <temp>, since the scratch space
5810    is overwritten before the cleanup routine is called.  For now, we simply
5811    emulate the instruction.  */
5812
5813 static void
5814 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5815                         arm_displaced_step_closure *dsc)
5816 {
5817   int inc = dsc->u.block.increment;
5818   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5819   int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5820   uint32_t regmask = dsc->u.block.regmask;
5821   int regno = inc ? 0 : 15;
5822   CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5823   int exception_return = dsc->u.block.load && dsc->u.block.user
5824                          && (regmask & 0x8000) != 0;
5825   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5826   int do_transfer = condition_true (dsc->u.block.cond, status);
5827   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5828
5829   if (!do_transfer)
5830     return;
5831
5832   /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5833      sensible we can do here.  Complain loudly.  */
5834   if (exception_return)
5835     error (_("Cannot single-step exception return"));
5836
5837   /* We don't handle any stores here for now.  */
5838   gdb_assert (dsc->u.block.load != 0);
5839
5840   if (debug_displaced)
5841     fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
5842                         "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
5843                         dsc->u.block.increment ? "inc" : "dec",
5844                         dsc->u.block.before ? "before" : "after");
5845
5846   while (regmask)
5847     {
5848       uint32_t memword;
5849
5850       if (inc)
5851         while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5852           regno++;
5853       else
5854         while (regno >= 0 && (regmask & (1 << regno)) == 0)
5855           regno--;
5856
5857       xfer_addr += bump_before;
5858
5859       memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5860       displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5861
5862       xfer_addr += bump_after;
5863
5864       regmask &= ~(1 << regno);
5865     }
5866
5867   if (dsc->u.block.writeback)
5868     displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5869                          CANNOT_WRITE_PC);
5870 }
5871
5872 /* Clean up an STM which included the PC in the register list.  */
5873
5874 static void
5875 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5876                         arm_displaced_step_closure *dsc)
5877 {
5878   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5879   int store_executed = condition_true (dsc->u.block.cond, status);
5880   CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
5881   CORE_ADDR stm_insn_addr;
5882   uint32_t pc_val;
5883   long offset;
5884   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5885
5886   /* If condition code fails, there's nothing else to do.  */
5887   if (!store_executed)
5888     return;
5889
5890   if (dsc->u.block.increment)
5891     {
5892       pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5893
5894       if (dsc->u.block.before)
5895          pc_stored_at += 4;
5896     }
5897   else
5898     {
5899       pc_stored_at = dsc->u.block.xfer_addr;
5900
5901       if (dsc->u.block.before)
5902          pc_stored_at -= 4;
5903     }
5904
5905   pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5906   stm_insn_addr = dsc->scratch_base;
5907   offset = pc_val - stm_insn_addr;
5908
5909   if (debug_displaced)
5910     fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
5911                         "STM instruction\n", offset);
5912
5913   /* Rewrite the stored PC to the proper value for the non-displaced original
5914      instruction.  */
5915   write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5916                                  dsc->insn_addr + offset);
5917 }
5918
5919 /* Clean up an LDM which includes the PC in the register list.  We clumped all
5920    the registers in the transferred list into a contiguous range r0...rX (to
5921    avoid loading PC directly and losing control of the debugged program), so we
5922    must undo that here.  */
5923
5924 static void
5925 cleanup_block_load_pc (struct gdbarch *gdbarch,
5926                        struct regcache *regs,
5927                        arm_displaced_step_closure *dsc)
5928 {
5929   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5930   int load_executed = condition_true (dsc->u.block.cond, status);
5931   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5932   unsigned int regs_loaded = bitcount (mask);
5933   unsigned int num_to_shuffle = regs_loaded, clobbered;
5934
5935   /* The method employed here will fail if the register list is fully populated
5936      (we need to avoid loading PC directly).  */
5937   gdb_assert (num_to_shuffle < 16);
5938
5939   if (!load_executed)
5940     return;
5941
5942   clobbered = (1 << num_to_shuffle) - 1;
5943
5944   while (num_to_shuffle > 0)
5945     {
5946       if ((mask & (1 << write_reg)) != 0)
5947         {
5948           unsigned int read_reg = num_to_shuffle - 1;
5949
5950           if (read_reg != write_reg)
5951             {
5952               ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5953               displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5954               if (debug_displaced)
5955                 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
5956                                     "loaded register r%d to r%d\n"), read_reg,
5957                                     write_reg);
5958             }
5959           else if (debug_displaced)
5960             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
5961                                 "r%d already in the right place\n"),
5962                                 write_reg);
5963
5964           clobbered &= ~(1 << write_reg);
5965
5966           num_to_shuffle--;
5967         }
5968
5969       write_reg--;
5970     }
5971
5972   /* Restore any registers we scribbled over.  */
5973   for (write_reg = 0; clobbered != 0; write_reg++)
5974     {
5975       if ((clobbered & (1 << write_reg)) != 0)
5976         {
5977           displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
5978                                CANNOT_WRITE_PC);
5979           if (debug_displaced)
5980             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
5981                                 "clobbered register r%d\n"), write_reg);
5982           clobbered &= ~(1 << write_reg);
5983         }
5984     }
5985
5986   /* Perform register writeback manually.  */
5987   if (dsc->u.block.writeback)
5988     {
5989       ULONGEST new_rn_val = dsc->u.block.xfer_addr;
5990
5991       if (dsc->u.block.increment)
5992         new_rn_val += regs_loaded * 4;
5993       else
5994         new_rn_val -= regs_loaded * 4;
5995
5996       displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
5997                            CANNOT_WRITE_PC);
5998     }
5999 }
6000
6001 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
6002    in user-level code (in particular exception return, ldm rn, {...pc}^).  */
6003
6004 static int
6005 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
6006                      struct regcache *regs,
6007                      arm_displaced_step_closure *dsc)
6008 {
6009   int load = bit (insn, 20);
6010   int user = bit (insn, 22);
6011   int increment = bit (insn, 23);
6012   int before = bit (insn, 24);
6013   int writeback = bit (insn, 21);
6014   int rn = bits (insn, 16, 19);
6015
6016   /* Block transfers which don't mention PC can be run directly
6017      out-of-line.  */
6018   if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
6019     return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
6020
6021   if (rn == ARM_PC_REGNUM)
6022     {
6023       warning (_("displaced: Unpredictable LDM or STM with "
6024                  "base register r15"));
6025       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
6026     }
6027
6028   if (debug_displaced)
6029     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6030                         "%.8lx\n", (unsigned long) insn);
6031
6032   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6033   dsc->u.block.rn = rn;
6034
6035   dsc->u.block.load = load;
6036   dsc->u.block.user = user;
6037   dsc->u.block.increment = increment;
6038   dsc->u.block.before = before;
6039   dsc->u.block.writeback = writeback;
6040   dsc->u.block.cond = bits (insn, 28, 31);
6041
6042   dsc->u.block.regmask = insn & 0xffff;
6043
6044   if (load)
6045     {
6046       if ((insn & 0xffff) == 0xffff)
6047         {
6048           /* LDM with a fully-populated register list.  This case is
6049              particularly tricky.  Implement for now by fully emulating the
6050              instruction (which might not behave perfectly in all cases, but
6051              these instructions should be rare enough for that not to matter
6052              too much).  */
6053           dsc->modinsn[0] = ARM_NOP;
6054
6055           dsc->cleanup = &cleanup_block_load_all;
6056         }
6057       else
6058         {
6059           /* LDM of a list of registers which includes PC.  Implement by
6060              rewriting the list of registers to be transferred into a
6061              contiguous chunk r0...rX before doing the transfer, then shuffling
6062              registers into the correct places in the cleanup routine.  */
6063           unsigned int regmask = insn & 0xffff;
6064           unsigned int num_in_list = bitcount (regmask), new_regmask;
6065           unsigned int i;
6066
6067           for (i = 0; i < num_in_list; i++)
6068             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6069
6070           /* Writeback makes things complicated.  We need to avoid clobbering
6071              the base register with one of the registers in our modified
6072              register list, but just using a different register can't work in
6073              all cases, e.g.:
6074
6075                ldm r14!, {r0-r13,pc}
6076
6077              which would need to be rewritten as:
6078
6079                ldm rN!, {r0-r14}
6080
6081              but that can't work, because there's no free register for N.
6082
6083              Solve this by turning off the writeback bit, and emulating
6084              writeback manually in the cleanup routine.  */
6085
6086           if (writeback)
6087             insn &= ~(1 << 21);
6088
6089           new_regmask = (1 << num_in_list) - 1;
6090
6091           if (debug_displaced)
6092             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6093                                 "{..., pc}: original reg list %.4x, modified "
6094                                 "list %.4x\n"), rn, writeback ? "!" : "",
6095                                 (int) insn & 0xffff, new_regmask);
6096
6097           dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6098
6099           dsc->cleanup = &cleanup_block_load_pc;
6100         }
6101     }
6102   else
6103     {
6104       /* STM of a list of registers which includes PC.  Run the instruction
6105          as-is, but out of line: this will store the wrong value for the PC,
6106          so we must manually fix up the memory in the cleanup routine.
6107          Doing things this way has the advantage that we can auto-detect
6108          the offset of the PC write (which is architecture-dependent) in
6109          the cleanup routine.  */
6110       dsc->modinsn[0] = insn;
6111
6112       dsc->cleanup = &cleanup_block_store_pc;
6113     }
6114
6115   return 0;
6116 }
6117
6118 static int
6119 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6120                         struct regcache *regs,
6121                         arm_displaced_step_closure *dsc)
6122 {
6123   int rn = bits (insn1, 0, 3);
6124   int load = bit (insn1, 4);
6125   int writeback = bit (insn1, 5);
6126
6127   /* Block transfers which don't mention PC can be run directly
6128      out-of-line.  */
6129   if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6130     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6131
6132   if (rn == ARM_PC_REGNUM)
6133     {
6134       warning (_("displaced: Unpredictable LDM or STM with "
6135                  "base register r15"));
6136       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6137                                           "unpredictable ldm/stm", dsc);
6138     }
6139
6140   if (debug_displaced)
6141     fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6142                         "%.4x%.4x\n", insn1, insn2);
6143
6144   /* Clear bit 13, since it should be always zero.  */
6145   dsc->u.block.regmask = (insn2 & 0xdfff);
6146   dsc->u.block.rn = rn;
6147
6148   dsc->u.block.load = load;
6149   dsc->u.block.user = 0;
6150   dsc->u.block.increment = bit (insn1, 7);
6151   dsc->u.block.before = bit (insn1, 8);
6152   dsc->u.block.writeback = writeback;
6153   dsc->u.block.cond = INST_AL;
6154   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6155
6156   if (load)
6157     {
6158       if (dsc->u.block.regmask == 0xffff)
6159         {
6160           /* This branch is impossible to happen.  */
6161           gdb_assert (0);
6162         }
6163       else
6164         {
6165           unsigned int regmask = dsc->u.block.regmask;
6166           unsigned int num_in_list = bitcount (regmask), new_regmask;
6167           unsigned int i;
6168
6169           for (i = 0; i < num_in_list; i++)
6170             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6171
6172           if (writeback)
6173             insn1 &= ~(1 << 5);
6174
6175           new_regmask = (1 << num_in_list) - 1;
6176
6177           if (debug_displaced)
6178             fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6179                                 "{..., pc}: original reg list %.4x, modified "
6180                                 "list %.4x\n"), rn, writeback ? "!" : "",
6181                                 (int) dsc->u.block.regmask, new_regmask);
6182
6183           dsc->modinsn[0] = insn1;
6184           dsc->modinsn[1] = (new_regmask & 0xffff);
6185           dsc->numinsns = 2;
6186
6187           dsc->cleanup = &cleanup_block_load_pc;
6188         }
6189     }
6190   else
6191     {
6192       dsc->modinsn[0] = insn1;
6193       dsc->modinsn[1] = insn2;
6194       dsc->numinsns = 2;
6195       dsc->cleanup = &cleanup_block_store_pc;
6196     }
6197   return 0;
6198 }
6199
6200 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6201  This is used to avoid a dependency on BFD's bfd_endian enum.  */
6202
6203 ULONGEST
6204 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6205                                                int byte_order)
6206 {
6207   return read_memory_unsigned_integer (memaddr, len,
6208                                        (enum bfd_endian) byte_order);
6209 }
6210
6211 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs.  */
6212
6213 CORE_ADDR
6214 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6215                                    CORE_ADDR val)
6216 {
6217   return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6218 }
6219
6220 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
6221
6222 static CORE_ADDR
6223 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6224 {
6225   return 0;
6226 }
6227
6228 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs.  */
6229
6230 int
6231 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6232 {
6233   return arm_is_thumb (self->regcache);
6234 }
6235
6236 /* single_step() is called just before we want to resume the inferior,
6237    if we want to single-step it but there is no hardware or kernel
6238    single-step support.  We find the target of the coming instructions
6239    and breakpoint them.  */
6240
6241 std::vector<CORE_ADDR>
6242 arm_software_single_step (struct regcache *regcache)
6243 {
6244   struct gdbarch *gdbarch = regcache->arch ();
6245   struct arm_get_next_pcs next_pcs_ctx;
6246
6247   arm_get_next_pcs_ctor (&next_pcs_ctx,
6248                          &arm_get_next_pcs_ops,
6249                          gdbarch_byte_order (gdbarch),
6250                          gdbarch_byte_order_for_code (gdbarch),
6251                          0,
6252                          regcache);
6253
6254   std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6255
6256   for (CORE_ADDR &pc_ref : next_pcs)
6257     pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6258
6259   return next_pcs;
6260 }
6261
6262 /* Cleanup/copy SVC (SWI) instructions.  These two functions are overridden
6263    for Linux, where some SVC instructions must be treated specially.  */
6264
6265 static void
6266 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6267              arm_displaced_step_closure *dsc)
6268 {
6269   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6270
6271   if (debug_displaced)
6272     fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
6273                         "%.8lx\n", (unsigned long) resume_addr);
6274
6275   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6276 }
6277
6278
6279 /* Common copy routine for svc instruciton.  */
6280
6281 static int
6282 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6283              arm_displaced_step_closure *dsc)
6284 {
6285   /* Preparation: none.
6286      Insn: unmodified svc.
6287      Cleanup: pc <- insn_addr + insn_size.  */
6288
6289   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6290      instruction.  */
6291   dsc->wrote_to_pc = 1;
6292
6293   /* Allow OS-specific code to override SVC handling.  */
6294   if (dsc->u.svc.copy_svc_os)
6295     return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6296   else
6297     {
6298       dsc->cleanup = &cleanup_svc;
6299       return 0;
6300     }
6301 }
6302
6303 static int
6304 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6305               struct regcache *regs, arm_displaced_step_closure *dsc)
6306 {
6307
6308   if (debug_displaced)
6309     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
6310                         (unsigned long) insn);
6311
6312   dsc->modinsn[0] = insn;
6313
6314   return install_svc (gdbarch, regs, dsc);
6315 }
6316
6317 static int
6318 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6319                 struct regcache *regs, arm_displaced_step_closure *dsc)
6320 {
6321
6322   if (debug_displaced)
6323     fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
6324                         insn);
6325
6326   dsc->modinsn[0] = insn;
6327
6328   return install_svc (gdbarch, regs, dsc);
6329 }
6330
6331 /* Copy undefined instructions.  */
6332
6333 static int
6334 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6335                 arm_displaced_step_closure *dsc)
6336 {
6337   if (debug_displaced)
6338     fprintf_unfiltered (gdb_stdlog,
6339                         "displaced: copying undefined insn %.8lx\n",
6340                         (unsigned long) insn);
6341
6342   dsc->modinsn[0] = insn;
6343
6344   return 0;
6345 }
6346
6347 static int
6348 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6349                        arm_displaced_step_closure *dsc)
6350 {
6351
6352   if (debug_displaced)
6353     fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
6354                        "%.4x %.4x\n", (unsigned short) insn1,
6355                        (unsigned short) insn2);
6356
6357   dsc->modinsn[0] = insn1;
6358   dsc->modinsn[1] = insn2;
6359   dsc->numinsns = 2;
6360
6361   return 0;
6362 }
6363
6364 /* Copy unpredictable instructions.  */
6365
6366 static int
6367 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6368                  arm_displaced_step_closure *dsc)
6369 {
6370   if (debug_displaced)
6371     fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
6372                         "%.8lx\n", (unsigned long) insn);
6373
6374   dsc->modinsn[0] = insn;
6375
6376   return 0;
6377 }
6378
6379 /* The decode_* functions are instruction decoding helpers.  They mostly follow
6380    the presentation in the ARM ARM.  */
6381
6382 static int
6383 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6384                               struct regcache *regs,
6385                               arm_displaced_step_closure *dsc)
6386 {
6387   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6388   unsigned int rn = bits (insn, 16, 19);
6389
6390   if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6391     return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6392   else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6393     return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6394   else if ((op1 & 0x60) == 0x20)
6395     return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6396   else if ((op1 & 0x71) == 0x40)
6397     return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6398                                 dsc);
6399   else if ((op1 & 0x77) == 0x41)
6400     return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6401   else if ((op1 & 0x77) == 0x45)
6402     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pli.  */
6403   else if ((op1 & 0x77) == 0x51)
6404     {
6405       if (rn != 0xf)
6406         return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6407       else
6408         return arm_copy_unpred (gdbarch, insn, dsc);
6409     }
6410   else if ((op1 & 0x77) == 0x55)
6411     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6412   else if (op1 == 0x57)
6413     switch (op2)
6414       {
6415       case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6416       case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6417       case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6418       case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6419       default: return arm_copy_unpred (gdbarch, insn, dsc);
6420       }
6421   else if ((op1 & 0x63) == 0x43)
6422     return arm_copy_unpred (gdbarch, insn, dsc);
6423   else if ((op2 & 0x1) == 0x0)
6424     switch (op1 & ~0x80)
6425       {
6426       case 0x61:
6427         return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6428       case 0x65:
6429         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
6430       case 0x71: case 0x75:
6431         /* pld/pldw reg.  */
6432         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6433       case 0x63: case 0x67: case 0x73: case 0x77:
6434         return arm_copy_unpred (gdbarch, insn, dsc);
6435       default:
6436         return arm_copy_undef (gdbarch, insn, dsc);
6437       }
6438   else
6439     return arm_copy_undef (gdbarch, insn, dsc);  /* Probably unreachable.  */
6440 }
6441
6442 static int
6443 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6444                           struct regcache *regs,
6445                           arm_displaced_step_closure *dsc)
6446 {
6447   if (bit (insn, 27) == 0)
6448     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6449   /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx.  */
6450   else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6451     {
6452     case 0x0: case 0x2:
6453       return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6454
6455     case 0x1: case 0x3:
6456       return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6457
6458     case 0x4: case 0x5: case 0x6: case 0x7:
6459       return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6460
6461     case 0x8:
6462       switch ((insn & 0xe00000) >> 21)
6463         {
6464         case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6465           /* stc/stc2.  */
6466           return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6467
6468         case 0x2:
6469           return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6470
6471         default:
6472           return arm_copy_undef (gdbarch, insn, dsc);
6473         }
6474
6475     case 0x9:
6476       {
6477          int rn_f = (bits (insn, 16, 19) == 0xf);
6478         switch ((insn & 0xe00000) >> 21)
6479           {
6480           case 0x1: case 0x3:
6481             /* ldc/ldc2 imm (undefined for rn == pc).  */
6482             return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6483                         : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6484
6485           case 0x2:
6486             return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6487
6488           case 0x4: case 0x5: case 0x6: case 0x7:
6489             /* ldc/ldc2 lit (undefined for rn != pc).  */
6490             return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6491                         : arm_copy_undef (gdbarch, insn, dsc);
6492
6493           default:
6494             return arm_copy_undef (gdbarch, insn, dsc);
6495           }
6496       }
6497
6498     case 0xa:
6499       return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6500
6501     case 0xb:
6502       if (bits (insn, 16, 19) == 0xf)
6503         /* ldc/ldc2 lit.  */
6504         return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6505       else
6506         return arm_copy_undef (gdbarch, insn, dsc);
6507
6508     case 0xc:
6509       if (bit (insn, 4))
6510         return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6511       else
6512         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6513
6514     case 0xd:
6515       if (bit (insn, 4))
6516         return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6517       else
6518         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6519
6520     default:
6521       return arm_copy_undef (gdbarch, insn, dsc);
6522     }
6523 }
6524
6525 /* Decode miscellaneous instructions in dp/misc encoding space.  */
6526
6527 static int
6528 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6529                           struct regcache *regs,
6530                           arm_displaced_step_closure *dsc)
6531 {
6532   unsigned int op2 = bits (insn, 4, 6);
6533   unsigned int op = bits (insn, 21, 22);
6534
6535   switch (op2)
6536     {
6537     case 0x0:
6538       return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6539
6540     case 0x1:
6541       if (op == 0x1)  /* bx.  */
6542         return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6543       else if (op == 0x3)
6544         return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6545       else
6546         return arm_copy_undef (gdbarch, insn, dsc);
6547
6548     case 0x2:
6549       if (op == 0x1)
6550         /* Not really supported.  */
6551         return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6552       else
6553         return arm_copy_undef (gdbarch, insn, dsc);
6554
6555     case 0x3:
6556       if (op == 0x1)
6557         return arm_copy_bx_blx_reg (gdbarch, insn,
6558                                 regs, dsc);  /* blx register.  */
6559       else
6560         return arm_copy_undef (gdbarch, insn, dsc);
6561
6562     case 0x5:
6563       return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6564
6565     case 0x7:
6566       if (op == 0x1)
6567         return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6568       else if (op == 0x3)
6569         /* Not really supported.  */
6570         return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
6571       /* Fall through.  */
6572
6573     default:
6574       return arm_copy_undef (gdbarch, insn, dsc);
6575     }
6576 }
6577
6578 static int
6579 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
6580                     struct regcache *regs,
6581                     arm_displaced_step_closure *dsc)
6582 {
6583   if (bit (insn, 25))
6584     switch (bits (insn, 20, 24))
6585       {
6586       case 0x10:
6587         return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
6588
6589       case 0x14:
6590         return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
6591
6592       case 0x12: case 0x16:
6593         return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
6594
6595       default:
6596         return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
6597       }
6598   else
6599     {
6600       uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
6601
6602       if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
6603         return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
6604       else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
6605         return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
6606       else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
6607         return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
6608       else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
6609         return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
6610       else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
6611         return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
6612       else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
6613         return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
6614       else if (op2 == 0xb || (op2 & 0xd) == 0xd)
6615         /* 2nd arg means "unprivileged".  */
6616         return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
6617                                      dsc);
6618     }
6619
6620   /* Should be unreachable.  */
6621   return 1;
6622 }
6623
6624 static int
6625 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
6626                              struct regcache *regs,
6627                              arm_displaced_step_closure *dsc)
6628 {
6629   int a = bit (insn, 25), b = bit (insn, 4);
6630   uint32_t op1 = bits (insn, 20, 24);
6631
6632   if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
6633       || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
6634     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
6635   else if ((!a && (op1 & 0x17) == 0x02)
6636             || (a && (op1 & 0x17) == 0x02 && !b))
6637     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
6638   else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
6639             || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
6640     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
6641   else if ((!a && (op1 & 0x17) == 0x03)
6642            || (a && (op1 & 0x17) == 0x03 && !b))
6643     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
6644   else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
6645             || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
6646     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
6647   else if ((!a && (op1 & 0x17) == 0x06)
6648            || (a && (op1 & 0x17) == 0x06 && !b))
6649     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
6650   else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
6651            || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
6652     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
6653   else if ((!a && (op1 & 0x17) == 0x07)
6654            || (a && (op1 & 0x17) == 0x07 && !b))
6655     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
6656
6657   /* Should be unreachable.  */
6658   return 1;
6659 }
6660
6661 static int
6662 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
6663                   arm_displaced_step_closure *dsc)
6664 {
6665   switch (bits (insn, 20, 24))
6666     {
6667     case 0x00: case 0x01: case 0x02: case 0x03:
6668       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
6669
6670     case 0x04: case 0x05: case 0x06: case 0x07:
6671       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
6672
6673     case 0x08: case 0x09: case 0x0a: case 0x0b:
6674     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
6675       return arm_copy_unmodified (gdbarch, insn,
6676                               "decode/pack/unpack/saturate/reverse", dsc);
6677
6678     case 0x18:
6679       if (bits (insn, 5, 7) == 0)  /* op2.  */
6680          {
6681           if (bits (insn, 12, 15) == 0xf)
6682             return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
6683           else
6684             return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
6685         }
6686       else
6687          return arm_copy_undef (gdbarch, insn, dsc);
6688
6689     case 0x1a: case 0x1b:
6690       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6691         return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
6692       else
6693         return arm_copy_undef (gdbarch, insn, dsc);
6694
6695     case 0x1c: case 0x1d:
6696       if (bits (insn, 5, 6) == 0x0)  /* op2[1:0].  */
6697          {
6698           if (bits (insn, 0, 3) == 0xf)
6699             return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
6700           else
6701             return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
6702         }
6703       else
6704         return arm_copy_undef (gdbarch, insn, dsc);
6705
6706     case 0x1e: case 0x1f:
6707       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6708         return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
6709       else
6710         return arm_copy_undef (gdbarch, insn, dsc);
6711     }
6712
6713   /* Should be unreachable.  */
6714   return 1;
6715 }
6716
6717 static int
6718 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
6719                         struct regcache *regs,
6720                         arm_displaced_step_closure *dsc)
6721 {
6722   if (bit (insn, 25))
6723     return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6724   else
6725     return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
6726 }
6727
6728 static int
6729 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
6730                           struct regcache *regs,
6731                           arm_displaced_step_closure *dsc)
6732 {
6733   unsigned int opcode = bits (insn, 20, 24);
6734
6735   switch (opcode)
6736     {
6737     case 0x04: case 0x05:  /* VFP/Neon mrrc/mcrr.  */
6738       return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
6739
6740     case 0x08: case 0x0a: case 0x0c: case 0x0e:
6741     case 0x12: case 0x16:
6742       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
6743
6744     case 0x09: case 0x0b: case 0x0d: case 0x0f:
6745     case 0x13: case 0x17:
6746       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
6747
6748     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6749     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6750       /* Note: no writeback for these instructions.  Bit 25 will always be
6751          zero though (via caller), so the following works OK.  */
6752       return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6753     }
6754
6755   /* Should be unreachable.  */
6756   return 1;
6757 }
6758
6759 /* Decode shifted register instructions.  */
6760
6761 static int
6762 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
6763                             uint16_t insn2,  struct regcache *regs,
6764                             arm_displaced_step_closure *dsc)
6765 {
6766   /* PC is only allowed to be used in instruction MOV.  */
6767
6768   unsigned int op = bits (insn1, 5, 8);
6769   unsigned int rn = bits (insn1, 0, 3);
6770
6771   if (op == 0x2 && rn == 0xf) /* MOV */
6772     return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
6773   else
6774     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6775                                         "dp (shift reg)", dsc);
6776 }
6777
6778
6779 /* Decode extension register load/store.  Exactly the same as
6780    arm_decode_ext_reg_ld_st.  */
6781
6782 static int
6783 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
6784                              uint16_t insn2,  struct regcache *regs,
6785                              arm_displaced_step_closure *dsc)
6786 {
6787   unsigned int opcode = bits (insn1, 4, 8);
6788
6789   switch (opcode)
6790     {
6791     case 0x04: case 0x05:
6792       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6793                                           "vfp/neon vmov", dsc);
6794
6795     case 0x08: case 0x0c: /* 01x00 */
6796     case 0x0a: case 0x0e: /* 01x10 */
6797     case 0x12: case 0x16: /* 10x10 */
6798       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6799                                           "vfp/neon vstm/vpush", dsc);
6800
6801     case 0x09: case 0x0d: /* 01x01 */
6802     case 0x0b: case 0x0f: /* 01x11 */
6803     case 0x13: case 0x17: /* 10x11 */
6804       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6805                                           "vfp/neon vldm/vpop", dsc);
6806
6807     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6808       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6809                                           "vstr", dsc);
6810     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6811       return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
6812     }
6813
6814   /* Should be unreachable.  */
6815   return 1;
6816 }
6817
6818 static int
6819 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
6820                       struct regcache *regs, arm_displaced_step_closure *dsc)
6821 {
6822   unsigned int op1 = bits (insn, 20, 25);
6823   int op = bit (insn, 4);
6824   unsigned int coproc = bits (insn, 8, 11);
6825
6826   if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
6827     return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
6828   else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
6829            && (coproc & 0xe) != 0xa)
6830     /* stc/stc2.  */
6831     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6832   else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
6833            && (coproc & 0xe) != 0xa)
6834     /* ldc/ldc2 imm/lit.  */
6835     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6836   else if ((op1 & 0x3e) == 0x00)
6837     return arm_copy_undef (gdbarch, insn, dsc);
6838   else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
6839     return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
6840   else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
6841     return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6842   else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
6843     return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6844   else if ((op1 & 0x30) == 0x20 && !op)
6845     {
6846       if ((coproc & 0xe) == 0xa)
6847         return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
6848       else
6849         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6850     }
6851   else if ((op1 & 0x30) == 0x20 && op)
6852     return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
6853   else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
6854     return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6855   else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
6856     return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6857   else if ((op1 & 0x30) == 0x30)
6858     return arm_copy_svc (gdbarch, insn, regs, dsc);
6859   else
6860     return arm_copy_undef (gdbarch, insn, dsc);  /* Possibly unreachable.  */
6861 }
6862
6863 static int
6864 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
6865                          uint16_t insn2, struct regcache *regs,
6866                          arm_displaced_step_closure *dsc)
6867 {
6868   unsigned int coproc = bits (insn2, 8, 11);
6869   unsigned int bit_5_8 = bits (insn1, 5, 8);
6870   unsigned int bit_9 = bit (insn1, 9);
6871   unsigned int bit_4 = bit (insn1, 4);
6872
6873   if (bit_9 == 0)
6874     {
6875       if (bit_5_8 == 2)
6876         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6877                                             "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
6878                                             dsc);
6879       else if (bit_5_8 == 0) /* UNDEFINED.  */
6880         return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
6881       else
6882         {
6883            /*coproc is 101x.  SIMD/VFP, ext registers load/store.  */
6884           if ((coproc & 0xe) == 0xa)
6885             return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
6886                                                 dsc);
6887           else /* coproc is not 101x.  */
6888             {
6889               if (bit_4 == 0) /* STC/STC2.  */
6890                 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6891                                                     "stc/stc2", dsc);
6892               else /* LDC/LDC2 {literal, immeidate}.  */
6893                 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
6894                                                      regs, dsc);
6895             }
6896         }
6897     }
6898   else
6899     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
6900
6901   return 0;
6902 }
6903
6904 static void
6905 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
6906                      arm_displaced_step_closure *dsc, int rd)
6907 {
6908   /* ADR Rd, #imm
6909
6910      Rewrite as:
6911
6912      Preparation: Rd <- PC
6913      Insn: ADD Rd, #imm
6914      Cleanup: Null.
6915   */
6916
6917   /* Rd <- PC */
6918   int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6919   displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
6920 }
6921
6922 static int
6923 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
6924                               arm_displaced_step_closure *dsc,
6925                               int rd, unsigned int imm)
6926 {
6927
6928   /* Encoding T2: ADDS Rd, #imm */
6929   dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
6930
6931   install_pc_relative (gdbarch, regs, dsc, rd);
6932
6933   return 0;
6934 }
6935
6936 static int
6937 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
6938                                 struct regcache *regs,
6939                                 arm_displaced_step_closure *dsc)
6940 {
6941   unsigned int rd = bits (insn, 8, 10);
6942   unsigned int imm8 = bits (insn, 0, 7);
6943
6944   if (debug_displaced)
6945     fprintf_unfiltered (gdb_stdlog,
6946                         "displaced: copying thumb adr r%d, #%d insn %.4x\n",
6947                         rd, imm8, insn);
6948
6949   return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
6950 }
6951
6952 static int
6953 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
6954                               uint16_t insn2, struct regcache *regs,
6955                               arm_displaced_step_closure *dsc)
6956 {
6957   unsigned int rd = bits (insn2, 8, 11);
6958   /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
6959      extract raw immediate encoding rather than computing immediate.  When
6960      generating ADD or SUB instruction, we can simply perform OR operation to
6961      set immediate into ADD.  */
6962   unsigned int imm_3_8 = insn2 & 0x70ff;
6963   unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10.  */
6964
6965   if (debug_displaced)
6966     fprintf_unfiltered (gdb_stdlog,
6967                         "displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
6968                         rd, imm_i, imm_3_8, insn1, insn2);
6969
6970   if (bit (insn1, 7)) /* Encoding T2 */
6971     {
6972       /* Encoding T3: SUB Rd, Rd, #imm */
6973       dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
6974       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6975     }
6976   else /* Encoding T3 */
6977     {
6978       /* Encoding T3: ADD Rd, Rd, #imm */
6979       dsc->modinsn[0] = (0xf100 | rd | imm_i);
6980       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6981     }
6982   dsc->numinsns = 2;
6983
6984   install_pc_relative (gdbarch, regs, dsc, rd);
6985
6986   return 0;
6987 }
6988
6989 static int
6990 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
6991                               struct regcache *regs,
6992                               arm_displaced_step_closure *dsc)
6993 {
6994   unsigned int rt = bits (insn1, 8, 10);
6995   unsigned int pc;
6996   int imm8 = (bits (insn1, 0, 7) << 2);
6997
6998   /* LDR Rd, #imm8
6999
7000      Rwrite as:
7001
7002      Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
7003
7004      Insn: LDR R0, [R2, R3];
7005      Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
7006
7007   if (debug_displaced)
7008     fprintf_unfiltered (gdb_stdlog,
7009                         "displaced: copying thumb ldr r%d [pc #%d]\n"
7010                         , rt, imm8);
7011
7012   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
7013   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
7014   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
7015   pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
7016   /* The assembler calculates the required value of the offset from the
7017      Align(PC,4) value of this instruction to the label.  */
7018   pc = pc & 0xfffffffc;
7019
7020   displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
7021   displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
7022
7023   dsc->rd = rt;
7024   dsc->u.ldst.xfersize = 4;
7025   dsc->u.ldst.rn = 0;
7026   dsc->u.ldst.immed = 0;
7027   dsc->u.ldst.writeback = 0;
7028   dsc->u.ldst.restore_r4 = 0;
7029
7030   dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
7031
7032   dsc->cleanup = &cleanup_load;
7033
7034   return 0;
7035 }
7036
7037 /* Copy Thumb cbnz/cbz insruction.  */
7038
7039 static int
7040 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
7041                      struct regcache *regs,
7042                      arm_displaced_step_closure *dsc)
7043 {
7044   int non_zero = bit (insn1, 11);
7045   unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
7046   CORE_ADDR from = dsc->insn_addr;
7047   int rn = bits (insn1, 0, 2);
7048   int rn_val = displaced_read_reg (regs, dsc, rn);
7049
7050   dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
7051   /* CBNZ and CBZ do not affect the condition flags.  If condition is true,
7052      set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
7053      condition is false, let it be, cleanup_branch will do nothing.  */
7054   if (dsc->u.branch.cond)
7055     {
7056       dsc->u.branch.cond = INST_AL;
7057       dsc->u.branch.dest = from + 4 + imm5;
7058     }
7059   else
7060       dsc->u.branch.dest = from + 2;
7061
7062   dsc->u.branch.link = 0;
7063   dsc->u.branch.exchange = 0;
7064
7065   if (debug_displaced)
7066     fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
7067                         " insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
7068                         rn, rn_val, insn1, dsc->u.branch.dest);
7069
7070   dsc->modinsn[0] = THUMB_NOP;
7071
7072   dsc->cleanup = &cleanup_branch;
7073   return 0;
7074 }
7075
7076 /* Copy Table Branch Byte/Halfword */
7077 static int
7078 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
7079                           uint16_t insn2, struct regcache *regs,
7080                           arm_displaced_step_closure *dsc)
7081 {
7082   ULONGEST rn_val, rm_val;
7083   int is_tbh = bit (insn2, 4);
7084   CORE_ADDR halfwords = 0;
7085   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7086
7087   rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
7088   rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
7089
7090   if (is_tbh)
7091     {
7092       gdb_byte buf[2];
7093
7094       target_read_memory (rn_val + 2 * rm_val, buf, 2);
7095       halfwords = extract_unsigned_integer (buf, 2, byte_order);
7096     }
7097   else
7098     {
7099       gdb_byte buf[1];
7100
7101       target_read_memory (rn_val + rm_val, buf, 1);
7102       halfwords = extract_unsigned_integer (buf, 1, byte_order);
7103     }
7104
7105   if (debug_displaced)
7106     fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
7107                         " offset 0x%x\n", is_tbh ? "tbh" : "tbb",
7108                         (unsigned int) rn_val, (unsigned int) rm_val,
7109                         (unsigned int) halfwords);
7110
7111   dsc->u.branch.cond = INST_AL;
7112   dsc->u.branch.link = 0;
7113   dsc->u.branch.exchange = 0;
7114   dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
7115
7116   dsc->cleanup = &cleanup_branch;
7117
7118   return 0;
7119 }
7120
7121 static void
7122 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
7123                           arm_displaced_step_closure *dsc)
7124 {
7125   /* PC <- r7 */
7126   int val = displaced_read_reg (regs, dsc, 7);
7127   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
7128
7129   /* r7 <- r8 */
7130   val = displaced_read_reg (regs, dsc, 8);
7131   displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
7132
7133   /* r8 <- tmp[0] */
7134   displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
7135
7136 }
7137
7138 static int
7139 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
7140                          struct regcache *regs,
7141                          arm_displaced_step_closure *dsc)
7142 {
7143   dsc->u.block.regmask = insn1 & 0x00ff;
7144
7145   /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
7146      to :
7147
7148      (1) register list is full, that is, r0-r7 are used.
7149      Prepare: tmp[0] <- r8
7150
7151      POP {r0, r1, ...., r6, r7}; remove PC from reglist
7152      MOV r8, r7; Move value of r7 to r8;
7153      POP {r7}; Store PC value into r7.
7154
7155      Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
7156
7157      (2) register list is not full, supposing there are N registers in
7158      register list (except PC, 0 <= N <= 7).
7159      Prepare: for each i, 0 - N, tmp[i] <- ri.
7160
7161      POP {r0, r1, ...., rN};
7162
7163      Cleanup: Set registers in original reglist from r0 - rN.  Restore r0 - rN
7164      from tmp[] properly.
7165   */
7166   if (debug_displaced)
7167     fprintf_unfiltered (gdb_stdlog,
7168                         "displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
7169                         dsc->u.block.regmask, insn1);
7170
7171   if (dsc->u.block.regmask == 0xff)
7172     {
7173       dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
7174
7175       dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
7176       dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
7177       dsc->modinsn[2] = 0xbc80; /* POP {r7} */
7178
7179       dsc->numinsns = 3;
7180       dsc->cleanup = &cleanup_pop_pc_16bit_all;
7181     }
7182   else
7183     {
7184       unsigned int num_in_list = bitcount (dsc->u.block.regmask);
7185       unsigned int i;
7186       unsigned int new_regmask;
7187
7188       for (i = 0; i < num_in_list + 1; i++)
7189         dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7190
7191       new_regmask = (1 << (num_in_list + 1)) - 1;
7192
7193       if (debug_displaced)
7194         fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
7195                                           "{..., pc}: original reg list %.4x,"
7196                                           " modified list %.4x\n"),
7197                             (int) dsc->u.block.regmask, new_regmask);
7198
7199       dsc->u.block.regmask |= 0x8000;
7200       dsc->u.block.writeback = 0;
7201       dsc->u.block.cond = INST_AL;
7202
7203       dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
7204
7205       dsc->cleanup = &cleanup_block_load_pc;
7206     }
7207
7208   return 0;
7209 }
7210
7211 static void
7212 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7213                                     struct regcache *regs,
7214                                     arm_displaced_step_closure *dsc)
7215 {
7216   unsigned short op_bit_12_15 = bits (insn1, 12, 15);
7217   unsigned short op_bit_10_11 = bits (insn1, 10, 11);
7218   int err = 0;
7219
7220   /* 16-bit thumb instructions.  */
7221   switch (op_bit_12_15)
7222     {
7223       /* Shift (imme), add, subtract, move and compare.  */
7224     case 0: case 1: case 2: case 3:
7225       err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7226                                          "shift/add/sub/mov/cmp",
7227                                          dsc);
7228       break;
7229     case 4:
7230       switch (op_bit_10_11)
7231         {
7232         case 0: /* Data-processing */
7233           err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7234                                              "data-processing",
7235                                              dsc);
7236           break;
7237         case 1: /* Special data instructions and branch and exchange.  */
7238           {
7239             unsigned short op = bits (insn1, 7, 9);
7240             if (op == 6 || op == 7) /* BX or BLX */
7241               err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
7242             else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers.  */
7243               err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
7244             else
7245               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
7246                                                  dsc);
7247           }
7248           break;
7249         default: /* LDR (literal) */
7250           err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
7251         }
7252       break;
7253     case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
7254       err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
7255       break;
7256     case 10:
7257       if (op_bit_10_11 < 2) /* Generate PC-relative address */
7258         err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
7259       else /* Generate SP-relative address */
7260         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
7261       break;
7262     case 11: /* Misc 16-bit instructions */
7263       {
7264         switch (bits (insn1, 8, 11))
7265           {
7266           case 1: case 3:  case 9: case 11: /* CBNZ, CBZ */
7267             err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
7268             break;
7269           case 12: case 13: /* POP */
7270             if (bit (insn1, 8)) /* PC is in register list.  */
7271               err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
7272             else
7273               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
7274             break;
7275           case 15: /* If-Then, and hints */
7276             if (bits (insn1, 0, 3))
7277               /* If-Then makes up to four following instructions conditional.
7278                  IT instruction itself is not conditional, so handle it as a
7279                  common unmodified instruction.  */
7280               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
7281                                                  dsc);
7282             else
7283               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
7284             break;
7285           default:
7286             err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
7287           }
7288       }
7289       break;
7290     case 12:
7291       if (op_bit_10_11 < 2) /* Store multiple registers */
7292         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
7293       else /* Load multiple registers */
7294         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
7295       break;
7296     case 13: /* Conditional branch and supervisor call */
7297       if (bits (insn1, 9, 11) != 7) /* conditional branch */
7298         err = thumb_copy_b (gdbarch, insn1, dsc);
7299       else
7300         err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
7301       break;
7302     case 14: /* Unconditional branch */
7303       err = thumb_copy_b (gdbarch, insn1, dsc);
7304       break;
7305     default:
7306       err = 1;
7307     }
7308
7309   if (err)
7310     internal_error (__FILE__, __LINE__,
7311                     _("thumb_process_displaced_16bit_insn: Instruction decode error"));
7312 }
7313
7314 static int
7315 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
7316                                  uint16_t insn1, uint16_t insn2,
7317                                  struct regcache *regs,
7318                                  arm_displaced_step_closure *dsc)
7319 {
7320   int rt = bits (insn2, 12, 15);
7321   int rn = bits (insn1, 0, 3);
7322   int op1 = bits (insn1, 7, 8);
7323
7324   switch (bits (insn1, 5, 6))
7325     {
7326     case 0: /* Load byte and memory hints */
7327       if (rt == 0xf) /* PLD/PLI */
7328         {
7329           if (rn == 0xf)
7330             /* PLD literal or Encoding T3 of PLI(immediate, literal).  */
7331             return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
7332           else
7333             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7334                                                 "pli/pld", dsc);
7335         }
7336       else
7337         {
7338           if (rn == 0xf) /* LDRB/LDRSB (literal) */
7339             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7340                                              1);
7341           else
7342             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7343                                                 "ldrb{reg, immediate}/ldrbt",
7344                                                 dsc);
7345         }
7346
7347       break;
7348     case 1: /* Load halfword and memory hints.  */
7349       if (rt == 0xf) /* PLD{W} and Unalloc memory hint.  */
7350         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7351                                             "pld/unalloc memhint", dsc);
7352       else
7353         {
7354           if (rn == 0xf)
7355             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7356                                              2);
7357           else
7358             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7359                                                 "ldrh/ldrht", dsc);
7360         }
7361       break;
7362     case 2: /* Load word */
7363       {
7364         int insn2_bit_8_11 = bits (insn2, 8, 11);
7365
7366         if (rn == 0xf)
7367           return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
7368         else if (op1 == 0x1) /* Encoding T3 */
7369           return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
7370                                            0, 1);
7371         else /* op1 == 0x0 */
7372           {
7373             if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
7374               /* LDR (immediate) */
7375               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7376                                                dsc, bit (insn2, 8), 1);
7377             else if (insn2_bit_8_11 == 0xe) /* LDRT */
7378               return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7379                                                   "ldrt", dsc);
7380             else
7381               /* LDR (register) */
7382               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7383                                                dsc, 0, 0);
7384           }
7385         break;
7386       }
7387     default:
7388       return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7389       break;
7390     }
7391   return 0;
7392 }
7393
7394 static void
7395 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7396                                     uint16_t insn2, struct regcache *regs,
7397                                     arm_displaced_step_closure *dsc)
7398 {
7399   int err = 0;
7400   unsigned short op = bit (insn2, 15);
7401   unsigned int op1 = bits (insn1, 11, 12);
7402
7403   switch (op1)
7404     {
7405     case 1:
7406       {
7407         switch (bits (insn1, 9, 10))
7408           {
7409           case 0:
7410             if (bit (insn1, 6))
7411               {
7412                 /* Load/store {dual, execlusive}, table branch.  */
7413                 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
7414                     && bits (insn2, 5, 7) == 0)
7415                   err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
7416                                                   dsc);
7417                 else
7418                   /* PC is not allowed to use in load/store {dual, exclusive}
7419                      instructions.  */
7420                   err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7421                                                      "load/store dual/ex", dsc);
7422               }
7423             else /* load/store multiple */
7424               {
7425                 switch (bits (insn1, 7, 8))
7426                   {
7427                   case 0: case 3: /* SRS, RFE */
7428                     err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7429                                                        "srs/rfe", dsc);
7430                     break;
7431                   case 1: case 2: /* LDM/STM/PUSH/POP */
7432                     err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
7433                     break;
7434                   }
7435               }
7436             break;
7437
7438           case 1:
7439             /* Data-processing (shift register).  */
7440             err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
7441                                               dsc);
7442             break;
7443           default: /* Coprocessor instructions.  */
7444             err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7445             break;
7446           }
7447       break;
7448       }
7449     case 2: /* op1 = 2 */
7450       if (op) /* Branch and misc control.  */
7451         {
7452           if (bit (insn2, 14)  /* BLX/BL */
7453               || bit (insn2, 12) /* Unconditional branch */
7454               || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
7455             err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
7456           else
7457             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7458                                                "misc ctrl", dsc);
7459         }
7460       else
7461         {
7462           if (bit (insn1, 9)) /* Data processing (plain binary imm).  */
7463             {
7464               int op = bits (insn1, 4, 8);
7465               int rn = bits (insn1, 0, 3);
7466               if ((op == 0 || op == 0xa) && rn == 0xf)
7467                 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
7468                                                     regs, dsc);
7469               else
7470                 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7471                                                    "dp/pb", dsc);
7472             }
7473           else /* Data processing (modified immeidate) */
7474             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7475                                                "dp/mi", dsc);
7476         }
7477       break;
7478     case 3: /* op1 = 3 */
7479       switch (bits (insn1, 9, 10))
7480         {
7481         case 0:
7482           if (bit (insn1, 4))
7483             err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
7484                                                    regs, dsc);
7485           else /* NEON Load/Store and Store single data item */
7486             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7487                                                "neon elt/struct load/store",
7488                                                dsc);
7489           break;
7490         case 1: /* op1 = 3, bits (9, 10) == 1 */
7491           switch (bits (insn1, 7, 8))
7492             {
7493             case 0: case 1: /* Data processing (register) */
7494               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7495                                                  "dp(reg)", dsc);
7496               break;
7497             case 2: /* Multiply and absolute difference */
7498               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7499                                                  "mul/mua/diff", dsc);
7500               break;
7501             case 3: /* Long multiply and divide */
7502               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7503                                                  "lmul/lmua", dsc);
7504               break;
7505             }
7506           break;
7507         default: /* Coprocessor instructions */
7508           err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7509           break;
7510         }
7511       break;
7512     default:
7513       err = 1;
7514     }
7515
7516   if (err)
7517     internal_error (__FILE__, __LINE__,
7518                     _("thumb_process_displaced_32bit_insn: Instruction decode error"));
7519
7520 }
7521
7522 static void
7523 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7524                               struct regcache *regs,
7525                               arm_displaced_step_closure *dsc)
7526 {
7527   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7528   uint16_t insn1
7529     = read_memory_unsigned_integer (from, 2, byte_order_for_code);
7530
7531   if (debug_displaced)
7532     fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
7533                         "at %.8lx\n", insn1, (unsigned long) from);
7534
7535   dsc->is_thumb = 1;
7536   dsc->insn_size = thumb_insn_size (insn1);
7537   if (thumb_insn_size (insn1) == 4)
7538     {
7539       uint16_t insn2
7540         = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
7541       thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
7542     }
7543   else
7544     thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
7545 }
7546
7547 void
7548 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7549                             CORE_ADDR to, struct regcache *regs,
7550                             arm_displaced_step_closure *dsc)
7551 {
7552   int err = 0;
7553   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7554   uint32_t insn;
7555
7556   /* Most displaced instructions use a 1-instruction scratch space, so set this
7557      here and override below if/when necessary.  */
7558   dsc->numinsns = 1;
7559   dsc->insn_addr = from;
7560   dsc->scratch_base = to;
7561   dsc->cleanup = NULL;
7562   dsc->wrote_to_pc = 0;
7563
7564   if (!displaced_in_arm_mode (regs))
7565     return thumb_process_displaced_insn (gdbarch, from, regs, dsc);
7566
7567   dsc->is_thumb = 0;
7568   dsc->insn_size = 4;
7569   insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
7570   if (debug_displaced)
7571     fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
7572                         "at %.8lx\n", (unsigned long) insn,
7573                         (unsigned long) from);
7574
7575   if ((insn & 0xf0000000) == 0xf0000000)
7576     err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
7577   else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
7578     {
7579     case 0x0: case 0x1: case 0x2: case 0x3:
7580       err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
7581       break;
7582
7583     case 0x4: case 0x5: case 0x6:
7584       err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
7585       break;
7586
7587     case 0x7:
7588       err = arm_decode_media (gdbarch, insn, dsc);
7589       break;
7590
7591     case 0x8: case 0x9: case 0xa: case 0xb:
7592       err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
7593       break;
7594
7595     case 0xc: case 0xd: case 0xe: case 0xf:
7596       err = arm_decode_svc_copro (gdbarch, insn, regs, dsc);
7597       break;
7598     }
7599
7600   if (err)
7601     internal_error (__FILE__, __LINE__,
7602                     _("arm_process_displaced_insn: Instruction decode error"));
7603 }
7604
7605 /* Actually set up the scratch space for a displaced instruction.  */
7606
7607 void
7608 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
7609                             CORE_ADDR to, arm_displaced_step_closure *dsc)
7610 {
7611   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7612   unsigned int i, len, offset;
7613   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7614   int size = dsc->is_thumb? 2 : 4;
7615   const gdb_byte *bkp_insn;
7616
7617   offset = 0;
7618   /* Poke modified instruction(s).  */
7619   for (i = 0; i < dsc->numinsns; i++)
7620     {
7621       if (debug_displaced)
7622         {
7623           fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
7624           if (size == 4)
7625             fprintf_unfiltered (gdb_stdlog, "%.8lx",
7626                                 dsc->modinsn[i]);
7627           else if (size == 2)
7628             fprintf_unfiltered (gdb_stdlog, "%.4x",
7629                                 (unsigned short)dsc->modinsn[i]);
7630
7631           fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
7632                               (unsigned long) to + offset);
7633
7634         }
7635       write_memory_unsigned_integer (to + offset, size,
7636                                      byte_order_for_code,
7637                                      dsc->modinsn[i]);
7638       offset += size;
7639     }
7640
7641   /* Choose the correct breakpoint instruction.  */
7642   if (dsc->is_thumb)
7643     {
7644       bkp_insn = tdep->thumb_breakpoint;
7645       len = tdep->thumb_breakpoint_size;
7646     }
7647   else
7648     {
7649       bkp_insn = tdep->arm_breakpoint;
7650       len = tdep->arm_breakpoint_size;
7651     }
7652
7653   /* Put breakpoint afterwards.  */
7654   write_memory (to + offset, bkp_insn, len);
7655
7656   if (debug_displaced)
7657     fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
7658                         paddress (gdbarch, from), paddress (gdbarch, to));
7659 }
7660
7661 /* Entry point for cleaning things up after a displaced instruction has been
7662    single-stepped.  */
7663
7664 void
7665 arm_displaced_step_fixup (struct gdbarch *gdbarch,
7666                           struct displaced_step_closure *dsc_,
7667                           CORE_ADDR from, CORE_ADDR to,
7668                           struct regcache *regs)
7669 {
7670   arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
7671
7672   if (dsc->cleanup)
7673     dsc->cleanup (gdbarch, regs, dsc);
7674
7675   if (!dsc->wrote_to_pc)
7676     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
7677                                     dsc->insn_addr + dsc->insn_size);
7678
7679 }
7680
7681 #include "bfd-in2.h"
7682 #include "libcoff.h"
7683
7684 static int
7685 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
7686 {
7687   gdb_disassembler *di
7688     = static_cast<gdb_disassembler *>(info->application_data);
7689   struct gdbarch *gdbarch = di->arch ();
7690
7691   if (arm_pc_is_thumb (gdbarch, memaddr))
7692     {
7693       static asymbol *asym;
7694       static combined_entry_type ce;
7695       static struct coff_symbol_struct csym;
7696       static struct bfd fake_bfd;
7697       static bfd_target fake_target;
7698
7699       if (csym.native == NULL)
7700         {
7701           /* Create a fake symbol vector containing a Thumb symbol.
7702              This is solely so that the code in print_insn_little_arm() 
7703              and print_insn_big_arm() in opcodes/arm-dis.c will detect
7704              the presence of a Thumb symbol and switch to decoding
7705              Thumb instructions.  */
7706
7707           fake_target.flavour = bfd_target_coff_flavour;
7708           fake_bfd.xvec = &fake_target;
7709           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
7710           csym.native = &ce;
7711           csym.symbol.the_bfd = &fake_bfd;
7712           csym.symbol.name = "fake";
7713           asym = (asymbol *) & csym;
7714         }
7715
7716       memaddr = UNMAKE_THUMB_ADDR (memaddr);
7717       info->symbols = &asym;
7718     }
7719   else
7720     info->symbols = NULL;
7721
7722   /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
7723      accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit.  Otherwise,
7724      opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
7725      the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
7726      in default_print_insn.  */
7727   if (exec_bfd != NULL)
7728     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
7729
7730   return default_print_insn (memaddr, info);
7731 }
7732
7733 /* The following define instruction sequences that will cause ARM
7734    cpu's to take an undefined instruction trap.  These are used to
7735    signal a breakpoint to GDB.
7736    
7737    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
7738    modes.  A different instruction is required for each mode.  The ARM
7739    cpu's can also be big or little endian.  Thus four different
7740    instructions are needed to support all cases.
7741    
7742    Note: ARMv4 defines several new instructions that will take the
7743    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
7744    not in fact add the new instructions.  The new undefined
7745    instructions in ARMv4 are all instructions that had no defined
7746    behaviour in earlier chips.  There is no guarantee that they will
7747    raise an exception, but may be treated as NOP's.  In practice, it
7748    may only safe to rely on instructions matching:
7749    
7750    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
7751    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
7752    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
7753    
7754    Even this may only true if the condition predicate is true.  The
7755    following use a condition predicate of ALWAYS so it is always TRUE.
7756    
7757    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
7758    and NetBSD all use a software interrupt rather than an undefined
7759    instruction to force a trap.  This can be handled by by the
7760    abi-specific code during establishment of the gdbarch vector.  */
7761
7762 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
7763 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
7764 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
7765 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
7766
7767 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
7768 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
7769 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
7770 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
7771
7772 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
7773
7774 static int
7775 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7776 {
7777   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7778   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7779
7780   if (arm_pc_is_thumb (gdbarch, *pcptr))
7781     {
7782       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
7783
7784       /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
7785          check whether we are replacing a 32-bit instruction.  */
7786       if (tdep->thumb2_breakpoint != NULL)
7787         {
7788           gdb_byte buf[2];
7789
7790           if (target_read_memory (*pcptr, buf, 2) == 0)
7791             {
7792               unsigned short inst1;
7793
7794               inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
7795               if (thumb_insn_size (inst1) == 4)
7796                 return ARM_BP_KIND_THUMB2;
7797             }
7798         }
7799
7800       return ARM_BP_KIND_THUMB;
7801     }
7802   else
7803     return ARM_BP_KIND_ARM;
7804
7805 }
7806
7807 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
7808
7809 static const gdb_byte *
7810 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7811 {
7812   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7813
7814   switch (kind)
7815     {
7816     case ARM_BP_KIND_ARM:
7817       *size = tdep->arm_breakpoint_size;
7818       return tdep->arm_breakpoint;
7819     case ARM_BP_KIND_THUMB:
7820       *size = tdep->thumb_breakpoint_size;
7821       return tdep->thumb_breakpoint;
7822     case ARM_BP_KIND_THUMB2:
7823       *size = tdep->thumb2_breakpoint_size;
7824       return tdep->thumb2_breakpoint;
7825     default:
7826       gdb_assert_not_reached ("unexpected arm breakpoint kind");
7827     }
7828 }
7829
7830 /* Implement the breakpoint_kind_from_current_state gdbarch method.  */
7831
7832 static int
7833 arm_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
7834                                         struct regcache *regcache,
7835                                         CORE_ADDR *pcptr)
7836 {
7837   gdb_byte buf[4];
7838
7839   /* Check the memory pointed by PC is readable.  */
7840   if (target_read_memory (regcache_read_pc (regcache), buf, 4) == 0)
7841     {
7842       struct arm_get_next_pcs next_pcs_ctx;
7843
7844       arm_get_next_pcs_ctor (&next_pcs_ctx,
7845                              &arm_get_next_pcs_ops,
7846                              gdbarch_byte_order (gdbarch),
7847                              gdbarch_byte_order_for_code (gdbarch),
7848                              0,
7849                              regcache);
7850
7851       std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
7852
7853       /* If MEMADDR is the next instruction of current pc, do the
7854          software single step computation, and get the thumb mode by
7855          the destination address.  */
7856       for (CORE_ADDR pc : next_pcs)
7857         {
7858           if (UNMAKE_THUMB_ADDR (pc) == *pcptr)
7859             {
7860               if (IS_THUMB_ADDR (pc))
7861                 {
7862                   *pcptr = MAKE_THUMB_ADDR (*pcptr);
7863                   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7864                 }
7865               else
7866                 return ARM_BP_KIND_ARM;
7867             }
7868         }
7869     }
7870
7871   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7872 }
7873
7874 /* Extract from an array REGBUF containing the (raw) register state a
7875    function return value of type TYPE, and copy that, in virtual
7876    format, into VALBUF.  */
7877
7878 static void
7879 arm_extract_return_value (struct type *type, struct regcache *regs,
7880                           gdb_byte *valbuf)
7881 {
7882   struct gdbarch *gdbarch = regs->arch ();
7883   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7884
7885   if (TYPE_CODE_FLT == TYPE_CODE (type))
7886     {
7887       switch (gdbarch_tdep (gdbarch)->fp_model)
7888         {
7889         case ARM_FLOAT_FPA:
7890           {
7891             /* The value is in register F0 in internal format.  We need to
7892                extract the raw value and then convert it to the desired
7893                internal type.  */
7894             bfd_byte tmpbuf[FP_REGISTER_SIZE];
7895
7896             regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
7897             target_float_convert (tmpbuf, arm_ext_type (gdbarch),
7898                                   valbuf, type);
7899           }
7900           break;
7901
7902         case ARM_FLOAT_SOFT_FPA:
7903         case ARM_FLOAT_SOFT_VFP:
7904           /* ARM_FLOAT_VFP can arise if this is a variadic function so
7905              not using the VFP ABI code.  */
7906         case ARM_FLOAT_VFP:
7907           regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
7908           if (TYPE_LENGTH (type) > 4)
7909             regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
7910                                   valbuf + INT_REGISTER_SIZE);
7911           break;
7912
7913         default:
7914           internal_error (__FILE__, __LINE__,
7915                           _("arm_extract_return_value: "
7916                             "Floating point model not supported"));
7917           break;
7918         }
7919     }
7920   else if (TYPE_CODE (type) == TYPE_CODE_INT
7921            || TYPE_CODE (type) == TYPE_CODE_CHAR
7922            || TYPE_CODE (type) == TYPE_CODE_BOOL
7923            || TYPE_CODE (type) == TYPE_CODE_PTR
7924            || TYPE_IS_REFERENCE (type)
7925            || TYPE_CODE (type) == TYPE_CODE_ENUM)
7926     {
7927       /* If the type is a plain integer, then the access is
7928          straight-forward.  Otherwise we have to play around a bit
7929          more.  */
7930       int len = TYPE_LENGTH (type);
7931       int regno = ARM_A1_REGNUM;
7932       ULONGEST tmp;
7933
7934       while (len > 0)
7935         {
7936           /* By using store_unsigned_integer we avoid having to do
7937              anything special for small big-endian values.  */
7938           regcache_cooked_read_unsigned (regs, regno++, &tmp);
7939           store_unsigned_integer (valbuf, 
7940                                   (len > INT_REGISTER_SIZE
7941                                    ? INT_REGISTER_SIZE : len),
7942                                   byte_order, tmp);
7943           len -= INT_REGISTER_SIZE;
7944           valbuf += INT_REGISTER_SIZE;
7945         }
7946     }
7947   else
7948     {
7949       /* For a structure or union the behaviour is as if the value had
7950          been stored to word-aligned memory and then loaded into 
7951          registers with 32-bit load instruction(s).  */
7952       int len = TYPE_LENGTH (type);
7953       int regno = ARM_A1_REGNUM;
7954       bfd_byte tmpbuf[INT_REGISTER_SIZE];
7955
7956       while (len > 0)
7957         {
7958           regcache_cooked_read (regs, regno++, tmpbuf);
7959           memcpy (valbuf, tmpbuf,
7960                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
7961           len -= INT_REGISTER_SIZE;
7962           valbuf += INT_REGISTER_SIZE;
7963         }
7964     }
7965 }
7966
7967
7968 /* Will a function return an aggregate type in memory or in a
7969    register?  Return 0 if an aggregate type can be returned in a
7970    register, 1 if it must be returned in memory.  */
7971
7972 static int
7973 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7974 {
7975   enum type_code code;
7976
7977   type = check_typedef (type);
7978
7979   /* Simple, non-aggregate types (ie not including vectors and
7980      complex) are always returned in a register (or registers).  */
7981   code = TYPE_CODE (type);
7982   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7983       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7984     return 0;
7985
7986   if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
7987     {
7988       /* Vector values should be returned using ARM registers if they
7989          are not over 16 bytes.  */
7990       return (TYPE_LENGTH (type) > 16);
7991     }
7992
7993   if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
7994     {
7995       /* The AAPCS says all aggregates not larger than a word are returned
7996          in a register.  */
7997       if (TYPE_LENGTH (type) <= INT_REGISTER_SIZE)
7998         return 0;
7999
8000       return 1;
8001     }
8002   else
8003     {
8004       int nRc;
8005
8006       /* All aggregate types that won't fit in a register must be returned
8007          in memory.  */
8008       if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
8009         return 1;
8010
8011       /* In the ARM ABI, "integer" like aggregate types are returned in
8012          registers.  For an aggregate type to be integer like, its size
8013          must be less than or equal to INT_REGISTER_SIZE and the
8014          offset of each addressable subfield must be zero.  Note that bit
8015          fields are not addressable, and all addressable subfields of
8016          unions always start at offset zero.
8017
8018          This function is based on the behaviour of GCC 2.95.1.
8019          See: gcc/arm.c: arm_return_in_memory() for details.
8020
8021          Note: All versions of GCC before GCC 2.95.2 do not set up the
8022          parameters correctly for a function returning the following
8023          structure: struct { float f;}; This should be returned in memory,
8024          not a register.  Richard Earnshaw sent me a patch, but I do not
8025          know of any way to detect if a function like the above has been
8026          compiled with the correct calling convention.  */
8027
8028       /* Assume all other aggregate types can be returned in a register.
8029          Run a check for structures, unions and arrays.  */
8030       nRc = 0;
8031
8032       if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
8033         {
8034           int i;
8035           /* Need to check if this struct/union is "integer" like.  For
8036              this to be true, its size must be less than or equal to
8037              INT_REGISTER_SIZE and the offset of each addressable
8038              subfield must be zero.  Note that bit fields are not
8039              addressable, and unions always start at offset zero.  If any
8040              of the subfields is a floating point type, the struct/union
8041              cannot be an integer type.  */
8042
8043           /* For each field in the object, check:
8044              1) Is it FP? --> yes, nRc = 1;
8045              2) Is it addressable (bitpos != 0) and
8046              not packed (bitsize == 0)?
8047              --> yes, nRc = 1
8048           */
8049
8050           for (i = 0; i < TYPE_NFIELDS (type); i++)
8051             {
8052               enum type_code field_type_code;
8053
8054               field_type_code
8055                 = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
8056                                                              i)));
8057
8058               /* Is it a floating point type field?  */
8059               if (field_type_code == TYPE_CODE_FLT)
8060                 {
8061                   nRc = 1;
8062                   break;
8063                 }
8064
8065               /* If bitpos != 0, then we have to care about it.  */
8066               if (TYPE_FIELD_BITPOS (type, i) != 0)
8067                 {
8068                   /* Bitfields are not addressable.  If the field bitsize is 
8069                      zero, then the field is not packed.  Hence it cannot be
8070                      a bitfield or any other packed type.  */
8071                   if (TYPE_FIELD_BITSIZE (type, i) == 0)
8072                     {
8073                       nRc = 1;
8074                       break;
8075                     }
8076                 }
8077             }
8078         }
8079
8080       return nRc;
8081     }
8082 }
8083
8084 /* Write into appropriate registers a function return value of type
8085    TYPE, given in virtual format.  */
8086
8087 static void
8088 arm_store_return_value (struct type *type, struct regcache *regs,
8089                         const gdb_byte *valbuf)
8090 {
8091   struct gdbarch *gdbarch = regs->arch ();
8092   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8093
8094   if (TYPE_CODE (type) == TYPE_CODE_FLT)
8095     {
8096       gdb_byte buf[FP_REGISTER_SIZE];
8097
8098       switch (gdbarch_tdep (gdbarch)->fp_model)
8099         {
8100         case ARM_FLOAT_FPA:
8101
8102           target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8103           regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
8104           break;
8105
8106         case ARM_FLOAT_SOFT_FPA:
8107         case ARM_FLOAT_SOFT_VFP:
8108           /* ARM_FLOAT_VFP can arise if this is a variadic function so
8109              not using the VFP ABI code.  */
8110         case ARM_FLOAT_VFP:
8111           regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
8112           if (TYPE_LENGTH (type) > 4)
8113             regcache_cooked_write (regs, ARM_A1_REGNUM + 1, 
8114                                    valbuf + INT_REGISTER_SIZE);
8115           break;
8116
8117         default:
8118           internal_error (__FILE__, __LINE__,
8119                           _("arm_store_return_value: Floating "
8120                             "point model not supported"));
8121           break;
8122         }
8123     }
8124   else if (TYPE_CODE (type) == TYPE_CODE_INT
8125            || TYPE_CODE (type) == TYPE_CODE_CHAR
8126            || TYPE_CODE (type) == TYPE_CODE_BOOL
8127            || TYPE_CODE (type) == TYPE_CODE_PTR
8128            || TYPE_IS_REFERENCE (type)
8129            || TYPE_CODE (type) == TYPE_CODE_ENUM)
8130     {
8131       if (TYPE_LENGTH (type) <= 4)
8132         {
8133           /* Values of one word or less are zero/sign-extended and
8134              returned in r0.  */
8135           bfd_byte tmpbuf[INT_REGISTER_SIZE];
8136           LONGEST val = unpack_long (type, valbuf);
8137
8138           store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
8139           regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
8140         }
8141       else
8142         {
8143           /* Integral values greater than one word are stored in consecutive
8144              registers starting with r0.  This will always be a multiple of
8145              the regiser size.  */
8146           int len = TYPE_LENGTH (type);
8147           int regno = ARM_A1_REGNUM;
8148
8149           while (len > 0)
8150             {
8151               regcache_cooked_write (regs, regno++, valbuf);
8152               len -= INT_REGISTER_SIZE;
8153               valbuf += INT_REGISTER_SIZE;
8154             }
8155         }
8156     }
8157   else
8158     {
8159       /* For a structure or union the behaviour is as if the value had
8160          been stored to word-aligned memory and then loaded into 
8161          registers with 32-bit load instruction(s).  */
8162       int len = TYPE_LENGTH (type);
8163       int regno = ARM_A1_REGNUM;
8164       bfd_byte tmpbuf[INT_REGISTER_SIZE];
8165
8166       while (len > 0)
8167         {
8168           memcpy (tmpbuf, valbuf,
8169                   len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8170           regcache_cooked_write (regs, regno++, tmpbuf);
8171           len -= INT_REGISTER_SIZE;
8172           valbuf += INT_REGISTER_SIZE;
8173         }
8174     }
8175 }
8176
8177
8178 /* Handle function return values.  */
8179
8180 static enum return_value_convention
8181 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8182                   struct type *valtype, struct regcache *regcache,
8183                   gdb_byte *readbuf, const gdb_byte *writebuf)
8184 {
8185   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8186   struct type *func_type = function ? value_type (function) : NULL;
8187   enum arm_vfp_cprc_base_type vfp_base_type;
8188   int vfp_base_count;
8189
8190   if (arm_vfp_abi_for_function (gdbarch, func_type)
8191       && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8192     {
8193       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8194       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8195       int i;
8196       for (i = 0; i < vfp_base_count; i++)
8197         {
8198           if (reg_char == 'q')
8199             {
8200               if (writebuf)
8201                 arm_neon_quad_write (gdbarch, regcache, i,
8202                                      writebuf + i * unit_length);
8203
8204               if (readbuf)
8205                 arm_neon_quad_read (gdbarch, regcache, i,
8206                                     readbuf + i * unit_length);
8207             }
8208           else
8209             {
8210               char name_buf[4];
8211               int regnum;
8212
8213               xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8214               regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8215                                                     strlen (name_buf));
8216               if (writebuf)
8217                 regcache_cooked_write (regcache, regnum,
8218                                        writebuf + i * unit_length);
8219               if (readbuf)
8220                 regcache_cooked_read (regcache, regnum,
8221                                       readbuf + i * unit_length);
8222             }
8223         }
8224       return RETURN_VALUE_REGISTER_CONVENTION;
8225     }
8226
8227   if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
8228       || TYPE_CODE (valtype) == TYPE_CODE_UNION
8229       || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
8230     {
8231       if (tdep->struct_return == pcc_struct_return
8232           || arm_return_in_memory (gdbarch, valtype))
8233         return RETURN_VALUE_STRUCT_CONVENTION;
8234     }
8235   else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
8236     {
8237       if (arm_return_in_memory (gdbarch, valtype))
8238         return RETURN_VALUE_STRUCT_CONVENTION;
8239     }
8240
8241   if (writebuf)
8242     arm_store_return_value (valtype, regcache, writebuf);
8243
8244   if (readbuf)
8245     arm_extract_return_value (valtype, regcache, readbuf);
8246
8247   return RETURN_VALUE_REGISTER_CONVENTION;
8248 }
8249
8250
8251 static int
8252 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8253 {
8254   struct gdbarch *gdbarch = get_frame_arch (frame);
8255   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8256   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8257   CORE_ADDR jb_addr;
8258   gdb_byte buf[INT_REGISTER_SIZE];
8259   
8260   jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8261
8262   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8263                           INT_REGISTER_SIZE))
8264     return 0;
8265
8266   *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
8267   return 1;
8268 }
8269
8270 /* Recognize GCC and GNU ld's trampolines.  If we are in a trampoline,
8271    return the target PC.  Otherwise return 0.  */
8272
8273 CORE_ADDR
8274 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8275 {
8276   const char *name;
8277   int namelen;
8278   CORE_ADDR start_addr;
8279
8280   /* Find the starting address and name of the function containing the PC.  */
8281   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8282     {
8283       /* Trampoline 'bx reg' doesn't belong to any functions.  Do the
8284          check here.  */
8285       start_addr = arm_skip_bx_reg (frame, pc);
8286       if (start_addr != 0)
8287         return start_addr;
8288
8289       return 0;
8290     }
8291
8292   /* If PC is in a Thumb call or return stub, return the address of the
8293      target PC, which is in a register.  The thunk functions are called
8294      _call_via_xx, where x is the register name.  The possible names
8295      are r0-r9, sl, fp, ip, sp, and lr.  ARM RealView has similar
8296      functions, named __ARM_call_via_r[0-7].  */
8297   if (startswith (name, "_call_via_")
8298       || startswith (name, "__ARM_call_via_"))
8299     {
8300       /* Use the name suffix to determine which register contains the
8301          target PC.  */
8302       static const char *table[15] =
8303       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8304        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8305       };
8306       int regno;
8307       int offset = strlen (name) - 2;
8308
8309       for (regno = 0; regno <= 14; regno++)
8310         if (strcmp (&name[offset], table[regno]) == 0)
8311           return get_frame_register_unsigned (frame, regno);
8312     }
8313
8314   /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8315      non-interworking calls to foo.  We could decode the stubs
8316      to find the target but it's easier to use the symbol table.  */
8317   namelen = strlen (name);
8318   if (name[0] == '_' && name[1] == '_'
8319       && ((namelen > 2 + strlen ("_from_thumb")
8320            && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8321           || (namelen > 2 + strlen ("_from_arm")
8322               && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8323     {
8324       char *target_name;
8325       int target_len = namelen - 2;
8326       struct bound_minimal_symbol minsym;
8327       struct objfile *objfile;
8328       struct obj_section *sec;
8329
8330       if (name[namelen - 1] == 'b')
8331         target_len -= strlen ("_from_thumb");
8332       else
8333         target_len -= strlen ("_from_arm");
8334
8335       target_name = (char *) alloca (target_len + 1);
8336       memcpy (target_name, name + 2, target_len);
8337       target_name[target_len] = '\0';
8338
8339       sec = find_pc_section (pc);
8340       objfile = (sec == NULL) ? NULL : sec->objfile;
8341       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8342       if (minsym.minsym != NULL)
8343         return BMSYMBOL_VALUE_ADDRESS (minsym);
8344       else
8345         return 0;
8346     }
8347
8348   return 0;                     /* not a stub */
8349 }
8350
8351 static void
8352 set_arm_command (const char *args, int from_tty)
8353 {
8354   printf_unfiltered (_("\
8355 \"set arm\" must be followed by an apporpriate subcommand.\n"));
8356   help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
8357 }
8358
8359 static void
8360 show_arm_command (const char *args, int from_tty)
8361 {
8362   cmd_show_list (showarmcmdlist, from_tty, "");
8363 }
8364
8365 static void
8366 arm_update_current_architecture (void)
8367 {
8368   struct gdbarch_info info;
8369
8370   /* If the current architecture is not ARM, we have nothing to do.  */
8371   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8372     return;
8373
8374   /* Update the architecture.  */
8375   gdbarch_info_init (&info);
8376
8377   if (!gdbarch_update_p (info))
8378     internal_error (__FILE__, __LINE__, _("could not update architecture"));
8379 }
8380
8381 static void
8382 set_fp_model_sfunc (const char *args, int from_tty,
8383                     struct cmd_list_element *c)
8384 {
8385   int fp_model;
8386
8387   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8388     if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8389       {
8390         arm_fp_model = (enum arm_float_model) fp_model;
8391         break;
8392       }
8393
8394   if (fp_model == ARM_FLOAT_LAST)
8395     internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8396                     current_fp_model);
8397
8398   arm_update_current_architecture ();
8399 }
8400
8401 static void
8402 show_fp_model (struct ui_file *file, int from_tty,
8403                struct cmd_list_element *c, const char *value)
8404 {
8405   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8406
8407   if (arm_fp_model == ARM_FLOAT_AUTO
8408       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8409     fprintf_filtered (file, _("\
8410 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8411                       fp_model_strings[tdep->fp_model]);
8412   else
8413     fprintf_filtered (file, _("\
8414 The current ARM floating point model is \"%s\".\n"),
8415                       fp_model_strings[arm_fp_model]);
8416 }
8417
8418 static void
8419 arm_set_abi (const char *args, int from_tty,
8420              struct cmd_list_element *c)
8421 {
8422   int arm_abi;
8423
8424   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8425     if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8426       {
8427         arm_abi_global = (enum arm_abi_kind) arm_abi;
8428         break;
8429       }
8430
8431   if (arm_abi == ARM_ABI_LAST)
8432     internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8433                     arm_abi_string);
8434
8435   arm_update_current_architecture ();
8436 }
8437
8438 static void
8439 arm_show_abi (struct ui_file *file, int from_tty,
8440              struct cmd_list_element *c, const char *value)
8441 {
8442   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8443
8444   if (arm_abi_global == ARM_ABI_AUTO
8445       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8446     fprintf_filtered (file, _("\
8447 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8448                       arm_abi_strings[tdep->arm_abi]);
8449   else
8450     fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8451                       arm_abi_string);
8452 }
8453
8454 static void
8455 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8456                         struct cmd_list_element *c, const char *value)
8457 {
8458   fprintf_filtered (file,
8459                     _("The current execution mode assumed "
8460                       "(when symbols are unavailable) is \"%s\".\n"),
8461                     arm_fallback_mode_string);
8462 }
8463
8464 static void
8465 arm_show_force_mode (struct ui_file *file, int from_tty,
8466                      struct cmd_list_element *c, const char *value)
8467 {
8468   fprintf_filtered (file,
8469                     _("The current execution mode assumed "
8470                       "(even when symbols are available) is \"%s\".\n"),
8471                     arm_force_mode_string);
8472 }
8473
8474 /* If the user changes the register disassembly style used for info
8475    register and other commands, we have to also switch the style used
8476    in opcodes for disassembly output.  This function is run in the "set
8477    arm disassembly" command, and does that.  */
8478
8479 static void
8480 set_disassembly_style_sfunc (const char *args, int from_tty,
8481                              struct cmd_list_element *c)
8482 {
8483   /* Convert the short style name into the long style name (eg, reg-names-*)
8484      before calling the generic set_disassembler_options() function.  */
8485   std::string long_name = std::string ("reg-names-") + disassembly_style;
8486   set_disassembler_options (&long_name[0]);
8487 }
8488
8489 static void
8490 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8491                               struct cmd_list_element *c, const char *value)
8492 {
8493   struct gdbarch *gdbarch = get_current_arch ();
8494   char *options = get_disassembler_options (gdbarch);
8495   const char *style = "";
8496   int len = 0;
8497   const char *opt;
8498
8499   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8500     if (CONST_STRNEQ (opt, "reg-names-"))
8501       {
8502         style = &opt[strlen ("reg-names-")];
8503         len = strcspn (style, ",");
8504       }
8505
8506   fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8507 }
8508 \f
8509 /* Return the ARM register name corresponding to register I.  */
8510 static const char *
8511 arm_register_name (struct gdbarch *gdbarch, int i)
8512 {
8513   const int num_regs = gdbarch_num_regs (gdbarch);
8514
8515   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8516       && i >= num_regs && i < num_regs + 32)
8517     {
8518       static const char *const vfp_pseudo_names[] = {
8519         "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8520         "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8521         "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8522         "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8523       };
8524
8525       return vfp_pseudo_names[i - num_regs];
8526     }
8527
8528   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8529       && i >= num_regs + 32 && i < num_regs + 32 + 16)
8530     {
8531       static const char *const neon_pseudo_names[] = {
8532         "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8533         "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8534       };
8535
8536       return neon_pseudo_names[i - num_regs - 32];
8537     }
8538
8539   if (i >= ARRAY_SIZE (arm_register_names))
8540     /* These registers are only supported on targets which supply
8541        an XML description.  */
8542     return "";
8543
8544   return arm_register_names[i];
8545 }
8546
8547 /* Test whether the coff symbol specific value corresponds to a Thumb
8548    function.  */
8549
8550 static int
8551 coff_sym_is_thumb (int val)
8552 {
8553   return (val == C_THUMBEXT
8554           || val == C_THUMBSTAT
8555           || val == C_THUMBEXTFUNC
8556           || val == C_THUMBSTATFUNC
8557           || val == C_THUMBLABEL);
8558 }
8559
8560 /* arm_coff_make_msymbol_special()
8561    arm_elf_make_msymbol_special()
8562    
8563    These functions test whether the COFF or ELF symbol corresponds to
8564    an address in thumb code, and set a "special" bit in a minimal
8565    symbol to indicate that it does.  */
8566    
8567 static void
8568 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8569 {
8570   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8571
8572   if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8573       == ST_BRANCH_TO_THUMB)
8574     MSYMBOL_SET_SPECIAL (msym);
8575 }
8576
8577 static void
8578 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8579 {
8580   if (coff_sym_is_thumb (val))
8581     MSYMBOL_SET_SPECIAL (msym);
8582 }
8583
8584 static void
8585 arm_objfile_data_free (struct objfile *objfile, void *arg)
8586 {
8587   struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
8588   unsigned int i;
8589
8590   for (i = 0; i < objfile->obfd->section_count; i++)
8591     VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
8592 }
8593
8594 static void
8595 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8596                            asymbol *sym)
8597 {
8598   const char *name = bfd_asymbol_name (sym);
8599   struct arm_per_objfile *data;
8600   VEC(arm_mapping_symbol_s) **map_p;
8601   struct arm_mapping_symbol new_map_sym;
8602
8603   gdb_assert (name[0] == '$');
8604   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8605     return;
8606
8607   data = (struct arm_per_objfile *) objfile_data (objfile,
8608                                                   arm_objfile_data_key);
8609   if (data == NULL)
8610     {
8611       data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
8612                              struct arm_per_objfile);
8613       set_objfile_data (objfile, arm_objfile_data_key, data);
8614       data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
8615                                            objfile->obfd->section_count,
8616                                            VEC(arm_mapping_symbol_s) *);
8617     }
8618   map_p = &data->section_maps[bfd_get_section (sym)->index];
8619
8620   new_map_sym.value = sym->value;
8621   new_map_sym.type = name[1];
8622
8623   /* Assume that most mapping symbols appear in order of increasing
8624      value.  If they were randomly distributed, it would be faster to
8625      always push here and then sort at first use.  */
8626   if (!VEC_empty (arm_mapping_symbol_s, *map_p))
8627     {
8628       struct arm_mapping_symbol *prev_map_sym;
8629
8630       prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
8631       if (prev_map_sym->value >= sym->value)
8632         {
8633           unsigned int idx;
8634           idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
8635                                  arm_compare_mapping_symbols);
8636           VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
8637           return;
8638         }
8639     }
8640
8641   VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
8642 }
8643
8644 static void
8645 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8646 {
8647   struct gdbarch *gdbarch = regcache->arch ();
8648   regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8649
8650   /* If necessary, set the T bit.  */
8651   if (arm_apcs_32)
8652     {
8653       ULONGEST val, t_bit;
8654       regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8655       t_bit = arm_psr_thumb_bit (gdbarch);
8656       if (arm_pc_is_thumb (gdbarch, pc))
8657         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8658                                         val | t_bit);
8659       else
8660         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8661                                         val & ~t_bit);
8662     }
8663 }
8664
8665 /* Read the contents of a NEON quad register, by reading from two
8666    double registers.  This is used to implement the quad pseudo
8667    registers, and for argument passing in case the quad registers are
8668    missing; vectors are passed in quad registers when using the VFP
8669    ABI, even if a NEON unit is not present.  REGNUM is the index of
8670    the quad register, in [0, 15].  */
8671
8672 static enum register_status
8673 arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8674                     int regnum, gdb_byte *buf)
8675 {
8676   char name_buf[4];
8677   gdb_byte reg_buf[8];
8678   int offset, double_regnum;
8679   enum register_status status;
8680
8681   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8682   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8683                                                strlen (name_buf));
8684
8685   /* d0 is always the least significant half of q0.  */
8686   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8687     offset = 8;
8688   else
8689     offset = 0;
8690
8691   status = regcache->raw_read (double_regnum, reg_buf);
8692   if (status != REG_VALID)
8693     return status;
8694   memcpy (buf + offset, reg_buf, 8);
8695
8696   offset = 8 - offset;
8697   status = regcache->raw_read (double_regnum + 1, reg_buf);
8698   if (status != REG_VALID)
8699     return status;
8700   memcpy (buf + offset, reg_buf, 8);
8701
8702   return REG_VALID;
8703 }
8704
8705 static enum register_status
8706 arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8707                  int regnum, gdb_byte *buf)
8708 {
8709   const int num_regs = gdbarch_num_regs (gdbarch);
8710   char name_buf[4];
8711   gdb_byte reg_buf[8];
8712   int offset, double_regnum;
8713
8714   gdb_assert (regnum >= num_regs);
8715   regnum -= num_regs;
8716
8717   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8718     /* Quad-precision register.  */
8719     return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8720   else
8721     {
8722       enum register_status status;
8723
8724       /* Single-precision register.  */
8725       gdb_assert (regnum < 32);
8726
8727       /* s0 is always the least significant half of d0.  */
8728       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8729         offset = (regnum & 1) ? 0 : 4;
8730       else
8731         offset = (regnum & 1) ? 4 : 0;
8732
8733       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8734       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8735                                                    strlen (name_buf));
8736
8737       status = regcache->raw_read (double_regnum, reg_buf);
8738       if (status == REG_VALID)
8739         memcpy (buf, reg_buf + offset, 4);
8740       return status;
8741     }
8742 }
8743
8744 /* Store the contents of BUF to a NEON quad register, by writing to
8745    two double registers.  This is used to implement the quad pseudo
8746    registers, and for argument passing in case the quad registers are
8747    missing; vectors are passed in quad registers when using the VFP
8748    ABI, even if a NEON unit is not present.  REGNUM is the index
8749    of the quad register, in [0, 15].  */
8750
8751 static void
8752 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8753                      int regnum, const gdb_byte *buf)
8754 {
8755   char name_buf[4];
8756   int offset, double_regnum;
8757
8758   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8759   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8760                                                strlen (name_buf));
8761
8762   /* d0 is always the least significant half of q0.  */
8763   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8764     offset = 8;
8765   else
8766     offset = 0;
8767
8768   regcache_raw_write (regcache, double_regnum, buf + offset);
8769   offset = 8 - offset;
8770   regcache_raw_write (regcache, double_regnum + 1, buf + offset);
8771 }
8772
8773 static void
8774 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8775                   int regnum, const gdb_byte *buf)
8776 {
8777   const int num_regs = gdbarch_num_regs (gdbarch);
8778   char name_buf[4];
8779   gdb_byte reg_buf[8];
8780   int offset, double_regnum;
8781
8782   gdb_assert (regnum >= num_regs);
8783   regnum -= num_regs;
8784
8785   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8786     /* Quad-precision register.  */
8787     arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8788   else
8789     {
8790       /* Single-precision register.  */
8791       gdb_assert (regnum < 32);
8792
8793       /* s0 is always the least significant half of d0.  */
8794       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8795         offset = (regnum & 1) ? 0 : 4;
8796       else
8797         offset = (regnum & 1) ? 4 : 0;
8798
8799       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8800       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8801                                                    strlen (name_buf));
8802
8803       regcache_raw_read (regcache, double_regnum, reg_buf);
8804       memcpy (reg_buf + offset, buf, 4);
8805       regcache_raw_write (regcache, double_regnum, reg_buf);
8806     }
8807 }
8808
8809 static struct value *
8810 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8811 {
8812   const int *reg_p = (const int *) baton;
8813   return value_of_register (*reg_p, frame);
8814 }
8815 \f
8816 static enum gdb_osabi
8817 arm_elf_osabi_sniffer (bfd *abfd)
8818 {
8819   unsigned int elfosabi;
8820   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8821
8822   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8823
8824   if (elfosabi == ELFOSABI_ARM)
8825     /* GNU tools use this value.  Check note sections in this case,
8826        as well.  */
8827     bfd_map_over_sections (abfd,
8828                            generic_elf_osabi_sniff_abi_tag_sections, 
8829                            &osabi);
8830
8831   /* Anything else will be handled by the generic ELF sniffer.  */
8832   return osabi;
8833 }
8834
8835 static int
8836 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8837                           struct reggroup *group)
8838 {
8839   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
8840      this, FPS register belongs to save_regroup, restore_reggroup, and
8841      all_reggroup, of course.  */
8842   if (regnum == ARM_FPS_REGNUM)
8843     return (group == float_reggroup
8844             || group == save_reggroup
8845             || group == restore_reggroup
8846             || group == all_reggroup);
8847   else
8848     return default_register_reggroup_p (gdbarch, regnum, group);
8849 }
8850
8851 \f
8852 /* For backward-compatibility we allow two 'g' packet lengths with
8853    the remote protocol depending on whether FPA registers are
8854    supplied.  M-profile targets do not have FPA registers, but some
8855    stubs already exist in the wild which use a 'g' packet which
8856    supplies them albeit with dummy values.  The packet format which
8857    includes FPA registers should be considered deprecated for
8858    M-profile targets.  */
8859
8860 static void
8861 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8862 {
8863   if (gdbarch_tdep (gdbarch)->is_m)
8864     {
8865       /* If we know from the executable this is an M-profile target,
8866          cater for remote targets whose register set layout is the
8867          same as the FPA layout.  */
8868       register_remote_g_packet_guess (gdbarch,
8869                                       /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
8870                                       (16 * INT_REGISTER_SIZE)
8871                                       + (8 * FP_REGISTER_SIZE)
8872                                       + (2 * INT_REGISTER_SIZE),
8873                                       tdesc_arm_with_m_fpa_layout);
8874
8875       /* The regular M-profile layout.  */
8876       register_remote_g_packet_guess (gdbarch,
8877                                       /* r0-r12,sp,lr,pc; xpsr */
8878                                       (16 * INT_REGISTER_SIZE)
8879                                       + INT_REGISTER_SIZE,
8880                                       tdesc_arm_with_m);
8881
8882       /* M-profile plus M4F VFP.  */
8883       register_remote_g_packet_guess (gdbarch,
8884                                       /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
8885                                       (16 * INT_REGISTER_SIZE)
8886                                       + (16 * VFP_REGISTER_SIZE)
8887                                       + (2 * INT_REGISTER_SIZE),
8888                                       tdesc_arm_with_m_vfp_d16);
8889     }
8890
8891   /* Otherwise we don't have a useful guess.  */
8892 }
8893
8894 /* Implement the code_of_frame_writable gdbarch method.  */
8895
8896 static int
8897 arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
8898 {
8899   if (gdbarch_tdep (gdbarch)->is_m
8900       && get_frame_type (frame) == SIGTRAMP_FRAME)
8901     {
8902       /* M-profile exception frames return to some magic PCs, where
8903          isn't writable at all.  */
8904       return 0;
8905     }
8906   else
8907     return 1;
8908 }
8909
8910 \f
8911 /* Initialize the current architecture based on INFO.  If possible,
8912    re-use an architecture from ARCHES, which is a list of
8913    architectures already created during this debugging session.
8914
8915    Called e.g. at program startup, when reading a core file, and when
8916    reading a binary file.  */
8917
8918 static struct gdbarch *
8919 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8920 {
8921   struct gdbarch_tdep *tdep;
8922   struct gdbarch *gdbarch;
8923   struct gdbarch_list *best_arch;
8924   enum arm_abi_kind arm_abi = arm_abi_global;
8925   enum arm_float_model fp_model = arm_fp_model;
8926   struct tdesc_arch_data *tdesc_data = NULL;
8927   int i, is_m = 0;
8928   int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
8929   int have_wmmx_registers = 0;
8930   int have_neon = 0;
8931   int have_fpa_registers = 1;
8932   const struct target_desc *tdesc = info.target_desc;
8933
8934   /* If we have an object to base this architecture on, try to determine
8935      its ABI.  */
8936
8937   if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8938     {
8939       int ei_osabi, e_flags;
8940
8941       switch (bfd_get_flavour (info.abfd))
8942         {
8943         case bfd_target_coff_flavour:
8944           /* Assume it's an old APCS-style ABI.  */
8945           /* XXX WinCE?  */
8946           arm_abi = ARM_ABI_APCS;
8947           break;
8948
8949         case bfd_target_elf_flavour:
8950           ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8951           e_flags = elf_elfheader (info.abfd)->e_flags;
8952
8953           if (ei_osabi == ELFOSABI_ARM)
8954             {
8955               /* GNU tools used to use this value, but do not for EABI
8956                  objects.  There's nowhere to tag an EABI version
8957                  anyway, so assume APCS.  */
8958               arm_abi = ARM_ABI_APCS;
8959             }
8960           else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8961             {
8962               int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8963               int attr_arch, attr_profile;
8964
8965               switch (eabi_ver)
8966                 {
8967                 case EF_ARM_EABI_UNKNOWN:
8968                   /* Assume GNU tools.  */
8969                   arm_abi = ARM_ABI_APCS;
8970                   break;
8971
8972                 case EF_ARM_EABI_VER4:
8973                 case EF_ARM_EABI_VER5:
8974                   arm_abi = ARM_ABI_AAPCS;
8975                   /* EABI binaries default to VFP float ordering.
8976                      They may also contain build attributes that can
8977                      be used to identify if the VFP argument-passing
8978                      ABI is in use.  */
8979                   if (fp_model == ARM_FLOAT_AUTO)
8980                     {
8981 #ifdef HAVE_ELF
8982                       switch (bfd_elf_get_obj_attr_int (info.abfd,
8983                                                         OBJ_ATTR_PROC,
8984                                                         Tag_ABI_VFP_args))
8985                         {
8986                         case AEABI_VFP_args_base:
8987                           /* "The user intended FP parameter/result
8988                              passing to conform to AAPCS, base
8989                              variant".  */
8990                           fp_model = ARM_FLOAT_SOFT_VFP;
8991                           break;
8992                         case AEABI_VFP_args_vfp:
8993                           /* "The user intended FP parameter/result
8994                              passing to conform to AAPCS, VFP
8995                              variant".  */
8996                           fp_model = ARM_FLOAT_VFP;
8997                           break;
8998                         case AEABI_VFP_args_toolchain:
8999                           /* "The user intended FP parameter/result
9000                              passing to conform to tool chain-specific
9001                              conventions" - we don't know any such
9002                              conventions, so leave it as "auto".  */
9003                           break;
9004                         case AEABI_VFP_args_compatible:
9005                           /* "Code is compatible with both the base
9006                              and VFP variants; the user did not permit
9007                              non-variadic functions to pass FP
9008                              parameters/results" - leave it as
9009                              "auto".  */
9010                           break;
9011                         default:
9012                           /* Attribute value not mentioned in the
9013                              November 2012 ABI, so leave it as
9014                              "auto".  */
9015                           break;
9016                         }
9017 #else
9018                       fp_model = ARM_FLOAT_SOFT_VFP;
9019 #endif
9020                     }
9021                   break;
9022
9023                 default:
9024                   /* Leave it as "auto".  */
9025                   warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
9026                   break;
9027                 }
9028
9029 #ifdef HAVE_ELF
9030               /* Detect M-profile programs.  This only works if the
9031                  executable file includes build attributes; GCC does
9032                  copy them to the executable, but e.g. RealView does
9033                  not.  */
9034               attr_arch = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9035                                                     Tag_CPU_arch);
9036               attr_profile = bfd_elf_get_obj_attr_int (info.abfd,
9037                                                        OBJ_ATTR_PROC,
9038                                                        Tag_CPU_arch_profile);
9039               /* GCC specifies the profile for v6-M; RealView only
9040                  specifies the profile for architectures starting with
9041                  V7 (as opposed to architectures with a tag
9042                  numerically greater than TAG_CPU_ARCH_V7).  */
9043               if (!tdesc_has_registers (tdesc)
9044                   && (attr_arch == TAG_CPU_ARCH_V6_M
9045                       || attr_arch == TAG_CPU_ARCH_V6S_M
9046                       || attr_profile == 'M'))
9047                 is_m = 1;
9048 #endif
9049             }
9050
9051           if (fp_model == ARM_FLOAT_AUTO)
9052             {
9053               int e_flags = elf_elfheader (info.abfd)->e_flags;
9054
9055               switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
9056                 {
9057                 case 0:
9058                   /* Leave it as "auto".  Strictly speaking this case
9059                      means FPA, but almost nobody uses that now, and
9060                      many toolchains fail to set the appropriate bits
9061                      for the floating-point model they use.  */
9062                   break;
9063                 case EF_ARM_SOFT_FLOAT:
9064                   fp_model = ARM_FLOAT_SOFT_FPA;
9065                   break;
9066                 case EF_ARM_VFP_FLOAT:
9067                   fp_model = ARM_FLOAT_VFP;
9068                   break;
9069                 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9070                   fp_model = ARM_FLOAT_SOFT_VFP;
9071                   break;
9072                 }
9073             }
9074
9075           if (e_flags & EF_ARM_BE8)
9076             info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9077
9078           break;
9079
9080         default:
9081           /* Leave it as "auto".  */
9082           break;
9083         }
9084     }
9085
9086   /* Check any target description for validity.  */
9087   if (tdesc_has_registers (tdesc))
9088     {
9089       /* For most registers we require GDB's default names; but also allow
9090          the numeric names for sp / lr / pc, as a convenience.  */
9091       static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9092       static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9093       static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9094
9095       const struct tdesc_feature *feature;
9096       int valid_p;
9097
9098       feature = tdesc_find_feature (tdesc,
9099                                     "org.gnu.gdb.arm.core");
9100       if (feature == NULL)
9101         {
9102           feature = tdesc_find_feature (tdesc,
9103                                         "org.gnu.gdb.arm.m-profile");
9104           if (feature == NULL)
9105             return NULL;
9106           else
9107             is_m = 1;
9108         }
9109
9110       tdesc_data = tdesc_data_alloc ();
9111
9112       valid_p = 1;
9113       for (i = 0; i < ARM_SP_REGNUM; i++)
9114         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9115                                             arm_register_names[i]);
9116       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9117                                                   ARM_SP_REGNUM,
9118                                                   arm_sp_names);
9119       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9120                                                   ARM_LR_REGNUM,
9121                                                   arm_lr_names);
9122       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9123                                                   ARM_PC_REGNUM,
9124                                                   arm_pc_names);
9125       if (is_m)
9126         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9127                                             ARM_PS_REGNUM, "xpsr");
9128       else
9129         valid_p &= tdesc_numbered_register (feature, tdesc_data,
9130                                             ARM_PS_REGNUM, "cpsr");
9131
9132       if (!valid_p)
9133         {
9134           tdesc_data_cleanup (tdesc_data);
9135           return NULL;
9136         }
9137
9138       feature = tdesc_find_feature (tdesc,
9139                                     "org.gnu.gdb.arm.fpa");
9140       if (feature != NULL)
9141         {
9142           valid_p = 1;
9143           for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9144             valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9145                                                 arm_register_names[i]);
9146           if (!valid_p)
9147             {
9148               tdesc_data_cleanup (tdesc_data);
9149               return NULL;
9150             }
9151         }
9152       else
9153         have_fpa_registers = 0;
9154
9155       feature = tdesc_find_feature (tdesc,
9156                                     "org.gnu.gdb.xscale.iwmmxt");
9157       if (feature != NULL)
9158         {
9159           static const char *const iwmmxt_names[] = {
9160             "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9161             "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9162             "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9163             "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9164           };
9165
9166           valid_p = 1;
9167           for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9168             valid_p
9169               &= tdesc_numbered_register (feature, tdesc_data, i,
9170                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9171
9172           /* Check for the control registers, but do not fail if they
9173              are missing.  */
9174           for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9175             tdesc_numbered_register (feature, tdesc_data, i,
9176                                      iwmmxt_names[i - ARM_WR0_REGNUM]);
9177
9178           for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9179             valid_p
9180               &= tdesc_numbered_register (feature, tdesc_data, i,
9181                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9182
9183           if (!valid_p)
9184             {
9185               tdesc_data_cleanup (tdesc_data);
9186               return NULL;
9187             }
9188
9189           have_wmmx_registers = 1;
9190         }
9191
9192       /* If we have a VFP unit, check whether the single precision registers
9193          are present.  If not, then we will synthesize them as pseudo
9194          registers.  */
9195       feature = tdesc_find_feature (tdesc,
9196                                     "org.gnu.gdb.arm.vfp");
9197       if (feature != NULL)
9198         {
9199           static const char *const vfp_double_names[] = {
9200             "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9201             "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9202             "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9203             "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9204           };
9205
9206           /* Require the double precision registers.  There must be either
9207              16 or 32.  */
9208           valid_p = 1;
9209           for (i = 0; i < 32; i++)
9210             {
9211               valid_p &= tdesc_numbered_register (feature, tdesc_data,
9212                                                   ARM_D0_REGNUM + i,
9213                                                   vfp_double_names[i]);
9214               if (!valid_p)
9215                 break;
9216             }
9217           if (!valid_p && i == 16)
9218             valid_p = 1;
9219
9220           /* Also require FPSCR.  */
9221           valid_p &= tdesc_numbered_register (feature, tdesc_data,
9222                                               ARM_FPSCR_REGNUM, "fpscr");
9223           if (!valid_p)
9224             {
9225               tdesc_data_cleanup (tdesc_data);
9226               return NULL;
9227             }
9228
9229           if (tdesc_unnumbered_register (feature, "s0") == 0)
9230             have_vfp_pseudos = 1;
9231
9232           vfp_register_count = i;
9233
9234           /* If we have VFP, also check for NEON.  The architecture allows
9235              NEON without VFP (integer vector operations only), but GDB
9236              does not support that.  */
9237           feature = tdesc_find_feature (tdesc,
9238                                         "org.gnu.gdb.arm.neon");
9239           if (feature != NULL)
9240             {
9241               /* NEON requires 32 double-precision registers.  */
9242               if (i != 32)
9243                 {
9244                   tdesc_data_cleanup (tdesc_data);
9245                   return NULL;
9246                 }
9247
9248               /* If there are quad registers defined by the stub, use
9249                  their type; otherwise (normally) provide them with
9250                  the default type.  */
9251               if (tdesc_unnumbered_register (feature, "q0") == 0)
9252                 have_neon_pseudos = 1;
9253
9254               have_neon = 1;
9255             }
9256         }
9257     }
9258
9259   /* If there is already a candidate, use it.  */
9260   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9261        best_arch != NULL;
9262        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9263     {
9264       if (arm_abi != ARM_ABI_AUTO
9265           && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9266         continue;
9267
9268       if (fp_model != ARM_FLOAT_AUTO
9269           && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9270         continue;
9271
9272       /* There are various other properties in tdep that we do not
9273          need to check here: those derived from a target description,
9274          since gdbarches with a different target description are
9275          automatically disqualified.  */
9276
9277       /* Do check is_m, though, since it might come from the binary.  */
9278       if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9279         continue;
9280
9281       /* Found a match.  */
9282       break;
9283     }
9284
9285   if (best_arch != NULL)
9286     {
9287       if (tdesc_data != NULL)
9288         tdesc_data_cleanup (tdesc_data);
9289       return best_arch->gdbarch;
9290     }
9291
9292   tdep = XCNEW (struct gdbarch_tdep);
9293   gdbarch = gdbarch_alloc (&info, tdep);
9294
9295   /* Record additional information about the architecture we are defining.
9296      These are gdbarch discriminators, like the OSABI.  */
9297   tdep->arm_abi = arm_abi;
9298   tdep->fp_model = fp_model;
9299   tdep->is_m = is_m;
9300   tdep->have_fpa_registers = have_fpa_registers;
9301   tdep->have_wmmx_registers = have_wmmx_registers;
9302   gdb_assert (vfp_register_count == 0
9303               || vfp_register_count == 16
9304               || vfp_register_count == 32);
9305   tdep->vfp_register_count = vfp_register_count;
9306   tdep->have_vfp_pseudos = have_vfp_pseudos;
9307   tdep->have_neon_pseudos = have_neon_pseudos;
9308   tdep->have_neon = have_neon;
9309
9310   arm_register_g_packet_guesses (gdbarch);
9311
9312   /* Breakpoints.  */
9313   switch (info.byte_order_for_code)
9314     {
9315     case BFD_ENDIAN_BIG:
9316       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9317       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9318       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9319       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9320
9321       break;
9322
9323     case BFD_ENDIAN_LITTLE:
9324       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9325       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9326       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9327       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9328
9329       break;
9330
9331     default:
9332       internal_error (__FILE__, __LINE__,
9333                       _("arm_gdbarch_init: bad byte order for float format"));
9334     }
9335
9336   /* On ARM targets char defaults to unsigned.  */
9337   set_gdbarch_char_signed (gdbarch, 0);
9338
9339   /* wchar_t is unsigned under the AAPCS.  */
9340   if (tdep->arm_abi == ARM_ABI_AAPCS)
9341     set_gdbarch_wchar_signed (gdbarch, 0);
9342   else
9343     set_gdbarch_wchar_signed (gdbarch, 1);
9344
9345   /* Note: for displaced stepping, this includes the breakpoint, and one word
9346      of additional scratch space.  This setting isn't used for anything beside
9347      displaced stepping at present.  */
9348   set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
9349
9350   /* This should be low enough for everything.  */
9351   tdep->lowest_pc = 0x20;
9352   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
9353
9354   /* The default, for both APCS and AAPCS, is to return small
9355      structures in registers.  */
9356   tdep->struct_return = reg_struct_return;
9357
9358   set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9359   set_gdbarch_frame_align (gdbarch, arm_frame_align);
9360
9361   if (is_m)
9362     set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9363
9364   set_gdbarch_write_pc (gdbarch, arm_write_pc);
9365
9366   /* Frame handling.  */
9367   set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
9368   set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
9369   set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
9370
9371   frame_base_set_default (gdbarch, &arm_normal_base);
9372
9373   /* Address manipulation.  */
9374   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9375
9376   /* Advance PC across function entry code.  */
9377   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9378
9379   /* Detect whether PC is at a point where the stack has been destroyed.  */
9380   set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9381
9382   /* Skip trampolines.  */
9383   set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9384
9385   /* The stack grows downward.  */
9386   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9387
9388   /* Breakpoint manipulation.  */
9389   set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9390   set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9391   set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9392                                                   arm_breakpoint_kind_from_current_state);
9393
9394   /* Information about registers, etc.  */
9395   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9396   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9397   set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9398   set_gdbarch_register_type (gdbarch, arm_register_type);
9399   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9400
9401   /* This "info float" is FPA-specific.  Use the generic version if we
9402      do not have FPA.  */
9403   if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9404     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9405
9406   /* Internal <-> external register number maps.  */
9407   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9408   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9409
9410   set_gdbarch_register_name (gdbarch, arm_register_name);
9411
9412   /* Returning results.  */
9413   set_gdbarch_return_value (gdbarch, arm_return_value);
9414
9415   /* Disassembly.  */
9416   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9417
9418   /* Minsymbol frobbing.  */
9419   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9420   set_gdbarch_coff_make_msymbol_special (gdbarch,
9421                                          arm_coff_make_msymbol_special);
9422   set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9423
9424   /* Thumb-2 IT block support.  */
9425   set_gdbarch_adjust_breakpoint_address (gdbarch,
9426                                          arm_adjust_breakpoint_address);
9427
9428   /* Virtual tables.  */
9429   set_gdbarch_vbit_in_delta (gdbarch, 1);
9430
9431   /* Hook in the ABI-specific overrides, if they have been registered.  */
9432   gdbarch_init_osabi (info, gdbarch);
9433
9434   dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9435
9436   /* Add some default predicates.  */
9437   if (is_m)
9438     frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9439   frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9440   dwarf2_append_unwinders (gdbarch);
9441   frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9442   frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9443   frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9444
9445   /* Now we have tuned the configuration, set a few final things,
9446      based on what the OS ABI has told us.  */
9447
9448   /* If the ABI is not otherwise marked, assume the old GNU APCS.  EABI
9449      binaries are always marked.  */
9450   if (tdep->arm_abi == ARM_ABI_AUTO)
9451     tdep->arm_abi = ARM_ABI_APCS;
9452
9453   /* Watchpoints are not steppable.  */
9454   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9455
9456   /* We used to default to FPA for generic ARM, but almost nobody
9457      uses that now, and we now provide a way for the user to force
9458      the model.  So default to the most useful variant.  */
9459   if (tdep->fp_model == ARM_FLOAT_AUTO)
9460     tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9461
9462   if (tdep->jb_pc >= 0)
9463     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9464
9465   /* Floating point sizes and format.  */
9466   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9467   if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9468     {
9469       set_gdbarch_double_format
9470         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9471       set_gdbarch_long_double_format
9472         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9473     }
9474   else
9475     {
9476       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9477       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9478     }
9479
9480   if (have_vfp_pseudos)
9481     {
9482       /* NOTE: These are the only pseudo registers used by
9483          the ARM target at the moment.  If more are added, a
9484          little more care in numbering will be needed.  */
9485
9486       int num_pseudos = 32;
9487       if (have_neon_pseudos)
9488         num_pseudos += 16;
9489       set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9490       set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9491       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9492     }
9493
9494   if (tdesc_data)
9495     {
9496       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9497
9498       tdesc_use_registers (gdbarch, tdesc, tdesc_data);
9499
9500       /* Override tdesc_register_type to adjust the types of VFP
9501          registers for NEON.  */
9502       set_gdbarch_register_type (gdbarch, arm_register_type);
9503     }
9504
9505   /* Add standard register aliases.  We add aliases even for those
9506      nanes which are used by the current architecture - it's simpler,
9507      and does no harm, since nothing ever lists user registers.  */
9508   for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9509     user_reg_add (gdbarch, arm_register_aliases[i].name,
9510                   value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9511
9512   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9513   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9514
9515   return gdbarch;
9516 }
9517
9518 static void
9519 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9520 {
9521   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9522
9523   if (tdep == NULL)
9524     return;
9525
9526   fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
9527                       (unsigned long) tdep->lowest_pc);
9528 }
9529
9530 #if GDB_SELF_TEST
9531 namespace selftests
9532 {
9533 static void arm_record_test (void);
9534 }
9535 #endif
9536
9537 void
9538 _initialize_arm_tdep (void)
9539 {
9540   long length;
9541   int i, j;
9542   char regdesc[1024], *rdptr = regdesc;
9543   size_t rest = sizeof (regdesc);
9544
9545   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9546
9547   arm_objfile_data_key
9548     = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
9549
9550   /* Add ourselves to objfile event chain.  */
9551   gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
9552   arm_exidx_data_key
9553     = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
9554
9555   /* Register an ELF OS ABI sniffer for ARM binaries.  */
9556   gdbarch_register_osabi_sniffer (bfd_arch_arm,
9557                                   bfd_target_elf_flavour,
9558                                   arm_elf_osabi_sniffer);
9559
9560   /* Initialize the standard target descriptions.  */
9561   initialize_tdesc_arm_with_m ();
9562   initialize_tdesc_arm_with_m_fpa_layout ();
9563   initialize_tdesc_arm_with_m_vfp_d16 ();
9564   initialize_tdesc_arm_with_iwmmxt ();
9565   initialize_tdesc_arm_with_vfpv2 ();
9566   initialize_tdesc_arm_with_vfpv3 ();
9567   initialize_tdesc_arm_with_neon ();
9568
9569   /* Add root prefix command for all "set arm"/"show arm" commands.  */
9570   add_prefix_cmd ("arm", no_class, set_arm_command,
9571                   _("Various ARM-specific commands."),
9572                   &setarmcmdlist, "set arm ", 0, &setlist);
9573
9574   add_prefix_cmd ("arm", no_class, show_arm_command,
9575                   _("Various ARM-specific commands."),
9576                   &showarmcmdlist, "show arm ", 0, &showlist);
9577
9578
9579   arm_disassembler_options = xstrdup ("reg-names-std");
9580   const disasm_options_t *disasm_options = disassembler_options_arm ();
9581   int num_disassembly_styles = 0;
9582   for (i = 0; disasm_options->name[i] != NULL; i++)
9583     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9584       num_disassembly_styles++;
9585
9586   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
9587   valid_disassembly_styles = XNEWVEC (const char *,
9588                                       num_disassembly_styles + 1);
9589   for (i = j = 0; disasm_options->name[i] != NULL; i++)
9590     if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9591       {
9592         size_t offset = strlen ("reg-names-");
9593         const char *style = disasm_options->name[i];
9594         valid_disassembly_styles[j++] = &style[offset];
9595         length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9596                            disasm_options->description[i]);
9597         rdptr += length;
9598         rest -= length;
9599       }
9600   /* Mark the end of valid options.  */
9601   valid_disassembly_styles[num_disassembly_styles] = NULL;
9602
9603   /* Create the help text.  */
9604   std::string helptext = string_printf ("%s%s%s",
9605                                         _("The valid values are:\n"),
9606                                         regdesc,
9607                                         _("The default is \"std\"."));
9608
9609   add_setshow_enum_cmd("disassembler", no_class,
9610                        valid_disassembly_styles, &disassembly_style,
9611                        _("Set the disassembly style."),
9612                        _("Show the disassembly style."),
9613                        helptext.c_str (),
9614                        set_disassembly_style_sfunc,
9615                        show_disassembly_style_sfunc,
9616                        &setarmcmdlist, &showarmcmdlist);
9617
9618   add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9619                            _("Set usage of ARM 32-bit mode."),
9620                            _("Show usage of ARM 32-bit mode."),
9621                            _("When off, a 26-bit PC will be used."),
9622                            NULL,
9623                            NULL, /* FIXME: i18n: Usage of ARM 32-bit
9624                                     mode is %s.  */
9625                            &setarmcmdlist, &showarmcmdlist);
9626
9627   /* Add a command to allow the user to force the FPU model.  */
9628   add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9629                         _("Set the floating point type."),
9630                         _("Show the floating point type."),
9631                         _("auto - Determine the FP typefrom the OS-ABI.\n\
9632 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9633 fpa - FPA co-processor (GCC compiled).\n\
9634 softvfp - Software FP with pure-endian doubles.\n\
9635 vfp - VFP co-processor."),
9636                         set_fp_model_sfunc, show_fp_model,
9637                         &setarmcmdlist, &showarmcmdlist);
9638
9639   /* Add a command to allow the user to force the ABI.  */
9640   add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9641                         _("Set the ABI."),
9642                         _("Show the ABI."),
9643                         NULL, arm_set_abi, arm_show_abi,
9644                         &setarmcmdlist, &showarmcmdlist);
9645
9646   /* Add two commands to allow the user to force the assumed
9647      execution mode.  */
9648   add_setshow_enum_cmd ("fallback-mode", class_support,
9649                         arm_mode_strings, &arm_fallback_mode_string,
9650                         _("Set the mode assumed when symbols are unavailable."),
9651                         _("Show the mode assumed when symbols are unavailable."),
9652                         NULL, NULL, arm_show_fallback_mode,
9653                         &setarmcmdlist, &showarmcmdlist);
9654   add_setshow_enum_cmd ("force-mode", class_support,
9655                         arm_mode_strings, &arm_force_mode_string,
9656                         _("Set the mode assumed even when symbols are available."),
9657                         _("Show the mode assumed even when symbols are available."),
9658                         NULL, NULL, arm_show_force_mode,
9659                         &setarmcmdlist, &showarmcmdlist);
9660
9661   /* Debugging flag.  */
9662   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9663                            _("Set ARM debugging."),
9664                            _("Show ARM debugging."),
9665                            _("When on, arm-specific debugging is enabled."),
9666                            NULL,
9667                            NULL, /* FIXME: i18n: "ARM debugging is %s.  */
9668                            &setdebuglist, &showdebuglist);
9669
9670 #if GDB_SELF_TEST
9671   selftests::register_test ("arm-record", selftests::arm_record_test);
9672 #endif
9673
9674 }
9675
9676 /* ARM-reversible process record data structures.  */
9677
9678 #define ARM_INSN_SIZE_BYTES 4    
9679 #define THUMB_INSN_SIZE_BYTES 2
9680 #define THUMB2_INSN_SIZE_BYTES 4
9681
9682
9683 /* Position of the bit within a 32-bit ARM instruction
9684    that defines whether the instruction is a load or store.  */
9685 #define INSN_S_L_BIT_NUM 20
9686
9687 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9688         do  \
9689           { \
9690             unsigned int reg_len = LENGTH; \
9691             if (reg_len) \
9692               { \
9693                 REGS = XNEWVEC (uint32_t, reg_len); \
9694                 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9695               } \
9696           } \
9697         while (0)
9698
9699 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9700         do  \
9701           { \
9702             unsigned int mem_len = LENGTH; \
9703             if (mem_len) \
9704             { \
9705               MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
9706               memcpy(&MEMS->len, &RECORD_BUF[0], \
9707                      sizeof(struct arm_mem_r) * LENGTH); \
9708             } \
9709           } \
9710           while (0)
9711
9712 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
9713 #define INSN_RECORDED(ARM_RECORD) \
9714         (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9715
9716 /* ARM memory record structure.  */
9717 struct arm_mem_r
9718 {
9719   uint32_t len;    /* Record length.  */
9720   uint32_t addr;   /* Memory address.  */
9721 };
9722
9723 /* ARM instruction record contains opcode of current insn
9724    and execution state (before entry to decode_insn()),
9725    contains list of to-be-modified registers and
9726    memory blocks (on return from decode_insn()).  */
9727
9728 typedef struct insn_decode_record_t
9729 {
9730   struct gdbarch *gdbarch;
9731   struct regcache *regcache;
9732   CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
9733   uint32_t arm_insn;            /* Should accommodate thumb.  */
9734   uint32_t cond;                /* Condition code.  */
9735   uint32_t opcode;              /* Insn opcode.  */
9736   uint32_t decode;              /* Insn decode bits.  */
9737   uint32_t mem_rec_count;       /* No of mem records.  */
9738   uint32_t reg_rec_count;       /* No of reg records.  */
9739   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
9740   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
9741 } insn_decode_record;
9742
9743
9744 /* Checks ARM SBZ and SBO mandatory fields.  */
9745
9746 static int
9747 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9748 {
9749   uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9750
9751   if (!len)
9752     return 1;
9753
9754   if (!sbo)
9755     ones = ~ones;
9756
9757   while (ones)
9758     {
9759       if (!(ones & sbo))
9760         {
9761           return 0;
9762         }
9763       ones = ones >> 1;
9764     }
9765   return 1;
9766 }
9767
9768 enum arm_record_result
9769 {
9770   ARM_RECORD_SUCCESS = 0,
9771   ARM_RECORD_FAILURE = 1
9772 };
9773
9774 typedef enum
9775 {
9776   ARM_RECORD_STRH=1,
9777   ARM_RECORD_STRD
9778 } arm_record_strx_t;
9779
9780 typedef enum
9781 {
9782   ARM_RECORD=1,
9783   THUMB_RECORD,
9784   THUMB2_RECORD
9785 } record_type_t;
9786
9787
9788 static int
9789 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
9790                  uint32_t *record_buf_mem, arm_record_strx_t str_type)
9791 {
9792
9793   struct regcache *reg_cache = arm_insn_r->regcache;
9794   ULONGEST u_regval[2]= {0};
9795
9796   uint32_t reg_src1 = 0, reg_src2 = 0;
9797   uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9798
9799   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9800   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9801
9802   if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9803     {
9804       /* 1) Handle misc store, immediate offset.  */
9805       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9806       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9807       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9808       regcache_raw_read_unsigned (reg_cache, reg_src1,
9809                                   &u_regval[0]);
9810       if (ARM_PC_REGNUM == reg_src1)
9811         {
9812           /* If R15 was used as Rn, hence current PC+8.  */
9813           u_regval[0] = u_regval[0] + 8;
9814         }
9815       offset_8 = (immed_high << 4) | immed_low;
9816       /* Calculate target store address.  */
9817       if (14 == arm_insn_r->opcode)
9818         {
9819           tgt_mem_addr = u_regval[0] + offset_8;
9820         }
9821       else
9822         {
9823           tgt_mem_addr = u_regval[0] - offset_8;
9824         }
9825       if (ARM_RECORD_STRH == str_type)
9826         {
9827           record_buf_mem[0] = 2;
9828           record_buf_mem[1] = tgt_mem_addr;
9829           arm_insn_r->mem_rec_count = 1;
9830         }
9831       else if (ARM_RECORD_STRD == str_type)
9832         {
9833           record_buf_mem[0] = 4;
9834           record_buf_mem[1] = tgt_mem_addr;
9835           record_buf_mem[2] = 4;
9836           record_buf_mem[3] = tgt_mem_addr + 4;
9837           arm_insn_r->mem_rec_count = 2;
9838         }
9839     }
9840   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9841     {
9842       /* 2) Store, register offset.  */
9843       /* Get Rm.  */
9844       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9845       /* Get Rn.  */
9846       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9847       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9848       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9849       if (15 == reg_src2)
9850         {
9851           /* If R15 was used as Rn, hence current PC+8.  */
9852           u_regval[0] = u_regval[0] + 8;
9853         }
9854       /* Calculate target store address, Rn +/- Rm, register offset.  */
9855       if (12 == arm_insn_r->opcode)
9856         {
9857           tgt_mem_addr = u_regval[0] + u_regval[1];
9858         }
9859       else
9860         {
9861           tgt_mem_addr = u_regval[1] - u_regval[0];
9862         }
9863       if (ARM_RECORD_STRH == str_type)
9864         {
9865           record_buf_mem[0] = 2;
9866           record_buf_mem[1] = tgt_mem_addr;
9867           arm_insn_r->mem_rec_count = 1;
9868         }
9869       else if (ARM_RECORD_STRD == str_type)
9870         {
9871           record_buf_mem[0] = 4;
9872           record_buf_mem[1] = tgt_mem_addr;
9873           record_buf_mem[2] = 4;
9874           record_buf_mem[3] = tgt_mem_addr + 4;
9875           arm_insn_r->mem_rec_count = 2;
9876         }
9877     }
9878   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9879            || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
9880     {
9881       /* 3) Store, immediate pre-indexed.  */
9882       /* 5) Store, immediate post-indexed.  */
9883       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9884       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9885       offset_8 = (immed_high << 4) | immed_low;
9886       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9887       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9888       /* Calculate target store address, Rn +/- Rm, register offset.  */
9889       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9890         {
9891           tgt_mem_addr = u_regval[0] + offset_8;
9892         }
9893       else
9894         {
9895           tgt_mem_addr = u_regval[0] - offset_8;
9896         }
9897       if (ARM_RECORD_STRH == str_type)
9898         {
9899           record_buf_mem[0] = 2;
9900           record_buf_mem[1] = tgt_mem_addr;
9901           arm_insn_r->mem_rec_count = 1;
9902         }
9903       else if (ARM_RECORD_STRD == str_type)
9904         {
9905           record_buf_mem[0] = 4;
9906           record_buf_mem[1] = tgt_mem_addr;
9907           record_buf_mem[2] = 4;
9908           record_buf_mem[3] = tgt_mem_addr + 4;
9909           arm_insn_r->mem_rec_count = 2;
9910         }
9911       /* Record Rn also as it changes.  */
9912       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9913       arm_insn_r->reg_rec_count = 1;
9914     }
9915   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9916            || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9917     {
9918       /* 4) Store, register pre-indexed.  */
9919       /* 6) Store, register post -indexed.  */
9920       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9921       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9922       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9923       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9924       /* Calculate target store address, Rn +/- Rm, register offset.  */
9925       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9926         {
9927           tgt_mem_addr = u_regval[0] + u_regval[1];
9928         }
9929       else
9930         {
9931           tgt_mem_addr = u_regval[1] - u_regval[0];
9932         }
9933       if (ARM_RECORD_STRH == str_type)
9934         {
9935           record_buf_mem[0] = 2;
9936           record_buf_mem[1] = tgt_mem_addr;
9937           arm_insn_r->mem_rec_count = 1;
9938         }
9939       else if (ARM_RECORD_STRD == str_type)
9940         {
9941           record_buf_mem[0] = 4;
9942           record_buf_mem[1] = tgt_mem_addr;
9943           record_buf_mem[2] = 4;
9944           record_buf_mem[3] = tgt_mem_addr + 4;
9945           arm_insn_r->mem_rec_count = 2;
9946         }
9947       /* Record Rn also as it changes.  */
9948       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9949       arm_insn_r->reg_rec_count = 1;
9950     }
9951   return 0;
9952 }
9953
9954 /* Handling ARM extension space insns.  */
9955
9956 static int
9957 arm_record_extension_space (insn_decode_record *arm_insn_r)
9958 {
9959   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
9960   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9961   uint32_t record_buf[8], record_buf_mem[8];
9962   uint32_t reg_src1 = 0;
9963   struct regcache *reg_cache = arm_insn_r->regcache;
9964   ULONGEST u_regval = 0;
9965
9966   gdb_assert (!INSN_RECORDED(arm_insn_r));
9967   /* Handle unconditional insn extension space.  */
9968
9969   opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9970   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9971   if (arm_insn_r->cond)
9972     {
9973       /* PLD has no affect on architectural state, it just affects
9974          the caches.  */
9975       if (5 == ((opcode1 & 0xE0) >> 5))
9976         {
9977           /* BLX(1) */
9978           record_buf[0] = ARM_PS_REGNUM;
9979           record_buf[1] = ARM_LR_REGNUM;
9980           arm_insn_r->reg_rec_count = 2;
9981         }
9982       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
9983     }
9984
9985
9986   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9987   if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9988     {
9989       ret = -1;
9990       /* Undefined instruction on ARM V5; need to handle if later 
9991          versions define it.  */
9992     }
9993
9994   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
9995   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9996   insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
9997
9998   /* Handle arithmetic insn extension space.  */
9999   if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
10000       && !INSN_RECORDED(arm_insn_r))
10001     {
10002       /* Handle MLA(S) and MUL(S).  */
10003       if (in_inclusive_range (insn_op1, 0U, 3U))
10004       {
10005         record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10006         record_buf[1] = ARM_PS_REGNUM;
10007         arm_insn_r->reg_rec_count = 2;
10008       }
10009       else if (in_inclusive_range (insn_op1, 4U, 15U))
10010       {
10011         /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
10012         record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10013         record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10014         record_buf[2] = ARM_PS_REGNUM;
10015         arm_insn_r->reg_rec_count = 3;
10016       }
10017     }
10018
10019   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
10020   opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
10021   insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
10022
10023   /* Handle control insn extension space.  */
10024
10025   if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
10026       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
10027     {
10028       if (!bit (arm_insn_r->arm_insn,25))
10029         {
10030           if (!bits (arm_insn_r->arm_insn, 4, 7))
10031             {
10032               if ((0 == insn_op1) || (2 == insn_op1))
10033                 {
10034                   /* MRS.  */
10035                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10036                   arm_insn_r->reg_rec_count = 1;
10037                 }
10038               else if (1 == insn_op1)
10039                 {
10040                   /* CSPR is going to be changed.  */
10041                   record_buf[0] = ARM_PS_REGNUM;
10042                   arm_insn_r->reg_rec_count = 1;
10043                 }
10044               else if (3 == insn_op1)
10045                 {
10046                   /* SPSR is going to be changed.  */
10047                   /* We need to get SPSR value, which is yet to be done.  */
10048                   return -1;
10049                 }
10050             }
10051           else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
10052             {
10053               if (1 == insn_op1)
10054                 {
10055                   /* BX.  */
10056                   record_buf[0] = ARM_PS_REGNUM;
10057                   arm_insn_r->reg_rec_count = 1;
10058                 }
10059               else if (3 == insn_op1)
10060                 {
10061                   /* CLZ.  */
10062                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10063                   arm_insn_r->reg_rec_count = 1;
10064                 }
10065             }
10066           else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
10067             {
10068               /* BLX.  */
10069               record_buf[0] = ARM_PS_REGNUM;
10070               record_buf[1] = ARM_LR_REGNUM;
10071               arm_insn_r->reg_rec_count = 2;
10072             }
10073           else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10074             {
10075               /* QADD, QSUB, QDADD, QDSUB */
10076               record_buf[0] = ARM_PS_REGNUM;
10077               record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10078               arm_insn_r->reg_rec_count = 2;
10079             }
10080           else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10081             {
10082               /* BKPT.  */
10083               record_buf[0] = ARM_PS_REGNUM;
10084               record_buf[1] = ARM_LR_REGNUM;
10085               arm_insn_r->reg_rec_count = 2;
10086
10087               /* Save SPSR also;how?  */
10088               return -1;
10089             }
10090           else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
10091                   || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10092                   || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10093                   || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10094                  )
10095             {
10096               if (0 == insn_op1 || 1 == insn_op1)
10097                 {
10098                   /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
10099                   /* We dont do optimization for SMULW<y> where we
10100                      need only Rd.  */
10101                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10102                   record_buf[1] = ARM_PS_REGNUM;
10103                   arm_insn_r->reg_rec_count = 2;
10104                 }
10105               else if (2 == insn_op1)
10106                 {
10107                   /* SMLAL<x><y>.  */
10108                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10109                   record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10110                   arm_insn_r->reg_rec_count = 2;
10111                 }
10112               else if (3 == insn_op1)
10113                 {
10114                   /* SMUL<x><y>.  */
10115                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10116                   arm_insn_r->reg_rec_count = 1;
10117                 }
10118             }
10119         }
10120       else
10121         {
10122           /* MSR : immediate form.  */
10123           if (1 == insn_op1)
10124             {
10125               /* CSPR is going to be changed.  */
10126               record_buf[0] = ARM_PS_REGNUM;
10127               arm_insn_r->reg_rec_count = 1;
10128             }
10129           else if (3 == insn_op1)
10130             {
10131               /* SPSR is going to be changed.  */
10132               /* we need to get SPSR value, which is yet to be done  */
10133               return -1;
10134             }
10135         }
10136     }
10137
10138   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10139   opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10140   insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10141
10142   /* Handle load/store insn extension space.  */
10143
10144   if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
10145       && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10146       && !INSN_RECORDED(arm_insn_r))
10147     {
10148       /* SWP/SWPB.  */
10149       if (0 == insn_op1)
10150         {
10151           /* These insn, changes register and memory as well.  */
10152           /* SWP or SWPB insn.  */
10153           /* Get memory address given by Rn.  */
10154           reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10155           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10156           /* SWP insn ?, swaps word.  */
10157           if (8 == arm_insn_r->opcode)
10158             {
10159               record_buf_mem[0] = 4;
10160             }
10161           else
10162             {
10163               /* SWPB insn, swaps only byte.  */
10164               record_buf_mem[0] = 1;
10165             }
10166           record_buf_mem[1] = u_regval;
10167           arm_insn_r->mem_rec_count = 1;
10168           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10169           arm_insn_r->reg_rec_count = 1;
10170         }
10171       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10172         {
10173           /* STRH.  */
10174           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10175                           ARM_RECORD_STRH);
10176         }
10177       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10178         {
10179           /* LDRD.  */
10180           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10181           record_buf[1] = record_buf[0] + 1;
10182           arm_insn_r->reg_rec_count = 2;
10183         }
10184       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10185         {
10186           /* STRD.  */
10187           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10188                         ARM_RECORD_STRD);
10189         }
10190       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10191         {
10192           /* LDRH, LDRSB, LDRSH.  */
10193           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10194           arm_insn_r->reg_rec_count = 1;
10195         }
10196
10197     }
10198
10199   opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10200   if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10201       && !INSN_RECORDED(arm_insn_r))
10202     {
10203       ret = -1;
10204       /* Handle coprocessor insn extension space.  */
10205     }
10206
10207   /* To be done for ARMv5 and later; as of now we return -1.  */
10208   if (-1 == ret)
10209     return ret;
10210
10211   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10212   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10213
10214   return ret;
10215 }
10216
10217 /* Handling opcode 000 insns.  */
10218
10219 static int
10220 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10221 {
10222   struct regcache *reg_cache = arm_insn_r->regcache;
10223   uint32_t record_buf[8], record_buf_mem[8];
10224   ULONGEST u_regval[2] = {0};
10225
10226   uint32_t reg_src1 = 0, reg_dest = 0;
10227   uint32_t opcode1 = 0;
10228
10229   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10230   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10231   opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10232
10233   if (!((opcode1 & 0x19) == 0x10))
10234     {
10235       /* Data-processing (register) and Data-processing (register-shifted
10236          register */
10237       /* Out of 11 shifter operands mode, all the insn modifies destination
10238          register, which is specified by 13-16 decode.  */
10239       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10240       record_buf[1] = ARM_PS_REGNUM;
10241       arm_insn_r->reg_rec_count = 2;
10242     }
10243   else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10244     {
10245       /* Miscellaneous instructions */
10246
10247       if (3 == arm_insn_r->decode && 0x12 == opcode1
10248           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10249         {
10250           /* Handle BLX, branch and link/exchange.  */
10251           if (9 == arm_insn_r->opcode)
10252             {
10253               /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10254                  and R14 stores the return address.  */
10255               record_buf[0] = ARM_PS_REGNUM;
10256               record_buf[1] = ARM_LR_REGNUM;
10257               arm_insn_r->reg_rec_count = 2;
10258             }
10259         }
10260       else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10261         {
10262           /* Handle enhanced software breakpoint insn, BKPT.  */
10263           /* CPSR is changed to be executed in ARM state,  disabling normal
10264              interrupts, entering abort mode.  */
10265           /* According to high vector configuration PC is set.  */
10266           /* user hit breakpoint and type reverse, in
10267              that case, we need to go back with previous CPSR and
10268              Program Counter.  */
10269           record_buf[0] = ARM_PS_REGNUM;
10270           record_buf[1] = ARM_LR_REGNUM;
10271           arm_insn_r->reg_rec_count = 2;
10272
10273           /* Save SPSR also; how?  */
10274           return -1;
10275         }
10276       else if (1 == arm_insn_r->decode && 0x12 == opcode1
10277                && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10278         {
10279           /* Handle BX, branch and link/exchange.  */
10280           /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
10281           record_buf[0] = ARM_PS_REGNUM;
10282           arm_insn_r->reg_rec_count = 1;
10283         }
10284       else if (1 == arm_insn_r->decode && 0x16 == opcode1
10285                && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10286                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10287         {
10288           /* Count leading zeros: CLZ.  */
10289           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10290           arm_insn_r->reg_rec_count = 1;
10291         }
10292       else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10293                && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10294                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10295                && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10296         {
10297           /* Handle MRS insn.  */
10298           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10299           arm_insn_r->reg_rec_count = 1;
10300         }
10301     }
10302   else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10303     {
10304       /* Multiply and multiply-accumulate */
10305
10306       /* Handle multiply instructions.  */
10307       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
10308       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10309           {
10310             /* Handle MLA and MUL.  */
10311             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10312             record_buf[1] = ARM_PS_REGNUM;
10313             arm_insn_r->reg_rec_count = 2;
10314           }
10315         else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10316           {
10317             /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
10318             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10319             record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10320             record_buf[2] = ARM_PS_REGNUM;
10321             arm_insn_r->reg_rec_count = 3;
10322           }
10323     }
10324   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
10325     {
10326       /* Synchronization primitives */
10327
10328       /* Handling SWP, SWPB.  */
10329       /* These insn, changes register and memory as well.  */
10330       /* SWP or SWPB insn.  */
10331
10332       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10333       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10334       /* SWP insn ?, swaps word.  */
10335       if (8 == arm_insn_r->opcode)
10336         {
10337           record_buf_mem[0] = 4;
10338         }
10339       else
10340         {
10341           /* SWPB insn, swaps only byte.  */
10342           record_buf_mem[0] = 1;
10343         }
10344       record_buf_mem[1] = u_regval[0];
10345       arm_insn_r->mem_rec_count = 1;
10346       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10347       arm_insn_r->reg_rec_count = 1;
10348     }
10349   else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10350            || 15 == arm_insn_r->decode)
10351     {
10352       if ((opcode1 & 0x12) == 2)
10353         {
10354           /* Extra load/store (unprivileged) */
10355           return -1;
10356         }
10357       else
10358         {
10359           /* Extra load/store */
10360           switch (bits (arm_insn_r->arm_insn, 5, 6))
10361             {
10362             case 1:
10363               if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10364                 {
10365                   /* STRH (register), STRH (immediate) */
10366                   arm_record_strx (arm_insn_r, &record_buf[0],
10367                                    &record_buf_mem[0], ARM_RECORD_STRH);
10368                 }
10369               else if ((opcode1 & 0x05) == 0x1)
10370                 {
10371                   /* LDRH (register) */
10372                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10373                   arm_insn_r->reg_rec_count = 1;
10374
10375                   if (bit (arm_insn_r->arm_insn, 21))
10376                     {
10377                       /* Write back to Rn.  */
10378                       record_buf[arm_insn_r->reg_rec_count++]
10379                         = bits (arm_insn_r->arm_insn, 16, 19);
10380                     }
10381                 }
10382               else if ((opcode1 & 0x05) == 0x5)
10383                 {
10384                   /* LDRH (immediate), LDRH (literal) */
10385                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10386
10387                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10388                   arm_insn_r->reg_rec_count = 1;
10389
10390                   if (rn != 15)
10391                     {
10392                       /*LDRH (immediate) */
10393                       if (bit (arm_insn_r->arm_insn, 21))
10394                         {
10395                           /* Write back to Rn.  */
10396                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10397                         }
10398                     }
10399                 }
10400               else
10401                 return -1;
10402               break;
10403             case 2:
10404               if ((opcode1 & 0x05) == 0x0)
10405                 {
10406                   /* LDRD (register) */
10407                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10408                   record_buf[1] = record_buf[0] + 1;
10409                   arm_insn_r->reg_rec_count = 2;
10410
10411                   if (bit (arm_insn_r->arm_insn, 21))
10412                     {
10413                       /* Write back to Rn.  */
10414                       record_buf[arm_insn_r->reg_rec_count++]
10415                         = bits (arm_insn_r->arm_insn, 16, 19);
10416                     }
10417                 }
10418               else if ((opcode1 & 0x05) == 0x1)
10419                 {
10420                   /* LDRSB (register) */
10421                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10422                   arm_insn_r->reg_rec_count = 1;
10423
10424                   if (bit (arm_insn_r->arm_insn, 21))
10425                     {
10426                       /* Write back to Rn.  */
10427                       record_buf[arm_insn_r->reg_rec_count++]
10428                         = bits (arm_insn_r->arm_insn, 16, 19);
10429                     }
10430                 }
10431               else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10432                 {
10433                   /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10434                      LDRSB (literal) */
10435                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10436
10437                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10438                   arm_insn_r->reg_rec_count = 1;
10439
10440                   if (rn != 15)
10441                     {
10442                       /*LDRD (immediate), LDRSB (immediate) */
10443                       if (bit (arm_insn_r->arm_insn, 21))
10444                         {
10445                           /* Write back to Rn.  */
10446                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10447                         }
10448                     }
10449                 }
10450               else
10451                 return -1;
10452               break;
10453             case 3:
10454               if ((opcode1 & 0x05) == 0x0)
10455                 {
10456                   /* STRD (register) */
10457                   arm_record_strx (arm_insn_r, &record_buf[0],
10458                                    &record_buf_mem[0], ARM_RECORD_STRD);
10459                 }
10460               else if ((opcode1 & 0x05) == 0x1)
10461                 {
10462                   /* LDRSH (register) */
10463                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10464                   arm_insn_r->reg_rec_count = 1;
10465
10466                   if (bit (arm_insn_r->arm_insn, 21))
10467                     {
10468                       /* Write back to Rn.  */
10469                       record_buf[arm_insn_r->reg_rec_count++]
10470                         = bits (arm_insn_r->arm_insn, 16, 19);
10471                     }
10472                 }
10473               else if ((opcode1 & 0x05) == 0x4)
10474                 {
10475                   /* STRD (immediate) */
10476                   arm_record_strx (arm_insn_r, &record_buf[0],
10477                                    &record_buf_mem[0], ARM_RECORD_STRD);
10478                 }
10479               else if ((opcode1 & 0x05) == 0x5)
10480                 {
10481                   /* LDRSH (immediate), LDRSH (literal) */
10482                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10483                   arm_insn_r->reg_rec_count = 1;
10484
10485                   if (bit (arm_insn_r->arm_insn, 21))
10486                     {
10487                       /* Write back to Rn.  */
10488                       record_buf[arm_insn_r->reg_rec_count++]
10489                         = bits (arm_insn_r->arm_insn, 16, 19);
10490                     }
10491                 }
10492               else
10493                 return -1;
10494               break;
10495             default:
10496               return -1;
10497             }
10498         }
10499     }
10500   else
10501     {
10502       return -1;
10503     }
10504
10505   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10506   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10507   return 0;
10508 }
10509
10510 /* Handling opcode 001 insns.  */
10511
10512 static int
10513 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10514 {
10515   uint32_t record_buf[8], record_buf_mem[8];
10516
10517   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10518   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10519
10520   if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10521       && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10522       && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10523      )
10524     {
10525       /* Handle MSR insn.  */
10526       if (9 == arm_insn_r->opcode)
10527         {
10528           /* CSPR is going to be changed.  */
10529           record_buf[0] = ARM_PS_REGNUM;
10530           arm_insn_r->reg_rec_count = 1;
10531         }
10532       else
10533         {
10534           /* SPSR is going to be changed.  */
10535         }
10536     }
10537   else if (arm_insn_r->opcode <= 15)
10538     {
10539       /* Normal data processing insns.  */
10540       /* Out of 11 shifter operands mode, all the insn modifies destination
10541          register, which is specified by 13-16 decode.  */
10542       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10543       record_buf[1] = ARM_PS_REGNUM;
10544       arm_insn_r->reg_rec_count = 2;
10545     }
10546   else
10547     {
10548       return -1;
10549     }
10550
10551   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10552   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10553   return 0;
10554 }
10555
10556 static int
10557 arm_record_media (insn_decode_record *arm_insn_r)
10558 {
10559   uint32_t record_buf[8];
10560
10561   switch (bits (arm_insn_r->arm_insn, 22, 24))
10562     {
10563     case 0:
10564       /* Parallel addition and subtraction, signed */
10565     case 1:
10566       /* Parallel addition and subtraction, unsigned */
10567     case 2:
10568     case 3:
10569       /* Packing, unpacking, saturation and reversal */
10570       {
10571         int rd = bits (arm_insn_r->arm_insn, 12, 15);
10572
10573         record_buf[arm_insn_r->reg_rec_count++] = rd;
10574       }
10575       break;
10576
10577     case 4:
10578     case 5:
10579       /* Signed multiplies */
10580       {
10581         int rd = bits (arm_insn_r->arm_insn, 16, 19);
10582         unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10583
10584         record_buf[arm_insn_r->reg_rec_count++] = rd;
10585         if (op1 == 0x0)
10586           record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10587         else if (op1 == 0x4)
10588           record_buf[arm_insn_r->reg_rec_count++]
10589             = bits (arm_insn_r->arm_insn, 12, 15);
10590       }
10591       break;
10592
10593     case 6:
10594       {
10595         if (bit (arm_insn_r->arm_insn, 21)
10596             && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10597           {
10598             /* SBFX */
10599             record_buf[arm_insn_r->reg_rec_count++]
10600               = bits (arm_insn_r->arm_insn, 12, 15);
10601           }
10602         else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10603                  && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10604           {
10605             /* USAD8 and USADA8 */
10606             record_buf[arm_insn_r->reg_rec_count++]
10607               = bits (arm_insn_r->arm_insn, 16, 19);
10608           }
10609       }
10610       break;
10611
10612     case 7:
10613       {
10614         if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10615             && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10616           {
10617             /* Permanently UNDEFINED */
10618             return -1;
10619           }
10620         else
10621           {
10622             /* BFC, BFI and UBFX */
10623             record_buf[arm_insn_r->reg_rec_count++]
10624               = bits (arm_insn_r->arm_insn, 12, 15);
10625           }
10626       }
10627       break;
10628
10629     default:
10630       return -1;
10631     }
10632
10633   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10634
10635   return 0;
10636 }
10637
10638 /* Handle ARM mode instructions with opcode 010.  */
10639
10640 static int
10641 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10642 {
10643   struct regcache *reg_cache = arm_insn_r->regcache;
10644
10645   uint32_t reg_base , reg_dest;
10646   uint32_t offset_12, tgt_mem_addr;
10647   uint32_t record_buf[8], record_buf_mem[8];
10648   unsigned char wback;
10649   ULONGEST u_regval;
10650
10651   /* Calculate wback.  */
10652   wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10653           || (bit (arm_insn_r->arm_insn, 21) == 1);
10654
10655   arm_insn_r->reg_rec_count = 0;
10656   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10657
10658   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10659     {
10660       /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10661          and LDRT.  */
10662
10663       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10664       record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10665
10666       /* The LDR instruction is capable of doing branching.  If MOV LR, PC
10667          preceeds a LDR instruction having R15 as reg_base, it
10668          emulates a branch and link instruction, and hence we need to save
10669          CPSR and PC as well.  */
10670       if (ARM_PC_REGNUM == reg_dest)
10671         record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10672
10673       /* If wback is true, also save the base register, which is going to be
10674          written to.  */
10675       if (wback)
10676         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10677     }
10678   else
10679     {
10680       /* STR (immediate), STRB (immediate), STRBT and STRT.  */
10681
10682       offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10683       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10684
10685       /* Handle bit U.  */
10686       if (bit (arm_insn_r->arm_insn, 23))
10687         {
10688           /* U == 1: Add the offset. */
10689           tgt_mem_addr = (uint32_t) u_regval + offset_12;
10690         }
10691       else
10692         {
10693           /* U == 0: subtract the offset. */
10694           tgt_mem_addr = (uint32_t) u_regval - offset_12;
10695         }
10696
10697       /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10698          bytes.  */
10699       if (bit (arm_insn_r->arm_insn, 22))
10700         {
10701           /* STRB and STRBT: 1 byte.  */
10702           record_buf_mem[0] = 1;
10703         }
10704       else
10705         {
10706           /* STR and STRT: 4 bytes.  */
10707           record_buf_mem[0] = 4;
10708         }
10709
10710       /* Handle bit P.  */
10711       if (bit (arm_insn_r->arm_insn, 24))
10712         record_buf_mem[1] = tgt_mem_addr;
10713       else
10714         record_buf_mem[1] = (uint32_t) u_regval;
10715
10716       arm_insn_r->mem_rec_count = 1;
10717
10718       /* If wback is true, also save the base register, which is going to be
10719          written to.  */
10720       if (wback)
10721         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10722     }
10723
10724   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10725   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10726   return 0;
10727 }
10728
10729 /* Handling opcode 011 insns.  */
10730
10731 static int
10732 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10733 {
10734   struct regcache *reg_cache = arm_insn_r->regcache;
10735
10736   uint32_t shift_imm = 0;
10737   uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10738   uint32_t offset_12 = 0, tgt_mem_addr = 0;
10739   uint32_t record_buf[8], record_buf_mem[8];
10740
10741   LONGEST s_word;
10742   ULONGEST u_regval[2];
10743
10744   if (bit (arm_insn_r->arm_insn, 4))
10745     return arm_record_media (arm_insn_r);
10746
10747   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10748   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10749
10750   /* Handle enhanced store insns and LDRD DSP insn,
10751      order begins according to addressing modes for store insns
10752      STRH insn.  */
10753
10754   /* LDR or STR?  */
10755   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10756     {
10757       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10758       /* LDR insn has a capability to do branching, if
10759          MOV LR, PC is precedded by LDR insn having Rn as R15
10760          in that case, it emulates branch and link insn, and hence we
10761          need to save CSPR and PC as well.  */
10762       if (15 != reg_dest)
10763         {
10764           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10765           arm_insn_r->reg_rec_count = 1;
10766         }
10767       else
10768         {
10769           record_buf[0] = reg_dest;
10770           record_buf[1] = ARM_PS_REGNUM;
10771           arm_insn_r->reg_rec_count = 2;
10772         }
10773     }
10774   else
10775     {
10776       if (! bits (arm_insn_r->arm_insn, 4, 11))
10777         {
10778           /* Store insn, register offset and register pre-indexed,
10779              register post-indexed.  */
10780           /* Get Rm.  */
10781           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10782           /* Get Rn.  */
10783           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10784           regcache_raw_read_unsigned (reg_cache, reg_src1
10785                                       , &u_regval[0]);
10786           regcache_raw_read_unsigned (reg_cache, reg_src2
10787                                       , &u_regval[1]);
10788           if (15 == reg_src2)
10789             {
10790               /* If R15 was used as Rn, hence current PC+8.  */
10791               /* Pre-indexed mode doesnt reach here ; illegal insn.  */
10792                 u_regval[0] = u_regval[0] + 8;
10793             }
10794           /* Calculate target store address, Rn +/- Rm, register offset.  */
10795           /* U == 1.  */
10796           if (bit (arm_insn_r->arm_insn, 23))
10797             {
10798               tgt_mem_addr = u_regval[0] + u_regval[1];
10799             }
10800           else
10801             {
10802               tgt_mem_addr = u_regval[1] - u_regval[0];
10803             }
10804
10805           switch (arm_insn_r->opcode)
10806             {
10807               /* STR.  */
10808               case 8:
10809               case 12:
10810               /* STR.  */    
10811               case 9:
10812               case 13:
10813               /* STRT.  */
10814               case 1:
10815               case 5:
10816               /* STR.  */
10817               case 0:
10818               case 4:
10819                 record_buf_mem[0] = 4;
10820               break;
10821
10822               /* STRB.  */
10823               case 10:
10824               case 14:
10825               /* STRB.  */
10826               case 11:
10827               case 15:
10828               /* STRBT.  */    
10829               case 3:
10830               case 7:
10831               /* STRB.  */
10832               case 2:
10833               case 6:
10834                 record_buf_mem[0] = 1;
10835               break;
10836
10837               default:
10838                 gdb_assert_not_reached ("no decoding pattern found");
10839               break;
10840             }
10841           record_buf_mem[1] = tgt_mem_addr;
10842           arm_insn_r->mem_rec_count = 1;
10843
10844           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10845               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10846               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10847               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10848               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10849               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10850              )
10851             {
10852               /* Rn is going to be changed in pre-indexed mode and
10853                  post-indexed mode as well.  */
10854               record_buf[0] = reg_src2;
10855               arm_insn_r->reg_rec_count = 1;
10856             }
10857         }
10858       else
10859         {
10860           /* Store insn, scaled register offset; scaled pre-indexed.  */
10861           offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10862           /* Get Rm.  */
10863           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10864           /* Get Rn.  */
10865           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10866           /* Get shift_imm.  */
10867           shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10868           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10869           regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10870           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10871           /* Offset_12 used as shift.  */
10872           switch (offset_12)
10873             {
10874               case 0:
10875                 /* Offset_12 used as index.  */
10876                 offset_12 = u_regval[0] << shift_imm;
10877               break;
10878
10879               case 1:
10880                 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10881               break;
10882
10883               case 2:
10884                 if (!shift_imm)
10885                   {
10886                     if (bit (u_regval[0], 31))
10887                       {
10888                         offset_12 = 0xFFFFFFFF;
10889                       }
10890                     else
10891                       {
10892                         offset_12 = 0;
10893                       }
10894                   }
10895                 else
10896                   {
10897                     /* This is arithmetic shift.  */
10898                     offset_12 = s_word >> shift_imm;
10899                   }
10900                 break;
10901
10902               case 3:
10903                 if (!shift_imm)
10904                   {
10905                     regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10906                                                 &u_regval[1]);
10907                     /* Get C flag value and shift it by 31.  */
10908                     offset_12 = (((bit (u_regval[1], 29)) << 31) \
10909                                   | (u_regval[0]) >> 1);
10910                   }
10911                 else
10912                   {
10913                     offset_12 = (u_regval[0] >> shift_imm) \
10914                                 | (u_regval[0] <<
10915                                 (sizeof(uint32_t) - shift_imm));
10916                   }
10917               break;
10918
10919               default:
10920                 gdb_assert_not_reached ("no decoding pattern found");
10921               break;
10922             }
10923
10924           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10925           /* bit U set.  */
10926           if (bit (arm_insn_r->arm_insn, 23))
10927             {
10928               tgt_mem_addr = u_regval[1] + offset_12;
10929             }
10930           else
10931             {
10932               tgt_mem_addr = u_regval[1] - offset_12;
10933             }
10934
10935           switch (arm_insn_r->opcode)
10936             {
10937               /* STR.  */
10938               case 8:
10939               case 12:
10940               /* STR.  */    
10941               case 9:
10942               case 13:
10943               /* STRT.  */
10944               case 1:
10945               case 5:
10946               /* STR.  */
10947               case 0:
10948               case 4:
10949                 record_buf_mem[0] = 4;
10950               break;
10951
10952               /* STRB.  */
10953               case 10:
10954               case 14:
10955               /* STRB.  */
10956               case 11:
10957               case 15:
10958               /* STRBT.  */    
10959               case 3:
10960               case 7:
10961               /* STRB.  */
10962               case 2:
10963               case 6:
10964                 record_buf_mem[0] = 1;
10965               break;
10966
10967               default:
10968                 gdb_assert_not_reached ("no decoding pattern found");
10969               break;
10970             }
10971           record_buf_mem[1] = tgt_mem_addr;
10972           arm_insn_r->mem_rec_count = 1;
10973
10974           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10975               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10976               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10977               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10978               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10979               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10980              )
10981             {
10982               /* Rn is going to be changed in register scaled pre-indexed
10983                  mode,and scaled post indexed mode.  */
10984               record_buf[0] = reg_src2;
10985               arm_insn_r->reg_rec_count = 1;
10986             }
10987         }
10988     }
10989
10990   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10991   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10992   return 0;
10993 }
10994
10995 /* Handle ARM mode instructions with opcode 100.  */
10996
10997 static int
10998 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
10999 {
11000   struct regcache *reg_cache = arm_insn_r->regcache;
11001   uint32_t register_count = 0, register_bits;
11002   uint32_t reg_base, addr_mode;
11003   uint32_t record_buf[24], record_buf_mem[48];
11004   uint32_t wback;
11005   ULONGEST u_regval;
11006
11007   /* Fetch the list of registers.  */
11008   register_bits = bits (arm_insn_r->arm_insn, 0, 15);
11009   arm_insn_r->reg_rec_count = 0;
11010
11011   /* Fetch the base register that contains the address we are loading data
11012      to.  */
11013   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11014
11015   /* Calculate wback.  */
11016   wback = (bit (arm_insn_r->arm_insn, 21) == 1);
11017
11018   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11019     {
11020       /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB.  */
11021
11022       /* Find out which registers are going to be loaded from memory.  */
11023       while (register_bits)
11024         {
11025           if (register_bits & 0x00000001)
11026             record_buf[arm_insn_r->reg_rec_count++] = register_count;
11027           register_bits = register_bits >> 1;
11028           register_count++;
11029         }
11030
11031   
11032       /* If wback is true, also save the base register, which is going to be
11033          written to.  */
11034       if (wback)
11035         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11036
11037       /* Save the CPSR register.  */
11038       record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11039     }
11040   else
11041     {
11042       /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA).  */
11043
11044       addr_mode = bits (arm_insn_r->arm_insn, 23, 24); 
11045
11046       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11047
11048       /* Find out how many registers are going to be stored to memory.  */
11049       while (register_bits)
11050         {
11051           if (register_bits & 0x00000001)
11052             register_count++;
11053           register_bits = register_bits >> 1;
11054         }
11055
11056       switch (addr_mode)
11057         {
11058           /* STMDA (STMED): Decrement after.  */
11059           case 0:
11060           record_buf_mem[1] = (uint32_t) u_regval
11061                               - register_count * INT_REGISTER_SIZE + 4;
11062           break;
11063           /* STM (STMIA, STMEA): Increment after.  */
11064           case 1:
11065           record_buf_mem[1] = (uint32_t) u_regval;
11066           break;
11067           /* STMDB (STMFD): Decrement before.  */
11068           case 2:
11069           record_buf_mem[1] = (uint32_t) u_regval
11070                               - register_count * INT_REGISTER_SIZE;
11071           break;
11072           /* STMIB (STMFA): Increment before.  */
11073           case 3:
11074           record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11075           break;
11076           default:
11077             gdb_assert_not_reached ("no decoding pattern found");
11078           break;
11079         }
11080
11081       record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11082       arm_insn_r->mem_rec_count = 1;
11083
11084       /* If wback is true, also save the base register, which is going to be
11085          written to.  */
11086       if (wback)
11087         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11088     }
11089
11090   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11091   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11092   return 0;
11093 }
11094
11095 /* Handling opcode 101 insns.  */
11096
11097 static int
11098 arm_record_b_bl (insn_decode_record *arm_insn_r)
11099 {
11100   uint32_t record_buf[8];
11101
11102   /* Handle B, BL, BLX(1) insns.  */
11103   /* B simply branches so we do nothing here.  */
11104   /* Note: BLX(1) doesnt fall here but instead it falls into
11105      extension space.  */
11106   if (bit (arm_insn_r->arm_insn, 24))
11107   {
11108     record_buf[0] = ARM_LR_REGNUM;
11109     arm_insn_r->reg_rec_count = 1;
11110   }
11111
11112   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11113
11114   return 0;
11115 }
11116
11117 static int
11118 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11119 {
11120   printf_unfiltered (_("Process record does not support instruction "
11121                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11122                      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11123
11124   return -1;
11125 }
11126
11127 /* Record handler for vector data transfer instructions.  */
11128
11129 static int
11130 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11131 {
11132   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11133   uint32_t record_buf[4];
11134
11135   reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11136   reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11137   bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11138   bit_l = bit (arm_insn_r->arm_insn, 20);
11139   bit_c = bit (arm_insn_r->arm_insn, 8);
11140
11141   /* Handle VMOV instruction.  */
11142   if (bit_l && bit_c)
11143     {
11144       record_buf[0] = reg_t;
11145       arm_insn_r->reg_rec_count = 1;
11146     }
11147   else if (bit_l && !bit_c)
11148     {
11149       /* Handle VMOV instruction.  */
11150       if (bits_a == 0x00)
11151         {
11152           record_buf[0] = reg_t;
11153           arm_insn_r->reg_rec_count = 1;
11154         }
11155       /* Handle VMRS instruction.  */
11156       else if (bits_a == 0x07)
11157         {
11158           if (reg_t == 15)
11159             reg_t = ARM_PS_REGNUM;
11160
11161           record_buf[0] = reg_t;
11162           arm_insn_r->reg_rec_count = 1;
11163         }
11164     }
11165   else if (!bit_l && !bit_c)
11166     {
11167       /* Handle VMOV instruction.  */
11168       if (bits_a == 0x00)
11169         {
11170           record_buf[0] = ARM_D0_REGNUM + reg_v;
11171
11172           arm_insn_r->reg_rec_count = 1;
11173         }
11174       /* Handle VMSR instruction.  */
11175       else if (bits_a == 0x07)
11176         {
11177           record_buf[0] = ARM_FPSCR_REGNUM;
11178           arm_insn_r->reg_rec_count = 1;
11179         }
11180     }
11181   else if (!bit_l && bit_c)
11182     {
11183       /* Handle VMOV instruction.  */
11184       if (!(bits_a & 0x04))
11185         {
11186           record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11187                           + ARM_D0_REGNUM;
11188           arm_insn_r->reg_rec_count = 1;
11189         }
11190       /* Handle VDUP instruction.  */
11191       else
11192         {
11193           if (bit (arm_insn_r->arm_insn, 21))
11194             {
11195               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11196               record_buf[0] = reg_v + ARM_D0_REGNUM;
11197               record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11198               arm_insn_r->reg_rec_count = 2;
11199             }
11200           else
11201             {
11202               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11203               record_buf[0] = reg_v + ARM_D0_REGNUM;
11204               arm_insn_r->reg_rec_count = 1;
11205             }
11206         }
11207     }
11208
11209   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11210   return 0;
11211 }
11212
11213 /* Record handler for extension register load/store instructions.  */
11214
11215 static int
11216 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11217 {
11218   uint32_t opcode, single_reg;
11219   uint8_t op_vldm_vstm;
11220   uint32_t record_buf[8], record_buf_mem[128];
11221   ULONGEST u_regval = 0;
11222
11223   struct regcache *reg_cache = arm_insn_r->regcache;
11224
11225   opcode = bits (arm_insn_r->arm_insn, 20, 24);
11226   single_reg = !bit (arm_insn_r->arm_insn, 8);
11227   op_vldm_vstm = opcode & 0x1b;
11228
11229   /* Handle VMOV instructions.  */
11230   if ((opcode & 0x1e) == 0x04)
11231     {
11232       if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11233         {
11234           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11235           record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11236           arm_insn_r->reg_rec_count = 2;
11237         }
11238       else
11239         {
11240           uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11241           uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11242
11243           if (single_reg)
11244             {
11245               /* The first S register number m is REG_M:M (M is bit 5),
11246                  the corresponding D register number is REG_M:M / 2, which
11247                  is REG_M.  */
11248               record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11249               /* The second S register number is REG_M:M + 1, the
11250                  corresponding D register number is (REG_M:M + 1) / 2.
11251                  IOW, if bit M is 1, the first and second S registers
11252                  are mapped to different D registers, otherwise, they are
11253                  in the same D register.  */
11254               if (bit_m)
11255                 {
11256                   record_buf[arm_insn_r->reg_rec_count++]
11257                     = ARM_D0_REGNUM + reg_m + 1;
11258                 }
11259             }
11260           else
11261             {
11262               record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11263               arm_insn_r->reg_rec_count = 1;
11264             }
11265         }
11266     }
11267   /* Handle VSTM and VPUSH instructions.  */
11268   else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11269            || op_vldm_vstm == 0x12)
11270     {
11271       uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11272       uint32_t memory_index = 0;
11273
11274       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11275       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11276       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11277       imm_off32 = imm_off8 << 2;
11278       memory_count = imm_off8;
11279
11280       if (bit (arm_insn_r->arm_insn, 23))
11281         start_address = u_regval;
11282       else
11283         start_address = u_regval - imm_off32;
11284
11285       if (bit (arm_insn_r->arm_insn, 21))
11286         {
11287           record_buf[0] = reg_rn;
11288           arm_insn_r->reg_rec_count = 1;
11289         }
11290
11291       while (memory_count > 0)
11292         {
11293           if (single_reg)
11294             {
11295               record_buf_mem[memory_index] = 4;
11296               record_buf_mem[memory_index + 1] = start_address;
11297               start_address = start_address + 4;
11298               memory_index = memory_index + 2;
11299             }
11300           else
11301             {
11302               record_buf_mem[memory_index] = 4;
11303               record_buf_mem[memory_index + 1] = start_address;
11304               record_buf_mem[memory_index + 2] = 4;
11305               record_buf_mem[memory_index + 3] = start_address + 4;
11306               start_address = start_address + 8;
11307               memory_index = memory_index + 4;
11308             }
11309           memory_count--;
11310         }
11311       arm_insn_r->mem_rec_count = (memory_index >> 1);
11312     }
11313   /* Handle VLDM instructions.  */
11314   else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11315            || op_vldm_vstm == 0x13)
11316     {
11317       uint32_t reg_count, reg_vd;
11318       uint32_t reg_index = 0;
11319       uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11320
11321       reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11322       reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11323
11324       /* REG_VD is the first D register number.  If the instruction
11325          loads memory to S registers (SINGLE_REG is TRUE), the register
11326          number is (REG_VD << 1 | bit D), so the corresponding D
11327          register number is (REG_VD << 1 | bit D) / 2 = REG_VD.  */
11328       if (!single_reg)
11329         reg_vd = reg_vd | (bit_d << 4);
11330
11331       if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11332         record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11333
11334       /* If the instruction loads memory to D register, REG_COUNT should
11335          be divided by 2, according to the ARM Architecture Reference
11336          Manual.  If the instruction loads memory to S register, divide by
11337          2 as well because two S registers are mapped to D register.  */
11338       reg_count  = reg_count / 2;
11339       if (single_reg && bit_d)
11340         {
11341           /* Increase the register count if S register list starts from
11342              an odd number (bit d is one).  */
11343           reg_count++;
11344         }
11345
11346       while (reg_count > 0)
11347         {
11348           record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11349           reg_count--;
11350         }
11351       arm_insn_r->reg_rec_count = reg_index;
11352     }
11353   /* VSTR Vector store register.  */
11354   else if ((opcode & 0x13) == 0x10)
11355     {
11356       uint32_t start_address, reg_rn, imm_off32, imm_off8;
11357       uint32_t memory_index = 0;
11358
11359       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11360       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11361       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11362       imm_off32 = imm_off8 << 2;
11363
11364       if (bit (arm_insn_r->arm_insn, 23))
11365         start_address = u_regval + imm_off32;
11366       else
11367         start_address = u_regval - imm_off32;
11368
11369       if (single_reg)
11370         {
11371           record_buf_mem[memory_index] = 4;
11372           record_buf_mem[memory_index + 1] = start_address;
11373           arm_insn_r->mem_rec_count = 1;
11374         }
11375       else
11376         {
11377           record_buf_mem[memory_index] = 4;
11378           record_buf_mem[memory_index + 1] = start_address;
11379           record_buf_mem[memory_index + 2] = 4;
11380           record_buf_mem[memory_index + 3] = start_address + 4;
11381           arm_insn_r->mem_rec_count = 2;
11382         }
11383     }
11384   /* VLDR Vector load register.  */
11385   else if ((opcode & 0x13) == 0x11)
11386     {
11387       uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11388
11389       if (!single_reg)
11390         {
11391           reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11392           record_buf[0] = ARM_D0_REGNUM + reg_vd;
11393         }
11394       else
11395         {
11396           reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11397           /* Record register D rather than pseudo register S.  */
11398           record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11399         }
11400       arm_insn_r->reg_rec_count = 1;
11401     }
11402
11403   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11404   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11405   return 0;
11406 }
11407
11408 /* Record handler for arm/thumb mode VFP data processing instructions.  */
11409
11410 static int
11411 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11412 {
11413   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11414   uint32_t record_buf[4];
11415   enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11416   enum insn_types curr_insn_type = INSN_INV;
11417
11418   reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11419   opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11420   opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11421   opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11422   dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11423   bit_d = bit (arm_insn_r->arm_insn, 22);
11424   opc1 = opc1 & 0x04;
11425
11426   /* Handle VMLA, VMLS.  */
11427   if (opc1 == 0x00)
11428     {
11429       if (bit (arm_insn_r->arm_insn, 10))
11430         {
11431           if (bit (arm_insn_r->arm_insn, 6))
11432             curr_insn_type = INSN_T0;
11433           else
11434             curr_insn_type = INSN_T1;
11435         }
11436       else
11437         {
11438           if (dp_op_sz)
11439             curr_insn_type = INSN_T1;
11440           else
11441             curr_insn_type = INSN_T2;
11442         }
11443     }
11444   /* Handle VNMLA, VNMLS, VNMUL.  */
11445   else if (opc1 == 0x01)
11446     {
11447       if (dp_op_sz)
11448         curr_insn_type = INSN_T1;
11449       else
11450         curr_insn_type = INSN_T2;
11451     }
11452   /* Handle VMUL.  */
11453   else if (opc1 == 0x02 && !(opc3 & 0x01))
11454     {
11455       if (bit (arm_insn_r->arm_insn, 10))
11456         {
11457           if (bit (arm_insn_r->arm_insn, 6))
11458             curr_insn_type = INSN_T0;
11459           else
11460             curr_insn_type = INSN_T1;
11461         }
11462       else
11463         {
11464           if (dp_op_sz)
11465             curr_insn_type = INSN_T1;
11466           else
11467             curr_insn_type = INSN_T2;
11468         }
11469     }
11470   /* Handle VADD, VSUB.  */
11471   else if (opc1 == 0x03)
11472     {
11473       if (!bit (arm_insn_r->arm_insn, 9))
11474         {
11475           if (bit (arm_insn_r->arm_insn, 6))
11476             curr_insn_type = INSN_T0;
11477           else
11478             curr_insn_type = INSN_T1;
11479         }
11480       else
11481         {
11482           if (dp_op_sz)
11483             curr_insn_type = INSN_T1;
11484           else
11485             curr_insn_type = INSN_T2;
11486         }
11487     }
11488   /* Handle VDIV.  */
11489   else if (opc1 == 0x0b)
11490     {
11491       if (dp_op_sz)
11492         curr_insn_type = INSN_T1;
11493       else
11494         curr_insn_type = INSN_T2;
11495     }
11496   /* Handle all other vfp data processing instructions.  */
11497   else if (opc1 == 0x0b)
11498     {
11499       /* Handle VMOV.  */
11500       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11501         {
11502           if (bit (arm_insn_r->arm_insn, 4))
11503             {
11504               if (bit (arm_insn_r->arm_insn, 6))
11505                 curr_insn_type = INSN_T0;
11506               else
11507                 curr_insn_type = INSN_T1;
11508             }
11509           else
11510             {
11511               if (dp_op_sz)
11512                 curr_insn_type = INSN_T1;
11513               else
11514                 curr_insn_type = INSN_T2;
11515             }
11516         }
11517       /* Handle VNEG and VABS.  */
11518       else if ((opc2 == 0x01 && opc3 == 0x01)
11519               || (opc2 == 0x00 && opc3 == 0x03))
11520         {
11521           if (!bit (arm_insn_r->arm_insn, 11))
11522             {
11523               if (bit (arm_insn_r->arm_insn, 6))
11524                 curr_insn_type = INSN_T0;
11525               else
11526                 curr_insn_type = INSN_T1;
11527             }
11528           else
11529             {
11530               if (dp_op_sz)
11531                 curr_insn_type = INSN_T1;
11532               else
11533                 curr_insn_type = INSN_T2;
11534             }
11535         }
11536       /* Handle VSQRT.  */
11537       else if (opc2 == 0x01 && opc3 == 0x03)
11538         {
11539           if (dp_op_sz)
11540             curr_insn_type = INSN_T1;
11541           else
11542             curr_insn_type = INSN_T2;
11543         }
11544       /* Handle VCVT.  */
11545       else if (opc2 == 0x07 && opc3 == 0x03)
11546         {
11547           if (!dp_op_sz)
11548             curr_insn_type = INSN_T1;
11549           else
11550             curr_insn_type = INSN_T2;
11551         }
11552       else if (opc3 & 0x01)
11553         {
11554           /* Handle VCVT.  */
11555           if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11556             {
11557               if (!bit (arm_insn_r->arm_insn, 18))
11558                 curr_insn_type = INSN_T2;
11559               else
11560                 {
11561                   if (dp_op_sz)
11562                     curr_insn_type = INSN_T1;
11563                   else
11564                     curr_insn_type = INSN_T2;
11565                 }
11566             }
11567           /* Handle VCVT.  */
11568           else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11569             {
11570               if (dp_op_sz)
11571                 curr_insn_type = INSN_T1;
11572               else
11573                 curr_insn_type = INSN_T2;
11574             }
11575           /* Handle VCVTB, VCVTT.  */
11576           else if ((opc2 & 0x0e) == 0x02)
11577             curr_insn_type = INSN_T2;
11578           /* Handle VCMP, VCMPE.  */
11579           else if ((opc2 & 0x0e) == 0x04)
11580             curr_insn_type = INSN_T3;
11581         }
11582     }
11583
11584   switch (curr_insn_type)
11585     {
11586       case INSN_T0:
11587         reg_vd = reg_vd | (bit_d << 4);
11588         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11589         record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11590         arm_insn_r->reg_rec_count = 2;
11591         break;
11592
11593       case INSN_T1:
11594         reg_vd = reg_vd | (bit_d << 4);
11595         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11596         arm_insn_r->reg_rec_count = 1;
11597         break;
11598
11599       case INSN_T2:
11600         reg_vd = (reg_vd << 1) | bit_d;
11601         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11602         arm_insn_r->reg_rec_count = 1;
11603         break;
11604
11605       case INSN_T3:
11606         record_buf[0] = ARM_FPSCR_REGNUM;
11607         arm_insn_r->reg_rec_count = 1;
11608         break;
11609
11610       default:
11611         gdb_assert_not_reached ("no decoding pattern found");
11612         break;
11613     }
11614
11615   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11616   return 0;
11617 }
11618
11619 /* Handling opcode 110 insns.  */
11620
11621 static int
11622 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11623 {
11624   uint32_t op1, op1_ebit, coproc;
11625
11626   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11627   op1 = bits (arm_insn_r->arm_insn, 20, 25);
11628   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11629
11630   if ((coproc & 0x0e) == 0x0a)
11631     {
11632       /* Handle extension register ld/st instructions.  */
11633       if (!(op1 & 0x20))
11634         return arm_record_exreg_ld_st_insn (arm_insn_r);
11635
11636       /* 64-bit transfers between arm core and extension registers.  */
11637       if ((op1 & 0x3e) == 0x04)
11638         return arm_record_exreg_ld_st_insn (arm_insn_r);
11639     }
11640   else
11641     {
11642       /* Handle coprocessor ld/st instructions.  */
11643       if (!(op1 & 0x3a))
11644         {
11645           /* Store.  */
11646           if (!op1_ebit)
11647             return arm_record_unsupported_insn (arm_insn_r);
11648           else
11649             /* Load.  */
11650             return arm_record_unsupported_insn (arm_insn_r);
11651         }
11652
11653       /* Move to coprocessor from two arm core registers.  */
11654       if (op1 == 0x4)
11655         return arm_record_unsupported_insn (arm_insn_r);
11656
11657       /* Move to two arm core registers from coprocessor.  */
11658       if (op1 == 0x5)
11659         {
11660           uint32_t reg_t[2];
11661
11662           reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11663           reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11664           arm_insn_r->reg_rec_count = 2;
11665
11666           REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11667           return 0;
11668        }
11669     }
11670   return arm_record_unsupported_insn (arm_insn_r);
11671 }
11672
11673 /* Handling opcode 111 insns.  */
11674
11675 static int
11676 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11677 {
11678   uint32_t op, op1_ebit, coproc, bits_24_25;
11679   struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11680   struct regcache *reg_cache = arm_insn_r->regcache;
11681
11682   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11683   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11684   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11685   op = bit (arm_insn_r->arm_insn, 4);
11686   bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11687
11688   /* Handle arm SWI/SVC system call instructions.  */
11689   if (bits_24_25 == 0x3)
11690     {
11691       if (tdep->arm_syscall_record != NULL)
11692         {
11693           ULONGEST svc_operand, svc_number;
11694
11695           svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11696
11697           if (svc_operand)  /* OABI.  */
11698             svc_number = svc_operand - 0x900000;
11699           else /* EABI.  */
11700             regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11701
11702           return tdep->arm_syscall_record (reg_cache, svc_number);
11703         }
11704       else
11705         {
11706           printf_unfiltered (_("no syscall record support\n"));
11707           return -1;
11708         }
11709     }
11710   else if (bits_24_25 == 0x02)
11711     {
11712       if (op)
11713         {
11714           if ((coproc & 0x0e) == 0x0a)
11715             {
11716               /* 8, 16, and 32-bit transfer */
11717               return arm_record_vdata_transfer_insn (arm_insn_r);
11718             }
11719           else
11720             {
11721               if (op1_ebit)
11722                 {
11723                   /* MRC, MRC2 */
11724                   uint32_t record_buf[1];
11725
11726                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11727                   if (record_buf[0] == 15)
11728                     record_buf[0] = ARM_PS_REGNUM;
11729
11730                   arm_insn_r->reg_rec_count = 1;
11731                   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11732                              record_buf);
11733                   return 0;
11734                 }
11735               else
11736                 {
11737                   /* MCR, MCR2 */
11738                   return -1;
11739                 }
11740             }
11741         }
11742       else
11743         {
11744           if ((coproc & 0x0e) == 0x0a)
11745             {
11746               /* VFP data-processing instructions.  */
11747               return arm_record_vfp_data_proc_insn (arm_insn_r);
11748             }
11749           else
11750             {
11751               /* CDP, CDP2 */
11752               return -1;
11753             }
11754         }
11755     }
11756   else
11757     {
11758       unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11759
11760       if (op1 == 5)
11761         {
11762           if ((coproc & 0x0e) != 0x0a)
11763             {
11764               /* MRRC, MRRC2 */
11765               return -1;
11766             }
11767         }
11768       else if (op1 == 4 || op1 == 5)
11769         {
11770           if ((coproc & 0x0e) == 0x0a)
11771             {
11772               /* 64-bit transfers between ARM core and extension */
11773               return -1;
11774             }
11775           else if (op1 == 4)
11776             {
11777               /* MCRR, MCRR2 */
11778               return -1;
11779             }
11780         }
11781       else if (op1 == 0 || op1 == 1)
11782         {
11783           /* UNDEFINED */
11784           return -1;
11785         }
11786       else
11787         {
11788           if ((coproc & 0x0e) == 0x0a)
11789             {
11790               /* Extension register load/store */
11791             }
11792           else
11793             {
11794               /* STC, STC2, LDC, LDC2 */
11795             }
11796           return -1;
11797         }
11798     }
11799
11800   return -1;
11801 }
11802
11803 /* Handling opcode 000 insns.  */
11804
11805 static int
11806 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11807 {
11808   uint32_t record_buf[8];
11809   uint32_t reg_src1 = 0;
11810
11811   reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11812
11813   record_buf[0] = ARM_PS_REGNUM;
11814   record_buf[1] = reg_src1;
11815   thumb_insn_r->reg_rec_count = 2;
11816
11817   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11818
11819   return 0;
11820 }
11821
11822
11823 /* Handling opcode 001 insns.  */
11824
11825 static int
11826 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11827 {
11828   uint32_t record_buf[8];
11829   uint32_t reg_src1 = 0;
11830
11831   reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11832
11833   record_buf[0] = ARM_PS_REGNUM;
11834   record_buf[1] = reg_src1;
11835   thumb_insn_r->reg_rec_count = 2;
11836
11837   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11838
11839   return 0;
11840 }
11841
11842 /* Handling opcode 010 insns.  */
11843
11844 static int
11845 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11846 {
11847   struct regcache *reg_cache =  thumb_insn_r->regcache;
11848   uint32_t record_buf[8], record_buf_mem[8];
11849
11850   uint32_t reg_src1 = 0, reg_src2 = 0;
11851   uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11852
11853   ULONGEST u_regval[2] = {0};
11854
11855   opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11856
11857   if (bit (thumb_insn_r->arm_insn, 12))
11858     {
11859       /* Handle load/store register offset.  */
11860       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11861
11862       if (in_inclusive_range (opB, 4U, 7U))
11863         {
11864           /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
11865           reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11866           record_buf[0] = reg_src1;
11867           thumb_insn_r->reg_rec_count = 1;
11868         }
11869       else if (in_inclusive_range (opB, 0U, 2U))
11870         {
11871           /* STR(2), STRB(2), STRH(2) .  */
11872           reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11873           reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11874           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11875           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11876           if (0 == opB)
11877             record_buf_mem[0] = 4;    /* STR (2).  */
11878           else if (2 == opB)
11879             record_buf_mem[0] = 1;    /*  STRB (2).  */
11880           else if (1 == opB)
11881             record_buf_mem[0] = 2;    /* STRH (2).  */
11882           record_buf_mem[1] = u_regval[0] + u_regval[1];
11883           thumb_insn_r->mem_rec_count = 1;
11884         }
11885     }
11886   else if (bit (thumb_insn_r->arm_insn, 11))
11887     {
11888       /* Handle load from literal pool.  */
11889       /* LDR(3).  */
11890       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11891       record_buf[0] = reg_src1;
11892       thumb_insn_r->reg_rec_count = 1;
11893     }
11894   else if (opcode1)
11895     {
11896       /* Special data instructions and branch and exchange */
11897       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11898       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11899       if ((3 == opcode2) && (!opcode3))
11900         {
11901           /* Branch with exchange.  */
11902           record_buf[0] = ARM_PS_REGNUM;
11903           thumb_insn_r->reg_rec_count = 1;
11904         }
11905       else
11906         {
11907           /* Format 8; special data processing insns.  */
11908           record_buf[0] = ARM_PS_REGNUM;
11909           record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11910                            | bits (thumb_insn_r->arm_insn, 0, 2));
11911           thumb_insn_r->reg_rec_count = 2;
11912         }
11913     }
11914   else
11915     {
11916       /* Format 5; data processing insns.  */
11917       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11918       if (bit (thumb_insn_r->arm_insn, 7))
11919         {
11920           reg_src1 = reg_src1 + 8;
11921         }
11922       record_buf[0] = ARM_PS_REGNUM;
11923       record_buf[1] = reg_src1;
11924       thumb_insn_r->reg_rec_count = 2;
11925     }
11926
11927   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11928   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11929              record_buf_mem);
11930
11931   return 0;
11932 }
11933
11934 /* Handling opcode 001 insns.  */
11935
11936 static int
11937 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11938 {
11939   struct regcache *reg_cache = thumb_insn_r->regcache;
11940   uint32_t record_buf[8], record_buf_mem[8];
11941
11942   uint32_t reg_src1 = 0;
11943   uint32_t opcode = 0, immed_5 = 0;
11944
11945   ULONGEST u_regval = 0;
11946
11947   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11948
11949   if (opcode)
11950     {
11951       /* LDR(1).  */
11952       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11953       record_buf[0] = reg_src1;
11954       thumb_insn_r->reg_rec_count = 1;
11955     }
11956   else
11957     {
11958       /* STR(1).  */
11959       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11960       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11961       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11962       record_buf_mem[0] = 4;
11963       record_buf_mem[1] = u_regval + (immed_5 * 4);
11964       thumb_insn_r->mem_rec_count = 1;
11965     }
11966
11967   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11968   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
11969              record_buf_mem);
11970
11971   return 0;
11972 }
11973
11974 /* Handling opcode 100 insns.  */
11975
11976 static int
11977 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11978 {
11979   struct regcache *reg_cache = thumb_insn_r->regcache;
11980   uint32_t record_buf[8], record_buf_mem[8];
11981
11982   uint32_t reg_src1 = 0;
11983   uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11984
11985   ULONGEST u_regval = 0;
11986
11987   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11988
11989   if (3 == opcode)
11990     {
11991       /* LDR(4).  */
11992       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11993       record_buf[0] = reg_src1;
11994       thumb_insn_r->reg_rec_count = 1;
11995     }
11996   else if (1 == opcode)
11997     {
11998       /* LDRH(1).  */
11999       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12000       record_buf[0] = reg_src1;
12001       thumb_insn_r->reg_rec_count = 1;
12002     }
12003   else if (2 == opcode)
12004     {
12005       /* STR(3).  */
12006       immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
12007       regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12008       record_buf_mem[0] = 4;
12009       record_buf_mem[1] = u_regval + (immed_8 * 4);
12010       thumb_insn_r->mem_rec_count = 1;
12011     }
12012   else if (0 == opcode)
12013     {
12014       /* STRH(1).  */
12015       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12016       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12017       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12018       record_buf_mem[0] = 2;
12019       record_buf_mem[1] = u_regval + (immed_5 * 2);
12020       thumb_insn_r->mem_rec_count = 1;
12021     }
12022
12023   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12024   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12025              record_buf_mem);
12026
12027   return 0;
12028 }
12029
12030 /* Handling opcode 101 insns.  */
12031
12032 static int
12033 thumb_record_misc (insn_decode_record *thumb_insn_r)
12034 {
12035   struct regcache *reg_cache = thumb_insn_r->regcache;
12036
12037   uint32_t opcode = 0;
12038   uint32_t register_bits = 0, register_count = 0;
12039   uint32_t index = 0, start_address = 0;
12040   uint32_t record_buf[24], record_buf_mem[48];
12041   uint32_t reg_src1;
12042
12043   ULONGEST u_regval = 0;
12044
12045   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12046
12047   if (opcode == 0 || opcode == 1)
12048     {
12049       /* ADR and ADD (SP plus immediate) */
12050
12051       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12052       record_buf[0] = reg_src1;
12053       thumb_insn_r->reg_rec_count = 1;
12054     }
12055   else
12056     {
12057       /* Miscellaneous 16-bit instructions */
12058       uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
12059
12060       switch (opcode2)
12061         {
12062         case 6:
12063           /* SETEND and CPS */
12064           break;
12065         case 0:
12066           /* ADD/SUB (SP plus immediate)  */
12067           reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12068           record_buf[0] = ARM_SP_REGNUM;
12069           thumb_insn_r->reg_rec_count = 1;
12070           break;
12071         case 1: /* fall through  */
12072         case 3: /* fall through  */
12073         case 9: /* fall through  */
12074         case 11:
12075           /* CBNZ, CBZ */
12076           break;
12077         case 2:
12078           /* SXTH, SXTB, UXTH, UXTB */
12079           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12080           thumb_insn_r->reg_rec_count = 1;
12081           break;
12082         case 4: /* fall through  */
12083         case 5:
12084           /* PUSH.  */
12085           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12086           regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12087           while (register_bits)
12088             {
12089               if (register_bits & 0x00000001)
12090                 register_count++;
12091               register_bits = register_bits >> 1;
12092             }
12093           start_address = u_regval -  \
12094             (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12095           thumb_insn_r->mem_rec_count = register_count;
12096           while (register_count)
12097             {
12098               record_buf_mem[(register_count * 2) - 1] = start_address;
12099               record_buf_mem[(register_count * 2) - 2] = 4;
12100               start_address = start_address + 4;
12101               register_count--;
12102             }
12103           record_buf[0] = ARM_SP_REGNUM;
12104           thumb_insn_r->reg_rec_count = 1;
12105           break;
12106         case 10:
12107           /* REV, REV16, REVSH */
12108           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12109           thumb_insn_r->reg_rec_count = 1;
12110           break;
12111         case 12: /* fall through  */
12112         case 13:
12113           /* POP.  */
12114           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12115           while (register_bits)
12116             {
12117               if (register_bits & 0x00000001)
12118                 record_buf[index++] = register_count;
12119               register_bits = register_bits >> 1;
12120               register_count++;
12121             }
12122           record_buf[index++] = ARM_PS_REGNUM;
12123           record_buf[index++] = ARM_SP_REGNUM;
12124           thumb_insn_r->reg_rec_count = index;
12125           break;
12126         case 0xe:
12127           /* BKPT insn.  */
12128           /* Handle enhanced software breakpoint insn, BKPT.  */
12129           /* CPSR is changed to be executed in ARM state,  disabling normal
12130              interrupts, entering abort mode.  */
12131           /* According to high vector configuration PC is set.  */
12132           /* User hits breakpoint and type reverse, in that case, we need to go back with 
12133              previous CPSR and Program Counter.  */
12134           record_buf[0] = ARM_PS_REGNUM;
12135           record_buf[1] = ARM_LR_REGNUM;
12136           thumb_insn_r->reg_rec_count = 2;
12137           /* We need to save SPSR value, which is not yet done.  */
12138           printf_unfiltered (_("Process record does not support instruction "
12139                                "0x%0x at address %s.\n"),
12140                              thumb_insn_r->arm_insn,
12141                              paddress (thumb_insn_r->gdbarch,
12142                                        thumb_insn_r->this_addr));
12143           return -1;
12144
12145         case 0xf:
12146           /* If-Then, and hints */
12147           break;
12148         default:
12149           return -1;
12150         };
12151     }
12152
12153   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12154   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12155              record_buf_mem);
12156
12157   return 0;
12158 }
12159
12160 /* Handling opcode 110 insns.  */
12161
12162 static int
12163 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
12164 {
12165   struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12166   struct regcache *reg_cache = thumb_insn_r->regcache;
12167
12168   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
12169   uint32_t reg_src1 = 0;
12170   uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12171   uint32_t index = 0, start_address = 0;
12172   uint32_t record_buf[24], record_buf_mem[48];
12173
12174   ULONGEST u_regval = 0;
12175
12176   opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12177   opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12178
12179   if (1 == opcode2)
12180     {
12181
12182       /* LDMIA.  */
12183       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12184       /* Get Rn.  */
12185       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12186       while (register_bits)
12187         {
12188           if (register_bits & 0x00000001)
12189             record_buf[index++] = register_count;
12190           register_bits = register_bits >> 1;
12191           register_count++;
12192         }
12193       record_buf[index++] = reg_src1;
12194       thumb_insn_r->reg_rec_count = index;
12195     }
12196   else if (0 == opcode2)
12197     {
12198       /* It handles both STMIA.  */
12199       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12200       /* Get Rn.  */
12201       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12202       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12203       while (register_bits)
12204         {
12205           if (register_bits & 0x00000001)
12206             register_count++;
12207           register_bits = register_bits >> 1;
12208         }
12209       start_address = u_regval;
12210       thumb_insn_r->mem_rec_count = register_count;
12211       while (register_count)
12212         {
12213           record_buf_mem[(register_count * 2) - 1] = start_address;
12214           record_buf_mem[(register_count * 2) - 2] = 4;
12215           start_address = start_address + 4;
12216           register_count--;
12217         }
12218     }
12219   else if (0x1F == opcode1)
12220     {
12221         /* Handle arm syscall insn.  */
12222         if (tdep->arm_syscall_record != NULL)
12223           {
12224             regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12225             ret = tdep->arm_syscall_record (reg_cache, u_regval);
12226           }
12227         else
12228           {
12229             printf_unfiltered (_("no syscall record support\n"));
12230             return -1;
12231           }
12232     }
12233
12234   /* B (1), conditional branch is automatically taken care in process_record,
12235     as PC is saved there.  */
12236
12237   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12238   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12239              record_buf_mem);
12240
12241   return ret;
12242 }
12243
12244 /* Handling opcode 111 insns.  */
12245
12246 static int
12247 thumb_record_branch (insn_decode_record *thumb_insn_r)
12248 {
12249   uint32_t record_buf[8];
12250   uint32_t bits_h = 0;
12251
12252   bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12253
12254   if (2 == bits_h || 3 == bits_h)
12255     {
12256       /* BL */
12257       record_buf[0] = ARM_LR_REGNUM;
12258       thumb_insn_r->reg_rec_count = 1;
12259     }
12260   else if (1 == bits_h)
12261     {
12262       /* BLX(1). */
12263       record_buf[0] = ARM_PS_REGNUM;
12264       record_buf[1] = ARM_LR_REGNUM;
12265       thumb_insn_r->reg_rec_count = 2;
12266     }
12267
12268   /* B(2) is automatically taken care in process_record, as PC is 
12269      saved there.  */
12270
12271   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12272
12273   return 0;     
12274 }
12275
12276 /* Handler for thumb2 load/store multiple instructions.  */
12277
12278 static int
12279 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12280 {
12281   struct regcache *reg_cache = thumb2_insn_r->regcache;
12282
12283   uint32_t reg_rn, op;
12284   uint32_t register_bits = 0, register_count = 0;
12285   uint32_t index = 0, start_address = 0;
12286   uint32_t record_buf[24], record_buf_mem[48];
12287
12288   ULONGEST u_regval = 0;
12289
12290   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12291   op = bits (thumb2_insn_r->arm_insn, 23, 24);
12292
12293   if (0 == op || 3 == op)
12294     {
12295       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12296         {
12297           /* Handle RFE instruction.  */
12298           record_buf[0] = ARM_PS_REGNUM;
12299           thumb2_insn_r->reg_rec_count = 1;
12300         }
12301       else
12302         {
12303           /* Handle SRS instruction after reading banked SP.  */
12304           return arm_record_unsupported_insn (thumb2_insn_r);
12305         }
12306     }
12307   else if (1 == op || 2 == op)
12308     {
12309       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12310         {
12311           /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
12312           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12313           while (register_bits)
12314             {
12315               if (register_bits & 0x00000001)
12316                 record_buf[index++] = register_count;
12317
12318               register_count++;
12319               register_bits = register_bits >> 1;
12320             }
12321           record_buf[index++] = reg_rn;
12322           record_buf[index++] = ARM_PS_REGNUM;
12323           thumb2_insn_r->reg_rec_count = index;
12324         }
12325       else
12326         {
12327           /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
12328           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12329           regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12330           while (register_bits)
12331             {
12332               if (register_bits & 0x00000001)
12333                 register_count++;
12334
12335               register_bits = register_bits >> 1;
12336             }
12337
12338           if (1 == op)
12339             {
12340               /* Start address calculation for LDMDB/LDMEA.  */
12341               start_address = u_regval;
12342             }
12343           else if (2 == op)
12344             {
12345               /* Start address calculation for LDMDB/LDMEA.  */
12346               start_address = u_regval - register_count * 4;
12347             }
12348
12349           thumb2_insn_r->mem_rec_count = register_count;
12350           while (register_count)
12351             {
12352               record_buf_mem[register_count * 2 - 1] = start_address;
12353               record_buf_mem[register_count * 2 - 2] = 4;
12354               start_address = start_address + 4;
12355               register_count--;
12356             }
12357           record_buf[0] = reg_rn;
12358           record_buf[1] = ARM_PS_REGNUM;
12359           thumb2_insn_r->reg_rec_count = 2;
12360         }
12361     }
12362
12363   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12364             record_buf_mem);
12365   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12366             record_buf);
12367   return ARM_RECORD_SUCCESS;
12368 }
12369
12370 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12371    instructions.  */
12372
12373 static int
12374 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12375 {
12376   struct regcache *reg_cache = thumb2_insn_r->regcache;
12377
12378   uint32_t reg_rd, reg_rn, offset_imm;
12379   uint32_t reg_dest1, reg_dest2;
12380   uint32_t address, offset_addr;
12381   uint32_t record_buf[8], record_buf_mem[8];
12382   uint32_t op1, op2, op3;
12383
12384   ULONGEST u_regval[2];
12385
12386   op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12387   op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12388   op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12389
12390   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12391     {
12392       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12393         {
12394           reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12395           record_buf[0] = reg_dest1;
12396           record_buf[1] = ARM_PS_REGNUM;
12397           thumb2_insn_r->reg_rec_count = 2;
12398         }
12399
12400       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12401         {
12402           reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12403           record_buf[2] = reg_dest2;
12404           thumb2_insn_r->reg_rec_count = 3;
12405         }
12406     }
12407   else
12408     {
12409       reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12410       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12411
12412       if (0 == op1 && 0 == op2)
12413         {
12414           /* Handle STREX.  */
12415           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12416           address = u_regval[0] + (offset_imm * 4);
12417           record_buf_mem[0] = 4;
12418           record_buf_mem[1] = address;
12419           thumb2_insn_r->mem_rec_count = 1;
12420           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12421           record_buf[0] = reg_rd;
12422           thumb2_insn_r->reg_rec_count = 1;
12423         }
12424       else if (1 == op1 && 0 == op2)
12425         {
12426           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12427           record_buf[0] = reg_rd;
12428           thumb2_insn_r->reg_rec_count = 1;
12429           address = u_regval[0];
12430           record_buf_mem[1] = address;
12431
12432           if (4 == op3)
12433             {
12434               /* Handle STREXB.  */
12435               record_buf_mem[0] = 1;
12436               thumb2_insn_r->mem_rec_count = 1;
12437             }
12438           else if (5 == op3)
12439             {
12440               /* Handle STREXH.  */
12441               record_buf_mem[0] = 2 ;
12442               thumb2_insn_r->mem_rec_count = 1;
12443             }
12444           else if (7 == op3)
12445             {
12446               /* Handle STREXD.  */
12447               address = u_regval[0];
12448               record_buf_mem[0] = 4;
12449               record_buf_mem[2] = 4;
12450               record_buf_mem[3] = address + 4;
12451               thumb2_insn_r->mem_rec_count = 2;
12452             }
12453         }
12454       else
12455         {
12456           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12457
12458           if (bit (thumb2_insn_r->arm_insn, 24))
12459             {
12460               if (bit (thumb2_insn_r->arm_insn, 23))
12461                 offset_addr = u_regval[0] + (offset_imm * 4);
12462               else
12463                 offset_addr = u_regval[0] - (offset_imm * 4);
12464
12465               address = offset_addr;
12466             }
12467           else
12468             address = u_regval[0];
12469
12470           record_buf_mem[0] = 4;
12471           record_buf_mem[1] = address;
12472           record_buf_mem[2] = 4;
12473           record_buf_mem[3] = address + 4;
12474           thumb2_insn_r->mem_rec_count = 2;
12475           record_buf[0] = reg_rn;
12476           thumb2_insn_r->reg_rec_count = 1;
12477         }
12478     }
12479
12480   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12481             record_buf);
12482   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12483             record_buf_mem);
12484   return ARM_RECORD_SUCCESS;
12485 }
12486
12487 /* Handler for thumb2 data processing (shift register and modified immediate)
12488    instructions.  */
12489
12490 static int
12491 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12492 {
12493   uint32_t reg_rd, op;
12494   uint32_t record_buf[8];
12495
12496   op = bits (thumb2_insn_r->arm_insn, 21, 24);
12497   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12498
12499   if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12500     {
12501       record_buf[0] = ARM_PS_REGNUM;
12502       thumb2_insn_r->reg_rec_count = 1;
12503     }
12504   else
12505     {
12506       record_buf[0] = reg_rd;
12507       record_buf[1] = ARM_PS_REGNUM;
12508       thumb2_insn_r->reg_rec_count = 2;
12509     }
12510
12511   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12512             record_buf);
12513   return ARM_RECORD_SUCCESS;
12514 }
12515
12516 /* Generic handler for thumb2 instructions which effect destination and PS
12517    registers.  */
12518
12519 static int
12520 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12521 {
12522   uint32_t reg_rd;
12523   uint32_t record_buf[8];
12524
12525   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12526
12527   record_buf[0] = reg_rd;
12528   record_buf[1] = ARM_PS_REGNUM;
12529   thumb2_insn_r->reg_rec_count = 2;
12530
12531   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12532             record_buf);
12533   return ARM_RECORD_SUCCESS;
12534 }
12535
12536 /* Handler for thumb2 branch and miscellaneous control instructions.  */
12537
12538 static int
12539 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12540 {
12541   uint32_t op, op1, op2;
12542   uint32_t record_buf[8];
12543
12544   op = bits (thumb2_insn_r->arm_insn, 20, 26);
12545   op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12546   op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12547
12548   /* Handle MSR insn.  */
12549   if (!(op1 & 0x2) && 0x38 == op)
12550     {
12551       if (!(op2 & 0x3))
12552         {
12553           /* CPSR is going to be changed.  */
12554           record_buf[0] = ARM_PS_REGNUM;
12555           thumb2_insn_r->reg_rec_count = 1;
12556         }
12557       else
12558         {
12559           arm_record_unsupported_insn(thumb2_insn_r);
12560           return -1;
12561         }
12562     }
12563   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12564     {
12565       /* BLX.  */
12566       record_buf[0] = ARM_PS_REGNUM;
12567       record_buf[1] = ARM_LR_REGNUM;
12568       thumb2_insn_r->reg_rec_count = 2;
12569     }
12570
12571   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12572             record_buf);
12573   return ARM_RECORD_SUCCESS;
12574 }
12575
12576 /* Handler for thumb2 store single data item instructions.  */
12577
12578 static int
12579 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12580 {
12581   struct regcache *reg_cache = thumb2_insn_r->regcache;
12582
12583   uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12584   uint32_t address, offset_addr;
12585   uint32_t record_buf[8], record_buf_mem[8];
12586   uint32_t op1, op2;
12587
12588   ULONGEST u_regval[2];
12589
12590   op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12591   op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12592   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12593   regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12594
12595   if (bit (thumb2_insn_r->arm_insn, 23))
12596     {
12597       /* T2 encoding.  */
12598       offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12599       offset_addr = u_regval[0] + offset_imm;
12600       address = offset_addr;
12601     }
12602   else
12603     {
12604       /* T3 encoding.  */
12605       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12606         {
12607           /* Handle STRB (register).  */
12608           reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12609           regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12610           shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12611           offset_addr = u_regval[1] << shift_imm;
12612           address = u_regval[0] + offset_addr;
12613         }
12614       else
12615         {
12616           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12617           if (bit (thumb2_insn_r->arm_insn, 10))
12618             {
12619               if (bit (thumb2_insn_r->arm_insn, 9))
12620                 offset_addr = u_regval[0] + offset_imm;
12621               else
12622                 offset_addr = u_regval[0] - offset_imm;
12623
12624               address = offset_addr;
12625             }
12626           else
12627             address = u_regval[0];
12628         }
12629     }
12630
12631   switch (op1)
12632     {
12633       /* Store byte instructions.  */
12634       case 4:
12635       case 0:
12636         record_buf_mem[0] = 1;
12637         break;
12638       /* Store half word instructions.  */
12639       case 1:
12640       case 5:
12641         record_buf_mem[0] = 2;
12642         break;
12643       /* Store word instructions.  */
12644       case 2:
12645       case 6:
12646         record_buf_mem[0] = 4;
12647         break;
12648
12649       default:
12650         gdb_assert_not_reached ("no decoding pattern found");
12651         break;
12652     }
12653
12654   record_buf_mem[1] = address;
12655   thumb2_insn_r->mem_rec_count = 1;
12656   record_buf[0] = reg_rn;
12657   thumb2_insn_r->reg_rec_count = 1;
12658
12659   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12660             record_buf);
12661   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12662             record_buf_mem);
12663   return ARM_RECORD_SUCCESS;
12664 }
12665
12666 /* Handler for thumb2 load memory hints instructions.  */
12667
12668 static int
12669 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12670 {
12671   uint32_t record_buf[8];
12672   uint32_t reg_rt, reg_rn;
12673
12674   reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12675   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12676
12677   if (ARM_PC_REGNUM != reg_rt)
12678     {
12679       record_buf[0] = reg_rt;
12680       record_buf[1] = reg_rn;
12681       record_buf[2] = ARM_PS_REGNUM;
12682       thumb2_insn_r->reg_rec_count = 3;
12683
12684       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12685                 record_buf);
12686       return ARM_RECORD_SUCCESS;
12687     }
12688
12689   return ARM_RECORD_FAILURE;
12690 }
12691
12692 /* Handler for thumb2 load word instructions.  */
12693
12694 static int
12695 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12696 {
12697   uint32_t record_buf[8];
12698
12699   record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12700   record_buf[1] = ARM_PS_REGNUM;
12701   thumb2_insn_r->reg_rec_count = 2;
12702
12703   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12704             record_buf);
12705   return ARM_RECORD_SUCCESS;
12706 }
12707
12708 /* Handler for thumb2 long multiply, long multiply accumulate, and
12709    divide instructions.  */
12710
12711 static int
12712 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12713 {
12714   uint32_t opcode1 = 0, opcode2 = 0;
12715   uint32_t record_buf[8];
12716
12717   opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12718   opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12719
12720   if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12721     {
12722       /* Handle SMULL, UMULL, SMULAL.  */
12723       /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
12724       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12725       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12726       record_buf[2] = ARM_PS_REGNUM;
12727       thumb2_insn_r->reg_rec_count = 3;
12728     }
12729   else if (1 == opcode1 || 3 == opcode2)
12730     {
12731       /* Handle SDIV and UDIV.  */
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
12738     return ARM_RECORD_FAILURE;
12739
12740   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12741             record_buf);
12742   return ARM_RECORD_SUCCESS;
12743 }
12744
12745 /* Record handler for thumb32 coprocessor instructions.  */
12746
12747 static int
12748 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12749 {
12750   if (bit (thumb2_insn_r->arm_insn, 25))
12751     return arm_record_coproc_data_proc (thumb2_insn_r);
12752   else
12753     return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12754 }
12755
12756 /* Record handler for advance SIMD structure load/store instructions.  */
12757
12758 static int
12759 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12760 {
12761   struct regcache *reg_cache = thumb2_insn_r->regcache;
12762   uint32_t l_bit, a_bit, b_bits;
12763   uint32_t record_buf[128], record_buf_mem[128];
12764   uint32_t reg_rn, reg_vd, address, f_elem;
12765   uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12766   uint8_t f_ebytes;
12767
12768   l_bit = bit (thumb2_insn_r->arm_insn, 21);
12769   a_bit = bit (thumb2_insn_r->arm_insn, 23);
12770   b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12771   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12772   reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12773   reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12774   f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12775   f_elem = 8 / f_ebytes;
12776
12777   if (!l_bit)
12778     {
12779       ULONGEST u_regval = 0;
12780       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12781       address = u_regval;
12782
12783       if (!a_bit)
12784         {
12785           /* Handle VST1.  */
12786           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12787             {
12788               if (b_bits == 0x07)
12789                 bf_regs = 1;
12790               else if (b_bits == 0x0a)
12791                 bf_regs = 2;
12792               else if (b_bits == 0x06)
12793                 bf_regs = 3;
12794               else if (b_bits == 0x02)
12795                 bf_regs = 4;
12796               else
12797                 bf_regs = 0;
12798
12799               for (index_r = 0; index_r < bf_regs; index_r++)
12800                 {
12801                   for (index_e = 0; index_e < f_elem; index_e++)
12802                     {
12803                       record_buf_mem[index_m++] = f_ebytes;
12804                       record_buf_mem[index_m++] = address;
12805                       address = address + f_ebytes;
12806                       thumb2_insn_r->mem_rec_count += 1;
12807                     }
12808                 }
12809             }
12810           /* Handle VST2.  */
12811           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12812             {
12813               if (b_bits == 0x09 || b_bits == 0x08)
12814                 bf_regs = 1;
12815               else if (b_bits == 0x03)
12816                 bf_regs = 2;
12817               else
12818                 bf_regs = 0;
12819
12820               for (index_r = 0; index_r < bf_regs; index_r++)
12821                 for (index_e = 0; index_e < f_elem; index_e++)
12822                   {
12823                     for (loop_t = 0; loop_t < 2; loop_t++)
12824                       {
12825                         record_buf_mem[index_m++] = f_ebytes;
12826                         record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12827                         thumb2_insn_r->mem_rec_count += 1;
12828                       }
12829                     address = address + (2 * f_ebytes);
12830                   }
12831             }
12832           /* Handle VST3.  */
12833           else if ((b_bits & 0x0e) == 0x04)
12834             {
12835               for (index_e = 0; index_e < f_elem; index_e++)
12836                 {
12837                   for (loop_t = 0; loop_t < 3; loop_t++)
12838                     {
12839                       record_buf_mem[index_m++] = f_ebytes;
12840                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12841                       thumb2_insn_r->mem_rec_count += 1;
12842                     }
12843                   address = address + (3 * f_ebytes);
12844                 }
12845             }
12846           /* Handle VST4.  */
12847           else if (!(b_bits & 0x0e))
12848             {
12849               for (index_e = 0; index_e < f_elem; index_e++)
12850                 {
12851                   for (loop_t = 0; loop_t < 4; loop_t++)
12852                     {
12853                       record_buf_mem[index_m++] = f_ebytes;
12854                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12855                       thumb2_insn_r->mem_rec_count += 1;
12856                     }
12857                   address = address + (4 * f_ebytes);
12858                 }
12859             }
12860         }
12861       else
12862         {
12863           uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12864
12865           if (bft_size == 0x00)
12866             f_ebytes = 1;
12867           else if (bft_size == 0x01)
12868             f_ebytes = 2;
12869           else if (bft_size == 0x02)
12870             f_ebytes = 4;
12871           else
12872             f_ebytes = 0;
12873
12874           /* Handle VST1.  */
12875           if (!(b_bits & 0x0b) || b_bits == 0x08)
12876             thumb2_insn_r->mem_rec_count = 1;
12877           /* Handle VST2.  */
12878           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12879             thumb2_insn_r->mem_rec_count = 2;
12880           /* Handle VST3.  */
12881           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12882             thumb2_insn_r->mem_rec_count = 3;
12883           /* Handle VST4.  */
12884           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12885             thumb2_insn_r->mem_rec_count = 4;
12886
12887           for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12888             {
12889               record_buf_mem[index_m] = f_ebytes;
12890               record_buf_mem[index_m] = address + (index_m * f_ebytes);
12891             }
12892         }
12893     }
12894   else
12895     {
12896       if (!a_bit)
12897         {
12898           /* Handle VLD1.  */
12899           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12900             thumb2_insn_r->reg_rec_count = 1;
12901           /* Handle VLD2.  */
12902           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12903             thumb2_insn_r->reg_rec_count = 2;
12904           /* Handle VLD3.  */
12905           else if ((b_bits & 0x0e) == 0x04)
12906             thumb2_insn_r->reg_rec_count = 3;
12907           /* Handle VLD4.  */
12908           else if (!(b_bits & 0x0e))
12909             thumb2_insn_r->reg_rec_count = 4;
12910         }
12911       else
12912         {
12913           /* Handle VLD1.  */
12914           if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12915             thumb2_insn_r->reg_rec_count = 1;
12916           /* Handle VLD2.  */
12917           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12918             thumb2_insn_r->reg_rec_count = 2;
12919           /* Handle VLD3.  */
12920           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12921             thumb2_insn_r->reg_rec_count = 3;
12922           /* Handle VLD4.  */
12923           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12924             thumb2_insn_r->reg_rec_count = 4;
12925
12926           for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12927             record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12928         }
12929     }
12930
12931   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12932     {
12933       record_buf[index_r] = reg_rn;
12934       thumb2_insn_r->reg_rec_count += 1;
12935     }
12936
12937   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12938             record_buf);
12939   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12940             record_buf_mem);
12941   return 0;
12942 }
12943
12944 /* Decodes thumb2 instruction type and invokes its record handler.  */
12945
12946 static unsigned int
12947 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12948 {
12949   uint32_t op, op1, op2;
12950
12951   op = bit (thumb2_insn_r->arm_insn, 15);
12952   op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12953   op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12954
12955   if (op1 == 0x01)
12956     {
12957       if (!(op2 & 0x64 ))
12958         {
12959           /* Load/store multiple instruction.  */
12960           return thumb2_record_ld_st_multiple (thumb2_insn_r);
12961         }
12962       else if ((op2 & 0x64) == 0x4)
12963         {
12964           /* Load/store (dual/exclusive) and table branch instruction.  */
12965           return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12966         }
12967       else if ((op2 & 0x60) == 0x20)
12968         {
12969           /* Data-processing (shifted register).  */
12970           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12971         }
12972       else if (op2 & 0x40)
12973         {
12974           /* Co-processor instructions.  */
12975           return thumb2_record_coproc_insn (thumb2_insn_r);
12976         }
12977     }
12978   else if (op1 == 0x02)
12979     {
12980       if (op)
12981         {
12982           /* Branches and miscellaneous control instructions.  */
12983           return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12984         }
12985       else if (op2 & 0x20)
12986         {
12987           /* Data-processing (plain binary immediate) instruction.  */
12988           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12989         }
12990       else
12991         {
12992           /* Data-processing (modified immediate).  */
12993           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12994         }
12995     }
12996   else if (op1 == 0x03)
12997     {
12998       if (!(op2 & 0x71 ))
12999         {
13000           /* Store single data item.  */
13001           return thumb2_record_str_single_data (thumb2_insn_r);
13002         }
13003       else if (!((op2 & 0x71) ^ 0x10))
13004         {
13005           /* Advanced SIMD or structure load/store instructions.  */
13006           return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
13007         }
13008       else if (!((op2 & 0x67) ^ 0x01))
13009         {
13010           /* Load byte, memory hints instruction.  */
13011           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13012         }
13013       else if (!((op2 & 0x67) ^ 0x03))
13014         {
13015           /* Load halfword, memory hints instruction.  */
13016           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13017         }
13018       else if (!((op2 & 0x67) ^ 0x05))
13019         {
13020           /* Load word instruction.  */
13021           return thumb2_record_ld_word (thumb2_insn_r);
13022         }
13023       else if (!((op2 & 0x70) ^ 0x20))
13024         {
13025           /* Data-processing (register) instruction.  */
13026           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13027         }
13028       else if (!((op2 & 0x78) ^ 0x30))
13029         {
13030           /* Multiply, multiply accumulate, abs diff instruction.  */
13031           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13032         }
13033       else if (!((op2 & 0x78) ^ 0x38))
13034         {
13035           /* Long multiply, long multiply accumulate, and divide.  */
13036           return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13037         }
13038       else if (op2 & 0x40)
13039         {
13040           /* Co-processor instructions.  */
13041           return thumb2_record_coproc_insn (thumb2_insn_r);
13042         }
13043    }
13044
13045   return -1;
13046 }
13047
13048 namespace {
13049 /* Abstract memory reader.  */
13050
13051 class abstract_memory_reader
13052 {
13053 public:
13054   /* Read LEN bytes of target memory at address MEMADDR, placing the
13055      results in GDB's memory at BUF.  Return true on success.  */
13056
13057   virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
13058 };
13059
13060 /* Instruction reader from real target.  */
13061
13062 class instruction_reader : public abstract_memory_reader
13063 {
13064  public:
13065   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13066   {
13067     if (target_read_memory (memaddr, buf, len))
13068       return false;
13069     else
13070       return true;
13071   }
13072 };
13073
13074 } // namespace
13075
13076 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
13077 and positive val on fauilure.  */
13078
13079 static int
13080 extract_arm_insn (abstract_memory_reader& reader,
13081                   insn_decode_record *insn_record, uint32_t insn_size)
13082 {
13083   gdb_byte buf[insn_size];
13084
13085   memset (&buf[0], 0, insn_size);
13086   
13087   if (!reader.read (insn_record->this_addr, buf, insn_size))
13088     return 1;
13089   insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13090                            insn_size, 
13091                            gdbarch_byte_order_for_code (insn_record->gdbarch));
13092   return 0;
13093 }
13094
13095 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13096
13097 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13098    dispatch it.  */
13099
13100 static int
13101 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13102              record_type_t record_type, uint32_t insn_size)
13103 {
13104
13105   /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13106      instruction.  */
13107   static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13108   {
13109     arm_record_data_proc_misc_ld_str,   /* 000.  */
13110     arm_record_data_proc_imm,           /* 001.  */
13111     arm_record_ld_st_imm_offset,        /* 010.  */
13112     arm_record_ld_st_reg_offset,        /* 011.  */
13113     arm_record_ld_st_multiple,          /* 100.  */
13114     arm_record_b_bl,                    /* 101.  */
13115     arm_record_asimd_vfp_coproc,        /* 110.  */
13116     arm_record_coproc_data_proc         /* 111.  */
13117   };
13118
13119   /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13120      instruction.  */
13121   static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13122   { \
13123     thumb_record_shift_add_sub,        /* 000.  */
13124     thumb_record_add_sub_cmp_mov,      /* 001.  */
13125     thumb_record_ld_st_reg_offset,     /* 010.  */
13126     thumb_record_ld_st_imm_offset,     /* 011.  */
13127     thumb_record_ld_st_stack,          /* 100.  */
13128     thumb_record_misc,                 /* 101.  */
13129     thumb_record_ldm_stm_swi,          /* 110.  */
13130     thumb_record_branch                /* 111.  */
13131   };
13132
13133   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
13134   uint32_t insn_id = 0;
13135
13136   if (extract_arm_insn (reader, arm_record, insn_size))
13137     {
13138       if (record_debug)
13139         {
13140           printf_unfiltered (_("Process record: error reading memory at "
13141                                "addr %s len = %d.\n"),
13142                              paddress (arm_record->gdbarch,
13143                                        arm_record->this_addr), insn_size);
13144         }
13145       return -1;
13146     }
13147   else if (ARM_RECORD == record_type)
13148     {
13149       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13150       insn_id = bits (arm_record->arm_insn, 25, 27);
13151
13152       if (arm_record->cond == 0xf)
13153         ret = arm_record_extension_space (arm_record);
13154       else
13155         {
13156           /* If this insn has fallen into extension space
13157              then we need not decode it anymore.  */
13158           ret = arm_handle_insn[insn_id] (arm_record);
13159         }
13160       if (ret != ARM_RECORD_SUCCESS)
13161         {
13162           arm_record_unsupported_insn (arm_record);
13163           ret = -1;
13164         }
13165     }
13166   else if (THUMB_RECORD == record_type)
13167     {
13168       /* As thumb does not have condition codes, we set negative.  */
13169       arm_record->cond = -1;
13170       insn_id = bits (arm_record->arm_insn, 13, 15);
13171       ret = thumb_handle_insn[insn_id] (arm_record);
13172       if (ret != ARM_RECORD_SUCCESS)
13173         {
13174           arm_record_unsupported_insn (arm_record);
13175           ret = -1;
13176         }
13177     }
13178   else if (THUMB2_RECORD == record_type)
13179     {
13180       /* As thumb does not have condition codes, we set negative.  */
13181       arm_record->cond = -1;
13182
13183       /* Swap first half of 32bit thumb instruction with second half.  */
13184       arm_record->arm_insn
13185         = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13186
13187       ret = thumb2_record_decode_insn_handler (arm_record);
13188
13189       if (ret != ARM_RECORD_SUCCESS)
13190         {
13191           arm_record_unsupported_insn (arm_record);
13192           ret = -1;
13193         }
13194     }
13195   else
13196     {
13197       /* Throw assertion.  */
13198       gdb_assert_not_reached ("not a valid instruction, could not decode");
13199     }
13200
13201   return ret;
13202 }
13203
13204 #if GDB_SELF_TEST
13205 namespace selftests {
13206
13207 /* Provide both 16-bit and 32-bit thumb instructions.  */
13208
13209 class instruction_reader_thumb : public abstract_memory_reader
13210 {
13211 public:
13212   template<size_t SIZE>
13213   instruction_reader_thumb (enum bfd_endian endian,
13214                             const uint16_t (&insns)[SIZE])
13215     : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13216   {}
13217
13218   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13219   {
13220     SELF_CHECK (len == 4 || len == 2);
13221     SELF_CHECK (memaddr % 2 == 0);
13222     SELF_CHECK ((memaddr / 2) < m_insns_size);
13223
13224     store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13225     if (len == 4)
13226       {
13227         store_unsigned_integer (&buf[2], 2, m_endian,
13228                                 m_insns[memaddr / 2 + 1]);
13229       }
13230     return true;
13231   }
13232
13233 private:
13234   enum bfd_endian m_endian;
13235   const uint16_t *m_insns;
13236   size_t m_insns_size;
13237 };
13238
13239 static void
13240 arm_record_test (void)
13241 {
13242   struct gdbarch_info info;
13243   gdbarch_info_init (&info);
13244   info.bfd_arch_info = bfd_scan_arch ("arm");
13245
13246   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13247
13248   SELF_CHECK (gdbarch != NULL);
13249
13250   /* 16-bit Thumb instructions.  */
13251   {
13252     insn_decode_record arm_record;
13253
13254     memset (&arm_record, 0, sizeof (insn_decode_record));
13255     arm_record.gdbarch = gdbarch;
13256
13257     static const uint16_t insns[] = {
13258       /* db b2  uxtb    r3, r3 */
13259       0xb2db,
13260       /* cd 58  ldr     r5, [r1, r3] */
13261       0x58cd,
13262     };
13263
13264     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13265     instruction_reader_thumb reader (endian, insns);
13266     int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13267                            THUMB_INSN_SIZE_BYTES);
13268
13269     SELF_CHECK (ret == 0);
13270     SELF_CHECK (arm_record.mem_rec_count == 0);
13271     SELF_CHECK (arm_record.reg_rec_count == 1);
13272     SELF_CHECK (arm_record.arm_regs[0] == 3);
13273
13274     arm_record.this_addr += 2;
13275     ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13276                        THUMB_INSN_SIZE_BYTES);
13277
13278     SELF_CHECK (ret == 0);
13279     SELF_CHECK (arm_record.mem_rec_count == 0);
13280     SELF_CHECK (arm_record.reg_rec_count == 1);
13281     SELF_CHECK (arm_record.arm_regs[0] == 5);
13282   }
13283
13284   /* 32-bit Thumb-2 instructions.  */
13285   {
13286     insn_decode_record arm_record;
13287
13288     memset (&arm_record, 0, sizeof (insn_decode_record));
13289     arm_record.gdbarch = gdbarch;
13290
13291     static const uint16_t insns[] = {
13292       /* 1d ee 70 7f     mrc    15, 0, r7, cr13, cr0, {3} */
13293       0xee1d, 0x7f70,
13294     };
13295
13296     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13297     instruction_reader_thumb reader (endian, insns);
13298     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13299                            THUMB2_INSN_SIZE_BYTES);
13300
13301     SELF_CHECK (ret == 0);
13302     SELF_CHECK (arm_record.mem_rec_count == 0);
13303     SELF_CHECK (arm_record.reg_rec_count == 1);
13304     SELF_CHECK (arm_record.arm_regs[0] == 7);
13305   }
13306 }
13307 } // namespace selftests
13308 #endif /* GDB_SELF_TEST */
13309
13310 /* Cleans up local record registers and memory allocations.  */
13311
13312 static void 
13313 deallocate_reg_mem (insn_decode_record *record)
13314 {
13315   xfree (record->arm_regs);
13316   xfree (record->arm_mems);    
13317 }
13318
13319
13320 /* Parse the current instruction and record the values of the registers and
13321    memory that will be changed in current instruction to record_arch_list".
13322    Return -1 if something is wrong.  */
13323
13324 int
13325 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13326                     CORE_ADDR insn_addr)
13327 {
13328
13329   uint32_t no_of_rec = 0;
13330   uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
13331   ULONGEST t_bit = 0, insn_id = 0;
13332
13333   ULONGEST u_regval = 0;
13334
13335   insn_decode_record arm_record;
13336
13337   memset (&arm_record, 0, sizeof (insn_decode_record));
13338   arm_record.regcache = regcache;
13339   arm_record.this_addr = insn_addr;
13340   arm_record.gdbarch = gdbarch;
13341
13342
13343   if (record_debug > 1)
13344     {
13345       fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13346                           "addr = %s\n",
13347       paddress (gdbarch, arm_record.this_addr));
13348     }
13349
13350   instruction_reader reader;
13351   if (extract_arm_insn (reader, &arm_record, 2))
13352     {
13353       if (record_debug)
13354         {
13355           printf_unfiltered (_("Process record: error reading memory at "
13356                                "addr %s len = %d.\n"),
13357                              paddress (arm_record.gdbarch,
13358                                        arm_record.this_addr), 2);
13359         }
13360       return -1;
13361     }
13362
13363   /* Check the insn, whether it is thumb or arm one.  */
13364
13365   t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13366   regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13367
13368
13369   if (!(u_regval & t_bit))
13370     {
13371       /* We are decoding arm insn.  */
13372       ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13373     }
13374   else
13375     {
13376       insn_id = bits (arm_record.arm_insn, 11, 15);
13377       /* is it thumb2 insn?  */
13378       if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13379         {
13380           ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13381                              THUMB2_INSN_SIZE_BYTES);
13382         }
13383       else
13384         {
13385           /* We are decoding thumb insn.  */
13386           ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13387                              THUMB_INSN_SIZE_BYTES);
13388         }
13389     }
13390
13391   if (0 == ret)
13392     {
13393       /* Record registers.  */
13394       record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13395       if (arm_record.arm_regs)
13396         {
13397           for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13398             {
13399               if (record_full_arch_list_add_reg
13400                   (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13401                 ret = -1;
13402             }
13403         }
13404       /* Record memories.  */
13405       if (arm_record.arm_mems)
13406         {
13407           for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13408             {
13409               if (record_full_arch_list_add_mem
13410                   ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13411                    arm_record.arm_mems[no_of_rec].len))
13412                 ret = -1;
13413             }
13414         }
13415
13416       if (record_full_arch_list_add_end ())
13417         ret = -1;
13418     }
13419
13420
13421   deallocate_reg_mem (&arm_record);
13422
13423   return ret;
13424 }