AArch64: Treat pauth ops as nops on non-pauth systems
[deliverable/binutils-gdb.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2
3 Copyright (C) 1988-2019 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21
22 #include <ctype.h> /* XXX for isupper (). */
23
24 #include "frame.h"
25 #include "inferior.h"
26 #include "infrun.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "dis-asm.h" /* For register styles. */
30 #include "disasm.h"
31 #include "regcache.h"
32 #include "reggroups.h"
33 #include "target-float.h"
34 #include "value.h"
35 #include "arch-utils.h"
36 #include "osabi.h"
37 #include "frame-unwind.h"
38 #include "frame-base.h"
39 #include "trad-frame.h"
40 #include "objfiles.h"
41 #include "dwarf2-frame.h"
42 #include "gdbtypes.h"
43 #include "prologue-value.h"
44 #include "remote.h"
45 #include "target-descriptions.h"
46 #include "user-regs.h"
47 #include "observable.h"
48
49 #include "arch/arm.h"
50 #include "arch/arm-get-next-pcs.h"
51 #include "arm-tdep.h"
52 #include "gdb/sim-arm.h"
53
54 #include "elf-bfd.h"
55 #include "coff/internal.h"
56 #include "elf/arm.h"
57
58 #include "common/vec.h"
59
60 #include "record.h"
61 #include "record-full.h"
62 #include <algorithm>
63
64 #include "features/arm/arm-with-m.c"
65 #include "features/arm/arm-with-m-fpa-layout.c"
66 #include "features/arm/arm-with-m-vfp-d16.c"
67 #include "features/arm/arm-with-iwmmxt.c"
68 #include "features/arm/arm-with-vfpv2.c"
69 #include "features/arm/arm-with-vfpv3.c"
70 #include "features/arm/arm-with-neon.c"
71
72 #if GDB_SELF_TEST
73 #include "common/selftest.h"
74 #endif
75
76 static int arm_debug;
77
78 /* Macros for setting and testing a bit in a minimal symbol that marks
79 it as Thumb function. The MSB of the minimal symbol's "info" field
80 is used for this purpose.
81
82 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
83 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
84
85 #define MSYMBOL_SET_SPECIAL(msym) \
86 MSYMBOL_TARGET_FLAG_1 (msym) = 1
87
88 #define MSYMBOL_IS_SPECIAL(msym) \
89 MSYMBOL_TARGET_FLAG_1 (msym)
90
91 /* Per-objfile data used for mapping symbols. */
92 static const struct objfile_data *arm_objfile_data_key;
93
94 struct arm_mapping_symbol
95 {
96 bfd_vma value;
97 char type;
98 };
99 typedef struct arm_mapping_symbol arm_mapping_symbol_s;
100 DEF_VEC_O(arm_mapping_symbol_s);
101
102 struct arm_per_objfile
103 {
104 VEC(arm_mapping_symbol_s) **section_maps;
105 };
106
107 /* The list of available "set arm ..." and "show arm ..." commands. */
108 static struct cmd_list_element *setarmcmdlist = NULL;
109 static struct cmd_list_element *showarmcmdlist = NULL;
110
111 /* The type of floating-point to use. Keep this in sync with enum
112 arm_float_model, and the help string in _initialize_arm_tdep. */
113 static const char *const fp_model_strings[] =
114 {
115 "auto",
116 "softfpa",
117 "fpa",
118 "softvfp",
119 "vfp",
120 NULL
121 };
122
123 /* A variable that can be configured by the user. */
124 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
125 static const char *current_fp_model = "auto";
126
127 /* The ABI to use. Keep this in sync with arm_abi_kind. */
128 static const char *const arm_abi_strings[] =
129 {
130 "auto",
131 "APCS",
132 "AAPCS",
133 NULL
134 };
135
136 /* A variable that can be configured by the user. */
137 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
138 static const char *arm_abi_string = "auto";
139
140 /* The execution mode to assume. */
141 static const char *const arm_mode_strings[] =
142 {
143 "auto",
144 "arm",
145 "thumb",
146 NULL
147 };
148
149 static const char *arm_fallback_mode_string = "auto";
150 static const char *arm_force_mode_string = "auto";
151
152 /* The standard register names, and all the valid aliases for them. Note
153 that `fp', `sp' and `pc' are not added in this alias list, because they
154 have been added as builtin user registers in
155 std-regs.c:_initialize_frame_reg. */
156 static const struct
157 {
158 const char *name;
159 int regnum;
160 } arm_register_aliases[] = {
161 /* Basic register numbers. */
162 { "r0", 0 },
163 { "r1", 1 },
164 { "r2", 2 },
165 { "r3", 3 },
166 { "r4", 4 },
167 { "r5", 5 },
168 { "r6", 6 },
169 { "r7", 7 },
170 { "r8", 8 },
171 { "r9", 9 },
172 { "r10", 10 },
173 { "r11", 11 },
174 { "r12", 12 },
175 { "r13", 13 },
176 { "r14", 14 },
177 { "r15", 15 },
178 /* Synonyms (argument and variable registers). */
179 { "a1", 0 },
180 { "a2", 1 },
181 { "a3", 2 },
182 { "a4", 3 },
183 { "v1", 4 },
184 { "v2", 5 },
185 { "v3", 6 },
186 { "v4", 7 },
187 { "v5", 8 },
188 { "v6", 9 },
189 { "v7", 10 },
190 { "v8", 11 },
191 /* Other platform-specific names for r9. */
192 { "sb", 9 },
193 { "tr", 9 },
194 /* Special names. */
195 { "ip", 12 },
196 { "lr", 14 },
197 /* Names used by GCC (not listed in the ARM EABI). */
198 { "sl", 10 },
199 /* A special name from the older ATPCS. */
200 { "wr", 7 },
201 };
202
203 static const char *const arm_register_names[] =
204 {"r0", "r1", "r2", "r3", /* 0 1 2 3 */
205 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
206 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
207 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
208 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
209 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
210 "fps", "cpsr" }; /* 24 25 */
211
212 /* Holds the current set of options to be passed to the disassembler. */
213 static char *arm_disassembler_options;
214
215 /* Valid register name styles. */
216 static const char **valid_disassembly_styles;
217
218 /* Disassembly style to use. Default to "std" register names. */
219 static const char *disassembly_style;
220
221 /* This is used to keep the bfd arch_info in sync with the disassembly
222 style. */
223 static void set_disassembly_style_sfunc (const char *, int,
224 struct cmd_list_element *);
225 static void show_disassembly_style_sfunc (struct ui_file *, int,
226 struct cmd_list_element *,
227 const char *);
228
229 static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch,
230 readable_regcache *regcache,
231 int regnum, gdb_byte *buf);
232 static void arm_neon_quad_write (struct gdbarch *gdbarch,
233 struct regcache *regcache,
234 int regnum, const gdb_byte *buf);
235
236 static CORE_ADDR
237 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
238
239
240 /* get_next_pcs operations. */
241 static struct arm_get_next_pcs_ops arm_get_next_pcs_ops = {
242 arm_get_next_pcs_read_memory_unsigned_integer,
243 arm_get_next_pcs_syscall_next_pc,
244 arm_get_next_pcs_addr_bits_remove,
245 arm_get_next_pcs_is_thumb,
246 NULL,
247 };
248
249 struct arm_prologue_cache
250 {
251 /* The stack pointer at the time this frame was created; i.e. the
252 caller's stack pointer when this function was called. It is used
253 to identify this frame. */
254 CORE_ADDR prev_sp;
255
256 /* The frame base for this frame is just prev_sp - frame size.
257 FRAMESIZE is the distance from the frame pointer to the
258 initial stack pointer. */
259
260 int framesize;
261
262 /* The register used to hold the frame pointer for this frame. */
263 int framereg;
264
265 /* Saved register offsets. */
266 struct trad_frame_saved_reg *saved_regs;
267 };
268
269 static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
270 CORE_ADDR prologue_start,
271 CORE_ADDR prologue_end,
272 struct arm_prologue_cache *cache);
273
274 /* Architecture version for displaced stepping. This effects the behaviour of
275 certain instructions, and really should not be hard-wired. */
276
277 #define DISPLACED_STEPPING_ARCH_VERSION 5
278
279 /* Set to true if the 32-bit mode is in use. */
280
281 int arm_apcs_32 = 1;
282
283 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode. */
284
285 int
286 arm_psr_thumb_bit (struct gdbarch *gdbarch)
287 {
288 if (gdbarch_tdep (gdbarch)->is_m)
289 return XPSR_T;
290 else
291 return CPSR_T;
292 }
293
294 /* Determine if the processor is currently executing in Thumb mode. */
295
296 int
297 arm_is_thumb (struct regcache *regcache)
298 {
299 ULONGEST cpsr;
300 ULONGEST t_bit = arm_psr_thumb_bit (regcache->arch ());
301
302 cpsr = regcache_raw_get_unsigned (regcache, ARM_PS_REGNUM);
303
304 return (cpsr & t_bit) != 0;
305 }
306
307 /* Determine if FRAME is executing in Thumb mode. */
308
309 int
310 arm_frame_is_thumb (struct frame_info *frame)
311 {
312 CORE_ADDR cpsr;
313 ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
314
315 /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
316 directly (from a signal frame or dummy frame) or by interpreting
317 the saved LR (from a prologue or DWARF frame). So consult it and
318 trust the unwinders. */
319 cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
320
321 return (cpsr & t_bit) != 0;
322 }
323
324 /* Callback for VEC_lower_bound. */
325
326 static inline int
327 arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
328 const struct arm_mapping_symbol *rhs)
329 {
330 return lhs->value < rhs->value;
331 }
332
333 /* Search for the mapping symbol covering MEMADDR. If one is found,
334 return its type. Otherwise, return 0. If START is non-NULL,
335 set *START to the location of the mapping symbol. */
336
337 static char
338 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
339 {
340 struct obj_section *sec;
341
342 /* If there are mapping symbols, consult them. */
343 sec = find_pc_section (memaddr);
344 if (sec != NULL)
345 {
346 struct arm_per_objfile *data;
347 VEC(arm_mapping_symbol_s) *map;
348 struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
349 0 };
350 unsigned int idx;
351
352 data = (struct arm_per_objfile *) objfile_data (sec->objfile,
353 arm_objfile_data_key);
354 if (data != NULL)
355 {
356 map = data->section_maps[sec->the_bfd_section->index];
357 if (!VEC_empty (arm_mapping_symbol_s, map))
358 {
359 struct arm_mapping_symbol *map_sym;
360
361 idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
362 arm_compare_mapping_symbols);
363
364 /* VEC_lower_bound finds the earliest ordered insertion
365 point. If the following symbol starts at this exact
366 address, we use that; otherwise, the preceding
367 mapping symbol covers this address. */
368 if (idx < VEC_length (arm_mapping_symbol_s, map))
369 {
370 map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
371 if (map_sym->value == map_key.value)
372 {
373 if (start)
374 *start = map_sym->value + obj_section_addr (sec);
375 return map_sym->type;
376 }
377 }
378
379 if (idx > 0)
380 {
381 map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
382 if (start)
383 *start = map_sym->value + obj_section_addr (sec);
384 return map_sym->type;
385 }
386 }
387 }
388 }
389
390 return 0;
391 }
392
393 /* Determine if the program counter specified in MEMADDR is in a Thumb
394 function. This function should be called for addresses unrelated to
395 any executing frame; otherwise, prefer arm_frame_is_thumb. */
396
397 int
398 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
399 {
400 struct bound_minimal_symbol sym;
401 char type;
402 arm_displaced_step_closure *dsc
403 = ((arm_displaced_step_closure * )
404 get_displaced_step_closure_by_addr (memaddr));
405
406 /* If checking the mode of displaced instruction in copy area, the mode
407 should be determined by instruction on the original address. */
408 if (dsc)
409 {
410 if (debug_displaced)
411 fprintf_unfiltered (gdb_stdlog,
412 "displaced: check mode of %.8lx instead of %.8lx\n",
413 (unsigned long) dsc->insn_addr,
414 (unsigned long) memaddr);
415 memaddr = dsc->insn_addr;
416 }
417
418 /* If bit 0 of the address is set, assume this is a Thumb address. */
419 if (IS_THUMB_ADDR (memaddr))
420 return 1;
421
422 /* If the user wants to override the symbol table, let him. */
423 if (strcmp (arm_force_mode_string, "arm") == 0)
424 return 0;
425 if (strcmp (arm_force_mode_string, "thumb") == 0)
426 return 1;
427
428 /* ARM v6-M and v7-M are always in Thumb mode. */
429 if (gdbarch_tdep (gdbarch)->is_m)
430 return 1;
431
432 /* If there are mapping symbols, consult them. */
433 type = arm_find_mapping_symbol (memaddr, NULL);
434 if (type)
435 return type == 't';
436
437 /* Thumb functions have a "special" bit set in minimal symbols. */
438 sym = lookup_minimal_symbol_by_pc (memaddr);
439 if (sym.minsym)
440 return (MSYMBOL_IS_SPECIAL (sym.minsym));
441
442 /* If the user wants to override the fallback mode, let them. */
443 if (strcmp (arm_fallback_mode_string, "arm") == 0)
444 return 0;
445 if (strcmp (arm_fallback_mode_string, "thumb") == 0)
446 return 1;
447
448 /* If we couldn't find any symbol, but we're talking to a running
449 target, then trust the current value of $cpsr. This lets
450 "display/i $pc" always show the correct mode (though if there is
451 a symbol table we will not reach here, so it still may not be
452 displayed in the mode it will be executed). */
453 if (target_has_registers)
454 return arm_frame_is_thumb (get_current_frame ());
455
456 /* Otherwise we're out of luck; we assume ARM. */
457 return 0;
458 }
459
460 /* Determine if the address specified equals any of these magic return
461 values, called EXC_RETURN, defined by the ARM v6-M and v7-M
462 architectures.
463
464 From ARMv6-M Reference Manual B1.5.8
465 Table B1-5 Exception return behavior
466
467 EXC_RETURN Return To Return Stack
468 0xFFFFFFF1 Handler mode Main
469 0xFFFFFFF9 Thread mode Main
470 0xFFFFFFFD Thread mode Process
471
472 From ARMv7-M Reference Manual B1.5.8
473 Table B1-8 EXC_RETURN definition of exception return behavior, no FP
474
475 EXC_RETURN Return To Return Stack
476 0xFFFFFFF1 Handler mode Main
477 0xFFFFFFF9 Thread mode Main
478 0xFFFFFFFD Thread mode Process
479
480 Table B1-9 EXC_RETURN definition of exception return behavior, with
481 FP
482
483 EXC_RETURN Return To Return Stack Frame Type
484 0xFFFFFFE1 Handler mode Main Extended
485 0xFFFFFFE9 Thread mode Main Extended
486 0xFFFFFFED Thread mode Process Extended
487 0xFFFFFFF1 Handler mode Main Basic
488 0xFFFFFFF9 Thread mode Main Basic
489 0xFFFFFFFD Thread mode Process Basic
490
491 For more details see "B1.5.8 Exception return behavior"
492 in both ARMv6-M and ARMv7-M Architecture Reference Manuals. */
493
494 static int
495 arm_m_addr_is_magic (CORE_ADDR addr)
496 {
497 switch (addr)
498 {
499 /* Values from Tables in B1.5.8 the EXC_RETURN definitions of
500 the exception return behavior. */
501 case 0xffffffe1:
502 case 0xffffffe9:
503 case 0xffffffed:
504 case 0xfffffff1:
505 case 0xfffffff9:
506 case 0xfffffffd:
507 /* Address is magic. */
508 return 1;
509
510 default:
511 /* Address is not magic. */
512 return 0;
513 }
514 }
515
516 /* Remove useless bits from addresses in a running program. */
517 static CORE_ADDR
518 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
519 {
520 /* On M-profile devices, do not strip the low bit from EXC_RETURN
521 (the magic exception return address). */
522 if (gdbarch_tdep (gdbarch)->is_m
523 && arm_m_addr_is_magic (val))
524 return val;
525
526 if (arm_apcs_32)
527 return UNMAKE_THUMB_ADDR (val);
528 else
529 return (val & 0x03fffffc);
530 }
531
532 /* Return 1 if PC is the start of a compiler helper function which
533 can be safely ignored during prologue skipping. IS_THUMB is true
534 if the function is known to be a Thumb function due to the way it
535 is being called. */
536 static int
537 skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
538 {
539 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
540 struct bound_minimal_symbol msym;
541
542 msym = lookup_minimal_symbol_by_pc (pc);
543 if (msym.minsym != NULL
544 && BMSYMBOL_VALUE_ADDRESS (msym) == pc
545 && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL)
546 {
547 const char *name = MSYMBOL_LINKAGE_NAME (msym.minsym);
548
549 /* The GNU linker's Thumb call stub to foo is named
550 __foo_from_thumb. */
551 if (strstr (name, "_from_thumb") != NULL)
552 name += 2;
553
554 /* On soft-float targets, __truncdfsf2 is called to convert promoted
555 arguments to their argument types in non-prototyped
556 functions. */
557 if (startswith (name, "__truncdfsf2"))
558 return 1;
559 if (startswith (name, "__aeabi_d2f"))
560 return 1;
561
562 /* Internal functions related to thread-local storage. */
563 if (startswith (name, "__tls_get_addr"))
564 return 1;
565 if (startswith (name, "__aeabi_read_tp"))
566 return 1;
567 }
568 else
569 {
570 /* If we run against a stripped glibc, we may be unable to identify
571 special functions by name. Check for one important case,
572 __aeabi_read_tp, by comparing the *code* against the default
573 implementation (this is hand-written ARM assembler in glibc). */
574
575 if (!is_thumb
576 && read_code_unsigned_integer (pc, 4, byte_order_for_code)
577 == 0xe3e00a0f /* mov r0, #0xffff0fff */
578 && read_code_unsigned_integer (pc + 4, 4, byte_order_for_code)
579 == 0xe240f01f) /* sub pc, r0, #31 */
580 return 1;
581 }
582
583 return 0;
584 }
585
586 /* Extract the immediate from instruction movw/movt of encoding T. INSN1 is
587 the first 16-bit of instruction, and INSN2 is the second 16-bit of
588 instruction. */
589 #define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2) \
590 ((bits ((insn1), 0, 3) << 12) \
591 | (bits ((insn1), 10, 10) << 11) \
592 | (bits ((insn2), 12, 14) << 8) \
593 | bits ((insn2), 0, 7))
594
595 /* Extract the immediate from instruction movw/movt of encoding A. INSN is
596 the 32-bit instruction. */
597 #define EXTRACT_MOVW_MOVT_IMM_A(insn) \
598 ((bits ((insn), 16, 19) << 12) \
599 | bits ((insn), 0, 11))
600
601 /* Decode immediate value; implements ThumbExpandImmediate pseudo-op. */
602
603 static unsigned int
604 thumb_expand_immediate (unsigned int imm)
605 {
606 unsigned int count = imm >> 7;
607
608 if (count < 8)
609 switch (count / 2)
610 {
611 case 0:
612 return imm & 0xff;
613 case 1:
614 return (imm & 0xff) | ((imm & 0xff) << 16);
615 case 2:
616 return ((imm & 0xff) << 8) | ((imm & 0xff) << 24);
617 case 3:
618 return (imm & 0xff) | ((imm & 0xff) << 8)
619 | ((imm & 0xff) << 16) | ((imm & 0xff) << 24);
620 }
621
622 return (0x80 | (imm & 0x7f)) << (32 - count);
623 }
624
625 /* Return 1 if the 16-bit Thumb instruction INSN restores SP in
626 epilogue, 0 otherwise. */
627
628 static int
629 thumb_instruction_restores_sp (unsigned short insn)
630 {
631 return (insn == 0x46bd /* mov sp, r7 */
632 || (insn & 0xff80) == 0xb000 /* add sp, imm */
633 || (insn & 0xfe00) == 0xbc00); /* pop <registers> */
634 }
635
636 /* Analyze a Thumb prologue, looking for a recognizable stack frame
637 and frame pointer. Scan until we encounter a store that could
638 clobber the stack frame unexpectedly, or an unknown instruction.
639 Return the last address which is definitely safe to skip for an
640 initial breakpoint. */
641
642 static CORE_ADDR
643 thumb_analyze_prologue (struct gdbarch *gdbarch,
644 CORE_ADDR start, CORE_ADDR limit,
645 struct arm_prologue_cache *cache)
646 {
647 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
648 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
649 int i;
650 pv_t regs[16];
651 CORE_ADDR offset;
652 CORE_ADDR unrecognized_pc = 0;
653
654 for (i = 0; i < 16; i++)
655 regs[i] = pv_register (i, 0);
656 pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
657
658 while (start < limit)
659 {
660 unsigned short insn;
661
662 insn = read_code_unsigned_integer (start, 2, byte_order_for_code);
663
664 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
665 {
666 int regno;
667 int mask;
668
669 if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
670 break;
671
672 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
673 whether to save LR (R14). */
674 mask = (insn & 0xff) | ((insn & 0x100) << 6);
675
676 /* Calculate offsets of saved R0-R7 and LR. */
677 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
678 if (mask & (1 << regno))
679 {
680 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
681 -4);
682 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
683 }
684 }
685 else if ((insn & 0xff80) == 0xb080) /* sub sp, #imm */
686 {
687 offset = (insn & 0x7f) << 2; /* get scaled offset */
688 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
689 -offset);
690 }
691 else if (thumb_instruction_restores_sp (insn))
692 {
693 /* Don't scan past the epilogue. */
694 break;
695 }
696 else if ((insn & 0xf800) == 0xa800) /* add Rd, sp, #imm */
697 regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
698 (insn & 0xff) << 2);
699 else if ((insn & 0xfe00) == 0x1c00 /* add Rd, Rn, #imm */
700 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
701 regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
702 bits (insn, 6, 8));
703 else if ((insn & 0xf800) == 0x3000 /* add Rd, #imm */
704 && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
705 regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
706 bits (insn, 0, 7));
707 else if ((insn & 0xfe00) == 0x1800 /* add Rd, Rn, Rm */
708 && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
709 && pv_is_constant (regs[bits (insn, 3, 5)]))
710 regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
711 regs[bits (insn, 6, 8)]);
712 else if ((insn & 0xff00) == 0x4400 /* add Rd, Rm */
713 && pv_is_constant (regs[bits (insn, 3, 6)]))
714 {
715 int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
716 int rm = bits (insn, 3, 6);
717 regs[rd] = pv_add (regs[rd], regs[rm]);
718 }
719 else if ((insn & 0xff00) == 0x4600) /* mov hi, lo or mov lo, hi */
720 {
721 int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
722 int src_reg = (insn & 0x78) >> 3;
723 regs[dst_reg] = regs[src_reg];
724 }
725 else if ((insn & 0xf800) == 0x9000) /* str rd, [sp, #off] */
726 {
727 /* Handle stores to the stack. Normally pushes are used,
728 but with GCC -mtpcs-frame, there may be other stores
729 in the prologue to create the frame. */
730 int regno = (insn >> 8) & 0x7;
731 pv_t addr;
732
733 offset = (insn & 0xff) << 2;
734 addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
735
736 if (stack.store_would_trash (addr))
737 break;
738
739 stack.store (addr, 4, regs[regno]);
740 }
741 else if ((insn & 0xf800) == 0x6000) /* str rd, [rn, #off] */
742 {
743 int rd = bits (insn, 0, 2);
744 int rn = bits (insn, 3, 5);
745 pv_t addr;
746
747 offset = bits (insn, 6, 10) << 2;
748 addr = pv_add_constant (regs[rn], offset);
749
750 if (stack.store_would_trash (addr))
751 break;
752
753 stack.store (addr, 4, regs[rd]);
754 }
755 else if (((insn & 0xf800) == 0x7000 /* strb Rd, [Rn, #off] */
756 || (insn & 0xf800) == 0x8000) /* strh Rd, [Rn, #off] */
757 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
758 /* Ignore stores of argument registers to the stack. */
759 ;
760 else if ((insn & 0xf800) == 0xc800 /* ldmia Rn!, { registers } */
761 && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
762 /* Ignore block loads from the stack, potentially copying
763 parameters from memory. */
764 ;
765 else if ((insn & 0xf800) == 0x9800 /* ldr Rd, [Rn, #immed] */
766 || ((insn & 0xf800) == 0x6800 /* ldr Rd, [sp, #immed] */
767 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
768 /* Similarly ignore single loads from the stack. */
769 ;
770 else if ((insn & 0xffc0) == 0x0000 /* lsls Rd, Rm, #0 */
771 || (insn & 0xffc0) == 0x1c00) /* add Rd, Rn, #0 */
772 /* Skip register copies, i.e. saves to another register
773 instead of the stack. */
774 ;
775 else if ((insn & 0xf800) == 0x2000) /* movs Rd, #imm */
776 /* Recognize constant loads; even with small stacks these are necessary
777 on Thumb. */
778 regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
779 else if ((insn & 0xf800) == 0x4800) /* ldr Rd, [pc, #imm] */
780 {
781 /* Constant pool loads, for the same reason. */
782 unsigned int constant;
783 CORE_ADDR loc;
784
785 loc = start + 4 + bits (insn, 0, 7) * 4;
786 constant = read_memory_unsigned_integer (loc, 4, byte_order);
787 regs[bits (insn, 8, 10)] = pv_constant (constant);
788 }
789 else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instructions. */
790 {
791 unsigned short inst2;
792
793 inst2 = read_code_unsigned_integer (start + 2, 2,
794 byte_order_for_code);
795
796 if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
797 {
798 /* BL, BLX. Allow some special function calls when
799 skipping the prologue; GCC generates these before
800 storing arguments to the stack. */
801 CORE_ADDR nextpc;
802 int j1, j2, imm1, imm2;
803
804 imm1 = sbits (insn, 0, 10);
805 imm2 = bits (inst2, 0, 10);
806 j1 = bit (inst2, 13);
807 j2 = bit (inst2, 11);
808
809 offset = ((imm1 << 12) + (imm2 << 1));
810 offset ^= ((!j2) << 22) | ((!j1) << 23);
811
812 nextpc = start + 4 + offset;
813 /* For BLX make sure to clear the low bits. */
814 if (bit (inst2, 12) == 0)
815 nextpc = nextpc & 0xfffffffc;
816
817 if (!skip_prologue_function (gdbarch, nextpc,
818 bit (inst2, 12) != 0))
819 break;
820 }
821
822 else if ((insn & 0xffd0) == 0xe900 /* stmdb Rn{!},
823 { registers } */
824 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
825 {
826 pv_t addr = regs[bits (insn, 0, 3)];
827 int regno;
828
829 if (stack.store_would_trash (addr))
830 break;
831
832 /* Calculate offsets of saved registers. */
833 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
834 if (inst2 & (1 << regno))
835 {
836 addr = pv_add_constant (addr, -4);
837 stack.store (addr, 4, regs[regno]);
838 }
839
840 if (insn & 0x0020)
841 regs[bits (insn, 0, 3)] = addr;
842 }
843
844 else if ((insn & 0xff50) == 0xe940 /* strd Rt, Rt2,
845 [Rn, #+/-imm]{!} */
846 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
847 {
848 int regno1 = bits (inst2, 12, 15);
849 int regno2 = bits (inst2, 8, 11);
850 pv_t addr = regs[bits (insn, 0, 3)];
851
852 offset = inst2 & 0xff;
853 if (insn & 0x0080)
854 addr = pv_add_constant (addr, offset);
855 else
856 addr = pv_add_constant (addr, -offset);
857
858 if (stack.store_would_trash (addr))
859 break;
860
861 stack.store (addr, 4, regs[regno1]);
862 stack.store (pv_add_constant (addr, 4),
863 4, regs[regno2]);
864
865 if (insn & 0x0020)
866 regs[bits (insn, 0, 3)] = addr;
867 }
868
869 else if ((insn & 0xfff0) == 0xf8c0 /* str Rt,[Rn,+/-#imm]{!} */
870 && (inst2 & 0x0c00) == 0x0c00
871 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
872 {
873 int regno = bits (inst2, 12, 15);
874 pv_t addr = regs[bits (insn, 0, 3)];
875
876 offset = inst2 & 0xff;
877 if (inst2 & 0x0200)
878 addr = pv_add_constant (addr, offset);
879 else
880 addr = pv_add_constant (addr, -offset);
881
882 if (stack.store_would_trash (addr))
883 break;
884
885 stack.store (addr, 4, regs[regno]);
886
887 if (inst2 & 0x0100)
888 regs[bits (insn, 0, 3)] = addr;
889 }
890
891 else if ((insn & 0xfff0) == 0xf8c0 /* str.w Rt,[Rn,#imm] */
892 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
893 {
894 int regno = bits (inst2, 12, 15);
895 pv_t addr;
896
897 offset = inst2 & 0xfff;
898 addr = pv_add_constant (regs[bits (insn, 0, 3)], offset);
899
900 if (stack.store_would_trash (addr))
901 break;
902
903 stack.store (addr, 4, regs[regno]);
904 }
905
906 else if ((insn & 0xffd0) == 0xf880 /* str{bh}.w Rt,[Rn,#imm] */
907 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
908 /* Ignore stores of argument registers to the stack. */
909 ;
910
911 else if ((insn & 0xffd0) == 0xf800 /* str{bh} Rt,[Rn,#+/-imm] */
912 && (inst2 & 0x0d00) == 0x0c00
913 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
914 /* Ignore stores of argument registers to the stack. */
915 ;
916
917 else if ((insn & 0xffd0) == 0xe890 /* ldmia Rn[!],
918 { registers } */
919 && (inst2 & 0x8000) == 0x0000
920 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
921 /* Ignore block loads from the stack, potentially copying
922 parameters from memory. */
923 ;
924
925 else if ((insn & 0xffb0) == 0xe950 /* ldrd Rt, Rt2,
926 [Rn, #+/-imm] */
927 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
928 /* Similarly ignore dual loads from the stack. */
929 ;
930
931 else if ((insn & 0xfff0) == 0xf850 /* ldr Rt,[Rn,#+/-imm] */
932 && (inst2 & 0x0d00) == 0x0c00
933 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
934 /* Similarly ignore single loads from the stack. */
935 ;
936
937 else if ((insn & 0xfff0) == 0xf8d0 /* ldr.w Rt,[Rn,#imm] */
938 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
939 /* Similarly ignore single loads from the stack. */
940 ;
941
942 else if ((insn & 0xfbf0) == 0xf100 /* add.w Rd, Rn, #imm */
943 && (inst2 & 0x8000) == 0x0000)
944 {
945 unsigned int imm = ((bits (insn, 10, 10) << 11)
946 | (bits (inst2, 12, 14) << 8)
947 | bits (inst2, 0, 7));
948
949 regs[bits (inst2, 8, 11)]
950 = pv_add_constant (regs[bits (insn, 0, 3)],
951 thumb_expand_immediate (imm));
952 }
953
954 else if ((insn & 0xfbf0) == 0xf200 /* addw Rd, Rn, #imm */
955 && (inst2 & 0x8000) == 0x0000)
956 {
957 unsigned int imm = ((bits (insn, 10, 10) << 11)
958 | (bits (inst2, 12, 14) << 8)
959 | bits (inst2, 0, 7));
960
961 regs[bits (inst2, 8, 11)]
962 = pv_add_constant (regs[bits (insn, 0, 3)], imm);
963 }
964
965 else if ((insn & 0xfbf0) == 0xf1a0 /* sub.w Rd, Rn, #imm */
966 && (inst2 & 0x8000) == 0x0000)
967 {
968 unsigned int imm = ((bits (insn, 10, 10) << 11)
969 | (bits (inst2, 12, 14) << 8)
970 | bits (inst2, 0, 7));
971
972 regs[bits (inst2, 8, 11)]
973 = pv_add_constant (regs[bits (insn, 0, 3)],
974 - (CORE_ADDR) thumb_expand_immediate (imm));
975 }
976
977 else if ((insn & 0xfbf0) == 0xf2a0 /* subw Rd, Rn, #imm */
978 && (inst2 & 0x8000) == 0x0000)
979 {
980 unsigned int imm = ((bits (insn, 10, 10) << 11)
981 | (bits (inst2, 12, 14) << 8)
982 | bits (inst2, 0, 7));
983
984 regs[bits (inst2, 8, 11)]
985 = pv_add_constant (regs[bits (insn, 0, 3)], - (CORE_ADDR) imm);
986 }
987
988 else if ((insn & 0xfbff) == 0xf04f) /* mov.w Rd, #const */
989 {
990 unsigned int imm = ((bits (insn, 10, 10) << 11)
991 | (bits (inst2, 12, 14) << 8)
992 | bits (inst2, 0, 7));
993
994 regs[bits (inst2, 8, 11)]
995 = pv_constant (thumb_expand_immediate (imm));
996 }
997
998 else if ((insn & 0xfbf0) == 0xf240) /* movw Rd, #const */
999 {
1000 unsigned int imm
1001 = EXTRACT_MOVW_MOVT_IMM_T (insn, inst2);
1002
1003 regs[bits (inst2, 8, 11)] = pv_constant (imm);
1004 }
1005
1006 else if (insn == 0xea5f /* mov.w Rd,Rm */
1007 && (inst2 & 0xf0f0) == 0)
1008 {
1009 int dst_reg = (inst2 & 0x0f00) >> 8;
1010 int src_reg = inst2 & 0xf;
1011 regs[dst_reg] = regs[src_reg];
1012 }
1013
1014 else if ((insn & 0xff7f) == 0xf85f) /* ldr.w Rt,<label> */
1015 {
1016 /* Constant pool loads. */
1017 unsigned int constant;
1018 CORE_ADDR loc;
1019
1020 offset = bits (inst2, 0, 11);
1021 if (insn & 0x0080)
1022 loc = start + 4 + offset;
1023 else
1024 loc = start + 4 - offset;
1025
1026 constant = read_memory_unsigned_integer (loc, 4, byte_order);
1027 regs[bits (inst2, 12, 15)] = pv_constant (constant);
1028 }
1029
1030 else if ((insn & 0xff7f) == 0xe95f) /* ldrd Rt,Rt2,<label> */
1031 {
1032 /* Constant pool loads. */
1033 unsigned int constant;
1034 CORE_ADDR loc;
1035
1036 offset = bits (inst2, 0, 7) << 2;
1037 if (insn & 0x0080)
1038 loc = start + 4 + offset;
1039 else
1040 loc = start + 4 - offset;
1041
1042 constant = read_memory_unsigned_integer (loc, 4, byte_order);
1043 regs[bits (inst2, 12, 15)] = pv_constant (constant);
1044
1045 constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
1046 regs[bits (inst2, 8, 11)] = pv_constant (constant);
1047 }
1048
1049 else if (thumb2_instruction_changes_pc (insn, inst2))
1050 {
1051 /* Don't scan past anything that might change control flow. */
1052 break;
1053 }
1054 else
1055 {
1056 /* The optimizer might shove anything into the prologue,
1057 so we just skip what we don't recognize. */
1058 unrecognized_pc = start;
1059 }
1060
1061 start += 2;
1062 }
1063 else if (thumb_instruction_changes_pc (insn))
1064 {
1065 /* Don't scan past anything that might change control flow. */
1066 break;
1067 }
1068 else
1069 {
1070 /* The optimizer might shove anything into the prologue,
1071 so we just skip what we don't recognize. */
1072 unrecognized_pc = start;
1073 }
1074
1075 start += 2;
1076 }
1077
1078 if (arm_debug)
1079 fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1080 paddress (gdbarch, start));
1081
1082 if (unrecognized_pc == 0)
1083 unrecognized_pc = start;
1084
1085 if (cache == NULL)
1086 return unrecognized_pc;
1087
1088 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1089 {
1090 /* Frame pointer is fp. Frame size is constant. */
1091 cache->framereg = ARM_FP_REGNUM;
1092 cache->framesize = -regs[ARM_FP_REGNUM].k;
1093 }
1094 else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
1095 {
1096 /* Frame pointer is r7. Frame size is constant. */
1097 cache->framereg = THUMB_FP_REGNUM;
1098 cache->framesize = -regs[THUMB_FP_REGNUM].k;
1099 }
1100 else
1101 {
1102 /* Try the stack pointer... this is a bit desperate. */
1103 cache->framereg = ARM_SP_REGNUM;
1104 cache->framesize = -regs[ARM_SP_REGNUM].k;
1105 }
1106
1107 for (i = 0; i < 16; i++)
1108 if (stack.find_reg (gdbarch, i, &offset))
1109 cache->saved_regs[i].addr = offset;
1110
1111 return unrecognized_pc;
1112 }
1113
1114
1115 /* Try to analyze the instructions starting from PC, which load symbol
1116 __stack_chk_guard. Return the address of instruction after loading this
1117 symbol, set the dest register number to *BASEREG, and set the size of
1118 instructions for loading symbol in OFFSET. Return 0 if instructions are
1119 not recognized. */
1120
1121 static CORE_ADDR
1122 arm_analyze_load_stack_chk_guard(CORE_ADDR pc, struct gdbarch *gdbarch,
1123 unsigned int *destreg, int *offset)
1124 {
1125 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1126 int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1127 unsigned int low, high, address;
1128
1129 address = 0;
1130 if (is_thumb)
1131 {
1132 unsigned short insn1
1133 = read_code_unsigned_integer (pc, 2, byte_order_for_code);
1134
1135 if ((insn1 & 0xf800) == 0x4800) /* ldr Rd, #immed */
1136 {
1137 *destreg = bits (insn1, 8, 10);
1138 *offset = 2;
1139 address = (pc & 0xfffffffc) + 4 + (bits (insn1, 0, 7) << 2);
1140 address = read_memory_unsigned_integer (address, 4,
1141 byte_order_for_code);
1142 }
1143 else if ((insn1 & 0xfbf0) == 0xf240) /* movw Rd, #const */
1144 {
1145 unsigned short insn2
1146 = read_code_unsigned_integer (pc + 2, 2, byte_order_for_code);
1147
1148 low = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1149
1150 insn1
1151 = read_code_unsigned_integer (pc + 4, 2, byte_order_for_code);
1152 insn2
1153 = read_code_unsigned_integer (pc + 6, 2, byte_order_for_code);
1154
1155 /* movt Rd, #const */
1156 if ((insn1 & 0xfbc0) == 0xf2c0)
1157 {
1158 high = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1159 *destreg = bits (insn2, 8, 11);
1160 *offset = 8;
1161 address = (high << 16 | low);
1162 }
1163 }
1164 }
1165 else
1166 {
1167 unsigned int insn
1168 = read_code_unsigned_integer (pc, 4, byte_order_for_code);
1169
1170 if ((insn & 0x0e5f0000) == 0x041f0000) /* ldr Rd, [PC, #immed] */
1171 {
1172 address = bits (insn, 0, 11) + pc + 8;
1173 address = read_memory_unsigned_integer (address, 4,
1174 byte_order_for_code);
1175
1176 *destreg = bits (insn, 12, 15);
1177 *offset = 4;
1178 }
1179 else if ((insn & 0x0ff00000) == 0x03000000) /* movw Rd, #const */
1180 {
1181 low = EXTRACT_MOVW_MOVT_IMM_A (insn);
1182
1183 insn
1184 = read_code_unsigned_integer (pc + 4, 4, byte_order_for_code);
1185
1186 if ((insn & 0x0ff00000) == 0x03400000) /* movt Rd, #const */
1187 {
1188 high = EXTRACT_MOVW_MOVT_IMM_A (insn);
1189 *destreg = bits (insn, 12, 15);
1190 *offset = 8;
1191 address = (high << 16 | low);
1192 }
1193 }
1194 }
1195
1196 return address;
1197 }
1198
1199 /* Try to skip a sequence of instructions used for stack protector. If PC
1200 points to the first instruction of this sequence, return the address of
1201 first instruction after this sequence, otherwise, return original PC.
1202
1203 On arm, this sequence of instructions is composed of mainly three steps,
1204 Step 1: load symbol __stack_chk_guard,
1205 Step 2: load from address of __stack_chk_guard,
1206 Step 3: store it to somewhere else.
1207
1208 Usually, instructions on step 2 and step 3 are the same on various ARM
1209 architectures. On step 2, it is one instruction 'ldr Rx, [Rn, #0]', and
1210 on step 3, it is also one instruction 'str Rx, [r7, #immd]'. However,
1211 instructions in step 1 vary from different ARM architectures. On ARMv7,
1212 they are,
1213
1214 movw Rn, #:lower16:__stack_chk_guard
1215 movt Rn, #:upper16:__stack_chk_guard
1216
1217 On ARMv5t, it is,
1218
1219 ldr Rn, .Label
1220 ....
1221 .Lable:
1222 .word __stack_chk_guard
1223
1224 Since ldr/str is a very popular instruction, we can't use them as
1225 'fingerprint' or 'signature' of stack protector sequence. Here we choose
1226 sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1227 stripped, as the 'fingerprint' of a stack protector cdoe sequence. */
1228
1229 static CORE_ADDR
1230 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1231 {
1232 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1233 unsigned int basereg;
1234 struct bound_minimal_symbol stack_chk_guard;
1235 int offset;
1236 int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1237 CORE_ADDR addr;
1238
1239 /* Try to parse the instructions in Step 1. */
1240 addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1241 &basereg, &offset);
1242 if (!addr)
1243 return pc;
1244
1245 stack_chk_guard = lookup_minimal_symbol_by_pc (addr);
1246 /* ADDR must correspond to a symbol whose name is __stack_chk_guard.
1247 Otherwise, this sequence cannot be for stack protector. */
1248 if (stack_chk_guard.minsym == NULL
1249 || !startswith (MSYMBOL_LINKAGE_NAME (stack_chk_guard.minsym), "__stack_chk_guard"))
1250 return pc;
1251
1252 if (is_thumb)
1253 {
1254 unsigned int destreg;
1255 unsigned short insn
1256 = read_code_unsigned_integer (pc + offset, 2, byte_order_for_code);
1257
1258 /* Step 2: ldr Rd, [Rn, #immed], encoding T1. */
1259 if ((insn & 0xf800) != 0x6800)
1260 return pc;
1261 if (bits (insn, 3, 5) != basereg)
1262 return pc;
1263 destreg = bits (insn, 0, 2);
1264
1265 insn = read_code_unsigned_integer (pc + offset + 2, 2,
1266 byte_order_for_code);
1267 /* Step 3: str Rd, [Rn, #immed], encoding T1. */
1268 if ((insn & 0xf800) != 0x6000)
1269 return pc;
1270 if (destreg != bits (insn, 0, 2))
1271 return pc;
1272 }
1273 else
1274 {
1275 unsigned int destreg;
1276 unsigned int insn
1277 = read_code_unsigned_integer (pc + offset, 4, byte_order_for_code);
1278
1279 /* Step 2: ldr Rd, [Rn, #immed], encoding A1. */
1280 if ((insn & 0x0e500000) != 0x04100000)
1281 return pc;
1282 if (bits (insn, 16, 19) != basereg)
1283 return pc;
1284 destreg = bits (insn, 12, 15);
1285 /* Step 3: str Rd, [Rn, #immed], encoding A1. */
1286 insn = read_code_unsigned_integer (pc + offset + 4,
1287 4, byte_order_for_code);
1288 if ((insn & 0x0e500000) != 0x04000000)
1289 return pc;
1290 if (bits (insn, 12, 15) != destreg)
1291 return pc;
1292 }
1293 /* The size of total two instructions ldr/str is 4 on Thumb-2, while 8
1294 on arm. */
1295 if (is_thumb)
1296 return pc + offset + 4;
1297 else
1298 return pc + offset + 8;
1299 }
1300
1301 /* Advance the PC across any function entry prologue instructions to
1302 reach some "real" code.
1303
1304 The APCS (ARM Procedure Call Standard) defines the following
1305 prologue:
1306
1307 mov ip, sp
1308 [stmfd sp!, {a1,a2,a3,a4}]
1309 stmfd sp!, {...,fp,ip,lr,pc}
1310 [stfe f7, [sp, #-12]!]
1311 [stfe f6, [sp, #-12]!]
1312 [stfe f5, [sp, #-12]!]
1313 [stfe f4, [sp, #-12]!]
1314 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn. */
1315
1316 static CORE_ADDR
1317 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1318 {
1319 CORE_ADDR func_addr, limit_pc;
1320
1321 /* See if we can determine the end of the prologue via the symbol table.
1322 If so, then return either PC, or the PC after the prologue, whichever
1323 is greater. */
1324 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1325 {
1326 CORE_ADDR post_prologue_pc
1327 = skip_prologue_using_sal (gdbarch, func_addr);
1328 struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
1329
1330 if (post_prologue_pc)
1331 post_prologue_pc
1332 = arm_skip_stack_protector (post_prologue_pc, gdbarch);
1333
1334
1335 /* GCC always emits a line note before the prologue and another
1336 one after, even if the two are at the same address or on the
1337 same line. Take advantage of this so that we do not need to
1338 know every instruction that might appear in the prologue. We
1339 will have producer information for most binaries; if it is
1340 missing (e.g. for -gstabs), assuming the GNU tools. */
1341 if (post_prologue_pc
1342 && (cust == NULL
1343 || COMPUNIT_PRODUCER (cust) == NULL
1344 || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
1345 || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
1346 return post_prologue_pc;
1347
1348 if (post_prologue_pc != 0)
1349 {
1350 CORE_ADDR analyzed_limit;
1351
1352 /* For non-GCC compilers, make sure the entire line is an
1353 acceptable prologue; GDB will round this function's
1354 return value up to the end of the following line so we
1355 can not skip just part of a line (and we do not want to).
1356
1357 RealView does not treat the prologue specially, but does
1358 associate prologue code with the opening brace; so this
1359 lets us skip the first line if we think it is the opening
1360 brace. */
1361 if (arm_pc_is_thumb (gdbarch, func_addr))
1362 analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
1363 post_prologue_pc, NULL);
1364 else
1365 analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
1366 post_prologue_pc, NULL);
1367
1368 if (analyzed_limit != post_prologue_pc)
1369 return func_addr;
1370
1371 return post_prologue_pc;
1372 }
1373 }
1374
1375 /* Can't determine prologue from the symbol table, need to examine
1376 instructions. */
1377
1378 /* Find an upper limit on the function prologue using the debug
1379 information. If the debug information could not be used to provide
1380 that bound, then use an arbitrary large number as the upper bound. */
1381 /* Like arm_scan_prologue, stop no later than pc + 64. */
1382 limit_pc = skip_prologue_using_sal (gdbarch, pc);
1383 if (limit_pc == 0)
1384 limit_pc = pc + 64; /* Magic. */
1385
1386
1387 /* Check if this is Thumb code. */
1388 if (arm_pc_is_thumb (gdbarch, pc))
1389 return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1390 else
1391 return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1392 }
1393
1394 /* *INDENT-OFF* */
1395 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
1396 This function decodes a Thumb function prologue to determine:
1397 1) the size of the stack frame
1398 2) which registers are saved on it
1399 3) the offsets of saved regs
1400 4) the offset from the stack pointer to the frame pointer
1401
1402 A typical Thumb function prologue would create this stack frame
1403 (offsets relative to FP)
1404 old SP -> 24 stack parameters
1405 20 LR
1406 16 R7
1407 R7 -> 0 local variables (16 bytes)
1408 SP -> -12 additional stack space (12 bytes)
1409 The frame size would thus be 36 bytes, and the frame offset would be
1410 12 bytes. The frame register is R7.
1411
1412 The comments for thumb_skip_prolog() describe the algorithm we use
1413 to detect the end of the prolog. */
1414 /* *INDENT-ON* */
1415
1416 static void
1417 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1418 CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1419 {
1420 CORE_ADDR prologue_start;
1421 CORE_ADDR prologue_end;
1422
1423 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1424 &prologue_end))
1425 {
1426 /* See comment in arm_scan_prologue for an explanation of
1427 this heuristics. */
1428 if (prologue_end > prologue_start + 64)
1429 {
1430 prologue_end = prologue_start + 64;
1431 }
1432 }
1433 else
1434 /* We're in the boondocks: we have no idea where the start of the
1435 function is. */
1436 return;
1437
1438 prologue_end = std::min (prologue_end, prev_pc);
1439
1440 thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1441 }
1442
1443 /* Return 1 if the ARM instruction INSN restores SP in epilogue, 0
1444 otherwise. */
1445
1446 static int
1447 arm_instruction_restores_sp (unsigned int insn)
1448 {
1449 if (bits (insn, 28, 31) != INST_NV)
1450 {
1451 if ((insn & 0x0df0f000) == 0x0080d000
1452 /* ADD SP (register or immediate). */
1453 || (insn & 0x0df0f000) == 0x0040d000
1454 /* SUB SP (register or immediate). */
1455 || (insn & 0x0ffffff0) == 0x01a0d000
1456 /* MOV SP. */
1457 || (insn & 0x0fff0000) == 0x08bd0000
1458 /* POP (LDMIA). */
1459 || (insn & 0x0fff0000) == 0x049d0000)
1460 /* POP of a single register. */
1461 return 1;
1462 }
1463
1464 return 0;
1465 }
1466
1467 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
1468 continuing no further than PROLOGUE_END. If CACHE is non-NULL,
1469 fill it in. Return the first address not recognized as a prologue
1470 instruction.
1471
1472 We recognize all the instructions typically found in ARM prologues,
1473 plus harmless instructions which can be skipped (either for analysis
1474 purposes, or a more restrictive set that can be skipped when finding
1475 the end of the prologue). */
1476
1477 static CORE_ADDR
1478 arm_analyze_prologue (struct gdbarch *gdbarch,
1479 CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1480 struct arm_prologue_cache *cache)
1481 {
1482 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1483 int regno;
1484 CORE_ADDR offset, current_pc;
1485 pv_t regs[ARM_FPS_REGNUM];
1486 CORE_ADDR unrecognized_pc = 0;
1487
1488 /* Search the prologue looking for instructions that set up the
1489 frame pointer, adjust the stack pointer, and save registers.
1490
1491 Be careful, however, and if it doesn't look like a prologue,
1492 don't try to scan it. If, for instance, a frameless function
1493 begins with stmfd sp!, then we will tell ourselves there is
1494 a frame, which will confuse stack traceback, as well as "finish"
1495 and other operations that rely on a knowledge of the stack
1496 traceback. */
1497
1498 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1499 regs[regno] = pv_register (regno, 0);
1500 pv_area stack (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1501
1502 for (current_pc = prologue_start;
1503 current_pc < prologue_end;
1504 current_pc += 4)
1505 {
1506 unsigned int insn
1507 = read_code_unsigned_integer (current_pc, 4, byte_order_for_code);
1508
1509 if (insn == 0xe1a0c00d) /* mov ip, sp */
1510 {
1511 regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
1512 continue;
1513 }
1514 else if ((insn & 0xfff00000) == 0xe2800000 /* add Rd, Rn, #n */
1515 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1516 {
1517 unsigned imm = insn & 0xff; /* immediate value */
1518 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1519 int rd = bits (insn, 12, 15);
1520 imm = (imm >> rot) | (imm << (32 - rot));
1521 regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
1522 continue;
1523 }
1524 else if ((insn & 0xfff00000) == 0xe2400000 /* sub Rd, Rn, #n */
1525 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1526 {
1527 unsigned imm = insn & 0xff; /* immediate value */
1528 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1529 int rd = bits (insn, 12, 15);
1530 imm = (imm >> rot) | (imm << (32 - rot));
1531 regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
1532 continue;
1533 }
1534 else if ((insn & 0xffff0fff) == 0xe52d0004) /* str Rd,
1535 [sp, #-4]! */
1536 {
1537 if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1538 break;
1539 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1540 stack.store (regs[ARM_SP_REGNUM], 4,
1541 regs[bits (insn, 12, 15)]);
1542 continue;
1543 }
1544 else if ((insn & 0xffff0000) == 0xe92d0000)
1545 /* stmfd sp!, {..., fp, ip, lr, pc}
1546 or
1547 stmfd sp!, {a1, a2, a3, a4} */
1548 {
1549 int mask = insn & 0xffff;
1550
1551 if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1552 break;
1553
1554 /* Calculate offsets of saved registers. */
1555 for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
1556 if (mask & (1 << regno))
1557 {
1558 regs[ARM_SP_REGNUM]
1559 = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1560 stack.store (regs[ARM_SP_REGNUM], 4, regs[regno]);
1561 }
1562 }
1563 else if ((insn & 0xffff0000) == 0xe54b0000 /* strb rx,[r11,#-n] */
1564 || (insn & 0xffff00f0) == 0xe14b00b0 /* strh rx,[r11,#-n] */
1565 || (insn & 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
1566 {
1567 /* No need to add this to saved_regs -- it's just an arg reg. */
1568 continue;
1569 }
1570 else if ((insn & 0xffff0000) == 0xe5cd0000 /* strb rx,[sp,#n] */
1571 || (insn & 0xffff00f0) == 0xe1cd00b0 /* strh rx,[sp,#n] */
1572 || (insn & 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
1573 {
1574 /* No need to add this to saved_regs -- it's just an arg reg. */
1575 continue;
1576 }
1577 else if ((insn & 0xfff00000) == 0xe8800000 /* stm Rn,
1578 { registers } */
1579 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1580 {
1581 /* No need to add this to saved_regs -- it's just arg regs. */
1582 continue;
1583 }
1584 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
1585 {
1586 unsigned imm = insn & 0xff; /* immediate value */
1587 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1588 imm = (imm >> rot) | (imm << (32 - rot));
1589 regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
1590 }
1591 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
1592 {
1593 unsigned imm = insn & 0xff; /* immediate value */
1594 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1595 imm = (imm >> rot) | (imm << (32 - rot));
1596 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
1597 }
1598 else if ((insn & 0xffff7fff) == 0xed6d0103 /* stfe f?,
1599 [sp, -#c]! */
1600 && gdbarch_tdep (gdbarch)->have_fpa_registers)
1601 {
1602 if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1603 break;
1604
1605 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1606 regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
1607 stack.store (regs[ARM_SP_REGNUM], 12, regs[regno]);
1608 }
1609 else if ((insn & 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4,
1610 [sp!] */
1611 && gdbarch_tdep (gdbarch)->have_fpa_registers)
1612 {
1613 int n_saved_fp_regs;
1614 unsigned int fp_start_reg, fp_bound_reg;
1615
1616 if (stack.store_would_trash (regs[ARM_SP_REGNUM]))
1617 break;
1618
1619 if ((insn & 0x800) == 0x800) /* N0 is set */
1620 {
1621 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1622 n_saved_fp_regs = 3;
1623 else
1624 n_saved_fp_regs = 1;
1625 }
1626 else
1627 {
1628 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1629 n_saved_fp_regs = 2;
1630 else
1631 n_saved_fp_regs = 4;
1632 }
1633
1634 fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1635 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1636 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1637 {
1638 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1639 stack.store (regs[ARM_SP_REGNUM], 12,
1640 regs[fp_start_reg++]);
1641 }
1642 }
1643 else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1644 {
1645 /* Allow some special function calls when skipping the
1646 prologue; GCC generates these before storing arguments to
1647 the stack. */
1648 CORE_ADDR dest = BranchDest (current_pc, insn);
1649
1650 if (skip_prologue_function (gdbarch, dest, 0))
1651 continue;
1652 else
1653 break;
1654 }
1655 else if ((insn & 0xf0000000) != 0xe0000000)
1656 break; /* Condition not true, exit early. */
1657 else if (arm_instruction_changes_pc (insn))
1658 /* Don't scan past anything that might change control flow. */
1659 break;
1660 else if (arm_instruction_restores_sp (insn))
1661 {
1662 /* Don't scan past the epilogue. */
1663 break;
1664 }
1665 else if ((insn & 0xfe500000) == 0xe8100000 /* ldm */
1666 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1667 /* Ignore block loads from the stack, potentially copying
1668 parameters from memory. */
1669 continue;
1670 else if ((insn & 0xfc500000) == 0xe4100000
1671 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1672 /* Similarly ignore single loads from the stack. */
1673 continue;
1674 else if ((insn & 0xffff0ff0) == 0xe1a00000)
1675 /* MOV Rd, Rm. Skip register copies, i.e. saves to another
1676 register instead of the stack. */
1677 continue;
1678 else
1679 {
1680 /* The optimizer might shove anything into the prologue, if
1681 we build up cache (cache != NULL) from scanning prologue,
1682 we just skip what we don't recognize and scan further to
1683 make cache as complete as possible. However, if we skip
1684 prologue, we'll stop immediately on unrecognized
1685 instruction. */
1686 unrecognized_pc = current_pc;
1687 if (cache != NULL)
1688 continue;
1689 else
1690 break;
1691 }
1692 }
1693
1694 if (unrecognized_pc == 0)
1695 unrecognized_pc = current_pc;
1696
1697 if (cache)
1698 {
1699 int framereg, framesize;
1700
1701 /* The frame size is just the distance from the frame register
1702 to the original stack pointer. */
1703 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1704 {
1705 /* Frame pointer is fp. */
1706 framereg = ARM_FP_REGNUM;
1707 framesize = -regs[ARM_FP_REGNUM].k;
1708 }
1709 else
1710 {
1711 /* Try the stack pointer... this is a bit desperate. */
1712 framereg = ARM_SP_REGNUM;
1713 framesize = -regs[ARM_SP_REGNUM].k;
1714 }
1715
1716 cache->framereg = framereg;
1717 cache->framesize = framesize;
1718
1719 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1720 if (stack.find_reg (gdbarch, regno, &offset))
1721 cache->saved_regs[regno].addr = offset;
1722 }
1723
1724 if (arm_debug)
1725 fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1726 paddress (gdbarch, unrecognized_pc));
1727
1728 return unrecognized_pc;
1729 }
1730
1731 static void
1732 arm_scan_prologue (struct frame_info *this_frame,
1733 struct arm_prologue_cache *cache)
1734 {
1735 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1736 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1737 CORE_ADDR prologue_start, prologue_end;
1738 CORE_ADDR prev_pc = get_frame_pc (this_frame);
1739 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1740
1741 /* Assume there is no frame until proven otherwise. */
1742 cache->framereg = ARM_SP_REGNUM;
1743 cache->framesize = 0;
1744
1745 /* Check for Thumb prologue. */
1746 if (arm_frame_is_thumb (this_frame))
1747 {
1748 thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1749 return;
1750 }
1751
1752 /* Find the function prologue. If we can't find the function in
1753 the symbol table, peek in the stack frame to find the PC. */
1754 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1755 &prologue_end))
1756 {
1757 /* One way to find the end of the prologue (which works well
1758 for unoptimized code) is to do the following:
1759
1760 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1761
1762 if (sal.line == 0)
1763 prologue_end = prev_pc;
1764 else if (sal.end < prologue_end)
1765 prologue_end = sal.end;
1766
1767 This mechanism is very accurate so long as the optimizer
1768 doesn't move any instructions from the function body into the
1769 prologue. If this happens, sal.end will be the last
1770 instruction in the first hunk of prologue code just before
1771 the first instruction that the scheduler has moved from
1772 the body to the prologue.
1773
1774 In order to make sure that we scan all of the prologue
1775 instructions, we use a slightly less accurate mechanism which
1776 may scan more than necessary. To help compensate for this
1777 lack of accuracy, the prologue scanning loop below contains
1778 several clauses which'll cause the loop to terminate early if
1779 an implausible prologue instruction is encountered.
1780
1781 The expression
1782
1783 prologue_start + 64
1784
1785 is a suitable endpoint since it accounts for the largest
1786 possible prologue plus up to five instructions inserted by
1787 the scheduler. */
1788
1789 if (prologue_end > prologue_start + 64)
1790 {
1791 prologue_end = prologue_start + 64; /* See above. */
1792 }
1793 }
1794 else
1795 {
1796 /* We have no symbol information. Our only option is to assume this
1797 function has a standard stack frame and the normal frame register.
1798 Then, we can find the value of our frame pointer on entrance to
1799 the callee (or at the present moment if this is the innermost frame).
1800 The value stored there should be the address of the stmfd + 8. */
1801 CORE_ADDR frame_loc;
1802 ULONGEST return_value;
1803
1804 /* AAPCS does not use a frame register, so we can abort here. */
1805 if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_AAPCS)
1806 return;
1807
1808 frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1809 if (!safe_read_memory_unsigned_integer (frame_loc, 4, byte_order,
1810 &return_value))
1811 return;
1812 else
1813 {
1814 prologue_start = gdbarch_addr_bits_remove
1815 (gdbarch, return_value) - 8;
1816 prologue_end = prologue_start + 64; /* See above. */
1817 }
1818 }
1819
1820 if (prev_pc < prologue_end)
1821 prologue_end = prev_pc;
1822
1823 arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1824 }
1825
1826 static struct arm_prologue_cache *
1827 arm_make_prologue_cache (struct frame_info *this_frame)
1828 {
1829 int reg;
1830 struct arm_prologue_cache *cache;
1831 CORE_ADDR unwound_fp;
1832
1833 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1834 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1835
1836 arm_scan_prologue (this_frame, cache);
1837
1838 unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
1839 if (unwound_fp == 0)
1840 return cache;
1841
1842 cache->prev_sp = unwound_fp + cache->framesize;
1843
1844 /* Calculate actual addresses of saved registers using offsets
1845 determined by arm_scan_prologue. */
1846 for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
1847 if (trad_frame_addr_p (cache->saved_regs, reg))
1848 cache->saved_regs[reg].addr += cache->prev_sp;
1849
1850 return cache;
1851 }
1852
1853 /* Implementation of the stop_reason hook for arm_prologue frames. */
1854
1855 static enum unwind_stop_reason
1856 arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
1857 void **this_cache)
1858 {
1859 struct arm_prologue_cache *cache;
1860 CORE_ADDR pc;
1861
1862 if (*this_cache == NULL)
1863 *this_cache = arm_make_prologue_cache (this_frame);
1864 cache = (struct arm_prologue_cache *) *this_cache;
1865
1866 /* This is meant to halt the backtrace at "_start". */
1867 pc = get_frame_pc (this_frame);
1868 if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
1869 return UNWIND_OUTERMOST;
1870
1871 /* If we've hit a wall, stop. */
1872 if (cache->prev_sp == 0)
1873 return UNWIND_OUTERMOST;
1874
1875 return UNWIND_NO_REASON;
1876 }
1877
1878 /* Our frame ID for a normal frame is the current function's starting PC
1879 and the caller's SP when we were called. */
1880
1881 static void
1882 arm_prologue_this_id (struct frame_info *this_frame,
1883 void **this_cache,
1884 struct frame_id *this_id)
1885 {
1886 struct arm_prologue_cache *cache;
1887 struct frame_id id;
1888 CORE_ADDR pc, func;
1889
1890 if (*this_cache == NULL)
1891 *this_cache = arm_make_prologue_cache (this_frame);
1892 cache = (struct arm_prologue_cache *) *this_cache;
1893
1894 /* Use function start address as part of the frame ID. If we cannot
1895 identify the start address (due to missing symbol information),
1896 fall back to just using the current PC. */
1897 pc = get_frame_pc (this_frame);
1898 func = get_frame_func (this_frame);
1899 if (!func)
1900 func = pc;
1901
1902 id = frame_id_build (cache->prev_sp, func);
1903 *this_id = id;
1904 }
1905
1906 static struct value *
1907 arm_prologue_prev_register (struct frame_info *this_frame,
1908 void **this_cache,
1909 int prev_regnum)
1910 {
1911 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1912 struct arm_prologue_cache *cache;
1913
1914 if (*this_cache == NULL)
1915 *this_cache = arm_make_prologue_cache (this_frame);
1916 cache = (struct arm_prologue_cache *) *this_cache;
1917
1918 /* If we are asked to unwind the PC, then we need to return the LR
1919 instead. The prologue may save PC, but it will point into this
1920 frame's prologue, not the next frame's resume location. Also
1921 strip the saved T bit. A valid LR may have the low bit set, but
1922 a valid PC never does. */
1923 if (prev_regnum == ARM_PC_REGNUM)
1924 {
1925 CORE_ADDR lr;
1926
1927 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1928 return frame_unwind_got_constant (this_frame, prev_regnum,
1929 arm_addr_bits_remove (gdbarch, lr));
1930 }
1931
1932 /* SP is generally not saved to the stack, but this frame is
1933 identified by the next frame's stack pointer at the time of the call.
1934 The value was already reconstructed into PREV_SP. */
1935 if (prev_regnum == ARM_SP_REGNUM)
1936 return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
1937
1938 /* The CPSR may have been changed by the call instruction and by the
1939 called function. The only bit we can reconstruct is the T bit,
1940 by checking the low bit of LR as of the call. This is a reliable
1941 indicator of Thumb-ness except for some ARM v4T pre-interworking
1942 Thumb code, which could get away with a clear low bit as long as
1943 the called function did not use bx. Guess that all other
1944 bits are unchanged; the condition flags are presumably lost,
1945 but the processor status is likely valid. */
1946 if (prev_regnum == ARM_PS_REGNUM)
1947 {
1948 CORE_ADDR lr, cpsr;
1949 ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
1950
1951 cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
1952 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1953 if (IS_THUMB_ADDR (lr))
1954 cpsr |= t_bit;
1955 else
1956 cpsr &= ~t_bit;
1957 return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
1958 }
1959
1960 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1961 prev_regnum);
1962 }
1963
1964 struct frame_unwind arm_prologue_unwind = {
1965 NORMAL_FRAME,
1966 arm_prologue_unwind_stop_reason,
1967 arm_prologue_this_id,
1968 arm_prologue_prev_register,
1969 NULL,
1970 default_frame_sniffer
1971 };
1972
1973 /* Maintain a list of ARM exception table entries per objfile, similar to the
1974 list of mapping symbols. We only cache entries for standard ARM-defined
1975 personality routines; the cache will contain only the frame unwinding
1976 instructions associated with the entry (not the descriptors). */
1977
1978 static const struct objfile_data *arm_exidx_data_key;
1979
1980 struct arm_exidx_entry
1981 {
1982 bfd_vma addr;
1983 gdb_byte *entry;
1984 };
1985 typedef struct arm_exidx_entry arm_exidx_entry_s;
1986 DEF_VEC_O(arm_exidx_entry_s);
1987
1988 struct arm_exidx_data
1989 {
1990 VEC(arm_exidx_entry_s) **section_maps;
1991 };
1992
1993 static void
1994 arm_exidx_data_free (struct objfile *objfile, void *arg)
1995 {
1996 struct arm_exidx_data *data = (struct arm_exidx_data *) arg;
1997 unsigned int i;
1998
1999 for (i = 0; i < objfile->obfd->section_count; i++)
2000 VEC_free (arm_exidx_entry_s, data->section_maps[i]);
2001 }
2002
2003 static inline int
2004 arm_compare_exidx_entries (const struct arm_exidx_entry *lhs,
2005 const struct arm_exidx_entry *rhs)
2006 {
2007 return lhs->addr < rhs->addr;
2008 }
2009
2010 static struct obj_section *
2011 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
2012 {
2013 struct obj_section *osect;
2014
2015 ALL_OBJFILE_OSECTIONS (objfile, osect)
2016 if (bfd_get_section_flags (objfile->obfd,
2017 osect->the_bfd_section) & SEC_ALLOC)
2018 {
2019 bfd_vma start, size;
2020 start = bfd_get_section_vma (objfile->obfd, osect->the_bfd_section);
2021 size = bfd_get_section_size (osect->the_bfd_section);
2022
2023 if (start <= vma && vma < start + size)
2024 return osect;
2025 }
2026
2027 return NULL;
2028 }
2029
2030 /* Parse contents of exception table and exception index sections
2031 of OBJFILE, and fill in the exception table entry cache.
2032
2033 For each entry that refers to a standard ARM-defined personality
2034 routine, extract the frame unwinding instructions (from either
2035 the index or the table section). The unwinding instructions
2036 are normalized by:
2037 - extracting them from the rest of the table data
2038 - converting to host endianness
2039 - appending the implicit 0xb0 ("Finish") code
2040
2041 The extracted and normalized instructions are stored for later
2042 retrieval by the arm_find_exidx_entry routine. */
2043
2044 static void
2045 arm_exidx_new_objfile (struct objfile *objfile)
2046 {
2047 struct arm_exidx_data *data;
2048 asection *exidx, *extab;
2049 bfd_vma exidx_vma = 0, extab_vma = 0;
2050 LONGEST i;
2051
2052 /* If we've already touched this file, do nothing. */
2053 if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
2054 return;
2055
2056 /* Read contents of exception table and index. */
2057 exidx = bfd_get_section_by_name (objfile->obfd, ELF_STRING_ARM_unwind);
2058 gdb::byte_vector exidx_data;
2059 if (exidx)
2060 {
2061 exidx_vma = bfd_section_vma (objfile->obfd, exidx);
2062 exidx_data.resize (bfd_get_section_size (exidx));
2063
2064 if (!bfd_get_section_contents (objfile->obfd, exidx,
2065 exidx_data.data (), 0,
2066 exidx_data.size ()))
2067 return;
2068 }
2069
2070 extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2071 gdb::byte_vector extab_data;
2072 if (extab)
2073 {
2074 extab_vma = bfd_section_vma (objfile->obfd, extab);
2075 extab_data.resize (bfd_get_section_size (extab));
2076
2077 if (!bfd_get_section_contents (objfile->obfd, extab,
2078 extab_data.data (), 0,
2079 extab_data.size ()))
2080 return;
2081 }
2082
2083 /* Allocate exception table data structure. */
2084 data = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct arm_exidx_data);
2085 set_objfile_data (objfile, arm_exidx_data_key, data);
2086 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
2087 objfile->obfd->section_count,
2088 VEC(arm_exidx_entry_s) *);
2089
2090 /* Fill in exception table. */
2091 for (i = 0; i < exidx_data.size () / 8; i++)
2092 {
2093 struct arm_exidx_entry new_exidx_entry;
2094 bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data.data () + i * 8);
2095 bfd_vma val = bfd_h_get_32 (objfile->obfd,
2096 exidx_data.data () + i * 8 + 4);
2097 bfd_vma addr = 0, word = 0;
2098 int n_bytes = 0, n_words = 0;
2099 struct obj_section *sec;
2100 gdb_byte *entry = NULL;
2101
2102 /* Extract address of start of function. */
2103 idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2104 idx += exidx_vma + i * 8;
2105
2106 /* Find section containing function and compute section offset. */
2107 sec = arm_obj_section_from_vma (objfile, idx);
2108 if (sec == NULL)
2109 continue;
2110 idx -= bfd_get_section_vma (objfile->obfd, sec->the_bfd_section);
2111
2112 /* Determine address of exception table entry. */
2113 if (val == 1)
2114 {
2115 /* EXIDX_CANTUNWIND -- no exception table entry present. */
2116 }
2117 else if ((val & 0xff000000) == 0x80000000)
2118 {
2119 /* Exception table entry embedded in .ARM.exidx
2120 -- must be short form. */
2121 word = val;
2122 n_bytes = 3;
2123 }
2124 else if (!(val & 0x80000000))
2125 {
2126 /* Exception table entry in .ARM.extab. */
2127 addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2128 addr += exidx_vma + i * 8 + 4;
2129
2130 if (addr >= extab_vma && addr + 4 <= extab_vma + extab_data.size ())
2131 {
2132 word = bfd_h_get_32 (objfile->obfd,
2133 extab_data.data () + addr - extab_vma);
2134 addr += 4;
2135
2136 if ((word & 0xff000000) == 0x80000000)
2137 {
2138 /* Short form. */
2139 n_bytes = 3;
2140 }
2141 else if ((word & 0xff000000) == 0x81000000
2142 || (word & 0xff000000) == 0x82000000)
2143 {
2144 /* Long form. */
2145 n_bytes = 2;
2146 n_words = ((word >> 16) & 0xff);
2147 }
2148 else if (!(word & 0x80000000))
2149 {
2150 bfd_vma pers;
2151 struct obj_section *pers_sec;
2152 int gnu_personality = 0;
2153
2154 /* Custom personality routine. */
2155 pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2156 pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2157
2158 /* Check whether we've got one of the variants of the
2159 GNU personality routines. */
2160 pers_sec = arm_obj_section_from_vma (objfile, pers);
2161 if (pers_sec)
2162 {
2163 static const char *personality[] =
2164 {
2165 "__gcc_personality_v0",
2166 "__gxx_personality_v0",
2167 "__gcj_personality_v0",
2168 "__gnu_objc_personality_v0",
2169 NULL
2170 };
2171
2172 CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2173 int k;
2174
2175 for (k = 0; personality[k]; k++)
2176 if (lookup_minimal_symbol_by_pc_name
2177 (pc, personality[k], objfile))
2178 {
2179 gnu_personality = 1;
2180 break;
2181 }
2182 }
2183
2184 /* If so, the next word contains a word count in the high
2185 byte, followed by the same unwind instructions as the
2186 pre-defined forms. */
2187 if (gnu_personality
2188 && addr + 4 <= extab_vma + extab_data.size ())
2189 {
2190 word = bfd_h_get_32 (objfile->obfd,
2191 (extab_data.data ()
2192 + addr - extab_vma));
2193 addr += 4;
2194 n_bytes = 3;
2195 n_words = ((word >> 24) & 0xff);
2196 }
2197 }
2198 }
2199 }
2200
2201 /* Sanity check address. */
2202 if (n_words)
2203 if (addr < extab_vma
2204 || addr + 4 * n_words > extab_vma + extab_data.size ())
2205 n_words = n_bytes = 0;
2206
2207 /* The unwind instructions reside in WORD (only the N_BYTES least
2208 significant bytes are valid), followed by N_WORDS words in the
2209 extab section starting at ADDR. */
2210 if (n_bytes || n_words)
2211 {
2212 gdb_byte *p = entry
2213 = (gdb_byte *) obstack_alloc (&objfile->objfile_obstack,
2214 n_bytes + n_words * 4 + 1);
2215
2216 while (n_bytes--)
2217 *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2218
2219 while (n_words--)
2220 {
2221 word = bfd_h_get_32 (objfile->obfd,
2222 extab_data.data () + addr - extab_vma);
2223 addr += 4;
2224
2225 *p++ = (gdb_byte) ((word >> 24) & 0xff);
2226 *p++ = (gdb_byte) ((word >> 16) & 0xff);
2227 *p++ = (gdb_byte) ((word >> 8) & 0xff);
2228 *p++ = (gdb_byte) (word & 0xff);
2229 }
2230
2231 /* Implied "Finish" to terminate the list. */
2232 *p++ = 0xb0;
2233 }
2234
2235 /* Push entry onto vector. They are guaranteed to always
2236 appear in order of increasing addresses. */
2237 new_exidx_entry.addr = idx;
2238 new_exidx_entry.entry = entry;
2239 VEC_safe_push (arm_exidx_entry_s,
2240 data->section_maps[sec->the_bfd_section->index],
2241 &new_exidx_entry);
2242 }
2243 }
2244
2245 /* Search for the exception table entry covering MEMADDR. If one is found,
2246 return a pointer to its data. Otherwise, return 0. If START is non-NULL,
2247 set *START to the start of the region covered by this entry. */
2248
2249 static gdb_byte *
2250 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2251 {
2252 struct obj_section *sec;
2253
2254 sec = find_pc_section (memaddr);
2255 if (sec != NULL)
2256 {
2257 struct arm_exidx_data *data;
2258 VEC(arm_exidx_entry_s) *map;
2259 struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2260 unsigned int idx;
2261
2262 data = ((struct arm_exidx_data *)
2263 objfile_data (sec->objfile, arm_exidx_data_key));
2264 if (data != NULL)
2265 {
2266 map = data->section_maps[sec->the_bfd_section->index];
2267 if (!VEC_empty (arm_exidx_entry_s, map))
2268 {
2269 struct arm_exidx_entry *map_sym;
2270
2271 idx = VEC_lower_bound (arm_exidx_entry_s, map, &map_key,
2272 arm_compare_exidx_entries);
2273
2274 /* VEC_lower_bound finds the earliest ordered insertion
2275 point. If the following symbol starts at this exact
2276 address, we use that; otherwise, the preceding
2277 exception table entry covers this address. */
2278 if (idx < VEC_length (arm_exidx_entry_s, map))
2279 {
2280 map_sym = VEC_index (arm_exidx_entry_s, map, idx);
2281 if (map_sym->addr == map_key.addr)
2282 {
2283 if (start)
2284 *start = map_sym->addr + obj_section_addr (sec);
2285 return map_sym->entry;
2286 }
2287 }
2288
2289 if (idx > 0)
2290 {
2291 map_sym = VEC_index (arm_exidx_entry_s, map, idx - 1);
2292 if (start)
2293 *start = map_sym->addr + obj_section_addr (sec);
2294 return map_sym->entry;
2295 }
2296 }
2297 }
2298 }
2299
2300 return NULL;
2301 }
2302
2303 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2304 instruction list from the ARM exception table entry ENTRY, allocate and
2305 return a prologue cache structure describing how to unwind this frame.
2306
2307 Return NULL if the unwinding instruction list contains a "spare",
2308 "reserved" or "refuse to unwind" instruction as defined in section
2309 "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2310 for the ARM Architecture" document. */
2311
2312 static struct arm_prologue_cache *
2313 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2314 {
2315 CORE_ADDR vsp = 0;
2316 int vsp_valid = 0;
2317
2318 struct arm_prologue_cache *cache;
2319 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2320 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2321
2322 for (;;)
2323 {
2324 gdb_byte insn;
2325
2326 /* Whenever we reload SP, we actually have to retrieve its
2327 actual value in the current frame. */
2328 if (!vsp_valid)
2329 {
2330 if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2331 {
2332 int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2333 vsp = get_frame_register_unsigned (this_frame, reg);
2334 }
2335 else
2336 {
2337 CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
2338 vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2339 }
2340
2341 vsp_valid = 1;
2342 }
2343
2344 /* Decode next unwind instruction. */
2345 insn = *entry++;
2346
2347 if ((insn & 0xc0) == 0)
2348 {
2349 int offset = insn & 0x3f;
2350 vsp += (offset << 2) + 4;
2351 }
2352 else if ((insn & 0xc0) == 0x40)
2353 {
2354 int offset = insn & 0x3f;
2355 vsp -= (offset << 2) + 4;
2356 }
2357 else if ((insn & 0xf0) == 0x80)
2358 {
2359 int mask = ((insn & 0xf) << 8) | *entry++;
2360 int i;
2361
2362 /* The special case of an all-zero mask identifies
2363 "Refuse to unwind". We return NULL to fall back
2364 to the prologue analyzer. */
2365 if (mask == 0)
2366 return NULL;
2367
2368 /* Pop registers r4..r15 under mask. */
2369 for (i = 0; i < 12; i++)
2370 if (mask & (1 << i))
2371 {
2372 cache->saved_regs[4 + i].addr = vsp;
2373 vsp += 4;
2374 }
2375
2376 /* Special-case popping SP -- we need to reload vsp. */
2377 if (mask & (1 << (ARM_SP_REGNUM - 4)))
2378 vsp_valid = 0;
2379 }
2380 else if ((insn & 0xf0) == 0x90)
2381 {
2382 int reg = insn & 0xf;
2383
2384 /* Reserved cases. */
2385 if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2386 return NULL;
2387
2388 /* Set SP from another register and mark VSP for reload. */
2389 cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2390 vsp_valid = 0;
2391 }
2392 else if ((insn & 0xf0) == 0xa0)
2393 {
2394 int count = insn & 0x7;
2395 int pop_lr = (insn & 0x8) != 0;
2396 int i;
2397
2398 /* Pop r4..r[4+count]. */
2399 for (i = 0; i <= count; i++)
2400 {
2401 cache->saved_regs[4 + i].addr = vsp;
2402 vsp += 4;
2403 }
2404
2405 /* If indicated by flag, pop LR as well. */
2406 if (pop_lr)
2407 {
2408 cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
2409 vsp += 4;
2410 }
2411 }
2412 else if (insn == 0xb0)
2413 {
2414 /* We could only have updated PC by popping into it; if so, it
2415 will show up as address. Otherwise, copy LR into PC. */
2416 if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
2417 cache->saved_regs[ARM_PC_REGNUM]
2418 = cache->saved_regs[ARM_LR_REGNUM];
2419
2420 /* We're done. */
2421 break;
2422 }
2423 else if (insn == 0xb1)
2424 {
2425 int mask = *entry++;
2426 int i;
2427
2428 /* All-zero mask and mask >= 16 is "spare". */
2429 if (mask == 0 || mask >= 16)
2430 return NULL;
2431
2432 /* Pop r0..r3 under mask. */
2433 for (i = 0; i < 4; i++)
2434 if (mask & (1 << i))
2435 {
2436 cache->saved_regs[i].addr = vsp;
2437 vsp += 4;
2438 }
2439 }
2440 else if (insn == 0xb2)
2441 {
2442 ULONGEST offset = 0;
2443 unsigned shift = 0;
2444
2445 do
2446 {
2447 offset |= (*entry & 0x7f) << shift;
2448 shift += 7;
2449 }
2450 while (*entry++ & 0x80);
2451
2452 vsp += 0x204 + (offset << 2);
2453 }
2454 else if (insn == 0xb3)
2455 {
2456 int start = *entry >> 4;
2457 int count = (*entry++) & 0xf;
2458 int i;
2459
2460 /* Only registers D0..D15 are valid here. */
2461 if (start + count >= 16)
2462 return NULL;
2463
2464 /* Pop VFP double-precision registers D[start]..D[start+count]. */
2465 for (i = 0; i <= count; i++)
2466 {
2467 cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2468 vsp += 8;
2469 }
2470
2471 /* Add an extra 4 bytes for FSTMFDX-style stack. */
2472 vsp += 4;
2473 }
2474 else if ((insn & 0xf8) == 0xb8)
2475 {
2476 int count = insn & 0x7;
2477 int i;
2478
2479 /* Pop VFP double-precision registers D[8]..D[8+count]. */
2480 for (i = 0; i <= count; i++)
2481 {
2482 cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2483 vsp += 8;
2484 }
2485
2486 /* Add an extra 4 bytes for FSTMFDX-style stack. */
2487 vsp += 4;
2488 }
2489 else if (insn == 0xc6)
2490 {
2491 int start = *entry >> 4;
2492 int count = (*entry++) & 0xf;
2493 int i;
2494
2495 /* Only registers WR0..WR15 are valid. */
2496 if (start + count >= 16)
2497 return NULL;
2498
2499 /* Pop iwmmx registers WR[start]..WR[start+count]. */
2500 for (i = 0; i <= count; i++)
2501 {
2502 cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
2503 vsp += 8;
2504 }
2505 }
2506 else if (insn == 0xc7)
2507 {
2508 int mask = *entry++;
2509 int i;
2510
2511 /* All-zero mask and mask >= 16 is "spare". */
2512 if (mask == 0 || mask >= 16)
2513 return NULL;
2514
2515 /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask. */
2516 for (i = 0; i < 4; i++)
2517 if (mask & (1 << i))
2518 {
2519 cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
2520 vsp += 4;
2521 }
2522 }
2523 else if ((insn & 0xf8) == 0xc0)
2524 {
2525 int count = insn & 0x7;
2526 int i;
2527
2528 /* Pop iwmmx registers WR[10]..WR[10+count]. */
2529 for (i = 0; i <= count; i++)
2530 {
2531 cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
2532 vsp += 8;
2533 }
2534 }
2535 else if (insn == 0xc8)
2536 {
2537 int start = *entry >> 4;
2538 int count = (*entry++) & 0xf;
2539 int i;
2540
2541 /* Only registers D0..D31 are valid. */
2542 if (start + count >= 16)
2543 return NULL;
2544
2545 /* Pop VFP double-precision registers
2546 D[16+start]..D[16+start+count]. */
2547 for (i = 0; i <= count; i++)
2548 {
2549 cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
2550 vsp += 8;
2551 }
2552 }
2553 else if (insn == 0xc9)
2554 {
2555 int start = *entry >> 4;
2556 int count = (*entry++) & 0xf;
2557 int i;
2558
2559 /* Pop VFP double-precision registers D[start]..D[start+count]. */
2560 for (i = 0; i <= count; i++)
2561 {
2562 cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2563 vsp += 8;
2564 }
2565 }
2566 else if ((insn & 0xf8) == 0xd0)
2567 {
2568 int count = insn & 0x7;
2569 int i;
2570
2571 /* Pop VFP double-precision registers D[8]..D[8+count]. */
2572 for (i = 0; i <= count; i++)
2573 {
2574 cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2575 vsp += 8;
2576 }
2577 }
2578 else
2579 {
2580 /* Everything else is "spare". */
2581 return NULL;
2582 }
2583 }
2584
2585 /* If we restore SP from a register, assume this was the frame register.
2586 Otherwise just fall back to SP as frame register. */
2587 if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2588 cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2589 else
2590 cache->framereg = ARM_SP_REGNUM;
2591
2592 /* Determine offset to previous frame. */
2593 cache->framesize
2594 = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2595
2596 /* We already got the previous SP. */
2597 cache->prev_sp = vsp;
2598
2599 return cache;
2600 }
2601
2602 /* Unwinding via ARM exception table entries. Note that the sniffer
2603 already computes a filled-in prologue cache, which is then used
2604 with the same arm_prologue_this_id and arm_prologue_prev_register
2605 routines also used for prologue-parsing based unwinding. */
2606
2607 static int
2608 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2609 struct frame_info *this_frame,
2610 void **this_prologue_cache)
2611 {
2612 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2613 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2614 CORE_ADDR addr_in_block, exidx_region, func_start;
2615 struct arm_prologue_cache *cache;
2616 gdb_byte *entry;
2617
2618 /* See if we have an ARM exception table entry covering this address. */
2619 addr_in_block = get_frame_address_in_block (this_frame);
2620 entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2621 if (!entry)
2622 return 0;
2623
2624 /* The ARM exception table does not describe unwind information
2625 for arbitrary PC values, but is guaranteed to be correct only
2626 at call sites. We have to decide here whether we want to use
2627 ARM exception table information for this frame, or fall back
2628 to using prologue parsing. (Note that if we have DWARF CFI,
2629 this sniffer isn't even called -- CFI is always preferred.)
2630
2631 Before we make this decision, however, we check whether we
2632 actually have *symbol* information for the current frame.
2633 If not, prologue parsing would not work anyway, so we might
2634 as well use the exception table and hope for the best. */
2635 if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2636 {
2637 int exc_valid = 0;
2638
2639 /* If the next frame is "normal", we are at a call site in this
2640 frame, so exception information is guaranteed to be valid. */
2641 if (get_next_frame (this_frame)
2642 && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2643 exc_valid = 1;
2644
2645 /* We also assume exception information is valid if we're currently
2646 blocked in a system call. The system library is supposed to
2647 ensure this, so that e.g. pthread cancellation works. */
2648 if (arm_frame_is_thumb (this_frame))
2649 {
2650 ULONGEST insn;
2651
2652 if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 2,
2653 2, byte_order_for_code, &insn)
2654 && (insn & 0xff00) == 0xdf00 /* svc */)
2655 exc_valid = 1;
2656 }
2657 else
2658 {
2659 ULONGEST insn;
2660
2661 if (safe_read_memory_unsigned_integer (get_frame_pc (this_frame) - 4,
2662 4, byte_order_for_code, &insn)
2663 && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2664 exc_valid = 1;
2665 }
2666
2667 /* Bail out if we don't know that exception information is valid. */
2668 if (!exc_valid)
2669 return 0;
2670
2671 /* The ARM exception index does not mark the *end* of the region
2672 covered by the entry, and some functions will not have any entry.
2673 To correctly recognize the end of the covered region, the linker
2674 should have inserted dummy records with a CANTUNWIND marker.
2675
2676 Unfortunately, current versions of GNU ld do not reliably do
2677 this, and thus we may have found an incorrect entry above.
2678 As a (temporary) sanity check, we only use the entry if it
2679 lies *within* the bounds of the function. Note that this check
2680 might reject perfectly valid entries that just happen to cover
2681 multiple functions; therefore this check ought to be removed
2682 once the linker is fixed. */
2683 if (func_start > exidx_region)
2684 return 0;
2685 }
2686
2687 /* Decode the list of unwinding instructions into a prologue cache.
2688 Note that this may fail due to e.g. a "refuse to unwind" code. */
2689 cache = arm_exidx_fill_cache (this_frame, entry);
2690 if (!cache)
2691 return 0;
2692
2693 *this_prologue_cache = cache;
2694 return 1;
2695 }
2696
2697 struct frame_unwind arm_exidx_unwind = {
2698 NORMAL_FRAME,
2699 default_frame_unwind_stop_reason,
2700 arm_prologue_this_id,
2701 arm_prologue_prev_register,
2702 NULL,
2703 arm_exidx_unwind_sniffer
2704 };
2705
2706 static struct arm_prologue_cache *
2707 arm_make_epilogue_frame_cache (struct frame_info *this_frame)
2708 {
2709 struct arm_prologue_cache *cache;
2710 int reg;
2711
2712 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2713 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2714
2715 /* Still rely on the offset calculated from prologue. */
2716 arm_scan_prologue (this_frame, cache);
2717
2718 /* Since we are in epilogue, the SP has been restored. */
2719 cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2720
2721 /* Calculate actual addresses of saved registers using offsets
2722 determined by arm_scan_prologue. */
2723 for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2724 if (trad_frame_addr_p (cache->saved_regs, reg))
2725 cache->saved_regs[reg].addr += cache->prev_sp;
2726
2727 return cache;
2728 }
2729
2730 /* Implementation of function hook 'this_id' in
2731 'struct frame_uwnind' for epilogue unwinder. */
2732
2733 static void
2734 arm_epilogue_frame_this_id (struct frame_info *this_frame,
2735 void **this_cache,
2736 struct frame_id *this_id)
2737 {
2738 struct arm_prologue_cache *cache;
2739 CORE_ADDR pc, func;
2740
2741 if (*this_cache == NULL)
2742 *this_cache = arm_make_epilogue_frame_cache (this_frame);
2743 cache = (struct arm_prologue_cache *) *this_cache;
2744
2745 /* Use function start address as part of the frame ID. If we cannot
2746 identify the start address (due to missing symbol information),
2747 fall back to just using the current PC. */
2748 pc = get_frame_pc (this_frame);
2749 func = get_frame_func (this_frame);
2750 if (func == 0)
2751 func = pc;
2752
2753 (*this_id) = frame_id_build (cache->prev_sp, pc);
2754 }
2755
2756 /* Implementation of function hook 'prev_register' in
2757 'struct frame_uwnind' for epilogue unwinder. */
2758
2759 static struct value *
2760 arm_epilogue_frame_prev_register (struct frame_info *this_frame,
2761 void **this_cache, int regnum)
2762 {
2763 if (*this_cache == NULL)
2764 *this_cache = arm_make_epilogue_frame_cache (this_frame);
2765
2766 return arm_prologue_prev_register (this_frame, this_cache, regnum);
2767 }
2768
2769 static int arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch,
2770 CORE_ADDR pc);
2771 static int thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch,
2772 CORE_ADDR pc);
2773
2774 /* Implementation of function hook 'sniffer' in
2775 'struct frame_uwnind' for epilogue unwinder. */
2776
2777 static int
2778 arm_epilogue_frame_sniffer (const struct frame_unwind *self,
2779 struct frame_info *this_frame,
2780 void **this_prologue_cache)
2781 {
2782 if (frame_relative_level (this_frame) == 0)
2783 {
2784 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2785 CORE_ADDR pc = get_frame_pc (this_frame);
2786
2787 if (arm_frame_is_thumb (this_frame))
2788 return thumb_stack_frame_destroyed_p (gdbarch, pc);
2789 else
2790 return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
2791 }
2792 else
2793 return 0;
2794 }
2795
2796 /* Frame unwinder from epilogue. */
2797
2798 static const struct frame_unwind arm_epilogue_frame_unwind =
2799 {
2800 NORMAL_FRAME,
2801 default_frame_unwind_stop_reason,
2802 arm_epilogue_frame_this_id,
2803 arm_epilogue_frame_prev_register,
2804 NULL,
2805 arm_epilogue_frame_sniffer,
2806 };
2807
2808 /* Recognize GCC's trampoline for thumb call-indirect. If we are in a
2809 trampoline, return the target PC. Otherwise return 0.
2810
2811 void call0a (char c, short s, int i, long l) {}
2812
2813 int main (void)
2814 {
2815 (*pointer_to_call0a) (c, s, i, l);
2816 }
2817
2818 Instead of calling a stub library function _call_via_xx (xx is
2819 the register name), GCC may inline the trampoline in the object
2820 file as below (register r2 has the address of call0a).
2821
2822 .global main
2823 .type main, %function
2824 ...
2825 bl .L1
2826 ...
2827 .size main, .-main
2828
2829 .L1:
2830 bx r2
2831
2832 The trampoline 'bx r2' doesn't belong to main. */
2833
2834 static CORE_ADDR
2835 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2836 {
2837 /* The heuristics of recognizing such trampoline is that FRAME is
2838 executing in Thumb mode and the instruction on PC is 'bx Rm'. */
2839 if (arm_frame_is_thumb (frame))
2840 {
2841 gdb_byte buf[2];
2842
2843 if (target_read_memory (pc, buf, 2) == 0)
2844 {
2845 struct gdbarch *gdbarch = get_frame_arch (frame);
2846 enum bfd_endian byte_order_for_code
2847 = gdbarch_byte_order_for_code (gdbarch);
2848 uint16_t insn
2849 = extract_unsigned_integer (buf, 2, byte_order_for_code);
2850
2851 if ((insn & 0xff80) == 0x4700) /* bx <Rm> */
2852 {
2853 CORE_ADDR dest
2854 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2855
2856 /* Clear the LSB so that gdb core sets step-resume
2857 breakpoint at the right address. */
2858 return UNMAKE_THUMB_ADDR (dest);
2859 }
2860 }
2861 }
2862
2863 return 0;
2864 }
2865
2866 static struct arm_prologue_cache *
2867 arm_make_stub_cache (struct frame_info *this_frame)
2868 {
2869 struct arm_prologue_cache *cache;
2870
2871 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2872 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2873
2874 cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2875
2876 return cache;
2877 }
2878
2879 /* Our frame ID for a stub frame is the current SP and LR. */
2880
2881 static void
2882 arm_stub_this_id (struct frame_info *this_frame,
2883 void **this_cache,
2884 struct frame_id *this_id)
2885 {
2886 struct arm_prologue_cache *cache;
2887
2888 if (*this_cache == NULL)
2889 *this_cache = arm_make_stub_cache (this_frame);
2890 cache = (struct arm_prologue_cache *) *this_cache;
2891
2892 *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2893 }
2894
2895 static int
2896 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2897 struct frame_info *this_frame,
2898 void **this_prologue_cache)
2899 {
2900 CORE_ADDR addr_in_block;
2901 gdb_byte dummy[4];
2902 CORE_ADDR pc, start_addr;
2903 const char *name;
2904
2905 addr_in_block = get_frame_address_in_block (this_frame);
2906 pc = get_frame_pc (this_frame);
2907 if (in_plt_section (addr_in_block)
2908 /* We also use the stub winder if the target memory is unreadable
2909 to avoid having the prologue unwinder trying to read it. */
2910 || target_read_memory (pc, dummy, 4) != 0)
2911 return 1;
2912
2913 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2914 && arm_skip_bx_reg (this_frame, pc) != 0)
2915 return 1;
2916
2917 return 0;
2918 }
2919
2920 struct frame_unwind arm_stub_unwind = {
2921 NORMAL_FRAME,
2922 default_frame_unwind_stop_reason,
2923 arm_stub_this_id,
2924 arm_prologue_prev_register,
2925 NULL,
2926 arm_stub_unwind_sniffer
2927 };
2928
2929 /* Put here the code to store, into CACHE->saved_regs, the addresses
2930 of the saved registers of frame described by THIS_FRAME. CACHE is
2931 returned. */
2932
2933 static struct arm_prologue_cache *
2934 arm_m_exception_cache (struct frame_info *this_frame)
2935 {
2936 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2937 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2938 struct arm_prologue_cache *cache;
2939 CORE_ADDR unwound_sp;
2940 LONGEST xpsr;
2941
2942 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2943 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2944
2945 unwound_sp = get_frame_register_unsigned (this_frame,
2946 ARM_SP_REGNUM);
2947
2948 /* The hardware saves eight 32-bit words, comprising xPSR,
2949 ReturnAddress, LR (R14), R12, R3, R2, R1, R0. See details in
2950 "B1.5.6 Exception entry behavior" in
2951 "ARMv7-M Architecture Reference Manual". */
2952 cache->saved_regs[0].addr = unwound_sp;
2953 cache->saved_regs[1].addr = unwound_sp + 4;
2954 cache->saved_regs[2].addr = unwound_sp + 8;
2955 cache->saved_regs[3].addr = unwound_sp + 12;
2956 cache->saved_regs[12].addr = unwound_sp + 16;
2957 cache->saved_regs[14].addr = unwound_sp + 20;
2958 cache->saved_regs[15].addr = unwound_sp + 24;
2959 cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
2960
2961 /* If bit 9 of the saved xPSR is set, then there is a four-byte
2962 aligner between the top of the 32-byte stack frame and the
2963 previous context's stack pointer. */
2964 cache->prev_sp = unwound_sp + 32;
2965 if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
2966 && (xpsr & (1 << 9)) != 0)
2967 cache->prev_sp += 4;
2968
2969 return cache;
2970 }
2971
2972 /* Implementation of function hook 'this_id' in
2973 'struct frame_uwnind'. */
2974
2975 static void
2976 arm_m_exception_this_id (struct frame_info *this_frame,
2977 void **this_cache,
2978 struct frame_id *this_id)
2979 {
2980 struct arm_prologue_cache *cache;
2981
2982 if (*this_cache == NULL)
2983 *this_cache = arm_m_exception_cache (this_frame);
2984 cache = (struct arm_prologue_cache *) *this_cache;
2985
2986 /* Our frame ID for a stub frame is the current SP and LR. */
2987 *this_id = frame_id_build (cache->prev_sp,
2988 get_frame_pc (this_frame));
2989 }
2990
2991 /* Implementation of function hook 'prev_register' in
2992 'struct frame_uwnind'. */
2993
2994 static struct value *
2995 arm_m_exception_prev_register (struct frame_info *this_frame,
2996 void **this_cache,
2997 int prev_regnum)
2998 {
2999 struct arm_prologue_cache *cache;
3000
3001 if (*this_cache == NULL)
3002 *this_cache = arm_m_exception_cache (this_frame);
3003 cache = (struct arm_prologue_cache *) *this_cache;
3004
3005 /* The value was already reconstructed into PREV_SP. */
3006 if (prev_regnum == ARM_SP_REGNUM)
3007 return frame_unwind_got_constant (this_frame, prev_regnum,
3008 cache->prev_sp);
3009
3010 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3011 prev_regnum);
3012 }
3013
3014 /* Implementation of function hook 'sniffer' in
3015 'struct frame_uwnind'. */
3016
3017 static int
3018 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3019 struct frame_info *this_frame,
3020 void **this_prologue_cache)
3021 {
3022 CORE_ADDR this_pc = get_frame_pc (this_frame);
3023
3024 /* No need to check is_m; this sniffer is only registered for
3025 M-profile architectures. */
3026
3027 /* Check if exception frame returns to a magic PC value. */
3028 return arm_m_addr_is_magic (this_pc);
3029 }
3030
3031 /* Frame unwinder for M-profile exceptions. */
3032
3033 struct frame_unwind arm_m_exception_unwind =
3034 {
3035 SIGTRAMP_FRAME,
3036 default_frame_unwind_stop_reason,
3037 arm_m_exception_this_id,
3038 arm_m_exception_prev_register,
3039 NULL,
3040 arm_m_exception_unwind_sniffer
3041 };
3042
3043 static CORE_ADDR
3044 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3045 {
3046 struct arm_prologue_cache *cache;
3047
3048 if (*this_cache == NULL)
3049 *this_cache = arm_make_prologue_cache (this_frame);
3050 cache = (struct arm_prologue_cache *) *this_cache;
3051
3052 return cache->prev_sp - cache->framesize;
3053 }
3054
3055 struct frame_base arm_normal_base = {
3056 &arm_prologue_unwind,
3057 arm_normal_frame_base,
3058 arm_normal_frame_base,
3059 arm_normal_frame_base
3060 };
3061
3062 static struct value *
3063 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3064 int regnum)
3065 {
3066 struct gdbarch * gdbarch = get_frame_arch (this_frame);
3067 CORE_ADDR lr, cpsr;
3068 ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3069
3070 switch (regnum)
3071 {
3072 case ARM_PC_REGNUM:
3073 /* The PC is normally copied from the return column, which
3074 describes saves of LR. However, that version may have an
3075 extra bit set to indicate Thumb state. The bit is not
3076 part of the PC. */
3077 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3078 return frame_unwind_got_constant (this_frame, regnum,
3079 arm_addr_bits_remove (gdbarch, lr));
3080
3081 case ARM_PS_REGNUM:
3082 /* Reconstruct the T bit; see arm_prologue_prev_register for details. */
3083 cpsr = get_frame_register_unsigned (this_frame, regnum);
3084 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3085 if (IS_THUMB_ADDR (lr))
3086 cpsr |= t_bit;
3087 else
3088 cpsr &= ~t_bit;
3089 return frame_unwind_got_constant (this_frame, regnum, cpsr);
3090
3091 default:
3092 internal_error (__FILE__, __LINE__,
3093 _("Unexpected register %d"), regnum);
3094 }
3095 }
3096
3097 static void
3098 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3099 struct dwarf2_frame_state_reg *reg,
3100 struct frame_info *this_frame)
3101 {
3102 switch (regnum)
3103 {
3104 case ARM_PC_REGNUM:
3105 case ARM_PS_REGNUM:
3106 reg->how = DWARF2_FRAME_REG_FN;
3107 reg->loc.fn = arm_dwarf2_prev_register;
3108 break;
3109 case ARM_SP_REGNUM:
3110 reg->how = DWARF2_FRAME_REG_CFA;
3111 break;
3112 }
3113 }
3114
3115 /* Implement the stack_frame_destroyed_p gdbarch method. */
3116
3117 static int
3118 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3119 {
3120 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3121 unsigned int insn, insn2;
3122 int found_return = 0, found_stack_adjust = 0;
3123 CORE_ADDR func_start, func_end;
3124 CORE_ADDR scan_pc;
3125 gdb_byte buf[4];
3126
3127 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3128 return 0;
3129
3130 /* The epilogue is a sequence of instructions along the following lines:
3131
3132 - add stack frame size to SP or FP
3133 - [if frame pointer used] restore SP from FP
3134 - restore registers from SP [may include PC]
3135 - a return-type instruction [if PC wasn't already restored]
3136
3137 In a first pass, we scan forward from the current PC and verify the
3138 instructions we find as compatible with this sequence, ending in a
3139 return instruction.
3140
3141 However, this is not sufficient to distinguish indirect function calls
3142 within a function from indirect tail calls in the epilogue in some cases.
3143 Therefore, if we didn't already find any SP-changing instruction during
3144 forward scan, we add a backward scanning heuristic to ensure we actually
3145 are in the epilogue. */
3146
3147 scan_pc = pc;
3148 while (scan_pc < func_end && !found_return)
3149 {
3150 if (target_read_memory (scan_pc, buf, 2))
3151 break;
3152
3153 scan_pc += 2;
3154 insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3155
3156 if ((insn & 0xff80) == 0x4700) /* bx <Rm> */
3157 found_return = 1;
3158 else if (insn == 0x46f7) /* mov pc, lr */
3159 found_return = 1;
3160 else if (thumb_instruction_restores_sp (insn))
3161 {
3162 if ((insn & 0xff00) == 0xbd00) /* pop <registers, PC> */
3163 found_return = 1;
3164 }
3165 else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instruction */
3166 {
3167 if (target_read_memory (scan_pc, buf, 2))
3168 break;
3169
3170 scan_pc += 2;
3171 insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3172
3173 if (insn == 0xe8bd) /* ldm.w sp!, <registers> */
3174 {
3175 if (insn2 & 0x8000) /* <registers> include PC. */
3176 found_return = 1;
3177 }
3178 else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */
3179 && (insn2 & 0x0fff) == 0x0b04)
3180 {
3181 if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC. */
3182 found_return = 1;
3183 }
3184 else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */
3185 && (insn2 & 0x0e00) == 0x0a00)
3186 ;
3187 else
3188 break;
3189 }
3190 else
3191 break;
3192 }
3193
3194 if (!found_return)
3195 return 0;
3196
3197 /* Since any instruction in the epilogue sequence, with the possible
3198 exception of return itself, updates the stack pointer, we need to
3199 scan backwards for at most one instruction. Try either a 16-bit or
3200 a 32-bit instruction. This is just a heuristic, so we do not worry
3201 too much about false positives. */
3202
3203 if (pc - 4 < func_start)
3204 return 0;
3205 if (target_read_memory (pc - 4, buf, 4))
3206 return 0;
3207
3208 insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3209 insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3210
3211 if (thumb_instruction_restores_sp (insn2))
3212 found_stack_adjust = 1;
3213 else if (insn == 0xe8bd) /* ldm.w sp!, <registers> */
3214 found_stack_adjust = 1;
3215 else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */
3216 && (insn2 & 0x0fff) == 0x0b04)
3217 found_stack_adjust = 1;
3218 else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */
3219 && (insn2 & 0x0e00) == 0x0a00)
3220 found_stack_adjust = 1;
3221
3222 return found_stack_adjust;
3223 }
3224
3225 static int
3226 arm_stack_frame_destroyed_p_1 (struct gdbarch *gdbarch, CORE_ADDR pc)
3227 {
3228 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3229 unsigned int insn;
3230 int found_return;
3231 CORE_ADDR func_start, func_end;
3232
3233 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3234 return 0;
3235
3236 /* We are in the epilogue if the previous instruction was a stack
3237 adjustment and the next instruction is a possible return (bx, mov
3238 pc, or pop). We could have to scan backwards to find the stack
3239 adjustment, or forwards to find the return, but this is a decent
3240 approximation. First scan forwards. */
3241
3242 found_return = 0;
3243 insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3244 if (bits (insn, 28, 31) != INST_NV)
3245 {
3246 if ((insn & 0x0ffffff0) == 0x012fff10)
3247 /* BX. */
3248 found_return = 1;
3249 else if ((insn & 0x0ffffff0) == 0x01a0f000)
3250 /* MOV PC. */
3251 found_return = 1;
3252 else if ((insn & 0x0fff0000) == 0x08bd0000
3253 && (insn & 0x0000c000) != 0)
3254 /* POP (LDMIA), including PC or LR. */
3255 found_return = 1;
3256 }
3257
3258 if (!found_return)
3259 return 0;
3260
3261 /* Scan backwards. This is just a heuristic, so do not worry about
3262 false positives from mode changes. */
3263
3264 if (pc < func_start + 4)
3265 return 0;
3266
3267 insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3268 if (arm_instruction_restores_sp (insn))
3269 return 1;
3270
3271 return 0;
3272 }
3273
3274 /* Implement the stack_frame_destroyed_p gdbarch method. */
3275
3276 static int
3277 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3278 {
3279 if (arm_pc_is_thumb (gdbarch, pc))
3280 return thumb_stack_frame_destroyed_p (gdbarch, pc);
3281 else
3282 return arm_stack_frame_destroyed_p_1 (gdbarch, pc);
3283 }
3284
3285 /* When arguments must be pushed onto the stack, they go on in reverse
3286 order. The code below implements a FILO (stack) to do this. */
3287
3288 struct stack_item
3289 {
3290 int len;
3291 struct stack_item *prev;
3292 gdb_byte *data;
3293 };
3294
3295 static struct stack_item *
3296 push_stack_item (struct stack_item *prev, const gdb_byte *contents, int len)
3297 {
3298 struct stack_item *si;
3299 si = XNEW (struct stack_item);
3300 si->data = (gdb_byte *) xmalloc (len);
3301 si->len = len;
3302 si->prev = prev;
3303 memcpy (si->data, contents, len);
3304 return si;
3305 }
3306
3307 static struct stack_item *
3308 pop_stack_item (struct stack_item *si)
3309 {
3310 struct stack_item *dead = si;
3311 si = si->prev;
3312 xfree (dead->data);
3313 xfree (dead);
3314 return si;
3315 }
3316
3317 /* Implement the gdbarch type alignment method, overrides the generic
3318 alignment algorithm for anything that is arm specific. */
3319
3320 static ULONGEST
3321 arm_type_align (gdbarch *gdbarch, struct type *t)
3322 {
3323 t = check_typedef (t);
3324 if (TYPE_CODE (t) == TYPE_CODE_ARRAY && TYPE_VECTOR (t))
3325 {
3326 /* Use the natural alignment for vector types (the same for
3327 scalar type), but the maximum alignment is 64-bit. */
3328 if (TYPE_LENGTH (t) > 8)
3329 return 8;
3330 else
3331 return TYPE_LENGTH (t);
3332 }
3333
3334 /* Allow the common code to calculate the alignment. */
3335 return 0;
3336 }
3337
3338 /* Possible base types for a candidate for passing and returning in
3339 VFP registers. */
3340
3341 enum arm_vfp_cprc_base_type
3342 {
3343 VFP_CPRC_UNKNOWN,
3344 VFP_CPRC_SINGLE,
3345 VFP_CPRC_DOUBLE,
3346 VFP_CPRC_VEC64,
3347 VFP_CPRC_VEC128
3348 };
3349
3350 /* The length of one element of base type B. */
3351
3352 static unsigned
3353 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3354 {
3355 switch (b)
3356 {
3357 case VFP_CPRC_SINGLE:
3358 return 4;
3359 case VFP_CPRC_DOUBLE:
3360 return 8;
3361 case VFP_CPRC_VEC64:
3362 return 8;
3363 case VFP_CPRC_VEC128:
3364 return 16;
3365 default:
3366 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3367 (int) b);
3368 }
3369 }
3370
3371 /* The character ('s', 'd' or 'q') for the type of VFP register used
3372 for passing base type B. */
3373
3374 static int
3375 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3376 {
3377 switch (b)
3378 {
3379 case VFP_CPRC_SINGLE:
3380 return 's';
3381 case VFP_CPRC_DOUBLE:
3382 return 'd';
3383 case VFP_CPRC_VEC64:
3384 return 'd';
3385 case VFP_CPRC_VEC128:
3386 return 'q';
3387 default:
3388 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3389 (int) b);
3390 }
3391 }
3392
3393 /* Determine whether T may be part of a candidate for passing and
3394 returning in VFP registers, ignoring the limit on the total number
3395 of components. If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3396 classification of the first valid component found; if it is not
3397 VFP_CPRC_UNKNOWN, all components must have the same classification
3398 as *BASE_TYPE. If it is found that T contains a type not permitted
3399 for passing and returning in VFP registers, a type differently
3400 classified from *BASE_TYPE, or two types differently classified
3401 from each other, return -1, otherwise return the total number of
3402 base-type elements found (possibly 0 in an empty structure or
3403 array). Vector types are not currently supported, matching the
3404 generic AAPCS support. */
3405
3406 static int
3407 arm_vfp_cprc_sub_candidate (struct type *t,
3408 enum arm_vfp_cprc_base_type *base_type)
3409 {
3410 t = check_typedef (t);
3411 switch (TYPE_CODE (t))
3412 {
3413 case TYPE_CODE_FLT:
3414 switch (TYPE_LENGTH (t))
3415 {
3416 case 4:
3417 if (*base_type == VFP_CPRC_UNKNOWN)
3418 *base_type = VFP_CPRC_SINGLE;
3419 else if (*base_type != VFP_CPRC_SINGLE)
3420 return -1;
3421 return 1;
3422
3423 case 8:
3424 if (*base_type == VFP_CPRC_UNKNOWN)
3425 *base_type = VFP_CPRC_DOUBLE;
3426 else if (*base_type != VFP_CPRC_DOUBLE)
3427 return -1;
3428 return 1;
3429
3430 default:
3431 return -1;
3432 }
3433 break;
3434
3435 case TYPE_CODE_COMPLEX:
3436 /* Arguments of complex T where T is one of the types float or
3437 double get treated as if they are implemented as:
3438
3439 struct complexT
3440 {
3441 T real;
3442 T imag;
3443 };
3444
3445 */
3446 switch (TYPE_LENGTH (t))
3447 {
3448 case 8:
3449 if (*base_type == VFP_CPRC_UNKNOWN)
3450 *base_type = VFP_CPRC_SINGLE;
3451 else if (*base_type != VFP_CPRC_SINGLE)
3452 return -1;
3453 return 2;
3454
3455 case 16:
3456 if (*base_type == VFP_CPRC_UNKNOWN)
3457 *base_type = VFP_CPRC_DOUBLE;
3458 else if (*base_type != VFP_CPRC_DOUBLE)
3459 return -1;
3460 return 2;
3461
3462 default:
3463 return -1;
3464 }
3465 break;
3466
3467 case TYPE_CODE_ARRAY:
3468 {
3469 if (TYPE_VECTOR (t))
3470 {
3471 /* A 64-bit or 128-bit containerized vector type are VFP
3472 CPRCs. */
3473 switch (TYPE_LENGTH (t))
3474 {
3475 case 8:
3476 if (*base_type == VFP_CPRC_UNKNOWN)
3477 *base_type = VFP_CPRC_VEC64;
3478 return 1;
3479 case 16:
3480 if (*base_type == VFP_CPRC_UNKNOWN)
3481 *base_type = VFP_CPRC_VEC128;
3482 return 1;
3483 default:
3484 return -1;
3485 }
3486 }
3487 else
3488 {
3489 int count;
3490 unsigned unitlen;
3491
3492 count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t),
3493 base_type);
3494 if (count == -1)
3495 return -1;
3496 if (TYPE_LENGTH (t) == 0)
3497 {
3498 gdb_assert (count == 0);
3499 return 0;
3500 }
3501 else if (count == 0)
3502 return -1;
3503 unitlen = arm_vfp_cprc_unit_length (*base_type);
3504 gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3505 return TYPE_LENGTH (t) / unitlen;
3506 }
3507 }
3508 break;
3509
3510 case TYPE_CODE_STRUCT:
3511 {
3512 int count = 0;
3513 unsigned unitlen;
3514 int i;
3515 for (i = 0; i < TYPE_NFIELDS (t); i++)
3516 {
3517 int sub_count = 0;
3518
3519 if (!field_is_static (&TYPE_FIELD (t, i)))
3520 sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3521 base_type);
3522 if (sub_count == -1)
3523 return -1;
3524 count += sub_count;
3525 }
3526 if (TYPE_LENGTH (t) == 0)
3527 {
3528 gdb_assert (count == 0);
3529 return 0;
3530 }
3531 else if (count == 0)
3532 return -1;
3533 unitlen = arm_vfp_cprc_unit_length (*base_type);
3534 if (TYPE_LENGTH (t) != unitlen * count)
3535 return -1;
3536 return count;
3537 }
3538
3539 case TYPE_CODE_UNION:
3540 {
3541 int count = 0;
3542 unsigned unitlen;
3543 int i;
3544 for (i = 0; i < TYPE_NFIELDS (t); i++)
3545 {
3546 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3547 base_type);
3548 if (sub_count == -1)
3549 return -1;
3550 count = (count > sub_count ? count : sub_count);
3551 }
3552 if (TYPE_LENGTH (t) == 0)
3553 {
3554 gdb_assert (count == 0);
3555 return 0;
3556 }
3557 else if (count == 0)
3558 return -1;
3559 unitlen = arm_vfp_cprc_unit_length (*base_type);
3560 if (TYPE_LENGTH (t) != unitlen * count)
3561 return -1;
3562 return count;
3563 }
3564
3565 default:
3566 break;
3567 }
3568
3569 return -1;
3570 }
3571
3572 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3573 if passed to or returned from a non-variadic function with the VFP
3574 ABI in effect. Return 1 if it is, 0 otherwise. If it is, set
3575 *BASE_TYPE to the base type for T and *COUNT to the number of
3576 elements of that base type before returning. */
3577
3578 static int
3579 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3580 int *count)
3581 {
3582 enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3583 int c = arm_vfp_cprc_sub_candidate (t, &b);
3584 if (c <= 0 || c > 4)
3585 return 0;
3586 *base_type = b;
3587 *count = c;
3588 return 1;
3589 }
3590
3591 /* Return 1 if the VFP ABI should be used for passing arguments to and
3592 returning values from a function of type FUNC_TYPE, 0
3593 otherwise. */
3594
3595 static int
3596 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3597 {
3598 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3599 /* Variadic functions always use the base ABI. Assume that functions
3600 without debug info are not variadic. */
3601 if (func_type && TYPE_VARARGS (check_typedef (func_type)))
3602 return 0;
3603 /* The VFP ABI is only supported as a variant of AAPCS. */
3604 if (tdep->arm_abi != ARM_ABI_AAPCS)
3605 return 0;
3606 return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3607 }
3608
3609 /* We currently only support passing parameters in integer registers, which
3610 conforms with GCC's default model, and VFP argument passing following
3611 the VFP variant of AAPCS. Several other variants exist and
3612 we should probably support some of them based on the selected ABI. */
3613
3614 static CORE_ADDR
3615 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3616 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3617 struct value **args, CORE_ADDR sp,
3618 function_call_return_method return_method,
3619 CORE_ADDR struct_addr)
3620 {
3621 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3622 int argnum;
3623 int argreg;
3624 int nstack;
3625 struct stack_item *si = NULL;
3626 int use_vfp_abi;
3627 struct type *ftype;
3628 unsigned vfp_regs_free = (1 << 16) - 1;
3629
3630 /* Determine the type of this function and whether the VFP ABI
3631 applies. */
3632 ftype = check_typedef (value_type (function));
3633 if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
3634 ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3635 use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3636
3637 /* Set the return address. For the ARM, the return breakpoint is
3638 always at BP_ADDR. */
3639 if (arm_pc_is_thumb (gdbarch, bp_addr))
3640 bp_addr |= 1;
3641 regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3642
3643 /* Walk through the list of args and determine how large a temporary
3644 stack is required. Need to take care here as structs may be
3645 passed on the stack, and we have to push them. */
3646 nstack = 0;
3647
3648 argreg = ARM_A1_REGNUM;
3649 nstack = 0;
3650
3651 /* The struct_return pointer occupies the first parameter
3652 passing register. */
3653 if (return_method == return_method_struct)
3654 {
3655 if (arm_debug)
3656 fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
3657 gdbarch_register_name (gdbarch, argreg),
3658 paddress (gdbarch, struct_addr));
3659 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3660 argreg++;
3661 }
3662
3663 for (argnum = 0; argnum < nargs; argnum++)
3664 {
3665 int len;
3666 struct type *arg_type;
3667 struct type *target_type;
3668 enum type_code typecode;
3669 const bfd_byte *val;
3670 int align;
3671 enum arm_vfp_cprc_base_type vfp_base_type;
3672 int vfp_base_count;
3673 int may_use_core_reg = 1;
3674
3675 arg_type = check_typedef (value_type (args[argnum]));
3676 len = TYPE_LENGTH (arg_type);
3677 target_type = TYPE_TARGET_TYPE (arg_type);
3678 typecode = TYPE_CODE (arg_type);
3679 val = value_contents (args[argnum]);
3680
3681 align = type_align (arg_type);
3682 /* Round alignment up to a whole number of words. */
3683 align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
3684 /* Different ABIs have different maximum alignments. */
3685 if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3686 {
3687 /* The APCS ABI only requires word alignment. */
3688 align = INT_REGISTER_SIZE;
3689 }
3690 else
3691 {
3692 /* The AAPCS requires at most doubleword alignment. */
3693 if (align > INT_REGISTER_SIZE * 2)
3694 align = INT_REGISTER_SIZE * 2;
3695 }
3696
3697 if (use_vfp_abi
3698 && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3699 &vfp_base_count))
3700 {
3701 int regno;
3702 int unit_length;
3703 int shift;
3704 unsigned mask;
3705
3706 /* Because this is a CPRC it cannot go in a core register or
3707 cause a core register to be skipped for alignment.
3708 Either it goes in VFP registers and the rest of this loop
3709 iteration is skipped for this argument, or it goes on the
3710 stack (and the stack alignment code is correct for this
3711 case). */
3712 may_use_core_reg = 0;
3713
3714 unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3715 shift = unit_length / 4;
3716 mask = (1 << (shift * vfp_base_count)) - 1;
3717 for (regno = 0; regno < 16; regno += shift)
3718 if (((vfp_regs_free >> regno) & mask) == mask)
3719 break;
3720
3721 if (regno < 16)
3722 {
3723 int reg_char;
3724 int reg_scaled;
3725 int i;
3726
3727 vfp_regs_free &= ~(mask << regno);
3728 reg_scaled = regno / shift;
3729 reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3730 for (i = 0; i < vfp_base_count; i++)
3731 {
3732 char name_buf[4];
3733 int regnum;
3734 if (reg_char == 'q')
3735 arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3736 val + i * unit_length);
3737 else
3738 {
3739 xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3740 reg_char, reg_scaled + i);
3741 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3742 strlen (name_buf));
3743 regcache->cooked_write (regnum, val + i * unit_length);
3744 }
3745 }
3746 continue;
3747 }
3748 else
3749 {
3750 /* This CPRC could not go in VFP registers, so all VFP
3751 registers are now marked as used. */
3752 vfp_regs_free = 0;
3753 }
3754 }
3755
3756 /* Push stack padding for dowubleword alignment. */
3757 if (nstack & (align - 1))
3758 {
3759 si = push_stack_item (si, val, INT_REGISTER_SIZE);
3760 nstack += INT_REGISTER_SIZE;
3761 }
3762
3763 /* Doubleword aligned quantities must go in even register pairs. */
3764 if (may_use_core_reg
3765 && argreg <= ARM_LAST_ARG_REGNUM
3766 && align > INT_REGISTER_SIZE
3767 && argreg & 1)
3768 argreg++;
3769
3770 /* If the argument is a pointer to a function, and it is a
3771 Thumb function, create a LOCAL copy of the value and set
3772 the THUMB bit in it. */
3773 if (TYPE_CODE_PTR == typecode
3774 && target_type != NULL
3775 && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3776 {
3777 CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3778 if (arm_pc_is_thumb (gdbarch, regval))
3779 {
3780 bfd_byte *copy = (bfd_byte *) alloca (len);
3781 store_unsigned_integer (copy, len, byte_order,
3782 MAKE_THUMB_ADDR (regval));
3783 val = copy;
3784 }
3785 }
3786
3787 /* Copy the argument to general registers or the stack in
3788 register-sized pieces. Large arguments are split between
3789 registers and stack. */
3790 while (len > 0)
3791 {
3792 int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3793 CORE_ADDR regval
3794 = extract_unsigned_integer (val, partial_len, byte_order);
3795
3796 if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3797 {
3798 /* The argument is being passed in a general purpose
3799 register. */
3800 if (byte_order == BFD_ENDIAN_BIG)
3801 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3802 if (arm_debug)
3803 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3804 argnum,
3805 gdbarch_register_name
3806 (gdbarch, argreg),
3807 phex (regval, INT_REGISTER_SIZE));
3808 regcache_cooked_write_unsigned (regcache, argreg, regval);
3809 argreg++;
3810 }
3811 else
3812 {
3813 gdb_byte buf[INT_REGISTER_SIZE];
3814
3815 memset (buf, 0, sizeof (buf));
3816 store_unsigned_integer (buf, partial_len, byte_order, regval);
3817
3818 /* Push the arguments onto the stack. */
3819 if (arm_debug)
3820 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3821 argnum, nstack);
3822 si = push_stack_item (si, buf, INT_REGISTER_SIZE);
3823 nstack += INT_REGISTER_SIZE;
3824 }
3825
3826 len -= partial_len;
3827 val += partial_len;
3828 }
3829 }
3830 /* If we have an odd number of words to push, then decrement the stack
3831 by one word now, so first stack argument will be dword aligned. */
3832 if (nstack & 4)
3833 sp -= 4;
3834
3835 while (si)
3836 {
3837 sp -= si->len;
3838 write_memory (sp, si->data, si->len);
3839 si = pop_stack_item (si);
3840 }
3841
3842 /* Finally, update teh SP register. */
3843 regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3844
3845 return sp;
3846 }
3847
3848
3849 /* Always align the frame to an 8-byte boundary. This is required on
3850 some platforms and harmless on the rest. */
3851
3852 static CORE_ADDR
3853 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3854 {
3855 /* Align the stack to eight bytes. */
3856 return sp & ~ (CORE_ADDR) 7;
3857 }
3858
3859 static void
3860 print_fpu_flags (struct ui_file *file, int flags)
3861 {
3862 if (flags & (1 << 0))
3863 fputs_filtered ("IVO ", file);
3864 if (flags & (1 << 1))
3865 fputs_filtered ("DVZ ", file);
3866 if (flags & (1 << 2))
3867 fputs_filtered ("OFL ", file);
3868 if (flags & (1 << 3))
3869 fputs_filtered ("UFL ", file);
3870 if (flags & (1 << 4))
3871 fputs_filtered ("INX ", file);
3872 fputc_filtered ('\n', file);
3873 }
3874
3875 /* Print interesting information about the floating point processor
3876 (if present) or emulator. */
3877 static void
3878 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3879 struct frame_info *frame, const char *args)
3880 {
3881 unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3882 int type;
3883
3884 type = (status >> 24) & 127;
3885 if (status & (1 << 31))
3886 fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3887 else
3888 fprintf_filtered (file, _("Software FPU type %d\n"), type);
3889 /* i18n: [floating point unit] mask */
3890 fputs_filtered (_("mask: "), file);
3891 print_fpu_flags (file, status >> 16);
3892 /* i18n: [floating point unit] flags */
3893 fputs_filtered (_("flags: "), file);
3894 print_fpu_flags (file, status);
3895 }
3896
3897 /* Construct the ARM extended floating point type. */
3898 static struct type *
3899 arm_ext_type (struct gdbarch *gdbarch)
3900 {
3901 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3902
3903 if (!tdep->arm_ext_type)
3904 tdep->arm_ext_type
3905 = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
3906 floatformats_arm_ext);
3907
3908 return tdep->arm_ext_type;
3909 }
3910
3911 static struct type *
3912 arm_neon_double_type (struct gdbarch *gdbarch)
3913 {
3914 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3915
3916 if (tdep->neon_double_type == NULL)
3917 {
3918 struct type *t, *elem;
3919
3920 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
3921 TYPE_CODE_UNION);
3922 elem = builtin_type (gdbarch)->builtin_uint8;
3923 append_composite_type_field (t, "u8", init_vector_type (elem, 8));
3924 elem = builtin_type (gdbarch)->builtin_uint16;
3925 append_composite_type_field (t, "u16", init_vector_type (elem, 4));
3926 elem = builtin_type (gdbarch)->builtin_uint32;
3927 append_composite_type_field (t, "u32", init_vector_type (elem, 2));
3928 elem = builtin_type (gdbarch)->builtin_uint64;
3929 append_composite_type_field (t, "u64", elem);
3930 elem = builtin_type (gdbarch)->builtin_float;
3931 append_composite_type_field (t, "f32", init_vector_type (elem, 2));
3932 elem = builtin_type (gdbarch)->builtin_double;
3933 append_composite_type_field (t, "f64", elem);
3934
3935 TYPE_VECTOR (t) = 1;
3936 TYPE_NAME (t) = "neon_d";
3937 tdep->neon_double_type = t;
3938 }
3939
3940 return tdep->neon_double_type;
3941 }
3942
3943 /* FIXME: The vector types are not correctly ordered on big-endian
3944 targets. Just as s0 is the low bits of d0, d0[0] is also the low
3945 bits of d0 - regardless of what unit size is being held in d0. So
3946 the offset of the first uint8 in d0 is 7, but the offset of the
3947 first float is 4. This code works as-is for little-endian
3948 targets. */
3949
3950 static struct type *
3951 arm_neon_quad_type (struct gdbarch *gdbarch)
3952 {
3953 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3954
3955 if (tdep->neon_quad_type == NULL)
3956 {
3957 struct type *t, *elem;
3958
3959 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
3960 TYPE_CODE_UNION);
3961 elem = builtin_type (gdbarch)->builtin_uint8;
3962 append_composite_type_field (t, "u8", init_vector_type (elem, 16));
3963 elem = builtin_type (gdbarch)->builtin_uint16;
3964 append_composite_type_field (t, "u16", init_vector_type (elem, 8));
3965 elem = builtin_type (gdbarch)->builtin_uint32;
3966 append_composite_type_field (t, "u32", init_vector_type (elem, 4));
3967 elem = builtin_type (gdbarch)->builtin_uint64;
3968 append_composite_type_field (t, "u64", init_vector_type (elem, 2));
3969 elem = builtin_type (gdbarch)->builtin_float;
3970 append_composite_type_field (t, "f32", init_vector_type (elem, 4));
3971 elem = builtin_type (gdbarch)->builtin_double;
3972 append_composite_type_field (t, "f64", init_vector_type (elem, 2));
3973
3974 TYPE_VECTOR (t) = 1;
3975 TYPE_NAME (t) = "neon_q";
3976 tdep->neon_quad_type = t;
3977 }
3978
3979 return tdep->neon_quad_type;
3980 }
3981
3982 /* Return the GDB type object for the "standard" data type of data in
3983 register N. */
3984
3985 static struct type *
3986 arm_register_type (struct gdbarch *gdbarch, int regnum)
3987 {
3988 int num_regs = gdbarch_num_regs (gdbarch);
3989
3990 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
3991 && regnum >= num_regs && regnum < num_regs + 32)
3992 return builtin_type (gdbarch)->builtin_float;
3993
3994 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
3995 && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
3996 return arm_neon_quad_type (gdbarch);
3997
3998 /* If the target description has register information, we are only
3999 in this function so that we can override the types of
4000 double-precision registers for NEON. */
4001 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4002 {
4003 struct type *t = tdesc_register_type (gdbarch, regnum);
4004
4005 if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4006 && TYPE_CODE (t) == TYPE_CODE_FLT
4007 && gdbarch_tdep (gdbarch)->have_neon)
4008 return arm_neon_double_type (gdbarch);
4009 else
4010 return t;
4011 }
4012
4013 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4014 {
4015 if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4016 return builtin_type (gdbarch)->builtin_void;
4017
4018 return arm_ext_type (gdbarch);
4019 }
4020 else if (regnum == ARM_SP_REGNUM)
4021 return builtin_type (gdbarch)->builtin_data_ptr;
4022 else if (regnum == ARM_PC_REGNUM)
4023 return builtin_type (gdbarch)->builtin_func_ptr;
4024 else if (regnum >= ARRAY_SIZE (arm_register_names))
4025 /* These registers are only supported on targets which supply
4026 an XML description. */
4027 return builtin_type (gdbarch)->builtin_int0;
4028 else
4029 return builtin_type (gdbarch)->builtin_uint32;
4030 }
4031
4032 /* Map a DWARF register REGNUM onto the appropriate GDB register
4033 number. */
4034
4035 static int
4036 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4037 {
4038 /* Core integer regs. */
4039 if (reg >= 0 && reg <= 15)
4040 return reg;
4041
4042 /* Legacy FPA encoding. These were once used in a way which
4043 overlapped with VFP register numbering, so their use is
4044 discouraged, but GDB doesn't support the ARM toolchain
4045 which used them for VFP. */
4046 if (reg >= 16 && reg <= 23)
4047 return ARM_F0_REGNUM + reg - 16;
4048
4049 /* New assignments for the FPA registers. */
4050 if (reg >= 96 && reg <= 103)
4051 return ARM_F0_REGNUM + reg - 96;
4052
4053 /* WMMX register assignments. */
4054 if (reg >= 104 && reg <= 111)
4055 return ARM_WCGR0_REGNUM + reg - 104;
4056
4057 if (reg >= 112 && reg <= 127)
4058 return ARM_WR0_REGNUM + reg - 112;
4059
4060 if (reg >= 192 && reg <= 199)
4061 return ARM_WC0_REGNUM + reg - 192;
4062
4063 /* VFP v2 registers. A double precision value is actually
4064 in d1 rather than s2, but the ABI only defines numbering
4065 for the single precision registers. This will "just work"
4066 in GDB for little endian targets (we'll read eight bytes,
4067 starting in s0 and then progressing to s1), but will be
4068 reversed on big endian targets with VFP. This won't
4069 be a problem for the new Neon quad registers; you're supposed
4070 to use DW_OP_piece for those. */
4071 if (reg >= 64 && reg <= 95)
4072 {
4073 char name_buf[4];
4074
4075 xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4076 return user_reg_map_name_to_regnum (gdbarch, name_buf,
4077 strlen (name_buf));
4078 }
4079
4080 /* VFP v3 / Neon registers. This range is also used for VFP v2
4081 registers, except that it now describes d0 instead of s0. */
4082 if (reg >= 256 && reg <= 287)
4083 {
4084 char name_buf[4];
4085
4086 xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4087 return user_reg_map_name_to_regnum (gdbarch, name_buf,
4088 strlen (name_buf));
4089 }
4090
4091 return -1;
4092 }
4093
4094 /* Map GDB internal REGNUM onto the Arm simulator register numbers. */
4095 static int
4096 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4097 {
4098 int reg = regnum;
4099 gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4100
4101 if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4102 return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4103
4104 if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4105 return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4106
4107 if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4108 return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4109
4110 if (reg < NUM_GREGS)
4111 return SIM_ARM_R0_REGNUM + reg;
4112 reg -= NUM_GREGS;
4113
4114 if (reg < NUM_FREGS)
4115 return SIM_ARM_FP0_REGNUM + reg;
4116 reg -= NUM_FREGS;
4117
4118 if (reg < NUM_SREGS)
4119 return SIM_ARM_FPS_REGNUM + reg;
4120 reg -= NUM_SREGS;
4121
4122 internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4123 }
4124
4125 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
4126 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
4127 NULL if an error occurs. BUF is freed. */
4128
4129 static gdb_byte *
4130 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
4131 int old_len, int new_len)
4132 {
4133 gdb_byte *new_buf;
4134 int bytes_to_read = new_len - old_len;
4135
4136 new_buf = (gdb_byte *) xmalloc (new_len);
4137 memcpy (new_buf + bytes_to_read, buf, old_len);
4138 xfree (buf);
4139 if (target_read_code (endaddr - new_len, new_buf, bytes_to_read) != 0)
4140 {
4141 xfree (new_buf);
4142 return NULL;
4143 }
4144 return new_buf;
4145 }
4146
4147 /* An IT block is at most the 2-byte IT instruction followed by
4148 four 4-byte instructions. The furthest back we must search to
4149 find an IT block that affects the current instruction is thus
4150 2 + 3 * 4 == 14 bytes. */
4151 #define MAX_IT_BLOCK_PREFIX 14
4152
4153 /* Use a quick scan if there are more than this many bytes of
4154 code. */
4155 #define IT_SCAN_THRESHOLD 32
4156
4157 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
4158 A breakpoint in an IT block may not be hit, depending on the
4159 condition flags. */
4160 static CORE_ADDR
4161 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
4162 {
4163 gdb_byte *buf;
4164 char map_type;
4165 CORE_ADDR boundary, func_start;
4166 int buf_len;
4167 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
4168 int i, any, last_it, last_it_count;
4169
4170 /* If we are using BKPT breakpoints, none of this is necessary. */
4171 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
4172 return bpaddr;
4173
4174 /* ARM mode does not have this problem. */
4175 if (!arm_pc_is_thumb (gdbarch, bpaddr))
4176 return bpaddr;
4177
4178 /* We are setting a breakpoint in Thumb code that could potentially
4179 contain an IT block. The first step is to find how much Thumb
4180 code there is; we do not need to read outside of known Thumb
4181 sequences. */
4182 map_type = arm_find_mapping_symbol (bpaddr, &boundary);
4183 if (map_type == 0)
4184 /* Thumb-2 code must have mapping symbols to have a chance. */
4185 return bpaddr;
4186
4187 bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
4188
4189 if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
4190 && func_start > boundary)
4191 boundary = func_start;
4192
4193 /* Search for a candidate IT instruction. We have to do some fancy
4194 footwork to distinguish a real IT instruction from the second
4195 half of a 32-bit instruction, but there is no need for that if
4196 there's no candidate. */
4197 buf_len = std::min (bpaddr - boundary, (CORE_ADDR) MAX_IT_BLOCK_PREFIX);
4198 if (buf_len == 0)
4199 /* No room for an IT instruction. */
4200 return bpaddr;
4201
4202 buf = (gdb_byte *) xmalloc (buf_len);
4203 if (target_read_code (bpaddr - buf_len, buf, buf_len) != 0)
4204 return bpaddr;
4205 any = 0;
4206 for (i = 0; i < buf_len; i += 2)
4207 {
4208 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4209 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4210 {
4211 any = 1;
4212 break;
4213 }
4214 }
4215
4216 if (any == 0)
4217 {
4218 xfree (buf);
4219 return bpaddr;
4220 }
4221
4222 /* OK, the code bytes before this instruction contain at least one
4223 halfword which resembles an IT instruction. We know that it's
4224 Thumb code, but there are still two possibilities. Either the
4225 halfword really is an IT instruction, or it is the second half of
4226 a 32-bit Thumb instruction. The only way we can tell is to
4227 scan forwards from a known instruction boundary. */
4228 if (bpaddr - boundary > IT_SCAN_THRESHOLD)
4229 {
4230 int definite;
4231
4232 /* There's a lot of code before this instruction. Start with an
4233 optimistic search; it's easy to recognize halfwords that can
4234 not be the start of a 32-bit instruction, and use that to
4235 lock on to the instruction boundaries. */
4236 buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
4237 if (buf == NULL)
4238 return bpaddr;
4239 buf_len = IT_SCAN_THRESHOLD;
4240
4241 definite = 0;
4242 for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
4243 {
4244 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4245 if (thumb_insn_size (inst1) == 2)
4246 {
4247 definite = 1;
4248 break;
4249 }
4250 }
4251
4252 /* At this point, if DEFINITE, BUF[I] is the first place we
4253 are sure that we know the instruction boundaries, and it is far
4254 enough from BPADDR that we could not miss an IT instruction
4255 affecting BPADDR. If ! DEFINITE, give up - start from a
4256 known boundary. */
4257 if (! definite)
4258 {
4259 buf = extend_buffer_earlier (buf, bpaddr, buf_len,
4260 bpaddr - boundary);
4261 if (buf == NULL)
4262 return bpaddr;
4263 buf_len = bpaddr - boundary;
4264 i = 0;
4265 }
4266 }
4267 else
4268 {
4269 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
4270 if (buf == NULL)
4271 return bpaddr;
4272 buf_len = bpaddr - boundary;
4273 i = 0;
4274 }
4275
4276 /* Scan forwards. Find the last IT instruction before BPADDR. */
4277 last_it = -1;
4278 last_it_count = 0;
4279 while (i < buf_len)
4280 {
4281 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
4282 last_it_count--;
4283 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4284 {
4285 last_it = i;
4286 if (inst1 & 0x0001)
4287 last_it_count = 4;
4288 else if (inst1 & 0x0002)
4289 last_it_count = 3;
4290 else if (inst1 & 0x0004)
4291 last_it_count = 2;
4292 else
4293 last_it_count = 1;
4294 }
4295 i += thumb_insn_size (inst1);
4296 }
4297
4298 xfree (buf);
4299
4300 if (last_it == -1)
4301 /* There wasn't really an IT instruction after all. */
4302 return bpaddr;
4303
4304 if (last_it_count < 1)
4305 /* It was too far away. */
4306 return bpaddr;
4307
4308 /* This really is a trouble spot. Move the breakpoint to the IT
4309 instruction. */
4310 return bpaddr - buf_len + last_it;
4311 }
4312
4313 /* ARM displaced stepping support.
4314
4315 Generally ARM displaced stepping works as follows:
4316
4317 1. When an instruction is to be single-stepped, it is first decoded by
4318 arm_process_displaced_insn. Depending on the type of instruction, it is
4319 then copied to a scratch location, possibly in a modified form. The
4320 copy_* set of functions performs such modification, as necessary. A
4321 breakpoint is placed after the modified instruction in the scratch space
4322 to return control to GDB. Note in particular that instructions which
4323 modify the PC will no longer do so after modification.
4324
4325 2. The instruction is single-stepped, by setting the PC to the scratch
4326 location address, and resuming. Control returns to GDB when the
4327 breakpoint is hit.
4328
4329 3. A cleanup function (cleanup_*) is called corresponding to the copy_*
4330 function used for the current instruction. This function's job is to
4331 put the CPU/memory state back to what it would have been if the
4332 instruction had been executed unmodified in its original location. */
4333
4334 /* NOP instruction (mov r0, r0). */
4335 #define ARM_NOP 0xe1a00000
4336 #define THUMB_NOP 0x4600
4337
4338 /* Helper for register reads for displaced stepping. In particular, this
4339 returns the PC as it would be seen by the instruction at its original
4340 location. */
4341
4342 ULONGEST
4343 displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4344 int regno)
4345 {
4346 ULONGEST ret;
4347 CORE_ADDR from = dsc->insn_addr;
4348
4349 if (regno == ARM_PC_REGNUM)
4350 {
4351 /* Compute pipeline offset:
4352 - When executing an ARM instruction, PC reads as the address of the
4353 current instruction plus 8.
4354 - When executing a Thumb instruction, PC reads as the address of the
4355 current instruction plus 4. */
4356
4357 if (!dsc->is_thumb)
4358 from += 8;
4359 else
4360 from += 4;
4361
4362 if (debug_displaced)
4363 fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
4364 (unsigned long) from);
4365 return (ULONGEST) from;
4366 }
4367 else
4368 {
4369 regcache_cooked_read_unsigned (regs, regno, &ret);
4370 if (debug_displaced)
4371 fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
4372 regno, (unsigned long) ret);
4373 return ret;
4374 }
4375 }
4376
4377 static int
4378 displaced_in_arm_mode (struct regcache *regs)
4379 {
4380 ULONGEST ps;
4381 ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4382
4383 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4384
4385 return (ps & t_bit) == 0;
4386 }
4387
4388 /* Write to the PC as from a branch instruction. */
4389
4390 static void
4391 branch_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4392 ULONGEST val)
4393 {
4394 if (!dsc->is_thumb)
4395 /* Note: If bits 0/1 are set, this branch would be unpredictable for
4396 architecture versions < 6. */
4397 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4398 val & ~(ULONGEST) 0x3);
4399 else
4400 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
4401 val & ~(ULONGEST) 0x1);
4402 }
4403
4404 /* Write to the PC as from a branch-exchange instruction. */
4405
4406 static void
4407 bx_write_pc (struct regcache *regs, ULONGEST val)
4408 {
4409 ULONGEST ps;
4410 ULONGEST t_bit = arm_psr_thumb_bit (regs->arch ());
4411
4412 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
4413
4414 if ((val & 1) == 1)
4415 {
4416 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
4417 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
4418 }
4419 else if ((val & 2) == 0)
4420 {
4421 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4422 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
4423 }
4424 else
4425 {
4426 /* Unpredictable behaviour. Try to do something sensible (switch to ARM
4427 mode, align dest to 4 bytes). */
4428 warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
4429 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
4430 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
4431 }
4432 }
4433
4434 /* Write to the PC as if from a load instruction. */
4435
4436 static void
4437 load_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4438 ULONGEST val)
4439 {
4440 if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
4441 bx_write_pc (regs, val);
4442 else
4443 branch_write_pc (regs, dsc, val);
4444 }
4445
4446 /* Write to the PC as if from an ALU instruction. */
4447
4448 static void
4449 alu_write_pc (struct regcache *regs, arm_displaced_step_closure *dsc,
4450 ULONGEST val)
4451 {
4452 if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
4453 bx_write_pc (regs, val);
4454 else
4455 branch_write_pc (regs, dsc, val);
4456 }
4457
4458 /* Helper for writing to registers for displaced stepping. Writing to the PC
4459 has a varying effects depending on the instruction which does the write:
4460 this is controlled by the WRITE_PC argument. */
4461
4462 void
4463 displaced_write_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
4464 int regno, ULONGEST val, enum pc_write_style write_pc)
4465 {
4466 if (regno == ARM_PC_REGNUM)
4467 {
4468 if (debug_displaced)
4469 fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
4470 (unsigned long) val);
4471 switch (write_pc)
4472 {
4473 case BRANCH_WRITE_PC:
4474 branch_write_pc (regs, dsc, val);
4475 break;
4476
4477 case BX_WRITE_PC:
4478 bx_write_pc (regs, val);
4479 break;
4480
4481 case LOAD_WRITE_PC:
4482 load_write_pc (regs, dsc, val);
4483 break;
4484
4485 case ALU_WRITE_PC:
4486 alu_write_pc (regs, dsc, val);
4487 break;
4488
4489 case CANNOT_WRITE_PC:
4490 warning (_("Instruction wrote to PC in an unexpected way when "
4491 "single-stepping"));
4492 break;
4493
4494 default:
4495 internal_error (__FILE__, __LINE__,
4496 _("Invalid argument to displaced_write_reg"));
4497 }
4498
4499 dsc->wrote_to_pc = 1;
4500 }
4501 else
4502 {
4503 if (debug_displaced)
4504 fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
4505 regno, (unsigned long) val);
4506 regcache_cooked_write_unsigned (regs, regno, val);
4507 }
4508 }
4509
4510 /* This function is used to concisely determine if an instruction INSN
4511 references PC. Register fields of interest in INSN should have the
4512 corresponding fields of BITMASK set to 0b1111. The function
4513 returns return 1 if any of these fields in INSN reference the PC
4514 (also 0b1111, r15), else it returns 0. */
4515
4516 static int
4517 insn_references_pc (uint32_t insn, uint32_t bitmask)
4518 {
4519 uint32_t lowbit = 1;
4520
4521 while (bitmask != 0)
4522 {
4523 uint32_t mask;
4524
4525 for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
4526 ;
4527
4528 if (!lowbit)
4529 break;
4530
4531 mask = lowbit * 0xf;
4532
4533 if ((insn & mask) == mask)
4534 return 1;
4535
4536 bitmask &= ~mask;
4537 }
4538
4539 return 0;
4540 }
4541
4542 /* The simplest copy function. Many instructions have the same effect no
4543 matter what address they are executed at: in those cases, use this. */
4544
4545 static int
4546 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
4547 const char *iname, arm_displaced_step_closure *dsc)
4548 {
4549 if (debug_displaced)
4550 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
4551 "opcode/class '%s' unmodified\n", (unsigned long) insn,
4552 iname);
4553
4554 dsc->modinsn[0] = insn;
4555
4556 return 0;
4557 }
4558
4559 static int
4560 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
4561 uint16_t insn2, const char *iname,
4562 arm_displaced_step_closure *dsc)
4563 {
4564 if (debug_displaced)
4565 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
4566 "opcode/class '%s' unmodified\n", insn1, insn2,
4567 iname);
4568
4569 dsc->modinsn[0] = insn1;
4570 dsc->modinsn[1] = insn2;
4571 dsc->numinsns = 2;
4572
4573 return 0;
4574 }
4575
4576 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
4577 modification. */
4578 static int
4579 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, uint16_t insn,
4580 const char *iname,
4581 arm_displaced_step_closure *dsc)
4582 {
4583 if (debug_displaced)
4584 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
4585 "opcode/class '%s' unmodified\n", insn,
4586 iname);
4587
4588 dsc->modinsn[0] = insn;
4589
4590 return 0;
4591 }
4592
4593 /* Preload instructions with immediate offset. */
4594
4595 static void
4596 cleanup_preload (struct gdbarch *gdbarch,
4597 struct regcache *regs, arm_displaced_step_closure *dsc)
4598 {
4599 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4600 if (!dsc->u.preload.immed)
4601 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4602 }
4603
4604 static void
4605 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
4606 arm_displaced_step_closure *dsc, unsigned int rn)
4607 {
4608 ULONGEST rn_val;
4609 /* Preload instructions:
4610
4611 {pli/pld} [rn, #+/-imm]
4612 ->
4613 {pli/pld} [r0, #+/-imm]. */
4614
4615 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4616 rn_val = displaced_read_reg (regs, dsc, rn);
4617 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4618 dsc->u.preload.immed = 1;
4619
4620 dsc->cleanup = &cleanup_preload;
4621 }
4622
4623 static int
4624 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4625 arm_displaced_step_closure *dsc)
4626 {
4627 unsigned int rn = bits (insn, 16, 19);
4628
4629 if (!insn_references_pc (insn, 0x000f0000ul))
4630 return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
4631
4632 if (debug_displaced)
4633 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4634 (unsigned long) insn);
4635
4636 dsc->modinsn[0] = insn & 0xfff0ffff;
4637
4638 install_preload (gdbarch, regs, dsc, rn);
4639
4640 return 0;
4641 }
4642
4643 static int
4644 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
4645 struct regcache *regs, arm_displaced_step_closure *dsc)
4646 {
4647 unsigned int rn = bits (insn1, 0, 3);
4648 unsigned int u_bit = bit (insn1, 7);
4649 int imm12 = bits (insn2, 0, 11);
4650 ULONGEST pc_val;
4651
4652 if (rn != ARM_PC_REGNUM)
4653 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
4654
4655 /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
4656 PLD (literal) Encoding T1. */
4657 if (debug_displaced)
4658 fprintf_unfiltered (gdb_stdlog,
4659 "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
4660 (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
4661 imm12);
4662
4663 if (!u_bit)
4664 imm12 = -1 * imm12;
4665
4666 /* Rewrite instruction {pli/pld} PC imm12 into:
4667 Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
4668
4669 {pli/pld} [r0, r1]
4670
4671 Cleanup: r0 <- tmp[0], r1 <- tmp[1]. */
4672
4673 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4674 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4675
4676 pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
4677
4678 displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
4679 displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
4680 dsc->u.preload.immed = 0;
4681
4682 /* {pli/pld} [r0, r1] */
4683 dsc->modinsn[0] = insn1 & 0xfff0;
4684 dsc->modinsn[1] = 0xf001;
4685 dsc->numinsns = 2;
4686
4687 dsc->cleanup = &cleanup_preload;
4688 return 0;
4689 }
4690
4691 /* Preload instructions with register offset. */
4692
4693 static void
4694 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
4695 arm_displaced_step_closure *dsc, unsigned int rn,
4696 unsigned int rm)
4697 {
4698 ULONGEST rn_val, rm_val;
4699
4700 /* Preload register-offset instructions:
4701
4702 {pli/pld} [rn, rm {, shift}]
4703 ->
4704 {pli/pld} [r0, r1 {, shift}]. */
4705
4706 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4707 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
4708 rn_val = displaced_read_reg (regs, dsc, rn);
4709 rm_val = displaced_read_reg (regs, dsc, rm);
4710 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4711 displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
4712 dsc->u.preload.immed = 0;
4713
4714 dsc->cleanup = &cleanup_preload;
4715 }
4716
4717 static int
4718 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
4719 struct regcache *regs,
4720 arm_displaced_step_closure *dsc)
4721 {
4722 unsigned int rn = bits (insn, 16, 19);
4723 unsigned int rm = bits (insn, 0, 3);
4724
4725
4726 if (!insn_references_pc (insn, 0x000f000ful))
4727 return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
4728
4729 if (debug_displaced)
4730 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
4731 (unsigned long) insn);
4732
4733 dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
4734
4735 install_preload_reg (gdbarch, regs, dsc, rn, rm);
4736 return 0;
4737 }
4738
4739 /* Copy/cleanup coprocessor load and store instructions. */
4740
4741 static void
4742 cleanup_copro_load_store (struct gdbarch *gdbarch,
4743 struct regcache *regs,
4744 arm_displaced_step_closure *dsc)
4745 {
4746 ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
4747
4748 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4749
4750 if (dsc->u.ldst.writeback)
4751 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
4752 }
4753
4754 static void
4755 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
4756 arm_displaced_step_closure *dsc,
4757 int writeback, unsigned int rn)
4758 {
4759 ULONGEST rn_val;
4760
4761 /* Coprocessor load/store instructions:
4762
4763 {stc/stc2} [<Rn>, #+/-imm] (and other immediate addressing modes)
4764 ->
4765 {stc/stc2} [r0, #+/-imm].
4766
4767 ldc/ldc2 are handled identically. */
4768
4769 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
4770 rn_val = displaced_read_reg (regs, dsc, rn);
4771 /* PC should be 4-byte aligned. */
4772 rn_val = rn_val & 0xfffffffc;
4773 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
4774
4775 dsc->u.ldst.writeback = writeback;
4776 dsc->u.ldst.rn = rn;
4777
4778 dsc->cleanup = &cleanup_copro_load_store;
4779 }
4780
4781 static int
4782 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
4783 struct regcache *regs,
4784 arm_displaced_step_closure *dsc)
4785 {
4786 unsigned int rn = bits (insn, 16, 19);
4787
4788 if (!insn_references_pc (insn, 0x000f0000ul))
4789 return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
4790
4791 if (debug_displaced)
4792 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4793 "load/store insn %.8lx\n", (unsigned long) insn);
4794
4795 dsc->modinsn[0] = insn & 0xfff0ffff;
4796
4797 install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
4798
4799 return 0;
4800 }
4801
4802 static int
4803 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
4804 uint16_t insn2, struct regcache *regs,
4805 arm_displaced_step_closure *dsc)
4806 {
4807 unsigned int rn = bits (insn1, 0, 3);
4808
4809 if (rn != ARM_PC_REGNUM)
4810 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
4811 "copro load/store", dsc);
4812
4813 if (debug_displaced)
4814 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
4815 "load/store insn %.4x%.4x\n", insn1, insn2);
4816
4817 dsc->modinsn[0] = insn1 & 0xfff0;
4818 dsc->modinsn[1] = insn2;
4819 dsc->numinsns = 2;
4820
4821 /* This function is called for copying instruction LDC/LDC2/VLDR, which
4822 doesn't support writeback, so pass 0. */
4823 install_copro_load_store (gdbarch, regs, dsc, 0, rn);
4824
4825 return 0;
4826 }
4827
4828 /* Clean up branch instructions (actually perform the branch, by setting
4829 PC). */
4830
4831 static void
4832 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
4833 arm_displaced_step_closure *dsc)
4834 {
4835 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
4836 int branch_taken = condition_true (dsc->u.branch.cond, status);
4837 enum pc_write_style write_pc = dsc->u.branch.exchange
4838 ? BX_WRITE_PC : BRANCH_WRITE_PC;
4839
4840 if (!branch_taken)
4841 return;
4842
4843 if (dsc->u.branch.link)
4844 {
4845 /* The value of LR should be the next insn of current one. In order
4846 not to confuse logic hanlding later insn `bx lr', if current insn mode
4847 is Thumb, the bit 0 of LR value should be set to 1. */
4848 ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
4849
4850 if (dsc->is_thumb)
4851 next_insn_addr |= 0x1;
4852
4853 displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
4854 CANNOT_WRITE_PC);
4855 }
4856
4857 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
4858 }
4859
4860 /* Copy B/BL/BLX instructions with immediate destinations. */
4861
4862 static void
4863 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
4864 arm_displaced_step_closure *dsc,
4865 unsigned int cond, int exchange, int link, long offset)
4866 {
4867 /* Implement "BL<cond> <label>" as:
4868
4869 Preparation: cond <- instruction condition
4870 Insn: mov r0, r0 (nop)
4871 Cleanup: if (condition true) { r14 <- pc; pc <- label }.
4872
4873 B<cond> similar, but don't set r14 in cleanup. */
4874
4875 dsc->u.branch.cond = cond;
4876 dsc->u.branch.link = link;
4877 dsc->u.branch.exchange = exchange;
4878
4879 dsc->u.branch.dest = dsc->insn_addr;
4880 if (link && exchange)
4881 /* For BLX, offset is computed from the Align (PC, 4). */
4882 dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
4883
4884 if (dsc->is_thumb)
4885 dsc->u.branch.dest += 4 + offset;
4886 else
4887 dsc->u.branch.dest += 8 + offset;
4888
4889 dsc->cleanup = &cleanup_branch;
4890 }
4891 static int
4892 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
4893 struct regcache *regs, arm_displaced_step_closure *dsc)
4894 {
4895 unsigned int cond = bits (insn, 28, 31);
4896 int exchange = (cond == 0xf);
4897 int link = exchange || bit (insn, 24);
4898 long offset;
4899
4900 if (debug_displaced)
4901 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
4902 "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
4903 (unsigned long) insn);
4904 if (exchange)
4905 /* For BLX, set bit 0 of the destination. The cleanup_branch function will
4906 then arrange the switch into Thumb mode. */
4907 offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
4908 else
4909 offset = bits (insn, 0, 23) << 2;
4910
4911 if (bit (offset, 25))
4912 offset = offset | ~0x3ffffff;
4913
4914 dsc->modinsn[0] = ARM_NOP;
4915
4916 install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4917 return 0;
4918 }
4919
4920 static int
4921 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
4922 uint16_t insn2, struct regcache *regs,
4923 arm_displaced_step_closure *dsc)
4924 {
4925 int link = bit (insn2, 14);
4926 int exchange = link && !bit (insn2, 12);
4927 int cond = INST_AL;
4928 long offset = 0;
4929 int j1 = bit (insn2, 13);
4930 int j2 = bit (insn2, 11);
4931 int s = sbits (insn1, 10, 10);
4932 int i1 = !(j1 ^ bit (insn1, 10));
4933 int i2 = !(j2 ^ bit (insn1, 10));
4934
4935 if (!link && !exchange) /* B */
4936 {
4937 offset = (bits (insn2, 0, 10) << 1);
4938 if (bit (insn2, 12)) /* Encoding T4 */
4939 {
4940 offset |= (bits (insn1, 0, 9) << 12)
4941 | (i2 << 22)
4942 | (i1 << 23)
4943 | (s << 24);
4944 cond = INST_AL;
4945 }
4946 else /* Encoding T3 */
4947 {
4948 offset |= (bits (insn1, 0, 5) << 12)
4949 | (j1 << 18)
4950 | (j2 << 19)
4951 | (s << 20);
4952 cond = bits (insn1, 6, 9);
4953 }
4954 }
4955 else
4956 {
4957 offset = (bits (insn1, 0, 9) << 12);
4958 offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
4959 offset |= exchange ?
4960 (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
4961 }
4962
4963 if (debug_displaced)
4964 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
4965 "%.4x %.4x with offset %.8lx\n",
4966 link ? (exchange) ? "blx" : "bl" : "b",
4967 insn1, insn2, offset);
4968
4969 dsc->modinsn[0] = THUMB_NOP;
4970
4971 install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
4972 return 0;
4973 }
4974
4975 /* Copy B Thumb instructions. */
4976 static int
4977 thumb_copy_b (struct gdbarch *gdbarch, uint16_t insn,
4978 arm_displaced_step_closure *dsc)
4979 {
4980 unsigned int cond = 0;
4981 int offset = 0;
4982 unsigned short bit_12_15 = bits (insn, 12, 15);
4983 CORE_ADDR from = dsc->insn_addr;
4984
4985 if (bit_12_15 == 0xd)
4986 {
4987 /* offset = SignExtend (imm8:0, 32) */
4988 offset = sbits ((insn << 1), 0, 8);
4989 cond = bits (insn, 8, 11);
4990 }
4991 else if (bit_12_15 == 0xe) /* Encoding T2 */
4992 {
4993 offset = sbits ((insn << 1), 0, 11);
4994 cond = INST_AL;
4995 }
4996
4997 if (debug_displaced)
4998 fprintf_unfiltered (gdb_stdlog,
4999 "displaced: copying b immediate insn %.4x "
5000 "with offset %d\n", insn, offset);
5001
5002 dsc->u.branch.cond = cond;
5003 dsc->u.branch.link = 0;
5004 dsc->u.branch.exchange = 0;
5005 dsc->u.branch.dest = from + 4 + offset;
5006
5007 dsc->modinsn[0] = THUMB_NOP;
5008
5009 dsc->cleanup = &cleanup_branch;
5010
5011 return 0;
5012 }
5013
5014 /* Copy BX/BLX with register-specified destinations. */
5015
5016 static void
5017 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
5018 arm_displaced_step_closure *dsc, int link,
5019 unsigned int cond, unsigned int rm)
5020 {
5021 /* Implement {BX,BLX}<cond> <reg>" as:
5022
5023 Preparation: cond <- instruction condition
5024 Insn: mov r0, r0 (nop)
5025 Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
5026
5027 Don't set r14 in cleanup for BX. */
5028
5029 dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
5030
5031 dsc->u.branch.cond = cond;
5032 dsc->u.branch.link = link;
5033
5034 dsc->u.branch.exchange = 1;
5035
5036 dsc->cleanup = &cleanup_branch;
5037 }
5038
5039 static int
5040 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
5041 struct regcache *regs, arm_displaced_step_closure *dsc)
5042 {
5043 unsigned int cond = bits (insn, 28, 31);
5044 /* BX: x12xxx1x
5045 BLX: x12xxx3x. */
5046 int link = bit (insn, 5);
5047 unsigned int rm = bits (insn, 0, 3);
5048
5049 if (debug_displaced)
5050 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
5051 (unsigned long) insn);
5052
5053 dsc->modinsn[0] = ARM_NOP;
5054
5055 install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
5056 return 0;
5057 }
5058
5059 static int
5060 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
5061 struct regcache *regs,
5062 arm_displaced_step_closure *dsc)
5063 {
5064 int link = bit (insn, 7);
5065 unsigned int rm = bits (insn, 3, 6);
5066
5067 if (debug_displaced)
5068 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
5069 (unsigned short) insn);
5070
5071 dsc->modinsn[0] = THUMB_NOP;
5072
5073 install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
5074
5075 return 0;
5076 }
5077
5078
5079 /* Copy/cleanup arithmetic/logic instruction with immediate RHS. */
5080
5081 static void
5082 cleanup_alu_imm (struct gdbarch *gdbarch,
5083 struct regcache *regs, arm_displaced_step_closure *dsc)
5084 {
5085 ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5086 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5087 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5088 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5089 }
5090
5091 static int
5092 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5093 arm_displaced_step_closure *dsc)
5094 {
5095 unsigned int rn = bits (insn, 16, 19);
5096 unsigned int rd = bits (insn, 12, 15);
5097 unsigned int op = bits (insn, 21, 24);
5098 int is_mov = (op == 0xd);
5099 ULONGEST rd_val, rn_val;
5100
5101 if (!insn_references_pc (insn, 0x000ff000ul))
5102 return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
5103
5104 if (debug_displaced)
5105 fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
5106 "%.8lx\n", is_mov ? "move" : "ALU",
5107 (unsigned long) insn);
5108
5109 /* Instruction is of form:
5110
5111 <op><cond> rd, [rn,] #imm
5112
5113 Rewrite as:
5114
5115 Preparation: tmp1, tmp2 <- r0, r1;
5116 r0, r1 <- rd, rn
5117 Insn: <op><cond> r0, r1, #imm
5118 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5119 */
5120
5121 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5122 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5123 rn_val = displaced_read_reg (regs, dsc, rn);
5124 rd_val = displaced_read_reg (regs, dsc, rd);
5125 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5126 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5127 dsc->rd = rd;
5128
5129 if (is_mov)
5130 dsc->modinsn[0] = insn & 0xfff00fff;
5131 else
5132 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
5133
5134 dsc->cleanup = &cleanup_alu_imm;
5135
5136 return 0;
5137 }
5138
5139 static int
5140 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
5141 uint16_t insn2, struct regcache *regs,
5142 arm_displaced_step_closure *dsc)
5143 {
5144 unsigned int op = bits (insn1, 5, 8);
5145 unsigned int rn, rm, rd;
5146 ULONGEST rd_val, rn_val;
5147
5148 rn = bits (insn1, 0, 3); /* Rn */
5149 rm = bits (insn2, 0, 3); /* Rm */
5150 rd = bits (insn2, 8, 11); /* Rd */
5151
5152 /* This routine is only called for instruction MOV. */
5153 gdb_assert (op == 0x2 && rn == 0xf);
5154
5155 if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
5156 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
5157
5158 if (debug_displaced)
5159 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
5160 "ALU", insn1, insn2);
5161
5162 /* Instruction is of form:
5163
5164 <op><cond> rd, [rn,] #imm
5165
5166 Rewrite as:
5167
5168 Preparation: tmp1, tmp2 <- r0, r1;
5169 r0, r1 <- rd, rn
5170 Insn: <op><cond> r0, r1, #imm
5171 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
5172 */
5173
5174 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5175 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5176 rn_val = displaced_read_reg (regs, dsc, rn);
5177 rd_val = displaced_read_reg (regs, dsc, rd);
5178 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5179 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5180 dsc->rd = rd;
5181
5182 dsc->modinsn[0] = insn1;
5183 dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
5184 dsc->numinsns = 2;
5185
5186 dsc->cleanup = &cleanup_alu_imm;
5187
5188 return 0;
5189 }
5190
5191 /* Copy/cleanup arithmetic/logic insns with register RHS. */
5192
5193 static void
5194 cleanup_alu_reg (struct gdbarch *gdbarch,
5195 struct regcache *regs, arm_displaced_step_closure *dsc)
5196 {
5197 ULONGEST rd_val;
5198 int i;
5199
5200 rd_val = displaced_read_reg (regs, dsc, 0);
5201
5202 for (i = 0; i < 3; i++)
5203 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5204
5205 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5206 }
5207
5208 static void
5209 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
5210 arm_displaced_step_closure *dsc,
5211 unsigned int rd, unsigned int rn, unsigned int rm)
5212 {
5213 ULONGEST rd_val, rn_val, rm_val;
5214
5215 /* Instruction is of form:
5216
5217 <op><cond> rd, [rn,] rm [, <shift>]
5218
5219 Rewrite as:
5220
5221 Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
5222 r0, r1, r2 <- rd, rn, rm
5223 Insn: <op><cond> r0, [r1,] r2 [, <shift>]
5224 Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
5225 */
5226
5227 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5228 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5229 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5230 rd_val = displaced_read_reg (regs, dsc, rd);
5231 rn_val = displaced_read_reg (regs, dsc, rn);
5232 rm_val = displaced_read_reg (regs, dsc, rm);
5233 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5234 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5235 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5236 dsc->rd = rd;
5237
5238 dsc->cleanup = &cleanup_alu_reg;
5239 }
5240
5241 static int
5242 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5243 arm_displaced_step_closure *dsc)
5244 {
5245 unsigned int op = bits (insn, 21, 24);
5246 int is_mov = (op == 0xd);
5247
5248 if (!insn_references_pc (insn, 0x000ff00ful))
5249 return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
5250
5251 if (debug_displaced)
5252 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
5253 is_mov ? "move" : "ALU", (unsigned long) insn);
5254
5255 if (is_mov)
5256 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
5257 else
5258 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
5259
5260 install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
5261 bits (insn, 0, 3));
5262 return 0;
5263 }
5264
5265 static int
5266 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
5267 struct regcache *regs,
5268 arm_displaced_step_closure *dsc)
5269 {
5270 unsigned rm, rd;
5271
5272 rm = bits (insn, 3, 6);
5273 rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
5274
5275 if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
5276 return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
5277
5278 if (debug_displaced)
5279 fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
5280 (unsigned short) insn);
5281
5282 dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
5283
5284 install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
5285
5286 return 0;
5287 }
5288
5289 /* Cleanup/copy arithmetic/logic insns with shifted register RHS. */
5290
5291 static void
5292 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
5293 struct regcache *regs,
5294 arm_displaced_step_closure *dsc)
5295 {
5296 ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
5297 int i;
5298
5299 for (i = 0; i < 4; i++)
5300 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
5301
5302 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
5303 }
5304
5305 static void
5306 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
5307 arm_displaced_step_closure *dsc,
5308 unsigned int rd, unsigned int rn, unsigned int rm,
5309 unsigned rs)
5310 {
5311 int i;
5312 ULONGEST rd_val, rn_val, rm_val, rs_val;
5313
5314 /* Instruction is of form:
5315
5316 <op><cond> rd, [rn,] rm, <shift> rs
5317
5318 Rewrite as:
5319
5320 Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
5321 r0, r1, r2, r3 <- rd, rn, rm, rs
5322 Insn: <op><cond> r0, r1, r2, <shift> r3
5323 Cleanup: tmp5 <- r0
5324 r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
5325 rd <- tmp5
5326 */
5327
5328 for (i = 0; i < 4; i++)
5329 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
5330
5331 rd_val = displaced_read_reg (regs, dsc, rd);
5332 rn_val = displaced_read_reg (regs, dsc, rn);
5333 rm_val = displaced_read_reg (regs, dsc, rm);
5334 rs_val = displaced_read_reg (regs, dsc, rs);
5335 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
5336 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
5337 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
5338 displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
5339 dsc->rd = rd;
5340 dsc->cleanup = &cleanup_alu_shifted_reg;
5341 }
5342
5343 static int
5344 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
5345 struct regcache *regs,
5346 arm_displaced_step_closure *dsc)
5347 {
5348 unsigned int op = bits (insn, 21, 24);
5349 int is_mov = (op == 0xd);
5350 unsigned int rd, rn, rm, rs;
5351
5352 if (!insn_references_pc (insn, 0x000fff0ful))
5353 return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
5354
5355 if (debug_displaced)
5356 fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
5357 "%.8lx\n", is_mov ? "move" : "ALU",
5358 (unsigned long) insn);
5359
5360 rn = bits (insn, 16, 19);
5361 rm = bits (insn, 0, 3);
5362 rs = bits (insn, 8, 11);
5363 rd = bits (insn, 12, 15);
5364
5365 if (is_mov)
5366 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
5367 else
5368 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
5369
5370 install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
5371
5372 return 0;
5373 }
5374
5375 /* Clean up load instructions. */
5376
5377 static void
5378 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
5379 arm_displaced_step_closure *dsc)
5380 {
5381 ULONGEST rt_val, rt_val2 = 0, rn_val;
5382
5383 rt_val = displaced_read_reg (regs, dsc, 0);
5384 if (dsc->u.ldst.xfersize == 8)
5385 rt_val2 = displaced_read_reg (regs, dsc, 1);
5386 rn_val = displaced_read_reg (regs, dsc, 2);
5387
5388 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5389 if (dsc->u.ldst.xfersize > 4)
5390 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5391 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5392 if (!dsc->u.ldst.immed)
5393 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5394
5395 /* Handle register writeback. */
5396 if (dsc->u.ldst.writeback)
5397 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5398 /* Put result in right place. */
5399 displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
5400 if (dsc->u.ldst.xfersize == 8)
5401 displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
5402 }
5403
5404 /* Clean up store instructions. */
5405
5406 static void
5407 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
5408 arm_displaced_step_closure *dsc)
5409 {
5410 ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
5411
5412 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5413 if (dsc->u.ldst.xfersize > 4)
5414 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5415 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
5416 if (!dsc->u.ldst.immed)
5417 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
5418 if (!dsc->u.ldst.restore_r4)
5419 displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
5420
5421 /* Writeback. */
5422 if (dsc->u.ldst.writeback)
5423 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
5424 }
5425
5426 /* Copy "extra" load/store instructions. These are halfword/doubleword
5427 transfers, which have a different encoding to byte/word transfers. */
5428
5429 static int
5430 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unprivileged,
5431 struct regcache *regs, arm_displaced_step_closure *dsc)
5432 {
5433 unsigned int op1 = bits (insn, 20, 24);
5434 unsigned int op2 = bits (insn, 5, 6);
5435 unsigned int rt = bits (insn, 12, 15);
5436 unsigned int rn = bits (insn, 16, 19);
5437 unsigned int rm = bits (insn, 0, 3);
5438 char load[12] = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
5439 char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
5440 int immed = (op1 & 0x4) != 0;
5441 int opcode;
5442 ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
5443
5444 if (!insn_references_pc (insn, 0x000ff00ful))
5445 return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
5446
5447 if (debug_displaced)
5448 fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
5449 "insn %.8lx\n", unprivileged ? "unprivileged " : "",
5450 (unsigned long) insn);
5451
5452 opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
5453
5454 if (opcode < 0)
5455 internal_error (__FILE__, __LINE__,
5456 _("copy_extra_ld_st: instruction decode error"));
5457
5458 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5459 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5460 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5461 if (!immed)
5462 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5463
5464 rt_val = displaced_read_reg (regs, dsc, rt);
5465 if (bytesize[opcode] == 8)
5466 rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
5467 rn_val = displaced_read_reg (regs, dsc, rn);
5468 if (!immed)
5469 rm_val = displaced_read_reg (regs, dsc, rm);
5470
5471 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5472 if (bytesize[opcode] == 8)
5473 displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
5474 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5475 if (!immed)
5476 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5477
5478 dsc->rd = rt;
5479 dsc->u.ldst.xfersize = bytesize[opcode];
5480 dsc->u.ldst.rn = rn;
5481 dsc->u.ldst.immed = immed;
5482 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
5483 dsc->u.ldst.restore_r4 = 0;
5484
5485 if (immed)
5486 /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
5487 ->
5488 {ldr,str}<width><cond> r0, [r1,] [r2, #imm]. */
5489 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5490 else
5491 /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
5492 ->
5493 {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3]. */
5494 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5495
5496 dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
5497
5498 return 0;
5499 }
5500
5501 /* Copy byte/half word/word loads and stores. */
5502
5503 static void
5504 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5505 arm_displaced_step_closure *dsc, int load,
5506 int immed, int writeback, int size, int usermode,
5507 int rt, int rm, int rn)
5508 {
5509 ULONGEST rt_val, rn_val, rm_val = 0;
5510
5511 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5512 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5513 if (!immed)
5514 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5515 if (!load)
5516 dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
5517
5518 rt_val = displaced_read_reg (regs, dsc, rt);
5519 rn_val = displaced_read_reg (regs, dsc, rn);
5520 if (!immed)
5521 rm_val = displaced_read_reg (regs, dsc, rm);
5522
5523 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
5524 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
5525 if (!immed)
5526 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
5527 dsc->rd = rt;
5528 dsc->u.ldst.xfersize = size;
5529 dsc->u.ldst.rn = rn;
5530 dsc->u.ldst.immed = immed;
5531 dsc->u.ldst.writeback = writeback;
5532
5533 /* To write PC we can do:
5534
5535 Before this sequence of instructions:
5536 r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
5537 r2 is the Rn value got from dispalced_read_reg.
5538
5539 Insn1: push {pc} Write address of STR instruction + offset on stack
5540 Insn2: pop {r4} Read it back from stack, r4 = addr(Insn1) + offset
5541 Insn3: sub r4, r4, pc r4 = addr(Insn1) + offset - pc
5542 = addr(Insn1) + offset - addr(Insn3) - 8
5543 = offset - 16
5544 Insn4: add r4, r4, #8 r4 = offset - 8
5545 Insn5: add r0, r0, r4 r0 = from + 8 + offset - 8
5546 = from + offset
5547 Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
5548
5549 Otherwise we don't know what value to write for PC, since the offset is
5550 architecture-dependent (sometimes PC+8, sometimes PC+12). More details
5551 of this can be found in Section "Saving from r15" in
5552 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
5553
5554 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5555 }
5556
5557
5558 static int
5559 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
5560 uint16_t insn2, struct regcache *regs,
5561 arm_displaced_step_closure *dsc, int size)
5562 {
5563 unsigned int u_bit = bit (insn1, 7);
5564 unsigned int rt = bits (insn2, 12, 15);
5565 int imm12 = bits (insn2, 0, 11);
5566 ULONGEST pc_val;
5567
5568 if (debug_displaced)
5569 fprintf_unfiltered (gdb_stdlog,
5570 "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
5571 (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
5572 imm12);
5573
5574 if (!u_bit)
5575 imm12 = -1 * imm12;
5576
5577 /* Rewrite instruction LDR Rt imm12 into:
5578
5579 Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
5580
5581 LDR R0, R2, R3,
5582
5583 Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2]. */
5584
5585
5586 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5587 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
5588 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
5589
5590 pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5591
5592 pc_val = pc_val & 0xfffffffc;
5593
5594 displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
5595 displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
5596
5597 dsc->rd = rt;
5598
5599 dsc->u.ldst.xfersize = size;
5600 dsc->u.ldst.immed = 0;
5601 dsc->u.ldst.writeback = 0;
5602 dsc->u.ldst.restore_r4 = 0;
5603
5604 /* LDR R0, R2, R3 */
5605 dsc->modinsn[0] = 0xf852;
5606 dsc->modinsn[1] = 0x3;
5607 dsc->numinsns = 2;
5608
5609 dsc->cleanup = &cleanup_load;
5610
5611 return 0;
5612 }
5613
5614 static int
5615 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
5616 uint16_t insn2, struct regcache *regs,
5617 arm_displaced_step_closure *dsc,
5618 int writeback, int immed)
5619 {
5620 unsigned int rt = bits (insn2, 12, 15);
5621 unsigned int rn = bits (insn1, 0, 3);
5622 unsigned int rm = bits (insn2, 0, 3); /* Only valid if !immed. */
5623 /* In LDR (register), there is also a register Rm, which is not allowed to
5624 be PC, so we don't have to check it. */
5625
5626 if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
5627 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
5628 dsc);
5629
5630 if (debug_displaced)
5631 fprintf_unfiltered (gdb_stdlog,
5632 "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
5633 rt, rn, insn1, insn2);
5634
5635 install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
5636 0, rt, rm, rn);
5637
5638 dsc->u.ldst.restore_r4 = 0;
5639
5640 if (immed)
5641 /* ldr[b]<cond> rt, [rn, #imm], etc.
5642 ->
5643 ldr[b]<cond> r0, [r2, #imm]. */
5644 {
5645 dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5646 dsc->modinsn[1] = insn2 & 0x0fff;
5647 }
5648 else
5649 /* ldr[b]<cond> rt, [rn, rm], etc.
5650 ->
5651 ldr[b]<cond> r0, [r2, r3]. */
5652 {
5653 dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
5654 dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
5655 }
5656
5657 dsc->numinsns = 2;
5658
5659 return 0;
5660 }
5661
5662
5663 static int
5664 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
5665 struct regcache *regs,
5666 arm_displaced_step_closure *dsc,
5667 int load, int size, int usermode)
5668 {
5669 int immed = !bit (insn, 25);
5670 int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
5671 unsigned int rt = bits (insn, 12, 15);
5672 unsigned int rn = bits (insn, 16, 19);
5673 unsigned int rm = bits (insn, 0, 3); /* Only valid if !immed. */
5674
5675 if (!insn_references_pc (insn, 0x000ff00ful))
5676 return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
5677
5678 if (debug_displaced)
5679 fprintf_unfiltered (gdb_stdlog,
5680 "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
5681 load ? (size == 1 ? "ldrb" : "ldr")
5682 : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
5683 rt, rn,
5684 (unsigned long) insn);
5685
5686 install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
5687 usermode, rt, rm, rn);
5688
5689 if (load || rt != ARM_PC_REGNUM)
5690 {
5691 dsc->u.ldst.restore_r4 = 0;
5692
5693 if (immed)
5694 /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
5695 ->
5696 {ldr,str}[b]<cond> r0, [r2, #imm]. */
5697 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
5698 else
5699 /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
5700 ->
5701 {ldr,str}[b]<cond> r0, [r2, r3]. */
5702 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
5703 }
5704 else
5705 {
5706 /* We need to use r4 as scratch. Make sure it's restored afterwards. */
5707 dsc->u.ldst.restore_r4 = 1;
5708 dsc->modinsn[0] = 0xe92d8000; /* push {pc} */
5709 dsc->modinsn[1] = 0xe8bd0010; /* pop {r4} */
5710 dsc->modinsn[2] = 0xe044400f; /* sub r4, r4, pc. */
5711 dsc->modinsn[3] = 0xe2844008; /* add r4, r4, #8. */
5712 dsc->modinsn[4] = 0xe0800004; /* add r0, r0, r4. */
5713
5714 /* As above. */
5715 if (immed)
5716 dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
5717 else
5718 dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
5719
5720 dsc->numinsns = 6;
5721 }
5722
5723 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
5724
5725 return 0;
5726 }
5727
5728 /* Cleanup LDM instructions with fully-populated register list. This is an
5729 unfortunate corner case: it's impossible to implement correctly by modifying
5730 the instruction. The issue is as follows: we have an instruction,
5731
5732 ldm rN, {r0-r15}
5733
5734 which we must rewrite to avoid loading PC. A possible solution would be to
5735 do the load in two halves, something like (with suitable cleanup
5736 afterwards):
5737
5738 mov r8, rN
5739 ldm[id][ab] r8!, {r0-r7}
5740 str r7, <temp>
5741 ldm[id][ab] r8, {r7-r14}
5742 <bkpt>
5743
5744 but at present there's no suitable place for <temp>, since the scratch space
5745 is overwritten before the cleanup routine is called. For now, we simply
5746 emulate the instruction. */
5747
5748 static void
5749 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
5750 arm_displaced_step_closure *dsc)
5751 {
5752 int inc = dsc->u.block.increment;
5753 int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
5754 int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
5755 uint32_t regmask = dsc->u.block.regmask;
5756 int regno = inc ? 0 : 15;
5757 CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
5758 int exception_return = dsc->u.block.load && dsc->u.block.user
5759 && (regmask & 0x8000) != 0;
5760 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5761 int do_transfer = condition_true (dsc->u.block.cond, status);
5762 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5763
5764 if (!do_transfer)
5765 return;
5766
5767 /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
5768 sensible we can do here. Complain loudly. */
5769 if (exception_return)
5770 error (_("Cannot single-step exception return"));
5771
5772 /* We don't handle any stores here for now. */
5773 gdb_assert (dsc->u.block.load != 0);
5774
5775 if (debug_displaced)
5776 fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
5777 "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
5778 dsc->u.block.increment ? "inc" : "dec",
5779 dsc->u.block.before ? "before" : "after");
5780
5781 while (regmask)
5782 {
5783 uint32_t memword;
5784
5785 if (inc)
5786 while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
5787 regno++;
5788 else
5789 while (regno >= 0 && (regmask & (1 << regno)) == 0)
5790 regno--;
5791
5792 xfer_addr += bump_before;
5793
5794 memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
5795 displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
5796
5797 xfer_addr += bump_after;
5798
5799 regmask &= ~(1 << regno);
5800 }
5801
5802 if (dsc->u.block.writeback)
5803 displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
5804 CANNOT_WRITE_PC);
5805 }
5806
5807 /* Clean up an STM which included the PC in the register list. */
5808
5809 static void
5810 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
5811 arm_displaced_step_closure *dsc)
5812 {
5813 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5814 int store_executed = condition_true (dsc->u.block.cond, status);
5815 CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
5816 CORE_ADDR stm_insn_addr;
5817 uint32_t pc_val;
5818 long offset;
5819 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5820
5821 /* If condition code fails, there's nothing else to do. */
5822 if (!store_executed)
5823 return;
5824
5825 if (dsc->u.block.increment)
5826 {
5827 pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
5828
5829 if (dsc->u.block.before)
5830 pc_stored_at += 4;
5831 }
5832 else
5833 {
5834 pc_stored_at = dsc->u.block.xfer_addr;
5835
5836 if (dsc->u.block.before)
5837 pc_stored_at -= 4;
5838 }
5839
5840 pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
5841 stm_insn_addr = dsc->scratch_base;
5842 offset = pc_val - stm_insn_addr;
5843
5844 if (debug_displaced)
5845 fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
5846 "STM instruction\n", offset);
5847
5848 /* Rewrite the stored PC to the proper value for the non-displaced original
5849 instruction. */
5850 write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
5851 dsc->insn_addr + offset);
5852 }
5853
5854 /* Clean up an LDM which includes the PC in the register list. We clumped all
5855 the registers in the transferred list into a contiguous range r0...rX (to
5856 avoid loading PC directly and losing control of the debugged program), so we
5857 must undo that here. */
5858
5859 static void
5860 cleanup_block_load_pc (struct gdbarch *gdbarch,
5861 struct regcache *regs,
5862 arm_displaced_step_closure *dsc)
5863 {
5864 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
5865 int load_executed = condition_true (dsc->u.block.cond, status);
5866 unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
5867 unsigned int regs_loaded = bitcount (mask);
5868 unsigned int num_to_shuffle = regs_loaded, clobbered;
5869
5870 /* The method employed here will fail if the register list is fully populated
5871 (we need to avoid loading PC directly). */
5872 gdb_assert (num_to_shuffle < 16);
5873
5874 if (!load_executed)
5875 return;
5876
5877 clobbered = (1 << num_to_shuffle) - 1;
5878
5879 while (num_to_shuffle > 0)
5880 {
5881 if ((mask & (1 << write_reg)) != 0)
5882 {
5883 unsigned int read_reg = num_to_shuffle - 1;
5884
5885 if (read_reg != write_reg)
5886 {
5887 ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
5888 displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
5889 if (debug_displaced)
5890 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
5891 "loaded register r%d to r%d\n"), read_reg,
5892 write_reg);
5893 }
5894 else if (debug_displaced)
5895 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
5896 "r%d already in the right place\n"),
5897 write_reg);
5898
5899 clobbered &= ~(1 << write_reg);
5900
5901 num_to_shuffle--;
5902 }
5903
5904 write_reg--;
5905 }
5906
5907 /* Restore any registers we scribbled over. */
5908 for (write_reg = 0; clobbered != 0; write_reg++)
5909 {
5910 if ((clobbered & (1 << write_reg)) != 0)
5911 {
5912 displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
5913 CANNOT_WRITE_PC);
5914 if (debug_displaced)
5915 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
5916 "clobbered register r%d\n"), write_reg);
5917 clobbered &= ~(1 << write_reg);
5918 }
5919 }
5920
5921 /* Perform register writeback manually. */
5922 if (dsc->u.block.writeback)
5923 {
5924 ULONGEST new_rn_val = dsc->u.block.xfer_addr;
5925
5926 if (dsc->u.block.increment)
5927 new_rn_val += regs_loaded * 4;
5928 else
5929 new_rn_val -= regs_loaded * 4;
5930
5931 displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
5932 CANNOT_WRITE_PC);
5933 }
5934 }
5935
5936 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
5937 in user-level code (in particular exception return, ldm rn, {...pc}^). */
5938
5939 static int
5940 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
5941 struct regcache *regs,
5942 arm_displaced_step_closure *dsc)
5943 {
5944 int load = bit (insn, 20);
5945 int user = bit (insn, 22);
5946 int increment = bit (insn, 23);
5947 int before = bit (insn, 24);
5948 int writeback = bit (insn, 21);
5949 int rn = bits (insn, 16, 19);
5950
5951 /* Block transfers which don't mention PC can be run directly
5952 out-of-line. */
5953 if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
5954 return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
5955
5956 if (rn == ARM_PC_REGNUM)
5957 {
5958 warning (_("displaced: Unpredictable LDM or STM with "
5959 "base register r15"));
5960 return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
5961 }
5962
5963 if (debug_displaced)
5964 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
5965 "%.8lx\n", (unsigned long) insn);
5966
5967 dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
5968 dsc->u.block.rn = rn;
5969
5970 dsc->u.block.load = load;
5971 dsc->u.block.user = user;
5972 dsc->u.block.increment = increment;
5973 dsc->u.block.before = before;
5974 dsc->u.block.writeback = writeback;
5975 dsc->u.block.cond = bits (insn, 28, 31);
5976
5977 dsc->u.block.regmask = insn & 0xffff;
5978
5979 if (load)
5980 {
5981 if ((insn & 0xffff) == 0xffff)
5982 {
5983 /* LDM with a fully-populated register list. This case is
5984 particularly tricky. Implement for now by fully emulating the
5985 instruction (which might not behave perfectly in all cases, but
5986 these instructions should be rare enough for that not to matter
5987 too much). */
5988 dsc->modinsn[0] = ARM_NOP;
5989
5990 dsc->cleanup = &cleanup_block_load_all;
5991 }
5992 else
5993 {
5994 /* LDM of a list of registers which includes PC. Implement by
5995 rewriting the list of registers to be transferred into a
5996 contiguous chunk r0...rX before doing the transfer, then shuffling
5997 registers into the correct places in the cleanup routine. */
5998 unsigned int regmask = insn & 0xffff;
5999 unsigned int num_in_list = bitcount (regmask), new_regmask;
6000 unsigned int i;
6001
6002 for (i = 0; i < num_in_list; i++)
6003 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6004
6005 /* Writeback makes things complicated. We need to avoid clobbering
6006 the base register with one of the registers in our modified
6007 register list, but just using a different register can't work in
6008 all cases, e.g.:
6009
6010 ldm r14!, {r0-r13,pc}
6011
6012 which would need to be rewritten as:
6013
6014 ldm rN!, {r0-r14}
6015
6016 but that can't work, because there's no free register for N.
6017
6018 Solve this by turning off the writeback bit, and emulating
6019 writeback manually in the cleanup routine. */
6020
6021 if (writeback)
6022 insn &= ~(1 << 21);
6023
6024 new_regmask = (1 << num_in_list) - 1;
6025
6026 if (debug_displaced)
6027 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6028 "{..., pc}: original reg list %.4x, modified "
6029 "list %.4x\n"), rn, writeback ? "!" : "",
6030 (int) insn & 0xffff, new_regmask);
6031
6032 dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
6033
6034 dsc->cleanup = &cleanup_block_load_pc;
6035 }
6036 }
6037 else
6038 {
6039 /* STM of a list of registers which includes PC. Run the instruction
6040 as-is, but out of line: this will store the wrong value for the PC,
6041 so we must manually fix up the memory in the cleanup routine.
6042 Doing things this way has the advantage that we can auto-detect
6043 the offset of the PC write (which is architecture-dependent) in
6044 the cleanup routine. */
6045 dsc->modinsn[0] = insn;
6046
6047 dsc->cleanup = &cleanup_block_store_pc;
6048 }
6049
6050 return 0;
6051 }
6052
6053 static int
6054 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6055 struct regcache *regs,
6056 arm_displaced_step_closure *dsc)
6057 {
6058 int rn = bits (insn1, 0, 3);
6059 int load = bit (insn1, 4);
6060 int writeback = bit (insn1, 5);
6061
6062 /* Block transfers which don't mention PC can be run directly
6063 out-of-line. */
6064 if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
6065 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
6066
6067 if (rn == ARM_PC_REGNUM)
6068 {
6069 warning (_("displaced: Unpredictable LDM or STM with "
6070 "base register r15"));
6071 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6072 "unpredictable ldm/stm", dsc);
6073 }
6074
6075 if (debug_displaced)
6076 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
6077 "%.4x%.4x\n", insn1, insn2);
6078
6079 /* Clear bit 13, since it should be always zero. */
6080 dsc->u.block.regmask = (insn2 & 0xdfff);
6081 dsc->u.block.rn = rn;
6082
6083 dsc->u.block.load = load;
6084 dsc->u.block.user = 0;
6085 dsc->u.block.increment = bit (insn1, 7);
6086 dsc->u.block.before = bit (insn1, 8);
6087 dsc->u.block.writeback = writeback;
6088 dsc->u.block.cond = INST_AL;
6089 dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
6090
6091 if (load)
6092 {
6093 if (dsc->u.block.regmask == 0xffff)
6094 {
6095 /* This branch is impossible to happen. */
6096 gdb_assert (0);
6097 }
6098 else
6099 {
6100 unsigned int regmask = dsc->u.block.regmask;
6101 unsigned int num_in_list = bitcount (regmask), new_regmask;
6102 unsigned int i;
6103
6104 for (i = 0; i < num_in_list; i++)
6105 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6106
6107 if (writeback)
6108 insn1 &= ~(1 << 5);
6109
6110 new_regmask = (1 << num_in_list) - 1;
6111
6112 if (debug_displaced)
6113 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
6114 "{..., pc}: original reg list %.4x, modified "
6115 "list %.4x\n"), rn, writeback ? "!" : "",
6116 (int) dsc->u.block.regmask, new_regmask);
6117
6118 dsc->modinsn[0] = insn1;
6119 dsc->modinsn[1] = (new_regmask & 0xffff);
6120 dsc->numinsns = 2;
6121
6122 dsc->cleanup = &cleanup_block_load_pc;
6123 }
6124 }
6125 else
6126 {
6127 dsc->modinsn[0] = insn1;
6128 dsc->modinsn[1] = insn2;
6129 dsc->numinsns = 2;
6130 dsc->cleanup = &cleanup_block_store_pc;
6131 }
6132 return 0;
6133 }
6134
6135 /* Wrapper over read_memory_unsigned_integer for use in arm_get_next_pcs.
6136 This is used to avoid a dependency on BFD's bfd_endian enum. */
6137
6138 ULONGEST
6139 arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
6140 int byte_order)
6141 {
6142 return read_memory_unsigned_integer (memaddr, len,
6143 (enum bfd_endian) byte_order);
6144 }
6145
6146 /* Wrapper over gdbarch_addr_bits_remove for use in arm_get_next_pcs. */
6147
6148 CORE_ADDR
6149 arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
6150 CORE_ADDR val)
6151 {
6152 return gdbarch_addr_bits_remove (self->regcache->arch (), val);
6153 }
6154
6155 /* Wrapper over syscall_next_pc for use in get_next_pcs. */
6156
6157 static CORE_ADDR
6158 arm_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
6159 {
6160 return 0;
6161 }
6162
6163 /* Wrapper over arm_is_thumb for use in arm_get_next_pcs. */
6164
6165 int
6166 arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self)
6167 {
6168 return arm_is_thumb (self->regcache);
6169 }
6170
6171 /* single_step() is called just before we want to resume the inferior,
6172 if we want to single-step it but there is no hardware or kernel
6173 single-step support. We find the target of the coming instructions
6174 and breakpoint them. */
6175
6176 std::vector<CORE_ADDR>
6177 arm_software_single_step (struct regcache *regcache)
6178 {
6179 struct gdbarch *gdbarch = regcache->arch ();
6180 struct arm_get_next_pcs next_pcs_ctx;
6181
6182 arm_get_next_pcs_ctor (&next_pcs_ctx,
6183 &arm_get_next_pcs_ops,
6184 gdbarch_byte_order (gdbarch),
6185 gdbarch_byte_order_for_code (gdbarch),
6186 0,
6187 regcache);
6188
6189 std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
6190
6191 for (CORE_ADDR &pc_ref : next_pcs)
6192 pc_ref = gdbarch_addr_bits_remove (gdbarch, pc_ref);
6193
6194 return next_pcs;
6195 }
6196
6197 /* Cleanup/copy SVC (SWI) instructions. These two functions are overridden
6198 for Linux, where some SVC instructions must be treated specially. */
6199
6200 static void
6201 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
6202 arm_displaced_step_closure *dsc)
6203 {
6204 CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
6205
6206 if (debug_displaced)
6207 fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
6208 "%.8lx\n", (unsigned long) resume_addr);
6209
6210 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
6211 }
6212
6213
6214 /* Common copy routine for svc instruciton. */
6215
6216 static int
6217 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
6218 arm_displaced_step_closure *dsc)
6219 {
6220 /* Preparation: none.
6221 Insn: unmodified svc.
6222 Cleanup: pc <- insn_addr + insn_size. */
6223
6224 /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
6225 instruction. */
6226 dsc->wrote_to_pc = 1;
6227
6228 /* Allow OS-specific code to override SVC handling. */
6229 if (dsc->u.svc.copy_svc_os)
6230 return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
6231 else
6232 {
6233 dsc->cleanup = &cleanup_svc;
6234 return 0;
6235 }
6236 }
6237
6238 static int
6239 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
6240 struct regcache *regs, arm_displaced_step_closure *dsc)
6241 {
6242
6243 if (debug_displaced)
6244 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
6245 (unsigned long) insn);
6246
6247 dsc->modinsn[0] = insn;
6248
6249 return install_svc (gdbarch, regs, dsc);
6250 }
6251
6252 static int
6253 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
6254 struct regcache *regs, arm_displaced_step_closure *dsc)
6255 {
6256
6257 if (debug_displaced)
6258 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
6259 insn);
6260
6261 dsc->modinsn[0] = insn;
6262
6263 return install_svc (gdbarch, regs, dsc);
6264 }
6265
6266 /* Copy undefined instructions. */
6267
6268 static int
6269 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
6270 arm_displaced_step_closure *dsc)
6271 {
6272 if (debug_displaced)
6273 fprintf_unfiltered (gdb_stdlog,
6274 "displaced: copying undefined insn %.8lx\n",
6275 (unsigned long) insn);
6276
6277 dsc->modinsn[0] = insn;
6278
6279 return 0;
6280 }
6281
6282 static int
6283 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
6284 arm_displaced_step_closure *dsc)
6285 {
6286
6287 if (debug_displaced)
6288 fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
6289 "%.4x %.4x\n", (unsigned short) insn1,
6290 (unsigned short) insn2);
6291
6292 dsc->modinsn[0] = insn1;
6293 dsc->modinsn[1] = insn2;
6294 dsc->numinsns = 2;
6295
6296 return 0;
6297 }
6298
6299 /* Copy unpredictable instructions. */
6300
6301 static int
6302 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
6303 arm_displaced_step_closure *dsc)
6304 {
6305 if (debug_displaced)
6306 fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
6307 "%.8lx\n", (unsigned long) insn);
6308
6309 dsc->modinsn[0] = insn;
6310
6311 return 0;
6312 }
6313
6314 /* The decode_* functions are instruction decoding helpers. They mostly follow
6315 the presentation in the ARM ARM. */
6316
6317 static int
6318 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
6319 struct regcache *regs,
6320 arm_displaced_step_closure *dsc)
6321 {
6322 unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
6323 unsigned int rn = bits (insn, 16, 19);
6324
6325 if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0x1) == 0x0)
6326 return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
6327 else if (op1 == 0x10 && op2 == 0x0 && (rn & 0x1) == 0x1)
6328 return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
6329 else if ((op1 & 0x60) == 0x20)
6330 return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
6331 else if ((op1 & 0x71) == 0x40)
6332 return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
6333 dsc);
6334 else if ((op1 & 0x77) == 0x41)
6335 return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6336 else if ((op1 & 0x77) == 0x45)
6337 return arm_copy_preload (gdbarch, insn, regs, dsc); /* pli. */
6338 else if ((op1 & 0x77) == 0x51)
6339 {
6340 if (rn != 0xf)
6341 return arm_copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
6342 else
6343 return arm_copy_unpred (gdbarch, insn, dsc);
6344 }
6345 else if ((op1 & 0x77) == 0x55)
6346 return arm_copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
6347 else if (op1 == 0x57)
6348 switch (op2)
6349 {
6350 case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
6351 case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
6352 case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
6353 case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
6354 default: return arm_copy_unpred (gdbarch, insn, dsc);
6355 }
6356 else if ((op1 & 0x63) == 0x43)
6357 return arm_copy_unpred (gdbarch, insn, dsc);
6358 else if ((op2 & 0x1) == 0x0)
6359 switch (op1 & ~0x80)
6360 {
6361 case 0x61:
6362 return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
6363 case 0x65:
6364 return arm_copy_preload_reg (gdbarch, insn, regs, dsc); /* pli reg. */
6365 case 0x71: case 0x75:
6366 /* pld/pldw reg. */
6367 return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
6368 case 0x63: case 0x67: case 0x73: case 0x77:
6369 return arm_copy_unpred (gdbarch, insn, dsc);
6370 default:
6371 return arm_copy_undef (gdbarch, insn, dsc);
6372 }
6373 else
6374 return arm_copy_undef (gdbarch, insn, dsc); /* Probably unreachable. */
6375 }
6376
6377 static int
6378 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
6379 struct regcache *regs,
6380 arm_displaced_step_closure *dsc)
6381 {
6382 if (bit (insn, 27) == 0)
6383 return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
6384 /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx. */
6385 else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
6386 {
6387 case 0x0: case 0x2:
6388 return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
6389
6390 case 0x1: case 0x3:
6391 return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
6392
6393 case 0x4: case 0x5: case 0x6: case 0x7:
6394 return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6395
6396 case 0x8:
6397 switch ((insn & 0xe00000) >> 21)
6398 {
6399 case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
6400 /* stc/stc2. */
6401 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6402
6403 case 0x2:
6404 return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6405
6406 default:
6407 return arm_copy_undef (gdbarch, insn, dsc);
6408 }
6409
6410 case 0x9:
6411 {
6412 int rn_f = (bits (insn, 16, 19) == 0xf);
6413 switch ((insn & 0xe00000) >> 21)
6414 {
6415 case 0x1: case 0x3:
6416 /* ldc/ldc2 imm (undefined for rn == pc). */
6417 return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
6418 : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6419
6420 case 0x2:
6421 return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6422
6423 case 0x4: case 0x5: case 0x6: case 0x7:
6424 /* ldc/ldc2 lit (undefined for rn != pc). */
6425 return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
6426 : arm_copy_undef (gdbarch, insn, dsc);
6427
6428 default:
6429 return arm_copy_undef (gdbarch, insn, dsc);
6430 }
6431 }
6432
6433 case 0xa:
6434 return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
6435
6436 case 0xb:
6437 if (bits (insn, 16, 19) == 0xf)
6438 /* ldc/ldc2 lit. */
6439 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6440 else
6441 return arm_copy_undef (gdbarch, insn, dsc);
6442
6443 case 0xc:
6444 if (bit (insn, 4))
6445 return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6446 else
6447 return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6448
6449 case 0xd:
6450 if (bit (insn, 4))
6451 return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6452 else
6453 return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6454
6455 default:
6456 return arm_copy_undef (gdbarch, insn, dsc);
6457 }
6458 }
6459
6460 /* Decode miscellaneous instructions in dp/misc encoding space. */
6461
6462 static int
6463 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
6464 struct regcache *regs,
6465 arm_displaced_step_closure *dsc)
6466 {
6467 unsigned int op2 = bits (insn, 4, 6);
6468 unsigned int op = bits (insn, 21, 22);
6469
6470 switch (op2)
6471 {
6472 case 0x0:
6473 return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
6474
6475 case 0x1:
6476 if (op == 0x1) /* bx. */
6477 return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
6478 else if (op == 0x3)
6479 return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
6480 else
6481 return arm_copy_undef (gdbarch, insn, dsc);
6482
6483 case 0x2:
6484 if (op == 0x1)
6485 /* Not really supported. */
6486 return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
6487 else
6488 return arm_copy_undef (gdbarch, insn, dsc);
6489
6490 case 0x3:
6491 if (op == 0x1)
6492 return arm_copy_bx_blx_reg (gdbarch, insn,
6493 regs, dsc); /* blx register. */
6494 else
6495 return arm_copy_undef (gdbarch, insn, dsc);
6496
6497 case 0x5:
6498 return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
6499
6500 case 0x7:
6501 if (op == 0x1)
6502 return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
6503 else if (op == 0x3)
6504 /* Not really supported. */
6505 return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
6506 /* Fall through. */
6507
6508 default:
6509 return arm_copy_undef (gdbarch, insn, dsc);
6510 }
6511 }
6512
6513 static int
6514 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
6515 struct regcache *regs,
6516 arm_displaced_step_closure *dsc)
6517 {
6518 if (bit (insn, 25))
6519 switch (bits (insn, 20, 24))
6520 {
6521 case 0x10:
6522 return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
6523
6524 case 0x14:
6525 return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
6526
6527 case 0x12: case 0x16:
6528 return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
6529
6530 default:
6531 return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
6532 }
6533 else
6534 {
6535 uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
6536
6537 if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
6538 return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
6539 else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
6540 return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
6541 else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
6542 return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
6543 else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
6544 return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
6545 else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
6546 return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
6547 else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
6548 return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
6549 else if (op2 == 0xb || (op2 & 0xd) == 0xd)
6550 /* 2nd arg means "unprivileged". */
6551 return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
6552 dsc);
6553 }
6554
6555 /* Should be unreachable. */
6556 return 1;
6557 }
6558
6559 static int
6560 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
6561 struct regcache *regs,
6562 arm_displaced_step_closure *dsc)
6563 {
6564 int a = bit (insn, 25), b = bit (insn, 4);
6565 uint32_t op1 = bits (insn, 20, 24);
6566
6567 if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
6568 || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
6569 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
6570 else if ((!a && (op1 & 0x17) == 0x02)
6571 || (a && (op1 & 0x17) == 0x02 && !b))
6572 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
6573 else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
6574 || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
6575 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
6576 else if ((!a && (op1 & 0x17) == 0x03)
6577 || (a && (op1 & 0x17) == 0x03 && !b))
6578 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
6579 else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
6580 || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
6581 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
6582 else if ((!a && (op1 & 0x17) == 0x06)
6583 || (a && (op1 & 0x17) == 0x06 && !b))
6584 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
6585 else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
6586 || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
6587 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
6588 else if ((!a && (op1 & 0x17) == 0x07)
6589 || (a && (op1 & 0x17) == 0x07 && !b))
6590 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
6591
6592 /* Should be unreachable. */
6593 return 1;
6594 }
6595
6596 static int
6597 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
6598 arm_displaced_step_closure *dsc)
6599 {
6600 switch (bits (insn, 20, 24))
6601 {
6602 case 0x00: case 0x01: case 0x02: case 0x03:
6603 return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
6604
6605 case 0x04: case 0x05: case 0x06: case 0x07:
6606 return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
6607
6608 case 0x08: case 0x09: case 0x0a: case 0x0b:
6609 case 0x0c: case 0x0d: case 0x0e: case 0x0f:
6610 return arm_copy_unmodified (gdbarch, insn,
6611 "decode/pack/unpack/saturate/reverse", dsc);
6612
6613 case 0x18:
6614 if (bits (insn, 5, 7) == 0) /* op2. */
6615 {
6616 if (bits (insn, 12, 15) == 0xf)
6617 return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
6618 else
6619 return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
6620 }
6621 else
6622 return arm_copy_undef (gdbarch, insn, dsc);
6623
6624 case 0x1a: case 0x1b:
6625 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
6626 return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
6627 else
6628 return arm_copy_undef (gdbarch, insn, dsc);
6629
6630 case 0x1c: case 0x1d:
6631 if (bits (insn, 5, 6) == 0x0) /* op2[1:0]. */
6632 {
6633 if (bits (insn, 0, 3) == 0xf)
6634 return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
6635 else
6636 return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
6637 }
6638 else
6639 return arm_copy_undef (gdbarch, insn, dsc);
6640
6641 case 0x1e: case 0x1f:
6642 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
6643 return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
6644 else
6645 return arm_copy_undef (gdbarch, insn, dsc);
6646 }
6647
6648 /* Should be unreachable. */
6649 return 1;
6650 }
6651
6652 static int
6653 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, uint32_t insn,
6654 struct regcache *regs,
6655 arm_displaced_step_closure *dsc)
6656 {
6657 if (bit (insn, 25))
6658 return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
6659 else
6660 return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
6661 }
6662
6663 static int
6664 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
6665 struct regcache *regs,
6666 arm_displaced_step_closure *dsc)
6667 {
6668 unsigned int opcode = bits (insn, 20, 24);
6669
6670 switch (opcode)
6671 {
6672 case 0x04: case 0x05: /* VFP/Neon mrrc/mcrr. */
6673 return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
6674
6675 case 0x08: case 0x0a: case 0x0c: case 0x0e:
6676 case 0x12: case 0x16:
6677 return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
6678
6679 case 0x09: case 0x0b: case 0x0d: case 0x0f:
6680 case 0x13: case 0x17:
6681 return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
6682
6683 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
6684 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
6685 /* Note: no writeback for these instructions. Bit 25 will always be
6686 zero though (via caller), so the following works OK. */
6687 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6688 }
6689
6690 /* Should be unreachable. */
6691 return 1;
6692 }
6693
6694 /* Decode shifted register instructions. */
6695
6696 static int
6697 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
6698 uint16_t insn2, struct regcache *regs,
6699 arm_displaced_step_closure *dsc)
6700 {
6701 /* PC is only allowed to be used in instruction MOV. */
6702
6703 unsigned int op = bits (insn1, 5, 8);
6704 unsigned int rn = bits (insn1, 0, 3);
6705
6706 if (op == 0x2 && rn == 0xf) /* MOV */
6707 return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
6708 else
6709 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6710 "dp (shift reg)", dsc);
6711 }
6712
6713
6714 /* Decode extension register load/store. Exactly the same as
6715 arm_decode_ext_reg_ld_st. */
6716
6717 static int
6718 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
6719 uint16_t insn2, struct regcache *regs,
6720 arm_displaced_step_closure *dsc)
6721 {
6722 unsigned int opcode = bits (insn1, 4, 8);
6723
6724 switch (opcode)
6725 {
6726 case 0x04: case 0x05:
6727 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6728 "vfp/neon vmov", dsc);
6729
6730 case 0x08: case 0x0c: /* 01x00 */
6731 case 0x0a: case 0x0e: /* 01x10 */
6732 case 0x12: case 0x16: /* 10x10 */
6733 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6734 "vfp/neon vstm/vpush", dsc);
6735
6736 case 0x09: case 0x0d: /* 01x01 */
6737 case 0x0b: case 0x0f: /* 01x11 */
6738 case 0x13: case 0x17: /* 10x11 */
6739 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6740 "vfp/neon vldm/vpop", dsc);
6741
6742 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
6743 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6744 "vstr", dsc);
6745 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
6746 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
6747 }
6748
6749 /* Should be unreachable. */
6750 return 1;
6751 }
6752
6753 static int
6754 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn,
6755 struct regcache *regs, arm_displaced_step_closure *dsc)
6756 {
6757 unsigned int op1 = bits (insn, 20, 25);
6758 int op = bit (insn, 4);
6759 unsigned int coproc = bits (insn, 8, 11);
6760
6761 if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
6762 return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
6763 else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
6764 && (coproc & 0xe) != 0xa)
6765 /* stc/stc2. */
6766 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6767 else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
6768 && (coproc & 0xe) != 0xa)
6769 /* ldc/ldc2 imm/lit. */
6770 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
6771 else if ((op1 & 0x3e) == 0x00)
6772 return arm_copy_undef (gdbarch, insn, dsc);
6773 else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
6774 return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
6775 else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
6776 return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
6777 else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
6778 return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
6779 else if ((op1 & 0x30) == 0x20 && !op)
6780 {
6781 if ((coproc & 0xe) == 0xa)
6782 return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
6783 else
6784 return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
6785 }
6786 else if ((op1 & 0x30) == 0x20 && op)
6787 return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
6788 else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
6789 return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
6790 else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
6791 return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
6792 else if ((op1 & 0x30) == 0x30)
6793 return arm_copy_svc (gdbarch, insn, regs, dsc);
6794 else
6795 return arm_copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
6796 }
6797
6798 static int
6799 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
6800 uint16_t insn2, struct regcache *regs,
6801 arm_displaced_step_closure *dsc)
6802 {
6803 unsigned int coproc = bits (insn2, 8, 11);
6804 unsigned int bit_5_8 = bits (insn1, 5, 8);
6805 unsigned int bit_9 = bit (insn1, 9);
6806 unsigned int bit_4 = bit (insn1, 4);
6807
6808 if (bit_9 == 0)
6809 {
6810 if (bit_5_8 == 2)
6811 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6812 "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
6813 dsc);
6814 else if (bit_5_8 == 0) /* UNDEFINED. */
6815 return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
6816 else
6817 {
6818 /*coproc is 101x. SIMD/VFP, ext registers load/store. */
6819 if ((coproc & 0xe) == 0xa)
6820 return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
6821 dsc);
6822 else /* coproc is not 101x. */
6823 {
6824 if (bit_4 == 0) /* STC/STC2. */
6825 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6826 "stc/stc2", dsc);
6827 else /* LDC/LDC2 {literal, immeidate}. */
6828 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
6829 regs, dsc);
6830 }
6831 }
6832 }
6833 else
6834 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
6835
6836 return 0;
6837 }
6838
6839 static void
6840 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
6841 arm_displaced_step_closure *dsc, int rd)
6842 {
6843 /* ADR Rd, #imm
6844
6845 Rewrite as:
6846
6847 Preparation: Rd <- PC
6848 Insn: ADD Rd, #imm
6849 Cleanup: Null.
6850 */
6851
6852 /* Rd <- PC */
6853 int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6854 displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
6855 }
6856
6857 static int
6858 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
6859 arm_displaced_step_closure *dsc,
6860 int rd, unsigned int imm)
6861 {
6862
6863 /* Encoding T2: ADDS Rd, #imm */
6864 dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
6865
6866 install_pc_relative (gdbarch, regs, dsc, rd);
6867
6868 return 0;
6869 }
6870
6871 static int
6872 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
6873 struct regcache *regs,
6874 arm_displaced_step_closure *dsc)
6875 {
6876 unsigned int rd = bits (insn, 8, 10);
6877 unsigned int imm8 = bits (insn, 0, 7);
6878
6879 if (debug_displaced)
6880 fprintf_unfiltered (gdb_stdlog,
6881 "displaced: copying thumb adr r%d, #%d insn %.4x\n",
6882 rd, imm8, insn);
6883
6884 return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
6885 }
6886
6887 static int
6888 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
6889 uint16_t insn2, struct regcache *regs,
6890 arm_displaced_step_closure *dsc)
6891 {
6892 unsigned int rd = bits (insn2, 8, 11);
6893 /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
6894 extract raw immediate encoding rather than computing immediate. When
6895 generating ADD or SUB instruction, we can simply perform OR operation to
6896 set immediate into ADD. */
6897 unsigned int imm_3_8 = insn2 & 0x70ff;
6898 unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10. */
6899
6900 if (debug_displaced)
6901 fprintf_unfiltered (gdb_stdlog,
6902 "displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
6903 rd, imm_i, imm_3_8, insn1, insn2);
6904
6905 if (bit (insn1, 7)) /* Encoding T2 */
6906 {
6907 /* Encoding T3: SUB Rd, Rd, #imm */
6908 dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
6909 dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6910 }
6911 else /* Encoding T3 */
6912 {
6913 /* Encoding T3: ADD Rd, Rd, #imm */
6914 dsc->modinsn[0] = (0xf100 | rd | imm_i);
6915 dsc->modinsn[1] = ((rd << 8) | imm_3_8);
6916 }
6917 dsc->numinsns = 2;
6918
6919 install_pc_relative (gdbarch, regs, dsc, rd);
6920
6921 return 0;
6922 }
6923
6924 static int
6925 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, uint16_t insn1,
6926 struct regcache *regs,
6927 arm_displaced_step_closure *dsc)
6928 {
6929 unsigned int rt = bits (insn1, 8, 10);
6930 unsigned int pc;
6931 int imm8 = (bits (insn1, 0, 7) << 2);
6932
6933 /* LDR Rd, #imm8
6934
6935 Rwrite as:
6936
6937 Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
6938
6939 Insn: LDR R0, [R2, R3];
6940 Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
6941
6942 if (debug_displaced)
6943 fprintf_unfiltered (gdb_stdlog,
6944 "displaced: copying thumb ldr r%d [pc #%d]\n"
6945 , rt, imm8);
6946
6947 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6948 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
6949 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
6950 pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6951 /* The assembler calculates the required value of the offset from the
6952 Align(PC,4) value of this instruction to the label. */
6953 pc = pc & 0xfffffffc;
6954
6955 displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
6956 displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
6957
6958 dsc->rd = rt;
6959 dsc->u.ldst.xfersize = 4;
6960 dsc->u.ldst.rn = 0;
6961 dsc->u.ldst.immed = 0;
6962 dsc->u.ldst.writeback = 0;
6963 dsc->u.ldst.restore_r4 = 0;
6964
6965 dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
6966
6967 dsc->cleanup = &cleanup_load;
6968
6969 return 0;
6970 }
6971
6972 /* Copy Thumb cbnz/cbz insruction. */
6973
6974 static int
6975 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
6976 struct regcache *regs,
6977 arm_displaced_step_closure *dsc)
6978 {
6979 int non_zero = bit (insn1, 11);
6980 unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
6981 CORE_ADDR from = dsc->insn_addr;
6982 int rn = bits (insn1, 0, 2);
6983 int rn_val = displaced_read_reg (regs, dsc, rn);
6984
6985 dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
6986 /* CBNZ and CBZ do not affect the condition flags. If condition is true,
6987 set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
6988 condition is false, let it be, cleanup_branch will do nothing. */
6989 if (dsc->u.branch.cond)
6990 {
6991 dsc->u.branch.cond = INST_AL;
6992 dsc->u.branch.dest = from + 4 + imm5;
6993 }
6994 else
6995 dsc->u.branch.dest = from + 2;
6996
6997 dsc->u.branch.link = 0;
6998 dsc->u.branch.exchange = 0;
6999
7000 if (debug_displaced)
7001 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
7002 " insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
7003 rn, rn_val, insn1, dsc->u.branch.dest);
7004
7005 dsc->modinsn[0] = THUMB_NOP;
7006
7007 dsc->cleanup = &cleanup_branch;
7008 return 0;
7009 }
7010
7011 /* Copy Table Branch Byte/Halfword */
7012 static int
7013 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
7014 uint16_t insn2, struct regcache *regs,
7015 arm_displaced_step_closure *dsc)
7016 {
7017 ULONGEST rn_val, rm_val;
7018 int is_tbh = bit (insn2, 4);
7019 CORE_ADDR halfwords = 0;
7020 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7021
7022 rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
7023 rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
7024
7025 if (is_tbh)
7026 {
7027 gdb_byte buf[2];
7028
7029 target_read_memory (rn_val + 2 * rm_val, buf, 2);
7030 halfwords = extract_unsigned_integer (buf, 2, byte_order);
7031 }
7032 else
7033 {
7034 gdb_byte buf[1];
7035
7036 target_read_memory (rn_val + rm_val, buf, 1);
7037 halfwords = extract_unsigned_integer (buf, 1, byte_order);
7038 }
7039
7040 if (debug_displaced)
7041 fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
7042 " offset 0x%x\n", is_tbh ? "tbh" : "tbb",
7043 (unsigned int) rn_val, (unsigned int) rm_val,
7044 (unsigned int) halfwords);
7045
7046 dsc->u.branch.cond = INST_AL;
7047 dsc->u.branch.link = 0;
7048 dsc->u.branch.exchange = 0;
7049 dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
7050
7051 dsc->cleanup = &cleanup_branch;
7052
7053 return 0;
7054 }
7055
7056 static void
7057 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
7058 arm_displaced_step_closure *dsc)
7059 {
7060 /* PC <- r7 */
7061 int val = displaced_read_reg (regs, dsc, 7);
7062 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
7063
7064 /* r7 <- r8 */
7065 val = displaced_read_reg (regs, dsc, 8);
7066 displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
7067
7068 /* r8 <- tmp[0] */
7069 displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
7070
7071 }
7072
7073 static int
7074 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, uint16_t insn1,
7075 struct regcache *regs,
7076 arm_displaced_step_closure *dsc)
7077 {
7078 dsc->u.block.regmask = insn1 & 0x00ff;
7079
7080 /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
7081 to :
7082
7083 (1) register list is full, that is, r0-r7 are used.
7084 Prepare: tmp[0] <- r8
7085
7086 POP {r0, r1, ...., r6, r7}; remove PC from reglist
7087 MOV r8, r7; Move value of r7 to r8;
7088 POP {r7}; Store PC value into r7.
7089
7090 Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
7091
7092 (2) register list is not full, supposing there are N registers in
7093 register list (except PC, 0 <= N <= 7).
7094 Prepare: for each i, 0 - N, tmp[i] <- ri.
7095
7096 POP {r0, r1, ...., rN};
7097
7098 Cleanup: Set registers in original reglist from r0 - rN. Restore r0 - rN
7099 from tmp[] properly.
7100 */
7101 if (debug_displaced)
7102 fprintf_unfiltered (gdb_stdlog,
7103 "displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
7104 dsc->u.block.regmask, insn1);
7105
7106 if (dsc->u.block.regmask == 0xff)
7107 {
7108 dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
7109
7110 dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
7111 dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
7112 dsc->modinsn[2] = 0xbc80; /* POP {r7} */
7113
7114 dsc->numinsns = 3;
7115 dsc->cleanup = &cleanup_pop_pc_16bit_all;
7116 }
7117 else
7118 {
7119 unsigned int num_in_list = bitcount (dsc->u.block.regmask);
7120 unsigned int i;
7121 unsigned int new_regmask;
7122
7123 for (i = 0; i < num_in_list + 1; i++)
7124 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7125
7126 new_regmask = (1 << (num_in_list + 1)) - 1;
7127
7128 if (debug_displaced)
7129 fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
7130 "{..., pc}: original reg list %.4x,"
7131 " modified list %.4x\n"),
7132 (int) dsc->u.block.regmask, new_regmask);
7133
7134 dsc->u.block.regmask |= 0x8000;
7135 dsc->u.block.writeback = 0;
7136 dsc->u.block.cond = INST_AL;
7137
7138 dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
7139
7140 dsc->cleanup = &cleanup_block_load_pc;
7141 }
7142
7143 return 0;
7144 }
7145
7146 static void
7147 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7148 struct regcache *regs,
7149 arm_displaced_step_closure *dsc)
7150 {
7151 unsigned short op_bit_12_15 = bits (insn1, 12, 15);
7152 unsigned short op_bit_10_11 = bits (insn1, 10, 11);
7153 int err = 0;
7154
7155 /* 16-bit thumb instructions. */
7156 switch (op_bit_12_15)
7157 {
7158 /* Shift (imme), add, subtract, move and compare. */
7159 case 0: case 1: case 2: case 3:
7160 err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7161 "shift/add/sub/mov/cmp",
7162 dsc);
7163 break;
7164 case 4:
7165 switch (op_bit_10_11)
7166 {
7167 case 0: /* Data-processing */
7168 err = thumb_copy_unmodified_16bit (gdbarch, insn1,
7169 "data-processing",
7170 dsc);
7171 break;
7172 case 1: /* Special data instructions and branch and exchange. */
7173 {
7174 unsigned short op = bits (insn1, 7, 9);
7175 if (op == 6 || op == 7) /* BX or BLX */
7176 err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
7177 else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers. */
7178 err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
7179 else
7180 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
7181 dsc);
7182 }
7183 break;
7184 default: /* LDR (literal) */
7185 err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
7186 }
7187 break;
7188 case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
7189 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
7190 break;
7191 case 10:
7192 if (op_bit_10_11 < 2) /* Generate PC-relative address */
7193 err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
7194 else /* Generate SP-relative address */
7195 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
7196 break;
7197 case 11: /* Misc 16-bit instructions */
7198 {
7199 switch (bits (insn1, 8, 11))
7200 {
7201 case 1: case 3: case 9: case 11: /* CBNZ, CBZ */
7202 err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
7203 break;
7204 case 12: case 13: /* POP */
7205 if (bit (insn1, 8)) /* PC is in register list. */
7206 err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
7207 else
7208 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
7209 break;
7210 case 15: /* If-Then, and hints */
7211 if (bits (insn1, 0, 3))
7212 /* If-Then makes up to four following instructions conditional.
7213 IT instruction itself is not conditional, so handle it as a
7214 common unmodified instruction. */
7215 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
7216 dsc);
7217 else
7218 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
7219 break;
7220 default:
7221 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
7222 }
7223 }
7224 break;
7225 case 12:
7226 if (op_bit_10_11 < 2) /* Store multiple registers */
7227 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
7228 else /* Load multiple registers */
7229 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
7230 break;
7231 case 13: /* Conditional branch and supervisor call */
7232 if (bits (insn1, 9, 11) != 7) /* conditional branch */
7233 err = thumb_copy_b (gdbarch, insn1, dsc);
7234 else
7235 err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
7236 break;
7237 case 14: /* Unconditional branch */
7238 err = thumb_copy_b (gdbarch, insn1, dsc);
7239 break;
7240 default:
7241 err = 1;
7242 }
7243
7244 if (err)
7245 internal_error (__FILE__, __LINE__,
7246 _("thumb_process_displaced_16bit_insn: Instruction decode error"));
7247 }
7248
7249 static int
7250 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
7251 uint16_t insn1, uint16_t insn2,
7252 struct regcache *regs,
7253 arm_displaced_step_closure *dsc)
7254 {
7255 int rt = bits (insn2, 12, 15);
7256 int rn = bits (insn1, 0, 3);
7257 int op1 = bits (insn1, 7, 8);
7258
7259 switch (bits (insn1, 5, 6))
7260 {
7261 case 0: /* Load byte and memory hints */
7262 if (rt == 0xf) /* PLD/PLI */
7263 {
7264 if (rn == 0xf)
7265 /* PLD literal or Encoding T3 of PLI(immediate, literal). */
7266 return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
7267 else
7268 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7269 "pli/pld", dsc);
7270 }
7271 else
7272 {
7273 if (rn == 0xf) /* LDRB/LDRSB (literal) */
7274 return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7275 1);
7276 else
7277 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7278 "ldrb{reg, immediate}/ldrbt",
7279 dsc);
7280 }
7281
7282 break;
7283 case 1: /* Load halfword and memory hints. */
7284 if (rt == 0xf) /* PLD{W} and Unalloc memory hint. */
7285 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7286 "pld/unalloc memhint", dsc);
7287 else
7288 {
7289 if (rn == 0xf)
7290 return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
7291 2);
7292 else
7293 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7294 "ldrh/ldrht", dsc);
7295 }
7296 break;
7297 case 2: /* Load word */
7298 {
7299 int insn2_bit_8_11 = bits (insn2, 8, 11);
7300
7301 if (rn == 0xf)
7302 return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
7303 else if (op1 == 0x1) /* Encoding T3 */
7304 return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
7305 0, 1);
7306 else /* op1 == 0x0 */
7307 {
7308 if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
7309 /* LDR (immediate) */
7310 return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7311 dsc, bit (insn2, 8), 1);
7312 else if (insn2_bit_8_11 == 0xe) /* LDRT */
7313 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7314 "ldrt", dsc);
7315 else
7316 /* LDR (register) */
7317 return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
7318 dsc, 0, 0);
7319 }
7320 break;
7321 }
7322 default:
7323 return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7324 break;
7325 }
7326 return 0;
7327 }
7328
7329 static void
7330 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
7331 uint16_t insn2, struct regcache *regs,
7332 arm_displaced_step_closure *dsc)
7333 {
7334 int err = 0;
7335 unsigned short op = bit (insn2, 15);
7336 unsigned int op1 = bits (insn1, 11, 12);
7337
7338 switch (op1)
7339 {
7340 case 1:
7341 {
7342 switch (bits (insn1, 9, 10))
7343 {
7344 case 0:
7345 if (bit (insn1, 6))
7346 {
7347 /* Load/store {dual, execlusive}, table branch. */
7348 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
7349 && bits (insn2, 5, 7) == 0)
7350 err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
7351 dsc);
7352 else
7353 /* PC is not allowed to use in load/store {dual, exclusive}
7354 instructions. */
7355 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7356 "load/store dual/ex", dsc);
7357 }
7358 else /* load/store multiple */
7359 {
7360 switch (bits (insn1, 7, 8))
7361 {
7362 case 0: case 3: /* SRS, RFE */
7363 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7364 "srs/rfe", dsc);
7365 break;
7366 case 1: case 2: /* LDM/STM/PUSH/POP */
7367 err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
7368 break;
7369 }
7370 }
7371 break;
7372
7373 case 1:
7374 /* Data-processing (shift register). */
7375 err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
7376 dsc);
7377 break;
7378 default: /* Coprocessor instructions. */
7379 err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7380 break;
7381 }
7382 break;
7383 }
7384 case 2: /* op1 = 2 */
7385 if (op) /* Branch and misc control. */
7386 {
7387 if (bit (insn2, 14) /* BLX/BL */
7388 || bit (insn2, 12) /* Unconditional branch */
7389 || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
7390 err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
7391 else
7392 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7393 "misc ctrl", dsc);
7394 }
7395 else
7396 {
7397 if (bit (insn1, 9)) /* Data processing (plain binary imm). */
7398 {
7399 int dp_op = bits (insn1, 4, 8);
7400 int rn = bits (insn1, 0, 3);
7401 if ((dp_op == 0 || dp_op == 0xa) && rn == 0xf)
7402 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
7403 regs, dsc);
7404 else
7405 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7406 "dp/pb", dsc);
7407 }
7408 else /* Data processing (modified immeidate) */
7409 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7410 "dp/mi", dsc);
7411 }
7412 break;
7413 case 3: /* op1 = 3 */
7414 switch (bits (insn1, 9, 10))
7415 {
7416 case 0:
7417 if (bit (insn1, 4))
7418 err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
7419 regs, dsc);
7420 else /* NEON Load/Store and Store single data item */
7421 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7422 "neon elt/struct load/store",
7423 dsc);
7424 break;
7425 case 1: /* op1 = 3, bits (9, 10) == 1 */
7426 switch (bits (insn1, 7, 8))
7427 {
7428 case 0: case 1: /* Data processing (register) */
7429 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7430 "dp(reg)", dsc);
7431 break;
7432 case 2: /* Multiply and absolute difference */
7433 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7434 "mul/mua/diff", dsc);
7435 break;
7436 case 3: /* Long multiply and divide */
7437 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7438 "lmul/lmua", dsc);
7439 break;
7440 }
7441 break;
7442 default: /* Coprocessor instructions */
7443 err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
7444 break;
7445 }
7446 break;
7447 default:
7448 err = 1;
7449 }
7450
7451 if (err)
7452 internal_error (__FILE__, __LINE__,
7453 _("thumb_process_displaced_32bit_insn: Instruction decode error"));
7454
7455 }
7456
7457 static void
7458 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7459 struct regcache *regs,
7460 arm_displaced_step_closure *dsc)
7461 {
7462 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7463 uint16_t insn1
7464 = read_memory_unsigned_integer (from, 2, byte_order_for_code);
7465
7466 if (debug_displaced)
7467 fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
7468 "at %.8lx\n", insn1, (unsigned long) from);
7469
7470 dsc->is_thumb = 1;
7471 dsc->insn_size = thumb_insn_size (insn1);
7472 if (thumb_insn_size (insn1) == 4)
7473 {
7474 uint16_t insn2
7475 = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
7476 thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
7477 }
7478 else
7479 thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
7480 }
7481
7482 void
7483 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
7484 CORE_ADDR to, struct regcache *regs,
7485 arm_displaced_step_closure *dsc)
7486 {
7487 int err = 0;
7488 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7489 uint32_t insn;
7490
7491 /* Most displaced instructions use a 1-instruction scratch space, so set this
7492 here and override below if/when necessary. */
7493 dsc->numinsns = 1;
7494 dsc->insn_addr = from;
7495 dsc->scratch_base = to;
7496 dsc->cleanup = NULL;
7497 dsc->wrote_to_pc = 0;
7498
7499 if (!displaced_in_arm_mode (regs))
7500 return thumb_process_displaced_insn (gdbarch, from, regs, dsc);
7501
7502 dsc->is_thumb = 0;
7503 dsc->insn_size = 4;
7504 insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
7505 if (debug_displaced)
7506 fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
7507 "at %.8lx\n", (unsigned long) insn,
7508 (unsigned long) from);
7509
7510 if ((insn & 0xf0000000) == 0xf0000000)
7511 err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
7512 else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
7513 {
7514 case 0x0: case 0x1: case 0x2: case 0x3:
7515 err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
7516 break;
7517
7518 case 0x4: case 0x5: case 0x6:
7519 err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
7520 break;
7521
7522 case 0x7:
7523 err = arm_decode_media (gdbarch, insn, dsc);
7524 break;
7525
7526 case 0x8: case 0x9: case 0xa: case 0xb:
7527 err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
7528 break;
7529
7530 case 0xc: case 0xd: case 0xe: case 0xf:
7531 err = arm_decode_svc_copro (gdbarch, insn, regs, dsc);
7532 break;
7533 }
7534
7535 if (err)
7536 internal_error (__FILE__, __LINE__,
7537 _("arm_process_displaced_insn: Instruction decode error"));
7538 }
7539
7540 /* Actually set up the scratch space for a displaced instruction. */
7541
7542 void
7543 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
7544 CORE_ADDR to, arm_displaced_step_closure *dsc)
7545 {
7546 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7547 unsigned int i, len, offset;
7548 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7549 int size = dsc->is_thumb? 2 : 4;
7550 const gdb_byte *bkp_insn;
7551
7552 offset = 0;
7553 /* Poke modified instruction(s). */
7554 for (i = 0; i < dsc->numinsns; i++)
7555 {
7556 if (debug_displaced)
7557 {
7558 fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
7559 if (size == 4)
7560 fprintf_unfiltered (gdb_stdlog, "%.8lx",
7561 dsc->modinsn[i]);
7562 else if (size == 2)
7563 fprintf_unfiltered (gdb_stdlog, "%.4x",
7564 (unsigned short)dsc->modinsn[i]);
7565
7566 fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
7567 (unsigned long) to + offset);
7568
7569 }
7570 write_memory_unsigned_integer (to + offset, size,
7571 byte_order_for_code,
7572 dsc->modinsn[i]);
7573 offset += size;
7574 }
7575
7576 /* Choose the correct breakpoint instruction. */
7577 if (dsc->is_thumb)
7578 {
7579 bkp_insn = tdep->thumb_breakpoint;
7580 len = tdep->thumb_breakpoint_size;
7581 }
7582 else
7583 {
7584 bkp_insn = tdep->arm_breakpoint;
7585 len = tdep->arm_breakpoint_size;
7586 }
7587
7588 /* Put breakpoint afterwards. */
7589 write_memory (to + offset, bkp_insn, len);
7590
7591 if (debug_displaced)
7592 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
7593 paddress (gdbarch, from), paddress (gdbarch, to));
7594 }
7595
7596 /* Entry point for cleaning things up after a displaced instruction has been
7597 single-stepped. */
7598
7599 void
7600 arm_displaced_step_fixup (struct gdbarch *gdbarch,
7601 struct displaced_step_closure *dsc_,
7602 CORE_ADDR from, CORE_ADDR to,
7603 struct regcache *regs)
7604 {
7605 arm_displaced_step_closure *dsc = (arm_displaced_step_closure *) dsc_;
7606
7607 if (dsc->cleanup)
7608 dsc->cleanup (gdbarch, regs, dsc);
7609
7610 if (!dsc->wrote_to_pc)
7611 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
7612 dsc->insn_addr + dsc->insn_size);
7613
7614 }
7615
7616 #include "bfd-in2.h"
7617 #include "libcoff.h"
7618
7619 static int
7620 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
7621 {
7622 gdb_disassembler *di
7623 = static_cast<gdb_disassembler *>(info->application_data);
7624 struct gdbarch *gdbarch = di->arch ();
7625
7626 if (arm_pc_is_thumb (gdbarch, memaddr))
7627 {
7628 static asymbol *asym;
7629 static combined_entry_type ce;
7630 static struct coff_symbol_struct csym;
7631 static struct bfd fake_bfd;
7632 static bfd_target fake_target;
7633
7634 if (csym.native == NULL)
7635 {
7636 /* Create a fake symbol vector containing a Thumb symbol.
7637 This is solely so that the code in print_insn_little_arm()
7638 and print_insn_big_arm() in opcodes/arm-dis.c will detect
7639 the presence of a Thumb symbol and switch to decoding
7640 Thumb instructions. */
7641
7642 fake_target.flavour = bfd_target_coff_flavour;
7643 fake_bfd.xvec = &fake_target;
7644 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
7645 csym.native = &ce;
7646 csym.symbol.the_bfd = &fake_bfd;
7647 csym.symbol.name = "fake";
7648 asym = (asymbol *) & csym;
7649 }
7650
7651 memaddr = UNMAKE_THUMB_ADDR (memaddr);
7652 info->symbols = &asym;
7653 }
7654 else
7655 info->symbols = NULL;
7656
7657 /* GDB is able to get bfd_mach from the exe_bfd, info->mach is
7658 accurate, so mark USER_SPECIFIED_MACHINE_TYPE bit. Otherwise,
7659 opcodes/arm-dis.c:print_insn reset info->mach, and it will trigger
7660 the assert on the mismatch of info->mach and bfd_get_mach (exec_bfd)
7661 in default_print_insn. */
7662 if (exec_bfd != NULL)
7663 info->flags |= USER_SPECIFIED_MACHINE_TYPE;
7664
7665 return default_print_insn (memaddr, info);
7666 }
7667
7668 /* The following define instruction sequences that will cause ARM
7669 cpu's to take an undefined instruction trap. These are used to
7670 signal a breakpoint to GDB.
7671
7672 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
7673 modes. A different instruction is required for each mode. The ARM
7674 cpu's can also be big or little endian. Thus four different
7675 instructions are needed to support all cases.
7676
7677 Note: ARMv4 defines several new instructions that will take the
7678 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
7679 not in fact add the new instructions. The new undefined
7680 instructions in ARMv4 are all instructions that had no defined
7681 behaviour in earlier chips. There is no guarantee that they will
7682 raise an exception, but may be treated as NOP's. In practice, it
7683 may only safe to rely on instructions matching:
7684
7685 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
7686 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
7687 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
7688
7689 Even this may only true if the condition predicate is true. The
7690 following use a condition predicate of ALWAYS so it is always TRUE.
7691
7692 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
7693 and NetBSD all use a software interrupt rather than an undefined
7694 instruction to force a trap. This can be handled by by the
7695 abi-specific code during establishment of the gdbarch vector. */
7696
7697 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
7698 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
7699 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
7700 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
7701
7702 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
7703 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
7704 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
7705 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
7706
7707 /* Implement the breakpoint_kind_from_pc gdbarch method. */
7708
7709 static int
7710 arm_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7711 {
7712 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7713 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7714
7715 if (arm_pc_is_thumb (gdbarch, *pcptr))
7716 {
7717 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
7718
7719 /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
7720 check whether we are replacing a 32-bit instruction. */
7721 if (tdep->thumb2_breakpoint != NULL)
7722 {
7723 gdb_byte buf[2];
7724
7725 if (target_read_memory (*pcptr, buf, 2) == 0)
7726 {
7727 unsigned short inst1;
7728
7729 inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
7730 if (thumb_insn_size (inst1) == 4)
7731 return ARM_BP_KIND_THUMB2;
7732 }
7733 }
7734
7735 return ARM_BP_KIND_THUMB;
7736 }
7737 else
7738 return ARM_BP_KIND_ARM;
7739
7740 }
7741
7742 /* Implement the sw_breakpoint_from_kind gdbarch method. */
7743
7744 static const gdb_byte *
7745 arm_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7746 {
7747 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7748
7749 switch (kind)
7750 {
7751 case ARM_BP_KIND_ARM:
7752 *size = tdep->arm_breakpoint_size;
7753 return tdep->arm_breakpoint;
7754 case ARM_BP_KIND_THUMB:
7755 *size = tdep->thumb_breakpoint_size;
7756 return tdep->thumb_breakpoint;
7757 case ARM_BP_KIND_THUMB2:
7758 *size = tdep->thumb2_breakpoint_size;
7759 return tdep->thumb2_breakpoint;
7760 default:
7761 gdb_assert_not_reached ("unexpected arm breakpoint kind");
7762 }
7763 }
7764
7765 /* Implement the breakpoint_kind_from_current_state gdbarch method. */
7766
7767 static int
7768 arm_breakpoint_kind_from_current_state (struct gdbarch *gdbarch,
7769 struct regcache *regcache,
7770 CORE_ADDR *pcptr)
7771 {
7772 gdb_byte buf[4];
7773
7774 /* Check the memory pointed by PC is readable. */
7775 if (target_read_memory (regcache_read_pc (regcache), buf, 4) == 0)
7776 {
7777 struct arm_get_next_pcs next_pcs_ctx;
7778
7779 arm_get_next_pcs_ctor (&next_pcs_ctx,
7780 &arm_get_next_pcs_ops,
7781 gdbarch_byte_order (gdbarch),
7782 gdbarch_byte_order_for_code (gdbarch),
7783 0,
7784 regcache);
7785
7786 std::vector<CORE_ADDR> next_pcs = arm_get_next_pcs (&next_pcs_ctx);
7787
7788 /* If MEMADDR is the next instruction of current pc, do the
7789 software single step computation, and get the thumb mode by
7790 the destination address. */
7791 for (CORE_ADDR pc : next_pcs)
7792 {
7793 if (UNMAKE_THUMB_ADDR (pc) == *pcptr)
7794 {
7795 if (IS_THUMB_ADDR (pc))
7796 {
7797 *pcptr = MAKE_THUMB_ADDR (*pcptr);
7798 return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7799 }
7800 else
7801 return ARM_BP_KIND_ARM;
7802 }
7803 }
7804 }
7805
7806 return arm_breakpoint_kind_from_pc (gdbarch, pcptr);
7807 }
7808
7809 /* Extract from an array REGBUF containing the (raw) register state a
7810 function return value of type TYPE, and copy that, in virtual
7811 format, into VALBUF. */
7812
7813 static void
7814 arm_extract_return_value (struct type *type, struct regcache *regs,
7815 gdb_byte *valbuf)
7816 {
7817 struct gdbarch *gdbarch = regs->arch ();
7818 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7819
7820 if (TYPE_CODE_FLT == TYPE_CODE (type))
7821 {
7822 switch (gdbarch_tdep (gdbarch)->fp_model)
7823 {
7824 case ARM_FLOAT_FPA:
7825 {
7826 /* The value is in register F0 in internal format. We need to
7827 extract the raw value and then convert it to the desired
7828 internal type. */
7829 bfd_byte tmpbuf[FP_REGISTER_SIZE];
7830
7831 regs->cooked_read (ARM_F0_REGNUM, tmpbuf);
7832 target_float_convert (tmpbuf, arm_ext_type (gdbarch),
7833 valbuf, type);
7834 }
7835 break;
7836
7837 case ARM_FLOAT_SOFT_FPA:
7838 case ARM_FLOAT_SOFT_VFP:
7839 /* ARM_FLOAT_VFP can arise if this is a variadic function so
7840 not using the VFP ABI code. */
7841 case ARM_FLOAT_VFP:
7842 regs->cooked_read (ARM_A1_REGNUM, valbuf);
7843 if (TYPE_LENGTH (type) > 4)
7844 regs->cooked_read (ARM_A1_REGNUM + 1, valbuf + INT_REGISTER_SIZE);
7845 break;
7846
7847 default:
7848 internal_error (__FILE__, __LINE__,
7849 _("arm_extract_return_value: "
7850 "Floating point model not supported"));
7851 break;
7852 }
7853 }
7854 else if (TYPE_CODE (type) == TYPE_CODE_INT
7855 || TYPE_CODE (type) == TYPE_CODE_CHAR
7856 || TYPE_CODE (type) == TYPE_CODE_BOOL
7857 || TYPE_CODE (type) == TYPE_CODE_PTR
7858 || TYPE_IS_REFERENCE (type)
7859 || TYPE_CODE (type) == TYPE_CODE_ENUM)
7860 {
7861 /* If the type is a plain integer, then the access is
7862 straight-forward. Otherwise we have to play around a bit
7863 more. */
7864 int len = TYPE_LENGTH (type);
7865 int regno = ARM_A1_REGNUM;
7866 ULONGEST tmp;
7867
7868 while (len > 0)
7869 {
7870 /* By using store_unsigned_integer we avoid having to do
7871 anything special for small big-endian values. */
7872 regcache_cooked_read_unsigned (regs, regno++, &tmp);
7873 store_unsigned_integer (valbuf,
7874 (len > INT_REGISTER_SIZE
7875 ? INT_REGISTER_SIZE : len),
7876 byte_order, tmp);
7877 len -= INT_REGISTER_SIZE;
7878 valbuf += INT_REGISTER_SIZE;
7879 }
7880 }
7881 else
7882 {
7883 /* For a structure or union the behaviour is as if the value had
7884 been stored to word-aligned memory and then loaded into
7885 registers with 32-bit load instruction(s). */
7886 int len = TYPE_LENGTH (type);
7887 int regno = ARM_A1_REGNUM;
7888 bfd_byte tmpbuf[INT_REGISTER_SIZE];
7889
7890 while (len > 0)
7891 {
7892 regs->cooked_read (regno++, tmpbuf);
7893 memcpy (valbuf, tmpbuf,
7894 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
7895 len -= INT_REGISTER_SIZE;
7896 valbuf += INT_REGISTER_SIZE;
7897 }
7898 }
7899 }
7900
7901
7902 /* Will a function return an aggregate type in memory or in a
7903 register? Return 0 if an aggregate type can be returned in a
7904 register, 1 if it must be returned in memory. */
7905
7906 static int
7907 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
7908 {
7909 enum type_code code;
7910
7911 type = check_typedef (type);
7912
7913 /* Simple, non-aggregate types (ie not including vectors and
7914 complex) are always returned in a register (or registers). */
7915 code = TYPE_CODE (type);
7916 if (TYPE_CODE_STRUCT != code && TYPE_CODE_UNION != code
7917 && TYPE_CODE_ARRAY != code && TYPE_CODE_COMPLEX != code)
7918 return 0;
7919
7920 if (TYPE_CODE_ARRAY == code && TYPE_VECTOR (type))
7921 {
7922 /* Vector values should be returned using ARM registers if they
7923 are not over 16 bytes. */
7924 return (TYPE_LENGTH (type) > 16);
7925 }
7926
7927 if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
7928 {
7929 /* The AAPCS says all aggregates not larger than a word are returned
7930 in a register. */
7931 if (TYPE_LENGTH (type) <= INT_REGISTER_SIZE)
7932 return 0;
7933
7934 return 1;
7935 }
7936 else
7937 {
7938 int nRc;
7939
7940 /* All aggregate types that won't fit in a register must be returned
7941 in memory. */
7942 if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
7943 return 1;
7944
7945 /* In the ARM ABI, "integer" like aggregate types are returned in
7946 registers. For an aggregate type to be integer like, its size
7947 must be less than or equal to INT_REGISTER_SIZE and the
7948 offset of each addressable subfield must be zero. Note that bit
7949 fields are not addressable, and all addressable subfields of
7950 unions always start at offset zero.
7951
7952 This function is based on the behaviour of GCC 2.95.1.
7953 See: gcc/arm.c: arm_return_in_memory() for details.
7954
7955 Note: All versions of GCC before GCC 2.95.2 do not set up the
7956 parameters correctly for a function returning the following
7957 structure: struct { float f;}; This should be returned in memory,
7958 not a register. Richard Earnshaw sent me a patch, but I do not
7959 know of any way to detect if a function like the above has been
7960 compiled with the correct calling convention. */
7961
7962 /* Assume all other aggregate types can be returned in a register.
7963 Run a check for structures, unions and arrays. */
7964 nRc = 0;
7965
7966 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
7967 {
7968 int i;
7969 /* Need to check if this struct/union is "integer" like. For
7970 this to be true, its size must be less than or equal to
7971 INT_REGISTER_SIZE and the offset of each addressable
7972 subfield must be zero. Note that bit fields are not
7973 addressable, and unions always start at offset zero. If any
7974 of the subfields is a floating point type, the struct/union
7975 cannot be an integer type. */
7976
7977 /* For each field in the object, check:
7978 1) Is it FP? --> yes, nRc = 1;
7979 2) Is it addressable (bitpos != 0) and
7980 not packed (bitsize == 0)?
7981 --> yes, nRc = 1
7982 */
7983
7984 for (i = 0; i < TYPE_NFIELDS (type); i++)
7985 {
7986 enum type_code field_type_code;
7987
7988 field_type_code
7989 = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
7990 i)));
7991
7992 /* Is it a floating point type field? */
7993 if (field_type_code == TYPE_CODE_FLT)
7994 {
7995 nRc = 1;
7996 break;
7997 }
7998
7999 /* If bitpos != 0, then we have to care about it. */
8000 if (TYPE_FIELD_BITPOS (type, i) != 0)
8001 {
8002 /* Bitfields are not addressable. If the field bitsize is
8003 zero, then the field is not packed. Hence it cannot be
8004 a bitfield or any other packed type. */
8005 if (TYPE_FIELD_BITSIZE (type, i) == 0)
8006 {
8007 nRc = 1;
8008 break;
8009 }
8010 }
8011 }
8012 }
8013
8014 return nRc;
8015 }
8016 }
8017
8018 /* Write into appropriate registers a function return value of type
8019 TYPE, given in virtual format. */
8020
8021 static void
8022 arm_store_return_value (struct type *type, struct regcache *regs,
8023 const gdb_byte *valbuf)
8024 {
8025 struct gdbarch *gdbarch = regs->arch ();
8026 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8027
8028 if (TYPE_CODE (type) == TYPE_CODE_FLT)
8029 {
8030 gdb_byte buf[FP_REGISTER_SIZE];
8031
8032 switch (gdbarch_tdep (gdbarch)->fp_model)
8033 {
8034 case ARM_FLOAT_FPA:
8035
8036 target_float_convert (valbuf, type, buf, arm_ext_type (gdbarch));
8037 regs->cooked_write (ARM_F0_REGNUM, buf);
8038 break;
8039
8040 case ARM_FLOAT_SOFT_FPA:
8041 case ARM_FLOAT_SOFT_VFP:
8042 /* ARM_FLOAT_VFP can arise if this is a variadic function so
8043 not using the VFP ABI code. */
8044 case ARM_FLOAT_VFP:
8045 regs->cooked_write (ARM_A1_REGNUM, valbuf);
8046 if (TYPE_LENGTH (type) > 4)
8047 regs->cooked_write (ARM_A1_REGNUM + 1, valbuf + INT_REGISTER_SIZE);
8048 break;
8049
8050 default:
8051 internal_error (__FILE__, __LINE__,
8052 _("arm_store_return_value: Floating "
8053 "point model not supported"));
8054 break;
8055 }
8056 }
8057 else if (TYPE_CODE (type) == TYPE_CODE_INT
8058 || TYPE_CODE (type) == TYPE_CODE_CHAR
8059 || TYPE_CODE (type) == TYPE_CODE_BOOL
8060 || TYPE_CODE (type) == TYPE_CODE_PTR
8061 || TYPE_IS_REFERENCE (type)
8062 || TYPE_CODE (type) == TYPE_CODE_ENUM)
8063 {
8064 if (TYPE_LENGTH (type) <= 4)
8065 {
8066 /* Values of one word or less are zero/sign-extended and
8067 returned in r0. */
8068 bfd_byte tmpbuf[INT_REGISTER_SIZE];
8069 LONGEST val = unpack_long (type, valbuf);
8070
8071 store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
8072 regs->cooked_write (ARM_A1_REGNUM, tmpbuf);
8073 }
8074 else
8075 {
8076 /* Integral values greater than one word are stored in consecutive
8077 registers starting with r0. This will always be a multiple of
8078 the regiser size. */
8079 int len = TYPE_LENGTH (type);
8080 int regno = ARM_A1_REGNUM;
8081
8082 while (len > 0)
8083 {
8084 regs->cooked_write (regno++, valbuf);
8085 len -= INT_REGISTER_SIZE;
8086 valbuf += INT_REGISTER_SIZE;
8087 }
8088 }
8089 }
8090 else
8091 {
8092 /* For a structure or union the behaviour is as if the value had
8093 been stored to word-aligned memory and then loaded into
8094 registers with 32-bit load instruction(s). */
8095 int len = TYPE_LENGTH (type);
8096 int regno = ARM_A1_REGNUM;
8097 bfd_byte tmpbuf[INT_REGISTER_SIZE];
8098
8099 while (len > 0)
8100 {
8101 memcpy (tmpbuf, valbuf,
8102 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8103 regs->cooked_write (regno++, tmpbuf);
8104 len -= INT_REGISTER_SIZE;
8105 valbuf += INT_REGISTER_SIZE;
8106 }
8107 }
8108 }
8109
8110
8111 /* Handle function return values. */
8112
8113 static enum return_value_convention
8114 arm_return_value (struct gdbarch *gdbarch, struct value *function,
8115 struct type *valtype, struct regcache *regcache,
8116 gdb_byte *readbuf, const gdb_byte *writebuf)
8117 {
8118 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8119 struct type *func_type = function ? value_type (function) : NULL;
8120 enum arm_vfp_cprc_base_type vfp_base_type;
8121 int vfp_base_count;
8122
8123 if (arm_vfp_abi_for_function (gdbarch, func_type)
8124 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
8125 {
8126 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
8127 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
8128 int i;
8129 for (i = 0; i < vfp_base_count; i++)
8130 {
8131 if (reg_char == 'q')
8132 {
8133 if (writebuf)
8134 arm_neon_quad_write (gdbarch, regcache, i,
8135 writebuf + i * unit_length);
8136
8137 if (readbuf)
8138 arm_neon_quad_read (gdbarch, regcache, i,
8139 readbuf + i * unit_length);
8140 }
8141 else
8142 {
8143 char name_buf[4];
8144 int regnum;
8145
8146 xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
8147 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8148 strlen (name_buf));
8149 if (writebuf)
8150 regcache->cooked_write (regnum, writebuf + i * unit_length);
8151 if (readbuf)
8152 regcache->cooked_read (regnum, readbuf + i * unit_length);
8153 }
8154 }
8155 return RETURN_VALUE_REGISTER_CONVENTION;
8156 }
8157
8158 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
8159 || TYPE_CODE (valtype) == TYPE_CODE_UNION
8160 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
8161 {
8162 if (tdep->struct_return == pcc_struct_return
8163 || arm_return_in_memory (gdbarch, valtype))
8164 return RETURN_VALUE_STRUCT_CONVENTION;
8165 }
8166 else if (TYPE_CODE (valtype) == TYPE_CODE_COMPLEX)
8167 {
8168 if (arm_return_in_memory (gdbarch, valtype))
8169 return RETURN_VALUE_STRUCT_CONVENTION;
8170 }
8171
8172 if (writebuf)
8173 arm_store_return_value (valtype, regcache, writebuf);
8174
8175 if (readbuf)
8176 arm_extract_return_value (valtype, regcache, readbuf);
8177
8178 return RETURN_VALUE_REGISTER_CONVENTION;
8179 }
8180
8181
8182 static int
8183 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
8184 {
8185 struct gdbarch *gdbarch = get_frame_arch (frame);
8186 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8187 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8188 CORE_ADDR jb_addr;
8189 gdb_byte buf[INT_REGISTER_SIZE];
8190
8191 jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
8192
8193 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
8194 INT_REGISTER_SIZE))
8195 return 0;
8196
8197 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
8198 return 1;
8199 }
8200
8201 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
8202 return the target PC. Otherwise return 0. */
8203
8204 CORE_ADDR
8205 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
8206 {
8207 const char *name;
8208 int namelen;
8209 CORE_ADDR start_addr;
8210
8211 /* Find the starting address and name of the function containing the PC. */
8212 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
8213 {
8214 /* Trampoline 'bx reg' doesn't belong to any functions. Do the
8215 check here. */
8216 start_addr = arm_skip_bx_reg (frame, pc);
8217 if (start_addr != 0)
8218 return start_addr;
8219
8220 return 0;
8221 }
8222
8223 /* If PC is in a Thumb call or return stub, return the address of the
8224 target PC, which is in a register. The thunk functions are called
8225 _call_via_xx, where x is the register name. The possible names
8226 are r0-r9, sl, fp, ip, sp, and lr. ARM RealView has similar
8227 functions, named __ARM_call_via_r[0-7]. */
8228 if (startswith (name, "_call_via_")
8229 || startswith (name, "__ARM_call_via_"))
8230 {
8231 /* Use the name suffix to determine which register contains the
8232 target PC. */
8233 static const char *table[15] =
8234 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8235 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
8236 };
8237 int regno;
8238 int offset = strlen (name) - 2;
8239
8240 for (regno = 0; regno <= 14; regno++)
8241 if (strcmp (&name[offset], table[regno]) == 0)
8242 return get_frame_register_unsigned (frame, regno);
8243 }
8244
8245 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
8246 non-interworking calls to foo. We could decode the stubs
8247 to find the target but it's easier to use the symbol table. */
8248 namelen = strlen (name);
8249 if (name[0] == '_' && name[1] == '_'
8250 && ((namelen > 2 + strlen ("_from_thumb")
8251 && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
8252 || (namelen > 2 + strlen ("_from_arm")
8253 && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
8254 {
8255 char *target_name;
8256 int target_len = namelen - 2;
8257 struct bound_minimal_symbol minsym;
8258 struct objfile *objfile;
8259 struct obj_section *sec;
8260
8261 if (name[namelen - 1] == 'b')
8262 target_len -= strlen ("_from_thumb");
8263 else
8264 target_len -= strlen ("_from_arm");
8265
8266 target_name = (char *) alloca (target_len + 1);
8267 memcpy (target_name, name + 2, target_len);
8268 target_name[target_len] = '\0';
8269
8270 sec = find_pc_section (pc);
8271 objfile = (sec == NULL) ? NULL : sec->objfile;
8272 minsym = lookup_minimal_symbol (target_name, NULL, objfile);
8273 if (minsym.minsym != NULL)
8274 return BMSYMBOL_VALUE_ADDRESS (minsym);
8275 else
8276 return 0;
8277 }
8278
8279 return 0; /* not a stub */
8280 }
8281
8282 static void
8283 set_arm_command (const char *args, int from_tty)
8284 {
8285 printf_unfiltered (_("\
8286 \"set arm\" must be followed by an apporpriate subcommand.\n"));
8287 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
8288 }
8289
8290 static void
8291 show_arm_command (const char *args, int from_tty)
8292 {
8293 cmd_show_list (showarmcmdlist, from_tty, "");
8294 }
8295
8296 static void
8297 arm_update_current_architecture (void)
8298 {
8299 struct gdbarch_info info;
8300
8301 /* If the current architecture is not ARM, we have nothing to do. */
8302 if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
8303 return;
8304
8305 /* Update the architecture. */
8306 gdbarch_info_init (&info);
8307
8308 if (!gdbarch_update_p (info))
8309 internal_error (__FILE__, __LINE__, _("could not update architecture"));
8310 }
8311
8312 static void
8313 set_fp_model_sfunc (const char *args, int from_tty,
8314 struct cmd_list_element *c)
8315 {
8316 int fp_model;
8317
8318 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
8319 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
8320 {
8321 arm_fp_model = (enum arm_float_model) fp_model;
8322 break;
8323 }
8324
8325 if (fp_model == ARM_FLOAT_LAST)
8326 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
8327 current_fp_model);
8328
8329 arm_update_current_architecture ();
8330 }
8331
8332 static void
8333 show_fp_model (struct ui_file *file, int from_tty,
8334 struct cmd_list_element *c, const char *value)
8335 {
8336 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8337
8338 if (arm_fp_model == ARM_FLOAT_AUTO
8339 && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8340 fprintf_filtered (file, _("\
8341 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
8342 fp_model_strings[tdep->fp_model]);
8343 else
8344 fprintf_filtered (file, _("\
8345 The current ARM floating point model is \"%s\".\n"),
8346 fp_model_strings[arm_fp_model]);
8347 }
8348
8349 static void
8350 arm_set_abi (const char *args, int from_tty,
8351 struct cmd_list_element *c)
8352 {
8353 int arm_abi;
8354
8355 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
8356 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
8357 {
8358 arm_abi_global = (enum arm_abi_kind) arm_abi;
8359 break;
8360 }
8361
8362 if (arm_abi == ARM_ABI_LAST)
8363 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
8364 arm_abi_string);
8365
8366 arm_update_current_architecture ();
8367 }
8368
8369 static void
8370 arm_show_abi (struct ui_file *file, int from_tty,
8371 struct cmd_list_element *c, const char *value)
8372 {
8373 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
8374
8375 if (arm_abi_global == ARM_ABI_AUTO
8376 && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
8377 fprintf_filtered (file, _("\
8378 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
8379 arm_abi_strings[tdep->arm_abi]);
8380 else
8381 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
8382 arm_abi_string);
8383 }
8384
8385 static void
8386 arm_show_fallback_mode (struct ui_file *file, int from_tty,
8387 struct cmd_list_element *c, const char *value)
8388 {
8389 fprintf_filtered (file,
8390 _("The current execution mode assumed "
8391 "(when symbols are unavailable) is \"%s\".\n"),
8392 arm_fallback_mode_string);
8393 }
8394
8395 static void
8396 arm_show_force_mode (struct ui_file *file, int from_tty,
8397 struct cmd_list_element *c, const char *value)
8398 {
8399 fprintf_filtered (file,
8400 _("The current execution mode assumed "
8401 "(even when symbols are available) is \"%s\".\n"),
8402 arm_force_mode_string);
8403 }
8404
8405 /* If the user changes the register disassembly style used for info
8406 register and other commands, we have to also switch the style used
8407 in opcodes for disassembly output. This function is run in the "set
8408 arm disassembly" command, and does that. */
8409
8410 static void
8411 set_disassembly_style_sfunc (const char *args, int from_tty,
8412 struct cmd_list_element *c)
8413 {
8414 /* Convert the short style name into the long style name (eg, reg-names-*)
8415 before calling the generic set_disassembler_options() function. */
8416 std::string long_name = std::string ("reg-names-") + disassembly_style;
8417 set_disassembler_options (&long_name[0]);
8418 }
8419
8420 static void
8421 show_disassembly_style_sfunc (struct ui_file *file, int from_tty,
8422 struct cmd_list_element *c, const char *value)
8423 {
8424 struct gdbarch *gdbarch = get_current_arch ();
8425 char *options = get_disassembler_options (gdbarch);
8426 const char *style = "";
8427 int len = 0;
8428 const char *opt;
8429
8430 FOR_EACH_DISASSEMBLER_OPTION (opt, options)
8431 if (CONST_STRNEQ (opt, "reg-names-"))
8432 {
8433 style = &opt[strlen ("reg-names-")];
8434 len = strcspn (style, ",");
8435 }
8436
8437 fprintf_unfiltered (file, "The disassembly style is \"%.*s\".\n", len, style);
8438 }
8439 \f
8440 /* Return the ARM register name corresponding to register I. */
8441 static const char *
8442 arm_register_name (struct gdbarch *gdbarch, int i)
8443 {
8444 const int num_regs = gdbarch_num_regs (gdbarch);
8445
8446 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
8447 && i >= num_regs && i < num_regs + 32)
8448 {
8449 static const char *const vfp_pseudo_names[] = {
8450 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
8451 "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
8452 "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
8453 "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
8454 };
8455
8456 return vfp_pseudo_names[i - num_regs];
8457 }
8458
8459 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
8460 && i >= num_regs + 32 && i < num_regs + 32 + 16)
8461 {
8462 static const char *const neon_pseudo_names[] = {
8463 "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
8464 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
8465 };
8466
8467 return neon_pseudo_names[i - num_regs - 32];
8468 }
8469
8470 if (i >= ARRAY_SIZE (arm_register_names))
8471 /* These registers are only supported on targets which supply
8472 an XML description. */
8473 return "";
8474
8475 return arm_register_names[i];
8476 }
8477
8478 /* Test whether the coff symbol specific value corresponds to a Thumb
8479 function. */
8480
8481 static int
8482 coff_sym_is_thumb (int val)
8483 {
8484 return (val == C_THUMBEXT
8485 || val == C_THUMBSTAT
8486 || val == C_THUMBEXTFUNC
8487 || val == C_THUMBSTATFUNC
8488 || val == C_THUMBLABEL);
8489 }
8490
8491 /* arm_coff_make_msymbol_special()
8492 arm_elf_make_msymbol_special()
8493
8494 These functions test whether the COFF or ELF symbol corresponds to
8495 an address in thumb code, and set a "special" bit in a minimal
8496 symbol to indicate that it does. */
8497
8498 static void
8499 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
8500 {
8501 elf_symbol_type *elfsym = (elf_symbol_type *) sym;
8502
8503 if (ARM_GET_SYM_BRANCH_TYPE (elfsym->internal_elf_sym.st_target_internal)
8504 == ST_BRANCH_TO_THUMB)
8505 MSYMBOL_SET_SPECIAL (msym);
8506 }
8507
8508 static void
8509 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
8510 {
8511 if (coff_sym_is_thumb (val))
8512 MSYMBOL_SET_SPECIAL (msym);
8513 }
8514
8515 static void
8516 arm_objfile_data_free (struct objfile *objfile, void *arg)
8517 {
8518 struct arm_per_objfile *data = (struct arm_per_objfile *) arg;
8519 unsigned int i;
8520
8521 for (i = 0; i < objfile->obfd->section_count; i++)
8522 VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
8523 }
8524
8525 static void
8526 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
8527 asymbol *sym)
8528 {
8529 const char *name = bfd_asymbol_name (sym);
8530 struct arm_per_objfile *data;
8531 VEC(arm_mapping_symbol_s) **map_p;
8532 struct arm_mapping_symbol new_map_sym;
8533
8534 gdb_assert (name[0] == '$');
8535 if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
8536 return;
8537
8538 data = (struct arm_per_objfile *) objfile_data (objfile,
8539 arm_objfile_data_key);
8540 if (data == NULL)
8541 {
8542 data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
8543 struct arm_per_objfile);
8544 set_objfile_data (objfile, arm_objfile_data_key, data);
8545 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
8546 objfile->obfd->section_count,
8547 VEC(arm_mapping_symbol_s) *);
8548 }
8549 map_p = &data->section_maps[bfd_get_section (sym)->index];
8550
8551 new_map_sym.value = sym->value;
8552 new_map_sym.type = name[1];
8553
8554 /* Assume that most mapping symbols appear in order of increasing
8555 value. If they were randomly distributed, it would be faster to
8556 always push here and then sort at first use. */
8557 if (!VEC_empty (arm_mapping_symbol_s, *map_p))
8558 {
8559 struct arm_mapping_symbol *prev_map_sym;
8560
8561 prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
8562 if (prev_map_sym->value >= sym->value)
8563 {
8564 unsigned int idx;
8565 idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
8566 arm_compare_mapping_symbols);
8567 VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
8568 return;
8569 }
8570 }
8571
8572 VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
8573 }
8574
8575 static void
8576 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
8577 {
8578 struct gdbarch *gdbarch = regcache->arch ();
8579 regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
8580
8581 /* If necessary, set the T bit. */
8582 if (arm_apcs_32)
8583 {
8584 ULONGEST val, t_bit;
8585 regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
8586 t_bit = arm_psr_thumb_bit (gdbarch);
8587 if (arm_pc_is_thumb (gdbarch, pc))
8588 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8589 val | t_bit);
8590 else
8591 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
8592 val & ~t_bit);
8593 }
8594 }
8595
8596 /* Read the contents of a NEON quad register, by reading from two
8597 double registers. This is used to implement the quad pseudo
8598 registers, and for argument passing in case the quad registers are
8599 missing; vectors are passed in quad registers when using the VFP
8600 ABI, even if a NEON unit is not present. REGNUM is the index of
8601 the quad register, in [0, 15]. */
8602
8603 static enum register_status
8604 arm_neon_quad_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8605 int regnum, gdb_byte *buf)
8606 {
8607 char name_buf[4];
8608 gdb_byte reg_buf[8];
8609 int offset, double_regnum;
8610 enum register_status status;
8611
8612 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8613 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8614 strlen (name_buf));
8615
8616 /* d0 is always the least significant half of q0. */
8617 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8618 offset = 8;
8619 else
8620 offset = 0;
8621
8622 status = regcache->raw_read (double_regnum, reg_buf);
8623 if (status != REG_VALID)
8624 return status;
8625 memcpy (buf + offset, reg_buf, 8);
8626
8627 offset = 8 - offset;
8628 status = regcache->raw_read (double_regnum + 1, reg_buf);
8629 if (status != REG_VALID)
8630 return status;
8631 memcpy (buf + offset, reg_buf, 8);
8632
8633 return REG_VALID;
8634 }
8635
8636 static enum register_status
8637 arm_pseudo_read (struct gdbarch *gdbarch, readable_regcache *regcache,
8638 int regnum, gdb_byte *buf)
8639 {
8640 const int num_regs = gdbarch_num_regs (gdbarch);
8641 char name_buf[4];
8642 gdb_byte reg_buf[8];
8643 int offset, double_regnum;
8644
8645 gdb_assert (regnum >= num_regs);
8646 regnum -= num_regs;
8647
8648 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8649 /* Quad-precision register. */
8650 return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
8651 else
8652 {
8653 enum register_status status;
8654
8655 /* Single-precision register. */
8656 gdb_assert (regnum < 32);
8657
8658 /* s0 is always the least significant half of d0. */
8659 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8660 offset = (regnum & 1) ? 0 : 4;
8661 else
8662 offset = (regnum & 1) ? 4 : 0;
8663
8664 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8665 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8666 strlen (name_buf));
8667
8668 status = regcache->raw_read (double_regnum, reg_buf);
8669 if (status == REG_VALID)
8670 memcpy (buf, reg_buf + offset, 4);
8671 return status;
8672 }
8673 }
8674
8675 /* Store the contents of BUF to a NEON quad register, by writing to
8676 two double registers. This is used to implement the quad pseudo
8677 registers, and for argument passing in case the quad registers are
8678 missing; vectors are passed in quad registers when using the VFP
8679 ABI, even if a NEON unit is not present. REGNUM is the index
8680 of the quad register, in [0, 15]. */
8681
8682 static void
8683 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
8684 int regnum, const gdb_byte *buf)
8685 {
8686 char name_buf[4];
8687 int offset, double_regnum;
8688
8689 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
8690 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8691 strlen (name_buf));
8692
8693 /* d0 is always the least significant half of q0. */
8694 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8695 offset = 8;
8696 else
8697 offset = 0;
8698
8699 regcache->raw_write (double_regnum, buf + offset);
8700 offset = 8 - offset;
8701 regcache->raw_write (double_regnum + 1, buf + offset);
8702 }
8703
8704 static void
8705 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
8706 int regnum, const gdb_byte *buf)
8707 {
8708 const int num_regs = gdbarch_num_regs (gdbarch);
8709 char name_buf[4];
8710 gdb_byte reg_buf[8];
8711 int offset, double_regnum;
8712
8713 gdb_assert (regnum >= num_regs);
8714 regnum -= num_regs;
8715
8716 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
8717 /* Quad-precision register. */
8718 arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
8719 else
8720 {
8721 /* Single-precision register. */
8722 gdb_assert (regnum < 32);
8723
8724 /* s0 is always the least significant half of d0. */
8725 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8726 offset = (regnum & 1) ? 0 : 4;
8727 else
8728 offset = (regnum & 1) ? 4 : 0;
8729
8730 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
8731 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
8732 strlen (name_buf));
8733
8734 regcache->raw_read (double_regnum, reg_buf);
8735 memcpy (reg_buf + offset, buf, 4);
8736 regcache->raw_write (double_regnum, reg_buf);
8737 }
8738 }
8739
8740 static struct value *
8741 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
8742 {
8743 const int *reg_p = (const int *) baton;
8744 return value_of_register (*reg_p, frame);
8745 }
8746 \f
8747 static enum gdb_osabi
8748 arm_elf_osabi_sniffer (bfd *abfd)
8749 {
8750 unsigned int elfosabi;
8751 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
8752
8753 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
8754
8755 if (elfosabi == ELFOSABI_ARM)
8756 /* GNU tools use this value. Check note sections in this case,
8757 as well. */
8758 bfd_map_over_sections (abfd,
8759 generic_elf_osabi_sniff_abi_tag_sections,
8760 &osabi);
8761
8762 /* Anything else will be handled by the generic ELF sniffer. */
8763 return osabi;
8764 }
8765
8766 static int
8767 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
8768 struct reggroup *group)
8769 {
8770 /* FPS register's type is INT, but belongs to float_reggroup. Beside
8771 this, FPS register belongs to save_regroup, restore_reggroup, and
8772 all_reggroup, of course. */
8773 if (regnum == ARM_FPS_REGNUM)
8774 return (group == float_reggroup
8775 || group == save_reggroup
8776 || group == restore_reggroup
8777 || group == all_reggroup);
8778 else
8779 return default_register_reggroup_p (gdbarch, regnum, group);
8780 }
8781
8782 \f
8783 /* For backward-compatibility we allow two 'g' packet lengths with
8784 the remote protocol depending on whether FPA registers are
8785 supplied. M-profile targets do not have FPA registers, but some
8786 stubs already exist in the wild which use a 'g' packet which
8787 supplies them albeit with dummy values. The packet format which
8788 includes FPA registers should be considered deprecated for
8789 M-profile targets. */
8790
8791 static void
8792 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
8793 {
8794 if (gdbarch_tdep (gdbarch)->is_m)
8795 {
8796 /* If we know from the executable this is an M-profile target,
8797 cater for remote targets whose register set layout is the
8798 same as the FPA layout. */
8799 register_remote_g_packet_guess (gdbarch,
8800 /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
8801 (16 * INT_REGISTER_SIZE)
8802 + (8 * FP_REGISTER_SIZE)
8803 + (2 * INT_REGISTER_SIZE),
8804 tdesc_arm_with_m_fpa_layout);
8805
8806 /* The regular M-profile layout. */
8807 register_remote_g_packet_guess (gdbarch,
8808 /* r0-r12,sp,lr,pc; xpsr */
8809 (16 * INT_REGISTER_SIZE)
8810 + INT_REGISTER_SIZE,
8811 tdesc_arm_with_m);
8812
8813 /* M-profile plus M4F VFP. */
8814 register_remote_g_packet_guess (gdbarch,
8815 /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
8816 (16 * INT_REGISTER_SIZE)
8817 + (16 * VFP_REGISTER_SIZE)
8818 + (2 * INT_REGISTER_SIZE),
8819 tdesc_arm_with_m_vfp_d16);
8820 }
8821
8822 /* Otherwise we don't have a useful guess. */
8823 }
8824
8825 /* Implement the code_of_frame_writable gdbarch method. */
8826
8827 static int
8828 arm_code_of_frame_writable (struct gdbarch *gdbarch, struct frame_info *frame)
8829 {
8830 if (gdbarch_tdep (gdbarch)->is_m
8831 && get_frame_type (frame) == SIGTRAMP_FRAME)
8832 {
8833 /* M-profile exception frames return to some magic PCs, where
8834 isn't writable at all. */
8835 return 0;
8836 }
8837 else
8838 return 1;
8839 }
8840
8841 \f
8842 /* Initialize the current architecture based on INFO. If possible,
8843 re-use an architecture from ARCHES, which is a list of
8844 architectures already created during this debugging session.
8845
8846 Called e.g. at program startup, when reading a core file, and when
8847 reading a binary file. */
8848
8849 static struct gdbarch *
8850 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8851 {
8852 struct gdbarch_tdep *tdep;
8853 struct gdbarch *gdbarch;
8854 struct gdbarch_list *best_arch;
8855 enum arm_abi_kind arm_abi = arm_abi_global;
8856 enum arm_float_model fp_model = arm_fp_model;
8857 struct tdesc_arch_data *tdesc_data = NULL;
8858 int i, is_m = 0;
8859 int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
8860 int have_wmmx_registers = 0;
8861 int have_neon = 0;
8862 int have_fpa_registers = 1;
8863 const struct target_desc *tdesc = info.target_desc;
8864
8865 /* If we have an object to base this architecture on, try to determine
8866 its ABI. */
8867
8868 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
8869 {
8870 int ei_osabi, e_flags;
8871
8872 switch (bfd_get_flavour (info.abfd))
8873 {
8874 case bfd_target_coff_flavour:
8875 /* Assume it's an old APCS-style ABI. */
8876 /* XXX WinCE? */
8877 arm_abi = ARM_ABI_APCS;
8878 break;
8879
8880 case bfd_target_elf_flavour:
8881 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
8882 e_flags = elf_elfheader (info.abfd)->e_flags;
8883
8884 if (ei_osabi == ELFOSABI_ARM)
8885 {
8886 /* GNU tools used to use this value, but do not for EABI
8887 objects. There's nowhere to tag an EABI version
8888 anyway, so assume APCS. */
8889 arm_abi = ARM_ABI_APCS;
8890 }
8891 else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
8892 {
8893 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
8894
8895 switch (eabi_ver)
8896 {
8897 case EF_ARM_EABI_UNKNOWN:
8898 /* Assume GNU tools. */
8899 arm_abi = ARM_ABI_APCS;
8900 break;
8901
8902 case EF_ARM_EABI_VER4:
8903 case EF_ARM_EABI_VER5:
8904 arm_abi = ARM_ABI_AAPCS;
8905 /* EABI binaries default to VFP float ordering.
8906 They may also contain build attributes that can
8907 be used to identify if the VFP argument-passing
8908 ABI is in use. */
8909 if (fp_model == ARM_FLOAT_AUTO)
8910 {
8911 #ifdef HAVE_ELF
8912 switch (bfd_elf_get_obj_attr_int (info.abfd,
8913 OBJ_ATTR_PROC,
8914 Tag_ABI_VFP_args))
8915 {
8916 case AEABI_VFP_args_base:
8917 /* "The user intended FP parameter/result
8918 passing to conform to AAPCS, base
8919 variant". */
8920 fp_model = ARM_FLOAT_SOFT_VFP;
8921 break;
8922 case AEABI_VFP_args_vfp:
8923 /* "The user intended FP parameter/result
8924 passing to conform to AAPCS, VFP
8925 variant". */
8926 fp_model = ARM_FLOAT_VFP;
8927 break;
8928 case AEABI_VFP_args_toolchain:
8929 /* "The user intended FP parameter/result
8930 passing to conform to tool chain-specific
8931 conventions" - we don't know any such
8932 conventions, so leave it as "auto". */
8933 break;
8934 case AEABI_VFP_args_compatible:
8935 /* "Code is compatible with both the base
8936 and VFP variants; the user did not permit
8937 non-variadic functions to pass FP
8938 parameters/results" - leave it as
8939 "auto". */
8940 break;
8941 default:
8942 /* Attribute value not mentioned in the
8943 November 2012 ABI, so leave it as
8944 "auto". */
8945 break;
8946 }
8947 #else
8948 fp_model = ARM_FLOAT_SOFT_VFP;
8949 #endif
8950 }
8951 break;
8952
8953 default:
8954 /* Leave it as "auto". */
8955 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
8956 break;
8957 }
8958
8959 #ifdef HAVE_ELF
8960 /* Detect M-profile programs. This only works if the
8961 executable file includes build attributes; GCC does
8962 copy them to the executable, but e.g. RealView does
8963 not. */
8964 int attr_arch
8965 = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
8966 Tag_CPU_arch);
8967 int attr_profile
8968 = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
8969 Tag_CPU_arch_profile);
8970
8971 /* GCC specifies the profile for v6-M; RealView only
8972 specifies the profile for architectures starting with
8973 V7 (as opposed to architectures with a tag
8974 numerically greater than TAG_CPU_ARCH_V7). */
8975 if (!tdesc_has_registers (tdesc)
8976 && (attr_arch == TAG_CPU_ARCH_V6_M
8977 || attr_arch == TAG_CPU_ARCH_V6S_M
8978 || attr_profile == 'M'))
8979 is_m = 1;
8980 #endif
8981 }
8982
8983 if (fp_model == ARM_FLOAT_AUTO)
8984 {
8985 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
8986 {
8987 case 0:
8988 /* Leave it as "auto". Strictly speaking this case
8989 means FPA, but almost nobody uses that now, and
8990 many toolchains fail to set the appropriate bits
8991 for the floating-point model they use. */
8992 break;
8993 case EF_ARM_SOFT_FLOAT:
8994 fp_model = ARM_FLOAT_SOFT_FPA;
8995 break;
8996 case EF_ARM_VFP_FLOAT:
8997 fp_model = ARM_FLOAT_VFP;
8998 break;
8999 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
9000 fp_model = ARM_FLOAT_SOFT_VFP;
9001 break;
9002 }
9003 }
9004
9005 if (e_flags & EF_ARM_BE8)
9006 info.byte_order_for_code = BFD_ENDIAN_LITTLE;
9007
9008 break;
9009
9010 default:
9011 /* Leave it as "auto". */
9012 break;
9013 }
9014 }
9015
9016 /* Check any target description for validity. */
9017 if (tdesc_has_registers (tdesc))
9018 {
9019 /* For most registers we require GDB's default names; but also allow
9020 the numeric names for sp / lr / pc, as a convenience. */
9021 static const char *const arm_sp_names[] = { "r13", "sp", NULL };
9022 static const char *const arm_lr_names[] = { "r14", "lr", NULL };
9023 static const char *const arm_pc_names[] = { "r15", "pc", NULL };
9024
9025 const struct tdesc_feature *feature;
9026 int valid_p;
9027
9028 feature = tdesc_find_feature (tdesc,
9029 "org.gnu.gdb.arm.core");
9030 if (feature == NULL)
9031 {
9032 feature = tdesc_find_feature (tdesc,
9033 "org.gnu.gdb.arm.m-profile");
9034 if (feature == NULL)
9035 return NULL;
9036 else
9037 is_m = 1;
9038 }
9039
9040 tdesc_data = tdesc_data_alloc ();
9041
9042 valid_p = 1;
9043 for (i = 0; i < ARM_SP_REGNUM; i++)
9044 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9045 arm_register_names[i]);
9046 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9047 ARM_SP_REGNUM,
9048 arm_sp_names);
9049 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9050 ARM_LR_REGNUM,
9051 arm_lr_names);
9052 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
9053 ARM_PC_REGNUM,
9054 arm_pc_names);
9055 if (is_m)
9056 valid_p &= tdesc_numbered_register (feature, tdesc_data,
9057 ARM_PS_REGNUM, "xpsr");
9058 else
9059 valid_p &= tdesc_numbered_register (feature, tdesc_data,
9060 ARM_PS_REGNUM, "cpsr");
9061
9062 if (!valid_p)
9063 {
9064 tdesc_data_cleanup (tdesc_data);
9065 return NULL;
9066 }
9067
9068 feature = tdesc_find_feature (tdesc,
9069 "org.gnu.gdb.arm.fpa");
9070 if (feature != NULL)
9071 {
9072 valid_p = 1;
9073 for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
9074 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
9075 arm_register_names[i]);
9076 if (!valid_p)
9077 {
9078 tdesc_data_cleanup (tdesc_data);
9079 return NULL;
9080 }
9081 }
9082 else
9083 have_fpa_registers = 0;
9084
9085 feature = tdesc_find_feature (tdesc,
9086 "org.gnu.gdb.xscale.iwmmxt");
9087 if (feature != NULL)
9088 {
9089 static const char *const iwmmxt_names[] = {
9090 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
9091 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
9092 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
9093 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
9094 };
9095
9096 valid_p = 1;
9097 for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
9098 valid_p
9099 &= tdesc_numbered_register (feature, tdesc_data, i,
9100 iwmmxt_names[i - ARM_WR0_REGNUM]);
9101
9102 /* Check for the control registers, but do not fail if they
9103 are missing. */
9104 for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
9105 tdesc_numbered_register (feature, tdesc_data, i,
9106 iwmmxt_names[i - ARM_WR0_REGNUM]);
9107
9108 for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
9109 valid_p
9110 &= tdesc_numbered_register (feature, tdesc_data, i,
9111 iwmmxt_names[i - ARM_WR0_REGNUM]);
9112
9113 if (!valid_p)
9114 {
9115 tdesc_data_cleanup (tdesc_data);
9116 return NULL;
9117 }
9118
9119 have_wmmx_registers = 1;
9120 }
9121
9122 /* If we have a VFP unit, check whether the single precision registers
9123 are present. If not, then we will synthesize them as pseudo
9124 registers. */
9125 feature = tdesc_find_feature (tdesc,
9126 "org.gnu.gdb.arm.vfp");
9127 if (feature != NULL)
9128 {
9129 static const char *const vfp_double_names[] = {
9130 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
9131 "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
9132 "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
9133 "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
9134 };
9135
9136 /* Require the double precision registers. There must be either
9137 16 or 32. */
9138 valid_p = 1;
9139 for (i = 0; i < 32; i++)
9140 {
9141 valid_p &= tdesc_numbered_register (feature, tdesc_data,
9142 ARM_D0_REGNUM + i,
9143 vfp_double_names[i]);
9144 if (!valid_p)
9145 break;
9146 }
9147 if (!valid_p && i == 16)
9148 valid_p = 1;
9149
9150 /* Also require FPSCR. */
9151 valid_p &= tdesc_numbered_register (feature, tdesc_data,
9152 ARM_FPSCR_REGNUM, "fpscr");
9153 if (!valid_p)
9154 {
9155 tdesc_data_cleanup (tdesc_data);
9156 return NULL;
9157 }
9158
9159 if (tdesc_unnumbered_register (feature, "s0") == 0)
9160 have_vfp_pseudos = 1;
9161
9162 vfp_register_count = i;
9163
9164 /* If we have VFP, also check for NEON. The architecture allows
9165 NEON without VFP (integer vector operations only), but GDB
9166 does not support that. */
9167 feature = tdesc_find_feature (tdesc,
9168 "org.gnu.gdb.arm.neon");
9169 if (feature != NULL)
9170 {
9171 /* NEON requires 32 double-precision registers. */
9172 if (i != 32)
9173 {
9174 tdesc_data_cleanup (tdesc_data);
9175 return NULL;
9176 }
9177
9178 /* If there are quad registers defined by the stub, use
9179 their type; otherwise (normally) provide them with
9180 the default type. */
9181 if (tdesc_unnumbered_register (feature, "q0") == 0)
9182 have_neon_pseudos = 1;
9183
9184 have_neon = 1;
9185 }
9186 }
9187 }
9188
9189 /* If there is already a candidate, use it. */
9190 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
9191 best_arch != NULL;
9192 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
9193 {
9194 if (arm_abi != ARM_ABI_AUTO
9195 && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
9196 continue;
9197
9198 if (fp_model != ARM_FLOAT_AUTO
9199 && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
9200 continue;
9201
9202 /* There are various other properties in tdep that we do not
9203 need to check here: those derived from a target description,
9204 since gdbarches with a different target description are
9205 automatically disqualified. */
9206
9207 /* Do check is_m, though, since it might come from the binary. */
9208 if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
9209 continue;
9210
9211 /* Found a match. */
9212 break;
9213 }
9214
9215 if (best_arch != NULL)
9216 {
9217 if (tdesc_data != NULL)
9218 tdesc_data_cleanup (tdesc_data);
9219 return best_arch->gdbarch;
9220 }
9221
9222 tdep = XCNEW (struct gdbarch_tdep);
9223 gdbarch = gdbarch_alloc (&info, tdep);
9224
9225 /* Record additional information about the architecture we are defining.
9226 These are gdbarch discriminators, like the OSABI. */
9227 tdep->arm_abi = arm_abi;
9228 tdep->fp_model = fp_model;
9229 tdep->is_m = is_m;
9230 tdep->have_fpa_registers = have_fpa_registers;
9231 tdep->have_wmmx_registers = have_wmmx_registers;
9232 gdb_assert (vfp_register_count == 0
9233 || vfp_register_count == 16
9234 || vfp_register_count == 32);
9235 tdep->vfp_register_count = vfp_register_count;
9236 tdep->have_vfp_pseudos = have_vfp_pseudos;
9237 tdep->have_neon_pseudos = have_neon_pseudos;
9238 tdep->have_neon = have_neon;
9239
9240 arm_register_g_packet_guesses (gdbarch);
9241
9242 /* Breakpoints. */
9243 switch (info.byte_order_for_code)
9244 {
9245 case BFD_ENDIAN_BIG:
9246 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
9247 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
9248 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
9249 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
9250
9251 break;
9252
9253 case BFD_ENDIAN_LITTLE:
9254 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
9255 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
9256 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
9257 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
9258
9259 break;
9260
9261 default:
9262 internal_error (__FILE__, __LINE__,
9263 _("arm_gdbarch_init: bad byte order for float format"));
9264 }
9265
9266 /* On ARM targets char defaults to unsigned. */
9267 set_gdbarch_char_signed (gdbarch, 0);
9268
9269 /* wchar_t is unsigned under the AAPCS. */
9270 if (tdep->arm_abi == ARM_ABI_AAPCS)
9271 set_gdbarch_wchar_signed (gdbarch, 0);
9272 else
9273 set_gdbarch_wchar_signed (gdbarch, 1);
9274
9275 /* Compute type alignment. */
9276 set_gdbarch_type_align (gdbarch, arm_type_align);
9277
9278 /* Note: for displaced stepping, this includes the breakpoint, and one word
9279 of additional scratch space. This setting isn't used for anything beside
9280 displaced stepping at present. */
9281 set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
9282
9283 /* This should be low enough for everything. */
9284 tdep->lowest_pc = 0x20;
9285 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
9286
9287 /* The default, for both APCS and AAPCS, is to return small
9288 structures in registers. */
9289 tdep->struct_return = reg_struct_return;
9290
9291 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
9292 set_gdbarch_frame_align (gdbarch, arm_frame_align);
9293
9294 if (is_m)
9295 set_gdbarch_code_of_frame_writable (gdbarch, arm_code_of_frame_writable);
9296
9297 set_gdbarch_write_pc (gdbarch, arm_write_pc);
9298
9299 frame_base_set_default (gdbarch, &arm_normal_base);
9300
9301 /* Address manipulation. */
9302 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
9303
9304 /* Advance PC across function entry code. */
9305 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
9306
9307 /* Detect whether PC is at a point where the stack has been destroyed. */
9308 set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
9309
9310 /* Skip trampolines. */
9311 set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
9312
9313 /* The stack grows downward. */
9314 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
9315
9316 /* Breakpoint manipulation. */
9317 set_gdbarch_breakpoint_kind_from_pc (gdbarch, arm_breakpoint_kind_from_pc);
9318 set_gdbarch_sw_breakpoint_from_kind (gdbarch, arm_sw_breakpoint_from_kind);
9319 set_gdbarch_breakpoint_kind_from_current_state (gdbarch,
9320 arm_breakpoint_kind_from_current_state);
9321
9322 /* Information about registers, etc. */
9323 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
9324 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9325 set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
9326 set_gdbarch_register_type (gdbarch, arm_register_type);
9327 set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
9328
9329 /* This "info float" is FPA-specific. Use the generic version if we
9330 do not have FPA. */
9331 if (gdbarch_tdep (gdbarch)->have_fpa_registers)
9332 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
9333
9334 /* Internal <-> external register number maps. */
9335 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
9336 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
9337
9338 set_gdbarch_register_name (gdbarch, arm_register_name);
9339
9340 /* Returning results. */
9341 set_gdbarch_return_value (gdbarch, arm_return_value);
9342
9343 /* Disassembly. */
9344 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
9345
9346 /* Minsymbol frobbing. */
9347 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
9348 set_gdbarch_coff_make_msymbol_special (gdbarch,
9349 arm_coff_make_msymbol_special);
9350 set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
9351
9352 /* Thumb-2 IT block support. */
9353 set_gdbarch_adjust_breakpoint_address (gdbarch,
9354 arm_adjust_breakpoint_address);
9355
9356 /* Virtual tables. */
9357 set_gdbarch_vbit_in_delta (gdbarch, 1);
9358
9359 /* Hook in the ABI-specific overrides, if they have been registered. */
9360 gdbarch_init_osabi (info, gdbarch);
9361
9362 dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
9363
9364 /* Add some default predicates. */
9365 if (is_m)
9366 frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
9367 frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
9368 dwarf2_append_unwinders (gdbarch);
9369 frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
9370 frame_unwind_append_unwinder (gdbarch, &arm_epilogue_frame_unwind);
9371 frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
9372
9373 /* Now we have tuned the configuration, set a few final things,
9374 based on what the OS ABI has told us. */
9375
9376 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
9377 binaries are always marked. */
9378 if (tdep->arm_abi == ARM_ABI_AUTO)
9379 tdep->arm_abi = ARM_ABI_APCS;
9380
9381 /* Watchpoints are not steppable. */
9382 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
9383
9384 /* We used to default to FPA for generic ARM, but almost nobody
9385 uses that now, and we now provide a way for the user to force
9386 the model. So default to the most useful variant. */
9387 if (tdep->fp_model == ARM_FLOAT_AUTO)
9388 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
9389
9390 if (tdep->jb_pc >= 0)
9391 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
9392
9393 /* Floating point sizes and format. */
9394 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
9395 if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
9396 {
9397 set_gdbarch_double_format
9398 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9399 set_gdbarch_long_double_format
9400 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
9401 }
9402 else
9403 {
9404 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
9405 set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
9406 }
9407
9408 if (have_vfp_pseudos)
9409 {
9410 /* NOTE: These are the only pseudo registers used by
9411 the ARM target at the moment. If more are added, a
9412 little more care in numbering will be needed. */
9413
9414 int num_pseudos = 32;
9415 if (have_neon_pseudos)
9416 num_pseudos += 16;
9417 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
9418 set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
9419 set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
9420 }
9421
9422 if (tdesc_data)
9423 {
9424 set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
9425
9426 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
9427
9428 /* Override tdesc_register_type to adjust the types of VFP
9429 registers for NEON. */
9430 set_gdbarch_register_type (gdbarch, arm_register_type);
9431 }
9432
9433 /* Add standard register aliases. We add aliases even for those
9434 nanes which are used by the current architecture - it's simpler,
9435 and does no harm, since nothing ever lists user registers. */
9436 for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
9437 user_reg_add (gdbarch, arm_register_aliases[i].name,
9438 value_of_arm_user_reg, &arm_register_aliases[i].regnum);
9439
9440 set_gdbarch_disassembler_options (gdbarch, &arm_disassembler_options);
9441 set_gdbarch_valid_disassembler_options (gdbarch, disassembler_options_arm ());
9442
9443 return gdbarch;
9444 }
9445
9446 static void
9447 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
9448 {
9449 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9450
9451 if (tdep == NULL)
9452 return;
9453
9454 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
9455 (unsigned long) tdep->lowest_pc);
9456 }
9457
9458 #if GDB_SELF_TEST
9459 namespace selftests
9460 {
9461 static void arm_record_test (void);
9462 }
9463 #endif
9464
9465 void
9466 _initialize_arm_tdep (void)
9467 {
9468 long length;
9469 int i, j;
9470 char regdesc[1024], *rdptr = regdesc;
9471 size_t rest = sizeof (regdesc);
9472
9473 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
9474
9475 arm_objfile_data_key
9476 = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
9477
9478 /* Add ourselves to objfile event chain. */
9479 gdb::observers::new_objfile.attach (arm_exidx_new_objfile);
9480 arm_exidx_data_key
9481 = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
9482
9483 /* Register an ELF OS ABI sniffer for ARM binaries. */
9484 gdbarch_register_osabi_sniffer (bfd_arch_arm,
9485 bfd_target_elf_flavour,
9486 arm_elf_osabi_sniffer);
9487
9488 /* Initialize the standard target descriptions. */
9489 initialize_tdesc_arm_with_m ();
9490 initialize_tdesc_arm_with_m_fpa_layout ();
9491 initialize_tdesc_arm_with_m_vfp_d16 ();
9492 initialize_tdesc_arm_with_iwmmxt ();
9493 initialize_tdesc_arm_with_vfpv2 ();
9494 initialize_tdesc_arm_with_vfpv3 ();
9495 initialize_tdesc_arm_with_neon ();
9496
9497 /* Add root prefix command for all "set arm"/"show arm" commands. */
9498 add_prefix_cmd ("arm", no_class, set_arm_command,
9499 _("Various ARM-specific commands."),
9500 &setarmcmdlist, "set arm ", 0, &setlist);
9501
9502 add_prefix_cmd ("arm", no_class, show_arm_command,
9503 _("Various ARM-specific commands."),
9504 &showarmcmdlist, "show arm ", 0, &showlist);
9505
9506
9507 arm_disassembler_options = xstrdup ("reg-names-std");
9508 const disasm_options_t *disasm_options
9509 = &disassembler_options_arm ()->options;
9510 int num_disassembly_styles = 0;
9511 for (i = 0; disasm_options->name[i] != NULL; i++)
9512 if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9513 num_disassembly_styles++;
9514
9515 /* Initialize the array that will be passed to add_setshow_enum_cmd(). */
9516 valid_disassembly_styles = XNEWVEC (const char *,
9517 num_disassembly_styles + 1);
9518 for (i = j = 0; disasm_options->name[i] != NULL; i++)
9519 if (CONST_STRNEQ (disasm_options->name[i], "reg-names-"))
9520 {
9521 size_t offset = strlen ("reg-names-");
9522 const char *style = disasm_options->name[i];
9523 valid_disassembly_styles[j++] = &style[offset];
9524 length = snprintf (rdptr, rest, "%s - %s\n", &style[offset],
9525 disasm_options->description[i]);
9526 rdptr += length;
9527 rest -= length;
9528 }
9529 /* Mark the end of valid options. */
9530 valid_disassembly_styles[num_disassembly_styles] = NULL;
9531
9532 /* Create the help text. */
9533 std::string helptext = string_printf ("%s%s%s",
9534 _("The valid values are:\n"),
9535 regdesc,
9536 _("The default is \"std\"."));
9537
9538 add_setshow_enum_cmd("disassembler", no_class,
9539 valid_disassembly_styles, &disassembly_style,
9540 _("Set the disassembly style."),
9541 _("Show the disassembly style."),
9542 helptext.c_str (),
9543 set_disassembly_style_sfunc,
9544 show_disassembly_style_sfunc,
9545 &setarmcmdlist, &showarmcmdlist);
9546
9547 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
9548 _("Set usage of ARM 32-bit mode."),
9549 _("Show usage of ARM 32-bit mode."),
9550 _("When off, a 26-bit PC will be used."),
9551 NULL,
9552 NULL, /* FIXME: i18n: Usage of ARM 32-bit
9553 mode is %s. */
9554 &setarmcmdlist, &showarmcmdlist);
9555
9556 /* Add a command to allow the user to force the FPU model. */
9557 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
9558 _("Set the floating point type."),
9559 _("Show the floating point type."),
9560 _("auto - Determine the FP typefrom the OS-ABI.\n\
9561 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
9562 fpa - FPA co-processor (GCC compiled).\n\
9563 softvfp - Software FP with pure-endian doubles.\n\
9564 vfp - VFP co-processor."),
9565 set_fp_model_sfunc, show_fp_model,
9566 &setarmcmdlist, &showarmcmdlist);
9567
9568 /* Add a command to allow the user to force the ABI. */
9569 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
9570 _("Set the ABI."),
9571 _("Show the ABI."),
9572 NULL, arm_set_abi, arm_show_abi,
9573 &setarmcmdlist, &showarmcmdlist);
9574
9575 /* Add two commands to allow the user to force the assumed
9576 execution mode. */
9577 add_setshow_enum_cmd ("fallback-mode", class_support,
9578 arm_mode_strings, &arm_fallback_mode_string,
9579 _("Set the mode assumed when symbols are unavailable."),
9580 _("Show the mode assumed when symbols are unavailable."),
9581 NULL, NULL, arm_show_fallback_mode,
9582 &setarmcmdlist, &showarmcmdlist);
9583 add_setshow_enum_cmd ("force-mode", class_support,
9584 arm_mode_strings, &arm_force_mode_string,
9585 _("Set the mode assumed even when symbols are available."),
9586 _("Show the mode assumed even when symbols are available."),
9587 NULL, NULL, arm_show_force_mode,
9588 &setarmcmdlist, &showarmcmdlist);
9589
9590 /* Debugging flag. */
9591 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
9592 _("Set ARM debugging."),
9593 _("Show ARM debugging."),
9594 _("When on, arm-specific debugging is enabled."),
9595 NULL,
9596 NULL, /* FIXME: i18n: "ARM debugging is %s. */
9597 &setdebuglist, &showdebuglist);
9598
9599 #if GDB_SELF_TEST
9600 selftests::register_test ("arm-record", selftests::arm_record_test);
9601 #endif
9602
9603 }
9604
9605 /* ARM-reversible process record data structures. */
9606
9607 #define ARM_INSN_SIZE_BYTES 4
9608 #define THUMB_INSN_SIZE_BYTES 2
9609 #define THUMB2_INSN_SIZE_BYTES 4
9610
9611
9612 /* Position of the bit within a 32-bit ARM instruction
9613 that defines whether the instruction is a load or store. */
9614 #define INSN_S_L_BIT_NUM 20
9615
9616 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
9617 do \
9618 { \
9619 unsigned int reg_len = LENGTH; \
9620 if (reg_len) \
9621 { \
9622 REGS = XNEWVEC (uint32_t, reg_len); \
9623 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
9624 } \
9625 } \
9626 while (0)
9627
9628 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
9629 do \
9630 { \
9631 unsigned int mem_len = LENGTH; \
9632 if (mem_len) \
9633 { \
9634 MEMS = XNEWVEC (struct arm_mem_r, mem_len); \
9635 memcpy(&MEMS->len, &RECORD_BUF[0], \
9636 sizeof(struct arm_mem_r) * LENGTH); \
9637 } \
9638 } \
9639 while (0)
9640
9641 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression). */
9642 #define INSN_RECORDED(ARM_RECORD) \
9643 (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
9644
9645 /* ARM memory record structure. */
9646 struct arm_mem_r
9647 {
9648 uint32_t len; /* Record length. */
9649 uint32_t addr; /* Memory address. */
9650 };
9651
9652 /* ARM instruction record contains opcode of current insn
9653 and execution state (before entry to decode_insn()),
9654 contains list of to-be-modified registers and
9655 memory blocks (on return from decode_insn()). */
9656
9657 typedef struct insn_decode_record_t
9658 {
9659 struct gdbarch *gdbarch;
9660 struct regcache *regcache;
9661 CORE_ADDR this_addr; /* Address of the insn being decoded. */
9662 uint32_t arm_insn; /* Should accommodate thumb. */
9663 uint32_t cond; /* Condition code. */
9664 uint32_t opcode; /* Insn opcode. */
9665 uint32_t decode; /* Insn decode bits. */
9666 uint32_t mem_rec_count; /* No of mem records. */
9667 uint32_t reg_rec_count; /* No of reg records. */
9668 uint32_t *arm_regs; /* Registers to be saved for this record. */
9669 struct arm_mem_r *arm_mems; /* Memory to be saved for this record. */
9670 } insn_decode_record;
9671
9672
9673 /* Checks ARM SBZ and SBO mandatory fields. */
9674
9675 static int
9676 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
9677 {
9678 uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
9679
9680 if (!len)
9681 return 1;
9682
9683 if (!sbo)
9684 ones = ~ones;
9685
9686 while (ones)
9687 {
9688 if (!(ones & sbo))
9689 {
9690 return 0;
9691 }
9692 ones = ones >> 1;
9693 }
9694 return 1;
9695 }
9696
9697 enum arm_record_result
9698 {
9699 ARM_RECORD_SUCCESS = 0,
9700 ARM_RECORD_FAILURE = 1
9701 };
9702
9703 typedef enum
9704 {
9705 ARM_RECORD_STRH=1,
9706 ARM_RECORD_STRD
9707 } arm_record_strx_t;
9708
9709 typedef enum
9710 {
9711 ARM_RECORD=1,
9712 THUMB_RECORD,
9713 THUMB2_RECORD
9714 } record_type_t;
9715
9716
9717 static int
9718 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf,
9719 uint32_t *record_buf_mem, arm_record_strx_t str_type)
9720 {
9721
9722 struct regcache *reg_cache = arm_insn_r->regcache;
9723 ULONGEST u_regval[2]= {0};
9724
9725 uint32_t reg_src1 = 0, reg_src2 = 0;
9726 uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
9727
9728 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
9729 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
9730
9731 if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
9732 {
9733 /* 1) Handle misc store, immediate offset. */
9734 immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9735 immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9736 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9737 regcache_raw_read_unsigned (reg_cache, reg_src1,
9738 &u_regval[0]);
9739 if (ARM_PC_REGNUM == reg_src1)
9740 {
9741 /* If R15 was used as Rn, hence current PC+8. */
9742 u_regval[0] = u_regval[0] + 8;
9743 }
9744 offset_8 = (immed_high << 4) | immed_low;
9745 /* Calculate target store address. */
9746 if (14 == arm_insn_r->opcode)
9747 {
9748 tgt_mem_addr = u_regval[0] + offset_8;
9749 }
9750 else
9751 {
9752 tgt_mem_addr = u_regval[0] - offset_8;
9753 }
9754 if (ARM_RECORD_STRH == str_type)
9755 {
9756 record_buf_mem[0] = 2;
9757 record_buf_mem[1] = tgt_mem_addr;
9758 arm_insn_r->mem_rec_count = 1;
9759 }
9760 else if (ARM_RECORD_STRD == str_type)
9761 {
9762 record_buf_mem[0] = 4;
9763 record_buf_mem[1] = tgt_mem_addr;
9764 record_buf_mem[2] = 4;
9765 record_buf_mem[3] = tgt_mem_addr + 4;
9766 arm_insn_r->mem_rec_count = 2;
9767 }
9768 }
9769 else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
9770 {
9771 /* 2) Store, register offset. */
9772 /* Get Rm. */
9773 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9774 /* Get Rn. */
9775 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9776 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9777 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9778 if (15 == reg_src2)
9779 {
9780 /* If R15 was used as Rn, hence current PC+8. */
9781 u_regval[0] = u_regval[0] + 8;
9782 }
9783 /* Calculate target store address, Rn +/- Rm, register offset. */
9784 if (12 == arm_insn_r->opcode)
9785 {
9786 tgt_mem_addr = u_regval[0] + u_regval[1];
9787 }
9788 else
9789 {
9790 tgt_mem_addr = u_regval[1] - u_regval[0];
9791 }
9792 if (ARM_RECORD_STRH == str_type)
9793 {
9794 record_buf_mem[0] = 2;
9795 record_buf_mem[1] = tgt_mem_addr;
9796 arm_insn_r->mem_rec_count = 1;
9797 }
9798 else if (ARM_RECORD_STRD == str_type)
9799 {
9800 record_buf_mem[0] = 4;
9801 record_buf_mem[1] = tgt_mem_addr;
9802 record_buf_mem[2] = 4;
9803 record_buf_mem[3] = tgt_mem_addr + 4;
9804 arm_insn_r->mem_rec_count = 2;
9805 }
9806 }
9807 else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
9808 || 2 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9809 {
9810 /* 3) Store, immediate pre-indexed. */
9811 /* 5) Store, immediate post-indexed. */
9812 immed_low = bits (arm_insn_r->arm_insn, 0, 3);
9813 immed_high = bits (arm_insn_r->arm_insn, 8, 11);
9814 offset_8 = (immed_high << 4) | immed_low;
9815 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
9816 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9817 /* Calculate target store address, Rn +/- Rm, register offset. */
9818 if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
9819 {
9820 tgt_mem_addr = u_regval[0] + offset_8;
9821 }
9822 else
9823 {
9824 tgt_mem_addr = u_regval[0] - offset_8;
9825 }
9826 if (ARM_RECORD_STRH == str_type)
9827 {
9828 record_buf_mem[0] = 2;
9829 record_buf_mem[1] = tgt_mem_addr;
9830 arm_insn_r->mem_rec_count = 1;
9831 }
9832 else if (ARM_RECORD_STRD == str_type)
9833 {
9834 record_buf_mem[0] = 4;
9835 record_buf_mem[1] = tgt_mem_addr;
9836 record_buf_mem[2] = 4;
9837 record_buf_mem[3] = tgt_mem_addr + 4;
9838 arm_insn_r->mem_rec_count = 2;
9839 }
9840 /* Record Rn also as it changes. */
9841 *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9842 arm_insn_r->reg_rec_count = 1;
9843 }
9844 else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
9845 || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9846 {
9847 /* 4) Store, register pre-indexed. */
9848 /* 6) Store, register post -indexed. */
9849 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
9850 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
9851 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
9852 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
9853 /* Calculate target store address, Rn +/- Rm, register offset. */
9854 if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
9855 {
9856 tgt_mem_addr = u_regval[0] + u_regval[1];
9857 }
9858 else
9859 {
9860 tgt_mem_addr = u_regval[1] - u_regval[0];
9861 }
9862 if (ARM_RECORD_STRH == str_type)
9863 {
9864 record_buf_mem[0] = 2;
9865 record_buf_mem[1] = tgt_mem_addr;
9866 arm_insn_r->mem_rec_count = 1;
9867 }
9868 else if (ARM_RECORD_STRD == str_type)
9869 {
9870 record_buf_mem[0] = 4;
9871 record_buf_mem[1] = tgt_mem_addr;
9872 record_buf_mem[2] = 4;
9873 record_buf_mem[3] = tgt_mem_addr + 4;
9874 arm_insn_r->mem_rec_count = 2;
9875 }
9876 /* Record Rn also as it changes. */
9877 *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
9878 arm_insn_r->reg_rec_count = 1;
9879 }
9880 return 0;
9881 }
9882
9883 /* Handling ARM extension space insns. */
9884
9885 static int
9886 arm_record_extension_space (insn_decode_record *arm_insn_r)
9887 {
9888 int ret = 0; /* Return value: -1:record failure ; 0:success */
9889 uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
9890 uint32_t record_buf[8], record_buf_mem[8];
9891 uint32_t reg_src1 = 0;
9892 struct regcache *reg_cache = arm_insn_r->regcache;
9893 ULONGEST u_regval = 0;
9894
9895 gdb_assert (!INSN_RECORDED(arm_insn_r));
9896 /* Handle unconditional insn extension space. */
9897
9898 opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
9899 opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9900 if (arm_insn_r->cond)
9901 {
9902 /* PLD has no affect on architectural state, it just affects
9903 the caches. */
9904 if (5 == ((opcode1 & 0xE0) >> 5))
9905 {
9906 /* BLX(1) */
9907 record_buf[0] = ARM_PS_REGNUM;
9908 record_buf[1] = ARM_LR_REGNUM;
9909 arm_insn_r->reg_rec_count = 2;
9910 }
9911 /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn. */
9912 }
9913
9914
9915 opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
9916 if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
9917 {
9918 ret = -1;
9919 /* Undefined instruction on ARM V5; need to handle if later
9920 versions define it. */
9921 }
9922
9923 opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
9924 opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
9925 insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
9926
9927 /* Handle arithmetic insn extension space. */
9928 if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
9929 && !INSN_RECORDED(arm_insn_r))
9930 {
9931 /* Handle MLA(S) and MUL(S). */
9932 if (in_inclusive_range (insn_op1, 0U, 3U))
9933 {
9934 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
9935 record_buf[1] = ARM_PS_REGNUM;
9936 arm_insn_r->reg_rec_count = 2;
9937 }
9938 else if (in_inclusive_range (insn_op1, 4U, 15U))
9939 {
9940 /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S). */
9941 record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
9942 record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
9943 record_buf[2] = ARM_PS_REGNUM;
9944 arm_insn_r->reg_rec_count = 3;
9945 }
9946 }
9947
9948 opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
9949 opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
9950 insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
9951
9952 /* Handle control insn extension space. */
9953
9954 if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
9955 && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
9956 {
9957 if (!bit (arm_insn_r->arm_insn,25))
9958 {
9959 if (!bits (arm_insn_r->arm_insn, 4, 7))
9960 {
9961 if ((0 == insn_op1) || (2 == insn_op1))
9962 {
9963 /* MRS. */
9964 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
9965 arm_insn_r->reg_rec_count = 1;
9966 }
9967 else if (1 == insn_op1)
9968 {
9969 /* CSPR is going to be changed. */
9970 record_buf[0] = ARM_PS_REGNUM;
9971 arm_insn_r->reg_rec_count = 1;
9972 }
9973 else if (3 == insn_op1)
9974 {
9975 /* SPSR is going to be changed. */
9976 /* We need to get SPSR value, which is yet to be done. */
9977 return -1;
9978 }
9979 }
9980 else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
9981 {
9982 if (1 == insn_op1)
9983 {
9984 /* BX. */
9985 record_buf[0] = ARM_PS_REGNUM;
9986 arm_insn_r->reg_rec_count = 1;
9987 }
9988 else if (3 == insn_op1)
9989 {
9990 /* CLZ. */
9991 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
9992 arm_insn_r->reg_rec_count = 1;
9993 }
9994 }
9995 else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
9996 {
9997 /* BLX. */
9998 record_buf[0] = ARM_PS_REGNUM;
9999 record_buf[1] = ARM_LR_REGNUM;
10000 arm_insn_r->reg_rec_count = 2;
10001 }
10002 else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
10003 {
10004 /* QADD, QSUB, QDADD, QDSUB */
10005 record_buf[0] = ARM_PS_REGNUM;
10006 record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10007 arm_insn_r->reg_rec_count = 2;
10008 }
10009 else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
10010 {
10011 /* BKPT. */
10012 record_buf[0] = ARM_PS_REGNUM;
10013 record_buf[1] = ARM_LR_REGNUM;
10014 arm_insn_r->reg_rec_count = 2;
10015
10016 /* Save SPSR also;how? */
10017 return -1;
10018 }
10019 else if(8 == bits (arm_insn_r->arm_insn, 4, 7)
10020 || 10 == bits (arm_insn_r->arm_insn, 4, 7)
10021 || 12 == bits (arm_insn_r->arm_insn, 4, 7)
10022 || 14 == bits (arm_insn_r->arm_insn, 4, 7)
10023 )
10024 {
10025 if (0 == insn_op1 || 1 == insn_op1)
10026 {
10027 /* SMLA<x><y>, SMLAW<y>, SMULW<y>. */
10028 /* We dont do optimization for SMULW<y> where we
10029 need only Rd. */
10030 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10031 record_buf[1] = ARM_PS_REGNUM;
10032 arm_insn_r->reg_rec_count = 2;
10033 }
10034 else if (2 == insn_op1)
10035 {
10036 /* SMLAL<x><y>. */
10037 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10038 record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
10039 arm_insn_r->reg_rec_count = 2;
10040 }
10041 else if (3 == insn_op1)
10042 {
10043 /* SMUL<x><y>. */
10044 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10045 arm_insn_r->reg_rec_count = 1;
10046 }
10047 }
10048 }
10049 else
10050 {
10051 /* MSR : immediate form. */
10052 if (1 == insn_op1)
10053 {
10054 /* CSPR is going to be changed. */
10055 record_buf[0] = ARM_PS_REGNUM;
10056 arm_insn_r->reg_rec_count = 1;
10057 }
10058 else if (3 == insn_op1)
10059 {
10060 /* SPSR is going to be changed. */
10061 /* we need to get SPSR value, which is yet to be done */
10062 return -1;
10063 }
10064 }
10065 }
10066
10067 opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10068 opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
10069 insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
10070
10071 /* Handle load/store insn extension space. */
10072
10073 if (!opcode1 && bit (arm_insn_r->arm_insn, 7)
10074 && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
10075 && !INSN_RECORDED(arm_insn_r))
10076 {
10077 /* SWP/SWPB. */
10078 if (0 == insn_op1)
10079 {
10080 /* These insn, changes register and memory as well. */
10081 /* SWP or SWPB insn. */
10082 /* Get memory address given by Rn. */
10083 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10084 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
10085 /* SWP insn ?, swaps word. */
10086 if (8 == arm_insn_r->opcode)
10087 {
10088 record_buf_mem[0] = 4;
10089 }
10090 else
10091 {
10092 /* SWPB insn, swaps only byte. */
10093 record_buf_mem[0] = 1;
10094 }
10095 record_buf_mem[1] = u_regval;
10096 arm_insn_r->mem_rec_count = 1;
10097 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10098 arm_insn_r->reg_rec_count = 1;
10099 }
10100 else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10101 {
10102 /* STRH. */
10103 arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10104 ARM_RECORD_STRH);
10105 }
10106 else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10107 {
10108 /* LDRD. */
10109 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10110 record_buf[1] = record_buf[0] + 1;
10111 arm_insn_r->reg_rec_count = 2;
10112 }
10113 else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
10114 {
10115 /* STRD. */
10116 arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
10117 ARM_RECORD_STRD);
10118 }
10119 else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
10120 {
10121 /* LDRH, LDRSB, LDRSH. */
10122 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10123 arm_insn_r->reg_rec_count = 1;
10124 }
10125
10126 }
10127
10128 opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
10129 if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
10130 && !INSN_RECORDED(arm_insn_r))
10131 {
10132 ret = -1;
10133 /* Handle coprocessor insn extension space. */
10134 }
10135
10136 /* To be done for ARMv5 and later; as of now we return -1. */
10137 if (-1 == ret)
10138 return ret;
10139
10140 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10141 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10142
10143 return ret;
10144 }
10145
10146 /* Handling opcode 000 insns. */
10147
10148 static int
10149 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
10150 {
10151 struct regcache *reg_cache = arm_insn_r->regcache;
10152 uint32_t record_buf[8], record_buf_mem[8];
10153 ULONGEST u_regval[2] = {0};
10154
10155 uint32_t reg_src1 = 0;
10156 uint32_t opcode1 = 0;
10157
10158 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10159 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10160 opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10161
10162 if (!((opcode1 & 0x19) == 0x10))
10163 {
10164 /* Data-processing (register) and Data-processing (register-shifted
10165 register */
10166 /* Out of 11 shifter operands mode, all the insn modifies destination
10167 register, which is specified by 13-16 decode. */
10168 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10169 record_buf[1] = ARM_PS_REGNUM;
10170 arm_insn_r->reg_rec_count = 2;
10171 }
10172 else if ((arm_insn_r->decode < 8) && ((opcode1 & 0x19) == 0x10))
10173 {
10174 /* Miscellaneous instructions */
10175
10176 if (3 == arm_insn_r->decode && 0x12 == opcode1
10177 && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10178 {
10179 /* Handle BLX, branch and link/exchange. */
10180 if (9 == arm_insn_r->opcode)
10181 {
10182 /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
10183 and R14 stores the return address. */
10184 record_buf[0] = ARM_PS_REGNUM;
10185 record_buf[1] = ARM_LR_REGNUM;
10186 arm_insn_r->reg_rec_count = 2;
10187 }
10188 }
10189 else if (7 == arm_insn_r->decode && 0x12 == opcode1)
10190 {
10191 /* Handle enhanced software breakpoint insn, BKPT. */
10192 /* CPSR is changed to be executed in ARM state, disabling normal
10193 interrupts, entering abort mode. */
10194 /* According to high vector configuration PC is set. */
10195 /* user hit breakpoint and type reverse, in
10196 that case, we need to go back with previous CPSR and
10197 Program Counter. */
10198 record_buf[0] = ARM_PS_REGNUM;
10199 record_buf[1] = ARM_LR_REGNUM;
10200 arm_insn_r->reg_rec_count = 2;
10201
10202 /* Save SPSR also; how? */
10203 return -1;
10204 }
10205 else if (1 == arm_insn_r->decode && 0x12 == opcode1
10206 && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
10207 {
10208 /* Handle BX, branch and link/exchange. */
10209 /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm. */
10210 record_buf[0] = ARM_PS_REGNUM;
10211 arm_insn_r->reg_rec_count = 1;
10212 }
10213 else if (1 == arm_insn_r->decode && 0x16 == opcode1
10214 && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
10215 && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
10216 {
10217 /* Count leading zeros: CLZ. */
10218 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10219 arm_insn_r->reg_rec_count = 1;
10220 }
10221 else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
10222 && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10223 && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
10224 && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0))
10225 {
10226 /* Handle MRS insn. */
10227 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10228 arm_insn_r->reg_rec_count = 1;
10229 }
10230 }
10231 else if (9 == arm_insn_r->decode && opcode1 < 0x10)
10232 {
10233 /* Multiply and multiply-accumulate */
10234
10235 /* Handle multiply instructions. */
10236 /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL. */
10237 if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
10238 {
10239 /* Handle MLA and MUL. */
10240 record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10241 record_buf[1] = ARM_PS_REGNUM;
10242 arm_insn_r->reg_rec_count = 2;
10243 }
10244 else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
10245 {
10246 /* Handle SMLAL, SMULL, UMLAL, UMULL. */
10247 record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
10248 record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
10249 record_buf[2] = ARM_PS_REGNUM;
10250 arm_insn_r->reg_rec_count = 3;
10251 }
10252 }
10253 else if (9 == arm_insn_r->decode && opcode1 > 0x10)
10254 {
10255 /* Synchronization primitives */
10256
10257 /* Handling SWP, SWPB. */
10258 /* These insn, changes register and memory as well. */
10259 /* SWP or SWPB insn. */
10260
10261 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10262 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10263 /* SWP insn ?, swaps word. */
10264 if (8 == arm_insn_r->opcode)
10265 {
10266 record_buf_mem[0] = 4;
10267 }
10268 else
10269 {
10270 /* SWPB insn, swaps only byte. */
10271 record_buf_mem[0] = 1;
10272 }
10273 record_buf_mem[1] = u_regval[0];
10274 arm_insn_r->mem_rec_count = 1;
10275 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10276 arm_insn_r->reg_rec_count = 1;
10277 }
10278 else if (11 == arm_insn_r->decode || 13 == arm_insn_r->decode
10279 || 15 == arm_insn_r->decode)
10280 {
10281 if ((opcode1 & 0x12) == 2)
10282 {
10283 /* Extra load/store (unprivileged) */
10284 return -1;
10285 }
10286 else
10287 {
10288 /* Extra load/store */
10289 switch (bits (arm_insn_r->arm_insn, 5, 6))
10290 {
10291 case 1:
10292 if ((opcode1 & 0x05) == 0x0 || (opcode1 & 0x05) == 0x4)
10293 {
10294 /* STRH (register), STRH (immediate) */
10295 arm_record_strx (arm_insn_r, &record_buf[0],
10296 &record_buf_mem[0], ARM_RECORD_STRH);
10297 }
10298 else if ((opcode1 & 0x05) == 0x1)
10299 {
10300 /* LDRH (register) */
10301 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10302 arm_insn_r->reg_rec_count = 1;
10303
10304 if (bit (arm_insn_r->arm_insn, 21))
10305 {
10306 /* Write back to Rn. */
10307 record_buf[arm_insn_r->reg_rec_count++]
10308 = bits (arm_insn_r->arm_insn, 16, 19);
10309 }
10310 }
10311 else if ((opcode1 & 0x05) == 0x5)
10312 {
10313 /* LDRH (immediate), LDRH (literal) */
10314 int rn = bits (arm_insn_r->arm_insn, 16, 19);
10315
10316 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10317 arm_insn_r->reg_rec_count = 1;
10318
10319 if (rn != 15)
10320 {
10321 /*LDRH (immediate) */
10322 if (bit (arm_insn_r->arm_insn, 21))
10323 {
10324 /* Write back to Rn. */
10325 record_buf[arm_insn_r->reg_rec_count++] = rn;
10326 }
10327 }
10328 }
10329 else
10330 return -1;
10331 break;
10332 case 2:
10333 if ((opcode1 & 0x05) == 0x0)
10334 {
10335 /* LDRD (register) */
10336 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10337 record_buf[1] = record_buf[0] + 1;
10338 arm_insn_r->reg_rec_count = 2;
10339
10340 if (bit (arm_insn_r->arm_insn, 21))
10341 {
10342 /* Write back to Rn. */
10343 record_buf[arm_insn_r->reg_rec_count++]
10344 = bits (arm_insn_r->arm_insn, 16, 19);
10345 }
10346 }
10347 else if ((opcode1 & 0x05) == 0x1)
10348 {
10349 /* LDRSB (register) */
10350 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10351 arm_insn_r->reg_rec_count = 1;
10352
10353 if (bit (arm_insn_r->arm_insn, 21))
10354 {
10355 /* Write back to Rn. */
10356 record_buf[arm_insn_r->reg_rec_count++]
10357 = bits (arm_insn_r->arm_insn, 16, 19);
10358 }
10359 }
10360 else if ((opcode1 & 0x05) == 0x4 || (opcode1 & 0x05) == 0x5)
10361 {
10362 /* LDRD (immediate), LDRD (literal), LDRSB (immediate),
10363 LDRSB (literal) */
10364 int rn = bits (arm_insn_r->arm_insn, 16, 19);
10365
10366 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10367 arm_insn_r->reg_rec_count = 1;
10368
10369 if (rn != 15)
10370 {
10371 /*LDRD (immediate), LDRSB (immediate) */
10372 if (bit (arm_insn_r->arm_insn, 21))
10373 {
10374 /* Write back to Rn. */
10375 record_buf[arm_insn_r->reg_rec_count++] = rn;
10376 }
10377 }
10378 }
10379 else
10380 return -1;
10381 break;
10382 case 3:
10383 if ((opcode1 & 0x05) == 0x0)
10384 {
10385 /* STRD (register) */
10386 arm_record_strx (arm_insn_r, &record_buf[0],
10387 &record_buf_mem[0], ARM_RECORD_STRD);
10388 }
10389 else if ((opcode1 & 0x05) == 0x1)
10390 {
10391 /* LDRSH (register) */
10392 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10393 arm_insn_r->reg_rec_count = 1;
10394
10395 if (bit (arm_insn_r->arm_insn, 21))
10396 {
10397 /* Write back to Rn. */
10398 record_buf[arm_insn_r->reg_rec_count++]
10399 = bits (arm_insn_r->arm_insn, 16, 19);
10400 }
10401 }
10402 else if ((opcode1 & 0x05) == 0x4)
10403 {
10404 /* STRD (immediate) */
10405 arm_record_strx (arm_insn_r, &record_buf[0],
10406 &record_buf_mem[0], ARM_RECORD_STRD);
10407 }
10408 else if ((opcode1 & 0x05) == 0x5)
10409 {
10410 /* LDRSH (immediate), LDRSH (literal) */
10411 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10412 arm_insn_r->reg_rec_count = 1;
10413
10414 if (bit (arm_insn_r->arm_insn, 21))
10415 {
10416 /* Write back to Rn. */
10417 record_buf[arm_insn_r->reg_rec_count++]
10418 = bits (arm_insn_r->arm_insn, 16, 19);
10419 }
10420 }
10421 else
10422 return -1;
10423 break;
10424 default:
10425 return -1;
10426 }
10427 }
10428 }
10429 else
10430 {
10431 return -1;
10432 }
10433
10434 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10435 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10436 return 0;
10437 }
10438
10439 /* Handling opcode 001 insns. */
10440
10441 static int
10442 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
10443 {
10444 uint32_t record_buf[8], record_buf_mem[8];
10445
10446 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10447 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10448
10449 if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
10450 && 2 == bits (arm_insn_r->arm_insn, 20, 21)
10451 && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
10452 )
10453 {
10454 /* Handle MSR insn. */
10455 if (9 == arm_insn_r->opcode)
10456 {
10457 /* CSPR is going to be changed. */
10458 record_buf[0] = ARM_PS_REGNUM;
10459 arm_insn_r->reg_rec_count = 1;
10460 }
10461 else
10462 {
10463 /* SPSR is going to be changed. */
10464 }
10465 }
10466 else if (arm_insn_r->opcode <= 15)
10467 {
10468 /* Normal data processing insns. */
10469 /* Out of 11 shifter operands mode, all the insn modifies destination
10470 register, which is specified by 13-16 decode. */
10471 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10472 record_buf[1] = ARM_PS_REGNUM;
10473 arm_insn_r->reg_rec_count = 2;
10474 }
10475 else
10476 {
10477 return -1;
10478 }
10479
10480 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10481 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10482 return 0;
10483 }
10484
10485 static int
10486 arm_record_media (insn_decode_record *arm_insn_r)
10487 {
10488 uint32_t record_buf[8];
10489
10490 switch (bits (arm_insn_r->arm_insn, 22, 24))
10491 {
10492 case 0:
10493 /* Parallel addition and subtraction, signed */
10494 case 1:
10495 /* Parallel addition and subtraction, unsigned */
10496 case 2:
10497 case 3:
10498 /* Packing, unpacking, saturation and reversal */
10499 {
10500 int rd = bits (arm_insn_r->arm_insn, 12, 15);
10501
10502 record_buf[arm_insn_r->reg_rec_count++] = rd;
10503 }
10504 break;
10505
10506 case 4:
10507 case 5:
10508 /* Signed multiplies */
10509 {
10510 int rd = bits (arm_insn_r->arm_insn, 16, 19);
10511 unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 22);
10512
10513 record_buf[arm_insn_r->reg_rec_count++] = rd;
10514 if (op1 == 0x0)
10515 record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10516 else if (op1 == 0x4)
10517 record_buf[arm_insn_r->reg_rec_count++]
10518 = bits (arm_insn_r->arm_insn, 12, 15);
10519 }
10520 break;
10521
10522 case 6:
10523 {
10524 if (bit (arm_insn_r->arm_insn, 21)
10525 && bits (arm_insn_r->arm_insn, 5, 6) == 0x2)
10526 {
10527 /* SBFX */
10528 record_buf[arm_insn_r->reg_rec_count++]
10529 = bits (arm_insn_r->arm_insn, 12, 15);
10530 }
10531 else if (bits (arm_insn_r->arm_insn, 20, 21) == 0x0
10532 && bits (arm_insn_r->arm_insn, 5, 7) == 0x0)
10533 {
10534 /* USAD8 and USADA8 */
10535 record_buf[arm_insn_r->reg_rec_count++]
10536 = bits (arm_insn_r->arm_insn, 16, 19);
10537 }
10538 }
10539 break;
10540
10541 case 7:
10542 {
10543 if (bits (arm_insn_r->arm_insn, 20, 21) == 0x3
10544 && bits (arm_insn_r->arm_insn, 5, 7) == 0x7)
10545 {
10546 /* Permanently UNDEFINED */
10547 return -1;
10548 }
10549 else
10550 {
10551 /* BFC, BFI and UBFX */
10552 record_buf[arm_insn_r->reg_rec_count++]
10553 = bits (arm_insn_r->arm_insn, 12, 15);
10554 }
10555 }
10556 break;
10557
10558 default:
10559 return -1;
10560 }
10561
10562 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10563
10564 return 0;
10565 }
10566
10567 /* Handle ARM mode instructions with opcode 010. */
10568
10569 static int
10570 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
10571 {
10572 struct regcache *reg_cache = arm_insn_r->regcache;
10573
10574 uint32_t reg_base , reg_dest;
10575 uint32_t offset_12, tgt_mem_addr;
10576 uint32_t record_buf[8], record_buf_mem[8];
10577 unsigned char wback;
10578 ULONGEST u_regval;
10579
10580 /* Calculate wback. */
10581 wback = (bit (arm_insn_r->arm_insn, 24) == 0)
10582 || (bit (arm_insn_r->arm_insn, 21) == 1);
10583
10584 arm_insn_r->reg_rec_count = 0;
10585 reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10586
10587 if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10588 {
10589 /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
10590 and LDRT. */
10591
10592 reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10593 record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
10594
10595 /* The LDR instruction is capable of doing branching. If MOV LR, PC
10596 preceeds a LDR instruction having R15 as reg_base, it
10597 emulates a branch and link instruction, and hence we need to save
10598 CPSR and PC as well. */
10599 if (ARM_PC_REGNUM == reg_dest)
10600 record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10601
10602 /* If wback is true, also save the base register, which is going to be
10603 written to. */
10604 if (wback)
10605 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10606 }
10607 else
10608 {
10609 /* STR (immediate), STRB (immediate), STRBT and STRT. */
10610
10611 offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
10612 regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10613
10614 /* Handle bit U. */
10615 if (bit (arm_insn_r->arm_insn, 23))
10616 {
10617 /* U == 1: Add the offset. */
10618 tgt_mem_addr = (uint32_t) u_regval + offset_12;
10619 }
10620 else
10621 {
10622 /* U == 0: subtract the offset. */
10623 tgt_mem_addr = (uint32_t) u_regval - offset_12;
10624 }
10625
10626 /* Bit 22 tells us whether the store instruction writes 1 byte or 4
10627 bytes. */
10628 if (bit (arm_insn_r->arm_insn, 22))
10629 {
10630 /* STRB and STRBT: 1 byte. */
10631 record_buf_mem[0] = 1;
10632 }
10633 else
10634 {
10635 /* STR and STRT: 4 bytes. */
10636 record_buf_mem[0] = 4;
10637 }
10638
10639 /* Handle bit P. */
10640 if (bit (arm_insn_r->arm_insn, 24))
10641 record_buf_mem[1] = tgt_mem_addr;
10642 else
10643 record_buf_mem[1] = (uint32_t) u_regval;
10644
10645 arm_insn_r->mem_rec_count = 1;
10646
10647 /* If wback is true, also save the base register, which is going to be
10648 written to. */
10649 if (wback)
10650 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10651 }
10652
10653 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10654 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10655 return 0;
10656 }
10657
10658 /* Handling opcode 011 insns. */
10659
10660 static int
10661 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
10662 {
10663 struct regcache *reg_cache = arm_insn_r->regcache;
10664
10665 uint32_t shift_imm = 0;
10666 uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
10667 uint32_t offset_12 = 0, tgt_mem_addr = 0;
10668 uint32_t record_buf[8], record_buf_mem[8];
10669
10670 LONGEST s_word;
10671 ULONGEST u_regval[2];
10672
10673 if (bit (arm_insn_r->arm_insn, 4))
10674 return arm_record_media (arm_insn_r);
10675
10676 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10677 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10678
10679 /* Handle enhanced store insns and LDRD DSP insn,
10680 order begins according to addressing modes for store insns
10681 STRH insn. */
10682
10683 /* LDR or STR? */
10684 if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10685 {
10686 reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
10687 /* LDR insn has a capability to do branching, if
10688 MOV LR, PC is precedded by LDR insn having Rn as R15
10689 in that case, it emulates branch and link insn, and hence we
10690 need to save CSPR and PC as well. */
10691 if (15 != reg_dest)
10692 {
10693 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
10694 arm_insn_r->reg_rec_count = 1;
10695 }
10696 else
10697 {
10698 record_buf[0] = reg_dest;
10699 record_buf[1] = ARM_PS_REGNUM;
10700 arm_insn_r->reg_rec_count = 2;
10701 }
10702 }
10703 else
10704 {
10705 if (! bits (arm_insn_r->arm_insn, 4, 11))
10706 {
10707 /* Store insn, register offset and register pre-indexed,
10708 register post-indexed. */
10709 /* Get Rm. */
10710 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10711 /* Get Rn. */
10712 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10713 regcache_raw_read_unsigned (reg_cache, reg_src1
10714 , &u_regval[0]);
10715 regcache_raw_read_unsigned (reg_cache, reg_src2
10716 , &u_regval[1]);
10717 if (15 == reg_src2)
10718 {
10719 /* If R15 was used as Rn, hence current PC+8. */
10720 /* Pre-indexed mode doesnt reach here ; illegal insn. */
10721 u_regval[0] = u_regval[0] + 8;
10722 }
10723 /* Calculate target store address, Rn +/- Rm, register offset. */
10724 /* U == 1. */
10725 if (bit (arm_insn_r->arm_insn, 23))
10726 {
10727 tgt_mem_addr = u_regval[0] + u_regval[1];
10728 }
10729 else
10730 {
10731 tgt_mem_addr = u_regval[1] - u_regval[0];
10732 }
10733
10734 switch (arm_insn_r->opcode)
10735 {
10736 /* STR. */
10737 case 8:
10738 case 12:
10739 /* STR. */
10740 case 9:
10741 case 13:
10742 /* STRT. */
10743 case 1:
10744 case 5:
10745 /* STR. */
10746 case 0:
10747 case 4:
10748 record_buf_mem[0] = 4;
10749 break;
10750
10751 /* STRB. */
10752 case 10:
10753 case 14:
10754 /* STRB. */
10755 case 11:
10756 case 15:
10757 /* STRBT. */
10758 case 3:
10759 case 7:
10760 /* STRB. */
10761 case 2:
10762 case 6:
10763 record_buf_mem[0] = 1;
10764 break;
10765
10766 default:
10767 gdb_assert_not_reached ("no decoding pattern found");
10768 break;
10769 }
10770 record_buf_mem[1] = tgt_mem_addr;
10771 arm_insn_r->mem_rec_count = 1;
10772
10773 if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10774 || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10775 || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10776 || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10777 || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10778 || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10779 )
10780 {
10781 /* Rn is going to be changed in pre-indexed mode and
10782 post-indexed mode as well. */
10783 record_buf[0] = reg_src2;
10784 arm_insn_r->reg_rec_count = 1;
10785 }
10786 }
10787 else
10788 {
10789 /* Store insn, scaled register offset; scaled pre-indexed. */
10790 offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
10791 /* Get Rm. */
10792 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10793 /* Get Rn. */
10794 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10795 /* Get shift_imm. */
10796 shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
10797 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10798 regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
10799 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10800 /* Offset_12 used as shift. */
10801 switch (offset_12)
10802 {
10803 case 0:
10804 /* Offset_12 used as index. */
10805 offset_12 = u_regval[0] << shift_imm;
10806 break;
10807
10808 case 1:
10809 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
10810 break;
10811
10812 case 2:
10813 if (!shift_imm)
10814 {
10815 if (bit (u_regval[0], 31))
10816 {
10817 offset_12 = 0xFFFFFFFF;
10818 }
10819 else
10820 {
10821 offset_12 = 0;
10822 }
10823 }
10824 else
10825 {
10826 /* This is arithmetic shift. */
10827 offset_12 = s_word >> shift_imm;
10828 }
10829 break;
10830
10831 case 3:
10832 if (!shift_imm)
10833 {
10834 regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
10835 &u_regval[1]);
10836 /* Get C flag value and shift it by 31. */
10837 offset_12 = (((bit (u_regval[1], 29)) << 31) \
10838 | (u_regval[0]) >> 1);
10839 }
10840 else
10841 {
10842 offset_12 = (u_regval[0] >> shift_imm) \
10843 | (u_regval[0] <<
10844 (sizeof(uint32_t) - shift_imm));
10845 }
10846 break;
10847
10848 default:
10849 gdb_assert_not_reached ("no decoding pattern found");
10850 break;
10851 }
10852
10853 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10854 /* bit U set. */
10855 if (bit (arm_insn_r->arm_insn, 23))
10856 {
10857 tgt_mem_addr = u_regval[1] + offset_12;
10858 }
10859 else
10860 {
10861 tgt_mem_addr = u_regval[1] - offset_12;
10862 }
10863
10864 switch (arm_insn_r->opcode)
10865 {
10866 /* STR. */
10867 case 8:
10868 case 12:
10869 /* STR. */
10870 case 9:
10871 case 13:
10872 /* STRT. */
10873 case 1:
10874 case 5:
10875 /* STR. */
10876 case 0:
10877 case 4:
10878 record_buf_mem[0] = 4;
10879 break;
10880
10881 /* STRB. */
10882 case 10:
10883 case 14:
10884 /* STRB. */
10885 case 11:
10886 case 15:
10887 /* STRBT. */
10888 case 3:
10889 case 7:
10890 /* STRB. */
10891 case 2:
10892 case 6:
10893 record_buf_mem[0] = 1;
10894 break;
10895
10896 default:
10897 gdb_assert_not_reached ("no decoding pattern found");
10898 break;
10899 }
10900 record_buf_mem[1] = tgt_mem_addr;
10901 arm_insn_r->mem_rec_count = 1;
10902
10903 if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
10904 || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10905 || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
10906 || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
10907 || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
10908 || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
10909 )
10910 {
10911 /* Rn is going to be changed in register scaled pre-indexed
10912 mode,and scaled post indexed mode. */
10913 record_buf[0] = reg_src2;
10914 arm_insn_r->reg_rec_count = 1;
10915 }
10916 }
10917 }
10918
10919 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
10920 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
10921 return 0;
10922 }
10923
10924 /* Handle ARM mode instructions with opcode 100. */
10925
10926 static int
10927 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
10928 {
10929 struct regcache *reg_cache = arm_insn_r->regcache;
10930 uint32_t register_count = 0, register_bits;
10931 uint32_t reg_base, addr_mode;
10932 uint32_t record_buf[24], record_buf_mem[48];
10933 uint32_t wback;
10934 ULONGEST u_regval;
10935
10936 /* Fetch the list of registers. */
10937 register_bits = bits (arm_insn_r->arm_insn, 0, 15);
10938 arm_insn_r->reg_rec_count = 0;
10939
10940 /* Fetch the base register that contains the address we are loading data
10941 to. */
10942 reg_base = bits (arm_insn_r->arm_insn, 16, 19);
10943
10944 /* Calculate wback. */
10945 wback = (bit (arm_insn_r->arm_insn, 21) == 1);
10946
10947 if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
10948 {
10949 /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB. */
10950
10951 /* Find out which registers are going to be loaded from memory. */
10952 while (register_bits)
10953 {
10954 if (register_bits & 0x00000001)
10955 record_buf[arm_insn_r->reg_rec_count++] = register_count;
10956 register_bits = register_bits >> 1;
10957 register_count++;
10958 }
10959
10960
10961 /* If wback is true, also save the base register, which is going to be
10962 written to. */
10963 if (wback)
10964 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
10965
10966 /* Save the CPSR register. */
10967 record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
10968 }
10969 else
10970 {
10971 /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA). */
10972
10973 addr_mode = bits (arm_insn_r->arm_insn, 23, 24);
10974
10975 regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
10976
10977 /* Find out how many registers are going to be stored to memory. */
10978 while (register_bits)
10979 {
10980 if (register_bits & 0x00000001)
10981 register_count++;
10982 register_bits = register_bits >> 1;
10983 }
10984
10985 switch (addr_mode)
10986 {
10987 /* STMDA (STMED): Decrement after. */
10988 case 0:
10989 record_buf_mem[1] = (uint32_t) u_regval
10990 - register_count * INT_REGISTER_SIZE + 4;
10991 break;
10992 /* STM (STMIA, STMEA): Increment after. */
10993 case 1:
10994 record_buf_mem[1] = (uint32_t) u_regval;
10995 break;
10996 /* STMDB (STMFD): Decrement before. */
10997 case 2:
10998 record_buf_mem[1] = (uint32_t) u_regval
10999 - register_count * INT_REGISTER_SIZE;
11000 break;
11001 /* STMIB (STMFA): Increment before. */
11002 case 3:
11003 record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11004 break;
11005 default:
11006 gdb_assert_not_reached ("no decoding pattern found");
11007 break;
11008 }
11009
11010 record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11011 arm_insn_r->mem_rec_count = 1;
11012
11013 /* If wback is true, also save the base register, which is going to be
11014 written to. */
11015 if (wback)
11016 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11017 }
11018
11019 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11020 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11021 return 0;
11022 }
11023
11024 /* Handling opcode 101 insns. */
11025
11026 static int
11027 arm_record_b_bl (insn_decode_record *arm_insn_r)
11028 {
11029 uint32_t record_buf[8];
11030
11031 /* Handle B, BL, BLX(1) insns. */
11032 /* B simply branches so we do nothing here. */
11033 /* Note: BLX(1) doesnt fall here but instead it falls into
11034 extension space. */
11035 if (bit (arm_insn_r->arm_insn, 24))
11036 {
11037 record_buf[0] = ARM_LR_REGNUM;
11038 arm_insn_r->reg_rec_count = 1;
11039 }
11040
11041 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11042
11043 return 0;
11044 }
11045
11046 static int
11047 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11048 {
11049 printf_unfiltered (_("Process record does not support instruction "
11050 "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11051 paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11052
11053 return -1;
11054 }
11055
11056 /* Record handler for vector data transfer instructions. */
11057
11058 static int
11059 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11060 {
11061 uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11062 uint32_t record_buf[4];
11063
11064 reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11065 reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11066 bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11067 bit_l = bit (arm_insn_r->arm_insn, 20);
11068 bit_c = bit (arm_insn_r->arm_insn, 8);
11069
11070 /* Handle VMOV instruction. */
11071 if (bit_l && bit_c)
11072 {
11073 record_buf[0] = reg_t;
11074 arm_insn_r->reg_rec_count = 1;
11075 }
11076 else if (bit_l && !bit_c)
11077 {
11078 /* Handle VMOV instruction. */
11079 if (bits_a == 0x00)
11080 {
11081 record_buf[0] = reg_t;
11082 arm_insn_r->reg_rec_count = 1;
11083 }
11084 /* Handle VMRS instruction. */
11085 else if (bits_a == 0x07)
11086 {
11087 if (reg_t == 15)
11088 reg_t = ARM_PS_REGNUM;
11089
11090 record_buf[0] = reg_t;
11091 arm_insn_r->reg_rec_count = 1;
11092 }
11093 }
11094 else if (!bit_l && !bit_c)
11095 {
11096 /* Handle VMOV instruction. */
11097 if (bits_a == 0x00)
11098 {
11099 record_buf[0] = ARM_D0_REGNUM + reg_v;
11100
11101 arm_insn_r->reg_rec_count = 1;
11102 }
11103 /* Handle VMSR instruction. */
11104 else if (bits_a == 0x07)
11105 {
11106 record_buf[0] = ARM_FPSCR_REGNUM;
11107 arm_insn_r->reg_rec_count = 1;
11108 }
11109 }
11110 else if (!bit_l && bit_c)
11111 {
11112 /* Handle VMOV instruction. */
11113 if (!(bits_a & 0x04))
11114 {
11115 record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
11116 + ARM_D0_REGNUM;
11117 arm_insn_r->reg_rec_count = 1;
11118 }
11119 /* Handle VDUP instruction. */
11120 else
11121 {
11122 if (bit (arm_insn_r->arm_insn, 21))
11123 {
11124 reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11125 record_buf[0] = reg_v + ARM_D0_REGNUM;
11126 record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
11127 arm_insn_r->reg_rec_count = 2;
11128 }
11129 else
11130 {
11131 reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
11132 record_buf[0] = reg_v + ARM_D0_REGNUM;
11133 arm_insn_r->reg_rec_count = 1;
11134 }
11135 }
11136 }
11137
11138 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11139 return 0;
11140 }
11141
11142 /* Record handler for extension register load/store instructions. */
11143
11144 static int
11145 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
11146 {
11147 uint32_t opcode, single_reg;
11148 uint8_t op_vldm_vstm;
11149 uint32_t record_buf[8], record_buf_mem[128];
11150 ULONGEST u_regval = 0;
11151
11152 struct regcache *reg_cache = arm_insn_r->regcache;
11153
11154 opcode = bits (arm_insn_r->arm_insn, 20, 24);
11155 single_reg = !bit (arm_insn_r->arm_insn, 8);
11156 op_vldm_vstm = opcode & 0x1b;
11157
11158 /* Handle VMOV instructions. */
11159 if ((opcode & 0x1e) == 0x04)
11160 {
11161 if (bit (arm_insn_r->arm_insn, 20)) /* to_arm_registers bit 20? */
11162 {
11163 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11164 record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11165 arm_insn_r->reg_rec_count = 2;
11166 }
11167 else
11168 {
11169 uint8_t reg_m = bits (arm_insn_r->arm_insn, 0, 3);
11170 uint8_t bit_m = bit (arm_insn_r->arm_insn, 5);
11171
11172 if (single_reg)
11173 {
11174 /* The first S register number m is REG_M:M (M is bit 5),
11175 the corresponding D register number is REG_M:M / 2, which
11176 is REG_M. */
11177 record_buf[arm_insn_r->reg_rec_count++] = ARM_D0_REGNUM + reg_m;
11178 /* The second S register number is REG_M:M + 1, the
11179 corresponding D register number is (REG_M:M + 1) / 2.
11180 IOW, if bit M is 1, the first and second S registers
11181 are mapped to different D registers, otherwise, they are
11182 in the same D register. */
11183 if (bit_m)
11184 {
11185 record_buf[arm_insn_r->reg_rec_count++]
11186 = ARM_D0_REGNUM + reg_m + 1;
11187 }
11188 }
11189 else
11190 {
11191 record_buf[0] = ((bit_m << 4) + reg_m + ARM_D0_REGNUM);
11192 arm_insn_r->reg_rec_count = 1;
11193 }
11194 }
11195 }
11196 /* Handle VSTM and VPUSH instructions. */
11197 else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
11198 || op_vldm_vstm == 0x12)
11199 {
11200 uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
11201 uint32_t memory_index = 0;
11202
11203 reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11204 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11205 imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11206 imm_off32 = imm_off8 << 2;
11207 memory_count = imm_off8;
11208
11209 if (bit (arm_insn_r->arm_insn, 23))
11210 start_address = u_regval;
11211 else
11212 start_address = u_regval - imm_off32;
11213
11214 if (bit (arm_insn_r->arm_insn, 21))
11215 {
11216 record_buf[0] = reg_rn;
11217 arm_insn_r->reg_rec_count = 1;
11218 }
11219
11220 while (memory_count > 0)
11221 {
11222 if (single_reg)
11223 {
11224 record_buf_mem[memory_index] = 4;
11225 record_buf_mem[memory_index + 1] = start_address;
11226 start_address = start_address + 4;
11227 memory_index = memory_index + 2;
11228 }
11229 else
11230 {
11231 record_buf_mem[memory_index] = 4;
11232 record_buf_mem[memory_index + 1] = start_address;
11233 record_buf_mem[memory_index + 2] = 4;
11234 record_buf_mem[memory_index + 3] = start_address + 4;
11235 start_address = start_address + 8;
11236 memory_index = memory_index + 4;
11237 }
11238 memory_count--;
11239 }
11240 arm_insn_r->mem_rec_count = (memory_index >> 1);
11241 }
11242 /* Handle VLDM instructions. */
11243 else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
11244 || op_vldm_vstm == 0x13)
11245 {
11246 uint32_t reg_count, reg_vd;
11247 uint32_t reg_index = 0;
11248 uint32_t bit_d = bit (arm_insn_r->arm_insn, 22);
11249
11250 reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11251 reg_count = bits (arm_insn_r->arm_insn, 0, 7);
11252
11253 /* REG_VD is the first D register number. If the instruction
11254 loads memory to S registers (SINGLE_REG is TRUE), the register
11255 number is (REG_VD << 1 | bit D), so the corresponding D
11256 register number is (REG_VD << 1 | bit D) / 2 = REG_VD. */
11257 if (!single_reg)
11258 reg_vd = reg_vd | (bit_d << 4);
11259
11260 if (bit (arm_insn_r->arm_insn, 21) /* write back */)
11261 record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
11262
11263 /* If the instruction loads memory to D register, REG_COUNT should
11264 be divided by 2, according to the ARM Architecture Reference
11265 Manual. If the instruction loads memory to S register, divide by
11266 2 as well because two S registers are mapped to D register. */
11267 reg_count = reg_count / 2;
11268 if (single_reg && bit_d)
11269 {
11270 /* Increase the register count if S register list starts from
11271 an odd number (bit d is one). */
11272 reg_count++;
11273 }
11274
11275 while (reg_count > 0)
11276 {
11277 record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
11278 reg_count--;
11279 }
11280 arm_insn_r->reg_rec_count = reg_index;
11281 }
11282 /* VSTR Vector store register. */
11283 else if ((opcode & 0x13) == 0x10)
11284 {
11285 uint32_t start_address, reg_rn, imm_off32, imm_off8;
11286 uint32_t memory_index = 0;
11287
11288 reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
11289 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
11290 imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
11291 imm_off32 = imm_off8 << 2;
11292
11293 if (bit (arm_insn_r->arm_insn, 23))
11294 start_address = u_regval + imm_off32;
11295 else
11296 start_address = u_regval - imm_off32;
11297
11298 if (single_reg)
11299 {
11300 record_buf_mem[memory_index] = 4;
11301 record_buf_mem[memory_index + 1] = start_address;
11302 arm_insn_r->mem_rec_count = 1;
11303 }
11304 else
11305 {
11306 record_buf_mem[memory_index] = 4;
11307 record_buf_mem[memory_index + 1] = start_address;
11308 record_buf_mem[memory_index + 2] = 4;
11309 record_buf_mem[memory_index + 3] = start_address + 4;
11310 arm_insn_r->mem_rec_count = 2;
11311 }
11312 }
11313 /* VLDR Vector load register. */
11314 else if ((opcode & 0x13) == 0x11)
11315 {
11316 uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11317
11318 if (!single_reg)
11319 {
11320 reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
11321 record_buf[0] = ARM_D0_REGNUM + reg_vd;
11322 }
11323 else
11324 {
11325 reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
11326 /* Record register D rather than pseudo register S. */
11327 record_buf[0] = ARM_D0_REGNUM + reg_vd / 2;
11328 }
11329 arm_insn_r->reg_rec_count = 1;
11330 }
11331
11332 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11333 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11334 return 0;
11335 }
11336
11337 /* Record handler for arm/thumb mode VFP data processing instructions. */
11338
11339 static int
11340 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
11341 {
11342 uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
11343 uint32_t record_buf[4];
11344 enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
11345 enum insn_types curr_insn_type = INSN_INV;
11346
11347 reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
11348 opc1 = bits (arm_insn_r->arm_insn, 20, 23);
11349 opc2 = bits (arm_insn_r->arm_insn, 16, 19);
11350 opc3 = bits (arm_insn_r->arm_insn, 6, 7);
11351 dp_op_sz = bit (arm_insn_r->arm_insn, 8);
11352 bit_d = bit (arm_insn_r->arm_insn, 22);
11353 /* Mask off the "D" bit. */
11354 opc1 = opc1 & ~0x04;
11355
11356 /* Handle VMLA, VMLS. */
11357 if (opc1 == 0x00)
11358 {
11359 if (bit (arm_insn_r->arm_insn, 10))
11360 {
11361 if (bit (arm_insn_r->arm_insn, 6))
11362 curr_insn_type = INSN_T0;
11363 else
11364 curr_insn_type = INSN_T1;
11365 }
11366 else
11367 {
11368 if (dp_op_sz)
11369 curr_insn_type = INSN_T1;
11370 else
11371 curr_insn_type = INSN_T2;
11372 }
11373 }
11374 /* Handle VNMLA, VNMLS, VNMUL. */
11375 else if (opc1 == 0x01)
11376 {
11377 if (dp_op_sz)
11378 curr_insn_type = INSN_T1;
11379 else
11380 curr_insn_type = INSN_T2;
11381 }
11382 /* Handle VMUL. */
11383 else if (opc1 == 0x02 && !(opc3 & 0x01))
11384 {
11385 if (bit (arm_insn_r->arm_insn, 10))
11386 {
11387 if (bit (arm_insn_r->arm_insn, 6))
11388 curr_insn_type = INSN_T0;
11389 else
11390 curr_insn_type = INSN_T1;
11391 }
11392 else
11393 {
11394 if (dp_op_sz)
11395 curr_insn_type = INSN_T1;
11396 else
11397 curr_insn_type = INSN_T2;
11398 }
11399 }
11400 /* Handle VADD, VSUB. */
11401 else if (opc1 == 0x03)
11402 {
11403 if (!bit (arm_insn_r->arm_insn, 9))
11404 {
11405 if (bit (arm_insn_r->arm_insn, 6))
11406 curr_insn_type = INSN_T0;
11407 else
11408 curr_insn_type = INSN_T1;
11409 }
11410 else
11411 {
11412 if (dp_op_sz)
11413 curr_insn_type = INSN_T1;
11414 else
11415 curr_insn_type = INSN_T2;
11416 }
11417 }
11418 /* Handle VDIV. */
11419 else if (opc1 == 0x08)
11420 {
11421 if (dp_op_sz)
11422 curr_insn_type = INSN_T1;
11423 else
11424 curr_insn_type = INSN_T2;
11425 }
11426 /* Handle all other vfp data processing instructions. */
11427 else if (opc1 == 0x0b)
11428 {
11429 /* Handle VMOV. */
11430 if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
11431 {
11432 if (bit (arm_insn_r->arm_insn, 4))
11433 {
11434 if (bit (arm_insn_r->arm_insn, 6))
11435 curr_insn_type = INSN_T0;
11436 else
11437 curr_insn_type = INSN_T1;
11438 }
11439 else
11440 {
11441 if (dp_op_sz)
11442 curr_insn_type = INSN_T1;
11443 else
11444 curr_insn_type = INSN_T2;
11445 }
11446 }
11447 /* Handle VNEG and VABS. */
11448 else if ((opc2 == 0x01 && opc3 == 0x01)
11449 || (opc2 == 0x00 && opc3 == 0x03))
11450 {
11451 if (!bit (arm_insn_r->arm_insn, 11))
11452 {
11453 if (bit (arm_insn_r->arm_insn, 6))
11454 curr_insn_type = INSN_T0;
11455 else
11456 curr_insn_type = INSN_T1;
11457 }
11458 else
11459 {
11460 if (dp_op_sz)
11461 curr_insn_type = INSN_T1;
11462 else
11463 curr_insn_type = INSN_T2;
11464 }
11465 }
11466 /* Handle VSQRT. */
11467 else if (opc2 == 0x01 && opc3 == 0x03)
11468 {
11469 if (dp_op_sz)
11470 curr_insn_type = INSN_T1;
11471 else
11472 curr_insn_type = INSN_T2;
11473 }
11474 /* Handle VCVT. */
11475 else if (opc2 == 0x07 && opc3 == 0x03)
11476 {
11477 if (!dp_op_sz)
11478 curr_insn_type = INSN_T1;
11479 else
11480 curr_insn_type = INSN_T2;
11481 }
11482 else if (opc3 & 0x01)
11483 {
11484 /* Handle VCVT. */
11485 if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
11486 {
11487 if (!bit (arm_insn_r->arm_insn, 18))
11488 curr_insn_type = INSN_T2;
11489 else
11490 {
11491 if (dp_op_sz)
11492 curr_insn_type = INSN_T1;
11493 else
11494 curr_insn_type = INSN_T2;
11495 }
11496 }
11497 /* Handle VCVT. */
11498 else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
11499 {
11500 if (dp_op_sz)
11501 curr_insn_type = INSN_T1;
11502 else
11503 curr_insn_type = INSN_T2;
11504 }
11505 /* Handle VCVTB, VCVTT. */
11506 else if ((opc2 & 0x0e) == 0x02)
11507 curr_insn_type = INSN_T2;
11508 /* Handle VCMP, VCMPE. */
11509 else if ((opc2 & 0x0e) == 0x04)
11510 curr_insn_type = INSN_T3;
11511 }
11512 }
11513
11514 switch (curr_insn_type)
11515 {
11516 case INSN_T0:
11517 reg_vd = reg_vd | (bit_d << 4);
11518 record_buf[0] = reg_vd + ARM_D0_REGNUM;
11519 record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
11520 arm_insn_r->reg_rec_count = 2;
11521 break;
11522
11523 case INSN_T1:
11524 reg_vd = reg_vd | (bit_d << 4);
11525 record_buf[0] = reg_vd + ARM_D0_REGNUM;
11526 arm_insn_r->reg_rec_count = 1;
11527 break;
11528
11529 case INSN_T2:
11530 reg_vd = (reg_vd << 1) | bit_d;
11531 record_buf[0] = reg_vd + ARM_D0_REGNUM;
11532 arm_insn_r->reg_rec_count = 1;
11533 break;
11534
11535 case INSN_T3:
11536 record_buf[0] = ARM_FPSCR_REGNUM;
11537 arm_insn_r->reg_rec_count = 1;
11538 break;
11539
11540 default:
11541 gdb_assert_not_reached ("no decoding pattern found");
11542 break;
11543 }
11544
11545 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11546 return 0;
11547 }
11548
11549 /* Handling opcode 110 insns. */
11550
11551 static int
11552 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
11553 {
11554 uint32_t op1, op1_ebit, coproc;
11555
11556 coproc = bits (arm_insn_r->arm_insn, 8, 11);
11557 op1 = bits (arm_insn_r->arm_insn, 20, 25);
11558 op1_ebit = bit (arm_insn_r->arm_insn, 20);
11559
11560 if ((coproc & 0x0e) == 0x0a)
11561 {
11562 /* Handle extension register ld/st instructions. */
11563 if (!(op1 & 0x20))
11564 return arm_record_exreg_ld_st_insn (arm_insn_r);
11565
11566 /* 64-bit transfers between arm core and extension registers. */
11567 if ((op1 & 0x3e) == 0x04)
11568 return arm_record_exreg_ld_st_insn (arm_insn_r);
11569 }
11570 else
11571 {
11572 /* Handle coprocessor ld/st instructions. */
11573 if (!(op1 & 0x3a))
11574 {
11575 /* Store. */
11576 if (!op1_ebit)
11577 return arm_record_unsupported_insn (arm_insn_r);
11578 else
11579 /* Load. */
11580 return arm_record_unsupported_insn (arm_insn_r);
11581 }
11582
11583 /* Move to coprocessor from two arm core registers. */
11584 if (op1 == 0x4)
11585 return arm_record_unsupported_insn (arm_insn_r);
11586
11587 /* Move to two arm core registers from coprocessor. */
11588 if (op1 == 0x5)
11589 {
11590 uint32_t reg_t[2];
11591
11592 reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
11593 reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
11594 arm_insn_r->reg_rec_count = 2;
11595
11596 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
11597 return 0;
11598 }
11599 }
11600 return arm_record_unsupported_insn (arm_insn_r);
11601 }
11602
11603 /* Handling opcode 111 insns. */
11604
11605 static int
11606 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
11607 {
11608 uint32_t op, op1_ebit, coproc, bits_24_25;
11609 struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
11610 struct regcache *reg_cache = arm_insn_r->regcache;
11611
11612 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
11613 coproc = bits (arm_insn_r->arm_insn, 8, 11);
11614 op1_ebit = bit (arm_insn_r->arm_insn, 20);
11615 op = bit (arm_insn_r->arm_insn, 4);
11616 bits_24_25 = bits (arm_insn_r->arm_insn, 24, 25);
11617
11618 /* Handle arm SWI/SVC system call instructions. */
11619 if (bits_24_25 == 0x3)
11620 {
11621 if (tdep->arm_syscall_record != NULL)
11622 {
11623 ULONGEST svc_operand, svc_number;
11624
11625 svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
11626
11627 if (svc_operand) /* OABI. */
11628 svc_number = svc_operand - 0x900000;
11629 else /* EABI. */
11630 regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
11631
11632 return tdep->arm_syscall_record (reg_cache, svc_number);
11633 }
11634 else
11635 {
11636 printf_unfiltered (_("no syscall record support\n"));
11637 return -1;
11638 }
11639 }
11640 else if (bits_24_25 == 0x02)
11641 {
11642 if (op)
11643 {
11644 if ((coproc & 0x0e) == 0x0a)
11645 {
11646 /* 8, 16, and 32-bit transfer */
11647 return arm_record_vdata_transfer_insn (arm_insn_r);
11648 }
11649 else
11650 {
11651 if (op1_ebit)
11652 {
11653 /* MRC, MRC2 */
11654 uint32_t record_buf[1];
11655
11656 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11657 if (record_buf[0] == 15)
11658 record_buf[0] = ARM_PS_REGNUM;
11659
11660 arm_insn_r->reg_rec_count = 1;
11661 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
11662 record_buf);
11663 return 0;
11664 }
11665 else
11666 {
11667 /* MCR, MCR2 */
11668 return -1;
11669 }
11670 }
11671 }
11672 else
11673 {
11674 if ((coproc & 0x0e) == 0x0a)
11675 {
11676 /* VFP data-processing instructions. */
11677 return arm_record_vfp_data_proc_insn (arm_insn_r);
11678 }
11679 else
11680 {
11681 /* CDP, CDP2 */
11682 return -1;
11683 }
11684 }
11685 }
11686 else
11687 {
11688 unsigned int op1 = bits (arm_insn_r->arm_insn, 20, 25);
11689
11690 if (op1 == 5)
11691 {
11692 if ((coproc & 0x0e) != 0x0a)
11693 {
11694 /* MRRC, MRRC2 */
11695 return -1;
11696 }
11697 }
11698 else if (op1 == 4 || op1 == 5)
11699 {
11700 if ((coproc & 0x0e) == 0x0a)
11701 {
11702 /* 64-bit transfers between ARM core and extension */
11703 return -1;
11704 }
11705 else if (op1 == 4)
11706 {
11707 /* MCRR, MCRR2 */
11708 return -1;
11709 }
11710 }
11711 else if (op1 == 0 || op1 == 1)
11712 {
11713 /* UNDEFINED */
11714 return -1;
11715 }
11716 else
11717 {
11718 if ((coproc & 0x0e) == 0x0a)
11719 {
11720 /* Extension register load/store */
11721 }
11722 else
11723 {
11724 /* STC, STC2, LDC, LDC2 */
11725 }
11726 return -1;
11727 }
11728 }
11729
11730 return -1;
11731 }
11732
11733 /* Handling opcode 000 insns. */
11734
11735 static int
11736 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
11737 {
11738 uint32_t record_buf[8];
11739 uint32_t reg_src1 = 0;
11740
11741 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11742
11743 record_buf[0] = ARM_PS_REGNUM;
11744 record_buf[1] = reg_src1;
11745 thumb_insn_r->reg_rec_count = 2;
11746
11747 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11748
11749 return 0;
11750 }
11751
11752
11753 /* Handling opcode 001 insns. */
11754
11755 static int
11756 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
11757 {
11758 uint32_t record_buf[8];
11759 uint32_t reg_src1 = 0;
11760
11761 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11762
11763 record_buf[0] = ARM_PS_REGNUM;
11764 record_buf[1] = reg_src1;
11765 thumb_insn_r->reg_rec_count = 2;
11766
11767 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11768
11769 return 0;
11770 }
11771
11772 /* Handling opcode 010 insns. */
11773
11774 static int
11775 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
11776 {
11777 struct regcache *reg_cache = thumb_insn_r->regcache;
11778 uint32_t record_buf[8], record_buf_mem[8];
11779
11780 uint32_t reg_src1 = 0, reg_src2 = 0;
11781 uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
11782
11783 ULONGEST u_regval[2] = {0};
11784
11785 opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
11786
11787 if (bit (thumb_insn_r->arm_insn, 12))
11788 {
11789 /* Handle load/store register offset. */
11790 uint32_t opB = bits (thumb_insn_r->arm_insn, 9, 11);
11791
11792 if (in_inclusive_range (opB, 4U, 7U))
11793 {
11794 /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH. */
11795 reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
11796 record_buf[0] = reg_src1;
11797 thumb_insn_r->reg_rec_count = 1;
11798 }
11799 else if (in_inclusive_range (opB, 0U, 2U))
11800 {
11801 /* STR(2), STRB(2), STRH(2) . */
11802 reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11803 reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
11804 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11805 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11806 if (0 == opB)
11807 record_buf_mem[0] = 4; /* STR (2). */
11808 else if (2 == opB)
11809 record_buf_mem[0] = 1; /* STRB (2). */
11810 else if (1 == opB)
11811 record_buf_mem[0] = 2; /* STRH (2). */
11812 record_buf_mem[1] = u_regval[0] + u_regval[1];
11813 thumb_insn_r->mem_rec_count = 1;
11814 }
11815 }
11816 else if (bit (thumb_insn_r->arm_insn, 11))
11817 {
11818 /* Handle load from literal pool. */
11819 /* LDR(3). */
11820 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11821 record_buf[0] = reg_src1;
11822 thumb_insn_r->reg_rec_count = 1;
11823 }
11824 else if (opcode1)
11825 {
11826 /* Special data instructions and branch and exchange */
11827 opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
11828 opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
11829 if ((3 == opcode2) && (!opcode3))
11830 {
11831 /* Branch with exchange. */
11832 record_buf[0] = ARM_PS_REGNUM;
11833 thumb_insn_r->reg_rec_count = 1;
11834 }
11835 else
11836 {
11837 /* Format 8; special data processing insns. */
11838 record_buf[0] = ARM_PS_REGNUM;
11839 record_buf[1] = (bit (thumb_insn_r->arm_insn, 7) << 3
11840 | bits (thumb_insn_r->arm_insn, 0, 2));
11841 thumb_insn_r->reg_rec_count = 2;
11842 }
11843 }
11844 else
11845 {
11846 /* Format 5; data processing insns. */
11847 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11848 if (bit (thumb_insn_r->arm_insn, 7))
11849 {
11850 reg_src1 = reg_src1 + 8;
11851 }
11852 record_buf[0] = ARM_PS_REGNUM;
11853 record_buf[1] = reg_src1;
11854 thumb_insn_r->reg_rec_count = 2;
11855 }
11856
11857 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11858 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11859 record_buf_mem);
11860
11861 return 0;
11862 }
11863
11864 /* Handling opcode 001 insns. */
11865
11866 static int
11867 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
11868 {
11869 struct regcache *reg_cache = thumb_insn_r->regcache;
11870 uint32_t record_buf[8], record_buf_mem[8];
11871
11872 uint32_t reg_src1 = 0;
11873 uint32_t opcode = 0, immed_5 = 0;
11874
11875 ULONGEST u_regval = 0;
11876
11877 opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11878
11879 if (opcode)
11880 {
11881 /* LDR(1). */
11882 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11883 record_buf[0] = reg_src1;
11884 thumb_insn_r->reg_rec_count = 1;
11885 }
11886 else
11887 {
11888 /* STR(1). */
11889 reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11890 immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11891 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11892 record_buf_mem[0] = 4;
11893 record_buf_mem[1] = u_regval + (immed_5 * 4);
11894 thumb_insn_r->mem_rec_count = 1;
11895 }
11896
11897 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11898 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11899 record_buf_mem);
11900
11901 return 0;
11902 }
11903
11904 /* Handling opcode 100 insns. */
11905
11906 static int
11907 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
11908 {
11909 struct regcache *reg_cache = thumb_insn_r->regcache;
11910 uint32_t record_buf[8], record_buf_mem[8];
11911
11912 uint32_t reg_src1 = 0;
11913 uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
11914
11915 ULONGEST u_regval = 0;
11916
11917 opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11918
11919 if (3 == opcode)
11920 {
11921 /* LDR(4). */
11922 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11923 record_buf[0] = reg_src1;
11924 thumb_insn_r->reg_rec_count = 1;
11925 }
11926 else if (1 == opcode)
11927 {
11928 /* LDRH(1). */
11929 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
11930 record_buf[0] = reg_src1;
11931 thumb_insn_r->reg_rec_count = 1;
11932 }
11933 else if (2 == opcode)
11934 {
11935 /* STR(3). */
11936 immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
11937 regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
11938 record_buf_mem[0] = 4;
11939 record_buf_mem[1] = u_regval + (immed_8 * 4);
11940 thumb_insn_r->mem_rec_count = 1;
11941 }
11942 else if (0 == opcode)
11943 {
11944 /* STRH(1). */
11945 immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
11946 reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
11947 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11948 record_buf_mem[0] = 2;
11949 record_buf_mem[1] = u_regval + (immed_5 * 2);
11950 thumb_insn_r->mem_rec_count = 1;
11951 }
11952
11953 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
11954 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
11955 record_buf_mem);
11956
11957 return 0;
11958 }
11959
11960 /* Handling opcode 101 insns. */
11961
11962 static int
11963 thumb_record_misc (insn_decode_record *thumb_insn_r)
11964 {
11965 struct regcache *reg_cache = thumb_insn_r->regcache;
11966
11967 uint32_t opcode = 0;
11968 uint32_t register_bits = 0, register_count = 0;
11969 uint32_t index = 0, start_address = 0;
11970 uint32_t record_buf[24], record_buf_mem[48];
11971 uint32_t reg_src1;
11972
11973 ULONGEST u_regval = 0;
11974
11975 opcode = bits (thumb_insn_r->arm_insn, 11, 12);
11976
11977 if (opcode == 0 || opcode == 1)
11978 {
11979 /* ADR and ADD (SP plus immediate) */
11980
11981 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11982 record_buf[0] = reg_src1;
11983 thumb_insn_r->reg_rec_count = 1;
11984 }
11985 else
11986 {
11987 /* Miscellaneous 16-bit instructions */
11988 uint32_t opcode2 = bits (thumb_insn_r->arm_insn, 8, 11);
11989
11990 switch (opcode2)
11991 {
11992 case 6:
11993 /* SETEND and CPS */
11994 break;
11995 case 0:
11996 /* ADD/SUB (SP plus immediate) */
11997 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
11998 record_buf[0] = ARM_SP_REGNUM;
11999 thumb_insn_r->reg_rec_count = 1;
12000 break;
12001 case 1: /* fall through */
12002 case 3: /* fall through */
12003 case 9: /* fall through */
12004 case 11:
12005 /* CBNZ, CBZ */
12006 break;
12007 case 2:
12008 /* SXTH, SXTB, UXTH, UXTB */
12009 record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12010 thumb_insn_r->reg_rec_count = 1;
12011 break;
12012 case 4: /* fall through */
12013 case 5:
12014 /* PUSH. */
12015 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12016 regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12017 while (register_bits)
12018 {
12019 if (register_bits & 0x00000001)
12020 register_count++;
12021 register_bits = register_bits >> 1;
12022 }
12023 start_address = u_regval - \
12024 (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12025 thumb_insn_r->mem_rec_count = register_count;
12026 while (register_count)
12027 {
12028 record_buf_mem[(register_count * 2) - 1] = start_address;
12029 record_buf_mem[(register_count * 2) - 2] = 4;
12030 start_address = start_address + 4;
12031 register_count--;
12032 }
12033 record_buf[0] = ARM_SP_REGNUM;
12034 thumb_insn_r->reg_rec_count = 1;
12035 break;
12036 case 10:
12037 /* REV, REV16, REVSH */
12038 record_buf[0] = bits (thumb_insn_r->arm_insn, 0, 2);
12039 thumb_insn_r->reg_rec_count = 1;
12040 break;
12041 case 12: /* fall through */
12042 case 13:
12043 /* POP. */
12044 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12045 while (register_bits)
12046 {
12047 if (register_bits & 0x00000001)
12048 record_buf[index++] = register_count;
12049 register_bits = register_bits >> 1;
12050 register_count++;
12051 }
12052 record_buf[index++] = ARM_PS_REGNUM;
12053 record_buf[index++] = ARM_SP_REGNUM;
12054 thumb_insn_r->reg_rec_count = index;
12055 break;
12056 case 0xe:
12057 /* BKPT insn. */
12058 /* Handle enhanced software breakpoint insn, BKPT. */
12059 /* CPSR is changed to be executed in ARM state, disabling normal
12060 interrupts, entering abort mode. */
12061 /* According to high vector configuration PC is set. */
12062 /* User hits breakpoint and type reverse, in that case, we need to go back with
12063 previous CPSR and Program Counter. */
12064 record_buf[0] = ARM_PS_REGNUM;
12065 record_buf[1] = ARM_LR_REGNUM;
12066 thumb_insn_r->reg_rec_count = 2;
12067 /* We need to save SPSR value, which is not yet done. */
12068 printf_unfiltered (_("Process record does not support instruction "
12069 "0x%0x at address %s.\n"),
12070 thumb_insn_r->arm_insn,
12071 paddress (thumb_insn_r->gdbarch,
12072 thumb_insn_r->this_addr));
12073 return -1;
12074
12075 case 0xf:
12076 /* If-Then, and hints */
12077 break;
12078 default:
12079 return -1;
12080 };
12081 }
12082
12083 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12084 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12085 record_buf_mem);
12086
12087 return 0;
12088 }
12089
12090 /* Handling opcode 110 insns. */
12091
12092 static int
12093 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)
12094 {
12095 struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12096 struct regcache *reg_cache = thumb_insn_r->regcache;
12097
12098 uint32_t ret = 0; /* function return value: -1:record failure ; 0:success */
12099 uint32_t reg_src1 = 0;
12100 uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12101 uint32_t index = 0, start_address = 0;
12102 uint32_t record_buf[24], record_buf_mem[48];
12103
12104 ULONGEST u_regval = 0;
12105
12106 opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12107 opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12108
12109 if (1 == opcode2)
12110 {
12111
12112 /* LDMIA. */
12113 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12114 /* Get Rn. */
12115 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12116 while (register_bits)
12117 {
12118 if (register_bits & 0x00000001)
12119 record_buf[index++] = register_count;
12120 register_bits = register_bits >> 1;
12121 register_count++;
12122 }
12123 record_buf[index++] = reg_src1;
12124 thumb_insn_r->reg_rec_count = index;
12125 }
12126 else if (0 == opcode2)
12127 {
12128 /* It handles both STMIA. */
12129 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12130 /* Get Rn. */
12131 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12132 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12133 while (register_bits)
12134 {
12135 if (register_bits & 0x00000001)
12136 register_count++;
12137 register_bits = register_bits >> 1;
12138 }
12139 start_address = u_regval;
12140 thumb_insn_r->mem_rec_count = register_count;
12141 while (register_count)
12142 {
12143 record_buf_mem[(register_count * 2) - 1] = start_address;
12144 record_buf_mem[(register_count * 2) - 2] = 4;
12145 start_address = start_address + 4;
12146 register_count--;
12147 }
12148 }
12149 else if (0x1F == opcode1)
12150 {
12151 /* Handle arm syscall insn. */
12152 if (tdep->arm_syscall_record != NULL)
12153 {
12154 regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12155 ret = tdep->arm_syscall_record (reg_cache, u_regval);
12156 }
12157 else
12158 {
12159 printf_unfiltered (_("no syscall record support\n"));
12160 return -1;
12161 }
12162 }
12163
12164 /* B (1), conditional branch is automatically taken care in process_record,
12165 as PC is saved there. */
12166
12167 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12168 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12169 record_buf_mem);
12170
12171 return ret;
12172 }
12173
12174 /* Handling opcode 111 insns. */
12175
12176 static int
12177 thumb_record_branch (insn_decode_record *thumb_insn_r)
12178 {
12179 uint32_t record_buf[8];
12180 uint32_t bits_h = 0;
12181
12182 bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12183
12184 if (2 == bits_h || 3 == bits_h)
12185 {
12186 /* BL */
12187 record_buf[0] = ARM_LR_REGNUM;
12188 thumb_insn_r->reg_rec_count = 1;
12189 }
12190 else if (1 == bits_h)
12191 {
12192 /* BLX(1). */
12193 record_buf[0] = ARM_PS_REGNUM;
12194 record_buf[1] = ARM_LR_REGNUM;
12195 thumb_insn_r->reg_rec_count = 2;
12196 }
12197
12198 /* B(2) is automatically taken care in process_record, as PC is
12199 saved there. */
12200
12201 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12202
12203 return 0;
12204 }
12205
12206 /* Handler for thumb2 load/store multiple instructions. */
12207
12208 static int
12209 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
12210 {
12211 struct regcache *reg_cache = thumb2_insn_r->regcache;
12212
12213 uint32_t reg_rn, op;
12214 uint32_t register_bits = 0, register_count = 0;
12215 uint32_t index = 0, start_address = 0;
12216 uint32_t record_buf[24], record_buf_mem[48];
12217
12218 ULONGEST u_regval = 0;
12219
12220 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12221 op = bits (thumb2_insn_r->arm_insn, 23, 24);
12222
12223 if (0 == op || 3 == op)
12224 {
12225 if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12226 {
12227 /* Handle RFE instruction. */
12228 record_buf[0] = ARM_PS_REGNUM;
12229 thumb2_insn_r->reg_rec_count = 1;
12230 }
12231 else
12232 {
12233 /* Handle SRS instruction after reading banked SP. */
12234 return arm_record_unsupported_insn (thumb2_insn_r);
12235 }
12236 }
12237 else if (1 == op || 2 == op)
12238 {
12239 if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12240 {
12241 /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions. */
12242 register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12243 while (register_bits)
12244 {
12245 if (register_bits & 0x00000001)
12246 record_buf[index++] = register_count;
12247
12248 register_count++;
12249 register_bits = register_bits >> 1;
12250 }
12251 record_buf[index++] = reg_rn;
12252 record_buf[index++] = ARM_PS_REGNUM;
12253 thumb2_insn_r->reg_rec_count = index;
12254 }
12255 else
12256 {
12257 /* Handle STM/STMIA/STMEA and STMDB/STMFD. */
12258 register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
12259 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12260 while (register_bits)
12261 {
12262 if (register_bits & 0x00000001)
12263 register_count++;
12264
12265 register_bits = register_bits >> 1;
12266 }
12267
12268 if (1 == op)
12269 {
12270 /* Start address calculation for LDMDB/LDMEA. */
12271 start_address = u_regval;
12272 }
12273 else if (2 == op)
12274 {
12275 /* Start address calculation for LDMDB/LDMEA. */
12276 start_address = u_regval - register_count * 4;
12277 }
12278
12279 thumb2_insn_r->mem_rec_count = register_count;
12280 while (register_count)
12281 {
12282 record_buf_mem[register_count * 2 - 1] = start_address;
12283 record_buf_mem[register_count * 2 - 2] = 4;
12284 start_address = start_address + 4;
12285 register_count--;
12286 }
12287 record_buf[0] = reg_rn;
12288 record_buf[1] = ARM_PS_REGNUM;
12289 thumb2_insn_r->reg_rec_count = 2;
12290 }
12291 }
12292
12293 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12294 record_buf_mem);
12295 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12296 record_buf);
12297 return ARM_RECORD_SUCCESS;
12298 }
12299
12300 /* Handler for thumb2 load/store (dual/exclusive) and table branch
12301 instructions. */
12302
12303 static int
12304 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
12305 {
12306 struct regcache *reg_cache = thumb2_insn_r->regcache;
12307
12308 uint32_t reg_rd, reg_rn, offset_imm;
12309 uint32_t reg_dest1, reg_dest2;
12310 uint32_t address, offset_addr;
12311 uint32_t record_buf[8], record_buf_mem[8];
12312 uint32_t op1, op2, op3;
12313
12314 ULONGEST u_regval[2];
12315
12316 op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
12317 op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
12318 op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
12319
12320 if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
12321 {
12322 if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
12323 {
12324 reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
12325 record_buf[0] = reg_dest1;
12326 record_buf[1] = ARM_PS_REGNUM;
12327 thumb2_insn_r->reg_rec_count = 2;
12328 }
12329
12330 if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
12331 {
12332 reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12333 record_buf[2] = reg_dest2;
12334 thumb2_insn_r->reg_rec_count = 3;
12335 }
12336 }
12337 else
12338 {
12339 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12340 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12341
12342 if (0 == op1 && 0 == op2)
12343 {
12344 /* Handle STREX. */
12345 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12346 address = u_regval[0] + (offset_imm * 4);
12347 record_buf_mem[0] = 4;
12348 record_buf_mem[1] = address;
12349 thumb2_insn_r->mem_rec_count = 1;
12350 reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12351 record_buf[0] = reg_rd;
12352 thumb2_insn_r->reg_rec_count = 1;
12353 }
12354 else if (1 == op1 && 0 == op2)
12355 {
12356 reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
12357 record_buf[0] = reg_rd;
12358 thumb2_insn_r->reg_rec_count = 1;
12359 address = u_regval[0];
12360 record_buf_mem[1] = address;
12361
12362 if (4 == op3)
12363 {
12364 /* Handle STREXB. */
12365 record_buf_mem[0] = 1;
12366 thumb2_insn_r->mem_rec_count = 1;
12367 }
12368 else if (5 == op3)
12369 {
12370 /* Handle STREXH. */
12371 record_buf_mem[0] = 2 ;
12372 thumb2_insn_r->mem_rec_count = 1;
12373 }
12374 else if (7 == op3)
12375 {
12376 /* Handle STREXD. */
12377 address = u_regval[0];
12378 record_buf_mem[0] = 4;
12379 record_buf_mem[2] = 4;
12380 record_buf_mem[3] = address + 4;
12381 thumb2_insn_r->mem_rec_count = 2;
12382 }
12383 }
12384 else
12385 {
12386 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12387
12388 if (bit (thumb2_insn_r->arm_insn, 24))
12389 {
12390 if (bit (thumb2_insn_r->arm_insn, 23))
12391 offset_addr = u_regval[0] + (offset_imm * 4);
12392 else
12393 offset_addr = u_regval[0] - (offset_imm * 4);
12394
12395 address = offset_addr;
12396 }
12397 else
12398 address = u_regval[0];
12399
12400 record_buf_mem[0] = 4;
12401 record_buf_mem[1] = address;
12402 record_buf_mem[2] = 4;
12403 record_buf_mem[3] = address + 4;
12404 thumb2_insn_r->mem_rec_count = 2;
12405 record_buf[0] = reg_rn;
12406 thumb2_insn_r->reg_rec_count = 1;
12407 }
12408 }
12409
12410 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12411 record_buf);
12412 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12413 record_buf_mem);
12414 return ARM_RECORD_SUCCESS;
12415 }
12416
12417 /* Handler for thumb2 data processing (shift register and modified immediate)
12418 instructions. */
12419
12420 static int
12421 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
12422 {
12423 uint32_t reg_rd, op;
12424 uint32_t record_buf[8];
12425
12426 op = bits (thumb2_insn_r->arm_insn, 21, 24);
12427 reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12428
12429 if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
12430 {
12431 record_buf[0] = ARM_PS_REGNUM;
12432 thumb2_insn_r->reg_rec_count = 1;
12433 }
12434 else
12435 {
12436 record_buf[0] = reg_rd;
12437 record_buf[1] = ARM_PS_REGNUM;
12438 thumb2_insn_r->reg_rec_count = 2;
12439 }
12440
12441 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12442 record_buf);
12443 return ARM_RECORD_SUCCESS;
12444 }
12445
12446 /* Generic handler for thumb2 instructions which effect destination and PS
12447 registers. */
12448
12449 static int
12450 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
12451 {
12452 uint32_t reg_rd;
12453 uint32_t record_buf[8];
12454
12455 reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
12456
12457 record_buf[0] = reg_rd;
12458 record_buf[1] = ARM_PS_REGNUM;
12459 thumb2_insn_r->reg_rec_count = 2;
12460
12461 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12462 record_buf);
12463 return ARM_RECORD_SUCCESS;
12464 }
12465
12466 /* Handler for thumb2 branch and miscellaneous control instructions. */
12467
12468 static int
12469 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
12470 {
12471 uint32_t op, op1, op2;
12472 uint32_t record_buf[8];
12473
12474 op = bits (thumb2_insn_r->arm_insn, 20, 26);
12475 op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
12476 op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
12477
12478 /* Handle MSR insn. */
12479 if (!(op1 & 0x2) && 0x38 == op)
12480 {
12481 if (!(op2 & 0x3))
12482 {
12483 /* CPSR is going to be changed. */
12484 record_buf[0] = ARM_PS_REGNUM;
12485 thumb2_insn_r->reg_rec_count = 1;
12486 }
12487 else
12488 {
12489 arm_record_unsupported_insn(thumb2_insn_r);
12490 return -1;
12491 }
12492 }
12493 else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
12494 {
12495 /* BLX. */
12496 record_buf[0] = ARM_PS_REGNUM;
12497 record_buf[1] = ARM_LR_REGNUM;
12498 thumb2_insn_r->reg_rec_count = 2;
12499 }
12500
12501 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12502 record_buf);
12503 return ARM_RECORD_SUCCESS;
12504 }
12505
12506 /* Handler for thumb2 store single data item instructions. */
12507
12508 static int
12509 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
12510 {
12511 struct regcache *reg_cache = thumb2_insn_r->regcache;
12512
12513 uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
12514 uint32_t address, offset_addr;
12515 uint32_t record_buf[8], record_buf_mem[8];
12516 uint32_t op1, op2;
12517
12518 ULONGEST u_regval[2];
12519
12520 op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
12521 op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
12522 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12523 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
12524
12525 if (bit (thumb2_insn_r->arm_insn, 23))
12526 {
12527 /* T2 encoding. */
12528 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
12529 offset_addr = u_regval[0] + offset_imm;
12530 address = offset_addr;
12531 }
12532 else
12533 {
12534 /* T3 encoding. */
12535 if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
12536 {
12537 /* Handle STRB (register). */
12538 reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
12539 regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
12540 shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
12541 offset_addr = u_regval[1] << shift_imm;
12542 address = u_regval[0] + offset_addr;
12543 }
12544 else
12545 {
12546 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
12547 if (bit (thumb2_insn_r->arm_insn, 10))
12548 {
12549 if (bit (thumb2_insn_r->arm_insn, 9))
12550 offset_addr = u_regval[0] + offset_imm;
12551 else
12552 offset_addr = u_regval[0] - offset_imm;
12553
12554 address = offset_addr;
12555 }
12556 else
12557 address = u_regval[0];
12558 }
12559 }
12560
12561 switch (op1)
12562 {
12563 /* Store byte instructions. */
12564 case 4:
12565 case 0:
12566 record_buf_mem[0] = 1;
12567 break;
12568 /* Store half word instructions. */
12569 case 1:
12570 case 5:
12571 record_buf_mem[0] = 2;
12572 break;
12573 /* Store word instructions. */
12574 case 2:
12575 case 6:
12576 record_buf_mem[0] = 4;
12577 break;
12578
12579 default:
12580 gdb_assert_not_reached ("no decoding pattern found");
12581 break;
12582 }
12583
12584 record_buf_mem[1] = address;
12585 thumb2_insn_r->mem_rec_count = 1;
12586 record_buf[0] = reg_rn;
12587 thumb2_insn_r->reg_rec_count = 1;
12588
12589 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12590 record_buf);
12591 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12592 record_buf_mem);
12593 return ARM_RECORD_SUCCESS;
12594 }
12595
12596 /* Handler for thumb2 load memory hints instructions. */
12597
12598 static int
12599 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
12600 {
12601 uint32_t record_buf[8];
12602 uint32_t reg_rt, reg_rn;
12603
12604 reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
12605 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12606
12607 if (ARM_PC_REGNUM != reg_rt)
12608 {
12609 record_buf[0] = reg_rt;
12610 record_buf[1] = reg_rn;
12611 record_buf[2] = ARM_PS_REGNUM;
12612 thumb2_insn_r->reg_rec_count = 3;
12613
12614 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12615 record_buf);
12616 return ARM_RECORD_SUCCESS;
12617 }
12618
12619 return ARM_RECORD_FAILURE;
12620 }
12621
12622 /* Handler for thumb2 load word instructions. */
12623
12624 static int
12625 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
12626 {
12627 uint32_t record_buf[8];
12628
12629 record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
12630 record_buf[1] = ARM_PS_REGNUM;
12631 thumb2_insn_r->reg_rec_count = 2;
12632
12633 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12634 record_buf);
12635 return ARM_RECORD_SUCCESS;
12636 }
12637
12638 /* Handler for thumb2 long multiply, long multiply accumulate, and
12639 divide instructions. */
12640
12641 static int
12642 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
12643 {
12644 uint32_t opcode1 = 0, opcode2 = 0;
12645 uint32_t record_buf[8];
12646
12647 opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
12648 opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
12649
12650 if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
12651 {
12652 /* Handle SMULL, UMULL, SMULAL. */
12653 /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S). */
12654 record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12655 record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12656 record_buf[2] = ARM_PS_REGNUM;
12657 thumb2_insn_r->reg_rec_count = 3;
12658 }
12659 else if (1 == opcode1 || 3 == opcode2)
12660 {
12661 /* Handle SDIV and UDIV. */
12662 record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
12663 record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
12664 record_buf[2] = ARM_PS_REGNUM;
12665 thumb2_insn_r->reg_rec_count = 3;
12666 }
12667 else
12668 return ARM_RECORD_FAILURE;
12669
12670 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12671 record_buf);
12672 return ARM_RECORD_SUCCESS;
12673 }
12674
12675 /* Record handler for thumb32 coprocessor instructions. */
12676
12677 static int
12678 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
12679 {
12680 if (bit (thumb2_insn_r->arm_insn, 25))
12681 return arm_record_coproc_data_proc (thumb2_insn_r);
12682 else
12683 return arm_record_asimd_vfp_coproc (thumb2_insn_r);
12684 }
12685
12686 /* Record handler for advance SIMD structure load/store instructions. */
12687
12688 static int
12689 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
12690 {
12691 struct regcache *reg_cache = thumb2_insn_r->regcache;
12692 uint32_t l_bit, a_bit, b_bits;
12693 uint32_t record_buf[128], record_buf_mem[128];
12694 uint32_t reg_rn, reg_vd, address, f_elem;
12695 uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
12696 uint8_t f_ebytes;
12697
12698 l_bit = bit (thumb2_insn_r->arm_insn, 21);
12699 a_bit = bit (thumb2_insn_r->arm_insn, 23);
12700 b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
12701 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
12702 reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
12703 reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
12704 f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
12705 f_elem = 8 / f_ebytes;
12706
12707 if (!l_bit)
12708 {
12709 ULONGEST u_regval = 0;
12710 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12711 address = u_regval;
12712
12713 if (!a_bit)
12714 {
12715 /* Handle VST1. */
12716 if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12717 {
12718 if (b_bits == 0x07)
12719 bf_regs = 1;
12720 else if (b_bits == 0x0a)
12721 bf_regs = 2;
12722 else if (b_bits == 0x06)
12723 bf_regs = 3;
12724 else if (b_bits == 0x02)
12725 bf_regs = 4;
12726 else
12727 bf_regs = 0;
12728
12729 for (index_r = 0; index_r < bf_regs; index_r++)
12730 {
12731 for (index_e = 0; index_e < f_elem; index_e++)
12732 {
12733 record_buf_mem[index_m++] = f_ebytes;
12734 record_buf_mem[index_m++] = address;
12735 address = address + f_ebytes;
12736 thumb2_insn_r->mem_rec_count += 1;
12737 }
12738 }
12739 }
12740 /* Handle VST2. */
12741 else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12742 {
12743 if (b_bits == 0x09 || b_bits == 0x08)
12744 bf_regs = 1;
12745 else if (b_bits == 0x03)
12746 bf_regs = 2;
12747 else
12748 bf_regs = 0;
12749
12750 for (index_r = 0; index_r < bf_regs; index_r++)
12751 for (index_e = 0; index_e < f_elem; index_e++)
12752 {
12753 for (loop_t = 0; loop_t < 2; loop_t++)
12754 {
12755 record_buf_mem[index_m++] = f_ebytes;
12756 record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12757 thumb2_insn_r->mem_rec_count += 1;
12758 }
12759 address = address + (2 * f_ebytes);
12760 }
12761 }
12762 /* Handle VST3. */
12763 else if ((b_bits & 0x0e) == 0x04)
12764 {
12765 for (index_e = 0; index_e < f_elem; index_e++)
12766 {
12767 for (loop_t = 0; loop_t < 3; loop_t++)
12768 {
12769 record_buf_mem[index_m++] = f_ebytes;
12770 record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12771 thumb2_insn_r->mem_rec_count += 1;
12772 }
12773 address = address + (3 * f_ebytes);
12774 }
12775 }
12776 /* Handle VST4. */
12777 else if (!(b_bits & 0x0e))
12778 {
12779 for (index_e = 0; index_e < f_elem; index_e++)
12780 {
12781 for (loop_t = 0; loop_t < 4; loop_t++)
12782 {
12783 record_buf_mem[index_m++] = f_ebytes;
12784 record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
12785 thumb2_insn_r->mem_rec_count += 1;
12786 }
12787 address = address + (4 * f_ebytes);
12788 }
12789 }
12790 }
12791 else
12792 {
12793 uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
12794
12795 if (bft_size == 0x00)
12796 f_ebytes = 1;
12797 else if (bft_size == 0x01)
12798 f_ebytes = 2;
12799 else if (bft_size == 0x02)
12800 f_ebytes = 4;
12801 else
12802 f_ebytes = 0;
12803
12804 /* Handle VST1. */
12805 if (!(b_bits & 0x0b) || b_bits == 0x08)
12806 thumb2_insn_r->mem_rec_count = 1;
12807 /* Handle VST2. */
12808 else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
12809 thumb2_insn_r->mem_rec_count = 2;
12810 /* Handle VST3. */
12811 else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
12812 thumb2_insn_r->mem_rec_count = 3;
12813 /* Handle VST4. */
12814 else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
12815 thumb2_insn_r->mem_rec_count = 4;
12816
12817 for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
12818 {
12819 record_buf_mem[index_m] = f_ebytes;
12820 record_buf_mem[index_m] = address + (index_m * f_ebytes);
12821 }
12822 }
12823 }
12824 else
12825 {
12826 if (!a_bit)
12827 {
12828 /* Handle VLD1. */
12829 if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
12830 thumb2_insn_r->reg_rec_count = 1;
12831 /* Handle VLD2. */
12832 else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
12833 thumb2_insn_r->reg_rec_count = 2;
12834 /* Handle VLD3. */
12835 else if ((b_bits & 0x0e) == 0x04)
12836 thumb2_insn_r->reg_rec_count = 3;
12837 /* Handle VLD4. */
12838 else if (!(b_bits & 0x0e))
12839 thumb2_insn_r->reg_rec_count = 4;
12840 }
12841 else
12842 {
12843 /* Handle VLD1. */
12844 if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
12845 thumb2_insn_r->reg_rec_count = 1;
12846 /* Handle VLD2. */
12847 else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
12848 thumb2_insn_r->reg_rec_count = 2;
12849 /* Handle VLD3. */
12850 else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
12851 thumb2_insn_r->reg_rec_count = 3;
12852 /* Handle VLD4. */
12853 else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
12854 thumb2_insn_r->reg_rec_count = 4;
12855
12856 for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
12857 record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
12858 }
12859 }
12860
12861 if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
12862 {
12863 record_buf[index_r] = reg_rn;
12864 thumb2_insn_r->reg_rec_count += 1;
12865 }
12866
12867 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
12868 record_buf);
12869 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
12870 record_buf_mem);
12871 return 0;
12872 }
12873
12874 /* Decodes thumb2 instruction type and invokes its record handler. */
12875
12876 static unsigned int
12877 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
12878 {
12879 uint32_t op, op1, op2;
12880
12881 op = bit (thumb2_insn_r->arm_insn, 15);
12882 op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
12883 op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
12884
12885 if (op1 == 0x01)
12886 {
12887 if (!(op2 & 0x64 ))
12888 {
12889 /* Load/store multiple instruction. */
12890 return thumb2_record_ld_st_multiple (thumb2_insn_r);
12891 }
12892 else if ((op2 & 0x64) == 0x4)
12893 {
12894 /* Load/store (dual/exclusive) and table branch instruction. */
12895 return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
12896 }
12897 else if ((op2 & 0x60) == 0x20)
12898 {
12899 /* Data-processing (shifted register). */
12900 return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12901 }
12902 else if (op2 & 0x40)
12903 {
12904 /* Co-processor instructions. */
12905 return thumb2_record_coproc_insn (thumb2_insn_r);
12906 }
12907 }
12908 else if (op1 == 0x02)
12909 {
12910 if (op)
12911 {
12912 /* Branches and miscellaneous control instructions. */
12913 return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
12914 }
12915 else if (op2 & 0x20)
12916 {
12917 /* Data-processing (plain binary immediate) instruction. */
12918 return thumb2_record_ps_dest_generic (thumb2_insn_r);
12919 }
12920 else
12921 {
12922 /* Data-processing (modified immediate). */
12923 return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
12924 }
12925 }
12926 else if (op1 == 0x03)
12927 {
12928 if (!(op2 & 0x71 ))
12929 {
12930 /* Store single data item. */
12931 return thumb2_record_str_single_data (thumb2_insn_r);
12932 }
12933 else if (!((op2 & 0x71) ^ 0x10))
12934 {
12935 /* Advanced SIMD or structure load/store instructions. */
12936 return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
12937 }
12938 else if (!((op2 & 0x67) ^ 0x01))
12939 {
12940 /* Load byte, memory hints instruction. */
12941 return thumb2_record_ld_mem_hints (thumb2_insn_r);
12942 }
12943 else if (!((op2 & 0x67) ^ 0x03))
12944 {
12945 /* Load halfword, memory hints instruction. */
12946 return thumb2_record_ld_mem_hints (thumb2_insn_r);
12947 }
12948 else if (!((op2 & 0x67) ^ 0x05))
12949 {
12950 /* Load word instruction. */
12951 return thumb2_record_ld_word (thumb2_insn_r);
12952 }
12953 else if (!((op2 & 0x70) ^ 0x20))
12954 {
12955 /* Data-processing (register) instruction. */
12956 return thumb2_record_ps_dest_generic (thumb2_insn_r);
12957 }
12958 else if (!((op2 & 0x78) ^ 0x30))
12959 {
12960 /* Multiply, multiply accumulate, abs diff instruction. */
12961 return thumb2_record_ps_dest_generic (thumb2_insn_r);
12962 }
12963 else if (!((op2 & 0x78) ^ 0x38))
12964 {
12965 /* Long multiply, long multiply accumulate, and divide. */
12966 return thumb2_record_lmul_lmla_div (thumb2_insn_r);
12967 }
12968 else if (op2 & 0x40)
12969 {
12970 /* Co-processor instructions. */
12971 return thumb2_record_coproc_insn (thumb2_insn_r);
12972 }
12973 }
12974
12975 return -1;
12976 }
12977
12978 namespace {
12979 /* Abstract memory reader. */
12980
12981 class abstract_memory_reader
12982 {
12983 public:
12984 /* Read LEN bytes of target memory at address MEMADDR, placing the
12985 results in GDB's memory at BUF. Return true on success. */
12986
12987 virtual bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) = 0;
12988 };
12989
12990 /* Instruction reader from real target. */
12991
12992 class instruction_reader : public abstract_memory_reader
12993 {
12994 public:
12995 bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
12996 {
12997 if (target_read_memory (memaddr, buf, len))
12998 return false;
12999 else
13000 return true;
13001 }
13002 };
13003
13004 } // namespace
13005
13006 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success
13007 and positive val on fauilure. */
13008
13009 static int
13010 extract_arm_insn (abstract_memory_reader& reader,
13011 insn_decode_record *insn_record, uint32_t insn_size)
13012 {
13013 gdb_byte buf[insn_size];
13014
13015 memset (&buf[0], 0, insn_size);
13016
13017 if (!reader.read (insn_record->this_addr, buf, insn_size))
13018 return 1;
13019 insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13020 insn_size,
13021 gdbarch_byte_order_for_code (insn_record->gdbarch));
13022 return 0;
13023 }
13024
13025 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13026
13027 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13028 dispatch it. */
13029
13030 static int
13031 decode_insn (abstract_memory_reader &reader, insn_decode_record *arm_record,
13032 record_type_t record_type, uint32_t insn_size)
13033 {
13034
13035 /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm
13036 instruction. */
13037 static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13038 {
13039 arm_record_data_proc_misc_ld_str, /* 000. */
13040 arm_record_data_proc_imm, /* 001. */
13041 arm_record_ld_st_imm_offset, /* 010. */
13042 arm_record_ld_st_reg_offset, /* 011. */
13043 arm_record_ld_st_multiple, /* 100. */
13044 arm_record_b_bl, /* 101. */
13045 arm_record_asimd_vfp_coproc, /* 110. */
13046 arm_record_coproc_data_proc /* 111. */
13047 };
13048
13049 /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb
13050 instruction. */
13051 static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13052 { \
13053 thumb_record_shift_add_sub, /* 000. */
13054 thumb_record_add_sub_cmp_mov, /* 001. */
13055 thumb_record_ld_st_reg_offset, /* 010. */
13056 thumb_record_ld_st_imm_offset, /* 011. */
13057 thumb_record_ld_st_stack, /* 100. */
13058 thumb_record_misc, /* 101. */
13059 thumb_record_ldm_stm_swi, /* 110. */
13060 thumb_record_branch /* 111. */
13061 };
13062
13063 uint32_t ret = 0; /* return value: negative:failure 0:success. */
13064 uint32_t insn_id = 0;
13065
13066 if (extract_arm_insn (reader, arm_record, insn_size))
13067 {
13068 if (record_debug)
13069 {
13070 printf_unfiltered (_("Process record: error reading memory at "
13071 "addr %s len = %d.\n"),
13072 paddress (arm_record->gdbarch,
13073 arm_record->this_addr), insn_size);
13074 }
13075 return -1;
13076 }
13077 else if (ARM_RECORD == record_type)
13078 {
13079 arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13080 insn_id = bits (arm_record->arm_insn, 25, 27);
13081
13082 if (arm_record->cond == 0xf)
13083 ret = arm_record_extension_space (arm_record);
13084 else
13085 {
13086 /* If this insn has fallen into extension space
13087 then we need not decode it anymore. */
13088 ret = arm_handle_insn[insn_id] (arm_record);
13089 }
13090 if (ret != ARM_RECORD_SUCCESS)
13091 {
13092 arm_record_unsupported_insn (arm_record);
13093 ret = -1;
13094 }
13095 }
13096 else if (THUMB_RECORD == record_type)
13097 {
13098 /* As thumb does not have condition codes, we set negative. */
13099 arm_record->cond = -1;
13100 insn_id = bits (arm_record->arm_insn, 13, 15);
13101 ret = thumb_handle_insn[insn_id] (arm_record);
13102 if (ret != ARM_RECORD_SUCCESS)
13103 {
13104 arm_record_unsupported_insn (arm_record);
13105 ret = -1;
13106 }
13107 }
13108 else if (THUMB2_RECORD == record_type)
13109 {
13110 /* As thumb does not have condition codes, we set negative. */
13111 arm_record->cond = -1;
13112
13113 /* Swap first half of 32bit thumb instruction with second half. */
13114 arm_record->arm_insn
13115 = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13116
13117 ret = thumb2_record_decode_insn_handler (arm_record);
13118
13119 if (ret != ARM_RECORD_SUCCESS)
13120 {
13121 arm_record_unsupported_insn (arm_record);
13122 ret = -1;
13123 }
13124 }
13125 else
13126 {
13127 /* Throw assertion. */
13128 gdb_assert_not_reached ("not a valid instruction, could not decode");
13129 }
13130
13131 return ret;
13132 }
13133
13134 #if GDB_SELF_TEST
13135 namespace selftests {
13136
13137 /* Provide both 16-bit and 32-bit thumb instructions. */
13138
13139 class instruction_reader_thumb : public abstract_memory_reader
13140 {
13141 public:
13142 template<size_t SIZE>
13143 instruction_reader_thumb (enum bfd_endian endian,
13144 const uint16_t (&insns)[SIZE])
13145 : m_endian (endian), m_insns (insns), m_insns_size (SIZE)
13146 {}
13147
13148 bool read (CORE_ADDR memaddr, gdb_byte *buf, const size_t len) override
13149 {
13150 SELF_CHECK (len == 4 || len == 2);
13151 SELF_CHECK (memaddr % 2 == 0);
13152 SELF_CHECK ((memaddr / 2) < m_insns_size);
13153
13154 store_unsigned_integer (buf, 2, m_endian, m_insns[memaddr / 2]);
13155 if (len == 4)
13156 {
13157 store_unsigned_integer (&buf[2], 2, m_endian,
13158 m_insns[memaddr / 2 + 1]);
13159 }
13160 return true;
13161 }
13162
13163 private:
13164 enum bfd_endian m_endian;
13165 const uint16_t *m_insns;
13166 size_t m_insns_size;
13167 };
13168
13169 static void
13170 arm_record_test (void)
13171 {
13172 struct gdbarch_info info;
13173 gdbarch_info_init (&info);
13174 info.bfd_arch_info = bfd_scan_arch ("arm");
13175
13176 struct gdbarch *gdbarch = gdbarch_find_by_info (info);
13177
13178 SELF_CHECK (gdbarch != NULL);
13179
13180 /* 16-bit Thumb instructions. */
13181 {
13182 insn_decode_record arm_record;
13183
13184 memset (&arm_record, 0, sizeof (insn_decode_record));
13185 arm_record.gdbarch = gdbarch;
13186
13187 static const uint16_t insns[] = {
13188 /* db b2 uxtb r3, r3 */
13189 0xb2db,
13190 /* cd 58 ldr r5, [r1, r3] */
13191 0x58cd,
13192 };
13193
13194 enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13195 instruction_reader_thumb reader (endian, insns);
13196 int ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13197 THUMB_INSN_SIZE_BYTES);
13198
13199 SELF_CHECK (ret == 0);
13200 SELF_CHECK (arm_record.mem_rec_count == 0);
13201 SELF_CHECK (arm_record.reg_rec_count == 1);
13202 SELF_CHECK (arm_record.arm_regs[0] == 3);
13203
13204 arm_record.this_addr += 2;
13205 ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13206 THUMB_INSN_SIZE_BYTES);
13207
13208 SELF_CHECK (ret == 0);
13209 SELF_CHECK (arm_record.mem_rec_count == 0);
13210 SELF_CHECK (arm_record.reg_rec_count == 1);
13211 SELF_CHECK (arm_record.arm_regs[0] == 5);
13212 }
13213
13214 /* 32-bit Thumb-2 instructions. */
13215 {
13216 insn_decode_record arm_record;
13217
13218 memset (&arm_record, 0, sizeof (insn_decode_record));
13219 arm_record.gdbarch = gdbarch;
13220
13221 static const uint16_t insns[] = {
13222 /* 1d ee 70 7f mrc 15, 0, r7, cr13, cr0, {3} */
13223 0xee1d, 0x7f70,
13224 };
13225
13226 enum bfd_endian endian = gdbarch_byte_order_for_code (arm_record.gdbarch);
13227 instruction_reader_thumb reader (endian, insns);
13228 int ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13229 THUMB2_INSN_SIZE_BYTES);
13230
13231 SELF_CHECK (ret == 0);
13232 SELF_CHECK (arm_record.mem_rec_count == 0);
13233 SELF_CHECK (arm_record.reg_rec_count == 1);
13234 SELF_CHECK (arm_record.arm_regs[0] == 7);
13235 }
13236 }
13237 } // namespace selftests
13238 #endif /* GDB_SELF_TEST */
13239
13240 /* Cleans up local record registers and memory allocations. */
13241
13242 static void
13243 deallocate_reg_mem (insn_decode_record *record)
13244 {
13245 xfree (record->arm_regs);
13246 xfree (record->arm_mems);
13247 }
13248
13249
13250 /* Parse the current instruction and record the values of the registers and
13251 memory that will be changed in current instruction to record_arch_list".
13252 Return -1 if something is wrong. */
13253
13254 int
13255 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13256 CORE_ADDR insn_addr)
13257 {
13258
13259 uint32_t no_of_rec = 0;
13260 uint32_t ret = 0; /* return value: -1:record failure ; 0:success */
13261 ULONGEST t_bit = 0, insn_id = 0;
13262
13263 ULONGEST u_regval = 0;
13264
13265 insn_decode_record arm_record;
13266
13267 memset (&arm_record, 0, sizeof (insn_decode_record));
13268 arm_record.regcache = regcache;
13269 arm_record.this_addr = insn_addr;
13270 arm_record.gdbarch = gdbarch;
13271
13272
13273 if (record_debug > 1)
13274 {
13275 fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13276 "addr = %s\n",
13277 paddress (gdbarch, arm_record.this_addr));
13278 }
13279
13280 instruction_reader reader;
13281 if (extract_arm_insn (reader, &arm_record, 2))
13282 {
13283 if (record_debug)
13284 {
13285 printf_unfiltered (_("Process record: error reading memory at "
13286 "addr %s len = %d.\n"),
13287 paddress (arm_record.gdbarch,
13288 arm_record.this_addr), 2);
13289 }
13290 return -1;
13291 }
13292
13293 /* Check the insn, whether it is thumb or arm one. */
13294
13295 t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13296 regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13297
13298
13299 if (!(u_regval & t_bit))
13300 {
13301 /* We are decoding arm insn. */
13302 ret = decode_insn (reader, &arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13303 }
13304 else
13305 {
13306 insn_id = bits (arm_record.arm_insn, 11, 15);
13307 /* is it thumb2 insn? */
13308 if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13309 {
13310 ret = decode_insn (reader, &arm_record, THUMB2_RECORD,
13311 THUMB2_INSN_SIZE_BYTES);
13312 }
13313 else
13314 {
13315 /* We are decoding thumb insn. */
13316 ret = decode_insn (reader, &arm_record, THUMB_RECORD,
13317 THUMB_INSN_SIZE_BYTES);
13318 }
13319 }
13320
13321 if (0 == ret)
13322 {
13323 /* Record registers. */
13324 record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13325 if (arm_record.arm_regs)
13326 {
13327 for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13328 {
13329 if (record_full_arch_list_add_reg
13330 (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13331 ret = -1;
13332 }
13333 }
13334 /* Record memories. */
13335 if (arm_record.arm_mems)
13336 {
13337 for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
13338 {
13339 if (record_full_arch_list_add_mem
13340 ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
13341 arm_record.arm_mems[no_of_rec].len))
13342 ret = -1;
13343 }
13344 }
13345
13346 if (record_full_arch_list_add_end ())
13347 ret = -1;
13348 }
13349
13350
13351 deallocate_reg_mem (&arm_record);
13352
13353 return ret;
13354 }
This page took 0.474074 seconds and 4 git commands to generate.