]> Git Repo - binutils.git/blob - gdb/arm-tdep.c
PR27684, PowerPC missing mfsprg0 and others
[binutils.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2
3    Copyright (C) 1988-2021 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 #include "count-one-bits.h"
49
50 #include "arch/arm.h"
51 #include "arch/arm-get-next-pcs.h"
52 #include "arm-tdep.h"
53 #include "gdb/sim-arm.h"
54
55 #include "elf-bfd.h"
56 #include "coff/internal.h"
57 #include "elf/arm.h"
58
59 #include "record.h"
60 #include "record-full.h"
61 #include <algorithm>
62
63 #include "producer.h"
64
65 #if GDB_SELF_TEST
66 #include "gdbsupport/selftest.h"
67 #endif
68
69 static bool arm_debug;
70
71 /* Print an "arm" debug statement.  */
72
73 #define arm_debug_printf(fmt, ...) \
74   debug_prefixed_printf_cond (arm_debug, "arm", fmt, ##__VA_ARGS__)
75
76 /* Macros for setting and testing a bit in a minimal symbol that marks
77    it as Thumb function.  The MSB of the minimal symbol's "info" field
78    is used for this purpose.
79
80    MSYMBOL_SET_SPECIAL  Actually sets the "special" bit.
81    MSYMBOL_IS_SPECIAL   Tests the "special" bit in a minimal symbol.  */
82
83 #define MSYMBOL_SET_SPECIAL(msym)                               \
84         MSYMBOL_TARGET_FLAG_1 (msym) = 1
85
86 #define MSYMBOL_IS_SPECIAL(msym)                                \
87         MSYMBOL_TARGET_FLAG_1 (msym)
88
89 struct arm_mapping_symbol
90 {
91   CORE_ADDR value;
92   char type;
93
94   bool operator< (const arm_mapping_symbol &other) const
95   { return this->value < other.value; }
96 };
97
98 typedef std::vector<arm_mapping_symbol> arm_mapping_symbol_vec;
99
100 struct arm_per_bfd
101 {
102   explicit arm_per_bfd (size_t num_sections)
103   : section_maps (new arm_mapping_symbol_vec[num_sections]),
104     section_maps_sorted (new bool[num_sections] ())
105   {}
106
107   DISABLE_COPY_AND_ASSIGN (arm_per_bfd);
108
109   /* Information about mapping symbols ($a, $d, $t) in the objfile.
110
111      The format is an array of vectors of arm_mapping_symbols, there is one
112      vector for each section of the objfile (the array is index by BFD section
113      index).
114
115      For each section, the vector of arm_mapping_symbol is sorted by
116      symbol value (address).  */
117   std::unique_ptr<arm_mapping_symbol_vec[]> section_maps;
118
119   /* For each corresponding element of section_maps above, is this vector
120      sorted.  */
121   std::unique_ptr<bool[]> section_maps_sorted;
122 };
123
124 /* Per-bfd data used for mapping symbols.  */
125 static bfd_key<arm_per_bfd> arm_bfd_data_key;
126
127 /* The list of available "set arm ..." and "show arm ..." commands.  */
128 static struct cmd_list_element *setarmcmdlist = NULL;
129 static struct cmd_list_element *showarmcmdlist = NULL;
130
131 /* The type of floating-point to use.  Keep this in sync with enum
132    arm_float_model, and the help string in _initialize_arm_tdep.  */
133 static const char *const fp_model_strings[] =
134 {
135   "auto",
136   "softfpa",
137   "fpa",
138   "softvfp",
139   "vfp",
140   NULL
141 };
142
143 /* A variable that can be configured by the user.  */
144 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
145 static const char *current_fp_model = "auto";
146
147 /* The ABI to use.  Keep this in sync with arm_abi_kind.  */
148 static const char *const arm_abi_strings[] =
149 {
150   "auto",
151   "APCS",
152   "AAPCS",
153   NULL
154 };
155
156 /* A variable that can be configured by the user.  */
157 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
158 static const char *arm_abi_string = "auto";
159
160 /* The execution mode to assume.  */
161 static const char *const arm_mode_strings[] =
162   {
163     "auto",
164     "arm",
165     "thumb",
166     NULL
167   };
168
169 static const char *arm_fallback_mode_string = "auto";
170 static const char *arm_force_mode_string = "auto";
171
172 /* The standard register names, and all the valid aliases for them.  Note
173    that `fp', `sp' and `pc' are not added in this alias list, because they
174    have been added as builtin user registers in
175    std-regs.c:_initialize_frame_reg.  */
176 static const struct
177 {
178   const char *name;
179   int regnum;
180 } arm_register_aliases[] = {
181   /* Basic register numbers.  */
182   { "r0", 0 },
183   { "r1", 1 },
184   { "r2", 2 },
185   { "r3", 3 },
186   { "r4", 4 },
187   { "r5", 5 },
188   { "r6", 6 },
189   { "r7", 7 },
190   { "r8", 8 },
191   { "r9", 9 },
192   { "r10", 10 },
193   { "r11", 11 },
194   { "r12", 12 },
195   { "r13", 13 },
196   { "r14", 14 },
197   { "r15", 15 },
198   /* Synonyms (argument and variable registers).  */
199   { "a1", 0 },
200   { "a2", 1 },
201   { "a3", 2 },
202   { "a4", 3 },
203   { "v1", 4 },
204   { "v2", 5 },
205   { "v3", 6 },
206   { "v4", 7 },
207   { "v5", 8 },
208   { "v6", 9 },
209   { "v7", 10 },
210   { "v8", 11 },
211   /* Other platform-specific names for r9.  */
212   { "sb", 9 },
213   { "tr", 9 },
214   /* Special names.  */
215   { "ip", 12 },
216   { "lr", 14 },
217   /* Names used by GCC (not listed in the ARM EABI).  */
218   { "sl", 10 },
219   /* A special name from the older ATPCS.  */
220   { "wr", 7 },
221 };
222
223 static const char *const arm_register_names[] =
224 {"r0",  "r1",  "r2",  "r3",     /*  0  1  2  3 */
225  "r4",  "r5",  "r6",  "r7",     /*  4  5  6  7 */
226  "r8",  "r9",  "r10", "r11",    /*  8  9 10 11 */
227  "r12", "sp",  "lr",  "pc",     /* 12 13 14 15 */
228  "f0",  "f1",  "f2",  "f3",     /* 16 17 18 19 */
229  "f4",  "f5",  "f6",  "f7",     /* 20 21 22 23 */
230  "fps", "cpsr" };               /* 24 25       */
231
232 /* Holds the current set of options to be passed to the disassembler.  */
233 static char *arm_disassembler_options;
234
235 /* Valid register name styles.  */
236 static const char **valid_disassembly_styles;
237
238 /* Disassembly style to use. Default to "std" register names.  */
239 static const char *disassembly_style;
240
241 /* All possible arm target descriptors.  */
242 static struct target_desc *tdesc_arm_list[ARM_FP_TYPE_INVALID];
243 static struct target_desc *tdesc_arm_mprofile_list[ARM_M_TYPE_INVALID];
244
245 /* This is used to keep the bfd arch_info in sync with the disassembly
246    style.  */
247 static void set_disassembly_style_sfunc (const char *, int,
248                                          struct cmd_list_element *);
249 static void show_disassembly_style_sfunc (struct ui_file *, int,
250                                           struct cmd_list_element *,
251                                           const char *);
252
253 static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch,
254                                                 readable_regcache *regcache,
255                                                 int regnum, gdb_byte *buf);
256 static void arm_neon_quad_write (struct gdbarch *gdbarch,
257                                  struct regcache *regcache,
258                                  int regnum, const gdb_byte *buf);
259
260 static CORE_ADDR
261   arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
262
263
264 /* get_next_pcs operations.  */
265 static struct arm_get_next_pcs_ops arm_get_next_pcs_ops = {
266   arm_get_next_pcs_read_memory_unsigned_integer,
267   arm_get_next_pcs_syscall_next_pc,
268   arm_get_next_pcs_addr_bits_remove,
269   arm_get_next_pcs_is_thumb,
270   NULL,
271 };
272
273 struct arm_prologue_cache
274 {
275   /* The stack pointer at the time this frame was created; i.e. the
276      caller's stack pointer when this function was called.  It is used
277      to identify this frame.  */
278   CORE_ADDR prev_sp;
279
280   /* The frame base for this frame is just prev_sp - frame size.
281      FRAMESIZE is the distance from the frame pointer to the
282      initial stack pointer.  */
283
284   int framesize;
285
286   /* The register used to hold the frame pointer for this frame.  */
287   int framereg;
288
289   /* Saved register offsets.  */
290   trad_frame_saved_reg *saved_regs;
291 };
292
293 namespace {
294
295 /* Abstract class to read ARM instructions from memory.  */
296
297 class arm_instruction_reader
298 {
299 public:
300   /* Read a 4 bytes instruction from memory using the BYTE_ORDER endianness.  */
301   virtual uint32_t read (CORE_ADDR memaddr, bfd_endian byte_order) const = 0;
302 };
303
304 /* Read instructions from target memory.  */
305
306 class target_arm_instruction_reader : public arm_instruction_reader
307 {
308 public:
309   uint32_t read (CORE_ADDR memaddr, bfd_endian byte_order) const override
310   {
311     return read_code_unsigned_integer (memaddr, 4, byte_order);
312   }
313 };
314
315 } /* namespace */
316
317 static CORE_ADDR arm_analyze_prologue
318   (struct gdbarch *gdbarch, CORE_ADDR prologue_start, CORE_ADDR prologue_end,
319    struct arm_prologue_cache *cache, const arm_instruction_reader &insn_reader);
320
321 /* Architecture version for displaced stepping.  This effects the behaviour of
322    certain instructions, and really should not be hard-wired.  */
323
324 #define DISPLACED_STEPPING_ARCH_VERSION         5
325
326 /* See arm-tdep.h.  */
327
328 bool arm_apcs_32 = true;
329
330 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode.  */
331
332 int
333 arm_psr_thumb_bit (struct gdbarch *gdbarch)
334 {
335   if (gdbarch_tdep (gdbarch)->is_m)
336     return XPSR_T;
337   else
338     return CPSR_T;
339 }
340
341 /* Determine if the processor is currently executing in Thumb mode.  */
342
343 int
344 arm_is_thumb (struct regcache *regcache)
345 {
346   ULONGEST cpsr;
347   ULONGEST t_bit = arm_psr_thumb_bit (regcache->arch ());
348
349   cpsr = regcache_raw_get_unsigned (regcache, ARM_PS_REGNUM);
350
351   return (cpsr & t_bit) != 0;
352 }
353
354 /* Determine if FRAME is executing in Thumb mode.  */
355
356 int
357 arm_frame_is_thumb (struct frame_info *frame)
358 {
359   CORE_ADDR cpsr;
360   ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
361
362   /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
363      directly (from a signal frame or dummy frame) or by interpreting
364      the saved LR (from a prologue or DWARF frame).  So consult it and
365      trust the unwinders.  */
366   cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
367
368   return (cpsr & t_bit) != 0;
369 }
370
371 /* Search for the mapping symbol covering MEMADDR.  If one is found,
372    return its type.  Otherwise, return 0.  If START is non-NULL,
373    set *START to the location of the mapping symbol.  */
374
375 static char
376 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
377 {
378   struct obj_section *sec;
379
380   /* If there are mapping symbols, consult them.  */
381   sec = find_pc_section (memaddr);
382   if (sec != NULL)
383     {
384       arm_per_bfd *data = arm_bfd_data_key.get (sec->objfile->obfd);
385       if (data != NULL)
386         {
387           unsigned int section_idx = sec->the_bfd_section->index;
388           arm_mapping_symbol_vec &map
389             = data->section_maps[section_idx];
390
391           /* Sort the vector on first use.  */
392           if (!data->section_maps_sorted[section_idx])
393             {
394               std::sort (map.begin (), map.end ());
395               data->section_maps_sorted[section_idx] = true;
396             }
397
398           struct arm_mapping_symbol map_key
399             = { memaddr - obj_section_addr (sec), 0 };
400           arm_mapping_symbol_vec::const_iterator it
401             = std::lower_bound (map.begin (), map.end (), map_key);
402
403           /* std::lower_bound finds the earliest ordered insertion
404              point.  If the symbol at this position starts at this exact
405              address, we use that; otherwise, the preceding
406              mapping symbol covers this address.  */
407           if (it < map.end ())
408             {
409               if (it->value == map_key.value)
410                 {
411                   if (start)
412                     *start = it->value + obj_section_addr (sec);
413                   return it->type;
414                 }
415             }
416
417           if (it > map.begin ())
418             {
419               arm_mapping_symbol_vec::const_iterator prev_it
420                 = it - 1;
421
422               if (start)
423                 *start = prev_it->value + obj_section_addr (sec);
424               return prev_it->type;
425             }
426         }
427     }
428
429   return 0;
430 }
431
432 /* Determine if the program counter specified in MEMADDR is in a Thumb
433    function.  This function should be called for addresses unrelated to
434    any executing frame; otherwise, prefer arm_frame_is_thumb.  */
435
436 int
437 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
438 {
439   struct bound_minimal_symbol sym;
440   char type;
441   arm_displaced_step_copy_insn_closure *dsc = nullptr;
442
443   if (gdbarch_displaced_step_copy_insn_closure_by_addr_p (gdbarch))
444     dsc = ((arm_displaced_step_copy_insn_closure * )
445            gdbarch_displaced_step_copy_insn_closure_by_addr
446              (gdbarch, current_inferior (), memaddr));
447
448   /* If checking the mode of displaced instruction in copy area, the mode
449      should be determined by instruction on the original address.  */
450   if (dsc)
451     {
452       displaced_debug_printf ("check mode of %.8lx instead of %.8lx",
453                               (unsigned long) dsc->insn_addr,
454                               (unsigned long) memaddr);
455       memaddr = dsc->insn_addr;
456     }
457
458   /* If bit 0 of the address is set, assume this is a Thumb address.  */
459   if (IS_THUMB_ADDR (memaddr))
460     return 1;
461
462   /* If the user wants to override the symbol table, let him.  */
463   if (strcmp (arm_force_mode_string, "arm") == 0)
464     return 0;
465   if (strcmp (arm_force_mode_string, "thumb") == 0)
466     return 1;
467
468   /* ARM v6-M and v7-M are always in Thumb mode.  */
469   if (gdbarch_tdep (gdbarch)->is_m)
470     return 1;
471
472   /* If there are mapping symbols, consult them.  */
473   type = arm_find_mapping_symbol (memaddr, NULL);
474   if (type)
475     return type == 't';
476
477   /* Thumb functions have a "special" bit set in minimal symbols.  */
478   sym = lookup_minimal_symbol_by_pc (memaddr);
479   if (sym.minsym)
480     return (MSYMBOL_IS_SPECIAL (sym.minsym));
481
482   /* If the user wants to override the fallback mode, let them.  */
483   if (strcmp (arm_fallback_mode_string, "arm") == 0)
484     return 0;
485   if (strcmp (arm_fallback_mode_string, "thumb") == 0)
486     return 1;
487
488   /* If we couldn't find any symbol, but we're talking to a running
489      target, then trust the current value of $cpsr.  This lets
490      "display/i $pc" always show the correct mode (though if there is
491      a symbol table we will not reach here, so it still may not be
492      displayed in the mode it will be executed).  */
493   if (target_has_registers ())
494     return arm_frame_is_thumb (get_current_frame ());
495
496   /* Otherwise we're out of luck; we assume ARM.  */
497   return 0;
498 }
499
500 /* Determine if the address specified equals any of these magic return
501    values, called EXC_RETURN, defined by the ARM v6-M, v7-M and v8-M
502    architectures.
503
504    From ARMv6-M Reference Manual B1.5.8
505    Table B1-5 Exception return behavior
506
507    EXC_RETURN    Return To        Return Stack
508    0xFFFFFFF1    Handler mode     Main
509    0xFFFFFFF9    Thread mode      Main
510    0xFFFFFFFD    Thread mode      Process
511
512    From ARMv7-M Reference Manual B1.5.8
513    Table B1-8 EXC_RETURN definition of exception return behavior, no FP
514
515    EXC_RETURN    Return To        Return Stack
516    0xFFFFFFF1    Handler mode     Main
517    0xFFFFFFF9    Thread mode      Main
518    0xFFFFFFFD    Thread mode      Process
519
520    Table B1-9 EXC_RETURN definition of exception return behavior, with
521    FP
522
523    EXC_RETURN    Return To        Return Stack    Frame Type
524    0xFFFFFFE1    Handler mode     Main            Extended
525    0xFFFFFFE9    Thread mode      Main            Extended
526    0xFFFFFFED    Thread mode      Process         Extended
527    0xFFFFFFF1    Handler mode     Main            Basic
528    0xFFFFFFF9    Thread mode      Main            Basic
529    0xFFFFFFFD    Thread mode      Process         Basic
530
531    For more details see "B1.5.8 Exception return behavior"
532    in both ARMv6-M and ARMv7-M Architecture Reference Manuals.
533
534    In the ARMv8-M Architecture Technical Reference also adds
535    for implementations without the Security Extension:
536
537    EXC_RETURN    Condition
538    0xFFFFFFB0    Return to Handler mode.
539    0xFFFFFFB8    Return to Thread mode using the main stack.
540    0xFFFFFFBC    Return to Thread mode using the process stack.  */
541
542 static int
543 arm_m_addr_is_magic (CORE_ADDR addr)
544 {
545   switch (addr)
546     {
547       /* Values from ARMv8-M Architecture Technical Reference.  */
548       case 0xffffffb0:
549       case 0xffffffb8:
550       case 0xffffffbc:
551       /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
552          the exception return behavior.  */
553       case 0xffffffe1:
554       case 0xffffffe9:
555       case 0xffffffed:
556       case 0xfffffff1:
557       case 0xfffffff9:
558       case 0xfffffffd:
559         /* Address is magic.  */
560         return 1;
561
562       default:
563         /* Address is not magic.  */
564         return 0;
565     }
566 }
567
568 /* Remove useless bits from addresses in a running program.  */
569 static CORE_ADDR
570 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
571 {
572   /* On M-profile devices, do not strip the low bit from EXC_RETURN
573      (the magic exception return address).  */
574   if (gdbarch_tdep (gdbarch)->is_m
575       && arm_m_addr_is_magic (val))
576     return val;
577
578   if (arm_apcs_32)
579     return UNMAKE_THUMB_ADDR (val);
580   else
581     return (val & 0x03fffffc);
582 }
583
584 /* Return 1 if PC is the start of a compiler helper function which
585    can be safely ignored during prologue skipping.  IS_THUMB is true
586    if the function is known to be a Thumb function due to the way it
587    is being called.  */
588 static int
589 skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
590 {
591   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
592   struct bound_minimal_symbol msym;
593
594   msym = lookup_minimal_symbol_by_pc (pc);
595   if (msym.minsym != NULL
596       && BMSYMBOL_VALUE_ADDRESS (msym) == pc
597       && msym.minsym->linkage_name () != NULL)
598     {
599       const char *name = msym.minsym->linkage_name ();
600
601       /* The GNU linker's Thumb call stub to foo is named
602          __foo_from_thumb.  */
603       if (strstr (name, "_from_thumb") != NULL)
604         name += 2;
605
606       /* On soft-float targets, __truncdfsf2 is called to convert promoted
607          arguments to their argument types in non-prototyped
608          functions.  */
609       if (startswith (name, "__truncdfsf2"))
610         return 1;
611       if (startswith (name, "__aeabi_d2f"))
612         return 1;
613
614       /* Internal functions related to thread-local storage.  */
615       if (startswith (name, "__tls_get_addr"))
616         return 1;
617       if (startswith (name, "__aeabi_read_tp"))
618         return 1;
619     }
620   else
621     {
622       /* If we run against a stripped glibc, we may be unable to identify
623          special functions by name.  Check for one important case,
624          __aeabi_read_tp, by comparing the *code* against the default
625          implementation (this is hand-written ARM assembler in glibc).  */
626
627       if (!is_thumb
628           && read_code_unsigned_integer (pc, 4, byte_order_for_code)
629              == 0xe3e00a0f /* mov r0, #0xffff0fff */
630           && read_code_unsigned_integer (pc + 4, 4, byte_order_for_code)
631              == 0xe240f01f) /* sub pc, r0, #31 */
632         return 1;
633     }
634
635   return 0;
636 }
637
638 /* Extract the immediate from instruction movw/movt of encoding T.  INSN1 is
639    the first 16-bit of instruction, and INSN2 is the second 16-bit of
640    instruction.  */
641 #define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2) \
642   ((bits ((insn1), 0, 3) << 12)               \
643    | (bits ((insn1), 10, 10) << 11)           \
644    | (bits ((insn2), 12, 14) << 8)            \
645    | bits ((insn2), 0, 7))
646
647 /* Extract the immediate from instruction movw/movt of encoding A.  INSN is
648    the 32-bit instruction.  */
649 #define EXTRACT_MOVW_MOVT_IMM_A(insn) \
650   ((bits ((insn), 16, 19) << 12) \
651    | bits ((insn), 0, 11))
652
653 /* Decode immediate value; implements ThumbExpandImmediate pseudo-op.  */
654
655 static unsigned int
656 thumb_expand_immediate (unsigned int imm)
657 {
658   unsigned int count = imm >> 7;
659
660   if (count < 8)
661     switch (count / 2)
662       {
663       case 0:
664         return imm & 0xff;
665       case 1:
666         return (imm & 0xff) | ((imm & 0xff) << 16);
667       case 2:
668         return ((imm & 0xff) << 8) | ((imm & 0xff) << 24);
669       case 3:
670         return (imm & 0xff) | ((imm & 0xff) << 8)
671                 | ((imm & 0xff) << 16) | ((imm & 0xff) << 24);
672       }
673
674   return (0x80 | (imm & 0x7f)) << (32 - count);
675 }
676
677 /* Return 1 if the 16-bit Thumb instruction INSN restores SP in
678    epilogue, 0 otherwise.  */
679
680 static int
681 thumb_instruction_restores_sp (unsigned short insn)
682 {
683   return (insn == 0x46bd  /* mov sp, r7 */
684           || (insn & 0xff80) == 0xb000  /* add sp, imm */
685           || (insn & 0xfe00) == 0xbc00);  /* pop <registers> */
686 }
687
688 /* Analyze a Thumb prologue, looking for a recognizable stack frame
689    and frame pointer.  Scan until we encounter a store that could
690    clobber the stack frame unexpectedly, or an unknown instruction.
691    Return the last address which is definitely safe to skip for an
692    initial breakpoint.  */
693
694 static CORE_ADDR
695 thumb_analyze_prologue (struct gdbarch *gdbarch,
696                         CORE_ADDR start, CORE_ADDR limit,
697                         struct arm_prologue_cache *cache)
698 {
699   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
700   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
701   int i;
702   pv_t regs[16];
703   CORE_ADDR offset;
704   CORE_ADDR unrecognized_pc = 0;
705
706   for (i = 0; i < 16; i++)
707     regs[i] = pv_register (i, 0);
708   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
709
710   while (start < limit)
711     {
712       unsigned short insn;
713
714       insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
715
716       if ((insn & 0xfe00) == 0xb400)            /* push { rlist } */
717         {
718           int regno;
719           int mask;
720
721           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
722             break;
723
724           /* Bits 0-7 contain a mask for registers R0-R7.  Bit 8 says
725              whether to save LR (R14).  */
726           mask = (insn & 0xff) | ((insn & 0x100) << 6);
727
728           /* Calculate offsets of saved R0-R7 and LR.  */
729           for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
730             if (mask & (1 << regno))
731               {
732                 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
733                                                        -4);
734                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
735               }
736         }
737       else if ((insn & 0xff80) == 0xb080)       /* sub sp, #imm */
738         {
739           offset = (insn & 0x7f) << 2;          /* get scaled offset */
740           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
741                                                  -offset);
742         }
743       else if (thumb_instruction_restores_sp (insn))
744         {
745           /* Don't scan past the epilogue.  */
746           break;
747         }
748       else if ((insn & 0xf800) == 0xa800)       /* add Rd, sp, #imm */
749         regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
750                                                     (insn & 0xff) << 2);
751       else if ((insn & 0xfe00) == 0x1c00        /* add Rd, Rn, #imm */
752                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
753         regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
754                                                    bits (insn, 6, 8));
755       else if ((insn & 0xf800) == 0x3000        /* add Rd, #imm */
756                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
757         regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
758                                                     bits (insn, 0, 7));
759       else if ((insn & 0xfe00) == 0x1800        /* add Rd, Rn, Rm */
760                && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
761                && pv_is_constant (regs[bits (insn, 3, 5)]))
762         regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
763                                           regs[bits (insn, 6, 8)]);
764       else if ((insn & 0xff00) == 0x4400        /* add Rd, Rm */
765                && pv_is_constant (regs[bits (insn, 3, 6)]))
766         {
767           int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
768           int rm = bits (insn, 3, 6);
769           regs[rd] = pv_add (regs[rd], regs[rm]);
770         }
771       else if ((insn & 0xff00) == 0x4600)       /* mov hi, lo or mov lo, hi */
772         {
773           int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
774           int src_reg = (insn & 0x78) >> 3;
775           regs[dst_reg] = regs[src_reg];
776         }
777       else if ((insn & 0xf800) == 0x9000)       /* str rd, [sp, #off] */
778         {
779           /* Handle stores to the stack.  Normally pushes are used,
780              but with GCC -mtpcs-frame, there may be other stores
781              in the prologue to create the frame.  */
782           int regno = (insn >> 8) & 0x7;
783           pv_t addr;
784
785           offset = (insn & 0xff) << 2;
786           addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
787
788           if (stack.store_would_trash (addr))
789             break;
790
791           stack.store (addr, 4, regs[regno]);
792         }
793       else if ((insn & 0xf800) == 0x6000)       /* str rd, [rn, #off] */
794         {
795           int rd = bits (insn, 0, 2);
796           int rn = bits (insn, 3, 5);
797           pv_t addr;
798
799           offset = bits (insn, 6, 10) << 2;
800           addr = pv_add_constant (regs[rn], offset);
801
802           if (stack.store_would_trash (addr))
803             break;
804
805           stack.store (addr, 4, regs[rd]);
806         }
807       else if (((insn & 0xf800) == 0x7000       /* strb Rd, [Rn, #off] */
808                 || (insn & 0xf800) == 0x8000)   /* strh Rd, [Rn, #off] */
809                && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
810         /* Ignore stores of argument registers to the stack.  */
811         ;
812       else if ((insn & 0xf800) == 0xc800        /* ldmia Rn!, { registers } */
813                && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
814         /* Ignore block loads from the stack, potentially copying
815            parameters from memory.  */
816         ;
817       else if ((insn & 0xf800) == 0x9800        /* ldr Rd, [Rn, #immed] */
818                || ((insn & 0xf800) == 0x6800    /* ldr Rd, [sp, #immed] */
819                    && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
820         /* Similarly ignore single loads from the stack.  */
821         ;
822       else if ((insn & 0xffc0) == 0x0000        /* lsls Rd, Rm, #0 */
823                || (insn & 0xffc0) == 0x1c00)    /* add Rd, Rn, #0 */
824         /* Skip register copies, i.e. saves to another register
825            instead of the stack.  */
826         ;
827       else if ((insn & 0xf800) == 0x2000)       /* movs Rd, #imm */
828         /* Recognize constant loads; even with small stacks these are necessary
829            on Thumb.  */
830         regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
831       else if ((insn & 0xf800) == 0x4800)       /* ldr Rd, [pc, #imm] */
832         {
833           /* Constant pool loads, for the same reason.  */
834           unsigned int constant;
835           CORE_ADDR loc;
836
837           loc = start + 4 + bits (insn, 0, 7) * 4;
838           constant = read_memory_unsigned_integer (loc, 4, byte_order);
839           regs[bits (insn, 8, 10)] = pv_constant (constant);
840         }
841       else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instructions.  */
842         {
843           unsigned short inst2;
844
845           inst2 = read_code_unsigned_integer (start + 2, 2,
846                                               byte_order_for_code);
847
848           if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
849             {
850               /* BL, BLX.  Allow some special function calls when
851                  skipping the prologue; GCC generates these before
852                  storing arguments to the stack.  */
853               CORE_ADDR nextpc;
854               int j1, j2, imm1, imm2;
855
856               imm1 = sbits (insn, 0, 10);
857               imm2 = bits (inst2, 0, 10);
858               j1 = bit (inst2, 13);
859               j2 = bit (inst2, 11);
860
861               offset = ((imm1 << 12) + (imm2 << 1));
862               offset ^= ((!j2) << 22) | ((!j1) << 23);
863
864               nextpc = start + 4 + offset;
865               /* For BLX make sure to clear the low bits.  */
866               if (bit (inst2, 12) == 0)
867                 nextpc = nextpc & 0xfffffffc;
868
869               if (!skip_prologue_function (gdbarch, nextpc,
870                                            bit (inst2, 12) != 0))
871                 break;
872             }
873
874           else if ((insn & 0xffd0) == 0xe900    /* stmdb Rn{!},
875                                                    { registers } */
876                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
877             {
878               pv_t addr = regs[bits (insn, 0, 3)];
879               int regno;
880
881               if (stack.store_would_trash (addr))
882                 break;
883
884               /* Calculate offsets of saved registers.  */
885               for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
886                 if (inst2 & (1 << regno))
887                   {
888                     addr = pv_add_constant (addr, -4);
889                     stack.store (addr, 4, regs[regno]);
890                   }
891
892               if (insn & 0x0020)
893                 regs[bits (insn, 0, 3)] = addr;
894             }
895
896           else if ((insn & 0xff50) == 0xe940    /* strd Rt, Rt2,
897                                                    [Rn, #+/-imm]{!} */
898                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
899             {
900               int regno1 = bits (inst2, 12, 15);
901               int regno2 = bits (inst2, 8, 11);
902               pv_t addr = regs[bits (insn, 0, 3)];
903
904               offset = inst2 & 0xff;
905               if (insn & 0x0080)
906                 addr = pv_add_constant (addr, offset);
907               else
908                 addr = pv_add_constant (addr, -offset);
909
910               if (stack.store_would_trash (addr))
911                 break;
912
913               stack.store (addr, 4, regs[regno1]);
914               stack.store (pv_add_constant (addr, 4),
915                            4, regs[regno2]);
916
917               if (insn & 0x0020)
918                 regs[bits (insn, 0, 3)] = addr;
919             }
920
921           else if ((insn & 0xfff0) == 0xf8c0    /* str Rt,[Rn,+/-#imm]{!} */
922                    && (inst2 & 0x0c00) == 0x0c00
923                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
924             {
925               int regno = bits (inst2, 12, 15);
926               pv_t addr = regs[bits (insn, 0, 3)];
927
928               offset = inst2 & 0xff;
929               if (inst2 & 0x0200)
930                 addr = pv_add_constant (addr, offset);
931               else
932                 addr = pv_add_constant (addr, -offset);
933
934               if (stack.store_would_trash (addr))
935                 break;
936
937               stack.store (addr, 4, regs[regno]);
938
939               if (inst2 & 0x0100)
940                 regs[bits (insn, 0, 3)] = addr;
941             }
942
943           else if ((insn & 0xfff0) == 0xf8c0    /* str.w Rt,[Rn,#imm] */
944                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
945             {
946               int regno = bits (inst2, 12, 15);
947               pv_t addr;
948
949               offset = inst2 & 0xfff;
950               addr = pv_add_constant (regs[bits (insn, 0, 3)], offset);
951
952               if (stack.store_would_trash (addr))
953                 break;
954
955               stack.store (addr, 4, regs[regno]);
956             }
957
958           else if ((insn & 0xffd0) == 0xf880    /* str{bh}.w Rt,[Rn,#imm] */
959                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
960             /* Ignore stores of argument registers to the stack.  */
961             ;
962
963           else if ((insn & 0xffd0) == 0xf800    /* str{bh} Rt,[Rn,#+/-imm] */
964                    && (inst2 & 0x0d00) == 0x0c00
965                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
966             /* Ignore stores of argument registers to the stack.  */
967             ;
968
969           else if ((insn & 0xffd0) == 0xe890    /* ldmia Rn[!],
970                                                    { registers } */
971                    && (inst2 & 0x8000) == 0x0000
972                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
973             /* Ignore block loads from the stack, potentially copying
974                parameters from memory.  */
975             ;
976
977           else if ((insn & 0xff70) == 0xe950    /* ldrd Rt, Rt2,
978                                                    [Rn, #+/-imm] */
979                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
980             /* Similarly ignore dual loads from the stack.  */
981             ;
982
983           else if ((insn & 0xfff0) == 0xf850    /* ldr Rt,[Rn,#+/-imm] */
984                    && (inst2 & 0x0d00) == 0x0c00
985                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
986             /* Similarly ignore single loads from the stack.  */
987             ;
988
989           else if ((insn & 0xfff0) == 0xf8d0    /* ldr.w Rt,[Rn,#imm] */
990                    && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
991             /* Similarly ignore single loads from the stack.  */
992             ;
993
994           else if ((insn & 0xfbf0) == 0xf100    /* add.w Rd, Rn, #imm */
995                    && (inst2 & 0x8000) == 0x0000)
996             {
997               unsigned int imm = ((bits (insn, 10, 10) << 11)
998                                   | (bits (inst2, 12, 14) << 8)
999                                   | bits (inst2, 0, 7));
1000
1001               regs[bits (inst2, 8, 11)]
1002                 = pv_add_constant (regs[bits (insn, 0, 3)],
1003                                    thumb_expand_immediate (imm));
1004             }
1005
1006           else if ((insn & 0xfbf0) == 0xf200    /* addw Rd, Rn, #imm */
1007                    && (inst2 & 0x8000) == 0x0000)
1008             {
1009               unsigned int imm = ((bits (insn, 10, 10) << 11)
1010                                   | (bits (inst2, 12, 14) << 8)
1011                                   | bits (inst2, 0, 7));
1012
1013               regs[bits (inst2, 8, 11)]
1014                 = pv_add_constant (regs[bits (insn, 0, 3)], imm);
1015             }
1016
1017           else if ((insn & 0xfbf0) == 0xf1a0    /* sub.w Rd, Rn, #imm */
1018                    && (inst2 & 0x8000) == 0x0000)
1019             {
1020               unsigned int imm = ((bits (insn, 10, 10) << 11)
1021                                   | (bits (inst2, 12, 14) << 8)
1022                                   | bits (inst2, 0, 7));
1023
1024               regs[bits (inst2, 8, 11)]
1025                 = pv_add_constant (regs[bits (insn, 0, 3)],
1026                                    - (CORE_ADDR) thumb_expand_immediate (imm));
1027             }
1028
1029           else if ((insn & 0xfbf0) == 0xf2a0    /* subw Rd, Rn, #imm */
1030                    && (inst2 & 0x8000) == 0x0000)
1031             {
1032               unsigned int imm = ((bits (insn, 10, 10) << 11)
1033                                   | (bits (inst2, 12, 14) << 8)
1034                                   | bits (inst2, 0, 7));
1035
1036               regs[bits (inst2, 8, 11)]
1037                 = pv_add_constant (regs[bits (insn, 0, 3)], - (CORE_ADDR) imm);
1038             }
1039
1040           else if ((insn & 0xfbff) == 0xf04f)   /* mov.w Rd, #const */
1041             {
1042               unsigned int imm = ((bits (insn, 10, 10) << 11)
1043                                   | (bits (inst2, 12, 14) << 8)
1044                                   | bits (inst2, 0, 7));
1045
1046               regs[bits (inst2, 8, 11)]
1047                 = pv_constant (thumb_expand_immediate (imm));
1048             }
1049
1050           else if ((insn & 0xfbf0) == 0xf240)   /* movw Rd, #const */
1051             {
1052               unsigned int imm
1053                 = EXTRACT_MOVW_MOVT_IMM_T (insn, inst2);
1054
1055               regs[bits (inst2, 8, 11)] = pv_constant (imm);
1056             }
1057
1058           else if (insn == 0xea5f               /* mov.w Rd,Rm */
1059                    && (inst2 & 0xf0f0) == 0)
1060             {
1061               int dst_reg = (inst2 & 0x0f00) >> 8;
1062               int src_reg = inst2 & 0xf;
1063               regs[dst_reg] = regs[src_reg];
1064             }
1065
1066           else if ((insn & 0xff7f) == 0xf85f)   /* ldr.w Rt,<label> */
1067             {
1068               /* Constant pool loads.  */
1069               unsigned int constant;
1070               CORE_ADDR loc;
1071
1072               offset = bits (inst2, 0, 11);
1073               if (insn & 0x0080)
1074                 loc = start + 4 + offset;
1075               else
1076                 loc = start + 4 - offset;
1077
1078               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1079               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1080             }
1081
1082           else if ((insn & 0xff7f) == 0xe95f)   /* ldrd Rt,Rt2,<label> */
1083             {
1084               /* Constant pool loads.  */
1085               unsigned int constant;
1086               CORE_ADDR loc;
1087
1088               offset = bits (inst2, 0, 7) << 2;
1089               if (insn & 0x0080)
1090                 loc = start + 4 + offset;
1091               else
1092                 loc = start + 4 - offset;
1093
1094               constant = read_memory_unsigned_integer (loc, 4, byte_order);
1095               regs[bits (inst2, 12, 15)] = pv_constant (constant);
1096
1097               constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
1098               regs[bits (inst2, 8, 11)] = pv_constant (constant);
1099             }
1100
1101           else if (thumb2_instruction_changes_pc (insn, inst2))
1102             {
1103               /* Don't scan past anything that might change control flow.  */
1104               break;
1105             }
1106           else
1107             {
1108               /* The optimizer might shove anything into the prologue,
1109                  so we just skip what we don't recognize.  */
1110               unrecognized_pc = start;
1111             }
1112
1113           start += 2;
1114         }
1115       else if (thumb_instruction_changes_pc (insn))
1116         {
1117           /* Don't scan past anything that might change control flow.  */
1118           break;
1119         }
1120       else
1121         {
1122           /* The optimizer might shove anything into the prologue,
1123              so we just skip what we don't recognize.  */
1124           unrecognized_pc = start;
1125         }
1126
1127       start += 2;
1128     }
1129
1130   arm_debug_printf ("Prologue scan stopped at %s",
1131                     paddress (gdbarch, start));
1132
1133   if (unrecognized_pc == 0)
1134     unrecognized_pc = start;
1135
1136   if (cache == NULL)
1137     return unrecognized_pc;
1138
1139   if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1140     {
1141       /* Frame pointer is fp.  Frame size is constant.  */
1142       cache->framereg = ARM_FP_REGNUM;
1143       cache->framesize = -regs[ARM_FP_REGNUM].k;
1144     }
1145   else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
1146     {
1147       /* Frame pointer is r7.  Frame size is constant.  */
1148       cache->framereg = THUMB_FP_REGNUM;
1149       cache->framesize = -regs[THUMB_FP_REGNUM].k;
1150     }
1151   else
1152     {
1153       /* Try the stack pointer... this is a bit desperate.  */
1154       cache->framereg = ARM_SP_REGNUM;
1155       cache->framesize = -regs[ARM_SP_REGNUM].k;
1156     }
1157
1158   for (i = 0; i < 16; i++)
1159     if (stack.find_reg (gdbarch, i, &offset))
1160       cache->saved_regs[i].set_addr (offset);
1161
1162   return unrecognized_pc;
1163 }
1164
1165
1166 /* Try to analyze the instructions starting from PC, which load symbol
1167    __stack_chk_guard.  Return the address of instruction after loading this
1168    symbol, set the dest register number to *BASEREG, and set the size of
1169    instructions for loading symbol in OFFSET.  Return 0 if instructions are
1170    not recognized.  */
1171
1172 static CORE_ADDR
1173 arm_analyze_load_stack_chk_guard(CORE_ADDR pc, struct gdbarch *gdbarch,
1174                                  unsigned int *destreg, int *offset)
1175 {
1176   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1177   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1178   unsigned int low, high, address;
1179
1180   address = 0;
1181   if (is_thumb)
1182     {
1183       unsigned short insn1
1184         = read_code_unsigned_integer (pc, 2, byte_order_for_code);
1185
1186       if ((insn1 & 0xf800) == 0x4800) /* ldr Rd, #immed */
1187         {
1188           *destreg = bits (insn1, 8, 10);
1189           *offset = 2;
1190           address = (pc & 0xfffffffc) + 4 + (bits (insn1, 0, 7) << 2);
1191           address = read_memory_unsigned_integer (address, 4,
1192                                                   byte_order_for_code);
1193         }
1194       else if ((insn1 & 0xfbf0) == 0xf240) /* movw Rd, #const */
1195         {
1196           unsigned short insn2
1197             = read_code_unsigned_integer (pc + 2, 2, byte_order_for_code);
1198
1199           low = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1200
1201           insn1
1202             = read_code_unsigned_integer (pc + 4, 2, byte_order_for_code);
1203           insn2
1204             = read_code_unsigned_integer (pc + 6, 2, byte_order_for_code);
1205
1206           /* movt Rd, #const */
1207           if ((insn1 & 0xfbc0) == 0xf2c0)
1208             {
1209               high = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1210               *destreg = bits (insn2, 8, 11);
1211               *offset = 8;
1212               address = (high << 16 | low);
1213             }
1214         }
1215     }
1216   else
1217     {
1218       unsigned int insn
1219         = read_code_unsigned_integer (pc, 4, byte_order_for_code);
1220
1221       if ((insn & 0x0e5f0000) == 0x041f0000) /* ldr Rd, [PC, #immed] */
1222         {
1223           address = bits (insn, 0, 11) + pc + 8;
1224           address = read_memory_unsigned_integer (address, 4,
1225                                                   byte_order_for_code);
1226
1227           *destreg = bits (insn, 12, 15);
1228           *offset = 4;
1229         }
1230       else if ((insn & 0x0ff00000) == 0x03000000) /* movw Rd, #const */
1231         {
1232           low = EXTRACT_MOVW_MOVT_IMM_A (insn);
1233
1234           insn
1235             = read_code_unsigned_integer (pc + 4, 4, byte_order_for_code);
1236
1237           if ((insn & 0x0ff00000) == 0x03400000) /* movt Rd, #const */
1238             {
1239               high = EXTRACT_MOVW_MOVT_IMM_A (insn);
1240               *destreg = bits (insn, 12, 15);
1241               *offset = 8;
1242               address = (high << 16 | low);
1243             }
1244         }
1245     }
1246
1247   return address;
1248 }
1249
1250 /* Try to skip a sequence of instructions used for stack protector.  If PC
1251    points to the first instruction of this sequence, return the address of
1252    first instruction after this sequence, otherwise, return original PC.
1253
1254    On arm, this sequence of instructions is composed of mainly three steps,
1255      Step 1: load symbol __stack_chk_guard,
1256      Step 2: load from address of __stack_chk_guard,
1257      Step 3: store it to somewhere else.
1258
1259    Usually, instructions on step 2 and step 3 are the same on various ARM
1260    architectures.  On step 2, it is one instruction 'ldr Rx, [Rn, #0]', and
1261    on step 3, it is also one instruction 'str Rx, [r7, #immd]'.  However,
1262    instructions in step 1 vary from different ARM architectures.  On ARMv7,
1263    they are,
1264
1265         movw    Rn, #:lower16:__stack_chk_guard
1266         movt    Rn, #:upper16:__stack_chk_guard
1267
1268    On ARMv5t, it is,
1269
1270         ldr     Rn, .Label
1271         ....
1272         .Lable:
1273         .word   __stack_chk_guard
1274
1275    Since ldr/str is a very popular instruction, we can't use them as
1276    'fingerprint' or 'signature' of stack protector sequence.  Here we choose
1277    sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1278    stripped, as the 'fingerprint' of a stack protector cdoe sequence.  */
1279
1280 static CORE_ADDR
1281 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1282 {
1283   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1284   unsigned int basereg;
1285   struct bound_minimal_symbol stack_chk_guard;
1286   int offset;
1287   int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1288   CORE_ADDR addr;
1289
1290   /* Try to parse the instructions in Step 1.  */
1291   addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1292                                            &basereg, &offset);
1293   if (!addr)
1294     return pc;
1295
1296   stack_chk_guard = lookup_minimal_symbol_by_pc (addr);
1297   /* ADDR must correspond to a symbol whose name is __stack_chk_guard.
1298      Otherwise, this sequence cannot be for stack protector.  */
1299   if (stack_chk_guard.minsym == NULL
1300       || !startswith (stack_chk_guard.minsym->linkage_name (), "__stack_chk_guard"))
1301    return pc;
1302
1303   if (is_thumb)
1304     {
1305       unsigned int destreg;
1306       unsigned short insn
1307         = read_code_unsigned_integer (pc + offset, 2, byte_order_for_code);
1308
1309       /* Step 2: ldr Rd, [Rn, #immed], encoding T1.  */
1310       if ((insn & 0xf800) != 0x6800)
1311         return pc;
1312       if (bits (insn, 3, 5) != basereg)
1313         return pc;
1314       destreg = bits (insn, 0, 2);
1315
1316       insn = read_code_unsigned_integer (pc + offset + 2, 2,
1317                                          byte_order_for_code);
1318       /* Step 3: str Rd, [Rn, #immed], encoding T1.  */
1319       if ((insn & 0xf800) != 0x6000)
1320         return pc;
1321       if (destreg != bits (insn, 0, 2))
1322         return pc;
1323     }
1324   else
1325     {
1326       unsigned int destreg;
1327       unsigned int insn
1328         = read_code_unsigned_integer (pc + offset, 4, byte_order_for_code);
1329
1330       /* Step 2: ldr Rd, [Rn, #immed], encoding A1.  */
1331       if ((insn & 0x0e500000) != 0x04100000)
1332         return pc;
1333       if (bits (insn, 16, 19) != basereg)
1334         return pc;
1335       destreg = bits (insn, 12, 15);
1336       /* Step 3: str Rd, [Rn, #immed], encoding A1.  */
1337       insn = read_code_unsigned_integer (pc + offset + 4,
1338                                            4, byte_order_for_code);
1339       if ((insn & 0x0e500000) != 0x04000000)
1340         return pc;
1341       if (bits (insn, 12, 15) != destreg)
1342         return pc;
1343     }
1344   /* The size of total two instructions ldr/str is 4 on Thumb-2, while 8
1345      on arm.  */
1346   if (is_thumb)
1347     return pc + offset + 4;
1348   else
1349     return pc + offset + 8;
1350 }
1351
1352 /* Advance the PC across any function entry prologue instructions to
1353    reach some "real" code.
1354
1355    The APCS (ARM Procedure Call Standard) defines the following
1356    prologue:
1357
1358    mov          ip, sp
1359    [stmfd       sp!, {a1,a2,a3,a4}]
1360    stmfd        sp!, {...,fp,ip,lr,pc}
1361    [stfe        f7, [sp, #-12]!]
1362    [stfe        f6, [sp, #-12]!]
1363    [stfe        f5, [sp, #-12]!]
1364    [stfe        f4, [sp, #-12]!]
1365    sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn.  */
1366
1367 static CORE_ADDR
1368 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1369 {
1370   CORE_ADDR func_addr, limit_pc;
1371
1372   /* See if we can determine the end of the prologue via the symbol table.
1373      If so, then return either PC, or the PC after the prologue, whichever
1374      is greater.  */
1375   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1376     {
1377       CORE_ADDR post_prologue_pc
1378         = skip_prologue_using_sal (gdbarch, func_addr);
1379       struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
1380
1381       if (post_prologue_pc)
1382         post_prologue_pc
1383           = arm_skip_stack_protector (post_prologue_pc, gdbarch);
1384
1385
1386       /* GCC always emits a line note before the prologue and another
1387          one after, even if the two are at the same address or on the
1388          same line.  Take advantage of this so that we do not need to
1389          know every instruction that might appear in the prologue.  We
1390          will have producer information for most binaries; if it is
1391          missing (e.g. for -gstabs), assuming the GNU tools.  */
1392       if (post_prologue_pc
1393           && (cust == NULL
1394               || COMPUNIT_PRODUCER (cust) == NULL
1395               || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
1396               || producer_is_llvm (COMPUNIT_PRODUCER (cust))))
1397         return post_prologue_pc;
1398
1399       if (post_prologue_pc != 0)
1400         {
1401           CORE_ADDR analyzed_limit;
1402
1403           /* For non-GCC compilers, make sure the entire line is an
1404              acceptable prologue; GDB will round this function's
1405              return value up to the end of the following line so we
1406              can not skip just part of a line (and we do not want to).
1407
1408              RealView does not treat the prologue specially, but does
1409              associate prologue code with the opening brace; so this
1410              lets us skip the first line if we think it is the opening
1411              brace.  */
1412           if (arm_pc_is_thumb (gdbarch, func_addr))
1413             analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
1414                                                      post_prologue_pc, NULL);
1415           else
1416             analyzed_limit
1417               = arm_analyze_prologue (gdbarch, func_addr, post_prologue_pc,
1418                                       NULL, target_arm_instruction_reader ());
1419
1420           if (analyzed_limit != post_prologue_pc)
1421             return func_addr;
1422
1423           return post_prologue_pc;
1424         }
1425     }
1426
1427   /* Can't determine prologue from the symbol table, need to examine
1428      instructions.  */
1429
1430   /* Find an upper limit on the function prologue using the debug
1431      information.  If the debug information could not be used to provide
1432      that bound, then use an arbitrary large number as the upper bound.  */
1433   /* Like arm_scan_prologue, stop no later than pc + 64.  */
1434   limit_pc = skip_prologue_using_sal (gdbarch, pc);
1435   if (limit_pc == 0)
1436     limit_pc = pc + 64;          /* Magic.  */
1437
1438
1439   /* Check if this is Thumb code.  */
1440   if (arm_pc_is_thumb (gdbarch, pc))
1441     return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1442   else
1443     return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL,
1444                                  target_arm_instruction_reader ());
1445 }
1446
1447 /* *INDENT-OFF* */
1448 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
1449    This function decodes a Thumb function prologue to determine:
1450      1) the size of the stack frame
1451      2) which registers are saved on it
1452      3) the offsets of saved regs
1453      4) the offset from the stack pointer to the frame pointer
1454
1455    A typical Thumb function prologue would create this stack frame
1456    (offsets relative to FP)
1457      old SP ->  24  stack parameters
1458                 20  LR
1459                 16  R7
1460      R7 ->       0  local variables (16 bytes)
1461      SP ->     -12  additional stack space (12 bytes)
1462    The frame size would thus be 36 bytes, and the frame offset would be
1463    12 bytes.  The frame register is R7.
1464    
1465    The comments for thumb_skip_prolog() describe the algorithm we use
1466    to detect the end of the prolog.  */
1467 /* *INDENT-ON* */
1468
1469 static void
1470 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1471                      CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1472 {
1473   CORE_ADDR prologue_start;
1474   CORE_ADDR prologue_end;
1475
1476   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1477                                 &prologue_end))
1478     {
1479       /* See comment in arm_scan_prologue for an explanation of
1480          this heuristics.  */
1481       if (prologue_end > prologue_start + 64)
1482         {
1483           prologue_end = prologue_start + 64;
1484         }
1485     }
1486   else
1487     /* We're in the boondocks: we have no idea where the start of the
1488        function is.  */
1489     return;
1490
1491   prologue_end = std::min (prologue_end, prev_pc);
1492
1493   thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1494 }
1495
1496 /* Return 1 if the ARM instruction INSN restores SP in epilogue, 0
1497    otherwise.  */
1498
1499 static int
1500 arm_instruction_restores_sp (unsigned int insn)
1501 {
1502   if (bits (insn, 28, 31) != INST_NV)
1503     {
1504       if ((insn & 0x0df0f000) == 0x0080d000
1505           /* ADD SP (register or immediate).  */
1506           || (insn & 0x0df0f000) == 0x0040d000
1507           /* SUB SP (register or immediate).  */
1508           || (insn & 0x0ffffff0) == 0x01a0d000
1509           /* MOV SP.  */
1510           || (insn & 0x0fff0000) == 0x08bd0000
1511           /* POP (LDMIA).  */
1512           || (insn & 0x0fff0000) == 0x049d0000)
1513           /* POP of a single register.  */
1514         return 1;
1515     }
1516
1517   return 0;
1518 }
1519
1520 /* Implement immediate value decoding, as described in section A5.2.4
1521    (Modified immediate constants in ARM instructions) of the ARM Architecture
1522    Reference Manual (ARMv7-A and ARMv7-R edition).  */
1523
1524 static uint32_t
1525 arm_expand_immediate (uint32_t imm)
1526 {
1527   /* Immediate values are 12 bits long.  */
1528   gdb_assert ((imm & 0xfffff000) == 0);
1529
1530   uint32_t unrotated_value = imm & 0xff;
1531   uint32_t rotate_amount = (imm & 0xf00) >> 7;
1532
1533   if (rotate_amount == 0)
1534     return unrotated_value;
1535
1536   return ((unrotated_value >> rotate_amount)
1537           | (unrotated_value << (32 - rotate_amount)));
1538 }
1539
1540 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
1541    continuing no further than PROLOGUE_END.  If CACHE is non-NULL,
1542    fill it in.  Return the first address not recognized as a prologue
1543    instruction.
1544
1545    We recognize all the instructions typically found in ARM prologues,
1546    plus harmless instructions which can be skipped (either for analysis
1547    purposes, or a more restrictive set that can be skipped when finding
1548    the end of the prologue).  */
1549
1550 static CORE_ADDR
1551 arm_analyze_prologue (struct gdbarch *gdbarch,
1552                       CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1553                       struct arm_prologue_cache *cache,
1554                       const arm_instruction_reader &insn_reader)
1555 {
1556   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1557   int regno;
1558   CORE_ADDR offset, current_pc;
1559   pv_t regs[ARM_FPS_REGNUM];
1560   CORE_ADDR unrecognized_pc = 0;
1561
1562   /* Search the prologue looking for instructions that set up the
1563      frame pointer, adjust the stack pointer, and save registers.
1564
1565      Be careful, however, and if it doesn't look like a prologue,
1566      don't try to scan it.  If, for instance, a frameless function
1567      begins with stmfd sp!, then we will tell ourselves there is
1568      a frame, which will confuse stack traceback, as well as "finish" 
1569      and other operations that rely on a knowledge of the stack
1570      traceback.  */
1571
1572   for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1573     regs[regno] = pv_register (regno, 0);
1574   pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1575
1576   for (current_pc = prologue_start;
1577        current_pc < prologue_end;
1578        current_pc += 4)
1579     {
1580       uint32_t insn = insn_reader.read (current_pc, byte_order_for_code);
1581
1582       if (insn == 0xe1a0c00d)           /* mov ip, sp */
1583         {
1584           regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
1585           continue;
1586         }
1587       else if ((insn & 0xfff00000) == 0xe2800000        /* add Rd, Rn, #n */
1588                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1589         {
1590           uint32_t imm = arm_expand_immediate (insn & 0xfff);
1591           int rd = bits (insn, 12, 15);
1592           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
1593           continue;
1594         }
1595       else if ((insn & 0xfff00000) == 0xe2400000        /* sub Rd, Rn, #n */
1596                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1597         {
1598           uint32_t imm = arm_expand_immediate (insn & 0xfff);
1599           int rd = bits (insn, 12, 15);
1600           regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
1601           continue;
1602         }
1603       else if ((insn & 0xffff0fff) == 0xe52d0004)       /* str Rd,
1604                                                            [sp, #-4]! */
1605         {
1606           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1607             break;
1608           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1609           stack.store (regs[ARM_SP_REGNUM], 4,
1610                        regs[bits (insn, 12, 15)]);
1611           continue;
1612         }
1613       else if ((insn & 0xffff0000) == 0xe92d0000)
1614         /* stmfd sp!, {..., fp, ip, lr, pc}
1615            or
1616            stmfd sp!, {a1, a2, a3, a4}  */
1617         {
1618           int mask = insn & 0xffff;
1619
1620           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1621             break;
1622
1623           /* Calculate offsets of saved registers.  */
1624           for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
1625             if (mask & (1 << regno))
1626               {
1627                 regs[ARM_SP_REGNUM]
1628                   = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1629                 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
1630               }
1631         }
1632       else if ((insn & 0xffff0000) == 0xe54b0000        /* strb rx,[r11,#-n] */
1633                || (insn & 0xffff00f0) == 0xe14b00b0     /* strh rx,[r11,#-n] */
1634                || (insn & 0xffffc000) == 0xe50b0000)    /* str  rx,[r11,#-n] */
1635         {
1636           /* No need to add this to saved_regs -- it's just an arg reg.  */
1637           continue;
1638         }
1639       else if ((insn & 0xffff0000) == 0xe5cd0000        /* strb rx,[sp,#n] */
1640                || (insn & 0xffff00f0) == 0xe1cd00b0     /* strh rx,[sp,#n] */
1641                || (insn & 0xffffc000) == 0xe58d0000)    /* str  rx,[sp,#n] */
1642         {
1643           /* No need to add this to saved_regs -- it's just an arg reg.  */
1644           continue;
1645         }
1646       else if ((insn & 0xfff00000) == 0xe8800000        /* stm Rn,
1647                                                            { registers } */
1648                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1649         {
1650           /* No need to add this to saved_regs -- it's just arg regs.  */
1651           continue;
1652         }
1653       else if ((insn & 0xfffff000) == 0xe24cb000)       /* sub fp, ip #n */
1654         {
1655           uint32_t imm = arm_expand_immediate (insn & 0xfff);
1656           regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
1657         }
1658       else if ((insn & 0xfffff000) == 0xe24dd000)       /* sub sp, sp #n */
1659         {
1660           uint32_t imm = arm_expand_immediate(insn & 0xfff);
1661           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
1662         }
1663       else if ((insn & 0xffff7fff) == 0xed6d0103        /* stfe f?,
1664                                                            [sp, -#c]! */
1665                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1666         {
1667           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1668             break;
1669
1670           regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1671           regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
1672           stack.store (regs[ARM_SP_REGNUM], 12, regs[regno]);
1673         }
1674       else if ((insn & 0xffbf0fff) == 0xec2d0200        /* sfmfd f0, 4,
1675                                                            [sp!] */
1676                && gdbarch_tdep (gdbarch)->have_fpa_registers)
1677         {
1678           int n_saved_fp_regs;
1679           unsigned int fp_start_reg, fp_bound_reg;
1680
1681           if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1682             break;
1683
1684           if ((insn & 0x800) == 0x800)          /* N0 is set */
1685             {
1686               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1687                 n_saved_fp_regs = 3;
1688               else
1689                 n_saved_fp_regs = 1;
1690             }
1691           else
1692             {
1693               if ((insn & 0x40000) == 0x40000)  /* N1 is set */
1694                 n_saved_fp_regs = 2;
1695               else
1696                 n_saved_fp_regs = 4;
1697             }
1698
1699           fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1700           fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1701           for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1702             {
1703               regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1704               stack.store (regs[ARM_SP_REGNUM], 12,
1705                            regs[fp_start_reg++]);
1706             }
1707         }
1708       else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1709         {
1710           /* Allow some special function calls when skipping the
1711              prologue; GCC generates these before storing arguments to
1712              the stack.  */
1713           CORE_ADDR dest = BranchDest (current_pc, insn);
1714
1715           if (skip_prologue_function (gdbarch, dest, 0))
1716             continue;
1717           else
1718             break;
1719         }
1720       else if ((insn & 0xf0000000) != 0xe0000000)
1721         break;                  /* Condition not true, exit early.  */
1722       else if (arm_instruction_changes_pc (insn))
1723         /* Don't scan past anything that might change control flow.  */
1724         break;
1725       else if (arm_instruction_restores_sp (insn))
1726         {
1727           /* Don't scan past the epilogue.  */
1728           break;
1729         }
1730       else if ((insn & 0xfe500000) == 0xe8100000        /* ldm */
1731                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1732         /* Ignore block loads from the stack, potentially copying
1733            parameters from memory.  */
1734         continue;
1735       else if ((insn & 0xfc500000) == 0xe4100000
1736                && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1737         /* Similarly ignore single loads from the stack.  */
1738         continue;
1739       else if ((insn & 0xffff0ff0) == 0xe1a00000)
1740         /* MOV Rd, Rm.  Skip register copies, i.e. saves to another
1741            register instead of the stack.  */
1742         continue;
1743       else
1744         {
1745           /* The optimizer might shove anything into the prologue, if
1746              we build up cache (cache != NULL) from scanning prologue,
1747              we just skip what we don't recognize and scan further to
1748              make cache as complete as possible.  However, if we skip
1749              prologue, we'll stop immediately on unrecognized
1750              instruction.  */
1751           unrecognized_pc = current_pc;
1752           if (cache != NULL)
1753             continue;
1754           else
1755             break;
1756         }
1757     }
1758
1759   if (unrecognized_pc == 0)
1760     unrecognized_pc = current_pc;
1761
1762   if (cache)
1763     {
1764       int framereg, framesize;
1765
1766       /* The frame size is just the distance from the frame register
1767          to the original stack pointer.  */
1768       if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1769         {
1770           /* Frame pointer is fp.  */
1771           framereg = ARM_FP_REGNUM;
1772           framesize = -regs[ARM_FP_REGNUM].k;
1773         }
1774       else
1775         {
1776           /* Try the stack pointer... this is a bit desperate.  */
1777           framereg = ARM_SP_REGNUM;
1778           framesize = -regs[ARM_SP_REGNUM].k;
1779         }
1780
1781       cache->framereg = framereg;
1782       cache->framesize = framesize;
1783
1784       for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1785         if (stack.find_reg (gdbarch, regno, &offset))
1786           cache->saved_regs[regno].set_addr (offset);
1787     }
1788
1789   arm_debug_printf ("Prologue scan stopped at %s",
1790                     paddress (gdbarch, unrecognized_pc));
1791
1792   return unrecognized_pc;
1793 }
1794
1795 static void
1796 arm_scan_prologue (struct frame_info *this_frame,
1797                    struct arm_prologue_cache *cache)
1798 {
1799   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1800   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1801   CORE_ADDR prologue_start, prologue_end;
1802   CORE_ADDR prev_pc = get_frame_pc (this_frame);
1803   CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1804
1805   /* Assume there is no frame until proven otherwise.  */
1806   cache->framereg = ARM_SP_REGNUM;
1807   cache->framesize = 0;
1808
1809   /* Check for Thumb prologue.  */
1810   if (arm_frame_is_thumb (this_frame))
1811     {
1812       thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1813       return;
1814     }
1815
1816   /* Find the function prologue.  If we can't find the function in
1817      the symbol table, peek in the stack frame to find the PC.  */
1818   if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1819                                 &prologue_end))
1820     {
1821       /* One way to find the end of the prologue (which works well
1822          for unoptimized code) is to do the following:
1823
1824             struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1825
1826             if (sal.line == 0)
1827               prologue_end = prev_pc;
1828             else if (sal.end < prologue_end)
1829               prologue_end = sal.end;
1830
1831          This mechanism is very accurate so long as the optimizer
1832          doesn't move any instructions from the function body into the
1833          prologue.  If this happens, sal.end will be the last
1834          instruction in the first hunk of prologue code just before
1835          the first instruction that the scheduler has moved from
1836          the body to the prologue.
1837
1838          In order to make sure that we scan all of the prologue
1839          instructions, we use a slightly less accurate mechanism which
1840          may scan more than necessary.  To help compensate for this
1841          lack of accuracy, the prologue scanning loop below contains
1842          several clauses which'll cause the loop to terminate early if
1843          an implausible prologue instruction is encountered.
1844
1845          The expression
1846
1847               prologue_start + 64
1848
1849          is a suitable endpoint since it accounts for the largest
1850          possible prologue plus up to five instructions inserted by
1851          the scheduler.  */
1852
1853       if (prologue_end > prologue_start + 64)
1854         {
1855           prologue_end = prologue_start + 64;   /* See above.  */
1856         }
1857     }
1858   else
1859     {
1860       /* We have no symbol information.  Our only option is to assume this
1861          function has a standard stack frame and the normal frame register.
1862          Then, we can find the value of our frame pointer on entrance to
1863          the callee (or at the present moment if this is the innermost frame).
1864          The value stored there should be the address of the stmfd + 8.  */
1865       CORE_ADDR frame_loc;
1866       ULONGEST return_value;
1867
1868       /* AAPCS does not use a frame register, so we can abort here.  */
1869       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_AAPCS)
1870         return;
1871
1872       frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1873       if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
1874                                               &return_value))
1875         return;
1876       else
1877         {
1878           prologue_start = gdbarch_addr_bits_remove
1879                              (gdbarch, return_value) - 8;
1880           prologue_end = prologue_start + 64;   /* See above.  */
1881         }
1882     }
1883
1884   if (prev_pc < prologue_end)
1885     prologue_end = prev_pc;
1886
1887   arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache,
1888                         target_arm_instruction_reader ());
1889 }
1890
1891 static struct arm_prologue_cache *
1892 arm_make_prologue_cache (struct frame_info *this_frame)
1893 {
1894   int reg;
1895   struct arm_prologue_cache *cache;
1896   CORE_ADDR unwound_fp;
1897
1898   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1899   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1900
1901   arm_scan_prologue (this_frame, cache);
1902
1903   unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
1904   if (unwound_fp == 0)
1905     return cache;
1906
1907   cache->prev_sp = unwound_fp + cache->framesize;
1908
1909   /* Calculate actual addresses of saved registers using offsets
1910      determined by arm_scan_prologue.  */
1911   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
1912     if (cache->saved_regs[reg].is_addr ())
1913       cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
1914                                        + cache->prev_sp);
1915
1916   return cache;
1917 }
1918
1919 /* Implementation of the stop_reason hook for arm_prologue frames.  */
1920
1921 static enum unwind_stop_reason
1922 arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
1923                                  void **this_cache)
1924 {
1925   struct arm_prologue_cache *cache;
1926   CORE_ADDR pc;
1927
1928   if (*this_cache == NULL)
1929     *this_cache = arm_make_prologue_cache (this_frame);
1930   cache = (struct arm_prologue_cache *) *this_cache;
1931
1932   /* This is meant to halt the backtrace at "_start".  */
1933   pc = get_frame_pc (this_frame);
1934   if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
1935     return UNWIND_OUTERMOST;
1936
1937   /* If we've hit a wall, stop.  */
1938   if (cache->prev_sp == 0)
1939     return UNWIND_OUTERMOST;
1940
1941   return UNWIND_NO_REASON;
1942 }
1943
1944 /* Our frame ID for a normal frame is the current function's starting PC
1945    and the caller's SP when we were called.  */
1946
1947 static void
1948 arm_prologue_this_id (struct frame_info *this_frame,
1949                       void **this_cache,
1950                       struct frame_id *this_id)
1951 {
1952   struct arm_prologue_cache *cache;
1953   struct frame_id id;
1954   CORE_ADDR pc, func;
1955
1956   if (*this_cache == NULL)
1957     *this_cache = arm_make_prologue_cache (this_frame);
1958   cache = (struct arm_prologue_cache *) *this_cache;
1959
1960   /* Use function start address as part of the frame ID.  If we cannot
1961      identify the start address (due to missing symbol information),
1962      fall back to just using the current PC.  */
1963   pc = get_frame_pc (this_frame);
1964   func = get_frame_func (this_frame);
1965   if (!func)
1966     func = pc;
1967
1968   id = frame_id_build (cache->prev_sp, func);
1969   *this_id = id;
1970 }
1971
1972 static struct value *
1973 arm_prologue_prev_register (struct frame_info *this_frame,
1974                             void **this_cache,
1975                             int prev_regnum)
1976 {
1977   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1978   struct arm_prologue_cache *cache;
1979
1980   if (*this_cache == NULL)
1981     *this_cache = arm_make_prologue_cache (this_frame);
1982   cache = (struct arm_prologue_cache *) *this_cache;
1983
1984   /* If we are asked to unwind the PC, then we need to return the LR
1985      instead.  The prologue may save PC, but it will point into this
1986      frame's prologue, not the next frame's resume location.  Also
1987      strip the saved T bit.  A valid LR may have the low bit set, but
1988      a valid PC never does.  */
1989   if (prev_regnum == ARM_PC_REGNUM)
1990     {
1991       CORE_ADDR lr;
1992
1993       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1994       return frame_unwind_got_constant (this_frame, prev_regnum,
1995                                         arm_addr_bits_remove (gdbarch, lr));
1996     }
1997
1998   /* SP is generally not saved to the stack, but this frame is
1999      identified by the next frame's stack pointer at the time of the call.
2000      The value was already reconstructed into PREV_SP.  */
2001   if (prev_regnum == ARM_SP_REGNUM)
2002     return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
2003
2004   /* The CPSR may have been changed by the call instruction and by the
2005      called function.  The only bit we can reconstruct is the T bit,
2006      by checking the low bit of LR as of the call.  This is a reliable
2007      indicator of Thumb-ness except for some ARM v4T pre-interworking
2008      Thumb code, which could get away with a clear low bit as long as
2009      the called function did not use bx.  Guess that all other
2010      bits are unchanged; the condition flags are presumably lost,
2011      but the processor status is likely valid.  */
2012   if (prev_regnum == ARM_PS_REGNUM)
2013     {
2014       CORE_ADDR lr, cpsr;
2015       ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
2016
2017       cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
2018       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
2019       if (IS_THUMB_ADDR (lr))
2020         cpsr |= t_bit;
2021       else
2022         cpsr &= ~t_bit;
2023       return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
2024     }
2025
2026   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
2027                                        prev_regnum);
2028 }
2029
2030 static frame_unwind arm_prologue_unwind = {
2031   NORMAL_FRAME,
2032   arm_prologue_unwind_stop_reason,
2033   arm_prologue_this_id,
2034   arm_prologue_prev_register,
2035   NULL,
2036   default_frame_sniffer
2037 };
2038
2039 /* Maintain a list of ARM exception table entries per objfile, similar to the
2040    list of mapping symbols.  We only cache entries for standard ARM-defined
2041    personality routines; the cache will contain only the frame unwinding
2042    instructions associated with the entry (not the descriptors).  */
2043
2044 struct arm_exidx_entry
2045 {
2046   CORE_ADDR addr;
2047   gdb_byte *entry;
2048
2049   bool operator< (const arm_exidx_entry &other) const
2050   {
2051     return addr < other.addr;
2052   }
2053 };
2054
2055 struct arm_exidx_data
2056 {
2057   std::vector<std::vector<arm_exidx_entry>> section_maps;
2058 };
2059
2060 /* Per-BFD key to store exception handling information.  */
2061 static const struct bfd_key<arm_exidx_data> arm_exidx_data_key;
2062
2063 static struct obj_section *
2064 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
2065 {
2066   struct obj_section *osect;
2067
2068   ALL_OBJFILE_OSECTIONS (objfile, osect)
2069     if (bfd_section_flags (osect->the_bfd_section) & SEC_ALLOC)
2070       {
2071         bfd_vma start, size;
2072         start = bfd_section_vma (osect->the_bfd_section);
2073         size = bfd_section_size (osect->the_bfd_section);
2074
2075         if (start <= vma && vma < start + size)
2076           return osect;
2077       }
2078
2079   return NULL;
2080 }
2081
2082 /* Parse contents of exception table and exception index sections
2083    of OBJFILE, and fill in the exception table entry cache.
2084
2085    For each entry that refers to a standard ARM-defined personality
2086    routine, extract the frame unwinding instructions (from either
2087    the index or the table section).  The unwinding instructions
2088    are normalized by:
2089     - extracting them from the rest of the table data
2090     - converting to host endianness
2091     - appending the implicit 0xb0 ("Finish") code
2092
2093    The extracted and normalized instructions are stored for later
2094    retrieval by the arm_find_exidx_entry routine.  */
2095  
2096 static void
2097 arm_exidx_new_objfile (struct objfile *objfile)
2098 {
2099   struct arm_exidx_data *data;
2100   asection *exidx, *extab;
2101   bfd_vma exidx_vma = 0, extab_vma = 0;
2102   LONGEST i;
2103
2104   /* If we've already touched this file, do nothing.  */
2105   if (!objfile || arm_exidx_data_key.get (objfile->obfd) != NULL)
2106     return;
2107
2108   /* Read contents of exception table and index.  */
2109   exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
2110   gdb::byte_vector exidx_data;
2111   if (exidx)
2112     {
2113       exidx_vma = bfd_section_vma (exidx);
2114       exidx_data.resize (bfd_section_size (exidx));
2115
2116       if (!bfd_get_section_contents (objfile->obfd, exidx,
2117                                      exidx_data.data (), 0,
2118                                      exidx_data.size ()))
2119         return;
2120     }
2121
2122   extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2123   gdb::byte_vector extab_data;
2124   if (extab)
2125     {
2126       extab_vma = bfd_section_vma (extab);
2127       extab_data.resize (bfd_section_size (extab));
2128
2129       if (!bfd_get_section_contents (objfile->obfd, extab,
2130                                      extab_data.data (), 0,
2131                                      extab_data.size ()))
2132         return;
2133     }
2134
2135   /* Allocate exception table data structure.  */
2136   data = arm_exidx_data_key.emplace (objfile->obfd);
2137   data->section_maps.resize (objfile->obfd->section_count);
2138
2139   /* Fill in exception table.  */
2140   for (i = 0; i < exidx_data.size () / 8; i++)
2141     {
2142       struct arm_exidx_entry new_exidx_entry;
2143       bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data.data () + i * 8);
2144       bfd_vma val = bfd_h_get_32 (objfile->obfd,
2145                                   exidx_data.data () + i * 8 + 4);
2146       bfd_vma addr = 0, word = 0;
2147       int n_bytes = 0, n_words = 0;
2148       struct obj_section *sec;
2149       gdb_byte *entry = NULL;
2150
2151       /* Extract address of start of function.  */
2152       idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2153       idx += exidx_vma + i * 8;
2154
2155       /* Find section containing function and compute section offset.  */
2156       sec = arm_obj_section_from_vma (objfile, idx);
2157       if (sec == NULL)
2158         continue;
2159       idx -= bfd_section_vma (sec->the_bfd_section);
2160
2161       /* Determine address of exception table entry.  */
2162       if (val == 1)
2163         {
2164           /* EXIDX_CANTUNWIND -- no exception table entry present.  */
2165         }
2166       else if ((val & 0xff000000) == 0x80000000)
2167         {
2168           /* Exception table entry embedded in .ARM.exidx
2169              -- must be short form.  */
2170           word = val;
2171           n_bytes = 3;
2172         }
2173       else if (!(val & 0x80000000))
2174         {
2175           /* Exception table entry in .ARM.extab.  */
2176           addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2177           addr += exidx_vma + i * 8 + 4;
2178
2179           if (addr >= extab_vma && addr + 4 <= extab_vma + extab_data.size ())
2180             {
2181               word = bfd_h_get_32 (objfile->obfd,
2182                                    extab_data.data () + addr - extab_vma);
2183               addr += 4;
2184
2185               if ((word & 0xff000000) == 0x80000000)
2186                 {
2187                   /* Short form.  */
2188                   n_bytes = 3;
2189                 }
2190               else if ((word & 0xff000000) == 0x81000000
2191                        || (word & 0xff000000) == 0x82000000)
2192                 {
2193                   /* Long form.  */
2194                   n_bytes = 2;
2195                   n_words = ((word >> 16) & 0xff);
2196                 }
2197               else if (!(word & 0x80000000))
2198                 {
2199                   bfd_vma pers;
2200                   struct obj_section *pers_sec;
2201                   int gnu_personality = 0;
2202
2203                   /* Custom personality routine.  */
2204                   pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2205                   pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2206
2207                   /* Check whether we've got one of the variants of the
2208                      GNU personality routines.  */
2209                   pers_sec = arm_obj_section_from_vma (objfile, pers);
2210                   if (pers_sec)
2211                     {
2212                       static const char *personality[] = 
2213                         {
2214                           "__gcc_personality_v0",
2215                           "__gxx_personality_v0",
2216                           "__gcj_personality_v0",
2217                           "__gnu_objc_personality_v0",
2218                           NULL
2219                         };
2220
2221                       CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2222                       int k;
2223
2224                       for (k = 0; personality[k]; k++)
2225                         if (lookup_minimal_symbol_by_pc_name
2226                               (pc, personality[k], objfile))
2227                           {
2228                             gnu_personality = 1;
2229                             break;
2230                           }
2231                     }
2232
2233                   /* If so, the next word contains a word count in the high
2234                      byte, followed by the same unwind instructions as the
2235                      pre-defined forms.  */
2236                   if (gnu_personality
2237                       && addr + 4 <= extab_vma + extab_data.size ())
2238                     {
2239                       word = bfd_h_get_32 (objfile->obfd,
2240                                            (extab_data.data ()
2241                                             + addr - extab_vma));
2242                       addr += 4;
2243                       n_bytes = 3;
2244                       n_words = ((word >> 24) & 0xff);
2245                     }
2246                 }
2247             }
2248         }
2249
2250       /* Sanity check address.  */
2251       if (n_words)
2252         if (addr < extab_vma
2253             || addr + 4 * n_words > extab_vma + extab_data.size ())
2254           n_words = n_bytes = 0;
2255
2256       /* The unwind instructions reside in WORD (only the N_BYTES least
2257          significant bytes are valid), followed by N_WORDS words in the
2258          extab section starting at ADDR.  */
2259       if (n_bytes || n_words)
2260         {
2261           gdb_byte *p = entry
2262             = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
2263                                           n_bytes + n_words * 4 + 1);
2264
2265           while (n_bytes--)
2266             *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2267
2268           while (n_words--)
2269             {
2270               word = bfd_h_get_32 (objfile->obfd,
2271                                    extab_data.data () + addr - extab_vma);
2272               addr += 4;
2273
2274               *p++ = (gdb_byte) ((word >> 24) & 0xff);
2275               *p++ = (gdb_byte) ((word >> 16) & 0xff);
2276               *p++ = (gdb_byte) ((word >> 8) & 0xff);
2277               *p++ = (gdb_byte) (word & 0xff);
2278             }
2279
2280           /* Implied "Finish" to terminate the list.  */
2281           *p++ = 0xb0;
2282         }
2283
2284       /* Push entry onto vector.  They are guaranteed to always
2285          appear in order of increasing addresses.  */
2286       new_exidx_entry.addr = idx;
2287       new_exidx_entry.entry = entry;
2288       data->section_maps[sec->the_bfd_section->index].push_back
2289         (new_exidx_entry);
2290     }
2291 }
2292
2293 /* Search for the exception table entry covering MEMADDR.  If one is found,
2294    return a pointer to its data.  Otherwise, return 0.  If START is non-NULL,
2295    set *START to the start of the region covered by this entry.  */
2296
2297 static gdb_byte *
2298 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2299 {
2300   struct obj_section *sec;
2301
2302   sec = find_pc_section (memaddr);
2303   if (sec != NULL)
2304     {
2305       struct arm_exidx_data *data;
2306       struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2307
2308       data = arm_exidx_data_key.get (sec->objfile->obfd);
2309       if (data != NULL)
2310         {
2311           std::vector<arm_exidx_entry> &map
2312             = data->section_maps[sec->the_bfd_section->index];
2313           if (!map.empty ())
2314             {
2315               auto idx = std::lower_bound (map.begin (), map.end (), map_key);
2316
2317               /* std::lower_bound finds the earliest ordered insertion
2318                  point.  If the following symbol starts at this exact
2319                  address, we use that; otherwise, the preceding
2320                  exception table entry covers this address.  */
2321               if (idx < map.end ())
2322                 {
2323                   if (idx->addr == map_key.addr)
2324                     {
2325                       if (start)
2326                         *start = idx->addr + obj_section_addr (sec);
2327                       return idx->entry;
2328                     }
2329                 }
2330
2331               if (idx > map.begin ())
2332                 {
2333                   idx = idx - 1;
2334                   if (start)
2335                     *start = idx->addr + obj_section_addr (sec);
2336                   return idx->entry;
2337                 }
2338             }
2339         }
2340     }
2341
2342   return NULL;
2343 }
2344
2345 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2346    instruction list from the ARM exception table entry ENTRY, allocate and
2347    return a prologue cache structure describing how to unwind this frame.
2348
2349    Return NULL if the unwinding instruction list contains a "spare",
2350    "reserved" or "refuse to unwind" instruction as defined in section
2351    "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2352    for the ARM Architecture" document.  */
2353
2354 static struct arm_prologue_cache *
2355 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2356 {
2357   CORE_ADDR vsp = 0;
2358   int vsp_valid = 0;
2359
2360   struct arm_prologue_cache *cache;
2361   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2362   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2363
2364   for (;;)
2365     {
2366       gdb_byte insn;
2367
2368       /* Whenever we reload SP, we actually have to retrieve its
2369          actual value in the current frame.  */
2370       if (!vsp_valid)
2371         {
2372           if (cache->saved_regs[ARM_SP_REGNUM].is_realreg ())
2373             {
2374               int reg = cache->saved_regs[ARM_SP_REGNUM].realreg ();
2375               vsp = get_frame_register_unsigned (this_frame, reg);
2376             }
2377           else
2378             {
2379               CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr ();
2380               vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2381             }
2382
2383           vsp_valid = 1;
2384         }
2385
2386       /* Decode next unwind instruction.  */
2387       insn = *entry++;
2388
2389       if ((insn & 0xc0) == 0)
2390         {
2391           int offset = insn & 0x3f;
2392           vsp += (offset << 2) + 4;
2393         }
2394       else if ((insn & 0xc0) == 0x40)
2395         {
2396           int offset = insn & 0x3f;
2397           vsp -= (offset << 2) + 4;
2398         }
2399       else if ((insn & 0xf0) == 0x80)
2400         {
2401           int mask = ((insn & 0xf) << 8) | *entry++;
2402           int i;
2403
2404           /* The special case of an all-zero mask identifies
2405              "Refuse to unwind".  We return NULL to fall back
2406              to the prologue analyzer.  */
2407           if (mask == 0)
2408             return NULL;
2409
2410           /* Pop registers r4..r15 under mask.  */
2411           for (i = 0; i < 12; i++)
2412             if (mask & (1 << i))
2413               {
2414                 cache->saved_regs[4 + i].set_addr (vsp);
2415                 vsp += 4;
2416               }
2417
2418           /* Special-case popping SP -- we need to reload vsp.  */
2419           if (mask & (1 << (ARM_SP_REGNUM - 4)))
2420             vsp_valid = 0;
2421         }
2422       else if ((insn & 0xf0) == 0x90)
2423         {
2424           int reg = insn & 0xf;
2425
2426           /* Reserved cases.  */
2427           if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2428             return NULL;
2429
2430           /* Set SP from another register and mark VSP for reload.  */
2431           cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2432           vsp_valid = 0;
2433         }
2434       else if ((insn & 0xf0) == 0xa0)
2435         {
2436           int count = insn & 0x7;
2437           int pop_lr = (insn & 0x8) != 0;
2438           int i;
2439
2440           /* Pop r4..r[4+count].  */
2441           for (i = 0; i <= count; i++)
2442             {
2443               cache->saved_regs[4 + i].set_addr (vsp);
2444               vsp += 4;
2445             }
2446
2447           /* If indicated by flag, pop LR as well.  */
2448           if (pop_lr)
2449             {
2450               cache->saved_regs[ARM_LR_REGNUM].set_addr (vsp);
2451               vsp += 4;
2452             }
2453         }
2454       else if (insn == 0xb0)
2455         {
2456           /* We could only have updated PC by popping into it; if so, it
2457              will show up as address.  Otherwise, copy LR into PC.  */
2458           if (!cache->saved_regs[ARM_PC_REGNUM].is_addr ())
2459             cache->saved_regs[ARM_PC_REGNUM]
2460               = cache->saved_regs[ARM_LR_REGNUM];
2461
2462           /* We're done.  */
2463           break;
2464         }
2465       else if (insn == 0xb1)
2466         {
2467           int mask = *entry++;
2468           int i;
2469
2470           /* All-zero mask and mask >= 16 is "spare".  */
2471           if (mask == 0 || mask >= 16)
2472             return NULL;
2473
2474           /* Pop r0..r3 under mask.  */
2475           for (i = 0; i < 4; i++)
2476             if (mask & (1 << i))
2477               {
2478                 cache->saved_regs[i].set_addr (vsp);
2479                 vsp += 4;
2480               }
2481         }
2482       else if (insn == 0xb2)
2483         {
2484           ULONGEST offset = 0;
2485           unsigned shift = 0;
2486
2487           do
2488             {
2489               offset |= (*entry & 0x7f) << shift;
2490               shift += 7;
2491             }
2492           while (*entry++ & 0x80);
2493
2494           vsp += 0x204 + (offset << 2);
2495         }
2496       else if (insn == 0xb3)
2497         {
2498           int start = *entry >> 4;
2499           int count = (*entry++) & 0xf;
2500           int i;
2501
2502           /* Only registers D0..D15 are valid here.  */
2503           if (start + count >= 16)
2504             return NULL;
2505
2506           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2507           for (i = 0; i <= count; i++)
2508             {
2509               cache->saved_regs[ARM_D0_REGNUM + start + i].set_addr (vsp);
2510               vsp += 8;
2511             }
2512
2513           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2514           vsp += 4;
2515         }
2516       else if ((insn & 0xf8) == 0xb8)
2517         {
2518           int count = insn & 0x7;
2519           int i;
2520
2521           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2522           for (i = 0; i <= count; i++)
2523             {
2524               cache->saved_regs[ARM_D0_REGNUM + 8 + i].set_addr (vsp);
2525               vsp += 8;
2526             }
2527
2528           /* Add an extra 4 bytes for FSTMFDX-style stack.  */
2529           vsp += 4;
2530         }
2531       else if (insn == 0xc6)
2532         {
2533           int start = *entry >> 4;
2534           int count = (*entry++) & 0xf;
2535           int i;
2536
2537           /* Only registers WR0..WR15 are valid.  */
2538           if (start + count >= 16)
2539             return NULL;
2540
2541           /* Pop iwmmx registers WR[start]..WR[start+count].  */
2542           for (i = 0; i <= count; i++)
2543             {
2544               cache->saved_regs[ARM_WR0_REGNUM + start + i].set_addr (vsp);
2545               vsp += 8;
2546             }
2547         }
2548       else if (insn == 0xc7)
2549         {
2550           int mask = *entry++;
2551           int i;
2552
2553           /* All-zero mask and mask >= 16 is "spare".  */
2554           if (mask == 0 || mask >= 16)
2555             return NULL;
2556
2557           /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask.  */
2558           for (i = 0; i < 4; i++)
2559             if (mask & (1 << i))
2560               {
2561                 cache->saved_regs[ARM_WCGR0_REGNUM + i].set_addr (vsp);
2562                 vsp += 4;
2563               }
2564         }
2565       else if ((insn & 0xf8) == 0xc0)
2566         {
2567           int count = insn & 0x7;
2568           int i;
2569
2570           /* Pop iwmmx registers WR[10]..WR[10+count].  */
2571           for (i = 0; i <= count; i++)
2572             {
2573               cache->saved_regs[ARM_WR0_REGNUM + 10 + i].set_addr (vsp);
2574               vsp += 8;
2575             }
2576         }
2577       else if (insn == 0xc8)
2578         {
2579           int start = *entry >> 4;
2580           int count = (*entry++) & 0xf;
2581           int i;
2582
2583           /* Only registers D0..D31 are valid.  */
2584           if (start + count >= 16)
2585             return NULL;
2586
2587           /* Pop VFP double-precision registers
2588              D[16+start]..D[16+start+count].  */
2589           for (i = 0; i <= count; i++)
2590             {
2591               cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].set_addr (vsp);
2592               vsp += 8;
2593             }
2594         }
2595       else if (insn == 0xc9)
2596         {
2597           int start = *entry >> 4;
2598           int count = (*entry++) & 0xf;
2599           int i;
2600
2601           /* Pop VFP double-precision registers D[start]..D[start+count].  */
2602           for (i = 0; i <= count; i++)
2603             {
2604               cache->saved_regs[ARM_D0_REGNUM + start + i].set_addr (vsp);
2605               vsp += 8;
2606             }
2607         }
2608       else if ((insn & 0xf8) == 0xd0)
2609         {
2610           int count = insn & 0x7;
2611           int i;
2612
2613           /* Pop VFP double-precision registers D[8]..D[8+count].  */
2614           for (i = 0; i <= count; i++)
2615             {
2616               cache->saved_regs[ARM_D0_REGNUM + 8 + i].set_addr (vsp);
2617               vsp += 8;
2618             }
2619         }
2620       else
2621         {
2622           /* Everything else is "spare".  */
2623           return NULL;
2624         }
2625     }
2626
2627   /* If we restore SP from a register, assume this was the frame register.
2628      Otherwise just fall back to SP as frame register.  */
2629   if (cache->saved_regs[ARM_SP_REGNUM].is_realreg ())
2630     cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg ();
2631   else
2632     cache->framereg = ARM_SP_REGNUM;
2633
2634   /* Determine offset to previous frame.  */
2635   cache->framesize
2636     = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2637
2638   /* We already got the previous SP.  */
2639   cache->prev_sp = vsp;
2640
2641   return cache;
2642 }
2643
2644 /* Unwinding via ARM exception table entries.  Note that the sniffer
2645    already computes a filled-in prologue cache, which is then used
2646    with the same arm_prologue_this_id and arm_prologue_prev_register
2647    routines also used for prologue-parsing based unwinding.  */
2648
2649 static int
2650 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2651                           struct frame_info *this_frame,
2652                           void **this_prologue_cache)
2653 {
2654   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2655   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2656   CORE_ADDR addr_in_block, exidx_region, func_start;
2657   struct arm_prologue_cache *cache;
2658   gdb_byte *entry;
2659
2660   /* See if we have an ARM exception table entry covering this address.  */
2661   addr_in_block = get_frame_address_in_block (this_frame);
2662   entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2663   if (!entry)
2664     return 0;
2665
2666   /* The ARM exception table does not describe unwind information
2667      for arbitrary PC values, but is guaranteed to be correct only
2668      at call sites.  We have to decide here whether we want to use
2669      ARM exception table information for this frame, or fall back
2670      to using prologue parsing.  (Note that if we have DWARF CFI,
2671      this sniffer isn't even called -- CFI is always preferred.)
2672
2673      Before we make this decision, however, we check whether we
2674      actually have *symbol* information for the current frame.
2675      If not, prologue parsing would not work anyway, so we might
2676      as well use the exception table and hope for the best.  */
2677   if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2678     {
2679       int exc_valid = 0;
2680
2681       /* If the next frame is "normal", we are at a call site in this
2682          frame, so exception information is guaranteed to be valid.  */
2683       if (get_next_frame (this_frame)
2684           && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2685         exc_valid = 1;
2686
2687       /* We also assume exception information is valid if we're currently
2688          blocked in a system call.  The system library is supposed to
2689          ensure this, so that e.g. pthread cancellation works.  */
2690       if (arm_frame_is_thumb (this_frame))
2691         {
2692           ULONGEST insn;
2693
2694           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
2695                                                  2, byte_order_for_code, &insn)
2696               && (insn & 0xff00) == 0xdf00 /* svc */)
2697             exc_valid = 1;
2698         }
2699       else
2700         {
2701           ULONGEST insn;
2702
2703           if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
2704                                                  4, byte_order_for_code, &insn)
2705               && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2706             exc_valid = 1;
2707         }
2708         
2709       /* Bail out if we don't know that exception information is valid.  */
2710       if (!exc_valid)
2711         return 0;
2712
2713      /* The ARM exception index does not mark the *end* of the region
2714         covered by the entry, and some functions will not have any entry.
2715         To correctly recognize the end of the covered region, the linker
2716         should have inserted dummy records with a CANTUNWIND marker.
2717
2718         Unfortunately, current versions of GNU ld do not reliably do
2719         this, and thus we may have found an incorrect entry above.
2720         As a (temporary) sanity check, we only use the entry if it
2721         lies *within* the bounds of the function.  Note that this check
2722         might reject perfectly valid entries that just happen to cover
2723         multiple functions; therefore this check ought to be removed
2724         once the linker is fixed.  */
2725       if (func_start > exidx_region)
2726         return 0;
2727     }
2728
2729   /* Decode the list of unwinding instructions into a prologue cache.
2730      Note that this may fail due to e.g. a "refuse to unwind" code.  */
2731   cache = arm_exidx_fill_cache (this_frame, entry);
2732   if (!cache)
2733     return 0;
2734
2735   *this_prologue_cache = cache;
2736   return 1;
2737 }
2738
2739 struct frame_unwind arm_exidx_unwind = {
2740   NORMAL_FRAME,
2741   default_frame_unwind_stop_reason,
2742   arm_prologue_this_id,
2743   arm_prologue_prev_register,
2744   NULL,
2745   arm_exidx_unwind_sniffer
2746 };
2747
2748 static struct arm_prologue_cache *
2749 arm_make_epilogue_frame_cache (struct frame_info *this_frame)
2750 {
2751   struct arm_prologue_cache *cache;
2752   int reg;
2753
2754   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2755   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2756
2757   /* Still rely on the offset calculated from prologue.  */
2758   arm_scan_prologue (this_frame, cache);
2759
2760   /* Since we are in epilogue, the SP has been restored.  */
2761   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2762
2763   /* Calculate actual addresses of saved registers using offsets
2764      determined by arm_scan_prologue.  */
2765   for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2766     if (cache->saved_regs[reg].is_addr ())
2767       cache->saved_regs[reg].set_addr (cache->saved_regs[reg].addr ()
2768                                        + cache->prev_sp);
2769
2770   return cache;
2771 }
2772
2773 /* Implementation of function hook 'this_id' in
2774    'struct frame_uwnind' for epilogue unwinder.  */
2775
2776 static void
2777 arm_epilogue_frame_this_id (struct frame_info *this_frame,
2778                             void **this_cache,
2779                             struct frame_id *this_id)
2780 {
2781   struct arm_prologue_cache *cache;
2782   CORE_ADDR pc, func;
2783
2784   if (*this_cache == NULL)
2785     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2786   cache = (struct arm_prologue_cache *) *this_cache;
2787
2788   /* Use function start address as part of the frame ID.  If we cannot
2789      identify the start address (due to missing symbol information),
2790      fall back to just using the current PC.  */
2791   pc = get_frame_pc (this_frame);
2792   func = get_frame_func (this_frame);
2793   if (func == 0)
2794     func = pc;
2795
2796   (*this_id) = frame_id_build (cache->prev_sp, pc);
2797 }
2798
2799 /* Implementation of function hook 'prev_register' in
2800    'struct frame_uwnind' for epilogue unwinder.  */
2801
2802 static struct value *
2803 arm_epilogue_frame_prev_register (struct frame_info *this_frame,
2804                                   void **this_cache, int regnum)
2805 {
2806   if (*this_cache == NULL)
2807     *this_cache = arm_make_epilogue_frame_cache (this_frame);
2808
2809   return arm_prologue_prev_register (this_frame, this_cache, regnum);
2810 }
2811
2812 static int arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch,
2813                                           CORE_ADDR pc);
2814 static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
2815                                           CORE_ADDR pc);
2816
2817 /* Implementation of function hook 'sniffer' in
2818    'struct frame_uwnind' for epilogue unwinder.  */
2819
2820 static int
2821 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
2822                             struct frame_info *this_frame,
2823                             void **this_prologue_cache)
2824 {
2825   if (frame_relative_level (this_frame) == 0)
2826     {
2827       struct gdbarch *gdbarch = get_frame_arch (this_frame);
2828       CORE_ADDR pc = get_frame_pc (this_frame);
2829
2830       if (arm_frame_is_thumb (this_frame))
2831         return thumb_stack_frame_destroyed_p (gdbarch, pc);
2832       else
2833         return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
2834     }
2835   else
2836     return 0;
2837 }
2838
2839 /* Frame unwinder from epilogue.  */
2840
2841 static const struct frame_unwind arm_epilogue_frame_unwind =
2842 {
2843   NORMAL_FRAME,
2844   default_frame_unwind_stop_reason,
2845   arm_epilogue_frame_this_id,
2846   arm_epilogue_frame_prev_register,
2847   NULL,
2848   arm_epilogue_frame_sniffer,
2849 };
2850
2851 /* Recognize GCC's trampoline for thumb call-indirect.  If we are in a
2852    trampoline, return the target PC.  Otherwise return 0.
2853
2854    void call0a (char c, short s, int i, long l) {}
2855
2856    int main (void)
2857    {
2858      (*pointer_to_call0a) (c, s, i, l);
2859    }
2860
2861    Instead of calling a stub library function  _call_via_xx (xx is
2862    the register name), GCC may inline the trampoline in the object
2863    file as below (register r2 has the address of call0a).
2864
2865    .global main
2866    .type main, %function
2867    ...
2868    bl .L1
2869    ...
2870    .size main, .-main
2871
2872    .L1:
2873    bx r2
2874
2875    The trampoline 'bx r2' doesn't belong to main.  */
2876
2877 static CORE_ADDR
2878 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2879 {
2880   /* The heuristics of recognizing such trampoline is that FRAME is
2881      executing in Thumb mode and the instruction on PC is 'bx Rm'.  */
2882   if (arm_frame_is_thumb (frame))
2883     {
2884       gdb_byte buf[2];
2885
2886       if (target_read_memory (pc, buf, 2) == 0)
2887         {
2888           struct gdbarch *gdbarch = get_frame_arch (frame);
2889           enum bfd_endian byte_order_for_code
2890             = gdbarch_byte_order_for_code (gdbarch);
2891           uint16_t insn
2892             = extract_unsigned_integer (buf, 2, byte_order_for_code);
2893
2894           if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
2895             {
2896               CORE_ADDR dest
2897                 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2898
2899               /* Clear the LSB so that gdb core sets step-resume
2900                  breakpoint at the right address.  */
2901               return UNMAKE_THUMB_ADDR (dest);
2902             }
2903         }
2904     }
2905
2906   return 0;
2907 }
2908
2909 static struct arm_prologue_cache *
2910 arm_make_stub_cache (struct frame_info *this_frame)
2911 {
2912   struct arm_prologue_cache *cache;
2913
2914   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2915   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2916
2917   cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2918
2919   return cache;
2920 }
2921
2922 /* Our frame ID for a stub frame is the current SP and LR.  */
2923
2924 static void
2925 arm_stub_this_id (struct frame_info *this_frame,
2926                   void **this_cache,
2927                   struct frame_id *this_id)
2928 {
2929   struct arm_prologue_cache *cache;
2930
2931   if (*this_cache == NULL)
2932     *this_cache = arm_make_stub_cache (this_frame);
2933   cache = (struct arm_prologue_cache *) *this_cache;
2934
2935   *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2936 }
2937
2938 static int
2939 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2940                          struct frame_info *this_frame,
2941                          void **this_prologue_cache)
2942 {
2943   CORE_ADDR addr_in_block;
2944   gdb_byte dummy[4];
2945   CORE_ADDR pc, start_addr;
2946   const char *name;
2947
2948   addr_in_block = get_frame_address_in_block (this_frame);
2949   pc = get_frame_pc (this_frame);
2950   if (in_plt_section (addr_in_block)
2951       /* We also use the stub winder if the target memory is unreadable
2952          to avoid having the prologue unwinder trying to read it.  */
2953       || target_read_memory (pc, dummy, 4) != 0)
2954     return 1;
2955
2956   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2957       && arm_skip_bx_reg (this_frame, pc) != 0)
2958     return 1;
2959
2960   return 0;
2961 }
2962
2963 struct frame_unwind arm_stub_unwind = {
2964   NORMAL_FRAME,
2965   default_frame_unwind_stop_reason,
2966   arm_stub_this_id,
2967   arm_prologue_prev_register,
2968   NULL,
2969   arm_stub_unwind_sniffer
2970 };
2971
2972 /* Put here the code to store, into CACHE->saved_regs, the addresses
2973    of the saved registers of frame described by THIS_FRAME.  CACHE is
2974    returned.  */
2975
2976 static struct arm_prologue_cache *
2977 arm_m_exception_cache (struct frame_info *this_frame)
2978 {
2979   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2980   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2981   struct arm_prologue_cache *cache;
2982   CORE_ADDR lr;
2983   CORE_ADDR sp;
2984   CORE_ADDR unwound_sp;
2985   LONGEST xpsr;
2986   uint32_t exc_return;
2987   uint32_t process_stack_used;
2988   uint32_t extended_frame_used;
2989   uint32_t secure_stack_used;
2990
2991   cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2992   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2993
2994   /* ARMv7-M Architecture Reference "B1.5.6 Exception entry behavior"
2995      describes which bits in LR that define which stack was used prior
2996      to the exception and if FPU is used (causing extended stack frame).  */
2997
2998   lr = get_frame_register_unsigned (this_frame, ARM_LR_REGNUM);
2999   sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
3000
3001   /* Check EXC_RETURN indicator bits.  */
3002   exc_return = (((lr >> 28) & 0xf) == 0xf);
3003
3004   /* Check EXC_RETURN bit SPSEL if Main or Thread (process) stack used.  */
3005   process_stack_used = ((lr & (1 << 2)) != 0);
3006   if (exc_return && process_stack_used)
3007     {
3008       /* Thread (process) stack used.
3009          Potentially this could be other register defined by target, but PSP
3010          can be considered a standard name for the "Process Stack Pointer".
3011          To be fully aware of system registers like MSP and PSP, these could
3012          be added to a separate XML arm-m-system-profile that is valid for
3013          ARMv6-M and ARMv7-M architectures. Also to be able to debug eg a
3014          corefile off-line, then these registers must be defined by GDB,
3015          and also be included in the corefile regsets.  */
3016
3017       int psp_regnum = user_reg_map_name_to_regnum (gdbarch, "psp", -1);
3018       if (psp_regnum == -1)
3019         {
3020           /* Thread (process) stack could not be fetched,
3021              give warning and exit.  */
3022
3023           warning (_("no PSP thread stack unwinding supported."));
3024
3025           /* Terminate any further stack unwinding by refer to self.  */
3026           cache->prev_sp = sp;
3027           return cache;
3028         }
3029       else
3030         {
3031           /* Thread (process) stack used, use PSP as SP.  */
3032           unwound_sp = get_frame_register_unsigned (this_frame, psp_regnum);
3033         }
3034     }
3035   else
3036     {
3037       /* Main stack used, use MSP as SP.  */
3038       unwound_sp = sp;
3039     }
3040
3041   /* The hardware saves eight 32-bit words, comprising xPSR,
3042      ReturnAddress, LR (R14), R12, R3, R2, R1, R0.  See details in
3043      "B1.5.6 Exception entry behavior" in
3044      "ARMv7-M Architecture Reference Manual".  */
3045   cache->saved_regs[0].set_addr (unwound_sp);
3046   cache->saved_regs[1].set_addr (unwound_sp + 4);
3047   cache->saved_regs[2].set_addr (unwound_sp + 8);
3048   cache->saved_regs[3].set_addr (unwound_sp + 12);
3049   cache->saved_regs[ARM_IP_REGNUM].set_addr (unwound_sp + 16);
3050   cache->saved_regs[ARM_LR_REGNUM].set_addr (unwound_sp + 20);
3051   cache->saved_regs[ARM_PC_REGNUM].set_addr (unwound_sp + 24);
3052   cache->saved_regs[ARM_PS_REGNUM].set_addr (unwound_sp + 28);
3053
3054   /* Check EXC_RETURN bit FTYPE if extended stack frame (FPU regs stored)
3055      type used.  */
3056   extended_frame_used = ((lr & (1 << 4)) == 0);
3057   if (exc_return && extended_frame_used)
3058     {
3059       int i;
3060       int fpu_regs_stack_offset;
3061
3062       /* This code does not take into account the lazy stacking, see "Lazy
3063          context save of FP state", in B1.5.7, also ARM AN298, supported
3064          by Cortex-M4F architecture.
3065          To fully handle this the FPCCR register (Floating-point Context
3066          Control Register) needs to be read out and the bits ASPEN and LSPEN
3067          could be checked to setup correct lazy stacked FP registers.
3068          This register is located at address 0xE000EF34.  */
3069
3070       /* Extended stack frame type used.  */
3071       fpu_regs_stack_offset = unwound_sp + 0x20;
3072       for (i = 0; i < 16; i++)
3073         {
3074           cache->saved_regs[ARM_D0_REGNUM + i].set_addr (fpu_regs_stack_offset);
3075           fpu_regs_stack_offset += 4;
3076         }
3077       cache->saved_regs[ARM_FPSCR_REGNUM].set_addr (unwound_sp + 0x60);
3078
3079       /* Offset 0x64 is reserved.  */
3080       cache->prev_sp = unwound_sp + 0x68;
3081     }
3082   else
3083     {
3084       /* Standard stack frame type used.  */
3085       cache->prev_sp = unwound_sp + 0x20;
3086     }
3087
3088   /* Check EXC_RETURN bit S if Secure or Non-secure stack used.  */
3089   secure_stack_used = ((lr & (1 << 6)) != 0);
3090   if (exc_return && secure_stack_used)
3091     {
3092       /* ARMv8-M Exception and interrupt handling is not considered here.
3093          In the ARMv8-M architecture also EXC_RETURN bit S is controlling if
3094          the Secure or Non-secure stack was used. To separate Secure and
3095          Non-secure stacks, processors that are based on the ARMv8-M
3096          architecture support 4 stack pointers: MSP_S, PSP_S, MSP_NS, PSP_NS.
3097          In addition, a stack limit feature is provided using stack limit
3098          registers (accessible using MSR and MRS instructions) in Privileged
3099          level.  */
3100     }
3101
3102   /* If bit 9 of the saved xPSR is set, then there is a four-byte
3103      aligner between the top of the 32-byte stack frame and the
3104      previous context's stack pointer.  */
3105   if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
3106       && (xpsr & (1 << 9)) != 0)
3107     cache->prev_sp += 4;
3108
3109   return cache;
3110 }
3111
3112 /* Implementation of function hook 'this_id' in
3113    'struct frame_uwnind'.  */
3114
3115 static void
3116 arm_m_exception_this_id (struct frame_info *this_frame,
3117                          void **this_cache,
3118                          struct frame_id *this_id)
3119 {
3120   struct arm_prologue_cache *cache;
3121
3122   if (*this_cache == NULL)
3123     *this_cache = arm_m_exception_cache (this_frame);
3124   cache = (struct arm_prologue_cache *) *this_cache;
3125
3126   /* Our frame ID for a stub frame is the current SP and LR.  */
3127   *this_id = frame_id_build (cache->prev_sp,
3128                              get_frame_pc (this_frame));
3129 }
3130
3131 /* Implementation of function hook 'prev_register' in
3132    'struct frame_uwnind'.  */
3133
3134 static struct value *
3135 arm_m_exception_prev_register (struct frame_info *this_frame,
3136                                void **this_cache,
3137                                int prev_regnum)
3138 {
3139   struct arm_prologue_cache *cache;
3140
3141   if (*this_cache == NULL)
3142     *this_cache = arm_m_exception_cache (this_frame);
3143   cache = (struct arm_prologue_cache *) *this_cache;
3144
3145   /* The value was already reconstructed into PREV_SP.  */
3146   if (prev_regnum == ARM_SP_REGNUM)
3147     return frame_unwind_got_constant (this_frame, prev_regnum,
3148                                       cache->prev_sp);
3149
3150   return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3151                                        prev_regnum);
3152 }
3153
3154 /* Implementation of function hook 'sniffer' in
3155    'struct frame_uwnind'.  */
3156
3157 static int
3158 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3159                                 struct frame_info *this_frame,
3160                                 void **this_prologue_cache)
3161 {
3162   CORE_ADDR this_pc = get_frame_pc (this_frame);
3163
3164   /* No need to check is_m; this sniffer is only registered for
3165      M-profile architectures.  */
3166
3167   /* Check if exception frame returns to a magic PC value.  */
3168   return arm_m_addr_is_magic (this_pc);
3169 }
3170
3171 /* Frame unwinder for M-profile exceptions.  */
3172
3173 struct frame_unwind arm_m_exception_unwind =
3174 {
3175   SIGTRAMP_FRAME,
3176   default_frame_unwind_stop_reason,
3177   arm_m_exception_this_id,
3178   arm_m_exception_prev_register,
3179   NULL,
3180   arm_m_exception_unwind_sniffer
3181 };
3182
3183 static CORE_ADDR
3184 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3185 {
3186   struct arm_prologue_cache *cache;
3187
3188   if (*this_cache == NULL)
3189     *this_cache = arm_make_prologue_cache (this_frame);
3190   cache = (struct arm_prologue_cache *) *this_cache;
3191
3192   return cache->prev_sp - cache->framesize;
3193 }
3194
3195 struct frame_base arm_normal_base = {
3196   &arm_prologue_unwind,
3197   arm_normal_frame_base,
3198   arm_normal_frame_base,
3199   arm_normal_frame_base
3200 };
3201
3202 static struct value *
3203 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3204                           int regnum)
3205 {
3206   struct gdbarch * gdbarch = get_frame_arch (this_frame);
3207   CORE_ADDR lr, cpsr;
3208   ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3209
3210   switch (regnum)
3211     {
3212     case ARM_PC_REGNUM:
3213       /* The PC is normally copied from the return column, which
3214          describes saves of LR.  However, that version may have an
3215          extra bit set to indicate Thumb state.  The bit is not
3216          part of the PC.  */
3217       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3218       return frame_unwind_got_constant (this_frame, regnum,
3219                                         arm_addr_bits_remove (gdbarch, lr));
3220
3221     case ARM_PS_REGNUM:
3222       /* Reconstruct the T bit; see arm_prologue_prev_register for details.  */
3223       cpsr = get_frame_register_unsigned (this_frame, regnum);
3224       lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3225       if (IS_THUMB_ADDR (lr))
3226         cpsr |= t_bit;
3227       else
3228         cpsr &= ~t_bit;
3229       return frame_unwind_got_constant (this_frame, regnum, cpsr);
3230
3231     default:
3232       internal_error (__FILE__, __LINE__,
3233                       _("Unexpected register %d"), regnum);
3234     }
3235 }
3236
3237 static void
3238 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3239                            struct dwarf2_frame_state_reg *reg,
3240                            struct frame_info *this_frame)
3241 {
3242   switch (regnum)
3243     {
3244     case ARM_PC_REGNUM:
3245     case ARM_PS_REGNUM:
3246       reg->how = DWARF2_FRAME_REG_FN;
3247       reg->loc.fn = arm_dwarf2_prev_register;
3248       break;
3249     case ARM_SP_REGNUM:
3250       reg->how = DWARF2_FRAME_REG_CFA;
3251       break;
3252     }
3253 }
3254
3255 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3256
3257 static int
3258 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3259 {
3260   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3261   unsigned int insn, insn2;
3262   int found_return = 0, found_stack_adjust = 0;
3263   CORE_ADDR func_start, func_end;
3264   CORE_ADDR scan_pc;
3265   gdb_byte buf[4];
3266
3267   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3268     return 0;
3269
3270   /* The epilogue is a sequence of instructions along the following lines:
3271
3272     - add stack frame size to SP or FP
3273     - [if frame pointer used] restore SP from FP
3274     - restore registers from SP [may include PC]
3275     - a return-type instruction [if PC wasn't already restored]
3276
3277     In a first pass, we scan forward from the current PC and verify the
3278     instructions we find as compatible with this sequence, ending in a
3279     return instruction.
3280
3281     However, this is not sufficient to distinguish indirect function calls
3282     within a function from indirect tail calls in the epilogue in some cases.
3283     Therefore, if we didn't already find any SP-changing instruction during
3284     forward scan, we add a backward scanning heuristic to ensure we actually
3285     are in the epilogue.  */
3286
3287   scan_pc = pc;
3288   while (scan_pc < func_end && !found_return)
3289     {
3290       if (target_read_memory (scan_pc, buf, 2))
3291         break;
3292
3293       scan_pc += 2;
3294       insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3295
3296       if ((insn & 0xff80) == 0x4700)  /* bx <Rm> */
3297         found_return = 1;
3298       else if (insn == 0x46f7)  /* mov pc, lr */
3299         found_return = 1;
3300       else if (thumb_instruction_restores_sp (insn))
3301         {
3302           if ((insn & 0xff00) == 0xbd00)  /* pop <registers, PC> */
3303             found_return = 1;
3304         }
3305       else if (thumb_insn_size (insn) == 4)  /* 32-bit Thumb-2 instruction */
3306         {
3307           if (target_read_memory (scan_pc, buf, 2))
3308             break;
3309
3310           scan_pc += 2;
3311           insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3312
3313           if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3314             {
3315               if (insn2 & 0x8000)  /* <registers> include PC.  */
3316                 found_return = 1;
3317             }
3318           else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3319                    && (insn2 & 0x0fff) == 0x0b04)
3320             {
3321               if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC.  */
3322                 found_return = 1;
3323             }
3324           else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3325                    && (insn2 & 0x0e00) == 0x0a00)
3326             ;
3327           else
3328             break;
3329         }
3330       else
3331         break;
3332     }
3333
3334   if (!found_return)
3335     return 0;
3336
3337   /* Since any instruction in the epilogue sequence, with the possible
3338      exception of return itself, updates the stack pointer, we need to
3339      scan backwards for at most one instruction.  Try either a 16-bit or
3340      a 32-bit instruction.  This is just a heuristic, so we do not worry
3341      too much about false positives.  */
3342
3343   if (pc - 4 < func_start)
3344     return 0;
3345   if (target_read_memory (pc - 4, buf, 4))
3346     return 0;
3347
3348   insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3349   insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3350
3351   if (thumb_instruction_restores_sp (insn2))
3352     found_stack_adjust = 1;
3353   else if (insn == 0xe8bd)  /* ldm.w sp!, <registers> */
3354     found_stack_adjust = 1;
3355   else if (insn == 0xf85d  /* ldr.w <Rt>, [sp], #4 */
3356            && (insn2 & 0x0fff) == 0x0b04)
3357     found_stack_adjust = 1;
3358   else if ((insn & 0xffbf) == 0xecbd  /* vldm sp!, <list> */
3359            && (insn2 & 0x0e00) == 0x0a00)
3360     found_stack_adjust = 1;
3361
3362   return found_stack_adjust;
3363 }
3364
3365 static int
3366 arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
3367 {
3368   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3369   unsigned int insn;
3370   int found_return;
3371   CORE_ADDR func_start, func_end;
3372
3373   if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3374     return 0;
3375
3376   /* We are in the epilogue if the previous instruction was a stack
3377      adjustment and the next instruction is a possible return (bx, mov
3378      pc, or pop).  We could have to scan backwards to find the stack
3379      adjustment, or forwards to find the return, but this is a decent
3380      approximation.  First scan forwards.  */
3381
3382   found_return = 0;
3383   insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3384   if (bits (insn, 28, 31) != INST_NV)
3385     {
3386       if ((insn & 0x0ffffff0) == 0x012fff10)
3387         /* BX.  */
3388         found_return = 1;
3389       else if ((insn & 0x0ffffff0) == 0x01a0f000)
3390         /* MOV PC.  */
3391         found_return = 1;
3392       else if ((insn & 0x0fff0000) == 0x08bd0000
3393           && (insn & 0x0000c000) != 0)
3394         /* POP (LDMIA), including PC or LR.  */
3395         found_return = 1;
3396     }
3397
3398   if (!found_return)
3399     return 0;
3400
3401   /* Scan backwards.  This is just a heuristic, so do not worry about
3402      false positives from mode changes.  */
3403
3404   if (pc < func_start + 4)
3405     return 0;
3406
3407   insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3408   if (arm_instruction_restores_sp (insn))
3409     return 1;
3410
3411   return 0;
3412 }
3413
3414 /* Implement the stack_frame_destroyed_p gdbarch method.  */
3415
3416 static int
3417 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3418 {
3419   if (arm_pc_is_thumb (gdbarch, pc))
3420     return thumb_stack_frame_destroyed_p (gdbarch, pc);
3421   else
3422     return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
3423 }
3424
3425 /* When arguments must be pushed onto the stack, they go on in reverse
3426    order.  The code below implements a FILO (stack) to do this.  */
3427
3428 struct stack_item
3429 {
3430   int len;
3431   struct stack_item *prev;
3432   gdb_byte *data;
3433 };
3434
3435 static struct stack_item *
3436 push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
3437 {
3438   struct stack_item *si;
3439   si = XNEW (struct stack_item);
3440   si->data = (gdb_byte *) xmalloc (len);
3441   si->len = len;
3442   si->prev = prev;
3443   memcpy (si->data, contents, len);
3444   return si;
3445 }
3446
3447 static struct stack_item *
3448 pop_stack_item (struct stack_item *si)
3449 {
3450   struct stack_item *dead = si;
3451   si = si->prev;
3452   xfree (dead->data);
3453   xfree (dead);
3454   return si;
3455 }
3456
3457 /* Implement the gdbarch type alignment method, overrides the generic
3458    alignment algorithm for anything that is arm specific.  */
3459
3460 static ULONGEST
3461 arm_type_align (gdbarch *gdbarch, struct type *t)
3462 {
3463   t = check_typedef (t);
3464   if (t->code () == TYPE_CODE_ARRAY && t->is_vector ())
3465     {
3466       /* Use the natural alignment for vector types (the same for
3467          scalar type), but the maximum alignment is 64-bit.  */
3468       if (TYPE_LENGTH (t) > 8)
3469         return 8;
3470       else
3471         return TYPE_LENGTH (t);
3472     }
3473
3474   /* Allow the common code to calculate the alignment.  */
3475   return 0;
3476 }
3477
3478 /* Possible base types for a candidate for passing and returning in
3479    VFP registers.  */
3480
3481 enum arm_vfp_cprc_base_type
3482 {
3483   VFP_CPRC_UNKNOWN,
3484   VFP_CPRC_SINGLE,
3485   VFP_CPRC_DOUBLE,
3486   VFP_CPRC_VEC64,
3487   VFP_CPRC_VEC128
3488 };
3489
3490 /* The length of one element of base type B.  */
3491
3492 static unsigned
3493 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3494 {
3495   switch (b)
3496     {
3497     case VFP_CPRC_SINGLE:
3498       return 4;
3499     case VFP_CPRC_DOUBLE:
3500       return 8;
3501     case VFP_CPRC_VEC64:
3502       return 8;
3503     case VFP_CPRC_VEC128:
3504       return 16;
3505     default:
3506       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3507                       (int) b);
3508     }
3509 }
3510
3511 /* The character ('s', 'd' or 'q') for the type of VFP register used
3512    for passing base type B.  */
3513
3514 static int
3515 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3516 {
3517   switch (b)
3518     {
3519     case VFP_CPRC_SINGLE:
3520       return 's';
3521     case VFP_CPRC_DOUBLE:
3522       return 'd';
3523     case VFP_CPRC_VEC64:
3524       return 'd';
3525     case VFP_CPRC_VEC128:
3526       return 'q';
3527     default:
3528       internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3529                       (int) b);
3530     }
3531 }
3532
3533 /* Determine whether T may be part of a candidate for passing and
3534    returning in VFP registers, ignoring the limit on the total number
3535    of components.  If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3536    classification of the first valid component found; if it is not
3537    VFP_CPRC_UNKNOWN, all components must have the same classification
3538    as *BASE_TYPE.  If it is found that T contains a type not permitted
3539    for passing and returning in VFP registers, a type differently
3540    classified from *BASE_TYPE, or two types differently classified
3541    from each other, return -1, otherwise return the total number of
3542    base-type elements found (possibly 0 in an empty structure or
3543    array).  Vector types are not currently supported, matching the
3544    generic AAPCS support.  */
3545
3546 static int
3547 arm_vfp_cprc_sub_candidate (struct type *t,
3548                             enum arm_vfp_cprc_base_type *base_type)
3549 {
3550   t = check_typedef (t);
3551   switch (t->code ())
3552     {
3553     case TYPE_CODE_FLT:
3554       switch (TYPE_LENGTH (t))
3555         {
3556         case 4:
3557           if (*base_type == VFP_CPRC_UNKNOWN)
3558             *base_type = VFP_CPRC_SINGLE;
3559           else if (*base_type != VFP_CPRC_SINGLE)
3560             return -1;
3561           return 1;
3562
3563         case 8:
3564           if (*base_type == VFP_CPRC_UNKNOWN)
3565             *base_type = VFP_CPRC_DOUBLE;
3566           else if (*base_type != VFP_CPRC_DOUBLE)
3567             return -1;
3568           return 1;
3569
3570         default:
3571           return -1;
3572         }
3573       break;
3574
3575     case TYPE_CODE_COMPLEX:
3576       /* Arguments of complex T where T is one of the types float or
3577          double get treated as if they are implemented as:
3578
3579          struct complexT
3580          {
3581            T real;
3582            T imag;
3583          };
3584
3585       */
3586       switch (TYPE_LENGTH (t))
3587         {
3588         case 8:
3589           if (*base_type == VFP_CPRC_UNKNOWN)
3590             *base_type = VFP_CPRC_SINGLE;
3591           else if (*base_type != VFP_CPRC_SINGLE)
3592             return -1;
3593           return 2;
3594
3595         case 16:
3596           if (*base_type == VFP_CPRC_UNKNOWN)
3597             *base_type = VFP_CPRC_DOUBLE;
3598           else if (*base_type != VFP_CPRC_DOUBLE)
3599             return -1;
3600           return 2;
3601
3602         default:
3603           return -1;
3604         }
3605       break;
3606
3607     case TYPE_CODE_ARRAY:
3608       {
3609         if (t->is_vector ())
3610           {
3611             /* A 64-bit or 128-bit containerized vector type are VFP
3612                CPRCs.  */
3613             switch (TYPE_LENGTH (t))
3614               {
3615               case 8:
3616                 if (*base_type == VFP_CPRC_UNKNOWN)
3617                   *base_type = VFP_CPRC_VEC64;
3618                 return 1;
3619               case 16:
3620                 if (*base_type == VFP_CPRC_UNKNOWN)
3621                   *base_type = VFP_CPRC_VEC128;
3622                 return 1;
3623               default:
3624                 return -1;
3625               }
3626           }
3627         else
3628           {
3629             int count;
3630             unsigned unitlen;
3631
3632             count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
3633                                                 base_type);
3634             if (count == -1)
3635               return -1;
3636             if (TYPE_LENGTH (t) == 0)
3637               {
3638                 gdb_assert (count == 0);
3639                 return 0;
3640               }
3641             else if (count == 0)
3642               return -1;
3643             unitlen = arm_vfp_cprc_unit_length (*base_type);
3644             gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3645             return TYPE_LENGTH (t) / unitlen;
3646           }
3647       }
3648       break;
3649
3650     case TYPE_CODE_STRUCT:
3651       {
3652         int count = 0;
3653         unsigned unitlen;
3654         int i;
3655         for (i = 0; i < t->num_fields (); i++)
3656           {
3657             int sub_count = 0;
3658
3659             if (!field_is_static (&t->field (i)))
3660               sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (),
3661                                                       base_type);
3662             if (sub_count == -1)
3663               return -1;
3664             count += sub_count;
3665           }
3666         if (TYPE_LENGTH (t) == 0)
3667           {
3668             gdb_assert (count == 0);
3669             return 0;
3670           }
3671         else if (count == 0)
3672           return -1;
3673         unitlen = arm_vfp_cprc_unit_length (*base_type);
3674         if (TYPE_LENGTH (t) != unitlen * count)
3675           return -1;
3676         return count;
3677       }
3678
3679     case TYPE_CODE_UNION:
3680       {
3681         int count = 0;
3682         unsigned unitlen;
3683         int i;
3684         for (i = 0; i < t->num_fields (); i++)
3685           {
3686             int sub_count = arm_vfp_cprc_sub_candidate (t->field (i).type (),
3687                                                         base_type);
3688             if (sub_count == -1)
3689               return -1;
3690             count = (count > sub_count ? count : sub_count);
3691           }
3692         if (TYPE_LENGTH (t) == 0)
3693           {
3694             gdb_assert (count == 0);
3695             return 0;
3696           }
3697         else if (count == 0)
3698           return -1;
3699         unitlen = arm_vfp_cprc_unit_length (*base_type);
3700         if (TYPE_LENGTH (t) != unitlen * count)
3701           return -1;
3702         return count;
3703       }
3704
3705     default:
3706       break;
3707     }
3708
3709   return -1;
3710 }
3711
3712 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3713    if passed to or returned from a non-variadic function with the VFP
3714    ABI in effect.  Return 1 if it is, 0 otherwise.  If it is, set
3715    *BASE_TYPE to the base type for T and *COUNT to the number of
3716    elements of that base type before returning.  */
3717
3718 static int
3719 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3720                         int *count)
3721 {
3722   enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3723   int c = arm_vfp_cprc_sub_candidate (t, &b);
3724   if (c <= 0 || c > 4)
3725     return 0;
3726   *base_type = b;
3727   *count = c;
3728   return 1;
3729 }
3730
3731 /* Return 1 if the VFP ABI should be used for passing arguments to and
3732    returning values from a function of type FUNC_TYPE, 0
3733    otherwise.  */
3734
3735 static int
3736 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3737 {
3738   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3739   /* Variadic functions always use the base ABI.  Assume that functions
3740      without debug info are not variadic.  */
3741   if (func_type && check_typedef (func_type)->has_varargs ())
3742     return 0;
3743   /* The VFP ABI is only supported as a variant of AAPCS.  */
3744   if (tdep->arm_abi != ARM_ABI_AAPCS)
3745     return 0;
3746   return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3747 }
3748
3749 /* We currently only support passing parameters in integer registers, which
3750    conforms with GCC's default model, and VFP argument passing following
3751    the VFP variant of AAPCS.  Several other variants exist and
3752    we should probably support some of them based on the selected ABI.  */
3753
3754 static CORE_ADDR
3755 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3756                      struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3757                      struct value **args, CORE_ADDR sp,
3758                      function_call_return_method return_method,
3759                      CORE_ADDR struct_addr)
3760 {
3761   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3762   int argnum;
3763   int argreg;
3764   int nstack;
3765   struct stack_item *si = NULL;
3766   int use_vfp_abi;
3767   struct type *ftype;
3768   unsigned vfp_regs_free = (1 << 16) - 1;
3769
3770   /* Determine the type of this function and whether the VFP ABI
3771      applies.  */
3772   ftype = check_typedef (value_type (function));
3773   if (ftype->code () == TYPE_CODE_PTR)
3774     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3775   use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3776
3777   /* Set the return address.  For the ARM, the return breakpoint is
3778      always at BP_ADDR.  */
3779   if (arm_pc_is_thumb (gdbarch, bp_addr))
3780     bp_addr |= 1;
3781   regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3782
3783   /* Walk through the list of args and determine how large a temporary
3784      stack is required.  Need to take care here as structs may be
3785      passed on the stack, and we have to push them.  */
3786   nstack = 0;
3787
3788   argreg = ARM_A1_REGNUM;
3789   nstack = 0;
3790
3791   /* The struct_return pointer occupies the first parameter
3792      passing register.  */
3793   if (return_method == return_method_struct)
3794     {
3795       arm_debug_printf ("struct return in %s = %s",
3796                         gdbarch_register_name (gdbarch, argreg),
3797                         paddress (gdbarch, struct_addr));
3798
3799       regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3800       argreg++;
3801     }
3802
3803   for (argnum = 0; argnum < nargs; argnum++)
3804     {
3805       int len;
3806       struct type *arg_type;
3807       struct type *target_type;
3808       enum type_code typecode;
3809       const bfd_byte *val;
3810       int align;
3811       enum arm_vfp_cprc_base_type vfp_base_type;
3812       int vfp_base_count;
3813       int may_use_core_reg = 1;
3814
3815       arg_type = check_typedef (value_type (args[argnum]));
3816       len = TYPE_LENGTH (arg_type);
3817       target_type = TYPE_TARGET_TYPE (arg_type);
3818       typecode = arg_type->code ();
3819       val = value_contents (args[argnum]);
3820
3821       align = type_align (arg_type);
3822       /* Round alignment up to a whole number of words.  */
3823       align = (align + ARM_INT_REGISTER_SIZE - 1)
3824                 & ~(ARM_INT_REGISTER_SIZE - 1);
3825       /* Different ABIs have different maximum alignments.  */
3826       if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3827         {
3828           /* The APCS ABI only requires word alignment.  */
3829           align = ARM_INT_REGISTER_SIZE;
3830         }
3831       else
3832         {
3833           /* The AAPCS requires at most doubleword alignment.  */
3834           if (align > ARM_INT_REGISTER_SIZE * 2)
3835             align = ARM_INT_REGISTER_SIZE * 2;
3836         }
3837
3838       if (use_vfp_abi
3839           && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3840                                      &vfp_base_count))
3841         {
3842           int regno;
3843           int unit_length;
3844           int shift;
3845           unsigned mask;
3846
3847           /* Because this is a CPRC it cannot go in a core register or
3848              cause a core register to be skipped for alignment.
3849              Either it goes in VFP registers and the rest of this loop
3850              iteration is skipped for this argument, or it goes on the
3851              stack (and the stack alignment code is correct for this
3852              case).  */
3853           may_use_core_reg = 0;
3854
3855           unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3856           shift = unit_length / 4;
3857           mask = (1 << (shift * vfp_base_count)) - 1;
3858           for (regno = 0; regno < 16; regno += shift)
3859             if (((vfp_regs_free >> regno) & mask) == mask)
3860               break;
3861
3862           if (regno < 16)
3863             {
3864               int reg_char;
3865               int reg_scaled;
3866               int i;
3867
3868               vfp_regs_free &= ~(mask << regno);
3869               reg_scaled = regno / shift;
3870               reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3871               for (i = 0; i < vfp_base_count; i++)
3872                 {
3873                   char name_buf[4];
3874                   int regnum;
3875                   if (reg_char == 'q')
3876                     arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3877                                          val + i * unit_length);
3878                   else
3879                     {
3880                       xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3881                                  reg_char, reg_scaled + i);
3882                       regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3883                                                             strlen (name_buf));
3884                       regcache->cooked_write (regnum, val + i * unit_length);
3885                     }
3886                 }
3887               continue;
3888             }
3889           else
3890             {
3891               /* This CPRC could not go in VFP registers, so all VFP
3892                  registers are now marked as used.  */
3893               vfp_regs_free = 0;
3894             }
3895         }
3896
3897       /* Push stack padding for doubleword alignment.  */
3898       if (nstack & (align - 1))
3899         {
3900           si = push_stack_item (si, val, ARM_INT_REGISTER_SIZE);
3901           nstack += ARM_INT_REGISTER_SIZE;
3902         }
3903       
3904       /* Doubleword aligned quantities must go in even register pairs.  */
3905       if (may_use_core_reg
3906           && argreg <= ARM_LAST_ARG_REGNUM
3907           && align > ARM_INT_REGISTER_SIZE
3908           && argreg & 1)
3909         argreg++;
3910
3911       /* If the argument is a pointer to a function, and it is a
3912          Thumb function, create a LOCAL copy of the value and set
3913          the THUMB bit in it.  */
3914       if (TYPE_CODE_PTR == typecode
3915           && target_type != NULL
3916           && TYPE_CODE_FUNC == check_typedef (target_type)->code ())
3917         {
3918           CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3919           if (arm_pc_is_thumb (gdbarch, regval))
3920             {
3921               bfd_byte *copy = (bfd_byte *) alloca (len);
3922               store_unsigned_integer (copy, len, byte_order,
3923                                       MAKE_THUMB_ADDR (regval));
3924               val = copy;
3925             }
3926         }
3927
3928       /* Copy the argument to general registers or the stack in
3929          register-sized pieces.  Large arguments are split between
3930          registers and stack.  */
3931       while (len > 0)
3932         {
3933           int partial_len = len < ARM_INT_REGISTER_SIZE
3934                             ? len : ARM_INT_REGISTER_SIZE;
3935           CORE_ADDR regval
3936             = extract_unsigned_integer (val, partial_len, byte_order);
3937
3938           if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3939             {
3940               /* The argument is being passed in a general purpose
3941                  register.  */
3942               if (byte_order == BFD_ENDIAN_BIG)
3943                 regval <<= (ARM_INT_REGISTER_SIZE - partial_len) * 8;
3944
3945               arm_debug_printf ("arg %d in %s = 0x%s", argnum,
3946                                 gdbarch_register_name (gdbarch, argreg),
3947                                 phex (regval, ARM_INT_REGISTER_SIZE));
3948
3949               regcache_cooked_write_unsigned (regcache, argreg, regval);
3950               argreg++;
3951             }
3952           else
3953             {
3954               gdb_byte buf[ARM_INT_REGISTER_SIZE];
3955
3956               memset (buf, 0, sizeof (buf));
3957               store_unsigned_integer (buf, partial_len, byte_order, regval);
3958
3959               /* Push the arguments onto the stack.  */
3960               arm_debug_printf ("arg %d @ sp + %d", argnum, nstack);
3961               si = push_stack_item (si, buf, ARM_INT_REGISTER_SIZE);
3962               nstack += ARM_INT_REGISTER_SIZE;
3963             }
3964               
3965           len -= partial_len;
3966           val += partial_len;
3967         }
3968     }
3969   /* If we have an odd number of words to push, then decrement the stack
3970      by one word now, so first stack argument will be dword aligned.  */
3971   if (nstack & 4)
3972     sp -= 4;
3973
3974   while (si)
3975     {
3976       sp -= si->len;
3977       write_memory (sp, si->data, si->len);
3978       si = pop_stack_item (si);
3979     }
3980
3981   /* Finally, update teh SP register.  */
3982   regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3983
3984   return sp;
3985 }
3986
3987
3988 /* Always align the frame to an 8-byte boundary.  This is required on
3989    some platforms and harmless on the rest.  */
3990
3991 static CORE_ADDR
3992 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3993 {
3994   /* Align the stack to eight bytes.  */
3995   return sp & ~ (CORE_ADDR) 7;
3996 }
3997
3998 static void
3999 print_fpu_flags (struct ui_file *file, int flags)
4000 {
4001   if (flags & (1 << 0))
4002     fputs_filtered ("IVO ", file);
4003   if (flags & (1 << 1))
4004     fputs_filtered ("DVZ ", file);
4005   if (flags & (1 << 2))
4006     fputs_filtered ("OFL ", file);
4007   if (flags & (1 << 3))
4008     fputs_filtered ("UFL ", file);
4009   if (flags & (1 << 4))
4010     fputs_filtered ("INX ", file);
4011   fputc_filtered ('\n', file);
4012 }
4013
4014 /* Print interesting information about the floating point processor
4015    (if present) or emulator.  */
4016 static void
4017 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
4018                       struct frame_info *frame, const char *args)
4019 {
4020   unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
4021   int type;
4022
4023   type = (status >> 24) & 127;
4024   if (status & (1 << 31))
4025     fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
4026   else
4027     fprintf_filtered (file, _("Software FPU type %d\n"), type);
4028   /* i18n: [floating point unit] mask */
4029   fputs_filtered (_("mask: "), file);
4030   print_fpu_flags (file, status >> 16);
4031   /* i18n: [floating point unit] flags */
4032   fputs_filtered (_("flags: "), file);
4033   print_fpu_flags (file, status);
4034 }
4035
4036 /* Construct the ARM extended floating point type.  */
4037 static struct type *
4038 arm_ext_type (struct gdbarch *gdbarch)
4039 {
4040   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4041
4042   if (!tdep->arm_ext_type)
4043     tdep->arm_ext_type
4044       = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
4045                          floatformats_arm_ext);
4046
4047   return tdep->arm_ext_type;
4048 }
4049
4050 static struct type *
4051 arm_neon_double_type (struct gdbarch *gdbarch)
4052 {
4053   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4054
4055   if (tdep->neon_double_type == NULL)
4056     {
4057       struct type *t, *elem;
4058
4059       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
4060                                TYPE_CODE_UNION);
4061       elem = builtin_type (gdbarch)->builtin_uint8;
4062       append_composite_type_field (t, "u8", init_vector_type (elem, 8));
4063       elem = builtin_type (gdbarch)->builtin_uint16;
4064       append_composite_type_field (t, "u16", init_vector_type (elem, 4));
4065       elem = builtin_type (gdbarch)->builtin_uint32;
4066       append_composite_type_field (t, "u32", init_vector_type (elem, 2));
4067       elem = builtin_type (gdbarch)->builtin_uint64;
4068       append_composite_type_field (t, "u64", elem);
4069       elem = builtin_type (gdbarch)->builtin_float;
4070       append_composite_type_field (t, "f32", init_vector_type (elem, 2));
4071       elem = builtin_type (gdbarch)->builtin_double;
4072       append_composite_type_field (t, "f64", elem);
4073
4074       t->set_is_vector (true);
4075       t->set_name ("neon_d");
4076       tdep->neon_double_type = t;
4077     }
4078
4079   return tdep->neon_double_type;
4080 }
4081
4082 /* FIXME: The vector types are not correctly ordered on big-endian
4083    targets.  Just as s0 is the low bits of d0, d0[0] is also the low
4084    bits of d0 - regardless of what unit size is being held in d0.  So
4085    the offset of the first uint8 in d0 is 7, but the offset of the
4086    first float is 4.  This code works as-is for little-endian
4087    targets.  */
4088
4089 static struct type *
4090 arm_neon_quad_type (struct gdbarch *gdbarch)
4091 {
4092   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4093
4094   if (tdep->neon_quad_type == NULL)
4095     {
4096       struct type *t, *elem;
4097
4098       t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
4099                                TYPE_CODE_UNION);
4100       elem = builtin_type (gdbarch)->builtin_uint8;
4101       append_composite_type_field (t, "u8", init_vector_type (elem, 16));
4102       elem = builtin_type (gdbarch)->builtin_uint16;
4103       append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4104       elem = builtin_type (gdbarch)->builtin_uint32;
4105       append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4106       elem = builtin_type (gdbarch)->builtin_uint64;
4107       append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4108       elem = builtin_type (gdbarch)->builtin_float;
4109       append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4110       elem = builtin_type (gdbarch)->builtin_double;
4111       append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4112
4113       t->set_is_vector (true);
4114       t->set_name ("neon_q");
4115       tdep->neon_quad_type = t;
4116     }
4117
4118   return tdep->neon_quad_type;
4119 }
4120
4121 /* Return the GDB type object for the "standard" data type of data in
4122    register N.  */
4123
4124 static struct type *
4125 arm_register_type (struct gdbarch *gdbarch, int regnum)
4126 {
4127   int num_regs = gdbarch_num_regs (gdbarch);
4128
4129   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4130       && regnum >= num_regs && regnum < num_regs + 32)
4131     return builtin_type (gdbarch)->builtin_float;
4132
4133   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4134       && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4135     return arm_neon_quad_type (gdbarch);
4136
4137   /* If the target description has register information, we are only
4138      in this function so that we can override the types of
4139      double-precision registers for NEON.  */
4140   if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4141     {
4142       struct type *t = tdesc_register_type (gdbarch, regnum);
4143
4144       if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4145           && t->code () == TYPE_CODE_FLT
4146           && gdbarch_tdep (gdbarch)->have_neon)
4147         return arm_neon_double_type (gdbarch);
4148       else
4149         return t;
4150     }
4151
4152   if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4153     {
4154       if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4155         return builtin_type (gdbarch)->builtin_void;
4156
4157       return arm_ext_type (gdbarch);
4158     }
4159   else if (regnum == ARM_SP_REGNUM)
4160     return builtin_type (gdbarch)->builtin_data_ptr;
4161   else if (regnum == ARM_PC_REGNUM)
4162     return builtin_type (gdbarch)->builtin_func_ptr;
4163   else if (regnum >= ARRAY_SIZE (arm_register_names))
4164     /* These registers are only supported on targets which supply
4165        an XML description.  */
4166     return builtin_type (gdbarch)->builtin_int0;
4167   else
4168     return builtin_type (gdbarch)->builtin_uint32;
4169 }
4170
4171 /* Map a DWARF register REGNUM onto the appropriate GDB register
4172    number.  */
4173
4174 static int
4175 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4176 {
4177   /* Core integer regs.  */
4178   if (reg >= 0 && reg <= 15)
4179     return reg;
4180
4181   /* Legacy FPA encoding.  These were once used in a way which
4182      overlapped with VFP register numbering, so their use is
4183      discouraged, but GDB doesn't support the ARM toolchain
4184      which used them for VFP.  */
4185   if (reg >= 16 && reg <= 23)
4186     return ARM_F0_REGNUM + reg - 16;
4187
4188   /* New assignments for the FPA registers.  */
4189   if (reg >= 96 && reg <= 103)
4190     return ARM_F0_REGNUM + reg - 96;
4191
4192   /* WMMX register assignments.  */
4193   if (reg >= 104 && reg <= 111)
4194     return ARM_WCGR0_REGNUM + reg - 104;
4195
4196   if (reg >= 112 && reg <= 127)
4197     return ARM_WR0_REGNUM + reg - 112;
4198
4199   if (reg >= 192 && reg <= 199)
4200     return ARM_WC0_REGNUM + reg - 192;
4201
4202   /* VFP v2 registers.  A double precision value is actually
4203      in d1 rather than s2, but the ABI only defines numbering
4204      for the single precision registers.  This will "just work"
4205      in GDB for little endian targets (we'll read eight bytes,
4206      starting in s0 and then progressing to s1), but will be
4207      reversed on big endian targets with VFP.  This won't
4208      be a problem for the new Neon quad registers; you're supposed
4209      to use DW_OP_piece for those.  */
4210   if (reg >= 64 && reg <= 95)
4211     {
4212       char name_buf[4];
4213
4214       xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4215       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4216                                           strlen (name_buf));
4217     }
4218
4219   /* VFP v3 / Neon registers.  This range is also used for VFP v2
4220      registers, except that it now describes d0 instead of s0.  */
4221   if (reg >= 256 && reg <= 287)
4222     {
4223       char name_buf[4];
4224
4225       xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4226       return user_reg_map_name_to_regnum (gdbarch, name_buf,
4227                                           strlen (name_buf));
4228     }
4229
4230   return -1;
4231 }
4232
4233 /* Map GDB internal REGNUM onto the Arm simulator register numbers.  */
4234 static int
4235 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4236 {
4237   int reg = regnum;
4238   gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4239
4240   if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4241     return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4242
4243   if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4244     return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4245
4246   if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4247     return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4248
4249   if (reg < NUM_GREGS)
4250     return SIM_ARM_R0_REGNUM + reg;
4251   reg -= NUM_GREGS;
4252
4253   if (reg < NUM_FREGS)
4254     return SIM_ARM_FP0_REGNUM + reg;
4255   reg -= NUM_FREGS;
4256
4257   if (reg < NUM_SREGS)
4258     return SIM_ARM_FPS_REGNUM + reg;
4259   reg -= NUM_SREGS;
4260
4261   internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4262 }
4263
4264 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4265    the buffer to be NEW_LEN bytes ending at ENDADDR.  Return
4266    NULL if an error occurs.  BUF is freed.  */
4267
4268 static gdb_byte *
4269 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4270                        int old_len, int new_len)
4271 {
4272   gdb_byte *new_buf;
4273   int bytes_to_read = new_len - old_len;
4274
4275   new_buf = (gdb_byte *) xmalloc (new_len);
4276   memcpy (new_buf + bytes_to_read, buf, old_len);
4277   xfree (buf);
4278   if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4279     {
4280       xfree (new_buf);
4281       return NULL;
4282     }
4283   return new_buf;
4284 }
4285
4286 /* An IT block is at most the 2-byte IT instruction followed by
4287    four 4-byte instructions.  The furthest back we must search to
4288    find an IT block that affects the current instruction is thus
4289    2 + 3 * 4 == 14 bytes.  */
4290 #define MAX_IT_BLOCK_PREFIX 14
4291
4292 /* Use a quick scan if there are more than this many bytes of
4293    code.  */
4294 #define IT_SCAN_THRESHOLD 32
4295
4296 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4297    A breakpoint in an IT block may not be hit, depending on the
4298    condition flags.  */
4299 static CORE_ADDR
4300 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4301 {
4302   gdb_byte *buf;
4303   char map_type;
4304   CORE_ADDR boundary, func_start;
4305   int buf_len;
4306   enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4307   int i, any, last_it, last_it_count;
4308
4309   /* If we are using BKPT breakpoints, none of this is necessary.  */
4310   if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4311     return bpaddr;
4312
4313   /* ARM mode does not have this problem.  */
4314   if (!arm_pc_is_thumb (gdbarch, bpaddr))
4315     return bpaddr;
4316
4317   /* We are setting a breakpoint in Thumb code that could potentially
4318      contain an IT block.  The first step is to find how much Thumb
4319      code there is; we do not need to read outside of known Thumb
4320      sequences.  */
4321   map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4322   if (map_type == 0)
4323     /* Thumb-2 code must have mapping symbols to have a chance.  */
4324     return bpaddr;
4325
4326   bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4327
4328   if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4329       && func_start > boundary)
4330     boundary = func_start;
4331
4332   /* Search for a candidate IT instruction.  We have to do some fancy
4333      footwork to distinguish a real IT instruction from the second
4334      half of a 32-bit instruction, but there is no need for that if
4335      there's no candidate.  */
4336   buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4337   if (buf_len == 0)
4338     /* No room for an IT instruction.  */
4339     return bpaddr;
4340
4341   buf = (gdb_byte *) xmalloc (buf_len);
4342   if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4343     return bpaddr;
4344   any = 0;
4345   for (i = 0; i < buf_len; i += 2)
4346     {
4347       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4348       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4349         {
4350           any = 1;
4351           break;
4352         }
4353     }
4354
4355   if (any == 0)
4356     {
4357       xfree (buf);
4358       return bpaddr;
4359     }
4360
4361   /* OK, the code bytes before this instruction contain at least one
4362      halfword which resembles an IT instruction.  We know that it's
4363      Thumb code, but there are still two possibilities.  Either the
4364      halfword really is an IT instruction, or it is the second half of
4365      a 32-bit Thumb instruction.  The only way we can tell is to
4366      scan forwards from a known instruction boundary.  */
4367   if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4368     {
4369       int definite;
4370
4371       /* There's a lot of code before this instruction.  Start with an
4372          optimistic search; it's easy to recognize halfwords that can
4373          not be the start of a 32-bit instruction, and use that to
4374          lock on to the instruction boundaries.  */
4375       buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4376       if (buf == NULL)
4377         return bpaddr;
4378       buf_len = IT_SCAN_THRESHOLD;
4379
4380       definite = 0;
4381       for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4382         {
4383           unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4384           if (thumb_insn_size (inst1) == 2)
4385             {
4386               definite = 1;
4387               break;
4388             }
4389         }
4390
4391       /* At this point, if DEFINITE, BUF[I] is the first place we
4392          are sure that we know the instruction boundaries, and it is far
4393          enough from BPADDR that we could not miss an IT instruction
4394          affecting BPADDR.  If ! DEFINITE, give up - start from a
4395          known boundary.  */
4396       if (! definite)
4397         {
4398           buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4399                                        bpaddr - boundary);
4400           if (buf == NULL)
4401             return bpaddr;
4402           buf_len = bpaddr - boundary;
4403           i = 0;
4404         }
4405     }
4406   else
4407     {
4408       buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4409       if (buf == NULL)
4410         return bpaddr;
4411       buf_len = bpaddr - boundary;
4412       i = 0;
4413     }
4414
4415   /* Scan forwards.  Find the last IT instruction before BPADDR.  */
4416   last_it = -1;
4417   last_it_count = 0;
4418   while (i < buf_len)
4419     {
4420       unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4421       last_it_count--;
4422       if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4423         {
4424           last_it = i;
4425           if (inst1 & 0x0001)
4426             last_it_count = 4;
4427           else if (inst1 & 0x0002)
4428             last_it_count = 3;
4429           else if (inst1 & 0x0004)
4430             last_it_count = 2;
4431           else
4432             last_it_count = 1;
4433         }
4434       i += thumb_insn_size (inst1);
4435     }
4436
4437   xfree (buf);
4438
4439   if (last_it == -1)
4440     /* There wasn't really an IT instruction after all.  */
4441     return bpaddr;
4442
4443   if (last_it_count < 1)
4444     /* It was too far away.  */
4445     return bpaddr;
4446
4447   /* This really is a trouble spot.  Move the breakpoint to the IT
4448      instruction.  */
4449   return bpaddr - buf_len + last_it;
4450 }
4451
4452 /* ARM displaced stepping support.
4453
4454    Generally ARM displaced stepping works as follows:
4455
4456    1. When an instruction is to be single-stepped, it is first decoded by
4457       arm_process_displaced_insn.  Depending on the type of instruction, it is
4458       then copied to a scratch location, possibly in a modified form.  The
4459       copy_* set of functions performs such modification, as necessary.  A
4460       breakpoint is placed after the modified instruction in the scratch space
4461       to return control to GDB.  Note in particular that instructions which
4462       modify the PC will no longer do so after modification.
4463
4464    2. The instruction is single-stepped, by setting the PC to the scratch
4465       location address, and resuming.  Control returns to GDB when the
4466       breakpoint is hit.
4467
4468    3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4469       function used for the current instruction.  This function's job is to
4470       put the CPU/memory state back to what it would have been if the
4471       instruction had been executed unmodified in its original location.  */
4472
4473 /* NOP instruction (mov r0, r0).  */
4474 #define ARM_NOP                         0xe1a00000
4475 #define THUMB_NOP 0x4600
4476
4477 /* Helper for register reads for displaced stepping.  In particular, this
4478    returns the PC as it would be seen by the instruction at its original
4479    location.  */
4480
4481 ULONGEST
4482 displaced_read_reg (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
4483                     int regno)
4484 {
4485   ULONGEST ret;
4486   CORE_ADDR from = dsc->insn_addr;
4487
4488   if (regno == ARM_PC_REGNUM)
4489     {
4490       /* Compute pipeline offset:
4491          - When executing an ARM instruction, PC reads as the address of the
4492          current instruction plus 8.
4493          - When executing a Thumb instruction, PC reads as the address of the
4494          current instruction plus 4.  */
4495
4496       if (!dsc->is_thumb)
4497         from += 8;
4498       else
4499         from += 4;
4500
4501       displaced_debug_printf ("read pc value %.8lx",
4502                               (unsigned long) from);
4503       return (ULONGEST) from;
4504     }
4505   else
4506     {
4507       regcache_cooked_read_unsigned (regs, regno, &ret);
4508
4509       displaced_debug_printf ("read r%d value %.8lx",
4510                               regno, (unsigned long) ret);
4511
4512       return ret;
4513     }
4514 }
4515
4516 static int
4517 displaced_in_arm_mode (struct regcache *regs)
4518 {
4519   ULONGEST ps;
4520   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4521
4522   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4523
4524   return (ps & t_bit) == 0;
4525 }
4526
4527 /* Write to the PC as from a branch instruction.  */
4528
4529 static void
4530 branch_write_pc (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
4531                  ULONGEST val)
4532 {
4533   if (!dsc->is_thumb)
4534     /* Note: If bits 0/1 are set, this branch would be unpredictable for
4535        architecture versions < 6.  */
4536     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4537                                     val & ~(ULONGEST) 0x3);
4538   else
4539     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4540                                     val & ~(ULONGEST) 0x1);
4541 }
4542
4543 /* Write to the PC as from a branch-exchange instruction.  */
4544
4545 static void
4546 bx_write_pc (struct regcache *regs, ULONGEST val)
4547 {
4548   ULONGEST ps;
4549   ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4550
4551   regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4552
4553   if ((val & 1) == 1)
4554     {
4555       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4556       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4557     }
4558   else if ((val & 2) == 0)
4559     {
4560       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4561       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4562     }
4563   else
4564     {
4565       /* Unpredictable behaviour.  Try to do something sensible (switch to ARM
4566           mode, align dest to 4 bytes).  */
4567       warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4568       regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4569       regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4570     }
4571 }
4572
4573 /* Write to the PC as if from a load instruction.  */
4574
4575 static void
4576 load_write_pc (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
4577                ULONGEST val)
4578 {
4579   if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4580     bx_write_pc (regs, val);
4581   else
4582     branch_write_pc (regs, dsc, val);
4583 }
4584
4585 /* Write to the PC as if from an ALU instruction.  */
4586
4587 static void
4588 alu_write_pc (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
4589               ULONGEST val)
4590 {
4591   if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4592     bx_write_pc (regs, val);
4593   else
4594     branch_write_pc (regs, dsc, val);
4595 }
4596
4597 /* Helper for writing to registers for displaced stepping.  Writing to the PC
4598    has a varying effects depending on the instruction which does the write:
4599    this is controlled by the WRITE_PC argument.  */
4600
4601 void
4602 displaced_write_reg (regcache *regs, arm_displaced_step_copy_insn_closure *dsc,
4603                      int regno, ULONGEST val, enum pc_write_style write_pc)
4604 {
4605   if (regno == ARM_PC_REGNUM)
4606     {
4607       displaced_debug_printf ("writing pc %.8lx", (unsigned long) val);
4608
4609       switch (write_pc)
4610         {
4611         case BRANCH_WRITE_PC:
4612           branch_write_pc (regs, dsc, val);
4613           break;
4614
4615         case BX_WRITE_PC:
4616           bx_write_pc (regs, val);
4617           break;
4618
4619         case LOAD_WRITE_PC:
4620           load_write_pc (regs, dsc, val);
4621           break;
4622
4623         case ALU_WRITE_PC:
4624           alu_write_pc (regs, dsc, val);
4625           break;
4626
4627         case CANNOT_WRITE_PC:
4628           warning (_("Instruction wrote to PC in an unexpected way when "
4629                      "single-stepping"));
4630           break;
4631
4632         default:
4633           internal_error (__FILE__, __LINE__,
4634                           _("Invalid argument to displaced_write_reg"));
4635         }
4636
4637       dsc->wrote_to_pc = 1;
4638     }
4639   else
4640     {
4641       displaced_debug_printf ("writing r%d value %.8lx",
4642                               regno, (unsigned long) val);
4643       regcache_cooked_write_unsigned (regs, regno, val);
4644     }
4645 }
4646
4647 /* This function is used to concisely determine if an instruction INSN
4648    references PC.  Register fields of interest in INSN should have the
4649    corresponding fields of BITMASK set to 0b1111.  The function
4650    returns return 1 if any of these fields in INSN reference the PC
4651    (also 0b1111, r15), else it returns 0.  */
4652
4653 static int
4654 insn_references_pc (uint32_t insn, uint32_t bitmask)
4655 {
4656   uint32_t lowbit = 1;
4657
4658   while (bitmask != 0)
4659     {
4660       uint32_t mask;
4661
4662       for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4663         ;
4664
4665       if (!lowbit)
4666         break;
4667
4668       mask = lowbit * 0xf;
4669
4670       if ((insn & mask) == mask)
4671         return 1;
4672
4673       bitmask &= ~mask;
4674     }
4675
4676   return 0;
4677 }
4678
4679 /* The simplest copy function.  Many instructions have the same effect no
4680    matter what address they are executed at: in those cases, use this.  */
4681
4682 static int
4683 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn, const char *iname,
4684                      arm_displaced_step_copy_insn_closure *dsc)
4685 {
4686   displaced_debug_printf ("copying insn %.8lx, opcode/class '%s' unmodified",
4687                           (unsigned long) insn, iname);
4688
4689   dsc->modinsn[0] = insn;
4690
4691   return 0;
4692 }
4693
4694 static int
4695 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4696                              uint16_t insn2, const char *iname,
4697                              arm_displaced_step_copy_insn_closure *dsc)
4698 {
4699   displaced_debug_printf ("copying insn %.4x %.4x, opcode/class '%s' "
4700                           "unmodified", insn1, insn2, iname);
4701
4702   dsc->modinsn[0] = insn1;
4703   dsc->modinsn[1] = insn2;
4704   dsc->numinsns = 2;
4705
4706   return 0;
4707 }
4708
4709 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4710    modification.  */
4711 static int
4712 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4713                              const char *iname,
4714                              arm_displaced_step_copy_insn_closure *dsc)
4715 {
4716   displaced_debug_printf ("copying insn %.4x, opcode/class '%s' unmodified",
4717                           insn, iname);
4718
4719   dsc->modinsn[0] = insn;
4720
4721   return 0;
4722 }
4723
4724 /* Preload instructions with immediate offset.  */
4725
4726 static void
4727 cleanup_preload (struct gdbarch *gdbarch, regcache *regs,
4728                  arm_displaced_step_copy_insn_closure *dsc)
4729 {
4730   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4731   if (!dsc->u.preload.immed)
4732     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4733 }
4734
4735 static void
4736 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4737                  arm_displaced_step_copy_insn_closure *dsc, unsigned int rn)
4738 {
4739   ULONGEST rn_val;
4740   /* Preload instructions:
4741
4742      {pli/pld} [rn, #+/-imm]
4743      ->
4744      {pli/pld} [r0, #+/-imm].  */
4745
4746   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4747   rn_val = displaced_read_reg (regs, dsc, rn);
4748   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4749   dsc->u.preload.immed = 1;
4750
4751   dsc->cleanup = &cleanup_preload;
4752 }
4753
4754 static int
4755 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4756                   arm_displaced_step_copy_insn_closure *dsc)
4757 {
4758   unsigned int rn = bits (insn, 16, 19);
4759
4760   if (!insn_references_pc (insn, 0x000f0000ul))
4761     return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4762
4763   displaced_debug_printf ("copying preload insn %.8lx", (unsigned long) insn);
4764
4765   dsc->modinsn[0] = insn & 0xfff0ffff;
4766
4767   install_preload (gdbarch, regs, dsc, rn);
4768
4769   return 0;
4770 }
4771
4772 static int
4773 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4774                      regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
4775 {
4776   unsigned int rn = bits (insn1, 0, 3);
4777   unsigned int u_bit = bit (insn1, 7);
4778   int imm12 = bits (insn2, 0, 11);
4779   ULONGEST pc_val;
4780
4781   if (rn != ARM_PC_REGNUM)
4782     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4783
4784   /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4785      PLD (literal) Encoding T1.  */
4786   displaced_debug_printf ("copying pld/pli pc (0x%x) %c imm12 %.4x",
4787                           (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4788                           imm12);
4789
4790   if (!u_bit)
4791     imm12 = -1 * imm12;
4792
4793   /* Rewrite instruction {pli/pld} PC imm12 into:
4794      Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4795
4796      {pli/pld} [r0, r1]
4797
4798      Cleanup: r0 <- tmp[0], r1 <- tmp[1].  */
4799
4800   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4801   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4802
4803   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4804
4805   displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4806   displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4807   dsc->u.preload.immed = 0;
4808
4809   /* {pli/pld} [r0, r1] */
4810   dsc->modinsn[0] = insn1 & 0xfff0;
4811   dsc->modinsn[1] = 0xf001;
4812   dsc->numinsns = 2;
4813
4814   dsc->cleanup = &cleanup_preload;
4815   return 0;
4816 }
4817
4818 /* Preload instructions with register offset.  */
4819
4820 static void
4821 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4822                     arm_displaced_step_copy_insn_closure *dsc, unsigned int rn,
4823                     unsigned int rm)
4824 {
4825   ULONGEST rn_val, rm_val;
4826
4827   /* Preload register-offset instructions:
4828
4829      {pli/pld} [rn, rm {, shift}]
4830      ->
4831      {pli/pld} [r0, r1 {, shift}].  */
4832
4833   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4834   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4835   rn_val = displaced_read_reg (regs, dsc, rn);
4836   rm_val = displaced_read_reg (regs, dsc, rm);
4837   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4838   displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4839   dsc->u.preload.immed = 0;
4840
4841   dsc->cleanup = &cleanup_preload;
4842 }
4843
4844 static int
4845 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4846                       struct regcache *regs,
4847                       arm_displaced_step_copy_insn_closure *dsc)
4848 {
4849   unsigned int rn = bits (insn, 16, 19);
4850   unsigned int rm = bits (insn, 0, 3);
4851
4852
4853   if (!insn_references_pc (insn, 0x000f000ful))
4854     return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4855
4856   displaced_debug_printf ("copying preload insn %.8lx",
4857                           (unsigned long) insn);
4858
4859   dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4860
4861   install_preload_reg (gdbarch, regs, dsc, rn, rm);
4862   return 0;
4863 }
4864
4865 /* Copy/cleanup coprocessor load and store instructions.  */
4866
4867 static void
4868 cleanup_copro_load_store (struct gdbarch *gdbarch,
4869                           struct regcache *regs,
4870                           arm_displaced_step_copy_insn_closure *dsc)
4871 {
4872   ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4873
4874   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4875
4876   if (dsc->u.ldst.writeback)
4877     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4878 }
4879
4880 static void
4881 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4882                           arm_displaced_step_copy_insn_closure *dsc,
4883                           int writeback, unsigned int rn)
4884 {
4885   ULONGEST rn_val;
4886
4887   /* Coprocessor load/store instructions:
4888
4889      {stc/stc2} [<Rn>, #+/-imm]  (and other immediate addressing modes)
4890      ->
4891      {stc/stc2} [r0, #+/-imm].
4892
4893      ldc/ldc2 are handled identically.  */
4894
4895   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4896   rn_val = displaced_read_reg (regs, dsc, rn);
4897   /* PC should be 4-byte aligned.  */
4898   rn_val = rn_val & 0xfffffffc;
4899   displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4900
4901   dsc->u.ldst.writeback = writeback;
4902   dsc->u.ldst.rn = rn;
4903
4904   dsc->cleanup = &cleanup_copro_load_store;
4905 }
4906
4907 static int
4908 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4909                            struct regcache *regs,
4910                            arm_displaced_step_copy_insn_closure *dsc)
4911 {
4912   unsigned int rn = bits (insn, 16, 19);
4913
4914   if (!insn_references_pc (insn, 0x000f0000ul))
4915     return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4916
4917   displaced_debug_printf ("copying coprocessor load/store insn %.8lx",
4918                           (unsigned long) insn);
4919
4920   dsc->modinsn[0] = insn & 0xfff0ffff;
4921
4922   install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4923
4924   return 0;
4925 }
4926
4927 static int
4928 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4929                               uint16_t insn2, struct regcache *regs,
4930                               arm_displaced_step_copy_insn_closure *dsc)
4931 {
4932   unsigned int rn = bits (insn1, 0, 3);
4933
4934   if (rn != ARM_PC_REGNUM)
4935     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4936                                         "copro load/store", dsc);
4937
4938   displaced_debug_printf ("copying coprocessor load/store insn %.4x%.4x",
4939                           insn1, insn2);
4940
4941   dsc->modinsn[0] = insn1 & 0xfff0;
4942   dsc->modinsn[1] = insn2;
4943   dsc->numinsns = 2;
4944
4945   /* This function is called for copying instruction LDC/LDC2/VLDR, which
4946      doesn't support writeback, so pass 0.  */
4947   install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4948
4949   return 0;
4950 }
4951
4952 /* Clean up branch instructions (actually perform the branch, by setting
4953    PC).  */
4954
4955 static void
4956 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4957                 arm_displaced_step_copy_insn_closure *dsc)
4958 {
4959   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4960   int branch_taken = condition_true (dsc->u.branch.cond, status);
4961   enum pc_write_style write_pc = dsc->u.branch.exchange
4962                                  ? BX_WRITE_PC : BRANCH_WRITE_PC;
4963
4964   if (!branch_taken)
4965     return;
4966
4967   if (dsc->u.branch.link)
4968     {
4969       /* The value of LR should be the next insn of current one.  In order
4970        not to confuse logic handling later insn `bx lr', if current insn mode
4971        is Thumb, the bit 0 of LR value should be set to 1.  */
4972       ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4973
4974       if (dsc->is_thumb)
4975         next_insn_addr |= 0x1;
4976
4977       displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4978                            CANNOT_WRITE_PC);
4979     }
4980
4981   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4982 }
4983
4984 /* Copy B/BL/BLX instructions with immediate destinations.  */
4985
4986 static void
4987 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4988                   arm_displaced_step_copy_insn_closure *dsc,
4989                   unsigned int cond, int exchange, int link, long offset)
4990 {
4991   /* Implement "BL<cond> <label>" as:
4992
4993      Preparation: cond <- instruction condition
4994      Insn: mov r0, r0  (nop)
4995      Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4996
4997      B<cond> similar, but don't set r14 in cleanup.  */
4998
4999   dsc->u.branch.cond = cond;
5000   dsc->u.branch.link = link;
5001   dsc->u.branch.exchange = exchange;
5002
5003   dsc->u.branch.dest = dsc->insn_addr;
5004   if (link && exchange)
5005     /* For BLX, offset is computed from the Align (PC, 4).  */
5006     dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
5007
5008   if (dsc->is_thumb)
5009     dsc->u.branch.dest += 4 + offset;
5010   else
5011     dsc->u.branch.dest += 8 + offset;
5012
5013   dsc->cleanup = &cleanup_branch;
5014 }
5015 static int
5016 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
5017                    regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
5018 {
5019   unsigned int cond = bits (insn, 28, 31);
5020   int exchange = (cond == 0xf);
5021   int link = exchange || bit (insn, 24);
5022   long offset;
5023
5024   displaced_debug_printf ("copying %s immediate insn %.8lx",
5025                           (exchange) ? "blx" : (link) ? "bl" : "b",
5026                           (unsigned long) insn);
5027   if (exchange)
5028     /* For BLX, set bit 0 of the destination.  The cleanup_branch function will
5029        then arrange the switch into Thumb mode.  */
5030     offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
5031   else
5032     offset = bits (insn, 0, 23) << 2;
5033
5034   if (bit (offset, 25))
5035     offset = offset | ~0x3ffffff;
5036
5037   dsc->modinsn[0] = ARM_NOP;
5038
5039   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5040   return 0;
5041 }
5042
5043 static int
5044 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
5045                       uint16_t insn2, struct regcache *regs,
5046                       arm_displaced_step_copy_insn_closure *dsc)
5047 {
5048   int link = bit (insn2, 14);
5049   int exchange = link && !bit (insn2, 12);
5050   int cond = INST_AL;
5051   long offset = 0;
5052   int j1 = bit (insn2, 13);
5053   int j2 = bit (insn2, 11);
5054   int s = sbits (insn1, 10, 10);
5055   int i1 = !(j1 ^ bit (insn1, 10));
5056   int i2 = !(j2 ^ bit (insn1, 10));
5057
5058   if (!link && !exchange) /* B */
5059     {
5060       offset = (bits (insn2, 0, 10) << 1);
5061       if (bit (insn2, 12)) /* Encoding T4 */
5062         {
5063           offset |= (bits (insn1, 0, 9) << 12)
5064             | (i2 << 22)
5065             | (i1 << 23)
5066             | (s << 24);
5067           cond = INST_AL;
5068         }
5069       else /* Encoding T3 */
5070         {
5071           offset |= (bits (insn1, 0, 5) << 12)
5072             | (j1 << 18)
5073             | (j2 << 19)
5074             | (s << 20);
5075           cond = bits (insn1, 6, 9);
5076         }
5077     }
5078   else
5079     {
5080       offset = (bits (insn1, 0, 9) << 12);
5081       offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
5082       offset |= exchange ?
5083         (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
5084     }
5085
5086   displaced_debug_printf ("copying %s insn %.4x %.4x with offset %.8lx",
5087                           link ? (exchange) ? "blx" : "bl" : "b",
5088                           insn1, insn2, offset);
5089
5090   dsc->modinsn[0] = THUMB_NOP;
5091
5092   install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
5093   return 0;
5094 }
5095
5096 /* Copy B Thumb instructions.  */
5097 static int
5098 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
5099               arm_displaced_step_copy_insn_closure *dsc)
5100 {
5101   unsigned int cond = 0;
5102   int offset = 0;
5103   unsigned short bit_12_15 = bits (insn, 12, 15);
5104   CORE_ADDR from = dsc->insn_addr;
5105
5106   if (bit_12_15 == 0xd)
5107     {
5108       /* offset = SignExtend (imm8:0, 32) */
5109       offset = sbits ((insn << 1), 0, 8);
5110       cond = bits (insn, 8, 11);
5111     }
5112   else if (bit_12_15 == 0xe) /* Encoding T2 */
5113     {
5114       offset = sbits ((insn << 1), 0, 11);
5115       cond = INST_AL;
5116     }
5117
5118   displaced_debug_printf ("copying b immediate insn %.4x with offset %d",
5119                           insn, offset);
5120
5121   dsc->u.branch.cond = cond;
5122   dsc->u.branch.link = 0;
5123   dsc->u.branch.exchange = 0;
5124   dsc->u.branch.dest = from + 4 + offset;
5125
5126   dsc->modinsn[0] = THUMB_NOP;
5127
5128   dsc->cleanup = &cleanup_branch;
5129
5130   return 0;
5131 }
5132
5133 /* Copy BX/BLX with register-specified destinations.  */
5134
5135 static void
5136 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5137                     arm_displaced_step_copy_insn_closure *dsc, int link,
5138                     unsigned int cond, unsigned int rm)
5139 {
5140   /* Implement {BX,BLX}<cond> <reg>" as:
5141
5142      Preparation: cond <- instruction condition
5143      Insn: mov r0, r0 (nop)
5144      Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5145
5146      Don't set r14 in cleanup for BX.  */
5147
5148   dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5149
5150   dsc->u.branch.cond = cond;
5151   dsc->u.branch.link = link;
5152
5153   dsc->u.branch.exchange = 1;
5154
5155   dsc->cleanup = &cleanup_branch;
5156 }
5157
5158 static int
5159 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5160                      regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
5161 {
5162   unsigned int cond = bits (insn, 28, 31);
5163   /* BX:  x12xxx1x
5164      BLX: x12xxx3x.  */
5165   int link = bit (insn, 5);
5166   unsigned int rm = bits (insn, 0, 3);
5167
5168   displaced_debug_printf ("copying insn %.8lx", (unsigned long) insn);
5169
5170   dsc->modinsn[0] = ARM_NOP;
5171
5172   install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5173   return 0;
5174 }
5175
5176 static int
5177 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5178                        struct regcache *regs,
5179                        arm_displaced_step_copy_insn_closure *dsc)
5180 {
5181   int link = bit (insn, 7);
5182   unsigned int rm = bits (insn, 3, 6);
5183
5184   displaced_debug_printf ("copying insn %.4x", (unsigned short) insn);
5185
5186   dsc->modinsn[0] = THUMB_NOP;
5187
5188   install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5189
5190   return 0;
5191 }
5192
5193
5194 /* Copy/cleanup arithmetic/logic instruction with immediate RHS.  */
5195
5196 static void
5197 cleanup_alu_imm (struct gdbarch *gdbarch,
5198                  regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
5199 {
5200   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5201   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5202   displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5203   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5204 }
5205
5206 static int
5207 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5208                   arm_displaced_step_copy_insn_closure *dsc)
5209 {
5210   unsigned int rn = bits (insn, 16, 19);
5211   unsigned int rd = bits (insn, 12, 15);
5212   unsigned int op = bits (insn, 21, 24);
5213   int is_mov = (op == 0xd);
5214   ULONGEST rd_val, rn_val;
5215
5216   if (!insn_references_pc (insn, 0x000ff000ul))
5217     return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5218
5219   displaced_debug_printf ("copying immediate %s insn %.8lx",
5220                           is_mov ? "move" : "ALU",
5221                           (unsigned long) insn);
5222
5223   /* Instruction is of form:
5224
5225      <op><cond> rd, [rn,] #imm
5226
5227      Rewrite as:
5228
5229      Preparation: tmp1, tmp2 <- r0, r1;
5230                   r0, r1 <- rd, rn
5231      Insn: <op><cond> r0, r1, #imm
5232      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5233   */
5234
5235   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5236   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5237   rn_val = displaced_read_reg (regs, dsc, rn);
5238   rd_val = displaced_read_reg (regs, dsc, rd);
5239   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5240   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5241   dsc->rd = rd;
5242
5243   if (is_mov)
5244     dsc->modinsn[0] = insn & 0xfff00fff;
5245   else
5246     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5247
5248   dsc->cleanup = &cleanup_alu_imm;
5249
5250   return 0;
5251 }
5252
5253 static int
5254 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5255                      uint16_t insn2, struct regcache *regs,
5256                      arm_displaced_step_copy_insn_closure *dsc)
5257 {
5258   unsigned int op = bits (insn1, 5, 8);
5259   unsigned int rn, rm, rd;
5260   ULONGEST rd_val, rn_val;
5261
5262   rn = bits (insn1, 0, 3); /* Rn */
5263   rm = bits (insn2, 0, 3); /* Rm */
5264   rd = bits (insn2, 8, 11); /* Rd */
5265
5266   /* This routine is only called for instruction MOV.  */
5267   gdb_assert (op == 0x2 && rn == 0xf);
5268
5269   if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5270     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5271
5272   displaced_debug_printf ("copying reg %s insn %.4x%.4x", "ALU", insn1, insn2);
5273
5274   /* Instruction is of form:
5275
5276      <op><cond> rd, [rn,] #imm
5277
5278      Rewrite as:
5279
5280      Preparation: tmp1, tmp2 <- r0, r1;
5281                   r0, r1 <- rd, rn
5282      Insn: <op><cond> r0, r1, #imm
5283      Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5284   */
5285
5286   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5287   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5288   rn_val = displaced_read_reg (regs, dsc, rn);
5289   rd_val = displaced_read_reg (regs, dsc, rd);
5290   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5291   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5292   dsc->rd = rd;
5293
5294   dsc->modinsn[0] = insn1;
5295   dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5296   dsc->numinsns = 2;
5297
5298   dsc->cleanup = &cleanup_alu_imm;
5299
5300   return 0;
5301 }
5302
5303 /* Copy/cleanup arithmetic/logic insns with register RHS.  */
5304
5305 static void
5306 cleanup_alu_reg (struct gdbarch *gdbarch,
5307                  regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
5308 {
5309   ULONGEST rd_val;
5310   int i;
5311
5312   rd_val = displaced_read_reg (regs, dsc, 0);
5313
5314   for (i = 0; i < 3; i++)
5315     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5316
5317   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5318 }
5319
5320 static void
5321 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5322                  arm_displaced_step_copy_insn_closure *dsc,
5323                  unsigned int rd, unsigned int rn, unsigned int rm)
5324 {
5325   ULONGEST rd_val, rn_val, rm_val;
5326
5327   /* Instruction is of form:
5328
5329      <op><cond> rd, [rn,] rm [, <shift>]
5330
5331      Rewrite as:
5332
5333      Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5334                   r0, r1, r2 <- rd, rn, rm
5335      Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5336      Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5337   */
5338
5339   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5340   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5341   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5342   rd_val = displaced_read_reg (regs, dsc, rd);
5343   rn_val = displaced_read_reg (regs, dsc, rn);
5344   rm_val = displaced_read_reg (regs, dsc, rm);
5345   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5346   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5347   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5348   dsc->rd = rd;
5349
5350   dsc->cleanup = &cleanup_alu_reg;
5351 }
5352
5353 static int
5354 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5355                   arm_displaced_step_copy_insn_closure *dsc)
5356 {
5357   unsigned int op = bits (insn, 21, 24);
5358   int is_mov = (op == 0xd);
5359
5360   if (!insn_references_pc (insn, 0x000ff00ful))
5361     return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5362
5363   displaced_debug_printf ("copying reg %s insn %.8lx",
5364                           is_mov ? "move" : "ALU", (unsigned long) insn);
5365
5366   if (is_mov)
5367     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5368   else
5369     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5370
5371   install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5372                    bits (insn, 0, 3));
5373   return 0;
5374 }
5375
5376 static int
5377 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5378                     struct regcache *regs,
5379                     arm_displaced_step_copy_insn_closure *dsc)
5380 {
5381   unsigned rm, rd;
5382
5383   rm = bits (insn, 3, 6);
5384   rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5385
5386   if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5387     return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5388
5389   displaced_debug_printf ("copying ALU reg insn %.4x", (unsigned short) insn);
5390
5391   dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5392
5393   install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5394
5395   return 0;
5396 }
5397
5398 /* Cleanup/copy arithmetic/logic insns with shifted register RHS.  */
5399
5400 static void
5401 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5402                          struct regcache *regs,
5403                          arm_displaced_step_copy_insn_closure *dsc)
5404 {
5405   ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5406   int i;
5407
5408   for (i = 0; i < 4; i++)
5409     displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5410
5411   displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5412 }
5413
5414 static void
5415 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5416                          arm_displaced_step_copy_insn_closure *dsc,
5417                          unsigned int rd, unsigned int rn, unsigned int rm,
5418                          unsigned rs)
5419 {
5420   int i;
5421   ULONGEST rd_val, rn_val, rm_val, rs_val;
5422
5423   /* Instruction is of form:
5424
5425      <op><cond> rd, [rn,] rm, <shift> rs
5426
5427      Rewrite as:
5428
5429      Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5430                   r0, r1, r2, r3 <- rd, rn, rm, rs
5431      Insn: <op><cond> r0, r1, r2, <shift> r3
5432      Cleanup: tmp5 <- r0
5433               r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5434               rd <- tmp5
5435   */
5436
5437   for (i = 0; i < 4; i++)
5438     dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5439
5440   rd_val = displaced_read_reg (regs, dsc, rd);
5441   rn_val = displaced_read_reg (regs, dsc, rn);
5442   rm_val = displaced_read_reg (regs, dsc, rm);
5443   rs_val = displaced_read_reg (regs, dsc, rs);
5444   displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5445   displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5446   displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5447   displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5448   dsc->rd = rd;
5449   dsc->cleanup = &cleanup_alu_shifted_reg;
5450 }
5451
5452 static int
5453 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5454                           struct regcache *regs,
5455                           arm_displaced_step_copy_insn_closure *dsc)
5456 {
5457   unsigned int op = bits (insn, 21, 24);
5458   int is_mov = (op == 0xd);
5459   unsigned int rd, rn, rm, rs;
5460
5461   if (!insn_references_pc (insn, 0x000fff0ful))
5462     return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5463
5464   displaced_debug_printf ("copying shifted reg %s insn %.8lx",
5465                           is_mov ? "move" : "ALU",
5466                           (unsigned long) insn);
5467
5468   rn = bits (insn, 16, 19);
5469   rm = bits (insn, 0, 3);
5470   rs = bits (insn, 8, 11);
5471   rd = bits (insn, 12, 15);
5472
5473   if (is_mov)
5474     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5475   else
5476     dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5477
5478   install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5479
5480   return 0;
5481 }
5482
5483 /* Clean up load instructions.  */
5484
5485 static void
5486 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5487               arm_displaced_step_copy_insn_closure *dsc)
5488 {
5489   ULONGEST rt_val, rt_val2 = 0, rn_val;
5490
5491   rt_val = displaced_read_reg (regs, dsc, 0);
5492   if (dsc->u.ldst.xfersize == 8)
5493     rt_val2 = displaced_read_reg (regs, dsc, 1);
5494   rn_val = displaced_read_reg (regs, dsc, 2);
5495
5496   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5497   if (dsc->u.ldst.xfersize > 4)
5498     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5499   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5500   if (!dsc->u.ldst.immed)
5501     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5502
5503   /* Handle register writeback.  */
5504   if (dsc->u.ldst.writeback)
5505     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5506   /* Put result in right place.  */
5507   displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5508   if (dsc->u.ldst.xfersize == 8)
5509     displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5510 }
5511
5512 /* Clean up store instructions.  */
5513
5514 static void
5515 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5516                arm_displaced_step_copy_insn_closure *dsc)
5517 {
5518   ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5519
5520   displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5521   if (dsc->u.ldst.xfersize > 4)
5522     displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5523   displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5524   if (!dsc->u.ldst.immed)
5525     displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5526   if (!dsc->u.ldst.restore_r4)
5527     displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5528
5529   /* Writeback.  */
5530   if (dsc->u.ldst.writeback)
5531     displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5532 }
5533
5534 /* Copy "extra" load/store instructions.  These are halfword/doubleword
5535    transfers, which have a different encoding to byte/word transfers.  */
5536
5537 static int
5538 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5539                       regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
5540 {
5541   unsigned int op1 = bits (insn, 20, 24);
5542   unsigned int op2 = bits (insn, 5, 6);
5543   unsigned int rt = bits (insn, 12, 15);
5544   unsigned int rn = bits (insn, 16, 19);
5545   unsigned int rm = bits (insn, 0, 3);
5546   char load[12]     = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5547   char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5548   int immed = (op1 & 0x4) != 0;
5549   int opcode;
5550   ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5551
5552   if (!insn_references_pc (insn, 0x000ff00ful))
5553     return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5554
5555   displaced_debug_printf ("copying %sextra load/store insn %.8lx",
5556                           unprivileged ? "unprivileged " : "",
5557                           (unsigned long) insn);
5558
5559   opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5560
5561   if (opcode < 0)
5562     internal_error (__FILE__, __LINE__,
5563                     _("copy_extra_ld_st: instruction decode error"));
5564
5565   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5566   dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5567   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5568   if (!immed)
5569     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5570
5571   rt_val = displaced_read_reg (regs, dsc, rt);
5572   if (bytesize[opcode] == 8)
5573     rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5574   rn_val = displaced_read_reg (regs, dsc, rn);
5575   if (!immed)
5576     rm_val = displaced_read_reg (regs, dsc, rm);
5577
5578   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5579   if (bytesize[opcode] == 8)
5580     displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5581   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5582   if (!immed)
5583     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5584
5585   dsc->rd = rt;
5586   dsc->u.ldst.xfersize = bytesize[opcode];
5587   dsc->u.ldst.rn = rn;
5588   dsc->u.ldst.immed = immed;
5589   dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5590   dsc->u.ldst.restore_r4 = 0;
5591
5592   if (immed)
5593     /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5594         ->
5595        {ldr,str}<width><cond> r0, [r1,] [r2, #imm].  */
5596     dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5597   else
5598     /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5599         ->
5600        {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3].  */
5601     dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5602
5603   dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5604
5605   return 0;
5606 }
5607
5608 /* Copy byte/half word/word loads and stores.  */
5609
5610 static void
5611 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5612                     arm_displaced_step_copy_insn_closure *dsc, int load,
5613                     int immed, int writeback, int size, int usermode,
5614                     int rt, int rm, int rn)
5615 {
5616   ULONGEST rt_val, rn_val, rm_val = 0;
5617
5618   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5619   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5620   if (!immed)
5621     dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5622   if (!load)
5623     dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5624
5625   rt_val = displaced_read_reg (regs, dsc, rt);
5626   rn_val = displaced_read_reg (regs, dsc, rn);
5627   if (!immed)
5628     rm_val = displaced_read_reg (regs, dsc, rm);
5629
5630   displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5631   displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5632   if (!immed)
5633     displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5634   dsc->rd = rt;
5635   dsc->u.ldst.xfersize = size;
5636   dsc->u.ldst.rn = rn;
5637   dsc->u.ldst.immed = immed;
5638   dsc->u.ldst.writeback = writeback;
5639
5640   /* To write PC we can do:
5641
5642      Before this sequence of instructions:
5643      r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5644      r2 is the Rn value got from displaced_read_reg.
5645
5646      Insn1: push {pc} Write address of STR instruction + offset on stack
5647      Insn2: pop  {r4} Read it back from stack, r4 = addr(Insn1) + offset
5648      Insn3: sub r4, r4, pc   r4 = addr(Insn1) + offset - pc
5649                                 = addr(Insn1) + offset - addr(Insn3) - 8
5650                                 = offset - 16
5651      Insn4: add r4, r4, #8   r4 = offset - 8
5652      Insn5: add r0, r0, r4   r0 = from + 8 + offset - 8
5653                                 = from + offset
5654      Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5655
5656      Otherwise we don't know what value to write for PC, since the offset is
5657      architecture-dependent (sometimes PC+8, sometimes PC+12).  More details
5658      of this can be found in Section "Saving from r15" in
5659      http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5660
5661   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5662 }
5663
5664
5665 static int
5666 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5667                           uint16_t insn2, struct regcache *regs,
5668                           arm_displaced_step_copy_insn_closure *dsc, int size)
5669 {
5670   unsigned int u_bit = bit (insn1, 7);
5671   unsigned int rt = bits (insn2, 12, 15);
5672   int imm12 = bits (insn2, 0, 11);
5673   ULONGEST pc_val;
5674
5675   displaced_debug_printf ("copying ldr pc (0x%x) R%d %c imm12 %.4x",
5676                           (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5677                           imm12);
5678
5679   if (!u_bit)
5680     imm12 = -1 * imm12;
5681
5682   /* Rewrite instruction LDR Rt imm12 into:
5683
5684      Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5685
5686      LDR R0, R2, R3,
5687
5688      Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2].  */
5689
5690
5691   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5692   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5693   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5694
5695   pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5696
5697   pc_val = pc_val & 0xfffffffc;
5698
5699   displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5700   displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5701
5702   dsc->rd = rt;
5703
5704   dsc->u.ldst.xfersize = size;
5705   dsc->u.ldst.immed = 0;
5706   dsc->u.ldst.writeback = 0;
5707   dsc->u.ldst.restore_r4 = 0;
5708
5709   /* LDR R0, R2, R3 */
5710   dsc->modinsn[0] = 0xf852;
5711   dsc->modinsn[1] = 0x3;
5712   dsc->numinsns = 2;
5713
5714   dsc->cleanup = &cleanup_load;
5715
5716   return 0;
5717 }
5718
5719 static int
5720 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5721                           uint16_t insn2, struct regcache *regs,
5722                           arm_displaced_step_copy_insn_closure *dsc,
5723                           int writeback, int immed)
5724 {
5725   unsigned int rt = bits (insn2, 12, 15);
5726   unsigned int rn = bits (insn1, 0, 3);
5727   unsigned int rm = bits (insn2, 0, 3);  /* Only valid if !immed.  */
5728   /* In LDR (register), there is also a register Rm, which is not allowed to
5729      be PC, so we don't have to check it.  */
5730
5731   if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5732     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5733                                         dsc);
5734
5735   displaced_debug_printf ("copying ldr r%d [r%d] insn %.4x%.4x",
5736                           rt, rn, insn1, insn2);
5737
5738   install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5739                       0, rt, rm, rn);
5740
5741   dsc->u.ldst.restore_r4 = 0;
5742
5743   if (immed)
5744     /* ldr[b]<cond> rt, [rn, #imm], etc.
5745        ->
5746        ldr[b]<cond> r0, [r2, #imm].  */
5747     {
5748       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5749       dsc->modinsn[1] = insn2 & 0x0fff;
5750     }
5751   else
5752     /* ldr[b]<cond> rt, [rn, rm], etc.
5753        ->
5754        ldr[b]<cond> r0, [r2, r3].  */
5755     {
5756       dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5757       dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5758     }
5759
5760   dsc->numinsns = 2;
5761
5762   return 0;
5763 }
5764
5765
5766 static int
5767 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5768                             struct regcache *regs,
5769                             arm_displaced_step_copy_insn_closure *dsc,
5770                             int load, int size, int usermode)
5771 {
5772   int immed = !bit (insn, 25);
5773   int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5774   unsigned int rt = bits (insn, 12, 15);
5775   unsigned int rn = bits (insn, 16, 19);
5776   unsigned int rm = bits (insn, 0, 3);  /* Only valid if !immed.  */
5777
5778   if (!insn_references_pc (insn, 0x000ff00ful))
5779     return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5780
5781   displaced_debug_printf ("copying %s%s r%d [r%d] insn %.8lx",
5782                           load ? (size == 1 ? "ldrb" : "ldr")
5783                                : (size == 1 ? "strb" : "str"),
5784                           usermode ? "t" : "",
5785                           rt, rn,
5786                           (unsigned long) insn);
5787
5788   install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5789                       usermode, rt, rm, rn);
5790
5791   if (load || rt != ARM_PC_REGNUM)
5792     {
5793       dsc->u.ldst.restore_r4 = 0;
5794
5795       if (immed)
5796         /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5797            ->
5798            {ldr,str}[b]<cond> r0, [r2, #imm].  */
5799         dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5800       else
5801         /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5802            ->
5803            {ldr,str}[b]<cond> r0, [r2, r3].  */
5804         dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5805     }
5806   else
5807     {
5808       /* We need to use r4 as scratch.  Make sure it's restored afterwards.  */
5809       dsc->u.ldst.restore_r4 = 1;
5810       dsc->modinsn[0] = 0xe92d8000;  /* push {pc} */
5811       dsc->modinsn[1] = 0xe8bd0010;  /* pop  {r4} */
5812       dsc->modinsn[2] = 0xe044400f;  /* sub r4, r4, pc.  */
5813       dsc->modinsn[3] = 0xe2844008;  /* add r4, r4, #8.  */
5814       dsc->modinsn[4] = 0xe0800004;  /* add r0, r0, r4.  */
5815
5816       /* As above.  */
5817       if (immed)
5818         dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5819       else
5820         dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5821
5822       dsc->numinsns = 6;
5823     }
5824
5825   dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5826
5827   return 0;
5828 }
5829
5830 /* Cleanup LDM instructions with fully-populated register list.  This is an
5831    unfortunate corner case: it's impossible to implement correctly by modifying
5832    the instruction.  The issue is as follows: we have an instruction,
5833
5834    ldm rN, {r0-r15}
5835
5836    which we must rewrite to avoid loading PC.  A possible solution would be to
5837    do the load in two halves, something like (with suitable cleanup
5838    afterwards):
5839
5840    mov r8, rN
5841    ldm[id][ab] r8!, {r0-r7}
5842    str r7, <temp>
5843    ldm[id][ab] r8, {r7-r14}
5844    <bkpt>
5845
5846    but at present there's no suitable place for <temp>, since the scratch space
5847    is overwritten before the cleanup routine is called.  For now, we simply
5848    emulate the instruction.  */
5849
5850 static void
5851 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5852                         arm_displaced_step_copy_insn_closure *dsc)
5853 {
5854   int inc = dsc->u.block.increment;
5855   int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5856   int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5857   uint32_t regmask = dsc->u.block.regmask;
5858   int regno = inc ? 0 : 15;
5859   CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5860   int exception_return = dsc->u.block.load && dsc->u.block.user
5861                          && (regmask & 0x8000) != 0;
5862   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5863   int do_transfer = condition_true (dsc->u.block.cond, status);
5864   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5865
5866   if (!do_transfer)
5867     return;
5868
5869   /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5870      sensible we can do here.  Complain loudly.  */
5871   if (exception_return)
5872     error (_("Cannot single-step exception return"));
5873
5874   /* We don't handle any stores here for now.  */
5875   gdb_assert (dsc->u.block.load != 0);
5876
5877   displaced_debug_printf ("emulating block transfer: %s %s %s",
5878                           dsc->u.block.load ? "ldm" : "stm",
5879                           dsc->u.block.increment ? "inc" : "dec",
5880                           dsc->u.block.before ? "before" : "after");
5881
5882   while (regmask)
5883     {
5884       uint32_t memword;
5885
5886       if (inc)
5887         while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5888           regno++;
5889       else
5890         while (regno >= 0 && (regmask & (1 << regno)) == 0)
5891           regno--;
5892
5893       xfer_addr += bump_before;
5894
5895       memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5896       displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5897
5898       xfer_addr += bump_after;
5899
5900       regmask &= ~(1 << regno);
5901     }
5902
5903   if (dsc->u.block.writeback)
5904     displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5905                          CANNOT_WRITE_PC);
5906 }
5907
5908 /* Clean up an STM which included the PC in the register list.  */
5909
5910 static void
5911 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5912                         arm_displaced_step_copy_insn_closure *dsc)
5913 {
5914   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5915   int store_executed = condition_true (dsc->u.block.cond, status);
5916   CORE_ADDR pc_stored_at, transferred_regs
5917     = count_one_bits (dsc->u.block.regmask);
5918   CORE_ADDR stm_insn_addr;
5919   uint32_t pc_val;
5920   long offset;
5921   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5922
5923   /* If condition code fails, there's nothing else to do.  */
5924   if (!store_executed)
5925     return;
5926
5927   if (dsc->u.block.increment)
5928     {
5929       pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5930
5931       if (dsc->u.block.before)
5932          pc_stored_at += 4;
5933     }
5934   else
5935     {
5936       pc_stored_at = dsc->u.block.xfer_addr;
5937
5938       if (dsc->u.block.before)
5939          pc_stored_at -= 4;
5940     }
5941
5942   pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5943   stm_insn_addr = dsc->scratch_base;
5944   offset = pc_val - stm_insn_addr;
5945
5946   displaced_debug_printf ("detected PC offset %.8lx for STM instruction",
5947                           offset);
5948
5949   /* Rewrite the stored PC to the proper value for the non-displaced original
5950      instruction.  */
5951   write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5952                                  dsc->insn_addr + offset);
5953 }
5954
5955 /* Clean up an LDM which includes the PC in the register list.  We clumped all
5956    the registers in the transferred list into a contiguous range r0...rX (to
5957    avoid loading PC directly and losing control of the debugged program), so we
5958    must undo that here.  */
5959
5960 static void
5961 cleanup_block_load_pc (struct gdbarch *gdbarch,
5962                        struct regcache *regs,
5963                        arm_displaced_step_copy_insn_closure *dsc)
5964 {
5965   uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5966   int load_executed = condition_true (dsc->u.block.cond, status);
5967   unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5968   unsigned int regs_loaded = count_one_bits (mask);
5969   unsigned int num_to_shuffle = regs_loaded, clobbered;
5970
5971   /* The method employed here will fail if the register list is fully populated
5972      (we need to avoid loading PC directly).  */
5973   gdb_assert (num_to_shuffle < 16);
5974
5975   if (!load_executed)
5976     return;
5977
5978   clobbered = (1 << num_to_shuffle) - 1;
5979
5980   while (num_to_shuffle > 0)
5981     {
5982       if ((mask & (1 << write_reg)) != 0)
5983         {
5984           unsigned int read_reg = num_to_shuffle - 1;
5985
5986           if (read_reg != write_reg)
5987             {
5988               ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5989               displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5990               displaced_debug_printf ("LDM: move loaded register r%d to r%d",
5991                                       read_reg, write_reg);
5992             }
5993           else
5994             displaced_debug_printf ("LDM: register r%d already in the right "
5995                                     "place", write_reg);
5996
5997           clobbered &= ~(1 << write_reg);
5998
5999           num_to_shuffle--;
6000         }
6001
6002       write_reg--;
6003     }
6004
6005   /* Restore any registers we scribbled over.  */
6006   for (write_reg = 0; clobbered != 0; write_reg++)
6007     {
6008       if ((clobbered & (1 << write_reg)) != 0)
6009         {
6010           displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
6011                                CANNOT_WRITE_PC);
6012           displaced_debug_printf ("LDM: restored clobbered register r%d",
6013                                   write_reg);
6014           clobbered &= ~(1 << write_reg);
6015         }
6016     }
6017
6018   /* Perform register writeback manually.  */
6019   if (dsc->u.block.writeback)
6020     {
6021       ULONGEST new_rn_val = dsc->u.block.xfer_addr;
6022
6023       if (dsc->u.block.increment)
6024         new_rn_val += regs_loaded * 4;
6025       else
6026         new_rn_val -= regs_loaded * 4;
6027
6028       displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
6029                            CANNOT_WRITE_PC);
6030     }
6031 }
6032
6033 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
6034    in user-level code (in particular exception return, ldm rn, {...pc}^).  */
6035
6036 static int
6037 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
6038                      struct regcache *regs,
6039                      arm_displaced_step_copy_insn_closure *dsc)
6040 {
6041   int load = bit (insn, 20);
6042   int user = bit (insn, 22);
6043   int increment = bit (insn, 23);
6044   int before = bit (insn, 24);
6045   int writeback = bit (insn, 21);
6046   int rn = bits (insn, 16, 19);
6047
6048   /* Block transfers which don't mention PC can be run directly
6049      out-of-line.  */
6050   if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
6051     return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
6052
6053   if (rn == ARM_PC_REGNUM)
6054     {
6055       warning (_("displaced: Unpredictable LDM or STM with "
6056                  "base register r15"));
6057       return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
6058     }
6059
6060   displaced_debug_printf ("copying block transfer insn %.8lx",
6061                           (unsigned long) insn);
6062
6063   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6064   dsc->u.block.rn = rn;
6065
6066   dsc->u.block.load = load;
6067   dsc->u.block.user = user;
6068   dsc->u.block.increment = increment;
6069   dsc->u.block.before = before;
6070   dsc->u.block.writeback = writeback;
6071   dsc->u.block.cond = bits (insn, 28, 31);
6072
6073   dsc->u.block.regmask = insn & 0xffff;
6074
6075   if (load)
6076     {
6077       if ((insn & 0xffff) == 0xffff)
6078         {
6079           /* LDM with a fully-populated register list.  This case is
6080              particularly tricky.  Implement for now by fully emulating the
6081              instruction (which might not behave perfectly in all cases, but
6082              these instructions should be rare enough for that not to matter
6083              too much).  */
6084           dsc->modinsn[0] = ARM_NOP;
6085
6086           dsc->cleanup = &cleanup_block_load_all;
6087         }
6088       else
6089         {
6090           /* LDM of a list of registers which includes PC.  Implement by
6091              rewriting the list of registers to be transferred into a
6092              contiguous chunk r0...rX before doing the transfer, then shuffling
6093              registers into the correct places in the cleanup routine.  */
6094           unsigned int regmask = insn & 0xffff;
6095           unsigned int num_in_list = count_one_bits (regmask), new_regmask;
6096           unsigned int i;
6097
6098           for (i = 0; i < num_in_list; i++)
6099             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6100
6101           /* Writeback makes things complicated.  We need to avoid clobbering
6102              the base register with one of the registers in our modified
6103              register list, but just using a different register can't work in
6104              all cases, e.g.:
6105
6106                ldm r14!, {r0-r13,pc}
6107
6108              which would need to be rewritten as:
6109
6110                ldm rN!, {r0-r14}
6111
6112              but that can't work, because there's no free register for N.
6113
6114              Solve this by turning off the writeback bit, and emulating
6115              writeback manually in the cleanup routine.  */
6116
6117           if (writeback)
6118             insn &= ~(1 << 21);
6119
6120           new_regmask = (1 << num_in_list) - 1;
6121
6122           displaced_debug_printf ("LDM r%d%s, {..., pc}: original reg list "
6123                                   "%.4x, modified list %.4x",
6124                                   rn, writeback ? "!" : "",
6125                                   (int) insn & 0xffff, new_regmask);
6126
6127           dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6128
6129           dsc->cleanup = &cleanup_block_load_pc;
6130         }
6131     }
6132   else
6133     {
6134       /* STM of a list of registers which includes PC.  Run the instruction
6135          as-is, but out of line: this will store the wrong value for the PC,
6136          so we must manually fix up the memory in the cleanup routine.
6137          Doing things this way has the advantage that we can auto-detect
6138          the offset of the PC write (which is architecture-dependent) in
6139          the cleanup routine.  */
6140       dsc->modinsn[0] = insn;
6141
6142       dsc->cleanup = &cleanup_block_store_pc;
6143     }
6144
6145   return 0;
6146 }
6147
6148 static int
6149 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6150                         struct regcache *regs,
6151                         arm_displaced_step_copy_insn_closure *dsc)
6152 {
6153   int rn = bits (insn1, 0, 3);
6154   int load = bit (insn1, 4);
6155   int writeback = bit (insn1, 5);
6156
6157   /* Block transfers which don't mention PC can be run directly
6158      out-of-line.  */
6159   if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6160     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6161
6162   if (rn == ARM_PC_REGNUM)
6163     {
6164       warning (_("displaced: Unpredictable LDM or STM with "
6165                  "base register r15"));
6166       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6167                                           "unpredictable ldm/stm", dsc);
6168     }
6169
6170   displaced_debug_printf ("copying block transfer insn %.4x%.4x",
6171                           insn1, insn2);
6172
6173   /* Clear bit 13, since it should be always zero.  */
6174   dsc->u.block.regmask = (insn2 & 0xdfff);
6175   dsc->u.block.rn = rn;
6176
6177   dsc->u.block.load = load;
6178   dsc->u.block.user = 0;
6179   dsc->u.block.increment = bit (insn1, 7);
6180   dsc->u.block.before = bit (insn1, 8);
6181   dsc->u.block.writeback = writeback;
6182   dsc->u.block.cond = INST_AL;
6183   dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6184
6185   if (load)
6186     {
6187       if (dsc->u.block.regmask == 0xffff)
6188         {
6189           /* This branch is impossible to happen.  */
6190           gdb_assert (0);
6191         }
6192       else
6193         {
6194           unsigned int regmask = dsc->u.block.regmask;
6195           unsigned int num_in_list = count_one_bits (regmask), new_regmask;
6196           unsigned int i;
6197
6198           for (i = 0; i < num_in_list; i++)
6199             dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6200
6201           if (writeback)
6202             insn1 &= ~(1 << 5);
6203
6204           new_regmask = (1 << num_in_list) - 1;
6205
6206           displaced_debug_printf ("LDM r%d%s, {..., pc}: original reg list "
6207                                   "%.4x, modified list %.4x",
6208                                   rn, writeback ? "!" : "",
6209                                   (int) dsc->u.block.regmask, new_regmask);
6210
6211           dsc->modinsn[0] = insn1;
6212           dsc->modinsn[1] = (new_regmask & 0xffff);
6213           dsc->numinsns = 2;
6214
6215           dsc->cleanup = &cleanup_block_load_pc;
6216         }
6217     }
6218   else
6219     {
6220       dsc->modinsn[0] = insn1;
6221       dsc->modinsn[1] = insn2;
6222       dsc->numinsns = 2;
6223       dsc->cleanup = &cleanup_block_store_pc;
6224     }
6225   return 0;
6226 }
6227
6228 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6229  This is used to avoid a dependency on BFD's bfd_endian enum.  */
6230
6231 ULONGEST
6232 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6233                                                int byte_order)
6234 {
6235   return read_memory_unsigned_integer (memaddr, len,
6236                                        (enum bfd_endian) byte_order);
6237 }
6238
6239 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs.  */
6240
6241 CORE_ADDR
6242 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6243                                    CORE_ADDR val)
6244 {
6245   return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6246 }
6247
6248 /* Wrapper over syscall_next_pc for use in get_next_pcs.  */
6249
6250 static CORE_ADDR
6251 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6252 {
6253   return 0;
6254 }
6255
6256 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs.  */
6257
6258 int
6259 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6260 {
6261   return arm_is_thumb (self->regcache);
6262 }
6263
6264 /* single_step() is called just before we want to resume the inferior,
6265    if we want to single-step it but there is no hardware or kernel
6266    single-step support.  We find the target of the coming instructions
6267    and breakpoint them.  */
6268
6269 std::vector<CORE_ADDR>
6270 arm_software_single_step (struct regcache *regcache)
6271 {
6272   struct gdbarch *gdbarch = regcache->arch ();
6273   struct arm_get_next_pcs next_pcs_ctx;
6274
6275   arm_get_next_pcs_ctor (&next_pcs_ctx,
6276                          &arm_get_next_pcs_ops,
6277                          gdbarch_byte_order (gdbarch),
6278                          gdbarch_byte_order_for_code (gdbarch),
6279                          0,
6280                          regcache);
6281
6282   std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6283
6284   for (CORE_ADDR &pc_ref : next_pcs)
6285     pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6286
6287   return next_pcs;
6288 }
6289
6290 /* Cleanup/copy SVC (SWI) instructions.  These two functions are overridden
6291    for Linux, where some SVC instructions must be treated specially.  */
6292
6293 static void
6294 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6295              arm_displaced_step_copy_insn_closure *dsc)
6296 {
6297   CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6298
6299   displaced_debug_printf ("cleanup for svc, resume at %.8lx",
6300                           (unsigned long) resume_addr);
6301
6302   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6303 }
6304
6305
6306 /* Common copy routine for svc instruction.  */
6307
6308 static int
6309 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6310              arm_displaced_step_copy_insn_closure *dsc)
6311 {
6312   /* Preparation: none.
6313      Insn: unmodified svc.
6314      Cleanup: pc <- insn_addr + insn_size.  */
6315
6316   /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6317      instruction.  */
6318   dsc->wrote_to_pc = 1;
6319
6320   /* Allow OS-specific code to override SVC handling.  */
6321   if (dsc->u.svc.copy_svc_os)
6322     return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6323   else
6324     {
6325       dsc->cleanup = &cleanup_svc;
6326       return 0;
6327     }
6328 }
6329
6330 static int
6331 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6332               regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
6333 {
6334
6335   displaced_debug_printf ("copying svc insn %.8lx",
6336                           (unsigned long) insn);
6337
6338   dsc->modinsn[0] = insn;
6339
6340   return install_svc (gdbarch, regs, dsc);
6341 }
6342
6343 static int
6344 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6345                 regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
6346 {
6347
6348   displaced_debug_printf ("copying svc insn %.4x", insn);
6349
6350   dsc->modinsn[0] = insn;
6351
6352   return install_svc (gdbarch, regs, dsc);
6353 }
6354
6355 /* Copy undefined instructions.  */
6356
6357 static int
6358 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6359                 arm_displaced_step_copy_insn_closure *dsc)
6360 {
6361   displaced_debug_printf ("copying undefined insn %.8lx",
6362                           (unsigned long) insn);
6363
6364   dsc->modinsn[0] = insn;
6365
6366   return 0;
6367 }
6368
6369 static int
6370 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6371                         arm_displaced_step_copy_insn_closure *dsc)
6372 {
6373
6374   displaced_debug_printf ("copying undefined insn %.4x %.4x",
6375                           (unsigned short) insn1, (unsigned short) insn2);
6376
6377   dsc->modinsn[0] = insn1;
6378   dsc->modinsn[1] = insn2;
6379   dsc->numinsns = 2;
6380
6381   return 0;
6382 }
6383
6384 /* Copy unpredictable instructions.  */
6385
6386 static int
6387 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6388                  arm_displaced_step_copy_insn_closure *dsc)
6389 {
6390   displaced_debug_printf ("copying unpredictable insn %.8lx",
6391                           (unsigned long) insn);
6392
6393   dsc->modinsn[0] = insn;
6394
6395   return 0;
6396 }
6397
6398 /* The decode_* functions are instruction decoding helpers.  They mostly follow
6399    the presentation in the ARM ARM.  */
6400
6401 static int
6402 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6403                               struct regcache *regs,
6404                               arm_displaced_step_copy_insn_closure *dsc)
6405 {
6406   unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6407   unsigned int rn = bits (insn, 16, 19);
6408
6409   if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6410     return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6411   else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6412     return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6413   else if ((op1 & 0x60) == 0x20)
6414     return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6415   else if ((op1 & 0x71) == 0x40)
6416     return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6417                                 dsc);
6418   else if ((op1 & 0x77) == 0x41)
6419     return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6420   else if ((op1 & 0x77) == 0x45)
6421     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pli.  */
6422   else if ((op1 & 0x77) == 0x51)
6423     {
6424       if (rn != 0xf)
6425         return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6426       else
6427         return arm_copy_unpred (gdbarch, insn, dsc);
6428     }
6429   else if ((op1 & 0x77) == 0x55)
6430     return arm_copy_preload (gdbarch, insn, regs, dsc);  /* pld/pldw.  */
6431   else if (op1 == 0x57)
6432     switch (op2)
6433       {
6434       case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6435       case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6436       case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6437       case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6438       default: return arm_copy_unpred (gdbarch, insn, dsc);
6439       }
6440   else if ((op1 & 0x63) == 0x43)
6441     return arm_copy_unpred (gdbarch, insn, dsc);
6442   else if ((op2 & 0x1) == 0x0)
6443     switch (op1 & ~0x80)
6444       {
6445       case 0x61:
6446         return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6447       case 0x65:
6448         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);  /* pli reg.  */
6449       case 0x71: case 0x75:
6450         /* pld/pldw reg.  */
6451         return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6452       case 0x63: case 0x67: case 0x73: case 0x77:
6453         return arm_copy_unpred (gdbarch, insn, dsc);
6454       default:
6455         return arm_copy_undef (gdbarch, insn, dsc);
6456       }
6457   else
6458     return arm_copy_undef (gdbarch, insn, dsc);  /* Probably unreachable.  */
6459 }
6460
6461 static int
6462 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6463                           struct regcache *regs,
6464                           arm_displaced_step_copy_insn_closure *dsc)
6465 {
6466   if (bit (insn, 27) == 0)
6467     return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6468   /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx.  */
6469   else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6470     {
6471     case 0x0: case 0x2:
6472       return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6473
6474     case 0x1: case 0x3:
6475       return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6476
6477     case 0x4: case 0x5: case 0x6: case 0x7:
6478       return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6479
6480     case 0x8:
6481       switch ((insn & 0xe00000) >> 21)
6482         {
6483         case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6484           /* stc/stc2.  */
6485           return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6486
6487         case 0x2:
6488           return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6489
6490         default:
6491           return arm_copy_undef (gdbarch, insn, dsc);
6492         }
6493
6494     case 0x9:
6495       {
6496          int rn_f = (bits (insn, 16, 19) == 0xf);
6497         switch ((insn & 0xe00000) >> 21)
6498           {
6499           case 0x1: case 0x3:
6500             /* ldc/ldc2 imm (undefined for rn == pc).  */
6501             return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6502                         : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6503
6504           case 0x2:
6505             return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6506
6507           case 0x4: case 0x5: case 0x6: case 0x7:
6508             /* ldc/ldc2 lit (undefined for rn != pc).  */
6509             return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6510                         : arm_copy_undef (gdbarch, insn, dsc);
6511
6512           default:
6513             return arm_copy_undef (gdbarch, insn, dsc);
6514           }
6515       }
6516
6517     case 0xa:
6518       return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6519
6520     case 0xb:
6521       if (bits (insn, 16, 19) == 0xf)
6522         /* ldc/ldc2 lit.  */
6523         return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6524       else
6525         return arm_copy_undef (gdbarch, insn, dsc);
6526
6527     case 0xc:
6528       if (bit (insn, 4))
6529         return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6530       else
6531         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6532
6533     case 0xd:
6534       if (bit (insn, 4))
6535         return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6536       else
6537         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6538
6539     default:
6540       return arm_copy_undef (gdbarch, insn, dsc);
6541     }
6542 }
6543
6544 /* Decode miscellaneous instructions in dp/misc encoding space.  */
6545
6546 static int
6547 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6548                           struct regcache *regs,
6549                           arm_displaced_step_copy_insn_closure *dsc)
6550 {
6551   unsigned int op2 = bits (insn, 4, 6);
6552   unsigned int op = bits (insn, 21, 22);
6553
6554   switch (op2)
6555     {
6556     case 0x0:
6557       return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6558
6559     case 0x1:
6560       if (op == 0x1)  /* bx.  */
6561         return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6562       else if (op == 0x3)
6563         return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6564       else
6565         return arm_copy_undef (gdbarch, insn, dsc);
6566
6567     case 0x2:
6568       if (op == 0x1)
6569         /* Not really supported.  */
6570         return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6571       else
6572         return arm_copy_undef (gdbarch, insn, dsc);
6573
6574     case 0x3:
6575       if (op == 0x1)
6576         return arm_copy_bx_blx_reg (gdbarch, insn,
6577                                 regs, dsc);  /* blx register.  */
6578       else
6579         return arm_copy_undef (gdbarch, insn, dsc);
6580
6581     case 0x5:
6582       return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6583
6584     case 0x7:
6585       if (op == 0x1)
6586         return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6587       else if (op == 0x3)
6588         /* Not really supported.  */
6589         return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
6590       /* Fall through.  */
6591
6592     default:
6593       return arm_copy_undef (gdbarch, insn, dsc);
6594     }
6595 }
6596
6597 static int
6598 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
6599                     struct regcache *regs,
6600                     arm_displaced_step_copy_insn_closure *dsc)
6601 {
6602   if (bit (insn, 25))
6603     switch (bits (insn, 20, 24))
6604       {
6605       case 0x10:
6606         return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
6607
6608       case 0x14:
6609         return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
6610
6611       case 0x12: case 0x16:
6612         return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
6613
6614       default:
6615         return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
6616       }
6617   else
6618     {
6619       uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
6620
6621       if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
6622         return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
6623       else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
6624         return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
6625       else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
6626         return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
6627       else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
6628         return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
6629       else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
6630         return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
6631       else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
6632         return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
6633       else if (op2 == 0xb || (op2 & 0xd) == 0xd)
6634         /* 2nd arg means "unprivileged".  */
6635         return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
6636                                      dsc);
6637     }
6638
6639   /* Should be unreachable.  */
6640   return 1;
6641 }
6642
6643 static int
6644 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
6645                              struct regcache *regs,
6646                              arm_displaced_step_copy_insn_closure *dsc)
6647 {
6648   int a = bit (insn, 25), b = bit (insn, 4);
6649   uint32_t op1 = bits (insn, 20, 24);
6650
6651   if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
6652       || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
6653     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
6654   else if ((!a && (op1 & 0x17) == 0x02)
6655             || (a && (op1 & 0x17) == 0x02 && !b))
6656     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
6657   else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
6658             || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
6659     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
6660   else if ((!a && (op1 & 0x17) == 0x03)
6661            || (a && (op1 & 0x17) == 0x03 && !b))
6662     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
6663   else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
6664             || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
6665     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
6666   else if ((!a && (op1 & 0x17) == 0x06)
6667            || (a && (op1 & 0x17) == 0x06 && !b))
6668     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
6669   else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
6670            || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
6671     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
6672   else if ((!a && (op1 & 0x17) == 0x07)
6673            || (a && (op1 & 0x17) == 0x07 && !b))
6674     return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
6675
6676   /* Should be unreachable.  */
6677   return 1;
6678 }
6679
6680 static int
6681 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
6682                   arm_displaced_step_copy_insn_closure *dsc)
6683 {
6684   switch (bits (insn, 20, 24))
6685     {
6686     case 0x00: case 0x01: case 0x02: case 0x03:
6687       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
6688
6689     case 0x04: case 0x05: case 0x06: case 0x07:
6690       return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
6691
6692     case 0x08: case 0x09: case 0x0a: case 0x0b:
6693     case 0x0c: case 0x0d: case 0x0e: case 0x0f:
6694       return arm_copy_unmodified (gdbarch, insn,
6695                               "decode/pack/unpack/saturate/reverse", dsc);
6696
6697     case 0x18:
6698       if (bits (insn, 5, 7) == 0)  /* op2.  */
6699          {
6700           if (bits (insn, 12, 15) == 0xf)
6701             return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
6702           else
6703             return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
6704         }
6705       else
6706          return arm_copy_undef (gdbarch, insn, dsc);
6707
6708     case 0x1a: case 0x1b:
6709       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6710         return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
6711       else
6712         return arm_copy_undef (gdbarch, insn, dsc);
6713
6714     case 0x1c: case 0x1d:
6715       if (bits (insn, 5, 6) == 0x0)  /* op2[1:0].  */
6716          {
6717           if (bits (insn, 0, 3) == 0xf)
6718             return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
6719           else
6720             return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
6721         }
6722       else
6723         return arm_copy_undef (gdbarch, insn, dsc);
6724
6725     case 0x1e: case 0x1f:
6726       if (bits (insn, 5, 6) == 0x2)  /* op2[1:0].  */
6727         return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
6728       else
6729         return arm_copy_undef (gdbarch, insn, dsc);
6730     }
6731
6732   /* Should be unreachable.  */
6733   return 1;
6734 }
6735
6736 static int
6737 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
6738                         struct regcache *regs,
6739                         arm_displaced_step_copy_insn_closure *dsc)
6740 {
6741   if (bit (insn, 25))
6742     return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6743   else
6744     return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
6745 }
6746
6747 static int
6748 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
6749                           struct regcache *regs,
6750                           arm_displaced_step_copy_insn_closure *dsc)
6751 {
6752   unsigned int opcode = bits (insn, 20, 24);
6753
6754   switch (opcode)
6755     {
6756     case 0x04: case 0x05:  /* VFP/Neon mrrc/mcrr.  */
6757       return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
6758
6759     case 0x08: case 0x0a: case 0x0c: case 0x0e:
6760     case 0x12: case 0x16:
6761       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
6762
6763     case 0x09: case 0x0b: case 0x0d: case 0x0f:
6764     case 0x13: case 0x17:
6765       return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
6766
6767     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6768     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6769       /* Note: no writeback for these instructions.  Bit 25 will always be
6770          zero though (via caller), so the following works OK.  */
6771       return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6772     }
6773
6774   /* Should be unreachable.  */
6775   return 1;
6776 }
6777
6778 /* Decode shifted register instructions.  */
6779
6780 static int
6781 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
6782                             uint16_t insn2,  struct regcache *regs,
6783                             arm_displaced_step_copy_insn_closure *dsc)
6784 {
6785   /* PC is only allowed to be used in instruction MOV.  */
6786
6787   unsigned int op = bits (insn1, 5, 8);
6788   unsigned int rn = bits (insn1, 0, 3);
6789
6790   if (op == 0x2 && rn == 0xf) /* MOV */
6791     return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
6792   else
6793     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6794                                         "dp (shift reg)", dsc);
6795 }
6796
6797
6798 /* Decode extension register load/store.  Exactly the same as
6799    arm_decode_ext_reg_ld_st.  */
6800
6801 static int
6802 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
6803                              uint16_t insn2,  struct regcache *regs,
6804                              arm_displaced_step_copy_insn_closure *dsc)
6805 {
6806   unsigned int opcode = bits (insn1, 4, 8);
6807
6808   switch (opcode)
6809     {
6810     case 0x04: case 0x05:
6811       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6812                                           "vfp/neon vmov", dsc);
6813
6814     case 0x08: case 0x0c: /* 01x00 */
6815     case 0x0a: case 0x0e: /* 01x10 */
6816     case 0x12: case 0x16: /* 10x10 */
6817       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6818                                           "vfp/neon vstm/vpush", dsc);
6819
6820     case 0x09: case 0x0d: /* 01x01 */
6821     case 0x0b: case 0x0f: /* 01x11 */
6822     case 0x13: case 0x17: /* 10x11 */
6823       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6824                                           "vfp/neon vldm/vpop", dsc);
6825
6826     case 0x10: case 0x14: case 0x18: case 0x1c:  /* vstr.  */
6827       return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6828                                           "vstr", dsc);
6829     case 0x11: case 0x15: case 0x19: case 0x1d:  /* vldr.  */
6830       return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
6831     }
6832
6833   /* Should be unreachable.  */
6834   return 1;
6835 }
6836
6837 static int
6838 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
6839                       regcache *regs, arm_displaced_step_copy_insn_closure *dsc)
6840 {
6841   unsigned int op1 = bits (insn, 20, 25);
6842   int op = bit (insn, 4);
6843   unsigned int coproc = bits (insn, 8, 11);
6844
6845   if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
6846     return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
6847   else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
6848            && (coproc & 0xe) != 0xa)
6849     /* stc/stc2.  */
6850     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6851   else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
6852            && (coproc & 0xe) != 0xa)
6853     /* ldc/ldc2 imm/lit.  */
6854     return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6855   else if ((op1 & 0x3e) == 0x00)
6856     return arm_copy_undef (gdbarch, insn, dsc);
6857   else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
6858     return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
6859   else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
6860     return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6861   else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
6862     return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6863   else if ((op1 & 0x30) == 0x20 && !op)
6864     {
6865       if ((coproc & 0xe) == 0xa)
6866         return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
6867       else
6868         return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6869     }
6870   else if ((op1 & 0x30) == 0x20 && op)
6871     return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
6872   else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
6873     return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6874   else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
6875     return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6876   else if ((op1 & 0x30) == 0x30)
6877     return arm_copy_svc (gdbarch, insn, regs, dsc);
6878   else
6879     return arm_copy_undef (gdbarch, insn, dsc);  /* Possibly unreachable.  */
6880 }
6881
6882 static int
6883 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
6884                          uint16_t insn2, struct regcache *regs,
6885                          arm_displaced_step_copy_insn_closure *dsc)
6886 {
6887   unsigned int coproc = bits (insn2, 8, 11);
6888   unsigned int bit_5_8 = bits (insn1, 5, 8);
6889   unsigned int bit_9 = bit (insn1, 9);
6890   unsigned int bit_4 = bit (insn1, 4);
6891
6892   if (bit_9 == 0)
6893     {
6894       if (bit_5_8 == 2)
6895         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6896                                             "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
6897                                             dsc);
6898       else if (bit_5_8 == 0) /* UNDEFINED.  */
6899         return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
6900       else
6901         {
6902            /*coproc is 101x.  SIMD/VFP, ext registers load/store.  */
6903           if ((coproc & 0xe) == 0xa)
6904             return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
6905                                                 dsc);
6906           else /* coproc is not 101x.  */
6907             {
6908               if (bit_4 == 0) /* STC/STC2.  */
6909                 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6910                                                     "stc/stc2", dsc);
6911               else /* LDC/LDC2 {literal, immediate}.  */
6912                 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
6913                                                      regs, dsc);
6914             }
6915         }
6916     }
6917   else
6918     return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
6919
6920   return 0;
6921 }
6922
6923 static void
6924 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
6925                      arm_displaced_step_copy_insn_closure *dsc, int rd)
6926 {
6927   /* ADR Rd, #imm
6928
6929      Rewrite as:
6930
6931      Preparation: Rd <- PC
6932      Insn: ADD Rd, #imm
6933      Cleanup: Null.
6934   */
6935
6936   /* Rd <- PC */
6937   int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6938   displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
6939 }
6940
6941 static int
6942 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
6943                               arm_displaced_step_copy_insn_closure *dsc,
6944                               int rd, unsigned int imm)
6945 {
6946
6947   /* Encoding T2: ADDS Rd, #imm */
6948   dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
6949
6950   install_pc_relative (gdbarch, regs, dsc, rd);
6951
6952   return 0;
6953 }
6954
6955 static int
6956 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
6957                                 struct regcache *regs,
6958                                 arm_displaced_step_copy_insn_closure *dsc)
6959 {
6960   unsigned int rd = bits (insn, 8, 10);
6961   unsigned int imm8 = bits (insn, 0, 7);
6962
6963   displaced_debug_printf ("copying thumb adr r%d, #%d insn %.4x",
6964                           rd, imm8, insn);
6965
6966   return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
6967 }
6968
6969 static int
6970 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
6971                               uint16_t insn2, struct regcache *regs,
6972                               arm_displaced_step_copy_insn_closure *dsc)
6973 {
6974   unsigned int rd = bits (insn2, 8, 11);
6975   /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
6976      extract raw immediate encoding rather than computing immediate.  When
6977      generating ADD or SUB instruction, we can simply perform OR operation to
6978      set immediate into ADD.  */
6979   unsigned int imm_3_8 = insn2 & 0x70ff;
6980   unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10.  */
6981
6982   displaced_debug_printf ("copying thumb adr r%d, #%d:%d insn %.4x%.4x",
6983                           rd, imm_i, imm_3_8, insn1, insn2);
6984
6985   if (bit (insn1, 7)) /* Encoding T2 */
6986     {
6987       /* Encoding T3: SUB Rd, Rd, #imm */
6988       dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
6989       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6990     }
6991   else /* Encoding T3 */
6992     {
6993       /* Encoding T3: ADD Rd, Rd, #imm */
6994       dsc->modinsn[0] = (0xf100 | rd | imm_i);
6995       dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6996     }
6997   dsc->numinsns = 2;
6998
6999   install_pc_relative (gdbarch, regs, dsc, rd);
7000
7001   return 0;
7002 }
7003
7004 static int
7005 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
7006                               struct regcache *regs,
7007                               arm_displaced_step_copy_insn_closure *dsc)
7008 {
7009   unsigned int rt = bits (insn1, 8, 10);
7010   unsigned int pc;
7011   int imm8 = (bits (insn1, 0, 7) << 2);
7012
7013   /* LDR Rd, #imm8
7014
7015      Rwrite as:
7016
7017      Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
7018
7019      Insn: LDR R0, [R2, R3];
7020      Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
7021
7022   displaced_debug_printf ("copying thumb ldr r%d [pc #%d]", rt, imm8);
7023
7024   dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
7025   dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
7026   dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
7027   pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
7028   /* The assembler calculates the required value of the offset from the
7029      Align(PC,4) value of this instruction to the label.  */
7030   pc = pc & 0xfffffffc;
7031
7032   displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
7033   displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
7034
7035   dsc->rd = rt;
7036   dsc->u.ldst.xfersize = 4;
7037   dsc->u.ldst.rn = 0;
7038   dsc->u.ldst.immed = 0;
7039   dsc->u.ldst.writeback = 0;
7040   dsc->u.ldst.restore_r4 = 0;
7041
7042   dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
7043
7044   dsc->cleanup = &cleanup_load;
7045
7046   return 0;
7047 }
7048
7049 /* Copy Thumb cbnz/cbz instruction.  */
7050
7051 static int
7052 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
7053                      struct regcache *regs,
7054                      arm_displaced_step_copy_insn_closure *dsc)
7055 {
7056   int non_zero = bit (insn1, 11);
7057   unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
7058   CORE_ADDR from = dsc->insn_addr;
7059   int rn = bits (insn1, 0, 2);
7060   int rn_val = displaced_read_reg (regs, dsc, rn);
7061
7062   dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
7063   /* CBNZ and CBZ do not affect the condition flags.  If condition is true,
7064      set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
7065      condition is false, let it be, cleanup_branch will do nothing.  */
7066   if (dsc->u.branch.cond)
7067     {
7068       dsc->u.branch.cond = INST_AL;
7069       dsc->u.branch.dest = from + 4 + imm5;
7070     }
7071   else
7072       dsc->u.branch.dest = from + 2;
7073
7074   dsc->u.branch.link = 0;
7075   dsc->u.branch.exchange = 0;
7076
7077   displaced_debug_printf ("copying %s [r%d = 0x%x] insn %.4x to %.8lx",
7078                           non_zero ? "cbnz" : "cbz",
7079                           rn, rn_val, insn1, dsc->u.branch.dest);
7080
7081   dsc->modinsn[0] = THUMB_NOP;
7082
7083   dsc->cleanup = &cleanup_branch;
7084   return 0;
7085 }
7086
7087 /* Copy Table Branch Byte/Halfword */
7088 static int
7089 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
7090                           uint16_t insn2, struct regcache *regs,
7091                           arm_displaced_step_copy_insn_closure *dsc)
7092 {
7093   ULONGEST rn_val, rm_val;
7094   int is_tbh = bit (insn2, 4);
7095   CORE_ADDR halfwords = 0;
7096   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7097
7098   rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
7099   rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
7100
7101   if (is_tbh)
7102     {
7103       gdb_byte buf[2];
7104
7105       target_read_memory (rn_val + 2 * rm_val, buf, 2);
7106       halfwords = extract_unsigned_integer (buf, 2, byte_order);
7107     }
7108   else
7109     {
7110       gdb_byte buf[1];
7111
7112       target_read_memory (rn_val + rm_val, buf, 1);
7113       halfwords = extract_unsigned_integer (buf, 1, byte_order);
7114     }
7115
7116   displaced_debug_printf ("%s base 0x%x offset 0x%x offset 0x%x",
7117                           is_tbh ? "tbh" : "tbb",
7118                           (unsigned int) rn_val, (unsigned int) rm_val,
7119                           (unsigned int) halfwords);
7120
7121   dsc->u.branch.cond = INST_AL;
7122   dsc->u.branch.link = 0;
7123   dsc->u.branch.exchange = 0;
7124   dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
7125
7126   dsc->cleanup = &cleanup_branch;
7127
7128   return 0;
7129 }
7130
7131 static void
7132 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
7133                           arm_displaced_step_copy_insn_closure *dsc)
7134 {
7135   /* PC <- r7 */
7136   int val = displaced_read_reg (regs, dsc, 7);
7137   displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
7138
7139   /* r7 <- r8 */
7140   val = displaced_read_reg (regs, dsc, 8);
7141   displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
7142
7143   /* r8 <- tmp[0] */
7144   displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
7145
7146 }
7147
7148 static int
7149 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
7150                          struct regcache *regs,
7151                          arm_displaced_step_copy_insn_closure *dsc)
7152 {
7153   dsc->u.block.regmask = insn1 & 0x00ff;
7154
7155   /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
7156      to :
7157
7158      (1) register list is full, that is, r0-r7 are used.
7159      Prepare: tmp[0] <- r8
7160
7161      POP {r0, r1, ...., r6, r7}; remove PC from reglist
7162      MOV r8, r7; Move value of r7 to r8;
7163      POP {r7}; Store PC value into r7.
7164
7165      Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
7166
7167      (2) register list is not full, supposing there are N registers in
7168      register list (except PC, 0 <= N <= 7).
7169      Prepare: for each i, 0 - N, tmp[i] <- ri.
7170
7171      POP {r0, r1, ...., rN};
7172
7173      Cleanup: Set registers in original reglist from r0 - rN.  Restore r0 - rN
7174      from tmp[] properly.
7175   */
7176   displaced_debug_printf ("copying thumb pop {%.8x, pc} insn %.4x",
7177                           dsc->u.block.regmask, insn1);
7178
7179   if (dsc->u.block.regmask == 0xff)
7180     {
7181       dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
7182
7183       dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
7184       dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
7185       dsc->modinsn[2] = 0xbc80; /* POP {r7} */
7186
7187       dsc->numinsns = 3;
7188       dsc->cleanup = &cleanup_pop_pc_16bit_all;
7189     }
7190   else
7191     {
7192       unsigned int num_in_list = count_one_bits (dsc->u.block.regmask);
7193       unsigned int i;
7194       unsigned int new_regmask;
7195
7196       for (i = 0; i < num_in_list + 1; i++)
7197         dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7198
7199       new_regmask = (1 << (num_in_list + 1)) - 1;
7200
7201       displaced_debug_printf ("POP {..., pc}: original reg list %.4x, "
7202                               "modified list %.4x",
7203                               (int) dsc->u.block.regmask, new_regmask);
7204
7205       dsc->u.block.regmask |= 0x8000;
7206       dsc->u.block.writeback = 0;
7207       dsc->u.block.cond = INST_AL;
7208
7209       dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
7210
7211       dsc->cleanup = &cleanup_block_load_pc;
7212     }
7213
7214   return 0;
7215 }
7216
7217 static void
7218 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7219                                     struct regcache *regs,
7220                                     arm_displaced_step_copy_insn_closure *dsc)
7221 {
7222   unsigned short op_bit_12_15 = bits (insn1, 12, 15);
7223   unsigned short op_bit_10_11 = bits (insn1, 10, 11);
7224   int err = 0;
7225
7226   /* 16-bit thumb instructions.  */
7227   switch (op_bit_12_15)
7228     {
7229       /* Shift (imme), add, subtract, move and compare.  */
7230     case 0: case 1: case 2: case 3:
7231       err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7232                                          "shift/add/sub/mov/cmp",
7233                                          dsc);
7234       break;
7235     case 4:
7236       switch (op_bit_10_11)
7237         {
7238         case 0: /* Data-processing */
7239           err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7240                                              "data-processing",
7241                                              dsc);
7242           break;
7243         case 1: /* Special data instructions and branch and exchange.  */
7244           {
7245             unsigned short op = bits (insn1, 7, 9);
7246             if (op == 6 || op == 7) /* BX or BLX */
7247               err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
7248             else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers.  */
7249               err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
7250             else
7251               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
7252                                                  dsc);
7253           }
7254           break;
7255         default: /* LDR (literal) */
7256           err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
7257         }
7258       break;
7259     case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
7260       err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
7261       break;
7262     case 10:
7263       if (op_bit_10_11 < 2) /* Generate PC-relative address */
7264         err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
7265       else /* Generate SP-relative address */
7266         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
7267       break;
7268     case 11: /* Misc 16-bit instructions */
7269       {
7270         switch (bits (insn1, 8, 11))
7271           {
7272           case 1: case 3:  case 9: case 11: /* CBNZ, CBZ */
7273             err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
7274             break;
7275           case 12: case 13: /* POP */
7276             if (bit (insn1, 8)) /* PC is in register list.  */
7277               err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
7278             else
7279               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
7280             break;
7281           case 15: /* If-Then, and hints */
7282             if (bits (insn1, 0, 3))
7283               /* If-Then makes up to four following instructions conditional.
7284                  IT instruction itself is not conditional, so handle it as a
7285                  common unmodified instruction.  */
7286               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
7287                                                  dsc);
7288             else
7289               err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
7290             break;
7291           default:
7292             err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
7293           }
7294       }
7295       break;
7296     case 12:
7297       if (op_bit_10_11 < 2) /* Store multiple registers */
7298         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
7299       else /* Load multiple registers */
7300         err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
7301       break;
7302     case 13: /* Conditional branch and supervisor call */
7303       if (bits (insn1, 9, 11) != 7) /* conditional branch */
7304         err = thumb_copy_b (gdbarch, insn1, dsc);
7305       else
7306         err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
7307       break;
7308     case 14: /* Unconditional branch */
7309       err = thumb_copy_b (gdbarch, insn1, dsc);
7310       break;
7311     default:
7312       err = 1;
7313     }
7314
7315   if (err)
7316     internal_error (__FILE__, __LINE__,
7317                     _("thumb_process_displaced_16bit_insn: Instruction decode error"));
7318 }
7319
7320 static int
7321 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
7322                                  uint16_t insn1, uint16_t insn2,
7323                                  struct regcache *regs,
7324                                  arm_displaced_step_copy_insn_closure *dsc)
7325 {
7326   int rt = bits (insn2, 12, 15);
7327   int rn = bits (insn1, 0, 3);
7328   int op1 = bits (insn1, 7, 8);
7329
7330   switch (bits (insn1, 5, 6))
7331     {
7332     case 0: /* Load byte and memory hints */
7333       if (rt == 0xf) /* PLD/PLI */
7334         {
7335           if (rn == 0xf)
7336             /* PLD literal or Encoding T3 of PLI(immediate, literal).  */
7337             return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
7338           else
7339             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7340                                                 "pli/pld", dsc);
7341         }
7342       else
7343         {
7344           if (rn == 0xf) /* LDRB/LDRSB (literal) */
7345             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7346                                              1);
7347           else
7348             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7349                                                 "ldrb{reg, immediate}/ldrbt",
7350                                                 dsc);
7351         }
7352
7353       break;
7354     case 1: /* Load halfword and memory hints.  */
7355       if (rt == 0xf) /* PLD{W} and Unalloc memory hint.  */
7356         return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7357                                             "pld/unalloc memhint", dsc);
7358       else
7359         {
7360           if (rn == 0xf)
7361             return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7362                                              2);
7363           else
7364             return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7365                                                 "ldrh/ldrht", dsc);
7366         }
7367       break;
7368     case 2: /* Load word */
7369       {
7370         int insn2_bit_8_11 = bits (insn2, 8, 11);
7371
7372         if (rn == 0xf)
7373           return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
7374         else if (op1 == 0x1) /* Encoding T3 */
7375           return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
7376                                            0, 1);
7377         else /* op1 == 0x0 */
7378           {
7379             if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
7380               /* LDR (immediate) */
7381               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7382                                                dsc, bit (insn2, 8), 1);
7383             else if (insn2_bit_8_11 == 0xe) /* LDRT */
7384               return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7385                                                   "ldrt", dsc);
7386             else
7387               /* LDR (register) */
7388               return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7389                                                dsc, 0, 0);
7390           }
7391         break;
7392       }
7393     default:
7394       return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7395       break;
7396     }
7397   return 0;
7398 }
7399
7400 static void
7401 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7402                                     uint16_t insn2, struct regcache *regs,
7403                                     arm_displaced_step_copy_insn_closure *dsc)
7404 {
7405   int err = 0;
7406   unsigned short op = bit (insn2, 15);
7407   unsigned int op1 = bits (insn1, 11, 12);
7408
7409   switch (op1)
7410     {
7411     case 1:
7412       {
7413         switch (bits (insn1, 9, 10))
7414           {
7415           case 0:
7416             if (bit (insn1, 6))
7417               {
7418                 /* Load/store {dual, exclusive}, table branch.  */
7419                 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
7420                     && bits (insn2, 5, 7) == 0)
7421                   err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
7422                                                   dsc);
7423                 else
7424                   /* PC is not allowed to use in load/store {dual, exclusive}
7425                      instructions.  */
7426                   err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7427                                                      "load/store dual/ex", dsc);
7428               }
7429             else /* load/store multiple */
7430               {
7431                 switch (bits (insn1, 7, 8))
7432                   {
7433                   case 0: case 3: /* SRS, RFE */
7434                     err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7435                                                        "srs/rfe", dsc);
7436                     break;
7437                   case 1: case 2: /* LDM/STM/PUSH/POP */
7438                     err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
7439                     break;
7440                   }
7441               }
7442             break;
7443
7444           case 1:
7445             /* Data-processing (shift register).  */
7446             err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
7447                                               dsc);
7448             break;
7449           default: /* Coprocessor instructions.  */
7450             err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7451             break;
7452           }
7453       break;
7454       }
7455     case 2: /* op1 = 2 */
7456       if (op) /* Branch and misc control.  */
7457         {
7458           if (bit (insn2, 14)  /* BLX/BL */
7459               || bit (insn2, 12) /* Unconditional branch */
7460               || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
7461             err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
7462           else
7463             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7464                                                "misc ctrl", dsc);
7465         }
7466       else
7467         {
7468           if (bit (insn1, 9)) /* Data processing (plain binary imm).  */
7469             {
7470               int dp_op = bits (insn1, 4, 8);
7471               int rn = bits (insn1, 0, 3);
7472               if ((dp_op == 0 || dp_op == 0xa) && rn == 0xf)
7473                 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
7474                                                     regs, dsc);
7475               else
7476                 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7477                                                    "dp/pb", dsc);
7478             }
7479           else /* Data processing (modified immediate) */
7480             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7481                                                "dp/mi", dsc);
7482         }
7483       break;
7484     case 3: /* op1 = 3 */
7485       switch (bits (insn1, 9, 10))
7486         {
7487         case 0:
7488           if (bit (insn1, 4))
7489             err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
7490                                                    regs, dsc);
7491           else /* NEON Load/Store and Store single data item */
7492             err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7493                                                "neon elt/struct load/store",
7494                                                dsc);
7495           break;
7496         case 1: /* op1 = 3, bits (9, 10) == 1 */
7497           switch (bits (insn1, 7, 8))
7498             {
7499             case 0: case 1: /* Data processing (register) */
7500               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7501                                                  "dp(reg)", dsc);
7502               break;
7503             case 2: /* Multiply and absolute difference */
7504               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7505                                                  "mul/mua/diff", dsc);
7506               break;
7507             case 3: /* Long multiply and divide */
7508               err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7509                                                  "lmul/lmua", dsc);
7510               break;
7511             }
7512           break;
7513         default: /* Coprocessor instructions */
7514           err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7515           break;
7516         }
7517       break;
7518     default:
7519       err = 1;
7520     }
7521
7522   if (err)
7523     internal_error (__FILE__, __LINE__,
7524                     _("thumb_process_displaced_32bit_insn: Instruction decode error"));
7525
7526 }
7527
7528 static void
7529 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7530                               struct regcache *regs,
7531                               arm_displaced_step_copy_insn_closure *dsc)
7532 {
7533   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7534   uint16_t insn1
7535     = read_memory_unsigned_integer (from, 2, byte_order_for_code);
7536
7537   displaced_debug_printf ("process thumb insn %.4x at %.8lx",
7538                           insn1, (unsigned long) from);
7539
7540   dsc->is_thumb = 1;
7541   dsc->insn_size = thumb_insn_size (insn1);
7542   if (thumb_insn_size (insn1) == 4)
7543     {
7544       uint16_t insn2
7545         = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
7546       thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
7547     }
7548   else
7549     thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
7550 }
7551
7552 void
7553 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7554                             CORE_ADDR to, struct regcache *regs,
7555                             arm_displaced_step_copy_insn_closure *dsc)
7556 {
7557   int err = 0;
7558   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7559   uint32_t insn;
7560
7561   /* Most displaced instructions use a 1-instruction scratch space, so set this
7562      here and override below if/when necessary.  */
7563   dsc->numinsns = 1;
7564   dsc->insn_addr = from;
7565   dsc->scratch_base = to;
7566   dsc->cleanup = NULL;
7567   dsc->wrote_to_pc = 0;
7568
7569   if (!displaced_in_arm_mode (regs))
7570     return thumb_process_displaced_insn (gdbarch, from, regs, dsc);
7571
7572   dsc->is_thumb = 0;
7573   dsc->insn_size = 4;
7574   insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
7575   displaced_debug_printf ("stepping insn %.8lx at %.8lx",
7576                           (unsigned long) insn, (unsigned long) from);
7577
7578   if ((insn & 0xf0000000) == 0xf0000000)
7579     err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
7580   else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
7581     {
7582     case 0x0: case 0x1: case 0x2: case 0x3:
7583       err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
7584       break;
7585
7586     case 0x4: case 0x5: case 0x6:
7587       err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
7588       break;
7589
7590     case 0x7:
7591       err = arm_decode_media (gdbarch, insn, dsc);
7592       break;
7593
7594     case 0x8: case 0x9: case 0xa: case 0xb:
7595       err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
7596       break;
7597
7598     case 0xc: case 0xd: case 0xe: case 0xf:
7599       err = arm_decode_svc_copro (gdbarch, insn, regs, dsc);
7600       break;
7601     }
7602
7603   if (err)
7604     internal_error (__FILE__, __LINE__,
7605                     _("arm_process_displaced_insn: Instruction decode error"));
7606 }
7607
7608 /* Actually set up the scratch space for a displaced instruction.  */
7609
7610 void
7611 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
7612                             CORE_ADDR to,
7613                             arm_displaced_step_copy_insn_closure *dsc)
7614 {
7615   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7616   unsigned int i, len, offset;
7617   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7618   int size = dsc->is_thumb? 2 : 4;
7619   const gdb_byte *bkp_insn;
7620
7621   offset = 0;
7622   /* Poke modified instruction(s).  */
7623   for (i = 0; i < dsc->numinsns; i++)
7624     {
7625       if (size == 4)
7626         displaced_debug_printf ("writing insn %.8lx at %.8lx",
7627                                 dsc->modinsn[i], (unsigned long) to + offset);
7628       else if (size == 2)
7629         displaced_debug_printf ("writing insn %.4x at %.8lx",
7630                                 (unsigned short) dsc->modinsn[i],
7631                                 (unsigned long) to + offset);
7632
7633       write_memory_unsigned_integer (to + offset, size,
7634                                      byte_order_for_code,
7635                                      dsc->modinsn[i]);
7636       offset += size;
7637     }
7638
7639   /* Choose the correct breakpoint instruction.  */
7640   if (dsc->is_thumb)
7641     {
7642       bkp_insn = tdep->thumb_breakpoint;
7643       len = tdep->thumb_breakpoint_size;
7644     }
7645   else
7646     {
7647       bkp_insn = tdep->arm_breakpoint;
7648       len = tdep->arm_breakpoint_size;
7649     }
7650
7651   /* Put breakpoint afterwards.  */
7652   write_memory (to + offset, bkp_insn, len);
7653
7654   displaced_debug_printf ("copy %s->%s", paddress (gdbarch, from),
7655                           paddress (gdbarch, to));
7656 }
7657
7658 /* Entry point for cleaning things up after a displaced instruction has been
7659    single-stepped.  */
7660
7661 void
7662 arm_displaced_step_fixup (struct gdbarch *gdbarch,
7663                           struct displaced_step_copy_insn_closure *dsc_,
7664                           CORE_ADDR from, CORE_ADDR to,
7665                           struct regcache *regs)
7666 {
7667   arm_displaced_step_copy_insn_closure *dsc
7668     = (arm_displaced_step_copy_insn_closure *) dsc_;
7669
7670   if (dsc->cleanup)
7671     dsc->cleanup (gdbarch, regs, dsc);
7672
7673   if (!dsc->wrote_to_pc)
7674     regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
7675                                     dsc->insn_addr + dsc->insn_size);
7676
7677 }
7678
7679 #include "bfd-in2.h"
7680 #include "libcoff.h"
7681
7682 static int
7683 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
7684 {
7685   gdb_disassembler *di
7686     = static_cast<gdb_disassembler *>(info->application_data);
7687   struct gdbarch *gdbarch = di->arch ();
7688
7689   if (arm_pc_is_thumb (gdbarch, memaddr))
7690     {
7691       static asymbol *asym;
7692       static combined_entry_type ce;
7693       static struct coff_symbol_struct csym;
7694       static struct bfd fake_bfd;
7695       static bfd_target fake_target;
7696
7697       if (csym.native == NULL)
7698         {
7699           /* Create a fake symbol vector containing a Thumb symbol.
7700              This is solely so that the code in print_insn_little_arm() 
7701              and print_insn_big_arm() in opcodes/arm-dis.c will detect
7702              the presence of a Thumb symbol and switch to decoding
7703              Thumb instructions.  */
7704
7705           fake_target.flavour = bfd_target_coff_flavour;
7706           fake_bfd.xvec = &fake_target;
7707           ce.u.syment.n_sclass = C_THUMBEXTFUNC;
7708           csym.native = &ce;
7709           csym.symbol.the_bfd = &fake_bfd;
7710           csym.symbol.name = "fake";
7711           asym = (asymbol *) & csym;
7712         }
7713
7714       memaddr = UNMAKE_THUMB_ADDR (memaddr);
7715       info->symbols = &asym;
7716     }
7717   else
7718     info->symbols = NULL;
7719
7720   /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
7721      accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit.  Otherwise,
7722      opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
7723      the assert on the mismatch of info->mach and
7724      bfd_get_mach (current_program_space->exec_bfd ()) in
7725      default_print_insn.  */
7726   if (current_program_space->exec_bfd () != NULL)
7727     info->flags |= USER_SPECIFIED_MACHINE_TYPE;
7728
7729   return default_print_insn (memaddr, info);
7730 }
7731
7732 /* The following define instruction sequences that will cause ARM
7733    cpu's to take an undefined instruction trap.  These are used to
7734    signal a breakpoint to GDB.
7735    
7736    The newer ARMv4T cpu's are capable of operating in ARM or Thumb
7737    modes.  A different instruction is required for each mode.  The ARM
7738    cpu's can also be big or little endian.  Thus four different
7739    instructions are needed to support all cases.
7740    
7741    Note: ARMv4 defines several new instructions that will take the
7742    undefined instruction trap.  ARM7TDMI is nominally ARMv4T, but does
7743    not in fact add the new instructions.  The new undefined
7744    instructions in ARMv4 are all instructions that had no defined
7745    behaviour in earlier chips.  There is no guarantee that they will
7746    raise an exception, but may be treated as NOP's.  In practice, it
7747    may only safe to rely on instructions matching:
7748    
7749    3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 
7750    1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
7751    C C C C 0 1 1 x x x x x x x x x x x x x x x x x x x x 1 x x x x
7752    
7753    Even this may only true if the condition predicate is true.  The
7754    following use a condition predicate of ALWAYS so it is always TRUE.
7755    
7756    There are other ways of forcing a breakpoint.  GNU/Linux, RISC iX,
7757    and NetBSD all use a software interrupt rather than an undefined
7758    instruction to force a trap.  This can be handled by by the
7759    abi-specific code during establishment of the gdbarch vector.  */
7760
7761 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
7762 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
7763 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
7764 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
7765
7766 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
7767 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
7768 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
7769 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
7770
7771 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
7772
7773 static int
7774 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7775 {
7776   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7777   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7778
7779   if (arm_pc_is_thumb (gdbarch, *pcptr))
7780     {
7781       *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
7782
7783       /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
7784          check whether we are replacing a 32-bit instruction.  */
7785       if (tdep->thumb2_breakpoint != NULL)
7786         {
7787           gdb_byte buf[2];
7788
7789           if (target_read_memory (*pcptr, buf, 2) == 0)
7790             {
7791               unsigned short inst1;
7792
7793               inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
7794               if (thumb_insn_size (inst1) == 4)
7795                 return ARM_BP_KIND_THUMB2;
7796             }
7797         }
7798
7799       return ARM_BP_KIND_THUMB;
7800     }
7801   else
7802     return ARM_BP_KIND_ARM;
7803
7804 }
7805
7806 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
7807
7808 static const gdb_byte *
7809 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7810 {
7811   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7812
7813   switch (kind)
7814     {
7815     case ARM_BP_KIND_ARM:
7816       *size = tdep->arm_breakpoint_size;
7817       return tdep->arm_breakpoint;
7818     case ARM_BP_KIND_THUMB:
7819       *size = tdep->thumb_breakpoint_size;
7820       return tdep->thumb_breakpoint;
7821     case ARM_BP_KIND_THUMB2:
7822       *size = tdep->thumb2_breakpoint_size;
7823       return tdep->thumb2_breakpoint;
7824     default:
7825       gdb_assert_not_reached ("unexpected arm breakpoint kind");
7826     }
7827 }
7828
7829 /* Implement the breakpoint_kind_from_current_state gdbarch method.  */
7830
7831 static int
7832 arm_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
7833                                         struct regcache *regcache,
7834                                         CORE_ADDR *pcptr)
7835 {
7836   gdb_byte buf[4];
7837
7838   /* Check the memory pointed by PC is readable.  */
7839   if (target_read_memory (regcache_read_pc (regcache), buf, 4) == 0)
7840     {
7841       struct arm_get_next_pcs next_pcs_ctx;
7842
7843       arm_get_next_pcs_ctor (&next_pcs_ctx,
7844                              &arm_get_next_pcs_ops,
7845                              gdbarch_byte_order (gdbarch),
7846                              gdbarch_byte_order_for_code (gdbarch),
7847                              0,
7848                              regcache);
7849
7850       std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
7851
7852       /* If MEMADDR is the next instruction of current pc, do the
7853          software single step computation, and get the thumb mode by
7854          the destination address.  */
7855       for (CORE_ADDR pc : next_pcs)
7856         {
7857           if (UNMAKE_THUMB_ADDR (pc) == *pcptr)
7858             {
7859               if (IS_THUMB_ADDR (pc))
7860                 {
7861                   *pcptr = MAKE_THUMB_ADDR (*pcptr);
7862                   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7863                 }
7864               else
7865                 return ARM_BP_KIND_ARM;
7866             }
7867         }
7868     }
7869
7870   return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7871 }
7872
7873 /* Extract from an array REGBUF containing the (raw) register state a
7874    function return value of type TYPE, and copy that, in virtual
7875    format, into VALBUF.  */
7876
7877 static void
7878 arm_extract_return_value (struct type *type, struct regcache *regs,
7879                           gdb_byte *valbuf)
7880 {
7881   struct gdbarch *gdbarch = regs->arch ();
7882   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7883
7884   if (TYPE_CODE_FLT == type->code ())
7885     {
7886       switch (gdbarch_tdep (gdbarch)->fp_model)
7887         {
7888         case ARM_FLOAT_FPA:
7889           {
7890             /* The value is in register F0 in internal format.  We need to
7891                extract the raw value and then convert it to the desired
7892                internal type.  */
7893             bfd_byte tmpbuf[ARM_FP_REGISTER_SIZE];
7894
7895             regs->cooked_read (ARM_F0_REGNUM, tmpbuf);
7896             target_float_convert (tmpbuf, arm_ext_type (gdbarch),
7897                                   valbuf, type);
7898           }
7899           break;
7900
7901         case ARM_FLOAT_SOFT_FPA:
7902         case ARM_FLOAT_SOFT_VFP:
7903           /* ARM_FLOAT_VFP can arise if this is a variadic function so
7904              not using the VFP ABI code.  */
7905         case ARM_FLOAT_VFP:
7906           regs->cooked_read (ARM_A1_REGNUM, valbuf);
7907           if (TYPE_LENGTH (type) > 4)
7908             regs->cooked_read (ARM_A1_REGNUM + 1,
7909                                valbuf + ARM_INT_REGISTER_SIZE);
7910           break;
7911
7912         default:
7913           internal_error (__FILE__, __LINE__,
7914                           _("arm_extract_return_value: "
7915                             "Floating point model not supported"));
7916           break;
7917         }
7918     }
7919   else if (type->code () == TYPE_CODE_INT
7920            || type->code () == TYPE_CODE_CHAR
7921            || type->code () == TYPE_CODE_BOOL
7922            || type->code () == TYPE_CODE_PTR
7923            || TYPE_IS_REFERENCE (type)
7924            || type->code () == TYPE_CODE_ENUM)
7925     {
7926       /* If the type is a plain integer, then the access is
7927          straight-forward.  Otherwise we have to play around a bit
7928          more.  */
7929       int len = TYPE_LENGTH (type);
7930       int regno = ARM_A1_REGNUM;
7931       ULONGEST tmp;
7932
7933       while (len > 0)
7934         {
7935           /* By using store_unsigned_integer we avoid having to do
7936              anything special for small big-endian values.  */
7937           regcache_cooked_read_unsigned (regs, regno++, &tmp);
7938           store_unsigned_integer (valbuf, 
7939                                   (len > ARM_INT_REGISTER_SIZE
7940                                    ? ARM_INT_REGISTER_SIZE : len),
7941                                   byte_order, tmp);
7942           len -= ARM_INT_REGISTER_SIZE;
7943           valbuf += ARM_INT_REGISTER_SIZE;
7944         }
7945     }
7946   else
7947     {
7948       /* For a structure or union the behaviour is as if the value had
7949          been stored to word-aligned memory and then loaded into 
7950          registers with 32-bit load instruction(s).  */
7951       int len = TYPE_LENGTH (type);
7952       int regno = ARM_A1_REGNUM;
7953       bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
7954
7955       while (len > 0)
7956         {
7957           regs->cooked_read (regno++, tmpbuf);
7958           memcpy (valbuf, tmpbuf,
7959                   len > ARM_INT_REGISTER_SIZE ? ARM_INT_REGISTER_SIZE : len);
7960           len -= ARM_INT_REGISTER_SIZE;
7961           valbuf += ARM_INT_REGISTER_SIZE;
7962         }
7963     }
7964 }
7965
7966
7967 /* Will a function return an aggregate type in memory or in a
7968    register?  Return 0 if an aggregate type can be returned in a
7969    register, 1 if it must be returned in memory.  */
7970
7971 static int
7972 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7973 {
7974   enum type_code code;
7975
7976   type = check_typedef (type);
7977
7978   /* Simple, non-aggregate types (ie not including vectors and
7979      complex) are always returned in a register (or registers).  */
7980   code = type->code ();
7981   if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7982       && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7983     return 0;
7984
7985   if (TYPE_CODE_ARRAY == code && type->is_vector ())
7986     {
7987       /* Vector values should be returned using ARM registers if they
7988          are not over 16 bytes.  */
7989       return (TYPE_LENGTH (type) > 16);
7990     }
7991
7992   if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
7993     {
7994       /* The AAPCS says all aggregates not larger than a word are returned
7995          in a register.  */
7996       if (TYPE_LENGTH (type) <= ARM_INT_REGISTER_SIZE)
7997         return 0;
7998
7999       return 1;
8000     }
8001   else
8002     {
8003       int nRc;
8004
8005       /* All aggregate types that won't fit in a register must be returned
8006          in memory.  */
8007       if (TYPE_LENGTH (type) > ARM_INT_REGISTER_SIZE)
8008         return 1;
8009
8010       /* In the ARM ABI, "integer" like aggregate types are returned in
8011          registers.  For an aggregate type to be integer like, its size
8012          must be less than or equal to ARM_INT_REGISTER_SIZE and the
8013          offset of each addressable subfield must be zero.  Note that bit
8014          fields are not addressable, and all addressable subfields of
8015          unions always start at offset zero.
8016
8017          This function is based on the behaviour of GCC 2.95.1.
8018          See: gcc/arm.c: arm_return_in_memory() for details.
8019
8020          Note: All versions of GCC before GCC 2.95.2 do not set up the
8021          parameters correctly for a function returning the following
8022          structure: struct { float f;}; This should be returned in memory,
8023          not a register.  Richard Earnshaw sent me a patch, but I do not
8024          know of any way to detect if a function like the above has been
8025          compiled with the correct calling convention.  */
8026
8027       /* Assume all other aggregate types can be returned in a register.
8028          Run a check for structures, unions and arrays.  */
8029       nRc = 0;
8030
8031       if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
8032         {
8033           int i;
8034           /* Need to check if this struct/union is "integer" like.  For
8035              this to be true, its size must be less than or equal to
8036              ARM_INT_REGISTER_SIZE and the offset of each addressable
8037              subfield must be zero.  Note that bit fields are not
8038              addressable, and unions always start at offset zero.  If any
8039              of the subfields is a floating point type, the struct/union
8040              cannot be an integer type.  */
8041
8042           /* For each field in the object, check:
8043              1) Is it FP? --> yes, nRc = 1;
8044              2) Is it addressable (bitpos != 0) and
8045              not packed (bitsize == 0)?
8046              --> yes, nRc = 1
8047           */
8048
8049           for (i = 0; i < type->num_fields (); i++)
8050             {
8051               enum type_code field_type_code;
8052
8053               field_type_code
8054                 = check_typedef (type->field (i).type ())->code ();
8055
8056               /* Is it a floating point type field?  */
8057               if (field_type_code == TYPE_CODE_FLT)
8058                 {
8059                   nRc = 1;
8060                   break;
8061                 }
8062
8063               /* If bitpos != 0, then we have to care about it.  */
8064               if (TYPE_FIELD_BITPOS (type, i) != 0)
8065                 {
8066                   /* Bitfields are not addressable.  If the field bitsize is 
8067                      zero, then the field is not packed.  Hence it cannot be
8068                      a bitfield or any other packed type.  */
8069                   if (TYPE_FIELD_BITSIZE (type, i) == 0)
8070                     {
8071                       nRc = 1;
8072                       break;
8073                     }
8074                 }
8075             }
8076         }
8077
8078       return nRc;
8079     }
8080 }
8081
8082 /* Write into appropriate registers a function return value of type
8083    TYPE, given in virtual format.  */
8084
8085 static void
8086 arm_store_return_value (struct type *type, struct regcache *regs,
8087                         const gdb_byte *valbuf)
8088 {
8089   struct gdbarch *gdbarch = regs->arch ();
8090   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8091
8092   if (type->code () == TYPE_CODE_FLT)
8093     {
8094       gdb_byte buf[ARM_FP_REGISTER_SIZE];
8095
8096       switch (gdbarch_tdep (gdbarch)->fp_model)
8097         {
8098         case ARM_FLOAT_FPA:
8099
8100           target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8101           regs->cooked_write (ARM_F0_REGNUM, buf);
8102           break;
8103
8104         case ARM_FLOAT_SOFT_FPA:
8105         case ARM_FLOAT_SOFT_VFP:
8106           /* ARM_FLOAT_VFP can arise if this is a variadic function so
8107              not using the VFP ABI code.  */
8108         case ARM_FLOAT_VFP:
8109           regs->cooked_write (ARM_A1_REGNUM, valbuf);
8110           if (TYPE_LENGTH (type) > 4)
8111             regs->cooked_write (ARM_A1_REGNUM + 1,
8112                                 valbuf + ARM_INT_REGISTER_SIZE);
8113           break;
8114
8115         default:
8116           internal_error (__FILE__, __LINE__,
8117                           _("arm_store_return_value: Floating "
8118                             "point model not supported"));
8119           break;
8120         }
8121     }
8122   else if (type->code () == TYPE_CODE_INT
8123            || type->code () == TYPE_CODE_CHAR
8124            || type->code () == TYPE_CODE_BOOL
8125            || type->code () == TYPE_CODE_PTR
8126            || TYPE_IS_REFERENCE (type)
8127            || type->code () == TYPE_CODE_ENUM)
8128     {
8129       if (TYPE_LENGTH (type) <= 4)
8130         {
8131           /* Values of one word or less are zero/sign-extended and
8132              returned in r0.  */
8133           bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
8134           LONGEST val = unpack_long (type, valbuf);
8135
8136           store_signed_integer (tmpbuf, ARM_INT_REGISTER_SIZE, byte_order, val);
8137           regs->cooked_write (ARM_A1_REGNUM, tmpbuf);
8138         }
8139       else
8140         {
8141           /* Integral values greater than one word are stored in consecutive
8142              registers starting with r0.  This will always be a multiple of
8143              the regiser size.  */
8144           int len = TYPE_LENGTH (type);
8145           int regno = ARM_A1_REGNUM;
8146
8147           while (len > 0)
8148             {
8149               regs->cooked_write (regno++, valbuf);
8150               len -= ARM_INT_REGISTER_SIZE;
8151               valbuf += ARM_INT_REGISTER_SIZE;
8152             }
8153         }
8154     }
8155   else
8156     {
8157       /* For a structure or union the behaviour is as if the value had
8158          been stored to word-aligned memory and then loaded into 
8159          registers with 32-bit load instruction(s).  */
8160       int len = TYPE_LENGTH (type);
8161       int regno = ARM_A1_REGNUM;
8162       bfd_byte tmpbuf[ARM_INT_REGISTER_SIZE];
8163
8164       while (len > 0)
8165         {
8166           memcpy (tmpbuf, valbuf,
8167                   len > ARM_INT_REGISTER_SIZE ? ARM_INT_REGISTER_SIZE : len);
8168           regs->cooked_write (regno++, tmpbuf);
8169           len -= ARM_INT_REGISTER_SIZE;
8170           valbuf += ARM_INT_REGISTER_SIZE;
8171         }
8172     }
8173 }
8174
8175
8176 /* Handle function return values.  */
8177
8178 static enum return_value_convention
8179 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8180                   struct type *valtype, struct regcache *regcache,
8181                   gdb_byte *readbuf, const gdb_byte *writebuf)
8182 {
8183   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8184   struct type *func_type = function ? value_type (function) : NULL;
8185   enum arm_vfp_cprc_base_type vfp_base_type;
8186   int vfp_base_count;
8187
8188   if (arm_vfp_abi_for_function (gdbarch, func_type)
8189       && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8190     {
8191       int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8192       int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8193       int i;
8194       for (i = 0; i < vfp_base_count; i++)
8195         {
8196           if (reg_char == 'q')
8197             {
8198               if (writebuf)
8199                 arm_neon_quad_write (gdbarch, regcache, i,
8200                                      writebuf + i * unit_length);
8201
8202               if (readbuf)
8203                 arm_neon_quad_read (gdbarch, regcache, i,
8204                                     readbuf + i * unit_length);
8205             }
8206           else
8207             {
8208               char name_buf[4];
8209               int regnum;
8210
8211               xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8212               regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8213                                                     strlen (name_buf));
8214               if (writebuf)
8215                 regcache->cooked_write (regnum, writebuf + i * unit_length);
8216               if (readbuf)
8217                 regcache->cooked_read (regnum, readbuf + i * unit_length);
8218             }
8219         }
8220       return RETURN_VALUE_REGISTER_CONVENTION;
8221     }
8222
8223   if (valtype->code () == TYPE_CODE_STRUCT
8224       || valtype->code () == TYPE_CODE_UNION
8225       || valtype->code () == TYPE_CODE_ARRAY)
8226     {
8227       if (tdep->struct_return == pcc_struct_return
8228           || arm_return_in_memory (gdbarch, valtype))
8229         return RETURN_VALUE_STRUCT_CONVENTION;
8230     }
8231   else if (valtype->code () == TYPE_CODE_COMPLEX)
8232     {
8233       if (arm_return_in_memory (gdbarch, valtype))
8234         return RETURN_VALUE_STRUCT_CONVENTION;
8235     }
8236
8237   if (writebuf)
8238     arm_store_return_value (valtype, regcache, writebuf);
8239
8240   if (readbuf)
8241     arm_extract_return_value (valtype, regcache, readbuf);
8242
8243   return RETURN_VALUE_REGISTER_CONVENTION;
8244 }
8245
8246
8247 static int
8248 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8249 {
8250   struct gdbarch *gdbarch = get_frame_arch (frame);
8251   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8252   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8253   CORE_ADDR jb_addr;
8254   gdb_byte buf[ARM_INT_REGISTER_SIZE];
8255   
8256   jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8257
8258   if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8259                           ARM_INT_REGISTER_SIZE))
8260     return 0;
8261
8262   *pc = extract_unsigned_integer (buf, ARM_INT_REGISTER_SIZE, byte_order);
8263   return 1;
8264 }
8265 /* A call to cmse secure entry function "foo" at "a" is modified by
8266      GNU ld as "b".
8267      a) bl xxxx <foo>
8268
8269      <foo>
8270      xxxx:
8271
8272      b) bl yyyy <__acle_se_foo>
8273
8274      section .gnu.sgstubs:
8275      <foo>
8276      yyyy: sg   // secure gateway
8277            b.w xxxx <__acle_se_foo>  // original_branch_dest
8278
8279      <__acle_se_foo>
8280      xxxx:
8281
8282   When the control at "b", the pc contains "yyyy" (sg address) which is a
8283   trampoline and does not exist in source code.  This function returns the
8284   target pc "xxxx".  For more details please refer to section 5.4
8285   (Entry functions) and section 3.4.4 (C level development flow of secure code)
8286   of "armv8-m-security-extensions-requirements-on-development-tools-engineering-specification"
8287   document on www.developer.arm.com.  */
8288
8289 static CORE_ADDR
8290 arm_skip_cmse_entry (CORE_ADDR pc, const char *name, struct objfile *objfile)
8291 {
8292   int target_len = strlen (name) + strlen ("__acle_se_") + 1;
8293   char *target_name = (char *) alloca (target_len);
8294   xsnprintf (target_name, target_len, "%s%s", "__acle_se_", name);
8295
8296   struct bound_minimal_symbol minsym
8297    = lookup_minimal_symbol (target_name, NULL, objfile);
8298
8299   if (minsym.minsym != nullptr)
8300     return BMSYMBOL_VALUE_ADDRESS (minsym);
8301
8302   return 0;
8303 }
8304
8305 /* Return true when SEC points to ".gnu.sgstubs" section.  */
8306
8307 static bool
8308 arm_is_sgstubs_section (struct obj_section *sec)
8309 {
8310   return (sec != nullptr
8311           && sec->the_bfd_section != nullptr
8312           && sec->the_bfd_section->name != nullptr
8313           && streq (sec->the_bfd_section->name, ".gnu.sgstubs"));
8314 }
8315
8316 /* Recognize GCC and GNU ld's trampolines.  If we are in a trampoline,
8317    return the target PC.  Otherwise return 0.  */
8318
8319 CORE_ADDR
8320 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8321 {
8322   const char *name;
8323   int namelen;
8324   CORE_ADDR start_addr;
8325
8326   /* Find the starting address and name of the function containing the PC.  */
8327   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8328     {
8329       /* Trampoline 'bx reg' doesn't belong to any functions.  Do the
8330          check here.  */
8331       start_addr = arm_skip_bx_reg (frame, pc);
8332       if (start_addr != 0)
8333         return start_addr;
8334
8335       return 0;
8336     }
8337
8338   /* If PC is in a Thumb call or return stub, return the address of the
8339      target PC, which is in a register.  The thunk functions are called
8340      _call_via_xx, where x is the register name.  The possible names
8341      are r0-r9, sl, fp, ip, sp, and lr.  ARM RealView has similar
8342      functions, named __ARM_call_via_r[0-7].  */
8343   if (startswith (name, "_call_via_")
8344       || startswith (name, "__ARM_call_via_"))
8345     {
8346       /* Use the name suffix to determine which register contains the
8347          target PC.  */
8348       static const char *table[15] =
8349       {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8350        "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8351       };
8352       int regno;
8353       int offset = strlen (name) - 2;
8354
8355       for (regno = 0; regno <= 14; regno++)
8356         if (strcmp (&name[offset], table[regno]) == 0)
8357           return get_frame_register_unsigned (frame, regno);
8358     }
8359
8360   /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8361      non-interworking calls to foo.  We could decode the stubs
8362      to find the target but it's easier to use the symbol table.  */
8363   namelen = strlen (name);
8364   if (name[0] == '_' && name[1] == '_'
8365       && ((namelen > 2 + strlen ("_from_thumb")
8366            && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8367           || (namelen > 2 + strlen ("_from_arm")
8368               && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8369     {
8370       char *target_name;
8371       int target_len = namelen - 2;
8372       struct bound_minimal_symbol minsym;
8373       struct objfile *objfile;
8374       struct obj_section *sec;
8375
8376       if (name[namelen - 1] == 'b')
8377         target_len -= strlen ("_from_thumb");
8378       else
8379         target_len -= strlen ("_from_arm");
8380
8381       target_name = (char *) alloca (target_len + 1);
8382       memcpy (target_name, name + 2, target_len);
8383       target_name[target_len] = '\0';
8384
8385       sec = find_pc_section (pc);
8386       objfile = (sec == NULL) ? NULL : sec->objfile;
8387       minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8388       if (minsym.minsym != NULL)
8389         return BMSYMBOL_VALUE_ADDRESS (minsym);
8390       else
8391         return 0;
8392     }
8393
8394   struct obj_section *section = find_pc_section (pc);
8395
8396   /* Check whether SECTION points to the ".gnu.sgstubs" section.  */
8397   if (arm_is_sgstubs_section (section))
8398     return arm_skip_cmse_entry (pc, name, section->objfile);
8399
8400   return 0;                     /* not a stub */
8401 }
8402
8403 static void
8404 arm_update_current_architecture (void)
8405 {
8406   struct gdbarch_info info;
8407
8408   /* If the current architecture is not ARM, we have nothing to do.  */
8409   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8410     return;
8411
8412   /* Update the architecture.  */
8413   gdbarch_info_init (&info);
8414
8415   if (!gdbarch_update_p (info))
8416     internal_error (__FILE__, __LINE__, _("could not update architecture"));
8417 }
8418
8419 static void
8420 set_fp_model_sfunc (const char *args, int from_tty,
8421                     struct cmd_list_element *c)
8422 {
8423   int fp_model;
8424
8425   for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8426     if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8427       {
8428         arm_fp_model = (enum arm_float_model) fp_model;
8429         break;
8430       }
8431
8432   if (fp_model == ARM_FLOAT_LAST)
8433     internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8434                     current_fp_model);
8435
8436   arm_update_current_architecture ();
8437 }
8438
8439 static void
8440 show_fp_model (struct ui_file *file, int from_tty,
8441                struct cmd_list_element *c, const char *value)
8442 {
8443   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8444
8445   if (arm_fp_model == ARM_FLOAT_AUTO
8446       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8447     fprintf_filtered (file, _("\
8448 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8449                       fp_model_strings[tdep->fp_model]);
8450   else
8451     fprintf_filtered (file, _("\
8452 The current ARM floating point model is \"%s\".\n"),
8453                       fp_model_strings[arm_fp_model]);
8454 }
8455
8456 static void
8457 arm_set_abi (const char *args, int from_tty,
8458              struct cmd_list_element *c)
8459 {
8460   int arm_abi;
8461
8462   for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8463     if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8464       {
8465         arm_abi_global = (enum arm_abi_kind) arm_abi;
8466         break;
8467       }
8468
8469   if (arm_abi == ARM_ABI_LAST)
8470     internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8471                     arm_abi_string);
8472
8473   arm_update_current_architecture ();
8474 }
8475
8476 static void
8477 arm_show_abi (struct ui_file *file, int from_tty,
8478              struct cmd_list_element *c, const char *value)
8479 {
8480   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8481
8482   if (arm_abi_global == ARM_ABI_AUTO
8483       && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8484     fprintf_filtered (file, _("\
8485 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8486                       arm_abi_strings[tdep->arm_abi]);
8487   else
8488     fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8489                       arm_abi_string);
8490 }
8491
8492 static void
8493 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8494                         struct cmd_list_element *c, const char *value)
8495 {
8496   fprintf_filtered (file,
8497                     _("The current execution mode assumed "
8498                       "(when symbols are unavailable) is \"%s\".\n"),
8499                     arm_fallback_mode_string);
8500 }
8501
8502 static void
8503 arm_show_force_mode (struct ui_file *file, int from_tty,
8504                      struct cmd_list_element *c, const char *value)
8505 {
8506   fprintf_filtered (file,
8507                     _("The current execution mode assumed "
8508                       "(even when symbols are available) is \"%s\".\n"),
8509                     arm_force_mode_string);
8510 }
8511
8512 /* If the user changes the register disassembly style used for info
8513    register and other commands, we have to also switch the style used
8514    in opcodes for disassembly output.  This function is run in the "set
8515    arm disassembly" command, and does that.  */
8516
8517 static void
8518 set_disassembly_style_sfunc (const char *args, int from_tty,
8519                              struct cmd_list_element *c)
8520 {
8521   /* Convert the short style name into the long style name (eg, reg-names-*)
8522      before calling the generic set_disassembler_options() function.  */
8523   std::string long_name = std::string ("reg-names-") + disassembly_style;
8524   set_disassembler_options (&long_name[0]);
8525 }
8526
8527 static void
8528 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8529                               struct cmd_list_element *c, const char *value)
8530 {
8531   struct gdbarch *gdbarch = get_current_arch ();
8532   char *options = get_disassembler_options (gdbarch);
8533   const char *style = "";
8534   int len = 0;
8535   const char *opt;
8536
8537   FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8538     if (startswith (opt, "reg-names-"))
8539       {
8540         style = &opt[strlen ("reg-names-")];
8541         len = strcspn (style, ",");
8542       }
8543
8544   fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8545 }
8546 \f
8547 /* Return the ARM register name corresponding to register I.  */
8548 static const char *
8549 arm_register_name (struct gdbarch *gdbarch, int i)
8550 {
8551   const int num_regs = gdbarch_num_regs (gdbarch);
8552
8553   if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8554       && i >= num_regs && i < num_regs + 32)
8555     {
8556       static const char *const vfp_pseudo_names[] = {
8557         "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8558         "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8559         "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8560         "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8561       };
8562
8563       return vfp_pseudo_names[i - num_regs];
8564     }
8565
8566   if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8567       && i >= num_regs + 32 && i < num_regs + 32 + 16)
8568     {
8569       static const char *const neon_pseudo_names[] = {
8570         "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8571         "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8572       };
8573
8574       return neon_pseudo_names[i - num_regs - 32];
8575     }
8576
8577   if (i >= ARRAY_SIZE (arm_register_names))
8578     /* These registers are only supported on targets which supply
8579        an XML description.  */
8580     return "";
8581
8582   return arm_register_names[i];
8583 }
8584
8585 /* Test whether the coff symbol specific value corresponds to a Thumb
8586    function.  */
8587
8588 static int
8589 coff_sym_is_thumb (int val)
8590 {
8591   return (val == C_THUMBEXT
8592           || val == C_THUMBSTAT
8593           || val == C_THUMBEXTFUNC
8594           || val == C_THUMBSTATFUNC
8595           || val == C_THUMBLABEL);
8596 }
8597
8598 /* arm_coff_make_msymbol_special()
8599    arm_elf_make_msymbol_special()
8600    
8601    These functions test whether the COFF or ELF symbol corresponds to
8602    an address in thumb code, and set a "special" bit in a minimal
8603    symbol to indicate that it does.  */
8604    
8605 static void
8606 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8607 {
8608   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8609
8610   if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8611       == ST_BRANCH_TO_THUMB)
8612     MSYMBOL_SET_SPECIAL (msym);
8613 }
8614
8615 static void
8616 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8617 {
8618   if (coff_sym_is_thumb (val))
8619     MSYMBOL_SET_SPECIAL (msym);
8620 }
8621
8622 static void
8623 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8624                            asymbol *sym)
8625 {
8626   const char *name = bfd_asymbol_name (sym);
8627   struct arm_per_bfd *data;
8628   struct arm_mapping_symbol new_map_sym;
8629
8630   gdb_assert (name[0] == '$');
8631   if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8632     return;
8633
8634   data = arm_bfd_data_key.get (objfile->obfd);
8635   if (data == NULL)
8636     data = arm_bfd_data_key.emplace (objfile->obfd,
8637                                      objfile->obfd->section_count);
8638   arm_mapping_symbol_vec &map
8639     = data->section_maps[bfd_asymbol_section (sym)->index];
8640
8641   new_map_sym.value = sym->value;
8642   new_map_sym.type = name[1];
8643
8644   /* Insert at the end, the vector will be sorted on first use.  */
8645   map.push_back (new_map_sym);
8646 }
8647
8648 static void
8649 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8650 {
8651   struct gdbarch *gdbarch = regcache->arch ();
8652   regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8653
8654   /* If necessary, set the T bit.  */
8655   if (arm_apcs_32)
8656     {
8657       ULONGEST val, t_bit;
8658       regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8659       t_bit = arm_psr_thumb_bit (gdbarch);
8660       if (arm_pc_is_thumb (gdbarch, pc))
8661         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8662                                         val | t_bit);
8663       else
8664         regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8665                                         val & ~t_bit);
8666     }
8667 }
8668
8669 /* Read the contents of a NEON quad register, by reading from two
8670    double registers.  This is used to implement the quad pseudo
8671    registers, and for argument passing in case the quad registers are
8672    missing; vectors are passed in quad registers when using the VFP
8673    ABI, even if a NEON unit is not present.  REGNUM is the index of
8674    the quad register, in [0, 15].  */
8675
8676 static enum register_status
8677 arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8678                     int regnum, gdb_byte *buf)
8679 {
8680   char name_buf[4];
8681   gdb_byte reg_buf[8];
8682   int offset, double_regnum;
8683   enum register_status status;
8684
8685   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8686   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8687                                                strlen (name_buf));
8688
8689   /* d0 is always the least significant half of q0.  */
8690   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8691     offset = 8;
8692   else
8693     offset = 0;
8694
8695   status = regcache->raw_read (double_regnum, reg_buf);
8696   if (status != REG_VALID)
8697     return status;
8698   memcpy (buf + offset, reg_buf, 8);
8699
8700   offset = 8 - offset;
8701   status = regcache->raw_read (double_regnum + 1, reg_buf);
8702   if (status != REG_VALID)
8703     return status;
8704   memcpy (buf + offset, reg_buf, 8);
8705
8706   return REG_VALID;
8707 }
8708
8709 static enum register_status
8710 arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8711                  int regnum, gdb_byte *buf)
8712 {
8713   const int num_regs = gdbarch_num_regs (gdbarch);
8714   char name_buf[4];
8715   gdb_byte reg_buf[8];
8716   int offset, double_regnum;
8717
8718   gdb_assert (regnum >= num_regs);
8719   regnum -= num_regs;
8720
8721   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8722     /* Quad-precision register.  */
8723     return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8724   else
8725     {
8726       enum register_status status;
8727
8728       /* Single-precision register.  */
8729       gdb_assert (regnum < 32);
8730
8731       /* s0 is always the least significant half of d0.  */
8732       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8733         offset = (regnum & 1) ? 0 : 4;
8734       else
8735         offset = (regnum & 1) ? 4 : 0;
8736
8737       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8738       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8739                                                    strlen (name_buf));
8740
8741       status = regcache->raw_read (double_regnum, reg_buf);
8742       if (status == REG_VALID)
8743         memcpy (buf, reg_buf + offset, 4);
8744       return status;
8745     }
8746 }
8747
8748 /* Store the contents of BUF to a NEON quad register, by writing to
8749    two double registers.  This is used to implement the quad pseudo
8750    registers, and for argument passing in case the quad registers are
8751    missing; vectors are passed in quad registers when using the VFP
8752    ABI, even if a NEON unit is not present.  REGNUM is the index
8753    of the quad register, in [0, 15].  */
8754
8755 static void
8756 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8757                      int regnum, const gdb_byte *buf)
8758 {
8759   char name_buf[4];
8760   int offset, double_regnum;
8761
8762   xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8763   double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8764                                                strlen (name_buf));
8765
8766   /* d0 is always the least significant half of q0.  */
8767   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8768     offset = 8;
8769   else
8770     offset = 0;
8771
8772   regcache->raw_write (double_regnum, buf + offset);
8773   offset = 8 - offset;
8774   regcache->raw_write (double_regnum + 1, buf + offset);
8775 }
8776
8777 static void
8778 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8779                   int regnum, const gdb_byte *buf)
8780 {
8781   const int num_regs = gdbarch_num_regs (gdbarch);
8782   char name_buf[4];
8783   gdb_byte reg_buf[8];
8784   int offset, double_regnum;
8785
8786   gdb_assert (regnum >= num_regs);
8787   regnum -= num_regs;
8788
8789   if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8790     /* Quad-precision register.  */
8791     arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8792   else
8793     {
8794       /* Single-precision register.  */
8795       gdb_assert (regnum < 32);
8796
8797       /* s0 is always the least significant half of d0.  */
8798       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8799         offset = (regnum & 1) ? 0 : 4;
8800       else
8801         offset = (regnum & 1) ? 4 : 0;
8802
8803       xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8804       double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8805                                                    strlen (name_buf));
8806
8807       regcache->raw_read (double_regnum, reg_buf);
8808       memcpy (reg_buf + offset, buf, 4);
8809       regcache->raw_write (double_regnum, reg_buf);
8810     }
8811 }
8812
8813 static struct value *
8814 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8815 {
8816   const int *reg_p = (const int *) baton;
8817   return value_of_register (*reg_p, frame);
8818 }
8819 \f
8820 static enum gdb_osabi
8821 arm_elf_osabi_sniffer (bfd *abfd)
8822 {
8823   unsigned int elfosabi;
8824   enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8825
8826   elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8827
8828   if (elfosabi == ELFOSABI_ARM)
8829     /* GNU tools use this value.  Check note sections in this case,
8830        as well.  */
8831     {
8832       for (asection *sect : gdb_bfd_sections (abfd))
8833         generic_elf_osabi_sniff_abi_tag_sections (abfd, sect, &osabi);
8834     }
8835
8836   /* Anything else will be handled by the generic ELF sniffer.  */
8837   return osabi;
8838 }
8839
8840 static int
8841 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8842                           struct reggroup *group)
8843 {
8844   /* FPS register's type is INT, but belongs to float_reggroup.  Beside
8845      this, FPS register belongs to save_regroup, restore_reggroup, and
8846      all_reggroup, of course.  */
8847   if (regnum == ARM_FPS_REGNUM)
8848     return (group == float_reggroup
8849             || group == save_reggroup
8850             || group == restore_reggroup
8851             || group == all_reggroup);
8852   else
8853     return default_register_reggroup_p (gdbarch, regnum, group);
8854 }
8855
8856 /* For backward-compatibility we allow two 'g' packet lengths with
8857    the remote protocol depending on whether FPA registers are
8858    supplied.  M-profile targets do not have FPA registers, but some
8859    stubs already exist in the wild which use a 'g' packet which
8860    supplies them albeit with dummy values.  The packet format which
8861    includes FPA registers should be considered deprecated for
8862    M-profile targets.  */
8863
8864 static void
8865 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8866 {
8867   if (gdbarch_tdep (gdbarch)->is_m)
8868     {
8869       const target_desc *tdesc;
8870
8871       /* If we know from the executable this is an M-profile target,
8872          cater for remote targets whose register set layout is the
8873          same as the FPA layout.  */
8874       tdesc = arm_read_mprofile_description (ARM_M_TYPE_WITH_FPA);
8875       register_remote_g_packet_guess (gdbarch,
8876                                       ARM_CORE_REGS_SIZE + ARM_FP_REGS_SIZE,
8877                                       tdesc);
8878
8879       /* The regular M-profile layout.  */
8880       tdesc = arm_read_mprofile_description (ARM_M_TYPE_M_PROFILE);
8881       register_remote_g_packet_guess (gdbarch, ARM_CORE_REGS_SIZE,
8882                                       tdesc);
8883
8884       /* M-profile plus M4F VFP.  */
8885       tdesc = arm_read_mprofile_description (ARM_M_TYPE_VFP_D16);
8886       register_remote_g_packet_guess (gdbarch,
8887                                       ARM_CORE_REGS_SIZE + ARM_VFP2_REGS_SIZE,
8888                                       tdesc);
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 /* Implement gdbarch_gnu_triplet_regexp.  If the arch name is arm then allow it
8911    to be postfixed by a version (eg armv7hl).  */
8912
8913 static const char *
8914 arm_gnu_triplet_regexp (struct gdbarch *gdbarch)
8915 {
8916   if (strcmp (gdbarch_bfd_arch_info (gdbarch)->arch_name, "arm") == 0)
8917     return "arm(v[^- ]*)?";
8918   return gdbarch_bfd_arch_info (gdbarch)->arch_name;
8919 }
8920
8921 /* Initialize the current architecture based on INFO.  If possible,
8922    re-use an architecture from ARCHES, which is a list of
8923    architectures already created during this debugging session.
8924
8925    Called e.g. at program startup, when reading a core file, and when
8926    reading a binary file.  */
8927
8928 static struct gdbarch *
8929 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8930 {
8931   struct gdbarch_tdep *tdep;
8932   struct gdbarch *gdbarch;
8933   struct gdbarch_list *best_arch;
8934   enum arm_abi_kind arm_abi = arm_abi_global;
8935   enum arm_float_model fp_model = arm_fp_model;
8936   tdesc_arch_data_up tdesc_data;
8937   int i;
8938   bool is_m = false;
8939   int vfp_register_count = 0;
8940   bool have_vfp_pseudos = false, have_neon_pseudos = false;
8941   bool have_wmmx_registers = false;
8942   bool have_neon = false;
8943   bool have_fpa_registers = true;
8944   const struct target_desc *tdesc = info.target_desc;
8945
8946   /* If we have an object to base this architecture on, try to determine
8947      its ABI.  */
8948
8949   if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8950     {
8951       int ei_osabi, e_flags;
8952
8953       switch (bfd_get_flavour (info.abfd))
8954         {
8955         case bfd_target_coff_flavour:
8956           /* Assume it's an old APCS-style ABI.  */
8957           /* XXX WinCE?  */
8958           arm_abi = ARM_ABI_APCS;
8959           break;
8960
8961         case bfd_target_elf_flavour:
8962           ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8963           e_flags = elf_elfheader (info.abfd)->e_flags;
8964
8965           if (ei_osabi == ELFOSABI_ARM)
8966             {
8967               /* GNU tools used to use this value, but do not for EABI
8968                  objects.  There's nowhere to tag an EABI version
8969                  anyway, so assume APCS.  */
8970               arm_abi = ARM_ABI_APCS;
8971             }
8972           else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8973             {
8974               int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8975
8976               switch (eabi_ver)
8977                 {
8978                 case EF_ARM_EABI_UNKNOWN:
8979                   /* Assume GNU tools.  */
8980                   arm_abi = ARM_ABI_APCS;
8981                   break;
8982
8983                 case EF_ARM_EABI_VER4:
8984                 case EF_ARM_EABI_VER5:
8985                   arm_abi = ARM_ABI_AAPCS;
8986                   /* EABI binaries default to VFP float ordering.
8987                      They may also contain build attributes that can
8988                      be used to identify if the VFP argument-passing
8989                      ABI is in use.  */
8990                   if (fp_model == ARM_FLOAT_AUTO)
8991                     {
8992 #ifdef HAVE_ELF
8993                       switch (bfd_elf_get_obj_attr_int (info.abfd,
8994                                                         OBJ_ATTR_PROC,
8995                                                         Tag_ABI_VFP_args))
8996                         {
8997                         case AEABI_VFP_args_base:
8998                           /* "The user intended FP parameter/result
8999                              passing to conform to AAPCS, base
9000                              variant".  */
9001                           fp_model = ARM_FLOAT_SOFT_VFP;
9002                           break;
9003                         case AEABI_VFP_args_vfp:
9004                           /* "The user intended FP parameter/result
9005                              passing to conform to AAPCS, VFP
9006                              variant".  */
9007                           fp_model = ARM_FLOAT_VFP;
9008                           break;
9009                         case AEABI_VFP_args_toolchain:
9010                           /* "The user intended FP parameter/result
9011                              passing to conform to tool chain-specific
9012                              conventions" - we don't know any such
9013                              conventions, so leave it as "auto".  */
9014                           break;
9015                         case AEABI_VFP_args_compatible:
9016                           /* "Code is compatible with both the base
9017                              and VFP variants; the user did not permit
9018                              non-variadic functions to pass FP
9019                              parameters/results" - leave it as
9020                              "auto".  */
9021                           break;
9022                         default:
9023                           /* Attribute value not mentioned in the
9024                              November 2012 ABI, so leave it as
9025                              "auto".  */
9026                           break;
9027                         }
9028 #else
9029                       fp_model = ARM_FLOAT_SOFT_VFP;
9030 #endif
9031                     }
9032                   break;
9033
9034                 default:
9035                   /* Leave it as "auto".  */
9036                   warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
9037                   break;
9038                 }
9039
9040 #ifdef HAVE_ELF
9041               /* Detect M-profile programs.  This only works if the
9042                  executable file includes build attributes; GCC does
9043                  copy them to the executable, but e.g. RealView does
9044                  not.  */
9045               int attr_arch
9046                 = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9047                                             Tag_CPU_arch);
9048               int attr_profile
9049                 = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
9050                                             Tag_CPU_arch_profile);
9051
9052               /* GCC specifies the profile for v6-M; RealView only
9053                  specifies the profile for architectures starting with
9054                  V7 (as opposed to architectures with a tag
9055                  numerically greater than TAG_CPU_ARCH_V7).  */
9056               if (!tdesc_has_registers (tdesc)
9057                   && (attr_arch == TAG_CPU_ARCH_V6_M
9058                       || attr_arch == TAG_CPU_ARCH_V6S_M
9059                       || attr_profile == 'M'))
9060                 is_m = true;
9061 #endif
9062             }
9063
9064           if (fp_model == ARM_FLOAT_AUTO)
9065             {
9066               switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
9067                 {
9068                 case 0:
9069                   /* Leave it as "auto".  Strictly speaking this case
9070                      means FPA, but almost nobody uses that now, and
9071                      many toolchains fail to set the appropriate bits
9072                      for the floating-point model they use.  */
9073                   break;
9074                 case EF_ARM_SOFT_FLOAT:
9075                   fp_model = ARM_FLOAT_SOFT_FPA;
9076                   break;
9077                 case EF_ARM_VFP_FLOAT:
9078                   fp_model = ARM_FLOAT_VFP;
9079                   break;
9080                 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9081                   fp_model = ARM_FLOAT_SOFT_VFP;
9082                   break;
9083                 }
9084             }
9085
9086           if (e_flags & EF_ARM_BE8)
9087             info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9088
9089           break;
9090
9091         default:
9092           /* Leave it as "auto".  */
9093           break;
9094         }
9095     }
9096
9097   /* Check any target description for validity.  */
9098   if (tdesc_has_registers (tdesc))
9099     {
9100       /* For most registers we require GDB's default names; but also allow
9101          the numeric names for sp / lr / pc, as a convenience.  */
9102       static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9103       static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9104       static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9105
9106       const struct tdesc_feature *feature;
9107       int valid_p;
9108
9109       feature = tdesc_find_feature (tdesc,
9110                                     "org.gnu.gdb.arm.core");
9111       if (feature == NULL)
9112         {
9113           feature = tdesc_find_feature (tdesc,
9114                                         "org.gnu.gdb.arm.m-profile");
9115           if (feature == NULL)
9116             return NULL;
9117           else
9118             is_m = true;
9119         }
9120
9121       tdesc_data = tdesc_data_alloc ();
9122
9123       valid_p = 1;
9124       for (i = 0; i < ARM_SP_REGNUM; i++)
9125         valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
9126                                             arm_register_names[i]);
9127       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data.get (),
9128                                                   ARM_SP_REGNUM,
9129                                                   arm_sp_names);
9130       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data.get (),
9131                                                   ARM_LR_REGNUM,
9132                                                   arm_lr_names);
9133       valid_p &= tdesc_numbered_register_choices (feature, tdesc_data.get (),
9134                                                   ARM_PC_REGNUM,
9135                                                   arm_pc_names);
9136       if (is_m)
9137         valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
9138                                             ARM_PS_REGNUM, "xpsr");
9139       else
9140         valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
9141                                             ARM_PS_REGNUM, "cpsr");
9142
9143       if (!valid_p)
9144         return NULL;
9145
9146       feature = tdesc_find_feature (tdesc,
9147                                     "org.gnu.gdb.arm.fpa");
9148       if (feature != NULL)
9149         {
9150           valid_p = 1;
9151           for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9152             valid_p &= tdesc_numbered_register (feature, tdesc_data.get (), i,
9153                                                 arm_register_names[i]);
9154           if (!valid_p)
9155             return NULL;
9156         }
9157       else
9158         have_fpa_registers = false;
9159
9160       feature = tdesc_find_feature (tdesc,
9161                                     "org.gnu.gdb.xscale.iwmmxt");
9162       if (feature != NULL)
9163         {
9164           static const char *const iwmmxt_names[] = {
9165             "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9166             "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9167             "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9168             "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9169           };
9170
9171           valid_p = 1;
9172           for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9173             valid_p
9174               &= tdesc_numbered_register (feature, tdesc_data.get (), i,
9175                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9176
9177           /* Check for the control registers, but do not fail if they
9178              are missing.  */
9179           for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9180             tdesc_numbered_register (feature, tdesc_data.get (), i,
9181                                      iwmmxt_names[i - ARM_WR0_REGNUM]);
9182
9183           for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9184             valid_p
9185               &= tdesc_numbered_register (feature, tdesc_data.get (), i,
9186                                           iwmmxt_names[i - ARM_WR0_REGNUM]);
9187
9188           if (!valid_p)
9189             return NULL;
9190
9191           have_wmmx_registers = true;
9192         }
9193
9194       /* If we have a VFP unit, check whether the single precision registers
9195          are present.  If not, then we will synthesize them as pseudo
9196          registers.  */
9197       feature = tdesc_find_feature (tdesc,
9198                                     "org.gnu.gdb.arm.vfp");
9199       if (feature != NULL)
9200         {
9201           static const char *const vfp_double_names[] = {
9202             "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9203             "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9204             "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9205             "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9206           };
9207
9208           /* Require the double precision registers.  There must be either
9209              16 or 32.  */
9210           valid_p = 1;
9211           for (i = 0; i < 32; i++)
9212             {
9213               valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
9214                                                   ARM_D0_REGNUM + i,
9215                                                   vfp_double_names[i]);
9216               if (!valid_p)
9217                 break;
9218             }
9219           if (!valid_p && i == 16)
9220             valid_p = 1;
9221
9222           /* Also require FPSCR.  */
9223           valid_p &= tdesc_numbered_register (feature, tdesc_data.get (),
9224                                               ARM_FPSCR_REGNUM, "fpscr");
9225           if (!valid_p)
9226             return NULL;
9227
9228           if (tdesc_unnumbered_register (feature, "s0") == 0)
9229             have_vfp_pseudos = true;
9230
9231           vfp_register_count = i;
9232
9233           /* If we have VFP, also check for NEON.  The architecture allows
9234              NEON without VFP (integer vector operations only), but GDB
9235              does not support that.  */
9236           feature = tdesc_find_feature (tdesc,
9237                                         "org.gnu.gdb.arm.neon");
9238           if (feature != NULL)
9239             {
9240               /* NEON requires 32 double-precision registers.  */
9241               if (i != 32)
9242                 return NULL;
9243
9244               /* If there are quad registers defined by the stub, use
9245                  their type; otherwise (normally) provide them with
9246                  the default type.  */
9247               if (tdesc_unnumbered_register (feature, "q0") == 0)
9248                 have_neon_pseudos = true;
9249
9250               have_neon = true;
9251             }
9252         }
9253     }
9254
9255   /* If there is already a candidate, use it.  */
9256   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9257        best_arch != NULL;
9258        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9259     {
9260       if (arm_abi != ARM_ABI_AUTO
9261           && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9262         continue;
9263
9264       if (fp_model != ARM_FLOAT_AUTO
9265           && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9266         continue;
9267
9268       /* There are various other properties in tdep that we do not
9269          need to check here: those derived from a target description,
9270          since gdbarches with a different target description are
9271          automatically disqualified.  */
9272
9273       /* Do check is_m, though, since it might come from the binary.  */
9274       if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9275         continue;
9276
9277       /* Found a match.  */
9278       break;
9279     }
9280
9281   if (best_arch != NULL)
9282     return best_arch->gdbarch;
9283
9284   tdep = XCNEW (struct gdbarch_tdep);
9285   gdbarch = gdbarch_alloc (&info, tdep);
9286
9287   /* Record additional information about the architecture we are defining.
9288      These are gdbarch discriminators, like the OSABI.  */
9289   tdep->arm_abi = arm_abi;
9290   tdep->fp_model = fp_model;
9291   tdep->is_m = is_m;
9292   tdep->have_fpa_registers = have_fpa_registers;
9293   tdep->have_wmmx_registers = have_wmmx_registers;
9294   gdb_assert (vfp_register_count == 0
9295               || vfp_register_count == 16
9296               || vfp_register_count == 32);
9297   tdep->vfp_register_count = vfp_register_count;
9298   tdep->have_vfp_pseudos = have_vfp_pseudos;
9299   tdep->have_neon_pseudos = have_neon_pseudos;
9300   tdep->have_neon = have_neon;
9301
9302   arm_register_g_packet_guesses (gdbarch);
9303
9304   /* Breakpoints.  */
9305   switch (info.byte_order_for_code)
9306     {
9307     case BFD_ENDIAN_BIG:
9308       tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9309       tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9310       tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9311       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9312
9313       break;
9314
9315     case BFD_ENDIAN_LITTLE:
9316       tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9317       tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9318       tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9319       tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9320
9321       break;
9322
9323     default:
9324       internal_error (__FILE__, __LINE__,
9325                       _("arm_gdbarch_init: bad byte order for float format"));
9326     }
9327
9328   /* On ARM targets char defaults to unsigned.  */
9329   set_gdbarch_char_signed (gdbarch, 0);
9330
9331   /* wchar_t is unsigned under the AAPCS.  */
9332   if (tdep->arm_abi == ARM_ABI_AAPCS)
9333     set_gdbarch_wchar_signed (gdbarch, 0);
9334   else
9335     set_gdbarch_wchar_signed (gdbarch, 1);
9336
9337   /* Compute type alignment.  */
9338   set_gdbarch_type_align (gdbarch, arm_type_align);
9339
9340   /* Note: for displaced stepping, this includes the breakpoint, and one word
9341      of additional scratch space.  This setting isn't used for anything beside
9342      displaced stepping at present.  */
9343   set_gdbarch_max_insn_length (gdbarch, 4 * ARM_DISPLACED_MODIFIED_INSNS);
9344
9345   /* This should be low enough for everything.  */
9346   tdep->lowest_pc = 0x20;
9347   tdep->jb_pc = -1;     /* Longjump support not enabled by default.  */
9348
9349   /* The default, for both APCS and AAPCS, is to return small
9350      structures in registers.  */
9351   tdep->struct_return = reg_struct_return;
9352
9353   set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9354   set_gdbarch_frame_align (gdbarch, arm_frame_align);
9355
9356   if (is_m)
9357     set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9358
9359   set_gdbarch_write_pc (gdbarch, arm_write_pc);
9360
9361   frame_base_set_default (gdbarch, &arm_normal_base);
9362
9363   /* Address manipulation.  */
9364   set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9365
9366   /* Advance PC across function entry code.  */
9367   set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9368
9369   /* Detect whether PC is at a point where the stack has been destroyed.  */
9370   set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9371
9372   /* Skip trampolines.  */
9373   set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9374
9375   /* The stack grows downward.  */
9376   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9377
9378   /* Breakpoint manipulation.  */
9379   set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9380   set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9381   set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9382                                                   arm_breakpoint_kind_from_current_state);
9383
9384   /* Information about registers, etc.  */
9385   set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9386   set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9387   set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9388   set_gdbarch_register_type (gdbarch, arm_register_type);
9389   set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9390
9391   /* This "info float" is FPA-specific.  Use the generic version if we
9392      do not have FPA.  */
9393   if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9394     set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9395
9396   /* Internal <-> external register number maps.  */
9397   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9398   set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9399
9400   set_gdbarch_register_name (gdbarch, arm_register_name);
9401
9402   /* Returning results.  */
9403   set_gdbarch_return_value (gdbarch, arm_return_value);
9404
9405   /* Disassembly.  */
9406   set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9407
9408   /* Minsymbol frobbing.  */
9409   set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9410   set_gdbarch_coff_make_msymbol_special (gdbarch,
9411                                          arm_coff_make_msymbol_special);
9412   set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9413
9414   /* Thumb-2 IT block support.  */
9415   set_gdbarch_adjust_breakpoint_address (gdbarch,
9416                                          arm_adjust_breakpoint_address);
9417
9418   /* Virtual tables.  */
9419   set_gdbarch_vbit_in_delta (gdbarch, 1);
9420
9421   /* Hook in the ABI-specific overrides, if they have been registered.  */
9422   gdbarch_init_osabi (info, gdbarch);
9423
9424   dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9425
9426   /* Add some default predicates.  */
9427   if (is_m)
9428     frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9429   frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9430   dwarf2_append_unwinders (gdbarch);
9431   frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9432   frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9433   frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9434
9435   /* Now we have tuned the configuration, set a few final things,
9436      based on what the OS ABI has told us.  */
9437
9438   /* If the ABI is not otherwise marked, assume the old GNU APCS.  EABI
9439      binaries are always marked.  */
9440   if (tdep->arm_abi == ARM_ABI_AUTO)
9441     tdep->arm_abi = ARM_ABI_APCS;
9442
9443   /* Watchpoints are not steppable.  */
9444   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9445
9446   /* We used to default to FPA for generic ARM, but almost nobody
9447      uses that now, and we now provide a way for the user to force
9448      the model.  So default to the most useful variant.  */
9449   if (tdep->fp_model == ARM_FLOAT_AUTO)
9450     tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9451
9452   if (tdep->jb_pc >= 0)
9453     set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9454
9455   /* Floating point sizes and format.  */
9456   set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9457   if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9458     {
9459       set_gdbarch_double_format
9460         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9461       set_gdbarch_long_double_format
9462         (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9463     }
9464   else
9465     {
9466       set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9467       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9468     }
9469
9470   if (have_vfp_pseudos)
9471     {
9472       /* NOTE: These are the only pseudo registers used by
9473          the ARM target at the moment.  If more are added, a
9474          little more care in numbering will be needed.  */
9475
9476       int num_pseudos = 32;
9477       if (have_neon_pseudos)
9478         num_pseudos += 16;
9479       set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9480       set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9481       set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9482     }
9483
9484   if (tdesc_data != nullptr)
9485     {
9486       set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9487
9488       tdesc_use_registers (gdbarch, tdesc, std::move (tdesc_data));
9489
9490       /* Override tdesc_register_type to adjust the types of VFP
9491          registers for NEON.  */
9492       set_gdbarch_register_type (gdbarch, arm_register_type);
9493     }
9494
9495   /* Add standard register aliases.  We add aliases even for those
9496      names which are used by the current architecture - it's simpler,
9497      and does no harm, since nothing ever lists user registers.  */
9498   for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9499     user_reg_add (gdbarch, arm_register_aliases[i].name,
9500                   value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9501
9502   set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9503   set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9504
9505   set_gdbarch_gnu_triplet_regexp (gdbarch, arm_gnu_triplet_regexp);
9506
9507   return gdbarch;
9508 }
9509
9510 static void
9511 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9512 {
9513   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9514
9515   if (tdep == NULL)
9516     return;
9517
9518   fprintf_unfiltered (file, _("arm_dump_tdep: fp_model = %i\n"),
9519                       (int) tdep->fp_model);
9520   fprintf_unfiltered (file, _("arm_dump_tdep: have_fpa_registers = %i\n"),
9521                       (int) tdep->have_fpa_registers);
9522   fprintf_unfiltered (file, _("arm_dump_tdep: have_wmmx_registers = %i\n"),
9523                       (int) tdep->have_wmmx_registers);
9524   fprintf_unfiltered (file, _("arm_dump_tdep: vfp_register_count = %i\n"),
9525                       (int) tdep->vfp_register_count);
9526   fprintf_unfiltered (file, _("arm_dump_tdep: have_vfp_pseudos = %i\n"),
9527                       (int) tdep->have_vfp_pseudos);
9528   fprintf_unfiltered (file, _("arm_dump_tdep: have_neon_pseudos = %i\n"),
9529                       (int) tdep->have_neon_pseudos);
9530   fprintf_unfiltered (file, _("arm_dump_tdep: have_neon = %i\n"),
9531                       (int) tdep->have_neon);
9532   fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx\n"),
9533                       (unsigned long) tdep->lowest_pc);
9534 }
9535
9536 #if GDB_SELF_TEST
9537 namespace selftests
9538 {
9539 static void arm_record_test (void);
9540 static void arm_analyze_prologue_test ();
9541 }
9542 #endif
9543
9544 void _initialize_arm_tdep ();
9545 void
9546 _initialize_arm_tdep ()
9547 {
9548   long length;
9549   int i, j;
9550   char regdesc[1024], *rdptr = regdesc;
9551   size_t rest = sizeof (regdesc);
9552
9553   gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9554
9555   /* Add ourselves to objfile event chain.  */
9556   gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
9557
9558   /* Register an ELF OS ABI sniffer for ARM binaries.  */
9559   gdbarch_register_osabi_sniffer (bfd_arch_arm,
9560                                   bfd_target_elf_flavour,
9561                                   arm_elf_osabi_sniffer);
9562
9563   /* Add root prefix command for all "set arm"/"show arm" commands.  */
9564   add_basic_prefix_cmd ("arm", no_class,
9565                         _("Various ARM-specific commands."),
9566                         &setarmcmdlist, "set arm ", 0, &setlist);
9567
9568   add_show_prefix_cmd ("arm", no_class,
9569                        _("Various ARM-specific commands."),
9570                        &showarmcmdlist, "show arm ", 0, &showlist);
9571
9572
9573   arm_disassembler_options = xstrdup ("reg-names-std");
9574   const disasm_options_t *disasm_options
9575     = &disassembler_options_arm ()->options;
9576   int num_disassembly_styles = 0;
9577   for (i = 0; disasm_options->name[i] != NULL; i++)
9578     if (startswith (disasm_options->name[i], "reg-names-"))
9579       num_disassembly_styles++;
9580
9581   /* Initialize the array that will be passed to add_setshow_enum_cmd().  */
9582   valid_disassembly_styles = XNEWVEC (const char *,
9583                                       num_disassembly_styles + 1);
9584   for (i = j = 0; disasm_options->name[i] != NULL; i++)
9585     if (startswith (disasm_options->name[i], "reg-names-"))
9586       {
9587         size_t offset = strlen ("reg-names-");
9588         const char *style = disasm_options->name[i];
9589         valid_disassembly_styles[j++] = &style[offset];
9590         length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9591                            disasm_options->description[i]);
9592         rdptr += length;
9593         rest -= length;
9594       }
9595   /* Mark the end of valid options.  */
9596   valid_disassembly_styles[num_disassembly_styles] = NULL;
9597
9598   /* Create the help text.  */
9599   std::string helptext = string_printf ("%s%s%s",
9600                                         _("The valid values are:\n"),
9601                                         regdesc,
9602                                         _("The default is \"std\"."));
9603
9604   add_setshow_enum_cmd("disassembler", no_class,
9605                        valid_disassembly_styles, &disassembly_style,
9606                        _("Set the disassembly style."),
9607                        _("Show the disassembly style."),
9608                        helptext.c_str (),
9609                        set_disassembly_style_sfunc,
9610                        show_disassembly_style_sfunc,
9611                        &setarmcmdlist, &showarmcmdlist);
9612
9613   add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9614                            _("Set usage of ARM 32-bit mode."),
9615                            _("Show usage of ARM 32-bit mode."),
9616                            _("When off, a 26-bit PC will be used."),
9617                            NULL,
9618                            NULL, /* FIXME: i18n: Usage of ARM 32-bit
9619                                     mode is %s.  */
9620                            &setarmcmdlist, &showarmcmdlist);
9621
9622   /* Add a command to allow the user to force the FPU model.  */
9623   add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9624                         _("Set the floating point type."),
9625                         _("Show the floating point type."),
9626                         _("auto - Determine the FP typefrom the OS-ABI.\n\
9627 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9628 fpa - FPA co-processor (GCC compiled).\n\
9629 softvfp - Software FP with pure-endian doubles.\n\
9630 vfp - VFP co-processor."),
9631                         set_fp_model_sfunc, show_fp_model,
9632                         &setarmcmdlist, &showarmcmdlist);
9633
9634   /* Add a command to allow the user to force the ABI.  */
9635   add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9636                         _("Set the ABI."),
9637                         _("Show the ABI."),
9638                         NULL, arm_set_abi, arm_show_abi,
9639                         &setarmcmdlist, &showarmcmdlist);
9640
9641   /* Add two commands to allow the user to force the assumed
9642      execution mode.  */
9643   add_setshow_enum_cmd ("fallback-mode", class_support,
9644                         arm_mode_strings, &arm_fallback_mode_string,
9645                         _("Set the mode assumed when symbols are unavailable."),
9646                         _("Show the mode assumed when symbols are unavailable."),
9647                         NULL, NULL, arm_show_fallback_mode,
9648                         &setarmcmdlist, &showarmcmdlist);
9649   add_setshow_enum_cmd ("force-mode", class_support,
9650                         arm_mode_strings, &arm_force_mode_string,
9651                         _("Set the mode assumed even when symbols are available."),
9652                         _("Show the mode assumed even when symbols are available."),
9653                         NULL, NULL, arm_show_force_mode,
9654                         &setarmcmdlist, &showarmcmdlist);
9655
9656   /* Debugging flag.  */
9657   add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9658                            _("Set ARM debugging."),
9659                            _("Show ARM debugging."),
9660                            _("When on, arm-specific debugging is enabled."),
9661                            NULL,
9662                            NULL, /* FIXME: i18n: "ARM debugging is %s.  */
9663                            &setdebuglist, &showdebuglist);
9664
9665 #if GDB_SELF_TEST
9666   selftests::register_test ("arm-record", selftests::arm_record_test);
9667   selftests::register_test ("arm_analyze_prologue", selftests::arm_analyze_prologue_test);
9668 #endif
9669
9670 }
9671
9672 /* ARM-reversible process record data structures.  */
9673
9674 #define ARM_INSN_SIZE_BYTES 4    
9675 #define THUMB_INSN_SIZE_BYTES 2
9676 #define THUMB2_INSN_SIZE_BYTES 4
9677
9678
9679 /* Position of the bit within a 32-bit ARM instruction
9680    that defines whether the instruction is a load or store.  */
9681 #define INSN_S_L_BIT_NUM 20
9682
9683 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9684         do  \
9685           { \
9686             unsigned int reg_len = LENGTH; \
9687             if (reg_len) \
9688               { \
9689                 REGS = XNEWVEC (uint32_t, reg_len); \
9690                 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9691               } \
9692           } \
9693         while (0)
9694
9695 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9696         do  \
9697           { \
9698             unsigned int mem_len = LENGTH; \
9699             if (mem_len) \
9700             { \
9701               MEMS =  XNEWVEC (struct arm_mem_r, mem_len);  \
9702               memcpy(&MEMS->len, &RECORD_BUF[0], \
9703                      sizeof(struct arm_mem_r) * LENGTH); \
9704             } \
9705           } \
9706           while (0)
9707
9708 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression).  */
9709 #define INSN_RECORDED(ARM_RECORD) \
9710         (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9711
9712 /* ARM memory record structure.  */
9713 struct arm_mem_r
9714 {
9715   uint32_t len;    /* Record length.  */
9716   uint32_t addr;   /* Memory address.  */
9717 };
9718
9719 /* ARM instruction record contains opcode of current insn
9720    and execution state (before entry to decode_insn()),
9721    contains list of to-be-modified registers and
9722    memory blocks (on return from decode_insn()).  */
9723
9724 typedef struct insn_decode_record_t
9725 {
9726   struct gdbarch *gdbarch;
9727   struct regcache *regcache;
9728   CORE_ADDR this_addr;          /* Address of the insn being decoded.  */
9729   uint32_t arm_insn;            /* Should accommodate thumb.  */
9730   uint32_t cond;                /* Condition code.  */
9731   uint32_t opcode;              /* Insn opcode.  */
9732   uint32_t decode;              /* Insn decode bits.  */
9733   uint32_t mem_rec_count;       /* No of mem records.  */
9734   uint32_t reg_rec_count;       /* No of reg records.  */
9735   uint32_t *arm_regs;           /* Registers to be saved for this record.  */
9736   struct arm_mem_r *arm_mems;   /* Memory to be saved for this record.  */
9737 } insn_decode_record;
9738
9739
9740 /* Checks ARM SBZ and SBO mandatory fields.  */
9741
9742 static int
9743 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9744 {
9745   uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9746
9747   if (!len)
9748     return 1;
9749
9750   if (!sbo)
9751     ones = ~ones;
9752
9753   while (ones)
9754     {
9755       if (!(ones & sbo))
9756         {
9757           return 0;
9758         }
9759       ones = ones >> 1;
9760     }
9761   return 1;
9762 }
9763
9764 enum arm_record_result
9765 {
9766   ARM_RECORD_SUCCESS = 0,
9767   ARM_RECORD_FAILURE = 1
9768 };
9769
9770 typedef enum
9771 {
9772   ARM_RECORD_STRH=1,
9773   ARM_RECORD_STRD
9774 } arm_record_strx_t;
9775
9776 typedef enum
9777 {
9778   ARM_RECORD=1,
9779   THUMB_RECORD,
9780   THUMB2_RECORD
9781 } record_type_t;
9782
9783
9784 static int
9785 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf, 
9786                  uint32_t *record_buf_mem, arm_record_strx_t str_type)
9787 {
9788
9789   struct regcache *reg_cache = arm_insn_r->regcache;
9790   ULONGEST u_regval[2]= {0};
9791
9792   uint32_t reg_src1 = 0, reg_src2 = 0;
9793   uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9794
9795   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9796   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9797
9798   if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9799     {
9800       /* 1) Handle misc store, immediate offset.  */
9801       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9802       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9803       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9804       regcache_raw_read_unsigned (reg_cache, reg_src1,
9805                                   &u_regval[0]);
9806       if (ARM_PC_REGNUM == reg_src1)
9807         {
9808           /* If R15 was used as Rn, hence current PC+8.  */
9809           u_regval[0] = u_regval[0] + 8;
9810         }
9811       offset_8 = (immed_high << 4) | immed_low;
9812       /* Calculate target store address.  */
9813       if (14 == arm_insn_r->opcode)
9814         {
9815           tgt_mem_addr = u_regval[0] + offset_8;
9816         }
9817       else
9818         {
9819           tgt_mem_addr = u_regval[0] - offset_8;
9820         }
9821       if (ARM_RECORD_STRH == str_type)
9822         {
9823           record_buf_mem[0] = 2;
9824           record_buf_mem[1] = tgt_mem_addr;
9825           arm_insn_r->mem_rec_count = 1;
9826         }
9827       else if (ARM_RECORD_STRD == str_type)
9828         {
9829           record_buf_mem[0] = 4;
9830           record_buf_mem[1] = tgt_mem_addr;
9831           record_buf_mem[2] = 4;
9832           record_buf_mem[3] = tgt_mem_addr + 4;
9833           arm_insn_r->mem_rec_count = 2;
9834         }
9835     }
9836   else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9837     {
9838       /* 2) Store, register offset.  */
9839       /* Get Rm.  */
9840       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9841       /* Get Rn.  */
9842       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9843       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9844       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9845       if (15 == reg_src2)
9846         {
9847           /* If R15 was used as Rn, hence current PC+8.  */
9848           u_regval[0] = u_regval[0] + 8;
9849         }
9850       /* Calculate target store address, Rn +/- Rm, register offset.  */
9851       if (12 == arm_insn_r->opcode)
9852         {
9853           tgt_mem_addr = u_regval[0] + u_regval[1];
9854         }
9855       else
9856         {
9857           tgt_mem_addr = u_regval[1] - u_regval[0];
9858         }
9859       if (ARM_RECORD_STRH == str_type)
9860         {
9861           record_buf_mem[0] = 2;
9862           record_buf_mem[1] = tgt_mem_addr;
9863           arm_insn_r->mem_rec_count = 1;
9864         }
9865       else if (ARM_RECORD_STRD == str_type)
9866         {
9867           record_buf_mem[0] = 4;
9868           record_buf_mem[1] = tgt_mem_addr;
9869           record_buf_mem[2] = 4;
9870           record_buf_mem[3] = tgt_mem_addr + 4;
9871           arm_insn_r->mem_rec_count = 2;
9872         }
9873     }
9874   else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9875            || 2 == arm_insn_r->opcode  || 6 == arm_insn_r->opcode)
9876     {
9877       /* 3) Store, immediate pre-indexed.  */
9878       /* 5) Store, immediate post-indexed.  */
9879       immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9880       immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9881       offset_8 = (immed_high << 4) | immed_low;
9882       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9883       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9884       /* Calculate target store address, Rn +/- Rm, register offset.  */
9885       if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9886         {
9887           tgt_mem_addr = u_regval[0] + offset_8;
9888         }
9889       else
9890         {
9891           tgt_mem_addr = u_regval[0] - offset_8;
9892         }
9893       if (ARM_RECORD_STRH == str_type)
9894         {
9895           record_buf_mem[0] = 2;
9896           record_buf_mem[1] = tgt_mem_addr;
9897           arm_insn_r->mem_rec_count = 1;
9898         }
9899       else if (ARM_RECORD_STRD == str_type)
9900         {
9901           record_buf_mem[0] = 4;
9902           record_buf_mem[1] = tgt_mem_addr;
9903           record_buf_mem[2] = 4;
9904           record_buf_mem[3] = tgt_mem_addr + 4;
9905           arm_insn_r->mem_rec_count = 2;
9906         }
9907       /* Record Rn also as it changes.  */
9908       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9909       arm_insn_r->reg_rec_count = 1;
9910     }
9911   else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9912            || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9913     {
9914       /* 4) Store, register pre-indexed.  */
9915       /* 6) Store, register post -indexed.  */
9916       reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9917       reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9918       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9919       regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9920       /* Calculate target store address, Rn +/- Rm, register offset.  */
9921       if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9922         {
9923           tgt_mem_addr = u_regval[0] + u_regval[1];
9924         }
9925       else
9926         {
9927           tgt_mem_addr = u_regval[1] - u_regval[0];
9928         }
9929       if (ARM_RECORD_STRH == str_type)
9930         {
9931           record_buf_mem[0] = 2;
9932           record_buf_mem[1] = tgt_mem_addr;
9933           arm_insn_r->mem_rec_count = 1;
9934         }
9935       else if (ARM_RECORD_STRD == str_type)
9936         {
9937           record_buf_mem[0] = 4;
9938           record_buf_mem[1] = tgt_mem_addr;
9939           record_buf_mem[2] = 4;
9940           record_buf_mem[3] = tgt_mem_addr + 4;
9941           arm_insn_r->mem_rec_count = 2;
9942         }
9943       /* Record Rn also as it changes.  */
9944       *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9945       arm_insn_r->reg_rec_count = 1;
9946     }
9947   return 0;
9948 }
9949
9950 /* Handling ARM extension space insns.  */
9951
9952 static int
9953 arm_record_extension_space (insn_decode_record *arm_insn_r)
9954 {
9955   int ret = 0;  /* Return value: -1:record failure ;  0:success  */
9956   uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9957   uint32_t record_buf[8], record_buf_mem[8];
9958   uint32_t reg_src1 = 0;
9959   struct regcache *reg_cache = arm_insn_r->regcache;
9960   ULONGEST u_regval = 0;
9961
9962   gdb_assert (!INSN_RECORDED(arm_insn_r));
9963   /* Handle unconditional insn extension space.  */
9964
9965   opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9966   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9967   if (arm_insn_r->cond)
9968     {
9969       /* PLD has no affect on architectural state, it just affects
9970          the caches.  */
9971       if (5 == ((opcode1 & 0xE0) >> 5))
9972         {
9973           /* BLX(1) */
9974           record_buf[0] = ARM_PS_REGNUM;
9975           record_buf[1] = ARM_LR_REGNUM;
9976           arm_insn_r->reg_rec_count = 2;
9977         }
9978       /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn.  */
9979     }
9980
9981
9982   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9983   if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9984     {
9985       ret = -1;
9986       /* Undefined instruction on ARM V5; need to handle if later 
9987          versions define it.  */
9988     }
9989
9990   opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
9991   opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9992   insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
9993
9994   /* Handle arithmetic insn extension space.  */
9995   if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
9996       && !INSN_RECORDED(arm_insn_r))
9997     {
9998       /* Handle MLA(S) and MUL(S).  */
9999       if (in_inclusive_range (insn_op1, 0U, 3U))
10000       {
10001         record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10002         record_buf[1] = ARM_PS_REGNUM;
10003         arm_insn_r->reg_rec_count = 2;
10004       }
10005       else if (in_inclusive_range (insn_op1, 4U, 15U))
10006       {
10007         /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
10008         record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10009         record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10010         record_buf[2] = ARM_PS_REGNUM;
10011         arm_insn_r->reg_rec_count = 3;
10012       }
10013     }
10014
10015   opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
10016   opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
10017   insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
10018
10019   /* Handle control insn extension space.  */
10020
10021   if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
10022       && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
10023     {
10024       if (!bit (arm_insn_r->arm_insn,25))
10025         {
10026           if (!bits (arm_insn_r->arm_insn, 4, 7))
10027             {
10028               if ((0 == insn_op1) || (2 == insn_op1))
10029                 {
10030                   /* MRS.  */
10031                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10032                   arm_insn_r->reg_rec_count = 1;
10033                 }
10034               else if (1 == insn_op1)
10035                 {
10036                   /* CSPR is going to be changed.  */
10037                   record_buf[0] = ARM_PS_REGNUM;
10038                   arm_insn_r->reg_rec_count = 1;
10039                 }
10040               else if (3 == insn_op1)
10041                 {
10042                   /* SPSR is going to be changed.  */
10043                   /* We need to get SPSR value, which is yet to be done.  */
10044                   return -1;
10045                 }
10046             }
10047           else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
10048             {
10049               if (1 == insn_op1)
10050                 {
10051                   /* BX.  */
10052                   record_buf[0] = ARM_PS_REGNUM;
10053                   arm_insn_r->reg_rec_count = 1;
10054                 }
10055               else if (3 == insn_op1)
10056                 {
10057                   /* CLZ.  */
10058                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10059                   arm_insn_r->reg_rec_count = 1;
10060                 }
10061             }
10062           else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
10063             {
10064               /* BLX.  */
10065               record_buf[0] = ARM_PS_REGNUM;
10066               record_buf[1] = ARM_LR_REGNUM;
10067               arm_insn_r->reg_rec_count = 2;
10068             }
10069           else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10070             {
10071               /* QADD, QSUB, QDADD, QDSUB */
10072               record_buf[0] = ARM_PS_REGNUM;
10073               record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10074               arm_insn_r->reg_rec_count = 2;
10075             }
10076           else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10077             {
10078               /* BKPT.  */
10079               record_buf[0] = ARM_PS_REGNUM;
10080               record_buf[1] = ARM_LR_REGNUM;
10081               arm_insn_r->reg_rec_count = 2;
10082
10083               /* Save SPSR also;how?  */
10084               return -1;
10085             }
10086           else if(8 == bits (arm_insn_r->arm_insn, 4, 7) 
10087                   || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10088                   || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10089                   || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10090                  )
10091             {
10092               if (0 == insn_op1 || 1 == insn_op1)
10093                 {
10094                   /* SMLA<x><y>, SMLAW<y>, SMULW<y>.  */
10095                   /* We dont do optimization for SMULW<y> where we
10096                      need only Rd.  */
10097                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10098                   record_buf[1] = ARM_PS_REGNUM;
10099                   arm_insn_r->reg_rec_count = 2;
10100                 }
10101               else if (2 == insn_op1)
10102                 {
10103                   /* SMLAL<x><y>.  */
10104                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10105                   record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10106                   arm_insn_r->reg_rec_count = 2;
10107                 }
10108               else if (3 == insn_op1)
10109                 {
10110                   /* SMUL<x><y>.  */
10111                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10112                   arm_insn_r->reg_rec_count = 1;
10113                 }
10114             }
10115         }
10116       else
10117         {
10118           /* MSR : immediate form.  */
10119           if (1 == insn_op1)
10120             {
10121               /* CSPR is going to be changed.  */
10122               record_buf[0] = ARM_PS_REGNUM;
10123               arm_insn_r->reg_rec_count = 1;
10124             }
10125           else if (3 == insn_op1)
10126             {
10127               /* SPSR is going to be changed.  */
10128               /* we need to get SPSR value, which is yet to be done  */
10129               return -1;
10130             }
10131         }
10132     }
10133
10134   opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10135   opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10136   insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10137
10138   /* Handle load/store insn extension space.  */
10139
10140   if (!opcode1 && bit (arm_insn_r->arm_insn, 7) 
10141       && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10142       && !INSN_RECORDED(arm_insn_r))
10143     {
10144       /* SWP/SWPB.  */
10145       if (0 == insn_op1)
10146         {
10147           /* These insn, changes register and memory as well.  */
10148           /* SWP or SWPB insn.  */
10149           /* Get memory address given by Rn.  */
10150           reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10151           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10152           /* SWP insn ?, swaps word.  */
10153           if (8 == arm_insn_r->opcode)
10154             {
10155               record_buf_mem[0] = 4;
10156             }
10157           else
10158             {
10159               /* SWPB insn, swaps only byte.  */
10160               record_buf_mem[0] = 1;
10161             }
10162           record_buf_mem[1] = u_regval;
10163           arm_insn_r->mem_rec_count = 1;
10164           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10165           arm_insn_r->reg_rec_count = 1;
10166         }
10167       else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10168         {
10169           /* STRH.  */
10170           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10171                           ARM_RECORD_STRH);
10172         }
10173       else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10174         {
10175           /* LDRD.  */
10176           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10177           record_buf[1] = record_buf[0] + 1;
10178           arm_insn_r->reg_rec_count = 2;
10179         }
10180       else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10181         {
10182           /* STRD.  */
10183           arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10184                         ARM_RECORD_STRD);
10185         }
10186       else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10187         {
10188           /* LDRH, LDRSB, LDRSH.  */
10189           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10190           arm_insn_r->reg_rec_count = 1;
10191         }
10192
10193     }
10194
10195   opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10196   if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10197       && !INSN_RECORDED(arm_insn_r))
10198     {
10199       ret = -1;
10200       /* Handle coprocessor insn extension space.  */
10201     }
10202
10203   /* To be done for ARMv5 and later; as of now we return -1.  */
10204   if (-1 == ret)
10205     return ret;
10206
10207   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10208   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10209
10210   return ret;
10211 }
10212
10213 /* Handling opcode 000 insns.  */
10214
10215 static int
10216 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10217 {
10218   struct regcache *reg_cache = arm_insn_r->regcache;
10219   uint32_t record_buf[8], record_buf_mem[8];
10220   ULONGEST u_regval[2] = {0};
10221
10222   uint32_t reg_src1 = 0;
10223   uint32_t opcode1 = 0;
10224
10225   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10226   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10227   opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10228
10229   if (!((opcode1 & 0x19) == 0x10))
10230     {
10231       /* Data-processing (register) and Data-processing (register-shifted
10232          register */
10233       /* Out of 11 shifter operands mode, all the insn modifies destination
10234          register, which is specified by 13-16 decode.  */
10235       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10236       record_buf[1] = ARM_PS_REGNUM;
10237       arm_insn_r->reg_rec_count = 2;
10238     }
10239   else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10240     {
10241       /* Miscellaneous instructions */
10242
10243       if (3 == arm_insn_r->decode && 0x12 == opcode1
10244           && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10245         {
10246           /* Handle BLX, branch and link/exchange.  */
10247           if (9 == arm_insn_r->opcode)
10248             {
10249               /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10250                  and R14 stores the return address.  */
10251               record_buf[0] = ARM_PS_REGNUM;
10252               record_buf[1] = ARM_LR_REGNUM;
10253               arm_insn_r->reg_rec_count = 2;
10254             }
10255         }
10256       else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10257         {
10258           /* Handle enhanced software breakpoint insn, BKPT.  */
10259           /* CPSR is changed to be executed in ARM state,  disabling normal
10260              interrupts, entering abort mode.  */
10261           /* According to high vector configuration PC is set.  */
10262           /* user hit breakpoint and type reverse, in
10263              that case, we need to go back with previous CPSR and
10264              Program Counter.  */
10265           record_buf[0] = ARM_PS_REGNUM;
10266           record_buf[1] = ARM_LR_REGNUM;
10267           arm_insn_r->reg_rec_count = 2;
10268
10269           /* Save SPSR also; how?  */
10270           return -1;
10271         }
10272       else if (1 == arm_insn_r->decode && 0x12 == opcode1
10273                && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10274         {
10275           /* Handle BX, branch and link/exchange.  */
10276           /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm.  */
10277           record_buf[0] = ARM_PS_REGNUM;
10278           arm_insn_r->reg_rec_count = 1;
10279         }
10280       else if (1 == arm_insn_r->decode && 0x16 == opcode1
10281                && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10282                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10283         {
10284           /* Count leading zeros: CLZ.  */
10285           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10286           arm_insn_r->reg_rec_count = 1;
10287         }
10288       else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10289                && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10290                && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10291                && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10292         {
10293           /* Handle MRS insn.  */
10294           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10295           arm_insn_r->reg_rec_count = 1;
10296         }
10297     }
10298   else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10299     {
10300       /* Multiply and multiply-accumulate */
10301
10302       /* Handle multiply instructions.  */
10303       /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL.  */
10304       if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10305           {
10306             /* Handle MLA and MUL.  */
10307             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10308             record_buf[1] = ARM_PS_REGNUM;
10309             arm_insn_r->reg_rec_count = 2;
10310           }
10311         else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10312           {
10313             /* Handle SMLAL, SMULL, UMLAL, UMULL.  */
10314             record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10315             record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10316             record_buf[2] = ARM_PS_REGNUM;
10317             arm_insn_r->reg_rec_count = 3;
10318           }
10319     }
10320   else if (9 == arm_insn_r->decode  && opcode1 > 0x10)
10321     {
10322       /* Synchronization primitives */
10323
10324       /* Handling SWP, SWPB.  */
10325       /* These insn, changes register and memory as well.  */
10326       /* SWP or SWPB insn.  */
10327
10328       reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10329       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10330       /* SWP insn ?, swaps word.  */
10331       if (8 == arm_insn_r->opcode)
10332         {
10333           record_buf_mem[0] = 4;
10334         }
10335       else
10336         {
10337           /* SWPB insn, swaps only byte.  */
10338           record_buf_mem[0] = 1;
10339         }
10340       record_buf_mem[1] = u_regval[0];
10341       arm_insn_r->mem_rec_count = 1;
10342       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10343       arm_insn_r->reg_rec_count = 1;
10344     }
10345   else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10346            || 15 == arm_insn_r->decode)
10347     {
10348       if ((opcode1 & 0x12) == 2)
10349         {
10350           /* Extra load/store (unprivileged) */
10351           return -1;
10352         }
10353       else
10354         {
10355           /* Extra load/store */
10356           switch (bits (arm_insn_r->arm_insn, 5, 6))
10357             {
10358             case 1:
10359               if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10360                 {
10361                   /* STRH (register), STRH (immediate) */
10362                   arm_record_strx (arm_insn_r, &record_buf[0],
10363                                    &record_buf_mem[0], ARM_RECORD_STRH);
10364                 }
10365               else if ((opcode1 & 0x05) == 0x1)
10366                 {
10367                   /* LDRH (register) */
10368                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10369                   arm_insn_r->reg_rec_count = 1;
10370
10371                   if (bit (arm_insn_r->arm_insn, 21))
10372                     {
10373                       /* Write back to Rn.  */
10374                       record_buf[arm_insn_r->reg_rec_count++]
10375                         = bits (arm_insn_r->arm_insn, 16, 19);
10376                     }
10377                 }
10378               else if ((opcode1 & 0x05) == 0x5)
10379                 {
10380                   /* LDRH (immediate), LDRH (literal) */
10381                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10382
10383                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10384                   arm_insn_r->reg_rec_count = 1;
10385
10386                   if (rn != 15)
10387                     {
10388                       /*LDRH (immediate) */
10389                       if (bit (arm_insn_r->arm_insn, 21))
10390                         {
10391                           /* Write back to Rn.  */
10392                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10393                         }
10394                     }
10395                 }
10396               else
10397                 return -1;
10398               break;
10399             case 2:
10400               if ((opcode1 & 0x05) == 0x0)
10401                 {
10402                   /* LDRD (register) */
10403                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10404                   record_buf[1] = record_buf[0] + 1;
10405                   arm_insn_r->reg_rec_count = 2;
10406
10407                   if (bit (arm_insn_r->arm_insn, 21))
10408                     {
10409                       /* Write back to Rn.  */
10410                       record_buf[arm_insn_r->reg_rec_count++]
10411                         = bits (arm_insn_r->arm_insn, 16, 19);
10412                     }
10413                 }
10414               else if ((opcode1 & 0x05) == 0x1)
10415                 {
10416                   /* LDRSB (register) */
10417                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10418                   arm_insn_r->reg_rec_count = 1;
10419
10420                   if (bit (arm_insn_r->arm_insn, 21))
10421                     {
10422                       /* Write back to Rn.  */
10423                       record_buf[arm_insn_r->reg_rec_count++]
10424                         = bits (arm_insn_r->arm_insn, 16, 19);
10425                     }
10426                 }
10427               else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10428                 {
10429                   /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10430                      LDRSB (literal) */
10431                   int rn = bits (arm_insn_r->arm_insn, 16, 19);
10432
10433                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10434                   arm_insn_r->reg_rec_count = 1;
10435
10436                   if (rn != 15)
10437                     {
10438                       /*LDRD (immediate), LDRSB (immediate) */
10439                       if (bit (arm_insn_r->arm_insn, 21))
10440                         {
10441                           /* Write back to Rn.  */
10442                           record_buf[arm_insn_r->reg_rec_count++] = rn;
10443                         }
10444                     }
10445                 }
10446               else
10447                 return -1;
10448               break;
10449             case 3:
10450               if ((opcode1 & 0x05) == 0x0)
10451                 {
10452                   /* STRD (register) */
10453                   arm_record_strx (arm_insn_r, &record_buf[0],
10454                                    &record_buf_mem[0], ARM_RECORD_STRD);
10455                 }
10456               else if ((opcode1 & 0x05) == 0x1)
10457                 {
10458                   /* LDRSH (register) */
10459                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10460                   arm_insn_r->reg_rec_count = 1;
10461
10462                   if (bit (arm_insn_r->arm_insn, 21))
10463                     {
10464                       /* Write back to Rn.  */
10465                       record_buf[arm_insn_r->reg_rec_count++]
10466                         = bits (arm_insn_r->arm_insn, 16, 19);
10467                     }
10468                 }
10469               else if ((opcode1 & 0x05) == 0x4)
10470                 {
10471                   /* STRD (immediate) */
10472                   arm_record_strx (arm_insn_r, &record_buf[0],
10473                                    &record_buf_mem[0], ARM_RECORD_STRD);
10474                 }
10475               else if ((opcode1 & 0x05) == 0x5)
10476                 {
10477                   /* LDRSH (immediate), LDRSH (literal) */
10478                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10479                   arm_insn_r->reg_rec_count = 1;
10480
10481                   if (bit (arm_insn_r->arm_insn, 21))
10482                     {
10483                       /* Write back to Rn.  */
10484                       record_buf[arm_insn_r->reg_rec_count++]
10485                         = bits (arm_insn_r->arm_insn, 16, 19);
10486                     }
10487                 }
10488               else
10489                 return -1;
10490               break;
10491             default:
10492               return -1;
10493             }
10494         }
10495     }
10496   else
10497     {
10498       return -1;
10499     }
10500
10501   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10502   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10503   return 0;
10504 }
10505
10506 /* Handling opcode 001 insns.  */
10507
10508 static int
10509 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10510 {
10511   uint32_t record_buf[8], record_buf_mem[8];
10512
10513   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10514   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10515
10516   if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10517       && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10518       && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10519      )
10520     {
10521       /* Handle MSR insn.  */
10522       if (9 == arm_insn_r->opcode)
10523         {
10524           /* CSPR is going to be changed.  */
10525           record_buf[0] = ARM_PS_REGNUM;
10526           arm_insn_r->reg_rec_count = 1;
10527         }
10528       else
10529         {
10530           /* SPSR is going to be changed.  */
10531         }
10532     }
10533   else if (arm_insn_r->opcode <= 15)
10534     {
10535       /* Normal data processing insns.  */
10536       /* Out of 11 shifter operands mode, all the insn modifies destination
10537          register, which is specified by 13-16 decode.  */
10538       record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10539       record_buf[1] = ARM_PS_REGNUM;
10540       arm_insn_r->reg_rec_count = 2;
10541     }
10542   else
10543     {
10544       return -1;
10545     }
10546
10547   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10548   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10549   return 0;
10550 }
10551
10552 static int
10553 arm_record_media (insn_decode_record *arm_insn_r)
10554 {
10555   uint32_t record_buf[8];
10556
10557   switch (bits (arm_insn_r->arm_insn, 22, 24))
10558     {
10559     case 0:
10560       /* Parallel addition and subtraction, signed */
10561     case 1:
10562       /* Parallel addition and subtraction, unsigned */
10563     case 2:
10564     case 3:
10565       /* Packing, unpacking, saturation and reversal */
10566       {
10567         int rd = bits (arm_insn_r->arm_insn, 12, 15);
10568
10569         record_buf[arm_insn_r->reg_rec_count++] = rd;
10570       }
10571       break;
10572
10573     case 4:
10574     case 5:
10575       /* Signed multiplies */
10576       {
10577         int rd = bits (arm_insn_r->arm_insn, 16, 19);
10578         unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10579
10580         record_buf[arm_insn_r->reg_rec_count++] = rd;
10581         if (op1 == 0x0)
10582           record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10583         else if (op1 == 0x4)
10584           record_buf[arm_insn_r->reg_rec_count++]
10585             = bits (arm_insn_r->arm_insn, 12, 15);
10586       }
10587       break;
10588
10589     case 6:
10590       {
10591         if (bit (arm_insn_r->arm_insn, 21)
10592             && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10593           {
10594             /* SBFX */
10595             record_buf[arm_insn_r->reg_rec_count++]
10596               = bits (arm_insn_r->arm_insn, 12, 15);
10597           }
10598         else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10599                  && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10600           {
10601             /* USAD8 and USADA8 */
10602             record_buf[arm_insn_r->reg_rec_count++]
10603               = bits (arm_insn_r->arm_insn, 16, 19);
10604           }
10605       }
10606       break;
10607
10608     case 7:
10609       {
10610         if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10611             && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10612           {
10613             /* Permanently UNDEFINED */
10614             return -1;
10615           }
10616         else
10617           {
10618             /* BFC, BFI and UBFX */
10619             record_buf[arm_insn_r->reg_rec_count++]
10620               = bits (arm_insn_r->arm_insn, 12, 15);
10621           }
10622       }
10623       break;
10624
10625     default:
10626       return -1;
10627     }
10628
10629   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10630
10631   return 0;
10632 }
10633
10634 /* Handle ARM mode instructions with opcode 010.  */
10635
10636 static int
10637 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10638 {
10639   struct regcache *reg_cache = arm_insn_r->regcache;
10640
10641   uint32_t reg_base , reg_dest;
10642   uint32_t offset_12, tgt_mem_addr;
10643   uint32_t record_buf[8], record_buf_mem[8];
10644   unsigned char wback;
10645   ULONGEST u_regval;
10646
10647   /* Calculate wback.  */
10648   wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10649           || (bit (arm_insn_r->arm_insn, 21) == 1);
10650
10651   arm_insn_r->reg_rec_count = 0;
10652   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10653
10654   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10655     {
10656       /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10657          and LDRT.  */
10658
10659       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10660       record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10661
10662       /* The LDR instruction is capable of doing branching.  If MOV LR, PC
10663          preceeds a LDR instruction having R15 as reg_base, it
10664          emulates a branch and link instruction, and hence we need to save
10665          CPSR and PC as well.  */
10666       if (ARM_PC_REGNUM == reg_dest)
10667         record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10668
10669       /* If wback is true, also save the base register, which is going to be
10670          written to.  */
10671       if (wback)
10672         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10673     }
10674   else
10675     {
10676       /* STR (immediate), STRB (immediate), STRBT and STRT.  */
10677
10678       offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10679       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10680
10681       /* Handle bit U.  */
10682       if (bit (arm_insn_r->arm_insn, 23))
10683         {
10684           /* U == 1: Add the offset. */
10685           tgt_mem_addr = (uint32_t) u_regval + offset_12;
10686         }
10687       else
10688         {
10689           /* U == 0: subtract the offset. */
10690           tgt_mem_addr = (uint32_t) u_regval - offset_12;
10691         }
10692
10693       /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10694          bytes.  */
10695       if (bit (arm_insn_r->arm_insn, 22))
10696         {
10697           /* STRB and STRBT: 1 byte.  */
10698           record_buf_mem[0] = 1;
10699         }
10700       else
10701         {
10702           /* STR and STRT: 4 bytes.  */
10703           record_buf_mem[0] = 4;
10704         }
10705
10706       /* Handle bit P.  */
10707       if (bit (arm_insn_r->arm_insn, 24))
10708         record_buf_mem[1] = tgt_mem_addr;
10709       else
10710         record_buf_mem[1] = (uint32_t) u_regval;
10711
10712       arm_insn_r->mem_rec_count = 1;
10713
10714       /* If wback is true, also save the base register, which is going to be
10715          written to.  */
10716       if (wback)
10717         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10718     }
10719
10720   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10721   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10722   return 0;
10723 }
10724
10725 /* Handling opcode 011 insns.  */
10726
10727 static int
10728 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10729 {
10730   struct regcache *reg_cache = arm_insn_r->regcache;
10731
10732   uint32_t shift_imm = 0;
10733   uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10734   uint32_t offset_12 = 0, tgt_mem_addr = 0;
10735   uint32_t record_buf[8], record_buf_mem[8];
10736
10737   LONGEST s_word;
10738   ULONGEST u_regval[2];
10739
10740   if (bit (arm_insn_r->arm_insn, 4))
10741     return arm_record_media (arm_insn_r);
10742
10743   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10744   arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10745
10746   /* Handle enhanced store insns and LDRD DSP insn,
10747      order begins according to addressing modes for store insns
10748      STRH insn.  */
10749
10750   /* LDR or STR?  */
10751   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10752     {
10753       reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10754       /* LDR insn has a capability to do branching, if
10755          MOV LR, PC is preceded by LDR insn having Rn as R15
10756          in that case, it emulates branch and link insn, and hence we
10757          need to save CSPR and PC as well.  */
10758       if (15 != reg_dest)
10759         {
10760           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10761           arm_insn_r->reg_rec_count = 1;
10762         }
10763       else
10764         {
10765           record_buf[0] = reg_dest;
10766           record_buf[1] = ARM_PS_REGNUM;
10767           arm_insn_r->reg_rec_count = 2;
10768         }
10769     }
10770   else
10771     {
10772       if (! bits (arm_insn_r->arm_insn, 4, 11))
10773         {
10774           /* Store insn, register offset and register pre-indexed,
10775              register post-indexed.  */
10776           /* Get Rm.  */
10777           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10778           /* Get Rn.  */
10779           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10780           regcache_raw_read_unsigned (reg_cache, reg_src1
10781                                       , &u_regval[0]);
10782           regcache_raw_read_unsigned (reg_cache, reg_src2
10783                                       , &u_regval[1]);
10784           if (15 == reg_src2)
10785             {
10786               /* If R15 was used as Rn, hence current PC+8.  */
10787               /* Pre-indexed mode doesnt reach here ; illegal insn.  */
10788                 u_regval[0] = u_regval[0] + 8;
10789             }
10790           /* Calculate target store address, Rn +/- Rm, register offset.  */
10791           /* U == 1.  */
10792           if (bit (arm_insn_r->arm_insn, 23))
10793             {
10794               tgt_mem_addr = u_regval[0] + u_regval[1];
10795             }
10796           else
10797             {
10798               tgt_mem_addr = u_regval[1] - u_regval[0];
10799             }
10800
10801           switch (arm_insn_r->opcode)
10802             {
10803               /* STR.  */
10804               case 8:
10805               case 12:
10806               /* STR.  */    
10807               case 9:
10808               case 13:
10809               /* STRT.  */
10810               case 1:
10811               case 5:
10812               /* STR.  */
10813               case 0:
10814               case 4:
10815                 record_buf_mem[0] = 4;
10816               break;
10817
10818               /* STRB.  */
10819               case 10:
10820               case 14:
10821               /* STRB.  */
10822               case 11:
10823               case 15:
10824               /* STRBT.  */    
10825               case 3:
10826               case 7:
10827               /* STRB.  */
10828               case 2:
10829               case 6:
10830                 record_buf_mem[0] = 1;
10831               break;
10832
10833               default:
10834                 gdb_assert_not_reached ("no decoding pattern found");
10835               break;
10836             }
10837           record_buf_mem[1] = tgt_mem_addr;
10838           arm_insn_r->mem_rec_count = 1;
10839
10840           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10841               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10842               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10843               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10844               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10845               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10846              )
10847             {
10848               /* Rn is going to be changed in pre-indexed mode and
10849                  post-indexed mode as well.  */
10850               record_buf[0] = reg_src2;
10851               arm_insn_r->reg_rec_count = 1;
10852             }
10853         }
10854       else
10855         {
10856           /* Store insn, scaled register offset; scaled pre-indexed.  */
10857           offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10858           /* Get Rm.  */
10859           reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10860           /* Get Rn.  */
10861           reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10862           /* Get shift_imm.  */
10863           shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10864           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10865           regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10866           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10867           /* Offset_12 used as shift.  */
10868           switch (offset_12)
10869             {
10870               case 0:
10871                 /* Offset_12 used as index.  */
10872                 offset_12 = u_regval[0] << shift_imm;
10873               break;
10874
10875               case 1:
10876                 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10877               break;
10878
10879               case 2:
10880                 if (!shift_imm)
10881                   {
10882                     if (bit (u_regval[0], 31))
10883                       {
10884                         offset_12 = 0xFFFFFFFF;
10885                       }
10886                     else
10887                       {
10888                         offset_12 = 0;
10889                       }
10890                   }
10891                 else
10892                   {
10893                     /* This is arithmetic shift.  */
10894                     offset_12 = s_word >> shift_imm;
10895                   }
10896                 break;
10897
10898               case 3:
10899                 if (!shift_imm)
10900                   {
10901                     regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10902                                                 &u_regval[1]);
10903                     /* Get C flag value and shift it by 31.  */
10904                     offset_12 = (((bit (u_regval[1], 29)) << 31) \
10905                                   | (u_regval[0]) >> 1);
10906                   }
10907                 else
10908                   {
10909                     offset_12 = (u_regval[0] >> shift_imm) \
10910                                 | (u_regval[0] <<
10911                                 (sizeof(uint32_t) - shift_imm));
10912                   }
10913               break;
10914
10915               default:
10916                 gdb_assert_not_reached ("no decoding pattern found");
10917               break;
10918             }
10919
10920           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10921           /* bit U set.  */
10922           if (bit (arm_insn_r->arm_insn, 23))
10923             {
10924               tgt_mem_addr = u_regval[1] + offset_12;
10925             }
10926           else
10927             {
10928               tgt_mem_addr = u_regval[1] - offset_12;
10929             }
10930
10931           switch (arm_insn_r->opcode)
10932             {
10933               /* STR.  */
10934               case 8:
10935               case 12:
10936               /* STR.  */    
10937               case 9:
10938               case 13:
10939               /* STRT.  */
10940               case 1:
10941               case 5:
10942               /* STR.  */
10943               case 0:
10944               case 4:
10945                 record_buf_mem[0] = 4;
10946               break;
10947
10948               /* STRB.  */
10949               case 10:
10950               case 14:
10951               /* STRB.  */
10952               case 11:
10953               case 15:
10954               /* STRBT.  */    
10955               case 3:
10956               case 7:
10957               /* STRB.  */
10958               case 2:
10959               case 6:
10960                 record_buf_mem[0] = 1;
10961               break;
10962
10963               default:
10964                 gdb_assert_not_reached ("no decoding pattern found");
10965               break;
10966             }
10967           record_buf_mem[1] = tgt_mem_addr;
10968           arm_insn_r->mem_rec_count = 1;
10969
10970           if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10971               || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10972               || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10973               || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10974               || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10975               || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10976              )
10977             {
10978               /* Rn is going to be changed in register scaled pre-indexed
10979                  mode,and scaled post indexed mode.  */
10980               record_buf[0] = reg_src2;
10981               arm_insn_r->reg_rec_count = 1;
10982             }
10983         }
10984     }
10985
10986   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10987   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10988   return 0;
10989 }
10990
10991 /* Handle ARM mode instructions with opcode 100.  */
10992
10993 static int
10994 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
10995 {
10996   struct regcache *reg_cache = arm_insn_r->regcache;
10997   uint32_t register_count = 0, register_bits;
10998   uint32_t reg_base, addr_mode;
10999   uint32_t record_buf[24], record_buf_mem[48];
11000   uint32_t wback;
11001   ULONGEST u_regval;
11002
11003   /* Fetch the list of registers.  */
11004   register_bits = bits (arm_insn_r->arm_insn, 0, 15);
11005   arm_insn_r->reg_rec_count = 0;
11006
11007   /* Fetch the base register that contains the address we are loading data
11008      to.  */
11009   reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11010
11011   /* Calculate wback.  */
11012   wback = (bit (arm_insn_r->arm_insn, 21) == 1);
11013
11014   if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11015     {
11016       /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB.  */
11017
11018       /* Find out which registers are going to be loaded from memory.  */
11019       while (register_bits)
11020         {
11021           if (register_bits & 0x00000001)
11022             record_buf[arm_insn_r->reg_rec_count++] = register_count;
11023           register_bits = register_bits >> 1;
11024           register_count++;
11025         }
11026
11027   
11028       /* If wback is true, also save the base register, which is going to be
11029          written to.  */
11030       if (wback)
11031         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11032
11033       /* Save the CPSR register.  */
11034       record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11035     }
11036   else
11037     {
11038       /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA).  */
11039
11040       addr_mode = bits (arm_insn_r->arm_insn, 23, 24); 
11041
11042       regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11043
11044       /* Find out how many registers are going to be stored to memory.  */
11045       while (register_bits)
11046         {
11047           if (register_bits & 0x00000001)
11048             register_count++;
11049           register_bits = register_bits >> 1;
11050         }
11051
11052       switch (addr_mode)
11053         {
11054           /* STMDA (STMED): Decrement after.  */
11055           case 0:
11056           record_buf_mem[1] = (uint32_t) u_regval
11057                               - register_count * ARM_INT_REGISTER_SIZE + 4;
11058           break;
11059           /* STM (STMIA, STMEA): Increment after.  */
11060           case 1:
11061           record_buf_mem[1] = (uint32_t) u_regval;
11062           break;
11063           /* STMDB (STMFD): Decrement before.  */
11064           case 2:
11065           record_buf_mem[1] = (uint32_t) u_regval
11066                               - register_count * ARM_INT_REGISTER_SIZE;
11067           break;
11068           /* STMIB (STMFA): Increment before.  */
11069           case 3:
11070           record_buf_mem[1] = (uint32_t) u_regval + ARM_INT_REGISTER_SIZE;
11071           break;
11072           default:
11073             gdb_assert_not_reached ("no decoding pattern found");
11074           break;
11075         }
11076
11077       record_buf_mem[0] = register_count * ARM_INT_REGISTER_SIZE;
11078       arm_insn_r->mem_rec_count = 1;
11079
11080       /* If wback is true, also save the base register, which is going to be
11081          written to.  */
11082       if (wback)
11083         record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11084     }
11085
11086   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11087   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11088   return 0;
11089 }
11090
11091 /* Handling opcode 101 insns.  */
11092
11093 static int
11094 arm_record_b_bl (insn_decode_record *arm_insn_r)
11095 {
11096   uint32_t record_buf[8];
11097
11098   /* Handle B, BL, BLX(1) insns.  */
11099   /* B simply branches so we do nothing here.  */
11100   /* Note: BLX(1) doesnt fall here but instead it falls into
11101      extension space.  */
11102   if (bit (arm_insn_r->arm_insn, 24))
11103   {
11104     record_buf[0] = ARM_LR_REGNUM;
11105     arm_insn_r->reg_rec_count = 1;
11106   }
11107
11108   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11109
11110   return 0;
11111 }
11112
11113 static int
11114 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11115 {
11116   printf_unfiltered (_("Process record does not support instruction "
11117                        "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11118                      paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11119
11120   return -1;
11121 }
11122
11123 /* Record handler for vector data transfer instructions.  */
11124
11125 static int
11126 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11127 {
11128   uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11129   uint32_t record_buf[4];
11130
11131   reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11132   reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11133   bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11134   bit_l = bit (arm_insn_r->arm_insn, 20);
11135   bit_c = bit (arm_insn_r->arm_insn, 8);
11136
11137   /* Handle VMOV instruction.  */
11138   if (bit_l && bit_c)
11139     {
11140       record_buf[0] = reg_t;
11141       arm_insn_r->reg_rec_count = 1;
11142     }
11143   else if (bit_l && !bit_c)
11144     {
11145       /* Handle VMOV instruction.  */
11146       if (bits_a == 0x00)
11147         {
11148           record_buf[0] = reg_t;
11149           arm_insn_r->reg_rec_count = 1;
11150         }
11151       /* Handle VMRS instruction.  */
11152       else if (bits_a == 0x07)
11153         {
11154           if (reg_t == 15)
11155             reg_t = ARM_PS_REGNUM;
11156
11157           record_buf[0] = reg_t;
11158           arm_insn_r->reg_rec_count = 1;
11159         }
11160     }
11161   else if (!bit_l && !bit_c)
11162     {
11163       /* Handle VMOV instruction.  */
11164       if (bits_a == 0x00)
11165         {
11166           record_buf[0] = ARM_D0_REGNUM + reg_v;
11167
11168           arm_insn_r->reg_rec_count = 1;
11169         }
11170       /* Handle VMSR instruction.  */
11171       else if (bits_a == 0x07)
11172         {
11173           record_buf[0] = ARM_FPSCR_REGNUM;
11174           arm_insn_r->reg_rec_count = 1;
11175         }
11176     }
11177   else if (!bit_l && bit_c)
11178     {
11179       /* Handle VMOV instruction.  */
11180       if (!(bits_a & 0x04))
11181         {
11182           record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11183                           + ARM_D0_REGNUM;
11184           arm_insn_r->reg_rec_count = 1;
11185         }
11186       /* Handle VDUP instruction.  */
11187       else
11188         {
11189           if (bit (arm_insn_r->arm_insn, 21))
11190             {
11191               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11192               record_buf[0] = reg_v + ARM_D0_REGNUM;
11193               record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11194               arm_insn_r->reg_rec_count = 2;
11195             }
11196           else
11197             {
11198               reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11199               record_buf[0] = reg_v + ARM_D0_REGNUM;
11200               arm_insn_r->reg_rec_count = 1;
11201             }
11202         }
11203     }
11204
11205   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11206   return 0;
11207 }
11208
11209 /* Record handler for extension register load/store instructions.  */
11210
11211 static int
11212 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11213 {
11214   uint32_t opcode, single_reg;
11215   uint8_t op_vldm_vstm;
11216   uint32_t record_buf[8], record_buf_mem[128];
11217   ULONGEST u_regval = 0;
11218
11219   struct regcache *reg_cache = arm_insn_r->regcache;
11220
11221   opcode = bits (arm_insn_r->arm_insn, 20, 24);
11222   single_reg = !bit (arm_insn_r->arm_insn, 8);
11223   op_vldm_vstm = opcode & 0x1b;
11224
11225   /* Handle VMOV instructions.  */
11226   if ((opcode & 0x1e) == 0x04)
11227     {
11228       if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11229         {
11230           record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11231           record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11232           arm_insn_r->reg_rec_count = 2;
11233         }
11234       else
11235         {
11236           uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11237           uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11238
11239           if (single_reg)
11240             {
11241               /* The first S register number m is REG_M:M (M is bit 5),
11242                  the corresponding D register number is REG_M:M / 2, which
11243                  is REG_M.  */
11244               record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11245               /* The second S register number is REG_M:M + 1, the
11246                  corresponding D register number is (REG_M:M + 1) / 2.
11247                  IOW, if bit M is 1, the first and second S registers
11248                  are mapped to different D registers, otherwise, they are
11249                  in the same D register.  */
11250               if (bit_m)
11251                 {
11252                   record_buf[arm_insn_r->reg_rec_count++]
11253                     = ARM_D0_REGNUM + reg_m + 1;
11254                 }
11255             }
11256           else
11257             {
11258               record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11259               arm_insn_r->reg_rec_count = 1;
11260             }
11261         }
11262     }
11263   /* Handle VSTM and VPUSH instructions.  */
11264   else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11265            || op_vldm_vstm == 0x12)
11266     {
11267       uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11268       uint32_t memory_index = 0;
11269
11270       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11271       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11272       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11273       imm_off32 = imm_off8 << 2;
11274       memory_count = imm_off8;
11275
11276       if (bit (arm_insn_r->arm_insn, 23))
11277         start_address = u_regval;
11278       else
11279         start_address = u_regval - imm_off32;
11280
11281       if (bit (arm_insn_r->arm_insn, 21))
11282         {
11283           record_buf[0] = reg_rn;
11284           arm_insn_r->reg_rec_count = 1;
11285         }
11286
11287       while (memory_count > 0)
11288         {
11289           if (single_reg)
11290             {
11291               record_buf_mem[memory_index] = 4;
11292               record_buf_mem[memory_index + 1] = start_address;
11293               start_address = start_address + 4;
11294               memory_index = memory_index + 2;
11295             }
11296           else
11297             {
11298               record_buf_mem[memory_index] = 4;
11299               record_buf_mem[memory_index + 1] = start_address;
11300               record_buf_mem[memory_index + 2] = 4;
11301               record_buf_mem[memory_index + 3] = start_address + 4;
11302               start_address = start_address + 8;
11303               memory_index = memory_index + 4;
11304             }
11305           memory_count--;
11306         }
11307       arm_insn_r->mem_rec_count = (memory_index >> 1);
11308     }
11309   /* Handle VLDM instructions.  */
11310   else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11311            || op_vldm_vstm == 0x13)
11312     {
11313       uint32_t reg_count, reg_vd;
11314       uint32_t reg_index = 0;
11315       uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11316
11317       reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11318       reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11319
11320       /* REG_VD is the first D register number.  If the instruction
11321          loads memory to S registers (SINGLE_REG is TRUE), the register
11322          number is (REG_VD << 1 | bit D), so the corresponding D
11323          register number is (REG_VD << 1 | bit D) / 2 = REG_VD.  */
11324       if (!single_reg)
11325         reg_vd = reg_vd | (bit_d << 4);
11326
11327       if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11328         record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11329
11330       /* If the instruction loads memory to D register, REG_COUNT should
11331          be divided by 2, according to the ARM Architecture Reference
11332          Manual.  If the instruction loads memory to S register, divide by
11333          2 as well because two S registers are mapped to D register.  */
11334       reg_count  = reg_count / 2;
11335       if (single_reg && bit_d)
11336         {
11337           /* Increase the register count if S register list starts from
11338              an odd number (bit d is one).  */
11339           reg_count++;
11340         }
11341
11342       while (reg_count > 0)
11343         {
11344           record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11345           reg_count--;
11346         }
11347       arm_insn_r->reg_rec_count = reg_index;
11348     }
11349   /* VSTR Vector store register.  */
11350   else if ((opcode & 0x13) == 0x10)
11351     {
11352       uint32_t start_address, reg_rn, imm_off32, imm_off8;
11353       uint32_t memory_index = 0;
11354
11355       reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11356       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11357       imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11358       imm_off32 = imm_off8 << 2;
11359
11360       if (bit (arm_insn_r->arm_insn, 23))
11361         start_address = u_regval + imm_off32;
11362       else
11363         start_address = u_regval - imm_off32;
11364
11365       if (single_reg)
11366         {
11367           record_buf_mem[memory_index] = 4;
11368           record_buf_mem[memory_index + 1] = start_address;
11369           arm_insn_r->mem_rec_count = 1;
11370         }
11371       else
11372         {
11373           record_buf_mem[memory_index] = 4;
11374           record_buf_mem[memory_index + 1] = start_address;
11375           record_buf_mem[memory_index + 2] = 4;
11376           record_buf_mem[memory_index + 3] = start_address + 4;
11377           arm_insn_r->mem_rec_count = 2;
11378         }
11379     }
11380   /* VLDR Vector load register.  */
11381   else if ((opcode & 0x13) == 0x11)
11382     {
11383       uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11384
11385       if (!single_reg)
11386         {
11387           reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11388           record_buf[0] = ARM_D0_REGNUM + reg_vd;
11389         }
11390       else
11391         {
11392           reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11393           /* Record register D rather than pseudo register S.  */
11394           record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11395         }
11396       arm_insn_r->reg_rec_count = 1;
11397     }
11398
11399   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11400   MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11401   return 0;
11402 }
11403
11404 /* Record handler for arm/thumb mode VFP data processing instructions.  */
11405
11406 static int
11407 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11408 {
11409   uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11410   uint32_t record_buf[4];
11411   enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11412   enum insn_types curr_insn_type = INSN_INV;
11413
11414   reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11415   opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11416   opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11417   opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11418   dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11419   bit_d = bit (arm_insn_r->arm_insn, 22);
11420   /* Mask off the "D" bit.  */
11421   opc1 = opc1 & ~0x04;
11422
11423   /* Handle VMLA, VMLS.  */
11424   if (opc1 == 0x00)
11425     {
11426       if (bit (arm_insn_r->arm_insn, 10))
11427         {
11428           if (bit (arm_insn_r->arm_insn, 6))
11429             curr_insn_type = INSN_T0;
11430           else
11431             curr_insn_type = INSN_T1;
11432         }
11433       else
11434         {
11435           if (dp_op_sz)
11436             curr_insn_type = INSN_T1;
11437           else
11438             curr_insn_type = INSN_T2;
11439         }
11440     }
11441   /* Handle VNMLA, VNMLS, VNMUL.  */
11442   else if (opc1 == 0x01)
11443     {
11444       if (dp_op_sz)
11445         curr_insn_type = INSN_T1;
11446       else
11447         curr_insn_type = INSN_T2;
11448     }
11449   /* Handle VMUL.  */
11450   else if (opc1 == 0x02 && !(opc3 & 0x01))
11451     {
11452       if (bit (arm_insn_r->arm_insn, 10))
11453         {
11454           if (bit (arm_insn_r->arm_insn, 6))
11455             curr_insn_type = INSN_T0;
11456           else
11457             curr_insn_type = INSN_T1;
11458         }
11459       else
11460         {
11461           if (dp_op_sz)
11462             curr_insn_type = INSN_T1;
11463           else
11464             curr_insn_type = INSN_T2;
11465         }
11466     }
11467   /* Handle VADD, VSUB.  */
11468   else if (opc1 == 0x03)
11469     {
11470       if (!bit (arm_insn_r->arm_insn, 9))
11471         {
11472           if (bit (arm_insn_r->arm_insn, 6))
11473             curr_insn_type = INSN_T0;
11474           else
11475             curr_insn_type = INSN_T1;
11476         }
11477       else
11478         {
11479           if (dp_op_sz)
11480             curr_insn_type = INSN_T1;
11481           else
11482             curr_insn_type = INSN_T2;
11483         }
11484     }
11485   /* Handle VDIV.  */
11486   else if (opc1 == 0x08)
11487     {
11488       if (dp_op_sz)
11489         curr_insn_type = INSN_T1;
11490       else
11491         curr_insn_type = INSN_T2;
11492     }
11493   /* Handle all other vfp data processing instructions.  */
11494   else if (opc1 == 0x0b)
11495     {
11496       /* Handle VMOV.  */
11497       if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11498         {
11499           if (bit (arm_insn_r->arm_insn, 4))
11500             {
11501               if (bit (arm_insn_r->arm_insn, 6))
11502                 curr_insn_type = INSN_T0;
11503               else
11504                 curr_insn_type = INSN_T1;
11505             }
11506           else
11507             {
11508               if (dp_op_sz)
11509                 curr_insn_type = INSN_T1;
11510               else
11511                 curr_insn_type = INSN_T2;
11512             }
11513         }
11514       /* Handle VNEG and VABS.  */
11515       else if ((opc2 == 0x01 && opc3 == 0x01)
11516               || (opc2 == 0x00 && opc3 == 0x03))
11517         {
11518           if (!bit (arm_insn_r->arm_insn, 11))
11519             {
11520               if (bit (arm_insn_r->arm_insn, 6))
11521                 curr_insn_type = INSN_T0;
11522               else
11523                 curr_insn_type = INSN_T1;
11524             }
11525           else
11526             {
11527               if (dp_op_sz)
11528                 curr_insn_type = INSN_T1;
11529               else
11530                 curr_insn_type = INSN_T2;
11531             }
11532         }
11533       /* Handle VSQRT.  */
11534       else if (opc2 == 0x01 && opc3 == 0x03)
11535         {
11536           if (dp_op_sz)
11537             curr_insn_type = INSN_T1;
11538           else
11539             curr_insn_type = INSN_T2;
11540         }
11541       /* Handle VCVT.  */
11542       else if (opc2 == 0x07 && opc3 == 0x03)
11543         {
11544           if (!dp_op_sz)
11545             curr_insn_type = INSN_T1;
11546           else
11547             curr_insn_type = INSN_T2;
11548         }
11549       else if (opc3 & 0x01)
11550         {
11551           /* Handle VCVT.  */
11552           if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11553             {
11554               if (!bit (arm_insn_r->arm_insn, 18))
11555                 curr_insn_type = INSN_T2;
11556               else
11557                 {
11558                   if (dp_op_sz)
11559                     curr_insn_type = INSN_T1;
11560                   else
11561                     curr_insn_type = INSN_T2;
11562                 }
11563             }
11564           /* Handle VCVT.  */
11565           else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11566             {
11567               if (dp_op_sz)
11568                 curr_insn_type = INSN_T1;
11569               else
11570                 curr_insn_type = INSN_T2;
11571             }
11572           /* Handle VCVTB, VCVTT.  */
11573           else if ((opc2 & 0x0e) == 0x02)
11574             curr_insn_type = INSN_T2;
11575           /* Handle VCMP, VCMPE.  */
11576           else if ((opc2 & 0x0e) == 0x04)
11577             curr_insn_type = INSN_T3;
11578         }
11579     }
11580
11581   switch (curr_insn_type)
11582     {
11583       case INSN_T0:
11584         reg_vd = reg_vd | (bit_d << 4);
11585         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11586         record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11587         arm_insn_r->reg_rec_count = 2;
11588         break;
11589
11590       case INSN_T1:
11591         reg_vd = reg_vd | (bit_d << 4);
11592         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11593         arm_insn_r->reg_rec_count = 1;
11594         break;
11595
11596       case INSN_T2:
11597         reg_vd = (reg_vd << 1) | bit_d;
11598         record_buf[0] = reg_vd + ARM_D0_REGNUM;
11599         arm_insn_r->reg_rec_count = 1;
11600         break;
11601
11602       case INSN_T3:
11603         record_buf[0] = ARM_FPSCR_REGNUM;
11604         arm_insn_r->reg_rec_count = 1;
11605         break;
11606
11607       default:
11608         gdb_assert_not_reached ("no decoding pattern found");
11609         break;
11610     }
11611
11612   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11613   return 0;
11614 }
11615
11616 /* Handling opcode 110 insns.  */
11617
11618 static int
11619 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11620 {
11621   uint32_t op1, op1_ebit, coproc;
11622
11623   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11624   op1 = bits (arm_insn_r->arm_insn, 20, 25);
11625   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11626
11627   if ((coproc & 0x0e) == 0x0a)
11628     {
11629       /* Handle extension register ld/st instructions.  */
11630       if (!(op1 & 0x20))
11631         return arm_record_exreg_ld_st_insn (arm_insn_r);
11632
11633       /* 64-bit transfers between arm core and extension registers.  */
11634       if ((op1 & 0x3e) == 0x04)
11635         return arm_record_exreg_ld_st_insn (arm_insn_r);
11636     }
11637   else
11638     {
11639       /* Handle coprocessor ld/st instructions.  */
11640       if (!(op1 & 0x3a))
11641         {
11642           /* Store.  */
11643           if (!op1_ebit)
11644             return arm_record_unsupported_insn (arm_insn_r);
11645           else
11646             /* Load.  */
11647             return arm_record_unsupported_insn (arm_insn_r);
11648         }
11649
11650       /* Move to coprocessor from two arm core registers.  */
11651       if (op1 == 0x4)
11652         return arm_record_unsupported_insn (arm_insn_r);
11653
11654       /* Move to two arm core registers from coprocessor.  */
11655       if (op1 == 0x5)
11656         {
11657           uint32_t reg_t[2];
11658
11659           reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11660           reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11661           arm_insn_r->reg_rec_count = 2;
11662
11663           REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11664           return 0;
11665        }
11666     }
11667   return arm_record_unsupported_insn (arm_insn_r);
11668 }
11669
11670 /* Handling opcode 111 insns.  */
11671
11672 static int
11673 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11674 {
11675   uint32_t op, op1_ebit, coproc, bits_24_25;
11676   struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11677   struct regcache *reg_cache = arm_insn_r->regcache;
11678
11679   arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11680   coproc = bits (arm_insn_r->arm_insn, 8, 11);
11681   op1_ebit = bit (arm_insn_r->arm_insn, 20);
11682   op = bit (arm_insn_r->arm_insn, 4);
11683   bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11684
11685   /* Handle arm SWI/SVC system call instructions.  */
11686   if (bits_24_25 == 0x3)
11687     {
11688       if (tdep->arm_syscall_record != NULL)
11689         {
11690           ULONGEST svc_operand, svc_number;
11691
11692           svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11693
11694           if (svc_operand)  /* OABI.  */
11695             svc_number = svc_operand - 0x900000;
11696           else /* EABI.  */
11697             regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11698
11699           return tdep->arm_syscall_record (reg_cache, svc_number);
11700         }
11701       else
11702         {
11703           printf_unfiltered (_("no syscall record support\n"));
11704           return -1;
11705         }
11706     }
11707   else if (bits_24_25 == 0x02)
11708     {
11709       if (op)
11710         {
11711           if ((coproc & 0x0e) == 0x0a)
11712             {
11713               /* 8, 16, and 32-bit transfer */
11714               return arm_record_vdata_transfer_insn (arm_insn_r);
11715             }
11716           else
11717             {
11718               if (op1_ebit)
11719                 {
11720                   /* MRC, MRC2 */
11721                   uint32_t record_buf[1];
11722
11723                   record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11724                   if (record_buf[0] == 15)
11725                     record_buf[0] = ARM_PS_REGNUM;
11726
11727                   arm_insn_r->reg_rec_count = 1;
11728                   REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11729                              record_buf);
11730                   return 0;
11731                 }
11732               else
11733                 {
11734                   /* MCR, MCR2 */
11735                   return -1;
11736                 }
11737             }
11738         }
11739       else
11740         {
11741           if ((coproc & 0x0e) == 0x0a)
11742             {
11743               /* VFP data-processing instructions.  */
11744               return arm_record_vfp_data_proc_insn (arm_insn_r);
11745             }
11746           else
11747             {
11748               /* CDP, CDP2 */
11749               return -1;
11750             }
11751         }
11752     }
11753   else
11754     {
11755       unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11756
11757       if (op1 == 5)
11758         {
11759           if ((coproc & 0x0e) != 0x0a)
11760             {
11761               /* MRRC, MRRC2 */
11762               return -1;
11763             }
11764         }
11765       else if (op1 == 4 || op1 == 5)
11766         {
11767           if ((coproc & 0x0e) == 0x0a)
11768             {
11769               /* 64-bit transfers between ARM core and extension */
11770               return -1;
11771             }
11772           else if (op1 == 4)
11773             {
11774               /* MCRR, MCRR2 */
11775               return -1;
11776             }
11777         }
11778       else if (op1 == 0 || op1 == 1)
11779         {
11780           /* UNDEFINED */
11781           return -1;
11782         }
11783       else
11784         {
11785           if ((coproc & 0x0e) == 0x0a)
11786             {
11787               /* Extension register load/store */
11788             }
11789           else
11790             {
11791               /* STC, STC2, LDC, LDC2 */
11792             }
11793           return -1;
11794         }
11795     }
11796
11797   return -1;
11798 }
11799
11800 /* Handling opcode 000 insns.  */
11801
11802 static int
11803 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11804 {
11805   uint32_t record_buf[8];
11806   uint32_t reg_src1 = 0;
11807
11808   reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11809
11810   record_buf[0] = ARM_PS_REGNUM;
11811   record_buf[1] = reg_src1;
11812   thumb_insn_r->reg_rec_count = 2;
11813
11814   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11815
11816   return 0;
11817 }
11818
11819
11820 /* Handling opcode 001 insns.  */
11821
11822 static int
11823 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11824 {
11825   uint32_t record_buf[8];
11826   uint32_t reg_src1 = 0;
11827
11828   reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11829
11830   record_buf[0] = ARM_PS_REGNUM;
11831   record_buf[1] = reg_src1;
11832   thumb_insn_r->reg_rec_count = 2;
11833
11834   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11835
11836   return 0;
11837 }
11838
11839 /* Handling opcode 010 insns.  */
11840
11841 static int
11842 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11843 {
11844   struct regcache *reg_cache =  thumb_insn_r->regcache;
11845   uint32_t record_buf[8], record_buf_mem[8];
11846
11847   uint32_t reg_src1 = 0, reg_src2 = 0;
11848   uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11849
11850   ULONGEST u_regval[2] = {0};
11851
11852   opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11853
11854   if (bit (thumb_insn_r->arm_insn, 12))
11855     {
11856       /* Handle load/store register offset.  */
11857       uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11858
11859       if (in_inclusive_range (opB, 4U, 7U))
11860         {
11861           /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH.  */
11862           reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11863           record_buf[0] = reg_src1;
11864           thumb_insn_r->reg_rec_count = 1;
11865         }
11866       else if (in_inclusive_range (opB, 0U, 2U))
11867         {
11868           /* STR(2), STRB(2), STRH(2) .  */
11869           reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11870           reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11871           regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11872           regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11873           if (0 == opB)
11874             record_buf_mem[0] = 4;    /* STR (2).  */
11875           else if (2 == opB)
11876             record_buf_mem[0] = 1;    /*  STRB (2).  */
11877           else if (1 == opB)
11878             record_buf_mem[0] = 2;    /* STRH (2).  */
11879           record_buf_mem[1] = u_regval[0] + u_regval[1];
11880           thumb_insn_r->mem_rec_count = 1;
11881         }
11882     }
11883   else if (bit (thumb_insn_r->arm_insn, 11))
11884     {
11885       /* Handle load from literal pool.  */
11886       /* LDR(3).  */
11887       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11888       record_buf[0] = reg_src1;
11889       thumb_insn_r->reg_rec_count = 1;
11890     }
11891   else if (opcode1)
11892     {
11893       /* Special data instructions and branch and exchange */
11894       opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11895       opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11896       if ((3 == opcode2) && (!opcode3))
11897         {
11898           /* Branch with exchange.  */
11899           record_buf[0] = ARM_PS_REGNUM;
11900           thumb_insn_r->reg_rec_count = 1;
11901         }
11902       else
11903         {
11904           /* Format 8; special data processing insns.  */
11905           record_buf[0] = ARM_PS_REGNUM;
11906           record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11907                            | bits (thumb_insn_r->arm_insn, 0, 2));
11908           thumb_insn_r->reg_rec_count = 2;
11909         }
11910     }
11911   else
11912     {
11913       /* Format 5; data processing insns.  */
11914       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11915       if (bit (thumb_insn_r->arm_insn, 7))
11916         {
11917           reg_src1 = reg_src1 + 8;
11918         }
11919       record_buf[0] = ARM_PS_REGNUM;
11920       record_buf[1] = reg_src1;
11921       thumb_insn_r->reg_rec_count = 2;
11922     }
11923
11924   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11925   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11926              record_buf_mem);
11927
11928   return 0;
11929 }
11930
11931 /* Handling opcode 001 insns.  */
11932
11933 static int
11934 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11935 {
11936   struct regcache *reg_cache = thumb_insn_r->regcache;
11937   uint32_t record_buf[8], record_buf_mem[8];
11938
11939   uint32_t reg_src1 = 0;
11940   uint32_t opcode = 0, immed_5 = 0;
11941
11942   ULONGEST u_regval = 0;
11943
11944   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11945
11946   if (opcode)
11947     {
11948       /* LDR(1).  */
11949       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11950       record_buf[0] = reg_src1;
11951       thumb_insn_r->reg_rec_count = 1;
11952     }
11953   else
11954     {
11955       /* STR(1).  */
11956       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11957       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11958       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11959       record_buf_mem[0] = 4;
11960       record_buf_mem[1] = u_regval + (immed_5 * 4);
11961       thumb_insn_r->mem_rec_count = 1;
11962     }
11963
11964   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11965   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count, 
11966              record_buf_mem);
11967
11968   return 0;
11969 }
11970
11971 /* Handling opcode 100 insns.  */
11972
11973 static int
11974 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11975 {
11976   struct regcache *reg_cache = thumb_insn_r->regcache;
11977   uint32_t record_buf[8], record_buf_mem[8];
11978
11979   uint32_t reg_src1 = 0;
11980   uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11981
11982   ULONGEST u_regval = 0;
11983
11984   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11985
11986   if (3 == opcode)
11987     {
11988       /* LDR(4).  */
11989       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11990       record_buf[0] = reg_src1;
11991       thumb_insn_r->reg_rec_count = 1;
11992     }
11993   else if (1 == opcode)
11994     {
11995       /* LDRH(1).  */
11996       reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11997       record_buf[0] = reg_src1;
11998       thumb_insn_r->reg_rec_count = 1;
11999     }
12000   else if (2 == opcode)
12001     {
12002       /* STR(3).  */
12003       immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
12004       regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12005       record_buf_mem[0] = 4;
12006       record_buf_mem[1] = u_regval + (immed_8 * 4);
12007       thumb_insn_r->mem_rec_count = 1;
12008     }
12009   else if (0 == opcode)
12010     {
12011       /* STRH(1).  */
12012       immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12013       reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12014       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12015       record_buf_mem[0] = 2;
12016       record_buf_mem[1] = u_regval + (immed_5 * 2);
12017       thumb_insn_r->mem_rec_count = 1;
12018     }
12019
12020   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12021   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12022              record_buf_mem);
12023
12024   return 0;
12025 }
12026
12027 /* Handling opcode 101 insns.  */
12028
12029 static int
12030 thumb_record_misc (insn_decode_record *thumb_insn_r)
12031 {
12032   struct regcache *reg_cache = thumb_insn_r->regcache;
12033
12034   uint32_t opcode = 0;
12035   uint32_t register_bits = 0, register_count = 0;
12036   uint32_t index = 0, start_address = 0;
12037   uint32_t record_buf[24], record_buf_mem[48];
12038   uint32_t reg_src1;
12039
12040   ULONGEST u_regval = 0;
12041
12042   opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12043
12044   if (opcode == 0 || opcode == 1)
12045     {
12046       /* ADR and ADD (SP plus immediate) */
12047
12048       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12049       record_buf[0] = reg_src1;
12050       thumb_insn_r->reg_rec_count = 1;
12051     }
12052   else
12053     {
12054       /* Miscellaneous 16-bit instructions */
12055       uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
12056
12057       switch (opcode2)
12058         {
12059         case 6:
12060           /* SETEND and CPS */
12061           break;
12062         case 0:
12063           /* ADD/SUB (SP plus immediate)  */
12064           reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12065           record_buf[0] = ARM_SP_REGNUM;
12066           thumb_insn_r->reg_rec_count = 1;
12067           break;
12068         case 1: /* fall through  */
12069         case 3: /* fall through  */
12070         case 9: /* fall through  */
12071         case 11:
12072           /* CBNZ, CBZ */
12073           break;
12074         case 2:
12075           /* SXTH, SXTB, UXTH, UXTB */
12076           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12077           thumb_insn_r->reg_rec_count = 1;
12078           break;
12079         case 4: /* fall through  */
12080         case 5:
12081           /* PUSH.  */
12082           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12083           regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12084           while (register_bits)
12085             {
12086               if (register_bits & 0x00000001)
12087                 register_count++;
12088               register_bits = register_bits >> 1;
12089             }
12090           start_address = u_regval -  \
12091             (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12092           thumb_insn_r->mem_rec_count = register_count;
12093           while (register_count)
12094             {
12095               record_buf_mem[(register_count * 2) - 1] = start_address;
12096               record_buf_mem[(register_count * 2) - 2] = 4;
12097               start_address = start_address + 4;
12098               register_count--;
12099             }
12100           record_buf[0] = ARM_SP_REGNUM;
12101           thumb_insn_r->reg_rec_count = 1;
12102           break;
12103         case 10:
12104           /* REV, REV16, REVSH */
12105           record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12106           thumb_insn_r->reg_rec_count = 1;
12107           break;
12108         case 12: /* fall through  */
12109         case 13:
12110           /* POP.  */
12111           register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12112           while (register_bits)
12113             {
12114               if (register_bits & 0x00000001)
12115                 record_buf[index++] = register_count;
12116               register_bits = register_bits >> 1;
12117               register_count++;
12118             }
12119           record_buf[index++] = ARM_PS_REGNUM;
12120           record_buf[index++] = ARM_SP_REGNUM;
12121           thumb_insn_r->reg_rec_count = index;
12122           break;
12123         case 0xe:
12124           /* BKPT insn.  */
12125           /* Handle enhanced software breakpoint insn, BKPT.  */
12126           /* CPSR is changed to be executed in ARM state,  disabling normal
12127              interrupts, entering abort mode.  */
12128           /* According to high vector configuration PC is set.  */
12129           /* User hits breakpoint and type reverse, in that case, we need to go back with 
12130              previous CPSR and Program Counter.  */
12131           record_buf[0] = ARM_PS_REGNUM;
12132           record_buf[1] = ARM_LR_REGNUM;
12133           thumb_insn_r->reg_rec_count = 2;
12134           /* We need to save SPSR value, which is not yet done.  */
12135           printf_unfiltered (_("Process record does not support instruction "
12136                                "0x%0x at address %s.\n"),
12137                              thumb_insn_r->arm_insn,
12138                              paddress (thumb_insn_r->gdbarch,
12139                                        thumb_insn_r->this_addr));
12140           return -1;
12141
12142         case 0xf:
12143           /* If-Then, and hints */
12144           break;
12145         default:
12146           return -1;
12147         };
12148     }
12149
12150   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12151   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12152              record_buf_mem);
12153
12154   return 0;
12155 }
12156
12157 /* Handling opcode 110 insns.  */
12158
12159 static int
12160 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)                
12161 {
12162   struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12163   struct regcache *reg_cache = thumb_insn_r->regcache;
12164
12165   uint32_t ret = 0; /* function return value: -1:record failure ;  0:success  */
12166   uint32_t reg_src1 = 0;
12167   uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12168   uint32_t index = 0, start_address = 0;
12169   uint32_t record_buf[24], record_buf_mem[48];
12170
12171   ULONGEST u_regval = 0;
12172
12173   opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12174   opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12175
12176   if (1 == opcode2)
12177     {
12178
12179       /* LDMIA.  */
12180       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12181       /* Get Rn.  */
12182       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12183       while (register_bits)
12184         {
12185           if (register_bits & 0x00000001)
12186             record_buf[index++] = register_count;
12187           register_bits = register_bits >> 1;
12188           register_count++;
12189         }
12190       record_buf[index++] = reg_src1;
12191       thumb_insn_r->reg_rec_count = index;
12192     }
12193   else if (0 == opcode2)
12194     {
12195       /* It handles both STMIA.  */
12196       register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12197       /* Get Rn.  */
12198       reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12199       regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12200       while (register_bits)
12201         {
12202           if (register_bits & 0x00000001)
12203             register_count++;
12204           register_bits = register_bits >> 1;
12205         }
12206       start_address = u_regval;
12207       thumb_insn_r->mem_rec_count = register_count;
12208       while (register_count)
12209         {
12210           record_buf_mem[(register_count * 2) - 1] = start_address;
12211           record_buf_mem[(register_count * 2) - 2] = 4;
12212           start_address = start_address + 4;
12213           register_count--;
12214         }
12215     }
12216   else if (0x1F == opcode1)
12217     {
12218         /* Handle arm syscall insn.  */
12219         if (tdep->arm_syscall_record != NULL)
12220           {
12221             regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12222             ret = tdep->arm_syscall_record (reg_cache, u_regval);
12223           }
12224         else
12225           {
12226             printf_unfiltered (_("no syscall record support\n"));
12227             return -1;
12228           }
12229     }
12230
12231   /* B (1), conditional branch is automatically taken care in process_record,
12232     as PC is saved there.  */
12233
12234   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12235   MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12236              record_buf_mem);
12237
12238   return ret;
12239 }
12240
12241 /* Handling opcode 111 insns.  */
12242
12243 static int
12244 thumb_record_branch (insn_decode_record *thumb_insn_r)
12245 {
12246   uint32_t record_buf[8];
12247   uint32_t bits_h = 0;
12248
12249   bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12250
12251   if (2 == bits_h || 3 == bits_h)
12252     {
12253       /* BL */
12254       record_buf[0] = ARM_LR_REGNUM;
12255       thumb_insn_r->reg_rec_count = 1;
12256     }
12257   else if (1 == bits_h)
12258     {
12259       /* BLX(1). */
12260       record_buf[0] = ARM_PS_REGNUM;
12261       record_buf[1] = ARM_LR_REGNUM;
12262       thumb_insn_r->reg_rec_count = 2;
12263     }
12264
12265   /* B(2) is automatically taken care in process_record, as PC is 
12266      saved there.  */
12267
12268   REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12269
12270   return 0;     
12271 }
12272
12273 /* Handler for thumb2 load/store multiple instructions.  */
12274
12275 static int
12276 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12277 {
12278   struct regcache *reg_cache = thumb2_insn_r->regcache;
12279
12280   uint32_t reg_rn, op;
12281   uint32_t register_bits = 0, register_count = 0;
12282   uint32_t index = 0, start_address = 0;
12283   uint32_t record_buf[24], record_buf_mem[48];
12284
12285   ULONGEST u_regval = 0;
12286
12287   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12288   op = bits (thumb2_insn_r->arm_insn, 23, 24);
12289
12290   if (0 == op || 3 == op)
12291     {
12292       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12293         {
12294           /* Handle RFE instruction.  */
12295           record_buf[0] = ARM_PS_REGNUM;
12296           thumb2_insn_r->reg_rec_count = 1;
12297         }
12298       else
12299         {
12300           /* Handle SRS instruction after reading banked SP.  */
12301           return arm_record_unsupported_insn (thumb2_insn_r);
12302         }
12303     }
12304   else if (1 == op || 2 == op)
12305     {
12306       if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12307         {
12308           /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions.  */
12309           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12310           while (register_bits)
12311             {
12312               if (register_bits & 0x00000001)
12313                 record_buf[index++] = register_count;
12314
12315               register_count++;
12316               register_bits = register_bits >> 1;
12317             }
12318           record_buf[index++] = reg_rn;
12319           record_buf[index++] = ARM_PS_REGNUM;
12320           thumb2_insn_r->reg_rec_count = index;
12321         }
12322       else
12323         {
12324           /* Handle STM/STMIA/STMEA and STMDB/STMFD.  */
12325           register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12326           regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12327           while (register_bits)
12328             {
12329               if (register_bits & 0x00000001)
12330                 register_count++;
12331
12332               register_bits = register_bits >> 1;
12333             }
12334
12335           if (1 == op)
12336             {
12337               /* Start address calculation for LDMDB/LDMEA.  */
12338               start_address = u_regval;
12339             }
12340           else if (2 == op)
12341             {
12342               /* Start address calculation for LDMDB/LDMEA.  */
12343               start_address = u_regval - register_count * 4;
12344             }
12345
12346           thumb2_insn_r->mem_rec_count = register_count;
12347           while (register_count)
12348             {
12349               record_buf_mem[register_count * 2 - 1] = start_address;
12350               record_buf_mem[register_count * 2 - 2] = 4;
12351               start_address = start_address + 4;
12352               register_count--;
12353             }
12354           record_buf[0] = reg_rn;
12355           record_buf[1] = ARM_PS_REGNUM;
12356           thumb2_insn_r->reg_rec_count = 2;
12357         }
12358     }
12359
12360   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12361             record_buf_mem);
12362   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12363             record_buf);
12364   return ARM_RECORD_SUCCESS;
12365 }
12366
12367 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12368    instructions.  */
12369
12370 static int
12371 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12372 {
12373   struct regcache *reg_cache = thumb2_insn_r->regcache;
12374
12375   uint32_t reg_rd, reg_rn, offset_imm;
12376   uint32_t reg_dest1, reg_dest2;
12377   uint32_t address, offset_addr;
12378   uint32_t record_buf[8], record_buf_mem[8];
12379   uint32_t op1, op2, op3;
12380
12381   ULONGEST u_regval[2];
12382
12383   op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12384   op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12385   op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12386
12387   if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12388     {
12389       if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12390         {
12391           reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12392           record_buf[0] = reg_dest1;
12393           record_buf[1] = ARM_PS_REGNUM;
12394           thumb2_insn_r->reg_rec_count = 2;
12395         }
12396
12397       if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12398         {
12399           reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12400           record_buf[2] = reg_dest2;
12401           thumb2_insn_r->reg_rec_count = 3;
12402         }
12403     }
12404   else
12405     {
12406       reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12407       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12408
12409       if (0 == op1 && 0 == op2)
12410         {
12411           /* Handle STREX.  */
12412           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12413           address = u_regval[0] + (offset_imm * 4);
12414           record_buf_mem[0] = 4;
12415           record_buf_mem[1] = address;
12416           thumb2_insn_r->mem_rec_count = 1;
12417           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12418           record_buf[0] = reg_rd;
12419           thumb2_insn_r->reg_rec_count = 1;
12420         }
12421       else if (1 == op1 && 0 == op2)
12422         {
12423           reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12424           record_buf[0] = reg_rd;
12425           thumb2_insn_r->reg_rec_count = 1;
12426           address = u_regval[0];
12427           record_buf_mem[1] = address;
12428
12429           if (4 == op3)
12430             {
12431               /* Handle STREXB.  */
12432               record_buf_mem[0] = 1;
12433               thumb2_insn_r->mem_rec_count = 1;
12434             }
12435           else if (5 == op3)
12436             {
12437               /* Handle STREXH.  */
12438               record_buf_mem[0] = 2 ;
12439               thumb2_insn_r->mem_rec_count = 1;
12440             }
12441           else if (7 == op3)
12442             {
12443               /* Handle STREXD.  */
12444               address = u_regval[0];
12445               record_buf_mem[0] = 4;
12446               record_buf_mem[2] = 4;
12447               record_buf_mem[3] = address + 4;
12448               thumb2_insn_r->mem_rec_count = 2;
12449             }
12450         }
12451       else
12452         {
12453           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12454
12455           if (bit (thumb2_insn_r->arm_insn, 24))
12456             {
12457               if (bit (thumb2_insn_r->arm_insn, 23))
12458                 offset_addr = u_regval[0] + (offset_imm * 4);
12459               else
12460                 offset_addr = u_regval[0] - (offset_imm * 4);
12461
12462               address = offset_addr;
12463             }
12464           else
12465             address = u_regval[0];
12466
12467           record_buf_mem[0] = 4;
12468           record_buf_mem[1] = address;
12469           record_buf_mem[2] = 4;
12470           record_buf_mem[3] = address + 4;
12471           thumb2_insn_r->mem_rec_count = 2;
12472           record_buf[0] = reg_rn;
12473           thumb2_insn_r->reg_rec_count = 1;
12474         }
12475     }
12476
12477   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12478             record_buf);
12479   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12480             record_buf_mem);
12481   return ARM_RECORD_SUCCESS;
12482 }
12483
12484 /* Handler for thumb2 data processing (shift register and modified immediate)
12485    instructions.  */
12486
12487 static int
12488 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12489 {
12490   uint32_t reg_rd, op;
12491   uint32_t record_buf[8];
12492
12493   op = bits (thumb2_insn_r->arm_insn, 21, 24);
12494   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12495
12496   if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12497     {
12498       record_buf[0] = ARM_PS_REGNUM;
12499       thumb2_insn_r->reg_rec_count = 1;
12500     }
12501   else
12502     {
12503       record_buf[0] = reg_rd;
12504       record_buf[1] = ARM_PS_REGNUM;
12505       thumb2_insn_r->reg_rec_count = 2;
12506     }
12507
12508   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12509             record_buf);
12510   return ARM_RECORD_SUCCESS;
12511 }
12512
12513 /* Generic handler for thumb2 instructions which effect destination and PS
12514    registers.  */
12515
12516 static int
12517 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12518 {
12519   uint32_t reg_rd;
12520   uint32_t record_buf[8];
12521
12522   reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12523
12524   record_buf[0] = reg_rd;
12525   record_buf[1] = ARM_PS_REGNUM;
12526   thumb2_insn_r->reg_rec_count = 2;
12527
12528   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12529             record_buf);
12530   return ARM_RECORD_SUCCESS;
12531 }
12532
12533 /* Handler for thumb2 branch and miscellaneous control instructions.  */
12534
12535 static int
12536 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12537 {
12538   uint32_t op, op1, op2;
12539   uint32_t record_buf[8];
12540
12541   op = bits (thumb2_insn_r->arm_insn, 20, 26);
12542   op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12543   op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12544
12545   /* Handle MSR insn.  */
12546   if (!(op1 & 0x2) && 0x38 == op)
12547     {
12548       if (!(op2 & 0x3))
12549         {
12550           /* CPSR is going to be changed.  */
12551           record_buf[0] = ARM_PS_REGNUM;
12552           thumb2_insn_r->reg_rec_count = 1;
12553         }
12554       else
12555         {
12556           arm_record_unsupported_insn(thumb2_insn_r);
12557           return -1;
12558         }
12559     }
12560   else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12561     {
12562       /* BLX.  */
12563       record_buf[0] = ARM_PS_REGNUM;
12564       record_buf[1] = ARM_LR_REGNUM;
12565       thumb2_insn_r->reg_rec_count = 2;
12566     }
12567
12568   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12569             record_buf);
12570   return ARM_RECORD_SUCCESS;
12571 }
12572
12573 /* Handler for thumb2 store single data item instructions.  */
12574
12575 static int
12576 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12577 {
12578   struct regcache *reg_cache = thumb2_insn_r->regcache;
12579
12580   uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12581   uint32_t address, offset_addr;
12582   uint32_t record_buf[8], record_buf_mem[8];
12583   uint32_t op1, op2;
12584
12585   ULONGEST u_regval[2];
12586
12587   op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12588   op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12589   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12590   regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12591
12592   if (bit (thumb2_insn_r->arm_insn, 23))
12593     {
12594       /* T2 encoding.  */
12595       offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12596       offset_addr = u_regval[0] + offset_imm;
12597       address = offset_addr;
12598     }
12599   else
12600     {
12601       /* T3 encoding.  */
12602       if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12603         {
12604           /* Handle STRB (register).  */
12605           reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12606           regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12607           shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12608           offset_addr = u_regval[1] << shift_imm;
12609           address = u_regval[0] + offset_addr;
12610         }
12611       else
12612         {
12613           offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12614           if (bit (thumb2_insn_r->arm_insn, 10))
12615             {
12616               if (bit (thumb2_insn_r->arm_insn, 9))
12617                 offset_addr = u_regval[0] + offset_imm;
12618               else
12619                 offset_addr = u_regval[0] - offset_imm;
12620
12621               address = offset_addr;
12622             }
12623           else
12624             address = u_regval[0];
12625         }
12626     }
12627
12628   switch (op1)
12629     {
12630       /* Store byte instructions.  */
12631       case 4:
12632       case 0:
12633         record_buf_mem[0] = 1;
12634         break;
12635       /* Store half word instructions.  */
12636       case 1:
12637       case 5:
12638         record_buf_mem[0] = 2;
12639         break;
12640       /* Store word instructions.  */
12641       case 2:
12642       case 6:
12643         record_buf_mem[0] = 4;
12644         break;
12645
12646       default:
12647         gdb_assert_not_reached ("no decoding pattern found");
12648         break;
12649     }
12650
12651   record_buf_mem[1] = address;
12652   thumb2_insn_r->mem_rec_count = 1;
12653   record_buf[0] = reg_rn;
12654   thumb2_insn_r->reg_rec_count = 1;
12655
12656   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12657             record_buf);
12658   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12659             record_buf_mem);
12660   return ARM_RECORD_SUCCESS;
12661 }
12662
12663 /* Handler for thumb2 load memory hints instructions.  */
12664
12665 static int
12666 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12667 {
12668   uint32_t record_buf[8];
12669   uint32_t reg_rt, reg_rn;
12670
12671   reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12672   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12673
12674   if (ARM_PC_REGNUM != reg_rt)
12675     {
12676       record_buf[0] = reg_rt;
12677       record_buf[1] = reg_rn;
12678       record_buf[2] = ARM_PS_REGNUM;
12679       thumb2_insn_r->reg_rec_count = 3;
12680
12681       REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12682                 record_buf);
12683       return ARM_RECORD_SUCCESS;
12684     }
12685
12686   return ARM_RECORD_FAILURE;
12687 }
12688
12689 /* Handler for thumb2 load word instructions.  */
12690
12691 static int
12692 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12693 {
12694   uint32_t record_buf[8];
12695
12696   record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12697   record_buf[1] = ARM_PS_REGNUM;
12698   thumb2_insn_r->reg_rec_count = 2;
12699
12700   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12701             record_buf);
12702   return ARM_RECORD_SUCCESS;
12703 }
12704
12705 /* Handler for thumb2 long multiply, long multiply accumulate, and
12706    divide instructions.  */
12707
12708 static int
12709 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12710 {
12711   uint32_t opcode1 = 0, opcode2 = 0;
12712   uint32_t record_buf[8];
12713
12714   opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12715   opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12716
12717   if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12718     {
12719       /* Handle SMULL, UMULL, SMULAL.  */
12720       /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S).  */
12721       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12722       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12723       record_buf[2] = ARM_PS_REGNUM;
12724       thumb2_insn_r->reg_rec_count = 3;
12725     }
12726   else if (1 == opcode1 || 3 == opcode2)
12727     {
12728       /* Handle SDIV and UDIV.  */
12729       record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12730       record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12731       record_buf[2] = ARM_PS_REGNUM;
12732       thumb2_insn_r->reg_rec_count = 3;
12733     }
12734   else
12735     return ARM_RECORD_FAILURE;
12736
12737   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12738             record_buf);
12739   return ARM_RECORD_SUCCESS;
12740 }
12741
12742 /* Record handler for thumb32 coprocessor instructions.  */
12743
12744 static int
12745 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12746 {
12747   if (bit (thumb2_insn_r->arm_insn, 25))
12748     return arm_record_coproc_data_proc (thumb2_insn_r);
12749   else
12750     return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12751 }
12752
12753 /* Record handler for advance SIMD structure load/store instructions.  */
12754
12755 static int
12756 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12757 {
12758   struct regcache *reg_cache = thumb2_insn_r->regcache;
12759   uint32_t l_bit, a_bit, b_bits;
12760   uint32_t record_buf[128], record_buf_mem[128];
12761   uint32_t reg_rn, reg_vd, address, f_elem;
12762   uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12763   uint8_t f_ebytes;
12764
12765   l_bit = bit (thumb2_insn_r->arm_insn, 21);
12766   a_bit = bit (thumb2_insn_r->arm_insn, 23);
12767   b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12768   reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12769   reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12770   reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12771   f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12772   f_elem = 8 / f_ebytes;
12773
12774   if (!l_bit)
12775     {
12776       ULONGEST u_regval = 0;
12777       regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12778       address = u_regval;
12779
12780       if (!a_bit)
12781         {
12782           /* Handle VST1.  */
12783           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12784             {
12785               if (b_bits == 0x07)
12786                 bf_regs = 1;
12787               else if (b_bits == 0x0a)
12788                 bf_regs = 2;
12789               else if (b_bits == 0x06)
12790                 bf_regs = 3;
12791               else if (b_bits == 0x02)
12792                 bf_regs = 4;
12793               else
12794                 bf_regs = 0;
12795
12796               for (index_r = 0; index_r < bf_regs; index_r++)
12797                 {
12798                   for (index_e = 0; index_e < f_elem; index_e++)
12799                     {
12800                       record_buf_mem[index_m++] = f_ebytes;
12801                       record_buf_mem[index_m++] = address;
12802                       address = address + f_ebytes;
12803                       thumb2_insn_r->mem_rec_count += 1;
12804                     }
12805                 }
12806             }
12807           /* Handle VST2.  */
12808           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12809             {
12810               if (b_bits == 0x09 || b_bits == 0x08)
12811                 bf_regs = 1;
12812               else if (b_bits == 0x03)
12813                 bf_regs = 2;
12814               else
12815                 bf_regs = 0;
12816
12817               for (index_r = 0; index_r < bf_regs; index_r++)
12818                 for (index_e = 0; index_e < f_elem; index_e++)
12819                   {
12820                     for (loop_t = 0; loop_t < 2; loop_t++)
12821                       {
12822                         record_buf_mem[index_m++] = f_ebytes;
12823                         record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12824                         thumb2_insn_r->mem_rec_count += 1;
12825                       }
12826                     address = address + (2 * f_ebytes);
12827                   }
12828             }
12829           /* Handle VST3.  */
12830           else if ((b_bits & 0x0e) == 0x04)
12831             {
12832               for (index_e = 0; index_e < f_elem; index_e++)
12833                 {
12834                   for (loop_t = 0; loop_t < 3; loop_t++)
12835                     {
12836                       record_buf_mem[index_m++] = f_ebytes;
12837                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12838                       thumb2_insn_r->mem_rec_count += 1;
12839                     }
12840                   address = address + (3 * f_ebytes);
12841                 }
12842             }
12843           /* Handle VST4.  */
12844           else if (!(b_bits & 0x0e))
12845             {
12846               for (index_e = 0; index_e < f_elem; index_e++)
12847                 {
12848                   for (loop_t = 0; loop_t < 4; loop_t++)
12849                     {
12850                       record_buf_mem[index_m++] = f_ebytes;
12851                       record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12852                       thumb2_insn_r->mem_rec_count += 1;
12853                     }
12854                   address = address + (4 * f_ebytes);
12855                 }
12856             }
12857         }
12858       else
12859         {
12860           uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12861
12862           if (bft_size == 0x00)
12863             f_ebytes = 1;
12864           else if (bft_size == 0x01)
12865             f_ebytes = 2;
12866           else if (bft_size == 0x02)
12867             f_ebytes = 4;
12868           else
12869             f_ebytes = 0;
12870
12871           /* Handle VST1.  */
12872           if (!(b_bits & 0x0b) || b_bits == 0x08)
12873             thumb2_insn_r->mem_rec_count = 1;
12874           /* Handle VST2.  */
12875           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12876             thumb2_insn_r->mem_rec_count = 2;
12877           /* Handle VST3.  */
12878           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12879             thumb2_insn_r->mem_rec_count = 3;
12880           /* Handle VST4.  */
12881           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12882             thumb2_insn_r->mem_rec_count = 4;
12883
12884           for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12885             {
12886               record_buf_mem[index_m] = f_ebytes;
12887               record_buf_mem[index_m] = address + (index_m * f_ebytes);
12888             }
12889         }
12890     }
12891   else
12892     {
12893       if (!a_bit)
12894         {
12895           /* Handle VLD1.  */
12896           if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12897             thumb2_insn_r->reg_rec_count = 1;
12898           /* Handle VLD2.  */
12899           else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12900             thumb2_insn_r->reg_rec_count = 2;
12901           /* Handle VLD3.  */
12902           else if ((b_bits & 0x0e) == 0x04)
12903             thumb2_insn_r->reg_rec_count = 3;
12904           /* Handle VLD4.  */
12905           else if (!(b_bits & 0x0e))
12906             thumb2_insn_r->reg_rec_count = 4;
12907         }
12908       else
12909         {
12910           /* Handle VLD1.  */
12911           if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12912             thumb2_insn_r->reg_rec_count = 1;
12913           /* Handle VLD2.  */
12914           else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12915             thumb2_insn_r->reg_rec_count = 2;
12916           /* Handle VLD3.  */
12917           else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12918             thumb2_insn_r->reg_rec_count = 3;
12919           /* Handle VLD4.  */
12920           else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12921             thumb2_insn_r->reg_rec_count = 4;
12922
12923           for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12924             record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12925         }
12926     }
12927
12928   if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12929     {
12930       record_buf[index_r] = reg_rn;
12931       thumb2_insn_r->reg_rec_count += 1;
12932     }
12933
12934   REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12935             record_buf);
12936   MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12937             record_buf_mem);
12938   return 0;
12939 }
12940
12941 /* Decodes thumb2 instruction type and invokes its record handler.  */
12942
12943 static unsigned int
12944 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12945 {
12946   uint32_t op, op1, op2;
12947
12948   op = bit (thumb2_insn_r->arm_insn, 15);
12949   op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12950   op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12951
12952   if (op1 == 0x01)
12953     {
12954       if (!(op2 & 0x64 ))
12955         {
12956           /* Load/store multiple instruction.  */
12957           return thumb2_record_ld_st_multiple (thumb2_insn_r);
12958         }
12959       else if ((op2 & 0x64) == 0x4)
12960         {
12961           /* Load/store (dual/exclusive) and table branch instruction.  */
12962           return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12963         }
12964       else if ((op2 & 0x60) == 0x20)
12965         {
12966           /* Data-processing (shifted register).  */
12967           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12968         }
12969       else if (op2 & 0x40)
12970         {
12971           /* Co-processor instructions.  */
12972           return thumb2_record_coproc_insn (thumb2_insn_r);
12973         }
12974     }
12975   else if (op1 == 0x02)
12976     {
12977       if (op)
12978         {
12979           /* Branches and miscellaneous control instructions.  */
12980           return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12981         }
12982       else if (op2 & 0x20)
12983         {
12984           /* Data-processing (plain binary immediate) instruction.  */
12985           return thumb2_record_ps_dest_generic (thumb2_insn_r);
12986         }
12987       else
12988         {
12989           /* Data-processing (modified immediate).  */
12990           return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12991         }
12992     }
12993   else if (op1 == 0x03)
12994     {
12995       if (!(op2 & 0x71 ))
12996         {
12997           /* Store single data item.  */
12998           return thumb2_record_str_single_data (thumb2_insn_r);
12999         }
13000       else if (!((op2 & 0x71) ^ 0x10))
13001         {
13002           /* Advanced SIMD or structure load/store instructions.  */
13003           return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
13004         }
13005       else if (!((op2 & 0x67) ^ 0x01))
13006         {
13007           /* Load byte, memory hints instruction.  */
13008           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13009         }
13010       else if (!((op2 & 0x67) ^ 0x03))
13011         {
13012           /* Load halfword, memory hints instruction.  */
13013           return thumb2_record_ld_mem_hints (thumb2_insn_r);
13014         }
13015       else if (!((op2 & 0x67) ^ 0x05))
13016         {
13017           /* Load word instruction.  */
13018           return thumb2_record_ld_word (thumb2_insn_r);
13019         }
13020       else if (!((op2 & 0x70) ^ 0x20))
13021         {
13022           /* Data-processing (register) instruction.  */
13023           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13024         }
13025       else if (!((op2 & 0x78) ^ 0x30))
13026         {
13027           /* Multiply, multiply accumulate, abs diff instruction.  */
13028           return thumb2_record_ps_dest_generic (thumb2_insn_r);
13029         }
13030       else if (!((op2 & 0x78) ^ 0x38))
13031         {
13032           /* Long multiply, long multiply accumulate, and divide.  */
13033           return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13034         }
13035       else if (op2 & 0x40)
13036         {
13037           /* Co-processor instructions.  */
13038           return thumb2_record_coproc_insn (thumb2_insn_r);
13039         }
13040    }
13041
13042   return -1;
13043 }
13044
13045 namespace {
13046 /* Abstract memory reader.  */
13047
13048 class abstract_memory_reader
13049 {
13050 public:
13051   /* Read LEN bytes of target memory at address MEMADDR, placing the
13052      results in GDB's memory at BUF.  Return true on success.  */
13053
13054   virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
13055 };
13056
13057 /* Instruction reader from real target.  */
13058
13059 class instruction_reader : public abstract_memory_reader
13060 {
13061  public:
13062   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13063   {
13064     if (target_read_memory (memaddr, buf, len))
13065       return false;
13066     else
13067       return true;
13068   }
13069 };
13070
13071 } // namespace
13072
13073 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success 
13074 and positive val on failure.  */
13075
13076 static int
13077 extract_arm_insn (abstract_memory_reader& reader,
13078                   insn_decode_record *insn_record, uint32_t insn_size)
13079 {
13080   gdb_byte buf[insn_size];
13081
13082   memset (&buf[0], 0, insn_size);
13083   
13084   if (!reader.read (insn_record->this_addr, buf, insn_size))
13085     return 1;
13086   insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13087                            insn_size, 
13088                            gdbarch_byte_order_for_code (insn_record->gdbarch));
13089   return 0;
13090 }
13091
13092 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13093
13094 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13095    dispatch it.  */
13096
13097 static int
13098 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13099              record_type_t record_type, uint32_t insn_size)
13100 {
13101
13102   /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13103      instruction.  */
13104   static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13105   {
13106     arm_record_data_proc_misc_ld_str,   /* 000.  */
13107     arm_record_data_proc_imm,           /* 001.  */
13108     arm_record_ld_st_imm_offset,        /* 010.  */
13109     arm_record_ld_st_reg_offset,        /* 011.  */
13110     arm_record_ld_st_multiple,          /* 100.  */
13111     arm_record_b_bl,                    /* 101.  */
13112     arm_record_asimd_vfp_coproc,        /* 110.  */
13113     arm_record_coproc_data_proc         /* 111.  */
13114   };
13115
13116   /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13117      instruction.  */
13118   static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13119   { \
13120     thumb_record_shift_add_sub,        /* 000.  */
13121     thumb_record_add_sub_cmp_mov,      /* 001.  */
13122     thumb_record_ld_st_reg_offset,     /* 010.  */
13123     thumb_record_ld_st_imm_offset,     /* 011.  */
13124     thumb_record_ld_st_stack,          /* 100.  */
13125     thumb_record_misc,                 /* 101.  */
13126     thumb_record_ldm_stm_swi,          /* 110.  */
13127     thumb_record_branch                /* 111.  */
13128   };
13129
13130   uint32_t ret = 0;    /* return value: negative:failure   0:success.  */
13131   uint32_t insn_id = 0;
13132
13133   if (extract_arm_insn (reader, arm_record, insn_size))
13134     {
13135       if (record_debug)
13136         {
13137           printf_unfiltered (_("Process record: error reading memory at "
13138                                "addr %s len = %d.\n"),
13139                              paddress (arm_record->gdbarch,
13140                                        arm_record->this_addr), insn_size);
13141         }
13142       return -1;
13143     }
13144   else if (ARM_RECORD == record_type)
13145     {
13146       arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13147       insn_id = bits (arm_record->arm_insn, 25, 27);
13148
13149       if (arm_record->cond == 0xf)
13150         ret = arm_record_extension_space (arm_record);
13151       else
13152         {
13153           /* If this insn has fallen into extension space
13154              then we need not decode it anymore.  */
13155           ret = arm_handle_insn[insn_id] (arm_record);
13156         }
13157       if (ret != ARM_RECORD_SUCCESS)
13158         {
13159           arm_record_unsupported_insn (arm_record);
13160           ret = -1;
13161         }
13162     }
13163   else if (THUMB_RECORD == record_type)
13164     {
13165       /* As thumb does not have condition codes, we set negative.  */
13166       arm_record->cond = -1;
13167       insn_id = bits (arm_record->arm_insn, 13, 15);
13168       ret = thumb_handle_insn[insn_id] (arm_record);
13169       if (ret != ARM_RECORD_SUCCESS)
13170         {
13171           arm_record_unsupported_insn (arm_record);
13172           ret = -1;
13173         }
13174     }
13175   else if (THUMB2_RECORD == record_type)
13176     {
13177       /* As thumb does not have condition codes, we set negative.  */
13178       arm_record->cond = -1;
13179
13180       /* Swap first half of 32bit thumb instruction with second half.  */
13181       arm_record->arm_insn
13182         = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13183
13184       ret = thumb2_record_decode_insn_handler (arm_record);
13185
13186       if (ret != ARM_RECORD_SUCCESS)
13187         {
13188           arm_record_unsupported_insn (arm_record);
13189           ret = -1;
13190         }
13191     }
13192   else
13193     {
13194       /* Throw assertion.  */
13195       gdb_assert_not_reached ("not a valid instruction, could not decode");
13196     }
13197
13198   return ret;
13199 }
13200
13201 #if GDB_SELF_TEST
13202 namespace selftests {
13203
13204 /* Provide both 16-bit and 32-bit thumb instructions.  */
13205
13206 class instruction_reader_thumb : public abstract_memory_reader
13207 {
13208 public:
13209   template<size_t SIZE>
13210   instruction_reader_thumb (enum bfd_endian endian,
13211                             const uint16_t (&insns)[SIZE])
13212     : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13213   {}
13214
13215   bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13216   {
13217     SELF_CHECK (len == 4 || len == 2);
13218     SELF_CHECK (memaddr % 2 == 0);
13219     SELF_CHECK ((memaddr / 2) < m_insns_size);
13220
13221     store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13222     if (len == 4)
13223       {
13224         store_unsigned_integer (&buf[2], 2, m_endian,
13225                                 m_insns[memaddr / 2 + 1]);
13226       }
13227     return true;
13228   }
13229
13230 private:
13231   enum bfd_endian m_endian;
13232   const uint16_t *m_insns;
13233   size_t m_insns_size;
13234 };
13235
13236 static void
13237 arm_record_test (void)
13238 {
13239   struct gdbarch_info info;
13240   gdbarch_info_init (&info);
13241   info.bfd_arch_info = bfd_scan_arch ("arm");
13242
13243   struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13244
13245   SELF_CHECK (gdbarch != NULL);
13246
13247   /* 16-bit Thumb instructions.  */
13248   {
13249     insn_decode_record arm_record;
13250
13251     memset (&arm_record, 0, sizeof (insn_decode_record));
13252     arm_record.gdbarch = gdbarch;
13253
13254     static const uint16_t insns[] = {
13255       /* db b2  uxtb    r3, r3 */
13256       0xb2db,
13257       /* cd 58  ldr     r5, [r1, r3] */
13258       0x58cd,
13259     };
13260
13261     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13262     instruction_reader_thumb reader (endian, insns);
13263     int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13264                            THUMB_INSN_SIZE_BYTES);
13265
13266     SELF_CHECK (ret == 0);
13267     SELF_CHECK (arm_record.mem_rec_count == 0);
13268     SELF_CHECK (arm_record.reg_rec_count == 1);
13269     SELF_CHECK (arm_record.arm_regs[0] == 3);
13270
13271     arm_record.this_addr += 2;
13272     ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13273                        THUMB_INSN_SIZE_BYTES);
13274
13275     SELF_CHECK (ret == 0);
13276     SELF_CHECK (arm_record.mem_rec_count == 0);
13277     SELF_CHECK (arm_record.reg_rec_count == 1);
13278     SELF_CHECK (arm_record.arm_regs[0] == 5);
13279   }
13280
13281   /* 32-bit Thumb-2 instructions.  */
13282   {
13283     insn_decode_record arm_record;
13284
13285     memset (&arm_record, 0, sizeof (insn_decode_record));
13286     arm_record.gdbarch = gdbarch;
13287
13288     static const uint16_t insns[] = {
13289       /* 1d ee 70 7f     mrc    15, 0, r7, cr13, cr0, {3} */
13290       0xee1d, 0x7f70,
13291     };
13292
13293     enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13294     instruction_reader_thumb reader (endian, insns);
13295     int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13296                            THUMB2_INSN_SIZE_BYTES);
13297
13298     SELF_CHECK (ret == 0);
13299     SELF_CHECK (arm_record.mem_rec_count == 0);
13300     SELF_CHECK (arm_record.reg_rec_count == 1);
13301     SELF_CHECK (arm_record.arm_regs[0] == 7);
13302   }
13303 }
13304
13305 /* Instruction reader from manually cooked instruction sequences.  */
13306
13307 class test_arm_instruction_reader : public arm_instruction_reader
13308 {
13309 public:
13310   explicit test_arm_instruction_reader (gdb::array_view<const uint32_t> insns)
13311     : m_insns (insns)
13312   {}
13313
13314   uint32_t read (CORE_ADDR memaddr, enum bfd_endian byte_order) const override
13315   {
13316     SELF_CHECK (memaddr % 4 == 0);
13317     SELF_CHECK (memaddr / 4 < m_insns.size ());
13318
13319     return m_insns[memaddr / 4];
13320   }
13321
13322 private:
13323   const gdb::array_view<const uint32_t> m_insns;
13324 };
13325
13326 static void
13327 arm_analyze_prologue_test ()
13328 {
13329   for (bfd_endian endianness : {BFD_ENDIAN_LITTLE, BFD_ENDIAN_BIG})
13330     {
13331       struct gdbarch_info info;
13332       gdbarch_info_init (&info);
13333       info.byte_order = endianness;
13334       info.byte_order_for_code = endianness;
13335       info.bfd_arch_info = bfd_scan_arch ("arm");
13336
13337       struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13338
13339       SELF_CHECK (gdbarch != NULL);
13340
13341       /* The "sub" instruction contains an immediate value rotate count of 0,
13342          which resulted in a 32-bit shift of a 32-bit value, caught by
13343          UBSan.  */
13344       const uint32_t insns[] = {
13345           0xe92d4ff0, /* push    {r4, r5, r6, r7, r8, r9, sl, fp, lr} */
13346           0xe1a05000, /* mov     r5, r0 */
13347           0xe5903020, /* ldr     r3, [r0, #32] */
13348           0xe24dd044, /* sub     sp, sp, #68     ; 0x44 */
13349       };
13350
13351       test_arm_instruction_reader mem_reader (insns);
13352       arm_prologue_cache cache;
13353       cache.saved_regs = trad_frame_alloc_saved_regs (gdbarch);
13354
13355       arm_analyze_prologue (gdbarch, 0, sizeof (insns) - 1, &cache, mem_reader);
13356     }
13357 }
13358
13359 } // namespace selftests
13360 #endif /* GDB_SELF_TEST */
13361
13362 /* Cleans up local record registers and memory allocations.  */
13363
13364 static void 
13365 deallocate_reg_mem (insn_decode_record *record)
13366 {
13367   xfree (record->arm_regs);
13368   xfree (record->arm_mems);    
13369 }
13370
13371
13372 /* Parse the current instruction and record the values of the registers and
13373    memory that will be changed in current instruction to record_arch_list".
13374    Return -1 if something is wrong.  */
13375
13376 int
13377 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13378                     CORE_ADDR insn_addr)
13379 {
13380
13381   uint32_t no_of_rec = 0;
13382   uint32_t ret = 0;  /* return value: -1:record failure ;  0:success  */
13383   ULONGEST t_bit = 0, insn_id = 0;
13384
13385   ULONGEST u_regval = 0;
13386
13387   insn_decode_record arm_record;
13388
13389   memset (&arm_record, 0, sizeof (insn_decode_record));
13390   arm_record.regcache = regcache;
13391   arm_record.this_addr = insn_addr;
13392   arm_record.gdbarch = gdbarch;
13393
13394
13395   if (record_debug > 1)
13396     {
13397       fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13398                           "addr = %s\n",
13399       paddress (gdbarch, arm_record.this_addr));
13400     }
13401
13402   instruction_reader reader;
13403   if (extract_arm_insn (reader, &arm_record, 2))
13404     {
13405       if (record_debug)
13406         {
13407           printf_unfiltered (_("Process record: error reading memory at "
13408                                "addr %s len = %d.\n"),
13409                              paddress (arm_record.gdbarch,
13410                                        arm_record.this_addr), 2);
13411         }
13412       return -1;
13413     }
13414
13415   /* Check the insn, whether it is thumb or arm one.  */
13416
13417   t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13418   regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13419
13420
13421   if (!(u_regval & t_bit))
13422     {
13423       /* We are decoding arm insn.  */
13424       ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13425     }
13426   else
13427     {
13428       insn_id = bits (arm_record.arm_insn, 11, 15);
13429       /* is it thumb2 insn?  */
13430       if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13431         {
13432           ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13433                              THUMB2_INSN_SIZE_BYTES);
13434         }
13435       else
13436         {
13437           /* We are decoding thumb insn.  */
13438           ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13439                              THUMB_INSN_SIZE_BYTES);
13440         }
13441     }
13442
13443   if (0 == ret)
13444     {
13445       /* Record registers.  */
13446       record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13447       if (arm_record.arm_regs)
13448         {
13449           for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13450             {
13451               if (record_full_arch_list_add_reg
13452                   (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13453                 ret = -1;
13454             }
13455         }
13456       /* Record memories.  */
13457       if (arm_record.arm_mems)
13458         {
13459           for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13460             {
13461               if (record_full_arch_list_add_mem
13462                   ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13463                    arm_record.arm_mems[no_of_rec].len))
13464                 ret = -1;
13465             }
13466         }
13467
13468       if (record_full_arch_list_add_end ())
13469         ret = -1;
13470     }
13471
13472
13473   deallocate_reg_mem (&arm_record);
13474
13475   return ret;
13476 }
13477
13478 /* See arm-tdep.h.  */
13479
13480 const target_desc *
13481 arm_read_description (arm_fp_type fp_type)
13482 {
13483   struct target_desc *tdesc = tdesc_arm_list[fp_type];
13484
13485   if (tdesc == nullptr)
13486     {
13487       tdesc = arm_create_target_description (fp_type);
13488       tdesc_arm_list[fp_type] = tdesc;
13489     }
13490
13491   return tdesc;
13492 }
13493
13494 /* See arm-tdep.h.  */
13495
13496 const target_desc *
13497 arm_read_mprofile_description (arm_m_profile_type m_type)
13498 {
13499   struct target_desc *tdesc = tdesc_arm_mprofile_list[m_type];
13500
13501   if (tdesc == nullptr)
13502     {
13503       tdesc = arm_create_mprofile_target_description (m_type);
13504       tdesc_arm_mprofile_list[m_type] = tdesc;
13505     }
13506
13507   return tdesc;
13508 }
This page took 0.80695 seconds and 4 git commands to generate.