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