* ax-gdb.c (gen_exp_binop_rest) [BINOP_SUBSCRIPT]: Error out if
[binutils-gdb.git] / gdb / arm-tdep.c
blob524e4ace2c0a43902913a039dbb714c2a392bcf6
1 /* Common target dependent code for GDB on ARM systems.
3 Copyright (C) 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
4 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
7 This file is part of GDB.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 #include <ctype.h> /* XXX for isupper () */
24 #include "defs.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "gdb_string.h"
30 #include "dis-asm.h" /* For register styles. */
31 #include "regcache.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 "target-descriptions.h"
44 #include "user-regs.h"
46 #include "arm-tdep.h"
47 #include "gdb/sim-arm.h"
49 #include "elf-bfd.h"
50 #include "coff/internal.h"
51 #include "elf/arm.h"
53 #include "gdb_assert.h"
54 #include "vec.h"
56 static int arm_debug;
58 /* Macros for setting and testing a bit in a minimal symbol that marks
59 it as Thumb function. The MSB of the minimal symbol's "info" field
60 is used for this purpose.
62 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
63 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
65 #define MSYMBOL_SET_SPECIAL(msym) \
66 MSYMBOL_TARGET_FLAG_1 (msym) = 1
68 #define MSYMBOL_IS_SPECIAL(msym) \
69 MSYMBOL_TARGET_FLAG_1 (msym)
71 /* Per-objfile data used for mapping symbols. */
72 static const struct objfile_data *arm_objfile_data_key;
74 struct arm_mapping_symbol
76 bfd_vma value;
77 char type;
79 typedef struct arm_mapping_symbol arm_mapping_symbol_s;
80 DEF_VEC_O(arm_mapping_symbol_s);
82 struct arm_per_objfile
84 VEC(arm_mapping_symbol_s) **section_maps;
87 /* The list of available "set arm ..." and "show arm ..." commands. */
88 static struct cmd_list_element *setarmcmdlist = NULL;
89 static struct cmd_list_element *showarmcmdlist = NULL;
91 /* The type of floating-point to use. Keep this in sync with enum
92 arm_float_model, and the help string in _initialize_arm_tdep. */
93 static const char *fp_model_strings[] =
95 "auto",
96 "softfpa",
97 "fpa",
98 "softvfp",
99 "vfp",
100 NULL
103 /* A variable that can be configured by the user. */
104 static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
105 static const char *current_fp_model = "auto";
107 /* The ABI to use. Keep this in sync with arm_abi_kind. */
108 static const char *arm_abi_strings[] =
110 "auto",
111 "APCS",
112 "AAPCS",
113 NULL
116 /* A variable that can be configured by the user. */
117 static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
118 static const char *arm_abi_string = "auto";
120 /* The execution mode to assume. */
121 static const char *arm_mode_strings[] =
123 "auto",
124 "arm",
125 "thumb"
128 static const char *arm_fallback_mode_string = "auto";
129 static const char *arm_force_mode_string = "auto";
131 /* Number of different reg name sets (options). */
132 static int num_disassembly_options;
134 /* The standard register names, and all the valid aliases for them. */
135 static const struct
137 const char *name;
138 int regnum;
139 } arm_register_aliases[] = {
140 /* Basic register numbers. */
141 { "r0", 0 },
142 { "r1", 1 },
143 { "r2", 2 },
144 { "r3", 3 },
145 { "r4", 4 },
146 { "r5", 5 },
147 { "r6", 6 },
148 { "r7", 7 },
149 { "r8", 8 },
150 { "r9", 9 },
151 { "r10", 10 },
152 { "r11", 11 },
153 { "r12", 12 },
154 { "r13", 13 },
155 { "r14", 14 },
156 { "r15", 15 },
157 /* Synonyms (argument and variable registers). */
158 { "a1", 0 },
159 { "a2", 1 },
160 { "a3", 2 },
161 { "a4", 3 },
162 { "v1", 4 },
163 { "v2", 5 },
164 { "v3", 6 },
165 { "v4", 7 },
166 { "v5", 8 },
167 { "v6", 9 },
168 { "v7", 10 },
169 { "v8", 11 },
170 /* Other platform-specific names for r9. */
171 { "sb", 9 },
172 { "tr", 9 },
173 /* Special names. */
174 { "ip", 12 },
175 { "sp", 13 },
176 { "lr", 14 },
177 { "pc", 15 },
178 /* Names used by GCC (not listed in the ARM EABI). */
179 { "sl", 10 },
180 { "fp", 11 },
181 /* A special name from the older ATPCS. */
182 { "wr", 7 },
185 static const char *const arm_register_names[] =
186 {"r0", "r1", "r2", "r3", /* 0 1 2 3 */
187 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
188 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
189 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
190 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
191 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
192 "fps", "cpsr" }; /* 24 25 */
194 /* Valid register name styles. */
195 static const char **valid_disassembly_styles;
197 /* Disassembly style to use. Default to "std" register names. */
198 static const char *disassembly_style;
200 /* This is used to keep the bfd arch_info in sync with the disassembly
201 style. */
202 static void set_disassembly_style_sfunc(char *, int,
203 struct cmd_list_element *);
204 static void set_disassembly_style (void);
206 static void convert_from_extended (const struct floatformat *, const void *,
207 void *, int);
208 static void convert_to_extended (const struct floatformat *, void *,
209 const void *, int);
211 static void arm_neon_quad_read (struct gdbarch *gdbarch,
212 struct regcache *regcache,
213 int regnum, gdb_byte *buf);
214 static void arm_neon_quad_write (struct gdbarch *gdbarch,
215 struct regcache *regcache,
216 int regnum, const gdb_byte *buf);
218 struct arm_prologue_cache
220 /* The stack pointer at the time this frame was created; i.e. the
221 caller's stack pointer when this function was called. It is used
222 to identify this frame. */
223 CORE_ADDR prev_sp;
225 /* The frame base for this frame is just prev_sp - frame size.
226 FRAMESIZE is the distance from the frame pointer to the
227 initial stack pointer. */
229 int framesize;
231 /* The register used to hold the frame pointer for this frame. */
232 int framereg;
234 /* Saved register offsets. */
235 struct trad_frame_saved_reg *saved_regs;
238 /* Architecture version for displaced stepping. This effects the behaviour of
239 certain instructions, and really should not be hard-wired. */
241 #define DISPLACED_STEPPING_ARCH_VERSION 5
243 /* Addresses for calling Thumb functions have the bit 0 set.
244 Here are some macros to test, set, or clear bit 0 of addresses. */
245 #define IS_THUMB_ADDR(addr) ((addr) & 1)
246 #define MAKE_THUMB_ADDR(addr) ((addr) | 1)
247 #define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
249 /* Set to true if the 32-bit mode is in use. */
251 int arm_apcs_32 = 1;
253 /* Determine if FRAME is executing in Thumb mode. */
255 static int
256 arm_frame_is_thumb (struct frame_info *frame)
258 CORE_ADDR cpsr;
260 /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
261 directly (from a signal frame or dummy frame) or by interpreting
262 the saved LR (from a prologue or DWARF frame). So consult it and
263 trust the unwinders. */
264 cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
266 return (cpsr & CPSR_T) != 0;
269 /* Callback for VEC_lower_bound. */
271 static inline int
272 arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
273 const struct arm_mapping_symbol *rhs)
275 return lhs->value < rhs->value;
278 /* Search for the mapping symbol covering MEMADDR. If one is found,
279 return its type. Otherwise, return 0. If START is non-NULL,
280 set *START to the location of the mapping symbol. */
282 static char
283 arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
285 struct obj_section *sec;
287 /* If there are mapping symbols, consult them. */
288 sec = find_pc_section (memaddr);
289 if (sec != NULL)
291 struct arm_per_objfile *data;
292 VEC(arm_mapping_symbol_s) *map;
293 struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
294 0 };
295 unsigned int idx;
297 data = objfile_data (sec->objfile, arm_objfile_data_key);
298 if (data != NULL)
300 map = data->section_maps[sec->the_bfd_section->index];
301 if (!VEC_empty (arm_mapping_symbol_s, map))
303 struct arm_mapping_symbol *map_sym;
305 idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
306 arm_compare_mapping_symbols);
308 /* VEC_lower_bound finds the earliest ordered insertion
309 point. If the following symbol starts at this exact
310 address, we use that; otherwise, the preceding
311 mapping symbol covers this address. */
312 if (idx < VEC_length (arm_mapping_symbol_s, map))
314 map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
315 if (map_sym->value == map_key.value)
317 if (start)
318 *start = map_sym->value + obj_section_addr (sec);
319 return map_sym->type;
323 if (idx > 0)
325 map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
326 if (start)
327 *start = map_sym->value + obj_section_addr (sec);
328 return map_sym->type;
334 return 0;
337 /* Determine if the program counter specified in MEMADDR is in a Thumb
338 function. This function should be called for addresses unrelated to
339 any executing frame; otherwise, prefer arm_frame_is_thumb. */
341 static int
342 arm_pc_is_thumb (CORE_ADDR memaddr)
344 struct obj_section *sec;
345 struct minimal_symbol *sym;
346 char type;
348 /* If bit 0 of the address is set, assume this is a Thumb address. */
349 if (IS_THUMB_ADDR (memaddr))
350 return 1;
352 /* If the user wants to override the symbol table, let him. */
353 if (strcmp (arm_force_mode_string, "arm") == 0)
354 return 0;
355 if (strcmp (arm_force_mode_string, "thumb") == 0)
356 return 1;
358 /* If there are mapping symbols, consult them. */
359 type = arm_find_mapping_symbol (memaddr, NULL);
360 if (type)
361 return type == 't';
363 /* Thumb functions have a "special" bit set in minimal symbols. */
364 sym = lookup_minimal_symbol_by_pc (memaddr);
365 if (sym)
366 return (MSYMBOL_IS_SPECIAL (sym));
368 /* If the user wants to override the fallback mode, let them. */
369 if (strcmp (arm_fallback_mode_string, "arm") == 0)
370 return 0;
371 if (strcmp (arm_fallback_mode_string, "thumb") == 0)
372 return 1;
374 /* If we couldn't find any symbol, but we're talking to a running
375 target, then trust the current value of $cpsr. This lets
376 "display/i $pc" always show the correct mode (though if there is
377 a symbol table we will not reach here, so it still may not be
378 displayed in the mode it will be executed). */
379 if (target_has_registers)
380 return arm_frame_is_thumb (get_current_frame ());
382 /* Otherwise we're out of luck; we assume ARM. */
383 return 0;
386 /* Remove useless bits from addresses in a running program. */
387 static CORE_ADDR
388 arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
390 if (arm_apcs_32)
391 return UNMAKE_THUMB_ADDR (val);
392 else
393 return (val & 0x03fffffc);
396 /* When reading symbols, we need to zap the low bit of the address,
397 which may be set to 1 for Thumb functions. */
398 static CORE_ADDR
399 arm_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR val)
401 return val & ~1;
404 /* Analyze a Thumb prologue, looking for a recognizable stack frame
405 and frame pointer. Scan until we encounter a store that could
406 clobber the stack frame unexpectedly, or an unknown instruction. */
408 static CORE_ADDR
409 thumb_analyze_prologue (struct gdbarch *gdbarch,
410 CORE_ADDR start, CORE_ADDR limit,
411 struct arm_prologue_cache *cache)
413 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
414 int i;
415 pv_t regs[16];
416 struct pv_area *stack;
417 struct cleanup *back_to;
418 CORE_ADDR offset;
420 for (i = 0; i < 16; i++)
421 regs[i] = pv_register (i, 0);
422 stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
423 back_to = make_cleanup_free_pv_area (stack);
425 while (start < limit)
427 unsigned short insn;
429 insn = read_memory_unsigned_integer (start, 2, byte_order_for_code);
431 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
433 int regno;
434 int mask;
436 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
437 break;
439 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
440 whether to save LR (R14). */
441 mask = (insn & 0xff) | ((insn & 0x100) << 6);
443 /* Calculate offsets of saved R0-R7 and LR. */
444 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
445 if (mask & (1 << regno))
447 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
448 -4);
449 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
452 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR
453 sub sp, #simm */
455 offset = (insn & 0x7f) << 2; /* get scaled offset */
456 if (insn & 0x80) /* Check for SUB. */
457 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
458 -offset);
459 else
460 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
461 offset);
463 else if ((insn & 0xff00) == 0xaf00) /* add r7, sp, #imm */
464 regs[THUMB_FP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
465 (insn & 0xff) << 2);
466 else if ((insn & 0xff00) == 0x4600) /* mov hi, lo or mov lo, hi */
468 int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
469 int src_reg = (insn & 0x78) >> 3;
470 regs[dst_reg] = regs[src_reg];
472 else if ((insn & 0xf800) == 0x9000) /* str rd, [sp, #off] */
474 /* Handle stores to the stack. Normally pushes are used,
475 but with GCC -mtpcs-frame, there may be other stores
476 in the prologue to create the frame. */
477 int regno = (insn >> 8) & 0x7;
478 pv_t addr;
480 offset = (insn & 0xff) << 2;
481 addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
483 if (pv_area_store_would_trash (stack, addr))
484 break;
486 pv_area_store (stack, addr, 4, regs[regno]);
488 else
490 /* We don't know what this instruction is. We're finished
491 scanning. NOTE: Recognizing more safe-to-ignore
492 instructions here will improve support for optimized
493 code. */
494 break;
497 start += 2;
500 if (cache == NULL)
502 do_cleanups (back_to);
503 return start;
506 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
508 /* Frame pointer is fp. Frame size is constant. */
509 cache->framereg = ARM_FP_REGNUM;
510 cache->framesize = -regs[ARM_FP_REGNUM].k;
512 else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
514 /* Frame pointer is r7. Frame size is constant. */
515 cache->framereg = THUMB_FP_REGNUM;
516 cache->framesize = -regs[THUMB_FP_REGNUM].k;
518 else if (pv_is_register (regs[ARM_SP_REGNUM], ARM_SP_REGNUM))
520 /* Try the stack pointer... this is a bit desperate. */
521 cache->framereg = ARM_SP_REGNUM;
522 cache->framesize = -regs[ARM_SP_REGNUM].k;
524 else
526 /* We're just out of luck. We don't know where the frame is. */
527 cache->framereg = -1;
528 cache->framesize = 0;
531 for (i = 0; i < 16; i++)
532 if (pv_area_find_reg (stack, gdbarch, i, &offset))
533 cache->saved_regs[i].addr = offset;
535 do_cleanups (back_to);
536 return start;
539 /* Advance the PC across any function entry prologue instructions to
540 reach some "real" code.
542 The APCS (ARM Procedure Call Standard) defines the following
543 prologue:
545 mov ip, sp
546 [stmfd sp!, {a1,a2,a3,a4}]
547 stmfd sp!, {...,fp,ip,lr,pc}
548 [stfe f7, [sp, #-12]!]
549 [stfe f6, [sp, #-12]!]
550 [stfe f5, [sp, #-12]!]
551 [stfe f4, [sp, #-12]!]
552 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
554 static CORE_ADDR
555 arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
557 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
558 unsigned long inst;
559 CORE_ADDR skip_pc;
560 CORE_ADDR func_addr, limit_pc;
561 struct symtab_and_line sal;
563 /* If we're in a dummy frame, don't even try to skip the prologue. */
564 if (deprecated_pc_in_call_dummy (gdbarch, pc))
565 return pc;
567 /* See if we can determine the end of the prologue via the symbol table.
568 If so, then return either PC, or the PC after the prologue, whichever
569 is greater. */
570 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
572 CORE_ADDR post_prologue_pc
573 = skip_prologue_using_sal (gdbarch, func_addr);
574 if (post_prologue_pc != 0)
575 return max (pc, post_prologue_pc);
578 /* Can't determine prologue from the symbol table, need to examine
579 instructions. */
581 /* Find an upper limit on the function prologue using the debug
582 information. If the debug information could not be used to provide
583 that bound, then use an arbitrary large number as the upper bound. */
584 /* Like arm_scan_prologue, stop no later than pc + 64. */
585 limit_pc = skip_prologue_using_sal (gdbarch, pc);
586 if (limit_pc == 0)
587 limit_pc = pc + 64; /* Magic. */
590 /* Check if this is Thumb code. */
591 if (arm_pc_is_thumb (pc))
592 return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
594 for (skip_pc = pc; skip_pc < limit_pc; skip_pc += 4)
596 inst = read_memory_unsigned_integer (skip_pc, 4, byte_order_for_code);
598 /* "mov ip, sp" is no longer a required part of the prologue. */
599 if (inst == 0xe1a0c00d) /* mov ip, sp */
600 continue;
602 if ((inst & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
603 continue;
605 if ((inst & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
606 continue;
608 /* Some prologues begin with "str lr, [sp, #-4]!". */
609 if (inst == 0xe52de004) /* str lr, [sp, #-4]! */
610 continue;
612 if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */
613 continue;
615 if ((inst & 0xfffff800) == 0xe92dd800) /* stmfd sp!,{fp,ip,lr,pc} */
616 continue;
618 /* Any insns after this point may float into the code, if it makes
619 for better instruction scheduling, so we skip them only if we
620 find them, but still consider the function to be frame-ful. */
622 /* We may have either one sfmfd instruction here, or several stfe
623 insns, depending on the version of floating point code we
624 support. */
625 if ((inst & 0xffbf0fff) == 0xec2d0200) /* sfmfd fn, <cnt>, [sp]! */
626 continue;
628 if ((inst & 0xffff8fff) == 0xed6d0103) /* stfe fn, [sp, #-12]! */
629 continue;
631 if ((inst & 0xfffff000) == 0xe24cb000) /* sub fp, ip, #nn */
632 continue;
634 if ((inst & 0xfffff000) == 0xe24dd000) /* sub sp, sp, #nn */
635 continue;
637 if ((inst & 0xffffc000) == 0xe54b0000 /* strb r(0123),[r11,#-nn] */
638 || (inst & 0xffffc0f0) == 0xe14b00b0 /* strh r(0123),[r11,#-nn] */
639 || (inst & 0xffffc000) == 0xe50b0000) /* str r(0123),[r11,#-nn] */
640 continue;
642 if ((inst & 0xffffc000) == 0xe5cd0000 /* strb r(0123),[sp,#nn] */
643 || (inst & 0xffffc0f0) == 0xe1cd00b0 /* strh r(0123),[sp,#nn] */
644 || (inst & 0xffffc000) == 0xe58d0000) /* str r(0123),[sp,#nn] */
645 continue;
647 /* Un-recognized instruction; stop scanning. */
648 break;
651 return skip_pc; /* End of prologue */
654 /* *INDENT-OFF* */
655 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
656 This function decodes a Thumb function prologue to determine:
657 1) the size of the stack frame
658 2) which registers are saved on it
659 3) the offsets of saved regs
660 4) the offset from the stack pointer to the frame pointer
662 A typical Thumb function prologue would create this stack frame
663 (offsets relative to FP)
664 old SP -> 24 stack parameters
665 20 LR
666 16 R7
667 R7 -> 0 local variables (16 bytes)
668 SP -> -12 additional stack space (12 bytes)
669 The frame size would thus be 36 bytes, and the frame offset would be
670 12 bytes. The frame register is R7.
672 The comments for thumb_skip_prolog() describe the algorithm we use
673 to detect the end of the prolog. */
674 /* *INDENT-ON* */
676 static void
677 thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
678 CORE_ADDR block_addr, struct arm_prologue_cache *cache)
680 CORE_ADDR prologue_start;
681 CORE_ADDR prologue_end;
682 CORE_ADDR current_pc;
684 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
685 &prologue_end))
687 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
689 if (sal.line == 0) /* no line info, use current PC */
690 prologue_end = prev_pc;
691 else if (sal.end < prologue_end) /* next line begins after fn end */
692 prologue_end = sal.end; /* (probably means no prologue) */
694 else
695 /* We're in the boondocks: we have no idea where the start of the
696 function is. */
697 return;
699 prologue_end = min (prologue_end, prev_pc);
701 thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
704 /* This function decodes an ARM function prologue to determine:
705 1) the size of the stack frame
706 2) which registers are saved on it
707 3) the offsets of saved regs
708 4) the offset from the stack pointer to the frame pointer
709 This information is stored in the "extra" fields of the frame_info.
711 There are two basic forms for the ARM prologue. The fixed argument
712 function call will look like:
714 mov ip, sp
715 stmfd sp!, {fp, ip, lr, pc}
716 sub fp, ip, #4
717 [sub sp, sp, #4]
719 Which would create this stack frame (offsets relative to FP):
720 IP -> 4 (caller's stack)
721 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
722 -4 LR (return address in caller)
723 -8 IP (copy of caller's SP)
724 -12 FP (caller's FP)
725 SP -> -28 Local variables
727 The frame size would thus be 32 bytes, and the frame offset would be
728 28 bytes. The stmfd call can also save any of the vN registers it
729 plans to use, which increases the frame size accordingly.
731 Note: The stored PC is 8 off of the STMFD instruction that stored it
732 because the ARM Store instructions always store PC + 8 when you read
733 the PC register.
735 A variable argument function call will look like:
737 mov ip, sp
738 stmfd sp!, {a1, a2, a3, a4}
739 stmfd sp!, {fp, ip, lr, pc}
740 sub fp, ip, #20
742 Which would create this stack frame (offsets relative to FP):
743 IP -> 20 (caller's stack)
744 16 A4
745 12 A3
746 8 A2
747 4 A1
748 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
749 -4 LR (return address in caller)
750 -8 IP (copy of caller's SP)
751 -12 FP (caller's FP)
752 SP -> -28 Local variables
754 The frame size would thus be 48 bytes, and the frame offset would be
755 28 bytes.
757 There is another potential complication, which is that the optimizer
758 will try to separate the store of fp in the "stmfd" instruction from
759 the "sub fp, ip, #NN" instruction. Almost anything can be there, so
760 we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
762 Also, note, the original version of the ARM toolchain claimed that there
763 should be an
765 instruction at the end of the prologue. I have never seen GCC produce
766 this, and the ARM docs don't mention it. We still test for it below in
767 case it happens...
771 static void
772 arm_scan_prologue (struct frame_info *this_frame,
773 struct arm_prologue_cache *cache)
775 struct gdbarch *gdbarch = get_frame_arch (this_frame);
776 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
777 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
778 int regno;
779 CORE_ADDR prologue_start, prologue_end, current_pc;
780 CORE_ADDR prev_pc = get_frame_pc (this_frame);
781 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
782 pv_t regs[ARM_FPS_REGNUM];
783 struct pv_area *stack;
784 struct cleanup *back_to;
785 CORE_ADDR offset;
787 /* Assume there is no frame until proven otherwise. */
788 cache->framereg = ARM_SP_REGNUM;
789 cache->framesize = 0;
791 /* Check for Thumb prologue. */
792 if (arm_frame_is_thumb (this_frame))
794 thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
795 return;
798 /* Find the function prologue. If we can't find the function in
799 the symbol table, peek in the stack frame to find the PC. */
800 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
801 &prologue_end))
803 /* One way to find the end of the prologue (which works well
804 for unoptimized code) is to do the following:
806 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
808 if (sal.line == 0)
809 prologue_end = prev_pc;
810 else if (sal.end < prologue_end)
811 prologue_end = sal.end;
813 This mechanism is very accurate so long as the optimizer
814 doesn't move any instructions from the function body into the
815 prologue. If this happens, sal.end will be the last
816 instruction in the first hunk of prologue code just before
817 the first instruction that the scheduler has moved from
818 the body to the prologue.
820 In order to make sure that we scan all of the prologue
821 instructions, we use a slightly less accurate mechanism which
822 may scan more than necessary. To help compensate for this
823 lack of accuracy, the prologue scanning loop below contains
824 several clauses which'll cause the loop to terminate early if
825 an implausible prologue instruction is encountered.
827 The expression
829 prologue_start + 64
831 is a suitable endpoint since it accounts for the largest
832 possible prologue plus up to five instructions inserted by
833 the scheduler. */
835 if (prologue_end > prologue_start + 64)
837 prologue_end = prologue_start + 64; /* See above. */
840 else
842 /* We have no symbol information. Our only option is to assume this
843 function has a standard stack frame and the normal frame register.
844 Then, we can find the value of our frame pointer on entrance to
845 the callee (or at the present moment if this is the innermost frame).
846 The value stored there should be the address of the stmfd + 8. */
847 CORE_ADDR frame_loc;
848 LONGEST return_value;
850 frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
851 if (!safe_read_memory_integer (frame_loc, 4, byte_order, &return_value))
852 return;
853 else
855 prologue_start = gdbarch_addr_bits_remove
856 (gdbarch, return_value) - 8;
857 prologue_end = prologue_start + 64; /* See above. */
861 if (prev_pc < prologue_end)
862 prologue_end = prev_pc;
864 /* Now search the prologue looking for instructions that set up the
865 frame pointer, adjust the stack pointer, and save registers.
867 Be careful, however, and if it doesn't look like a prologue,
868 don't try to scan it. If, for instance, a frameless function
869 begins with stmfd sp!, then we will tell ourselves there is
870 a frame, which will confuse stack traceback, as well as "finish"
871 and other operations that rely on a knowledge of the stack
872 traceback.
874 In the APCS, the prologue should start with "mov ip, sp" so
875 if we don't see this as the first insn, we will stop.
877 [Note: This doesn't seem to be true any longer, so it's now an
878 optional part of the prologue. - Kevin Buettner, 2001-11-20]
880 [Note further: The "mov ip,sp" only seems to be missing in
881 frameless functions at optimization level "-O2" or above,
882 in which case it is often (but not always) replaced by
883 "str lr, [sp, #-4]!". - Michael Snyder, 2002-04-23] */
885 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
886 regs[regno] = pv_register (regno, 0);
887 stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
888 back_to = make_cleanup_free_pv_area (stack);
890 for (current_pc = prologue_start;
891 current_pc < prologue_end;
892 current_pc += 4)
894 unsigned int insn
895 = read_memory_unsigned_integer (current_pc, 4, byte_order_for_code);
897 if (insn == 0xe1a0c00d) /* mov ip, sp */
899 regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
900 continue;
902 else if ((insn & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
904 unsigned imm = insn & 0xff; /* immediate value */
905 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
906 imm = (imm >> rot) | (imm << (32 - rot));
907 regs[ARM_IP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], imm);
908 continue;
910 else if ((insn & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
912 unsigned imm = insn & 0xff; /* immediate value */
913 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
914 imm = (imm >> rot) | (imm << (32 - rot));
915 regs[ARM_IP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
916 continue;
918 else if (insn == 0xe52de004) /* str lr, [sp, #-4]! */
920 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
921 break;
922 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
923 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[ARM_LR_REGNUM]);
924 continue;
926 else if ((insn & 0xffff0000) == 0xe92d0000)
927 /* stmfd sp!, {..., fp, ip, lr, pc}
929 stmfd sp!, {a1, a2, a3, a4} */
931 int mask = insn & 0xffff;
933 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
934 break;
936 /* Calculate offsets of saved registers. */
937 for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
938 if (mask & (1 << regno))
940 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
941 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
944 else if ((insn & 0xffffc000) == 0xe54b0000 /* strb rx,[r11,#-n] */
945 || (insn & 0xffffc0f0) == 0xe14b00b0 /* strh rx,[r11,#-n] */
946 || (insn & 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
948 /* No need to add this to saved_regs -- it's just an arg reg. */
949 continue;
951 else if ((insn & 0xffffc000) == 0xe5cd0000 /* strb rx,[sp,#n] */
952 || (insn & 0xffffc0f0) == 0xe1cd00b0 /* strh rx,[sp,#n] */
953 || (insn & 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
955 /* No need to add this to saved_regs -- it's just an arg reg. */
956 continue;
958 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
960 unsigned imm = insn & 0xff; /* immediate value */
961 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
962 imm = (imm >> rot) | (imm << (32 - rot));
963 regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
965 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
967 unsigned imm = insn & 0xff; /* immediate value */
968 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
969 imm = (imm >> rot) | (imm << (32 - rot));
970 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
972 else if ((insn & 0xffff7fff) == 0xed6d0103 /* stfe f?, [sp, -#c]! */
973 && gdbarch_tdep (gdbarch)->have_fpa_registers)
975 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
976 break;
978 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
979 regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
980 pv_area_store (stack, regs[ARM_SP_REGNUM], 12, regs[regno]);
982 else if ((insn & 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4, [sp!] */
983 && gdbarch_tdep (gdbarch)->have_fpa_registers)
985 int n_saved_fp_regs;
986 unsigned int fp_start_reg, fp_bound_reg;
988 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
989 break;
991 if ((insn & 0x800) == 0x800) /* N0 is set */
993 if ((insn & 0x40000) == 0x40000) /* N1 is set */
994 n_saved_fp_regs = 3;
995 else
996 n_saved_fp_regs = 1;
998 else
1000 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1001 n_saved_fp_regs = 2;
1002 else
1003 n_saved_fp_regs = 4;
1006 fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
1007 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1008 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
1010 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1011 pv_area_store (stack, regs[ARM_SP_REGNUM], 12,
1012 regs[fp_start_reg++]);
1015 else if ((insn & 0xf0000000) != 0xe0000000)
1016 break; /* Condition not true, exit early */
1017 else if ((insn & 0xfe200000) == 0xe8200000) /* ldm? */
1018 break; /* Don't scan past a block load */
1019 else
1020 /* The optimizer might shove anything into the prologue,
1021 so we just skip what we don't recognize. */
1022 continue;
1025 /* The frame size is just the distance from the frame register
1026 to the original stack pointer. */
1027 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1029 /* Frame pointer is fp. */
1030 cache->framereg = ARM_FP_REGNUM;
1031 cache->framesize = -regs[ARM_FP_REGNUM].k;
1033 else if (pv_is_register (regs[ARM_SP_REGNUM], ARM_SP_REGNUM))
1035 /* Try the stack pointer... this is a bit desperate. */
1036 cache->framereg = ARM_SP_REGNUM;
1037 cache->framesize = -regs[ARM_SP_REGNUM].k;
1039 else
1041 /* We're just out of luck. We don't know where the frame is. */
1042 cache->framereg = -1;
1043 cache->framesize = 0;
1046 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1047 if (pv_area_find_reg (stack, gdbarch, regno, &offset))
1048 cache->saved_regs[regno].addr = offset;
1050 do_cleanups (back_to);
1053 static struct arm_prologue_cache *
1054 arm_make_prologue_cache (struct frame_info *this_frame)
1056 int reg;
1057 struct arm_prologue_cache *cache;
1058 CORE_ADDR unwound_fp;
1060 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1061 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1063 arm_scan_prologue (this_frame, cache);
1065 unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
1066 if (unwound_fp == 0)
1067 return cache;
1069 cache->prev_sp = unwound_fp + cache->framesize;
1071 /* Calculate actual addresses of saved registers using offsets
1072 determined by arm_scan_prologue. */
1073 for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
1074 if (trad_frame_addr_p (cache->saved_regs, reg))
1075 cache->saved_regs[reg].addr += cache->prev_sp;
1077 return cache;
1080 /* Our frame ID for a normal frame is the current function's starting PC
1081 and the caller's SP when we were called. */
1083 static void
1084 arm_prologue_this_id (struct frame_info *this_frame,
1085 void **this_cache,
1086 struct frame_id *this_id)
1088 struct arm_prologue_cache *cache;
1089 struct frame_id id;
1090 CORE_ADDR pc, func;
1092 if (*this_cache == NULL)
1093 *this_cache = arm_make_prologue_cache (this_frame);
1094 cache = *this_cache;
1096 /* This is meant to halt the backtrace at "_start". */
1097 pc = get_frame_pc (this_frame);
1098 if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
1099 return;
1101 /* If we've hit a wall, stop. */
1102 if (cache->prev_sp == 0)
1103 return;
1105 func = get_frame_func (this_frame);
1106 id = frame_id_build (cache->prev_sp, func);
1107 *this_id = id;
1110 static struct value *
1111 arm_prologue_prev_register (struct frame_info *this_frame,
1112 void **this_cache,
1113 int prev_regnum)
1115 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1116 struct arm_prologue_cache *cache;
1118 if (*this_cache == NULL)
1119 *this_cache = arm_make_prologue_cache (this_frame);
1120 cache = *this_cache;
1122 /* If we are asked to unwind the PC, then we need to return the LR
1123 instead. The prologue may save PC, but it will point into this
1124 frame's prologue, not the next frame's resume location. Also
1125 strip the saved T bit. A valid LR may have the low bit set, but
1126 a valid PC never does. */
1127 if (prev_regnum == ARM_PC_REGNUM)
1129 CORE_ADDR lr;
1131 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1132 return frame_unwind_got_constant (this_frame, prev_regnum,
1133 arm_addr_bits_remove (gdbarch, lr));
1136 /* SP is generally not saved to the stack, but this frame is
1137 identified by the next frame's stack pointer at the time of the call.
1138 The value was already reconstructed into PREV_SP. */
1139 if (prev_regnum == ARM_SP_REGNUM)
1140 return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
1142 /* The CPSR may have been changed by the call instruction and by the
1143 called function. The only bit we can reconstruct is the T bit,
1144 by checking the low bit of LR as of the call. This is a reliable
1145 indicator of Thumb-ness except for some ARM v4T pre-interworking
1146 Thumb code, which could get away with a clear low bit as long as
1147 the called function did not use bx. Guess that all other
1148 bits are unchanged; the condition flags are presumably lost,
1149 but the processor status is likely valid. */
1150 if (prev_regnum == ARM_PS_REGNUM)
1152 CORE_ADDR lr, cpsr;
1154 cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
1155 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1156 if (IS_THUMB_ADDR (lr))
1157 cpsr |= CPSR_T;
1158 else
1159 cpsr &= ~CPSR_T;
1160 return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
1163 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1164 prev_regnum);
1167 struct frame_unwind arm_prologue_unwind = {
1168 NORMAL_FRAME,
1169 arm_prologue_this_id,
1170 arm_prologue_prev_register,
1171 NULL,
1172 default_frame_sniffer
1175 static struct arm_prologue_cache *
1176 arm_make_stub_cache (struct frame_info *this_frame)
1178 int reg;
1179 struct arm_prologue_cache *cache;
1180 CORE_ADDR unwound_fp;
1182 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
1183 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1185 cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
1187 return cache;
1190 /* Our frame ID for a stub frame is the current SP and LR. */
1192 static void
1193 arm_stub_this_id (struct frame_info *this_frame,
1194 void **this_cache,
1195 struct frame_id *this_id)
1197 struct arm_prologue_cache *cache;
1199 if (*this_cache == NULL)
1200 *this_cache = arm_make_stub_cache (this_frame);
1201 cache = *this_cache;
1203 *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
1206 static int
1207 arm_stub_unwind_sniffer (const struct frame_unwind *self,
1208 struct frame_info *this_frame,
1209 void **this_prologue_cache)
1211 CORE_ADDR addr_in_block;
1212 char dummy[4];
1214 addr_in_block = get_frame_address_in_block (this_frame);
1215 if (in_plt_section (addr_in_block, NULL)
1216 || target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
1217 return 1;
1219 return 0;
1222 struct frame_unwind arm_stub_unwind = {
1223 NORMAL_FRAME,
1224 arm_stub_this_id,
1225 arm_prologue_prev_register,
1226 NULL,
1227 arm_stub_unwind_sniffer
1230 static CORE_ADDR
1231 arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
1233 struct arm_prologue_cache *cache;
1235 if (*this_cache == NULL)
1236 *this_cache = arm_make_prologue_cache (this_frame);
1237 cache = *this_cache;
1239 return cache->prev_sp - cache->framesize;
1242 struct frame_base arm_normal_base = {
1243 &arm_prologue_unwind,
1244 arm_normal_frame_base,
1245 arm_normal_frame_base,
1246 arm_normal_frame_base
1249 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
1250 dummy frame. The frame ID's base needs to match the TOS value
1251 saved by save_dummy_frame_tos() and returned from
1252 arm_push_dummy_call, and the PC needs to match the dummy frame's
1253 breakpoint. */
1255 static struct frame_id
1256 arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1258 return frame_id_build (get_frame_register_unsigned (this_frame, ARM_SP_REGNUM),
1259 get_frame_pc (this_frame));
1262 /* Given THIS_FRAME, find the previous frame's resume PC (which will
1263 be used to construct the previous frame's ID, after looking up the
1264 containing function). */
1266 static CORE_ADDR
1267 arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1269 CORE_ADDR pc;
1270 pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
1271 return arm_addr_bits_remove (gdbarch, pc);
1274 static CORE_ADDR
1275 arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
1277 return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
1280 static struct value *
1281 arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
1282 int regnum)
1284 struct gdbarch * gdbarch = get_frame_arch (this_frame);
1285 CORE_ADDR lr, cpsr;
1287 switch (regnum)
1289 case ARM_PC_REGNUM:
1290 /* The PC is normally copied from the return column, which
1291 describes saves of LR. However, that version may have an
1292 extra bit set to indicate Thumb state. The bit is not
1293 part of the PC. */
1294 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1295 return frame_unwind_got_constant (this_frame, regnum,
1296 arm_addr_bits_remove (gdbarch, lr));
1298 case ARM_PS_REGNUM:
1299 /* Reconstruct the T bit; see arm_prologue_prev_register for details. */
1300 cpsr = get_frame_register_unsigned (this_frame, regnum);
1301 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1302 if (IS_THUMB_ADDR (lr))
1303 cpsr |= CPSR_T;
1304 else
1305 cpsr &= ~CPSR_T;
1306 return frame_unwind_got_constant (this_frame, regnum, cpsr);
1308 default:
1309 internal_error (__FILE__, __LINE__,
1310 _("Unexpected register %d"), regnum);
1314 static void
1315 arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1316 struct dwarf2_frame_state_reg *reg,
1317 struct frame_info *this_frame)
1319 switch (regnum)
1321 case ARM_PC_REGNUM:
1322 case ARM_PS_REGNUM:
1323 reg->how = DWARF2_FRAME_REG_FN;
1324 reg->loc.fn = arm_dwarf2_prev_register;
1325 break;
1326 case ARM_SP_REGNUM:
1327 reg->how = DWARF2_FRAME_REG_CFA;
1328 break;
1332 /* When arguments must be pushed onto the stack, they go on in reverse
1333 order. The code below implements a FILO (stack) to do this. */
1335 struct stack_item
1337 int len;
1338 struct stack_item *prev;
1339 void *data;
1342 static struct stack_item *
1343 push_stack_item (struct stack_item *prev, void *contents, int len)
1345 struct stack_item *si;
1346 si = xmalloc (sizeof (struct stack_item));
1347 si->data = xmalloc (len);
1348 si->len = len;
1349 si->prev = prev;
1350 memcpy (si->data, contents, len);
1351 return si;
1354 static struct stack_item *
1355 pop_stack_item (struct stack_item *si)
1357 struct stack_item *dead = si;
1358 si = si->prev;
1359 xfree (dead->data);
1360 xfree (dead);
1361 return si;
1365 /* Return the alignment (in bytes) of the given type. */
1367 static int
1368 arm_type_align (struct type *t)
1370 int n;
1371 int align;
1372 int falign;
1374 t = check_typedef (t);
1375 switch (TYPE_CODE (t))
1377 default:
1378 /* Should never happen. */
1379 internal_error (__FILE__, __LINE__, _("unknown type alignment"));
1380 return 4;
1382 case TYPE_CODE_PTR:
1383 case TYPE_CODE_ENUM:
1384 case TYPE_CODE_INT:
1385 case TYPE_CODE_FLT:
1386 case TYPE_CODE_SET:
1387 case TYPE_CODE_RANGE:
1388 case TYPE_CODE_BITSTRING:
1389 case TYPE_CODE_REF:
1390 case TYPE_CODE_CHAR:
1391 case TYPE_CODE_BOOL:
1392 return TYPE_LENGTH (t);
1394 case TYPE_CODE_ARRAY:
1395 case TYPE_CODE_COMPLEX:
1396 /* TODO: What about vector types? */
1397 return arm_type_align (TYPE_TARGET_TYPE (t));
1399 case TYPE_CODE_STRUCT:
1400 case TYPE_CODE_UNION:
1401 align = 1;
1402 for (n = 0; n < TYPE_NFIELDS (t); n++)
1404 falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
1405 if (falign > align)
1406 align = falign;
1408 return align;
1412 /* Possible base types for a candidate for passing and returning in
1413 VFP registers. */
1415 enum arm_vfp_cprc_base_type
1417 VFP_CPRC_UNKNOWN,
1418 VFP_CPRC_SINGLE,
1419 VFP_CPRC_DOUBLE,
1420 VFP_CPRC_VEC64,
1421 VFP_CPRC_VEC128
1424 /* The length of one element of base type B. */
1426 static unsigned
1427 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
1429 switch (b)
1431 case VFP_CPRC_SINGLE:
1432 return 4;
1433 case VFP_CPRC_DOUBLE:
1434 return 8;
1435 case VFP_CPRC_VEC64:
1436 return 8;
1437 case VFP_CPRC_VEC128:
1438 return 16;
1439 default:
1440 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
1441 (int) b);
1445 /* The character ('s', 'd' or 'q') for the type of VFP register used
1446 for passing base type B. */
1448 static int
1449 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
1451 switch (b)
1453 case VFP_CPRC_SINGLE:
1454 return 's';
1455 case VFP_CPRC_DOUBLE:
1456 return 'd';
1457 case VFP_CPRC_VEC64:
1458 return 'd';
1459 case VFP_CPRC_VEC128:
1460 return 'q';
1461 default:
1462 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
1463 (int) b);
1467 /* Determine whether T may be part of a candidate for passing and
1468 returning in VFP registers, ignoring the limit on the total number
1469 of components. If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
1470 classification of the first valid component found; if it is not
1471 VFP_CPRC_UNKNOWN, all components must have the same classification
1472 as *BASE_TYPE. If it is found that T contains a type not permitted
1473 for passing and returning in VFP registers, a type differently
1474 classified from *BASE_TYPE, or two types differently classified
1475 from each other, return -1, otherwise return the total number of
1476 base-type elements found (possibly 0 in an empty structure or
1477 array). Vectors and complex types are not currently supported,
1478 matching the generic AAPCS support. */
1480 static int
1481 arm_vfp_cprc_sub_candidate (struct type *t,
1482 enum arm_vfp_cprc_base_type *base_type)
1484 t = check_typedef (t);
1485 switch (TYPE_CODE (t))
1487 case TYPE_CODE_FLT:
1488 switch (TYPE_LENGTH (t))
1490 case 4:
1491 if (*base_type == VFP_CPRC_UNKNOWN)
1492 *base_type = VFP_CPRC_SINGLE;
1493 else if (*base_type != VFP_CPRC_SINGLE)
1494 return -1;
1495 return 1;
1497 case 8:
1498 if (*base_type == VFP_CPRC_UNKNOWN)
1499 *base_type = VFP_CPRC_DOUBLE;
1500 else if (*base_type != VFP_CPRC_DOUBLE)
1501 return -1;
1502 return 1;
1504 default:
1505 return -1;
1507 break;
1509 case TYPE_CODE_ARRAY:
1511 int count;
1512 unsigned unitlen;
1513 count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t), base_type);
1514 if (count == -1)
1515 return -1;
1516 if (TYPE_LENGTH (t) == 0)
1518 gdb_assert (count == 0);
1519 return 0;
1521 else if (count == 0)
1522 return -1;
1523 unitlen = arm_vfp_cprc_unit_length (*base_type);
1524 gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
1525 return TYPE_LENGTH (t) / unitlen;
1527 break;
1529 case TYPE_CODE_STRUCT:
1531 int count = 0;
1532 unsigned unitlen;
1533 int i;
1534 for (i = 0; i < TYPE_NFIELDS (t); i++)
1536 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
1537 base_type);
1538 if (sub_count == -1)
1539 return -1;
1540 count += sub_count;
1542 if (TYPE_LENGTH (t) == 0)
1544 gdb_assert (count == 0);
1545 return 0;
1547 else if (count == 0)
1548 return -1;
1549 unitlen = arm_vfp_cprc_unit_length (*base_type);
1550 if (TYPE_LENGTH (t) != unitlen * count)
1551 return -1;
1552 return count;
1555 case TYPE_CODE_UNION:
1557 int count = 0;
1558 unsigned unitlen;
1559 int i;
1560 for (i = 0; i < TYPE_NFIELDS (t); i++)
1562 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
1563 base_type);
1564 if (sub_count == -1)
1565 return -1;
1566 count = (count > sub_count ? count : sub_count);
1568 if (TYPE_LENGTH (t) == 0)
1570 gdb_assert (count == 0);
1571 return 0;
1573 else if (count == 0)
1574 return -1;
1575 unitlen = arm_vfp_cprc_unit_length (*base_type);
1576 if (TYPE_LENGTH (t) != unitlen * count)
1577 return -1;
1578 return count;
1581 default:
1582 break;
1585 return -1;
1588 /* Determine whether T is a VFP co-processor register candidate (CPRC)
1589 if passed to or returned from a non-variadic function with the VFP
1590 ABI in effect. Return 1 if it is, 0 otherwise. If it is, set
1591 *BASE_TYPE to the base type for T and *COUNT to the number of
1592 elements of that base type before returning. */
1594 static int
1595 arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
1596 int *count)
1598 enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
1599 int c = arm_vfp_cprc_sub_candidate (t, &b);
1600 if (c <= 0 || c > 4)
1601 return 0;
1602 *base_type = b;
1603 *count = c;
1604 return 1;
1607 /* Return 1 if the VFP ABI should be used for passing arguments to and
1608 returning values from a function of type FUNC_TYPE, 0
1609 otherwise. */
1611 static int
1612 arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
1614 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1615 /* Variadic functions always use the base ABI. Assume that functions
1616 without debug info are not variadic. */
1617 if (func_type && TYPE_VARARGS (check_typedef (func_type)))
1618 return 0;
1619 /* The VFP ABI is only supported as a variant of AAPCS. */
1620 if (tdep->arm_abi != ARM_ABI_AAPCS)
1621 return 0;
1622 return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
1625 /* We currently only support passing parameters in integer registers, which
1626 conforms with GCC's default model, and VFP argument passing following
1627 the VFP variant of AAPCS. Several other variants exist and
1628 we should probably support some of them based on the selected ABI. */
1630 static CORE_ADDR
1631 arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1632 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
1633 struct value **args, CORE_ADDR sp, int struct_return,
1634 CORE_ADDR struct_addr)
1636 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1637 int argnum;
1638 int argreg;
1639 int nstack;
1640 struct stack_item *si = NULL;
1641 int use_vfp_abi;
1642 struct type *ftype;
1643 unsigned vfp_regs_free = (1 << 16) - 1;
1645 /* Determine the type of this function and whether the VFP ABI
1646 applies. */
1647 ftype = check_typedef (value_type (function));
1648 if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
1649 ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
1650 use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
1652 /* Set the return address. For the ARM, the return breakpoint is
1653 always at BP_ADDR. */
1654 if (arm_pc_is_thumb (bp_addr))
1655 bp_addr |= 1;
1656 regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
1658 /* Walk through the list of args and determine how large a temporary
1659 stack is required. Need to take care here as structs may be
1660 passed on the stack, and we have to to push them. */
1661 nstack = 0;
1663 argreg = ARM_A1_REGNUM;
1664 nstack = 0;
1666 /* The struct_return pointer occupies the first parameter
1667 passing register. */
1668 if (struct_return)
1670 if (arm_debug)
1671 fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
1672 gdbarch_register_name (gdbarch, argreg),
1673 paddress (gdbarch, struct_addr));
1674 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
1675 argreg++;
1678 for (argnum = 0; argnum < nargs; argnum++)
1680 int len;
1681 struct type *arg_type;
1682 struct type *target_type;
1683 enum type_code typecode;
1684 bfd_byte *val;
1685 int align;
1686 enum arm_vfp_cprc_base_type vfp_base_type;
1687 int vfp_base_count;
1688 int may_use_core_reg = 1;
1690 arg_type = check_typedef (value_type (args[argnum]));
1691 len = TYPE_LENGTH (arg_type);
1692 target_type = TYPE_TARGET_TYPE (arg_type);
1693 typecode = TYPE_CODE (arg_type);
1694 val = value_contents_writeable (args[argnum]);
1696 align = arm_type_align (arg_type);
1697 /* Round alignment up to a whole number of words. */
1698 align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
1699 /* Different ABIs have different maximum alignments. */
1700 if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
1702 /* The APCS ABI only requires word alignment. */
1703 align = INT_REGISTER_SIZE;
1705 else
1707 /* The AAPCS requires at most doubleword alignment. */
1708 if (align > INT_REGISTER_SIZE * 2)
1709 align = INT_REGISTER_SIZE * 2;
1712 if (use_vfp_abi
1713 && arm_vfp_call_candidate (arg_type, &vfp_base_type,
1714 &vfp_base_count))
1716 int regno;
1717 int unit_length;
1718 int shift;
1719 unsigned mask;
1721 /* Because this is a CPRC it cannot go in a core register or
1722 cause a core register to be skipped for alignment.
1723 Either it goes in VFP registers and the rest of this loop
1724 iteration is skipped for this argument, or it goes on the
1725 stack (and the stack alignment code is correct for this
1726 case). */
1727 may_use_core_reg = 0;
1729 unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
1730 shift = unit_length / 4;
1731 mask = (1 << (shift * vfp_base_count)) - 1;
1732 for (regno = 0; regno < 16; regno += shift)
1733 if (((vfp_regs_free >> regno) & mask) == mask)
1734 break;
1736 if (regno < 16)
1738 int reg_char;
1739 int reg_scaled;
1740 int i;
1742 vfp_regs_free &= ~(mask << regno);
1743 reg_scaled = regno / shift;
1744 reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
1745 for (i = 0; i < vfp_base_count; i++)
1747 char name_buf[4];
1748 int regnum;
1749 if (reg_char == 'q')
1750 arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
1751 val + i * unit_length);
1752 else
1754 sprintf (name_buf, "%c%d", reg_char, reg_scaled + i);
1755 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
1756 strlen (name_buf));
1757 regcache_cooked_write (regcache, regnum,
1758 val + i * unit_length);
1761 continue;
1763 else
1765 /* This CPRC could not go in VFP registers, so all VFP
1766 registers are now marked as used. */
1767 vfp_regs_free = 0;
1771 /* Push stack padding for dowubleword alignment. */
1772 if (nstack & (align - 1))
1774 si = push_stack_item (si, val, INT_REGISTER_SIZE);
1775 nstack += INT_REGISTER_SIZE;
1778 /* Doubleword aligned quantities must go in even register pairs. */
1779 if (may_use_core_reg
1780 && argreg <= ARM_LAST_ARG_REGNUM
1781 && align > INT_REGISTER_SIZE
1782 && argreg & 1)
1783 argreg++;
1785 /* If the argument is a pointer to a function, and it is a
1786 Thumb function, create a LOCAL copy of the value and set
1787 the THUMB bit in it. */
1788 if (TYPE_CODE_PTR == typecode
1789 && target_type != NULL
1790 && TYPE_CODE_FUNC == TYPE_CODE (target_type))
1792 CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
1793 if (arm_pc_is_thumb (regval))
1795 val = alloca (len);
1796 store_unsigned_integer (val, len, byte_order,
1797 MAKE_THUMB_ADDR (regval));
1801 /* Copy the argument to general registers or the stack in
1802 register-sized pieces. Large arguments are split between
1803 registers and stack. */
1804 while (len > 0)
1806 int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
1808 if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
1810 /* The argument is being passed in a general purpose
1811 register. */
1812 CORE_ADDR regval
1813 = extract_unsigned_integer (val, partial_len, byte_order);
1814 if (byte_order == BFD_ENDIAN_BIG)
1815 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
1816 if (arm_debug)
1817 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
1818 argnum,
1819 gdbarch_register_name
1820 (gdbarch, argreg),
1821 phex (regval, INT_REGISTER_SIZE));
1822 regcache_cooked_write_unsigned (regcache, argreg, regval);
1823 argreg++;
1825 else
1827 /* Push the arguments onto the stack. */
1828 if (arm_debug)
1829 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
1830 argnum, nstack);
1831 si = push_stack_item (si, val, INT_REGISTER_SIZE);
1832 nstack += INT_REGISTER_SIZE;
1835 len -= partial_len;
1836 val += partial_len;
1839 /* If we have an odd number of words to push, then decrement the stack
1840 by one word now, so first stack argument will be dword aligned. */
1841 if (nstack & 4)
1842 sp -= 4;
1844 while (si)
1846 sp -= si->len;
1847 write_memory (sp, si->data, si->len);
1848 si = pop_stack_item (si);
1851 /* Finally, update teh SP register. */
1852 regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
1854 return sp;
1858 /* Always align the frame to an 8-byte boundary. This is required on
1859 some platforms and harmless on the rest. */
1861 static CORE_ADDR
1862 arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1864 /* Align the stack to eight bytes. */
1865 return sp & ~ (CORE_ADDR) 7;
1868 static void
1869 print_fpu_flags (int flags)
1871 if (flags & (1 << 0))
1872 fputs ("IVO ", stdout);
1873 if (flags & (1 << 1))
1874 fputs ("DVZ ", stdout);
1875 if (flags & (1 << 2))
1876 fputs ("OFL ", stdout);
1877 if (flags & (1 << 3))
1878 fputs ("UFL ", stdout);
1879 if (flags & (1 << 4))
1880 fputs ("INX ", stdout);
1881 putchar ('\n');
1884 /* Print interesting information about the floating point processor
1885 (if present) or emulator. */
1886 static void
1887 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
1888 struct frame_info *frame, const char *args)
1890 unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
1891 int type;
1893 type = (status >> 24) & 127;
1894 if (status & (1 << 31))
1895 printf (_("Hardware FPU type %d\n"), type);
1896 else
1897 printf (_("Software FPU type %d\n"), type);
1898 /* i18n: [floating point unit] mask */
1899 fputs (_("mask: "), stdout);
1900 print_fpu_flags (status >> 16);
1901 /* i18n: [floating point unit] flags */
1902 fputs (_("flags: "), stdout);
1903 print_fpu_flags (status);
1906 /* Construct the ARM extended floating point type. */
1907 static struct type *
1908 arm_ext_type (struct gdbarch *gdbarch)
1910 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1912 if (!tdep->arm_ext_type)
1913 tdep->arm_ext_type
1914 = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
1915 floatformats_arm_ext);
1917 return tdep->arm_ext_type;
1920 static struct type *
1921 arm_neon_double_type (struct gdbarch *gdbarch)
1923 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1925 if (tdep->neon_double_type == NULL)
1927 struct type *t, *elem;
1929 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
1930 TYPE_CODE_UNION);
1931 elem = builtin_type (gdbarch)->builtin_uint8;
1932 append_composite_type_field (t, "u8", init_vector_type (elem, 8));
1933 elem = builtin_type (gdbarch)->builtin_uint16;
1934 append_composite_type_field (t, "u16", init_vector_type (elem, 4));
1935 elem = builtin_type (gdbarch)->builtin_uint32;
1936 append_composite_type_field (t, "u32", init_vector_type (elem, 2));
1937 elem = builtin_type (gdbarch)->builtin_uint64;
1938 append_composite_type_field (t, "u64", elem);
1939 elem = builtin_type (gdbarch)->builtin_float;
1940 append_composite_type_field (t, "f32", init_vector_type (elem, 2));
1941 elem = builtin_type (gdbarch)->builtin_double;
1942 append_composite_type_field (t, "f64", elem);
1944 TYPE_VECTOR (t) = 1;
1945 TYPE_NAME (t) = "neon_d";
1946 tdep->neon_double_type = t;
1949 return tdep->neon_double_type;
1952 /* FIXME: The vector types are not correctly ordered on big-endian
1953 targets. Just as s0 is the low bits of d0, d0[0] is also the low
1954 bits of d0 - regardless of what unit size is being held in d0. So
1955 the offset of the first uint8 in d0 is 7, but the offset of the
1956 first float is 4. This code works as-is for little-endian
1957 targets. */
1959 static struct type *
1960 arm_neon_quad_type (struct gdbarch *gdbarch)
1962 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1964 if (tdep->neon_quad_type == NULL)
1966 struct type *t, *elem;
1968 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
1969 TYPE_CODE_UNION);
1970 elem = builtin_type (gdbarch)->builtin_uint8;
1971 append_composite_type_field (t, "u8", init_vector_type (elem, 16));
1972 elem = builtin_type (gdbarch)->builtin_uint16;
1973 append_composite_type_field (t, "u16", init_vector_type (elem, 8));
1974 elem = builtin_type (gdbarch)->builtin_uint32;
1975 append_composite_type_field (t, "u32", init_vector_type (elem, 4));
1976 elem = builtin_type (gdbarch)->builtin_uint64;
1977 append_composite_type_field (t, "u64", init_vector_type (elem, 2));
1978 elem = builtin_type (gdbarch)->builtin_float;
1979 append_composite_type_field (t, "f32", init_vector_type (elem, 4));
1980 elem = builtin_type (gdbarch)->builtin_double;
1981 append_composite_type_field (t, "f64", init_vector_type (elem, 2));
1983 TYPE_VECTOR (t) = 1;
1984 TYPE_NAME (t) = "neon_q";
1985 tdep->neon_quad_type = t;
1988 return tdep->neon_quad_type;
1991 /* Return the GDB type object for the "standard" data type of data in
1992 register N. */
1994 static struct type *
1995 arm_register_type (struct gdbarch *gdbarch, int regnum)
1997 int num_regs = gdbarch_num_regs (gdbarch);
1999 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
2000 && regnum >= num_regs && regnum < num_regs + 32)
2001 return builtin_type (gdbarch)->builtin_float;
2003 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
2004 && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
2005 return arm_neon_quad_type (gdbarch);
2007 /* If the target description has register information, we are only
2008 in this function so that we can override the types of
2009 double-precision registers for NEON. */
2010 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
2012 struct type *t = tdesc_register_type (gdbarch, regnum);
2014 if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
2015 && TYPE_CODE (t) == TYPE_CODE_FLT
2016 && gdbarch_tdep (gdbarch)->have_neon)
2017 return arm_neon_double_type (gdbarch);
2018 else
2019 return t;
2022 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
2024 if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
2025 return builtin_type (gdbarch)->builtin_void;
2027 return arm_ext_type (gdbarch);
2029 else if (regnum == ARM_SP_REGNUM)
2030 return builtin_type (gdbarch)->builtin_data_ptr;
2031 else if (regnum == ARM_PC_REGNUM)
2032 return builtin_type (gdbarch)->builtin_func_ptr;
2033 else if (regnum >= ARRAY_SIZE (arm_register_names))
2034 /* These registers are only supported on targets which supply
2035 an XML description. */
2036 return builtin_type (gdbarch)->builtin_int0;
2037 else
2038 return builtin_type (gdbarch)->builtin_uint32;
2041 /* Map a DWARF register REGNUM onto the appropriate GDB register
2042 number. */
2044 static int
2045 arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
2047 /* Core integer regs. */
2048 if (reg >= 0 && reg <= 15)
2049 return reg;
2051 /* Legacy FPA encoding. These were once used in a way which
2052 overlapped with VFP register numbering, so their use is
2053 discouraged, but GDB doesn't support the ARM toolchain
2054 which used them for VFP. */
2055 if (reg >= 16 && reg <= 23)
2056 return ARM_F0_REGNUM + reg - 16;
2058 /* New assignments for the FPA registers. */
2059 if (reg >= 96 && reg <= 103)
2060 return ARM_F0_REGNUM + reg - 96;
2062 /* WMMX register assignments. */
2063 if (reg >= 104 && reg <= 111)
2064 return ARM_WCGR0_REGNUM + reg - 104;
2066 if (reg >= 112 && reg <= 127)
2067 return ARM_WR0_REGNUM + reg - 112;
2069 if (reg >= 192 && reg <= 199)
2070 return ARM_WC0_REGNUM + reg - 192;
2072 /* VFP v2 registers. A double precision value is actually
2073 in d1 rather than s2, but the ABI only defines numbering
2074 for the single precision registers. This will "just work"
2075 in GDB for little endian targets (we'll read eight bytes,
2076 starting in s0 and then progressing to s1), but will be
2077 reversed on big endian targets with VFP. This won't
2078 be a problem for the new Neon quad registers; you're supposed
2079 to use DW_OP_piece for those. */
2080 if (reg >= 64 && reg <= 95)
2082 char name_buf[4];
2084 sprintf (name_buf, "s%d", reg - 64);
2085 return user_reg_map_name_to_regnum (gdbarch, name_buf,
2086 strlen (name_buf));
2089 /* VFP v3 / Neon registers. This range is also used for VFP v2
2090 registers, except that it now describes d0 instead of s0. */
2091 if (reg >= 256 && reg <= 287)
2093 char name_buf[4];
2095 sprintf (name_buf, "d%d", reg - 256);
2096 return user_reg_map_name_to_regnum (gdbarch, name_buf,
2097 strlen (name_buf));
2100 return -1;
2103 /* Map GDB internal REGNUM onto the Arm simulator register numbers. */
2104 static int
2105 arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
2107 int reg = regnum;
2108 gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
2110 if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
2111 return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
2113 if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
2114 return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
2116 if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
2117 return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
2119 if (reg < NUM_GREGS)
2120 return SIM_ARM_R0_REGNUM + reg;
2121 reg -= NUM_GREGS;
2123 if (reg < NUM_FREGS)
2124 return SIM_ARM_FP0_REGNUM + reg;
2125 reg -= NUM_FREGS;
2127 if (reg < NUM_SREGS)
2128 return SIM_ARM_FPS_REGNUM + reg;
2129 reg -= NUM_SREGS;
2131 internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
2134 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
2135 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
2136 It is thought that this is is the floating-point register format on
2137 little-endian systems. */
2139 static void
2140 convert_from_extended (const struct floatformat *fmt, const void *ptr,
2141 void *dbl, int endianess)
2143 DOUBLEST d;
2145 if (endianess == BFD_ENDIAN_BIG)
2146 floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
2147 else
2148 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
2149 ptr, &d);
2150 floatformat_from_doublest (fmt, &d, dbl);
2153 static void
2154 convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr,
2155 int endianess)
2157 DOUBLEST d;
2159 floatformat_to_doublest (fmt, ptr, &d);
2160 if (endianess == BFD_ENDIAN_BIG)
2161 floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
2162 else
2163 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
2164 &d, dbl);
2167 static int
2168 condition_true (unsigned long cond, unsigned long status_reg)
2170 if (cond == INST_AL || cond == INST_NV)
2171 return 1;
2173 switch (cond)
2175 case INST_EQ:
2176 return ((status_reg & FLAG_Z) != 0);
2177 case INST_NE:
2178 return ((status_reg & FLAG_Z) == 0);
2179 case INST_CS:
2180 return ((status_reg & FLAG_C) != 0);
2181 case INST_CC:
2182 return ((status_reg & FLAG_C) == 0);
2183 case INST_MI:
2184 return ((status_reg & FLAG_N) != 0);
2185 case INST_PL:
2186 return ((status_reg & FLAG_N) == 0);
2187 case INST_VS:
2188 return ((status_reg & FLAG_V) != 0);
2189 case INST_VC:
2190 return ((status_reg & FLAG_V) == 0);
2191 case INST_HI:
2192 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
2193 case INST_LS:
2194 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
2195 case INST_GE:
2196 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
2197 case INST_LT:
2198 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
2199 case INST_GT:
2200 return (((status_reg & FLAG_Z) == 0)
2201 && (((status_reg & FLAG_N) == 0)
2202 == ((status_reg & FLAG_V) == 0)));
2203 case INST_LE:
2204 return (((status_reg & FLAG_Z) != 0)
2205 || (((status_reg & FLAG_N) == 0)
2206 != ((status_reg & FLAG_V) == 0)));
2208 return 1;
2211 /* Support routines for single stepping. Calculate the next PC value. */
2212 #define submask(x) ((1L << ((x) + 1)) - 1)
2213 #define bit(obj,st) (((obj) >> (st)) & 1)
2214 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
2215 #define sbits(obj,st,fn) \
2216 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
2217 #define BranchDest(addr,instr) \
2218 ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
2219 #define ARM_PC_32 1
2221 static unsigned long
2222 shifted_reg_val (struct frame_info *frame, unsigned long inst, int carry,
2223 unsigned long pc_val, unsigned long status_reg)
2225 unsigned long res, shift;
2226 int rm = bits (inst, 0, 3);
2227 unsigned long shifttype = bits (inst, 5, 6);
2229 if (bit (inst, 4))
2231 int rs = bits (inst, 8, 11);
2232 shift = (rs == 15 ? pc_val + 8
2233 : get_frame_register_unsigned (frame, rs)) & 0xFF;
2235 else
2236 shift = bits (inst, 7, 11);
2238 res = (rm == 15
2239 ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
2240 + (bit (inst, 4) ? 12 : 8))
2241 : get_frame_register_unsigned (frame, rm));
2243 switch (shifttype)
2245 case 0: /* LSL */
2246 res = shift >= 32 ? 0 : res << shift;
2247 break;
2249 case 1: /* LSR */
2250 res = shift >= 32 ? 0 : res >> shift;
2251 break;
2253 case 2: /* ASR */
2254 if (shift >= 32)
2255 shift = 31;
2256 res = ((res & 0x80000000L)
2257 ? ~((~res) >> shift) : res >> shift);
2258 break;
2260 case 3: /* ROR/RRX */
2261 shift &= 31;
2262 if (shift == 0)
2263 res = (res >> 1) | (carry ? 0x80000000L : 0);
2264 else
2265 res = (res >> shift) | (res << (32 - shift));
2266 break;
2269 return res & 0xffffffff;
2272 /* Return number of 1-bits in VAL. */
2274 static int
2275 bitcount (unsigned long val)
2277 int nbits;
2278 for (nbits = 0; val != 0; nbits++)
2279 val &= val - 1; /* delete rightmost 1-bit in val */
2280 return nbits;
2283 /* Return the size in bytes of the complete Thumb instruction whose
2284 first halfword is INST1. */
2286 static int
2287 thumb_insn_size (unsigned short inst1)
2289 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
2290 return 4;
2291 else
2292 return 2;
2295 static int
2296 thumb_advance_itstate (unsigned int itstate)
2298 /* Preserve IT[7:5], the first three bits of the condition. Shift
2299 the upcoming condition flags left by one bit. */
2300 itstate = (itstate & 0xe0) | ((itstate << 1) & 0x1f);
2302 /* If we have finished the IT block, clear the state. */
2303 if ((itstate & 0x0f) == 0)
2304 itstate = 0;
2306 return itstate;
2309 /* Find the next PC after the current instruction executes. In some
2310 cases we can not statically determine the answer (see the IT state
2311 handling in this function); in that case, a breakpoint may be
2312 inserted in addition to the returned PC, which will be used to set
2313 another breakpoint by our caller. */
2315 static CORE_ADDR
2316 thumb_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
2318 struct gdbarch *gdbarch = get_frame_arch (frame);
2319 struct address_space *aspace = get_frame_address_space (frame);
2320 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2321 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2322 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
2323 unsigned short inst1;
2324 CORE_ADDR nextpc = pc + 2; /* default is next instruction */
2325 unsigned long offset;
2326 ULONGEST status, itstate;
2328 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2330 /* Thumb-2 conditional execution support. There are eight bits in
2331 the CPSR which describe conditional execution state. Once
2332 reconstructed (they're in a funny order), the low five bits
2333 describe the low bit of the condition for each instruction and
2334 how many instructions remain. The high three bits describe the
2335 base condition. One of the low four bits will be set if an IT
2336 block is active. These bits read as zero on earlier
2337 processors. */
2338 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
2339 itstate = ((status >> 8) & 0xfc) | ((status >> 25) & 0x3);
2341 /* If-Then handling. On GNU/Linux, where this routine is used, we
2342 use an undefined instruction as a breakpoint. Unlike BKPT, IT
2343 can disable execution of the undefined instruction. So we might
2344 miss the breakpoint if we set it on a skipped conditional
2345 instruction. Because conditional instructions can change the
2346 flags, affecting the execution of further instructions, we may
2347 need to set two breakpoints. */
2349 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint != NULL)
2351 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
2353 /* An IT instruction. Because this instruction does not
2354 modify the flags, we can accurately predict the next
2355 executed instruction. */
2356 itstate = inst1 & 0x00ff;
2357 pc += thumb_insn_size (inst1);
2359 while (itstate != 0 && ! condition_true (itstate >> 4, status))
2361 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2362 pc += thumb_insn_size (inst1);
2363 itstate = thumb_advance_itstate (itstate);
2366 return pc;
2368 else if (itstate != 0)
2370 /* We are in a conditional block. Check the condition. */
2371 if (! condition_true (itstate >> 4, status))
2373 /* Advance to the next executed instruction. */
2374 pc += thumb_insn_size (inst1);
2375 itstate = thumb_advance_itstate (itstate);
2377 while (itstate != 0 && ! condition_true (itstate >> 4, status))
2379 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2380 pc += thumb_insn_size (inst1);
2381 itstate = thumb_advance_itstate (itstate);
2384 return pc;
2386 else if ((itstate & 0x0f) == 0x08)
2388 /* This is the last instruction of the conditional
2389 block, and it is executed. We can handle it normally
2390 because the following instruction is not conditional,
2391 and we must handle it normally because it is
2392 permitted to branch. Fall through. */
2394 else
2396 int cond_negated;
2398 /* There are conditional instructions after this one.
2399 If this instruction modifies the flags, then we can
2400 not predict what the next executed instruction will
2401 be. Fortunately, this instruction is architecturally
2402 forbidden to branch; we know it will fall through.
2403 Start by skipping past it. */
2404 pc += thumb_insn_size (inst1);
2405 itstate = thumb_advance_itstate (itstate);
2407 /* Set a breakpoint on the following instruction. */
2408 gdb_assert ((itstate & 0x0f) != 0);
2409 insert_single_step_breakpoint (gdbarch, aspace, pc);
2410 cond_negated = (itstate >> 4) & 1;
2412 /* Skip all following instructions with the same
2413 condition. If there is a later instruction in the IT
2414 block with the opposite condition, set the other
2415 breakpoint there. If not, then set a breakpoint on
2416 the instruction after the IT block. */
2419 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2420 pc += thumb_insn_size (inst1);
2421 itstate = thumb_advance_itstate (itstate);
2423 while (itstate != 0 && ((itstate >> 4) & 1) == cond_negated);
2425 return pc;
2429 else if (itstate & 0x0f)
2431 /* We are in a conditional block. Check the condition. */
2432 int cond = itstate >> 4;
2434 if (! condition_true (cond, status))
2436 /* Advance to the next instruction. All the 32-bit
2437 instructions share a common prefix. */
2438 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
2439 return pc + 4;
2440 else
2441 return pc + 2;
2444 /* Otherwise, handle the instruction normally. */
2447 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
2449 CORE_ADDR sp;
2451 /* Fetch the saved PC from the stack. It's stored above
2452 all of the other registers. */
2453 offset = bitcount (bits (inst1, 0, 7)) * INT_REGISTER_SIZE;
2454 sp = get_frame_register_unsigned (frame, ARM_SP_REGNUM);
2455 nextpc = read_memory_unsigned_integer (sp + offset, 4, byte_order);
2456 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
2457 if (nextpc == pc)
2458 error (_("Infinite loop detected"));
2460 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
2462 unsigned long cond = bits (inst1, 8, 11);
2463 if (cond != 0x0f && condition_true (cond, status)) /* 0x0f = SWI */
2464 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
2466 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
2468 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
2470 else if ((inst1 & 0xe000) == 0xe000) /* 32-bit instruction */
2472 unsigned short inst2;
2473 inst2 = read_memory_unsigned_integer (pc + 2, 2, byte_order_for_code);
2475 /* Default to the next instruction. */
2476 nextpc = pc + 4;
2478 if ((inst1 & 0xf800) == 0xf000 && (inst2 & 0x8000) == 0x8000)
2480 /* Branches and miscellaneous control instructions. */
2482 if ((inst2 & 0x1000) != 0 || (inst2 & 0xd001) == 0xc000)
2484 /* B, BL, BLX. */
2485 int j1, j2, imm1, imm2;
2487 imm1 = sbits (inst1, 0, 10);
2488 imm2 = bits (inst2, 0, 10);
2489 j1 = bit (inst2, 13);
2490 j2 = bit (inst2, 11);
2492 offset = ((imm1 << 12) + (imm2 << 1));
2493 offset ^= ((!j2) << 22) | ((!j1) << 23);
2495 nextpc = pc_val + offset;
2496 /* For BLX make sure to clear the low bits. */
2497 if (bit (inst2, 12) == 0)
2498 nextpc = nextpc & 0xfffffffc;
2500 else if (inst1 == 0xf3de && (inst2 & 0xff00) == 0x3f00)
2502 /* SUBS PC, LR, #imm8. */
2503 nextpc = get_frame_register_unsigned (frame, ARM_LR_REGNUM);
2504 nextpc -= inst2 & 0x00ff;
2506 else if ((inst2 & 0xd000) == 0xc000 && (inst1 & 0x0380) != 0x0380)
2508 /* Conditional branch. */
2509 if (condition_true (bits (inst1, 6, 9), status))
2511 int sign, j1, j2, imm1, imm2;
2513 sign = sbits (inst1, 10, 10);
2514 imm1 = bits (inst1, 0, 5);
2515 imm2 = bits (inst2, 0, 10);
2516 j1 = bit (inst2, 13);
2517 j2 = bit (inst2, 11);
2519 offset = (sign << 20) + (j2 << 19) + (j1 << 18);
2520 offset += (imm1 << 12) + (imm2 << 1);
2522 nextpc = pc_val + offset;
2526 else if ((inst1 & 0xfe50) == 0xe810)
2528 /* Load multiple or RFE. */
2529 int rn, offset, load_pc = 1;
2531 rn = bits (inst1, 0, 3);
2532 if (bit (inst1, 7) && !bit (inst1, 8))
2534 /* LDMIA or POP */
2535 if (!bit (inst2, 15))
2536 load_pc = 0;
2537 offset = bitcount (inst2) * 4 - 4;
2539 else if (!bit (inst1, 7) && bit (inst1, 8))
2541 /* LDMDB */
2542 if (!bit (inst2, 15))
2543 load_pc = 0;
2544 offset = -4;
2546 else if (bit (inst1, 7) && bit (inst1, 8))
2548 /* RFEIA */
2549 offset = 0;
2551 else if (!bit (inst1, 7) && !bit (inst1, 8))
2553 /* RFEDB */
2554 offset = -8;
2556 else
2557 load_pc = 0;
2559 if (load_pc)
2561 CORE_ADDR addr = get_frame_register_unsigned (frame, rn);
2562 nextpc = get_frame_memory_unsigned (frame, addr + offset, 4);
2565 else if ((inst1 & 0xffef) == 0xea4f && (inst2 & 0xfff0) == 0x0f00)
2567 /* MOV PC or MOVS PC. */
2568 nextpc = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2570 else if ((inst1 & 0xff70) == 0xf850 && (inst2 & 0xf000) == 0xf000)
2572 /* LDR PC. */
2573 CORE_ADDR base;
2574 int rn, load_pc = 1;
2576 rn = bits (inst1, 0, 3);
2577 base = get_frame_register_unsigned (frame, rn);
2578 if (rn == 15)
2580 base = (base + 4) & ~(CORE_ADDR) 0x3;
2581 if (bit (inst1, 7))
2582 base += bits (inst2, 0, 11);
2583 else
2584 base -= bits (inst2, 0, 11);
2586 else if (bit (inst1, 7))
2587 base += bits (inst2, 0, 11);
2588 else if (bit (inst2, 11))
2590 if (bit (inst2, 10))
2592 if (bit (inst2, 9))
2593 base += bits (inst2, 0, 7);
2594 else
2595 base -= bits (inst2, 0, 7);
2598 else if ((inst2 & 0x0fc0) == 0x0000)
2600 int shift = bits (inst2, 4, 5), rm = bits (inst2, 0, 3);
2601 base += get_frame_register_unsigned (frame, rm) << shift;
2603 else
2604 /* Reserved. */
2605 load_pc = 0;
2607 if (load_pc)
2608 nextpc = get_frame_memory_unsigned (frame, base, 4);
2610 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
2612 /* TBB. */
2613 CORE_ADDR table, offset, length;
2615 table = get_frame_register_unsigned (frame, bits (inst1, 0, 3));
2616 offset = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2617 length = 2 * get_frame_memory_unsigned (frame, table + offset, 1);
2618 nextpc = pc_val + length;
2620 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
2622 /* TBH. */
2623 CORE_ADDR table, offset, length;
2625 table = get_frame_register_unsigned (frame, bits (inst1, 0, 3));
2626 offset = 2 * get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2627 length = 2 * get_frame_memory_unsigned (frame, table + offset, 2);
2628 nextpc = pc_val + length;
2631 else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */
2633 if (bits (inst1, 3, 6) == 0x0f)
2634 nextpc = pc_val;
2635 else
2636 nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
2638 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
2639 if (nextpc == pc)
2640 error (_("Infinite loop detected"));
2642 else if ((inst1 & 0xf500) == 0xb100)
2644 /* CBNZ or CBZ. */
2645 int imm = (bit (inst1, 9) << 6) + (bits (inst1, 3, 7) << 1);
2646 ULONGEST reg = get_frame_register_unsigned (frame, bits (inst1, 0, 2));
2648 if (bit (inst1, 11) && reg != 0)
2649 nextpc = pc_val + imm;
2650 else if (!bit (inst1, 11) && reg == 0)
2651 nextpc = pc_val + imm;
2654 return nextpc;
2657 CORE_ADDR
2658 arm_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
2660 struct gdbarch *gdbarch = get_frame_arch (frame);
2661 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2662 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
2663 unsigned long pc_val;
2664 unsigned long this_instr;
2665 unsigned long status;
2666 CORE_ADDR nextpc;
2668 if (arm_frame_is_thumb (frame))
2669 return thumb_get_next_pc (frame, pc);
2671 pc_val = (unsigned long) pc;
2672 this_instr = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
2674 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
2675 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
2677 if (bits (this_instr, 28, 31) == INST_NV)
2678 switch (bits (this_instr, 24, 27))
2680 case 0xa:
2681 case 0xb:
2683 /* Branch with Link and change to Thumb. */
2684 nextpc = BranchDest (pc, this_instr);
2685 nextpc |= bit (this_instr, 24) << 1;
2687 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
2688 if (nextpc == pc)
2689 error (_("Infinite loop detected"));
2690 break;
2692 case 0xc:
2693 case 0xd:
2694 case 0xe:
2695 /* Coprocessor register transfer. */
2696 if (bits (this_instr, 12, 15) == 15)
2697 error (_("Invalid update to pc in instruction"));
2698 break;
2700 else if (condition_true (bits (this_instr, 28, 31), status))
2702 switch (bits (this_instr, 24, 27))
2704 case 0x0:
2705 case 0x1: /* data processing */
2706 case 0x2:
2707 case 0x3:
2709 unsigned long operand1, operand2, result = 0;
2710 unsigned long rn;
2711 int c;
2713 if (bits (this_instr, 12, 15) != 15)
2714 break;
2716 if (bits (this_instr, 22, 25) == 0
2717 && bits (this_instr, 4, 7) == 9) /* multiply */
2718 error (_("Invalid update to pc in instruction"));
2720 /* BX <reg>, BLX <reg> */
2721 if (bits (this_instr, 4, 27) == 0x12fff1
2722 || bits (this_instr, 4, 27) == 0x12fff3)
2724 rn = bits (this_instr, 0, 3);
2725 result = (rn == 15) ? pc_val + 8
2726 : get_frame_register_unsigned (frame, rn);
2727 nextpc = (CORE_ADDR) gdbarch_addr_bits_remove
2728 (gdbarch, result);
2730 if (nextpc == pc)
2731 error (_("Infinite loop detected"));
2733 return nextpc;
2736 /* Multiply into PC */
2737 c = (status & FLAG_C) ? 1 : 0;
2738 rn = bits (this_instr, 16, 19);
2739 operand1 = (rn == 15) ? pc_val + 8
2740 : get_frame_register_unsigned (frame, rn);
2742 if (bit (this_instr, 25))
2744 unsigned long immval = bits (this_instr, 0, 7);
2745 unsigned long rotate = 2 * bits (this_instr, 8, 11);
2746 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
2747 & 0xffffffff;
2749 else /* operand 2 is a shifted register */
2750 operand2 = shifted_reg_val (frame, this_instr, c, pc_val, status);
2752 switch (bits (this_instr, 21, 24))
2754 case 0x0: /*and */
2755 result = operand1 & operand2;
2756 break;
2758 case 0x1: /*eor */
2759 result = operand1 ^ operand2;
2760 break;
2762 case 0x2: /*sub */
2763 result = operand1 - operand2;
2764 break;
2766 case 0x3: /*rsb */
2767 result = operand2 - operand1;
2768 break;
2770 case 0x4: /*add */
2771 result = operand1 + operand2;
2772 break;
2774 case 0x5: /*adc */
2775 result = operand1 + operand2 + c;
2776 break;
2778 case 0x6: /*sbc */
2779 result = operand1 - operand2 + c;
2780 break;
2782 case 0x7: /*rsc */
2783 result = operand2 - operand1 + c;
2784 break;
2786 case 0x8:
2787 case 0x9:
2788 case 0xa:
2789 case 0xb: /* tst, teq, cmp, cmn */
2790 result = (unsigned long) nextpc;
2791 break;
2793 case 0xc: /*orr */
2794 result = operand1 | operand2;
2795 break;
2797 case 0xd: /*mov */
2798 /* Always step into a function. */
2799 result = operand2;
2800 break;
2802 case 0xe: /*bic */
2803 result = operand1 & ~operand2;
2804 break;
2806 case 0xf: /*mvn */
2807 result = ~operand2;
2808 break;
2810 nextpc = (CORE_ADDR) gdbarch_addr_bits_remove
2811 (gdbarch, result);
2813 if (nextpc == pc)
2814 error (_("Infinite loop detected"));
2815 break;
2818 case 0x4:
2819 case 0x5: /* data transfer */
2820 case 0x6:
2821 case 0x7:
2822 if (bit (this_instr, 20))
2824 /* load */
2825 if (bits (this_instr, 12, 15) == 15)
2827 /* rd == pc */
2828 unsigned long rn;
2829 unsigned long base;
2831 if (bit (this_instr, 22))
2832 error (_("Invalid update to pc in instruction"));
2834 /* byte write to PC */
2835 rn = bits (this_instr, 16, 19);
2836 base = (rn == 15) ? pc_val + 8
2837 : get_frame_register_unsigned (frame, rn);
2838 if (bit (this_instr, 24))
2840 /* pre-indexed */
2841 int c = (status & FLAG_C) ? 1 : 0;
2842 unsigned long offset =
2843 (bit (this_instr, 25)
2844 ? shifted_reg_val (frame, this_instr, c, pc_val, status)
2845 : bits (this_instr, 0, 11));
2847 if (bit (this_instr, 23))
2848 base += offset;
2849 else
2850 base -= offset;
2852 nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
2853 4, byte_order);
2855 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
2857 if (nextpc == pc)
2858 error (_("Infinite loop detected"));
2861 break;
2863 case 0x8:
2864 case 0x9: /* block transfer */
2865 if (bit (this_instr, 20))
2867 /* LDM */
2868 if (bit (this_instr, 15))
2870 /* loading pc */
2871 int offset = 0;
2873 if (bit (this_instr, 23))
2875 /* up */
2876 unsigned long reglist = bits (this_instr, 0, 14);
2877 offset = bitcount (reglist) * 4;
2878 if (bit (this_instr, 24)) /* pre */
2879 offset += 4;
2881 else if (bit (this_instr, 24))
2882 offset = -4;
2885 unsigned long rn_val =
2886 get_frame_register_unsigned (frame,
2887 bits (this_instr, 16, 19));
2888 nextpc =
2889 (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
2890 + offset),
2891 4, byte_order);
2893 nextpc = gdbarch_addr_bits_remove
2894 (gdbarch, nextpc);
2895 if (nextpc == pc)
2896 error (_("Infinite loop detected"));
2899 break;
2901 case 0xb: /* branch & link */
2902 case 0xa: /* branch */
2904 nextpc = BranchDest (pc, this_instr);
2906 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
2907 if (nextpc == pc)
2908 error (_("Infinite loop detected"));
2909 break;
2912 case 0xc:
2913 case 0xd:
2914 case 0xe: /* coproc ops */
2915 case 0xf: /* SWI */
2916 break;
2918 default:
2919 fprintf_filtered (gdb_stderr, _("Bad bit-field extraction\n"));
2920 return (pc);
2924 return nextpc;
2927 /* single_step() is called just before we want to resume the inferior,
2928 if we want to single-step it but there is no hardware or kernel
2929 single-step support. We find the target of the coming instruction
2930 and breakpoint it. */
2933 arm_software_single_step (struct frame_info *frame)
2935 struct gdbarch *gdbarch = get_frame_arch (frame);
2936 struct address_space *aspace = get_frame_address_space (frame);
2938 /* NOTE: This may insert the wrong breakpoint instruction when
2939 single-stepping over a mode-changing instruction, if the
2940 CPSR heuristics are used. */
2942 CORE_ADDR next_pc = arm_get_next_pc (frame, get_frame_pc (frame));
2943 insert_single_step_breakpoint (gdbarch, aspace, next_pc);
2945 return 1;
2948 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
2949 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
2950 NULL if an error occurs. BUF is freed. */
2952 static gdb_byte *
2953 extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
2954 int old_len, int new_len)
2956 gdb_byte *new_buf, *middle;
2957 int bytes_to_read = new_len - old_len;
2959 new_buf = xmalloc (new_len);
2960 memcpy (new_buf + bytes_to_read, buf, old_len);
2961 xfree (buf);
2962 if (target_read_memory (endaddr - new_len, new_buf, bytes_to_read) != 0)
2964 xfree (new_buf);
2965 return NULL;
2967 return new_buf;
2970 /* An IT block is at most the 2-byte IT instruction followed by
2971 four 4-byte instructions. The furthest back we must search to
2972 find an IT block that affects the current instruction is thus
2973 2 + 3 * 4 == 14 bytes. */
2974 #define MAX_IT_BLOCK_PREFIX 14
2976 /* Use a quick scan if there are more than this many bytes of
2977 code. */
2978 #define IT_SCAN_THRESHOLD 32
2980 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
2981 A breakpoint in an IT block may not be hit, depending on the
2982 condition flags. */
2983 static CORE_ADDR
2984 arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
2986 gdb_byte *buf;
2987 char map_type;
2988 CORE_ADDR boundary, func_start;
2989 int buf_len, buf2_len;
2990 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
2991 int i, any, last_it, last_it_count;
2993 /* If we are using BKPT breakpoints, none of this is necessary. */
2994 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
2995 return bpaddr;
2997 /* ARM mode does not have this problem. */
2998 if (!arm_pc_is_thumb (bpaddr))
2999 return bpaddr;
3001 /* We are setting a breakpoint in Thumb code that could potentially
3002 contain an IT block. The first step is to find how much Thumb
3003 code there is; we do not need to read outside of known Thumb
3004 sequences. */
3005 map_type = arm_find_mapping_symbol (bpaddr, &boundary);
3006 if (map_type == 0)
3007 /* Thumb-2 code must have mapping symbols to have a chance. */
3008 return bpaddr;
3010 bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
3012 if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
3013 && func_start > boundary)
3014 boundary = func_start;
3016 /* Search for a candidate IT instruction. We have to do some fancy
3017 footwork to distinguish a real IT instruction from the second
3018 half of a 32-bit instruction, but there is no need for that if
3019 there's no candidate. */
3020 buf_len = min (bpaddr - boundary, MAX_IT_BLOCK_PREFIX);
3021 if (buf_len == 0)
3022 /* No room for an IT instruction. */
3023 return bpaddr;
3025 buf = xmalloc (buf_len);
3026 if (target_read_memory (bpaddr - buf_len, buf, buf_len) != 0)
3027 return bpaddr;
3028 any = 0;
3029 for (i = 0; i < buf_len; i += 2)
3031 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3032 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
3034 any = 1;
3035 break;
3038 if (any == 0)
3040 xfree (buf);
3041 return bpaddr;
3044 /* OK, the code bytes before this instruction contain at least one
3045 halfword which resembles an IT instruction. We know that it's
3046 Thumb code, but there are still two possibilities. Either the
3047 halfword really is an IT instruction, or it is the second half of
3048 a 32-bit Thumb instruction. The only way we can tell is to
3049 scan forwards from a known instruction boundary. */
3050 if (bpaddr - boundary > IT_SCAN_THRESHOLD)
3052 int definite;
3054 /* There's a lot of code before this instruction. Start with an
3055 optimistic search; it's easy to recognize halfwords that can
3056 not be the start of a 32-bit instruction, and use that to
3057 lock on to the instruction boundaries. */
3058 buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
3059 if (buf == NULL)
3060 return bpaddr;
3061 buf_len = IT_SCAN_THRESHOLD;
3063 definite = 0;
3064 for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
3066 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3067 if (thumb_insn_size (inst1) == 2)
3069 definite = 1;
3070 break;
3074 /* At this point, if DEFINITE, BUF[I] is the first place we
3075 are sure that we know the instruction boundaries, and it is far
3076 enough from BPADDR that we could not miss an IT instruction
3077 affecting BPADDR. If ! DEFINITE, give up - start from a
3078 known boundary. */
3079 if (! definite)
3081 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
3082 if (buf == NULL)
3083 return bpaddr;
3084 buf_len = bpaddr - boundary;
3085 i = 0;
3088 else
3090 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
3091 if (buf == NULL)
3092 return bpaddr;
3093 buf_len = bpaddr - boundary;
3094 i = 0;
3097 /* Scan forwards. Find the last IT instruction before BPADDR. */
3098 last_it = -1;
3099 last_it_count = 0;
3100 while (i < buf_len)
3102 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3103 last_it_count--;
3104 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
3106 last_it = i;
3107 if (inst1 & 0x0001)
3108 last_it_count = 4;
3109 else if (inst1 & 0x0002)
3110 last_it_count = 3;
3111 else if (inst1 & 0x0004)
3112 last_it_count = 2;
3113 else
3114 last_it_count = 1;
3116 i += thumb_insn_size (inst1);
3119 xfree (buf);
3121 if (last_it == -1)
3122 /* There wasn't really an IT instruction after all. */
3123 return bpaddr;
3125 if (last_it_count < 1)
3126 /* It was too far away. */
3127 return bpaddr;
3129 /* This really is a trouble spot. Move the breakpoint to the IT
3130 instruction. */
3131 return bpaddr - buf_len + last_it;
3134 /* ARM displaced stepping support.
3136 Generally ARM displaced stepping works as follows:
3138 1. When an instruction is to be single-stepped, it is first decoded by
3139 arm_process_displaced_insn (called from arm_displaced_step_copy_insn).
3140 Depending on the type of instruction, it is then copied to a scratch
3141 location, possibly in a modified form. The copy_* set of functions
3142 performs such modification, as necessary. A breakpoint is placed after
3143 the modified instruction in the scratch space to return control to GDB.
3144 Note in particular that instructions which modify the PC will no longer
3145 do so after modification.
3147 2. The instruction is single-stepped, by setting the PC to the scratch
3148 location address, and resuming. Control returns to GDB when the
3149 breakpoint is hit.
3151 3. A cleanup function (cleanup_*) is called corresponding to the copy_*
3152 function used for the current instruction. This function's job is to
3153 put the CPU/memory state back to what it would have been if the
3154 instruction had been executed unmodified in its original location. */
3156 /* NOP instruction (mov r0, r0). */
3157 #define ARM_NOP 0xe1a00000
3159 /* Helper for register reads for displaced stepping. In particular, this
3160 returns the PC as it would be seen by the instruction at its original
3161 location. */
3163 ULONGEST
3164 displaced_read_reg (struct regcache *regs, CORE_ADDR from, int regno)
3166 ULONGEST ret;
3168 if (regno == 15)
3170 if (debug_displaced)
3171 fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
3172 (unsigned long) from + 8);
3173 return (ULONGEST) from + 8; /* Pipeline offset. */
3175 else
3177 regcache_cooked_read_unsigned (regs, regno, &ret);
3178 if (debug_displaced)
3179 fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
3180 regno, (unsigned long) ret);
3181 return ret;
3185 static int
3186 displaced_in_arm_mode (struct regcache *regs)
3188 ULONGEST ps;
3190 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
3192 return (ps & CPSR_T) == 0;
3195 /* Write to the PC as from a branch instruction. */
3197 static void
3198 branch_write_pc (struct regcache *regs, ULONGEST val)
3200 if (displaced_in_arm_mode (regs))
3201 /* Note: If bits 0/1 are set, this branch would be unpredictable for
3202 architecture versions < 6. */
3203 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & ~(ULONGEST) 0x3);
3204 else
3205 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & ~(ULONGEST) 0x1);
3208 /* Write to the PC as from a branch-exchange instruction. */
3210 static void
3211 bx_write_pc (struct regcache *regs, ULONGEST val)
3213 ULONGEST ps;
3215 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
3217 if ((val & 1) == 1)
3219 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | CPSR_T);
3220 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
3222 else if ((val & 2) == 0)
3224 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM,
3225 ps & ~(ULONGEST) CPSR_T);
3226 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
3228 else
3230 /* Unpredictable behaviour. Try to do something sensible (switch to ARM
3231 mode, align dest to 4 bytes). */
3232 warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
3233 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM,
3234 ps & ~(ULONGEST) CPSR_T);
3235 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
3239 /* Write to the PC as if from a load instruction. */
3241 static void
3242 load_write_pc (struct regcache *regs, ULONGEST val)
3244 if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
3245 bx_write_pc (regs, val);
3246 else
3247 branch_write_pc (regs, val);
3250 /* Write to the PC as if from an ALU instruction. */
3252 static void
3253 alu_write_pc (struct regcache *regs, ULONGEST val)
3255 if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && displaced_in_arm_mode (regs))
3256 bx_write_pc (regs, val);
3257 else
3258 branch_write_pc (regs, val);
3261 /* Helper for writing to registers for displaced stepping. Writing to the PC
3262 has a varying effects depending on the instruction which does the write:
3263 this is controlled by the WRITE_PC argument. */
3265 void
3266 displaced_write_reg (struct regcache *regs, struct displaced_step_closure *dsc,
3267 int regno, ULONGEST val, enum pc_write_style write_pc)
3269 if (regno == 15)
3271 if (debug_displaced)
3272 fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
3273 (unsigned long) val);
3274 switch (write_pc)
3276 case BRANCH_WRITE_PC:
3277 branch_write_pc (regs, val);
3278 break;
3280 case BX_WRITE_PC:
3281 bx_write_pc (regs, val);
3282 break;
3284 case LOAD_WRITE_PC:
3285 load_write_pc (regs, val);
3286 break;
3288 case ALU_WRITE_PC:
3289 alu_write_pc (regs, val);
3290 break;
3292 case CANNOT_WRITE_PC:
3293 warning (_("Instruction wrote to PC in an unexpected way when "
3294 "single-stepping"));
3295 break;
3297 default:
3298 internal_error (__FILE__, __LINE__,
3299 _("Invalid argument to displaced_write_reg"));
3302 dsc->wrote_to_pc = 1;
3304 else
3306 if (debug_displaced)
3307 fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
3308 regno, (unsigned long) val);
3309 regcache_cooked_write_unsigned (regs, regno, val);
3313 /* This function is used to concisely determine if an instruction INSN
3314 references PC. Register fields of interest in INSN should have the
3315 corresponding fields of BITMASK set to 0b1111. The function returns return 1
3316 if any of these fields in INSN reference the PC (also 0b1111, r15), else it
3317 returns 0. */
3319 static int
3320 insn_references_pc (uint32_t insn, uint32_t bitmask)
3322 uint32_t lowbit = 1;
3324 while (bitmask != 0)
3326 uint32_t mask;
3328 for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
3331 if (!lowbit)
3332 break;
3334 mask = lowbit * 0xf;
3336 if ((insn & mask) == mask)
3337 return 1;
3339 bitmask &= ~mask;
3342 return 0;
3345 /* The simplest copy function. Many instructions have the same effect no
3346 matter what address they are executed at: in those cases, use this. */
3348 static int
3349 copy_unmodified (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
3350 const char *iname, struct displaced_step_closure *dsc)
3352 if (debug_displaced)
3353 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
3354 "opcode/class '%s' unmodified\n", (unsigned long) insn,
3355 iname);
3357 dsc->modinsn[0] = insn;
3359 return 0;
3362 /* Preload instructions with immediate offset. */
3364 static void
3365 cleanup_preload (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3366 struct regcache *regs, struct displaced_step_closure *dsc)
3368 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3369 if (!dsc->u.preload.immed)
3370 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3373 static int
3374 copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3375 struct displaced_step_closure *dsc)
3377 unsigned int rn = bits (insn, 16, 19);
3378 ULONGEST rn_val;
3379 CORE_ADDR from = dsc->insn_addr;
3381 if (!insn_references_pc (insn, 0x000f0000ul))
3382 return copy_unmodified (gdbarch, insn, "preload", dsc);
3384 if (debug_displaced)
3385 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
3386 (unsigned long) insn);
3388 /* Preload instructions:
3390 {pli/pld} [rn, #+/-imm]
3392 {pli/pld} [r0, #+/-imm]. */
3394 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3395 rn_val = displaced_read_reg (regs, from, rn);
3396 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3398 dsc->u.preload.immed = 1;
3400 dsc->modinsn[0] = insn & 0xfff0ffff;
3402 dsc->cleanup = &cleanup_preload;
3404 return 0;
3407 /* Preload instructions with register offset. */
3409 static int
3410 copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3411 struct displaced_step_closure *dsc)
3413 unsigned int rn = bits (insn, 16, 19);
3414 unsigned int rm = bits (insn, 0, 3);
3415 ULONGEST rn_val, rm_val;
3416 CORE_ADDR from = dsc->insn_addr;
3418 if (!insn_references_pc (insn, 0x000f000ful))
3419 return copy_unmodified (gdbarch, insn, "preload reg", dsc);
3421 if (debug_displaced)
3422 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
3423 (unsigned long) insn);
3425 /* Preload register-offset instructions:
3427 {pli/pld} [rn, rm {, shift}]
3429 {pli/pld} [r0, r1 {, shift}]. */
3431 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3432 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
3433 rn_val = displaced_read_reg (regs, from, rn);
3434 rm_val = displaced_read_reg (regs, from, rm);
3435 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3436 displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
3438 dsc->u.preload.immed = 0;
3440 dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
3442 dsc->cleanup = &cleanup_preload;
3444 return 0;
3447 /* Copy/cleanup coprocessor load and store instructions. */
3449 static void
3450 cleanup_copro_load_store (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3451 struct regcache *regs,
3452 struct displaced_step_closure *dsc)
3454 ULONGEST rn_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3456 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3458 if (dsc->u.ldst.writeback)
3459 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
3462 static int
3463 copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
3464 struct regcache *regs,
3465 struct displaced_step_closure *dsc)
3467 unsigned int rn = bits (insn, 16, 19);
3468 ULONGEST rn_val;
3469 CORE_ADDR from = dsc->insn_addr;
3471 if (!insn_references_pc (insn, 0x000f0000ul))
3472 return copy_unmodified (gdbarch, insn, "copro load/store", dsc);
3474 if (debug_displaced)
3475 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
3476 "load/store insn %.8lx\n", (unsigned long) insn);
3478 /* Coprocessor load/store instructions:
3480 {stc/stc2} [<Rn>, #+/-imm] (and other immediate addressing modes)
3482 {stc/stc2} [r0, #+/-imm].
3484 ldc/ldc2 are handled identically. */
3486 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3487 rn_val = displaced_read_reg (regs, from, rn);
3488 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3490 dsc->u.ldst.writeback = bit (insn, 25);
3491 dsc->u.ldst.rn = rn;
3493 dsc->modinsn[0] = insn & 0xfff0ffff;
3495 dsc->cleanup = &cleanup_copro_load_store;
3497 return 0;
3500 /* Clean up branch instructions (actually perform the branch, by setting
3501 PC). */
3503 static void
3504 cleanup_branch (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
3505 struct displaced_step_closure *dsc)
3507 ULONGEST from = dsc->insn_addr;
3508 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
3509 int branch_taken = condition_true (dsc->u.branch.cond, status);
3510 enum pc_write_style write_pc = dsc->u.branch.exchange
3511 ? BX_WRITE_PC : BRANCH_WRITE_PC;
3513 if (!branch_taken)
3514 return;
3516 if (dsc->u.branch.link)
3518 ULONGEST pc = displaced_read_reg (regs, from, 15);
3519 displaced_write_reg (regs, dsc, 14, pc - 4, CANNOT_WRITE_PC);
3522 displaced_write_reg (regs, dsc, 15, dsc->u.branch.dest, write_pc);
3525 /* Copy B/BL/BLX instructions with immediate destinations. */
3527 static int
3528 copy_b_bl_blx (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
3529 struct regcache *regs, struct displaced_step_closure *dsc)
3531 unsigned int cond = bits (insn, 28, 31);
3532 int exchange = (cond == 0xf);
3533 int link = exchange || bit (insn, 24);
3534 CORE_ADDR from = dsc->insn_addr;
3535 long offset;
3537 if (debug_displaced)
3538 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
3539 "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
3540 (unsigned long) insn);
3542 /* Implement "BL<cond> <label>" as:
3544 Preparation: cond <- instruction condition
3545 Insn: mov r0, r0 (nop)
3546 Cleanup: if (condition true) { r14 <- pc; pc <- label }.
3548 B<cond> similar, but don't set r14 in cleanup. */
3550 if (exchange)
3551 /* For BLX, set bit 0 of the destination. The cleanup_branch function will
3552 then arrange the switch into Thumb mode. */
3553 offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
3554 else
3555 offset = bits (insn, 0, 23) << 2;
3557 if (bit (offset, 25))
3558 offset = offset | ~0x3ffffff;
3560 dsc->u.branch.cond = cond;
3561 dsc->u.branch.link = link;
3562 dsc->u.branch.exchange = exchange;
3563 dsc->u.branch.dest = from + 8 + offset;
3565 dsc->modinsn[0] = ARM_NOP;
3567 dsc->cleanup = &cleanup_branch;
3569 return 0;
3572 /* Copy BX/BLX with register-specified destinations. */
3574 static int
3575 copy_bx_blx_reg (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
3576 struct regcache *regs, struct displaced_step_closure *dsc)
3578 unsigned int cond = bits (insn, 28, 31);
3579 /* BX: x12xxx1x
3580 BLX: x12xxx3x. */
3581 int link = bit (insn, 5);
3582 unsigned int rm = bits (insn, 0, 3);
3583 CORE_ADDR from = dsc->insn_addr;
3585 if (debug_displaced)
3586 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s register insn "
3587 "%.8lx\n", (link) ? "blx" : "bx", (unsigned long) insn);
3589 /* Implement {BX,BLX}<cond> <reg>" as:
3591 Preparation: cond <- instruction condition
3592 Insn: mov r0, r0 (nop)
3593 Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
3595 Don't set r14 in cleanup for BX. */
3597 dsc->u.branch.dest = displaced_read_reg (regs, from, rm);
3599 dsc->u.branch.cond = cond;
3600 dsc->u.branch.link = link;
3601 dsc->u.branch.exchange = 1;
3603 dsc->modinsn[0] = ARM_NOP;
3605 dsc->cleanup = &cleanup_branch;
3607 return 0;
3610 /* Copy/cleanup arithmetic/logic instruction with immediate RHS. */
3612 static void
3613 cleanup_alu_imm (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3614 struct regcache *regs, struct displaced_step_closure *dsc)
3616 ULONGEST rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3617 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3618 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3619 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
3622 static int
3623 copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3624 struct displaced_step_closure *dsc)
3626 unsigned int rn = bits (insn, 16, 19);
3627 unsigned int rd = bits (insn, 12, 15);
3628 unsigned int op = bits (insn, 21, 24);
3629 int is_mov = (op == 0xd);
3630 ULONGEST rd_val, rn_val;
3631 CORE_ADDR from = dsc->insn_addr;
3633 if (!insn_references_pc (insn, 0x000ff000ul))
3634 return copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
3636 if (debug_displaced)
3637 fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
3638 "%.8lx\n", is_mov ? "move" : "ALU",
3639 (unsigned long) insn);
3641 /* Instruction is of form:
3643 <op><cond> rd, [rn,] #imm
3645 Rewrite as:
3647 Preparation: tmp1, tmp2 <- r0, r1;
3648 r0, r1 <- rd, rn
3649 Insn: <op><cond> r0, r1, #imm
3650 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
3653 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3654 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
3655 rn_val = displaced_read_reg (regs, from, rn);
3656 rd_val = displaced_read_reg (regs, from, rd);
3657 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
3658 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
3659 dsc->rd = rd;
3661 if (is_mov)
3662 dsc->modinsn[0] = insn & 0xfff00fff;
3663 else
3664 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
3666 dsc->cleanup = &cleanup_alu_imm;
3668 return 0;
3671 /* Copy/cleanup arithmetic/logic insns with register RHS. */
3673 static void
3674 cleanup_alu_reg (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3675 struct regcache *regs, struct displaced_step_closure *dsc)
3677 ULONGEST rd_val;
3678 int i;
3680 rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3682 for (i = 0; i < 3; i++)
3683 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
3685 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
3688 static int
3689 copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3690 struct displaced_step_closure *dsc)
3692 unsigned int rn = bits (insn, 16, 19);
3693 unsigned int rm = bits (insn, 0, 3);
3694 unsigned int rd = bits (insn, 12, 15);
3695 unsigned int op = bits (insn, 21, 24);
3696 int is_mov = (op == 0xd);
3697 ULONGEST rd_val, rn_val, rm_val;
3698 CORE_ADDR from = dsc->insn_addr;
3700 if (!insn_references_pc (insn, 0x000ff00ful))
3701 return copy_unmodified (gdbarch, insn, "ALU reg", dsc);
3703 if (debug_displaced)
3704 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
3705 is_mov ? "move" : "ALU", (unsigned long) insn);
3707 /* Instruction is of form:
3709 <op><cond> rd, [rn,] rm [, <shift>]
3711 Rewrite as:
3713 Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
3714 r0, r1, r2 <- rd, rn, rm
3715 Insn: <op><cond> r0, r1, r2 [, <shift>]
3716 Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
3719 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3720 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
3721 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
3722 rd_val = displaced_read_reg (regs, from, rd);
3723 rn_val = displaced_read_reg (regs, from, rn);
3724 rm_val = displaced_read_reg (regs, from, rm);
3725 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
3726 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
3727 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
3728 dsc->rd = rd;
3730 if (is_mov)
3731 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
3732 else
3733 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
3735 dsc->cleanup = &cleanup_alu_reg;
3737 return 0;
3740 /* Cleanup/copy arithmetic/logic insns with shifted register RHS. */
3742 static void
3743 cleanup_alu_shifted_reg (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3744 struct regcache *regs,
3745 struct displaced_step_closure *dsc)
3747 ULONGEST rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3748 int i;
3750 for (i = 0; i < 4; i++)
3751 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
3753 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
3756 static int
3757 copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
3758 struct regcache *regs, struct displaced_step_closure *dsc)
3760 unsigned int rn = bits (insn, 16, 19);
3761 unsigned int rm = bits (insn, 0, 3);
3762 unsigned int rd = bits (insn, 12, 15);
3763 unsigned int rs = bits (insn, 8, 11);
3764 unsigned int op = bits (insn, 21, 24);
3765 int is_mov = (op == 0xd), i;
3766 ULONGEST rd_val, rn_val, rm_val, rs_val;
3767 CORE_ADDR from = dsc->insn_addr;
3769 if (!insn_references_pc (insn, 0x000fff0ful))
3770 return copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
3772 if (debug_displaced)
3773 fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
3774 "%.8lx\n", is_mov ? "move" : "ALU",
3775 (unsigned long) insn);
3777 /* Instruction is of form:
3779 <op><cond> rd, [rn,] rm, <shift> rs
3781 Rewrite as:
3783 Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
3784 r0, r1, r2, r3 <- rd, rn, rm, rs
3785 Insn: <op><cond> r0, r1, r2, <shift> r3
3786 Cleanup: tmp5 <- r0
3787 r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
3788 rd <- tmp5
3791 for (i = 0; i < 4; i++)
3792 dsc->tmp[i] = displaced_read_reg (regs, from, i);
3794 rd_val = displaced_read_reg (regs, from, rd);
3795 rn_val = displaced_read_reg (regs, from, rn);
3796 rm_val = displaced_read_reg (regs, from, rm);
3797 rs_val = displaced_read_reg (regs, from, rs);
3798 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
3799 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
3800 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
3801 displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
3802 dsc->rd = rd;
3804 if (is_mov)
3805 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
3806 else
3807 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
3809 dsc->cleanup = &cleanup_alu_shifted_reg;
3811 return 0;
3814 /* Clean up load instructions. */
3816 static void
3817 cleanup_load (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
3818 struct displaced_step_closure *dsc)
3820 ULONGEST rt_val, rt_val2 = 0, rn_val;
3821 CORE_ADDR from = dsc->insn_addr;
3823 rt_val = displaced_read_reg (regs, from, 0);
3824 if (dsc->u.ldst.xfersize == 8)
3825 rt_val2 = displaced_read_reg (regs, from, 1);
3826 rn_val = displaced_read_reg (regs, from, 2);
3828 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3829 if (dsc->u.ldst.xfersize > 4)
3830 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3831 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
3832 if (!dsc->u.ldst.immed)
3833 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
3835 /* Handle register writeback. */
3836 if (dsc->u.ldst.writeback)
3837 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
3838 /* Put result in right place. */
3839 displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
3840 if (dsc->u.ldst.xfersize == 8)
3841 displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
3844 /* Clean up store instructions. */
3846 static void
3847 cleanup_store (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
3848 struct displaced_step_closure *dsc)
3850 CORE_ADDR from = dsc->insn_addr;
3851 ULONGEST rn_val = displaced_read_reg (regs, from, 2);
3853 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3854 if (dsc->u.ldst.xfersize > 4)
3855 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3856 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
3857 if (!dsc->u.ldst.immed)
3858 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
3859 if (!dsc->u.ldst.restore_r4)
3860 displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
3862 /* Writeback. */
3863 if (dsc->u.ldst.writeback)
3864 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
3867 /* Copy "extra" load/store instructions. These are halfword/doubleword
3868 transfers, which have a different encoding to byte/word transfers. */
3870 static int
3871 copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unpriveleged,
3872 struct regcache *regs, struct displaced_step_closure *dsc)
3874 unsigned int op1 = bits (insn, 20, 24);
3875 unsigned int op2 = bits (insn, 5, 6);
3876 unsigned int rt = bits (insn, 12, 15);
3877 unsigned int rn = bits (insn, 16, 19);
3878 unsigned int rm = bits (insn, 0, 3);
3879 char load[12] = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
3880 char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
3881 int immed = (op1 & 0x4) != 0;
3882 int opcode;
3883 ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
3884 CORE_ADDR from = dsc->insn_addr;
3886 if (!insn_references_pc (insn, 0x000ff00ful))
3887 return copy_unmodified (gdbarch, insn, "extra load/store", dsc);
3889 if (debug_displaced)
3890 fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
3891 "insn %.8lx\n", unpriveleged ? "unpriveleged " : "",
3892 (unsigned long) insn);
3894 opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
3896 if (opcode < 0)
3897 internal_error (__FILE__, __LINE__,
3898 _("copy_extra_ld_st: instruction decode error"));
3900 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3901 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
3902 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
3903 if (!immed)
3904 dsc->tmp[3] = displaced_read_reg (regs, from, 3);
3906 rt_val = displaced_read_reg (regs, from, rt);
3907 if (bytesize[opcode] == 8)
3908 rt_val2 = displaced_read_reg (regs, from, rt + 1);
3909 rn_val = displaced_read_reg (regs, from, rn);
3910 if (!immed)
3911 rm_val = displaced_read_reg (regs, from, rm);
3913 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
3914 if (bytesize[opcode] == 8)
3915 displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
3916 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
3917 if (!immed)
3918 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
3920 dsc->rd = rt;
3921 dsc->u.ldst.xfersize = bytesize[opcode];
3922 dsc->u.ldst.rn = rn;
3923 dsc->u.ldst.immed = immed;
3924 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
3925 dsc->u.ldst.restore_r4 = 0;
3927 if (immed)
3928 /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
3930 {ldr,str}<width><cond> r0, [r1,] [r2, #imm]. */
3931 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
3932 else
3933 /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
3935 {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3]. */
3936 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
3938 dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
3940 return 0;
3943 /* Copy byte/word loads and stores. */
3945 static int
3946 copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
3947 struct regcache *regs,
3948 struct displaced_step_closure *dsc, int load, int byte,
3949 int usermode)
3951 int immed = !bit (insn, 25);
3952 unsigned int rt = bits (insn, 12, 15);
3953 unsigned int rn = bits (insn, 16, 19);
3954 unsigned int rm = bits (insn, 0, 3); /* Only valid if !immed. */
3955 ULONGEST rt_val, rn_val, rm_val = 0;
3956 CORE_ADDR from = dsc->insn_addr;
3958 if (!insn_references_pc (insn, 0x000ff00ful))
3959 return copy_unmodified (gdbarch, insn, "load/store", dsc);
3961 if (debug_displaced)
3962 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s%s insn %.8lx\n",
3963 load ? (byte ? "ldrb" : "ldr")
3964 : (byte ? "strb" : "str"), usermode ? "t" : "",
3965 (unsigned long) insn);
3967 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3968 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
3969 if (!immed)
3970 dsc->tmp[3] = displaced_read_reg (regs, from, 3);
3971 if (!load)
3972 dsc->tmp[4] = displaced_read_reg (regs, from, 4);
3974 rt_val = displaced_read_reg (regs, from, rt);
3975 rn_val = displaced_read_reg (regs, from, rn);
3976 if (!immed)
3977 rm_val = displaced_read_reg (regs, from, rm);
3979 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
3980 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
3981 if (!immed)
3982 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
3984 dsc->rd = rt;
3985 dsc->u.ldst.xfersize = byte ? 1 : 4;
3986 dsc->u.ldst.rn = rn;
3987 dsc->u.ldst.immed = immed;
3988 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
3990 /* To write PC we can do:
3992 scratch+0: str pc, temp (*temp = scratch + 8 + offset)
3993 scratch+4: ldr r4, temp
3994 scratch+8: sub r4, r4, pc (r4 = scratch + 8 + offset - scratch - 8 - 8)
3995 scratch+12: add r4, r4, #8 (r4 = offset)
3996 scratch+16: add r0, r0, r4
3997 scratch+20: str r0, [r2, #imm] (or str r0, [r2, r3])
3998 scratch+24: <temp>
4000 Otherwise we don't know what value to write for PC, since the offset is
4001 architecture-dependent (sometimes PC+8, sometimes PC+12). */
4003 if (load || rt != 15)
4005 dsc->u.ldst.restore_r4 = 0;
4007 if (immed)
4008 /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
4010 {ldr,str}[b]<cond> r0, [r2, #imm]. */
4011 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
4012 else
4013 /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
4015 {ldr,str}[b]<cond> r0, [r2, r3]. */
4016 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
4018 else
4020 /* We need to use r4 as scratch. Make sure it's restored afterwards. */
4021 dsc->u.ldst.restore_r4 = 1;
4023 dsc->modinsn[0] = 0xe58ff014; /* str pc, [pc, #20]. */
4024 dsc->modinsn[1] = 0xe59f4010; /* ldr r4, [pc, #16]. */
4025 dsc->modinsn[2] = 0xe044400f; /* sub r4, r4, pc. */
4026 dsc->modinsn[3] = 0xe2844008; /* add r4, r4, #8. */
4027 dsc->modinsn[4] = 0xe0800004; /* add r0, r0, r4. */
4029 /* As above. */
4030 if (immed)
4031 dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
4032 else
4033 dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
4035 dsc->modinsn[6] = 0x0; /* breakpoint location. */
4036 dsc->modinsn[7] = 0x0; /* scratch space. */
4038 dsc->numinsns = 6;
4041 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
4043 return 0;
4046 /* Cleanup LDM instructions with fully-populated register list. This is an
4047 unfortunate corner case: it's impossible to implement correctly by modifying
4048 the instruction. The issue is as follows: we have an instruction,
4050 ldm rN, {r0-r15}
4052 which we must rewrite to avoid loading PC. A possible solution would be to
4053 do the load in two halves, something like (with suitable cleanup
4054 afterwards):
4056 mov r8, rN
4057 ldm[id][ab] r8!, {r0-r7}
4058 str r7, <temp>
4059 ldm[id][ab] r8, {r7-r14}
4060 <bkpt>
4062 but at present there's no suitable place for <temp>, since the scratch space
4063 is overwritten before the cleanup routine is called. For now, we simply
4064 emulate the instruction. */
4066 static void
4067 cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
4068 struct displaced_step_closure *dsc)
4070 ULONGEST from = dsc->insn_addr;
4071 int inc = dsc->u.block.increment;
4072 int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
4073 int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
4074 uint32_t regmask = dsc->u.block.regmask;
4075 int regno = inc ? 0 : 15;
4076 CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
4077 int exception_return = dsc->u.block.load && dsc->u.block.user
4078 && (regmask & 0x8000) != 0;
4079 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4080 int do_transfer = condition_true (dsc->u.block.cond, status);
4081 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4083 if (!do_transfer)
4084 return;
4086 /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
4087 sensible we can do here. Complain loudly. */
4088 if (exception_return)
4089 error (_("Cannot single-step exception return"));
4091 /* We don't handle any stores here for now. */
4092 gdb_assert (dsc->u.block.load != 0);
4094 if (debug_displaced)
4095 fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
4096 "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
4097 dsc->u.block.increment ? "inc" : "dec",
4098 dsc->u.block.before ? "before" : "after");
4100 while (regmask)
4102 uint32_t memword;
4104 if (inc)
4105 while (regno <= 15 && (regmask & (1 << regno)) == 0)
4106 regno++;
4107 else
4108 while (regno >= 0 && (regmask & (1 << regno)) == 0)
4109 regno--;
4111 xfer_addr += bump_before;
4113 memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
4114 displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
4116 xfer_addr += bump_after;
4118 regmask &= ~(1 << regno);
4121 if (dsc->u.block.writeback)
4122 displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
4123 CANNOT_WRITE_PC);
4126 /* Clean up an STM which included the PC in the register list. */
4128 static void
4129 cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
4130 struct displaced_step_closure *dsc)
4132 ULONGEST from = dsc->insn_addr;
4133 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4134 int store_executed = condition_true (dsc->u.block.cond, status);
4135 CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
4136 CORE_ADDR stm_insn_addr;
4137 uint32_t pc_val;
4138 long offset;
4139 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4141 /* If condition code fails, there's nothing else to do. */
4142 if (!store_executed)
4143 return;
4145 if (dsc->u.block.increment)
4147 pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
4149 if (dsc->u.block.before)
4150 pc_stored_at += 4;
4152 else
4154 pc_stored_at = dsc->u.block.xfer_addr;
4156 if (dsc->u.block.before)
4157 pc_stored_at -= 4;
4160 pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
4161 stm_insn_addr = dsc->scratch_base;
4162 offset = pc_val - stm_insn_addr;
4164 if (debug_displaced)
4165 fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
4166 "STM instruction\n", offset);
4168 /* Rewrite the stored PC to the proper value for the non-displaced original
4169 instruction. */
4170 write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
4171 dsc->insn_addr + offset);
4174 /* Clean up an LDM which includes the PC in the register list. We clumped all
4175 the registers in the transferred list into a contiguous range r0...rX (to
4176 avoid loading PC directly and losing control of the debugged program), so we
4177 must undo that here. */
4179 static void
4180 cleanup_block_load_pc (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
4181 struct regcache *regs,
4182 struct displaced_step_closure *dsc)
4184 ULONGEST from = dsc->insn_addr;
4185 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4186 int load_executed = condition_true (dsc->u.block.cond, status), i;
4187 unsigned int mask = dsc->u.block.regmask, write_reg = 15;
4188 unsigned int regs_loaded = bitcount (mask);
4189 unsigned int num_to_shuffle = regs_loaded, clobbered;
4191 /* The method employed here will fail if the register list is fully populated
4192 (we need to avoid loading PC directly). */
4193 gdb_assert (num_to_shuffle < 16);
4195 if (!load_executed)
4196 return;
4198 clobbered = (1 << num_to_shuffle) - 1;
4200 while (num_to_shuffle > 0)
4202 if ((mask & (1 << write_reg)) != 0)
4204 unsigned int read_reg = num_to_shuffle - 1;
4206 if (read_reg != write_reg)
4208 ULONGEST rval = displaced_read_reg (regs, from, read_reg);
4209 displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
4210 if (debug_displaced)
4211 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
4212 "loaded register r%d to r%d\n"), read_reg,
4213 write_reg);
4215 else if (debug_displaced)
4216 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
4217 "r%d already in the right place\n"),
4218 write_reg);
4220 clobbered &= ~(1 << write_reg);
4222 num_to_shuffle--;
4225 write_reg--;
4228 /* Restore any registers we scribbled over. */
4229 for (write_reg = 0; clobbered != 0; write_reg++)
4231 if ((clobbered & (1 << write_reg)) != 0)
4233 displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
4234 CANNOT_WRITE_PC);
4235 if (debug_displaced)
4236 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
4237 "clobbered register r%d\n"), write_reg);
4238 clobbered &= ~(1 << write_reg);
4242 /* Perform register writeback manually. */
4243 if (dsc->u.block.writeback)
4245 ULONGEST new_rn_val = dsc->u.block.xfer_addr;
4247 if (dsc->u.block.increment)
4248 new_rn_val += regs_loaded * 4;
4249 else
4250 new_rn_val -= regs_loaded * 4;
4252 displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
4253 CANNOT_WRITE_PC);
4257 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
4258 in user-level code (in particular exception return, ldm rn, {...pc}^). */
4260 static int
4261 copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4262 struct displaced_step_closure *dsc)
4264 int load = bit (insn, 20);
4265 int user = bit (insn, 22);
4266 int increment = bit (insn, 23);
4267 int before = bit (insn, 24);
4268 int writeback = bit (insn, 21);
4269 int rn = bits (insn, 16, 19);
4270 CORE_ADDR from = dsc->insn_addr;
4272 /* Block transfers which don't mention PC can be run directly out-of-line. */
4273 if (rn != 15 && (insn & 0x8000) == 0)
4274 return copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
4276 if (rn == 15)
4278 warning (_("displaced: Unpredictable LDM or STM with base register r15"));
4279 return copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
4282 if (debug_displaced)
4283 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
4284 "%.8lx\n", (unsigned long) insn);
4286 dsc->u.block.xfer_addr = displaced_read_reg (regs, from, rn);
4287 dsc->u.block.rn = rn;
4289 dsc->u.block.load = load;
4290 dsc->u.block.user = user;
4291 dsc->u.block.increment = increment;
4292 dsc->u.block.before = before;
4293 dsc->u.block.writeback = writeback;
4294 dsc->u.block.cond = bits (insn, 28, 31);
4296 dsc->u.block.regmask = insn & 0xffff;
4298 if (load)
4300 if ((insn & 0xffff) == 0xffff)
4302 /* LDM with a fully-populated register list. This case is
4303 particularly tricky. Implement for now by fully emulating the
4304 instruction (which might not behave perfectly in all cases, but
4305 these instructions should be rare enough for that not to matter
4306 too much). */
4307 dsc->modinsn[0] = ARM_NOP;
4309 dsc->cleanup = &cleanup_block_load_all;
4311 else
4313 /* LDM of a list of registers which includes PC. Implement by
4314 rewriting the list of registers to be transferred into a
4315 contiguous chunk r0...rX before doing the transfer, then shuffling
4316 registers into the correct places in the cleanup routine. */
4317 unsigned int regmask = insn & 0xffff;
4318 unsigned int num_in_list = bitcount (regmask), new_regmask, bit = 1;
4319 unsigned int to = 0, from = 0, i, new_rn;
4321 for (i = 0; i < num_in_list; i++)
4322 dsc->tmp[i] = displaced_read_reg (regs, from, i);
4324 /* Writeback makes things complicated. We need to avoid clobbering
4325 the base register with one of the registers in our modified
4326 register list, but just using a different register can't work in
4327 all cases, e.g.:
4329 ldm r14!, {r0-r13,pc}
4331 which would need to be rewritten as:
4333 ldm rN!, {r0-r14}
4335 but that can't work, because there's no free register for N.
4337 Solve this by turning off the writeback bit, and emulating
4338 writeback manually in the cleanup routine. */
4340 if (writeback)
4341 insn &= ~(1 << 21);
4343 new_regmask = (1 << num_in_list) - 1;
4345 if (debug_displaced)
4346 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
4347 "{..., pc}: original reg list %.4x, modified "
4348 "list %.4x\n"), rn, writeback ? "!" : "",
4349 (int) insn & 0xffff, new_regmask);
4351 dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
4353 dsc->cleanup = &cleanup_block_load_pc;
4356 else
4358 /* STM of a list of registers which includes PC. Run the instruction
4359 as-is, but out of line: this will store the wrong value for the PC,
4360 so we must manually fix up the memory in the cleanup routine.
4361 Doing things this way has the advantage that we can auto-detect
4362 the offset of the PC write (which is architecture-dependent) in
4363 the cleanup routine. */
4364 dsc->modinsn[0] = insn;
4366 dsc->cleanup = &cleanup_block_store_pc;
4369 return 0;
4372 /* Cleanup/copy SVC (SWI) instructions. These two functions are overridden
4373 for Linux, where some SVC instructions must be treated specially. */
4375 static void
4376 cleanup_svc (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
4377 struct displaced_step_closure *dsc)
4379 CORE_ADDR from = dsc->insn_addr;
4380 CORE_ADDR resume_addr = from + 4;
4382 if (debug_displaced)
4383 fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
4384 "%.8lx\n", (unsigned long) resume_addr);
4386 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
4389 static int
4390 copy_svc (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
4391 struct regcache *regs, struct displaced_step_closure *dsc)
4393 CORE_ADDR from = dsc->insn_addr;
4395 /* Allow OS-specific code to override SVC handling. */
4396 if (dsc->u.svc.copy_svc_os)
4397 return dsc->u.svc.copy_svc_os (gdbarch, insn, to, regs, dsc);
4399 if (debug_displaced)
4400 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
4401 (unsigned long) insn);
4403 /* Preparation: none.
4404 Insn: unmodified svc.
4405 Cleanup: pc <- insn_addr + 4. */
4407 dsc->modinsn[0] = insn;
4409 dsc->cleanup = &cleanup_svc;
4410 /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
4411 instruction. */
4412 dsc->wrote_to_pc = 1;
4414 return 0;
4417 /* Copy undefined instructions. */
4419 static int
4420 copy_undef (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
4421 struct displaced_step_closure *dsc)
4423 if (debug_displaced)
4424 fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn %.8lx\n",
4425 (unsigned long) insn);
4427 dsc->modinsn[0] = insn;
4429 return 0;
4432 /* Copy unpredictable instructions. */
4434 static int
4435 copy_unpred (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
4436 struct displaced_step_closure *dsc)
4438 if (debug_displaced)
4439 fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
4440 "%.8lx\n", (unsigned long) insn);
4442 dsc->modinsn[0] = insn;
4444 return 0;
4447 /* The decode_* functions are instruction decoding helpers. They mostly follow
4448 the presentation in the ARM ARM. */
4450 static int
4451 decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
4452 struct regcache *regs,
4453 struct displaced_step_closure *dsc)
4455 unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
4456 unsigned int rn = bits (insn, 16, 19);
4458 if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0xe) == 0x0)
4459 return copy_unmodified (gdbarch, insn, "cps", dsc);
4460 else if (op1 == 0x10 && op2 == 0x0 && (rn & 0xe) == 0x1)
4461 return copy_unmodified (gdbarch, insn, "setend", dsc);
4462 else if ((op1 & 0x60) == 0x20)
4463 return copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
4464 else if ((op1 & 0x71) == 0x40)
4465 return copy_unmodified (gdbarch, insn, "neon elt/struct load/store", dsc);
4466 else if ((op1 & 0x77) == 0x41)
4467 return copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
4468 else if ((op1 & 0x77) == 0x45)
4469 return copy_preload (gdbarch, insn, regs, dsc); /* pli. */
4470 else if ((op1 & 0x77) == 0x51)
4472 if (rn != 0xf)
4473 return copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
4474 else
4475 return copy_unpred (gdbarch, insn, dsc);
4477 else if ((op1 & 0x77) == 0x55)
4478 return copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
4479 else if (op1 == 0x57)
4480 switch (op2)
4482 case 0x1: return copy_unmodified (gdbarch, insn, "clrex", dsc);
4483 case 0x4: return copy_unmodified (gdbarch, insn, "dsb", dsc);
4484 case 0x5: return copy_unmodified (gdbarch, insn, "dmb", dsc);
4485 case 0x6: return copy_unmodified (gdbarch, insn, "isb", dsc);
4486 default: return copy_unpred (gdbarch, insn, dsc);
4488 else if ((op1 & 0x63) == 0x43)
4489 return copy_unpred (gdbarch, insn, dsc);
4490 else if ((op2 & 0x1) == 0x0)
4491 switch (op1 & ~0x80)
4493 case 0x61:
4494 return copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
4495 case 0x65:
4496 return copy_preload_reg (gdbarch, insn, regs, dsc); /* pli reg. */
4497 case 0x71: case 0x75:
4498 /* pld/pldw reg. */
4499 return copy_preload_reg (gdbarch, insn, regs, dsc);
4500 case 0x63: case 0x67: case 0x73: case 0x77:
4501 return copy_unpred (gdbarch, insn, dsc);
4502 default:
4503 return copy_undef (gdbarch, insn, dsc);
4505 else
4506 return copy_undef (gdbarch, insn, dsc); /* Probably unreachable. */
4509 static int
4510 decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
4511 struct regcache *regs, struct displaced_step_closure *dsc)
4513 if (bit (insn, 27) == 0)
4514 return decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
4515 /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx. */
4516 else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
4518 case 0x0: case 0x2:
4519 return copy_unmodified (gdbarch, insn, "srs", dsc);
4521 case 0x1: case 0x3:
4522 return copy_unmodified (gdbarch, insn, "rfe", dsc);
4524 case 0x4: case 0x5: case 0x6: case 0x7:
4525 return copy_b_bl_blx (gdbarch, insn, regs, dsc);
4527 case 0x8:
4528 switch ((insn & 0xe00000) >> 21)
4530 case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
4531 /* stc/stc2. */
4532 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4534 case 0x2:
4535 return copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
4537 default:
4538 return copy_undef (gdbarch, insn, dsc);
4541 case 0x9:
4543 int rn_f = (bits (insn, 16, 19) == 0xf);
4544 switch ((insn & 0xe00000) >> 21)
4546 case 0x1: case 0x3:
4547 /* ldc/ldc2 imm (undefined for rn == pc). */
4548 return rn_f ? copy_undef (gdbarch, insn, dsc)
4549 : copy_copro_load_store (gdbarch, insn, regs, dsc);
4551 case 0x2:
4552 return copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
4554 case 0x4: case 0x5: case 0x6: case 0x7:
4555 /* ldc/ldc2 lit (undefined for rn != pc). */
4556 return rn_f ? copy_copro_load_store (gdbarch, insn, regs, dsc)
4557 : copy_undef (gdbarch, insn, dsc);
4559 default:
4560 return copy_undef (gdbarch, insn, dsc);
4564 case 0xa:
4565 return copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
4567 case 0xb:
4568 if (bits (insn, 16, 19) == 0xf)
4569 /* ldc/ldc2 lit. */
4570 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4571 else
4572 return copy_undef (gdbarch, insn, dsc);
4574 case 0xc:
4575 if (bit (insn, 4))
4576 return copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
4577 else
4578 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4580 case 0xd:
4581 if (bit (insn, 4))
4582 return copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
4583 else
4584 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4586 default:
4587 return copy_undef (gdbarch, insn, dsc);
4591 /* Decode miscellaneous instructions in dp/misc encoding space. */
4593 static int
4594 decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
4595 struct regcache *regs, struct displaced_step_closure *dsc)
4597 unsigned int op2 = bits (insn, 4, 6);
4598 unsigned int op = bits (insn, 21, 22);
4599 unsigned int op1 = bits (insn, 16, 19);
4601 switch (op2)
4603 case 0x0:
4604 return copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
4606 case 0x1:
4607 if (op == 0x1) /* bx. */
4608 return copy_bx_blx_reg (gdbarch, insn, regs, dsc);
4609 else if (op == 0x3)
4610 return copy_unmodified (gdbarch, insn, "clz", dsc);
4611 else
4612 return copy_undef (gdbarch, insn, dsc);
4614 case 0x2:
4615 if (op == 0x1)
4616 /* Not really supported. */
4617 return copy_unmodified (gdbarch, insn, "bxj", dsc);
4618 else
4619 return copy_undef (gdbarch, insn, dsc);
4621 case 0x3:
4622 if (op == 0x1)
4623 return copy_bx_blx_reg (gdbarch, insn, regs, dsc); /* blx register. */
4624 else
4625 return copy_undef (gdbarch, insn, dsc);
4627 case 0x5:
4628 return copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
4630 case 0x7:
4631 if (op == 0x1)
4632 return copy_unmodified (gdbarch, insn, "bkpt", dsc);
4633 else if (op == 0x3)
4634 /* Not really supported. */
4635 return copy_unmodified (gdbarch, insn, "smc", dsc);
4637 default:
4638 return copy_undef (gdbarch, insn, dsc);
4642 static int
4643 decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4644 struct displaced_step_closure *dsc)
4646 if (bit (insn, 25))
4647 switch (bits (insn, 20, 24))
4649 case 0x10:
4650 return copy_unmodified (gdbarch, insn, "movw", dsc);
4652 case 0x14:
4653 return copy_unmodified (gdbarch, insn, "movt", dsc);
4655 case 0x12: case 0x16:
4656 return copy_unmodified (gdbarch, insn, "msr imm", dsc);
4658 default:
4659 return copy_alu_imm (gdbarch, insn, regs, dsc);
4661 else
4663 uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
4665 if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
4666 return copy_alu_reg (gdbarch, insn, regs, dsc);
4667 else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
4668 return copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
4669 else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
4670 return decode_miscellaneous (gdbarch, insn, regs, dsc);
4671 else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
4672 return copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
4673 else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
4674 return copy_unmodified (gdbarch, insn, "mul/mla", dsc);
4675 else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
4676 return copy_unmodified (gdbarch, insn, "synch", dsc);
4677 else if (op2 == 0xb || (op2 & 0xd) == 0xd)
4678 /* 2nd arg means "unpriveleged". */
4679 return copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
4680 dsc);
4683 /* Should be unreachable. */
4684 return 1;
4687 static int
4688 decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
4689 struct regcache *regs,
4690 struct displaced_step_closure *dsc)
4692 int a = bit (insn, 25), b = bit (insn, 4);
4693 uint32_t op1 = bits (insn, 20, 24);
4694 int rn_f = bits (insn, 16, 19) == 0xf;
4696 if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
4697 || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
4698 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 0, 0);
4699 else if ((!a && (op1 & 0x17) == 0x02)
4700 || (a && (op1 & 0x17) == 0x02 && !b))
4701 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 0, 1);
4702 else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
4703 || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
4704 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 0, 0);
4705 else if ((!a && (op1 & 0x17) == 0x03)
4706 || (a && (op1 & 0x17) == 0x03 && !b))
4707 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 0, 1);
4708 else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
4709 || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
4710 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
4711 else if ((!a && (op1 & 0x17) == 0x06)
4712 || (a && (op1 & 0x17) == 0x06 && !b))
4713 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
4714 else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
4715 || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
4716 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
4717 else if ((!a && (op1 & 0x17) == 0x07)
4718 || (a && (op1 & 0x17) == 0x07 && !b))
4719 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
4721 /* Should be unreachable. */
4722 return 1;
4725 static int
4726 decode_media (struct gdbarch *gdbarch, uint32_t insn,
4727 struct displaced_step_closure *dsc)
4729 switch (bits (insn, 20, 24))
4731 case 0x00: case 0x01: case 0x02: case 0x03:
4732 return copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
4734 case 0x04: case 0x05: case 0x06: case 0x07:
4735 return copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
4737 case 0x08: case 0x09: case 0x0a: case 0x0b:
4738 case 0x0c: case 0x0d: case 0x0e: case 0x0f:
4739 return copy_unmodified (gdbarch, insn,
4740 "decode/pack/unpack/saturate/reverse", dsc);
4742 case 0x18:
4743 if (bits (insn, 5, 7) == 0) /* op2. */
4745 if (bits (insn, 12, 15) == 0xf)
4746 return copy_unmodified (gdbarch, insn, "usad8", dsc);
4747 else
4748 return copy_unmodified (gdbarch, insn, "usada8", dsc);
4750 else
4751 return copy_undef (gdbarch, insn, dsc);
4753 case 0x1a: case 0x1b:
4754 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
4755 return copy_unmodified (gdbarch, insn, "sbfx", dsc);
4756 else
4757 return copy_undef (gdbarch, insn, dsc);
4759 case 0x1c: case 0x1d:
4760 if (bits (insn, 5, 6) == 0x0) /* op2[1:0]. */
4762 if (bits (insn, 0, 3) == 0xf)
4763 return copy_unmodified (gdbarch, insn, "bfc", dsc);
4764 else
4765 return copy_unmodified (gdbarch, insn, "bfi", dsc);
4767 else
4768 return copy_undef (gdbarch, insn, dsc);
4770 case 0x1e: case 0x1f:
4771 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
4772 return copy_unmodified (gdbarch, insn, "ubfx", dsc);
4773 else
4774 return copy_undef (gdbarch, insn, dsc);
4777 /* Should be unreachable. */
4778 return 1;
4781 static int
4782 decode_b_bl_ldmstm (struct gdbarch *gdbarch, int32_t insn,
4783 struct regcache *regs, struct displaced_step_closure *dsc)
4785 if (bit (insn, 25))
4786 return copy_b_bl_blx (gdbarch, insn, regs, dsc);
4787 else
4788 return copy_block_xfer (gdbarch, insn, regs, dsc);
4791 static int
4792 decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
4793 struct regcache *regs, struct displaced_step_closure *dsc)
4795 unsigned int opcode = bits (insn, 20, 24);
4797 switch (opcode)
4799 case 0x04: case 0x05: /* VFP/Neon mrrc/mcrr. */
4800 return copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
4802 case 0x08: case 0x0a: case 0x0c: case 0x0e:
4803 case 0x12: case 0x16:
4804 return copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
4806 case 0x09: case 0x0b: case 0x0d: case 0x0f:
4807 case 0x13: case 0x17:
4808 return copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
4810 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
4811 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
4812 /* Note: no writeback for these instructions. Bit 25 will always be
4813 zero though (via caller), so the following works OK. */
4814 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4817 /* Should be unreachable. */
4818 return 1;
4821 static int
4822 decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
4823 struct regcache *regs, struct displaced_step_closure *dsc)
4825 unsigned int op1 = bits (insn, 20, 25);
4826 int op = bit (insn, 4);
4827 unsigned int coproc = bits (insn, 8, 11);
4828 unsigned int rn = bits (insn, 16, 19);
4830 if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
4831 return decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
4832 else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
4833 && (coproc & 0xe) != 0xa)
4834 /* stc/stc2. */
4835 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4836 else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
4837 && (coproc & 0xe) != 0xa)
4838 /* ldc/ldc2 imm/lit. */
4839 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4840 else if ((op1 & 0x3e) == 0x00)
4841 return copy_undef (gdbarch, insn, dsc);
4842 else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
4843 return copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
4844 else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
4845 return copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
4846 else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
4847 return copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
4848 else if ((op1 & 0x30) == 0x20 && !op)
4850 if ((coproc & 0xe) == 0xa)
4851 return copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
4852 else
4853 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4855 else if ((op1 & 0x30) == 0x20 && op)
4856 return copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
4857 else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
4858 return copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
4859 else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
4860 return copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
4861 else if ((op1 & 0x30) == 0x30)
4862 return copy_svc (gdbarch, insn, to, regs, dsc);
4863 else
4864 return copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
4867 void
4868 arm_process_displaced_insn (struct gdbarch *gdbarch, uint32_t insn,
4869 CORE_ADDR from, CORE_ADDR to, struct regcache *regs,
4870 struct displaced_step_closure *dsc)
4872 int err = 0;
4874 if (!displaced_in_arm_mode (regs))
4875 error (_("Displaced stepping is only supported in ARM mode"));
4877 /* Most displaced instructions use a 1-instruction scratch space, so set this
4878 here and override below if/when necessary. */
4879 dsc->numinsns = 1;
4880 dsc->insn_addr = from;
4881 dsc->scratch_base = to;
4882 dsc->cleanup = NULL;
4883 dsc->wrote_to_pc = 0;
4885 if ((insn & 0xf0000000) == 0xf0000000)
4886 err = decode_unconditional (gdbarch, insn, regs, dsc);
4887 else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
4889 case 0x0: case 0x1: case 0x2: case 0x3:
4890 err = decode_dp_misc (gdbarch, insn, regs, dsc);
4891 break;
4893 case 0x4: case 0x5: case 0x6:
4894 err = decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
4895 break;
4897 case 0x7:
4898 err = decode_media (gdbarch, insn, dsc);
4899 break;
4901 case 0x8: case 0x9: case 0xa: case 0xb:
4902 err = decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
4903 break;
4905 case 0xc: case 0xd: case 0xe: case 0xf:
4906 err = decode_svc_copro (gdbarch, insn, to, regs, dsc);
4907 break;
4910 if (err)
4911 internal_error (__FILE__, __LINE__,
4912 _("arm_process_displaced_insn: Instruction decode error"));
4915 /* Actually set up the scratch space for a displaced instruction. */
4917 void
4918 arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
4919 CORE_ADDR to, struct displaced_step_closure *dsc)
4921 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4922 unsigned int i;
4923 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
4925 /* Poke modified instruction(s). */
4926 for (i = 0; i < dsc->numinsns; i++)
4928 if (debug_displaced)
4929 fprintf_unfiltered (gdb_stdlog, "displaced: writing insn %.8lx at "
4930 "%.8lx\n", (unsigned long) dsc->modinsn[i],
4931 (unsigned long) to + i * 4);
4932 write_memory_unsigned_integer (to + i * 4, 4, byte_order_for_code,
4933 dsc->modinsn[i]);
4936 /* Put breakpoint afterwards. */
4937 write_memory (to + dsc->numinsns * 4, tdep->arm_breakpoint,
4938 tdep->arm_breakpoint_size);
4940 if (debug_displaced)
4941 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
4942 paddress (gdbarch, from), paddress (gdbarch, to));
4945 /* Entry point for copying an instruction into scratch space for displaced
4946 stepping. */
4948 struct displaced_step_closure *
4949 arm_displaced_step_copy_insn (struct gdbarch *gdbarch,
4950 CORE_ADDR from, CORE_ADDR to,
4951 struct regcache *regs)
4953 struct displaced_step_closure *dsc
4954 = xmalloc (sizeof (struct displaced_step_closure));
4955 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
4956 uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
4958 if (debug_displaced)
4959 fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
4960 "at %.8lx\n", (unsigned long) insn,
4961 (unsigned long) from);
4963 arm_process_displaced_insn (gdbarch, insn, from, to, regs, dsc);
4964 arm_displaced_init_closure (gdbarch, from, to, dsc);
4966 return dsc;
4969 /* Entry point for cleaning things up after a displaced instruction has been
4970 single-stepped. */
4972 void
4973 arm_displaced_step_fixup (struct gdbarch *gdbarch,
4974 struct displaced_step_closure *dsc,
4975 CORE_ADDR from, CORE_ADDR to,
4976 struct regcache *regs)
4978 if (dsc->cleanup)
4979 dsc->cleanup (gdbarch, regs, dsc);
4981 if (!dsc->wrote_to_pc)
4982 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, dsc->insn_addr + 4);
4985 #include "bfd-in2.h"
4986 #include "libcoff.h"
4988 static int
4989 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
4991 if (arm_pc_is_thumb (memaddr))
4993 static asymbol *asym;
4994 static combined_entry_type ce;
4995 static struct coff_symbol_struct csym;
4996 static struct bfd fake_bfd;
4997 static bfd_target fake_target;
4999 if (csym.native == NULL)
5001 /* Create a fake symbol vector containing a Thumb symbol.
5002 This is solely so that the code in print_insn_little_arm()
5003 and print_insn_big_arm() in opcodes/arm-dis.c will detect
5004 the presence of a Thumb symbol and switch to decoding
5005 Thumb instructions. */
5007 fake_target.flavour = bfd_target_coff_flavour;
5008 fake_bfd.xvec = &fake_target;
5009 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
5010 csym.native = &ce;
5011 csym.symbol.the_bfd = &fake_bfd;
5012 csym.symbol.name = "fake";
5013 asym = (asymbol *) & csym;
5016 memaddr = UNMAKE_THUMB_ADDR (memaddr);
5017 info->symbols = &asym;
5019 else
5020 info->symbols = NULL;
5022 if (info->endian == BFD_ENDIAN_BIG)
5023 return print_insn_big_arm (memaddr, info);
5024 else
5025 return print_insn_little_arm (memaddr, info);
5028 /* The following define instruction sequences that will cause ARM
5029 cpu's to take an undefined instruction trap. These are used to
5030 signal a breakpoint to GDB.
5032 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
5033 modes. A different instruction is required for each mode. The ARM
5034 cpu's can also be big or little endian. Thus four different
5035 instructions are needed to support all cases.
5037 Note: ARMv4 defines several new instructions that will take the
5038 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
5039 not in fact add the new instructions. The new undefined
5040 instructions in ARMv4 are all instructions that had no defined
5041 behaviour in earlier chips. There is no guarantee that they will
5042 raise an exception, but may be treated as NOP's. In practice, it
5043 may only safe to rely on instructions matching:
5045 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
5046 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
5047 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
5049 Even this may only true if the condition predicate is true. The
5050 following use a condition predicate of ALWAYS so it is always TRUE.
5052 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
5053 and NetBSD all use a software interrupt rather than an undefined
5054 instruction to force a trap. This can be handled by by the
5055 abi-specific code during establishment of the gdbarch vector. */
5057 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
5058 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
5059 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
5060 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
5062 static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
5063 static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
5064 static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
5065 static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
5067 /* Determine the type and size of breakpoint to insert at PCPTR. Uses
5068 the program counter value to determine whether a 16-bit or 32-bit
5069 breakpoint should be used. It returns a pointer to a string of
5070 bytes that encode a breakpoint instruction, stores the length of
5071 the string to *lenptr, and adjusts the program counter (if
5072 necessary) to point to the actual memory location where the
5073 breakpoint should be inserted. */
5075 static const unsigned char *
5076 arm_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
5078 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5079 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5081 if (arm_pc_is_thumb (*pcptr))
5083 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
5085 /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
5086 check whether we are replacing a 32-bit instruction. */
5087 if (tdep->thumb2_breakpoint != NULL)
5089 gdb_byte buf[2];
5090 if (target_read_memory (*pcptr, buf, 2) == 0)
5092 unsigned short inst1;
5093 inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
5094 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
5096 *lenptr = tdep->thumb2_breakpoint_size;
5097 return tdep->thumb2_breakpoint;
5102 *lenptr = tdep->thumb_breakpoint_size;
5103 return tdep->thumb_breakpoint;
5105 else
5107 *lenptr = tdep->arm_breakpoint_size;
5108 return tdep->arm_breakpoint;
5112 static void
5113 arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
5114 int *kindptr)
5116 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5118 arm_breakpoint_from_pc (gdbarch, pcptr, kindptr);
5120 if (arm_pc_is_thumb (*pcptr) && *kindptr == 4)
5121 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so
5122 that this is not confused with a 32-bit ARM breakpoint. */
5123 *kindptr = 3;
5126 /* Extract from an array REGBUF containing the (raw) register state a
5127 function return value of type TYPE, and copy that, in virtual
5128 format, into VALBUF. */
5130 static void
5131 arm_extract_return_value (struct type *type, struct regcache *regs,
5132 gdb_byte *valbuf)
5134 struct gdbarch *gdbarch = get_regcache_arch (regs);
5135 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5137 if (TYPE_CODE_FLT == TYPE_CODE (type))
5139 switch (gdbarch_tdep (gdbarch)->fp_model)
5141 case ARM_FLOAT_FPA:
5143 /* The value is in register F0 in internal format. We need to
5144 extract the raw value and then convert it to the desired
5145 internal type. */
5146 bfd_byte tmpbuf[FP_REGISTER_SIZE];
5148 regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
5149 convert_from_extended (floatformat_from_type (type), tmpbuf,
5150 valbuf, gdbarch_byte_order (gdbarch));
5152 break;
5154 case ARM_FLOAT_SOFT_FPA:
5155 case ARM_FLOAT_SOFT_VFP:
5156 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5157 not using the VFP ABI code. */
5158 case ARM_FLOAT_VFP:
5159 regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
5160 if (TYPE_LENGTH (type) > 4)
5161 regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
5162 valbuf + INT_REGISTER_SIZE);
5163 break;
5165 default:
5166 internal_error
5167 (__FILE__, __LINE__,
5168 _("arm_extract_return_value: Floating point model not supported"));
5169 break;
5172 else if (TYPE_CODE (type) == TYPE_CODE_INT
5173 || TYPE_CODE (type) == TYPE_CODE_CHAR
5174 || TYPE_CODE (type) == TYPE_CODE_BOOL
5175 || TYPE_CODE (type) == TYPE_CODE_PTR
5176 || TYPE_CODE (type) == TYPE_CODE_REF
5177 || TYPE_CODE (type) == TYPE_CODE_ENUM)
5179 /* If the the type is a plain integer, then the access is
5180 straight-forward. Otherwise we have to play around a bit more. */
5181 int len = TYPE_LENGTH (type);
5182 int regno = ARM_A1_REGNUM;
5183 ULONGEST tmp;
5185 while (len > 0)
5187 /* By using store_unsigned_integer we avoid having to do
5188 anything special for small big-endian values. */
5189 regcache_cooked_read_unsigned (regs, regno++, &tmp);
5190 store_unsigned_integer (valbuf,
5191 (len > INT_REGISTER_SIZE
5192 ? INT_REGISTER_SIZE : len),
5193 byte_order, tmp);
5194 len -= INT_REGISTER_SIZE;
5195 valbuf += INT_REGISTER_SIZE;
5198 else
5200 /* For a structure or union the behaviour is as if the value had
5201 been stored to word-aligned memory and then loaded into
5202 registers with 32-bit load instruction(s). */
5203 int len = TYPE_LENGTH (type);
5204 int regno = ARM_A1_REGNUM;
5205 bfd_byte tmpbuf[INT_REGISTER_SIZE];
5207 while (len > 0)
5209 regcache_cooked_read (regs, regno++, tmpbuf);
5210 memcpy (valbuf, tmpbuf,
5211 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
5212 len -= INT_REGISTER_SIZE;
5213 valbuf += INT_REGISTER_SIZE;
5219 /* Will a function return an aggregate type in memory or in a
5220 register? Return 0 if an aggregate type can be returned in a
5221 register, 1 if it must be returned in memory. */
5223 static int
5224 arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
5226 int nRc;
5227 enum type_code code;
5229 CHECK_TYPEDEF (type);
5231 /* In the ARM ABI, "integer" like aggregate types are returned in
5232 registers. For an aggregate type to be integer like, its size
5233 must be less than or equal to INT_REGISTER_SIZE and the
5234 offset of each addressable subfield must be zero. Note that bit
5235 fields are not addressable, and all addressable subfields of
5236 unions always start at offset zero.
5238 This function is based on the behaviour of GCC 2.95.1.
5239 See: gcc/arm.c: arm_return_in_memory() for details.
5241 Note: All versions of GCC before GCC 2.95.2 do not set up the
5242 parameters correctly for a function returning the following
5243 structure: struct { float f;}; This should be returned in memory,
5244 not a register. Richard Earnshaw sent me a patch, but I do not
5245 know of any way to detect if a function like the above has been
5246 compiled with the correct calling convention. */
5248 /* All aggregate types that won't fit in a register must be returned
5249 in memory. */
5250 if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
5252 return 1;
5255 /* The AAPCS says all aggregates not larger than a word are returned
5256 in a register. */
5257 if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
5258 return 0;
5260 /* The only aggregate types that can be returned in a register are
5261 structs and unions. Arrays must be returned in memory. */
5262 code = TYPE_CODE (type);
5263 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
5265 return 1;
5268 /* Assume all other aggregate types can be returned in a register.
5269 Run a check for structures, unions and arrays. */
5270 nRc = 0;
5272 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
5274 int i;
5275 /* Need to check if this struct/union is "integer" like. For
5276 this to be true, its size must be less than or equal to
5277 INT_REGISTER_SIZE and the offset of each addressable
5278 subfield must be zero. Note that bit fields are not
5279 addressable, and unions always start at offset zero. If any
5280 of the subfields is a floating point type, the struct/union
5281 cannot be an integer type. */
5283 /* For each field in the object, check:
5284 1) Is it FP? --> yes, nRc = 1;
5285 2) Is it addressable (bitpos != 0) and
5286 not packed (bitsize == 0)?
5287 --> yes, nRc = 1
5290 for (i = 0; i < TYPE_NFIELDS (type); i++)
5292 enum type_code field_type_code;
5293 field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i)));
5295 /* Is it a floating point type field? */
5296 if (field_type_code == TYPE_CODE_FLT)
5298 nRc = 1;
5299 break;
5302 /* If bitpos != 0, then we have to care about it. */
5303 if (TYPE_FIELD_BITPOS (type, i) != 0)
5305 /* Bitfields are not addressable. If the field bitsize is
5306 zero, then the field is not packed. Hence it cannot be
5307 a bitfield or any other packed type. */
5308 if (TYPE_FIELD_BITSIZE (type, i) == 0)
5310 nRc = 1;
5311 break;
5317 return nRc;
5320 /* Write into appropriate registers a function return value of type
5321 TYPE, given in virtual format. */
5323 static void
5324 arm_store_return_value (struct type *type, struct regcache *regs,
5325 const gdb_byte *valbuf)
5327 struct gdbarch *gdbarch = get_regcache_arch (regs);
5328 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5330 if (TYPE_CODE (type) == TYPE_CODE_FLT)
5332 char buf[MAX_REGISTER_SIZE];
5334 switch (gdbarch_tdep (gdbarch)->fp_model)
5336 case ARM_FLOAT_FPA:
5338 convert_to_extended (floatformat_from_type (type), buf, valbuf,
5339 gdbarch_byte_order (gdbarch));
5340 regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
5341 break;
5343 case ARM_FLOAT_SOFT_FPA:
5344 case ARM_FLOAT_SOFT_VFP:
5345 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5346 not using the VFP ABI code. */
5347 case ARM_FLOAT_VFP:
5348 regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
5349 if (TYPE_LENGTH (type) > 4)
5350 regcache_cooked_write (regs, ARM_A1_REGNUM + 1,
5351 valbuf + INT_REGISTER_SIZE);
5352 break;
5354 default:
5355 internal_error
5356 (__FILE__, __LINE__,
5357 _("arm_store_return_value: Floating point model not supported"));
5358 break;
5361 else if (TYPE_CODE (type) == TYPE_CODE_INT
5362 || TYPE_CODE (type) == TYPE_CODE_CHAR
5363 || TYPE_CODE (type) == TYPE_CODE_BOOL
5364 || TYPE_CODE (type) == TYPE_CODE_PTR
5365 || TYPE_CODE (type) == TYPE_CODE_REF
5366 || TYPE_CODE (type) == TYPE_CODE_ENUM)
5368 if (TYPE_LENGTH (type) <= 4)
5370 /* Values of one word or less are zero/sign-extended and
5371 returned in r0. */
5372 bfd_byte tmpbuf[INT_REGISTER_SIZE];
5373 LONGEST val = unpack_long (type, valbuf);
5375 store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
5376 regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
5378 else
5380 /* Integral values greater than one word are stored in consecutive
5381 registers starting with r0. This will always be a multiple of
5382 the regiser size. */
5383 int len = TYPE_LENGTH (type);
5384 int regno = ARM_A1_REGNUM;
5386 while (len > 0)
5388 regcache_cooked_write (regs, regno++, valbuf);
5389 len -= INT_REGISTER_SIZE;
5390 valbuf += INT_REGISTER_SIZE;
5394 else
5396 /* For a structure or union the behaviour is as if the value had
5397 been stored to word-aligned memory and then loaded into
5398 registers with 32-bit load instruction(s). */
5399 int len = TYPE_LENGTH (type);
5400 int regno = ARM_A1_REGNUM;
5401 bfd_byte tmpbuf[INT_REGISTER_SIZE];
5403 while (len > 0)
5405 memcpy (tmpbuf, valbuf,
5406 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
5407 regcache_cooked_write (regs, regno++, tmpbuf);
5408 len -= INT_REGISTER_SIZE;
5409 valbuf += INT_REGISTER_SIZE;
5415 /* Handle function return values. */
5417 static enum return_value_convention
5418 arm_return_value (struct gdbarch *gdbarch, struct type *func_type,
5419 struct type *valtype, struct regcache *regcache,
5420 gdb_byte *readbuf, const gdb_byte *writebuf)
5422 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5423 enum arm_vfp_cprc_base_type vfp_base_type;
5424 int vfp_base_count;
5426 if (arm_vfp_abi_for_function (gdbarch, func_type)
5427 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
5429 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
5430 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
5431 int i;
5432 for (i = 0; i < vfp_base_count; i++)
5434 if (reg_char == 'q')
5436 if (writebuf)
5437 arm_neon_quad_write (gdbarch, regcache, i,
5438 writebuf + i * unit_length);
5440 if (readbuf)
5441 arm_neon_quad_read (gdbarch, regcache, i,
5442 readbuf + i * unit_length);
5444 else
5446 char name_buf[4];
5447 int regnum;
5449 sprintf (name_buf, "%c%d", reg_char, i);
5450 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
5451 strlen (name_buf));
5452 if (writebuf)
5453 regcache_cooked_write (regcache, regnum,
5454 writebuf + i * unit_length);
5455 if (readbuf)
5456 regcache_cooked_read (regcache, regnum,
5457 readbuf + i * unit_length);
5460 return RETURN_VALUE_REGISTER_CONVENTION;
5463 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
5464 || TYPE_CODE (valtype) == TYPE_CODE_UNION
5465 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
5467 if (tdep->struct_return == pcc_struct_return
5468 || arm_return_in_memory (gdbarch, valtype))
5469 return RETURN_VALUE_STRUCT_CONVENTION;
5472 if (writebuf)
5473 arm_store_return_value (valtype, regcache, writebuf);
5475 if (readbuf)
5476 arm_extract_return_value (valtype, regcache, readbuf);
5478 return RETURN_VALUE_REGISTER_CONVENTION;
5482 static int
5483 arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
5485 struct gdbarch *gdbarch = get_frame_arch (frame);
5486 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5487 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5488 CORE_ADDR jb_addr;
5489 char buf[INT_REGISTER_SIZE];
5491 jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
5493 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
5494 INT_REGISTER_SIZE))
5495 return 0;
5497 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
5498 return 1;
5501 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
5502 return the target PC. Otherwise return 0. */
5504 CORE_ADDR
5505 arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
5507 char *name;
5508 int namelen;
5509 CORE_ADDR start_addr;
5511 /* Find the starting address and name of the function containing the PC. */
5512 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
5513 return 0;
5515 /* If PC is in a Thumb call or return stub, return the address of the
5516 target PC, which is in a register. The thunk functions are called
5517 _call_via_xx, where x is the register name. The possible names
5518 are r0-r9, sl, fp, ip, sp, and lr. ARM RealView has similar
5519 functions, named __ARM_call_via_r[0-7]. */
5520 if (strncmp (name, "_call_via_", 10) == 0
5521 || strncmp (name, "__ARM_call_via_", strlen ("__ARM_call_via_")) == 0)
5523 /* Use the name suffix to determine which register contains the
5524 target PC. */
5525 static char *table[15] =
5526 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
5527 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
5529 int regno;
5530 int offset = strlen (name) - 2;
5532 for (regno = 0; regno <= 14; regno++)
5533 if (strcmp (&name[offset], table[regno]) == 0)
5534 return get_frame_register_unsigned (frame, regno);
5537 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
5538 non-interworking calls to foo. We could decode the stubs
5539 to find the target but it's easier to use the symbol table. */
5540 namelen = strlen (name);
5541 if (name[0] == '_' && name[1] == '_'
5542 && ((namelen > 2 + strlen ("_from_thumb")
5543 && strncmp (name + namelen - strlen ("_from_thumb"), "_from_thumb",
5544 strlen ("_from_thumb")) == 0)
5545 || (namelen > 2 + strlen ("_from_arm")
5546 && strncmp (name + namelen - strlen ("_from_arm"), "_from_arm",
5547 strlen ("_from_arm")) == 0)))
5549 char *target_name;
5550 int target_len = namelen - 2;
5551 struct minimal_symbol *minsym;
5552 struct objfile *objfile;
5553 struct obj_section *sec;
5555 if (name[namelen - 1] == 'b')
5556 target_len -= strlen ("_from_thumb");
5557 else
5558 target_len -= strlen ("_from_arm");
5560 target_name = alloca (target_len + 1);
5561 memcpy (target_name, name + 2, target_len);
5562 target_name[target_len] = '\0';
5564 sec = find_pc_section (pc);
5565 objfile = (sec == NULL) ? NULL : sec->objfile;
5566 minsym = lookup_minimal_symbol (target_name, NULL, objfile);
5567 if (minsym != NULL)
5568 return SYMBOL_VALUE_ADDRESS (minsym);
5569 else
5570 return 0;
5573 return 0; /* not a stub */
5576 static void
5577 set_arm_command (char *args, int from_tty)
5579 printf_unfiltered (_("\
5580 \"set arm\" must be followed by an apporpriate subcommand.\n"));
5581 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
5584 static void
5585 show_arm_command (char *args, int from_tty)
5587 cmd_show_list (showarmcmdlist, from_tty, "");
5590 static void
5591 arm_update_current_architecture (void)
5593 struct gdbarch_info info;
5595 /* If the current architecture is not ARM, we have nothing to do. */
5596 if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_arm)
5597 return;
5599 /* Update the architecture. */
5600 gdbarch_info_init (&info);
5602 if (!gdbarch_update_p (info))
5603 internal_error (__FILE__, __LINE__, "could not update architecture");
5606 static void
5607 set_fp_model_sfunc (char *args, int from_tty,
5608 struct cmd_list_element *c)
5610 enum arm_float_model fp_model;
5612 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
5613 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
5615 arm_fp_model = fp_model;
5616 break;
5619 if (fp_model == ARM_FLOAT_LAST)
5620 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
5621 current_fp_model);
5623 arm_update_current_architecture ();
5626 static void
5627 show_fp_model (struct ui_file *file, int from_tty,
5628 struct cmd_list_element *c, const char *value)
5630 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
5632 if (arm_fp_model == ARM_FLOAT_AUTO
5633 && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_arm)
5634 fprintf_filtered (file, _("\
5635 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
5636 fp_model_strings[tdep->fp_model]);
5637 else
5638 fprintf_filtered (file, _("\
5639 The current ARM floating point model is \"%s\".\n"),
5640 fp_model_strings[arm_fp_model]);
5643 static void
5644 arm_set_abi (char *args, int from_tty,
5645 struct cmd_list_element *c)
5647 enum arm_abi_kind arm_abi;
5649 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
5650 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
5652 arm_abi_global = arm_abi;
5653 break;
5656 if (arm_abi == ARM_ABI_LAST)
5657 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
5658 arm_abi_string);
5660 arm_update_current_architecture ();
5663 static void
5664 arm_show_abi (struct ui_file *file, int from_tty,
5665 struct cmd_list_element *c, const char *value)
5667 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
5669 if (arm_abi_global == ARM_ABI_AUTO
5670 && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_arm)
5671 fprintf_filtered (file, _("\
5672 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
5673 arm_abi_strings[tdep->arm_abi]);
5674 else
5675 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
5676 arm_abi_string);
5679 static void
5680 arm_show_fallback_mode (struct ui_file *file, int from_tty,
5681 struct cmd_list_element *c, const char *value)
5683 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
5685 fprintf_filtered (file, _("\
5686 The current execution mode assumed (when symbols are unavailable) is \"%s\".\n"),
5687 arm_fallback_mode_string);
5690 static void
5691 arm_show_force_mode (struct ui_file *file, int from_tty,
5692 struct cmd_list_element *c, const char *value)
5694 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
5696 fprintf_filtered (file, _("\
5697 The current execution mode assumed (even when symbols are available) is \"%s\".\n"),
5698 arm_force_mode_string);
5701 /* If the user changes the register disassembly style used for info
5702 register and other commands, we have to also switch the style used
5703 in opcodes for disassembly output. This function is run in the "set
5704 arm disassembly" command, and does that. */
5706 static void
5707 set_disassembly_style_sfunc (char *args, int from_tty,
5708 struct cmd_list_element *c)
5710 set_disassembly_style ();
5713 /* Return the ARM register name corresponding to register I. */
5714 static const char *
5715 arm_register_name (struct gdbarch *gdbarch, int i)
5717 const int num_regs = gdbarch_num_regs (gdbarch);
5719 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
5720 && i >= num_regs && i < num_regs + 32)
5722 static const char *const vfp_pseudo_names[] = {
5723 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
5724 "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
5725 "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
5726 "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
5729 return vfp_pseudo_names[i - num_regs];
5732 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
5733 && i >= num_regs + 32 && i < num_regs + 32 + 16)
5735 static const char *const neon_pseudo_names[] = {
5736 "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
5737 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
5740 return neon_pseudo_names[i - num_regs - 32];
5743 if (i >= ARRAY_SIZE (arm_register_names))
5744 /* These registers are only supported on targets which supply
5745 an XML description. */
5746 return "";
5748 return arm_register_names[i];
5751 static void
5752 set_disassembly_style (void)
5754 int current;
5756 /* Find the style that the user wants. */
5757 for (current = 0; current < num_disassembly_options; current++)
5758 if (disassembly_style == valid_disassembly_styles[current])
5759 break;
5760 gdb_assert (current < num_disassembly_options);
5762 /* Synchronize the disassembler. */
5763 set_arm_regname_option (current);
5766 /* Test whether the coff symbol specific value corresponds to a Thumb
5767 function. */
5769 static int
5770 coff_sym_is_thumb (int val)
5772 return (val == C_THUMBEXT
5773 || val == C_THUMBSTAT
5774 || val == C_THUMBEXTFUNC
5775 || val == C_THUMBSTATFUNC
5776 || val == C_THUMBLABEL);
5779 /* arm_coff_make_msymbol_special()
5780 arm_elf_make_msymbol_special()
5782 These functions test whether the COFF or ELF symbol corresponds to
5783 an address in thumb code, and set a "special" bit in a minimal
5784 symbol to indicate that it does. */
5786 static void
5787 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
5789 /* Thumb symbols are of type STT_LOPROC, (synonymous with
5790 STT_ARM_TFUNC). */
5791 if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
5792 == STT_LOPROC)
5793 MSYMBOL_SET_SPECIAL (msym);
5796 static void
5797 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
5799 if (coff_sym_is_thumb (val))
5800 MSYMBOL_SET_SPECIAL (msym);
5803 static void
5804 arm_objfile_data_free (struct objfile *objfile, void *arg)
5806 struct arm_per_objfile *data = arg;
5807 unsigned int i;
5809 for (i = 0; i < objfile->obfd->section_count; i++)
5810 VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
5813 static void
5814 arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
5815 asymbol *sym)
5817 const char *name = bfd_asymbol_name (sym);
5818 struct arm_per_objfile *data;
5819 VEC(arm_mapping_symbol_s) **map_p;
5820 struct arm_mapping_symbol new_map_sym;
5822 gdb_assert (name[0] == '$');
5823 if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
5824 return;
5826 data = objfile_data (objfile, arm_objfile_data_key);
5827 if (data == NULL)
5829 data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
5830 struct arm_per_objfile);
5831 set_objfile_data (objfile, arm_objfile_data_key, data);
5832 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
5833 objfile->obfd->section_count,
5834 VEC(arm_mapping_symbol_s) *);
5836 map_p = &data->section_maps[bfd_get_section (sym)->index];
5838 new_map_sym.value = sym->value;
5839 new_map_sym.type = name[1];
5841 /* Assume that most mapping symbols appear in order of increasing
5842 value. If they were randomly distributed, it would be faster to
5843 always push here and then sort at first use. */
5844 if (!VEC_empty (arm_mapping_symbol_s, *map_p))
5846 struct arm_mapping_symbol *prev_map_sym;
5848 prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
5849 if (prev_map_sym->value >= sym->value)
5851 unsigned int idx;
5852 idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
5853 arm_compare_mapping_symbols);
5854 VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
5855 return;
5859 VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
5862 static void
5863 arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
5865 regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
5867 /* If necessary, set the T bit. */
5868 if (arm_apcs_32)
5870 ULONGEST val;
5871 regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
5872 if (arm_pc_is_thumb (pc))
5873 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM, val | CPSR_T);
5874 else
5875 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
5876 val & ~(ULONGEST) CPSR_T);
5880 /* Read the contents of a NEON quad register, by reading from two
5881 double registers. This is used to implement the quad pseudo
5882 registers, and for argument passing in case the quad registers are
5883 missing; vectors are passed in quad registers when using the VFP
5884 ABI, even if a NEON unit is not present. REGNUM is the index of
5885 the quad register, in [0, 15]. */
5887 static void
5888 arm_neon_quad_read (struct gdbarch *gdbarch, struct regcache *regcache,
5889 int regnum, gdb_byte *buf)
5891 char name_buf[4];
5892 gdb_byte reg_buf[8];
5893 int offset, double_regnum;
5895 sprintf (name_buf, "d%d", regnum << 1);
5896 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
5897 strlen (name_buf));
5899 /* d0 is always the least significant half of q0. */
5900 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
5901 offset = 8;
5902 else
5903 offset = 0;
5905 regcache_raw_read (regcache, double_regnum, reg_buf);
5906 memcpy (buf + offset, reg_buf, 8);
5908 offset = 8 - offset;
5909 regcache_raw_read (regcache, double_regnum + 1, reg_buf);
5910 memcpy (buf + offset, reg_buf, 8);
5913 static void
5914 arm_pseudo_read (struct gdbarch *gdbarch, struct regcache *regcache,
5915 int regnum, gdb_byte *buf)
5917 const int num_regs = gdbarch_num_regs (gdbarch);
5918 char name_buf[4];
5919 gdb_byte reg_buf[8];
5920 int offset, double_regnum;
5922 gdb_assert (regnum >= num_regs);
5923 regnum -= num_regs;
5925 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
5926 /* Quad-precision register. */
5927 arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
5928 else
5930 /* Single-precision register. */
5931 gdb_assert (regnum < 32);
5933 /* s0 is always the least significant half of d0. */
5934 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
5935 offset = (regnum & 1) ? 0 : 4;
5936 else
5937 offset = (regnum & 1) ? 4 : 0;
5939 sprintf (name_buf, "d%d", regnum >> 1);
5940 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
5941 strlen (name_buf));
5943 regcache_raw_read (regcache, double_regnum, reg_buf);
5944 memcpy (buf, reg_buf + offset, 4);
5948 /* Store the contents of BUF to a NEON quad register, by writing to
5949 two double registers. This is used to implement the quad pseudo
5950 registers, and for argument passing in case the quad registers are
5951 missing; vectors are passed in quad registers when using the VFP
5952 ABI, even if a NEON unit is not present. REGNUM is the index
5953 of the quad register, in [0, 15]. */
5955 static void
5956 arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
5957 int regnum, const gdb_byte *buf)
5959 char name_buf[4];
5960 gdb_byte reg_buf[8];
5961 int offset, double_regnum;
5963 sprintf (name_buf, "d%d", regnum << 1);
5964 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
5965 strlen (name_buf));
5967 /* d0 is always the least significant half of q0. */
5968 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
5969 offset = 8;
5970 else
5971 offset = 0;
5973 regcache_raw_write (regcache, double_regnum, buf + offset);
5974 offset = 8 - offset;
5975 regcache_raw_write (regcache, double_regnum + 1, buf + offset);
5978 static void
5979 arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
5980 int regnum, const gdb_byte *buf)
5982 const int num_regs = gdbarch_num_regs (gdbarch);
5983 char name_buf[4];
5984 gdb_byte reg_buf[8];
5985 int offset, double_regnum;
5987 gdb_assert (regnum >= num_regs);
5988 regnum -= num_regs;
5990 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
5991 /* Quad-precision register. */
5992 arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
5993 else
5995 /* Single-precision register. */
5996 gdb_assert (regnum < 32);
5998 /* s0 is always the least significant half of d0. */
5999 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6000 offset = (regnum & 1) ? 0 : 4;
6001 else
6002 offset = (regnum & 1) ? 4 : 0;
6004 sprintf (name_buf, "d%d", regnum >> 1);
6005 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6006 strlen (name_buf));
6008 regcache_raw_read (regcache, double_regnum, reg_buf);
6009 memcpy (reg_buf + offset, buf, 4);
6010 regcache_raw_write (regcache, double_regnum, reg_buf);
6014 static struct value *
6015 value_of_arm_user_reg (struct frame_info *frame, const void *baton)
6017 const int *reg_p = baton;
6018 return value_of_register (*reg_p, frame);
6021 static enum gdb_osabi
6022 arm_elf_osabi_sniffer (bfd *abfd)
6024 unsigned int elfosabi;
6025 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
6027 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
6029 if (elfosabi == ELFOSABI_ARM)
6030 /* GNU tools use this value. Check note sections in this case,
6031 as well. */
6032 bfd_map_over_sections (abfd,
6033 generic_elf_osabi_sniff_abi_tag_sections,
6034 &osabi);
6036 /* Anything else will be handled by the generic ELF sniffer. */
6037 return osabi;
6041 /* Initialize the current architecture based on INFO. If possible,
6042 re-use an architecture from ARCHES, which is a list of
6043 architectures already created during this debugging session.
6045 Called e.g. at program startup, when reading a core file, and when
6046 reading a binary file. */
6048 static struct gdbarch *
6049 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
6051 struct gdbarch_tdep *tdep;
6052 struct gdbarch *gdbarch;
6053 struct gdbarch_list *best_arch;
6054 enum arm_abi_kind arm_abi = arm_abi_global;
6055 enum arm_float_model fp_model = arm_fp_model;
6056 struct tdesc_arch_data *tdesc_data = NULL;
6057 int i;
6058 int have_vfp_registers = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
6059 int have_neon = 0;
6060 int have_fpa_registers = 1;
6062 /* Check any target description for validity. */
6063 if (tdesc_has_registers (info.target_desc))
6065 /* For most registers we require GDB's default names; but also allow
6066 the numeric names for sp / lr / pc, as a convenience. */
6067 static const char *const arm_sp_names[] = { "r13", "sp", NULL };
6068 static const char *const arm_lr_names[] = { "r14", "lr", NULL };
6069 static const char *const arm_pc_names[] = { "r15", "pc", NULL };
6071 const struct tdesc_feature *feature;
6072 int valid_p;
6074 feature = tdesc_find_feature (info.target_desc,
6075 "org.gnu.gdb.arm.core");
6076 if (feature == NULL)
6077 return NULL;
6079 tdesc_data = tdesc_data_alloc ();
6081 valid_p = 1;
6082 for (i = 0; i < ARM_SP_REGNUM; i++)
6083 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6084 arm_register_names[i]);
6085 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6086 ARM_SP_REGNUM,
6087 arm_sp_names);
6088 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6089 ARM_LR_REGNUM,
6090 arm_lr_names);
6091 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6092 ARM_PC_REGNUM,
6093 arm_pc_names);
6094 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6095 ARM_PS_REGNUM, "cpsr");
6097 if (!valid_p)
6099 tdesc_data_cleanup (tdesc_data);
6100 return NULL;
6103 feature = tdesc_find_feature (info.target_desc,
6104 "org.gnu.gdb.arm.fpa");
6105 if (feature != NULL)
6107 valid_p = 1;
6108 for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
6109 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6110 arm_register_names[i]);
6111 if (!valid_p)
6113 tdesc_data_cleanup (tdesc_data);
6114 return NULL;
6117 else
6118 have_fpa_registers = 0;
6120 feature = tdesc_find_feature (info.target_desc,
6121 "org.gnu.gdb.xscale.iwmmxt");
6122 if (feature != NULL)
6124 static const char *const iwmmxt_names[] = {
6125 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
6126 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
6127 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
6128 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
6131 valid_p = 1;
6132 for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
6133 valid_p
6134 &= tdesc_numbered_register (feature, tdesc_data, i,
6135 iwmmxt_names[i - ARM_WR0_REGNUM]);
6137 /* Check for the control registers, but do not fail if they
6138 are missing. */
6139 for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
6140 tdesc_numbered_register (feature, tdesc_data, i,
6141 iwmmxt_names[i - ARM_WR0_REGNUM]);
6143 for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
6144 valid_p
6145 &= tdesc_numbered_register (feature, tdesc_data, i,
6146 iwmmxt_names[i - ARM_WR0_REGNUM]);
6148 if (!valid_p)
6150 tdesc_data_cleanup (tdesc_data);
6151 return NULL;
6155 /* If we have a VFP unit, check whether the single precision registers
6156 are present. If not, then we will synthesize them as pseudo
6157 registers. */
6158 feature = tdesc_find_feature (info.target_desc,
6159 "org.gnu.gdb.arm.vfp");
6160 if (feature != NULL)
6162 static const char *const vfp_double_names[] = {
6163 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
6164 "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
6165 "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
6166 "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
6169 /* Require the double precision registers. There must be either
6170 16 or 32. */
6171 valid_p = 1;
6172 for (i = 0; i < 32; i++)
6174 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6175 ARM_D0_REGNUM + i,
6176 vfp_double_names[i]);
6177 if (!valid_p)
6178 break;
6181 if (!valid_p && i != 16)
6183 tdesc_data_cleanup (tdesc_data);
6184 return NULL;
6187 if (tdesc_unnumbered_register (feature, "s0") == 0)
6188 have_vfp_pseudos = 1;
6190 have_vfp_registers = 1;
6192 /* If we have VFP, also check for NEON. The architecture allows
6193 NEON without VFP (integer vector operations only), but GDB
6194 does not support that. */
6195 feature = tdesc_find_feature (info.target_desc,
6196 "org.gnu.gdb.arm.neon");
6197 if (feature != NULL)
6199 /* NEON requires 32 double-precision registers. */
6200 if (i != 32)
6202 tdesc_data_cleanup (tdesc_data);
6203 return NULL;
6206 /* If there are quad registers defined by the stub, use
6207 their type; otherwise (normally) provide them with
6208 the default type. */
6209 if (tdesc_unnumbered_register (feature, "q0") == 0)
6210 have_neon_pseudos = 1;
6212 have_neon = 1;
6217 /* If we have an object to base this architecture on, try to determine
6218 its ABI. */
6220 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
6222 int ei_osabi, e_flags;
6224 switch (bfd_get_flavour (info.abfd))
6226 case bfd_target_aout_flavour:
6227 /* Assume it's an old APCS-style ABI. */
6228 arm_abi = ARM_ABI_APCS;
6229 break;
6231 case bfd_target_coff_flavour:
6232 /* Assume it's an old APCS-style ABI. */
6233 /* XXX WinCE? */
6234 arm_abi = ARM_ABI_APCS;
6235 break;
6237 case bfd_target_elf_flavour:
6238 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
6239 e_flags = elf_elfheader (info.abfd)->e_flags;
6241 if (ei_osabi == ELFOSABI_ARM)
6243 /* GNU tools used to use this value, but do not for EABI
6244 objects. There's nowhere to tag an EABI version
6245 anyway, so assume APCS. */
6246 arm_abi = ARM_ABI_APCS;
6248 else if (ei_osabi == ELFOSABI_NONE)
6250 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
6252 switch (eabi_ver)
6254 case EF_ARM_EABI_UNKNOWN:
6255 /* Assume GNU tools. */
6256 arm_abi = ARM_ABI_APCS;
6257 break;
6259 case EF_ARM_EABI_VER4:
6260 case EF_ARM_EABI_VER5:
6261 arm_abi = ARM_ABI_AAPCS;
6262 /* EABI binaries default to VFP float ordering.
6263 They may also contain build attributes that can
6264 be used to identify if the VFP argument-passing
6265 ABI is in use. */
6266 if (fp_model == ARM_FLOAT_AUTO)
6268 #ifdef HAVE_ELF
6269 switch (bfd_elf_get_obj_attr_int (info.abfd,
6270 OBJ_ATTR_PROC,
6271 Tag_ABI_VFP_args))
6273 case 0:
6274 /* "The user intended FP parameter/result
6275 passing to conform to AAPCS, base
6276 variant". */
6277 fp_model = ARM_FLOAT_SOFT_VFP;
6278 break;
6279 case 1:
6280 /* "The user intended FP parameter/result
6281 passing to conform to AAPCS, VFP
6282 variant". */
6283 fp_model = ARM_FLOAT_VFP;
6284 break;
6285 case 2:
6286 /* "The user intended FP parameter/result
6287 passing to conform to tool chain-specific
6288 conventions" - we don't know any such
6289 conventions, so leave it as "auto". */
6290 break;
6291 default:
6292 /* Attribute value not mentioned in the
6293 October 2008 ABI, so leave it as
6294 "auto". */
6295 break;
6297 #else
6298 fp_model = ARM_FLOAT_SOFT_VFP;
6299 #endif
6301 break;
6303 default:
6304 /* Leave it as "auto". */
6305 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
6306 break;
6310 if (fp_model == ARM_FLOAT_AUTO)
6312 int e_flags = elf_elfheader (info.abfd)->e_flags;
6314 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
6316 case 0:
6317 /* Leave it as "auto". Strictly speaking this case
6318 means FPA, but almost nobody uses that now, and
6319 many toolchains fail to set the appropriate bits
6320 for the floating-point model they use. */
6321 break;
6322 case EF_ARM_SOFT_FLOAT:
6323 fp_model = ARM_FLOAT_SOFT_FPA;
6324 break;
6325 case EF_ARM_VFP_FLOAT:
6326 fp_model = ARM_FLOAT_VFP;
6327 break;
6328 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
6329 fp_model = ARM_FLOAT_SOFT_VFP;
6330 break;
6334 if (e_flags & EF_ARM_BE8)
6335 info.byte_order_for_code = BFD_ENDIAN_LITTLE;
6337 break;
6339 default:
6340 /* Leave it as "auto". */
6341 break;
6345 /* If there is already a candidate, use it. */
6346 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
6347 best_arch != NULL;
6348 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
6350 if (arm_abi != ARM_ABI_AUTO
6351 && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
6352 continue;
6354 if (fp_model != ARM_FLOAT_AUTO
6355 && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
6356 continue;
6358 /* There are various other properties in tdep that we do not
6359 need to check here: those derived from a target description,
6360 since gdbarches with a different target description are
6361 automatically disqualified. */
6363 /* Found a match. */
6364 break;
6367 if (best_arch != NULL)
6369 if (tdesc_data != NULL)
6370 tdesc_data_cleanup (tdesc_data);
6371 return best_arch->gdbarch;
6374 tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
6375 gdbarch = gdbarch_alloc (&info, tdep);
6377 /* Record additional information about the architecture we are defining.
6378 These are gdbarch discriminators, like the OSABI. */
6379 tdep->arm_abi = arm_abi;
6380 tdep->fp_model = fp_model;
6381 tdep->have_fpa_registers = have_fpa_registers;
6382 tdep->have_vfp_registers = have_vfp_registers;
6383 tdep->have_vfp_pseudos = have_vfp_pseudos;
6384 tdep->have_neon_pseudos = have_neon_pseudos;
6385 tdep->have_neon = have_neon;
6387 /* Breakpoints. */
6388 switch (info.byte_order_for_code)
6390 case BFD_ENDIAN_BIG:
6391 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
6392 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
6393 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
6394 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
6396 break;
6398 case BFD_ENDIAN_LITTLE:
6399 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
6400 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
6401 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
6402 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
6404 break;
6406 default:
6407 internal_error (__FILE__, __LINE__,
6408 _("arm_gdbarch_init: bad byte order for float format"));
6411 /* On ARM targets char defaults to unsigned. */
6412 set_gdbarch_char_signed (gdbarch, 0);
6414 /* Note: for displaced stepping, this includes the breakpoint, and one word
6415 of additional scratch space. This setting isn't used for anything beside
6416 displaced stepping at present. */
6417 set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
6419 /* This should be low enough for everything. */
6420 tdep->lowest_pc = 0x20;
6421 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
6423 /* The default, for both APCS and AAPCS, is to return small
6424 structures in registers. */
6425 tdep->struct_return = reg_struct_return;
6427 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
6428 set_gdbarch_frame_align (gdbarch, arm_frame_align);
6430 set_gdbarch_write_pc (gdbarch, arm_write_pc);
6432 /* Frame handling. */
6433 set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
6434 set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
6435 set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
6437 frame_base_set_default (gdbarch, &arm_normal_base);
6439 /* Address manipulation. */
6440 set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
6441 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
6443 /* Advance PC across function entry code. */
6444 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
6446 /* Skip trampolines. */
6447 set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
6449 /* The stack grows downward. */
6450 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6452 /* Breakpoint manipulation. */
6453 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
6454 set_gdbarch_remote_breakpoint_from_pc (gdbarch,
6455 arm_remote_breakpoint_from_pc);
6457 /* Information about registers, etc. */
6458 set_gdbarch_deprecated_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
6459 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
6460 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
6461 set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
6462 set_gdbarch_register_type (gdbarch, arm_register_type);
6464 /* This "info float" is FPA-specific. Use the generic version if we
6465 do not have FPA. */
6466 if (gdbarch_tdep (gdbarch)->have_fpa_registers)
6467 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
6469 /* Internal <-> external register number maps. */
6470 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
6471 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
6473 set_gdbarch_register_name (gdbarch, arm_register_name);
6475 /* Returning results. */
6476 set_gdbarch_return_value (gdbarch, arm_return_value);
6478 /* Disassembly. */
6479 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
6481 /* Minsymbol frobbing. */
6482 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
6483 set_gdbarch_coff_make_msymbol_special (gdbarch,
6484 arm_coff_make_msymbol_special);
6485 set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
6487 /* Thumb-2 IT block support. */
6488 set_gdbarch_adjust_breakpoint_address (gdbarch,
6489 arm_adjust_breakpoint_address);
6491 /* Virtual tables. */
6492 set_gdbarch_vbit_in_delta (gdbarch, 1);
6494 /* Hook in the ABI-specific overrides, if they have been registered. */
6495 gdbarch_init_osabi (info, gdbarch);
6497 dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
6499 /* Add some default predicates. */
6500 frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
6501 dwarf2_append_unwinders (gdbarch);
6502 frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
6504 /* Now we have tuned the configuration, set a few final things,
6505 based on what the OS ABI has told us. */
6507 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
6508 binaries are always marked. */
6509 if (tdep->arm_abi == ARM_ABI_AUTO)
6510 tdep->arm_abi = ARM_ABI_APCS;
6512 /* We used to default to FPA for generic ARM, but almost nobody
6513 uses that now, and we now provide a way for the user to force
6514 the model. So default to the most useful variant. */
6515 if (tdep->fp_model == ARM_FLOAT_AUTO)
6516 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
6518 if (tdep->jb_pc >= 0)
6519 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
6521 /* Floating point sizes and format. */
6522 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
6523 if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
6525 set_gdbarch_double_format
6526 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
6527 set_gdbarch_long_double_format
6528 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
6530 else
6532 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
6533 set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
6536 if (have_vfp_pseudos)
6538 /* NOTE: These are the only pseudo registers used by
6539 the ARM target at the moment. If more are added, a
6540 little more care in numbering will be needed. */
6542 int num_pseudos = 32;
6543 if (have_neon_pseudos)
6544 num_pseudos += 16;
6545 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
6546 set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
6547 set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
6550 if (tdesc_data)
6552 set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
6554 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
6556 /* Override tdesc_register_type to adjust the types of VFP
6557 registers for NEON. */
6558 set_gdbarch_register_type (gdbarch, arm_register_type);
6561 /* Add standard register aliases. We add aliases even for those
6562 nanes which are used by the current architecture - it's simpler,
6563 and does no harm, since nothing ever lists user registers. */
6564 for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
6565 user_reg_add (gdbarch, arm_register_aliases[i].name,
6566 value_of_arm_user_reg, &arm_register_aliases[i].regnum);
6568 return gdbarch;
6571 static void
6572 arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
6574 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
6576 if (tdep == NULL)
6577 return;
6579 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
6580 (unsigned long) tdep->lowest_pc);
6583 extern initialize_file_ftype _initialize_arm_tdep; /* -Wmissing-prototypes */
6585 void
6586 _initialize_arm_tdep (void)
6588 struct ui_file *stb;
6589 long length;
6590 struct cmd_list_element *new_set, *new_show;
6591 const char *setname;
6592 const char *setdesc;
6593 const char *const *regnames;
6594 int numregs, i, j;
6595 static char *helptext;
6596 char regdesc[1024], *rdptr = regdesc;
6597 size_t rest = sizeof (regdesc);
6599 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
6601 arm_objfile_data_key
6602 = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
6604 /* Register an ELF OS ABI sniffer for ARM binaries. */
6605 gdbarch_register_osabi_sniffer (bfd_arch_arm,
6606 bfd_target_elf_flavour,
6607 arm_elf_osabi_sniffer);
6609 /* Get the number of possible sets of register names defined in opcodes. */
6610 num_disassembly_options = get_arm_regname_num_options ();
6612 /* Add root prefix command for all "set arm"/"show arm" commands. */
6613 add_prefix_cmd ("arm", no_class, set_arm_command,
6614 _("Various ARM-specific commands."),
6615 &setarmcmdlist, "set arm ", 0, &setlist);
6617 add_prefix_cmd ("arm", no_class, show_arm_command,
6618 _("Various ARM-specific commands."),
6619 &showarmcmdlist, "show arm ", 0, &showlist);
6621 /* Sync the opcode insn printer with our register viewer. */
6622 parse_arm_disassembler_option ("reg-names-std");
6624 /* Initialize the array that will be passed to
6625 add_setshow_enum_cmd(). */
6626 valid_disassembly_styles
6627 = xmalloc ((num_disassembly_options + 1) * sizeof (char *));
6628 for (i = 0; i < num_disassembly_options; i++)
6630 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
6631 valid_disassembly_styles[i] = setname;
6632 length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
6633 rdptr += length;
6634 rest -= length;
6635 /* When we find the default names, tell the disassembler to use
6636 them. */
6637 if (!strcmp (setname, "std"))
6639 disassembly_style = setname;
6640 set_arm_regname_option (i);
6643 /* Mark the end of valid options. */
6644 valid_disassembly_styles[num_disassembly_options] = NULL;
6646 /* Create the help text. */
6647 stb = mem_fileopen ();
6648 fprintf_unfiltered (stb, "%s%s%s",
6649 _("The valid values are:\n"),
6650 regdesc,
6651 _("The default is \"std\"."));
6652 helptext = ui_file_xstrdup (stb, NULL);
6653 ui_file_delete (stb);
6655 add_setshow_enum_cmd("disassembler", no_class,
6656 valid_disassembly_styles, &disassembly_style,
6657 _("Set the disassembly style."),
6658 _("Show the disassembly style."),
6659 helptext,
6660 set_disassembly_style_sfunc,
6661 NULL, /* FIXME: i18n: The disassembly style is \"%s\". */
6662 &setarmcmdlist, &showarmcmdlist);
6664 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
6665 _("Set usage of ARM 32-bit mode."),
6666 _("Show usage of ARM 32-bit mode."),
6667 _("When off, a 26-bit PC will be used."),
6668 NULL,
6669 NULL, /* FIXME: i18n: Usage of ARM 32-bit mode is %s. */
6670 &setarmcmdlist, &showarmcmdlist);
6672 /* Add a command to allow the user to force the FPU model. */
6673 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
6674 _("Set the floating point type."),
6675 _("Show the floating point type."),
6676 _("auto - Determine the FP typefrom the OS-ABI.\n\
6677 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
6678 fpa - FPA co-processor (GCC compiled).\n\
6679 softvfp - Software FP with pure-endian doubles.\n\
6680 vfp - VFP co-processor."),
6681 set_fp_model_sfunc, show_fp_model,
6682 &setarmcmdlist, &showarmcmdlist);
6684 /* Add a command to allow the user to force the ABI. */
6685 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
6686 _("Set the ABI."),
6687 _("Show the ABI."),
6688 NULL, arm_set_abi, arm_show_abi,
6689 &setarmcmdlist, &showarmcmdlist);
6691 /* Add two commands to allow the user to force the assumed
6692 execution mode. */
6693 add_setshow_enum_cmd ("fallback-mode", class_support,
6694 arm_mode_strings, &arm_fallback_mode_string,
6695 _("Set the mode assumed when symbols are unavailable."),
6696 _("Show the mode assumed when symbols are unavailable."),
6697 NULL, NULL, arm_show_fallback_mode,
6698 &setarmcmdlist, &showarmcmdlist);
6699 add_setshow_enum_cmd ("force-mode", class_support,
6700 arm_mode_strings, &arm_force_mode_string,
6701 _("Set the mode assumed even when symbols are available."),
6702 _("Show the mode assumed even when symbols are available."),
6703 NULL, NULL, arm_show_force_mode,
6704 &setarmcmdlist, &showarmcmdlist);
6706 /* Debugging flag. */
6707 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
6708 _("Set ARM debugging."),
6709 _("Show ARM debugging."),
6710 _("When on, arm-specific debugging is enabled."),
6711 NULL,
6712 NULL, /* FIXME: i18n: "ARM debugging is %s. */
6713 &setdebuglist, &showdebuglist);