]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/arm-tdep.c
Replace some xmalloc-family functions with XNEW-family ones
[thirdparty/binutils-gdb.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2
3 Copyright (C) 1988-2015 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 "regcache.h"
31 #include "reggroups.h"
32 #include "doublest.h"
33 #include "value.h"
34 #include "arch-utils.h"
35 #include "osabi.h"
36 #include "frame-unwind.h"
37 #include "frame-base.h"
38 #include "trad-frame.h"
39 #include "objfiles.h"
40 #include "dwarf2-frame.h"
41 #include "gdbtypes.h"
42 #include "prologue-value.h"
43 #include "remote.h"
44 #include "target-descriptions.h"
45 #include "user-regs.h"
46 #include "observer.h"
47
48 #include "arm-tdep.h"
49 #include "gdb/sim-arm.h"
50
51 #include "elf-bfd.h"
52 #include "coff/internal.h"
53 #include "elf/arm.h"
54
55 #include "vec.h"
56
57 #include "record.h"
58 #include "record-full.h"
59
60 #include "features/arm-with-m.c"
61 #include "features/arm-with-m-fpa-layout.c"
62 #include "features/arm-with-m-vfp-d16.c"
63 #include "features/arm-with-iwmmxt.c"
64 #include "features/arm-with-vfpv2.c"
65 #include "features/arm-with-vfpv3.c"
66 #include "features/arm-with-neon.c"
67
68 static int arm_debug;
69
70 /* Macros for setting and testing a bit in a minimal symbol that marks
71 it as Thumb function. The MSB of the minimal symbol's "info" field
72 is used for this purpose.
73
74 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
75 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
76
77 #define MSYMBOL_SET_SPECIAL(msym) \
78 MSYMBOL_TARGET_FLAG_1 (msym) = 1
79
80 #define MSYMBOL_IS_SPECIAL(msym) \
81 MSYMBOL_TARGET_FLAG_1 (msym)
82
83 /* Per-objfile data used for mapping symbols. */
84 static const struct objfile_data *arm_objfile_data_key;
85
86 struct arm_mapping_symbol
87 {
88 bfd_vma value;
89 char type;
90 };
91 typedef struct arm_mapping_symbol arm_mapping_symbol_s;
92 DEF_VEC_O(arm_mapping_symbol_s);
93
94 struct arm_per_objfile
95 {
96 VEC(arm_mapping_symbol_s) **section_maps;
97 };
98
99 /* The list of available "set arm ..." and "show arm ..." commands. */
100 static struct cmd_list_element *setarmcmdlist = NULL;
101 static struct cmd_list_element *showarmcmdlist = NULL;
102
103 /* The type of floating-point to use. Keep this in sync with enum
104 arm_float_model, and the help string in _initialize_arm_tdep. */
105 static const char *const fp_model_strings[] =
106 {
107 "auto",
108 "softfpa",
109 "fpa",
110 "softvfp",
111 "vfp",
112 NULL
113 };
114
115 /* A variable that can be configured by the user. */
116 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
117 static const char *current_fp_model = "auto";
118
119 /* The ABI to use. Keep this in sync with arm_abi_kind. */
120 static const char *const arm_abi_strings[] =
121 {
122 "auto",
123 "APCS",
124 "AAPCS",
125 NULL
126 };
127
128 /* A variable that can be configured by the user. */
129 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
130 static const char *arm_abi_string = "auto";
131
132 /* The execution mode to assume. */
133 static const char *const arm_mode_strings[] =
134 {
135 "auto",
136 "arm",
137 "thumb",
138 NULL
139 };
140
141 static const char *arm_fallback_mode_string = "auto";
142 static const char *arm_force_mode_string = "auto";
143
144 /* Internal override of the execution mode. -1 means no override,
145 0 means override to ARM mode, 1 means override to Thumb mode.
146 The effect is the same as if arm_force_mode has been set by the
147 user (except the internal override has precedence over a user's
148 arm_force_mode override). */
149 static int arm_override_mode = -1;
150
151 /* Number of different reg name sets (options). */
152 static int num_disassembly_options;
153
154 /* The standard register names, and all the valid aliases for them. Note
155 that `fp', `sp' and `pc' are not added in this alias list, because they
156 have been added as builtin user registers in
157 std-regs.c:_initialize_frame_reg. */
158 static const struct
159 {
160 const char *name;
161 int regnum;
162 } arm_register_aliases[] = {
163 /* Basic register numbers. */
164 { "r0", 0 },
165 { "r1", 1 },
166 { "r2", 2 },
167 { "r3", 3 },
168 { "r4", 4 },
169 { "r5", 5 },
170 { "r6", 6 },
171 { "r7", 7 },
172 { "r8", 8 },
173 { "r9", 9 },
174 { "r10", 10 },
175 { "r11", 11 },
176 { "r12", 12 },
177 { "r13", 13 },
178 { "r14", 14 },
179 { "r15", 15 },
180 /* Synonyms (argument and variable registers). */
181 { "a1", 0 },
182 { "a2", 1 },
183 { "a3", 2 },
184 { "a4", 3 },
185 { "v1", 4 },
186 { "v2", 5 },
187 { "v3", 6 },
188 { "v4", 7 },
189 { "v5", 8 },
190 { "v6", 9 },
191 { "v7", 10 },
192 { "v8", 11 },
193 /* Other platform-specific names for r9. */
194 { "sb", 9 },
195 { "tr", 9 },
196 /* Special names. */
197 { "ip", 12 },
198 { "lr", 14 },
199 /* Names used by GCC (not listed in the ARM EABI). */
200 { "sl", 10 },
201 /* A special name from the older ATPCS. */
202 { "wr", 7 },
203 };
204
205 static const char *const arm_register_names[] =
206 {"r0", "r1", "r2", "r3", /* 0 1 2 3 */
207 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
208 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
209 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
210 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
211 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
212 "fps", "cpsr" }; /* 24 25 */
213
214 /* Valid register name styles. */
215 static const char **valid_disassembly_styles;
216
217 /* Disassembly style to use. Default to "std" register names. */
218 static const char *disassembly_style;
219
220 /* This is used to keep the bfd arch_info in sync with the disassembly
221 style. */
222 static void set_disassembly_style_sfunc(char *, int,
223 struct cmd_list_element *);
224 static void set_disassembly_style (void);
225
226 static void convert_from_extended (const struct floatformat *, const void *,
227 void *, int);
228 static void convert_to_extended (const struct floatformat *, void *,
229 const void *, int);
230
231 static enum register_status arm_neon_quad_read (struct gdbarch *gdbarch,
232 struct regcache *regcache,
233 int regnum, gdb_byte *buf);
234 static void arm_neon_quad_write (struct gdbarch *gdbarch,
235 struct regcache *regcache,
236 int regnum, const gdb_byte *buf);
237
238 static int thumb_insn_size (unsigned short inst1);
239
240 struct arm_prologue_cache
241 {
242 /* The stack pointer at the time this frame was created; i.e. the
243 caller's stack pointer when this function was called. It is used
244 to identify this frame. */
245 CORE_ADDR prev_sp;
246
247 /* The frame base for this frame is just prev_sp - frame size.
248 FRAMESIZE is the distance from the frame pointer to the
249 initial stack pointer. */
250
251 int framesize;
252
253 /* The register used to hold the frame pointer for this frame. */
254 int framereg;
255
256 /* Saved register offsets. */
257 struct trad_frame_saved_reg *saved_regs;
258 };
259
260 static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
261 CORE_ADDR prologue_start,
262 CORE_ADDR prologue_end,
263 struct arm_prologue_cache *cache);
264
265 /* Architecture version for displaced stepping. This effects the behaviour of
266 certain instructions, and really should not be hard-wired. */
267
268 #define DISPLACED_STEPPING_ARCH_VERSION 5
269
270 /* Addresses for calling Thumb functions have the bit 0 set.
271 Here are some macros to test, set, or clear bit 0 of addresses. */
272 #define IS_THUMB_ADDR(addr) ((addr) & 1)
273 #define MAKE_THUMB_ADDR(addr) ((addr) | 1)
274 #define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
275
276 /* Set to true if the 32-bit mode is in use. */
277
278 int arm_apcs_32 = 1;
279
280 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode. */
281
282 int
283 arm_psr_thumb_bit (struct gdbarch *gdbarch)
284 {
285 if (gdbarch_tdep (gdbarch)->is_m)
286 return XPSR_T;
287 else
288 return CPSR_T;
289 }
290
291 /* Determine if FRAME is executing in Thumb mode. */
292
293 int
294 arm_frame_is_thumb (struct frame_info *frame)
295 {
296 CORE_ADDR cpsr;
297 ULONGEST t_bit = arm_psr_thumb_bit (get_frame_arch (frame));
298
299 /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
300 directly (from a signal frame or dummy frame) or by interpreting
301 the saved LR (from a prologue or DWARF frame). So consult it and
302 trust the unwinders. */
303 cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
304
305 return (cpsr & t_bit) != 0;
306 }
307
308 /* Callback for VEC_lower_bound. */
309
310 static inline int
311 arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
312 const struct arm_mapping_symbol *rhs)
313 {
314 return lhs->value < rhs->value;
315 }
316
317 /* Search for the mapping symbol covering MEMADDR. If one is found,
318 return its type. Otherwise, return 0. If START is non-NULL,
319 set *START to the location of the mapping symbol. */
320
321 static char
322 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
323 {
324 struct obj_section *sec;
325
326 /* If there are mapping symbols, consult them. */
327 sec = find_pc_section (memaddr);
328 if (sec != NULL)
329 {
330 struct arm_per_objfile *data;
331 VEC(arm_mapping_symbol_s) *map;
332 struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
333 0 };
334 unsigned int idx;
335
336 data = objfile_data (sec->objfile, arm_objfile_data_key);
337 if (data != NULL)
338 {
339 map = data->section_maps[sec->the_bfd_section->index];
340 if (!VEC_empty (arm_mapping_symbol_s, map))
341 {
342 struct arm_mapping_symbol *map_sym;
343
344 idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
345 arm_compare_mapping_symbols);
346
347 /* VEC_lower_bound finds the earliest ordered insertion
348 point. If the following symbol starts at this exact
349 address, we use that; otherwise, the preceding
350 mapping symbol covers this address. */
351 if (idx < VEC_length (arm_mapping_symbol_s, map))
352 {
353 map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
354 if (map_sym->value == map_key.value)
355 {
356 if (start)
357 *start = map_sym->value + obj_section_addr (sec);
358 return map_sym->type;
359 }
360 }
361
362 if (idx > 0)
363 {
364 map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
365 if (start)
366 *start = map_sym->value + obj_section_addr (sec);
367 return map_sym->type;
368 }
369 }
370 }
371 }
372
373 return 0;
374 }
375
376 /* Determine if the program counter specified in MEMADDR is in a Thumb
377 function. This function should be called for addresses unrelated to
378 any executing frame; otherwise, prefer arm_frame_is_thumb. */
379
380 int
381 arm_pc_is_thumb (struct gdbarch *gdbarch, CORE_ADDR memaddr)
382 {
383 struct bound_minimal_symbol sym;
384 char type;
385 struct displaced_step_closure* dsc
386 = get_displaced_step_closure_by_addr(memaddr);
387
388 /* If checking the mode of displaced instruction in copy area, the mode
389 should be determined by instruction on the original address. */
390 if (dsc)
391 {
392 if (debug_displaced)
393 fprintf_unfiltered (gdb_stdlog,
394 "displaced: check mode of %.8lx instead of %.8lx\n",
395 (unsigned long) dsc->insn_addr,
396 (unsigned long) memaddr);
397 memaddr = dsc->insn_addr;
398 }
399
400 /* If bit 0 of the address is set, assume this is a Thumb address. */
401 if (IS_THUMB_ADDR (memaddr))
402 return 1;
403
404 /* Respect internal mode override if active. */
405 if (arm_override_mode != -1)
406 return arm_override_mode;
407
408 /* If the user wants to override the symbol table, let him. */
409 if (strcmp (arm_force_mode_string, "arm") == 0)
410 return 0;
411 if (strcmp (arm_force_mode_string, "thumb") == 0)
412 return 1;
413
414 /* ARM v6-M and v7-M are always in Thumb mode. */
415 if (gdbarch_tdep (gdbarch)->is_m)
416 return 1;
417
418 /* If there are mapping symbols, consult them. */
419 type = arm_find_mapping_symbol (memaddr, NULL);
420 if (type)
421 return type == 't';
422
423 /* Thumb functions have a "special" bit set in minimal symbols. */
424 sym = lookup_minimal_symbol_by_pc (memaddr);
425 if (sym.minsym)
426 return (MSYMBOL_IS_SPECIAL (sym.minsym));
427
428 /* If the user wants to override the fallback mode, let them. */
429 if (strcmp (arm_fallback_mode_string, "arm") == 0)
430 return 0;
431 if (strcmp (arm_fallback_mode_string, "thumb") == 0)
432 return 1;
433
434 /* If we couldn't find any symbol, but we're talking to a running
435 target, then trust the current value of $cpsr. This lets
436 "display/i $pc" always show the correct mode (though if there is
437 a symbol table we will not reach here, so it still may not be
438 displayed in the mode it will be executed). */
439 if (target_has_registers)
440 return arm_frame_is_thumb (get_current_frame ());
441
442 /* Otherwise we're out of luck; we assume ARM. */
443 return 0;
444 }
445
446 /* Remove useless bits from addresses in a running program. */
447 static CORE_ADDR
448 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
449 {
450 /* On M-profile devices, do not strip the low bit from EXC_RETURN
451 (the magic exception return address). */
452 if (gdbarch_tdep (gdbarch)->is_m
453 && (val & 0xfffffff0) == 0xfffffff0)
454 return val;
455
456 if (arm_apcs_32)
457 return UNMAKE_THUMB_ADDR (val);
458 else
459 return (val & 0x03fffffc);
460 }
461
462 /* Return 1 if PC is the start of a compiler helper function which
463 can be safely ignored during prologue skipping. IS_THUMB is true
464 if the function is known to be a Thumb function due to the way it
465 is being called. */
466 static int
467 skip_prologue_function (struct gdbarch *gdbarch, CORE_ADDR pc, int is_thumb)
468 {
469 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
470 struct bound_minimal_symbol msym;
471
472 msym = lookup_minimal_symbol_by_pc (pc);
473 if (msym.minsym != NULL
474 && BMSYMBOL_VALUE_ADDRESS (msym) == pc
475 && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL)
476 {
477 const char *name = MSYMBOL_LINKAGE_NAME (msym.minsym);
478
479 /* The GNU linker's Thumb call stub to foo is named
480 __foo_from_thumb. */
481 if (strstr (name, "_from_thumb") != NULL)
482 name += 2;
483
484 /* On soft-float targets, __truncdfsf2 is called to convert promoted
485 arguments to their argument types in non-prototyped
486 functions. */
487 if (startswith (name, "__truncdfsf2"))
488 return 1;
489 if (startswith (name, "__aeabi_d2f"))
490 return 1;
491
492 /* Internal functions related to thread-local storage. */
493 if (startswith (name, "__tls_get_addr"))
494 return 1;
495 if (startswith (name, "__aeabi_read_tp"))
496 return 1;
497 }
498 else
499 {
500 /* If we run against a stripped glibc, we may be unable to identify
501 special functions by name. Check for one important case,
502 __aeabi_read_tp, by comparing the *code* against the default
503 implementation (this is hand-written ARM assembler in glibc). */
504
505 if (!is_thumb
506 && read_memory_unsigned_integer (pc, 4, byte_order_for_code)
507 == 0xe3e00a0f /* mov r0, #0xffff0fff */
508 && read_memory_unsigned_integer (pc + 4, 4, byte_order_for_code)
509 == 0xe240f01f) /* sub pc, r0, #31 */
510 return 1;
511 }
512
513 return 0;
514 }
515
516 /* Support routines for instruction parsing. */
517 #define submask(x) ((1L << ((x) + 1)) - 1)
518 #define bit(obj,st) (((obj) >> (st)) & 1)
519 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
520 #define sbits(obj,st,fn) \
521 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
522 #define BranchDest(addr,instr) \
523 ((CORE_ADDR) (((unsigned long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
524
525 /* Extract the immediate from instruction movw/movt of encoding T. INSN1 is
526 the first 16-bit of instruction, and INSN2 is the second 16-bit of
527 instruction. */
528 #define EXTRACT_MOVW_MOVT_IMM_T(insn1, insn2) \
529 ((bits ((insn1), 0, 3) << 12) \
530 | (bits ((insn1), 10, 10) << 11) \
531 | (bits ((insn2), 12, 14) << 8) \
532 | bits ((insn2), 0, 7))
533
534 /* Extract the immediate from instruction movw/movt of encoding A. INSN is
535 the 32-bit instruction. */
536 #define EXTRACT_MOVW_MOVT_IMM_A(insn) \
537 ((bits ((insn), 16, 19) << 12) \
538 | bits ((insn), 0, 11))
539
540 /* Decode immediate value; implements ThumbExpandImmediate pseudo-op. */
541
542 static unsigned int
543 thumb_expand_immediate (unsigned int imm)
544 {
545 unsigned int count = imm >> 7;
546
547 if (count < 8)
548 switch (count / 2)
549 {
550 case 0:
551 return imm & 0xff;
552 case 1:
553 return (imm & 0xff) | ((imm & 0xff) << 16);
554 case 2:
555 return ((imm & 0xff) << 8) | ((imm & 0xff) << 24);
556 case 3:
557 return (imm & 0xff) | ((imm & 0xff) << 8)
558 | ((imm & 0xff) << 16) | ((imm & 0xff) << 24);
559 }
560
561 return (0x80 | (imm & 0x7f)) << (32 - count);
562 }
563
564 /* Return 1 if the 16-bit Thumb instruction INST might change
565 control flow, 0 otherwise. */
566
567 static int
568 thumb_instruction_changes_pc (unsigned short inst)
569 {
570 if ((inst & 0xff00) == 0xbd00) /* pop {rlist, pc} */
571 return 1;
572
573 if ((inst & 0xf000) == 0xd000) /* conditional branch */
574 return 1;
575
576 if ((inst & 0xf800) == 0xe000) /* unconditional branch */
577 return 1;
578
579 if ((inst & 0xff00) == 0x4700) /* bx REG, blx REG */
580 return 1;
581
582 if ((inst & 0xff87) == 0x4687) /* mov pc, REG */
583 return 1;
584
585 if ((inst & 0xf500) == 0xb100) /* CBNZ or CBZ. */
586 return 1;
587
588 return 0;
589 }
590
591 /* Return 1 if the 32-bit Thumb instruction in INST1 and INST2
592 might change control flow, 0 otherwise. */
593
594 static int
595 thumb2_instruction_changes_pc (unsigned short inst1, unsigned short inst2)
596 {
597 if ((inst1 & 0xf800) == 0xf000 && (inst2 & 0x8000) == 0x8000)
598 {
599 /* Branches and miscellaneous control instructions. */
600
601 if ((inst2 & 0x1000) != 0 || (inst2 & 0xd001) == 0xc000)
602 {
603 /* B, BL, BLX. */
604 return 1;
605 }
606 else if (inst1 == 0xf3de && (inst2 & 0xff00) == 0x3f00)
607 {
608 /* SUBS PC, LR, #imm8. */
609 return 1;
610 }
611 else if ((inst2 & 0xd000) == 0x8000 && (inst1 & 0x0380) != 0x0380)
612 {
613 /* Conditional branch. */
614 return 1;
615 }
616
617 return 0;
618 }
619
620 if ((inst1 & 0xfe50) == 0xe810)
621 {
622 /* Load multiple or RFE. */
623
624 if (bit (inst1, 7) && !bit (inst1, 8))
625 {
626 /* LDMIA or POP */
627 if (bit (inst2, 15))
628 return 1;
629 }
630 else if (!bit (inst1, 7) && bit (inst1, 8))
631 {
632 /* LDMDB */
633 if (bit (inst2, 15))
634 return 1;
635 }
636 else if (bit (inst1, 7) && bit (inst1, 8))
637 {
638 /* RFEIA */
639 return 1;
640 }
641 else if (!bit (inst1, 7) && !bit (inst1, 8))
642 {
643 /* RFEDB */
644 return 1;
645 }
646
647 return 0;
648 }
649
650 if ((inst1 & 0xffef) == 0xea4f && (inst2 & 0xfff0) == 0x0f00)
651 {
652 /* MOV PC or MOVS PC. */
653 return 1;
654 }
655
656 if ((inst1 & 0xff70) == 0xf850 && (inst2 & 0xf000) == 0xf000)
657 {
658 /* LDR PC. */
659 if (bits (inst1, 0, 3) == 15)
660 return 1;
661 if (bit (inst1, 7))
662 return 1;
663 if (bit (inst2, 11))
664 return 1;
665 if ((inst2 & 0x0fc0) == 0x0000)
666 return 1;
667
668 return 0;
669 }
670
671 if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
672 {
673 /* TBB. */
674 return 1;
675 }
676
677 if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf010)
678 {
679 /* TBH. */
680 return 1;
681 }
682
683 return 0;
684 }
685
686 /* Return 1 if the 16-bit Thumb instruction INSN restores SP in
687 epilogue, 0 otherwise. */
688
689 static int
690 thumb_instruction_restores_sp (unsigned short insn)
691 {
692 return (insn == 0x46bd /* mov sp, r7 */
693 || (insn & 0xff80) == 0xb000 /* add sp, imm */
694 || (insn & 0xfe00) == 0xbc00); /* pop <registers> */
695 }
696
697 /* Analyze a Thumb prologue, looking for a recognizable stack frame
698 and frame pointer. Scan until we encounter a store that could
699 clobber the stack frame unexpectedly, or an unknown instruction.
700 Return the last address which is definitely safe to skip for an
701 initial breakpoint. */
702
703 static CORE_ADDR
704 thumb_analyze_prologue (struct gdbarch *gdbarch,
705 CORE_ADDR start, CORE_ADDR limit,
706 struct arm_prologue_cache *cache)
707 {
708 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
709 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
710 int i;
711 pv_t regs[16];
712 struct pv_area *stack;
713 struct cleanup *back_to;
714 CORE_ADDR offset;
715 CORE_ADDR unrecognized_pc = 0;
716
717 for (i = 0; i < 16; i++)
718 regs[i] = pv_register (i, 0);
719 stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
720 back_to = make_cleanup_free_pv_area (stack);
721
722 while (start < limit)
723 {
724 unsigned short insn;
725
726 insn = read_memory_unsigned_integer (start, 2, byte_order_for_code);
727
728 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
729 {
730 int regno;
731 int mask;
732
733 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
734 break;
735
736 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
737 whether to save LR (R14). */
738 mask = (insn & 0xff) | ((insn & 0x100) << 6);
739
740 /* Calculate offsets of saved R0-R7 and LR. */
741 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
742 if (mask & (1 << regno))
743 {
744 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
745 -4);
746 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
747 }
748 }
749 else if ((insn & 0xff80) == 0xb080) /* sub sp, #imm */
750 {
751 offset = (insn & 0x7f) << 2; /* get scaled offset */
752 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
753 -offset);
754 }
755 else if (thumb_instruction_restores_sp (insn))
756 {
757 /* Don't scan past the epilogue. */
758 break;
759 }
760 else if ((insn & 0xf800) == 0xa800) /* add Rd, sp, #imm */
761 regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
762 (insn & 0xff) << 2);
763 else if ((insn & 0xfe00) == 0x1c00 /* add Rd, Rn, #imm */
764 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
765 regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
766 bits (insn, 6, 8));
767 else if ((insn & 0xf800) == 0x3000 /* add Rd, #imm */
768 && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
769 regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
770 bits (insn, 0, 7));
771 else if ((insn & 0xfe00) == 0x1800 /* add Rd, Rn, Rm */
772 && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
773 && pv_is_constant (regs[bits (insn, 3, 5)]))
774 regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
775 regs[bits (insn, 6, 8)]);
776 else if ((insn & 0xff00) == 0x4400 /* add Rd, Rm */
777 && pv_is_constant (regs[bits (insn, 3, 6)]))
778 {
779 int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
780 int rm = bits (insn, 3, 6);
781 regs[rd] = pv_add (regs[rd], regs[rm]);
782 }
783 else if ((insn & 0xff00) == 0x4600) /* mov hi, lo or mov lo, hi */
784 {
785 int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
786 int src_reg = (insn & 0x78) >> 3;
787 regs[dst_reg] = regs[src_reg];
788 }
789 else if ((insn & 0xf800) == 0x9000) /* str rd, [sp, #off] */
790 {
791 /* Handle stores to the stack. Normally pushes are used,
792 but with GCC -mtpcs-frame, there may be other stores
793 in the prologue to create the frame. */
794 int regno = (insn >> 8) & 0x7;
795 pv_t addr;
796
797 offset = (insn & 0xff) << 2;
798 addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
799
800 if (pv_area_store_would_trash (stack, addr))
801 break;
802
803 pv_area_store (stack, addr, 4, regs[regno]);
804 }
805 else if ((insn & 0xf800) == 0x6000) /* str rd, [rn, #off] */
806 {
807 int rd = bits (insn, 0, 2);
808 int rn = bits (insn, 3, 5);
809 pv_t addr;
810
811 offset = bits (insn, 6, 10) << 2;
812 addr = pv_add_constant (regs[rn], offset);
813
814 if (pv_area_store_would_trash (stack, addr))
815 break;
816
817 pv_area_store (stack, addr, 4, regs[rd]);
818 }
819 else if (((insn & 0xf800) == 0x7000 /* strb Rd, [Rn, #off] */
820 || (insn & 0xf800) == 0x8000) /* strh Rd, [Rn, #off] */
821 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
822 /* Ignore stores of argument registers to the stack. */
823 ;
824 else if ((insn & 0xf800) == 0xc800 /* ldmia Rn!, { registers } */
825 && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
826 /* Ignore block loads from the stack, potentially copying
827 parameters from memory. */
828 ;
829 else if ((insn & 0xf800) == 0x9800 /* ldr Rd, [Rn, #immed] */
830 || ((insn & 0xf800) == 0x6800 /* ldr Rd, [sp, #immed] */
831 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
832 /* Similarly ignore single loads from the stack. */
833 ;
834 else if ((insn & 0xffc0) == 0x0000 /* lsls Rd, Rm, #0 */
835 || (insn & 0xffc0) == 0x1c00) /* add Rd, Rn, #0 */
836 /* Skip register copies, i.e. saves to another register
837 instead of the stack. */
838 ;
839 else if ((insn & 0xf800) == 0x2000) /* movs Rd, #imm */
840 /* Recognize constant loads; even with small stacks these are necessary
841 on Thumb. */
842 regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
843 else if ((insn & 0xf800) == 0x4800) /* ldr Rd, [pc, #imm] */
844 {
845 /* Constant pool loads, for the same reason. */
846 unsigned int constant;
847 CORE_ADDR loc;
848
849 loc = start + 4 + bits (insn, 0, 7) * 4;
850 constant = read_memory_unsigned_integer (loc, 4, byte_order);
851 regs[bits (insn, 8, 10)] = pv_constant (constant);
852 }
853 else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instructions. */
854 {
855 unsigned short inst2;
856
857 inst2 = read_memory_unsigned_integer (start + 2, 2,
858 byte_order_for_code);
859
860 if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
861 {
862 /* BL, BLX. Allow some special function calls when
863 skipping the prologue; GCC generates these before
864 storing arguments to the stack. */
865 CORE_ADDR nextpc;
866 int j1, j2, imm1, imm2;
867
868 imm1 = sbits (insn, 0, 10);
869 imm2 = bits (inst2, 0, 10);
870 j1 = bit (inst2, 13);
871 j2 = bit (inst2, 11);
872
873 offset = ((imm1 << 12) + (imm2 << 1));
874 offset ^= ((!j2) << 22) | ((!j1) << 23);
875
876 nextpc = start + 4 + offset;
877 /* For BLX make sure to clear the low bits. */
878 if (bit (inst2, 12) == 0)
879 nextpc = nextpc & 0xfffffffc;
880
881 if (!skip_prologue_function (gdbarch, nextpc,
882 bit (inst2, 12) != 0))
883 break;
884 }
885
886 else if ((insn & 0xffd0) == 0xe900 /* stmdb Rn{!},
887 { registers } */
888 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
889 {
890 pv_t addr = regs[bits (insn, 0, 3)];
891 int regno;
892
893 if (pv_area_store_would_trash (stack, addr))
894 break;
895
896 /* Calculate offsets of saved registers. */
897 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
898 if (inst2 & (1 << regno))
899 {
900 addr = pv_add_constant (addr, -4);
901 pv_area_store (stack, addr, 4, regs[regno]);
902 }
903
904 if (insn & 0x0020)
905 regs[bits (insn, 0, 3)] = addr;
906 }
907
908 else if ((insn & 0xff50) == 0xe940 /* strd Rt, Rt2,
909 [Rn, #+/-imm]{!} */
910 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
911 {
912 int regno1 = bits (inst2, 12, 15);
913 int regno2 = bits (inst2, 8, 11);
914 pv_t addr = regs[bits (insn, 0, 3)];
915
916 offset = inst2 & 0xff;
917 if (insn & 0x0080)
918 addr = pv_add_constant (addr, offset);
919 else
920 addr = pv_add_constant (addr, -offset);
921
922 if (pv_area_store_would_trash (stack, addr))
923 break;
924
925 pv_area_store (stack, addr, 4, regs[regno1]);
926 pv_area_store (stack, pv_add_constant (addr, 4),
927 4, regs[regno2]);
928
929 if (insn & 0x0020)
930 regs[bits (insn, 0, 3)] = addr;
931 }
932
933 else if ((insn & 0xfff0) == 0xf8c0 /* str Rt,[Rn,+/-#imm]{!} */
934 && (inst2 & 0x0c00) == 0x0c00
935 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
936 {
937 int regno = bits (inst2, 12, 15);
938 pv_t addr = regs[bits (insn, 0, 3)];
939
940 offset = inst2 & 0xff;
941 if (inst2 & 0x0200)
942 addr = pv_add_constant (addr, offset);
943 else
944 addr = pv_add_constant (addr, -offset);
945
946 if (pv_area_store_would_trash (stack, addr))
947 break;
948
949 pv_area_store (stack, addr, 4, regs[regno]);
950
951 if (inst2 & 0x0100)
952 regs[bits (insn, 0, 3)] = addr;
953 }
954
955 else if ((insn & 0xfff0) == 0xf8c0 /* str.w Rt,[Rn,#imm] */
956 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
957 {
958 int regno = bits (inst2, 12, 15);
959 pv_t addr;
960
961 offset = inst2 & 0xfff;
962 addr = pv_add_constant (regs[bits (insn, 0, 3)], offset);
963
964 if (pv_area_store_would_trash (stack, addr))
965 break;
966
967 pv_area_store (stack, addr, 4, regs[regno]);
968 }
969
970 else if ((insn & 0xffd0) == 0xf880 /* str{bh}.w Rt,[Rn,#imm] */
971 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
972 /* Ignore stores of argument registers to the stack. */
973 ;
974
975 else if ((insn & 0xffd0) == 0xf800 /* str{bh} Rt,[Rn,#+/-imm] */
976 && (inst2 & 0x0d00) == 0x0c00
977 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
978 /* Ignore stores of argument registers to the stack. */
979 ;
980
981 else if ((insn & 0xffd0) == 0xe890 /* ldmia Rn[!],
982 { registers } */
983 && (inst2 & 0x8000) == 0x0000
984 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
985 /* Ignore block loads from the stack, potentially copying
986 parameters from memory. */
987 ;
988
989 else if ((insn & 0xffb0) == 0xe950 /* ldrd Rt, Rt2,
990 [Rn, #+/-imm] */
991 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
992 /* Similarly ignore dual loads from the stack. */
993 ;
994
995 else if ((insn & 0xfff0) == 0xf850 /* ldr Rt,[Rn,#+/-imm] */
996 && (inst2 & 0x0d00) == 0x0c00
997 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
998 /* Similarly ignore single loads from the stack. */
999 ;
1000
1001 else if ((insn & 0xfff0) == 0xf8d0 /* ldr.w Rt,[Rn,#imm] */
1002 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
1003 /* Similarly ignore single loads from the stack. */
1004 ;
1005
1006 else if ((insn & 0xfbf0) == 0xf100 /* add.w Rd, Rn, #imm */
1007 && (inst2 & 0x8000) == 0x0000)
1008 {
1009 unsigned int imm = ((bits (insn, 10, 10) << 11)
1010 | (bits (inst2, 12, 14) << 8)
1011 | bits (inst2, 0, 7));
1012
1013 regs[bits (inst2, 8, 11)]
1014 = pv_add_constant (regs[bits (insn, 0, 3)],
1015 thumb_expand_immediate (imm));
1016 }
1017
1018 else if ((insn & 0xfbf0) == 0xf200 /* addw Rd, Rn, #imm */
1019 && (inst2 & 0x8000) == 0x0000)
1020 {
1021 unsigned int imm = ((bits (insn, 10, 10) << 11)
1022 | (bits (inst2, 12, 14) << 8)
1023 | bits (inst2, 0, 7));
1024
1025 regs[bits (inst2, 8, 11)]
1026 = pv_add_constant (regs[bits (insn, 0, 3)], imm);
1027 }
1028
1029 else if ((insn & 0xfbf0) == 0xf1a0 /* sub.w Rd, Rn, #imm */
1030 && (inst2 & 0x8000) == 0x0000)
1031 {
1032 unsigned int imm = ((bits (insn, 10, 10) << 11)
1033 | (bits (inst2, 12, 14) << 8)
1034 | bits (inst2, 0, 7));
1035
1036 regs[bits (inst2, 8, 11)]
1037 = pv_add_constant (regs[bits (insn, 0, 3)],
1038 - (CORE_ADDR) thumb_expand_immediate (imm));
1039 }
1040
1041 else if ((insn & 0xfbf0) == 0xf2a0 /* subw Rd, Rn, #imm */
1042 && (inst2 & 0x8000) == 0x0000)
1043 {
1044 unsigned int imm = ((bits (insn, 10, 10) << 11)
1045 | (bits (inst2, 12, 14) << 8)
1046 | bits (inst2, 0, 7));
1047
1048 regs[bits (inst2, 8, 11)]
1049 = pv_add_constant (regs[bits (insn, 0, 3)], - (CORE_ADDR) imm);
1050 }
1051
1052 else if ((insn & 0xfbff) == 0xf04f) /* mov.w Rd, #const */
1053 {
1054 unsigned int imm = ((bits (insn, 10, 10) << 11)
1055 | (bits (inst2, 12, 14) << 8)
1056 | bits (inst2, 0, 7));
1057
1058 regs[bits (inst2, 8, 11)]
1059 = pv_constant (thumb_expand_immediate (imm));
1060 }
1061
1062 else if ((insn & 0xfbf0) == 0xf240) /* movw Rd, #const */
1063 {
1064 unsigned int imm
1065 = EXTRACT_MOVW_MOVT_IMM_T (insn, inst2);
1066
1067 regs[bits (inst2, 8, 11)] = pv_constant (imm);
1068 }
1069
1070 else if (insn == 0xea5f /* mov.w Rd,Rm */
1071 && (inst2 & 0xf0f0) == 0)
1072 {
1073 int dst_reg = (inst2 & 0x0f00) >> 8;
1074 int src_reg = inst2 & 0xf;
1075 regs[dst_reg] = regs[src_reg];
1076 }
1077
1078 else if ((insn & 0xff7f) == 0xf85f) /* ldr.w Rt,<label> */
1079 {
1080 /* Constant pool loads. */
1081 unsigned int constant;
1082 CORE_ADDR loc;
1083
1084 offset = bits (inst2, 0, 11);
1085 if (insn & 0x0080)
1086 loc = start + 4 + offset;
1087 else
1088 loc = start + 4 - offset;
1089
1090 constant = read_memory_unsigned_integer (loc, 4, byte_order);
1091 regs[bits (inst2, 12, 15)] = pv_constant (constant);
1092 }
1093
1094 else if ((insn & 0xff7f) == 0xe95f) /* ldrd Rt,Rt2,<label> */
1095 {
1096 /* Constant pool loads. */
1097 unsigned int constant;
1098 CORE_ADDR loc;
1099
1100 offset = bits (inst2, 0, 7) << 2;
1101 if (insn & 0x0080)
1102 loc = start + 4 + offset;
1103 else
1104 loc = start + 4 - offset;
1105
1106 constant = read_memory_unsigned_integer (loc, 4, byte_order);
1107 regs[bits (inst2, 12, 15)] = pv_constant (constant);
1108
1109 constant = read_memory_unsigned_integer (loc + 4, 4, byte_order);
1110 regs[bits (inst2, 8, 11)] = pv_constant (constant);
1111 }
1112
1113 else if (thumb2_instruction_changes_pc (insn, inst2))
1114 {
1115 /* Don't scan past anything that might change control flow. */
1116 break;
1117 }
1118 else
1119 {
1120 /* The optimizer might shove anything into the prologue,
1121 so we just skip what we don't recognize. */
1122 unrecognized_pc = start;
1123 }
1124
1125 start += 2;
1126 }
1127 else if (thumb_instruction_changes_pc (insn))
1128 {
1129 /* Don't scan past anything that might change control flow. */
1130 break;
1131 }
1132 else
1133 {
1134 /* The optimizer might shove anything into the prologue,
1135 so we just skip what we don't recognize. */
1136 unrecognized_pc = start;
1137 }
1138
1139 start += 2;
1140 }
1141
1142 if (arm_debug)
1143 fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1144 paddress (gdbarch, start));
1145
1146 if (unrecognized_pc == 0)
1147 unrecognized_pc = start;
1148
1149 if (cache == NULL)
1150 {
1151 do_cleanups (back_to);
1152 return unrecognized_pc;
1153 }
1154
1155 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1156 {
1157 /* Frame pointer is fp. Frame size is constant. */
1158 cache->framereg = ARM_FP_REGNUM;
1159 cache->framesize = -regs[ARM_FP_REGNUM].k;
1160 }
1161 else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
1162 {
1163 /* Frame pointer is r7. Frame size is constant. */
1164 cache->framereg = THUMB_FP_REGNUM;
1165 cache->framesize = -regs[THUMB_FP_REGNUM].k;
1166 }
1167 else
1168 {
1169 /* Try the stack pointer... this is a bit desperate. */
1170 cache->framereg = ARM_SP_REGNUM;
1171 cache->framesize = -regs[ARM_SP_REGNUM].k;
1172 }
1173
1174 for (i = 0; i < 16; i++)
1175 if (pv_area_find_reg (stack, gdbarch, i, &offset))
1176 cache->saved_regs[i].addr = offset;
1177
1178 do_cleanups (back_to);
1179 return unrecognized_pc;
1180 }
1181
1182
1183 /* Try to analyze the instructions starting from PC, which load symbol
1184 __stack_chk_guard. Return the address of instruction after loading this
1185 symbol, set the dest register number to *BASEREG, and set the size of
1186 instructions for loading symbol in OFFSET. Return 0 if instructions are
1187 not recognized. */
1188
1189 static CORE_ADDR
1190 arm_analyze_load_stack_chk_guard(CORE_ADDR pc, struct gdbarch *gdbarch,
1191 unsigned int *destreg, int *offset)
1192 {
1193 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1194 int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1195 unsigned int low, high, address;
1196
1197 address = 0;
1198 if (is_thumb)
1199 {
1200 unsigned short insn1
1201 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
1202
1203 if ((insn1 & 0xf800) == 0x4800) /* ldr Rd, #immed */
1204 {
1205 *destreg = bits (insn1, 8, 10);
1206 *offset = 2;
1207 address = (pc & 0xfffffffc) + 4 + (bits (insn1, 0, 7) << 2);
1208 address = read_memory_unsigned_integer (address, 4,
1209 byte_order_for_code);
1210 }
1211 else if ((insn1 & 0xfbf0) == 0xf240) /* movw Rd, #const */
1212 {
1213 unsigned short insn2
1214 = read_memory_unsigned_integer (pc + 2, 2, byte_order_for_code);
1215
1216 low = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1217
1218 insn1
1219 = read_memory_unsigned_integer (pc + 4, 2, byte_order_for_code);
1220 insn2
1221 = read_memory_unsigned_integer (pc + 6, 2, byte_order_for_code);
1222
1223 /* movt Rd, #const */
1224 if ((insn1 & 0xfbc0) == 0xf2c0)
1225 {
1226 high = EXTRACT_MOVW_MOVT_IMM_T (insn1, insn2);
1227 *destreg = bits (insn2, 8, 11);
1228 *offset = 8;
1229 address = (high << 16 | low);
1230 }
1231 }
1232 }
1233 else
1234 {
1235 unsigned int insn
1236 = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
1237
1238 if ((insn & 0x0e5f0000) == 0x041f0000) /* ldr Rd, [PC, #immed] */
1239 {
1240 address = bits (insn, 0, 11) + pc + 8;
1241 address = read_memory_unsigned_integer (address, 4,
1242 byte_order_for_code);
1243
1244 *destreg = bits (insn, 12, 15);
1245 *offset = 4;
1246 }
1247 else if ((insn & 0x0ff00000) == 0x03000000) /* movw Rd, #const */
1248 {
1249 low = EXTRACT_MOVW_MOVT_IMM_A (insn);
1250
1251 insn
1252 = read_memory_unsigned_integer (pc + 4, 4, byte_order_for_code);
1253
1254 if ((insn & 0x0ff00000) == 0x03400000) /* movt Rd, #const */
1255 {
1256 high = EXTRACT_MOVW_MOVT_IMM_A (insn);
1257 *destreg = bits (insn, 12, 15);
1258 *offset = 8;
1259 address = (high << 16 | low);
1260 }
1261 }
1262 }
1263
1264 return address;
1265 }
1266
1267 /* Try to skip a sequence of instructions used for stack protector. If PC
1268 points to the first instruction of this sequence, return the address of
1269 first instruction after this sequence, otherwise, return original PC.
1270
1271 On arm, this sequence of instructions is composed of mainly three steps,
1272 Step 1: load symbol __stack_chk_guard,
1273 Step 2: load from address of __stack_chk_guard,
1274 Step 3: store it to somewhere else.
1275
1276 Usually, instructions on step 2 and step 3 are the same on various ARM
1277 architectures. On step 2, it is one instruction 'ldr Rx, [Rn, #0]', and
1278 on step 3, it is also one instruction 'str Rx, [r7, #immd]'. However,
1279 instructions in step 1 vary from different ARM architectures. On ARMv7,
1280 they are,
1281
1282 movw Rn, #:lower16:__stack_chk_guard
1283 movt Rn, #:upper16:__stack_chk_guard
1284
1285 On ARMv5t, it is,
1286
1287 ldr Rn, .Label
1288 ....
1289 .Lable:
1290 .word __stack_chk_guard
1291
1292 Since ldr/str is a very popular instruction, we can't use them as
1293 'fingerprint' or 'signature' of stack protector sequence. Here we choose
1294 sequence {movw/movt, ldr}/ldr/str plus symbol __stack_chk_guard, if not
1295 stripped, as the 'fingerprint' of a stack protector cdoe sequence. */
1296
1297 static CORE_ADDR
1298 arm_skip_stack_protector(CORE_ADDR pc, struct gdbarch *gdbarch)
1299 {
1300 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1301 unsigned int basereg;
1302 struct bound_minimal_symbol stack_chk_guard;
1303 int offset;
1304 int is_thumb = arm_pc_is_thumb (gdbarch, pc);
1305 CORE_ADDR addr;
1306
1307 /* Try to parse the instructions in Step 1. */
1308 addr = arm_analyze_load_stack_chk_guard (pc, gdbarch,
1309 &basereg, &offset);
1310 if (!addr)
1311 return pc;
1312
1313 stack_chk_guard = lookup_minimal_symbol_by_pc (addr);
1314 /* ADDR must correspond to a symbol whose name is __stack_chk_guard.
1315 Otherwise, this sequence cannot be for stack protector. */
1316 if (stack_chk_guard.minsym == NULL
1317 || !startswith (MSYMBOL_LINKAGE_NAME (stack_chk_guard.minsym), "__stack_chk_guard"))
1318 return pc;
1319
1320 if (is_thumb)
1321 {
1322 unsigned int destreg;
1323 unsigned short insn
1324 = read_memory_unsigned_integer (pc + offset, 2, byte_order_for_code);
1325
1326 /* Step 2: ldr Rd, [Rn, #immed], encoding T1. */
1327 if ((insn & 0xf800) != 0x6800)
1328 return pc;
1329 if (bits (insn, 3, 5) != basereg)
1330 return pc;
1331 destreg = bits (insn, 0, 2);
1332
1333 insn = read_memory_unsigned_integer (pc + offset + 2, 2,
1334 byte_order_for_code);
1335 /* Step 3: str Rd, [Rn, #immed], encoding T1. */
1336 if ((insn & 0xf800) != 0x6000)
1337 return pc;
1338 if (destreg != bits (insn, 0, 2))
1339 return pc;
1340 }
1341 else
1342 {
1343 unsigned int destreg;
1344 unsigned int insn
1345 = read_memory_unsigned_integer (pc + offset, 4, byte_order_for_code);
1346
1347 /* Step 2: ldr Rd, [Rn, #immed], encoding A1. */
1348 if ((insn & 0x0e500000) != 0x04100000)
1349 return pc;
1350 if (bits (insn, 16, 19) != basereg)
1351 return pc;
1352 destreg = bits (insn, 12, 15);
1353 /* Step 3: str Rd, [Rn, #immed], encoding A1. */
1354 insn = read_memory_unsigned_integer (pc + offset + 4,
1355 4, byte_order_for_code);
1356 if ((insn & 0x0e500000) != 0x04000000)
1357 return pc;
1358 if (bits (insn, 12, 15) != destreg)
1359 return pc;
1360 }
1361 /* The size of total two instructions ldr/str is 4 on Thumb-2, while 8
1362 on arm. */
1363 if (is_thumb)
1364 return pc + offset + 4;
1365 else
1366 return pc + offset + 8;
1367 }
1368
1369 /* Advance the PC across any function entry prologue instructions to
1370 reach some "real" code.
1371
1372 The APCS (ARM Procedure Call Standard) defines the following
1373 prologue:
1374
1375 mov ip, sp
1376 [stmfd sp!, {a1,a2,a3,a4}]
1377 stmfd sp!, {...,fp,ip,lr,pc}
1378 [stfe f7, [sp, #-12]!]
1379 [stfe f6, [sp, #-12]!]
1380 [stfe f5, [sp, #-12]!]
1381 [stfe f4, [sp, #-12]!]
1382 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn. */
1383
1384 static CORE_ADDR
1385 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1386 {
1387 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1388 unsigned long inst;
1389 CORE_ADDR func_addr, limit_pc;
1390
1391 /* See if we can determine the end of the prologue via the symbol table.
1392 If so, then return either PC, or the PC after the prologue, whichever
1393 is greater. */
1394 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1395 {
1396 CORE_ADDR post_prologue_pc
1397 = skip_prologue_using_sal (gdbarch, func_addr);
1398 struct compunit_symtab *cust = find_pc_compunit_symtab (func_addr);
1399
1400 if (post_prologue_pc)
1401 post_prologue_pc
1402 = arm_skip_stack_protector (post_prologue_pc, gdbarch);
1403
1404
1405 /* GCC always emits a line note before the prologue and another
1406 one after, even if the two are at the same address or on the
1407 same line. Take advantage of this so that we do not need to
1408 know every instruction that might appear in the prologue. We
1409 will have producer information for most binaries; if it is
1410 missing (e.g. for -gstabs), assuming the GNU tools. */
1411 if (post_prologue_pc
1412 && (cust == NULL
1413 || COMPUNIT_PRODUCER (cust) == NULL
1414 || startswith (COMPUNIT_PRODUCER (cust), "GNU ")
1415 || startswith (COMPUNIT_PRODUCER (cust), "clang ")))
1416 return post_prologue_pc;
1417
1418 if (post_prologue_pc != 0)
1419 {
1420 CORE_ADDR analyzed_limit;
1421
1422 /* For non-GCC compilers, make sure the entire line is an
1423 acceptable prologue; GDB will round this function's
1424 return value up to the end of the following line so we
1425 can not skip just part of a line (and we do not want to).
1426
1427 RealView does not treat the prologue specially, but does
1428 associate prologue code with the opening brace; so this
1429 lets us skip the first line if we think it is the opening
1430 brace. */
1431 if (arm_pc_is_thumb (gdbarch, func_addr))
1432 analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
1433 post_prologue_pc, NULL);
1434 else
1435 analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
1436 post_prologue_pc, NULL);
1437
1438 if (analyzed_limit != post_prologue_pc)
1439 return func_addr;
1440
1441 return post_prologue_pc;
1442 }
1443 }
1444
1445 /* Can't determine prologue from the symbol table, need to examine
1446 instructions. */
1447
1448 /* Find an upper limit on the function prologue using the debug
1449 information. If the debug information could not be used to provide
1450 that bound, then use an arbitrary large number as the upper bound. */
1451 /* Like arm_scan_prologue, stop no later than pc + 64. */
1452 limit_pc = skip_prologue_using_sal (gdbarch, pc);
1453 if (limit_pc == 0)
1454 limit_pc = pc + 64; /* Magic. */
1455
1456
1457 /* Check if this is Thumb code. */
1458 if (arm_pc_is_thumb (gdbarch, pc))
1459 return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1460 else
1461 return arm_analyze_prologue (gdbarch, pc, limit_pc, NULL);
1462 }
1463
1464 /* *INDENT-OFF* */
1465 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
1466 This function decodes a Thumb function prologue to determine:
1467 1) the size of the stack frame
1468 2) which registers are saved on it
1469 3) the offsets of saved regs
1470 4) the offset from the stack pointer to the frame pointer
1471
1472 A typical Thumb function prologue would create this stack frame
1473 (offsets relative to FP)
1474 old SP -> 24 stack parameters
1475 20 LR
1476 16 R7
1477 R7 -> 0 local variables (16 bytes)
1478 SP -> -12 additional stack space (12 bytes)
1479 The frame size would thus be 36 bytes, and the frame offset would be
1480 12 bytes. The frame register is R7.
1481
1482 The comments for thumb_skip_prolog() describe the algorithm we use
1483 to detect the end of the prolog. */
1484 /* *INDENT-ON* */
1485
1486 static void
1487 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
1488 CORE_ADDR block_addr, struct arm_prologue_cache *cache)
1489 {
1490 CORE_ADDR prologue_start;
1491 CORE_ADDR prologue_end;
1492
1493 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1494 &prologue_end))
1495 {
1496 /* See comment in arm_scan_prologue for an explanation of
1497 this heuristics. */
1498 if (prologue_end > prologue_start + 64)
1499 {
1500 prologue_end = prologue_start + 64;
1501 }
1502 }
1503 else
1504 /* We're in the boondocks: we have no idea where the start of the
1505 function is. */
1506 return;
1507
1508 prologue_end = min (prologue_end, prev_pc);
1509
1510 thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1511 }
1512
1513 /* Return 1 if THIS_INSTR might change control flow, 0 otherwise. */
1514
1515 static int
1516 arm_instruction_changes_pc (uint32_t this_instr)
1517 {
1518 if (bits (this_instr, 28, 31) == INST_NV)
1519 /* Unconditional instructions. */
1520 switch (bits (this_instr, 24, 27))
1521 {
1522 case 0xa:
1523 case 0xb:
1524 /* Branch with Link and change to Thumb. */
1525 return 1;
1526 case 0xc:
1527 case 0xd:
1528 case 0xe:
1529 /* Coprocessor register transfer. */
1530 if (bits (this_instr, 12, 15) == 15)
1531 error (_("Invalid update to pc in instruction"));
1532 return 0;
1533 default:
1534 return 0;
1535 }
1536 else
1537 switch (bits (this_instr, 25, 27))
1538 {
1539 case 0x0:
1540 if (bits (this_instr, 23, 24) == 2 && bit (this_instr, 20) == 0)
1541 {
1542 /* Multiplies and extra load/stores. */
1543 if (bit (this_instr, 4) == 1 && bit (this_instr, 7) == 1)
1544 /* Neither multiplies nor extension load/stores are allowed
1545 to modify PC. */
1546 return 0;
1547
1548 /* Otherwise, miscellaneous instructions. */
1549
1550 /* BX <reg>, BXJ <reg>, BLX <reg> */
1551 if (bits (this_instr, 4, 27) == 0x12fff1
1552 || bits (this_instr, 4, 27) == 0x12fff2
1553 || bits (this_instr, 4, 27) == 0x12fff3)
1554 return 1;
1555
1556 /* Other miscellaneous instructions are unpredictable if they
1557 modify PC. */
1558 return 0;
1559 }
1560 /* Data processing instruction. Fall through. */
1561
1562 case 0x1:
1563 if (bits (this_instr, 12, 15) == 15)
1564 return 1;
1565 else
1566 return 0;
1567
1568 case 0x2:
1569 case 0x3:
1570 /* Media instructions and architecturally undefined instructions. */
1571 if (bits (this_instr, 25, 27) == 3 && bit (this_instr, 4) == 1)
1572 return 0;
1573
1574 /* Stores. */
1575 if (bit (this_instr, 20) == 0)
1576 return 0;
1577
1578 /* Loads. */
1579 if (bits (this_instr, 12, 15) == ARM_PC_REGNUM)
1580 return 1;
1581 else
1582 return 0;
1583
1584 case 0x4:
1585 /* Load/store multiple. */
1586 if (bit (this_instr, 20) == 1 && bit (this_instr, 15) == 1)
1587 return 1;
1588 else
1589 return 0;
1590
1591 case 0x5:
1592 /* Branch and branch with link. */
1593 return 1;
1594
1595 case 0x6:
1596 case 0x7:
1597 /* Coprocessor transfers or SWIs can not affect PC. */
1598 return 0;
1599
1600 default:
1601 internal_error (__FILE__, __LINE__, _("bad value in switch"));
1602 }
1603 }
1604
1605 /* Return 1 if the ARM instruction INSN restores SP in epilogue, 0
1606 otherwise. */
1607
1608 static int
1609 arm_instruction_restores_sp (unsigned int insn)
1610 {
1611 if (bits (insn, 28, 31) != INST_NV)
1612 {
1613 if ((insn & 0x0df0f000) == 0x0080d000
1614 /* ADD SP (register or immediate). */
1615 || (insn & 0x0df0f000) == 0x0040d000
1616 /* SUB SP (register or immediate). */
1617 || (insn & 0x0ffffff0) == 0x01a0d000
1618 /* MOV SP. */
1619 || (insn & 0x0fff0000) == 0x08bd0000
1620 /* POP (LDMIA). */
1621 || (insn & 0x0fff0000) == 0x049d0000)
1622 /* POP of a single register. */
1623 return 1;
1624 }
1625
1626 return 0;
1627 }
1628
1629 /* Analyze an ARM mode prologue starting at PROLOGUE_START and
1630 continuing no further than PROLOGUE_END. If CACHE is non-NULL,
1631 fill it in. Return the first address not recognized as a prologue
1632 instruction.
1633
1634 We recognize all the instructions typically found in ARM prologues,
1635 plus harmless instructions which can be skipped (either for analysis
1636 purposes, or a more restrictive set that can be skipped when finding
1637 the end of the prologue). */
1638
1639 static CORE_ADDR
1640 arm_analyze_prologue (struct gdbarch *gdbarch,
1641 CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1642 struct arm_prologue_cache *cache)
1643 {
1644 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1645 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1646 int regno;
1647 CORE_ADDR offset, current_pc;
1648 pv_t regs[ARM_FPS_REGNUM];
1649 struct pv_area *stack;
1650 struct cleanup *back_to;
1651 CORE_ADDR unrecognized_pc = 0;
1652
1653 /* Search the prologue looking for instructions that set up the
1654 frame pointer, adjust the stack pointer, and save registers.
1655
1656 Be careful, however, and if it doesn't look like a prologue,
1657 don't try to scan it. If, for instance, a frameless function
1658 begins with stmfd sp!, then we will tell ourselves there is
1659 a frame, which will confuse stack traceback, as well as "finish"
1660 and other operations that rely on a knowledge of the stack
1661 traceback. */
1662
1663 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1664 regs[regno] = pv_register (regno, 0);
1665 stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1666 back_to = make_cleanup_free_pv_area (stack);
1667
1668 for (current_pc = prologue_start;
1669 current_pc < prologue_end;
1670 current_pc += 4)
1671 {
1672 unsigned int insn
1673 = read_memory_unsigned_integer (current_pc, 4, byte_order_for_code);
1674
1675 if (insn == 0xe1a0c00d) /* mov ip, sp */
1676 {
1677 regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
1678 continue;
1679 }
1680 else if ((insn & 0xfff00000) == 0xe2800000 /* add Rd, Rn, #n */
1681 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1682 {
1683 unsigned imm = insn & 0xff; /* immediate value */
1684 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1685 int rd = bits (insn, 12, 15);
1686 imm = (imm >> rot) | (imm << (32 - rot));
1687 regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
1688 continue;
1689 }
1690 else if ((insn & 0xfff00000) == 0xe2400000 /* sub Rd, Rn, #n */
1691 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1692 {
1693 unsigned imm = insn & 0xff; /* immediate value */
1694 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1695 int rd = bits (insn, 12, 15);
1696 imm = (imm >> rot) | (imm << (32 - rot));
1697 regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
1698 continue;
1699 }
1700 else if ((insn & 0xffff0fff) == 0xe52d0004) /* str Rd,
1701 [sp, #-4]! */
1702 {
1703 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1704 break;
1705 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1706 pv_area_store (stack, regs[ARM_SP_REGNUM], 4,
1707 regs[bits (insn, 12, 15)]);
1708 continue;
1709 }
1710 else if ((insn & 0xffff0000) == 0xe92d0000)
1711 /* stmfd sp!, {..., fp, ip, lr, pc}
1712 or
1713 stmfd sp!, {a1, a2, a3, a4} */
1714 {
1715 int mask = insn & 0xffff;
1716
1717 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1718 break;
1719
1720 /* Calculate offsets of saved registers. */
1721 for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
1722 if (mask & (1 << regno))
1723 {
1724 regs[ARM_SP_REGNUM]
1725 = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1726 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
1727 }
1728 }
1729 else if ((insn & 0xffff0000) == 0xe54b0000 /* strb rx,[r11,#-n] */
1730 || (insn & 0xffff00f0) == 0xe14b00b0 /* strh rx,[r11,#-n] */
1731 || (insn & 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
1732 {
1733 /* No need to add this to saved_regs -- it's just an arg reg. */
1734 continue;
1735 }
1736 else if ((insn & 0xffff0000) == 0xe5cd0000 /* strb rx,[sp,#n] */
1737 || (insn & 0xffff00f0) == 0xe1cd00b0 /* strh rx,[sp,#n] */
1738 || (insn & 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
1739 {
1740 /* No need to add this to saved_regs -- it's just an arg reg. */
1741 continue;
1742 }
1743 else if ((insn & 0xfff00000) == 0xe8800000 /* stm Rn,
1744 { registers } */
1745 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1746 {
1747 /* No need to add this to saved_regs -- it's just arg regs. */
1748 continue;
1749 }
1750 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
1751 {
1752 unsigned imm = insn & 0xff; /* immediate value */
1753 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1754 imm = (imm >> rot) | (imm << (32 - rot));
1755 regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
1756 }
1757 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
1758 {
1759 unsigned imm = insn & 0xff; /* immediate value */
1760 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
1761 imm = (imm >> rot) | (imm << (32 - rot));
1762 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
1763 }
1764 else if ((insn & 0xffff7fff) == 0xed6d0103 /* stfe f?,
1765 [sp, -#c]! */
1766 && gdbarch_tdep (gdbarch)->have_fpa_registers)
1767 {
1768 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1769 break;
1770
1771 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1772 regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
1773 pv_area_store (stack, regs[ARM_SP_REGNUM], 12, regs[regno]);
1774 }
1775 else if ((insn & 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4,
1776 [sp!] */
1777 && gdbarch_tdep (gdbarch)->have_fpa_registers)
1778 {
1779 int n_saved_fp_regs;
1780 unsigned int fp_start_reg, fp_bound_reg;
1781
1782 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1783 break;
1784
1785 if ((insn & 0x800) == 0x800) /* N0 is set */
1786 {
1787 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1788 n_saved_fp_regs = 3;
1789 else
1790 n_saved_fp_regs = 1;
1791 }
1792 else
1793 {
1794 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1795 n_saved_fp_regs = 2;
1796 else
1797 n_saved_fp_regs = 4;
1798 }
1799
1800 fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1801 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1802 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1803 {
1804 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1805 pv_area_store (stack, regs[ARM_SP_REGNUM], 12,
1806 regs[fp_start_reg++]);
1807 }
1808 }
1809 else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1810 {
1811 /* Allow some special function calls when skipping the
1812 prologue; GCC generates these before storing arguments to
1813 the stack. */
1814 CORE_ADDR dest = BranchDest (current_pc, insn);
1815
1816 if (skip_prologue_function (gdbarch, dest, 0))
1817 continue;
1818 else
1819 break;
1820 }
1821 else if ((insn & 0xf0000000) != 0xe0000000)
1822 break; /* Condition not true, exit early. */
1823 else if (arm_instruction_changes_pc (insn))
1824 /* Don't scan past anything that might change control flow. */
1825 break;
1826 else if (arm_instruction_restores_sp (insn))
1827 {
1828 /* Don't scan past the epilogue. */
1829 break;
1830 }
1831 else if ((insn & 0xfe500000) == 0xe8100000 /* ldm */
1832 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1833 /* Ignore block loads from the stack, potentially copying
1834 parameters from memory. */
1835 continue;
1836 else if ((insn & 0xfc500000) == 0xe4100000
1837 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1838 /* Similarly ignore single loads from the stack. */
1839 continue;
1840 else if ((insn & 0xffff0ff0) == 0xe1a00000)
1841 /* MOV Rd, Rm. Skip register copies, i.e. saves to another
1842 register instead of the stack. */
1843 continue;
1844 else
1845 {
1846 /* The optimizer might shove anything into the prologue, if
1847 we build up cache (cache != NULL) from scanning prologue,
1848 we just skip what we don't recognize and scan further to
1849 make cache as complete as possible. However, if we skip
1850 prologue, we'll stop immediately on unrecognized
1851 instruction. */
1852 unrecognized_pc = current_pc;
1853 if (cache != NULL)
1854 continue;
1855 else
1856 break;
1857 }
1858 }
1859
1860 if (unrecognized_pc == 0)
1861 unrecognized_pc = current_pc;
1862
1863 if (cache)
1864 {
1865 int framereg, framesize;
1866
1867 /* The frame size is just the distance from the frame register
1868 to the original stack pointer. */
1869 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1870 {
1871 /* Frame pointer is fp. */
1872 framereg = ARM_FP_REGNUM;
1873 framesize = -regs[ARM_FP_REGNUM].k;
1874 }
1875 else
1876 {
1877 /* Try the stack pointer... this is a bit desperate. */
1878 framereg = ARM_SP_REGNUM;
1879 framesize = -regs[ARM_SP_REGNUM].k;
1880 }
1881
1882 cache->framereg = framereg;
1883 cache->framesize = framesize;
1884
1885 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1886 if (pv_area_find_reg (stack, gdbarch, regno, &offset))
1887 cache->saved_regs[regno].addr = offset;
1888 }
1889
1890 if (arm_debug)
1891 fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1892 paddress (gdbarch, unrecognized_pc));
1893
1894 do_cleanups (back_to);
1895 return unrecognized_pc;
1896 }
1897
1898 static void
1899 arm_scan_prologue (struct frame_info *this_frame,
1900 struct arm_prologue_cache *cache)
1901 {
1902 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1903 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1904 int regno;
1905 CORE_ADDR prologue_start, prologue_end, current_pc;
1906 CORE_ADDR prev_pc = get_frame_pc (this_frame);
1907 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1908 pv_t regs[ARM_FPS_REGNUM];
1909 struct pv_area *stack;
1910 struct cleanup *back_to;
1911 CORE_ADDR offset;
1912
1913 /* Assume there is no frame until proven otherwise. */
1914 cache->framereg = ARM_SP_REGNUM;
1915 cache->framesize = 0;
1916
1917 /* Check for Thumb prologue. */
1918 if (arm_frame_is_thumb (this_frame))
1919 {
1920 thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1921 return;
1922 }
1923
1924 /* Find the function prologue. If we can't find the function in
1925 the symbol table, peek in the stack frame to find the PC. */
1926 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1927 &prologue_end))
1928 {
1929 /* One way to find the end of the prologue (which works well
1930 for unoptimized code) is to do the following:
1931
1932 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1933
1934 if (sal.line == 0)
1935 prologue_end = prev_pc;
1936 else if (sal.end < prologue_end)
1937 prologue_end = sal.end;
1938
1939 This mechanism is very accurate so long as the optimizer
1940 doesn't move any instructions from the function body into the
1941 prologue. If this happens, sal.end will be the last
1942 instruction in the first hunk of prologue code just before
1943 the first instruction that the scheduler has moved from
1944 the body to the prologue.
1945
1946 In order to make sure that we scan all of the prologue
1947 instructions, we use a slightly less accurate mechanism which
1948 may scan more than necessary. To help compensate for this
1949 lack of accuracy, the prologue scanning loop below contains
1950 several clauses which'll cause the loop to terminate early if
1951 an implausible prologue instruction is encountered.
1952
1953 The expression
1954
1955 prologue_start + 64
1956
1957 is a suitable endpoint since it accounts for the largest
1958 possible prologue plus up to five instructions inserted by
1959 the scheduler. */
1960
1961 if (prologue_end > prologue_start + 64)
1962 {
1963 prologue_end = prologue_start + 64; /* See above. */
1964 }
1965 }
1966 else
1967 {
1968 /* We have no symbol information. Our only option is to assume this
1969 function has a standard stack frame and the normal frame register.
1970 Then, we can find the value of our frame pointer on entrance to
1971 the callee (or at the present moment if this is the innermost frame).
1972 The value stored there should be the address of the stmfd + 8. */
1973 CORE_ADDR frame_loc;
1974 LONGEST return_value;
1975
1976 frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1977 if (!safe_read_memory_integer (frame_loc, 4, byte_order, &return_value))
1978 return;
1979 else
1980 {
1981 prologue_start = gdbarch_addr_bits_remove
1982 (gdbarch, return_value) - 8;
1983 prologue_end = prologue_start + 64; /* See above. */
1984 }
1985 }
1986
1987 if (prev_pc < prologue_end)
1988 prologue_end = prev_pc;
1989
1990 arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
1991 }
1992
1993 static struct arm_prologue_cache *
1994 arm_make_prologue_cache (struct frame_info *this_frame)
1995 {
1996 int reg;
1997 struct arm_prologue_cache *cache;
1998 CORE_ADDR unwound_fp;
1999
2000 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2001 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2002
2003 arm_scan_prologue (this_frame, cache);
2004
2005 unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
2006 if (unwound_fp == 0)
2007 return cache;
2008
2009 cache->prev_sp = unwound_fp + cache->framesize;
2010
2011 /* Calculate actual addresses of saved registers using offsets
2012 determined by arm_scan_prologue. */
2013 for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
2014 if (trad_frame_addr_p (cache->saved_regs, reg))
2015 cache->saved_regs[reg].addr += cache->prev_sp;
2016
2017 return cache;
2018 }
2019
2020 /* Implementation of the stop_reason hook for arm_prologue frames. */
2021
2022 static enum unwind_stop_reason
2023 arm_prologue_unwind_stop_reason (struct frame_info *this_frame,
2024 void **this_cache)
2025 {
2026 struct arm_prologue_cache *cache;
2027 CORE_ADDR pc;
2028
2029 if (*this_cache == NULL)
2030 *this_cache = arm_make_prologue_cache (this_frame);
2031 cache = *this_cache;
2032
2033 /* This is meant to halt the backtrace at "_start". */
2034 pc = get_frame_pc (this_frame);
2035 if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
2036 return UNWIND_OUTERMOST;
2037
2038 /* If we've hit a wall, stop. */
2039 if (cache->prev_sp == 0)
2040 return UNWIND_OUTERMOST;
2041
2042 return UNWIND_NO_REASON;
2043 }
2044
2045 /* Our frame ID for a normal frame is the current function's starting PC
2046 and the caller's SP when we were called. */
2047
2048 static void
2049 arm_prologue_this_id (struct frame_info *this_frame,
2050 void **this_cache,
2051 struct frame_id *this_id)
2052 {
2053 struct arm_prologue_cache *cache;
2054 struct frame_id id;
2055 CORE_ADDR pc, func;
2056
2057 if (*this_cache == NULL)
2058 *this_cache = arm_make_prologue_cache (this_frame);
2059 cache = *this_cache;
2060
2061 /* Use function start address as part of the frame ID. If we cannot
2062 identify the start address (due to missing symbol information),
2063 fall back to just using the current PC. */
2064 pc = get_frame_pc (this_frame);
2065 func = get_frame_func (this_frame);
2066 if (!func)
2067 func = pc;
2068
2069 id = frame_id_build (cache->prev_sp, func);
2070 *this_id = id;
2071 }
2072
2073 static struct value *
2074 arm_prologue_prev_register (struct frame_info *this_frame,
2075 void **this_cache,
2076 int prev_regnum)
2077 {
2078 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2079 struct arm_prologue_cache *cache;
2080
2081 if (*this_cache == NULL)
2082 *this_cache = arm_make_prologue_cache (this_frame);
2083 cache = *this_cache;
2084
2085 /* If we are asked to unwind the PC, then we need to return the LR
2086 instead. The prologue may save PC, but it will point into this
2087 frame's prologue, not the next frame's resume location. Also
2088 strip the saved T bit. A valid LR may have the low bit set, but
2089 a valid PC never does. */
2090 if (prev_regnum == ARM_PC_REGNUM)
2091 {
2092 CORE_ADDR lr;
2093
2094 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
2095 return frame_unwind_got_constant (this_frame, prev_regnum,
2096 arm_addr_bits_remove (gdbarch, lr));
2097 }
2098
2099 /* SP is generally not saved to the stack, but this frame is
2100 identified by the next frame's stack pointer at the time of the call.
2101 The value was already reconstructed into PREV_SP. */
2102 if (prev_regnum == ARM_SP_REGNUM)
2103 return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
2104
2105 /* The CPSR may have been changed by the call instruction and by the
2106 called function. The only bit we can reconstruct is the T bit,
2107 by checking the low bit of LR as of the call. This is a reliable
2108 indicator of Thumb-ness except for some ARM v4T pre-interworking
2109 Thumb code, which could get away with a clear low bit as long as
2110 the called function did not use bx. Guess that all other
2111 bits are unchanged; the condition flags are presumably lost,
2112 but the processor status is likely valid. */
2113 if (prev_regnum == ARM_PS_REGNUM)
2114 {
2115 CORE_ADDR lr, cpsr;
2116 ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
2117
2118 cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
2119 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
2120 if (IS_THUMB_ADDR (lr))
2121 cpsr |= t_bit;
2122 else
2123 cpsr &= ~t_bit;
2124 return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
2125 }
2126
2127 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
2128 prev_regnum);
2129 }
2130
2131 struct frame_unwind arm_prologue_unwind = {
2132 NORMAL_FRAME,
2133 arm_prologue_unwind_stop_reason,
2134 arm_prologue_this_id,
2135 arm_prologue_prev_register,
2136 NULL,
2137 default_frame_sniffer
2138 };
2139
2140 /* Maintain a list of ARM exception table entries per objfile, similar to the
2141 list of mapping symbols. We only cache entries for standard ARM-defined
2142 personality routines; the cache will contain only the frame unwinding
2143 instructions associated with the entry (not the descriptors). */
2144
2145 static const struct objfile_data *arm_exidx_data_key;
2146
2147 struct arm_exidx_entry
2148 {
2149 bfd_vma addr;
2150 gdb_byte *entry;
2151 };
2152 typedef struct arm_exidx_entry arm_exidx_entry_s;
2153 DEF_VEC_O(arm_exidx_entry_s);
2154
2155 struct arm_exidx_data
2156 {
2157 VEC(arm_exidx_entry_s) **section_maps;
2158 };
2159
2160 static void
2161 arm_exidx_data_free (struct objfile *objfile, void *arg)
2162 {
2163 struct arm_exidx_data *data = arg;
2164 unsigned int i;
2165
2166 for (i = 0; i < objfile->obfd->section_count; i++)
2167 VEC_free (arm_exidx_entry_s, data->section_maps[i]);
2168 }
2169
2170 static inline int
2171 arm_compare_exidx_entries (const struct arm_exidx_entry *lhs,
2172 const struct arm_exidx_entry *rhs)
2173 {
2174 return lhs->addr < rhs->addr;
2175 }
2176
2177 static struct obj_section *
2178 arm_obj_section_from_vma (struct objfile *objfile, bfd_vma vma)
2179 {
2180 struct obj_section *osect;
2181
2182 ALL_OBJFILE_OSECTIONS (objfile, osect)
2183 if (bfd_get_section_flags (objfile->obfd,
2184 osect->the_bfd_section) & SEC_ALLOC)
2185 {
2186 bfd_vma start, size;
2187 start = bfd_get_section_vma (objfile->obfd, osect->the_bfd_section);
2188 size = bfd_get_section_size (osect->the_bfd_section);
2189
2190 if (start <= vma && vma < start + size)
2191 return osect;
2192 }
2193
2194 return NULL;
2195 }
2196
2197 /* Parse contents of exception table and exception index sections
2198 of OBJFILE, and fill in the exception table entry cache.
2199
2200 For each entry that refers to a standard ARM-defined personality
2201 routine, extract the frame unwinding instructions (from either
2202 the index or the table section). The unwinding instructions
2203 are normalized by:
2204 - extracting them from the rest of the table data
2205 - converting to host endianness
2206 - appending the implicit 0xb0 ("Finish") code
2207
2208 The extracted and normalized instructions are stored for later
2209 retrieval by the arm_find_exidx_entry routine. */
2210
2211 static void
2212 arm_exidx_new_objfile (struct objfile *objfile)
2213 {
2214 struct cleanup *cleanups;
2215 struct arm_exidx_data *data;
2216 asection *exidx, *extab;
2217 bfd_vma exidx_vma = 0, extab_vma = 0;
2218 bfd_size_type exidx_size = 0, extab_size = 0;
2219 gdb_byte *exidx_data = NULL, *extab_data = NULL;
2220 LONGEST i;
2221
2222 /* If we've already touched this file, do nothing. */
2223 if (!objfile || objfile_data (objfile, arm_exidx_data_key) != NULL)
2224 return;
2225 cleanups = make_cleanup (null_cleanup, NULL);
2226
2227 /* Read contents of exception table and index. */
2228 exidx = bfd_get_section_by_name (objfile->obfd, ".ARM.exidx");
2229 if (exidx)
2230 {
2231 exidx_vma = bfd_section_vma (objfile->obfd, exidx);
2232 exidx_size = bfd_get_section_size (exidx);
2233 exidx_data = xmalloc (exidx_size);
2234 make_cleanup (xfree, exidx_data);
2235
2236 if (!bfd_get_section_contents (objfile->obfd, exidx,
2237 exidx_data, 0, exidx_size))
2238 {
2239 do_cleanups (cleanups);
2240 return;
2241 }
2242 }
2243
2244 extab = bfd_get_section_by_name (objfile->obfd, ".ARM.extab");
2245 if (extab)
2246 {
2247 extab_vma = bfd_section_vma (objfile->obfd, extab);
2248 extab_size = bfd_get_section_size (extab);
2249 extab_data = xmalloc (extab_size);
2250 make_cleanup (xfree, extab_data);
2251
2252 if (!bfd_get_section_contents (objfile->obfd, extab,
2253 extab_data, 0, extab_size))
2254 {
2255 do_cleanups (cleanups);
2256 return;
2257 }
2258 }
2259
2260 /* Allocate exception table data structure. */
2261 data = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct arm_exidx_data);
2262 set_objfile_data (objfile, arm_exidx_data_key, data);
2263 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
2264 objfile->obfd->section_count,
2265 VEC(arm_exidx_entry_s) *);
2266
2267 /* Fill in exception table. */
2268 for (i = 0; i < exidx_size / 8; i++)
2269 {
2270 struct arm_exidx_entry new_exidx_entry;
2271 bfd_vma idx = bfd_h_get_32 (objfile->obfd, exidx_data + i * 8);
2272 bfd_vma val = bfd_h_get_32 (objfile->obfd, exidx_data + i * 8 + 4);
2273 bfd_vma addr = 0, word = 0;
2274 int n_bytes = 0, n_words = 0;
2275 struct obj_section *sec;
2276 gdb_byte *entry = NULL;
2277
2278 /* Extract address of start of function. */
2279 idx = ((idx & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2280 idx += exidx_vma + i * 8;
2281
2282 /* Find section containing function and compute section offset. */
2283 sec = arm_obj_section_from_vma (objfile, idx);
2284 if (sec == NULL)
2285 continue;
2286 idx -= bfd_get_section_vma (objfile->obfd, sec->the_bfd_section);
2287
2288 /* Determine address of exception table entry. */
2289 if (val == 1)
2290 {
2291 /* EXIDX_CANTUNWIND -- no exception table entry present. */
2292 }
2293 else if ((val & 0xff000000) == 0x80000000)
2294 {
2295 /* Exception table entry embedded in .ARM.exidx
2296 -- must be short form. */
2297 word = val;
2298 n_bytes = 3;
2299 }
2300 else if (!(val & 0x80000000))
2301 {
2302 /* Exception table entry in .ARM.extab. */
2303 addr = ((val & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2304 addr += exidx_vma + i * 8 + 4;
2305
2306 if (addr >= extab_vma && addr + 4 <= extab_vma + extab_size)
2307 {
2308 word = bfd_h_get_32 (objfile->obfd,
2309 extab_data + addr - extab_vma);
2310 addr += 4;
2311
2312 if ((word & 0xff000000) == 0x80000000)
2313 {
2314 /* Short form. */
2315 n_bytes = 3;
2316 }
2317 else if ((word & 0xff000000) == 0x81000000
2318 || (word & 0xff000000) == 0x82000000)
2319 {
2320 /* Long form. */
2321 n_bytes = 2;
2322 n_words = ((word >> 16) & 0xff);
2323 }
2324 else if (!(word & 0x80000000))
2325 {
2326 bfd_vma pers;
2327 struct obj_section *pers_sec;
2328 int gnu_personality = 0;
2329
2330 /* Custom personality routine. */
2331 pers = ((word & 0x7fffffff) ^ 0x40000000) - 0x40000000;
2332 pers = UNMAKE_THUMB_ADDR (pers + addr - 4);
2333
2334 /* Check whether we've got one of the variants of the
2335 GNU personality routines. */
2336 pers_sec = arm_obj_section_from_vma (objfile, pers);
2337 if (pers_sec)
2338 {
2339 static const char *personality[] =
2340 {
2341 "__gcc_personality_v0",
2342 "__gxx_personality_v0",
2343 "__gcj_personality_v0",
2344 "__gnu_objc_personality_v0",
2345 NULL
2346 };
2347
2348 CORE_ADDR pc = pers + obj_section_offset (pers_sec);
2349 int k;
2350
2351 for (k = 0; personality[k]; k++)
2352 if (lookup_minimal_symbol_by_pc_name
2353 (pc, personality[k], objfile))
2354 {
2355 gnu_personality = 1;
2356 break;
2357 }
2358 }
2359
2360 /* If so, the next word contains a word count in the high
2361 byte, followed by the same unwind instructions as the
2362 pre-defined forms. */
2363 if (gnu_personality
2364 && addr + 4 <= extab_vma + extab_size)
2365 {
2366 word = bfd_h_get_32 (objfile->obfd,
2367 extab_data + addr - extab_vma);
2368 addr += 4;
2369 n_bytes = 3;
2370 n_words = ((word >> 24) & 0xff);
2371 }
2372 }
2373 }
2374 }
2375
2376 /* Sanity check address. */
2377 if (n_words)
2378 if (addr < extab_vma || addr + 4 * n_words > extab_vma + extab_size)
2379 n_words = n_bytes = 0;
2380
2381 /* The unwind instructions reside in WORD (only the N_BYTES least
2382 significant bytes are valid), followed by N_WORDS words in the
2383 extab section starting at ADDR. */
2384 if (n_bytes || n_words)
2385 {
2386 gdb_byte *p = entry = obstack_alloc (&objfile->objfile_obstack,
2387 n_bytes + n_words * 4 + 1);
2388
2389 while (n_bytes--)
2390 *p++ = (gdb_byte) ((word >> (8 * n_bytes)) & 0xff);
2391
2392 while (n_words--)
2393 {
2394 word = bfd_h_get_32 (objfile->obfd,
2395 extab_data + addr - extab_vma);
2396 addr += 4;
2397
2398 *p++ = (gdb_byte) ((word >> 24) & 0xff);
2399 *p++ = (gdb_byte) ((word >> 16) & 0xff);
2400 *p++ = (gdb_byte) ((word >> 8) & 0xff);
2401 *p++ = (gdb_byte) (word & 0xff);
2402 }
2403
2404 /* Implied "Finish" to terminate the list. */
2405 *p++ = 0xb0;
2406 }
2407
2408 /* Push entry onto vector. They are guaranteed to always
2409 appear in order of increasing addresses. */
2410 new_exidx_entry.addr = idx;
2411 new_exidx_entry.entry = entry;
2412 VEC_safe_push (arm_exidx_entry_s,
2413 data->section_maps[sec->the_bfd_section->index],
2414 &new_exidx_entry);
2415 }
2416
2417 do_cleanups (cleanups);
2418 }
2419
2420 /* Search for the exception table entry covering MEMADDR. If one is found,
2421 return a pointer to its data. Otherwise, return 0. If START is non-NULL,
2422 set *START to the start of the region covered by this entry. */
2423
2424 static gdb_byte *
2425 arm_find_exidx_entry (CORE_ADDR memaddr, CORE_ADDR *start)
2426 {
2427 struct obj_section *sec;
2428
2429 sec = find_pc_section (memaddr);
2430 if (sec != NULL)
2431 {
2432 struct arm_exidx_data *data;
2433 VEC(arm_exidx_entry_s) *map;
2434 struct arm_exidx_entry map_key = { memaddr - obj_section_addr (sec), 0 };
2435 unsigned int idx;
2436
2437 data = objfile_data (sec->objfile, arm_exidx_data_key);
2438 if (data != NULL)
2439 {
2440 map = data->section_maps[sec->the_bfd_section->index];
2441 if (!VEC_empty (arm_exidx_entry_s, map))
2442 {
2443 struct arm_exidx_entry *map_sym;
2444
2445 idx = VEC_lower_bound (arm_exidx_entry_s, map, &map_key,
2446 arm_compare_exidx_entries);
2447
2448 /* VEC_lower_bound finds the earliest ordered insertion
2449 point. If the following symbol starts at this exact
2450 address, we use that; otherwise, the preceding
2451 exception table entry covers this address. */
2452 if (idx < VEC_length (arm_exidx_entry_s, map))
2453 {
2454 map_sym = VEC_index (arm_exidx_entry_s, map, idx);
2455 if (map_sym->addr == map_key.addr)
2456 {
2457 if (start)
2458 *start = map_sym->addr + obj_section_addr (sec);
2459 return map_sym->entry;
2460 }
2461 }
2462
2463 if (idx > 0)
2464 {
2465 map_sym = VEC_index (arm_exidx_entry_s, map, idx - 1);
2466 if (start)
2467 *start = map_sym->addr + obj_section_addr (sec);
2468 return map_sym->entry;
2469 }
2470 }
2471 }
2472 }
2473
2474 return NULL;
2475 }
2476
2477 /* Given the current frame THIS_FRAME, and its associated frame unwinding
2478 instruction list from the ARM exception table entry ENTRY, allocate and
2479 return a prologue cache structure describing how to unwind this frame.
2480
2481 Return NULL if the unwinding instruction list contains a "spare",
2482 "reserved" or "refuse to unwind" instruction as defined in section
2483 "9.3 Frame unwinding instructions" of the "Exception Handling ABI
2484 for the ARM Architecture" document. */
2485
2486 static struct arm_prologue_cache *
2487 arm_exidx_fill_cache (struct frame_info *this_frame, gdb_byte *entry)
2488 {
2489 CORE_ADDR vsp = 0;
2490 int vsp_valid = 0;
2491
2492 struct arm_prologue_cache *cache;
2493 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2494 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2495
2496 for (;;)
2497 {
2498 gdb_byte insn;
2499
2500 /* Whenever we reload SP, we actually have to retrieve its
2501 actual value in the current frame. */
2502 if (!vsp_valid)
2503 {
2504 if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2505 {
2506 int reg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2507 vsp = get_frame_register_unsigned (this_frame, reg);
2508 }
2509 else
2510 {
2511 CORE_ADDR addr = cache->saved_regs[ARM_SP_REGNUM].addr;
2512 vsp = get_frame_memory_unsigned (this_frame, addr, 4);
2513 }
2514
2515 vsp_valid = 1;
2516 }
2517
2518 /* Decode next unwind instruction. */
2519 insn = *entry++;
2520
2521 if ((insn & 0xc0) == 0)
2522 {
2523 int offset = insn & 0x3f;
2524 vsp += (offset << 2) + 4;
2525 }
2526 else if ((insn & 0xc0) == 0x40)
2527 {
2528 int offset = insn & 0x3f;
2529 vsp -= (offset << 2) + 4;
2530 }
2531 else if ((insn & 0xf0) == 0x80)
2532 {
2533 int mask = ((insn & 0xf) << 8) | *entry++;
2534 int i;
2535
2536 /* The special case of an all-zero mask identifies
2537 "Refuse to unwind". We return NULL to fall back
2538 to the prologue analyzer. */
2539 if (mask == 0)
2540 return NULL;
2541
2542 /* Pop registers r4..r15 under mask. */
2543 for (i = 0; i < 12; i++)
2544 if (mask & (1 << i))
2545 {
2546 cache->saved_regs[4 + i].addr = vsp;
2547 vsp += 4;
2548 }
2549
2550 /* Special-case popping SP -- we need to reload vsp. */
2551 if (mask & (1 << (ARM_SP_REGNUM - 4)))
2552 vsp_valid = 0;
2553 }
2554 else if ((insn & 0xf0) == 0x90)
2555 {
2556 int reg = insn & 0xf;
2557
2558 /* Reserved cases. */
2559 if (reg == ARM_SP_REGNUM || reg == ARM_PC_REGNUM)
2560 return NULL;
2561
2562 /* Set SP from another register and mark VSP for reload. */
2563 cache->saved_regs[ARM_SP_REGNUM] = cache->saved_regs[reg];
2564 vsp_valid = 0;
2565 }
2566 else if ((insn & 0xf0) == 0xa0)
2567 {
2568 int count = insn & 0x7;
2569 int pop_lr = (insn & 0x8) != 0;
2570 int i;
2571
2572 /* Pop r4..r[4+count]. */
2573 for (i = 0; i <= count; i++)
2574 {
2575 cache->saved_regs[4 + i].addr = vsp;
2576 vsp += 4;
2577 }
2578
2579 /* If indicated by flag, pop LR as well. */
2580 if (pop_lr)
2581 {
2582 cache->saved_regs[ARM_LR_REGNUM].addr = vsp;
2583 vsp += 4;
2584 }
2585 }
2586 else if (insn == 0xb0)
2587 {
2588 /* We could only have updated PC by popping into it; if so, it
2589 will show up as address. Otherwise, copy LR into PC. */
2590 if (!trad_frame_addr_p (cache->saved_regs, ARM_PC_REGNUM))
2591 cache->saved_regs[ARM_PC_REGNUM]
2592 = cache->saved_regs[ARM_LR_REGNUM];
2593
2594 /* We're done. */
2595 break;
2596 }
2597 else if (insn == 0xb1)
2598 {
2599 int mask = *entry++;
2600 int i;
2601
2602 /* All-zero mask and mask >= 16 is "spare". */
2603 if (mask == 0 || mask >= 16)
2604 return NULL;
2605
2606 /* Pop r0..r3 under mask. */
2607 for (i = 0; i < 4; i++)
2608 if (mask & (1 << i))
2609 {
2610 cache->saved_regs[i].addr = vsp;
2611 vsp += 4;
2612 }
2613 }
2614 else if (insn == 0xb2)
2615 {
2616 ULONGEST offset = 0;
2617 unsigned shift = 0;
2618
2619 do
2620 {
2621 offset |= (*entry & 0x7f) << shift;
2622 shift += 7;
2623 }
2624 while (*entry++ & 0x80);
2625
2626 vsp += 0x204 + (offset << 2);
2627 }
2628 else if (insn == 0xb3)
2629 {
2630 int start = *entry >> 4;
2631 int count = (*entry++) & 0xf;
2632 int i;
2633
2634 /* Only registers D0..D15 are valid here. */
2635 if (start + count >= 16)
2636 return NULL;
2637
2638 /* Pop VFP double-precision registers D[start]..D[start+count]. */
2639 for (i = 0; i <= count; i++)
2640 {
2641 cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2642 vsp += 8;
2643 }
2644
2645 /* Add an extra 4 bytes for FSTMFDX-style stack. */
2646 vsp += 4;
2647 }
2648 else if ((insn & 0xf8) == 0xb8)
2649 {
2650 int count = insn & 0x7;
2651 int i;
2652
2653 /* Pop VFP double-precision registers D[8]..D[8+count]. */
2654 for (i = 0; i <= count; i++)
2655 {
2656 cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2657 vsp += 8;
2658 }
2659
2660 /* Add an extra 4 bytes for FSTMFDX-style stack. */
2661 vsp += 4;
2662 }
2663 else if (insn == 0xc6)
2664 {
2665 int start = *entry >> 4;
2666 int count = (*entry++) & 0xf;
2667 int i;
2668
2669 /* Only registers WR0..WR15 are valid. */
2670 if (start + count >= 16)
2671 return NULL;
2672
2673 /* Pop iwmmx registers WR[start]..WR[start+count]. */
2674 for (i = 0; i <= count; i++)
2675 {
2676 cache->saved_regs[ARM_WR0_REGNUM + start + i].addr = vsp;
2677 vsp += 8;
2678 }
2679 }
2680 else if (insn == 0xc7)
2681 {
2682 int mask = *entry++;
2683 int i;
2684
2685 /* All-zero mask and mask >= 16 is "spare". */
2686 if (mask == 0 || mask >= 16)
2687 return NULL;
2688
2689 /* Pop iwmmx general-purpose registers WCGR0..WCGR3 under mask. */
2690 for (i = 0; i < 4; i++)
2691 if (mask & (1 << i))
2692 {
2693 cache->saved_regs[ARM_WCGR0_REGNUM + i].addr = vsp;
2694 vsp += 4;
2695 }
2696 }
2697 else if ((insn & 0xf8) == 0xc0)
2698 {
2699 int count = insn & 0x7;
2700 int i;
2701
2702 /* Pop iwmmx registers WR[10]..WR[10+count]. */
2703 for (i = 0; i <= count; i++)
2704 {
2705 cache->saved_regs[ARM_WR0_REGNUM + 10 + i].addr = vsp;
2706 vsp += 8;
2707 }
2708 }
2709 else if (insn == 0xc8)
2710 {
2711 int start = *entry >> 4;
2712 int count = (*entry++) & 0xf;
2713 int i;
2714
2715 /* Only registers D0..D31 are valid. */
2716 if (start + count >= 16)
2717 return NULL;
2718
2719 /* Pop VFP double-precision registers
2720 D[16+start]..D[16+start+count]. */
2721 for (i = 0; i <= count; i++)
2722 {
2723 cache->saved_regs[ARM_D0_REGNUM + 16 + start + i].addr = vsp;
2724 vsp += 8;
2725 }
2726 }
2727 else if (insn == 0xc9)
2728 {
2729 int start = *entry >> 4;
2730 int count = (*entry++) & 0xf;
2731 int i;
2732
2733 /* Pop VFP double-precision registers D[start]..D[start+count]. */
2734 for (i = 0; i <= count; i++)
2735 {
2736 cache->saved_regs[ARM_D0_REGNUM + start + i].addr = vsp;
2737 vsp += 8;
2738 }
2739 }
2740 else if ((insn & 0xf8) == 0xd0)
2741 {
2742 int count = insn & 0x7;
2743 int i;
2744
2745 /* Pop VFP double-precision registers D[8]..D[8+count]. */
2746 for (i = 0; i <= count; i++)
2747 {
2748 cache->saved_regs[ARM_D0_REGNUM + 8 + i].addr = vsp;
2749 vsp += 8;
2750 }
2751 }
2752 else
2753 {
2754 /* Everything else is "spare". */
2755 return NULL;
2756 }
2757 }
2758
2759 /* If we restore SP from a register, assume this was the frame register.
2760 Otherwise just fall back to SP as frame register. */
2761 if (trad_frame_realreg_p (cache->saved_regs, ARM_SP_REGNUM))
2762 cache->framereg = cache->saved_regs[ARM_SP_REGNUM].realreg;
2763 else
2764 cache->framereg = ARM_SP_REGNUM;
2765
2766 /* Determine offset to previous frame. */
2767 cache->framesize
2768 = vsp - get_frame_register_unsigned (this_frame, cache->framereg);
2769
2770 /* We already got the previous SP. */
2771 cache->prev_sp = vsp;
2772
2773 return cache;
2774 }
2775
2776 /* Unwinding via ARM exception table entries. Note that the sniffer
2777 already computes a filled-in prologue cache, which is then used
2778 with the same arm_prologue_this_id and arm_prologue_prev_register
2779 routines also used for prologue-parsing based unwinding. */
2780
2781 static int
2782 arm_exidx_unwind_sniffer (const struct frame_unwind *self,
2783 struct frame_info *this_frame,
2784 void **this_prologue_cache)
2785 {
2786 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2787 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2788 CORE_ADDR addr_in_block, exidx_region, func_start;
2789 struct arm_prologue_cache *cache;
2790 gdb_byte *entry;
2791
2792 /* See if we have an ARM exception table entry covering this address. */
2793 addr_in_block = get_frame_address_in_block (this_frame);
2794 entry = arm_find_exidx_entry (addr_in_block, &exidx_region);
2795 if (!entry)
2796 return 0;
2797
2798 /* The ARM exception table does not describe unwind information
2799 for arbitrary PC values, but is guaranteed to be correct only
2800 at call sites. We have to decide here whether we want to use
2801 ARM exception table information for this frame, or fall back
2802 to using prologue parsing. (Note that if we have DWARF CFI,
2803 this sniffer isn't even called -- CFI is always preferred.)
2804
2805 Before we make this decision, however, we check whether we
2806 actually have *symbol* information for the current frame.
2807 If not, prologue parsing would not work anyway, so we might
2808 as well use the exception table and hope for the best. */
2809 if (find_pc_partial_function (addr_in_block, NULL, &func_start, NULL))
2810 {
2811 int exc_valid = 0;
2812
2813 /* If the next frame is "normal", we are at a call site in this
2814 frame, so exception information is guaranteed to be valid. */
2815 if (get_next_frame (this_frame)
2816 && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME)
2817 exc_valid = 1;
2818
2819 /* We also assume exception information is valid if we're currently
2820 blocked in a system call. The system library is supposed to
2821 ensure this, so that e.g. pthread cancellation works. */
2822 if (arm_frame_is_thumb (this_frame))
2823 {
2824 LONGEST insn;
2825
2826 if (safe_read_memory_integer (get_frame_pc (this_frame) - 2, 2,
2827 byte_order_for_code, &insn)
2828 && (insn & 0xff00) == 0xdf00 /* svc */)
2829 exc_valid = 1;
2830 }
2831 else
2832 {
2833 LONGEST insn;
2834
2835 if (safe_read_memory_integer (get_frame_pc (this_frame) - 4, 4,
2836 byte_order_for_code, &insn)
2837 && (insn & 0x0f000000) == 0x0f000000 /* svc */)
2838 exc_valid = 1;
2839 }
2840
2841 /* Bail out if we don't know that exception information is valid. */
2842 if (!exc_valid)
2843 return 0;
2844
2845 /* The ARM exception index does not mark the *end* of the region
2846 covered by the entry, and some functions will not have any entry.
2847 To correctly recognize the end of the covered region, the linker
2848 should have inserted dummy records with a CANTUNWIND marker.
2849
2850 Unfortunately, current versions of GNU ld do not reliably do
2851 this, and thus we may have found an incorrect entry above.
2852 As a (temporary) sanity check, we only use the entry if it
2853 lies *within* the bounds of the function. Note that this check
2854 might reject perfectly valid entries that just happen to cover
2855 multiple functions; therefore this check ought to be removed
2856 once the linker is fixed. */
2857 if (func_start > exidx_region)
2858 return 0;
2859 }
2860
2861 /* Decode the list of unwinding instructions into a prologue cache.
2862 Note that this may fail due to e.g. a "refuse to unwind" code. */
2863 cache = arm_exidx_fill_cache (this_frame, entry);
2864 if (!cache)
2865 return 0;
2866
2867 *this_prologue_cache = cache;
2868 return 1;
2869 }
2870
2871 struct frame_unwind arm_exidx_unwind = {
2872 NORMAL_FRAME,
2873 default_frame_unwind_stop_reason,
2874 arm_prologue_this_id,
2875 arm_prologue_prev_register,
2876 NULL,
2877 arm_exidx_unwind_sniffer
2878 };
2879
2880 /* Recognize GCC's trampoline for thumb call-indirect. If we are in a
2881 trampoline, return the target PC. Otherwise return 0.
2882
2883 void call0a (char c, short s, int i, long l) {}
2884
2885 int main (void)
2886 {
2887 (*pointer_to_call0a) (c, s, i, l);
2888 }
2889
2890 Instead of calling a stub library function _call_via_xx (xx is
2891 the register name), GCC may inline the trampoline in the object
2892 file as below (register r2 has the address of call0a).
2893
2894 .global main
2895 .type main, %function
2896 ...
2897 bl .L1
2898 ...
2899 .size main, .-main
2900
2901 .L1:
2902 bx r2
2903
2904 The trampoline 'bx r2' doesn't belong to main. */
2905
2906 static CORE_ADDR
2907 arm_skip_bx_reg (struct frame_info *frame, CORE_ADDR pc)
2908 {
2909 /* The heuristics of recognizing such trampoline is that FRAME is
2910 executing in Thumb mode and the instruction on PC is 'bx Rm'. */
2911 if (arm_frame_is_thumb (frame))
2912 {
2913 gdb_byte buf[2];
2914
2915 if (target_read_memory (pc, buf, 2) == 0)
2916 {
2917 struct gdbarch *gdbarch = get_frame_arch (frame);
2918 enum bfd_endian byte_order_for_code
2919 = gdbarch_byte_order_for_code (gdbarch);
2920 uint16_t insn
2921 = extract_unsigned_integer (buf, 2, byte_order_for_code);
2922
2923 if ((insn & 0xff80) == 0x4700) /* bx <Rm> */
2924 {
2925 CORE_ADDR dest
2926 = get_frame_register_unsigned (frame, bits (insn, 3, 6));
2927
2928 /* Clear the LSB so that gdb core sets step-resume
2929 breakpoint at the right address. */
2930 return UNMAKE_THUMB_ADDR (dest);
2931 }
2932 }
2933 }
2934
2935 return 0;
2936 }
2937
2938 static struct arm_prologue_cache *
2939 arm_make_stub_cache (struct frame_info *this_frame)
2940 {
2941 struct arm_prologue_cache *cache;
2942
2943 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
2944 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2945
2946 cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
2947
2948 return cache;
2949 }
2950
2951 /* Our frame ID for a stub frame is the current SP and LR. */
2952
2953 static void
2954 arm_stub_this_id (struct frame_info *this_frame,
2955 void **this_cache,
2956 struct frame_id *this_id)
2957 {
2958 struct arm_prologue_cache *cache;
2959
2960 if (*this_cache == NULL)
2961 *this_cache = arm_make_stub_cache (this_frame);
2962 cache = *this_cache;
2963
2964 *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
2965 }
2966
2967 static int
2968 arm_stub_unwind_sniffer (const struct frame_unwind *self,
2969 struct frame_info *this_frame,
2970 void **this_prologue_cache)
2971 {
2972 CORE_ADDR addr_in_block;
2973 gdb_byte dummy[4];
2974 CORE_ADDR pc, start_addr;
2975 const char *name;
2976
2977 addr_in_block = get_frame_address_in_block (this_frame);
2978 pc = get_frame_pc (this_frame);
2979 if (in_plt_section (addr_in_block)
2980 /* We also use the stub winder if the target memory is unreadable
2981 to avoid having the prologue unwinder trying to read it. */
2982 || target_read_memory (pc, dummy, 4) != 0)
2983 return 1;
2984
2985 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0
2986 && arm_skip_bx_reg (this_frame, pc) != 0)
2987 return 1;
2988
2989 return 0;
2990 }
2991
2992 struct frame_unwind arm_stub_unwind = {
2993 NORMAL_FRAME,
2994 default_frame_unwind_stop_reason,
2995 arm_stub_this_id,
2996 arm_prologue_prev_register,
2997 NULL,
2998 arm_stub_unwind_sniffer
2999 };
3000
3001 /* Put here the code to store, into CACHE->saved_regs, the addresses
3002 of the saved registers of frame described by THIS_FRAME. CACHE is
3003 returned. */
3004
3005 static struct arm_prologue_cache *
3006 arm_m_exception_cache (struct frame_info *this_frame)
3007 {
3008 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3009 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3010 struct arm_prologue_cache *cache;
3011 CORE_ADDR unwound_sp;
3012 LONGEST xpsr;
3013
3014 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
3015 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3016
3017 unwound_sp = get_frame_register_unsigned (this_frame,
3018 ARM_SP_REGNUM);
3019
3020 /* The hardware saves eight 32-bit words, comprising xPSR,
3021 ReturnAddress, LR (R14), R12, R3, R2, R1, R0. See details in
3022 "B1.5.6 Exception entry behavior" in
3023 "ARMv7-M Architecture Reference Manual". */
3024 cache->saved_regs[0].addr = unwound_sp;
3025 cache->saved_regs[1].addr = unwound_sp + 4;
3026 cache->saved_regs[2].addr = unwound_sp + 8;
3027 cache->saved_regs[3].addr = unwound_sp + 12;
3028 cache->saved_regs[12].addr = unwound_sp + 16;
3029 cache->saved_regs[14].addr = unwound_sp + 20;
3030 cache->saved_regs[15].addr = unwound_sp + 24;
3031 cache->saved_regs[ARM_PS_REGNUM].addr = unwound_sp + 28;
3032
3033 /* If bit 9 of the saved xPSR is set, then there is a four-byte
3034 aligner between the top of the 32-byte stack frame and the
3035 previous context's stack pointer. */
3036 cache->prev_sp = unwound_sp + 32;
3037 if (safe_read_memory_integer (unwound_sp + 28, 4, byte_order, &xpsr)
3038 && (xpsr & (1 << 9)) != 0)
3039 cache->prev_sp += 4;
3040
3041 return cache;
3042 }
3043
3044 /* Implementation of function hook 'this_id' in
3045 'struct frame_uwnind'. */
3046
3047 static void
3048 arm_m_exception_this_id (struct frame_info *this_frame,
3049 void **this_cache,
3050 struct frame_id *this_id)
3051 {
3052 struct arm_prologue_cache *cache;
3053
3054 if (*this_cache == NULL)
3055 *this_cache = arm_m_exception_cache (this_frame);
3056 cache = *this_cache;
3057
3058 /* Our frame ID for a stub frame is the current SP and LR. */
3059 *this_id = frame_id_build (cache->prev_sp,
3060 get_frame_pc (this_frame));
3061 }
3062
3063 /* Implementation of function hook 'prev_register' in
3064 'struct frame_uwnind'. */
3065
3066 static struct value *
3067 arm_m_exception_prev_register (struct frame_info *this_frame,
3068 void **this_cache,
3069 int prev_regnum)
3070 {
3071 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3072 struct arm_prologue_cache *cache;
3073
3074 if (*this_cache == NULL)
3075 *this_cache = arm_m_exception_cache (this_frame);
3076 cache = *this_cache;
3077
3078 /* The value was already reconstructed into PREV_SP. */
3079 if (prev_regnum == ARM_SP_REGNUM)
3080 return frame_unwind_got_constant (this_frame, prev_regnum,
3081 cache->prev_sp);
3082
3083 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
3084 prev_regnum);
3085 }
3086
3087 /* Implementation of function hook 'sniffer' in
3088 'struct frame_uwnind'. */
3089
3090 static int
3091 arm_m_exception_unwind_sniffer (const struct frame_unwind *self,
3092 struct frame_info *this_frame,
3093 void **this_prologue_cache)
3094 {
3095 CORE_ADDR this_pc = get_frame_pc (this_frame);
3096
3097 /* No need to check is_m; this sniffer is only registered for
3098 M-profile architectures. */
3099
3100 /* Exception frames return to one of these magic PCs. Other values
3101 are not defined as of v7-M. See details in "B1.5.8 Exception
3102 return behavior" in "ARMv7-M Architecture Reference Manual". */
3103 if (this_pc == 0xfffffff1 || this_pc == 0xfffffff9
3104 || this_pc == 0xfffffffd)
3105 return 1;
3106
3107 return 0;
3108 }
3109
3110 /* Frame unwinder for M-profile exceptions. */
3111
3112 struct frame_unwind arm_m_exception_unwind =
3113 {
3114 SIGTRAMP_FRAME,
3115 default_frame_unwind_stop_reason,
3116 arm_m_exception_this_id,
3117 arm_m_exception_prev_register,
3118 NULL,
3119 arm_m_exception_unwind_sniffer
3120 };
3121
3122 static CORE_ADDR
3123 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
3124 {
3125 struct arm_prologue_cache *cache;
3126
3127 if (*this_cache == NULL)
3128 *this_cache = arm_make_prologue_cache (this_frame);
3129 cache = *this_cache;
3130
3131 return cache->prev_sp - cache->framesize;
3132 }
3133
3134 struct frame_base arm_normal_base = {
3135 &arm_prologue_unwind,
3136 arm_normal_frame_base,
3137 arm_normal_frame_base,
3138 arm_normal_frame_base
3139 };
3140
3141 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
3142 dummy frame. The frame ID's base needs to match the TOS value
3143 saved by save_dummy_frame_tos() and returned from
3144 arm_push_dummy_call, and the PC needs to match the dummy frame's
3145 breakpoint. */
3146
3147 static struct frame_id
3148 arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3149 {
3150 return frame_id_build (get_frame_register_unsigned (this_frame,
3151 ARM_SP_REGNUM),
3152 get_frame_pc (this_frame));
3153 }
3154
3155 /* Given THIS_FRAME, find the previous frame's resume PC (which will
3156 be used to construct the previous frame's ID, after looking up the
3157 containing function). */
3158
3159 static CORE_ADDR
3160 arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
3161 {
3162 CORE_ADDR pc;
3163 pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
3164 return arm_addr_bits_remove (gdbarch, pc);
3165 }
3166
3167 static CORE_ADDR
3168 arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
3169 {
3170 return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
3171 }
3172
3173 static struct value *
3174 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
3175 int regnum)
3176 {
3177 struct gdbarch * gdbarch = get_frame_arch (this_frame);
3178 CORE_ADDR lr, cpsr;
3179 ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
3180
3181 switch (regnum)
3182 {
3183 case ARM_PC_REGNUM:
3184 /* The PC is normally copied from the return column, which
3185 describes saves of LR. However, that version may have an
3186 extra bit set to indicate Thumb state. The bit is not
3187 part of the PC. */
3188 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3189 return frame_unwind_got_constant (this_frame, regnum,
3190 arm_addr_bits_remove (gdbarch, lr));
3191
3192 case ARM_PS_REGNUM:
3193 /* Reconstruct the T bit; see arm_prologue_prev_register for details. */
3194 cpsr = get_frame_register_unsigned (this_frame, regnum);
3195 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
3196 if (IS_THUMB_ADDR (lr))
3197 cpsr |= t_bit;
3198 else
3199 cpsr &= ~t_bit;
3200 return frame_unwind_got_constant (this_frame, regnum, cpsr);
3201
3202 default:
3203 internal_error (__FILE__, __LINE__,
3204 _("Unexpected register %d"), regnum);
3205 }
3206 }
3207
3208 static void
3209 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
3210 struct dwarf2_frame_state_reg *reg,
3211 struct frame_info *this_frame)
3212 {
3213 switch (regnum)
3214 {
3215 case ARM_PC_REGNUM:
3216 case ARM_PS_REGNUM:
3217 reg->how = DWARF2_FRAME_REG_FN;
3218 reg->loc.fn = arm_dwarf2_prev_register;
3219 break;
3220 case ARM_SP_REGNUM:
3221 reg->how = DWARF2_FRAME_REG_CFA;
3222 break;
3223 }
3224 }
3225
3226 /* Implement the stack_frame_destroyed_p gdbarch method. */
3227
3228 static int
3229 thumb_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3230 {
3231 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3232 unsigned int insn, insn2;
3233 int found_return = 0, found_stack_adjust = 0;
3234 CORE_ADDR func_start, func_end;
3235 CORE_ADDR scan_pc;
3236 gdb_byte buf[4];
3237
3238 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3239 return 0;
3240
3241 /* The epilogue is a sequence of instructions along the following lines:
3242
3243 - add stack frame size to SP or FP
3244 - [if frame pointer used] restore SP from FP
3245 - restore registers from SP [may include PC]
3246 - a return-type instruction [if PC wasn't already restored]
3247
3248 In a first pass, we scan forward from the current PC and verify the
3249 instructions we find as compatible with this sequence, ending in a
3250 return instruction.
3251
3252 However, this is not sufficient to distinguish indirect function calls
3253 within a function from indirect tail calls in the epilogue in some cases.
3254 Therefore, if we didn't already find any SP-changing instruction during
3255 forward scan, we add a backward scanning heuristic to ensure we actually
3256 are in the epilogue. */
3257
3258 scan_pc = pc;
3259 while (scan_pc < func_end && !found_return)
3260 {
3261 if (target_read_memory (scan_pc, buf, 2))
3262 break;
3263
3264 scan_pc += 2;
3265 insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3266
3267 if ((insn & 0xff80) == 0x4700) /* bx <Rm> */
3268 found_return = 1;
3269 else if (insn == 0x46f7) /* mov pc, lr */
3270 found_return = 1;
3271 else if (thumb_instruction_restores_sp (insn))
3272 {
3273 if ((insn & 0xff00) == 0xbd00) /* pop <registers, PC> */
3274 found_return = 1;
3275 }
3276 else if (thumb_insn_size (insn) == 4) /* 32-bit Thumb-2 instruction */
3277 {
3278 if (target_read_memory (scan_pc, buf, 2))
3279 break;
3280
3281 scan_pc += 2;
3282 insn2 = extract_unsigned_integer (buf, 2, byte_order_for_code);
3283
3284 if (insn == 0xe8bd) /* ldm.w sp!, <registers> */
3285 {
3286 if (insn2 & 0x8000) /* <registers> include PC. */
3287 found_return = 1;
3288 }
3289 else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */
3290 && (insn2 & 0x0fff) == 0x0b04)
3291 {
3292 if ((insn2 & 0xf000) == 0xf000) /* <Rt> is PC. */
3293 found_return = 1;
3294 }
3295 else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */
3296 && (insn2 & 0x0e00) == 0x0a00)
3297 ;
3298 else
3299 break;
3300 }
3301 else
3302 break;
3303 }
3304
3305 if (!found_return)
3306 return 0;
3307
3308 /* Since any instruction in the epilogue sequence, with the possible
3309 exception of return itself, updates the stack pointer, we need to
3310 scan backwards for at most one instruction. Try either a 16-bit or
3311 a 32-bit instruction. This is just a heuristic, so we do not worry
3312 too much about false positives. */
3313
3314 if (pc - 4 < func_start)
3315 return 0;
3316 if (target_read_memory (pc - 4, buf, 4))
3317 return 0;
3318
3319 insn = extract_unsigned_integer (buf, 2, byte_order_for_code);
3320 insn2 = extract_unsigned_integer (buf + 2, 2, byte_order_for_code);
3321
3322 if (thumb_instruction_restores_sp (insn2))
3323 found_stack_adjust = 1;
3324 else if (insn == 0xe8bd) /* ldm.w sp!, <registers> */
3325 found_stack_adjust = 1;
3326 else if (insn == 0xf85d /* ldr.w <Rt>, [sp], #4 */
3327 && (insn2 & 0x0fff) == 0x0b04)
3328 found_stack_adjust = 1;
3329 else if ((insn & 0xffbf) == 0xecbd /* vldm sp!, <list> */
3330 && (insn2 & 0x0e00) == 0x0a00)
3331 found_stack_adjust = 1;
3332
3333 return found_stack_adjust;
3334 }
3335
3336 /* Implement the stack_frame_destroyed_p gdbarch method. */
3337
3338 static int
3339 arm_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
3340 {
3341 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
3342 unsigned int insn;
3343 int found_return;
3344 CORE_ADDR func_start, func_end;
3345
3346 if (arm_pc_is_thumb (gdbarch, pc))
3347 return thumb_stack_frame_destroyed_p (gdbarch, pc);
3348
3349 if (!find_pc_partial_function (pc, NULL, &func_start, &func_end))
3350 return 0;
3351
3352 /* We are in the epilogue if the previous instruction was a stack
3353 adjustment and the next instruction is a possible return (bx, mov
3354 pc, or pop). We could have to scan backwards to find the stack
3355 adjustment, or forwards to find the return, but this is a decent
3356 approximation. First scan forwards. */
3357
3358 found_return = 0;
3359 insn = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
3360 if (bits (insn, 28, 31) != INST_NV)
3361 {
3362 if ((insn & 0x0ffffff0) == 0x012fff10)
3363 /* BX. */
3364 found_return = 1;
3365 else if ((insn & 0x0ffffff0) == 0x01a0f000)
3366 /* MOV PC. */
3367 found_return = 1;
3368 else if ((insn & 0x0fff0000) == 0x08bd0000
3369 && (insn & 0x0000c000) != 0)
3370 /* POP (LDMIA), including PC or LR. */
3371 found_return = 1;
3372 }
3373
3374 if (!found_return)
3375 return 0;
3376
3377 /* Scan backwards. This is just a heuristic, so do not worry about
3378 false positives from mode changes. */
3379
3380 if (pc < func_start + 4)
3381 return 0;
3382
3383 insn = read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
3384 if (arm_instruction_restores_sp (insn))
3385 return 1;
3386
3387 return 0;
3388 }
3389
3390
3391 /* When arguments must be pushed onto the stack, they go on in reverse
3392 order. The code below implements a FILO (stack) to do this. */
3393
3394 struct stack_item
3395 {
3396 int len;
3397 struct stack_item *prev;
3398 void *data;
3399 };
3400
3401 static struct stack_item *
3402 push_stack_item (struct stack_item *prev, const void *contents, int len)
3403 {
3404 struct stack_item *si;
3405 si = XNEW (struct stack_item);
3406 si->data = xmalloc (len);
3407 si->len = len;
3408 si->prev = prev;
3409 memcpy (si->data, contents, len);
3410 return si;
3411 }
3412
3413 static struct stack_item *
3414 pop_stack_item (struct stack_item *si)
3415 {
3416 struct stack_item *dead = si;
3417 si = si->prev;
3418 xfree (dead->data);
3419 xfree (dead);
3420 return si;
3421 }
3422
3423
3424 /* Return the alignment (in bytes) of the given type. */
3425
3426 static int
3427 arm_type_align (struct type *t)
3428 {
3429 int n;
3430 int align;
3431 int falign;
3432
3433 t = check_typedef (t);
3434 switch (TYPE_CODE (t))
3435 {
3436 default:
3437 /* Should never happen. */
3438 internal_error (__FILE__, __LINE__, _("unknown type alignment"));
3439 return 4;
3440
3441 case TYPE_CODE_PTR:
3442 case TYPE_CODE_ENUM:
3443 case TYPE_CODE_INT:
3444 case TYPE_CODE_FLT:
3445 case TYPE_CODE_SET:
3446 case TYPE_CODE_RANGE:
3447 case TYPE_CODE_REF:
3448 case TYPE_CODE_CHAR:
3449 case TYPE_CODE_BOOL:
3450 return TYPE_LENGTH (t);
3451
3452 case TYPE_CODE_ARRAY:
3453 case TYPE_CODE_COMPLEX:
3454 /* TODO: What about vector types? */
3455 return arm_type_align (TYPE_TARGET_TYPE (t));
3456
3457 case TYPE_CODE_STRUCT:
3458 case TYPE_CODE_UNION:
3459 align = 1;
3460 for (n = 0; n < TYPE_NFIELDS (t); n++)
3461 {
3462 falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
3463 if (falign > align)
3464 align = falign;
3465 }
3466 return align;
3467 }
3468 }
3469
3470 /* Possible base types for a candidate for passing and returning in
3471 VFP registers. */
3472
3473 enum arm_vfp_cprc_base_type
3474 {
3475 VFP_CPRC_UNKNOWN,
3476 VFP_CPRC_SINGLE,
3477 VFP_CPRC_DOUBLE,
3478 VFP_CPRC_VEC64,
3479 VFP_CPRC_VEC128
3480 };
3481
3482 /* The length of one element of base type B. */
3483
3484 static unsigned
3485 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
3486 {
3487 switch (b)
3488 {
3489 case VFP_CPRC_SINGLE:
3490 return 4;
3491 case VFP_CPRC_DOUBLE:
3492 return 8;
3493 case VFP_CPRC_VEC64:
3494 return 8;
3495 case VFP_CPRC_VEC128:
3496 return 16;
3497 default:
3498 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3499 (int) b);
3500 }
3501 }
3502
3503 /* The character ('s', 'd' or 'q') for the type of VFP register used
3504 for passing base type B. */
3505
3506 static int
3507 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
3508 {
3509 switch (b)
3510 {
3511 case VFP_CPRC_SINGLE:
3512 return 's';
3513 case VFP_CPRC_DOUBLE:
3514 return 'd';
3515 case VFP_CPRC_VEC64:
3516 return 'd';
3517 case VFP_CPRC_VEC128:
3518 return 'q';
3519 default:
3520 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
3521 (int) b);
3522 }
3523 }
3524
3525 /* Determine whether T may be part of a candidate for passing and
3526 returning in VFP registers, ignoring the limit on the total number
3527 of components. If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
3528 classification of the first valid component found; if it is not
3529 VFP_CPRC_UNKNOWN, all components must have the same classification
3530 as *BASE_TYPE. If it is found that T contains a type not permitted
3531 for passing and returning in VFP registers, a type differently
3532 classified from *BASE_TYPE, or two types differently classified
3533 from each other, return -1, otherwise return the total number of
3534 base-type elements found (possibly 0 in an empty structure or
3535 array). Vector types are not currently supported, matching the
3536 generic AAPCS support. */
3537
3538 static int
3539 arm_vfp_cprc_sub_candidate (struct type *t,
3540 enum arm_vfp_cprc_base_type *base_type)
3541 {
3542 t = check_typedef (t);
3543 switch (TYPE_CODE (t))
3544 {
3545 case TYPE_CODE_FLT:
3546 switch (TYPE_LENGTH (t))
3547 {
3548 case 4:
3549 if (*base_type == VFP_CPRC_UNKNOWN)
3550 *base_type = VFP_CPRC_SINGLE;
3551 else if (*base_type != VFP_CPRC_SINGLE)
3552 return -1;
3553 return 1;
3554
3555 case 8:
3556 if (*base_type == VFP_CPRC_UNKNOWN)
3557 *base_type = VFP_CPRC_DOUBLE;
3558 else if (*base_type != VFP_CPRC_DOUBLE)
3559 return -1;
3560 return 1;
3561
3562 default:
3563 return -1;
3564 }
3565 break;
3566
3567 case TYPE_CODE_COMPLEX:
3568 /* Arguments of complex T where T is one of the types float or
3569 double get treated as if they are implemented as:
3570
3571 struct complexT
3572 {
3573 T real;
3574 T imag;
3575 };
3576
3577 */
3578 switch (TYPE_LENGTH (t))
3579 {
3580 case 8:
3581 if (*base_type == VFP_CPRC_UNKNOWN)
3582 *base_type = VFP_CPRC_SINGLE;
3583 else if (*base_type != VFP_CPRC_SINGLE)
3584 return -1;
3585 return 2;
3586
3587 case 16:
3588 if (*base_type == VFP_CPRC_UNKNOWN)
3589 *base_type = VFP_CPRC_DOUBLE;
3590 else if (*base_type != VFP_CPRC_DOUBLE)
3591 return -1;
3592 return 2;
3593
3594 default:
3595 return -1;
3596 }
3597 break;
3598
3599 case TYPE_CODE_ARRAY:
3600 {
3601 int count;
3602 unsigned unitlen;
3603 count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t), base_type);
3604 if (count == -1)
3605 return -1;
3606 if (TYPE_LENGTH (t) == 0)
3607 {
3608 gdb_assert (count == 0);
3609 return 0;
3610 }
3611 else if (count == 0)
3612 return -1;
3613 unitlen = arm_vfp_cprc_unit_length (*base_type);
3614 gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
3615 return TYPE_LENGTH (t) / unitlen;
3616 }
3617 break;
3618
3619 case TYPE_CODE_STRUCT:
3620 {
3621 int count = 0;
3622 unsigned unitlen;
3623 int i;
3624 for (i = 0; i < TYPE_NFIELDS (t); i++)
3625 {
3626 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3627 base_type);
3628 if (sub_count == -1)
3629 return -1;
3630 count += sub_count;
3631 }
3632 if (TYPE_LENGTH (t) == 0)
3633 {
3634 gdb_assert (count == 0);
3635 return 0;
3636 }
3637 else if (count == 0)
3638 return -1;
3639 unitlen = arm_vfp_cprc_unit_length (*base_type);
3640 if (TYPE_LENGTH (t) != unitlen * count)
3641 return -1;
3642 return count;
3643 }
3644
3645 case TYPE_CODE_UNION:
3646 {
3647 int count = 0;
3648 unsigned unitlen;
3649 int i;
3650 for (i = 0; i < TYPE_NFIELDS (t); i++)
3651 {
3652 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
3653 base_type);
3654 if (sub_count == -1)
3655 return -1;
3656 count = (count > sub_count ? count : sub_count);
3657 }
3658 if (TYPE_LENGTH (t) == 0)
3659 {
3660 gdb_assert (count == 0);
3661 return 0;
3662 }
3663 else if (count == 0)
3664 return -1;
3665 unitlen = arm_vfp_cprc_unit_length (*base_type);
3666 if (TYPE_LENGTH (t) != unitlen * count)
3667 return -1;
3668 return count;
3669 }
3670
3671 default:
3672 break;
3673 }
3674
3675 return -1;
3676 }
3677
3678 /* Determine whether T is a VFP co-processor register candidate (CPRC)
3679 if passed to or returned from a non-variadic function with the VFP
3680 ABI in effect. Return 1 if it is, 0 otherwise. If it is, set
3681 *BASE_TYPE to the base type for T and *COUNT to the number of
3682 elements of that base type before returning. */
3683
3684 static int
3685 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
3686 int *count)
3687 {
3688 enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
3689 int c = arm_vfp_cprc_sub_candidate (t, &b);
3690 if (c <= 0 || c > 4)
3691 return 0;
3692 *base_type = b;
3693 *count = c;
3694 return 1;
3695 }
3696
3697 /* Return 1 if the VFP ABI should be used for passing arguments to and
3698 returning values from a function of type FUNC_TYPE, 0
3699 otherwise. */
3700
3701 static int
3702 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
3703 {
3704 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3705 /* Variadic functions always use the base ABI. Assume that functions
3706 without debug info are not variadic. */
3707 if (func_type && TYPE_VARARGS (check_typedef (func_type)))
3708 return 0;
3709 /* The VFP ABI is only supported as a variant of AAPCS. */
3710 if (tdep->arm_abi != ARM_ABI_AAPCS)
3711 return 0;
3712 return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
3713 }
3714
3715 /* We currently only support passing parameters in integer registers, which
3716 conforms with GCC's default model, and VFP argument passing following
3717 the VFP variant of AAPCS. Several other variants exist and
3718 we should probably support some of them based on the selected ABI. */
3719
3720 static CORE_ADDR
3721 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3722 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
3723 struct value **args, CORE_ADDR sp, int struct_return,
3724 CORE_ADDR struct_addr)
3725 {
3726 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3727 int argnum;
3728 int argreg;
3729 int nstack;
3730 struct stack_item *si = NULL;
3731 int use_vfp_abi;
3732 struct type *ftype;
3733 unsigned vfp_regs_free = (1 << 16) - 1;
3734
3735 /* Determine the type of this function and whether the VFP ABI
3736 applies. */
3737 ftype = check_typedef (value_type (function));
3738 if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
3739 ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
3740 use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
3741
3742 /* Set the return address. For the ARM, the return breakpoint is
3743 always at BP_ADDR. */
3744 if (arm_pc_is_thumb (gdbarch, bp_addr))
3745 bp_addr |= 1;
3746 regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
3747
3748 /* Walk through the list of args and determine how large a temporary
3749 stack is required. Need to take care here as structs may be
3750 passed on the stack, and we have to push them. */
3751 nstack = 0;
3752
3753 argreg = ARM_A1_REGNUM;
3754 nstack = 0;
3755
3756 /* The struct_return pointer occupies the first parameter
3757 passing register. */
3758 if (struct_return)
3759 {
3760 if (arm_debug)
3761 fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
3762 gdbarch_register_name (gdbarch, argreg),
3763 paddress (gdbarch, struct_addr));
3764 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
3765 argreg++;
3766 }
3767
3768 for (argnum = 0; argnum < nargs; argnum++)
3769 {
3770 int len;
3771 struct type *arg_type;
3772 struct type *target_type;
3773 enum type_code typecode;
3774 const bfd_byte *val;
3775 int align;
3776 enum arm_vfp_cprc_base_type vfp_base_type;
3777 int vfp_base_count;
3778 int may_use_core_reg = 1;
3779
3780 arg_type = check_typedef (value_type (args[argnum]));
3781 len = TYPE_LENGTH (arg_type);
3782 target_type = TYPE_TARGET_TYPE (arg_type);
3783 typecode = TYPE_CODE (arg_type);
3784 val = value_contents (args[argnum]);
3785
3786 align = arm_type_align (arg_type);
3787 /* Round alignment up to a whole number of words. */
3788 align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
3789 /* Different ABIs have different maximum alignments. */
3790 if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
3791 {
3792 /* The APCS ABI only requires word alignment. */
3793 align = INT_REGISTER_SIZE;
3794 }
3795 else
3796 {
3797 /* The AAPCS requires at most doubleword alignment. */
3798 if (align > INT_REGISTER_SIZE * 2)
3799 align = INT_REGISTER_SIZE * 2;
3800 }
3801
3802 if (use_vfp_abi
3803 && arm_vfp_call_candidate (arg_type, &vfp_base_type,
3804 &vfp_base_count))
3805 {
3806 int regno;
3807 int unit_length;
3808 int shift;
3809 unsigned mask;
3810
3811 /* Because this is a CPRC it cannot go in a core register or
3812 cause a core register to be skipped for alignment.
3813 Either it goes in VFP registers and the rest of this loop
3814 iteration is skipped for this argument, or it goes on the
3815 stack (and the stack alignment code is correct for this
3816 case). */
3817 may_use_core_reg = 0;
3818
3819 unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
3820 shift = unit_length / 4;
3821 mask = (1 << (shift * vfp_base_count)) - 1;
3822 for (regno = 0; regno < 16; regno += shift)
3823 if (((vfp_regs_free >> regno) & mask) == mask)
3824 break;
3825
3826 if (regno < 16)
3827 {
3828 int reg_char;
3829 int reg_scaled;
3830 int i;
3831
3832 vfp_regs_free &= ~(mask << regno);
3833 reg_scaled = regno / shift;
3834 reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
3835 for (i = 0; i < vfp_base_count; i++)
3836 {
3837 char name_buf[4];
3838 int regnum;
3839 if (reg_char == 'q')
3840 arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
3841 val + i * unit_length);
3842 else
3843 {
3844 xsnprintf (name_buf, sizeof (name_buf), "%c%d",
3845 reg_char, reg_scaled + i);
3846 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
3847 strlen (name_buf));
3848 regcache_cooked_write (regcache, regnum,
3849 val + i * unit_length);
3850 }
3851 }
3852 continue;
3853 }
3854 else
3855 {
3856 /* This CPRC could not go in VFP registers, so all VFP
3857 registers are now marked as used. */
3858 vfp_regs_free = 0;
3859 }
3860 }
3861
3862 /* Push stack padding for dowubleword alignment. */
3863 if (nstack & (align - 1))
3864 {
3865 si = push_stack_item (si, val, INT_REGISTER_SIZE);
3866 nstack += INT_REGISTER_SIZE;
3867 }
3868
3869 /* Doubleword aligned quantities must go in even register pairs. */
3870 if (may_use_core_reg
3871 && argreg <= ARM_LAST_ARG_REGNUM
3872 && align > INT_REGISTER_SIZE
3873 && argreg & 1)
3874 argreg++;
3875
3876 /* If the argument is a pointer to a function, and it is a
3877 Thumb function, create a LOCAL copy of the value and set
3878 the THUMB bit in it. */
3879 if (TYPE_CODE_PTR == typecode
3880 && target_type != NULL
3881 && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
3882 {
3883 CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
3884 if (arm_pc_is_thumb (gdbarch, regval))
3885 {
3886 bfd_byte *copy = alloca (len);
3887 store_unsigned_integer (copy, len, byte_order,
3888 MAKE_THUMB_ADDR (regval));
3889 val = copy;
3890 }
3891 }
3892
3893 /* Copy the argument to general registers or the stack in
3894 register-sized pieces. Large arguments are split between
3895 registers and stack. */
3896 while (len > 0)
3897 {
3898 int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
3899
3900 if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
3901 {
3902 /* The argument is being passed in a general purpose
3903 register. */
3904 CORE_ADDR regval
3905 = extract_unsigned_integer (val, partial_len, byte_order);
3906 if (byte_order == BFD_ENDIAN_BIG)
3907 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
3908 if (arm_debug)
3909 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
3910 argnum,
3911 gdbarch_register_name
3912 (gdbarch, argreg),
3913 phex (regval, INT_REGISTER_SIZE));
3914 regcache_cooked_write_unsigned (regcache, argreg, regval);
3915 argreg++;
3916 }
3917 else
3918 {
3919 /* Push the arguments onto the stack. */
3920 if (arm_debug)
3921 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
3922 argnum, nstack);
3923 si = push_stack_item (si, val, INT_REGISTER_SIZE);
3924 nstack += INT_REGISTER_SIZE;
3925 }
3926
3927 len -= partial_len;
3928 val += partial_len;
3929 }
3930 }
3931 /* If we have an odd number of words to push, then decrement the stack
3932 by one word now, so first stack argument will be dword aligned. */
3933 if (nstack & 4)
3934 sp -= 4;
3935
3936 while (si)
3937 {
3938 sp -= si->len;
3939 write_memory (sp, si->data, si->len);
3940 si = pop_stack_item (si);
3941 }
3942
3943 /* Finally, update teh SP register. */
3944 regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
3945
3946 return sp;
3947 }
3948
3949
3950 /* Always align the frame to an 8-byte boundary. This is required on
3951 some platforms and harmless on the rest. */
3952
3953 static CORE_ADDR
3954 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3955 {
3956 /* Align the stack to eight bytes. */
3957 return sp & ~ (CORE_ADDR) 7;
3958 }
3959
3960 static void
3961 print_fpu_flags (struct ui_file *file, int flags)
3962 {
3963 if (flags & (1 << 0))
3964 fputs_filtered ("IVO ", file);
3965 if (flags & (1 << 1))
3966 fputs_filtered ("DVZ ", file);
3967 if (flags & (1 << 2))
3968 fputs_filtered ("OFL ", file);
3969 if (flags & (1 << 3))
3970 fputs_filtered ("UFL ", file);
3971 if (flags & (1 << 4))
3972 fputs_filtered ("INX ", file);
3973 fputc_filtered ('\n', file);
3974 }
3975
3976 /* Print interesting information about the floating point processor
3977 (if present) or emulator. */
3978 static void
3979 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
3980 struct frame_info *frame, const char *args)
3981 {
3982 unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
3983 int type;
3984
3985 type = (status >> 24) & 127;
3986 if (status & (1 << 31))
3987 fprintf_filtered (file, _("Hardware FPU type %d\n"), type);
3988 else
3989 fprintf_filtered (file, _("Software FPU type %d\n"), type);
3990 /* i18n: [floating point unit] mask */
3991 fputs_filtered (_("mask: "), file);
3992 print_fpu_flags (file, status >> 16);
3993 /* i18n: [floating point unit] flags */
3994 fputs_filtered (_("flags: "), file);
3995 print_fpu_flags (file, status);
3996 }
3997
3998 /* Construct the ARM extended floating point type. */
3999 static struct type *
4000 arm_ext_type (struct gdbarch *gdbarch)
4001 {
4002 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4003
4004 if (!tdep->arm_ext_type)
4005 tdep->arm_ext_type
4006 = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
4007 floatformats_arm_ext);
4008
4009 return tdep->arm_ext_type;
4010 }
4011
4012 static struct type *
4013 arm_neon_double_type (struct gdbarch *gdbarch)
4014 {
4015 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4016
4017 if (tdep->neon_double_type == NULL)
4018 {
4019 struct type *t, *elem;
4020
4021 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
4022 TYPE_CODE_UNION);
4023 elem = builtin_type (gdbarch)->builtin_uint8;
4024 append_composite_type_field (t, "u8", init_vector_type (elem, 8));
4025 elem = builtin_type (gdbarch)->builtin_uint16;
4026 append_composite_type_field (t, "u16", init_vector_type (elem, 4));
4027 elem = builtin_type (gdbarch)->builtin_uint32;
4028 append_composite_type_field (t, "u32", init_vector_type (elem, 2));
4029 elem = builtin_type (gdbarch)->builtin_uint64;
4030 append_composite_type_field (t, "u64", elem);
4031 elem = builtin_type (gdbarch)->builtin_float;
4032 append_composite_type_field (t, "f32", init_vector_type (elem, 2));
4033 elem = builtin_type (gdbarch)->builtin_double;
4034 append_composite_type_field (t, "f64", elem);
4035
4036 TYPE_VECTOR (t) = 1;
4037 TYPE_NAME (t) = "neon_d";
4038 tdep->neon_double_type = t;
4039 }
4040
4041 return tdep->neon_double_type;
4042 }
4043
4044 /* FIXME: The vector types are not correctly ordered on big-endian
4045 targets. Just as s0 is the low bits of d0, d0[0] is also the low
4046 bits of d0 - regardless of what unit size is being held in d0. So
4047 the offset of the first uint8 in d0 is 7, but the offset of the
4048 first float is 4. This code works as-is for little-endian
4049 targets. */
4050
4051 static struct type *
4052 arm_neon_quad_type (struct gdbarch *gdbarch)
4053 {
4054 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4055
4056 if (tdep->neon_quad_type == NULL)
4057 {
4058 struct type *t, *elem;
4059
4060 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
4061 TYPE_CODE_UNION);
4062 elem = builtin_type (gdbarch)->builtin_uint8;
4063 append_composite_type_field (t, "u8", init_vector_type (elem, 16));
4064 elem = builtin_type (gdbarch)->builtin_uint16;
4065 append_composite_type_field (t, "u16", init_vector_type (elem, 8));
4066 elem = builtin_type (gdbarch)->builtin_uint32;
4067 append_composite_type_field (t, "u32", init_vector_type (elem, 4));
4068 elem = builtin_type (gdbarch)->builtin_uint64;
4069 append_composite_type_field (t, "u64", init_vector_type (elem, 2));
4070 elem = builtin_type (gdbarch)->builtin_float;
4071 append_composite_type_field (t, "f32", init_vector_type (elem, 4));
4072 elem = builtin_type (gdbarch)->builtin_double;
4073 append_composite_type_field (t, "f64", init_vector_type (elem, 2));
4074
4075 TYPE_VECTOR (t) = 1;
4076 TYPE_NAME (t) = "neon_q";
4077 tdep->neon_quad_type = t;
4078 }
4079
4080 return tdep->neon_quad_type;
4081 }
4082
4083 /* Return the GDB type object for the "standard" data type of data in
4084 register N. */
4085
4086 static struct type *
4087 arm_register_type (struct gdbarch *gdbarch, int regnum)
4088 {
4089 int num_regs = gdbarch_num_regs (gdbarch);
4090
4091 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
4092 && regnum >= num_regs && regnum < num_regs + 32)
4093 return builtin_type (gdbarch)->builtin_float;
4094
4095 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
4096 && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
4097 return arm_neon_quad_type (gdbarch);
4098
4099 /* If the target description has register information, we are only
4100 in this function so that we can override the types of
4101 double-precision registers for NEON. */
4102 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
4103 {
4104 struct type *t = tdesc_register_type (gdbarch, regnum);
4105
4106 if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
4107 && TYPE_CODE (t) == TYPE_CODE_FLT
4108 && gdbarch_tdep (gdbarch)->have_neon)
4109 return arm_neon_double_type (gdbarch);
4110 else
4111 return t;
4112 }
4113
4114 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
4115 {
4116 if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
4117 return builtin_type (gdbarch)->builtin_void;
4118
4119 return arm_ext_type (gdbarch);
4120 }
4121 else if (regnum == ARM_SP_REGNUM)
4122 return builtin_type (gdbarch)->builtin_data_ptr;
4123 else if (regnum == ARM_PC_REGNUM)
4124 return builtin_type (gdbarch)->builtin_func_ptr;
4125 else if (regnum >= ARRAY_SIZE (arm_register_names))
4126 /* These registers are only supported on targets which supply
4127 an XML description. */
4128 return builtin_type (gdbarch)->builtin_int0;
4129 else
4130 return builtin_type (gdbarch)->builtin_uint32;
4131 }
4132
4133 /* Map a DWARF register REGNUM onto the appropriate GDB register
4134 number. */
4135
4136 static int
4137 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
4138 {
4139 /* Core integer regs. */
4140 if (reg >= 0 && reg <= 15)
4141 return reg;
4142
4143 /* Legacy FPA encoding. These were once used in a way which
4144 overlapped with VFP register numbering, so their use is
4145 discouraged, but GDB doesn't support the ARM toolchain
4146 which used them for VFP. */
4147 if (reg >= 16 && reg <= 23)
4148 return ARM_F0_REGNUM + reg - 16;
4149
4150 /* New assignments for the FPA registers. */
4151 if (reg >= 96 && reg <= 103)
4152 return ARM_F0_REGNUM + reg - 96;
4153
4154 /* WMMX register assignments. */
4155 if (reg >= 104 && reg <= 111)
4156 return ARM_WCGR0_REGNUM + reg - 104;
4157
4158 if (reg >= 112 && reg <= 127)
4159 return ARM_WR0_REGNUM + reg - 112;
4160
4161 if (reg >= 192 && reg <= 199)
4162 return ARM_WC0_REGNUM + reg - 192;
4163
4164 /* VFP v2 registers. A double precision value is actually
4165 in d1 rather than s2, but the ABI only defines numbering
4166 for the single precision registers. This will "just work"
4167 in GDB for little endian targets (we'll read eight bytes,
4168 starting in s0 and then progressing to s1), but will be
4169 reversed on big endian targets with VFP. This won't
4170 be a problem for the new Neon quad registers; you're supposed
4171 to use DW_OP_piece for those. */
4172 if (reg >= 64 && reg <= 95)
4173 {
4174 char name_buf[4];
4175
4176 xsnprintf (name_buf, sizeof (name_buf), "s%d", reg - 64);
4177 return user_reg_map_name_to_regnum (gdbarch, name_buf,
4178 strlen (name_buf));
4179 }
4180
4181 /* VFP v3 / Neon registers. This range is also used for VFP v2
4182 registers, except that it now describes d0 instead of s0. */
4183 if (reg >= 256 && reg <= 287)
4184 {
4185 char name_buf[4];
4186
4187 xsnprintf (name_buf, sizeof (name_buf), "d%d", reg - 256);
4188 return user_reg_map_name_to_regnum (gdbarch, name_buf,
4189 strlen (name_buf));
4190 }
4191
4192 return -1;
4193 }
4194
4195 /* Map GDB internal REGNUM onto the Arm simulator register numbers. */
4196 static int
4197 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
4198 {
4199 int reg = regnum;
4200 gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
4201
4202 if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
4203 return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
4204
4205 if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
4206 return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
4207
4208 if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
4209 return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
4210
4211 if (reg < NUM_GREGS)
4212 return SIM_ARM_R0_REGNUM + reg;
4213 reg -= NUM_GREGS;
4214
4215 if (reg < NUM_FREGS)
4216 return SIM_ARM_FP0_REGNUM + reg;
4217 reg -= NUM_FREGS;
4218
4219 if (reg < NUM_SREGS)
4220 return SIM_ARM_FPS_REGNUM + reg;
4221 reg -= NUM_SREGS;
4222
4223 internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
4224 }
4225
4226 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
4227 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
4228 It is thought that this is is the floating-point register format on
4229 little-endian systems. */
4230
4231 static void
4232 convert_from_extended (const struct floatformat *fmt, const void *ptr,
4233 void *dbl, int endianess)
4234 {
4235 DOUBLEST d;
4236
4237 if (endianess == BFD_ENDIAN_BIG)
4238 floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
4239 else
4240 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
4241 ptr, &d);
4242 floatformat_from_doublest (fmt, &d, dbl);
4243 }
4244
4245 static void
4246 convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr,
4247 int endianess)
4248 {
4249 DOUBLEST d;
4250
4251 floatformat_to_doublest (fmt, ptr, &d);
4252 if (endianess == BFD_ENDIAN_BIG)
4253 floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
4254 else
4255 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
4256 &d, dbl);
4257 }
4258
4259 static int
4260 condition_true (unsigned long cond, unsigned long status_reg)
4261 {
4262 if (cond == INST_AL || cond == INST_NV)
4263 return 1;
4264
4265 switch (cond)
4266 {
4267 case INST_EQ:
4268 return ((status_reg & FLAG_Z) != 0);
4269 case INST_NE:
4270 return ((status_reg & FLAG_Z) == 0);
4271 case INST_CS:
4272 return ((status_reg & FLAG_C) != 0);
4273 case INST_CC:
4274 return ((status_reg & FLAG_C) == 0);
4275 case INST_MI:
4276 return ((status_reg & FLAG_N) != 0);
4277 case INST_PL:
4278 return ((status_reg & FLAG_N) == 0);
4279 case INST_VS:
4280 return ((status_reg & FLAG_V) != 0);
4281 case INST_VC:
4282 return ((status_reg & FLAG_V) == 0);
4283 case INST_HI:
4284 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
4285 case INST_LS:
4286 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
4287 case INST_GE:
4288 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
4289 case INST_LT:
4290 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
4291 case INST_GT:
4292 return (((status_reg & FLAG_Z) == 0)
4293 && (((status_reg & FLAG_N) == 0)
4294 == ((status_reg & FLAG_V) == 0)));
4295 case INST_LE:
4296 return (((status_reg & FLAG_Z) != 0)
4297 || (((status_reg & FLAG_N) == 0)
4298 != ((status_reg & FLAG_V) == 0)));
4299 }
4300 return 1;
4301 }
4302
4303 static unsigned long
4304 shifted_reg_val (struct frame_info *frame, unsigned long inst, int carry,
4305 unsigned long pc_val, unsigned long status_reg)
4306 {
4307 unsigned long res, shift;
4308 int rm = bits (inst, 0, 3);
4309 unsigned long shifttype = bits (inst, 5, 6);
4310
4311 if (bit (inst, 4))
4312 {
4313 int rs = bits (inst, 8, 11);
4314 shift = (rs == 15 ? pc_val + 8
4315 : get_frame_register_unsigned (frame, rs)) & 0xFF;
4316 }
4317 else
4318 shift = bits (inst, 7, 11);
4319
4320 res = (rm == ARM_PC_REGNUM
4321 ? (pc_val + (bit (inst, 4) ? 12 : 8))
4322 : get_frame_register_unsigned (frame, rm));
4323
4324 switch (shifttype)
4325 {
4326 case 0: /* LSL */
4327 res = shift >= 32 ? 0 : res << shift;
4328 break;
4329
4330 case 1: /* LSR */
4331 res = shift >= 32 ? 0 : res >> shift;
4332 break;
4333
4334 case 2: /* ASR */
4335 if (shift >= 32)
4336 shift = 31;
4337 res = ((res & 0x80000000L)
4338 ? ~((~res) >> shift) : res >> shift);
4339 break;
4340
4341 case 3: /* ROR/RRX */
4342 shift &= 31;
4343 if (shift == 0)
4344 res = (res >> 1) | (carry ? 0x80000000L : 0);
4345 else
4346 res = (res >> shift) | (res << (32 - shift));
4347 break;
4348 }
4349
4350 return res & 0xffffffff;
4351 }
4352
4353 /* Return number of 1-bits in VAL. */
4354
4355 static int
4356 bitcount (unsigned long val)
4357 {
4358 int nbits;
4359 for (nbits = 0; val != 0; nbits++)
4360 val &= val - 1; /* Delete rightmost 1-bit in val. */
4361 return nbits;
4362 }
4363
4364 /* Return the size in bytes of the complete Thumb instruction whose
4365 first halfword is INST1. */
4366
4367 static int
4368 thumb_insn_size (unsigned short inst1)
4369 {
4370 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
4371 return 4;
4372 else
4373 return 2;
4374 }
4375
4376 static int
4377 thumb_advance_itstate (unsigned int itstate)
4378 {
4379 /* Preserve IT[7:5], the first three bits of the condition. Shift
4380 the upcoming condition flags left by one bit. */
4381 itstate = (itstate & 0xe0) | ((itstate << 1) & 0x1f);
4382
4383 /* If we have finished the IT block, clear the state. */
4384 if ((itstate & 0x0f) == 0)
4385 itstate = 0;
4386
4387 return itstate;
4388 }
4389
4390 /* Find the next PC after the current instruction executes. In some
4391 cases we can not statically determine the answer (see the IT state
4392 handling in this function); in that case, a breakpoint may be
4393 inserted in addition to the returned PC, which will be used to set
4394 another breakpoint by our caller. */
4395
4396 static CORE_ADDR
4397 thumb_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc)
4398 {
4399 struct gdbarch *gdbarch = get_frame_arch (frame);
4400 struct address_space *aspace = get_frame_address_space (frame);
4401 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4402 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
4403 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
4404 unsigned short inst1;
4405 CORE_ADDR nextpc = pc + 2; /* Default is next instruction. */
4406 unsigned long offset;
4407 ULONGEST status, itstate;
4408
4409 nextpc = MAKE_THUMB_ADDR (nextpc);
4410 pc_val = MAKE_THUMB_ADDR (pc_val);
4411
4412 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
4413
4414 /* Thumb-2 conditional execution support. There are eight bits in
4415 the CPSR which describe conditional execution state. Once
4416 reconstructed (they're in a funny order), the low five bits
4417 describe the low bit of the condition for each instruction and
4418 how many instructions remain. The high three bits describe the
4419 base condition. One of the low four bits will be set if an IT
4420 block is active. These bits read as zero on earlier
4421 processors. */
4422 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
4423 itstate = ((status >> 8) & 0xfc) | ((status >> 25) & 0x3);
4424
4425 /* If-Then handling. On GNU/Linux, where this routine is used, we
4426 use an undefined instruction as a breakpoint. Unlike BKPT, IT
4427 can disable execution of the undefined instruction. So we might
4428 miss the breakpoint if we set it on a skipped conditional
4429 instruction. Because conditional instructions can change the
4430 flags, affecting the execution of further instructions, we may
4431 need to set two breakpoints. */
4432
4433 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint != NULL)
4434 {
4435 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
4436 {
4437 /* An IT instruction. Because this instruction does not
4438 modify the flags, we can accurately predict the next
4439 executed instruction. */
4440 itstate = inst1 & 0x00ff;
4441 pc += thumb_insn_size (inst1);
4442
4443 while (itstate != 0 && ! condition_true (itstate >> 4, status))
4444 {
4445 inst1 = read_memory_unsigned_integer (pc, 2,
4446 byte_order_for_code);
4447 pc += thumb_insn_size (inst1);
4448 itstate = thumb_advance_itstate (itstate);
4449 }
4450
4451 return MAKE_THUMB_ADDR (pc);
4452 }
4453 else if (itstate != 0)
4454 {
4455 /* We are in a conditional block. Check the condition. */
4456 if (! condition_true (itstate >> 4, status))
4457 {
4458 /* Advance to the next executed instruction. */
4459 pc += thumb_insn_size (inst1);
4460 itstate = thumb_advance_itstate (itstate);
4461
4462 while (itstate != 0 && ! condition_true (itstate >> 4, status))
4463 {
4464 inst1 = read_memory_unsigned_integer (pc, 2,
4465 byte_order_for_code);
4466 pc += thumb_insn_size (inst1);
4467 itstate = thumb_advance_itstate (itstate);
4468 }
4469
4470 return MAKE_THUMB_ADDR (pc);
4471 }
4472 else if ((itstate & 0x0f) == 0x08)
4473 {
4474 /* This is the last instruction of the conditional
4475 block, and it is executed. We can handle it normally
4476 because the following instruction is not conditional,
4477 and we must handle it normally because it is
4478 permitted to branch. Fall through. */
4479 }
4480 else
4481 {
4482 int cond_negated;
4483
4484 /* There are conditional instructions after this one.
4485 If this instruction modifies the flags, then we can
4486 not predict what the next executed instruction will
4487 be. Fortunately, this instruction is architecturally
4488 forbidden to branch; we know it will fall through.
4489 Start by skipping past it. */
4490 pc += thumb_insn_size (inst1);
4491 itstate = thumb_advance_itstate (itstate);
4492
4493 /* Set a breakpoint on the following instruction. */
4494 gdb_assert ((itstate & 0x0f) != 0);
4495 arm_insert_single_step_breakpoint (gdbarch, aspace,
4496 MAKE_THUMB_ADDR (pc));
4497 cond_negated = (itstate >> 4) & 1;
4498
4499 /* Skip all following instructions with the same
4500 condition. If there is a later instruction in the IT
4501 block with the opposite condition, set the other
4502 breakpoint there. If not, then set a breakpoint on
4503 the instruction after the IT block. */
4504 do
4505 {
4506 inst1 = read_memory_unsigned_integer (pc, 2,
4507 byte_order_for_code);
4508 pc += thumb_insn_size (inst1);
4509 itstate = thumb_advance_itstate (itstate);
4510 }
4511 while (itstate != 0 && ((itstate >> 4) & 1) == cond_negated);
4512
4513 return MAKE_THUMB_ADDR (pc);
4514 }
4515 }
4516 }
4517 else if (itstate & 0x0f)
4518 {
4519 /* We are in a conditional block. Check the condition. */
4520 int cond = itstate >> 4;
4521
4522 if (! condition_true (cond, status))
4523 /* Advance to the next instruction. All the 32-bit
4524 instructions share a common prefix. */
4525 return MAKE_THUMB_ADDR (pc + thumb_insn_size (inst1));
4526
4527 /* Otherwise, handle the instruction normally. */
4528 }
4529
4530 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
4531 {
4532 CORE_ADDR sp;
4533
4534 /* Fetch the saved PC from the stack. It's stored above
4535 all of the other registers. */
4536 offset = bitcount (bits (inst1, 0, 7)) * INT_REGISTER_SIZE;
4537 sp = get_frame_register_unsigned (frame, ARM_SP_REGNUM);
4538 nextpc = read_memory_unsigned_integer (sp + offset, 4, byte_order);
4539 }
4540 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
4541 {
4542 unsigned long cond = bits (inst1, 8, 11);
4543 if (cond == 0x0f) /* 0x0f = SWI */
4544 {
4545 struct gdbarch_tdep *tdep;
4546 tdep = gdbarch_tdep (gdbarch);
4547
4548 if (tdep->syscall_next_pc != NULL)
4549 nextpc = tdep->syscall_next_pc (frame);
4550
4551 }
4552 else if (cond != 0x0f && condition_true (cond, status))
4553 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
4554 }
4555 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
4556 {
4557 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
4558 }
4559 else if (thumb_insn_size (inst1) == 4) /* 32-bit instruction */
4560 {
4561 unsigned short inst2;
4562 inst2 = read_memory_unsigned_integer (pc + 2, 2, byte_order_for_code);
4563
4564 /* Default to the next instruction. */
4565 nextpc = pc + 4;
4566 nextpc = MAKE_THUMB_ADDR (nextpc);
4567
4568 if ((inst1 & 0xf800) == 0xf000 && (inst2 & 0x8000) == 0x8000)
4569 {
4570 /* Branches and miscellaneous control instructions. */
4571
4572 if ((inst2 & 0x1000) != 0 || (inst2 & 0xd001) == 0xc000)
4573 {
4574 /* B, BL, BLX. */
4575 int j1, j2, imm1, imm2;
4576
4577 imm1 = sbits (inst1, 0, 10);
4578 imm2 = bits (inst2, 0, 10);
4579 j1 = bit (inst2, 13);
4580 j2 = bit (inst2, 11);
4581
4582 offset = ((imm1 << 12) + (imm2 << 1));
4583 offset ^= ((!j2) << 22) | ((!j1) << 23);
4584
4585 nextpc = pc_val + offset;
4586 /* For BLX make sure to clear the low bits. */
4587 if (bit (inst2, 12) == 0)
4588 nextpc = nextpc & 0xfffffffc;
4589 }
4590 else if (inst1 == 0xf3de && (inst2 & 0xff00) == 0x3f00)
4591 {
4592 /* SUBS PC, LR, #imm8. */
4593 nextpc = get_frame_register_unsigned (frame, ARM_LR_REGNUM);
4594 nextpc -= inst2 & 0x00ff;
4595 }
4596 else if ((inst2 & 0xd000) == 0x8000 && (inst1 & 0x0380) != 0x0380)
4597 {
4598 /* Conditional branch. */
4599 if (condition_true (bits (inst1, 6, 9), status))
4600 {
4601 int sign, j1, j2, imm1, imm2;
4602
4603 sign = sbits (inst1, 10, 10);
4604 imm1 = bits (inst1, 0, 5);
4605 imm2 = bits (inst2, 0, 10);
4606 j1 = bit (inst2, 13);
4607 j2 = bit (inst2, 11);
4608
4609 offset = (sign << 20) + (j2 << 19) + (j1 << 18);
4610 offset += (imm1 << 12) + (imm2 << 1);
4611
4612 nextpc = pc_val + offset;
4613 }
4614 }
4615 }
4616 else if ((inst1 & 0xfe50) == 0xe810)
4617 {
4618 /* Load multiple or RFE. */
4619 int rn, offset, load_pc = 1;
4620
4621 rn = bits (inst1, 0, 3);
4622 if (bit (inst1, 7) && !bit (inst1, 8))
4623 {
4624 /* LDMIA or POP */
4625 if (!bit (inst2, 15))
4626 load_pc = 0;
4627 offset = bitcount (inst2) * 4 - 4;
4628 }
4629 else if (!bit (inst1, 7) && bit (inst1, 8))
4630 {
4631 /* LDMDB */
4632 if (!bit (inst2, 15))
4633 load_pc = 0;
4634 offset = -4;
4635 }
4636 else if (bit (inst1, 7) && bit (inst1, 8))
4637 {
4638 /* RFEIA */
4639 offset = 0;
4640 }
4641 else if (!bit (inst1, 7) && !bit (inst1, 8))
4642 {
4643 /* RFEDB */
4644 offset = -8;
4645 }
4646 else
4647 load_pc = 0;
4648
4649 if (load_pc)
4650 {
4651 CORE_ADDR addr = get_frame_register_unsigned (frame, rn);
4652 nextpc = get_frame_memory_unsigned (frame, addr + offset, 4);
4653 }
4654 }
4655 else if ((inst1 & 0xffef) == 0xea4f && (inst2 & 0xfff0) == 0x0f00)
4656 {
4657 /* MOV PC or MOVS PC. */
4658 nextpc = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
4659 nextpc = MAKE_THUMB_ADDR (nextpc);
4660 }
4661 else if ((inst1 & 0xff70) == 0xf850 && (inst2 & 0xf000) == 0xf000)
4662 {
4663 /* LDR PC. */
4664 CORE_ADDR base;
4665 int rn, load_pc = 1;
4666
4667 rn = bits (inst1, 0, 3);
4668 base = get_frame_register_unsigned (frame, rn);
4669 if (rn == ARM_PC_REGNUM)
4670 {
4671 base = (base + 4) & ~(CORE_ADDR) 0x3;
4672 if (bit (inst1, 7))
4673 base += bits (inst2, 0, 11);
4674 else
4675 base -= bits (inst2, 0, 11);
4676 }
4677 else if (bit (inst1, 7))
4678 base += bits (inst2, 0, 11);
4679 else if (bit (inst2, 11))
4680 {
4681 if (bit (inst2, 10))
4682 {
4683 if (bit (inst2, 9))
4684 base += bits (inst2, 0, 7);
4685 else
4686 base -= bits (inst2, 0, 7);
4687 }
4688 }
4689 else if ((inst2 & 0x0fc0) == 0x0000)
4690 {
4691 int shift = bits (inst2, 4, 5), rm = bits (inst2, 0, 3);
4692 base += get_frame_register_unsigned (frame, rm) << shift;
4693 }
4694 else
4695 /* Reserved. */
4696 load_pc = 0;
4697
4698 if (load_pc)
4699 nextpc = get_frame_memory_unsigned (frame, base, 4);
4700 }
4701 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
4702 {
4703 /* TBB. */
4704 CORE_ADDR tbl_reg, table, offset, length;
4705
4706 tbl_reg = bits (inst1, 0, 3);
4707 if (tbl_reg == 0x0f)
4708 table = pc + 4; /* Regcache copy of PC isn't right yet. */
4709 else
4710 table = get_frame_register_unsigned (frame, tbl_reg);
4711
4712 offset = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
4713 length = 2 * get_frame_memory_unsigned (frame, table + offset, 1);
4714 nextpc = pc_val + length;
4715 }
4716 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf010)
4717 {
4718 /* TBH. */
4719 CORE_ADDR tbl_reg, table, offset, length;
4720
4721 tbl_reg = bits (inst1, 0, 3);
4722 if (tbl_reg == 0x0f)
4723 table = pc + 4; /* Regcache copy of PC isn't right yet. */
4724 else
4725 table = get_frame_register_unsigned (frame, tbl_reg);
4726
4727 offset = 2 * get_frame_register_unsigned (frame, bits (inst2, 0, 3));
4728 length = 2 * get_frame_memory_unsigned (frame, table + offset, 2);
4729 nextpc = pc_val + length;
4730 }
4731 }
4732 else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */
4733 {
4734 if (bits (inst1, 3, 6) == 0x0f)
4735 nextpc = UNMAKE_THUMB_ADDR (pc_val);
4736 else
4737 nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
4738 }
4739 else if ((inst1 & 0xff87) == 0x4687) /* mov pc, REG */
4740 {
4741 if (bits (inst1, 3, 6) == 0x0f)
4742 nextpc = pc_val;
4743 else
4744 nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
4745
4746 nextpc = MAKE_THUMB_ADDR (nextpc);
4747 }
4748 else if ((inst1 & 0xf500) == 0xb100)
4749 {
4750 /* CBNZ or CBZ. */
4751 int imm = (bit (inst1, 9) << 6) + (bits (inst1, 3, 7) << 1);
4752 ULONGEST reg = get_frame_register_unsigned (frame, bits (inst1, 0, 2));
4753
4754 if (bit (inst1, 11) && reg != 0)
4755 nextpc = pc_val + imm;
4756 else if (!bit (inst1, 11) && reg == 0)
4757 nextpc = pc_val + imm;
4758 }
4759 return nextpc;
4760 }
4761
4762 /* Get the raw next address. PC is the current program counter, in
4763 FRAME, which is assumed to be executing in ARM mode.
4764
4765 The value returned has the execution state of the next instruction
4766 encoded in it. Use IS_THUMB_ADDR () to see whether the instruction is
4767 in Thumb-State, and gdbarch_addr_bits_remove () to get the plain memory
4768 address. */
4769
4770 static CORE_ADDR
4771 arm_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc)
4772 {
4773 struct gdbarch *gdbarch = get_frame_arch (frame);
4774 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4775 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
4776 unsigned long pc_val;
4777 unsigned long this_instr;
4778 unsigned long status;
4779 CORE_ADDR nextpc;
4780
4781 pc_val = (unsigned long) pc;
4782 this_instr = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
4783
4784 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
4785 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
4786
4787 if (bits (this_instr, 28, 31) == INST_NV)
4788 switch (bits (this_instr, 24, 27))
4789 {
4790 case 0xa:
4791 case 0xb:
4792 {
4793 /* Branch with Link and change to Thumb. */
4794 nextpc = BranchDest (pc, this_instr);
4795 nextpc |= bit (this_instr, 24) << 1;
4796 nextpc = MAKE_THUMB_ADDR (nextpc);
4797 break;
4798 }
4799 case 0xc:
4800 case 0xd:
4801 case 0xe:
4802 /* Coprocessor register transfer. */
4803 if (bits (this_instr, 12, 15) == 15)
4804 error (_("Invalid update to pc in instruction"));
4805 break;
4806 }
4807 else if (condition_true (bits (this_instr, 28, 31), status))
4808 {
4809 switch (bits (this_instr, 24, 27))
4810 {
4811 case 0x0:
4812 case 0x1: /* data processing */
4813 case 0x2:
4814 case 0x3:
4815 {
4816 unsigned long operand1, operand2, result = 0;
4817 unsigned long rn;
4818 int c;
4819
4820 if (bits (this_instr, 12, 15) != 15)
4821 break;
4822
4823 if (bits (this_instr, 22, 25) == 0
4824 && bits (this_instr, 4, 7) == 9) /* multiply */
4825 error (_("Invalid update to pc in instruction"));
4826
4827 /* BX <reg>, BLX <reg> */
4828 if (bits (this_instr, 4, 27) == 0x12fff1
4829 || bits (this_instr, 4, 27) == 0x12fff3)
4830 {
4831 rn = bits (this_instr, 0, 3);
4832 nextpc = ((rn == ARM_PC_REGNUM)
4833 ? (pc_val + 8)
4834 : get_frame_register_unsigned (frame, rn));
4835
4836 return nextpc;
4837 }
4838
4839 /* Multiply into PC. */
4840 c = (status & FLAG_C) ? 1 : 0;
4841 rn = bits (this_instr, 16, 19);
4842 operand1 = ((rn == ARM_PC_REGNUM)
4843 ? (pc_val + 8)
4844 : get_frame_register_unsigned (frame, rn));
4845
4846 if (bit (this_instr, 25))
4847 {
4848 unsigned long immval = bits (this_instr, 0, 7);
4849 unsigned long rotate = 2 * bits (this_instr, 8, 11);
4850 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
4851 & 0xffffffff;
4852 }
4853 else /* operand 2 is a shifted register. */
4854 operand2 = shifted_reg_val (frame, this_instr, c,
4855 pc_val, status);
4856
4857 switch (bits (this_instr, 21, 24))
4858 {
4859 case 0x0: /*and */
4860 result = operand1 & operand2;
4861 break;
4862
4863 case 0x1: /*eor */
4864 result = operand1 ^ operand2;
4865 break;
4866
4867 case 0x2: /*sub */
4868 result = operand1 - operand2;
4869 break;
4870
4871 case 0x3: /*rsb */
4872 result = operand2 - operand1;
4873 break;
4874
4875 case 0x4: /*add */
4876 result = operand1 + operand2;
4877 break;
4878
4879 case 0x5: /*adc */
4880 result = operand1 + operand2 + c;
4881 break;
4882
4883 case 0x6: /*sbc */
4884 result = operand1 - operand2 + c;
4885 break;
4886
4887 case 0x7: /*rsc */
4888 result = operand2 - operand1 + c;
4889 break;
4890
4891 case 0x8:
4892 case 0x9:
4893 case 0xa:
4894 case 0xb: /* tst, teq, cmp, cmn */
4895 result = (unsigned long) nextpc;
4896 break;
4897
4898 case 0xc: /*orr */
4899 result = operand1 | operand2;
4900 break;
4901
4902 case 0xd: /*mov */
4903 /* Always step into a function. */
4904 result = operand2;
4905 break;
4906
4907 case 0xe: /*bic */
4908 result = operand1 & ~operand2;
4909 break;
4910
4911 case 0xf: /*mvn */
4912 result = ~operand2;
4913 break;
4914 }
4915
4916 /* In 26-bit APCS the bottom two bits of the result are
4917 ignored, and we always end up in ARM state. */
4918 if (!arm_apcs_32)
4919 nextpc = arm_addr_bits_remove (gdbarch, result);
4920 else
4921 nextpc = result;
4922
4923 break;
4924 }
4925
4926 case 0x4:
4927 case 0x5: /* data transfer */
4928 case 0x6:
4929 case 0x7:
4930 if (bits (this_instr, 25, 27) == 0x3 && bit (this_instr, 4) == 1)
4931 {
4932 /* Media instructions and architecturally undefined
4933 instructions. */
4934 break;
4935 }
4936
4937 if (bit (this_instr, 20))
4938 {
4939 /* load */
4940 if (bits (this_instr, 12, 15) == 15)
4941 {
4942 /* rd == pc */
4943 unsigned long rn;
4944 unsigned long base;
4945
4946 if (bit (this_instr, 22))
4947 error (_("Invalid update to pc in instruction"));
4948
4949 /* byte write to PC */
4950 rn = bits (this_instr, 16, 19);
4951 base = ((rn == ARM_PC_REGNUM)
4952 ? (pc_val + 8)
4953 : get_frame_register_unsigned (frame, rn));
4954
4955 if (bit (this_instr, 24))
4956 {
4957 /* pre-indexed */
4958 int c = (status & FLAG_C) ? 1 : 0;
4959 unsigned long offset =
4960 (bit (this_instr, 25)
4961 ? shifted_reg_val (frame, this_instr, c, pc_val, status)
4962 : bits (this_instr, 0, 11));
4963
4964 if (bit (this_instr, 23))
4965 base += offset;
4966 else
4967 base -= offset;
4968 }
4969 nextpc =
4970 (CORE_ADDR) read_memory_unsigned_integer ((CORE_ADDR) base,
4971 4, byte_order);
4972 }
4973 }
4974 break;
4975
4976 case 0x8:
4977 case 0x9: /* block transfer */
4978 if (bit (this_instr, 20))
4979 {
4980 /* LDM */
4981 if (bit (this_instr, 15))
4982 {
4983 /* loading pc */
4984 int offset = 0;
4985 unsigned long rn_val
4986 = get_frame_register_unsigned (frame,
4987 bits (this_instr, 16, 19));
4988
4989 if (bit (this_instr, 23))
4990 {
4991 /* up */
4992 unsigned long reglist = bits (this_instr, 0, 14);
4993 offset = bitcount (reglist) * 4;
4994 if (bit (this_instr, 24)) /* pre */
4995 offset += 4;
4996 }
4997 else if (bit (this_instr, 24))
4998 offset = -4;
4999
5000 nextpc =
5001 (CORE_ADDR) read_memory_unsigned_integer ((CORE_ADDR)
5002 (rn_val + offset),
5003 4, byte_order);
5004 }
5005 }
5006 break;
5007
5008 case 0xb: /* branch & link */
5009 case 0xa: /* branch */
5010 {
5011 nextpc = BranchDest (pc, this_instr);
5012 break;
5013 }
5014
5015 case 0xc:
5016 case 0xd:
5017 case 0xe: /* coproc ops */
5018 break;
5019 case 0xf: /* SWI */
5020 {
5021 struct gdbarch_tdep *tdep;
5022 tdep = gdbarch_tdep (gdbarch);
5023
5024 if (tdep->syscall_next_pc != NULL)
5025 nextpc = tdep->syscall_next_pc (frame);
5026
5027 }
5028 break;
5029
5030 default:
5031 fprintf_filtered (gdb_stderr, _("Bad bit-field extraction\n"));
5032 return (pc);
5033 }
5034 }
5035
5036 return nextpc;
5037 }
5038
5039 /* Determine next PC after current instruction executes. Will call either
5040 arm_get_next_pc_raw or thumb_get_next_pc_raw. Error out if infinite
5041 loop is detected. */
5042
5043 CORE_ADDR
5044 arm_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
5045 {
5046 CORE_ADDR nextpc;
5047
5048 if (arm_frame_is_thumb (frame))
5049 nextpc = thumb_get_next_pc_raw (frame, pc);
5050 else
5051 nextpc = arm_get_next_pc_raw (frame, pc);
5052
5053 return nextpc;
5054 }
5055
5056 /* Like insert_single_step_breakpoint, but make sure we use a breakpoint
5057 of the appropriate mode (as encoded in the PC value), even if this
5058 differs from what would be expected according to the symbol tables. */
5059
5060 void
5061 arm_insert_single_step_breakpoint (struct gdbarch *gdbarch,
5062 struct address_space *aspace,
5063 CORE_ADDR pc)
5064 {
5065 struct cleanup *old_chain
5066 = make_cleanup_restore_integer (&arm_override_mode);
5067
5068 arm_override_mode = IS_THUMB_ADDR (pc);
5069 pc = gdbarch_addr_bits_remove (gdbarch, pc);
5070
5071 insert_single_step_breakpoint (gdbarch, aspace, pc);
5072
5073 do_cleanups (old_chain);
5074 }
5075
5076 /* Checks for an atomic sequence of instructions beginning with a LDREX{,B,H,D}
5077 instruction and ending with a STREX{,B,H,D} instruction. If such a sequence
5078 is found, attempt to step through it. A breakpoint is placed at the end of
5079 the sequence. */
5080
5081 static int
5082 thumb_deal_with_atomic_sequence_raw (struct frame_info *frame)
5083 {
5084 struct gdbarch *gdbarch = get_frame_arch (frame);
5085 struct address_space *aspace = get_frame_address_space (frame);
5086 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5087 CORE_ADDR pc = get_frame_pc (frame);
5088 CORE_ADDR breaks[2] = {-1, -1};
5089 CORE_ADDR loc = pc;
5090 unsigned short insn1, insn2;
5091 int insn_count;
5092 int index;
5093 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
5094 const int atomic_sequence_length = 16; /* Instruction sequence length. */
5095 ULONGEST status, itstate;
5096
5097 /* We currently do not support atomic sequences within an IT block. */
5098 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
5099 itstate = ((status >> 8) & 0xfc) | ((status >> 25) & 0x3);
5100 if (itstate & 0x0f)
5101 return 0;
5102
5103 /* Assume all atomic sequences start with a ldrex{,b,h,d} instruction. */
5104 insn1 = read_memory_unsigned_integer (loc, 2, byte_order_for_code);
5105 loc += 2;
5106 if (thumb_insn_size (insn1) != 4)
5107 return 0;
5108
5109 insn2 = read_memory_unsigned_integer (loc, 2, byte_order_for_code);
5110 loc += 2;
5111 if (!((insn1 & 0xfff0) == 0xe850
5112 || ((insn1 & 0xfff0) == 0xe8d0 && (insn2 & 0x00c0) == 0x0040)))
5113 return 0;
5114
5115 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
5116 instructions. */
5117 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
5118 {
5119 insn1 = read_memory_unsigned_integer (loc, 2, byte_order_for_code);
5120 loc += 2;
5121
5122 if (thumb_insn_size (insn1) != 4)
5123 {
5124 /* Assume that there is at most one conditional branch in the
5125 atomic sequence. If a conditional branch is found, put a
5126 breakpoint in its destination address. */
5127 if ((insn1 & 0xf000) == 0xd000 && bits (insn1, 8, 11) != 0x0f)
5128 {
5129 if (last_breakpoint > 0)
5130 return 0; /* More than one conditional branch found,
5131 fallback to the standard code. */
5132
5133 breaks[1] = loc + 2 + (sbits (insn1, 0, 7) << 1);
5134 last_breakpoint++;
5135 }
5136
5137 /* We do not support atomic sequences that use any *other*
5138 instructions but conditional branches to change the PC.
5139 Fall back to standard code to avoid losing control of
5140 execution. */
5141 else if (thumb_instruction_changes_pc (insn1))
5142 return 0;
5143 }
5144 else
5145 {
5146 insn2 = read_memory_unsigned_integer (loc, 2, byte_order_for_code);
5147 loc += 2;
5148
5149 /* Assume that there is at most one conditional branch in the
5150 atomic sequence. If a conditional branch is found, put a
5151 breakpoint in its destination address. */
5152 if ((insn1 & 0xf800) == 0xf000
5153 && (insn2 & 0xd000) == 0x8000
5154 && (insn1 & 0x0380) != 0x0380)
5155 {
5156 int sign, j1, j2, imm1, imm2;
5157 unsigned int offset;
5158
5159 sign = sbits (insn1, 10, 10);
5160 imm1 = bits (insn1, 0, 5);
5161 imm2 = bits (insn2, 0, 10);
5162 j1 = bit (insn2, 13);
5163 j2 = bit (insn2, 11);
5164
5165 offset = (sign << 20) + (j2 << 19) + (j1 << 18);
5166 offset += (imm1 << 12) + (imm2 << 1);
5167
5168 if (last_breakpoint > 0)
5169 return 0; /* More than one conditional branch found,
5170 fallback to the standard code. */
5171
5172 breaks[1] = loc + offset;
5173 last_breakpoint++;
5174 }
5175
5176 /* We do not support atomic sequences that use any *other*
5177 instructions but conditional branches to change the PC.
5178 Fall back to standard code to avoid losing control of
5179 execution. */
5180 else if (thumb2_instruction_changes_pc (insn1, insn2))
5181 return 0;
5182
5183 /* If we find a strex{,b,h,d}, we're done. */
5184 if ((insn1 & 0xfff0) == 0xe840
5185 || ((insn1 & 0xfff0) == 0xe8c0 && (insn2 & 0x00c0) == 0x0040))
5186 break;
5187 }
5188 }
5189
5190 /* If we didn't find the strex{,b,h,d}, we cannot handle the sequence. */
5191 if (insn_count == atomic_sequence_length)
5192 return 0;
5193
5194 /* Insert a breakpoint right after the end of the atomic sequence. */
5195 breaks[0] = loc;
5196
5197 /* Check for duplicated breakpoints. Check also for a breakpoint
5198 placed (branch instruction's destination) anywhere in sequence. */
5199 if (last_breakpoint
5200 && (breaks[1] == breaks[0]
5201 || (breaks[1] >= pc && breaks[1] < loc)))
5202 last_breakpoint = 0;
5203
5204 /* Effectively inserts the breakpoints. */
5205 for (index = 0; index <= last_breakpoint; index++)
5206 arm_insert_single_step_breakpoint (gdbarch, aspace,
5207 MAKE_THUMB_ADDR (breaks[index]));
5208
5209 return 1;
5210 }
5211
5212 static int
5213 arm_deal_with_atomic_sequence_raw (struct frame_info *frame)
5214 {
5215 struct gdbarch *gdbarch = get_frame_arch (frame);
5216 struct address_space *aspace = get_frame_address_space (frame);
5217 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5218 CORE_ADDR pc = get_frame_pc (frame);
5219 CORE_ADDR breaks[2] = {-1, -1};
5220 CORE_ADDR loc = pc;
5221 unsigned int insn;
5222 int insn_count;
5223 int index;
5224 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
5225 const int atomic_sequence_length = 16; /* Instruction sequence length. */
5226
5227 /* Assume all atomic sequences start with a ldrex{,b,h,d} instruction.
5228 Note that we do not currently support conditionally executed atomic
5229 instructions. */
5230 insn = read_memory_unsigned_integer (loc, 4, byte_order_for_code);
5231 loc += 4;
5232 if ((insn & 0xff9000f0) != 0xe1900090)
5233 return 0;
5234
5235 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
5236 instructions. */
5237 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
5238 {
5239 insn = read_memory_unsigned_integer (loc, 4, byte_order_for_code);
5240 loc += 4;
5241
5242 /* Assume that there is at most one conditional branch in the atomic
5243 sequence. If a conditional branch is found, put a breakpoint in
5244 its destination address. */
5245 if (bits (insn, 24, 27) == 0xa)
5246 {
5247 if (last_breakpoint > 0)
5248 return 0; /* More than one conditional branch found, fallback
5249 to the standard single-step code. */
5250
5251 breaks[1] = BranchDest (loc - 4, insn);
5252 last_breakpoint++;
5253 }
5254
5255 /* We do not support atomic sequences that use any *other* instructions
5256 but conditional branches to change the PC. Fall back to standard
5257 code to avoid losing control of execution. */
5258 else if (arm_instruction_changes_pc (insn))
5259 return 0;
5260
5261 /* If we find a strex{,b,h,d}, we're done. */
5262 if ((insn & 0xff9000f0) == 0xe1800090)
5263 break;
5264 }
5265
5266 /* If we didn't find the strex{,b,h,d}, we cannot handle the sequence. */
5267 if (insn_count == atomic_sequence_length)
5268 return 0;
5269
5270 /* Insert a breakpoint right after the end of the atomic sequence. */
5271 breaks[0] = loc;
5272
5273 /* Check for duplicated breakpoints. Check also for a breakpoint
5274 placed (branch instruction's destination) anywhere in sequence. */
5275 if (last_breakpoint
5276 && (breaks[1] == breaks[0]
5277 || (breaks[1] >= pc && breaks[1] < loc)))
5278 last_breakpoint = 0;
5279
5280 /* Effectively inserts the breakpoints. */
5281 for (index = 0; index <= last_breakpoint; index++)
5282 arm_insert_single_step_breakpoint (gdbarch, aspace, breaks[index]);
5283
5284 return 1;
5285 }
5286
5287 int
5288 arm_deal_with_atomic_sequence (struct frame_info *frame)
5289 {
5290 if (arm_frame_is_thumb (frame))
5291 return thumb_deal_with_atomic_sequence_raw (frame);
5292 else
5293 return arm_deal_with_atomic_sequence_raw (frame);
5294 }
5295
5296 /* single_step() is called just before we want to resume the inferior,
5297 if we want to single-step it but there is no hardware or kernel
5298 single-step support. We find the target of the coming instruction
5299 and breakpoint it. */
5300
5301 int
5302 arm_software_single_step (struct frame_info *frame)
5303 {
5304 struct gdbarch *gdbarch = get_frame_arch (frame);
5305 struct address_space *aspace = get_frame_address_space (frame);
5306 CORE_ADDR next_pc;
5307
5308 if (arm_deal_with_atomic_sequence (frame))
5309 return 1;
5310
5311 next_pc = arm_get_next_pc (frame, get_frame_pc (frame));
5312 arm_insert_single_step_breakpoint (gdbarch, aspace, next_pc);
5313
5314 return 1;
5315 }
5316
5317 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
5318 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
5319 NULL if an error occurs. BUF is freed. */
5320
5321 static gdb_byte *
5322 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
5323 int old_len, int new_len)
5324 {
5325 gdb_byte *new_buf;
5326 int bytes_to_read = new_len - old_len;
5327
5328 new_buf = xmalloc (new_len);
5329 memcpy (new_buf + bytes_to_read, buf, old_len);
5330 xfree (buf);
5331 if (target_read_memory (endaddr - new_len, new_buf, bytes_to_read) != 0)
5332 {
5333 xfree (new_buf);
5334 return NULL;
5335 }
5336 return new_buf;
5337 }
5338
5339 /* An IT block is at most the 2-byte IT instruction followed by
5340 four 4-byte instructions. The furthest back we must search to
5341 find an IT block that affects the current instruction is thus
5342 2 + 3 * 4 == 14 bytes. */
5343 #define MAX_IT_BLOCK_PREFIX 14
5344
5345 /* Use a quick scan if there are more than this many bytes of
5346 code. */
5347 #define IT_SCAN_THRESHOLD 32
5348
5349 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
5350 A breakpoint in an IT block may not be hit, depending on the
5351 condition flags. */
5352 static CORE_ADDR
5353 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
5354 {
5355 gdb_byte *buf;
5356 char map_type;
5357 CORE_ADDR boundary, func_start;
5358 int buf_len;
5359 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
5360 int i, any, last_it, last_it_count;
5361
5362 /* If we are using BKPT breakpoints, none of this is necessary. */
5363 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
5364 return bpaddr;
5365
5366 /* ARM mode does not have this problem. */
5367 if (!arm_pc_is_thumb (gdbarch, bpaddr))
5368 return bpaddr;
5369
5370 /* We are setting a breakpoint in Thumb code that could potentially
5371 contain an IT block. The first step is to find how much Thumb
5372 code there is; we do not need to read outside of known Thumb
5373 sequences. */
5374 map_type = arm_find_mapping_symbol (bpaddr, &boundary);
5375 if (map_type == 0)
5376 /* Thumb-2 code must have mapping symbols to have a chance. */
5377 return bpaddr;
5378
5379 bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
5380
5381 if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
5382 && func_start > boundary)
5383 boundary = func_start;
5384
5385 /* Search for a candidate IT instruction. We have to do some fancy
5386 footwork to distinguish a real IT instruction from the second
5387 half of a 32-bit instruction, but there is no need for that if
5388 there's no candidate. */
5389 buf_len = min (bpaddr - boundary, MAX_IT_BLOCK_PREFIX);
5390 if (buf_len == 0)
5391 /* No room for an IT instruction. */
5392 return bpaddr;
5393
5394 buf = xmalloc (buf_len);
5395 if (target_read_memory (bpaddr - buf_len, buf, buf_len) != 0)
5396 return bpaddr;
5397 any = 0;
5398 for (i = 0; i < buf_len; i += 2)
5399 {
5400 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
5401 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
5402 {
5403 any = 1;
5404 break;
5405 }
5406 }
5407 if (any == 0)
5408 {
5409 xfree (buf);
5410 return bpaddr;
5411 }
5412
5413 /* OK, the code bytes before this instruction contain at least one
5414 halfword which resembles an IT instruction. We know that it's
5415 Thumb code, but there are still two possibilities. Either the
5416 halfword really is an IT instruction, or it is the second half of
5417 a 32-bit Thumb instruction. The only way we can tell is to
5418 scan forwards from a known instruction boundary. */
5419 if (bpaddr - boundary > IT_SCAN_THRESHOLD)
5420 {
5421 int definite;
5422
5423 /* There's a lot of code before this instruction. Start with an
5424 optimistic search; it's easy to recognize halfwords that can
5425 not be the start of a 32-bit instruction, and use that to
5426 lock on to the instruction boundaries. */
5427 buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
5428 if (buf == NULL)
5429 return bpaddr;
5430 buf_len = IT_SCAN_THRESHOLD;
5431
5432 definite = 0;
5433 for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
5434 {
5435 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
5436 if (thumb_insn_size (inst1) == 2)
5437 {
5438 definite = 1;
5439 break;
5440 }
5441 }
5442
5443 /* At this point, if DEFINITE, BUF[I] is the first place we
5444 are sure that we know the instruction boundaries, and it is far
5445 enough from BPADDR that we could not miss an IT instruction
5446 affecting BPADDR. If ! DEFINITE, give up - start from a
5447 known boundary. */
5448 if (! definite)
5449 {
5450 buf = extend_buffer_earlier (buf, bpaddr, buf_len,
5451 bpaddr - boundary);
5452 if (buf == NULL)
5453 return bpaddr;
5454 buf_len = bpaddr - boundary;
5455 i = 0;
5456 }
5457 }
5458 else
5459 {
5460 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
5461 if (buf == NULL)
5462 return bpaddr;
5463 buf_len = bpaddr - boundary;
5464 i = 0;
5465 }
5466
5467 /* Scan forwards. Find the last IT instruction before BPADDR. */
5468 last_it = -1;
5469 last_it_count = 0;
5470 while (i < buf_len)
5471 {
5472 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
5473 last_it_count--;
5474 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
5475 {
5476 last_it = i;
5477 if (inst1 & 0x0001)
5478 last_it_count = 4;
5479 else if (inst1 & 0x0002)
5480 last_it_count = 3;
5481 else if (inst1 & 0x0004)
5482 last_it_count = 2;
5483 else
5484 last_it_count = 1;
5485 }
5486 i += thumb_insn_size (inst1);
5487 }
5488
5489 xfree (buf);
5490
5491 if (last_it == -1)
5492 /* There wasn't really an IT instruction after all. */
5493 return bpaddr;
5494
5495 if (last_it_count < 1)
5496 /* It was too far away. */
5497 return bpaddr;
5498
5499 /* This really is a trouble spot. Move the breakpoint to the IT
5500 instruction. */
5501 return bpaddr - buf_len + last_it;
5502 }
5503
5504 /* ARM displaced stepping support.
5505
5506 Generally ARM displaced stepping works as follows:
5507
5508 1. When an instruction is to be single-stepped, it is first decoded by
5509 arm_process_displaced_insn (called from arm_displaced_step_copy_insn).
5510 Depending on the type of instruction, it is then copied to a scratch
5511 location, possibly in a modified form. The copy_* set of functions
5512 performs such modification, as necessary. A breakpoint is placed after
5513 the modified instruction in the scratch space to return control to GDB.
5514 Note in particular that instructions which modify the PC will no longer
5515 do so after modification.
5516
5517 2. The instruction is single-stepped, by setting the PC to the scratch
5518 location address, and resuming. Control returns to GDB when the
5519 breakpoint is hit.
5520
5521 3. A cleanup function (cleanup_*) is called corresponding to the copy_*
5522 function used for the current instruction. This function's job is to
5523 put the CPU/memory state back to what it would have been if the
5524 instruction had been executed unmodified in its original location. */
5525
5526 /* NOP instruction (mov r0, r0). */
5527 #define ARM_NOP 0xe1a00000
5528 #define THUMB_NOP 0x4600
5529
5530 /* Helper for register reads for displaced stepping. In particular, this
5531 returns the PC as it would be seen by the instruction at its original
5532 location. */
5533
5534 ULONGEST
5535 displaced_read_reg (struct regcache *regs, struct displaced_step_closure *dsc,
5536 int regno)
5537 {
5538 ULONGEST ret;
5539 CORE_ADDR from = dsc->insn_addr;
5540
5541 if (regno == ARM_PC_REGNUM)
5542 {
5543 /* Compute pipeline offset:
5544 - When executing an ARM instruction, PC reads as the address of the
5545 current instruction plus 8.
5546 - When executing a Thumb instruction, PC reads as the address of the
5547 current instruction plus 4. */
5548
5549 if (!dsc->is_thumb)
5550 from += 8;
5551 else
5552 from += 4;
5553
5554 if (debug_displaced)
5555 fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
5556 (unsigned long) from);
5557 return (ULONGEST) from;
5558 }
5559 else
5560 {
5561 regcache_cooked_read_unsigned (regs, regno, &ret);
5562 if (debug_displaced)
5563 fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
5564 regno, (unsigned long) ret);
5565 return ret;
5566 }
5567 }
5568
5569 static int
5570 displaced_in_arm_mode (struct regcache *regs)
5571 {
5572 ULONGEST ps;
5573 ULONGEST t_bit = arm_psr_thumb_bit (get_regcache_arch (regs));
5574
5575 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
5576
5577 return (ps & t_bit) == 0;
5578 }
5579
5580 /* Write to the PC as from a branch instruction. */
5581
5582 static void
5583 branch_write_pc (struct regcache *regs, struct displaced_step_closure *dsc,
5584 ULONGEST val)
5585 {
5586 if (!dsc->is_thumb)
5587 /* Note: If bits 0/1 are set, this branch would be unpredictable for
5588 architecture versions < 6. */
5589 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
5590 val & ~(ULONGEST) 0x3);
5591 else
5592 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
5593 val & ~(ULONGEST) 0x1);
5594 }
5595
5596 /* Write to the PC as from a branch-exchange instruction. */
5597
5598 static void
5599 bx_write_pc (struct regcache *regs, ULONGEST val)
5600 {
5601 ULONGEST ps;
5602 ULONGEST t_bit = arm_psr_thumb_bit (get_regcache_arch (regs));
5603
5604 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
5605
5606 if ((val & 1) == 1)
5607 {
5608 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | t_bit);
5609 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
5610 }
5611 else if ((val & 2) == 0)
5612 {
5613 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
5614 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
5615 }
5616 else
5617 {
5618 /* Unpredictable behaviour. Try to do something sensible (switch to ARM
5619 mode, align dest to 4 bytes). */
5620 warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
5621 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps & ~t_bit);
5622 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
5623 }
5624 }
5625
5626 /* Write to the PC as if from a load instruction. */
5627
5628 static void
5629 load_write_pc (struct regcache *regs, struct displaced_step_closure *dsc,
5630 ULONGEST val)
5631 {
5632 if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
5633 bx_write_pc (regs, val);
5634 else
5635 branch_write_pc (regs, dsc, val);
5636 }
5637
5638 /* Write to the PC as if from an ALU instruction. */
5639
5640 static void
5641 alu_write_pc (struct regcache *regs, struct displaced_step_closure *dsc,
5642 ULONGEST val)
5643 {
5644 if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && !dsc->is_thumb)
5645 bx_write_pc (regs, val);
5646 else
5647 branch_write_pc (regs, dsc, val);
5648 }
5649
5650 /* Helper for writing to registers for displaced stepping. Writing to the PC
5651 has a varying effects depending on the instruction which does the write:
5652 this is controlled by the WRITE_PC argument. */
5653
5654 void
5655 displaced_write_reg (struct regcache *regs, struct displaced_step_closure *dsc,
5656 int regno, ULONGEST val, enum pc_write_style write_pc)
5657 {
5658 if (regno == ARM_PC_REGNUM)
5659 {
5660 if (debug_displaced)
5661 fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
5662 (unsigned long) val);
5663 switch (write_pc)
5664 {
5665 case BRANCH_WRITE_PC:
5666 branch_write_pc (regs, dsc, val);
5667 break;
5668
5669 case BX_WRITE_PC:
5670 bx_write_pc (regs, val);
5671 break;
5672
5673 case LOAD_WRITE_PC:
5674 load_write_pc (regs, dsc, val);
5675 break;
5676
5677 case ALU_WRITE_PC:
5678 alu_write_pc (regs, dsc, val);
5679 break;
5680
5681 case CANNOT_WRITE_PC:
5682 warning (_("Instruction wrote to PC in an unexpected way when "
5683 "single-stepping"));
5684 break;
5685
5686 default:
5687 internal_error (__FILE__, __LINE__,
5688 _("Invalid argument to displaced_write_reg"));
5689 }
5690
5691 dsc->wrote_to_pc = 1;
5692 }
5693 else
5694 {
5695 if (debug_displaced)
5696 fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
5697 regno, (unsigned long) val);
5698 regcache_cooked_write_unsigned (regs, regno, val);
5699 }
5700 }
5701
5702 /* This function is used to concisely determine if an instruction INSN
5703 references PC. Register fields of interest in INSN should have the
5704 corresponding fields of BITMASK set to 0b1111. The function
5705 returns return 1 if any of these fields in INSN reference the PC
5706 (also 0b1111, r15), else it returns 0. */
5707
5708 static int
5709 insn_references_pc (uint32_t insn, uint32_t bitmask)
5710 {
5711 uint32_t lowbit = 1;
5712
5713 while (bitmask != 0)
5714 {
5715 uint32_t mask;
5716
5717 for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
5718 ;
5719
5720 if (!lowbit)
5721 break;
5722
5723 mask = lowbit * 0xf;
5724
5725 if ((insn & mask) == mask)
5726 return 1;
5727
5728 bitmask &= ~mask;
5729 }
5730
5731 return 0;
5732 }
5733
5734 /* The simplest copy function. Many instructions have the same effect no
5735 matter what address they are executed at: in those cases, use this. */
5736
5737 static int
5738 arm_copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
5739 const char *iname, struct displaced_step_closure *dsc)
5740 {
5741 if (debug_displaced)
5742 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
5743 "opcode/class '%s' unmodified\n", (unsigned long) insn,
5744 iname);
5745
5746 dsc->modinsn[0] = insn;
5747
5748 return 0;
5749 }
5750
5751 static int
5752 thumb_copy_unmodified_32bit (struct gdbarch *gdbarch, uint16_t insn1,
5753 uint16_t insn2, const char *iname,
5754 struct displaced_step_closure *dsc)
5755 {
5756 if (debug_displaced)
5757 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x %.4x, "
5758 "opcode/class '%s' unmodified\n", insn1, insn2,
5759 iname);
5760
5761 dsc->modinsn[0] = insn1;
5762 dsc->modinsn[1] = insn2;
5763 dsc->numinsns = 2;
5764
5765 return 0;
5766 }
5767
5768 /* Copy 16-bit Thumb(Thumb and 16-bit Thumb-2) instruction without any
5769 modification. */
5770 static int
5771 thumb_copy_unmodified_16bit (struct gdbarch *gdbarch, unsigned int insn,
5772 const char *iname,
5773 struct displaced_step_closure *dsc)
5774 {
5775 if (debug_displaced)
5776 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x, "
5777 "opcode/class '%s' unmodified\n", insn,
5778 iname);
5779
5780 dsc->modinsn[0] = insn;
5781
5782 return 0;
5783 }
5784
5785 /* Preload instructions with immediate offset. */
5786
5787 static void
5788 cleanup_preload (struct gdbarch *gdbarch,
5789 struct regcache *regs, struct displaced_step_closure *dsc)
5790 {
5791 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5792 if (!dsc->u.preload.immed)
5793 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
5794 }
5795
5796 static void
5797 install_preload (struct gdbarch *gdbarch, struct regcache *regs,
5798 struct displaced_step_closure *dsc, unsigned int rn)
5799 {
5800 ULONGEST rn_val;
5801 /* Preload instructions:
5802
5803 {pli/pld} [rn, #+/-imm]
5804 ->
5805 {pli/pld} [r0, #+/-imm]. */
5806
5807 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5808 rn_val = displaced_read_reg (regs, dsc, rn);
5809 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
5810 dsc->u.preload.immed = 1;
5811
5812 dsc->cleanup = &cleanup_preload;
5813 }
5814
5815 static int
5816 arm_copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5817 struct displaced_step_closure *dsc)
5818 {
5819 unsigned int rn = bits (insn, 16, 19);
5820
5821 if (!insn_references_pc (insn, 0x000f0000ul))
5822 return arm_copy_unmodified (gdbarch, insn, "preload", dsc);
5823
5824 if (debug_displaced)
5825 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
5826 (unsigned long) insn);
5827
5828 dsc->modinsn[0] = insn & 0xfff0ffff;
5829
5830 install_preload (gdbarch, regs, dsc, rn);
5831
5832 return 0;
5833 }
5834
5835 static int
5836 thumb2_copy_preload (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
5837 struct regcache *regs, struct displaced_step_closure *dsc)
5838 {
5839 unsigned int rn = bits (insn1, 0, 3);
5840 unsigned int u_bit = bit (insn1, 7);
5841 int imm12 = bits (insn2, 0, 11);
5842 ULONGEST pc_val;
5843
5844 if (rn != ARM_PC_REGNUM)
5845 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "preload", dsc);
5846
5847 /* PC is only allowed to use in PLI (immediate,literal) Encoding T3, and
5848 PLD (literal) Encoding T1. */
5849 if (debug_displaced)
5850 fprintf_unfiltered (gdb_stdlog,
5851 "displaced: copying pld/pli pc (0x%x) %c imm12 %.4x\n",
5852 (unsigned int) dsc->insn_addr, u_bit ? '+' : '-',
5853 imm12);
5854
5855 if (!u_bit)
5856 imm12 = -1 * imm12;
5857
5858 /* Rewrite instruction {pli/pld} PC imm12 into:
5859 Prepare: tmp[0] <- r0, tmp[1] <- r1, r0 <- pc, r1 <- imm12
5860
5861 {pli/pld} [r0, r1]
5862
5863 Cleanup: r0 <- tmp[0], r1 <- tmp[1]. */
5864
5865 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5866 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5867
5868 pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
5869
5870 displaced_write_reg (regs, dsc, 0, pc_val, CANNOT_WRITE_PC);
5871 displaced_write_reg (regs, dsc, 1, imm12, CANNOT_WRITE_PC);
5872 dsc->u.preload.immed = 0;
5873
5874 /* {pli/pld} [r0, r1] */
5875 dsc->modinsn[0] = insn1 & 0xfff0;
5876 dsc->modinsn[1] = 0xf001;
5877 dsc->numinsns = 2;
5878
5879 dsc->cleanup = &cleanup_preload;
5880 return 0;
5881 }
5882
5883 /* Preload instructions with register offset. */
5884
5885 static void
5886 install_preload_reg(struct gdbarch *gdbarch, struct regcache *regs,
5887 struct displaced_step_closure *dsc, unsigned int rn,
5888 unsigned int rm)
5889 {
5890 ULONGEST rn_val, rm_val;
5891
5892 /* Preload register-offset instructions:
5893
5894 {pli/pld} [rn, rm {, shift}]
5895 ->
5896 {pli/pld} [r0, r1 {, shift}]. */
5897
5898 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5899 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
5900 rn_val = displaced_read_reg (regs, dsc, rn);
5901 rm_val = displaced_read_reg (regs, dsc, rm);
5902 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
5903 displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
5904 dsc->u.preload.immed = 0;
5905
5906 dsc->cleanup = &cleanup_preload;
5907 }
5908
5909 static int
5910 arm_copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn,
5911 struct regcache *regs,
5912 struct displaced_step_closure *dsc)
5913 {
5914 unsigned int rn = bits (insn, 16, 19);
5915 unsigned int rm = bits (insn, 0, 3);
5916
5917
5918 if (!insn_references_pc (insn, 0x000f000ful))
5919 return arm_copy_unmodified (gdbarch, insn, "preload reg", dsc);
5920
5921 if (debug_displaced)
5922 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
5923 (unsigned long) insn);
5924
5925 dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
5926
5927 install_preload_reg (gdbarch, regs, dsc, rn, rm);
5928 return 0;
5929 }
5930
5931 /* Copy/cleanup coprocessor load and store instructions. */
5932
5933 static void
5934 cleanup_copro_load_store (struct gdbarch *gdbarch,
5935 struct regcache *regs,
5936 struct displaced_step_closure *dsc)
5937 {
5938 ULONGEST rn_val = displaced_read_reg (regs, dsc, 0);
5939
5940 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
5941
5942 if (dsc->u.ldst.writeback)
5943 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
5944 }
5945
5946 static void
5947 install_copro_load_store (struct gdbarch *gdbarch, struct regcache *regs,
5948 struct displaced_step_closure *dsc,
5949 int writeback, unsigned int rn)
5950 {
5951 ULONGEST rn_val;
5952
5953 /* Coprocessor load/store instructions:
5954
5955 {stc/stc2} [<Rn>, #+/-imm] (and other immediate addressing modes)
5956 ->
5957 {stc/stc2} [r0, #+/-imm].
5958
5959 ldc/ldc2 are handled identically. */
5960
5961 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
5962 rn_val = displaced_read_reg (regs, dsc, rn);
5963 /* PC should be 4-byte aligned. */
5964 rn_val = rn_val & 0xfffffffc;
5965 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
5966
5967 dsc->u.ldst.writeback = writeback;
5968 dsc->u.ldst.rn = rn;
5969
5970 dsc->cleanup = &cleanup_copro_load_store;
5971 }
5972
5973 static int
5974 arm_copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
5975 struct regcache *regs,
5976 struct displaced_step_closure *dsc)
5977 {
5978 unsigned int rn = bits (insn, 16, 19);
5979
5980 if (!insn_references_pc (insn, 0x000f0000ul))
5981 return arm_copy_unmodified (gdbarch, insn, "copro load/store", dsc);
5982
5983 if (debug_displaced)
5984 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
5985 "load/store insn %.8lx\n", (unsigned long) insn);
5986
5987 dsc->modinsn[0] = insn & 0xfff0ffff;
5988
5989 install_copro_load_store (gdbarch, regs, dsc, bit (insn, 25), rn);
5990
5991 return 0;
5992 }
5993
5994 static int
5995 thumb2_copy_copro_load_store (struct gdbarch *gdbarch, uint16_t insn1,
5996 uint16_t insn2, struct regcache *regs,
5997 struct displaced_step_closure *dsc)
5998 {
5999 unsigned int rn = bits (insn1, 0, 3);
6000
6001 if (rn != ARM_PC_REGNUM)
6002 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
6003 "copro load/store", dsc);
6004
6005 if (debug_displaced)
6006 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
6007 "load/store insn %.4x%.4x\n", insn1, insn2);
6008
6009 dsc->modinsn[0] = insn1 & 0xfff0;
6010 dsc->modinsn[1] = insn2;
6011 dsc->numinsns = 2;
6012
6013 /* This function is called for copying instruction LDC/LDC2/VLDR, which
6014 doesn't support writeback, so pass 0. */
6015 install_copro_load_store (gdbarch, regs, dsc, 0, rn);
6016
6017 return 0;
6018 }
6019
6020 /* Clean up branch instructions (actually perform the branch, by setting
6021 PC). */
6022
6023 static void
6024 cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
6025 struct displaced_step_closure *dsc)
6026 {
6027 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
6028 int branch_taken = condition_true (dsc->u.branch.cond, status);
6029 enum pc_write_style write_pc = dsc->u.branch.exchange
6030 ? BX_WRITE_PC : BRANCH_WRITE_PC;
6031
6032 if (!branch_taken)
6033 return;
6034
6035 if (dsc->u.branch.link)
6036 {
6037 /* The value of LR should be the next insn of current one. In order
6038 not to confuse logic hanlding later insn `bx lr', if current insn mode
6039 is Thumb, the bit 0 of LR value should be set to 1. */
6040 ULONGEST next_insn_addr = dsc->insn_addr + dsc->insn_size;
6041
6042 if (dsc->is_thumb)
6043 next_insn_addr |= 0x1;
6044
6045 displaced_write_reg (regs, dsc, ARM_LR_REGNUM, next_insn_addr,
6046 CANNOT_WRITE_PC);
6047 }
6048
6049 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, dsc->u.branch.dest, write_pc);
6050 }
6051
6052 /* Copy B/BL/BLX instructions with immediate destinations. */
6053
6054 static void
6055 install_b_bl_blx (struct gdbarch *gdbarch, struct regcache *regs,
6056 struct displaced_step_closure *dsc,
6057 unsigned int cond, int exchange, int link, long offset)
6058 {
6059 /* Implement "BL<cond> <label>" as:
6060
6061 Preparation: cond <- instruction condition
6062 Insn: mov r0, r0 (nop)
6063 Cleanup: if (condition true) { r14 <- pc; pc <- label }.
6064
6065 B<cond> similar, but don't set r14 in cleanup. */
6066
6067 dsc->u.branch.cond = cond;
6068 dsc->u.branch.link = link;
6069 dsc->u.branch.exchange = exchange;
6070
6071 dsc->u.branch.dest = dsc->insn_addr;
6072 if (link && exchange)
6073 /* For BLX, offset is computed from the Align (PC, 4). */
6074 dsc->u.branch.dest = dsc->u.branch.dest & 0xfffffffc;
6075
6076 if (dsc->is_thumb)
6077 dsc->u.branch.dest += 4 + offset;
6078 else
6079 dsc->u.branch.dest += 8 + offset;
6080
6081 dsc->cleanup = &cleanup_branch;
6082 }
6083 static int
6084 arm_copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
6085 struct regcache *regs, struct displaced_step_closure *dsc)
6086 {
6087 unsigned int cond = bits (insn, 28, 31);
6088 int exchange = (cond == 0xf);
6089 int link = exchange || bit (insn, 24);
6090 long offset;
6091
6092 if (debug_displaced)
6093 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
6094 "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
6095 (unsigned long) insn);
6096 if (exchange)
6097 /* For BLX, set bit 0 of the destination. The cleanup_branch function will
6098 then arrange the switch into Thumb mode. */
6099 offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
6100 else
6101 offset = bits (insn, 0, 23) << 2;
6102
6103 if (bit (offset, 25))
6104 offset = offset | ~0x3ffffff;
6105
6106 dsc->modinsn[0] = ARM_NOP;
6107
6108 install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
6109 return 0;
6110 }
6111
6112 static int
6113 thumb2_copy_b_bl_blx (struct gdbarch *gdbarch, uint16_t insn1,
6114 uint16_t insn2, struct regcache *regs,
6115 struct displaced_step_closure *dsc)
6116 {
6117 int link = bit (insn2, 14);
6118 int exchange = link && !bit (insn2, 12);
6119 int cond = INST_AL;
6120 long offset = 0;
6121 int j1 = bit (insn2, 13);
6122 int j2 = bit (insn2, 11);
6123 int s = sbits (insn1, 10, 10);
6124 int i1 = !(j1 ^ bit (insn1, 10));
6125 int i2 = !(j2 ^ bit (insn1, 10));
6126
6127 if (!link && !exchange) /* B */
6128 {
6129 offset = (bits (insn2, 0, 10) << 1);
6130 if (bit (insn2, 12)) /* Encoding T4 */
6131 {
6132 offset |= (bits (insn1, 0, 9) << 12)
6133 | (i2 << 22)
6134 | (i1 << 23)
6135 | (s << 24);
6136 cond = INST_AL;
6137 }
6138 else /* Encoding T3 */
6139 {
6140 offset |= (bits (insn1, 0, 5) << 12)
6141 | (j1 << 18)
6142 | (j2 << 19)
6143 | (s << 20);
6144 cond = bits (insn1, 6, 9);
6145 }
6146 }
6147 else
6148 {
6149 offset = (bits (insn1, 0, 9) << 12);
6150 offset |= ((i2 << 22) | (i1 << 23) | (s << 24));
6151 offset |= exchange ?
6152 (bits (insn2, 1, 10) << 2) : (bits (insn2, 0, 10) << 1);
6153 }
6154
6155 if (debug_displaced)
6156 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s insn "
6157 "%.4x %.4x with offset %.8lx\n",
6158 link ? (exchange) ? "blx" : "bl" : "b",
6159 insn1, insn2, offset);
6160
6161 dsc->modinsn[0] = THUMB_NOP;
6162
6163 install_b_bl_blx (gdbarch, regs, dsc, cond, exchange, link, offset);
6164 return 0;
6165 }
6166
6167 /* Copy B Thumb instructions. */
6168 static int
6169 thumb_copy_b (struct gdbarch *gdbarch, unsigned short insn,
6170 struct displaced_step_closure *dsc)
6171 {
6172 unsigned int cond = 0;
6173 int offset = 0;
6174 unsigned short bit_12_15 = bits (insn, 12, 15);
6175 CORE_ADDR from = dsc->insn_addr;
6176
6177 if (bit_12_15 == 0xd)
6178 {
6179 /* offset = SignExtend (imm8:0, 32) */
6180 offset = sbits ((insn << 1), 0, 8);
6181 cond = bits (insn, 8, 11);
6182 }
6183 else if (bit_12_15 == 0xe) /* Encoding T2 */
6184 {
6185 offset = sbits ((insn << 1), 0, 11);
6186 cond = INST_AL;
6187 }
6188
6189 if (debug_displaced)
6190 fprintf_unfiltered (gdb_stdlog,
6191 "displaced: copying b immediate insn %.4x "
6192 "with offset %d\n", insn, offset);
6193
6194 dsc->u.branch.cond = cond;
6195 dsc->u.branch.link = 0;
6196 dsc->u.branch.exchange = 0;
6197 dsc->u.branch.dest = from + 4 + offset;
6198
6199 dsc->modinsn[0] = THUMB_NOP;
6200
6201 dsc->cleanup = &cleanup_branch;
6202
6203 return 0;
6204 }
6205
6206 /* Copy BX/BLX with register-specified destinations. */
6207
6208 static void
6209 install_bx_blx_reg (struct gdbarch *gdbarch, struct regcache *regs,
6210 struct displaced_step_closure *dsc, int link,
6211 unsigned int cond, unsigned int rm)
6212 {
6213 /* Implement {BX,BLX}<cond> <reg>" as:
6214
6215 Preparation: cond <- instruction condition
6216 Insn: mov r0, r0 (nop)
6217 Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
6218
6219 Don't set r14 in cleanup for BX. */
6220
6221 dsc->u.branch.dest = displaced_read_reg (regs, dsc, rm);
6222
6223 dsc->u.branch.cond = cond;
6224 dsc->u.branch.link = link;
6225
6226 dsc->u.branch.exchange = 1;
6227
6228 dsc->cleanup = &cleanup_branch;
6229 }
6230
6231 static int
6232 arm_copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
6233 struct regcache *regs, struct displaced_step_closure *dsc)
6234 {
6235 unsigned int cond = bits (insn, 28, 31);
6236 /* BX: x12xxx1x
6237 BLX: x12xxx3x. */
6238 int link = bit (insn, 5);
6239 unsigned int rm = bits (insn, 0, 3);
6240
6241 if (debug_displaced)
6242 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx",
6243 (unsigned long) insn);
6244
6245 dsc->modinsn[0] = ARM_NOP;
6246
6247 install_bx_blx_reg (gdbarch, regs, dsc, link, cond, rm);
6248 return 0;
6249 }
6250
6251 static int
6252 thumb_copy_bx_blx_reg (struct gdbarch *gdbarch, uint16_t insn,
6253 struct regcache *regs,
6254 struct displaced_step_closure *dsc)
6255 {
6256 int link = bit (insn, 7);
6257 unsigned int rm = bits (insn, 3, 6);
6258
6259 if (debug_displaced)
6260 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.4x",
6261 (unsigned short) insn);
6262
6263 dsc->modinsn[0] = THUMB_NOP;
6264
6265 install_bx_blx_reg (gdbarch, regs, dsc, link, INST_AL, rm);
6266
6267 return 0;
6268 }
6269
6270
6271 /* Copy/cleanup arithmetic/logic instruction with immediate RHS. */
6272
6273 static void
6274 cleanup_alu_imm (struct gdbarch *gdbarch,
6275 struct regcache *regs, struct displaced_step_closure *dsc)
6276 {
6277 ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
6278 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
6279 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
6280 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
6281 }
6282
6283 static int
6284 arm_copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
6285 struct displaced_step_closure *dsc)
6286 {
6287 unsigned int rn = bits (insn, 16, 19);
6288 unsigned int rd = bits (insn, 12, 15);
6289 unsigned int op = bits (insn, 21, 24);
6290 int is_mov = (op == 0xd);
6291 ULONGEST rd_val, rn_val;
6292
6293 if (!insn_references_pc (insn, 0x000ff000ul))
6294 return arm_copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
6295
6296 if (debug_displaced)
6297 fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
6298 "%.8lx\n", is_mov ? "move" : "ALU",
6299 (unsigned long) insn);
6300
6301 /* Instruction is of form:
6302
6303 <op><cond> rd, [rn,] #imm
6304
6305 Rewrite as:
6306
6307 Preparation: tmp1, tmp2 <- r0, r1;
6308 r0, r1 <- rd, rn
6309 Insn: <op><cond> r0, r1, #imm
6310 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
6311 */
6312
6313 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6314 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
6315 rn_val = displaced_read_reg (regs, dsc, rn);
6316 rd_val = displaced_read_reg (regs, dsc, rd);
6317 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
6318 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
6319 dsc->rd = rd;
6320
6321 if (is_mov)
6322 dsc->modinsn[0] = insn & 0xfff00fff;
6323 else
6324 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
6325
6326 dsc->cleanup = &cleanup_alu_imm;
6327
6328 return 0;
6329 }
6330
6331 static int
6332 thumb2_copy_alu_imm (struct gdbarch *gdbarch, uint16_t insn1,
6333 uint16_t insn2, struct regcache *regs,
6334 struct displaced_step_closure *dsc)
6335 {
6336 unsigned int op = bits (insn1, 5, 8);
6337 unsigned int rn, rm, rd;
6338 ULONGEST rd_val, rn_val;
6339
6340 rn = bits (insn1, 0, 3); /* Rn */
6341 rm = bits (insn2, 0, 3); /* Rm */
6342 rd = bits (insn2, 8, 11); /* Rd */
6343
6344 /* This routine is only called for instruction MOV. */
6345 gdb_assert (op == 0x2 && rn == 0xf);
6346
6347 if (rm != ARM_PC_REGNUM && rd != ARM_PC_REGNUM)
6348 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ALU imm", dsc);
6349
6350 if (debug_displaced)
6351 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.4x%.4x\n",
6352 "ALU", insn1, insn2);
6353
6354 /* Instruction is of form:
6355
6356 <op><cond> rd, [rn,] #imm
6357
6358 Rewrite as:
6359
6360 Preparation: tmp1, tmp2 <- r0, r1;
6361 r0, r1 <- rd, rn
6362 Insn: <op><cond> r0, r1, #imm
6363 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
6364 */
6365
6366 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6367 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
6368 rn_val = displaced_read_reg (regs, dsc, rn);
6369 rd_val = displaced_read_reg (regs, dsc, rd);
6370 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
6371 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
6372 dsc->rd = rd;
6373
6374 dsc->modinsn[0] = insn1;
6375 dsc->modinsn[1] = ((insn2 & 0xf0f0) | 0x1);
6376 dsc->numinsns = 2;
6377
6378 dsc->cleanup = &cleanup_alu_imm;
6379
6380 return 0;
6381 }
6382
6383 /* Copy/cleanup arithmetic/logic insns with register RHS. */
6384
6385 static void
6386 cleanup_alu_reg (struct gdbarch *gdbarch,
6387 struct regcache *regs, struct displaced_step_closure *dsc)
6388 {
6389 ULONGEST rd_val;
6390 int i;
6391
6392 rd_val = displaced_read_reg (regs, dsc, 0);
6393
6394 for (i = 0; i < 3; i++)
6395 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
6396
6397 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
6398 }
6399
6400 static void
6401 install_alu_reg (struct gdbarch *gdbarch, struct regcache *regs,
6402 struct displaced_step_closure *dsc,
6403 unsigned int rd, unsigned int rn, unsigned int rm)
6404 {
6405 ULONGEST rd_val, rn_val, rm_val;
6406
6407 /* Instruction is of form:
6408
6409 <op><cond> rd, [rn,] rm [, <shift>]
6410
6411 Rewrite as:
6412
6413 Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
6414 r0, r1, r2 <- rd, rn, rm
6415 Insn: <op><cond> r0, [r1,] r2 [, <shift>]
6416 Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
6417 */
6418
6419 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6420 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
6421 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
6422 rd_val = displaced_read_reg (regs, dsc, rd);
6423 rn_val = displaced_read_reg (regs, dsc, rn);
6424 rm_val = displaced_read_reg (regs, dsc, rm);
6425 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
6426 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
6427 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
6428 dsc->rd = rd;
6429
6430 dsc->cleanup = &cleanup_alu_reg;
6431 }
6432
6433 static int
6434 arm_copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
6435 struct displaced_step_closure *dsc)
6436 {
6437 unsigned int op = bits (insn, 21, 24);
6438 int is_mov = (op == 0xd);
6439
6440 if (!insn_references_pc (insn, 0x000ff00ful))
6441 return arm_copy_unmodified (gdbarch, insn, "ALU reg", dsc);
6442
6443 if (debug_displaced)
6444 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
6445 is_mov ? "move" : "ALU", (unsigned long) insn);
6446
6447 if (is_mov)
6448 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
6449 else
6450 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
6451
6452 install_alu_reg (gdbarch, regs, dsc, bits (insn, 12, 15), bits (insn, 16, 19),
6453 bits (insn, 0, 3));
6454 return 0;
6455 }
6456
6457 static int
6458 thumb_copy_alu_reg (struct gdbarch *gdbarch, uint16_t insn,
6459 struct regcache *regs,
6460 struct displaced_step_closure *dsc)
6461 {
6462 unsigned rm, rd;
6463
6464 rm = bits (insn, 3, 6);
6465 rd = (bit (insn, 7) << 3) | bits (insn, 0, 2);
6466
6467 if (rd != ARM_PC_REGNUM && rm != ARM_PC_REGNUM)
6468 return thumb_copy_unmodified_16bit (gdbarch, insn, "ALU reg", dsc);
6469
6470 if (debug_displaced)
6471 fprintf_unfiltered (gdb_stdlog, "displaced: copying ALU reg insn %.4x\n",
6472 (unsigned short) insn);
6473
6474 dsc->modinsn[0] = ((insn & 0xff00) | 0x10);
6475
6476 install_alu_reg (gdbarch, regs, dsc, rd, rd, rm);
6477
6478 return 0;
6479 }
6480
6481 /* Cleanup/copy arithmetic/logic insns with shifted register RHS. */
6482
6483 static void
6484 cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
6485 struct regcache *regs,
6486 struct displaced_step_closure *dsc)
6487 {
6488 ULONGEST rd_val = displaced_read_reg (regs, dsc, 0);
6489 int i;
6490
6491 for (i = 0; i < 4; i++)
6492 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
6493
6494 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
6495 }
6496
6497 static void
6498 install_alu_shifted_reg (struct gdbarch *gdbarch, struct regcache *regs,
6499 struct displaced_step_closure *dsc,
6500 unsigned int rd, unsigned int rn, unsigned int rm,
6501 unsigned rs)
6502 {
6503 int i;
6504 ULONGEST rd_val, rn_val, rm_val, rs_val;
6505
6506 /* Instruction is of form:
6507
6508 <op><cond> rd, [rn,] rm, <shift> rs
6509
6510 Rewrite as:
6511
6512 Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
6513 r0, r1, r2, r3 <- rd, rn, rm, rs
6514 Insn: <op><cond> r0, r1, r2, <shift> r3
6515 Cleanup: tmp5 <- r0
6516 r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
6517 rd <- tmp5
6518 */
6519
6520 for (i = 0; i < 4; i++)
6521 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
6522
6523 rd_val = displaced_read_reg (regs, dsc, rd);
6524 rn_val = displaced_read_reg (regs, dsc, rn);
6525 rm_val = displaced_read_reg (regs, dsc, rm);
6526 rs_val = displaced_read_reg (regs, dsc, rs);
6527 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
6528 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
6529 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
6530 displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
6531 dsc->rd = rd;
6532 dsc->cleanup = &cleanup_alu_shifted_reg;
6533 }
6534
6535 static int
6536 arm_copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
6537 struct regcache *regs,
6538 struct displaced_step_closure *dsc)
6539 {
6540 unsigned int op = bits (insn, 21, 24);
6541 int is_mov = (op == 0xd);
6542 unsigned int rd, rn, rm, rs;
6543
6544 if (!insn_references_pc (insn, 0x000fff0ful))
6545 return arm_copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
6546
6547 if (debug_displaced)
6548 fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
6549 "%.8lx\n", is_mov ? "move" : "ALU",
6550 (unsigned long) insn);
6551
6552 rn = bits (insn, 16, 19);
6553 rm = bits (insn, 0, 3);
6554 rs = bits (insn, 8, 11);
6555 rd = bits (insn, 12, 15);
6556
6557 if (is_mov)
6558 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
6559 else
6560 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
6561
6562 install_alu_shifted_reg (gdbarch, regs, dsc, rd, rn, rm, rs);
6563
6564 return 0;
6565 }
6566
6567 /* Clean up load instructions. */
6568
6569 static void
6570 cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
6571 struct displaced_step_closure *dsc)
6572 {
6573 ULONGEST rt_val, rt_val2 = 0, rn_val;
6574
6575 rt_val = displaced_read_reg (regs, dsc, 0);
6576 if (dsc->u.ldst.xfersize == 8)
6577 rt_val2 = displaced_read_reg (regs, dsc, 1);
6578 rn_val = displaced_read_reg (regs, dsc, 2);
6579
6580 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
6581 if (dsc->u.ldst.xfersize > 4)
6582 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
6583 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
6584 if (!dsc->u.ldst.immed)
6585 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
6586
6587 /* Handle register writeback. */
6588 if (dsc->u.ldst.writeback)
6589 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
6590 /* Put result in right place. */
6591 displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
6592 if (dsc->u.ldst.xfersize == 8)
6593 displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
6594 }
6595
6596 /* Clean up store instructions. */
6597
6598 static void
6599 cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
6600 struct displaced_step_closure *dsc)
6601 {
6602 ULONGEST rn_val = displaced_read_reg (regs, dsc, 2);
6603
6604 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
6605 if (dsc->u.ldst.xfersize > 4)
6606 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
6607 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
6608 if (!dsc->u.ldst.immed)
6609 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
6610 if (!dsc->u.ldst.restore_r4)
6611 displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
6612
6613 /* Writeback. */
6614 if (dsc->u.ldst.writeback)
6615 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
6616 }
6617
6618 /* Copy "extra" load/store instructions. These are halfword/doubleword
6619 transfers, which have a different encoding to byte/word transfers. */
6620
6621 static int
6622 arm_copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unpriveleged,
6623 struct regcache *regs, struct displaced_step_closure *dsc)
6624 {
6625 unsigned int op1 = bits (insn, 20, 24);
6626 unsigned int op2 = bits (insn, 5, 6);
6627 unsigned int rt = bits (insn, 12, 15);
6628 unsigned int rn = bits (insn, 16, 19);
6629 unsigned int rm = bits (insn, 0, 3);
6630 char load[12] = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
6631 char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
6632 int immed = (op1 & 0x4) != 0;
6633 int opcode;
6634 ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
6635
6636 if (!insn_references_pc (insn, 0x000ff00ful))
6637 return arm_copy_unmodified (gdbarch, insn, "extra load/store", dsc);
6638
6639 if (debug_displaced)
6640 fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
6641 "insn %.8lx\n", unpriveleged ? "unpriveleged " : "",
6642 (unsigned long) insn);
6643
6644 opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
6645
6646 if (opcode < 0)
6647 internal_error (__FILE__, __LINE__,
6648 _("copy_extra_ld_st: instruction decode error"));
6649
6650 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6651 dsc->tmp[1] = displaced_read_reg (regs, dsc, 1);
6652 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
6653 if (!immed)
6654 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
6655
6656 rt_val = displaced_read_reg (regs, dsc, rt);
6657 if (bytesize[opcode] == 8)
6658 rt_val2 = displaced_read_reg (regs, dsc, rt + 1);
6659 rn_val = displaced_read_reg (regs, dsc, rn);
6660 if (!immed)
6661 rm_val = displaced_read_reg (regs, dsc, rm);
6662
6663 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
6664 if (bytesize[opcode] == 8)
6665 displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
6666 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
6667 if (!immed)
6668 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
6669
6670 dsc->rd = rt;
6671 dsc->u.ldst.xfersize = bytesize[opcode];
6672 dsc->u.ldst.rn = rn;
6673 dsc->u.ldst.immed = immed;
6674 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
6675 dsc->u.ldst.restore_r4 = 0;
6676
6677 if (immed)
6678 /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
6679 ->
6680 {ldr,str}<width><cond> r0, [r1,] [r2, #imm]. */
6681 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
6682 else
6683 /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
6684 ->
6685 {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3]. */
6686 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
6687
6688 dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
6689
6690 return 0;
6691 }
6692
6693 /* Copy byte/half word/word loads and stores. */
6694
6695 static void
6696 install_load_store (struct gdbarch *gdbarch, struct regcache *regs,
6697 struct displaced_step_closure *dsc, int load,
6698 int immed, int writeback, int size, int usermode,
6699 int rt, int rm, int rn)
6700 {
6701 ULONGEST rt_val, rn_val, rm_val = 0;
6702
6703 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6704 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
6705 if (!immed)
6706 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
6707 if (!load)
6708 dsc->tmp[4] = displaced_read_reg (regs, dsc, 4);
6709
6710 rt_val = displaced_read_reg (regs, dsc, rt);
6711 rn_val = displaced_read_reg (regs, dsc, rn);
6712 if (!immed)
6713 rm_val = displaced_read_reg (regs, dsc, rm);
6714
6715 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
6716 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
6717 if (!immed)
6718 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
6719 dsc->rd = rt;
6720 dsc->u.ldst.xfersize = size;
6721 dsc->u.ldst.rn = rn;
6722 dsc->u.ldst.immed = immed;
6723 dsc->u.ldst.writeback = writeback;
6724
6725 /* To write PC we can do:
6726
6727 Before this sequence of instructions:
6728 r0 is the PC value got from displaced_read_reg, so r0 = from + 8;
6729 r2 is the Rn value got from dispalced_read_reg.
6730
6731 Insn1: push {pc} Write address of STR instruction + offset on stack
6732 Insn2: pop {r4} Read it back from stack, r4 = addr(Insn1) + offset
6733 Insn3: sub r4, r4, pc r4 = addr(Insn1) + offset - pc
6734 = addr(Insn1) + offset - addr(Insn3) - 8
6735 = offset - 16
6736 Insn4: add r4, r4, #8 r4 = offset - 8
6737 Insn5: add r0, r0, r4 r0 = from + 8 + offset - 8
6738 = from + offset
6739 Insn6: str r0, [r2, #imm] (or str r0, [r2, r3])
6740
6741 Otherwise we don't know what value to write for PC, since the offset is
6742 architecture-dependent (sometimes PC+8, sometimes PC+12). More details
6743 of this can be found in Section "Saving from r15" in
6744 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204g/Cihbjifh.html */
6745
6746 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
6747 }
6748
6749
6750 static int
6751 thumb2_copy_load_literal (struct gdbarch *gdbarch, uint16_t insn1,
6752 uint16_t insn2, struct regcache *regs,
6753 struct displaced_step_closure *dsc, int size)
6754 {
6755 unsigned int u_bit = bit (insn1, 7);
6756 unsigned int rt = bits (insn2, 12, 15);
6757 int imm12 = bits (insn2, 0, 11);
6758 ULONGEST pc_val;
6759
6760 if (debug_displaced)
6761 fprintf_unfiltered (gdb_stdlog,
6762 "displaced: copying ldr pc (0x%x) R%d %c imm12 %.4x\n",
6763 (unsigned int) dsc->insn_addr, rt, u_bit ? '+' : '-',
6764 imm12);
6765
6766 if (!u_bit)
6767 imm12 = -1 * imm12;
6768
6769 /* Rewrite instruction LDR Rt imm12 into:
6770
6771 Prepare: tmp[0] <- r0, tmp[1] <- r2, tmp[2] <- r3, r2 <- pc, r3 <- imm12
6772
6773 LDR R0, R2, R3,
6774
6775 Cleanup: rt <- r0, r0 <- tmp[0], r2 <- tmp[1], r3 <- tmp[2]. */
6776
6777
6778 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
6779 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
6780 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
6781
6782 pc_val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
6783
6784 pc_val = pc_val & 0xfffffffc;
6785
6786 displaced_write_reg (regs, dsc, 2, pc_val, CANNOT_WRITE_PC);
6787 displaced_write_reg (regs, dsc, 3, imm12, CANNOT_WRITE_PC);
6788
6789 dsc->rd = rt;
6790
6791 dsc->u.ldst.xfersize = size;
6792 dsc->u.ldst.immed = 0;
6793 dsc->u.ldst.writeback = 0;
6794 dsc->u.ldst.restore_r4 = 0;
6795
6796 /* LDR R0, R2, R3 */
6797 dsc->modinsn[0] = 0xf852;
6798 dsc->modinsn[1] = 0x3;
6799 dsc->numinsns = 2;
6800
6801 dsc->cleanup = &cleanup_load;
6802
6803 return 0;
6804 }
6805
6806 static int
6807 thumb2_copy_load_reg_imm (struct gdbarch *gdbarch, uint16_t insn1,
6808 uint16_t insn2, struct regcache *regs,
6809 struct displaced_step_closure *dsc,
6810 int writeback, int immed)
6811 {
6812 unsigned int rt = bits (insn2, 12, 15);
6813 unsigned int rn = bits (insn1, 0, 3);
6814 unsigned int rm = bits (insn2, 0, 3); /* Only valid if !immed. */
6815 /* In LDR (register), there is also a register Rm, which is not allowed to
6816 be PC, so we don't have to check it. */
6817
6818 if (rt != ARM_PC_REGNUM && rn != ARM_PC_REGNUM)
6819 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "load",
6820 dsc);
6821
6822 if (debug_displaced)
6823 fprintf_unfiltered (gdb_stdlog,
6824 "displaced: copying ldr r%d [r%d] insn %.4x%.4x\n",
6825 rt, rn, insn1, insn2);
6826
6827 install_load_store (gdbarch, regs, dsc, 1, immed, writeback, 4,
6828 0, rt, rm, rn);
6829
6830 dsc->u.ldst.restore_r4 = 0;
6831
6832 if (immed)
6833 /* ldr[b]<cond> rt, [rn, #imm], etc.
6834 ->
6835 ldr[b]<cond> r0, [r2, #imm]. */
6836 {
6837 dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
6838 dsc->modinsn[1] = insn2 & 0x0fff;
6839 }
6840 else
6841 /* ldr[b]<cond> rt, [rn, rm], etc.
6842 ->
6843 ldr[b]<cond> r0, [r2, r3]. */
6844 {
6845 dsc->modinsn[0] = (insn1 & 0xfff0) | 0x2;
6846 dsc->modinsn[1] = (insn2 & 0x0ff0) | 0x3;
6847 }
6848
6849 dsc->numinsns = 2;
6850
6851 return 0;
6852 }
6853
6854
6855 static int
6856 arm_copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
6857 struct regcache *regs,
6858 struct displaced_step_closure *dsc,
6859 int load, int size, int usermode)
6860 {
6861 int immed = !bit (insn, 25);
6862 int writeback = (bit (insn, 24) == 0 || bit (insn, 21) != 0);
6863 unsigned int rt = bits (insn, 12, 15);
6864 unsigned int rn = bits (insn, 16, 19);
6865 unsigned int rm = bits (insn, 0, 3); /* Only valid if !immed. */
6866
6867 if (!insn_references_pc (insn, 0x000ff00ful))
6868 return arm_copy_unmodified (gdbarch, insn, "load/store", dsc);
6869
6870 if (debug_displaced)
6871 fprintf_unfiltered (gdb_stdlog,
6872 "displaced: copying %s%s r%d [r%d] insn %.8lx\n",
6873 load ? (size == 1 ? "ldrb" : "ldr")
6874 : (size == 1 ? "strb" : "str"), usermode ? "t" : "",
6875 rt, rn,
6876 (unsigned long) insn);
6877
6878 install_load_store (gdbarch, regs, dsc, load, immed, writeback, size,
6879 usermode, rt, rm, rn);
6880
6881 if (load || rt != ARM_PC_REGNUM)
6882 {
6883 dsc->u.ldst.restore_r4 = 0;
6884
6885 if (immed)
6886 /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
6887 ->
6888 {ldr,str}[b]<cond> r0, [r2, #imm]. */
6889 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
6890 else
6891 /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
6892 ->
6893 {ldr,str}[b]<cond> r0, [r2, r3]. */
6894 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
6895 }
6896 else
6897 {
6898 /* We need to use r4 as scratch. Make sure it's restored afterwards. */
6899 dsc->u.ldst.restore_r4 = 1;
6900 dsc->modinsn[0] = 0xe92d8000; /* push {pc} */
6901 dsc->modinsn[1] = 0xe8bd0010; /* pop {r4} */
6902 dsc->modinsn[2] = 0xe044400f; /* sub r4, r4, pc. */
6903 dsc->modinsn[3] = 0xe2844008; /* add r4, r4, #8. */
6904 dsc->modinsn[4] = 0xe0800004; /* add r0, r0, r4. */
6905
6906 /* As above. */
6907 if (immed)
6908 dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
6909 else
6910 dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
6911
6912 dsc->numinsns = 6;
6913 }
6914
6915 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
6916
6917 return 0;
6918 }
6919
6920 /* Cleanup LDM instructions with fully-populated register list. This is an
6921 unfortunate corner case: it's impossible to implement correctly by modifying
6922 the instruction. The issue is as follows: we have an instruction,
6923
6924 ldm rN, {r0-r15}
6925
6926 which we must rewrite to avoid loading PC. A possible solution would be to
6927 do the load in two halves, something like (with suitable cleanup
6928 afterwards):
6929
6930 mov r8, rN
6931 ldm[id][ab] r8!, {r0-r7}
6932 str r7, <temp>
6933 ldm[id][ab] r8, {r7-r14}
6934 <bkpt>
6935
6936 but at present there's no suitable place for <temp>, since the scratch space
6937 is overwritten before the cleanup routine is called. For now, we simply
6938 emulate the instruction. */
6939
6940 static void
6941 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
6942 struct displaced_step_closure *dsc)
6943 {
6944 int inc = dsc->u.block.increment;
6945 int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
6946 int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
6947 uint32_t regmask = dsc->u.block.regmask;
6948 int regno = inc ? 0 : 15;
6949 CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
6950 int exception_return = dsc->u.block.load && dsc->u.block.user
6951 && (regmask & 0x8000) != 0;
6952 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
6953 int do_transfer = condition_true (dsc->u.block.cond, status);
6954 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
6955
6956 if (!do_transfer)
6957 return;
6958
6959 /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
6960 sensible we can do here. Complain loudly. */
6961 if (exception_return)
6962 error (_("Cannot single-step exception return"));
6963
6964 /* We don't handle any stores here for now. */
6965 gdb_assert (dsc->u.block.load != 0);
6966
6967 if (debug_displaced)
6968 fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
6969 "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
6970 dsc->u.block.increment ? "inc" : "dec",
6971 dsc->u.block.before ? "before" : "after");
6972
6973 while (regmask)
6974 {
6975 uint32_t memword;
6976
6977 if (inc)
6978 while (regno <= ARM_PC_REGNUM && (regmask & (1 << regno)) == 0)
6979 regno++;
6980 else
6981 while (regno >= 0 && (regmask & (1 << regno)) == 0)
6982 regno--;
6983
6984 xfer_addr += bump_before;
6985
6986 memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
6987 displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
6988
6989 xfer_addr += bump_after;
6990
6991 regmask &= ~(1 << regno);
6992 }
6993
6994 if (dsc->u.block.writeback)
6995 displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
6996 CANNOT_WRITE_PC);
6997 }
6998
6999 /* Clean up an STM which included the PC in the register list. */
7000
7001 static void
7002 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
7003 struct displaced_step_closure *dsc)
7004 {
7005 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
7006 int store_executed = condition_true (dsc->u.block.cond, status);
7007 CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
7008 CORE_ADDR stm_insn_addr;
7009 uint32_t pc_val;
7010 long offset;
7011 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7012
7013 /* If condition code fails, there's nothing else to do. */
7014 if (!store_executed)
7015 return;
7016
7017 if (dsc->u.block.increment)
7018 {
7019 pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
7020
7021 if (dsc->u.block.before)
7022 pc_stored_at += 4;
7023 }
7024 else
7025 {
7026 pc_stored_at = dsc->u.block.xfer_addr;
7027
7028 if (dsc->u.block.before)
7029 pc_stored_at -= 4;
7030 }
7031
7032 pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
7033 stm_insn_addr = dsc->scratch_base;
7034 offset = pc_val - stm_insn_addr;
7035
7036 if (debug_displaced)
7037 fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
7038 "STM instruction\n", offset);
7039
7040 /* Rewrite the stored PC to the proper value for the non-displaced original
7041 instruction. */
7042 write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
7043 dsc->insn_addr + offset);
7044 }
7045
7046 /* Clean up an LDM which includes the PC in the register list. We clumped all
7047 the registers in the transferred list into a contiguous range r0...rX (to
7048 avoid loading PC directly and losing control of the debugged program), so we
7049 must undo that here. */
7050
7051 static void
7052 cleanup_block_load_pc (struct gdbarch *gdbarch,
7053 struct regcache *regs,
7054 struct displaced_step_closure *dsc)
7055 {
7056 uint32_t status = displaced_read_reg (regs, dsc, ARM_PS_REGNUM);
7057 int load_executed = condition_true (dsc->u.block.cond, status);
7058 unsigned int mask = dsc->u.block.regmask, write_reg = ARM_PC_REGNUM;
7059 unsigned int regs_loaded = bitcount (mask);
7060 unsigned int num_to_shuffle = regs_loaded, clobbered;
7061
7062 /* The method employed here will fail if the register list is fully populated
7063 (we need to avoid loading PC directly). */
7064 gdb_assert (num_to_shuffle < 16);
7065
7066 if (!load_executed)
7067 return;
7068
7069 clobbered = (1 << num_to_shuffle) - 1;
7070
7071 while (num_to_shuffle > 0)
7072 {
7073 if ((mask & (1 << write_reg)) != 0)
7074 {
7075 unsigned int read_reg = num_to_shuffle - 1;
7076
7077 if (read_reg != write_reg)
7078 {
7079 ULONGEST rval = displaced_read_reg (regs, dsc, read_reg);
7080 displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
7081 if (debug_displaced)
7082 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
7083 "loaded register r%d to r%d\n"), read_reg,
7084 write_reg);
7085 }
7086 else if (debug_displaced)
7087 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
7088 "r%d already in the right place\n"),
7089 write_reg);
7090
7091 clobbered &= ~(1 << write_reg);
7092
7093 num_to_shuffle--;
7094 }
7095
7096 write_reg--;
7097 }
7098
7099 /* Restore any registers we scribbled over. */
7100 for (write_reg = 0; clobbered != 0; write_reg++)
7101 {
7102 if ((clobbered & (1 << write_reg)) != 0)
7103 {
7104 displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
7105 CANNOT_WRITE_PC);
7106 if (debug_displaced)
7107 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
7108 "clobbered register r%d\n"), write_reg);
7109 clobbered &= ~(1 << write_reg);
7110 }
7111 }
7112
7113 /* Perform register writeback manually. */
7114 if (dsc->u.block.writeback)
7115 {
7116 ULONGEST new_rn_val = dsc->u.block.xfer_addr;
7117
7118 if (dsc->u.block.increment)
7119 new_rn_val += regs_loaded * 4;
7120 else
7121 new_rn_val -= regs_loaded * 4;
7122
7123 displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
7124 CANNOT_WRITE_PC);
7125 }
7126 }
7127
7128 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
7129 in user-level code (in particular exception return, ldm rn, {...pc}^). */
7130
7131 static int
7132 arm_copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn,
7133 struct regcache *regs,
7134 struct displaced_step_closure *dsc)
7135 {
7136 int load = bit (insn, 20);
7137 int user = bit (insn, 22);
7138 int increment = bit (insn, 23);
7139 int before = bit (insn, 24);
7140 int writeback = bit (insn, 21);
7141 int rn = bits (insn, 16, 19);
7142
7143 /* Block transfers which don't mention PC can be run directly
7144 out-of-line. */
7145 if (rn != ARM_PC_REGNUM && (insn & 0x8000) == 0)
7146 return arm_copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
7147
7148 if (rn == ARM_PC_REGNUM)
7149 {
7150 warning (_("displaced: Unpredictable LDM or STM with "
7151 "base register r15"));
7152 return arm_copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
7153 }
7154
7155 if (debug_displaced)
7156 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
7157 "%.8lx\n", (unsigned long) insn);
7158
7159 dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
7160 dsc->u.block.rn = rn;
7161
7162 dsc->u.block.load = load;
7163 dsc->u.block.user = user;
7164 dsc->u.block.increment = increment;
7165 dsc->u.block.before = before;
7166 dsc->u.block.writeback = writeback;
7167 dsc->u.block.cond = bits (insn, 28, 31);
7168
7169 dsc->u.block.regmask = insn & 0xffff;
7170
7171 if (load)
7172 {
7173 if ((insn & 0xffff) == 0xffff)
7174 {
7175 /* LDM with a fully-populated register list. This case is
7176 particularly tricky. Implement for now by fully emulating the
7177 instruction (which might not behave perfectly in all cases, but
7178 these instructions should be rare enough for that not to matter
7179 too much). */
7180 dsc->modinsn[0] = ARM_NOP;
7181
7182 dsc->cleanup = &cleanup_block_load_all;
7183 }
7184 else
7185 {
7186 /* LDM of a list of registers which includes PC. Implement by
7187 rewriting the list of registers to be transferred into a
7188 contiguous chunk r0...rX before doing the transfer, then shuffling
7189 registers into the correct places in the cleanup routine. */
7190 unsigned int regmask = insn & 0xffff;
7191 unsigned int num_in_list = bitcount (regmask), new_regmask, bit = 1;
7192 unsigned int to = 0, from = 0, i, new_rn;
7193
7194 for (i = 0; i < num_in_list; i++)
7195 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7196
7197 /* Writeback makes things complicated. We need to avoid clobbering
7198 the base register with one of the registers in our modified
7199 register list, but just using a different register can't work in
7200 all cases, e.g.:
7201
7202 ldm r14!, {r0-r13,pc}
7203
7204 which would need to be rewritten as:
7205
7206 ldm rN!, {r0-r14}
7207
7208 but that can't work, because there's no free register for N.
7209
7210 Solve this by turning off the writeback bit, and emulating
7211 writeback manually in the cleanup routine. */
7212
7213 if (writeback)
7214 insn &= ~(1 << 21);
7215
7216 new_regmask = (1 << num_in_list) - 1;
7217
7218 if (debug_displaced)
7219 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
7220 "{..., pc}: original reg list %.4x, modified "
7221 "list %.4x\n"), rn, writeback ? "!" : "",
7222 (int) insn & 0xffff, new_regmask);
7223
7224 dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
7225
7226 dsc->cleanup = &cleanup_block_load_pc;
7227 }
7228 }
7229 else
7230 {
7231 /* STM of a list of registers which includes PC. Run the instruction
7232 as-is, but out of line: this will store the wrong value for the PC,
7233 so we must manually fix up the memory in the cleanup routine.
7234 Doing things this way has the advantage that we can auto-detect
7235 the offset of the PC write (which is architecture-dependent) in
7236 the cleanup routine. */
7237 dsc->modinsn[0] = insn;
7238
7239 dsc->cleanup = &cleanup_block_store_pc;
7240 }
7241
7242 return 0;
7243 }
7244
7245 static int
7246 thumb2_copy_block_xfer (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
7247 struct regcache *regs,
7248 struct displaced_step_closure *dsc)
7249 {
7250 int rn = bits (insn1, 0, 3);
7251 int load = bit (insn1, 4);
7252 int writeback = bit (insn1, 5);
7253
7254 /* Block transfers which don't mention PC can be run directly
7255 out-of-line. */
7256 if (rn != ARM_PC_REGNUM && (insn2 & 0x8000) == 0)
7257 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "ldm/stm", dsc);
7258
7259 if (rn == ARM_PC_REGNUM)
7260 {
7261 warning (_("displaced: Unpredictable LDM or STM with "
7262 "base register r15"));
7263 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7264 "unpredictable ldm/stm", dsc);
7265 }
7266
7267 if (debug_displaced)
7268 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
7269 "%.4x%.4x\n", insn1, insn2);
7270
7271 /* Clear bit 13, since it should be always zero. */
7272 dsc->u.block.regmask = (insn2 & 0xdfff);
7273 dsc->u.block.rn = rn;
7274
7275 dsc->u.block.load = load;
7276 dsc->u.block.user = 0;
7277 dsc->u.block.increment = bit (insn1, 7);
7278 dsc->u.block.before = bit (insn1, 8);
7279 dsc->u.block.writeback = writeback;
7280 dsc->u.block.cond = INST_AL;
7281 dsc->u.block.xfer_addr = displaced_read_reg (regs, dsc, rn);
7282
7283 if (load)
7284 {
7285 if (dsc->u.block.regmask == 0xffff)
7286 {
7287 /* This branch is impossible to happen. */
7288 gdb_assert (0);
7289 }
7290 else
7291 {
7292 unsigned int regmask = dsc->u.block.regmask;
7293 unsigned int num_in_list = bitcount (regmask), new_regmask, bit = 1;
7294 unsigned int to = 0, from = 0, i, new_rn;
7295
7296 for (i = 0; i < num_in_list; i++)
7297 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
7298
7299 if (writeback)
7300 insn1 &= ~(1 << 5);
7301
7302 new_regmask = (1 << num_in_list) - 1;
7303
7304 if (debug_displaced)
7305 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
7306 "{..., pc}: original reg list %.4x, modified "
7307 "list %.4x\n"), rn, writeback ? "!" : "",
7308 (int) dsc->u.block.regmask, new_regmask);
7309
7310 dsc->modinsn[0] = insn1;
7311 dsc->modinsn[1] = (new_regmask & 0xffff);
7312 dsc->numinsns = 2;
7313
7314 dsc->cleanup = &cleanup_block_load_pc;
7315 }
7316 }
7317 else
7318 {
7319 dsc->modinsn[0] = insn1;
7320 dsc->modinsn[1] = insn2;
7321 dsc->numinsns = 2;
7322 dsc->cleanup = &cleanup_block_store_pc;
7323 }
7324 return 0;
7325 }
7326
7327 /* Cleanup/copy SVC (SWI) instructions. These two functions are overridden
7328 for Linux, where some SVC instructions must be treated specially. */
7329
7330 static void
7331 cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
7332 struct displaced_step_closure *dsc)
7333 {
7334 CORE_ADDR resume_addr = dsc->insn_addr + dsc->insn_size;
7335
7336 if (debug_displaced)
7337 fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
7338 "%.8lx\n", (unsigned long) resume_addr);
7339
7340 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
7341 }
7342
7343
7344 /* Common copy routine for svc instruciton. */
7345
7346 static int
7347 install_svc (struct gdbarch *gdbarch, struct regcache *regs,
7348 struct displaced_step_closure *dsc)
7349 {
7350 /* Preparation: none.
7351 Insn: unmodified svc.
7352 Cleanup: pc <- insn_addr + insn_size. */
7353
7354 /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
7355 instruction. */
7356 dsc->wrote_to_pc = 1;
7357
7358 /* Allow OS-specific code to override SVC handling. */
7359 if (dsc->u.svc.copy_svc_os)
7360 return dsc->u.svc.copy_svc_os (gdbarch, regs, dsc);
7361 else
7362 {
7363 dsc->cleanup = &cleanup_svc;
7364 return 0;
7365 }
7366 }
7367
7368 static int
7369 arm_copy_svc (struct gdbarch *gdbarch, uint32_t insn,
7370 struct regcache *regs, struct displaced_step_closure *dsc)
7371 {
7372
7373 if (debug_displaced)
7374 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
7375 (unsigned long) insn);
7376
7377 dsc->modinsn[0] = insn;
7378
7379 return install_svc (gdbarch, regs, dsc);
7380 }
7381
7382 static int
7383 thumb_copy_svc (struct gdbarch *gdbarch, uint16_t insn,
7384 struct regcache *regs, struct displaced_step_closure *dsc)
7385 {
7386
7387 if (debug_displaced)
7388 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.4x\n",
7389 insn);
7390
7391 dsc->modinsn[0] = insn;
7392
7393 return install_svc (gdbarch, regs, dsc);
7394 }
7395
7396 /* Copy undefined instructions. */
7397
7398 static int
7399 arm_copy_undef (struct gdbarch *gdbarch, uint32_t insn,
7400 struct displaced_step_closure *dsc)
7401 {
7402 if (debug_displaced)
7403 fprintf_unfiltered (gdb_stdlog,
7404 "displaced: copying undefined insn %.8lx\n",
7405 (unsigned long) insn);
7406
7407 dsc->modinsn[0] = insn;
7408
7409 return 0;
7410 }
7411
7412 static int
7413 thumb_32bit_copy_undef (struct gdbarch *gdbarch, uint16_t insn1, uint16_t insn2,
7414 struct displaced_step_closure *dsc)
7415 {
7416
7417 if (debug_displaced)
7418 fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn "
7419 "%.4x %.4x\n", (unsigned short) insn1,
7420 (unsigned short) insn2);
7421
7422 dsc->modinsn[0] = insn1;
7423 dsc->modinsn[1] = insn2;
7424 dsc->numinsns = 2;
7425
7426 return 0;
7427 }
7428
7429 /* Copy unpredictable instructions. */
7430
7431 static int
7432 arm_copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
7433 struct displaced_step_closure *dsc)
7434 {
7435 if (debug_displaced)
7436 fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
7437 "%.8lx\n", (unsigned long) insn);
7438
7439 dsc->modinsn[0] = insn;
7440
7441 return 0;
7442 }
7443
7444 /* The decode_* functions are instruction decoding helpers. They mostly follow
7445 the presentation in the ARM ARM. */
7446
7447 static int
7448 arm_decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
7449 struct regcache *regs,
7450 struct displaced_step_closure *dsc)
7451 {
7452 unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
7453 unsigned int rn = bits (insn, 16, 19);
7454
7455 if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0xe) == 0x0)
7456 return arm_copy_unmodified (gdbarch, insn, "cps", dsc);
7457 else if (op1 == 0x10 && op2 == 0x0 && (rn & 0xe) == 0x1)
7458 return arm_copy_unmodified (gdbarch, insn, "setend", dsc);
7459 else if ((op1 & 0x60) == 0x20)
7460 return arm_copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
7461 else if ((op1 & 0x71) == 0x40)
7462 return arm_copy_unmodified (gdbarch, insn, "neon elt/struct load/store",
7463 dsc);
7464 else if ((op1 & 0x77) == 0x41)
7465 return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
7466 else if ((op1 & 0x77) == 0x45)
7467 return arm_copy_preload (gdbarch, insn, regs, dsc); /* pli. */
7468 else if ((op1 & 0x77) == 0x51)
7469 {
7470 if (rn != 0xf)
7471 return arm_copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
7472 else
7473 return arm_copy_unpred (gdbarch, insn, dsc);
7474 }
7475 else if ((op1 & 0x77) == 0x55)
7476 return arm_copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
7477 else if (op1 == 0x57)
7478 switch (op2)
7479 {
7480 case 0x1: return arm_copy_unmodified (gdbarch, insn, "clrex", dsc);
7481 case 0x4: return arm_copy_unmodified (gdbarch, insn, "dsb", dsc);
7482 case 0x5: return arm_copy_unmodified (gdbarch, insn, "dmb", dsc);
7483 case 0x6: return arm_copy_unmodified (gdbarch, insn, "isb", dsc);
7484 default: return arm_copy_unpred (gdbarch, insn, dsc);
7485 }
7486 else if ((op1 & 0x63) == 0x43)
7487 return arm_copy_unpred (gdbarch, insn, dsc);
7488 else if ((op2 & 0x1) == 0x0)
7489 switch (op1 & ~0x80)
7490 {
7491 case 0x61:
7492 return arm_copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
7493 case 0x65:
7494 return arm_copy_preload_reg (gdbarch, insn, regs, dsc); /* pli reg. */
7495 case 0x71: case 0x75:
7496 /* pld/pldw reg. */
7497 return arm_copy_preload_reg (gdbarch, insn, regs, dsc);
7498 case 0x63: case 0x67: case 0x73: case 0x77:
7499 return arm_copy_unpred (gdbarch, insn, dsc);
7500 default:
7501 return arm_copy_undef (gdbarch, insn, dsc);
7502 }
7503 else
7504 return arm_copy_undef (gdbarch, insn, dsc); /* Probably unreachable. */
7505 }
7506
7507 static int
7508 arm_decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
7509 struct regcache *regs,
7510 struct displaced_step_closure *dsc)
7511 {
7512 if (bit (insn, 27) == 0)
7513 return arm_decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
7514 /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx. */
7515 else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
7516 {
7517 case 0x0: case 0x2:
7518 return arm_copy_unmodified (gdbarch, insn, "srs", dsc);
7519
7520 case 0x1: case 0x3:
7521 return arm_copy_unmodified (gdbarch, insn, "rfe", dsc);
7522
7523 case 0x4: case 0x5: case 0x6: case 0x7:
7524 return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
7525
7526 case 0x8:
7527 switch ((insn & 0xe00000) >> 21)
7528 {
7529 case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
7530 /* stc/stc2. */
7531 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
7532
7533 case 0x2:
7534 return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
7535
7536 default:
7537 return arm_copy_undef (gdbarch, insn, dsc);
7538 }
7539
7540 case 0x9:
7541 {
7542 int rn_f = (bits (insn, 16, 19) == 0xf);
7543 switch ((insn & 0xe00000) >> 21)
7544 {
7545 case 0x1: case 0x3:
7546 /* ldc/ldc2 imm (undefined for rn == pc). */
7547 return rn_f ? arm_copy_undef (gdbarch, insn, dsc)
7548 : arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
7549
7550 case 0x2:
7551 return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
7552
7553 case 0x4: case 0x5: case 0x6: case 0x7:
7554 /* ldc/ldc2 lit (undefined for rn != pc). */
7555 return rn_f ? arm_copy_copro_load_store (gdbarch, insn, regs, dsc)
7556 : arm_copy_undef (gdbarch, insn, dsc);
7557
7558 default:
7559 return arm_copy_undef (gdbarch, insn, dsc);
7560 }
7561 }
7562
7563 case 0xa:
7564 return arm_copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
7565
7566 case 0xb:
7567 if (bits (insn, 16, 19) == 0xf)
7568 /* ldc/ldc2 lit. */
7569 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
7570 else
7571 return arm_copy_undef (gdbarch, insn, dsc);
7572
7573 case 0xc:
7574 if (bit (insn, 4))
7575 return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
7576 else
7577 return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
7578
7579 case 0xd:
7580 if (bit (insn, 4))
7581 return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
7582 else
7583 return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
7584
7585 default:
7586 return arm_copy_undef (gdbarch, insn, dsc);
7587 }
7588 }
7589
7590 /* Decode miscellaneous instructions in dp/misc encoding space. */
7591
7592 static int
7593 arm_decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
7594 struct regcache *regs,
7595 struct displaced_step_closure *dsc)
7596 {
7597 unsigned int op2 = bits (insn, 4, 6);
7598 unsigned int op = bits (insn, 21, 22);
7599 unsigned int op1 = bits (insn, 16, 19);
7600
7601 switch (op2)
7602 {
7603 case 0x0:
7604 return arm_copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
7605
7606 case 0x1:
7607 if (op == 0x1) /* bx. */
7608 return arm_copy_bx_blx_reg (gdbarch, insn, regs, dsc);
7609 else if (op == 0x3)
7610 return arm_copy_unmodified (gdbarch, insn, "clz", dsc);
7611 else
7612 return arm_copy_undef (gdbarch, insn, dsc);
7613
7614 case 0x2:
7615 if (op == 0x1)
7616 /* Not really supported. */
7617 return arm_copy_unmodified (gdbarch, insn, "bxj", dsc);
7618 else
7619 return arm_copy_undef (gdbarch, insn, dsc);
7620
7621 case 0x3:
7622 if (op == 0x1)
7623 return arm_copy_bx_blx_reg (gdbarch, insn,
7624 regs, dsc); /* blx register. */
7625 else
7626 return arm_copy_undef (gdbarch, insn, dsc);
7627
7628 case 0x5:
7629 return arm_copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
7630
7631 case 0x7:
7632 if (op == 0x1)
7633 return arm_copy_unmodified (gdbarch, insn, "bkpt", dsc);
7634 else if (op == 0x3)
7635 /* Not really supported. */
7636 return arm_copy_unmodified (gdbarch, insn, "smc", dsc);
7637
7638 default:
7639 return arm_copy_undef (gdbarch, insn, dsc);
7640 }
7641 }
7642
7643 static int
7644 arm_decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn,
7645 struct regcache *regs,
7646 struct displaced_step_closure *dsc)
7647 {
7648 if (bit (insn, 25))
7649 switch (bits (insn, 20, 24))
7650 {
7651 case 0x10:
7652 return arm_copy_unmodified (gdbarch, insn, "movw", dsc);
7653
7654 case 0x14:
7655 return arm_copy_unmodified (gdbarch, insn, "movt", dsc);
7656
7657 case 0x12: case 0x16:
7658 return arm_copy_unmodified (gdbarch, insn, "msr imm", dsc);
7659
7660 default:
7661 return arm_copy_alu_imm (gdbarch, insn, regs, dsc);
7662 }
7663 else
7664 {
7665 uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
7666
7667 if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
7668 return arm_copy_alu_reg (gdbarch, insn, regs, dsc);
7669 else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
7670 return arm_copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
7671 else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
7672 return arm_decode_miscellaneous (gdbarch, insn, regs, dsc);
7673 else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
7674 return arm_copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
7675 else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
7676 return arm_copy_unmodified (gdbarch, insn, "mul/mla", dsc);
7677 else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
7678 return arm_copy_unmodified (gdbarch, insn, "synch", dsc);
7679 else if (op2 == 0xb || (op2 & 0xd) == 0xd)
7680 /* 2nd arg means "unpriveleged". */
7681 return arm_copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
7682 dsc);
7683 }
7684
7685 /* Should be unreachable. */
7686 return 1;
7687 }
7688
7689 static int
7690 arm_decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
7691 struct regcache *regs,
7692 struct displaced_step_closure *dsc)
7693 {
7694 int a = bit (insn, 25), b = bit (insn, 4);
7695 uint32_t op1 = bits (insn, 20, 24);
7696 int rn_f = bits (insn, 16, 19) == 0xf;
7697
7698 if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
7699 || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
7700 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 0);
7701 else if ((!a && (op1 & 0x17) == 0x02)
7702 || (a && (op1 & 0x17) == 0x02 && !b))
7703 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 4, 1);
7704 else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
7705 || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
7706 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 0);
7707 else if ((!a && (op1 & 0x17) == 0x03)
7708 || (a && (op1 & 0x17) == 0x03 && !b))
7709 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 4, 1);
7710 else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
7711 || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
7712 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
7713 else if ((!a && (op1 & 0x17) == 0x06)
7714 || (a && (op1 & 0x17) == 0x06 && !b))
7715 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
7716 else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
7717 || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
7718 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
7719 else if ((!a && (op1 & 0x17) == 0x07)
7720 || (a && (op1 & 0x17) == 0x07 && !b))
7721 return arm_copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
7722
7723 /* Should be unreachable. */
7724 return 1;
7725 }
7726
7727 static int
7728 arm_decode_media (struct gdbarch *gdbarch, uint32_t insn,
7729 struct displaced_step_closure *dsc)
7730 {
7731 switch (bits (insn, 20, 24))
7732 {
7733 case 0x00: case 0x01: case 0x02: case 0x03:
7734 return arm_copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
7735
7736 case 0x04: case 0x05: case 0x06: case 0x07:
7737 return arm_copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
7738
7739 case 0x08: case 0x09: case 0x0a: case 0x0b:
7740 case 0x0c: case 0x0d: case 0x0e: case 0x0f:
7741 return arm_copy_unmodified (gdbarch, insn,
7742 "decode/pack/unpack/saturate/reverse", dsc);
7743
7744 case 0x18:
7745 if (bits (insn, 5, 7) == 0) /* op2. */
7746 {
7747 if (bits (insn, 12, 15) == 0xf)
7748 return arm_copy_unmodified (gdbarch, insn, "usad8", dsc);
7749 else
7750 return arm_copy_unmodified (gdbarch, insn, "usada8", dsc);
7751 }
7752 else
7753 return arm_copy_undef (gdbarch, insn, dsc);
7754
7755 case 0x1a: case 0x1b:
7756 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
7757 return arm_copy_unmodified (gdbarch, insn, "sbfx", dsc);
7758 else
7759 return arm_copy_undef (gdbarch, insn, dsc);
7760
7761 case 0x1c: case 0x1d:
7762 if (bits (insn, 5, 6) == 0x0) /* op2[1:0]. */
7763 {
7764 if (bits (insn, 0, 3) == 0xf)
7765 return arm_copy_unmodified (gdbarch, insn, "bfc", dsc);
7766 else
7767 return arm_copy_unmodified (gdbarch, insn, "bfi", dsc);
7768 }
7769 else
7770 return arm_copy_undef (gdbarch, insn, dsc);
7771
7772 case 0x1e: case 0x1f:
7773 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
7774 return arm_copy_unmodified (gdbarch, insn, "ubfx", dsc);
7775 else
7776 return arm_copy_undef (gdbarch, insn, dsc);
7777 }
7778
7779 /* Should be unreachable. */
7780 return 1;
7781 }
7782
7783 static int
7784 arm_decode_b_bl_ldmstm (struct gdbarch *gdbarch, int32_t insn,
7785 struct regcache *regs,
7786 struct displaced_step_closure *dsc)
7787 {
7788 if (bit (insn, 25))
7789 return arm_copy_b_bl_blx (gdbarch, insn, regs, dsc);
7790 else
7791 return arm_copy_block_xfer (gdbarch, insn, regs, dsc);
7792 }
7793
7794 static int
7795 arm_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
7796 struct regcache *regs,
7797 struct displaced_step_closure *dsc)
7798 {
7799 unsigned int opcode = bits (insn, 20, 24);
7800
7801 switch (opcode)
7802 {
7803 case 0x04: case 0x05: /* VFP/Neon mrrc/mcrr. */
7804 return arm_copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
7805
7806 case 0x08: case 0x0a: case 0x0c: case 0x0e:
7807 case 0x12: case 0x16:
7808 return arm_copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
7809
7810 case 0x09: case 0x0b: case 0x0d: case 0x0f:
7811 case 0x13: case 0x17:
7812 return arm_copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
7813
7814 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
7815 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
7816 /* Note: no writeback for these instructions. Bit 25 will always be
7817 zero though (via caller), so the following works OK. */
7818 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
7819 }
7820
7821 /* Should be unreachable. */
7822 return 1;
7823 }
7824
7825 /* Decode shifted register instructions. */
7826
7827 static int
7828 thumb2_decode_dp_shift_reg (struct gdbarch *gdbarch, uint16_t insn1,
7829 uint16_t insn2, struct regcache *regs,
7830 struct displaced_step_closure *dsc)
7831 {
7832 /* PC is only allowed to be used in instruction MOV. */
7833
7834 unsigned int op = bits (insn1, 5, 8);
7835 unsigned int rn = bits (insn1, 0, 3);
7836
7837 if (op == 0x2 && rn == 0xf) /* MOV */
7838 return thumb2_copy_alu_imm (gdbarch, insn1, insn2, regs, dsc);
7839 else
7840 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7841 "dp (shift reg)", dsc);
7842 }
7843
7844
7845 /* Decode extension register load/store. Exactly the same as
7846 arm_decode_ext_reg_ld_st. */
7847
7848 static int
7849 thumb2_decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint16_t insn1,
7850 uint16_t insn2, struct regcache *regs,
7851 struct displaced_step_closure *dsc)
7852 {
7853 unsigned int opcode = bits (insn1, 4, 8);
7854
7855 switch (opcode)
7856 {
7857 case 0x04: case 0x05:
7858 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7859 "vfp/neon vmov", dsc);
7860
7861 case 0x08: case 0x0c: /* 01x00 */
7862 case 0x0a: case 0x0e: /* 01x10 */
7863 case 0x12: case 0x16: /* 10x10 */
7864 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7865 "vfp/neon vstm/vpush", dsc);
7866
7867 case 0x09: case 0x0d: /* 01x01 */
7868 case 0x0b: case 0x0f: /* 01x11 */
7869 case 0x13: case 0x17: /* 10x11 */
7870 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7871 "vfp/neon vldm/vpop", dsc);
7872
7873 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
7874 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7875 "vstr", dsc);
7876 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
7877 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2, regs, dsc);
7878 }
7879
7880 /* Should be unreachable. */
7881 return 1;
7882 }
7883
7884 static int
7885 arm_decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
7886 struct regcache *regs, struct displaced_step_closure *dsc)
7887 {
7888 unsigned int op1 = bits (insn, 20, 25);
7889 int op = bit (insn, 4);
7890 unsigned int coproc = bits (insn, 8, 11);
7891 unsigned int rn = bits (insn, 16, 19);
7892
7893 if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
7894 return arm_decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
7895 else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
7896 && (coproc & 0xe) != 0xa)
7897 /* stc/stc2. */
7898 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
7899 else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
7900 && (coproc & 0xe) != 0xa)
7901 /* ldc/ldc2 imm/lit. */
7902 return arm_copy_copro_load_store (gdbarch, insn, regs, dsc);
7903 else if ((op1 & 0x3e) == 0x00)
7904 return arm_copy_undef (gdbarch, insn, dsc);
7905 else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
7906 return arm_copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
7907 else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
7908 return arm_copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
7909 else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
7910 return arm_copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
7911 else if ((op1 & 0x30) == 0x20 && !op)
7912 {
7913 if ((coproc & 0xe) == 0xa)
7914 return arm_copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
7915 else
7916 return arm_copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
7917 }
7918 else if ((op1 & 0x30) == 0x20 && op)
7919 return arm_copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
7920 else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
7921 return arm_copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
7922 else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
7923 return arm_copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
7924 else if ((op1 & 0x30) == 0x30)
7925 return arm_copy_svc (gdbarch, insn, regs, dsc);
7926 else
7927 return arm_copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
7928 }
7929
7930 static int
7931 thumb2_decode_svc_copro (struct gdbarch *gdbarch, uint16_t insn1,
7932 uint16_t insn2, struct regcache *regs,
7933 struct displaced_step_closure *dsc)
7934 {
7935 unsigned int coproc = bits (insn2, 8, 11);
7936 unsigned int op1 = bits (insn1, 4, 9);
7937 unsigned int bit_5_8 = bits (insn1, 5, 8);
7938 unsigned int bit_9 = bit (insn1, 9);
7939 unsigned int bit_4 = bit (insn1, 4);
7940 unsigned int rn = bits (insn1, 0, 3);
7941
7942 if (bit_9 == 0)
7943 {
7944 if (bit_5_8 == 2)
7945 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7946 "neon 64bit xfer/mrrc/mrrc2/mcrr/mcrr2",
7947 dsc);
7948 else if (bit_5_8 == 0) /* UNDEFINED. */
7949 return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
7950 else
7951 {
7952 /*coproc is 101x. SIMD/VFP, ext registers load/store. */
7953 if ((coproc & 0xe) == 0xa)
7954 return thumb2_decode_ext_reg_ld_st (gdbarch, insn1, insn2, regs,
7955 dsc);
7956 else /* coproc is not 101x. */
7957 {
7958 if (bit_4 == 0) /* STC/STC2. */
7959 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
7960 "stc/stc2", dsc);
7961 else /* LDC/LDC2 {literal, immeidate}. */
7962 return thumb2_copy_copro_load_store (gdbarch, insn1, insn2,
7963 regs, dsc);
7964 }
7965 }
7966 }
7967 else
7968 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2, "coproc", dsc);
7969
7970 return 0;
7971 }
7972
7973 static void
7974 install_pc_relative (struct gdbarch *gdbarch, struct regcache *regs,
7975 struct displaced_step_closure *dsc, int rd)
7976 {
7977 /* ADR Rd, #imm
7978
7979 Rewrite as:
7980
7981 Preparation: Rd <- PC
7982 Insn: ADD Rd, #imm
7983 Cleanup: Null.
7984 */
7985
7986 /* Rd <- PC */
7987 int val = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
7988 displaced_write_reg (regs, dsc, rd, val, CANNOT_WRITE_PC);
7989 }
7990
7991 static int
7992 thumb_copy_pc_relative_16bit (struct gdbarch *gdbarch, struct regcache *regs,
7993 struct displaced_step_closure *dsc,
7994 int rd, unsigned int imm)
7995 {
7996
7997 /* Encoding T2: ADDS Rd, #imm */
7998 dsc->modinsn[0] = (0x3000 | (rd << 8) | imm);
7999
8000 install_pc_relative (gdbarch, regs, dsc, rd);
8001
8002 return 0;
8003 }
8004
8005 static int
8006 thumb_decode_pc_relative_16bit (struct gdbarch *gdbarch, uint16_t insn,
8007 struct regcache *regs,
8008 struct displaced_step_closure *dsc)
8009 {
8010 unsigned int rd = bits (insn, 8, 10);
8011 unsigned int imm8 = bits (insn, 0, 7);
8012
8013 if (debug_displaced)
8014 fprintf_unfiltered (gdb_stdlog,
8015 "displaced: copying thumb adr r%d, #%d insn %.4x\n",
8016 rd, imm8, insn);
8017
8018 return thumb_copy_pc_relative_16bit (gdbarch, regs, dsc, rd, imm8);
8019 }
8020
8021 static int
8022 thumb_copy_pc_relative_32bit (struct gdbarch *gdbarch, uint16_t insn1,
8023 uint16_t insn2, struct regcache *regs,
8024 struct displaced_step_closure *dsc)
8025 {
8026 unsigned int rd = bits (insn2, 8, 11);
8027 /* Since immediate has the same encoding in ADR ADD and SUB, so we simply
8028 extract raw immediate encoding rather than computing immediate. When
8029 generating ADD or SUB instruction, we can simply perform OR operation to
8030 set immediate into ADD. */
8031 unsigned int imm_3_8 = insn2 & 0x70ff;
8032 unsigned int imm_i = insn1 & 0x0400; /* Clear all bits except bit 10. */
8033
8034 if (debug_displaced)
8035 fprintf_unfiltered (gdb_stdlog,
8036 "displaced: copying thumb adr r%d, #%d:%d insn %.4x%.4x\n",
8037 rd, imm_i, imm_3_8, insn1, insn2);
8038
8039 if (bit (insn1, 7)) /* Encoding T2 */
8040 {
8041 /* Encoding T3: SUB Rd, Rd, #imm */
8042 dsc->modinsn[0] = (0xf1a0 | rd | imm_i);
8043 dsc->modinsn[1] = ((rd << 8) | imm_3_8);
8044 }
8045 else /* Encoding T3 */
8046 {
8047 /* Encoding T3: ADD Rd, Rd, #imm */
8048 dsc->modinsn[0] = (0xf100 | rd | imm_i);
8049 dsc->modinsn[1] = ((rd << 8) | imm_3_8);
8050 }
8051 dsc->numinsns = 2;
8052
8053 install_pc_relative (gdbarch, regs, dsc, rd);
8054
8055 return 0;
8056 }
8057
8058 static int
8059 thumb_copy_16bit_ldr_literal (struct gdbarch *gdbarch, unsigned short insn1,
8060 struct regcache *regs,
8061 struct displaced_step_closure *dsc)
8062 {
8063 unsigned int rt = bits (insn1, 8, 10);
8064 unsigned int pc;
8065 int imm8 = (bits (insn1, 0, 7) << 2);
8066 CORE_ADDR from = dsc->insn_addr;
8067
8068 /* LDR Rd, #imm8
8069
8070 Rwrite as:
8071
8072 Preparation: tmp0 <- R0, tmp2 <- R2, tmp3 <- R3, R2 <- PC, R3 <- #imm8;
8073
8074 Insn: LDR R0, [R2, R3];
8075 Cleanup: R2 <- tmp2, R3 <- tmp3, Rd <- R0, R0 <- tmp0 */
8076
8077 if (debug_displaced)
8078 fprintf_unfiltered (gdb_stdlog,
8079 "displaced: copying thumb ldr r%d [pc #%d]\n"
8080 , rt, imm8);
8081
8082 dsc->tmp[0] = displaced_read_reg (regs, dsc, 0);
8083 dsc->tmp[2] = displaced_read_reg (regs, dsc, 2);
8084 dsc->tmp[3] = displaced_read_reg (regs, dsc, 3);
8085 pc = displaced_read_reg (regs, dsc, ARM_PC_REGNUM);
8086 /* The assembler calculates the required value of the offset from the
8087 Align(PC,4) value of this instruction to the label. */
8088 pc = pc & 0xfffffffc;
8089
8090 displaced_write_reg (regs, dsc, 2, pc, CANNOT_WRITE_PC);
8091 displaced_write_reg (regs, dsc, 3, imm8, CANNOT_WRITE_PC);
8092
8093 dsc->rd = rt;
8094 dsc->u.ldst.xfersize = 4;
8095 dsc->u.ldst.rn = 0;
8096 dsc->u.ldst.immed = 0;
8097 dsc->u.ldst.writeback = 0;
8098 dsc->u.ldst.restore_r4 = 0;
8099
8100 dsc->modinsn[0] = 0x58d0; /* ldr r0, [r2, r3]*/
8101
8102 dsc->cleanup = &cleanup_load;
8103
8104 return 0;
8105 }
8106
8107 /* Copy Thumb cbnz/cbz insruction. */
8108
8109 static int
8110 thumb_copy_cbnz_cbz (struct gdbarch *gdbarch, uint16_t insn1,
8111 struct regcache *regs,
8112 struct displaced_step_closure *dsc)
8113 {
8114 int non_zero = bit (insn1, 11);
8115 unsigned int imm5 = (bit (insn1, 9) << 6) | (bits (insn1, 3, 7) << 1);
8116 CORE_ADDR from = dsc->insn_addr;
8117 int rn = bits (insn1, 0, 2);
8118 int rn_val = displaced_read_reg (regs, dsc, rn);
8119
8120 dsc->u.branch.cond = (rn_val && non_zero) || (!rn_val && !non_zero);
8121 /* CBNZ and CBZ do not affect the condition flags. If condition is true,
8122 set it INST_AL, so cleanup_branch will know branch is taken, otherwise,
8123 condition is false, let it be, cleanup_branch will do nothing. */
8124 if (dsc->u.branch.cond)
8125 {
8126 dsc->u.branch.cond = INST_AL;
8127 dsc->u.branch.dest = from + 4 + imm5;
8128 }
8129 else
8130 dsc->u.branch.dest = from + 2;
8131
8132 dsc->u.branch.link = 0;
8133 dsc->u.branch.exchange = 0;
8134
8135 if (debug_displaced)
8136 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s [r%d = 0x%x]"
8137 " insn %.4x to %.8lx\n", non_zero ? "cbnz" : "cbz",
8138 rn, rn_val, insn1, dsc->u.branch.dest);
8139
8140 dsc->modinsn[0] = THUMB_NOP;
8141
8142 dsc->cleanup = &cleanup_branch;
8143 return 0;
8144 }
8145
8146 /* Copy Table Branch Byte/Halfword */
8147 static int
8148 thumb2_copy_table_branch (struct gdbarch *gdbarch, uint16_t insn1,
8149 uint16_t insn2, struct regcache *regs,
8150 struct displaced_step_closure *dsc)
8151 {
8152 ULONGEST rn_val, rm_val;
8153 int is_tbh = bit (insn2, 4);
8154 CORE_ADDR halfwords = 0;
8155 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8156
8157 rn_val = displaced_read_reg (regs, dsc, bits (insn1, 0, 3));
8158 rm_val = displaced_read_reg (regs, dsc, bits (insn2, 0, 3));
8159
8160 if (is_tbh)
8161 {
8162 gdb_byte buf[2];
8163
8164 target_read_memory (rn_val + 2 * rm_val, buf, 2);
8165 halfwords = extract_unsigned_integer (buf, 2, byte_order);
8166 }
8167 else
8168 {
8169 gdb_byte buf[1];
8170
8171 target_read_memory (rn_val + rm_val, buf, 1);
8172 halfwords = extract_unsigned_integer (buf, 1, byte_order);
8173 }
8174
8175 if (debug_displaced)
8176 fprintf_unfiltered (gdb_stdlog, "displaced: %s base 0x%x offset 0x%x"
8177 " offset 0x%x\n", is_tbh ? "tbh" : "tbb",
8178 (unsigned int) rn_val, (unsigned int) rm_val,
8179 (unsigned int) halfwords);
8180
8181 dsc->u.branch.cond = INST_AL;
8182 dsc->u.branch.link = 0;
8183 dsc->u.branch.exchange = 0;
8184 dsc->u.branch.dest = dsc->insn_addr + 4 + 2 * halfwords;
8185
8186 dsc->cleanup = &cleanup_branch;
8187
8188 return 0;
8189 }
8190
8191 static void
8192 cleanup_pop_pc_16bit_all (struct gdbarch *gdbarch, struct regcache *regs,
8193 struct displaced_step_closure *dsc)
8194 {
8195 /* PC <- r7 */
8196 int val = displaced_read_reg (regs, dsc, 7);
8197 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, val, BX_WRITE_PC);
8198
8199 /* r7 <- r8 */
8200 val = displaced_read_reg (regs, dsc, 8);
8201 displaced_write_reg (regs, dsc, 7, val, CANNOT_WRITE_PC);
8202
8203 /* r8 <- tmp[0] */
8204 displaced_write_reg (regs, dsc, 8, dsc->tmp[0], CANNOT_WRITE_PC);
8205
8206 }
8207
8208 static int
8209 thumb_copy_pop_pc_16bit (struct gdbarch *gdbarch, unsigned short insn1,
8210 struct regcache *regs,
8211 struct displaced_step_closure *dsc)
8212 {
8213 dsc->u.block.regmask = insn1 & 0x00ff;
8214
8215 /* Rewrite instruction: POP {rX, rY, ...,rZ, PC}
8216 to :
8217
8218 (1) register list is full, that is, r0-r7 are used.
8219 Prepare: tmp[0] <- r8
8220
8221 POP {r0, r1, ...., r6, r7}; remove PC from reglist
8222 MOV r8, r7; Move value of r7 to r8;
8223 POP {r7}; Store PC value into r7.
8224
8225 Cleanup: PC <- r7, r7 <- r8, r8 <-tmp[0]
8226
8227 (2) register list is not full, supposing there are N registers in
8228 register list (except PC, 0 <= N <= 7).
8229 Prepare: for each i, 0 - N, tmp[i] <- ri.
8230
8231 POP {r0, r1, ...., rN};
8232
8233 Cleanup: Set registers in original reglist from r0 - rN. Restore r0 - rN
8234 from tmp[] properly.
8235 */
8236 if (debug_displaced)
8237 fprintf_unfiltered (gdb_stdlog,
8238 "displaced: copying thumb pop {%.8x, pc} insn %.4x\n",
8239 dsc->u.block.regmask, insn1);
8240
8241 if (dsc->u.block.regmask == 0xff)
8242 {
8243 dsc->tmp[0] = displaced_read_reg (regs, dsc, 8);
8244
8245 dsc->modinsn[0] = (insn1 & 0xfeff); /* POP {r0,r1,...,r6, r7} */
8246 dsc->modinsn[1] = 0x46b8; /* MOV r8, r7 */
8247 dsc->modinsn[2] = 0xbc80; /* POP {r7} */
8248
8249 dsc->numinsns = 3;
8250 dsc->cleanup = &cleanup_pop_pc_16bit_all;
8251 }
8252 else
8253 {
8254 unsigned int num_in_list = bitcount (dsc->u.block.regmask);
8255 unsigned int new_regmask, bit = 1;
8256 unsigned int to = 0, from = 0, i, new_rn;
8257
8258 for (i = 0; i < num_in_list + 1; i++)
8259 dsc->tmp[i] = displaced_read_reg (regs, dsc, i);
8260
8261 new_regmask = (1 << (num_in_list + 1)) - 1;
8262
8263 if (debug_displaced)
8264 fprintf_unfiltered (gdb_stdlog, _("displaced: POP "
8265 "{..., pc}: original reg list %.4x,"
8266 " modified list %.4x\n"),
8267 (int) dsc->u.block.regmask, new_regmask);
8268
8269 dsc->u.block.regmask |= 0x8000;
8270 dsc->u.block.writeback = 0;
8271 dsc->u.block.cond = INST_AL;
8272
8273 dsc->modinsn[0] = (insn1 & ~0x1ff) | (new_regmask & 0xff);
8274
8275 dsc->cleanup = &cleanup_block_load_pc;
8276 }
8277
8278 return 0;
8279 }
8280
8281 static void
8282 thumb_process_displaced_16bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
8283 struct regcache *regs,
8284 struct displaced_step_closure *dsc)
8285 {
8286 unsigned short op_bit_12_15 = bits (insn1, 12, 15);
8287 unsigned short op_bit_10_11 = bits (insn1, 10, 11);
8288 int err = 0;
8289
8290 /* 16-bit thumb instructions. */
8291 switch (op_bit_12_15)
8292 {
8293 /* Shift (imme), add, subtract, move and compare. */
8294 case 0: case 1: case 2: case 3:
8295 err = thumb_copy_unmodified_16bit (gdbarch, insn1,
8296 "shift/add/sub/mov/cmp",
8297 dsc);
8298 break;
8299 case 4:
8300 switch (op_bit_10_11)
8301 {
8302 case 0: /* Data-processing */
8303 err = thumb_copy_unmodified_16bit (gdbarch, insn1,
8304 "data-processing",
8305 dsc);
8306 break;
8307 case 1: /* Special data instructions and branch and exchange. */
8308 {
8309 unsigned short op = bits (insn1, 7, 9);
8310 if (op == 6 || op == 7) /* BX or BLX */
8311 err = thumb_copy_bx_blx_reg (gdbarch, insn1, regs, dsc);
8312 else if (bits (insn1, 6, 7) != 0) /* ADD/MOV/CMP high registers. */
8313 err = thumb_copy_alu_reg (gdbarch, insn1, regs, dsc);
8314 else
8315 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "special data",
8316 dsc);
8317 }
8318 break;
8319 default: /* LDR (literal) */
8320 err = thumb_copy_16bit_ldr_literal (gdbarch, insn1, regs, dsc);
8321 }
8322 break;
8323 case 5: case 6: case 7: case 8: case 9: /* Load/Store single data item */
8324 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldr/str", dsc);
8325 break;
8326 case 10:
8327 if (op_bit_10_11 < 2) /* Generate PC-relative address */
8328 err = thumb_decode_pc_relative_16bit (gdbarch, insn1, regs, dsc);
8329 else /* Generate SP-relative address */
8330 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "sp-relative", dsc);
8331 break;
8332 case 11: /* Misc 16-bit instructions */
8333 {
8334 switch (bits (insn1, 8, 11))
8335 {
8336 case 1: case 3: case 9: case 11: /* CBNZ, CBZ */
8337 err = thumb_copy_cbnz_cbz (gdbarch, insn1, regs, dsc);
8338 break;
8339 case 12: case 13: /* POP */
8340 if (bit (insn1, 8)) /* PC is in register list. */
8341 err = thumb_copy_pop_pc_16bit (gdbarch, insn1, regs, dsc);
8342 else
8343 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "pop", dsc);
8344 break;
8345 case 15: /* If-Then, and hints */
8346 if (bits (insn1, 0, 3))
8347 /* If-Then makes up to four following instructions conditional.
8348 IT instruction itself is not conditional, so handle it as a
8349 common unmodified instruction. */
8350 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "If-Then",
8351 dsc);
8352 else
8353 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "hints", dsc);
8354 break;
8355 default:
8356 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "misc", dsc);
8357 }
8358 }
8359 break;
8360 case 12:
8361 if (op_bit_10_11 < 2) /* Store multiple registers */
8362 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "stm", dsc);
8363 else /* Load multiple registers */
8364 err = thumb_copy_unmodified_16bit (gdbarch, insn1, "ldm", dsc);
8365 break;
8366 case 13: /* Conditional branch and supervisor call */
8367 if (bits (insn1, 9, 11) != 7) /* conditional branch */
8368 err = thumb_copy_b (gdbarch, insn1, dsc);
8369 else
8370 err = thumb_copy_svc (gdbarch, insn1, regs, dsc);
8371 break;
8372 case 14: /* Unconditional branch */
8373 err = thumb_copy_b (gdbarch, insn1, dsc);
8374 break;
8375 default:
8376 err = 1;
8377 }
8378
8379 if (err)
8380 internal_error (__FILE__, __LINE__,
8381 _("thumb_process_displaced_16bit_insn: Instruction decode error"));
8382 }
8383
8384 static int
8385 decode_thumb_32bit_ld_mem_hints (struct gdbarch *gdbarch,
8386 uint16_t insn1, uint16_t insn2,
8387 struct regcache *regs,
8388 struct displaced_step_closure *dsc)
8389 {
8390 int rt = bits (insn2, 12, 15);
8391 int rn = bits (insn1, 0, 3);
8392 int op1 = bits (insn1, 7, 8);
8393 int err = 0;
8394
8395 switch (bits (insn1, 5, 6))
8396 {
8397 case 0: /* Load byte and memory hints */
8398 if (rt == 0xf) /* PLD/PLI */
8399 {
8400 if (rn == 0xf)
8401 /* PLD literal or Encoding T3 of PLI(immediate, literal). */
8402 return thumb2_copy_preload (gdbarch, insn1, insn2, regs, dsc);
8403 else
8404 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8405 "pli/pld", dsc);
8406 }
8407 else
8408 {
8409 if (rn == 0xf) /* LDRB/LDRSB (literal) */
8410 return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
8411 1);
8412 else
8413 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8414 "ldrb{reg, immediate}/ldrbt",
8415 dsc);
8416 }
8417
8418 break;
8419 case 1: /* Load halfword and memory hints. */
8420 if (rt == 0xf) /* PLD{W} and Unalloc memory hint. */
8421 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8422 "pld/unalloc memhint", dsc);
8423 else
8424 {
8425 if (rn == 0xf)
8426 return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc,
8427 2);
8428 else
8429 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8430 "ldrh/ldrht", dsc);
8431 }
8432 break;
8433 case 2: /* Load word */
8434 {
8435 int insn2_bit_8_11 = bits (insn2, 8, 11);
8436
8437 if (rn == 0xf)
8438 return thumb2_copy_load_literal (gdbarch, insn1, insn2, regs, dsc, 4);
8439 else if (op1 == 0x1) /* Encoding T3 */
8440 return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs, dsc,
8441 0, 1);
8442 else /* op1 == 0x0 */
8443 {
8444 if (insn2_bit_8_11 == 0xc || (insn2_bit_8_11 & 0x9) == 0x9)
8445 /* LDR (immediate) */
8446 return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
8447 dsc, bit (insn2, 8), 1);
8448 else if (insn2_bit_8_11 == 0xe) /* LDRT */
8449 return thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8450 "ldrt", dsc);
8451 else
8452 /* LDR (register) */
8453 return thumb2_copy_load_reg_imm (gdbarch, insn1, insn2, regs,
8454 dsc, 0, 0);
8455 }
8456 break;
8457 }
8458 default:
8459 return thumb_32bit_copy_undef (gdbarch, insn1, insn2, dsc);
8460 break;
8461 }
8462 return 0;
8463 }
8464
8465 static void
8466 thumb_process_displaced_32bit_insn (struct gdbarch *gdbarch, uint16_t insn1,
8467 uint16_t insn2, struct regcache *regs,
8468 struct displaced_step_closure *dsc)
8469 {
8470 int err = 0;
8471 unsigned short op = bit (insn2, 15);
8472 unsigned int op1 = bits (insn1, 11, 12);
8473
8474 switch (op1)
8475 {
8476 case 1:
8477 {
8478 switch (bits (insn1, 9, 10))
8479 {
8480 case 0:
8481 if (bit (insn1, 6))
8482 {
8483 /* Load/store {dual, execlusive}, table branch. */
8484 if (bits (insn1, 7, 8) == 1 && bits (insn1, 4, 5) == 1
8485 && bits (insn2, 5, 7) == 0)
8486 err = thumb2_copy_table_branch (gdbarch, insn1, insn2, regs,
8487 dsc);
8488 else
8489 /* PC is not allowed to use in load/store {dual, exclusive}
8490 instructions. */
8491 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8492 "load/store dual/ex", dsc);
8493 }
8494 else /* load/store multiple */
8495 {
8496 switch (bits (insn1, 7, 8))
8497 {
8498 case 0: case 3: /* SRS, RFE */
8499 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8500 "srs/rfe", dsc);
8501 break;
8502 case 1: case 2: /* LDM/STM/PUSH/POP */
8503 err = thumb2_copy_block_xfer (gdbarch, insn1, insn2, regs, dsc);
8504 break;
8505 }
8506 }
8507 break;
8508
8509 case 1:
8510 /* Data-processing (shift register). */
8511 err = thumb2_decode_dp_shift_reg (gdbarch, insn1, insn2, regs,
8512 dsc);
8513 break;
8514 default: /* Coprocessor instructions. */
8515 err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
8516 break;
8517 }
8518 break;
8519 }
8520 case 2: /* op1 = 2 */
8521 if (op) /* Branch and misc control. */
8522 {
8523 if (bit (insn2, 14) /* BLX/BL */
8524 || bit (insn2, 12) /* Unconditional branch */
8525 || (bits (insn1, 7, 9) != 0x7)) /* Conditional branch */
8526 err = thumb2_copy_b_bl_blx (gdbarch, insn1, insn2, regs, dsc);
8527 else
8528 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8529 "misc ctrl", dsc);
8530 }
8531 else
8532 {
8533 if (bit (insn1, 9)) /* Data processing (plain binary imm). */
8534 {
8535 int op = bits (insn1, 4, 8);
8536 int rn = bits (insn1, 0, 3);
8537 if ((op == 0 || op == 0xa) && rn == 0xf)
8538 err = thumb_copy_pc_relative_32bit (gdbarch, insn1, insn2,
8539 regs, dsc);
8540 else
8541 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8542 "dp/pb", dsc);
8543 }
8544 else /* Data processing (modified immeidate) */
8545 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8546 "dp/mi", dsc);
8547 }
8548 break;
8549 case 3: /* op1 = 3 */
8550 switch (bits (insn1, 9, 10))
8551 {
8552 case 0:
8553 if (bit (insn1, 4))
8554 err = decode_thumb_32bit_ld_mem_hints (gdbarch, insn1, insn2,
8555 regs, dsc);
8556 else /* NEON Load/Store and Store single data item */
8557 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8558 "neon elt/struct load/store",
8559 dsc);
8560 break;
8561 case 1: /* op1 = 3, bits (9, 10) == 1 */
8562 switch (bits (insn1, 7, 8))
8563 {
8564 case 0: case 1: /* Data processing (register) */
8565 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8566 "dp(reg)", dsc);
8567 break;
8568 case 2: /* Multiply and absolute difference */
8569 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8570 "mul/mua/diff", dsc);
8571 break;
8572 case 3: /* Long multiply and divide */
8573 err = thumb_copy_unmodified_32bit (gdbarch, insn1, insn2,
8574 "lmul/lmua", dsc);
8575 break;
8576 }
8577 break;
8578 default: /* Coprocessor instructions */
8579 err = thumb2_decode_svc_copro (gdbarch, insn1, insn2, regs, dsc);
8580 break;
8581 }
8582 break;
8583 default:
8584 err = 1;
8585 }
8586
8587 if (err)
8588 internal_error (__FILE__, __LINE__,
8589 _("thumb_process_displaced_32bit_insn: Instruction decode error"));
8590
8591 }
8592
8593 static void
8594 thumb_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
8595 CORE_ADDR to, struct regcache *regs,
8596 struct displaced_step_closure *dsc)
8597 {
8598 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
8599 uint16_t insn1
8600 = read_memory_unsigned_integer (from, 2, byte_order_for_code);
8601
8602 if (debug_displaced)
8603 fprintf_unfiltered (gdb_stdlog, "displaced: process thumb insn %.4x "
8604 "at %.8lx\n", insn1, (unsigned long) from);
8605
8606 dsc->is_thumb = 1;
8607 dsc->insn_size = thumb_insn_size (insn1);
8608 if (thumb_insn_size (insn1) == 4)
8609 {
8610 uint16_t insn2
8611 = read_memory_unsigned_integer (from + 2, 2, byte_order_for_code);
8612 thumb_process_displaced_32bit_insn (gdbarch, insn1, insn2, regs, dsc);
8613 }
8614 else
8615 thumb_process_displaced_16bit_insn (gdbarch, insn1, regs, dsc);
8616 }
8617
8618 void
8619 arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
8620 CORE_ADDR to, struct regcache *regs,
8621 struct displaced_step_closure *dsc)
8622 {
8623 int err = 0;
8624 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
8625 uint32_t insn;
8626
8627 /* Most displaced instructions use a 1-instruction scratch space, so set this
8628 here and override below if/when necessary. */
8629 dsc->numinsns = 1;
8630 dsc->insn_addr = from;
8631 dsc->scratch_base = to;
8632 dsc->cleanup = NULL;
8633 dsc->wrote_to_pc = 0;
8634
8635 if (!displaced_in_arm_mode (regs))
8636 return thumb_process_displaced_insn (gdbarch, from, to, regs, dsc);
8637
8638 dsc->is_thumb = 0;
8639 dsc->insn_size = 4;
8640 insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
8641 if (debug_displaced)
8642 fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
8643 "at %.8lx\n", (unsigned long) insn,
8644 (unsigned long) from);
8645
8646 if ((insn & 0xf0000000) == 0xf0000000)
8647 err = arm_decode_unconditional (gdbarch, insn, regs, dsc);
8648 else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
8649 {
8650 case 0x0: case 0x1: case 0x2: case 0x3:
8651 err = arm_decode_dp_misc (gdbarch, insn, regs, dsc);
8652 break;
8653
8654 case 0x4: case 0x5: case 0x6:
8655 err = arm_decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
8656 break;
8657
8658 case 0x7:
8659 err = arm_decode_media (gdbarch, insn, dsc);
8660 break;
8661
8662 case 0x8: case 0x9: case 0xa: case 0xb:
8663 err = arm_decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
8664 break;
8665
8666 case 0xc: case 0xd: case 0xe: case 0xf:
8667 err = arm_decode_svc_copro (gdbarch, insn, to, regs, dsc);
8668 break;
8669 }
8670
8671 if (err)
8672 internal_error (__FILE__, __LINE__,
8673 _("arm_process_displaced_insn: Instruction decode error"));
8674 }
8675
8676 /* Actually set up the scratch space for a displaced instruction. */
8677
8678 void
8679 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
8680 CORE_ADDR to, struct displaced_step_closure *dsc)
8681 {
8682 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8683 unsigned int i, len, offset;
8684 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
8685 int size = dsc->is_thumb? 2 : 4;
8686 const gdb_byte *bkp_insn;
8687
8688 offset = 0;
8689 /* Poke modified instruction(s). */
8690 for (i = 0; i < dsc->numinsns; i++)
8691 {
8692 if (debug_displaced)
8693 {
8694 fprintf_unfiltered (gdb_stdlog, "displaced: writing insn ");
8695 if (size == 4)
8696 fprintf_unfiltered (gdb_stdlog, "%.8lx",
8697 dsc->modinsn[i]);
8698 else if (size == 2)
8699 fprintf_unfiltered (gdb_stdlog, "%.4x",
8700 (unsigned short)dsc->modinsn[i]);
8701
8702 fprintf_unfiltered (gdb_stdlog, " at %.8lx\n",
8703 (unsigned long) to + offset);
8704
8705 }
8706 write_memory_unsigned_integer (to + offset, size,
8707 byte_order_for_code,
8708 dsc->modinsn[i]);
8709 offset += size;
8710 }
8711
8712 /* Choose the correct breakpoint instruction. */
8713 if (dsc->is_thumb)
8714 {
8715 bkp_insn = tdep->thumb_breakpoint;
8716 len = tdep->thumb_breakpoint_size;
8717 }
8718 else
8719 {
8720 bkp_insn = tdep->arm_breakpoint;
8721 len = tdep->arm_breakpoint_size;
8722 }
8723
8724 /* Put breakpoint afterwards. */
8725 write_memory (to + offset, bkp_insn, len);
8726
8727 if (debug_displaced)
8728 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
8729 paddress (gdbarch, from), paddress (gdbarch, to));
8730 }
8731
8732 /* Entry point for copying an instruction into scratch space for displaced
8733 stepping. */
8734
8735 struct displaced_step_closure *
8736 arm_displaced_step_copy_insn (struct gdbarch *gdbarch,
8737 CORE_ADDR from, CORE_ADDR to,
8738 struct regcache *regs)
8739 {
8740 struct displaced_step_closure *dsc = XNEW (struct displaced_step_closure);
8741
8742 arm_process_displaced_insn (gdbarch, from, to, regs, dsc);
8743 arm_displaced_init_closure (gdbarch, from, to, dsc);
8744
8745 return dsc;
8746 }
8747
8748 /* Entry point for cleaning things up after a displaced instruction has been
8749 single-stepped. */
8750
8751 void
8752 arm_displaced_step_fixup (struct gdbarch *gdbarch,
8753 struct displaced_step_closure *dsc,
8754 CORE_ADDR from, CORE_ADDR to,
8755 struct regcache *regs)
8756 {
8757 if (dsc->cleanup)
8758 dsc->cleanup (gdbarch, regs, dsc);
8759
8760 if (!dsc->wrote_to_pc)
8761 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM,
8762 dsc->insn_addr + dsc->insn_size);
8763
8764 }
8765
8766 #include "bfd-in2.h"
8767 #include "libcoff.h"
8768
8769 static int
8770 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
8771 {
8772 struct gdbarch *gdbarch = info->application_data;
8773
8774 if (arm_pc_is_thumb (gdbarch, memaddr))
8775 {
8776 static asymbol *asym;
8777 static combined_entry_type ce;
8778 static struct coff_symbol_struct csym;
8779 static struct bfd fake_bfd;
8780 static bfd_target fake_target;
8781
8782 if (csym.native == NULL)
8783 {
8784 /* Create a fake symbol vector containing a Thumb symbol.
8785 This is solely so that the code in print_insn_little_arm()
8786 and print_insn_big_arm() in opcodes/arm-dis.c will detect
8787 the presence of a Thumb symbol and switch to decoding
8788 Thumb instructions. */
8789
8790 fake_target.flavour = bfd_target_coff_flavour;
8791 fake_bfd.xvec = &fake_target;
8792 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
8793 csym.native = &ce;
8794 csym.symbol.the_bfd = &fake_bfd;
8795 csym.symbol.name = "fake";
8796 asym = (asymbol *) & csym;
8797 }
8798
8799 memaddr = UNMAKE_THUMB_ADDR (memaddr);
8800 info->symbols = &asym;
8801 }
8802 else
8803 info->symbols = NULL;
8804
8805 if (info->endian == BFD_ENDIAN_BIG)
8806 return print_insn_big_arm (memaddr, info);
8807 else
8808 return print_insn_little_arm (memaddr, info);
8809 }
8810
8811 /* The following define instruction sequences that will cause ARM
8812 cpu's to take an undefined instruction trap. These are used to
8813 signal a breakpoint to GDB.
8814
8815 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
8816 modes. A different instruction is required for each mode. The ARM
8817 cpu's can also be big or little endian. Thus four different
8818 instructions are needed to support all cases.
8819
8820 Note: ARMv4 defines several new instructions that will take the
8821 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
8822 not in fact add the new instructions. The new undefined
8823 instructions in ARMv4 are all instructions that had no defined
8824 behaviour in earlier chips. There is no guarantee that they will
8825 raise an exception, but may be treated as NOP's. In practice, it
8826 may only safe to rely on instructions matching:
8827
8828 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
8829 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
8830 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
8831
8832 Even this may only true if the condition predicate is true. The
8833 following use a condition predicate of ALWAYS so it is always TRUE.
8834
8835 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
8836 and NetBSD all use a software interrupt rather than an undefined
8837 instruction to force a trap. This can be handled by by the
8838 abi-specific code during establishment of the gdbarch vector. */
8839
8840 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
8841 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
8842 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
8843 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
8844
8845 static const gdb_byte arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
8846 static const gdb_byte arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
8847 static const gdb_byte arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
8848 static const gdb_byte arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
8849
8850 /* Determine the type and size of breakpoint to insert at PCPTR. Uses
8851 the program counter value to determine whether a 16-bit or 32-bit
8852 breakpoint should be used. It returns a pointer to a string of
8853 bytes that encode a breakpoint instruction, stores the length of
8854 the string to *lenptr, and adjusts the program counter (if
8855 necessary) to point to the actual memory location where the
8856 breakpoint should be inserted. */
8857
8858 static const unsigned char *
8859 arm_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
8860 {
8861 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8862 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
8863
8864 if (arm_pc_is_thumb (gdbarch, *pcptr))
8865 {
8866 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
8867
8868 /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
8869 check whether we are replacing a 32-bit instruction. */
8870 if (tdep->thumb2_breakpoint != NULL)
8871 {
8872 gdb_byte buf[2];
8873 if (target_read_memory (*pcptr, buf, 2) == 0)
8874 {
8875 unsigned short inst1;
8876 inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
8877 if (thumb_insn_size (inst1) == 4)
8878 {
8879 *lenptr = tdep->thumb2_breakpoint_size;
8880 return tdep->thumb2_breakpoint;
8881 }
8882 }
8883 }
8884
8885 *lenptr = tdep->thumb_breakpoint_size;
8886 return tdep->thumb_breakpoint;
8887 }
8888 else
8889 {
8890 *lenptr = tdep->arm_breakpoint_size;
8891 return tdep->arm_breakpoint;
8892 }
8893 }
8894
8895 static void
8896 arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
8897 int *kindptr)
8898 {
8899 arm_breakpoint_from_pc (gdbarch, pcptr, kindptr);
8900
8901 if (arm_pc_is_thumb (gdbarch, *pcptr) && *kindptr == 4)
8902 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so
8903 that this is not confused with a 32-bit ARM breakpoint. */
8904 *kindptr = 3;
8905 }
8906
8907 /* Extract from an array REGBUF containing the (raw) register state a
8908 function return value of type TYPE, and copy that, in virtual
8909 format, into VALBUF. */
8910
8911 static void
8912 arm_extract_return_value (struct type *type, struct regcache *regs,
8913 gdb_byte *valbuf)
8914 {
8915 struct gdbarch *gdbarch = get_regcache_arch (regs);
8916 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
8917
8918 if (TYPE_CODE_FLT == TYPE_CODE (type))
8919 {
8920 switch (gdbarch_tdep (gdbarch)->fp_model)
8921 {
8922 case ARM_FLOAT_FPA:
8923 {
8924 /* The value is in register F0 in internal format. We need to
8925 extract the raw value and then convert it to the desired
8926 internal type. */
8927 bfd_byte tmpbuf[FP_REGISTER_SIZE];
8928
8929 regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
8930 convert_from_extended (floatformat_from_type (type), tmpbuf,
8931 valbuf, gdbarch_byte_order (gdbarch));
8932 }
8933 break;
8934
8935 case ARM_FLOAT_SOFT_FPA:
8936 case ARM_FLOAT_SOFT_VFP:
8937 /* ARM_FLOAT_VFP can arise if this is a variadic function so
8938 not using the VFP ABI code. */
8939 case ARM_FLOAT_VFP:
8940 regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
8941 if (TYPE_LENGTH (type) > 4)
8942 regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
8943 valbuf + INT_REGISTER_SIZE);
8944 break;
8945
8946 default:
8947 internal_error (__FILE__, __LINE__,
8948 _("arm_extract_return_value: "
8949 "Floating point model not supported"));
8950 break;
8951 }
8952 }
8953 else if (TYPE_CODE (type) == TYPE_CODE_INT
8954 || TYPE_CODE (type) == TYPE_CODE_CHAR
8955 || TYPE_CODE (type) == TYPE_CODE_BOOL
8956 || TYPE_CODE (type) == TYPE_CODE_PTR
8957 || TYPE_CODE (type) == TYPE_CODE_REF
8958 || TYPE_CODE (type) == TYPE_CODE_ENUM)
8959 {
8960 /* If the type is a plain integer, then the access is
8961 straight-forward. Otherwise we have to play around a bit
8962 more. */
8963 int len = TYPE_LENGTH (type);
8964 int regno = ARM_A1_REGNUM;
8965 ULONGEST tmp;
8966
8967 while (len > 0)
8968 {
8969 /* By using store_unsigned_integer we avoid having to do
8970 anything special for small big-endian values. */
8971 regcache_cooked_read_unsigned (regs, regno++, &tmp);
8972 store_unsigned_integer (valbuf,
8973 (len > INT_REGISTER_SIZE
8974 ? INT_REGISTER_SIZE : len),
8975 byte_order, tmp);
8976 len -= INT_REGISTER_SIZE;
8977 valbuf += INT_REGISTER_SIZE;
8978 }
8979 }
8980 else
8981 {
8982 /* For a structure or union the behaviour is as if the value had
8983 been stored to word-aligned memory and then loaded into
8984 registers with 32-bit load instruction(s). */
8985 int len = TYPE_LENGTH (type);
8986 int regno = ARM_A1_REGNUM;
8987 bfd_byte tmpbuf[INT_REGISTER_SIZE];
8988
8989 while (len > 0)
8990 {
8991 regcache_cooked_read (regs, regno++, tmpbuf);
8992 memcpy (valbuf, tmpbuf,
8993 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
8994 len -= INT_REGISTER_SIZE;
8995 valbuf += INT_REGISTER_SIZE;
8996 }
8997 }
8998 }
8999
9000
9001 /* Will a function return an aggregate type in memory or in a
9002 register? Return 0 if an aggregate type can be returned in a
9003 register, 1 if it must be returned in memory. */
9004
9005 static int
9006 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
9007 {
9008 int nRc;
9009 enum type_code code;
9010
9011 type = check_typedef (type);
9012
9013 /* In the ARM ABI, "integer" like aggregate types are returned in
9014 registers. For an aggregate type to be integer like, its size
9015 must be less than or equal to INT_REGISTER_SIZE and the
9016 offset of each addressable subfield must be zero. Note that bit
9017 fields are not addressable, and all addressable subfields of
9018 unions always start at offset zero.
9019
9020 This function is based on the behaviour of GCC 2.95.1.
9021 See: gcc/arm.c: arm_return_in_memory() for details.
9022
9023 Note: All versions of GCC before GCC 2.95.2 do not set up the
9024 parameters correctly for a function returning the following
9025 structure: struct { float f;}; This should be returned in memory,
9026 not a register. Richard Earnshaw sent me a patch, but I do not
9027 know of any way to detect if a function like the above has been
9028 compiled with the correct calling convention. */
9029
9030 /* All aggregate types that won't fit in a register must be returned
9031 in memory. */
9032 if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
9033 {
9034 return 1;
9035 }
9036
9037 /* The AAPCS says all aggregates not larger than a word are returned
9038 in a register. */
9039 if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
9040 return 0;
9041
9042 /* The only aggregate types that can be returned in a register are
9043 structs and unions. Arrays must be returned in memory. */
9044 code = TYPE_CODE (type);
9045 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
9046 {
9047 return 1;
9048 }
9049
9050 /* Assume all other aggregate types can be returned in a register.
9051 Run a check for structures, unions and arrays. */
9052 nRc = 0;
9053
9054 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
9055 {
9056 int i;
9057 /* Need to check if this struct/union is "integer" like. For
9058 this to be true, its size must be less than or equal to
9059 INT_REGISTER_SIZE and the offset of each addressable
9060 subfield must be zero. Note that bit fields are not
9061 addressable, and unions always start at offset zero. If any
9062 of the subfields is a floating point type, the struct/union
9063 cannot be an integer type. */
9064
9065 /* For each field in the object, check:
9066 1) Is it FP? --> yes, nRc = 1;
9067 2) Is it addressable (bitpos != 0) and
9068 not packed (bitsize == 0)?
9069 --> yes, nRc = 1
9070 */
9071
9072 for (i = 0; i < TYPE_NFIELDS (type); i++)
9073 {
9074 enum type_code field_type_code;
9075 field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type,
9076 i)));
9077
9078 /* Is it a floating point type field? */
9079 if (field_type_code == TYPE_CODE_FLT)
9080 {
9081 nRc = 1;
9082 break;
9083 }
9084
9085 /* If bitpos != 0, then we have to care about it. */
9086 if (TYPE_FIELD_BITPOS (type, i) != 0)
9087 {
9088 /* Bitfields are not addressable. If the field bitsize is
9089 zero, then the field is not packed. Hence it cannot be
9090 a bitfield or any other packed type. */
9091 if (TYPE_FIELD_BITSIZE (type, i) == 0)
9092 {
9093 nRc = 1;
9094 break;
9095 }
9096 }
9097 }
9098 }
9099
9100 return nRc;
9101 }
9102
9103 /* Write into appropriate registers a function return value of type
9104 TYPE, given in virtual format. */
9105
9106 static void
9107 arm_store_return_value (struct type *type, struct regcache *regs,
9108 const gdb_byte *valbuf)
9109 {
9110 struct gdbarch *gdbarch = get_regcache_arch (regs);
9111 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
9112
9113 if (TYPE_CODE (type) == TYPE_CODE_FLT)
9114 {
9115 gdb_byte buf[MAX_REGISTER_SIZE];
9116
9117 switch (gdbarch_tdep (gdbarch)->fp_model)
9118 {
9119 case ARM_FLOAT_FPA:
9120
9121 convert_to_extended (floatformat_from_type (type), buf, valbuf,
9122 gdbarch_byte_order (gdbarch));
9123 regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
9124 break;
9125
9126 case ARM_FLOAT_SOFT_FPA:
9127 case ARM_FLOAT_SOFT_VFP:
9128 /* ARM_FLOAT_VFP can arise if this is a variadic function so
9129 not using the VFP ABI code. */
9130 case ARM_FLOAT_VFP:
9131 regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
9132 if (TYPE_LENGTH (type) > 4)
9133 regcache_cooked_write (regs, ARM_A1_REGNUM + 1,
9134 valbuf + INT_REGISTER_SIZE);
9135 break;
9136
9137 default:
9138 internal_error (__FILE__, __LINE__,
9139 _("arm_store_return_value: Floating "
9140 "point model not supported"));
9141 break;
9142 }
9143 }
9144 else if (TYPE_CODE (type) == TYPE_CODE_INT
9145 || TYPE_CODE (type) == TYPE_CODE_CHAR
9146 || TYPE_CODE (type) == TYPE_CODE_BOOL
9147 || TYPE_CODE (type) == TYPE_CODE_PTR
9148 || TYPE_CODE (type) == TYPE_CODE_REF
9149 || TYPE_CODE (type) == TYPE_CODE_ENUM)
9150 {
9151 if (TYPE_LENGTH (type) <= 4)
9152 {
9153 /* Values of one word or less are zero/sign-extended and
9154 returned in r0. */
9155 bfd_byte tmpbuf[INT_REGISTER_SIZE];
9156 LONGEST val = unpack_long (type, valbuf);
9157
9158 store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
9159 regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
9160 }
9161 else
9162 {
9163 /* Integral values greater than one word are stored in consecutive
9164 registers starting with r0. This will always be a multiple of
9165 the regiser size. */
9166 int len = TYPE_LENGTH (type);
9167 int regno = ARM_A1_REGNUM;
9168
9169 while (len > 0)
9170 {
9171 regcache_cooked_write (regs, regno++, valbuf);
9172 len -= INT_REGISTER_SIZE;
9173 valbuf += INT_REGISTER_SIZE;
9174 }
9175 }
9176 }
9177 else
9178 {
9179 /* For a structure or union the behaviour is as if the value had
9180 been stored to word-aligned memory and then loaded into
9181 registers with 32-bit load instruction(s). */
9182 int len = TYPE_LENGTH (type);
9183 int regno = ARM_A1_REGNUM;
9184 bfd_byte tmpbuf[INT_REGISTER_SIZE];
9185
9186 while (len > 0)
9187 {
9188 memcpy (tmpbuf, valbuf,
9189 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
9190 regcache_cooked_write (regs, regno++, tmpbuf);
9191 len -= INT_REGISTER_SIZE;
9192 valbuf += INT_REGISTER_SIZE;
9193 }
9194 }
9195 }
9196
9197
9198 /* Handle function return values. */
9199
9200 static enum return_value_convention
9201 arm_return_value (struct gdbarch *gdbarch, struct value *function,
9202 struct type *valtype, struct regcache *regcache,
9203 gdb_byte *readbuf, const gdb_byte *writebuf)
9204 {
9205 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9206 struct type *func_type = function ? value_type (function) : NULL;
9207 enum arm_vfp_cprc_base_type vfp_base_type;
9208 int vfp_base_count;
9209
9210 if (arm_vfp_abi_for_function (gdbarch, func_type)
9211 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
9212 {
9213 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
9214 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
9215 int i;
9216 for (i = 0; i < vfp_base_count; i++)
9217 {
9218 if (reg_char == 'q')
9219 {
9220 if (writebuf)
9221 arm_neon_quad_write (gdbarch, regcache, i,
9222 writebuf + i * unit_length);
9223
9224 if (readbuf)
9225 arm_neon_quad_read (gdbarch, regcache, i,
9226 readbuf + i * unit_length);
9227 }
9228 else
9229 {
9230 char name_buf[4];
9231 int regnum;
9232
9233 xsnprintf (name_buf, sizeof (name_buf), "%c%d", reg_char, i);
9234 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
9235 strlen (name_buf));
9236 if (writebuf)
9237 regcache_cooked_write (regcache, regnum,
9238 writebuf + i * unit_length);
9239 if (readbuf)
9240 regcache_cooked_read (regcache, regnum,
9241 readbuf + i * unit_length);
9242 }
9243 }
9244 return RETURN_VALUE_REGISTER_CONVENTION;
9245 }
9246
9247 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
9248 || TYPE_CODE (valtype) == TYPE_CODE_UNION
9249 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
9250 {
9251 if (tdep->struct_return == pcc_struct_return
9252 || arm_return_in_memory (gdbarch, valtype))
9253 return RETURN_VALUE_STRUCT_CONVENTION;
9254 }
9255
9256 /* AAPCS returns complex types longer than a register in memory. */
9257 if (tdep->arm_abi != ARM_ABI_APCS
9258 && TYPE_CODE (valtype) == TYPE_CODE_COMPLEX
9259 && TYPE_LENGTH (valtype) > INT_REGISTER_SIZE)
9260 return RETURN_VALUE_STRUCT_CONVENTION;
9261
9262 if (writebuf)
9263 arm_store_return_value (valtype, regcache, writebuf);
9264
9265 if (readbuf)
9266 arm_extract_return_value (valtype, regcache, readbuf);
9267
9268 return RETURN_VALUE_REGISTER_CONVENTION;
9269 }
9270
9271
9272 static int
9273 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
9274 {
9275 struct gdbarch *gdbarch = get_frame_arch (frame);
9276 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
9277 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
9278 CORE_ADDR jb_addr;
9279 gdb_byte buf[INT_REGISTER_SIZE];
9280
9281 jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
9282
9283 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
9284 INT_REGISTER_SIZE))
9285 return 0;
9286
9287 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
9288 return 1;
9289 }
9290
9291 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
9292 return the target PC. Otherwise return 0. */
9293
9294 CORE_ADDR
9295 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
9296 {
9297 const char *name;
9298 int namelen;
9299 CORE_ADDR start_addr;
9300
9301 /* Find the starting address and name of the function containing the PC. */
9302 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
9303 {
9304 /* Trampoline 'bx reg' doesn't belong to any functions. Do the
9305 check here. */
9306 start_addr = arm_skip_bx_reg (frame, pc);
9307 if (start_addr != 0)
9308 return start_addr;
9309
9310 return 0;
9311 }
9312
9313 /* If PC is in a Thumb call or return stub, return the address of the
9314 target PC, which is in a register. The thunk functions are called
9315 _call_via_xx, where x is the register name. The possible names
9316 are r0-r9, sl, fp, ip, sp, and lr. ARM RealView has similar
9317 functions, named __ARM_call_via_r[0-7]. */
9318 if (startswith (name, "_call_via_")
9319 || startswith (name, "__ARM_call_via_"))
9320 {
9321 /* Use the name suffix to determine which register contains the
9322 target PC. */
9323 static char *table[15] =
9324 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
9325 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
9326 };
9327 int regno;
9328 int offset = strlen (name) - 2;
9329
9330 for (regno = 0; regno <= 14; regno++)
9331 if (strcmp (&name[offset], table[regno]) == 0)
9332 return get_frame_register_unsigned (frame, regno);
9333 }
9334
9335 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
9336 non-interworking calls to foo. We could decode the stubs
9337 to find the target but it's easier to use the symbol table. */
9338 namelen = strlen (name);
9339 if (name[0] == '_' && name[1] == '_'
9340 && ((namelen > 2 + strlen ("_from_thumb")
9341 && startswith (name + namelen - strlen ("_from_thumb"), "_from_thumb"))
9342 || (namelen > 2 + strlen ("_from_arm")
9343 && startswith (name + namelen - strlen ("_from_arm"), "_from_arm"))))
9344 {
9345 char *target_name;
9346 int target_len = namelen - 2;
9347 struct bound_minimal_symbol minsym;
9348 struct objfile *objfile;
9349 struct obj_section *sec;
9350
9351 if (name[namelen - 1] == 'b')
9352 target_len -= strlen ("_from_thumb");
9353 else
9354 target_len -= strlen ("_from_arm");
9355
9356 target_name = alloca (target_len + 1);
9357 memcpy (target_name, name + 2, target_len);
9358 target_name[target_len] = '\0';
9359
9360 sec = find_pc_section (pc);
9361 objfile = (sec == NULL) ? NULL : sec->objfile;
9362 minsym = lookup_minimal_symbol (target_name, NULL, objfile);
9363 if (minsym.minsym != NULL)
9364 return BMSYMBOL_VALUE_ADDRESS (minsym);
9365 else
9366 return 0;
9367 }
9368
9369 return 0; /* not a stub */
9370 }
9371
9372 static void
9373 set_arm_command (char *args, int from_tty)
9374 {
9375 printf_unfiltered (_("\
9376 \"set arm\" must be followed by an apporpriate subcommand.\n"));
9377 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
9378 }
9379
9380 static void
9381 show_arm_command (char *args, int from_tty)
9382 {
9383 cmd_show_list (showarmcmdlist, from_tty, "");
9384 }
9385
9386 static void
9387 arm_update_current_architecture (void)
9388 {
9389 struct gdbarch_info info;
9390
9391 /* If the current architecture is not ARM, we have nothing to do. */
9392 if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_arm)
9393 return;
9394
9395 /* Update the architecture. */
9396 gdbarch_info_init (&info);
9397
9398 if (!gdbarch_update_p (info))
9399 internal_error (__FILE__, __LINE__, _("could not update architecture"));
9400 }
9401
9402 static void
9403 set_fp_model_sfunc (char *args, int from_tty,
9404 struct cmd_list_element *c)
9405 {
9406 int fp_model;
9407
9408 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
9409 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
9410 {
9411 arm_fp_model = (enum arm_float_model) fp_model;
9412 break;
9413 }
9414
9415 if (fp_model == ARM_FLOAT_LAST)
9416 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
9417 current_fp_model);
9418
9419 arm_update_current_architecture ();
9420 }
9421
9422 static void
9423 show_fp_model (struct ui_file *file, int from_tty,
9424 struct cmd_list_element *c, const char *value)
9425 {
9426 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
9427
9428 if (arm_fp_model == ARM_FLOAT_AUTO
9429 && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
9430 fprintf_filtered (file, _("\
9431 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
9432 fp_model_strings[tdep->fp_model]);
9433 else
9434 fprintf_filtered (file, _("\
9435 The current ARM floating point model is \"%s\".\n"),
9436 fp_model_strings[arm_fp_model]);
9437 }
9438
9439 static void
9440 arm_set_abi (char *args, int from_tty,
9441 struct cmd_list_element *c)
9442 {
9443 int arm_abi;
9444
9445 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
9446 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
9447 {
9448 arm_abi_global = (enum arm_abi_kind) arm_abi;
9449 break;
9450 }
9451
9452 if (arm_abi == ARM_ABI_LAST)
9453 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
9454 arm_abi_string);
9455
9456 arm_update_current_architecture ();
9457 }
9458
9459 static void
9460 arm_show_abi (struct ui_file *file, int from_tty,
9461 struct cmd_list_element *c, const char *value)
9462 {
9463 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
9464
9465 if (arm_abi_global == ARM_ABI_AUTO
9466 && gdbarch_bfd_arch_info (target_gdbarch ())->arch == bfd_arch_arm)
9467 fprintf_filtered (file, _("\
9468 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
9469 arm_abi_strings[tdep->arm_abi]);
9470 else
9471 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
9472 arm_abi_string);
9473 }
9474
9475 static void
9476 arm_show_fallback_mode (struct ui_file *file, int from_tty,
9477 struct cmd_list_element *c, const char *value)
9478 {
9479 fprintf_filtered (file,
9480 _("The current execution mode assumed "
9481 "(when symbols are unavailable) is \"%s\".\n"),
9482 arm_fallback_mode_string);
9483 }
9484
9485 static void
9486 arm_show_force_mode (struct ui_file *file, int from_tty,
9487 struct cmd_list_element *c, const char *value)
9488 {
9489 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
9490
9491 fprintf_filtered (file,
9492 _("The current execution mode assumed "
9493 "(even when symbols are available) is \"%s\".\n"),
9494 arm_force_mode_string);
9495 }
9496
9497 /* If the user changes the register disassembly style used for info
9498 register and other commands, we have to also switch the style used
9499 in opcodes for disassembly output. This function is run in the "set
9500 arm disassembly" command, and does that. */
9501
9502 static void
9503 set_disassembly_style_sfunc (char *args, int from_tty,
9504 struct cmd_list_element *c)
9505 {
9506 set_disassembly_style ();
9507 }
9508 \f
9509 /* Return the ARM register name corresponding to register I. */
9510 static const char *
9511 arm_register_name (struct gdbarch *gdbarch, int i)
9512 {
9513 const int num_regs = gdbarch_num_regs (gdbarch);
9514
9515 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
9516 && i >= num_regs && i < num_regs + 32)
9517 {
9518 static const char *const vfp_pseudo_names[] = {
9519 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
9520 "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
9521 "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
9522 "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
9523 };
9524
9525 return vfp_pseudo_names[i - num_regs];
9526 }
9527
9528 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
9529 && i >= num_regs + 32 && i < num_regs + 32 + 16)
9530 {
9531 static const char *const neon_pseudo_names[] = {
9532 "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
9533 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
9534 };
9535
9536 return neon_pseudo_names[i - num_regs - 32];
9537 }
9538
9539 if (i >= ARRAY_SIZE (arm_register_names))
9540 /* These registers are only supported on targets which supply
9541 an XML description. */
9542 return "";
9543
9544 return arm_register_names[i];
9545 }
9546
9547 static void
9548 set_disassembly_style (void)
9549 {
9550 int current;
9551
9552 /* Find the style that the user wants. */
9553 for (current = 0; current < num_disassembly_options; current++)
9554 if (disassembly_style == valid_disassembly_styles[current])
9555 break;
9556 gdb_assert (current < num_disassembly_options);
9557
9558 /* Synchronize the disassembler. */
9559 set_arm_regname_option (current);
9560 }
9561
9562 /* Test whether the coff symbol specific value corresponds to a Thumb
9563 function. */
9564
9565 static int
9566 coff_sym_is_thumb (int val)
9567 {
9568 return (val == C_THUMBEXT
9569 || val == C_THUMBSTAT
9570 || val == C_THUMBEXTFUNC
9571 || val == C_THUMBSTATFUNC
9572 || val == C_THUMBLABEL);
9573 }
9574
9575 /* arm_coff_make_msymbol_special()
9576 arm_elf_make_msymbol_special()
9577
9578 These functions test whether the COFF or ELF symbol corresponds to
9579 an address in thumb code, and set a "special" bit in a minimal
9580 symbol to indicate that it does. */
9581
9582 static void
9583 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
9584 {
9585 if (ARM_SYM_BRANCH_TYPE (&((elf_symbol_type *)sym)->internal_elf_sym)
9586 == ST_BRANCH_TO_THUMB)
9587 MSYMBOL_SET_SPECIAL (msym);
9588 }
9589
9590 static void
9591 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
9592 {
9593 if (coff_sym_is_thumb (val))
9594 MSYMBOL_SET_SPECIAL (msym);
9595 }
9596
9597 static void
9598 arm_objfile_data_free (struct objfile *objfile, void *arg)
9599 {
9600 struct arm_per_objfile *data = arg;
9601 unsigned int i;
9602
9603 for (i = 0; i < objfile->obfd->section_count; i++)
9604 VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
9605 }
9606
9607 static void
9608 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
9609 asymbol *sym)
9610 {
9611 const char *name = bfd_asymbol_name (sym);
9612 struct arm_per_objfile *data;
9613 VEC(arm_mapping_symbol_s) **map_p;
9614 struct arm_mapping_symbol new_map_sym;
9615
9616 gdb_assert (name[0] == '$');
9617 if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
9618 return;
9619
9620 data = objfile_data (objfile, arm_objfile_data_key);
9621 if (data == NULL)
9622 {
9623 data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
9624 struct arm_per_objfile);
9625 set_objfile_data (objfile, arm_objfile_data_key, data);
9626 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
9627 objfile->obfd->section_count,
9628 VEC(arm_mapping_symbol_s) *);
9629 }
9630 map_p = &data->section_maps[bfd_get_section (sym)->index];
9631
9632 new_map_sym.value = sym->value;
9633 new_map_sym.type = name[1];
9634
9635 /* Assume that most mapping symbols appear in order of increasing
9636 value. If they were randomly distributed, it would be faster to
9637 always push here and then sort at first use. */
9638 if (!VEC_empty (arm_mapping_symbol_s, *map_p))
9639 {
9640 struct arm_mapping_symbol *prev_map_sym;
9641
9642 prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
9643 if (prev_map_sym->value >= sym->value)
9644 {
9645 unsigned int idx;
9646 idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
9647 arm_compare_mapping_symbols);
9648 VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
9649 return;
9650 }
9651 }
9652
9653 VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
9654 }
9655
9656 static void
9657 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
9658 {
9659 struct gdbarch *gdbarch = get_regcache_arch (regcache);
9660 regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
9661
9662 /* If necessary, set the T bit. */
9663 if (arm_apcs_32)
9664 {
9665 ULONGEST val, t_bit;
9666 regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
9667 t_bit = arm_psr_thumb_bit (gdbarch);
9668 if (arm_pc_is_thumb (gdbarch, pc))
9669 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
9670 val | t_bit);
9671 else
9672 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
9673 val & ~t_bit);
9674 }
9675 }
9676
9677 /* Read the contents of a NEON quad register, by reading from two
9678 double registers. This is used to implement the quad pseudo
9679 registers, and for argument passing in case the quad registers are
9680 missing; vectors are passed in quad registers when using the VFP
9681 ABI, even if a NEON unit is not present. REGNUM is the index of
9682 the quad register, in [0, 15]. */
9683
9684 static enum register_status
9685 arm_neon_quad_read (struct gdbarch *gdbarch, struct regcache *regcache,
9686 int regnum, gdb_byte *buf)
9687 {
9688 char name_buf[4];
9689 gdb_byte reg_buf[8];
9690 int offset, double_regnum;
9691 enum register_status status;
9692
9693 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
9694 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
9695 strlen (name_buf));
9696
9697 /* d0 is always the least significant half of q0. */
9698 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
9699 offset = 8;
9700 else
9701 offset = 0;
9702
9703 status = regcache_raw_read (regcache, double_regnum, reg_buf);
9704 if (status != REG_VALID)
9705 return status;
9706 memcpy (buf + offset, reg_buf, 8);
9707
9708 offset = 8 - offset;
9709 status = regcache_raw_read (regcache, double_regnum + 1, reg_buf);
9710 if (status != REG_VALID)
9711 return status;
9712 memcpy (buf + offset, reg_buf, 8);
9713
9714 return REG_VALID;
9715 }
9716
9717 static enum register_status
9718 arm_pseudo_read (struct gdbarch *gdbarch, struct regcache *regcache,
9719 int regnum, gdb_byte *buf)
9720 {
9721 const int num_regs = gdbarch_num_regs (gdbarch);
9722 char name_buf[4];
9723 gdb_byte reg_buf[8];
9724 int offset, double_regnum;
9725
9726 gdb_assert (regnum >= num_regs);
9727 regnum -= num_regs;
9728
9729 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
9730 /* Quad-precision register. */
9731 return arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
9732 else
9733 {
9734 enum register_status status;
9735
9736 /* Single-precision register. */
9737 gdb_assert (regnum < 32);
9738
9739 /* s0 is always the least significant half of d0. */
9740 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
9741 offset = (regnum & 1) ? 0 : 4;
9742 else
9743 offset = (regnum & 1) ? 4 : 0;
9744
9745 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
9746 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
9747 strlen (name_buf));
9748
9749 status = regcache_raw_read (regcache, double_regnum, reg_buf);
9750 if (status == REG_VALID)
9751 memcpy (buf, reg_buf + offset, 4);
9752 return status;
9753 }
9754 }
9755
9756 /* Store the contents of BUF to a NEON quad register, by writing to
9757 two double registers. This is used to implement the quad pseudo
9758 registers, and for argument passing in case the quad registers are
9759 missing; vectors are passed in quad registers when using the VFP
9760 ABI, even if a NEON unit is not present. REGNUM is the index
9761 of the quad register, in [0, 15]. */
9762
9763 static void
9764 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
9765 int regnum, const gdb_byte *buf)
9766 {
9767 char name_buf[4];
9768 int offset, double_regnum;
9769
9770 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum << 1);
9771 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
9772 strlen (name_buf));
9773
9774 /* d0 is always the least significant half of q0. */
9775 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
9776 offset = 8;
9777 else
9778 offset = 0;
9779
9780 regcache_raw_write (regcache, double_regnum, buf + offset);
9781 offset = 8 - offset;
9782 regcache_raw_write (regcache, double_regnum + 1, buf + offset);
9783 }
9784
9785 static void
9786 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
9787 int regnum, const gdb_byte *buf)
9788 {
9789 const int num_regs = gdbarch_num_regs (gdbarch);
9790 char name_buf[4];
9791 gdb_byte reg_buf[8];
9792 int offset, double_regnum;
9793
9794 gdb_assert (regnum >= num_regs);
9795 regnum -= num_regs;
9796
9797 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
9798 /* Quad-precision register. */
9799 arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
9800 else
9801 {
9802 /* Single-precision register. */
9803 gdb_assert (regnum < 32);
9804
9805 /* s0 is always the least significant half of d0. */
9806 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
9807 offset = (regnum & 1) ? 0 : 4;
9808 else
9809 offset = (regnum & 1) ? 4 : 0;
9810
9811 xsnprintf (name_buf, sizeof (name_buf), "d%d", regnum >> 1);
9812 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
9813 strlen (name_buf));
9814
9815 regcache_raw_read (regcache, double_regnum, reg_buf);
9816 memcpy (reg_buf + offset, buf, 4);
9817 regcache_raw_write (regcache, double_regnum, reg_buf);
9818 }
9819 }
9820
9821 static struct value *
9822 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
9823 {
9824 const int *reg_p = baton;
9825 return value_of_register (*reg_p, frame);
9826 }
9827 \f
9828 static enum gdb_osabi
9829 arm_elf_osabi_sniffer (bfd *abfd)
9830 {
9831 unsigned int elfosabi;
9832 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
9833
9834 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
9835
9836 if (elfosabi == ELFOSABI_ARM)
9837 /* GNU tools use this value. Check note sections in this case,
9838 as well. */
9839 bfd_map_over_sections (abfd,
9840 generic_elf_osabi_sniff_abi_tag_sections,
9841 &osabi);
9842
9843 /* Anything else will be handled by the generic ELF sniffer. */
9844 return osabi;
9845 }
9846
9847 static int
9848 arm_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
9849 struct reggroup *group)
9850 {
9851 /* FPS register's type is INT, but belongs to float_reggroup. Beside
9852 this, FPS register belongs to save_regroup, restore_reggroup, and
9853 all_reggroup, of course. */
9854 if (regnum == ARM_FPS_REGNUM)
9855 return (group == float_reggroup
9856 || group == save_reggroup
9857 || group == restore_reggroup
9858 || group == all_reggroup);
9859 else
9860 return default_register_reggroup_p (gdbarch, regnum, group);
9861 }
9862
9863 \f
9864 /* For backward-compatibility we allow two 'g' packet lengths with
9865 the remote protocol depending on whether FPA registers are
9866 supplied. M-profile targets do not have FPA registers, but some
9867 stubs already exist in the wild which use a 'g' packet which
9868 supplies them albeit with dummy values. The packet format which
9869 includes FPA registers should be considered deprecated for
9870 M-profile targets. */
9871
9872 static void
9873 arm_register_g_packet_guesses (struct gdbarch *gdbarch)
9874 {
9875 if (gdbarch_tdep (gdbarch)->is_m)
9876 {
9877 /* If we know from the executable this is an M-profile target,
9878 cater for remote targets whose register set layout is the
9879 same as the FPA layout. */
9880 register_remote_g_packet_guess (gdbarch,
9881 /* r0-r12,sp,lr,pc; f0-f7; fps,xpsr */
9882 (16 * INT_REGISTER_SIZE)
9883 + (8 * FP_REGISTER_SIZE)
9884 + (2 * INT_REGISTER_SIZE),
9885 tdesc_arm_with_m_fpa_layout);
9886
9887 /* The regular M-profile layout. */
9888 register_remote_g_packet_guess (gdbarch,
9889 /* r0-r12,sp,lr,pc; xpsr */
9890 (16 * INT_REGISTER_SIZE)
9891 + INT_REGISTER_SIZE,
9892 tdesc_arm_with_m);
9893
9894 /* M-profile plus M4F VFP. */
9895 register_remote_g_packet_guess (gdbarch,
9896 /* r0-r12,sp,lr,pc; d0-d15; fpscr,xpsr */
9897 (16 * INT_REGISTER_SIZE)
9898 + (16 * VFP_REGISTER_SIZE)
9899 + (2 * INT_REGISTER_SIZE),
9900 tdesc_arm_with_m_vfp_d16);
9901 }
9902
9903 /* Otherwise we don't have a useful guess. */
9904 }
9905
9906 \f
9907 /* Initialize the current architecture based on INFO. If possible,
9908 re-use an architecture from ARCHES, which is a list of
9909 architectures already created during this debugging session.
9910
9911 Called e.g. at program startup, when reading a core file, and when
9912 reading a binary file. */
9913
9914 static struct gdbarch *
9915 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
9916 {
9917 struct gdbarch_tdep *tdep;
9918 struct gdbarch *gdbarch;
9919 struct gdbarch_list *best_arch;
9920 enum arm_abi_kind arm_abi = arm_abi_global;
9921 enum arm_float_model fp_model = arm_fp_model;
9922 struct tdesc_arch_data *tdesc_data = NULL;
9923 int i, is_m = 0;
9924 int vfp_register_count = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
9925 int have_wmmx_registers = 0;
9926 int have_neon = 0;
9927 int have_fpa_registers = 1;
9928 const struct target_desc *tdesc = info.target_desc;
9929
9930 /* If we have an object to base this architecture on, try to determine
9931 its ABI. */
9932
9933 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
9934 {
9935 int ei_osabi, e_flags;
9936
9937 switch (bfd_get_flavour (info.abfd))
9938 {
9939 case bfd_target_aout_flavour:
9940 /* Assume it's an old APCS-style ABI. */
9941 arm_abi = ARM_ABI_APCS;
9942 break;
9943
9944 case bfd_target_coff_flavour:
9945 /* Assume it's an old APCS-style ABI. */
9946 /* XXX WinCE? */
9947 arm_abi = ARM_ABI_APCS;
9948 break;
9949
9950 case bfd_target_elf_flavour:
9951 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
9952 e_flags = elf_elfheader (info.abfd)->e_flags;
9953
9954 if (ei_osabi == ELFOSABI_ARM)
9955 {
9956 /* GNU tools used to use this value, but do not for EABI
9957 objects. There's nowhere to tag an EABI version
9958 anyway, so assume APCS. */
9959 arm_abi = ARM_ABI_APCS;
9960 }
9961 else if (ei_osabi == ELFOSABI_NONE || ei_osabi == ELFOSABI_GNU)
9962 {
9963 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
9964 int attr_arch, attr_profile;
9965
9966 switch (eabi_ver)
9967 {
9968 case EF_ARM_EABI_UNKNOWN:
9969 /* Assume GNU tools. */
9970 arm_abi = ARM_ABI_APCS;
9971 break;
9972
9973 case EF_ARM_EABI_VER4:
9974 case EF_ARM_EABI_VER5:
9975 arm_abi = ARM_ABI_AAPCS;
9976 /* EABI binaries default to VFP float ordering.
9977 They may also contain build attributes that can
9978 be used to identify if the VFP argument-passing
9979 ABI is in use. */
9980 if (fp_model == ARM_FLOAT_AUTO)
9981 {
9982 #ifdef HAVE_ELF
9983 switch (bfd_elf_get_obj_attr_int (info.abfd,
9984 OBJ_ATTR_PROC,
9985 Tag_ABI_VFP_args))
9986 {
9987 case AEABI_VFP_args_base:
9988 /* "The user intended FP parameter/result
9989 passing to conform to AAPCS, base
9990 variant". */
9991 fp_model = ARM_FLOAT_SOFT_VFP;
9992 break;
9993 case AEABI_VFP_args_vfp:
9994 /* "The user intended FP parameter/result
9995 passing to conform to AAPCS, VFP
9996 variant". */
9997 fp_model = ARM_FLOAT_VFP;
9998 break;
9999 case AEABI_VFP_args_toolchain:
10000 /* "The user intended FP parameter/result
10001 passing to conform to tool chain-specific
10002 conventions" - we don't know any such
10003 conventions, so leave it as "auto". */
10004 break;
10005 case AEABI_VFP_args_compatible:
10006 /* "Code is compatible with both the base
10007 and VFP variants; the user did not permit
10008 non-variadic functions to pass FP
10009 parameters/results" - leave it as
10010 "auto". */
10011 break;
10012 default:
10013 /* Attribute value not mentioned in the
10014 November 2012 ABI, so leave it as
10015 "auto". */
10016 break;
10017 }
10018 #else
10019 fp_model = ARM_FLOAT_SOFT_VFP;
10020 #endif
10021 }
10022 break;
10023
10024 default:
10025 /* Leave it as "auto". */
10026 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
10027 break;
10028 }
10029
10030 #ifdef HAVE_ELF
10031 /* Detect M-profile programs. This only works if the
10032 executable file includes build attributes; GCC does
10033 copy them to the executable, but e.g. RealView does
10034 not. */
10035 attr_arch = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_PROC,
10036 Tag_CPU_arch);
10037 attr_profile = bfd_elf_get_obj_attr_int (info.abfd,
10038 OBJ_ATTR_PROC,
10039 Tag_CPU_arch_profile);
10040 /* GCC specifies the profile for v6-M; RealView only
10041 specifies the profile for architectures starting with
10042 V7 (as opposed to architectures with a tag
10043 numerically greater than TAG_CPU_ARCH_V7). */
10044 if (!tdesc_has_registers (tdesc)
10045 && (attr_arch == TAG_CPU_ARCH_V6_M
10046 || attr_arch == TAG_CPU_ARCH_V6S_M
10047 || attr_profile == 'M'))
10048 is_m = 1;
10049 #endif
10050 }
10051
10052 if (fp_model == ARM_FLOAT_AUTO)
10053 {
10054 int e_flags = elf_elfheader (info.abfd)->e_flags;
10055
10056 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
10057 {
10058 case 0:
10059 /* Leave it as "auto". Strictly speaking this case
10060 means FPA, but almost nobody uses that now, and
10061 many toolchains fail to set the appropriate bits
10062 for the floating-point model they use. */
10063 break;
10064 case EF_ARM_SOFT_FLOAT:
10065 fp_model = ARM_FLOAT_SOFT_FPA;
10066 break;
10067 case EF_ARM_VFP_FLOAT:
10068 fp_model = ARM_FLOAT_VFP;
10069 break;
10070 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
10071 fp_model = ARM_FLOAT_SOFT_VFP;
10072 break;
10073 }
10074 }
10075
10076 if (e_flags & EF_ARM_BE8)
10077 info.byte_order_for_code = BFD_ENDIAN_LITTLE;
10078
10079 break;
10080
10081 default:
10082 /* Leave it as "auto". */
10083 break;
10084 }
10085 }
10086
10087 /* Check any target description for validity. */
10088 if (tdesc_has_registers (tdesc))
10089 {
10090 /* For most registers we require GDB's default names; but also allow
10091 the numeric names for sp / lr / pc, as a convenience. */
10092 static const char *const arm_sp_names[] = { "r13", "sp", NULL };
10093 static const char *const arm_lr_names[] = { "r14", "lr", NULL };
10094 static const char *const arm_pc_names[] = { "r15", "pc", NULL };
10095
10096 const struct tdesc_feature *feature;
10097 int valid_p;
10098
10099 feature = tdesc_find_feature (tdesc,
10100 "org.gnu.gdb.arm.core");
10101 if (feature == NULL)
10102 {
10103 feature = tdesc_find_feature (tdesc,
10104 "org.gnu.gdb.arm.m-profile");
10105 if (feature == NULL)
10106 return NULL;
10107 else
10108 is_m = 1;
10109 }
10110
10111 tdesc_data = tdesc_data_alloc ();
10112
10113 valid_p = 1;
10114 for (i = 0; i < ARM_SP_REGNUM; i++)
10115 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
10116 arm_register_names[i]);
10117 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
10118 ARM_SP_REGNUM,
10119 arm_sp_names);
10120 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
10121 ARM_LR_REGNUM,
10122 arm_lr_names);
10123 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
10124 ARM_PC_REGNUM,
10125 arm_pc_names);
10126 if (is_m)
10127 valid_p &= tdesc_numbered_register (feature, tdesc_data,
10128 ARM_PS_REGNUM, "xpsr");
10129 else
10130 valid_p &= tdesc_numbered_register (feature, tdesc_data,
10131 ARM_PS_REGNUM, "cpsr");
10132
10133 if (!valid_p)
10134 {
10135 tdesc_data_cleanup (tdesc_data);
10136 return NULL;
10137 }
10138
10139 feature = tdesc_find_feature (tdesc,
10140 "org.gnu.gdb.arm.fpa");
10141 if (feature != NULL)
10142 {
10143 valid_p = 1;
10144 for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
10145 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
10146 arm_register_names[i]);
10147 if (!valid_p)
10148 {
10149 tdesc_data_cleanup (tdesc_data);
10150 return NULL;
10151 }
10152 }
10153 else
10154 have_fpa_registers = 0;
10155
10156 feature = tdesc_find_feature (tdesc,
10157 "org.gnu.gdb.xscale.iwmmxt");
10158 if (feature != NULL)
10159 {
10160 static const char *const iwmmxt_names[] = {
10161 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
10162 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
10163 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
10164 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
10165 };
10166
10167 valid_p = 1;
10168 for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
10169 valid_p
10170 &= tdesc_numbered_register (feature, tdesc_data, i,
10171 iwmmxt_names[i - ARM_WR0_REGNUM]);
10172
10173 /* Check for the control registers, but do not fail if they
10174 are missing. */
10175 for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
10176 tdesc_numbered_register (feature, tdesc_data, i,
10177 iwmmxt_names[i - ARM_WR0_REGNUM]);
10178
10179 for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
10180 valid_p
10181 &= tdesc_numbered_register (feature, tdesc_data, i,
10182 iwmmxt_names[i - ARM_WR0_REGNUM]);
10183
10184 if (!valid_p)
10185 {
10186 tdesc_data_cleanup (tdesc_data);
10187 return NULL;
10188 }
10189
10190 have_wmmx_registers = 1;
10191 }
10192
10193 /* If we have a VFP unit, check whether the single precision registers
10194 are present. If not, then we will synthesize them as pseudo
10195 registers. */
10196 feature = tdesc_find_feature (tdesc,
10197 "org.gnu.gdb.arm.vfp");
10198 if (feature != NULL)
10199 {
10200 static const char *const vfp_double_names[] = {
10201 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
10202 "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
10203 "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
10204 "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
10205 };
10206
10207 /* Require the double precision registers. There must be either
10208 16 or 32. */
10209 valid_p = 1;
10210 for (i = 0; i < 32; i++)
10211 {
10212 valid_p &= tdesc_numbered_register (feature, tdesc_data,
10213 ARM_D0_REGNUM + i,
10214 vfp_double_names[i]);
10215 if (!valid_p)
10216 break;
10217 }
10218 if (!valid_p && i == 16)
10219 valid_p = 1;
10220
10221 /* Also require FPSCR. */
10222 valid_p &= tdesc_numbered_register (feature, tdesc_data,
10223 ARM_FPSCR_REGNUM, "fpscr");
10224 if (!valid_p)
10225 {
10226 tdesc_data_cleanup (tdesc_data);
10227 return NULL;
10228 }
10229
10230 if (tdesc_unnumbered_register (feature, "s0") == 0)
10231 have_vfp_pseudos = 1;
10232
10233 vfp_register_count = i;
10234
10235 /* If we have VFP, also check for NEON. The architecture allows
10236 NEON without VFP (integer vector operations only), but GDB
10237 does not support that. */
10238 feature = tdesc_find_feature (tdesc,
10239 "org.gnu.gdb.arm.neon");
10240 if (feature != NULL)
10241 {
10242 /* NEON requires 32 double-precision registers. */
10243 if (i != 32)
10244 {
10245 tdesc_data_cleanup (tdesc_data);
10246 return NULL;
10247 }
10248
10249 /* If there are quad registers defined by the stub, use
10250 their type; otherwise (normally) provide them with
10251 the default type. */
10252 if (tdesc_unnumbered_register (feature, "q0") == 0)
10253 have_neon_pseudos = 1;
10254
10255 have_neon = 1;
10256 }
10257 }
10258 }
10259
10260 /* If there is already a candidate, use it. */
10261 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
10262 best_arch != NULL;
10263 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
10264 {
10265 if (arm_abi != ARM_ABI_AUTO
10266 && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
10267 continue;
10268
10269 if (fp_model != ARM_FLOAT_AUTO
10270 && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
10271 continue;
10272
10273 /* There are various other properties in tdep that we do not
10274 need to check here: those derived from a target description,
10275 since gdbarches with a different target description are
10276 automatically disqualified. */
10277
10278 /* Do check is_m, though, since it might come from the binary. */
10279 if (is_m != gdbarch_tdep (best_arch->gdbarch)->is_m)
10280 continue;
10281
10282 /* Found a match. */
10283 break;
10284 }
10285
10286 if (best_arch != NULL)
10287 {
10288 if (tdesc_data != NULL)
10289 tdesc_data_cleanup (tdesc_data);
10290 return best_arch->gdbarch;
10291 }
10292
10293 tdep = XCNEW (struct gdbarch_tdep);
10294 gdbarch = gdbarch_alloc (&info, tdep);
10295
10296 /* Record additional information about the architecture we are defining.
10297 These are gdbarch discriminators, like the OSABI. */
10298 tdep->arm_abi = arm_abi;
10299 tdep->fp_model = fp_model;
10300 tdep->is_m = is_m;
10301 tdep->have_fpa_registers = have_fpa_registers;
10302 tdep->have_wmmx_registers = have_wmmx_registers;
10303 gdb_assert (vfp_register_count == 0
10304 || vfp_register_count == 16
10305 || vfp_register_count == 32);
10306 tdep->vfp_register_count = vfp_register_count;
10307 tdep->have_vfp_pseudos = have_vfp_pseudos;
10308 tdep->have_neon_pseudos = have_neon_pseudos;
10309 tdep->have_neon = have_neon;
10310
10311 arm_register_g_packet_guesses (gdbarch);
10312
10313 /* Breakpoints. */
10314 switch (info.byte_order_for_code)
10315 {
10316 case BFD_ENDIAN_BIG:
10317 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
10318 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
10319 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
10320 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
10321
10322 break;
10323
10324 case BFD_ENDIAN_LITTLE:
10325 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
10326 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
10327 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
10328 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
10329
10330 break;
10331
10332 default:
10333 internal_error (__FILE__, __LINE__,
10334 _("arm_gdbarch_init: bad byte order for float format"));
10335 }
10336
10337 /* On ARM targets char defaults to unsigned. */
10338 set_gdbarch_char_signed (gdbarch, 0);
10339
10340 /* Note: for displaced stepping, this includes the breakpoint, and one word
10341 of additional scratch space. This setting isn't used for anything beside
10342 displaced stepping at present. */
10343 set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
10344
10345 /* This should be low enough for everything. */
10346 tdep->lowest_pc = 0x20;
10347 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
10348
10349 /* The default, for both APCS and AAPCS, is to return small
10350 structures in registers. */
10351 tdep->struct_return = reg_struct_return;
10352
10353 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
10354 set_gdbarch_frame_align (gdbarch, arm_frame_align);
10355
10356 set_gdbarch_write_pc (gdbarch, arm_write_pc);
10357
10358 /* Frame handling. */
10359 set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
10360 set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
10361 set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
10362
10363 frame_base_set_default (gdbarch, &arm_normal_base);
10364
10365 /* Address manipulation. */
10366 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
10367
10368 /* Advance PC across function entry code. */
10369 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
10370
10371 /* Detect whether PC is at a point where the stack has been destroyed. */
10372 set_gdbarch_stack_frame_destroyed_p (gdbarch, arm_stack_frame_destroyed_p);
10373
10374 /* Skip trampolines. */
10375 set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
10376
10377 /* The stack grows downward. */
10378 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
10379
10380 /* Breakpoint manipulation. */
10381 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
10382 set_gdbarch_remote_breakpoint_from_pc (gdbarch,
10383 arm_remote_breakpoint_from_pc);
10384
10385 /* Information about registers, etc. */
10386 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
10387 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
10388 set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
10389 set_gdbarch_register_type (gdbarch, arm_register_type);
10390 set_gdbarch_register_reggroup_p (gdbarch, arm_register_reggroup_p);
10391
10392 /* This "info float" is FPA-specific. Use the generic version if we
10393 do not have FPA. */
10394 if (gdbarch_tdep (gdbarch)->have_fpa_registers)
10395 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
10396
10397 /* Internal <-> external register number maps. */
10398 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
10399 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
10400
10401 set_gdbarch_register_name (gdbarch, arm_register_name);
10402
10403 /* Returning results. */
10404 set_gdbarch_return_value (gdbarch, arm_return_value);
10405
10406 /* Disassembly. */
10407 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
10408
10409 /* Minsymbol frobbing. */
10410 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
10411 set_gdbarch_coff_make_msymbol_special (gdbarch,
10412 arm_coff_make_msymbol_special);
10413 set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
10414
10415 /* Thumb-2 IT block support. */
10416 set_gdbarch_adjust_breakpoint_address (gdbarch,
10417 arm_adjust_breakpoint_address);
10418
10419 /* Virtual tables. */
10420 set_gdbarch_vbit_in_delta (gdbarch, 1);
10421
10422 /* Hook in the ABI-specific overrides, if they have been registered. */
10423 gdbarch_init_osabi (info, gdbarch);
10424
10425 dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
10426
10427 /* Add some default predicates. */
10428 if (is_m)
10429 frame_unwind_append_unwinder (gdbarch, &arm_m_exception_unwind);
10430 frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
10431 dwarf2_append_unwinders (gdbarch);
10432 frame_unwind_append_unwinder (gdbarch, &arm_exidx_unwind);
10433 frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
10434
10435 /* Now we have tuned the configuration, set a few final things,
10436 based on what the OS ABI has told us. */
10437
10438 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
10439 binaries are always marked. */
10440 if (tdep->arm_abi == ARM_ABI_AUTO)
10441 tdep->arm_abi = ARM_ABI_APCS;
10442
10443 /* Watchpoints are not steppable. */
10444 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
10445
10446 /* We used to default to FPA for generic ARM, but almost nobody
10447 uses that now, and we now provide a way for the user to force
10448 the model. So default to the most useful variant. */
10449 if (tdep->fp_model == ARM_FLOAT_AUTO)
10450 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
10451
10452 if (tdep->jb_pc >= 0)
10453 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
10454
10455 /* Floating point sizes and format. */
10456 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
10457 if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
10458 {
10459 set_gdbarch_double_format
10460 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
10461 set_gdbarch_long_double_format
10462 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
10463 }
10464 else
10465 {
10466 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
10467 set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
10468 }
10469
10470 if (have_vfp_pseudos)
10471 {
10472 /* NOTE: These are the only pseudo registers used by
10473 the ARM target at the moment. If more are added, a
10474 little more care in numbering will be needed. */
10475
10476 int num_pseudos = 32;
10477 if (have_neon_pseudos)
10478 num_pseudos += 16;
10479 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
10480 set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
10481 set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
10482 }
10483
10484 if (tdesc_data)
10485 {
10486 set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
10487
10488 tdesc_use_registers (gdbarch, tdesc, tdesc_data);
10489
10490 /* Override tdesc_register_type to adjust the types of VFP
10491 registers for NEON. */
10492 set_gdbarch_register_type (gdbarch, arm_register_type);
10493 }
10494
10495 /* Add standard register aliases. We add aliases even for those
10496 nanes which are used by the current architecture - it's simpler,
10497 and does no harm, since nothing ever lists user registers. */
10498 for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
10499 user_reg_add (gdbarch, arm_register_aliases[i].name,
10500 value_of_arm_user_reg, &arm_register_aliases[i].regnum);
10501
10502 return gdbarch;
10503 }
10504
10505 static void
10506 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
10507 {
10508 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
10509
10510 if (tdep == NULL)
10511 return;
10512
10513 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
10514 (unsigned long) tdep->lowest_pc);
10515 }
10516
10517 extern initialize_file_ftype _initialize_arm_tdep; /* -Wmissing-prototypes */
10518
10519 void
10520 _initialize_arm_tdep (void)
10521 {
10522 struct ui_file *stb;
10523 long length;
10524 struct cmd_list_element *new_set, *new_show;
10525 const char *setname;
10526 const char *setdesc;
10527 const char *const *regnames;
10528 int numregs, i, j;
10529 static char *helptext;
10530 char regdesc[1024], *rdptr = regdesc;
10531 size_t rest = sizeof (regdesc);
10532
10533 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
10534
10535 arm_objfile_data_key
10536 = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
10537
10538 /* Add ourselves to objfile event chain. */
10539 observer_attach_new_objfile (arm_exidx_new_objfile);
10540 arm_exidx_data_key
10541 = register_objfile_data_with_cleanup (NULL, arm_exidx_data_free);
10542
10543 /* Register an ELF OS ABI sniffer for ARM binaries. */
10544 gdbarch_register_osabi_sniffer (bfd_arch_arm,
10545 bfd_target_elf_flavour,
10546 arm_elf_osabi_sniffer);
10547
10548 /* Initialize the standard target descriptions. */
10549 initialize_tdesc_arm_with_m ();
10550 initialize_tdesc_arm_with_m_fpa_layout ();
10551 initialize_tdesc_arm_with_m_vfp_d16 ();
10552 initialize_tdesc_arm_with_iwmmxt ();
10553 initialize_tdesc_arm_with_vfpv2 ();
10554 initialize_tdesc_arm_with_vfpv3 ();
10555 initialize_tdesc_arm_with_neon ();
10556
10557 /* Get the number of possible sets of register names defined in opcodes. */
10558 num_disassembly_options = get_arm_regname_num_options ();
10559
10560 /* Add root prefix command for all "set arm"/"show arm" commands. */
10561 add_prefix_cmd ("arm", no_class, set_arm_command,
10562 _("Various ARM-specific commands."),
10563 &setarmcmdlist, "set arm ", 0, &setlist);
10564
10565 add_prefix_cmd ("arm", no_class, show_arm_command,
10566 _("Various ARM-specific commands."),
10567 &showarmcmdlist, "show arm ", 0, &showlist);
10568
10569 /* Sync the opcode insn printer with our register viewer. */
10570 parse_arm_disassembler_option ("reg-names-std");
10571
10572 /* Initialize the array that will be passed to
10573 add_setshow_enum_cmd(). */
10574 valid_disassembly_styles = XNEWVEC (const char *,
10575 num_disassembly_options + 1);
10576 for (i = 0; i < num_disassembly_options; i++)
10577 {
10578 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
10579 valid_disassembly_styles[i] = setname;
10580 length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
10581 rdptr += length;
10582 rest -= length;
10583 /* When we find the default names, tell the disassembler to use
10584 them. */
10585 if (!strcmp (setname, "std"))
10586 {
10587 disassembly_style = setname;
10588 set_arm_regname_option (i);
10589 }
10590 }
10591 /* Mark the end of valid options. */
10592 valid_disassembly_styles[num_disassembly_options] = NULL;
10593
10594 /* Create the help text. */
10595 stb = mem_fileopen ();
10596 fprintf_unfiltered (stb, "%s%s%s",
10597 _("The valid values are:\n"),
10598 regdesc,
10599 _("The default is \"std\"."));
10600 helptext = ui_file_xstrdup (stb, NULL);
10601 ui_file_delete (stb);
10602
10603 add_setshow_enum_cmd("disassembler", no_class,
10604 valid_disassembly_styles, &disassembly_style,
10605 _("Set the disassembly style."),
10606 _("Show the disassembly style."),
10607 helptext,
10608 set_disassembly_style_sfunc,
10609 NULL, /* FIXME: i18n: The disassembly style is
10610 \"%s\". */
10611 &setarmcmdlist, &showarmcmdlist);
10612
10613 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
10614 _("Set usage of ARM 32-bit mode."),
10615 _("Show usage of ARM 32-bit mode."),
10616 _("When off, a 26-bit PC will be used."),
10617 NULL,
10618 NULL, /* FIXME: i18n: Usage of ARM 32-bit
10619 mode is %s. */
10620 &setarmcmdlist, &showarmcmdlist);
10621
10622 /* Add a command to allow the user to force the FPU model. */
10623 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
10624 _("Set the floating point type."),
10625 _("Show the floating point type."),
10626 _("auto - Determine the FP typefrom the OS-ABI.\n\
10627 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
10628 fpa - FPA co-processor (GCC compiled).\n\
10629 softvfp - Software FP with pure-endian doubles.\n\
10630 vfp - VFP co-processor."),
10631 set_fp_model_sfunc, show_fp_model,
10632 &setarmcmdlist, &showarmcmdlist);
10633
10634 /* Add a command to allow the user to force the ABI. */
10635 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
10636 _("Set the ABI."),
10637 _("Show the ABI."),
10638 NULL, arm_set_abi, arm_show_abi,
10639 &setarmcmdlist, &showarmcmdlist);
10640
10641 /* Add two commands to allow the user to force the assumed
10642 execution mode. */
10643 add_setshow_enum_cmd ("fallback-mode", class_support,
10644 arm_mode_strings, &arm_fallback_mode_string,
10645 _("Set the mode assumed when symbols are unavailable."),
10646 _("Show the mode assumed when symbols are unavailable."),
10647 NULL, NULL, arm_show_fallback_mode,
10648 &setarmcmdlist, &showarmcmdlist);
10649 add_setshow_enum_cmd ("force-mode", class_support,
10650 arm_mode_strings, &arm_force_mode_string,
10651 _("Set the mode assumed even when symbols are available."),
10652 _("Show the mode assumed even when symbols are available."),
10653 NULL, NULL, arm_show_force_mode,
10654 &setarmcmdlist, &showarmcmdlist);
10655
10656 /* Debugging flag. */
10657 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
10658 _("Set ARM debugging."),
10659 _("Show ARM debugging."),
10660 _("When on, arm-specific debugging is enabled."),
10661 NULL,
10662 NULL, /* FIXME: i18n: "ARM debugging is %s. */
10663 &setdebuglist, &showdebuglist);
10664 }
10665
10666 /* ARM-reversible process record data structures. */
10667
10668 #define ARM_INSN_SIZE_BYTES 4
10669 #define THUMB_INSN_SIZE_BYTES 2
10670 #define THUMB2_INSN_SIZE_BYTES 4
10671
10672
10673 /* Position of the bit within a 32-bit ARM instruction
10674 that defines whether the instruction is a load or store. */
10675 #define INSN_S_L_BIT_NUM 20
10676
10677 #define REG_ALLOC(REGS, LENGTH, RECORD_BUF) \
10678 do \
10679 { \
10680 unsigned int reg_len = LENGTH; \
10681 if (reg_len) \
10682 { \
10683 REGS = XNEWVEC (uint32_t, reg_len); \
10684 memcpy(&REGS[0], &RECORD_BUF[0], sizeof(uint32_t)*LENGTH); \
10685 } \
10686 } \
10687 while (0)
10688
10689 #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
10690 do \
10691 { \
10692 unsigned int mem_len = LENGTH; \
10693 if (mem_len) \
10694 { \
10695 MEMS = XNEWVEC (struct arm_mem_r, mem_len); \
10696 memcpy(&MEMS->len, &RECORD_BUF[0], \
10697 sizeof(struct arm_mem_r) * LENGTH); \
10698 } \
10699 } \
10700 while (0)
10701
10702 /* Checks whether insn is already recorded or yet to be decoded. (boolean expression). */
10703 #define INSN_RECORDED(ARM_RECORD) \
10704 (0 != (ARM_RECORD)->reg_rec_count || 0 != (ARM_RECORD)->mem_rec_count)
10705
10706 /* ARM memory record structure. */
10707 struct arm_mem_r
10708 {
10709 uint32_t len; /* Record length. */
10710 uint32_t addr; /* Memory address. */
10711 };
10712
10713 /* ARM instruction record contains opcode of current insn
10714 and execution state (before entry to decode_insn()),
10715 contains list of to-be-modified registers and
10716 memory blocks (on return from decode_insn()). */
10717
10718 typedef struct insn_decode_record_t
10719 {
10720 struct gdbarch *gdbarch;
10721 struct regcache *regcache;
10722 CORE_ADDR this_addr; /* Address of the insn being decoded. */
10723 uint32_t arm_insn; /* Should accommodate thumb. */
10724 uint32_t cond; /* Condition code. */
10725 uint32_t opcode; /* Insn opcode. */
10726 uint32_t decode; /* Insn decode bits. */
10727 uint32_t mem_rec_count; /* No of mem records. */
10728 uint32_t reg_rec_count; /* No of reg records. */
10729 uint32_t *arm_regs; /* Registers to be saved for this record. */
10730 struct arm_mem_r *arm_mems; /* Memory to be saved for this record. */
10731 } insn_decode_record;
10732
10733
10734 /* Checks ARM SBZ and SBO mandatory fields. */
10735
10736 static int
10737 sbo_sbz (uint32_t insn, uint32_t bit_num, uint32_t len, uint32_t sbo)
10738 {
10739 uint32_t ones = bits (insn, bit_num - 1, (bit_num -1) + (len - 1));
10740
10741 if (!len)
10742 return 1;
10743
10744 if (!sbo)
10745 ones = ~ones;
10746
10747 while (ones)
10748 {
10749 if (!(ones & sbo))
10750 {
10751 return 0;
10752 }
10753 ones = ones >> 1;
10754 }
10755 return 1;
10756 }
10757
10758 enum arm_record_result
10759 {
10760 ARM_RECORD_SUCCESS = 0,
10761 ARM_RECORD_FAILURE = 1
10762 };
10763
10764 typedef enum
10765 {
10766 ARM_RECORD_STRH=1,
10767 ARM_RECORD_STRD
10768 } arm_record_strx_t;
10769
10770 typedef enum
10771 {
10772 ARM_RECORD=1,
10773 THUMB_RECORD,
10774 THUMB2_RECORD
10775 } record_type_t;
10776
10777
10778 static int
10779 arm_record_strx (insn_decode_record *arm_insn_r, uint32_t *record_buf,
10780 uint32_t *record_buf_mem, arm_record_strx_t str_type)
10781 {
10782
10783 struct regcache *reg_cache = arm_insn_r->regcache;
10784 ULONGEST u_regval[2]= {0};
10785
10786 uint32_t reg_src1 = 0, reg_src2 = 0;
10787 uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
10788 uint32_t opcode1 = 0;
10789
10790 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
10791 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
10792 opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
10793
10794
10795 if (14 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
10796 {
10797 /* 1) Handle misc store, immediate offset. */
10798 immed_low = bits (arm_insn_r->arm_insn, 0, 3);
10799 immed_high = bits (arm_insn_r->arm_insn, 8, 11);
10800 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10801 regcache_raw_read_unsigned (reg_cache, reg_src1,
10802 &u_regval[0]);
10803 if (ARM_PC_REGNUM == reg_src1)
10804 {
10805 /* If R15 was used as Rn, hence current PC+8. */
10806 u_regval[0] = u_regval[0] + 8;
10807 }
10808 offset_8 = (immed_high << 4) | immed_low;
10809 /* Calculate target store address. */
10810 if (14 == arm_insn_r->opcode)
10811 {
10812 tgt_mem_addr = u_regval[0] + offset_8;
10813 }
10814 else
10815 {
10816 tgt_mem_addr = u_regval[0] - offset_8;
10817 }
10818 if (ARM_RECORD_STRH == str_type)
10819 {
10820 record_buf_mem[0] = 2;
10821 record_buf_mem[1] = tgt_mem_addr;
10822 arm_insn_r->mem_rec_count = 1;
10823 }
10824 else if (ARM_RECORD_STRD == str_type)
10825 {
10826 record_buf_mem[0] = 4;
10827 record_buf_mem[1] = tgt_mem_addr;
10828 record_buf_mem[2] = 4;
10829 record_buf_mem[3] = tgt_mem_addr + 4;
10830 arm_insn_r->mem_rec_count = 2;
10831 }
10832 }
10833 else if (12 == arm_insn_r->opcode || 8 == arm_insn_r->opcode)
10834 {
10835 /* 2) Store, register offset. */
10836 /* Get Rm. */
10837 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10838 /* Get Rn. */
10839 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10840 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10841 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10842 if (15 == reg_src2)
10843 {
10844 /* If R15 was used as Rn, hence current PC+8. */
10845 u_regval[0] = u_regval[0] + 8;
10846 }
10847 /* Calculate target store address, Rn +/- Rm, register offset. */
10848 if (12 == arm_insn_r->opcode)
10849 {
10850 tgt_mem_addr = u_regval[0] + u_regval[1];
10851 }
10852 else
10853 {
10854 tgt_mem_addr = u_regval[1] - u_regval[0];
10855 }
10856 if (ARM_RECORD_STRH == str_type)
10857 {
10858 record_buf_mem[0] = 2;
10859 record_buf_mem[1] = tgt_mem_addr;
10860 arm_insn_r->mem_rec_count = 1;
10861 }
10862 else if (ARM_RECORD_STRD == str_type)
10863 {
10864 record_buf_mem[0] = 4;
10865 record_buf_mem[1] = tgt_mem_addr;
10866 record_buf_mem[2] = 4;
10867 record_buf_mem[3] = tgt_mem_addr + 4;
10868 arm_insn_r->mem_rec_count = 2;
10869 }
10870 }
10871 else if (11 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
10872 || 2 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
10873 {
10874 /* 3) Store, immediate pre-indexed. */
10875 /* 5) Store, immediate post-indexed. */
10876 immed_low = bits (arm_insn_r->arm_insn, 0, 3);
10877 immed_high = bits (arm_insn_r->arm_insn, 8, 11);
10878 offset_8 = (immed_high << 4) | immed_low;
10879 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
10880 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10881 /* Calculate target store address, Rn +/- Rm, register offset. */
10882 if (15 == arm_insn_r->opcode || 6 == arm_insn_r->opcode)
10883 {
10884 tgt_mem_addr = u_regval[0] + offset_8;
10885 }
10886 else
10887 {
10888 tgt_mem_addr = u_regval[0] - offset_8;
10889 }
10890 if (ARM_RECORD_STRH == str_type)
10891 {
10892 record_buf_mem[0] = 2;
10893 record_buf_mem[1] = tgt_mem_addr;
10894 arm_insn_r->mem_rec_count = 1;
10895 }
10896 else if (ARM_RECORD_STRD == str_type)
10897 {
10898 record_buf_mem[0] = 4;
10899 record_buf_mem[1] = tgt_mem_addr;
10900 record_buf_mem[2] = 4;
10901 record_buf_mem[3] = tgt_mem_addr + 4;
10902 arm_insn_r->mem_rec_count = 2;
10903 }
10904 /* Record Rn also as it changes. */
10905 *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
10906 arm_insn_r->reg_rec_count = 1;
10907 }
10908 else if (9 == arm_insn_r->opcode || 13 == arm_insn_r->opcode
10909 || 0 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
10910 {
10911 /* 4) Store, register pre-indexed. */
10912 /* 6) Store, register post -indexed. */
10913 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
10914 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
10915 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
10916 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
10917 /* Calculate target store address, Rn +/- Rm, register offset. */
10918 if (13 == arm_insn_r->opcode || 4 == arm_insn_r->opcode)
10919 {
10920 tgt_mem_addr = u_regval[0] + u_regval[1];
10921 }
10922 else
10923 {
10924 tgt_mem_addr = u_regval[1] - u_regval[0];
10925 }
10926 if (ARM_RECORD_STRH == str_type)
10927 {
10928 record_buf_mem[0] = 2;
10929 record_buf_mem[1] = tgt_mem_addr;
10930 arm_insn_r->mem_rec_count = 1;
10931 }
10932 else if (ARM_RECORD_STRD == str_type)
10933 {
10934 record_buf_mem[0] = 4;
10935 record_buf_mem[1] = tgt_mem_addr;
10936 record_buf_mem[2] = 4;
10937 record_buf_mem[3] = tgt_mem_addr + 4;
10938 arm_insn_r->mem_rec_count = 2;
10939 }
10940 /* Record Rn also as it changes. */
10941 *(record_buf) = bits (arm_insn_r->arm_insn, 16, 19);
10942 arm_insn_r->reg_rec_count = 1;
10943 }
10944 return 0;
10945 }
10946
10947 /* Handling ARM extension space insns. */
10948
10949 static int
10950 arm_record_extension_space (insn_decode_record *arm_insn_r)
10951 {
10952 uint32_t ret = 0; /* Return value: -1:record failure ; 0:success */
10953 uint32_t opcode1 = 0, opcode2 = 0, insn_op1 = 0;
10954 uint32_t record_buf[8], record_buf_mem[8];
10955 uint32_t reg_src1 = 0;
10956 uint32_t immed_high = 0, immed_low = 0,offset_8 = 0, tgt_mem_addr = 0;
10957 struct regcache *reg_cache = arm_insn_r->regcache;
10958 ULONGEST u_regval = 0;
10959
10960 gdb_assert (!INSN_RECORDED(arm_insn_r));
10961 /* Handle unconditional insn extension space. */
10962
10963 opcode1 = bits (arm_insn_r->arm_insn, 20, 27);
10964 opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
10965 if (arm_insn_r->cond)
10966 {
10967 /* PLD has no affect on architectural state, it just affects
10968 the caches. */
10969 if (5 == ((opcode1 & 0xE0) >> 5))
10970 {
10971 /* BLX(1) */
10972 record_buf[0] = ARM_PS_REGNUM;
10973 record_buf[1] = ARM_LR_REGNUM;
10974 arm_insn_r->reg_rec_count = 2;
10975 }
10976 /* STC2, LDC2, MCR2, MRC2, CDP2: <TBD>, co-processor insn. */
10977 }
10978
10979
10980 opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
10981 if (3 == opcode1 && bit (arm_insn_r->arm_insn, 4))
10982 {
10983 ret = -1;
10984 /* Undefined instruction on ARM V5; need to handle if later
10985 versions define it. */
10986 }
10987
10988 opcode1 = bits (arm_insn_r->arm_insn, 24, 27);
10989 opcode2 = bits (arm_insn_r->arm_insn, 4, 7);
10990 insn_op1 = bits (arm_insn_r->arm_insn, 20, 23);
10991
10992 /* Handle arithmetic insn extension space. */
10993 if (!opcode1 && 9 == opcode2 && 1 != arm_insn_r->cond
10994 && !INSN_RECORDED(arm_insn_r))
10995 {
10996 /* Handle MLA(S) and MUL(S). */
10997 if (0 <= insn_op1 && 3 >= insn_op1)
10998 {
10999 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11000 record_buf[1] = ARM_PS_REGNUM;
11001 arm_insn_r->reg_rec_count = 2;
11002 }
11003 else if (4 <= insn_op1 && 15 >= insn_op1)
11004 {
11005 /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S). */
11006 record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
11007 record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
11008 record_buf[2] = ARM_PS_REGNUM;
11009 arm_insn_r->reg_rec_count = 3;
11010 }
11011 }
11012
11013 opcode1 = bits (arm_insn_r->arm_insn, 26, 27);
11014 opcode2 = bits (arm_insn_r->arm_insn, 23, 24);
11015 insn_op1 = bits (arm_insn_r->arm_insn, 21, 22);
11016
11017 /* Handle control insn extension space. */
11018
11019 if (!opcode1 && 2 == opcode2 && !bit (arm_insn_r->arm_insn, 20)
11020 && 1 != arm_insn_r->cond && !INSN_RECORDED(arm_insn_r))
11021 {
11022 if (!bit (arm_insn_r->arm_insn,25))
11023 {
11024 if (!bits (arm_insn_r->arm_insn, 4, 7))
11025 {
11026 if ((0 == insn_op1) || (2 == insn_op1))
11027 {
11028 /* MRS. */
11029 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11030 arm_insn_r->reg_rec_count = 1;
11031 }
11032 else if (1 == insn_op1)
11033 {
11034 /* CSPR is going to be changed. */
11035 record_buf[0] = ARM_PS_REGNUM;
11036 arm_insn_r->reg_rec_count = 1;
11037 }
11038 else if (3 == insn_op1)
11039 {
11040 /* SPSR is going to be changed. */
11041 /* We need to get SPSR value, which is yet to be done. */
11042 printf_unfiltered (_("Process record does not support "
11043 "instruction 0x%0x at address %s.\n"),
11044 arm_insn_r->arm_insn,
11045 paddress (arm_insn_r->gdbarch,
11046 arm_insn_r->this_addr));
11047 return -1;
11048 }
11049 }
11050 else if (1 == bits (arm_insn_r->arm_insn, 4, 7))
11051 {
11052 if (1 == insn_op1)
11053 {
11054 /* BX. */
11055 record_buf[0] = ARM_PS_REGNUM;
11056 arm_insn_r->reg_rec_count = 1;
11057 }
11058 else if (3 == insn_op1)
11059 {
11060 /* CLZ. */
11061 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11062 arm_insn_r->reg_rec_count = 1;
11063 }
11064 }
11065 else if (3 == bits (arm_insn_r->arm_insn, 4, 7))
11066 {
11067 /* BLX. */
11068 record_buf[0] = ARM_PS_REGNUM;
11069 record_buf[1] = ARM_LR_REGNUM;
11070 arm_insn_r->reg_rec_count = 2;
11071 }
11072 else if (5 == bits (arm_insn_r->arm_insn, 4, 7))
11073 {
11074 /* QADD, QSUB, QDADD, QDSUB */
11075 record_buf[0] = ARM_PS_REGNUM;
11076 record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
11077 arm_insn_r->reg_rec_count = 2;
11078 }
11079 else if (7 == bits (arm_insn_r->arm_insn, 4, 7))
11080 {
11081 /* BKPT. */
11082 record_buf[0] = ARM_PS_REGNUM;
11083 record_buf[1] = ARM_LR_REGNUM;
11084 arm_insn_r->reg_rec_count = 2;
11085
11086 /* Save SPSR also;how? */
11087 printf_unfiltered (_("Process record does not support "
11088 "instruction 0x%0x at address %s.\n"),
11089 arm_insn_r->arm_insn,
11090 paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11091 return -1;
11092 }
11093 else if(8 == bits (arm_insn_r->arm_insn, 4, 7)
11094 || 10 == bits (arm_insn_r->arm_insn, 4, 7)
11095 || 12 == bits (arm_insn_r->arm_insn, 4, 7)
11096 || 14 == bits (arm_insn_r->arm_insn, 4, 7)
11097 )
11098 {
11099 if (0 == insn_op1 || 1 == insn_op1)
11100 {
11101 /* SMLA<x><y>, SMLAW<y>, SMULW<y>. */
11102 /* We dont do optimization for SMULW<y> where we
11103 need only Rd. */
11104 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11105 record_buf[1] = ARM_PS_REGNUM;
11106 arm_insn_r->reg_rec_count = 2;
11107 }
11108 else if (2 == insn_op1)
11109 {
11110 /* SMLAL<x><y>. */
11111 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11112 record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
11113 arm_insn_r->reg_rec_count = 2;
11114 }
11115 else if (3 == insn_op1)
11116 {
11117 /* SMUL<x><y>. */
11118 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11119 arm_insn_r->reg_rec_count = 1;
11120 }
11121 }
11122 }
11123 else
11124 {
11125 /* MSR : immediate form. */
11126 if (1 == insn_op1)
11127 {
11128 /* CSPR is going to be changed. */
11129 record_buf[0] = ARM_PS_REGNUM;
11130 arm_insn_r->reg_rec_count = 1;
11131 }
11132 else if (3 == insn_op1)
11133 {
11134 /* SPSR is going to be changed. */
11135 /* we need to get SPSR value, which is yet to be done */
11136 printf_unfiltered (_("Process record does not support "
11137 "instruction 0x%0x at address %s.\n"),
11138 arm_insn_r->arm_insn,
11139 paddress (arm_insn_r->gdbarch,
11140 arm_insn_r->this_addr));
11141 return -1;
11142 }
11143 }
11144 }
11145
11146 opcode1 = bits (arm_insn_r->arm_insn, 25, 27);
11147 opcode2 = bits (arm_insn_r->arm_insn, 20, 24);
11148 insn_op1 = bits (arm_insn_r->arm_insn, 5, 6);
11149
11150 /* Handle load/store insn extension space. */
11151
11152 if (!opcode1 && bit (arm_insn_r->arm_insn, 7)
11153 && bit (arm_insn_r->arm_insn, 4) && 1 != arm_insn_r->cond
11154 && !INSN_RECORDED(arm_insn_r))
11155 {
11156 /* SWP/SWPB. */
11157 if (0 == insn_op1)
11158 {
11159 /* These insn, changes register and memory as well. */
11160 /* SWP or SWPB insn. */
11161 /* Get memory address given by Rn. */
11162 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
11163 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
11164 /* SWP insn ?, swaps word. */
11165 if (8 == arm_insn_r->opcode)
11166 {
11167 record_buf_mem[0] = 4;
11168 }
11169 else
11170 {
11171 /* SWPB insn, swaps only byte. */
11172 record_buf_mem[0] = 1;
11173 }
11174 record_buf_mem[1] = u_regval;
11175 arm_insn_r->mem_rec_count = 1;
11176 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11177 arm_insn_r->reg_rec_count = 1;
11178 }
11179 else if (1 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
11180 {
11181 /* STRH. */
11182 arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
11183 ARM_RECORD_STRH);
11184 }
11185 else if (2 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
11186 {
11187 /* LDRD. */
11188 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11189 record_buf[1] = record_buf[0] + 1;
11190 arm_insn_r->reg_rec_count = 2;
11191 }
11192 else if (3 == insn_op1 && !bit (arm_insn_r->arm_insn, 20))
11193 {
11194 /* STRD. */
11195 arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
11196 ARM_RECORD_STRD);
11197 }
11198 else if (bit (arm_insn_r->arm_insn, 20) && insn_op1 <= 3)
11199 {
11200 /* LDRH, LDRSB, LDRSH. */
11201 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11202 arm_insn_r->reg_rec_count = 1;
11203 }
11204
11205 }
11206
11207 opcode1 = bits (arm_insn_r->arm_insn, 23, 27);
11208 if (24 == opcode1 && bit (arm_insn_r->arm_insn, 21)
11209 && !INSN_RECORDED(arm_insn_r))
11210 {
11211 ret = -1;
11212 /* Handle coprocessor insn extension space. */
11213 }
11214
11215 /* To be done for ARMv5 and later; as of now we return -1. */
11216 if (-1 == ret)
11217 printf_unfiltered (_("Process record does not support instruction x%0x "
11218 "at address %s.\n"),arm_insn_r->arm_insn,
11219 paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11220
11221
11222 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11223 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11224
11225 return ret;
11226 }
11227
11228 /* Handling opcode 000 insns. */
11229
11230 static int
11231 arm_record_data_proc_misc_ld_str (insn_decode_record *arm_insn_r)
11232 {
11233 struct regcache *reg_cache = arm_insn_r->regcache;
11234 uint32_t record_buf[8], record_buf_mem[8];
11235 ULONGEST u_regval[2] = {0};
11236
11237 uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
11238 uint32_t immed_high = 0, immed_low = 0, offset_8 = 0, tgt_mem_addr = 0;
11239 uint32_t opcode1 = 0;
11240
11241 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
11242 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
11243 opcode1 = bits (arm_insn_r->arm_insn, 20, 24);
11244
11245 /* Data processing insn /multiply insn. */
11246 if (9 == arm_insn_r->decode
11247 && ((4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
11248 || (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)))
11249 {
11250 /* Handle multiply instructions. */
11251 /* MLA, MUL, SMLAL, SMULL, UMLAL, UMULL. */
11252 if (0 == arm_insn_r->opcode || 1 == arm_insn_r->opcode)
11253 {
11254 /* Handle MLA and MUL. */
11255 record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
11256 record_buf[1] = ARM_PS_REGNUM;
11257 arm_insn_r->reg_rec_count = 2;
11258 }
11259 else if (4 <= arm_insn_r->opcode && 7 >= arm_insn_r->opcode)
11260 {
11261 /* Handle SMLAL, SMULL, UMLAL, UMULL. */
11262 record_buf[0] = bits (arm_insn_r->arm_insn, 16, 19);
11263 record_buf[1] = bits (arm_insn_r->arm_insn, 12, 15);
11264 record_buf[2] = ARM_PS_REGNUM;
11265 arm_insn_r->reg_rec_count = 3;
11266 }
11267 }
11268 else if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
11269 && (11 == arm_insn_r->decode || 13 == arm_insn_r->decode))
11270 {
11271 /* Handle misc load insns, as 20th bit (L = 1). */
11272 /* LDR insn has a capability to do branching, if
11273 MOV LR, PC is precceded by LDR insn having Rn as R15
11274 in that case, it emulates branch and link insn, and hence we
11275 need to save CSPR and PC as well. I am not sure this is right
11276 place; as opcode = 010 LDR insn make this happen, if R15 was
11277 used. */
11278 reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
11279 if (15 != reg_dest)
11280 {
11281 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11282 arm_insn_r->reg_rec_count = 1;
11283 }
11284 else
11285 {
11286 record_buf[0] = reg_dest;
11287 record_buf[1] = ARM_PS_REGNUM;
11288 arm_insn_r->reg_rec_count = 2;
11289 }
11290 }
11291 else if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
11292 && sbo_sbz (arm_insn_r->arm_insn, 5, 12, 0)
11293 && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
11294 && 2 == bits (arm_insn_r->arm_insn, 20, 21))
11295 {
11296 /* Handle MSR insn. */
11297 if (9 == arm_insn_r->opcode)
11298 {
11299 /* CSPR is going to be changed. */
11300 record_buf[0] = ARM_PS_REGNUM;
11301 arm_insn_r->reg_rec_count = 1;
11302 }
11303 else
11304 {
11305 /* SPSR is going to be changed. */
11306 /* How to read SPSR value? */
11307 printf_unfiltered (_("Process record does not support instruction "
11308 "0x%0x at address %s.\n"),
11309 arm_insn_r->arm_insn,
11310 paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11311 return -1;
11312 }
11313 }
11314 else if (9 == arm_insn_r->decode
11315 && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
11316 && !bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11317 {
11318 /* Handling SWP, SWPB. */
11319 /* These insn, changes register and memory as well. */
11320 /* SWP or SWPB insn. */
11321
11322 reg_src1 = bits (arm_insn_r->arm_insn, 16, 19);
11323 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11324 /* SWP insn ?, swaps word. */
11325 if (8 == arm_insn_r->opcode)
11326 {
11327 record_buf_mem[0] = 4;
11328 }
11329 else
11330 {
11331 /* SWPB insn, swaps only byte. */
11332 record_buf_mem[0] = 1;
11333 }
11334 record_buf_mem[1] = u_regval[0];
11335 arm_insn_r->mem_rec_count = 1;
11336 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11337 arm_insn_r->reg_rec_count = 1;
11338 }
11339 else if (3 == arm_insn_r->decode && 0x12 == opcode1
11340 && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
11341 {
11342 /* Handle BLX, branch and link/exchange. */
11343 if (9 == arm_insn_r->opcode)
11344 {
11345 /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm,
11346 and R14 stores the return address. */
11347 record_buf[0] = ARM_PS_REGNUM;
11348 record_buf[1] = ARM_LR_REGNUM;
11349 arm_insn_r->reg_rec_count = 2;
11350 }
11351 }
11352 else if (7 == arm_insn_r->decode && 0x12 == opcode1)
11353 {
11354 /* Handle enhanced software breakpoint insn, BKPT. */
11355 /* CPSR is changed to be executed in ARM state, disabling normal
11356 interrupts, entering abort mode. */
11357 /* According to high vector configuration PC is set. */
11358 /* user hit breakpoint and type reverse, in
11359 that case, we need to go back with previous CPSR and
11360 Program Counter. */
11361 record_buf[0] = ARM_PS_REGNUM;
11362 record_buf[1] = ARM_LR_REGNUM;
11363 arm_insn_r->reg_rec_count = 2;
11364
11365 /* Save SPSR also; how? */
11366 printf_unfiltered (_("Process record does not support instruction "
11367 "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11368 paddress (arm_insn_r->gdbarch,
11369 arm_insn_r->this_addr));
11370 return -1;
11371 }
11372 else if (11 == arm_insn_r->decode
11373 && !bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11374 {
11375 /* Handle enhanced store insns and DSP insns (e.g. LDRD). */
11376
11377 /* Handle str(x) insn */
11378 arm_record_strx(arm_insn_r, &record_buf[0], &record_buf_mem[0],
11379 ARM_RECORD_STRH);
11380 }
11381 else if (1 == arm_insn_r->decode && 0x12 == opcode1
11382 && sbo_sbz (arm_insn_r->arm_insn, 9, 12, 1))
11383 {
11384 /* Handle BX, branch and link/exchange. */
11385 /* Branch is chosen by setting T bit of CSPR, bitp[0] of Rm. */
11386 record_buf[0] = ARM_PS_REGNUM;
11387 arm_insn_r->reg_rec_count = 1;
11388 }
11389 else if (1 == arm_insn_r->decode && 0x16 == opcode1
11390 && sbo_sbz (arm_insn_r->arm_insn, 9, 4, 1)
11391 && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1))
11392 {
11393 /* Count leading zeros: CLZ. */
11394 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11395 arm_insn_r->reg_rec_count = 1;
11396 }
11397 else if (!bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM)
11398 && (8 == arm_insn_r->opcode || 10 == arm_insn_r->opcode)
11399 && sbo_sbz (arm_insn_r->arm_insn, 17, 4, 1)
11400 && sbo_sbz (arm_insn_r->arm_insn, 1, 12, 0)
11401 )
11402 {
11403 /* Handle MRS insn. */
11404 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11405 arm_insn_r->reg_rec_count = 1;
11406 }
11407 else if (arm_insn_r->opcode <= 15)
11408 {
11409 /* Normal data processing insns. */
11410 /* Out of 11 shifter operands mode, all the insn modifies destination
11411 register, which is specified by 13-16 decode. */
11412 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11413 record_buf[1] = ARM_PS_REGNUM;
11414 arm_insn_r->reg_rec_count = 2;
11415 }
11416 else
11417 {
11418 return -1;
11419 }
11420
11421 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11422 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11423 return 0;
11424 }
11425
11426 /* Handling opcode 001 insns. */
11427
11428 static int
11429 arm_record_data_proc_imm (insn_decode_record *arm_insn_r)
11430 {
11431 uint32_t record_buf[8], record_buf_mem[8];
11432
11433 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
11434 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
11435
11436 if ((9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode)
11437 && 2 == bits (arm_insn_r->arm_insn, 20, 21)
11438 && sbo_sbz (arm_insn_r->arm_insn, 13, 4, 1)
11439 )
11440 {
11441 /* Handle MSR insn. */
11442 if (9 == arm_insn_r->opcode)
11443 {
11444 /* CSPR is going to be changed. */
11445 record_buf[0] = ARM_PS_REGNUM;
11446 arm_insn_r->reg_rec_count = 1;
11447 }
11448 else
11449 {
11450 /* SPSR is going to be changed. */
11451 }
11452 }
11453 else if (arm_insn_r->opcode <= 15)
11454 {
11455 /* Normal data processing insns. */
11456 /* Out of 11 shifter operands mode, all the insn modifies destination
11457 register, which is specified by 13-16 decode. */
11458 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11459 record_buf[1] = ARM_PS_REGNUM;
11460 arm_insn_r->reg_rec_count = 2;
11461 }
11462 else
11463 {
11464 return -1;
11465 }
11466
11467 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11468 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11469 return 0;
11470 }
11471
11472 /* Handle ARM mode instructions with opcode 010. */
11473
11474 static int
11475 arm_record_ld_st_imm_offset (insn_decode_record *arm_insn_r)
11476 {
11477 struct regcache *reg_cache = arm_insn_r->regcache;
11478
11479 uint32_t reg_base , reg_dest;
11480 uint32_t offset_12, tgt_mem_addr;
11481 uint32_t record_buf[8], record_buf_mem[8];
11482 unsigned char wback;
11483 ULONGEST u_regval;
11484
11485 /* Calculate wback. */
11486 wback = (bit (arm_insn_r->arm_insn, 24) == 0)
11487 || (bit (arm_insn_r->arm_insn, 21) == 1);
11488
11489 arm_insn_r->reg_rec_count = 0;
11490 reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11491
11492 if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11493 {
11494 /* LDR (immediate), LDR (literal), LDRB (immediate), LDRB (literal), LDRBT
11495 and LDRT. */
11496
11497 reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
11498 record_buf[arm_insn_r->reg_rec_count++] = reg_dest;
11499
11500 /* The LDR instruction is capable of doing branching. If MOV LR, PC
11501 preceeds a LDR instruction having R15 as reg_base, it
11502 emulates a branch and link instruction, and hence we need to save
11503 CPSR and PC as well. */
11504 if (ARM_PC_REGNUM == reg_dest)
11505 record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11506
11507 /* If wback is true, also save the base register, which is going to be
11508 written to. */
11509 if (wback)
11510 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11511 }
11512 else
11513 {
11514 /* STR (immediate), STRB (immediate), STRBT and STRT. */
11515
11516 offset_12 = bits (arm_insn_r->arm_insn, 0, 11);
11517 regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11518
11519 /* Handle bit U. */
11520 if (bit (arm_insn_r->arm_insn, 23))
11521 {
11522 /* U == 1: Add the offset. */
11523 tgt_mem_addr = (uint32_t) u_regval + offset_12;
11524 }
11525 else
11526 {
11527 /* U == 0: subtract the offset. */
11528 tgt_mem_addr = (uint32_t) u_regval - offset_12;
11529 }
11530
11531 /* Bit 22 tells us whether the store instruction writes 1 byte or 4
11532 bytes. */
11533 if (bit (arm_insn_r->arm_insn, 22))
11534 {
11535 /* STRB and STRBT: 1 byte. */
11536 record_buf_mem[0] = 1;
11537 }
11538 else
11539 {
11540 /* STR and STRT: 4 bytes. */
11541 record_buf_mem[0] = 4;
11542 }
11543
11544 /* Handle bit P. */
11545 if (bit (arm_insn_r->arm_insn, 24))
11546 record_buf_mem[1] = tgt_mem_addr;
11547 else
11548 record_buf_mem[1] = (uint32_t) u_regval;
11549
11550 arm_insn_r->mem_rec_count = 1;
11551
11552 /* If wback is true, also save the base register, which is going to be
11553 written to. */
11554 if (wback)
11555 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11556 }
11557
11558 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11559 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11560 return 0;
11561 }
11562
11563 /* Handling opcode 011 insns. */
11564
11565 static int
11566 arm_record_ld_st_reg_offset (insn_decode_record *arm_insn_r)
11567 {
11568 struct regcache *reg_cache = arm_insn_r->regcache;
11569
11570 uint32_t shift_imm = 0;
11571 uint32_t reg_src1 = 0, reg_src2 = 0, reg_dest = 0;
11572 uint32_t offset_12 = 0, tgt_mem_addr = 0;
11573 uint32_t record_buf[8], record_buf_mem[8];
11574
11575 LONGEST s_word;
11576 ULONGEST u_regval[2];
11577
11578 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 21, 24);
11579 arm_insn_r->decode = bits (arm_insn_r->arm_insn, 4, 7);
11580
11581 /* Handle enhanced store insns and LDRD DSP insn,
11582 order begins according to addressing modes for store insns
11583 STRH insn. */
11584
11585 /* LDR or STR? */
11586 if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11587 {
11588 reg_dest = bits (arm_insn_r->arm_insn, 12, 15);
11589 /* LDR insn has a capability to do branching, if
11590 MOV LR, PC is precedded by LDR insn having Rn as R15
11591 in that case, it emulates branch and link insn, and hence we
11592 need to save CSPR and PC as well. */
11593 if (15 != reg_dest)
11594 {
11595 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
11596 arm_insn_r->reg_rec_count = 1;
11597 }
11598 else
11599 {
11600 record_buf[0] = reg_dest;
11601 record_buf[1] = ARM_PS_REGNUM;
11602 arm_insn_r->reg_rec_count = 2;
11603 }
11604 }
11605 else
11606 {
11607 if (! bits (arm_insn_r->arm_insn, 4, 11))
11608 {
11609 /* Store insn, register offset and register pre-indexed,
11610 register post-indexed. */
11611 /* Get Rm. */
11612 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
11613 /* Get Rn. */
11614 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
11615 regcache_raw_read_unsigned (reg_cache, reg_src1
11616 , &u_regval[0]);
11617 regcache_raw_read_unsigned (reg_cache, reg_src2
11618 , &u_regval[1]);
11619 if (15 == reg_src2)
11620 {
11621 /* If R15 was used as Rn, hence current PC+8. */
11622 /* Pre-indexed mode doesnt reach here ; illegal insn. */
11623 u_regval[0] = u_regval[0] + 8;
11624 }
11625 /* Calculate target store address, Rn +/- Rm, register offset. */
11626 /* U == 1. */
11627 if (bit (arm_insn_r->arm_insn, 23))
11628 {
11629 tgt_mem_addr = u_regval[0] + u_regval[1];
11630 }
11631 else
11632 {
11633 tgt_mem_addr = u_regval[1] - u_regval[0];
11634 }
11635
11636 switch (arm_insn_r->opcode)
11637 {
11638 /* STR. */
11639 case 8:
11640 case 12:
11641 /* STR. */
11642 case 9:
11643 case 13:
11644 /* STRT. */
11645 case 1:
11646 case 5:
11647 /* STR. */
11648 case 0:
11649 case 4:
11650 record_buf_mem[0] = 4;
11651 break;
11652
11653 /* STRB. */
11654 case 10:
11655 case 14:
11656 /* STRB. */
11657 case 11:
11658 case 15:
11659 /* STRBT. */
11660 case 3:
11661 case 7:
11662 /* STRB. */
11663 case 2:
11664 case 6:
11665 record_buf_mem[0] = 1;
11666 break;
11667
11668 default:
11669 gdb_assert_not_reached ("no decoding pattern found");
11670 break;
11671 }
11672 record_buf_mem[1] = tgt_mem_addr;
11673 arm_insn_r->mem_rec_count = 1;
11674
11675 if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
11676 || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
11677 || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
11678 || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
11679 || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
11680 || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
11681 )
11682 {
11683 /* Rn is going to be changed in pre-indexed mode and
11684 post-indexed mode as well. */
11685 record_buf[0] = reg_src2;
11686 arm_insn_r->reg_rec_count = 1;
11687 }
11688 }
11689 else
11690 {
11691 /* Store insn, scaled register offset; scaled pre-indexed. */
11692 offset_12 = bits (arm_insn_r->arm_insn, 5, 6);
11693 /* Get Rm. */
11694 reg_src1 = bits (arm_insn_r->arm_insn, 0, 3);
11695 /* Get Rn. */
11696 reg_src2 = bits (arm_insn_r->arm_insn, 16, 19);
11697 /* Get shift_imm. */
11698 shift_imm = bits (arm_insn_r->arm_insn, 7, 11);
11699 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
11700 regcache_raw_read_signed (reg_cache, reg_src1, &s_word);
11701 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11702 /* Offset_12 used as shift. */
11703 switch (offset_12)
11704 {
11705 case 0:
11706 /* Offset_12 used as index. */
11707 offset_12 = u_regval[0] << shift_imm;
11708 break;
11709
11710 case 1:
11711 offset_12 = (!shift_imm)?0:u_regval[0] >> shift_imm;
11712 break;
11713
11714 case 2:
11715 if (!shift_imm)
11716 {
11717 if (bit (u_regval[0], 31))
11718 {
11719 offset_12 = 0xFFFFFFFF;
11720 }
11721 else
11722 {
11723 offset_12 = 0;
11724 }
11725 }
11726 else
11727 {
11728 /* This is arithmetic shift. */
11729 offset_12 = s_word >> shift_imm;
11730 }
11731 break;
11732
11733 case 3:
11734 if (!shift_imm)
11735 {
11736 regcache_raw_read_unsigned (reg_cache, ARM_PS_REGNUM,
11737 &u_regval[1]);
11738 /* Get C flag value and shift it by 31. */
11739 offset_12 = (((bit (u_regval[1], 29)) << 31) \
11740 | (u_regval[0]) >> 1);
11741 }
11742 else
11743 {
11744 offset_12 = (u_regval[0] >> shift_imm) \
11745 | (u_regval[0] <<
11746 (sizeof(uint32_t) - shift_imm));
11747 }
11748 break;
11749
11750 default:
11751 gdb_assert_not_reached ("no decoding pattern found");
11752 break;
11753 }
11754
11755 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
11756 /* bit U set. */
11757 if (bit (arm_insn_r->arm_insn, 23))
11758 {
11759 tgt_mem_addr = u_regval[1] + offset_12;
11760 }
11761 else
11762 {
11763 tgt_mem_addr = u_regval[1] - offset_12;
11764 }
11765
11766 switch (arm_insn_r->opcode)
11767 {
11768 /* STR. */
11769 case 8:
11770 case 12:
11771 /* STR. */
11772 case 9:
11773 case 13:
11774 /* STRT. */
11775 case 1:
11776 case 5:
11777 /* STR. */
11778 case 0:
11779 case 4:
11780 record_buf_mem[0] = 4;
11781 break;
11782
11783 /* STRB. */
11784 case 10:
11785 case 14:
11786 /* STRB. */
11787 case 11:
11788 case 15:
11789 /* STRBT. */
11790 case 3:
11791 case 7:
11792 /* STRB. */
11793 case 2:
11794 case 6:
11795 record_buf_mem[0] = 1;
11796 break;
11797
11798 default:
11799 gdb_assert_not_reached ("no decoding pattern found");
11800 break;
11801 }
11802 record_buf_mem[1] = tgt_mem_addr;
11803 arm_insn_r->mem_rec_count = 1;
11804
11805 if (9 == arm_insn_r->opcode || 11 == arm_insn_r->opcode
11806 || 13 == arm_insn_r->opcode || 15 == arm_insn_r->opcode
11807 || 0 == arm_insn_r->opcode || 2 == arm_insn_r->opcode
11808 || 4 == arm_insn_r->opcode || 6 == arm_insn_r->opcode
11809 || 1 == arm_insn_r->opcode || 3 == arm_insn_r->opcode
11810 || 5 == arm_insn_r->opcode || 7 == arm_insn_r->opcode
11811 )
11812 {
11813 /* Rn is going to be changed in register scaled pre-indexed
11814 mode,and scaled post indexed mode. */
11815 record_buf[0] = reg_src2;
11816 arm_insn_r->reg_rec_count = 1;
11817 }
11818 }
11819 }
11820
11821 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11822 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11823 return 0;
11824 }
11825
11826 /* Handle ARM mode instructions with opcode 100. */
11827
11828 static int
11829 arm_record_ld_st_multiple (insn_decode_record *arm_insn_r)
11830 {
11831 struct regcache *reg_cache = arm_insn_r->regcache;
11832 uint32_t register_count = 0, register_bits;
11833 uint32_t reg_base, addr_mode;
11834 uint32_t record_buf[24], record_buf_mem[48];
11835 uint32_t wback;
11836 ULONGEST u_regval;
11837
11838 /* Fetch the list of registers. */
11839 register_bits = bits (arm_insn_r->arm_insn, 0, 15);
11840 arm_insn_r->reg_rec_count = 0;
11841
11842 /* Fetch the base register that contains the address we are loading data
11843 to. */
11844 reg_base = bits (arm_insn_r->arm_insn, 16, 19);
11845
11846 /* Calculate wback. */
11847 wback = (bit (arm_insn_r->arm_insn, 21) == 1);
11848
11849 if (bit (arm_insn_r->arm_insn, INSN_S_L_BIT_NUM))
11850 {
11851 /* LDM/LDMIA/LDMFD, LDMDA/LDMFA, LDMDB and LDMIB. */
11852
11853 /* Find out which registers are going to be loaded from memory. */
11854 while (register_bits)
11855 {
11856 if (register_bits & 0x00000001)
11857 record_buf[arm_insn_r->reg_rec_count++] = register_count;
11858 register_bits = register_bits >> 1;
11859 register_count++;
11860 }
11861
11862
11863 /* If wback is true, also save the base register, which is going to be
11864 written to. */
11865 if (wback)
11866 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11867
11868 /* Save the CPSR register. */
11869 record_buf[arm_insn_r->reg_rec_count++] = ARM_PS_REGNUM;
11870 }
11871 else
11872 {
11873 /* STM (STMIA, STMEA), STMDA (STMED), STMDB (STMFD) and STMIB (STMFA). */
11874
11875 addr_mode = bits (arm_insn_r->arm_insn, 23, 24);
11876
11877 regcache_raw_read_unsigned (reg_cache, reg_base, &u_regval);
11878
11879 /* Find out how many registers are going to be stored to memory. */
11880 while (register_bits)
11881 {
11882 if (register_bits & 0x00000001)
11883 register_count++;
11884 register_bits = register_bits >> 1;
11885 }
11886
11887 switch (addr_mode)
11888 {
11889 /* STMDA (STMED): Decrement after. */
11890 case 0:
11891 record_buf_mem[1] = (uint32_t) u_regval
11892 - register_count * INT_REGISTER_SIZE + 4;
11893 break;
11894 /* STM (STMIA, STMEA): Increment after. */
11895 case 1:
11896 record_buf_mem[1] = (uint32_t) u_regval;
11897 break;
11898 /* STMDB (STMFD): Decrement before. */
11899 case 2:
11900 record_buf_mem[1] = (uint32_t) u_regval
11901 - register_count * INT_REGISTER_SIZE;
11902 break;
11903 /* STMIB (STMFA): Increment before. */
11904 case 3:
11905 record_buf_mem[1] = (uint32_t) u_regval + INT_REGISTER_SIZE;
11906 break;
11907 default:
11908 gdb_assert_not_reached ("no decoding pattern found");
11909 break;
11910 }
11911
11912 record_buf_mem[0] = register_count * INT_REGISTER_SIZE;
11913 arm_insn_r->mem_rec_count = 1;
11914
11915 /* If wback is true, also save the base register, which is going to be
11916 written to. */
11917 if (wback)
11918 record_buf[arm_insn_r->reg_rec_count++] = reg_base;
11919 }
11920
11921 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11922 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
11923 return 0;
11924 }
11925
11926 /* Handling opcode 101 insns. */
11927
11928 static int
11929 arm_record_b_bl (insn_decode_record *arm_insn_r)
11930 {
11931 uint32_t record_buf[8];
11932
11933 /* Handle B, BL, BLX(1) insns. */
11934 /* B simply branches so we do nothing here. */
11935 /* Note: BLX(1) doesnt fall here but instead it falls into
11936 extension space. */
11937 if (bit (arm_insn_r->arm_insn, 24))
11938 {
11939 record_buf[0] = ARM_LR_REGNUM;
11940 arm_insn_r->reg_rec_count = 1;
11941 }
11942
11943 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
11944
11945 return 0;
11946 }
11947
11948 /* Handling opcode 110 insns. */
11949
11950 static int
11951 arm_record_unsupported_insn (insn_decode_record *arm_insn_r)
11952 {
11953 printf_unfiltered (_("Process record does not support instruction "
11954 "0x%0x at address %s.\n"),arm_insn_r->arm_insn,
11955 paddress (arm_insn_r->gdbarch, arm_insn_r->this_addr));
11956
11957 return -1;
11958 }
11959
11960 /* Record handler for vector data transfer instructions. */
11961
11962 static int
11963 arm_record_vdata_transfer_insn (insn_decode_record *arm_insn_r)
11964 {
11965 uint32_t bits_a, bit_c, bit_l, reg_t, reg_v;
11966 uint32_t record_buf[4];
11967
11968 const int num_regs = gdbarch_num_regs (arm_insn_r->gdbarch);
11969 reg_t = bits (arm_insn_r->arm_insn, 12, 15);
11970 reg_v = bits (arm_insn_r->arm_insn, 21, 23);
11971 bits_a = bits (arm_insn_r->arm_insn, 21, 23);
11972 bit_l = bit (arm_insn_r->arm_insn, 20);
11973 bit_c = bit (arm_insn_r->arm_insn, 8);
11974
11975 /* Handle VMOV instruction. */
11976 if (bit_l && bit_c)
11977 {
11978 record_buf[0] = reg_t;
11979 arm_insn_r->reg_rec_count = 1;
11980 }
11981 else if (bit_l && !bit_c)
11982 {
11983 /* Handle VMOV instruction. */
11984 if (bits_a == 0x00)
11985 {
11986 if (bit (arm_insn_r->arm_insn, 20))
11987 record_buf[0] = reg_t;
11988 else
11989 record_buf[0] = num_regs + (bit (arm_insn_r->arm_insn, 7) |
11990 (reg_v << 1));
11991
11992 arm_insn_r->reg_rec_count = 1;
11993 }
11994 /* Handle VMRS instruction. */
11995 else if (bits_a == 0x07)
11996 {
11997 if (reg_t == 15)
11998 reg_t = ARM_PS_REGNUM;
11999
12000 record_buf[0] = reg_t;
12001 arm_insn_r->reg_rec_count = 1;
12002 }
12003 }
12004 else if (!bit_l && !bit_c)
12005 {
12006 /* Handle VMOV instruction. */
12007 if (bits_a == 0x00)
12008 {
12009 if (bit (arm_insn_r->arm_insn, 20))
12010 record_buf[0] = reg_t;
12011 else
12012 record_buf[0] = num_regs + (bit (arm_insn_r->arm_insn, 7) |
12013 (reg_v << 1));
12014
12015 arm_insn_r->reg_rec_count = 1;
12016 }
12017 /* Handle VMSR instruction. */
12018 else if (bits_a == 0x07)
12019 {
12020 record_buf[0] = ARM_FPSCR_REGNUM;
12021 arm_insn_r->reg_rec_count = 1;
12022 }
12023 }
12024 else if (!bit_l && bit_c)
12025 {
12026 /* Handle VMOV instruction. */
12027 if (!(bits_a & 0x04))
12028 {
12029 record_buf[0] = (reg_v | (bit (arm_insn_r->arm_insn, 7) << 4))
12030 + ARM_D0_REGNUM;
12031 arm_insn_r->reg_rec_count = 1;
12032 }
12033 /* Handle VDUP instruction. */
12034 else
12035 {
12036 if (bit (arm_insn_r->arm_insn, 21))
12037 {
12038 reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
12039 record_buf[0] = reg_v + ARM_D0_REGNUM;
12040 record_buf[1] = reg_v + ARM_D0_REGNUM + 1;
12041 arm_insn_r->reg_rec_count = 2;
12042 }
12043 else
12044 {
12045 reg_v = reg_v | (bit (arm_insn_r->arm_insn, 7) << 4);
12046 record_buf[0] = reg_v + ARM_D0_REGNUM;
12047 arm_insn_r->reg_rec_count = 1;
12048 }
12049 }
12050 }
12051
12052 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
12053 return 0;
12054 }
12055
12056 /* Record handler for extension register load/store instructions. */
12057
12058 static int
12059 arm_record_exreg_ld_st_insn (insn_decode_record *arm_insn_r)
12060 {
12061 uint32_t opcode, single_reg;
12062 uint8_t op_vldm_vstm;
12063 uint32_t record_buf[8], record_buf_mem[128];
12064 ULONGEST u_regval = 0;
12065
12066 struct regcache *reg_cache = arm_insn_r->regcache;
12067 const int num_regs = gdbarch_num_regs (arm_insn_r->gdbarch);
12068
12069 opcode = bits (arm_insn_r->arm_insn, 20, 24);
12070 single_reg = bit (arm_insn_r->arm_insn, 8);
12071 op_vldm_vstm = opcode & 0x1b;
12072
12073 /* Handle VMOV instructions. */
12074 if ((opcode & 0x1e) == 0x04)
12075 {
12076 if (bit (arm_insn_r->arm_insn, 4))
12077 {
12078 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
12079 record_buf[1] = bits (arm_insn_r->arm_insn, 16, 19);
12080 arm_insn_r->reg_rec_count = 2;
12081 }
12082 else
12083 {
12084 uint8_t reg_m = (bits (arm_insn_r->arm_insn, 0, 3) << 1)
12085 | bit (arm_insn_r->arm_insn, 5);
12086
12087 if (!single_reg)
12088 {
12089 record_buf[0] = num_regs + reg_m;
12090 record_buf[1] = num_regs + reg_m + 1;
12091 arm_insn_r->reg_rec_count = 2;
12092 }
12093 else
12094 {
12095 record_buf[0] = reg_m + ARM_D0_REGNUM;
12096 arm_insn_r->reg_rec_count = 1;
12097 }
12098 }
12099 }
12100 /* Handle VSTM and VPUSH instructions. */
12101 else if (op_vldm_vstm == 0x08 || op_vldm_vstm == 0x0a
12102 || op_vldm_vstm == 0x12)
12103 {
12104 uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
12105 uint32_t memory_index = 0;
12106
12107 reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
12108 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12109 imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
12110 imm_off32 = imm_off8 << 24;
12111 memory_count = imm_off8;
12112
12113 if (bit (arm_insn_r->arm_insn, 23))
12114 start_address = u_regval;
12115 else
12116 start_address = u_regval - imm_off32;
12117
12118 if (bit (arm_insn_r->arm_insn, 21))
12119 {
12120 record_buf[0] = reg_rn;
12121 arm_insn_r->reg_rec_count = 1;
12122 }
12123
12124 while (memory_count > 0)
12125 {
12126 if (!single_reg)
12127 {
12128 record_buf_mem[memory_index] = start_address;
12129 record_buf_mem[memory_index + 1] = 4;
12130 start_address = start_address + 4;
12131 memory_index = memory_index + 2;
12132 }
12133 else
12134 {
12135 record_buf_mem[memory_index] = start_address;
12136 record_buf_mem[memory_index + 1] = 4;
12137 record_buf_mem[memory_index + 2] = start_address + 4;
12138 record_buf_mem[memory_index + 3] = 4;
12139 start_address = start_address + 8;
12140 memory_index = memory_index + 4;
12141 }
12142 memory_count--;
12143 }
12144 arm_insn_r->mem_rec_count = (memory_index >> 1);
12145 }
12146 /* Handle VLDM instructions. */
12147 else if (op_vldm_vstm == 0x09 || op_vldm_vstm == 0x0b
12148 || op_vldm_vstm == 0x13)
12149 {
12150 uint32_t reg_count, reg_vd;
12151 uint32_t reg_index = 0;
12152
12153 reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
12154 reg_count = bits (arm_insn_r->arm_insn, 0, 7);
12155
12156 if (single_reg)
12157 reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
12158 else
12159 reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
12160
12161 if (bit (arm_insn_r->arm_insn, 21))
12162 record_buf[reg_index++] = bits (arm_insn_r->arm_insn, 16, 19);
12163
12164 while (reg_count > 0)
12165 {
12166 if (single_reg)
12167 record_buf[reg_index++] = num_regs + reg_vd + reg_count - 1;
12168 else
12169 record_buf[reg_index++] = ARM_D0_REGNUM + reg_vd + reg_count - 1;
12170
12171 reg_count--;
12172 }
12173 arm_insn_r->reg_rec_count = reg_index;
12174 }
12175 /* VSTR Vector store register. */
12176 else if ((opcode & 0x13) == 0x10)
12177 {
12178 uint32_t start_address, reg_rn, imm_off32, imm_off8, memory_count;
12179 uint32_t memory_index = 0;
12180
12181 reg_rn = bits (arm_insn_r->arm_insn, 16, 19);
12182 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
12183 imm_off8 = bits (arm_insn_r->arm_insn, 0, 7);
12184 imm_off32 = imm_off8 << 24;
12185 memory_count = imm_off8;
12186
12187 if (bit (arm_insn_r->arm_insn, 23))
12188 start_address = u_regval + imm_off32;
12189 else
12190 start_address = u_regval - imm_off32;
12191
12192 if (single_reg)
12193 {
12194 record_buf_mem[memory_index] = start_address;
12195 record_buf_mem[memory_index + 1] = 4;
12196 arm_insn_r->mem_rec_count = 1;
12197 }
12198 else
12199 {
12200 record_buf_mem[memory_index] = start_address;
12201 record_buf_mem[memory_index + 1] = 4;
12202 record_buf_mem[memory_index + 2] = start_address + 4;
12203 record_buf_mem[memory_index + 3] = 4;
12204 arm_insn_r->mem_rec_count = 2;
12205 }
12206 }
12207 /* VLDR Vector load register. */
12208 else if ((opcode & 0x13) == 0x11)
12209 {
12210 uint32_t reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
12211
12212 if (!single_reg)
12213 {
12214 reg_vd = reg_vd | (bit (arm_insn_r->arm_insn, 22) << 4);
12215 record_buf[0] = ARM_D0_REGNUM + reg_vd;
12216 }
12217 else
12218 {
12219 reg_vd = (reg_vd << 1) | bit (arm_insn_r->arm_insn, 22);
12220 record_buf[0] = num_regs + reg_vd;
12221 }
12222 arm_insn_r->reg_rec_count = 1;
12223 }
12224
12225 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
12226 MEM_ALLOC (arm_insn_r->arm_mems, arm_insn_r->mem_rec_count, record_buf_mem);
12227 return 0;
12228 }
12229
12230 /* Record handler for arm/thumb mode VFP data processing instructions. */
12231
12232 static int
12233 arm_record_vfp_data_proc_insn (insn_decode_record *arm_insn_r)
12234 {
12235 uint32_t opc1, opc2, opc3, dp_op_sz, bit_d, reg_vd;
12236 uint32_t record_buf[4];
12237 enum insn_types {INSN_T0, INSN_T1, INSN_T2, INSN_T3, INSN_INV};
12238 enum insn_types curr_insn_type = INSN_INV;
12239
12240 reg_vd = bits (arm_insn_r->arm_insn, 12, 15);
12241 opc1 = bits (arm_insn_r->arm_insn, 20, 23);
12242 opc2 = bits (arm_insn_r->arm_insn, 16, 19);
12243 opc3 = bits (arm_insn_r->arm_insn, 6, 7);
12244 dp_op_sz = bit (arm_insn_r->arm_insn, 8);
12245 bit_d = bit (arm_insn_r->arm_insn, 22);
12246 opc1 = opc1 & 0x04;
12247
12248 /* Handle VMLA, VMLS. */
12249 if (opc1 == 0x00)
12250 {
12251 if (bit (arm_insn_r->arm_insn, 10))
12252 {
12253 if (bit (arm_insn_r->arm_insn, 6))
12254 curr_insn_type = INSN_T0;
12255 else
12256 curr_insn_type = INSN_T1;
12257 }
12258 else
12259 {
12260 if (dp_op_sz)
12261 curr_insn_type = INSN_T1;
12262 else
12263 curr_insn_type = INSN_T2;
12264 }
12265 }
12266 /* Handle VNMLA, VNMLS, VNMUL. */
12267 else if (opc1 == 0x01)
12268 {
12269 if (dp_op_sz)
12270 curr_insn_type = INSN_T1;
12271 else
12272 curr_insn_type = INSN_T2;
12273 }
12274 /* Handle VMUL. */
12275 else if (opc1 == 0x02 && !(opc3 & 0x01))
12276 {
12277 if (bit (arm_insn_r->arm_insn, 10))
12278 {
12279 if (bit (arm_insn_r->arm_insn, 6))
12280 curr_insn_type = INSN_T0;
12281 else
12282 curr_insn_type = INSN_T1;
12283 }
12284 else
12285 {
12286 if (dp_op_sz)
12287 curr_insn_type = INSN_T1;
12288 else
12289 curr_insn_type = INSN_T2;
12290 }
12291 }
12292 /* Handle VADD, VSUB. */
12293 else if (opc1 == 0x03)
12294 {
12295 if (!bit (arm_insn_r->arm_insn, 9))
12296 {
12297 if (bit (arm_insn_r->arm_insn, 6))
12298 curr_insn_type = INSN_T0;
12299 else
12300 curr_insn_type = INSN_T1;
12301 }
12302 else
12303 {
12304 if (dp_op_sz)
12305 curr_insn_type = INSN_T1;
12306 else
12307 curr_insn_type = INSN_T2;
12308 }
12309 }
12310 /* Handle VDIV. */
12311 else if (opc1 == 0x0b)
12312 {
12313 if (dp_op_sz)
12314 curr_insn_type = INSN_T1;
12315 else
12316 curr_insn_type = INSN_T2;
12317 }
12318 /* Handle all other vfp data processing instructions. */
12319 else if (opc1 == 0x0b)
12320 {
12321 /* Handle VMOV. */
12322 if (!(opc3 & 0x01) || (opc2 == 0x00 && opc3 == 0x01))
12323 {
12324 if (bit (arm_insn_r->arm_insn, 4))
12325 {
12326 if (bit (arm_insn_r->arm_insn, 6))
12327 curr_insn_type = INSN_T0;
12328 else
12329 curr_insn_type = INSN_T1;
12330 }
12331 else
12332 {
12333 if (dp_op_sz)
12334 curr_insn_type = INSN_T1;
12335 else
12336 curr_insn_type = INSN_T2;
12337 }
12338 }
12339 /* Handle VNEG and VABS. */
12340 else if ((opc2 == 0x01 && opc3 == 0x01)
12341 || (opc2 == 0x00 && opc3 == 0x03))
12342 {
12343 if (!bit (arm_insn_r->arm_insn, 11))
12344 {
12345 if (bit (arm_insn_r->arm_insn, 6))
12346 curr_insn_type = INSN_T0;
12347 else
12348 curr_insn_type = INSN_T1;
12349 }
12350 else
12351 {
12352 if (dp_op_sz)
12353 curr_insn_type = INSN_T1;
12354 else
12355 curr_insn_type = INSN_T2;
12356 }
12357 }
12358 /* Handle VSQRT. */
12359 else if (opc2 == 0x01 && opc3 == 0x03)
12360 {
12361 if (dp_op_sz)
12362 curr_insn_type = INSN_T1;
12363 else
12364 curr_insn_type = INSN_T2;
12365 }
12366 /* Handle VCVT. */
12367 else if (opc2 == 0x07 && opc3 == 0x03)
12368 {
12369 if (!dp_op_sz)
12370 curr_insn_type = INSN_T1;
12371 else
12372 curr_insn_type = INSN_T2;
12373 }
12374 else if (opc3 & 0x01)
12375 {
12376 /* Handle VCVT. */
12377 if ((opc2 == 0x08) || (opc2 & 0x0e) == 0x0c)
12378 {
12379 if (!bit (arm_insn_r->arm_insn, 18))
12380 curr_insn_type = INSN_T2;
12381 else
12382 {
12383 if (dp_op_sz)
12384 curr_insn_type = INSN_T1;
12385 else
12386 curr_insn_type = INSN_T2;
12387 }
12388 }
12389 /* Handle VCVT. */
12390 else if ((opc2 & 0x0e) == 0x0a || (opc2 & 0x0e) == 0x0e)
12391 {
12392 if (dp_op_sz)
12393 curr_insn_type = INSN_T1;
12394 else
12395 curr_insn_type = INSN_T2;
12396 }
12397 /* Handle VCVTB, VCVTT. */
12398 else if ((opc2 & 0x0e) == 0x02)
12399 curr_insn_type = INSN_T2;
12400 /* Handle VCMP, VCMPE. */
12401 else if ((opc2 & 0x0e) == 0x04)
12402 curr_insn_type = INSN_T3;
12403 }
12404 }
12405
12406 switch (curr_insn_type)
12407 {
12408 case INSN_T0:
12409 reg_vd = reg_vd | (bit_d << 4);
12410 record_buf[0] = reg_vd + ARM_D0_REGNUM;
12411 record_buf[1] = reg_vd + ARM_D0_REGNUM + 1;
12412 arm_insn_r->reg_rec_count = 2;
12413 break;
12414
12415 case INSN_T1:
12416 reg_vd = reg_vd | (bit_d << 4);
12417 record_buf[0] = reg_vd + ARM_D0_REGNUM;
12418 arm_insn_r->reg_rec_count = 1;
12419 break;
12420
12421 case INSN_T2:
12422 reg_vd = (reg_vd << 1) | bit_d;
12423 record_buf[0] = reg_vd + ARM_D0_REGNUM;
12424 arm_insn_r->reg_rec_count = 1;
12425 break;
12426
12427 case INSN_T3:
12428 record_buf[0] = ARM_FPSCR_REGNUM;
12429 arm_insn_r->reg_rec_count = 1;
12430 break;
12431
12432 default:
12433 gdb_assert_not_reached ("no decoding pattern found");
12434 break;
12435 }
12436
12437 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, record_buf);
12438 return 0;
12439 }
12440
12441 /* Handling opcode 110 insns. */
12442
12443 static int
12444 arm_record_asimd_vfp_coproc (insn_decode_record *arm_insn_r)
12445 {
12446 uint32_t op, op1, op1_sbit, op1_ebit, coproc;
12447
12448 coproc = bits (arm_insn_r->arm_insn, 8, 11);
12449 op1 = bits (arm_insn_r->arm_insn, 20, 25);
12450 op1_ebit = bit (arm_insn_r->arm_insn, 20);
12451
12452 if ((coproc & 0x0e) == 0x0a)
12453 {
12454 /* Handle extension register ld/st instructions. */
12455 if (!(op1 & 0x20))
12456 return arm_record_exreg_ld_st_insn (arm_insn_r);
12457
12458 /* 64-bit transfers between arm core and extension registers. */
12459 if ((op1 & 0x3e) == 0x04)
12460 return arm_record_exreg_ld_st_insn (arm_insn_r);
12461 }
12462 else
12463 {
12464 /* Handle coprocessor ld/st instructions. */
12465 if (!(op1 & 0x3a))
12466 {
12467 /* Store. */
12468 if (!op1_ebit)
12469 return arm_record_unsupported_insn (arm_insn_r);
12470 else
12471 /* Load. */
12472 return arm_record_unsupported_insn (arm_insn_r);
12473 }
12474
12475 /* Move to coprocessor from two arm core registers. */
12476 if (op1 == 0x4)
12477 return arm_record_unsupported_insn (arm_insn_r);
12478
12479 /* Move to two arm core registers from coprocessor. */
12480 if (op1 == 0x5)
12481 {
12482 uint32_t reg_t[2];
12483
12484 reg_t[0] = bits (arm_insn_r->arm_insn, 12, 15);
12485 reg_t[1] = bits (arm_insn_r->arm_insn, 16, 19);
12486 arm_insn_r->reg_rec_count = 2;
12487
12488 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count, reg_t);
12489 return 0;
12490 }
12491 }
12492 return arm_record_unsupported_insn (arm_insn_r);
12493 }
12494
12495 /* Handling opcode 111 insns. */
12496
12497 static int
12498 arm_record_coproc_data_proc (insn_decode_record *arm_insn_r)
12499 {
12500 uint32_t op, op1_sbit, op1_ebit, coproc;
12501 struct gdbarch_tdep *tdep = gdbarch_tdep (arm_insn_r->gdbarch);
12502 struct regcache *reg_cache = arm_insn_r->regcache;
12503 ULONGEST u_regval = 0;
12504
12505 arm_insn_r->opcode = bits (arm_insn_r->arm_insn, 24, 27);
12506 coproc = bits (arm_insn_r->arm_insn, 8, 11);
12507 op1_sbit = bit (arm_insn_r->arm_insn, 24);
12508 op1_ebit = bit (arm_insn_r->arm_insn, 20);
12509 op = bit (arm_insn_r->arm_insn, 4);
12510
12511 /* Handle arm SWI/SVC system call instructions. */
12512 if (op1_sbit)
12513 {
12514 if (tdep->arm_syscall_record != NULL)
12515 {
12516 ULONGEST svc_operand, svc_number;
12517
12518 svc_operand = (0x00ffffff & arm_insn_r->arm_insn);
12519
12520 if (svc_operand) /* OABI. */
12521 svc_number = svc_operand - 0x900000;
12522 else /* EABI. */
12523 regcache_raw_read_unsigned (reg_cache, 7, &svc_number);
12524
12525 return tdep->arm_syscall_record (reg_cache, svc_number);
12526 }
12527 else
12528 {
12529 printf_unfiltered (_("no syscall record support\n"));
12530 return -1;
12531 }
12532 }
12533
12534 if ((coproc & 0x0e) == 0x0a)
12535 {
12536 /* VFP data-processing instructions. */
12537 if (!op1_sbit && !op)
12538 return arm_record_vfp_data_proc_insn (arm_insn_r);
12539
12540 /* Advanced SIMD, VFP instructions. */
12541 if (!op1_sbit && op)
12542 return arm_record_vdata_transfer_insn (arm_insn_r);
12543 }
12544 else
12545 {
12546 /* Coprocessor data operations. */
12547 if (!op1_sbit && !op)
12548 return arm_record_unsupported_insn (arm_insn_r);
12549
12550 /* Move to Coprocessor from ARM core register. */
12551 if (!op1_sbit && !op1_ebit && op)
12552 return arm_record_unsupported_insn (arm_insn_r);
12553
12554 /* Move to arm core register from coprocessor. */
12555 if (!op1_sbit && op1_ebit && op)
12556 {
12557 uint32_t record_buf[1];
12558
12559 record_buf[0] = bits (arm_insn_r->arm_insn, 12, 15);
12560 if (record_buf[0] == 15)
12561 record_buf[0] = ARM_PS_REGNUM;
12562
12563 arm_insn_r->reg_rec_count = 1;
12564 REG_ALLOC (arm_insn_r->arm_regs, arm_insn_r->reg_rec_count,
12565 record_buf);
12566 return 0;
12567 }
12568 }
12569
12570 return arm_record_unsupported_insn (arm_insn_r);
12571 }
12572
12573 /* Handling opcode 000 insns. */
12574
12575 static int
12576 thumb_record_shift_add_sub (insn_decode_record *thumb_insn_r)
12577 {
12578 uint32_t record_buf[8];
12579 uint32_t reg_src1 = 0;
12580
12581 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12582
12583 record_buf[0] = ARM_PS_REGNUM;
12584 record_buf[1] = reg_src1;
12585 thumb_insn_r->reg_rec_count = 2;
12586
12587 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12588
12589 return 0;
12590 }
12591
12592
12593 /* Handling opcode 001 insns. */
12594
12595 static int
12596 thumb_record_add_sub_cmp_mov (insn_decode_record *thumb_insn_r)
12597 {
12598 uint32_t record_buf[8];
12599 uint32_t reg_src1 = 0;
12600
12601 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12602
12603 record_buf[0] = ARM_PS_REGNUM;
12604 record_buf[1] = reg_src1;
12605 thumb_insn_r->reg_rec_count = 2;
12606
12607 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12608
12609 return 0;
12610 }
12611
12612 /* Handling opcode 010 insns. */
12613
12614 static int
12615 thumb_record_ld_st_reg_offset (insn_decode_record *thumb_insn_r)
12616 {
12617 struct regcache *reg_cache = thumb_insn_r->regcache;
12618 uint32_t record_buf[8], record_buf_mem[8];
12619
12620 uint32_t reg_src1 = 0, reg_src2 = 0;
12621 uint32_t opcode1 = 0, opcode2 = 0, opcode3 = 0;
12622
12623 ULONGEST u_regval[2] = {0};
12624
12625 opcode1 = bits (thumb_insn_r->arm_insn, 10, 12);
12626
12627 if (bit (thumb_insn_r->arm_insn, 12))
12628 {
12629 /* Handle load/store register offset. */
12630 opcode2 = bits (thumb_insn_r->arm_insn, 9, 10);
12631 if (opcode2 >= 12 && opcode2 <= 15)
12632 {
12633 /* LDR(2), LDRB(2) , LDRH(2), LDRSB, LDRSH. */
12634 reg_src1 = bits (thumb_insn_r->arm_insn,0, 2);
12635 record_buf[0] = reg_src1;
12636 thumb_insn_r->reg_rec_count = 1;
12637 }
12638 else if (opcode2 >= 8 && opcode2 <= 10)
12639 {
12640 /* STR(2), STRB(2), STRH(2) . */
12641 reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12642 reg_src2 = bits (thumb_insn_r->arm_insn, 6, 8);
12643 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval[0]);
12644 regcache_raw_read_unsigned (reg_cache, reg_src2, &u_regval[1]);
12645 if (8 == opcode2)
12646 record_buf_mem[0] = 4; /* STR (2). */
12647 else if (10 == opcode2)
12648 record_buf_mem[0] = 1; /* STRB (2). */
12649 else if (9 == opcode2)
12650 record_buf_mem[0] = 2; /* STRH (2). */
12651 record_buf_mem[1] = u_regval[0] + u_regval[1];
12652 thumb_insn_r->mem_rec_count = 1;
12653 }
12654 }
12655 else if (bit (thumb_insn_r->arm_insn, 11))
12656 {
12657 /* Handle load from literal pool. */
12658 /* LDR(3). */
12659 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12660 record_buf[0] = reg_src1;
12661 thumb_insn_r->reg_rec_count = 1;
12662 }
12663 else if (opcode1)
12664 {
12665 opcode2 = bits (thumb_insn_r->arm_insn, 8, 9);
12666 opcode3 = bits (thumb_insn_r->arm_insn, 0, 2);
12667 if ((3 == opcode2) && (!opcode3))
12668 {
12669 /* Branch with exchange. */
12670 record_buf[0] = ARM_PS_REGNUM;
12671 thumb_insn_r->reg_rec_count = 1;
12672 }
12673 else
12674 {
12675 /* Format 8; special data processing insns. */
12676 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12677 record_buf[0] = ARM_PS_REGNUM;
12678 record_buf[1] = reg_src1;
12679 thumb_insn_r->reg_rec_count = 2;
12680 }
12681 }
12682 else
12683 {
12684 /* Format 5; data processing insns. */
12685 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12686 if (bit (thumb_insn_r->arm_insn, 7))
12687 {
12688 reg_src1 = reg_src1 + 8;
12689 }
12690 record_buf[0] = ARM_PS_REGNUM;
12691 record_buf[1] = reg_src1;
12692 thumb_insn_r->reg_rec_count = 2;
12693 }
12694
12695 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12696 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12697 record_buf_mem);
12698
12699 return 0;
12700 }
12701
12702 /* Handling opcode 001 insns. */
12703
12704 static int
12705 thumb_record_ld_st_imm_offset (insn_decode_record *thumb_insn_r)
12706 {
12707 struct regcache *reg_cache = thumb_insn_r->regcache;
12708 uint32_t record_buf[8], record_buf_mem[8];
12709
12710 uint32_t reg_src1 = 0;
12711 uint32_t opcode = 0, immed_5 = 0;
12712
12713 ULONGEST u_regval = 0;
12714
12715 opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12716
12717 if (opcode)
12718 {
12719 /* LDR(1). */
12720 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12721 record_buf[0] = reg_src1;
12722 thumb_insn_r->reg_rec_count = 1;
12723 }
12724 else
12725 {
12726 /* STR(1). */
12727 reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12728 immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12729 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12730 record_buf_mem[0] = 4;
12731 record_buf_mem[1] = u_regval + (immed_5 * 4);
12732 thumb_insn_r->mem_rec_count = 1;
12733 }
12734
12735 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12736 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12737 record_buf_mem);
12738
12739 return 0;
12740 }
12741
12742 /* Handling opcode 100 insns. */
12743
12744 static int
12745 thumb_record_ld_st_stack (insn_decode_record *thumb_insn_r)
12746 {
12747 struct regcache *reg_cache = thumb_insn_r->regcache;
12748 uint32_t record_buf[8], record_buf_mem[8];
12749
12750 uint32_t reg_src1 = 0;
12751 uint32_t opcode = 0, immed_8 = 0, immed_5 = 0;
12752
12753 ULONGEST u_regval = 0;
12754
12755 opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12756
12757 if (3 == opcode)
12758 {
12759 /* LDR(4). */
12760 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12761 record_buf[0] = reg_src1;
12762 thumb_insn_r->reg_rec_count = 1;
12763 }
12764 else if (1 == opcode)
12765 {
12766 /* LDRH(1). */
12767 reg_src1 = bits (thumb_insn_r->arm_insn, 0, 2);
12768 record_buf[0] = reg_src1;
12769 thumb_insn_r->reg_rec_count = 1;
12770 }
12771 else if (2 == opcode)
12772 {
12773 /* STR(3). */
12774 immed_8 = bits (thumb_insn_r->arm_insn, 0, 7);
12775 regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12776 record_buf_mem[0] = 4;
12777 record_buf_mem[1] = u_regval + (immed_8 * 4);
12778 thumb_insn_r->mem_rec_count = 1;
12779 }
12780 else if (0 == opcode)
12781 {
12782 /* STRH(1). */
12783 immed_5 = bits (thumb_insn_r->arm_insn, 6, 10);
12784 reg_src1 = bits (thumb_insn_r->arm_insn, 3, 5);
12785 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12786 record_buf_mem[0] = 2;
12787 record_buf_mem[1] = u_regval + (immed_5 * 2);
12788 thumb_insn_r->mem_rec_count = 1;
12789 }
12790
12791 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12792 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12793 record_buf_mem);
12794
12795 return 0;
12796 }
12797
12798 /* Handling opcode 101 insns. */
12799
12800 static int
12801 thumb_record_misc (insn_decode_record *thumb_insn_r)
12802 {
12803 struct regcache *reg_cache = thumb_insn_r->regcache;
12804
12805 uint32_t opcode = 0, opcode1 = 0, opcode2 = 0;
12806 uint32_t register_bits = 0, register_count = 0;
12807 uint32_t register_list[8] = {0}, index = 0, start_address = 0;
12808 uint32_t record_buf[24], record_buf_mem[48];
12809 uint32_t reg_src1;
12810
12811 ULONGEST u_regval = 0;
12812
12813 opcode = bits (thumb_insn_r->arm_insn, 11, 12);
12814 opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12815 opcode2 = bits (thumb_insn_r->arm_insn, 9, 12);
12816
12817 if (14 == opcode2)
12818 {
12819 /* POP. */
12820 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12821 while (register_bits)
12822 {
12823 if (register_bits & 0x00000001)
12824 record_buf[index++] = register_count;
12825 register_bits = register_bits >> 1;
12826 register_count++;
12827 }
12828 record_buf[index++] = ARM_PS_REGNUM;
12829 record_buf[index++] = ARM_SP_REGNUM;
12830 thumb_insn_r->reg_rec_count = index;
12831 }
12832 else if (10 == opcode2)
12833 {
12834 /* PUSH. */
12835 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12836 regcache_raw_read_unsigned (reg_cache, ARM_SP_REGNUM, &u_regval);
12837 while (register_bits)
12838 {
12839 if (register_bits & 0x00000001)
12840 register_count++;
12841 register_bits = register_bits >> 1;
12842 }
12843 start_address = u_regval - \
12844 (4 * (bit (thumb_insn_r->arm_insn, 8) + register_count));
12845 thumb_insn_r->mem_rec_count = register_count;
12846 while (register_count)
12847 {
12848 record_buf_mem[(register_count * 2) - 1] = start_address;
12849 record_buf_mem[(register_count * 2) - 2] = 4;
12850 start_address = start_address + 4;
12851 register_count--;
12852 }
12853 record_buf[0] = ARM_SP_REGNUM;
12854 thumb_insn_r->reg_rec_count = 1;
12855 }
12856 else if (0x1E == opcode1)
12857 {
12858 /* BKPT insn. */
12859 /* Handle enhanced software breakpoint insn, BKPT. */
12860 /* CPSR is changed to be executed in ARM state, disabling normal
12861 interrupts, entering abort mode. */
12862 /* According to high vector configuration PC is set. */
12863 /* User hits breakpoint and type reverse, in that case, we need to go back with
12864 previous CPSR and Program Counter. */
12865 record_buf[0] = ARM_PS_REGNUM;
12866 record_buf[1] = ARM_LR_REGNUM;
12867 thumb_insn_r->reg_rec_count = 2;
12868 /* We need to save SPSR value, which is not yet done. */
12869 printf_unfiltered (_("Process record does not support instruction "
12870 "0x%0x at address %s.\n"),
12871 thumb_insn_r->arm_insn,
12872 paddress (thumb_insn_r->gdbarch,
12873 thumb_insn_r->this_addr));
12874 return -1;
12875 }
12876 else if ((0 == opcode) || (1 == opcode))
12877 {
12878 /* ADD(5), ADD(6). */
12879 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12880 record_buf[0] = reg_src1;
12881 thumb_insn_r->reg_rec_count = 1;
12882 }
12883 else if (2 == opcode)
12884 {
12885 /* ADD(7), SUB(4). */
12886 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12887 record_buf[0] = ARM_SP_REGNUM;
12888 thumb_insn_r->reg_rec_count = 1;
12889 }
12890
12891 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12892 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12893 record_buf_mem);
12894
12895 return 0;
12896 }
12897
12898 /* Handling opcode 110 insns. */
12899
12900 static int
12901 thumb_record_ldm_stm_swi (insn_decode_record *thumb_insn_r)
12902 {
12903 struct gdbarch_tdep *tdep = gdbarch_tdep (thumb_insn_r->gdbarch);
12904 struct regcache *reg_cache = thumb_insn_r->regcache;
12905
12906 uint32_t ret = 0; /* function return value: -1:record failure ; 0:success */
12907 uint32_t reg_src1 = 0;
12908 uint32_t opcode1 = 0, opcode2 = 0, register_bits = 0, register_count = 0;
12909 uint32_t register_list[8] = {0}, index = 0, start_address = 0;
12910 uint32_t record_buf[24], record_buf_mem[48];
12911
12912 ULONGEST u_regval = 0;
12913
12914 opcode1 = bits (thumb_insn_r->arm_insn, 8, 12);
12915 opcode2 = bits (thumb_insn_r->arm_insn, 11, 12);
12916
12917 if (1 == opcode2)
12918 {
12919
12920 /* LDMIA. */
12921 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12922 /* Get Rn. */
12923 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12924 while (register_bits)
12925 {
12926 if (register_bits & 0x00000001)
12927 record_buf[index++] = register_count;
12928 register_bits = register_bits >> 1;
12929 register_count++;
12930 }
12931 record_buf[index++] = reg_src1;
12932 thumb_insn_r->reg_rec_count = index;
12933 }
12934 else if (0 == opcode2)
12935 {
12936 /* It handles both STMIA. */
12937 register_bits = bits (thumb_insn_r->arm_insn, 0, 7);
12938 /* Get Rn. */
12939 reg_src1 = bits (thumb_insn_r->arm_insn, 8, 10);
12940 regcache_raw_read_unsigned (reg_cache, reg_src1, &u_regval);
12941 while (register_bits)
12942 {
12943 if (register_bits & 0x00000001)
12944 register_count++;
12945 register_bits = register_bits >> 1;
12946 }
12947 start_address = u_regval;
12948 thumb_insn_r->mem_rec_count = register_count;
12949 while (register_count)
12950 {
12951 record_buf_mem[(register_count * 2) - 1] = start_address;
12952 record_buf_mem[(register_count * 2) - 2] = 4;
12953 start_address = start_address + 4;
12954 register_count--;
12955 }
12956 }
12957 else if (0x1F == opcode1)
12958 {
12959 /* Handle arm syscall insn. */
12960 if (tdep->arm_syscall_record != NULL)
12961 {
12962 regcache_raw_read_unsigned (reg_cache, 7, &u_regval);
12963 ret = tdep->arm_syscall_record (reg_cache, u_regval);
12964 }
12965 else
12966 {
12967 printf_unfiltered (_("no syscall record support\n"));
12968 return -1;
12969 }
12970 }
12971
12972 /* B (1), conditional branch is automatically taken care in process_record,
12973 as PC is saved there. */
12974
12975 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
12976 MEM_ALLOC (thumb_insn_r->arm_mems, thumb_insn_r->mem_rec_count,
12977 record_buf_mem);
12978
12979 return ret;
12980 }
12981
12982 /* Handling opcode 111 insns. */
12983
12984 static int
12985 thumb_record_branch (insn_decode_record *thumb_insn_r)
12986 {
12987 uint32_t record_buf[8];
12988 uint32_t bits_h = 0;
12989
12990 bits_h = bits (thumb_insn_r->arm_insn, 11, 12);
12991
12992 if (2 == bits_h || 3 == bits_h)
12993 {
12994 /* BL */
12995 record_buf[0] = ARM_LR_REGNUM;
12996 thumb_insn_r->reg_rec_count = 1;
12997 }
12998 else if (1 == bits_h)
12999 {
13000 /* BLX(1). */
13001 record_buf[0] = ARM_PS_REGNUM;
13002 record_buf[1] = ARM_LR_REGNUM;
13003 thumb_insn_r->reg_rec_count = 2;
13004 }
13005
13006 /* B(2) is automatically taken care in process_record, as PC is
13007 saved there. */
13008
13009 REG_ALLOC (thumb_insn_r->arm_regs, thumb_insn_r->reg_rec_count, record_buf);
13010
13011 return 0;
13012 }
13013
13014 /* Handler for thumb2 load/store multiple instructions. */
13015
13016 static int
13017 thumb2_record_ld_st_multiple (insn_decode_record *thumb2_insn_r)
13018 {
13019 struct regcache *reg_cache = thumb2_insn_r->regcache;
13020
13021 uint32_t reg_rn, op;
13022 uint32_t register_bits = 0, register_count = 0;
13023 uint32_t index = 0, start_address = 0;
13024 uint32_t record_buf[24], record_buf_mem[48];
13025
13026 ULONGEST u_regval = 0;
13027
13028 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
13029 op = bits (thumb2_insn_r->arm_insn, 23, 24);
13030
13031 if (0 == op || 3 == op)
13032 {
13033 if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
13034 {
13035 /* Handle RFE instruction. */
13036 record_buf[0] = ARM_PS_REGNUM;
13037 thumb2_insn_r->reg_rec_count = 1;
13038 }
13039 else
13040 {
13041 /* Handle SRS instruction after reading banked SP. */
13042 return arm_record_unsupported_insn (thumb2_insn_r);
13043 }
13044 }
13045 else if (1 == op || 2 == op)
13046 {
13047 if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
13048 {
13049 /* Handle LDM/LDMIA/LDMFD and LDMDB/LDMEA instructions. */
13050 register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
13051 while (register_bits)
13052 {
13053 if (register_bits & 0x00000001)
13054 record_buf[index++] = register_count;
13055
13056 register_count++;
13057 register_bits = register_bits >> 1;
13058 }
13059 record_buf[index++] = reg_rn;
13060 record_buf[index++] = ARM_PS_REGNUM;
13061 thumb2_insn_r->reg_rec_count = index;
13062 }
13063 else
13064 {
13065 /* Handle STM/STMIA/STMEA and STMDB/STMFD. */
13066 register_bits = bits (thumb2_insn_r->arm_insn, 0, 15);
13067 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
13068 while (register_bits)
13069 {
13070 if (register_bits & 0x00000001)
13071 register_count++;
13072
13073 register_bits = register_bits >> 1;
13074 }
13075
13076 if (1 == op)
13077 {
13078 /* Start address calculation for LDMDB/LDMEA. */
13079 start_address = u_regval;
13080 }
13081 else if (2 == op)
13082 {
13083 /* Start address calculation for LDMDB/LDMEA. */
13084 start_address = u_regval - register_count * 4;
13085 }
13086
13087 thumb2_insn_r->mem_rec_count = register_count;
13088 while (register_count)
13089 {
13090 record_buf_mem[register_count * 2 - 1] = start_address;
13091 record_buf_mem[register_count * 2 - 2] = 4;
13092 start_address = start_address + 4;
13093 register_count--;
13094 }
13095 record_buf[0] = reg_rn;
13096 record_buf[1] = ARM_PS_REGNUM;
13097 thumb2_insn_r->reg_rec_count = 2;
13098 }
13099 }
13100
13101 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
13102 record_buf_mem);
13103 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13104 record_buf);
13105 return ARM_RECORD_SUCCESS;
13106 }
13107
13108 /* Handler for thumb2 load/store (dual/exclusive) and table branch
13109 instructions. */
13110
13111 static int
13112 thumb2_record_ld_st_dual_ex_tbb (insn_decode_record *thumb2_insn_r)
13113 {
13114 struct regcache *reg_cache = thumb2_insn_r->regcache;
13115
13116 uint32_t reg_rd, reg_rn, offset_imm;
13117 uint32_t reg_dest1, reg_dest2;
13118 uint32_t address, offset_addr;
13119 uint32_t record_buf[8], record_buf_mem[8];
13120 uint32_t op1, op2, op3;
13121 LONGEST s_word;
13122
13123 ULONGEST u_regval[2];
13124
13125 op1 = bits (thumb2_insn_r->arm_insn, 23, 24);
13126 op2 = bits (thumb2_insn_r->arm_insn, 20, 21);
13127 op3 = bits (thumb2_insn_r->arm_insn, 4, 7);
13128
13129 if (bit (thumb2_insn_r->arm_insn, INSN_S_L_BIT_NUM))
13130 {
13131 if(!(1 == op1 && 1 == op2 && (0 == op3 || 1 == op3)))
13132 {
13133 reg_dest1 = bits (thumb2_insn_r->arm_insn, 12, 15);
13134 record_buf[0] = reg_dest1;
13135 record_buf[1] = ARM_PS_REGNUM;
13136 thumb2_insn_r->reg_rec_count = 2;
13137 }
13138
13139 if (3 == op2 || (op1 & 2) || (1 == op1 && 1 == op2 && 7 == op3))
13140 {
13141 reg_dest2 = bits (thumb2_insn_r->arm_insn, 8, 11);
13142 record_buf[2] = reg_dest2;
13143 thumb2_insn_r->reg_rec_count = 3;
13144 }
13145 }
13146 else
13147 {
13148 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
13149 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
13150
13151 if (0 == op1 && 0 == op2)
13152 {
13153 /* Handle STREX. */
13154 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
13155 address = u_regval[0] + (offset_imm * 4);
13156 record_buf_mem[0] = 4;
13157 record_buf_mem[1] = address;
13158 thumb2_insn_r->mem_rec_count = 1;
13159 reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
13160 record_buf[0] = reg_rd;
13161 thumb2_insn_r->reg_rec_count = 1;
13162 }
13163 else if (1 == op1 && 0 == op2)
13164 {
13165 reg_rd = bits (thumb2_insn_r->arm_insn, 0, 3);
13166 record_buf[0] = reg_rd;
13167 thumb2_insn_r->reg_rec_count = 1;
13168 address = u_regval[0];
13169 record_buf_mem[1] = address;
13170
13171 if (4 == op3)
13172 {
13173 /* Handle STREXB. */
13174 record_buf_mem[0] = 1;
13175 thumb2_insn_r->mem_rec_count = 1;
13176 }
13177 else if (5 == op3)
13178 {
13179 /* Handle STREXH. */
13180 record_buf_mem[0] = 2 ;
13181 thumb2_insn_r->mem_rec_count = 1;
13182 }
13183 else if (7 == op3)
13184 {
13185 /* Handle STREXD. */
13186 address = u_regval[0];
13187 record_buf_mem[0] = 4;
13188 record_buf_mem[2] = 4;
13189 record_buf_mem[3] = address + 4;
13190 thumb2_insn_r->mem_rec_count = 2;
13191 }
13192 }
13193 else
13194 {
13195 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
13196
13197 if (bit (thumb2_insn_r->arm_insn, 24))
13198 {
13199 if (bit (thumb2_insn_r->arm_insn, 23))
13200 offset_addr = u_regval[0] + (offset_imm * 4);
13201 else
13202 offset_addr = u_regval[0] - (offset_imm * 4);
13203
13204 address = offset_addr;
13205 }
13206 else
13207 address = u_regval[0];
13208
13209 record_buf_mem[0] = 4;
13210 record_buf_mem[1] = address;
13211 record_buf_mem[2] = 4;
13212 record_buf_mem[3] = address + 4;
13213 thumb2_insn_r->mem_rec_count = 2;
13214 record_buf[0] = reg_rn;
13215 thumb2_insn_r->reg_rec_count = 1;
13216 }
13217 }
13218
13219 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13220 record_buf);
13221 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
13222 record_buf_mem);
13223 return ARM_RECORD_SUCCESS;
13224 }
13225
13226 /* Handler for thumb2 data processing (shift register and modified immediate)
13227 instructions. */
13228
13229 static int
13230 thumb2_record_data_proc_sreg_mimm (insn_decode_record *thumb2_insn_r)
13231 {
13232 uint32_t reg_rd, op;
13233 uint32_t record_buf[8];
13234
13235 op = bits (thumb2_insn_r->arm_insn, 21, 24);
13236 reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
13237
13238 if ((0 == op || 4 == op || 8 == op || 13 == op) && 15 == reg_rd)
13239 {
13240 record_buf[0] = ARM_PS_REGNUM;
13241 thumb2_insn_r->reg_rec_count = 1;
13242 }
13243 else
13244 {
13245 record_buf[0] = reg_rd;
13246 record_buf[1] = ARM_PS_REGNUM;
13247 thumb2_insn_r->reg_rec_count = 2;
13248 }
13249
13250 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13251 record_buf);
13252 return ARM_RECORD_SUCCESS;
13253 }
13254
13255 /* Generic handler for thumb2 instructions which effect destination and PS
13256 registers. */
13257
13258 static int
13259 thumb2_record_ps_dest_generic (insn_decode_record *thumb2_insn_r)
13260 {
13261 uint32_t reg_rd;
13262 uint32_t record_buf[8];
13263
13264 reg_rd = bits (thumb2_insn_r->arm_insn, 8, 11);
13265
13266 record_buf[0] = reg_rd;
13267 record_buf[1] = ARM_PS_REGNUM;
13268 thumb2_insn_r->reg_rec_count = 2;
13269
13270 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13271 record_buf);
13272 return ARM_RECORD_SUCCESS;
13273 }
13274
13275 /* Handler for thumb2 branch and miscellaneous control instructions. */
13276
13277 static int
13278 thumb2_record_branch_misc_cntrl (insn_decode_record *thumb2_insn_r)
13279 {
13280 uint32_t op, op1, op2;
13281 uint32_t record_buf[8];
13282
13283 op = bits (thumb2_insn_r->arm_insn, 20, 26);
13284 op1 = bits (thumb2_insn_r->arm_insn, 12, 14);
13285 op2 = bits (thumb2_insn_r->arm_insn, 8, 11);
13286
13287 /* Handle MSR insn. */
13288 if (!(op1 & 0x2) && 0x38 == op)
13289 {
13290 if (!(op2 & 0x3))
13291 {
13292 /* CPSR is going to be changed. */
13293 record_buf[0] = ARM_PS_REGNUM;
13294 thumb2_insn_r->reg_rec_count = 1;
13295 }
13296 else
13297 {
13298 arm_record_unsupported_insn(thumb2_insn_r);
13299 return -1;
13300 }
13301 }
13302 else if (4 == (op1 & 0x5) || 5 == (op1 & 0x5))
13303 {
13304 /* BLX. */
13305 record_buf[0] = ARM_PS_REGNUM;
13306 record_buf[1] = ARM_LR_REGNUM;
13307 thumb2_insn_r->reg_rec_count = 2;
13308 }
13309
13310 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13311 record_buf);
13312 return ARM_RECORD_SUCCESS;
13313 }
13314
13315 /* Handler for thumb2 store single data item instructions. */
13316
13317 static int
13318 thumb2_record_str_single_data (insn_decode_record *thumb2_insn_r)
13319 {
13320 struct regcache *reg_cache = thumb2_insn_r->regcache;
13321
13322 uint32_t reg_rn, reg_rm, offset_imm, shift_imm;
13323 uint32_t address, offset_addr;
13324 uint32_t record_buf[8], record_buf_mem[8];
13325 uint32_t op1, op2;
13326
13327 ULONGEST u_regval[2];
13328
13329 op1 = bits (thumb2_insn_r->arm_insn, 21, 23);
13330 op2 = bits (thumb2_insn_r->arm_insn, 6, 11);
13331 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
13332 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval[0]);
13333
13334 if (bit (thumb2_insn_r->arm_insn, 23))
13335 {
13336 /* T2 encoding. */
13337 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 11);
13338 offset_addr = u_regval[0] + offset_imm;
13339 address = offset_addr;
13340 }
13341 else
13342 {
13343 /* T3 encoding. */
13344 if ((0 == op1 || 1 == op1 || 2 == op1) && !(op2 & 0x20))
13345 {
13346 /* Handle STRB (register). */
13347 reg_rm = bits (thumb2_insn_r->arm_insn, 0, 3);
13348 regcache_raw_read_unsigned (reg_cache, reg_rm, &u_regval[1]);
13349 shift_imm = bits (thumb2_insn_r->arm_insn, 4, 5);
13350 offset_addr = u_regval[1] << shift_imm;
13351 address = u_regval[0] + offset_addr;
13352 }
13353 else
13354 {
13355 offset_imm = bits (thumb2_insn_r->arm_insn, 0, 7);
13356 if (bit (thumb2_insn_r->arm_insn, 10))
13357 {
13358 if (bit (thumb2_insn_r->arm_insn, 9))
13359 offset_addr = u_regval[0] + offset_imm;
13360 else
13361 offset_addr = u_regval[0] - offset_imm;
13362
13363 address = offset_addr;
13364 }
13365 else
13366 address = u_regval[0];
13367 }
13368 }
13369
13370 switch (op1)
13371 {
13372 /* Store byte instructions. */
13373 case 4:
13374 case 0:
13375 record_buf_mem[0] = 1;
13376 break;
13377 /* Store half word instructions. */
13378 case 1:
13379 case 5:
13380 record_buf_mem[0] = 2;
13381 break;
13382 /* Store word instructions. */
13383 case 2:
13384 case 6:
13385 record_buf_mem[0] = 4;
13386 break;
13387
13388 default:
13389 gdb_assert_not_reached ("no decoding pattern found");
13390 break;
13391 }
13392
13393 record_buf_mem[1] = address;
13394 thumb2_insn_r->mem_rec_count = 1;
13395 record_buf[0] = reg_rn;
13396 thumb2_insn_r->reg_rec_count = 1;
13397
13398 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13399 record_buf);
13400 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
13401 record_buf_mem);
13402 return ARM_RECORD_SUCCESS;
13403 }
13404
13405 /* Handler for thumb2 load memory hints instructions. */
13406
13407 static int
13408 thumb2_record_ld_mem_hints (insn_decode_record *thumb2_insn_r)
13409 {
13410 uint32_t record_buf[8];
13411 uint32_t reg_rt, reg_rn;
13412
13413 reg_rt = bits (thumb2_insn_r->arm_insn, 12, 15);
13414 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
13415
13416 if (ARM_PC_REGNUM != reg_rt)
13417 {
13418 record_buf[0] = reg_rt;
13419 record_buf[1] = reg_rn;
13420 record_buf[2] = ARM_PS_REGNUM;
13421 thumb2_insn_r->reg_rec_count = 3;
13422
13423 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13424 record_buf);
13425 return ARM_RECORD_SUCCESS;
13426 }
13427
13428 return ARM_RECORD_FAILURE;
13429 }
13430
13431 /* Handler for thumb2 load word instructions. */
13432
13433 static int
13434 thumb2_record_ld_word (insn_decode_record *thumb2_insn_r)
13435 {
13436 uint32_t opcode1 = 0, opcode2 = 0;
13437 uint32_t record_buf[8];
13438
13439 record_buf[0] = bits (thumb2_insn_r->arm_insn, 12, 15);
13440 record_buf[1] = ARM_PS_REGNUM;
13441 thumb2_insn_r->reg_rec_count = 2;
13442
13443 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13444 record_buf);
13445 return ARM_RECORD_SUCCESS;
13446 }
13447
13448 /* Handler for thumb2 long multiply, long multiply accumulate, and
13449 divide instructions. */
13450
13451 static int
13452 thumb2_record_lmul_lmla_div (insn_decode_record *thumb2_insn_r)
13453 {
13454 uint32_t opcode1 = 0, opcode2 = 0;
13455 uint32_t record_buf[8];
13456 uint32_t reg_src1 = 0;
13457
13458 opcode1 = bits (thumb2_insn_r->arm_insn, 20, 22);
13459 opcode2 = bits (thumb2_insn_r->arm_insn, 4, 7);
13460
13461 if (0 == opcode1 || 2 == opcode1 || (opcode1 >= 4 && opcode1 <= 6))
13462 {
13463 /* Handle SMULL, UMULL, SMULAL. */
13464 /* Handle SMLAL(S), SMULL(S), UMLAL(S), UMULL(S). */
13465 record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
13466 record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
13467 record_buf[2] = ARM_PS_REGNUM;
13468 thumb2_insn_r->reg_rec_count = 3;
13469 }
13470 else if (1 == opcode1 || 3 == opcode2)
13471 {
13472 /* Handle SDIV and UDIV. */
13473 record_buf[0] = bits (thumb2_insn_r->arm_insn, 16, 19);
13474 record_buf[1] = bits (thumb2_insn_r->arm_insn, 12, 15);
13475 record_buf[2] = ARM_PS_REGNUM;
13476 thumb2_insn_r->reg_rec_count = 3;
13477 }
13478 else
13479 return ARM_RECORD_FAILURE;
13480
13481 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13482 record_buf);
13483 return ARM_RECORD_SUCCESS;
13484 }
13485
13486 /* Record handler for thumb32 coprocessor instructions. */
13487
13488 static int
13489 thumb2_record_coproc_insn (insn_decode_record *thumb2_insn_r)
13490 {
13491 if (bit (thumb2_insn_r->arm_insn, 25))
13492 return arm_record_coproc_data_proc (thumb2_insn_r);
13493 else
13494 return arm_record_asimd_vfp_coproc (thumb2_insn_r);
13495 }
13496
13497 /* Record handler for advance SIMD structure load/store instructions. */
13498
13499 static int
13500 thumb2_record_asimd_struct_ld_st (insn_decode_record *thumb2_insn_r)
13501 {
13502 struct regcache *reg_cache = thumb2_insn_r->regcache;
13503 uint32_t l_bit, a_bit, b_bits;
13504 uint32_t record_buf[128], record_buf_mem[128];
13505 uint32_t reg_rn, reg_vd, address, f_esize, f_elem;
13506 uint32_t index_r = 0, index_e = 0, bf_regs = 0, index_m = 0, loop_t = 0;
13507 uint8_t f_ebytes;
13508
13509 l_bit = bit (thumb2_insn_r->arm_insn, 21);
13510 a_bit = bit (thumb2_insn_r->arm_insn, 23);
13511 b_bits = bits (thumb2_insn_r->arm_insn, 8, 11);
13512 reg_rn = bits (thumb2_insn_r->arm_insn, 16, 19);
13513 reg_vd = bits (thumb2_insn_r->arm_insn, 12, 15);
13514 reg_vd = (bit (thumb2_insn_r->arm_insn, 22) << 4) | reg_vd;
13515 f_ebytes = (1 << bits (thumb2_insn_r->arm_insn, 6, 7));
13516 f_esize = 8 * f_ebytes;
13517 f_elem = 8 / f_ebytes;
13518
13519 if (!l_bit)
13520 {
13521 ULONGEST u_regval = 0;
13522 regcache_raw_read_unsigned (reg_cache, reg_rn, &u_regval);
13523 address = u_regval;
13524
13525 if (!a_bit)
13526 {
13527 /* Handle VST1. */
13528 if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
13529 {
13530 if (b_bits == 0x07)
13531 bf_regs = 1;
13532 else if (b_bits == 0x0a)
13533 bf_regs = 2;
13534 else if (b_bits == 0x06)
13535 bf_regs = 3;
13536 else if (b_bits == 0x02)
13537 bf_regs = 4;
13538 else
13539 bf_regs = 0;
13540
13541 for (index_r = 0; index_r < bf_regs; index_r++)
13542 {
13543 for (index_e = 0; index_e < f_elem; index_e++)
13544 {
13545 record_buf_mem[index_m++] = f_ebytes;
13546 record_buf_mem[index_m++] = address;
13547 address = address + f_ebytes;
13548 thumb2_insn_r->mem_rec_count += 1;
13549 }
13550 }
13551 }
13552 /* Handle VST2. */
13553 else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
13554 {
13555 if (b_bits == 0x09 || b_bits == 0x08)
13556 bf_regs = 1;
13557 else if (b_bits == 0x03)
13558 bf_regs = 2;
13559 else
13560 bf_regs = 0;
13561
13562 for (index_r = 0; index_r < bf_regs; index_r++)
13563 for (index_e = 0; index_e < f_elem; index_e++)
13564 {
13565 for (loop_t = 0; loop_t < 2; loop_t++)
13566 {
13567 record_buf_mem[index_m++] = f_ebytes;
13568 record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
13569 thumb2_insn_r->mem_rec_count += 1;
13570 }
13571 address = address + (2 * f_ebytes);
13572 }
13573 }
13574 /* Handle VST3. */
13575 else if ((b_bits & 0x0e) == 0x04)
13576 {
13577 for (index_e = 0; index_e < f_elem; index_e++)
13578 {
13579 for (loop_t = 0; loop_t < 3; loop_t++)
13580 {
13581 record_buf_mem[index_m++] = f_ebytes;
13582 record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
13583 thumb2_insn_r->mem_rec_count += 1;
13584 }
13585 address = address + (3 * f_ebytes);
13586 }
13587 }
13588 /* Handle VST4. */
13589 else if (!(b_bits & 0x0e))
13590 {
13591 for (index_e = 0; index_e < f_elem; index_e++)
13592 {
13593 for (loop_t = 0; loop_t < 4; loop_t++)
13594 {
13595 record_buf_mem[index_m++] = f_ebytes;
13596 record_buf_mem[index_m++] = address + (loop_t * f_ebytes);
13597 thumb2_insn_r->mem_rec_count += 1;
13598 }
13599 address = address + (4 * f_ebytes);
13600 }
13601 }
13602 }
13603 else
13604 {
13605 uint8_t bft_size = bits (thumb2_insn_r->arm_insn, 10, 11);
13606
13607 if (bft_size == 0x00)
13608 f_ebytes = 1;
13609 else if (bft_size == 0x01)
13610 f_ebytes = 2;
13611 else if (bft_size == 0x02)
13612 f_ebytes = 4;
13613 else
13614 f_ebytes = 0;
13615
13616 /* Handle VST1. */
13617 if (!(b_bits & 0x0b) || b_bits == 0x08)
13618 thumb2_insn_r->mem_rec_count = 1;
13619 /* Handle VST2. */
13620 else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09)
13621 thumb2_insn_r->mem_rec_count = 2;
13622 /* Handle VST3. */
13623 else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a)
13624 thumb2_insn_r->mem_rec_count = 3;
13625 /* Handle VST4. */
13626 else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b)
13627 thumb2_insn_r->mem_rec_count = 4;
13628
13629 for (index_m = 0; index_m < thumb2_insn_r->mem_rec_count; index_m++)
13630 {
13631 record_buf_mem[index_m] = f_ebytes;
13632 record_buf_mem[index_m] = address + (index_m * f_ebytes);
13633 }
13634 }
13635 }
13636 else
13637 {
13638 if (!a_bit)
13639 {
13640 /* Handle VLD1. */
13641 if (b_bits == 0x02 || b_bits == 0x0a || (b_bits & 0x0e) == 0x06)
13642 thumb2_insn_r->reg_rec_count = 1;
13643 /* Handle VLD2. */
13644 else if (b_bits == 0x03 || (b_bits & 0x0e) == 0x08)
13645 thumb2_insn_r->reg_rec_count = 2;
13646 /* Handle VLD3. */
13647 else if ((b_bits & 0x0e) == 0x04)
13648 thumb2_insn_r->reg_rec_count = 3;
13649 /* Handle VLD4. */
13650 else if (!(b_bits & 0x0e))
13651 thumb2_insn_r->reg_rec_count = 4;
13652 }
13653 else
13654 {
13655 /* Handle VLD1. */
13656 if (!(b_bits & 0x0b) || b_bits == 0x08 || b_bits == 0x0c)
13657 thumb2_insn_r->reg_rec_count = 1;
13658 /* Handle VLD2. */
13659 else if ((b_bits & 0x0b) == 0x01 || b_bits == 0x09 || b_bits == 0x0d)
13660 thumb2_insn_r->reg_rec_count = 2;
13661 /* Handle VLD3. */
13662 else if ((b_bits & 0x0b) == 0x02 || b_bits == 0x0a || b_bits == 0x0e)
13663 thumb2_insn_r->reg_rec_count = 3;
13664 /* Handle VLD4. */
13665 else if ((b_bits & 0x0b) == 0x03 || b_bits == 0x0b || b_bits == 0x0f)
13666 thumb2_insn_r->reg_rec_count = 4;
13667
13668 for (index_r = 0; index_r < thumb2_insn_r->reg_rec_count; index_r++)
13669 record_buf[index_r] = reg_vd + ARM_D0_REGNUM + index_r;
13670 }
13671 }
13672
13673 if (bits (thumb2_insn_r->arm_insn, 0, 3) != 15)
13674 {
13675 record_buf[index_r] = reg_rn;
13676 thumb2_insn_r->reg_rec_count += 1;
13677 }
13678
13679 REG_ALLOC (thumb2_insn_r->arm_regs, thumb2_insn_r->reg_rec_count,
13680 record_buf);
13681 MEM_ALLOC (thumb2_insn_r->arm_mems, thumb2_insn_r->mem_rec_count,
13682 record_buf_mem);
13683 return 0;
13684 }
13685
13686 /* Decodes thumb2 instruction type and invokes its record handler. */
13687
13688 static unsigned int
13689 thumb2_record_decode_insn_handler (insn_decode_record *thumb2_insn_r)
13690 {
13691 uint32_t op, op1, op2;
13692
13693 op = bit (thumb2_insn_r->arm_insn, 15);
13694 op1 = bits (thumb2_insn_r->arm_insn, 27, 28);
13695 op2 = bits (thumb2_insn_r->arm_insn, 20, 26);
13696
13697 if (op1 == 0x01)
13698 {
13699 if (!(op2 & 0x64 ))
13700 {
13701 /* Load/store multiple instruction. */
13702 return thumb2_record_ld_st_multiple (thumb2_insn_r);
13703 }
13704 else if (!((op2 & 0x64) ^ 0x04))
13705 {
13706 /* Load/store (dual/exclusive) and table branch instruction. */
13707 return thumb2_record_ld_st_dual_ex_tbb (thumb2_insn_r);
13708 }
13709 else if (!((op2 & 0x20) ^ 0x20))
13710 {
13711 /* Data-processing (shifted register). */
13712 return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
13713 }
13714 else if (op2 & 0x40)
13715 {
13716 /* Co-processor instructions. */
13717 return thumb2_record_coproc_insn (thumb2_insn_r);
13718 }
13719 }
13720 else if (op1 == 0x02)
13721 {
13722 if (op)
13723 {
13724 /* Branches and miscellaneous control instructions. */
13725 return thumb2_record_branch_misc_cntrl (thumb2_insn_r);
13726 }
13727 else if (op2 & 0x20)
13728 {
13729 /* Data-processing (plain binary immediate) instruction. */
13730 return thumb2_record_ps_dest_generic (thumb2_insn_r);
13731 }
13732 else
13733 {
13734 /* Data-processing (modified immediate). */
13735 return thumb2_record_data_proc_sreg_mimm (thumb2_insn_r);
13736 }
13737 }
13738 else if (op1 == 0x03)
13739 {
13740 if (!(op2 & 0x71 ))
13741 {
13742 /* Store single data item. */
13743 return thumb2_record_str_single_data (thumb2_insn_r);
13744 }
13745 else if (!((op2 & 0x71) ^ 0x10))
13746 {
13747 /* Advanced SIMD or structure load/store instructions. */
13748 return thumb2_record_asimd_struct_ld_st (thumb2_insn_r);
13749 }
13750 else if (!((op2 & 0x67) ^ 0x01))
13751 {
13752 /* Load byte, memory hints instruction. */
13753 return thumb2_record_ld_mem_hints (thumb2_insn_r);
13754 }
13755 else if (!((op2 & 0x67) ^ 0x03))
13756 {
13757 /* Load halfword, memory hints instruction. */
13758 return thumb2_record_ld_mem_hints (thumb2_insn_r);
13759 }
13760 else if (!((op2 & 0x67) ^ 0x05))
13761 {
13762 /* Load word instruction. */
13763 return thumb2_record_ld_word (thumb2_insn_r);
13764 }
13765 else if (!((op2 & 0x70) ^ 0x20))
13766 {
13767 /* Data-processing (register) instruction. */
13768 return thumb2_record_ps_dest_generic (thumb2_insn_r);
13769 }
13770 else if (!((op2 & 0x78) ^ 0x30))
13771 {
13772 /* Multiply, multiply accumulate, abs diff instruction. */
13773 return thumb2_record_ps_dest_generic (thumb2_insn_r);
13774 }
13775 else if (!((op2 & 0x78) ^ 0x38))
13776 {
13777 /* Long multiply, long multiply accumulate, and divide. */
13778 return thumb2_record_lmul_lmla_div (thumb2_insn_r);
13779 }
13780 else if (op2 & 0x40)
13781 {
13782 /* Co-processor instructions. */
13783 return thumb2_record_coproc_insn (thumb2_insn_r);
13784 }
13785 }
13786
13787 return -1;
13788 }
13789
13790 /* Extracts arm/thumb/thumb2 insn depending on the size, and returns 0 on success
13791 and positive val on fauilure. */
13792
13793 static int
13794 extract_arm_insn (insn_decode_record *insn_record, uint32_t insn_size)
13795 {
13796 gdb_byte buf[insn_size];
13797
13798 memset (&buf[0], 0, insn_size);
13799
13800 if (target_read_memory (insn_record->this_addr, &buf[0], insn_size))
13801 return 1;
13802 insn_record->arm_insn = (uint32_t) extract_unsigned_integer (&buf[0],
13803 insn_size,
13804 gdbarch_byte_order_for_code (insn_record->gdbarch));
13805 return 0;
13806 }
13807
13808 typedef int (*sti_arm_hdl_fp_t) (insn_decode_record*);
13809
13810 /* Decode arm/thumb insn depending on condition cods and opcodes; and
13811 dispatch it. */
13812
13813 static int
13814 decode_insn (insn_decode_record *arm_record, record_type_t record_type,
13815 uint32_t insn_size)
13816 {
13817
13818 /* (Starting from numerical 0); bits 25, 26, 27 decodes type of arm instruction. */
13819 static const sti_arm_hdl_fp_t arm_handle_insn[8] =
13820 {
13821 arm_record_data_proc_misc_ld_str, /* 000. */
13822 arm_record_data_proc_imm, /* 001. */
13823 arm_record_ld_st_imm_offset, /* 010. */
13824 arm_record_ld_st_reg_offset, /* 011. */
13825 arm_record_ld_st_multiple, /* 100. */
13826 arm_record_b_bl, /* 101. */
13827 arm_record_asimd_vfp_coproc, /* 110. */
13828 arm_record_coproc_data_proc /* 111. */
13829 };
13830
13831 /* (Starting from numerical 0); bits 13,14,15 decodes type of thumb instruction. */
13832 static const sti_arm_hdl_fp_t thumb_handle_insn[8] =
13833 { \
13834 thumb_record_shift_add_sub, /* 000. */
13835 thumb_record_add_sub_cmp_mov, /* 001. */
13836 thumb_record_ld_st_reg_offset, /* 010. */
13837 thumb_record_ld_st_imm_offset, /* 011. */
13838 thumb_record_ld_st_stack, /* 100. */
13839 thumb_record_misc, /* 101. */
13840 thumb_record_ldm_stm_swi, /* 110. */
13841 thumb_record_branch /* 111. */
13842 };
13843
13844 uint32_t ret = 0; /* return value: negative:failure 0:success. */
13845 uint32_t insn_id = 0;
13846
13847 if (extract_arm_insn (arm_record, insn_size))
13848 {
13849 if (record_debug)
13850 {
13851 printf_unfiltered (_("Process record: error reading memory at "
13852 "addr %s len = %d.\n"),
13853 paddress (arm_record->gdbarch, arm_record->this_addr), insn_size);
13854 }
13855 return -1;
13856 }
13857 else if (ARM_RECORD == record_type)
13858 {
13859 arm_record->cond = bits (arm_record->arm_insn, 28, 31);
13860 insn_id = bits (arm_record->arm_insn, 25, 27);
13861 ret = arm_record_extension_space (arm_record);
13862 /* If this insn has fallen into extension space
13863 then we need not decode it anymore. */
13864 if (ret != -1 && !INSN_RECORDED(arm_record))
13865 {
13866 ret = arm_handle_insn[insn_id] (arm_record);
13867 }
13868 }
13869 else if (THUMB_RECORD == record_type)
13870 {
13871 /* As thumb does not have condition codes, we set negative. */
13872 arm_record->cond = -1;
13873 insn_id = bits (arm_record->arm_insn, 13, 15);
13874 ret = thumb_handle_insn[insn_id] (arm_record);
13875 }
13876 else if (THUMB2_RECORD == record_type)
13877 {
13878 /* As thumb does not have condition codes, we set negative. */
13879 arm_record->cond = -1;
13880
13881 /* Swap first half of 32bit thumb instruction with second half. */
13882 arm_record->arm_insn
13883 = (arm_record->arm_insn >> 16) | (arm_record->arm_insn << 16);
13884
13885 insn_id = thumb2_record_decode_insn_handler (arm_record);
13886
13887 if (insn_id != ARM_RECORD_SUCCESS)
13888 {
13889 arm_record_unsupported_insn (arm_record);
13890 ret = -1;
13891 }
13892 }
13893 else
13894 {
13895 /* Throw assertion. */
13896 gdb_assert_not_reached ("not a valid instruction, could not decode");
13897 }
13898
13899 return ret;
13900 }
13901
13902
13903 /* Cleans up local record registers and memory allocations. */
13904
13905 static void
13906 deallocate_reg_mem (insn_decode_record *record)
13907 {
13908 xfree (record->arm_regs);
13909 xfree (record->arm_mems);
13910 }
13911
13912
13913 /* Parse the current instruction and record the values of the registers and
13914 memory that will be changed in current instruction to record_arch_list".
13915 Return -1 if something is wrong. */
13916
13917 int
13918 arm_process_record (struct gdbarch *gdbarch, struct regcache *regcache,
13919 CORE_ADDR insn_addr)
13920 {
13921
13922 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
13923 uint32_t no_of_rec = 0;
13924 uint32_t ret = 0; /* return value: -1:record failure ; 0:success */
13925 ULONGEST t_bit = 0, insn_id = 0;
13926
13927 ULONGEST u_regval = 0;
13928
13929 insn_decode_record arm_record;
13930
13931 memset (&arm_record, 0, sizeof (insn_decode_record));
13932 arm_record.regcache = regcache;
13933 arm_record.this_addr = insn_addr;
13934 arm_record.gdbarch = gdbarch;
13935
13936
13937 if (record_debug > 1)
13938 {
13939 fprintf_unfiltered (gdb_stdlog, "Process record: arm_process_record "
13940 "addr = %s\n",
13941 paddress (gdbarch, arm_record.this_addr));
13942 }
13943
13944 if (extract_arm_insn (&arm_record, 2))
13945 {
13946 if (record_debug)
13947 {
13948 printf_unfiltered (_("Process record: error reading memory at "
13949 "addr %s len = %d.\n"),
13950 paddress (arm_record.gdbarch,
13951 arm_record.this_addr), 2);
13952 }
13953 return -1;
13954 }
13955
13956 /* Check the insn, whether it is thumb or arm one. */
13957
13958 t_bit = arm_psr_thumb_bit (arm_record.gdbarch);
13959 regcache_raw_read_unsigned (arm_record.regcache, ARM_PS_REGNUM, &u_regval);
13960
13961
13962 if (!(u_regval & t_bit))
13963 {
13964 /* We are decoding arm insn. */
13965 ret = decode_insn (&arm_record, ARM_RECORD, ARM_INSN_SIZE_BYTES);
13966 }
13967 else
13968 {
13969 insn_id = bits (arm_record.arm_insn, 11, 15);
13970 /* is it thumb2 insn? */
13971 if ((0x1D == insn_id) || (0x1E == insn_id) || (0x1F == insn_id))
13972 {
13973 ret = decode_insn (&arm_record, THUMB2_RECORD,
13974 THUMB2_INSN_SIZE_BYTES);
13975 }
13976 else
13977 {
13978 /* We are decoding thumb insn. */
13979 ret = decode_insn (&arm_record, THUMB_RECORD, THUMB_INSN_SIZE_BYTES);
13980 }
13981 }
13982
13983 if (0 == ret)
13984 {
13985 /* Record registers. */
13986 record_full_arch_list_add_reg (arm_record.regcache, ARM_PC_REGNUM);
13987 if (arm_record.arm_regs)
13988 {
13989 for (no_of_rec = 0; no_of_rec < arm_record.reg_rec_count; no_of_rec++)
13990 {
13991 if (record_full_arch_list_add_reg
13992 (arm_record.regcache , arm_record.arm_regs[no_of_rec]))
13993 ret = -1;
13994 }
13995 }
13996 /* Record memories. */
13997 if (arm_record.arm_mems)
13998 {
13999 for (no_of_rec = 0; no_of_rec < arm_record.mem_rec_count; no_of_rec++)
14000 {
14001 if (record_full_arch_list_add_mem
14002 ((CORE_ADDR)arm_record.arm_mems[no_of_rec].addr,
14003 arm_record.arm_mems[no_of_rec].len))
14004 ret = -1;
14005 }
14006 }
14007
14008 if (record_full_arch_list_add_end ())
14009 ret = -1;
14010 }
14011
14012
14013 deallocate_reg_mem (&arm_record);
14014
14015 return ret;
14016 }
14017