* read.c (cons_worker): Detect and reject unexpected string argument.
[deliverable/binutils-gdb.git] / gdb / arm-tdep.c
CommitLineData
ed9a39eb 1/* Common target dependent code for GDB on ARM systems.
0fd88904 2
6aba47ca 3 Copyright (C) 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
4c38e0a4 4 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
9b254dd1 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 21
34e8f22d
RE
22#include <ctype.h> /* XXX for isupper () */
23
c906108c
SS
24#include "defs.h"
25#include "frame.h"
26#include "inferior.h"
27#include "gdbcmd.h"
28#include "gdbcore.h"
c906108c 29#include "gdb_string.h"
afd7eef0 30#include "dis-asm.h" /* For register styles. */
4e052eda 31#include "regcache.h"
d16aafd8 32#include "doublest.h"
fd0407d6 33#include "value.h"
34e8f22d 34#include "arch-utils.h"
4be87837 35#include "osabi.h"
eb5492fa
DJ
36#include "frame-unwind.h"
37#include "frame-base.h"
38#include "trad-frame.h"
842e1f1e
DJ
39#include "objfiles.h"
40#include "dwarf2-frame.h"
e4c16157 41#include "gdbtypes.h"
29d73ae4 42#include "prologue-value.h"
123dc839
DJ
43#include "target-descriptions.h"
44#include "user-regs.h"
34e8f22d
RE
45
46#include "arm-tdep.h"
26216b98 47#include "gdb/sim-arm.h"
34e8f22d 48
082fc60d
RE
49#include "elf-bfd.h"
50#include "coff/internal.h"
97e03143 51#include "elf/arm.h"
c906108c 52
26216b98 53#include "gdb_assert.h"
60c5725c 54#include "vec.h"
26216b98 55
6529d2dd
AC
56static int arm_debug;
57
082fc60d
RE
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
f594e5e9 60 is used for this purpose.
082fc60d
RE
61
62 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
f594e5e9 63 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
082fc60d
RE
64
65#define MSYMBOL_SET_SPECIAL(msym) \
b887350f 66 MSYMBOL_TARGET_FLAG_1 (msym) = 1
082fc60d
RE
67
68#define MSYMBOL_IS_SPECIAL(msym) \
b887350f 69 MSYMBOL_TARGET_FLAG_1 (msym)
082fc60d 70
60c5725c
DJ
71/* Per-objfile data used for mapping symbols. */
72static const struct objfile_data *arm_objfile_data_key;
73
74struct arm_mapping_symbol
75{
76 bfd_vma value;
77 char type;
78};
79typedef struct arm_mapping_symbol arm_mapping_symbol_s;
80DEF_VEC_O(arm_mapping_symbol_s);
81
82struct arm_per_objfile
83{
84 VEC(arm_mapping_symbol_s) **section_maps;
85};
86
afd7eef0
RE
87/* The list of available "set arm ..." and "show arm ..." commands. */
88static struct cmd_list_element *setarmcmdlist = NULL;
89static struct cmd_list_element *showarmcmdlist = NULL;
90
fd50bc42
RE
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. */
93static const char *fp_model_strings[] =
94{
95 "auto",
96 "softfpa",
97 "fpa",
98 "softvfp",
28e97307
DJ
99 "vfp",
100 NULL
fd50bc42
RE
101};
102
103/* A variable that can be configured by the user. */
104static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
105static const char *current_fp_model = "auto";
106
28e97307
DJ
107/* The ABI to use. Keep this in sync with arm_abi_kind. */
108static const char *arm_abi_strings[] =
109{
110 "auto",
111 "APCS",
112 "AAPCS",
113 NULL
114};
115
116/* A variable that can be configured by the user. */
117static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
118static const char *arm_abi_string = "auto";
119
0428b8f5
DJ
120/* The execution mode to assume. */
121static const char *arm_mode_strings[] =
122 {
123 "auto",
124 "arm",
125 "thumb"
126 };
127
128static const char *arm_fallback_mode_string = "auto";
129static const char *arm_force_mode_string = "auto";
130
94c30b78 131/* Number of different reg name sets (options). */
afd7eef0 132static int num_disassembly_options;
bc90b915 133
123dc839
DJ
134/* The standard register names, and all the valid aliases for them. */
135static const struct
136{
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 },
183};
bc90b915 184
123dc839 185static const char *const arm_register_names[] =
da59e081
JM
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 */
94c30b78 192 "fps", "cpsr" }; /* 24 25 */
ed9a39eb 193
afd7eef0
RE
194/* Valid register name styles. */
195static const char **valid_disassembly_styles;
ed9a39eb 196
afd7eef0
RE
197/* Disassembly style to use. Default to "std" register names. */
198static const char *disassembly_style;
96baa820 199
ed9a39eb 200/* This is used to keep the bfd arch_info in sync with the disassembly
afd7eef0
RE
201 style. */
202static void set_disassembly_style_sfunc(char *, int,
ed9a39eb 203 struct cmd_list_element *);
afd7eef0 204static void set_disassembly_style (void);
ed9a39eb 205
b508a996 206static void convert_from_extended (const struct floatformat *, const void *,
be8626e0 207 void *, int);
b508a996 208static void convert_to_extended (const struct floatformat *, void *,
be8626e0 209 const void *, int);
ed9a39eb 210
58d6951d
DJ
211static void arm_neon_quad_read (struct gdbarch *gdbarch,
212 struct regcache *regcache,
213 int regnum, gdb_byte *buf);
214static void arm_neon_quad_write (struct gdbarch *gdbarch,
215 struct regcache *regcache,
216 int regnum, const gdb_byte *buf);
217
9b8d791a 218struct arm_prologue_cache
c3b4394c 219{
eb5492fa
DJ
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;
224
4be43953
DJ
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. */
eb5492fa 228
c3b4394c 229 int framesize;
eb5492fa
DJ
230
231 /* The register used to hold the frame pointer for this frame. */
c3b4394c 232 int framereg;
eb5492fa
DJ
233
234 /* Saved register offsets. */
235 struct trad_frame_saved_reg *saved_regs;
c3b4394c 236};
ed9a39eb 237
0d39a070
DJ
238static CORE_ADDR arm_analyze_prologue (struct gdbarch *gdbarch,
239 CORE_ADDR prologue_start,
240 CORE_ADDR prologue_end,
241 struct arm_prologue_cache *cache);
242
cca44b1b
JB
243/* Architecture version for displaced stepping. This effects the behaviour of
244 certain instructions, and really should not be hard-wired. */
245
246#define DISPLACED_STEPPING_ARCH_VERSION 5
247
bc90b915
FN
248/* Addresses for calling Thumb functions have the bit 0 set.
249 Here are some macros to test, set, or clear bit 0 of addresses. */
250#define IS_THUMB_ADDR(addr) ((addr) & 1)
251#define MAKE_THUMB_ADDR(addr) ((addr) | 1)
252#define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
253
94c30b78 254/* Set to true if the 32-bit mode is in use. */
c906108c
SS
255
256int arm_apcs_32 = 1;
257
b39cc962
DJ
258/* Determine if FRAME is executing in Thumb mode. */
259
260static int
261arm_frame_is_thumb (struct frame_info *frame)
262{
263 CORE_ADDR cpsr;
264
265 /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
266 directly (from a signal frame or dummy frame) or by interpreting
267 the saved LR (from a prologue or DWARF frame). So consult it and
268 trust the unwinders. */
269 cpsr = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
270
271 return (cpsr & CPSR_T) != 0;
272}
273
60c5725c
DJ
274/* Callback for VEC_lower_bound. */
275
276static inline int
277arm_compare_mapping_symbols (const struct arm_mapping_symbol *lhs,
278 const struct arm_mapping_symbol *rhs)
279{
280 return lhs->value < rhs->value;
281}
282
f9d67f43
DJ
283/* Search for the mapping symbol covering MEMADDR. If one is found,
284 return its type. Otherwise, return 0. If START is non-NULL,
285 set *START to the location of the mapping symbol. */
c906108c 286
f9d67f43
DJ
287static char
288arm_find_mapping_symbol (CORE_ADDR memaddr, CORE_ADDR *start)
c906108c 289{
60c5725c 290 struct obj_section *sec;
0428b8f5 291
60c5725c
DJ
292 /* If there are mapping symbols, consult them. */
293 sec = find_pc_section (memaddr);
294 if (sec != NULL)
295 {
296 struct arm_per_objfile *data;
297 VEC(arm_mapping_symbol_s) *map;
aded6f54
PA
298 struct arm_mapping_symbol map_key = { memaddr - obj_section_addr (sec),
299 0 };
60c5725c
DJ
300 unsigned int idx;
301
302 data = objfile_data (sec->objfile, arm_objfile_data_key);
303 if (data != NULL)
304 {
305 map = data->section_maps[sec->the_bfd_section->index];
306 if (!VEC_empty (arm_mapping_symbol_s, map))
307 {
308 struct arm_mapping_symbol *map_sym;
309
310 idx = VEC_lower_bound (arm_mapping_symbol_s, map, &map_key,
311 arm_compare_mapping_symbols);
312
313 /* VEC_lower_bound finds the earliest ordered insertion
314 point. If the following symbol starts at this exact
315 address, we use that; otherwise, the preceding
316 mapping symbol covers this address. */
317 if (idx < VEC_length (arm_mapping_symbol_s, map))
318 {
319 map_sym = VEC_index (arm_mapping_symbol_s, map, idx);
320 if (map_sym->value == map_key.value)
f9d67f43
DJ
321 {
322 if (start)
323 *start = map_sym->value + obj_section_addr (sec);
324 return map_sym->type;
325 }
60c5725c
DJ
326 }
327
328 if (idx > 0)
329 {
330 map_sym = VEC_index (arm_mapping_symbol_s, map, idx - 1);
f9d67f43
DJ
331 if (start)
332 *start = map_sym->value + obj_section_addr (sec);
333 return map_sym->type;
60c5725c
DJ
334 }
335 }
336 }
337 }
338
f9d67f43
DJ
339 return 0;
340}
341
50e98be4
DJ
342static CORE_ADDR arm_get_next_pc_raw (struct frame_info *frame,
343 CORE_ADDR pc, int insert_bkpt);
344
f9d67f43
DJ
345/* Determine if the program counter specified in MEMADDR is in a Thumb
346 function. This function should be called for addresses unrelated to
347 any executing frame; otherwise, prefer arm_frame_is_thumb. */
348
349static int
350arm_pc_is_thumb (CORE_ADDR memaddr)
351{
352 struct obj_section *sec;
353 struct minimal_symbol *sym;
354 char type;
355
356 /* If bit 0 of the address is set, assume this is a Thumb address. */
357 if (IS_THUMB_ADDR (memaddr))
358 return 1;
359
360 /* If the user wants to override the symbol table, let him. */
361 if (strcmp (arm_force_mode_string, "arm") == 0)
362 return 0;
363 if (strcmp (arm_force_mode_string, "thumb") == 0)
364 return 1;
365
366 /* If there are mapping symbols, consult them. */
367 type = arm_find_mapping_symbol (memaddr, NULL);
368 if (type)
369 return type == 't';
370
ed9a39eb 371 /* Thumb functions have a "special" bit set in minimal symbols. */
c906108c
SS
372 sym = lookup_minimal_symbol_by_pc (memaddr);
373 if (sym)
0428b8f5
DJ
374 return (MSYMBOL_IS_SPECIAL (sym));
375
376 /* If the user wants to override the fallback mode, let them. */
377 if (strcmp (arm_fallback_mode_string, "arm") == 0)
378 return 0;
379 if (strcmp (arm_fallback_mode_string, "thumb") == 0)
380 return 1;
381
382 /* If we couldn't find any symbol, but we're talking to a running
383 target, then trust the current value of $cpsr. This lets
384 "display/i $pc" always show the correct mode (though if there is
385 a symbol table we will not reach here, so it still may not be
50e98be4
DJ
386 displayed in the mode it will be executed).
387
388 As a further heuristic if we detect that we are doing a single-step we
389 see what state executing the current instruction ends up with us being
390 in. */
0428b8f5 391 if (target_has_registers)
50e98be4
DJ
392 {
393 struct frame_info *current_frame = get_current_frame ();
394 CORE_ADDR current_pc = get_frame_pc (current_frame);
395 int is_thumb = arm_frame_is_thumb (current_frame);
396 CORE_ADDR next_pc;
397 if (memaddr == current_pc)
398 return is_thumb;
399 else
400 {
401 struct gdbarch *gdbarch = get_frame_arch (current_frame);
402 next_pc = arm_get_next_pc_raw (current_frame, current_pc, FALSE);
403 if (memaddr == gdbarch_addr_bits_remove (gdbarch, next_pc))
404 return IS_THUMB_ADDR (next_pc);
405 else
406 return is_thumb;
407 }
408 }
0428b8f5
DJ
409
410 /* Otherwise we're out of luck; we assume ARM. */
411 return 0;
c906108c
SS
412}
413
181c1381 414/* Remove useless bits from addresses in a running program. */
34e8f22d 415static CORE_ADDR
24568a2c 416arm_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR val)
c906108c 417{
a3a2ee65 418 if (arm_apcs_32)
dd6be234 419 return UNMAKE_THUMB_ADDR (val);
c906108c 420 else
a3a2ee65 421 return (val & 0x03fffffc);
c906108c
SS
422}
423
181c1381
RE
424/* When reading symbols, we need to zap the low bit of the address,
425 which may be set to 1 for Thumb functions. */
34e8f22d 426static CORE_ADDR
24568a2c 427arm_smash_text_address (struct gdbarch *gdbarch, CORE_ADDR val)
181c1381
RE
428{
429 return val & ~1;
430}
431
0d39a070
DJ
432/* Return 1 if PC is the start of a compiler helper function which
433 can be safely ignored during prologue skipping. */
434static int
435skip_prologue_function (CORE_ADDR pc)
436{
437 struct minimal_symbol *msym;
438 const char *name;
439
440 msym = lookup_minimal_symbol_by_pc (pc);
441 if (msym == NULL || SYMBOL_VALUE_ADDRESS (msym) != pc)
442 return 0;
443
444 name = SYMBOL_LINKAGE_NAME (msym);
445 if (name == NULL)
446 return 0;
447
448 /* The GNU linker's Thumb call stub to foo is named
449 __foo_from_thumb. */
450 if (strstr (name, "_from_thumb") != NULL)
451 name += 2;
452
453 /* On soft-float targets, __truncdfsf2 is called to convert promoted
454 arguments to their argument types in non-prototyped
455 functions. */
456 if (strncmp (name, "__truncdfsf2", strlen ("__truncdfsf2")) == 0)
457 return 1;
458 if (strncmp (name, "__aeabi_d2f", strlen ("__aeabi_d2f")) == 0)
459 return 1;
460
461 return 0;
462}
463
464/* Support routines for instruction parsing. */
465#define submask(x) ((1L << ((x) + 1)) - 1)
466#define bit(obj,st) (((obj) >> (st)) & 1)
467#define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
468#define sbits(obj,st,fn) \
469 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
470#define BranchDest(addr,instr) \
471 ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
472
29d73ae4
DJ
473/* Analyze a Thumb prologue, looking for a recognizable stack frame
474 and frame pointer. Scan until we encounter a store that could
0d39a070
DJ
475 clobber the stack frame unexpectedly, or an unknown instruction.
476 Return the last address which is definitely safe to skip for an
477 initial breakpoint. */
c906108c
SS
478
479static CORE_ADDR
29d73ae4
DJ
480thumb_analyze_prologue (struct gdbarch *gdbarch,
481 CORE_ADDR start, CORE_ADDR limit,
482 struct arm_prologue_cache *cache)
c906108c 483{
0d39a070 484 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e17a4113 485 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
29d73ae4
DJ
486 int i;
487 pv_t regs[16];
488 struct pv_area *stack;
489 struct cleanup *back_to;
490 CORE_ADDR offset;
da3c6d4a 491
29d73ae4
DJ
492 for (i = 0; i < 16; i++)
493 regs[i] = pv_register (i, 0);
55f960e1 494 stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
29d73ae4
DJ
495 back_to = make_cleanup_free_pv_area (stack);
496
29d73ae4 497 while (start < limit)
c906108c 498 {
29d73ae4
DJ
499 unsigned short insn;
500
e17a4113 501 insn = read_memory_unsigned_integer (start, 2, byte_order_for_code);
9d4fde75 502
94c30b78 503 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
da59e081 504 {
29d73ae4
DJ
505 int regno;
506 int mask;
4be43953
DJ
507
508 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
509 break;
29d73ae4
DJ
510
511 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
512 whether to save LR (R14). */
513 mask = (insn & 0xff) | ((insn & 0x100) << 6);
514
515 /* Calculate offsets of saved R0-R7 and LR. */
516 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
517 if (mask & (1 << regno))
518 {
29d73ae4
DJ
519 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
520 -4);
521 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
522 }
da59e081 523 }
da3c6d4a
MS
524 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR
525 sub sp, #simm */
da59e081 526 {
29d73ae4
DJ
527 offset = (insn & 0x7f) << 2; /* get scaled offset */
528 if (insn & 0x80) /* Check for SUB. */
529 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
530 -offset);
da59e081 531 else
29d73ae4
DJ
532 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
533 offset);
da59e081 534 }
0d39a070
DJ
535 else if ((insn & 0xf800) == 0xa800) /* add Rd, sp, #imm */
536 regs[bits (insn, 8, 10)] = pv_add_constant (regs[ARM_SP_REGNUM],
537 (insn & 0xff) << 2);
538 else if ((insn & 0xfe00) == 0x1c00 /* add Rd, Rn, #imm */
539 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
540 regs[bits (insn, 0, 2)] = pv_add_constant (regs[bits (insn, 3, 5)],
541 bits (insn, 6, 8));
542 else if ((insn & 0xf800) == 0x3000 /* add Rd, #imm */
543 && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
544 regs[bits (insn, 8, 10)] = pv_add_constant (regs[bits (insn, 8, 10)],
545 bits (insn, 0, 7));
546 else if ((insn & 0xfe00) == 0x1800 /* add Rd, Rn, Rm */
547 && pv_is_register (regs[bits (insn, 6, 8)], ARM_SP_REGNUM)
548 && pv_is_constant (regs[bits (insn, 3, 5)]))
549 regs[bits (insn, 0, 2)] = pv_add (regs[bits (insn, 3, 5)],
550 regs[bits (insn, 6, 8)]);
551 else if ((insn & 0xff00) == 0x4400 /* add Rd, Rm */
552 && pv_is_constant (regs[bits (insn, 3, 6)]))
553 {
554 int rd = (bit (insn, 7) << 3) + bits (insn, 0, 2);
555 int rm = bits (insn, 3, 6);
556 regs[rd] = pv_add (regs[rd], regs[rm]);
557 }
29d73ae4 558 else if ((insn & 0xff00) == 0x4600) /* mov hi, lo or mov lo, hi */
da59e081 559 {
29d73ae4
DJ
560 int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
561 int src_reg = (insn & 0x78) >> 3;
562 regs[dst_reg] = regs[src_reg];
da59e081 563 }
29d73ae4 564 else if ((insn & 0xf800) == 0x9000) /* str rd, [sp, #off] */
da59e081 565 {
29d73ae4
DJ
566 /* Handle stores to the stack. Normally pushes are used,
567 but with GCC -mtpcs-frame, there may be other stores
568 in the prologue to create the frame. */
569 int regno = (insn >> 8) & 0x7;
570 pv_t addr;
571
572 offset = (insn & 0xff) << 2;
573 addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
574
575 if (pv_area_store_would_trash (stack, addr))
576 break;
577
578 pv_area_store (stack, addr, 4, regs[regno]);
da59e081 579 }
0d39a070
DJ
580 else if ((insn & 0xf800) == 0x6000) /* str rd, [rn, #off] */
581 {
582 int rd = bits (insn, 0, 2);
583 int rn = bits (insn, 3, 5);
584 pv_t addr;
585
586 offset = bits (insn, 6, 10) << 2;
587 addr = pv_add_constant (regs[rn], offset);
588
589 if (pv_area_store_would_trash (stack, addr))
590 break;
591
592 pv_area_store (stack, addr, 4, regs[rd]);
593 }
594 else if (((insn & 0xf800) == 0x7000 /* strb Rd, [Rn, #off] */
595 || (insn & 0xf800) == 0x8000) /* strh Rd, [Rn, #off] */
596 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM))
597 /* Ignore stores of argument registers to the stack. */
598 ;
599 else if ((insn & 0xf800) == 0xc800 /* ldmia Rn!, { registers } */
600 && pv_is_register (regs[bits (insn, 8, 10)], ARM_SP_REGNUM))
601 /* Ignore block loads from the stack, potentially copying
602 parameters from memory. */
603 ;
604 else if ((insn & 0xf800) == 0x9800 /* ldr Rd, [Rn, #immed] */
605 || ((insn & 0xf800) == 0x6800 /* ldr Rd, [sp, #immed] */
606 && pv_is_register (regs[bits (insn, 3, 5)], ARM_SP_REGNUM)))
607 /* Similarly ignore single loads from the stack. */
608 ;
609 else if ((insn & 0xffc0) == 0x0000 /* lsls Rd, Rm, #0 */
610 || (insn & 0xffc0) == 0x1c00) /* add Rd, Rn, #0 */
611 /* Skip register copies, i.e. saves to another register
612 instead of the stack. */
613 ;
614 else if ((insn & 0xf800) == 0x2000) /* movs Rd, #imm */
615 /* Recognize constant loads; even with small stacks these are necessary
616 on Thumb. */
617 regs[bits (insn, 8, 10)] = pv_constant (bits (insn, 0, 7));
618 else if ((insn & 0xf800) == 0x4800) /* ldr Rd, [pc, #imm] */
619 {
620 /* Constant pool loads, for the same reason. */
621 unsigned int constant;
622 CORE_ADDR loc;
623
624 loc = start + 4 + bits (insn, 0, 7) * 4;
625 constant = read_memory_unsigned_integer (loc, 4, byte_order);
626 regs[bits (insn, 8, 10)] = pv_constant (constant);
627 }
628 else if ((insn & 0xe000) == 0xe000 && cache == NULL)
629 {
630 /* Only recognize 32-bit instructions for prologue skipping. */
631 unsigned short inst2;
632
633 inst2 = read_memory_unsigned_integer (start + 2, 2,
634 byte_order_for_code);
635
636 if ((insn & 0xf800) == 0xf000 && (inst2 & 0xe800) == 0xe800)
637 {
638 /* BL, BLX. Allow some special function calls when
639 skipping the prologue; GCC generates these before
640 storing arguments to the stack. */
641 CORE_ADDR nextpc;
642 int j1, j2, imm1, imm2;
643
644 imm1 = sbits (insn, 0, 10);
645 imm2 = bits (inst2, 0, 10);
646 j1 = bit (inst2, 13);
647 j2 = bit (inst2, 11);
648
649 offset = ((imm1 << 12) + (imm2 << 1));
650 offset ^= ((!j2) << 22) | ((!j1) << 23);
651
652 nextpc = start + 4 + offset;
653 /* For BLX make sure to clear the low bits. */
654 if (bit (inst2, 12) == 0)
655 nextpc = nextpc & 0xfffffffc;
656
657 if (!skip_prologue_function (nextpc))
658 break;
659 }
660 else if ((insn & 0xfe50) == 0xe800 /* stm{db,ia} Rn[!], { registers } */
661 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
662 ;
663 else if ((insn & 0xfe50) == 0xe840 /* strd Rt, Rt2, [Rn, #imm] */
664 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
665 ;
666 else if ((insn & 0xffd0) == 0xe890 /* ldmia Rn[!], { registers } */
667 && (inst2 & 0x8000) == 0x0000
668 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
669 ;
670 else if ((insn & 0xfbf0) == 0xf100 /* add.w Rd, Rn, #imm */
671 && (inst2 & 0x8000) == 0x0000)
672 /* Since we only recognize this for prologue skipping, do not bother
673 to compute the constant. */
674 regs[bits (inst2, 8, 11)] = regs[bits (insn, 0, 3)];
675 else if ((insn & 0xfbf0) == 0xf1a0 /* sub.w Rd, Rn, #imm12 */
676 && (inst2 & 0x8000) == 0x0000)
677 /* Since we only recognize this for prologue skipping, do not bother
678 to compute the constant. */
679 regs[bits (inst2, 8, 11)] = regs[bits (insn, 0, 3)];
680 else if ((insn & 0xfbf0) == 0xf2a0 /* sub.w Rd, Rn, #imm8 */
681 && (inst2 & 0x8000) == 0x0000)
682 /* Since we only recognize this for prologue skipping, do not bother
683 to compute the constant. */
684 regs[bits (inst2, 8, 11)] = regs[bits (insn, 0, 3)];
685 else if ((insn & 0xff50) == 0xf850 /* ldr.w Rd, [Rn, #imm]{!} */
686 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
687 ;
688 else if ((insn & 0xff50) == 0xe950 /* ldrd Rt, Rt2, [Rn, #imm]{!} */
689 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
690 ;
691 else if ((insn & 0xff50) == 0xf800 /* strb.w or strh.w */
692 && pv_is_register (regs[bits (insn, 0, 3)], ARM_SP_REGNUM))
693 ;
694 else
695 {
696 /* We don't know what this instruction is. We're finished
697 scanning. NOTE: Recognizing more safe-to-ignore
698 instructions here will improve support for optimized
699 code. */
700 break;
701 }
702
703 start += 2;
704 }
29d73ae4 705 else
3d74b771 706 {
29d73ae4
DJ
707 /* We don't know what this instruction is. We're finished
708 scanning. NOTE: Recognizing more safe-to-ignore
709 instructions here will improve support for optimized
710 code. */
da3c6d4a 711 break;
3d74b771 712 }
29d73ae4
DJ
713
714 start += 2;
c906108c
SS
715 }
716
0d39a070
DJ
717 if (arm_debug)
718 fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
719 paddress (gdbarch, start));
720
29d73ae4
DJ
721 if (cache == NULL)
722 {
723 do_cleanups (back_to);
724 return start;
725 }
726
29d73ae4
DJ
727 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
728 {
729 /* Frame pointer is fp. Frame size is constant. */
730 cache->framereg = ARM_FP_REGNUM;
731 cache->framesize = -regs[ARM_FP_REGNUM].k;
732 }
733 else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
734 {
735 /* Frame pointer is r7. Frame size is constant. */
736 cache->framereg = THUMB_FP_REGNUM;
737 cache->framesize = -regs[THUMB_FP_REGNUM].k;
738 }
739 else if (pv_is_register (regs[ARM_SP_REGNUM], ARM_SP_REGNUM))
740 {
741 /* Try the stack pointer... this is a bit desperate. */
742 cache->framereg = ARM_SP_REGNUM;
743 cache->framesize = -regs[ARM_SP_REGNUM].k;
744 }
745 else
746 {
747 /* We're just out of luck. We don't know where the frame is. */
748 cache->framereg = -1;
749 cache->framesize = 0;
750 }
751
752 for (i = 0; i < 16; i++)
753 if (pv_area_find_reg (stack, gdbarch, i, &offset))
754 cache->saved_regs[i].addr = offset;
755
756 do_cleanups (back_to);
757 return start;
c906108c
SS
758}
759
da3c6d4a
MS
760/* Advance the PC across any function entry prologue instructions to
761 reach some "real" code.
34e8f22d
RE
762
763 The APCS (ARM Procedure Call Standard) defines the following
ed9a39eb 764 prologue:
c906108c 765
c5aa993b
JM
766 mov ip, sp
767 [stmfd sp!, {a1,a2,a3,a4}]
768 stmfd sp!, {...,fp,ip,lr,pc}
ed9a39eb
JM
769 [stfe f7, [sp, #-12]!]
770 [stfe f6, [sp, #-12]!]
771 [stfe f5, [sp, #-12]!]
772 [stfe f4, [sp, #-12]!]
773 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
c906108c 774
34e8f22d 775static CORE_ADDR
6093d2eb 776arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
c906108c 777{
e17a4113 778 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
c906108c
SS
779 unsigned long inst;
780 CORE_ADDR skip_pc;
a89fea3c 781 CORE_ADDR func_addr, limit_pc;
c906108c
SS
782 struct symtab_and_line sal;
783
a89fea3c
JL
784 /* See if we can determine the end of the prologue via the symbol table.
785 If so, then return either PC, or the PC after the prologue, whichever
786 is greater. */
787 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
c906108c 788 {
d80b854b
UW
789 CORE_ADDR post_prologue_pc
790 = skip_prologue_using_sal (gdbarch, func_addr);
0d39a070
DJ
791 struct symtab *s = find_pc_symtab (func_addr);
792
793 /* GCC always emits a line note before the prologue and another
794 one after, even if the two are at the same address or on the
795 same line. Take advantage of this so that we do not need to
796 know every instruction that might appear in the prologue. We
797 will have producer information for most binaries; if it is
798 missing (e.g. for -gstabs), assuming the GNU tools. */
799 if (post_prologue_pc
800 && (s == NULL
801 || s->producer == NULL
802 || strncmp (s->producer, "GNU ", sizeof ("GNU ") - 1) == 0))
803 return post_prologue_pc;
804
a89fea3c 805 if (post_prologue_pc != 0)
0d39a070
DJ
806 {
807 CORE_ADDR analyzed_limit;
808
809 /* For non-GCC compilers, make sure the entire line is an
810 acceptable prologue; GDB will round this function's
811 return value up to the end of the following line so we
812 can not skip just part of a line (and we do not want to).
813
814 RealView does not treat the prologue specially, but does
815 associate prologue code with the opening brace; so this
816 lets us skip the first line if we think it is the opening
817 brace. */
818 if (arm_pc_is_thumb (func_addr))
819 analyzed_limit = thumb_analyze_prologue (gdbarch, func_addr,
820 post_prologue_pc, NULL);
821 else
822 analyzed_limit = arm_analyze_prologue (gdbarch, func_addr,
823 post_prologue_pc, NULL);
824
825 if (analyzed_limit != post_prologue_pc)
826 return func_addr;
827
828 return post_prologue_pc;
829 }
c906108c
SS
830 }
831
a89fea3c
JL
832 /* Can't determine prologue from the symbol table, need to examine
833 instructions. */
c906108c 834
a89fea3c
JL
835 /* Find an upper limit on the function prologue using the debug
836 information. If the debug information could not be used to provide
837 that bound, then use an arbitrary large number as the upper bound. */
b8d5e71d 838 /* Like arm_scan_prologue, stop no later than pc + 64. */
d80b854b 839 limit_pc = skip_prologue_using_sal (gdbarch, pc);
a89fea3c
JL
840 if (limit_pc == 0)
841 limit_pc = pc + 64; /* Magic. */
842
c906108c 843
29d73ae4
DJ
844 /* Check if this is Thumb code. */
845 if (arm_pc_is_thumb (pc))
a89fea3c 846 return thumb_analyze_prologue (gdbarch, pc, limit_pc, NULL);
29d73ae4 847
a89fea3c 848 for (skip_pc = pc; skip_pc < limit_pc; skip_pc += 4)
f43845b3 849 {
e17a4113 850 inst = read_memory_unsigned_integer (skip_pc, 4, byte_order_for_code);
9d4fde75 851
b8d5e71d
MS
852 /* "mov ip, sp" is no longer a required part of the prologue. */
853 if (inst == 0xe1a0c00d) /* mov ip, sp */
854 continue;
c906108c 855
28cd8767
JG
856 if ((inst & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
857 continue;
858
859 if ((inst & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
860 continue;
861
b8d5e71d
MS
862 /* Some prologues begin with "str lr, [sp, #-4]!". */
863 if (inst == 0xe52de004) /* str lr, [sp, #-4]! */
864 continue;
c906108c 865
b8d5e71d
MS
866 if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */
867 continue;
c906108c 868
b8d5e71d
MS
869 if ((inst & 0xfffff800) == 0xe92dd800) /* stmfd sp!,{fp,ip,lr,pc} */
870 continue;
11d3b27d 871
b8d5e71d
MS
872 /* Any insns after this point may float into the code, if it makes
873 for better instruction scheduling, so we skip them only if we
874 find them, but still consider the function to be frame-ful. */
f43845b3 875
b8d5e71d
MS
876 /* We may have either one sfmfd instruction here, or several stfe
877 insns, depending on the version of floating point code we
878 support. */
879 if ((inst & 0xffbf0fff) == 0xec2d0200) /* sfmfd fn, <cnt>, [sp]! */
880 continue;
881
882 if ((inst & 0xffff8fff) == 0xed6d0103) /* stfe fn, [sp, #-12]! */
883 continue;
884
885 if ((inst & 0xfffff000) == 0xe24cb000) /* sub fp, ip, #nn */
886 continue;
887
888 if ((inst & 0xfffff000) == 0xe24dd000) /* sub sp, sp, #nn */
889 continue;
890
f8bf5763
PM
891 if ((inst & 0xffffc000) == 0xe54b0000 /* strb r(0123),[r11,#-nn] */
892 || (inst & 0xffffc0f0) == 0xe14b00b0 /* strh r(0123),[r11,#-nn] */
893 || (inst & 0xffffc000) == 0xe50b0000) /* str r(0123),[r11,#-nn] */
b8d5e71d
MS
894 continue;
895
f8bf5763
PM
896 if ((inst & 0xffffc000) == 0xe5cd0000 /* strb r(0123),[sp,#nn] */
897 || (inst & 0xffffc0f0) == 0xe1cd00b0 /* strh r(0123),[sp,#nn] */
898 || (inst & 0xffffc000) == 0xe58d0000) /* str r(0123),[sp,#nn] */
b8d5e71d
MS
899 continue;
900
901 /* Un-recognized instruction; stop scanning. */
902 break;
f43845b3 903 }
c906108c 904
b8d5e71d 905 return skip_pc; /* End of prologue */
c906108c 906}
94c30b78 907
c5aa993b 908/* *INDENT-OFF* */
c906108c
SS
909/* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
910 This function decodes a Thumb function prologue to determine:
911 1) the size of the stack frame
912 2) which registers are saved on it
913 3) the offsets of saved regs
914 4) the offset from the stack pointer to the frame pointer
c906108c 915
da59e081
JM
916 A typical Thumb function prologue would create this stack frame
917 (offsets relative to FP)
c906108c
SS
918 old SP -> 24 stack parameters
919 20 LR
920 16 R7
921 R7 -> 0 local variables (16 bytes)
922 SP -> -12 additional stack space (12 bytes)
923 The frame size would thus be 36 bytes, and the frame offset would be
da59e081
JM
924 12 bytes. The frame register is R7.
925
da3c6d4a
MS
926 The comments for thumb_skip_prolog() describe the algorithm we use
927 to detect the end of the prolog. */
c5aa993b
JM
928/* *INDENT-ON* */
929
c906108c 930static void
be8626e0 931thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
b39cc962 932 CORE_ADDR block_addr, struct arm_prologue_cache *cache)
c906108c
SS
933{
934 CORE_ADDR prologue_start;
935 CORE_ADDR prologue_end;
936 CORE_ADDR current_pc;
c906108c 937
b39cc962
DJ
938 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
939 &prologue_end))
c906108c
SS
940 {
941 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
942
94c30b78 943 if (sal.line == 0) /* no line info, use current PC */
eb5492fa 944 prologue_end = prev_pc;
c906108c 945 else if (sal.end < prologue_end) /* next line begins after fn end */
94c30b78 946 prologue_end = sal.end; /* (probably means no prologue) */
c906108c
SS
947 }
948 else
f7060f85
DJ
949 /* We're in the boondocks: we have no idea where the start of the
950 function is. */
951 return;
c906108c 952
eb5492fa 953 prologue_end = min (prologue_end, prev_pc);
c906108c 954
be8626e0 955 thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
c906108c
SS
956}
957
0d39a070 958/* Return 1 if THIS_INSTR might change control flow, 0 otherwise. */
c906108c 959
0d39a070
DJ
960static int
961arm_instruction_changes_pc (uint32_t this_instr)
c906108c 962{
0d39a070
DJ
963 if (bits (this_instr, 28, 31) == INST_NV)
964 /* Unconditional instructions. */
965 switch (bits (this_instr, 24, 27))
966 {
967 case 0xa:
968 case 0xb:
969 /* Branch with Link and change to Thumb. */
970 return 1;
971 case 0xc:
972 case 0xd:
973 case 0xe:
974 /* Coprocessor register transfer. */
975 if (bits (this_instr, 12, 15) == 15)
976 error (_("Invalid update to pc in instruction"));
977 return 0;
978 default:
979 return 0;
980 }
981 else
982 switch (bits (this_instr, 25, 27))
983 {
984 case 0x0:
985 if (bits (this_instr, 23, 24) == 2 && bit (this_instr, 20) == 0)
986 {
987 /* Multiplies and extra load/stores. */
988 if (bit (this_instr, 4) == 1 && bit (this_instr, 7) == 1)
989 /* Neither multiplies nor extension load/stores are allowed
990 to modify PC. */
991 return 0;
992
993 /* Otherwise, miscellaneous instructions. */
994
995 /* BX <reg>, BXJ <reg>, BLX <reg> */
996 if (bits (this_instr, 4, 27) == 0x12fff1
997 || bits (this_instr, 4, 27) == 0x12fff2
998 || bits (this_instr, 4, 27) == 0x12fff3)
999 return 1;
1000
1001 /* Other miscellaneous instructions are unpredictable if they
1002 modify PC. */
1003 return 0;
1004 }
1005 /* Data processing instruction. Fall through. */
c906108c 1006
0d39a070
DJ
1007 case 0x1:
1008 if (bits (this_instr, 12, 15) == 15)
1009 return 1;
1010 else
1011 return 0;
c906108c 1012
0d39a070
DJ
1013 case 0x2:
1014 case 0x3:
1015 /* Media instructions and architecturally undefined instructions. */
1016 if (bits (this_instr, 25, 27) == 3 && bit (this_instr, 4) == 1)
1017 return 0;
c906108c 1018
0d39a070
DJ
1019 /* Stores. */
1020 if (bit (this_instr, 20) == 0)
1021 return 0;
2a451106 1022
0d39a070
DJ
1023 /* Loads. */
1024 if (bits (this_instr, 12, 15) == ARM_PC_REGNUM)
1025 return 1;
1026 else
1027 return 0;
2a451106 1028
0d39a070
DJ
1029 case 0x4:
1030 /* Load/store multiple. */
1031 if (bit (this_instr, 20) == 1 && bit (this_instr, 15) == 1)
1032 return 1;
1033 else
1034 return 0;
2a451106 1035
0d39a070
DJ
1036 case 0x5:
1037 /* Branch and branch with link. */
1038 return 1;
2a451106 1039
0d39a070
DJ
1040 case 0x6:
1041 case 0x7:
1042 /* Coprocessor transfers or SWIs can not affect PC. */
1043 return 0;
eb5492fa 1044
0d39a070
DJ
1045 default:
1046 internal_error (__FILE__, __LINE__, "bad value in switch");
1047 }
1048}
c906108c 1049
0d39a070
DJ
1050/* Analyze an ARM mode prologue starting at PROLOGUE_START and
1051 continuing no further than PROLOGUE_END. If CACHE is non-NULL,
1052 fill it in. Return the first address not recognized as a prologue
1053 instruction.
eb5492fa 1054
0d39a070
DJ
1055 We recognize all the instructions typically found in ARM prologues,
1056 plus harmless instructions which can be skipped (either for analysis
1057 purposes, or a more restrictive set that can be skipped when finding
1058 the end of the prologue). */
1059
1060static CORE_ADDR
1061arm_analyze_prologue (struct gdbarch *gdbarch,
1062 CORE_ADDR prologue_start, CORE_ADDR prologue_end,
1063 struct arm_prologue_cache *cache)
1064{
1065 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1066 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1067 int regno;
1068 CORE_ADDR offset, current_pc;
1069 pv_t regs[ARM_FPS_REGNUM];
1070 struct pv_area *stack;
1071 struct cleanup *back_to;
1072 int framereg, framesize;
1073 CORE_ADDR unrecognized_pc = 0;
1074
1075 /* Search the prologue looking for instructions that set up the
96baa820 1076 frame pointer, adjust the stack pointer, and save registers.
ed9a39eb 1077
96baa820
JM
1078 Be careful, however, and if it doesn't look like a prologue,
1079 don't try to scan it. If, for instance, a frameless function
1080 begins with stmfd sp!, then we will tell ourselves there is
b8d5e71d 1081 a frame, which will confuse stack traceback, as well as "finish"
96baa820 1082 and other operations that rely on a knowledge of the stack
0d39a070 1083 traceback. */
d4473757 1084
4be43953
DJ
1085 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1086 regs[regno] = pv_register (regno, 0);
55f960e1 1087 stack = make_pv_area (ARM_SP_REGNUM, gdbarch_addr_bit (gdbarch));
4be43953
DJ
1088 back_to = make_cleanup_free_pv_area (stack);
1089
94c30b78
MS
1090 for (current_pc = prologue_start;
1091 current_pc < prologue_end;
f43845b3 1092 current_pc += 4)
96baa820 1093 {
e17a4113
UW
1094 unsigned int insn
1095 = read_memory_unsigned_integer (current_pc, 4, byte_order_for_code);
9d4fde75 1096
94c30b78 1097 if (insn == 0xe1a0c00d) /* mov ip, sp */
f43845b3 1098 {
4be43953 1099 regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
28cd8767
JG
1100 continue;
1101 }
0d39a070
DJ
1102 else if ((insn & 0xfff00000) == 0xe2800000 /* add Rd, Rn, #n */
1103 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
28cd8767
JG
1104 {
1105 unsigned imm = insn & 0xff; /* immediate value */
1106 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
0d39a070 1107 int rd = bits (insn, 12, 15);
28cd8767 1108 imm = (imm >> rot) | (imm << (32 - rot));
0d39a070 1109 regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], imm);
28cd8767
JG
1110 continue;
1111 }
0d39a070
DJ
1112 else if ((insn & 0xfff00000) == 0xe2400000 /* sub Rd, Rn, #n */
1113 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
28cd8767
JG
1114 {
1115 unsigned imm = insn & 0xff; /* immediate value */
1116 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
0d39a070 1117 int rd = bits (insn, 12, 15);
28cd8767 1118 imm = (imm >> rot) | (imm << (32 - rot));
0d39a070 1119 regs[rd] = pv_add_constant (regs[bits (insn, 16, 19)], -imm);
f43845b3
MS
1120 continue;
1121 }
0d39a070 1122 else if ((insn & 0xffff0fff) == 0xe52d0004) /* str Rd, [sp, #-4]! */
f43845b3 1123 {
4be43953
DJ
1124 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1125 break;
1126 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
0d39a070
DJ
1127 pv_area_store (stack, regs[ARM_SP_REGNUM], 4,
1128 regs[bits (insn, 12, 15)]);
f43845b3
MS
1129 continue;
1130 }
1131 else if ((insn & 0xffff0000) == 0xe92d0000)
d4473757
KB
1132 /* stmfd sp!, {..., fp, ip, lr, pc}
1133 or
1134 stmfd sp!, {a1, a2, a3, a4} */
c906108c 1135 {
d4473757 1136 int mask = insn & 0xffff;
ed9a39eb 1137
4be43953
DJ
1138 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1139 break;
1140
94c30b78 1141 /* Calculate offsets of saved registers. */
34e8f22d 1142 for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
d4473757
KB
1143 if (mask & (1 << regno))
1144 {
4be43953
DJ
1145 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
1146 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
d4473757
KB
1147 }
1148 }
0d39a070
DJ
1149 else if ((insn & 0xffff0000) == 0xe54b0000 /* strb rx,[r11,#-n] */
1150 || (insn & 0xffff00f0) == 0xe14b00b0 /* strh rx,[r11,#-n] */
f8bf5763 1151 || (insn & 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
b8d5e71d
MS
1152 {
1153 /* No need to add this to saved_regs -- it's just an arg reg. */
1154 continue;
1155 }
0d39a070
DJ
1156 else if ((insn & 0xffff0000) == 0xe5cd0000 /* strb rx,[sp,#n] */
1157 || (insn & 0xffff00f0) == 0xe1cd00b0 /* strh rx,[sp,#n] */
f8bf5763 1158 || (insn & 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
f43845b3
MS
1159 {
1160 /* No need to add this to saved_regs -- it's just an arg reg. */
1161 continue;
1162 }
0d39a070
DJ
1163 else if ((insn & 0xfff00000) == 0xe8800000 /* stm Rn, { registers } */
1164 && pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1165 {
1166 /* No need to add this to saved_regs -- it's just arg regs. */
1167 continue;
1168 }
d4473757
KB
1169 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
1170 {
94c30b78
MS
1171 unsigned imm = insn & 0xff; /* immediate value */
1172 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
d4473757 1173 imm = (imm >> rot) | (imm << (32 - rot));
4be43953 1174 regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
d4473757
KB
1175 }
1176 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
1177 {
94c30b78
MS
1178 unsigned imm = insn & 0xff; /* immediate value */
1179 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
d4473757 1180 imm = (imm >> rot) | (imm << (32 - rot));
4be43953 1181 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
d4473757 1182 }
ff6f572f 1183 else if ((insn & 0xffff7fff) == 0xed6d0103 /* stfe f?, [sp, -#c]! */
2af46ca0 1184 && gdbarch_tdep (gdbarch)->have_fpa_registers)
d4473757 1185 {
4be43953
DJ
1186 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1187 break;
1188
1189 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
34e8f22d 1190 regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
4be43953 1191 pv_area_store (stack, regs[ARM_SP_REGNUM], 12, regs[regno]);
d4473757 1192 }
ff6f572f 1193 else if ((insn & 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4, [sp!] */
2af46ca0 1194 && gdbarch_tdep (gdbarch)->have_fpa_registers)
d4473757
KB
1195 {
1196 int n_saved_fp_regs;
1197 unsigned int fp_start_reg, fp_bound_reg;
1198
4be43953
DJ
1199 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
1200 break;
1201
94c30b78 1202 if ((insn & 0x800) == 0x800) /* N0 is set */
96baa820 1203 {
d4473757
KB
1204 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1205 n_saved_fp_regs = 3;
1206 else
1207 n_saved_fp_regs = 1;
96baa820 1208 }
d4473757 1209 else
96baa820 1210 {
d4473757
KB
1211 if ((insn & 0x40000) == 0x40000) /* N1 is set */
1212 n_saved_fp_regs = 2;
1213 else
1214 n_saved_fp_regs = 4;
96baa820 1215 }
d4473757 1216
34e8f22d 1217 fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
d4473757
KB
1218 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
1219 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
96baa820 1220 {
4be43953
DJ
1221 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
1222 pv_area_store (stack, regs[ARM_SP_REGNUM], 12,
1223 regs[fp_start_reg++]);
96baa820 1224 }
c906108c 1225 }
0d39a070
DJ
1226 else if ((insn & 0xff000000) == 0xeb000000 && cache == NULL) /* bl */
1227 {
1228 /* Allow some special function calls when skipping the
1229 prologue; GCC generates these before storing arguments to
1230 the stack. */
1231 CORE_ADDR dest = BranchDest (current_pc, insn);
1232
1233 if (skip_prologue_function (dest))
1234 continue;
1235 else
1236 break;
1237 }
d4473757 1238 else if ((insn & 0xf0000000) != 0xe0000000)
94c30b78 1239 break; /* Condition not true, exit early */
0d39a070
DJ
1240 else if (arm_instruction_changes_pc (insn))
1241 /* Don't scan past anything that might change control flow. */
1242 break;
1243 else if ((insn & 0xfe500000) == 0xe8100000) /* ldm */
1244 {
1245 /* Ignore block loads from the stack, potentially copying
1246 parameters from memory. */
1247 if (pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1248 continue;
1249 else
1250 break;
1251 }
1252 else if ((insn & 0xfc500000) == 0xe4100000)
1253 {
1254 /* Similarly ignore single loads from the stack. */
1255 if (pv_is_register (regs[bits (insn, 16, 19)], ARM_SP_REGNUM))
1256 continue;
1257 else
1258 break;
1259 }
1260 else if ((insn & 0xffff0ff0) == 0xe1a00000)
1261 /* MOV Rd, Rm. Skip register copies, i.e. saves to another
1262 register instead of the stack. */
d4473757 1263 continue;
0d39a070
DJ
1264 else
1265 {
1266 /* The optimizer might shove anything into the prologue,
1267 so we just skip what we don't recognize. */
1268 unrecognized_pc = current_pc;
1269 continue;
1270 }
c906108c
SS
1271 }
1272
0d39a070
DJ
1273 if (unrecognized_pc == 0)
1274 unrecognized_pc = current_pc;
1275
4be43953
DJ
1276 /* The frame size is just the distance from the frame register
1277 to the original stack pointer. */
1278 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
1279 {
1280 /* Frame pointer is fp. */
0d39a070
DJ
1281 framereg = ARM_FP_REGNUM;
1282 framesize = -regs[ARM_FP_REGNUM].k;
4be43953
DJ
1283 }
1284 else if (pv_is_register (regs[ARM_SP_REGNUM], ARM_SP_REGNUM))
1285 {
1286 /* Try the stack pointer... this is a bit desperate. */
0d39a070
DJ
1287 framereg = ARM_SP_REGNUM;
1288 framesize = -regs[ARM_SP_REGNUM].k;
4be43953 1289 }
d4473757 1290 else
4be43953
DJ
1291 {
1292 /* We're just out of luck. We don't know where the frame is. */
0d39a070
DJ
1293 framereg = -1;
1294 framesize = 0;
4be43953
DJ
1295 }
1296
0d39a070
DJ
1297 if (cache)
1298 {
1299 cache->framereg = framereg;
1300 cache->framesize = framesize;
1301
1302 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
1303 if (pv_area_find_reg (stack, gdbarch, regno, &offset))
1304 cache->saved_regs[regno].addr = offset;
1305 }
1306
1307 if (arm_debug)
1308 fprintf_unfiltered (gdb_stdlog, "Prologue scan stopped at %s\n",
1309 paddress (gdbarch, unrecognized_pc));
4be43953
DJ
1310
1311 do_cleanups (back_to);
0d39a070
DJ
1312 return unrecognized_pc;
1313}
1314
1315static void
1316arm_scan_prologue (struct frame_info *this_frame,
1317 struct arm_prologue_cache *cache)
1318{
1319 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1320 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1321 int regno;
1322 CORE_ADDR prologue_start, prologue_end, current_pc;
1323 CORE_ADDR prev_pc = get_frame_pc (this_frame);
1324 CORE_ADDR block_addr = get_frame_address_in_block (this_frame);
1325 pv_t regs[ARM_FPS_REGNUM];
1326 struct pv_area *stack;
1327 struct cleanup *back_to;
1328 CORE_ADDR offset;
1329
1330 /* Assume there is no frame until proven otherwise. */
1331 cache->framereg = ARM_SP_REGNUM;
1332 cache->framesize = 0;
1333
1334 /* Check for Thumb prologue. */
1335 if (arm_frame_is_thumb (this_frame))
1336 {
1337 thumb_scan_prologue (gdbarch, prev_pc, block_addr, cache);
1338 return;
1339 }
1340
1341 /* Find the function prologue. If we can't find the function in
1342 the symbol table, peek in the stack frame to find the PC. */
1343 if (find_pc_partial_function (block_addr, NULL, &prologue_start,
1344 &prologue_end))
1345 {
1346 /* One way to find the end of the prologue (which works well
1347 for unoptimized code) is to do the following:
1348
1349 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
1350
1351 if (sal.line == 0)
1352 prologue_end = prev_pc;
1353 else if (sal.end < prologue_end)
1354 prologue_end = sal.end;
1355
1356 This mechanism is very accurate so long as the optimizer
1357 doesn't move any instructions from the function body into the
1358 prologue. If this happens, sal.end will be the last
1359 instruction in the first hunk of prologue code just before
1360 the first instruction that the scheduler has moved from
1361 the body to the prologue.
1362
1363 In order to make sure that we scan all of the prologue
1364 instructions, we use a slightly less accurate mechanism which
1365 may scan more than necessary. To help compensate for this
1366 lack of accuracy, the prologue scanning loop below contains
1367 several clauses which'll cause the loop to terminate early if
1368 an implausible prologue instruction is encountered.
1369
1370 The expression
1371
1372 prologue_start + 64
1373
1374 is a suitable endpoint since it accounts for the largest
1375 possible prologue plus up to five instructions inserted by
1376 the scheduler. */
1377
1378 if (prologue_end > prologue_start + 64)
1379 {
1380 prologue_end = prologue_start + 64; /* See above. */
1381 }
1382 }
1383 else
1384 {
1385 /* We have no symbol information. Our only option is to assume this
1386 function has a standard stack frame and the normal frame register.
1387 Then, we can find the value of our frame pointer on entrance to
1388 the callee (or at the present moment if this is the innermost frame).
1389 The value stored there should be the address of the stmfd + 8. */
1390 CORE_ADDR frame_loc;
1391 LONGEST return_value;
1392
1393 frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
1394 if (!safe_read_memory_integer (frame_loc, 4, byte_order, &return_value))
1395 return;
1396 else
1397 {
1398 prologue_start = gdbarch_addr_bits_remove
1399 (gdbarch, return_value) - 8;
1400 prologue_end = prologue_start + 64; /* See above. */
1401 }
1402 }
1403
1404 if (prev_pc < prologue_end)
1405 prologue_end = prev_pc;
1406
1407 arm_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
c906108c
SS
1408}
1409
eb5492fa 1410static struct arm_prologue_cache *
a262aec2 1411arm_make_prologue_cache (struct frame_info *this_frame)
c906108c 1412{
eb5492fa
DJ
1413 int reg;
1414 struct arm_prologue_cache *cache;
1415 CORE_ADDR unwound_fp;
c5aa993b 1416
35d5d4ee 1417 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
a262aec2 1418 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
c906108c 1419
a262aec2 1420 arm_scan_prologue (this_frame, cache);
848cfffb 1421
a262aec2 1422 unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
eb5492fa
DJ
1423 if (unwound_fp == 0)
1424 return cache;
c906108c 1425
4be43953 1426 cache->prev_sp = unwound_fp + cache->framesize;
c906108c 1427
eb5492fa
DJ
1428 /* Calculate actual addresses of saved registers using offsets
1429 determined by arm_scan_prologue. */
a262aec2 1430 for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
e28a332c 1431 if (trad_frame_addr_p (cache->saved_regs, reg))
eb5492fa
DJ
1432 cache->saved_regs[reg].addr += cache->prev_sp;
1433
1434 return cache;
c906108c
SS
1435}
1436
eb5492fa
DJ
1437/* Our frame ID for a normal frame is the current function's starting PC
1438 and the caller's SP when we were called. */
c906108c 1439
148754e5 1440static void
a262aec2 1441arm_prologue_this_id (struct frame_info *this_frame,
eb5492fa
DJ
1442 void **this_cache,
1443 struct frame_id *this_id)
c906108c 1444{
eb5492fa
DJ
1445 struct arm_prologue_cache *cache;
1446 struct frame_id id;
2c404490 1447 CORE_ADDR pc, func;
f079148d 1448
eb5492fa 1449 if (*this_cache == NULL)
a262aec2 1450 *this_cache = arm_make_prologue_cache (this_frame);
eb5492fa 1451 cache = *this_cache;
2a451106 1452
2c404490
DJ
1453 /* This is meant to halt the backtrace at "_start". */
1454 pc = get_frame_pc (this_frame);
1455 if (pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
eb5492fa 1456 return;
5a203e44 1457
eb5492fa
DJ
1458 /* If we've hit a wall, stop. */
1459 if (cache->prev_sp == 0)
1460 return;
24de872b 1461
2c404490 1462 func = get_frame_func (this_frame);
eb5492fa 1463 id = frame_id_build (cache->prev_sp, func);
eb5492fa 1464 *this_id = id;
c906108c
SS
1465}
1466
a262aec2
DJ
1467static struct value *
1468arm_prologue_prev_register (struct frame_info *this_frame,
eb5492fa 1469 void **this_cache,
a262aec2 1470 int prev_regnum)
24de872b 1471{
24568a2c 1472 struct gdbarch *gdbarch = get_frame_arch (this_frame);
24de872b
DJ
1473 struct arm_prologue_cache *cache;
1474
eb5492fa 1475 if (*this_cache == NULL)
a262aec2 1476 *this_cache = arm_make_prologue_cache (this_frame);
eb5492fa 1477 cache = *this_cache;
24de872b 1478
eb5492fa 1479 /* If we are asked to unwind the PC, then we need to return the LR
b39cc962
DJ
1480 instead. The prologue may save PC, but it will point into this
1481 frame's prologue, not the next frame's resume location. Also
1482 strip the saved T bit. A valid LR may have the low bit set, but
1483 a valid PC never does. */
eb5492fa 1484 if (prev_regnum == ARM_PC_REGNUM)
b39cc962
DJ
1485 {
1486 CORE_ADDR lr;
1487
1488 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1489 return frame_unwind_got_constant (this_frame, prev_regnum,
24568a2c 1490 arm_addr_bits_remove (gdbarch, lr));
b39cc962 1491 }
24de872b 1492
eb5492fa 1493 /* SP is generally not saved to the stack, but this frame is
a262aec2 1494 identified by the next frame's stack pointer at the time of the call.
eb5492fa
DJ
1495 The value was already reconstructed into PREV_SP. */
1496 if (prev_regnum == ARM_SP_REGNUM)
a262aec2 1497 return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
eb5492fa 1498
b39cc962
DJ
1499 /* The CPSR may have been changed by the call instruction and by the
1500 called function. The only bit we can reconstruct is the T bit,
1501 by checking the low bit of LR as of the call. This is a reliable
1502 indicator of Thumb-ness except for some ARM v4T pre-interworking
1503 Thumb code, which could get away with a clear low bit as long as
1504 the called function did not use bx. Guess that all other
1505 bits are unchanged; the condition flags are presumably lost,
1506 but the processor status is likely valid. */
1507 if (prev_regnum == ARM_PS_REGNUM)
1508 {
1509 CORE_ADDR lr, cpsr;
1510
1511 cpsr = get_frame_register_unsigned (this_frame, prev_regnum);
1512 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1513 if (IS_THUMB_ADDR (lr))
1514 cpsr |= CPSR_T;
1515 else
1516 cpsr &= ~CPSR_T;
1517 return frame_unwind_got_constant (this_frame, prev_regnum, cpsr);
1518 }
1519
a262aec2
DJ
1520 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1521 prev_regnum);
eb5492fa
DJ
1522}
1523
1524struct frame_unwind arm_prologue_unwind = {
1525 NORMAL_FRAME,
1526 arm_prologue_this_id,
a262aec2
DJ
1527 arm_prologue_prev_register,
1528 NULL,
1529 default_frame_sniffer
eb5492fa
DJ
1530};
1531
909cf6ea 1532static struct arm_prologue_cache *
a262aec2 1533arm_make_stub_cache (struct frame_info *this_frame)
909cf6ea 1534{
909cf6ea 1535 struct arm_prologue_cache *cache;
909cf6ea 1536
35d5d4ee 1537 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
a262aec2 1538 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
909cf6ea 1539
a262aec2 1540 cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
909cf6ea
DJ
1541
1542 return cache;
1543}
1544
1545/* Our frame ID for a stub frame is the current SP and LR. */
1546
1547static void
a262aec2 1548arm_stub_this_id (struct frame_info *this_frame,
909cf6ea
DJ
1549 void **this_cache,
1550 struct frame_id *this_id)
1551{
1552 struct arm_prologue_cache *cache;
1553
1554 if (*this_cache == NULL)
a262aec2 1555 *this_cache = arm_make_stub_cache (this_frame);
909cf6ea
DJ
1556 cache = *this_cache;
1557
a262aec2 1558 *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
909cf6ea
DJ
1559}
1560
a262aec2
DJ
1561static int
1562arm_stub_unwind_sniffer (const struct frame_unwind *self,
1563 struct frame_info *this_frame,
1564 void **this_prologue_cache)
909cf6ea 1565{
93d42b30 1566 CORE_ADDR addr_in_block;
909cf6ea
DJ
1567 char dummy[4];
1568
a262aec2 1569 addr_in_block = get_frame_address_in_block (this_frame);
93d42b30 1570 if (in_plt_section (addr_in_block, NULL)
fc36e839
DE
1571 /* We also use the stub winder if the target memory is unreadable
1572 to avoid having the prologue unwinder trying to read it. */
a262aec2
DJ
1573 || target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
1574 return 1;
909cf6ea 1575
a262aec2 1576 return 0;
909cf6ea
DJ
1577}
1578
a262aec2
DJ
1579struct frame_unwind arm_stub_unwind = {
1580 NORMAL_FRAME,
1581 arm_stub_this_id,
1582 arm_prologue_prev_register,
1583 NULL,
1584 arm_stub_unwind_sniffer
1585};
1586
24de872b 1587static CORE_ADDR
a262aec2 1588arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
24de872b
DJ
1589{
1590 struct arm_prologue_cache *cache;
1591
eb5492fa 1592 if (*this_cache == NULL)
a262aec2 1593 *this_cache = arm_make_prologue_cache (this_frame);
eb5492fa
DJ
1594 cache = *this_cache;
1595
4be43953 1596 return cache->prev_sp - cache->framesize;
24de872b
DJ
1597}
1598
eb5492fa
DJ
1599struct frame_base arm_normal_base = {
1600 &arm_prologue_unwind,
1601 arm_normal_frame_base,
1602 arm_normal_frame_base,
1603 arm_normal_frame_base
1604};
1605
a262aec2 1606/* Assuming THIS_FRAME is a dummy, return the frame ID of that
eb5492fa
DJ
1607 dummy frame. The frame ID's base needs to match the TOS value
1608 saved by save_dummy_frame_tos() and returned from
1609 arm_push_dummy_call, and the PC needs to match the dummy frame's
1610 breakpoint. */
c906108c 1611
eb5492fa 1612static struct frame_id
a262aec2 1613arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
c906108c 1614{
a262aec2
DJ
1615 return frame_id_build (get_frame_register_unsigned (this_frame, ARM_SP_REGNUM),
1616 get_frame_pc (this_frame));
eb5492fa 1617}
c3b4394c 1618
eb5492fa
DJ
1619/* Given THIS_FRAME, find the previous frame's resume PC (which will
1620 be used to construct the previous frame's ID, after looking up the
1621 containing function). */
c3b4394c 1622
eb5492fa
DJ
1623static CORE_ADDR
1624arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1625{
1626 CORE_ADDR pc;
1627 pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
24568a2c 1628 return arm_addr_bits_remove (gdbarch, pc);
eb5492fa
DJ
1629}
1630
1631static CORE_ADDR
1632arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
1633{
1634 return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
c906108c
SS
1635}
1636
b39cc962
DJ
1637static struct value *
1638arm_dwarf2_prev_register (struct frame_info *this_frame, void **this_cache,
1639 int regnum)
1640{
24568a2c 1641 struct gdbarch * gdbarch = get_frame_arch (this_frame);
b39cc962
DJ
1642 CORE_ADDR lr, cpsr;
1643
1644 switch (regnum)
1645 {
1646 case ARM_PC_REGNUM:
1647 /* The PC is normally copied from the return column, which
1648 describes saves of LR. However, that version may have an
1649 extra bit set to indicate Thumb state. The bit is not
1650 part of the PC. */
1651 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1652 return frame_unwind_got_constant (this_frame, regnum,
24568a2c 1653 arm_addr_bits_remove (gdbarch, lr));
b39cc962
DJ
1654
1655 case ARM_PS_REGNUM:
1656 /* Reconstruct the T bit; see arm_prologue_prev_register for details. */
ca38c58e 1657 cpsr = get_frame_register_unsigned (this_frame, regnum);
b39cc962
DJ
1658 lr = frame_unwind_register_unsigned (this_frame, ARM_LR_REGNUM);
1659 if (IS_THUMB_ADDR (lr))
1660 cpsr |= CPSR_T;
1661 else
1662 cpsr &= ~CPSR_T;
ca38c58e 1663 return frame_unwind_got_constant (this_frame, regnum, cpsr);
b39cc962
DJ
1664
1665 default:
1666 internal_error (__FILE__, __LINE__,
1667 _("Unexpected register %d"), regnum);
1668 }
1669}
1670
1671static void
1672arm_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
1673 struct dwarf2_frame_state_reg *reg,
1674 struct frame_info *this_frame)
1675{
1676 switch (regnum)
1677 {
1678 case ARM_PC_REGNUM:
1679 case ARM_PS_REGNUM:
1680 reg->how = DWARF2_FRAME_REG_FN;
1681 reg->loc.fn = arm_dwarf2_prev_register;
1682 break;
1683 case ARM_SP_REGNUM:
1684 reg->how = DWARF2_FRAME_REG_CFA;
1685 break;
1686 }
1687}
1688
2dd604e7
RE
1689/* When arguments must be pushed onto the stack, they go on in reverse
1690 order. The code below implements a FILO (stack) to do this. */
1691
1692struct stack_item
1693{
1694 int len;
1695 struct stack_item *prev;
1696 void *data;
1697};
1698
1699static struct stack_item *
1700push_stack_item (struct stack_item *prev, void *contents, int len)
1701{
1702 struct stack_item *si;
1703 si = xmalloc (sizeof (struct stack_item));
226c7fbc 1704 si->data = xmalloc (len);
2dd604e7
RE
1705 si->len = len;
1706 si->prev = prev;
1707 memcpy (si->data, contents, len);
1708 return si;
1709}
1710
1711static struct stack_item *
1712pop_stack_item (struct stack_item *si)
1713{
1714 struct stack_item *dead = si;
1715 si = si->prev;
1716 xfree (dead->data);
1717 xfree (dead);
1718 return si;
1719}
1720
2af48f68
PB
1721
1722/* Return the alignment (in bytes) of the given type. */
1723
1724static int
1725arm_type_align (struct type *t)
1726{
1727 int n;
1728 int align;
1729 int falign;
1730
1731 t = check_typedef (t);
1732 switch (TYPE_CODE (t))
1733 {
1734 default:
1735 /* Should never happen. */
1736 internal_error (__FILE__, __LINE__, _("unknown type alignment"));
1737 return 4;
1738
1739 case TYPE_CODE_PTR:
1740 case TYPE_CODE_ENUM:
1741 case TYPE_CODE_INT:
1742 case TYPE_CODE_FLT:
1743 case TYPE_CODE_SET:
1744 case TYPE_CODE_RANGE:
1745 case TYPE_CODE_BITSTRING:
1746 case TYPE_CODE_REF:
1747 case TYPE_CODE_CHAR:
1748 case TYPE_CODE_BOOL:
1749 return TYPE_LENGTH (t);
1750
1751 case TYPE_CODE_ARRAY:
1752 case TYPE_CODE_COMPLEX:
1753 /* TODO: What about vector types? */
1754 return arm_type_align (TYPE_TARGET_TYPE (t));
1755
1756 case TYPE_CODE_STRUCT:
1757 case TYPE_CODE_UNION:
1758 align = 1;
1759 for (n = 0; n < TYPE_NFIELDS (t); n++)
1760 {
1761 falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
1762 if (falign > align)
1763 align = falign;
1764 }
1765 return align;
1766 }
1767}
1768
90445bd3
DJ
1769/* Possible base types for a candidate for passing and returning in
1770 VFP registers. */
1771
1772enum arm_vfp_cprc_base_type
1773{
1774 VFP_CPRC_UNKNOWN,
1775 VFP_CPRC_SINGLE,
1776 VFP_CPRC_DOUBLE,
1777 VFP_CPRC_VEC64,
1778 VFP_CPRC_VEC128
1779};
1780
1781/* The length of one element of base type B. */
1782
1783static unsigned
1784arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b)
1785{
1786 switch (b)
1787 {
1788 case VFP_CPRC_SINGLE:
1789 return 4;
1790 case VFP_CPRC_DOUBLE:
1791 return 8;
1792 case VFP_CPRC_VEC64:
1793 return 8;
1794 case VFP_CPRC_VEC128:
1795 return 16;
1796 default:
1797 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
1798 (int) b);
1799 }
1800}
1801
1802/* The character ('s', 'd' or 'q') for the type of VFP register used
1803 for passing base type B. */
1804
1805static int
1806arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b)
1807{
1808 switch (b)
1809 {
1810 case VFP_CPRC_SINGLE:
1811 return 's';
1812 case VFP_CPRC_DOUBLE:
1813 return 'd';
1814 case VFP_CPRC_VEC64:
1815 return 'd';
1816 case VFP_CPRC_VEC128:
1817 return 'q';
1818 default:
1819 internal_error (__FILE__, __LINE__, _("Invalid VFP CPRC type: %d."),
1820 (int) b);
1821 }
1822}
1823
1824/* Determine whether T may be part of a candidate for passing and
1825 returning in VFP registers, ignoring the limit on the total number
1826 of components. If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
1827 classification of the first valid component found; if it is not
1828 VFP_CPRC_UNKNOWN, all components must have the same classification
1829 as *BASE_TYPE. If it is found that T contains a type not permitted
1830 for passing and returning in VFP registers, a type differently
1831 classified from *BASE_TYPE, or two types differently classified
1832 from each other, return -1, otherwise return the total number of
1833 base-type elements found (possibly 0 in an empty structure or
1834 array). Vectors and complex types are not currently supported,
1835 matching the generic AAPCS support. */
1836
1837static int
1838arm_vfp_cprc_sub_candidate (struct type *t,
1839 enum arm_vfp_cprc_base_type *base_type)
1840{
1841 t = check_typedef (t);
1842 switch (TYPE_CODE (t))
1843 {
1844 case TYPE_CODE_FLT:
1845 switch (TYPE_LENGTH (t))
1846 {
1847 case 4:
1848 if (*base_type == VFP_CPRC_UNKNOWN)
1849 *base_type = VFP_CPRC_SINGLE;
1850 else if (*base_type != VFP_CPRC_SINGLE)
1851 return -1;
1852 return 1;
1853
1854 case 8:
1855 if (*base_type == VFP_CPRC_UNKNOWN)
1856 *base_type = VFP_CPRC_DOUBLE;
1857 else if (*base_type != VFP_CPRC_DOUBLE)
1858 return -1;
1859 return 1;
1860
1861 default:
1862 return -1;
1863 }
1864 break;
1865
1866 case TYPE_CODE_ARRAY:
1867 {
1868 int count;
1869 unsigned unitlen;
1870 count = arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t), base_type);
1871 if (count == -1)
1872 return -1;
1873 if (TYPE_LENGTH (t) == 0)
1874 {
1875 gdb_assert (count == 0);
1876 return 0;
1877 }
1878 else if (count == 0)
1879 return -1;
1880 unitlen = arm_vfp_cprc_unit_length (*base_type);
1881 gdb_assert ((TYPE_LENGTH (t) % unitlen) == 0);
1882 return TYPE_LENGTH (t) / unitlen;
1883 }
1884 break;
1885
1886 case TYPE_CODE_STRUCT:
1887 {
1888 int count = 0;
1889 unsigned unitlen;
1890 int i;
1891 for (i = 0; i < TYPE_NFIELDS (t); i++)
1892 {
1893 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
1894 base_type);
1895 if (sub_count == -1)
1896 return -1;
1897 count += sub_count;
1898 }
1899 if (TYPE_LENGTH (t) == 0)
1900 {
1901 gdb_assert (count == 0);
1902 return 0;
1903 }
1904 else if (count == 0)
1905 return -1;
1906 unitlen = arm_vfp_cprc_unit_length (*base_type);
1907 if (TYPE_LENGTH (t) != unitlen * count)
1908 return -1;
1909 return count;
1910 }
1911
1912 case TYPE_CODE_UNION:
1913 {
1914 int count = 0;
1915 unsigned unitlen;
1916 int i;
1917 for (i = 0; i < TYPE_NFIELDS (t); i++)
1918 {
1919 int sub_count = arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t, i),
1920 base_type);
1921 if (sub_count == -1)
1922 return -1;
1923 count = (count > sub_count ? count : sub_count);
1924 }
1925 if (TYPE_LENGTH (t) == 0)
1926 {
1927 gdb_assert (count == 0);
1928 return 0;
1929 }
1930 else if (count == 0)
1931 return -1;
1932 unitlen = arm_vfp_cprc_unit_length (*base_type);
1933 if (TYPE_LENGTH (t) != unitlen * count)
1934 return -1;
1935 return count;
1936 }
1937
1938 default:
1939 break;
1940 }
1941
1942 return -1;
1943}
1944
1945/* Determine whether T is a VFP co-processor register candidate (CPRC)
1946 if passed to or returned from a non-variadic function with the VFP
1947 ABI in effect. Return 1 if it is, 0 otherwise. If it is, set
1948 *BASE_TYPE to the base type for T and *COUNT to the number of
1949 elements of that base type before returning. */
1950
1951static int
1952arm_vfp_call_candidate (struct type *t, enum arm_vfp_cprc_base_type *base_type,
1953 int *count)
1954{
1955 enum arm_vfp_cprc_base_type b = VFP_CPRC_UNKNOWN;
1956 int c = arm_vfp_cprc_sub_candidate (t, &b);
1957 if (c <= 0 || c > 4)
1958 return 0;
1959 *base_type = b;
1960 *count = c;
1961 return 1;
1962}
1963
1964/* Return 1 if the VFP ABI should be used for passing arguments to and
1965 returning values from a function of type FUNC_TYPE, 0
1966 otherwise. */
1967
1968static int
1969arm_vfp_abi_for_function (struct gdbarch *gdbarch, struct type *func_type)
1970{
1971 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1972 /* Variadic functions always use the base ABI. Assume that functions
1973 without debug info are not variadic. */
1974 if (func_type && TYPE_VARARGS (check_typedef (func_type)))
1975 return 0;
1976 /* The VFP ABI is only supported as a variant of AAPCS. */
1977 if (tdep->arm_abi != ARM_ABI_AAPCS)
1978 return 0;
1979 return gdbarch_tdep (gdbarch)->fp_model == ARM_FLOAT_VFP;
1980}
1981
1982/* We currently only support passing parameters in integer registers, which
1983 conforms with GCC's default model, and VFP argument passing following
1984 the VFP variant of AAPCS. Several other variants exist and
2dd604e7
RE
1985 we should probably support some of them based on the selected ABI. */
1986
1987static CORE_ADDR
7d9b040b 1988arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
6a65450a
AC
1989 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
1990 struct value **args, CORE_ADDR sp, int struct_return,
1991 CORE_ADDR struct_addr)
2dd604e7 1992{
e17a4113 1993 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2dd604e7
RE
1994 int argnum;
1995 int argreg;
1996 int nstack;
1997 struct stack_item *si = NULL;
90445bd3
DJ
1998 int use_vfp_abi;
1999 struct type *ftype;
2000 unsigned vfp_regs_free = (1 << 16) - 1;
2001
2002 /* Determine the type of this function and whether the VFP ABI
2003 applies. */
2004 ftype = check_typedef (value_type (function));
2005 if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
2006 ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
2007 use_vfp_abi = arm_vfp_abi_for_function (gdbarch, ftype);
2dd604e7 2008
6a65450a
AC
2009 /* Set the return address. For the ARM, the return breakpoint is
2010 always at BP_ADDR. */
9dca5578
DJ
2011 if (arm_pc_is_thumb (bp_addr))
2012 bp_addr |= 1;
6a65450a 2013 regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
2dd604e7
RE
2014
2015 /* Walk through the list of args and determine how large a temporary
2016 stack is required. Need to take care here as structs may be
2017 passed on the stack, and we have to to push them. */
2018 nstack = 0;
2019
2020 argreg = ARM_A1_REGNUM;
2021 nstack = 0;
2022
2dd604e7
RE
2023 /* The struct_return pointer occupies the first parameter
2024 passing register. */
2025 if (struct_return)
2026 {
2027 if (arm_debug)
5af949e3 2028 fprintf_unfiltered (gdb_stdlog, "struct return in %s = %s\n",
2af46ca0 2029 gdbarch_register_name (gdbarch, argreg),
5af949e3 2030 paddress (gdbarch, struct_addr));
2dd604e7
RE
2031 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
2032 argreg++;
2033 }
2034
2035 for (argnum = 0; argnum < nargs; argnum++)
2036 {
2037 int len;
2038 struct type *arg_type;
2039 struct type *target_type;
2040 enum type_code typecode;
0fd88904 2041 bfd_byte *val;
2af48f68 2042 int align;
90445bd3
DJ
2043 enum arm_vfp_cprc_base_type vfp_base_type;
2044 int vfp_base_count;
2045 int may_use_core_reg = 1;
2dd604e7 2046
df407dfe 2047 arg_type = check_typedef (value_type (args[argnum]));
2dd604e7
RE
2048 len = TYPE_LENGTH (arg_type);
2049 target_type = TYPE_TARGET_TYPE (arg_type);
2050 typecode = TYPE_CODE (arg_type);
0fd88904 2051 val = value_contents_writeable (args[argnum]);
2dd604e7 2052
2af48f68
PB
2053 align = arm_type_align (arg_type);
2054 /* Round alignment up to a whole number of words. */
2055 align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
2056 /* Different ABIs have different maximum alignments. */
2057 if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
2058 {
2059 /* The APCS ABI only requires word alignment. */
2060 align = INT_REGISTER_SIZE;
2061 }
2062 else
2063 {
2064 /* The AAPCS requires at most doubleword alignment. */
2065 if (align > INT_REGISTER_SIZE * 2)
2066 align = INT_REGISTER_SIZE * 2;
2067 }
2068
90445bd3
DJ
2069 if (use_vfp_abi
2070 && arm_vfp_call_candidate (arg_type, &vfp_base_type,
2071 &vfp_base_count))
2072 {
2073 int regno;
2074 int unit_length;
2075 int shift;
2076 unsigned mask;
2077
2078 /* Because this is a CPRC it cannot go in a core register or
2079 cause a core register to be skipped for alignment.
2080 Either it goes in VFP registers and the rest of this loop
2081 iteration is skipped for this argument, or it goes on the
2082 stack (and the stack alignment code is correct for this
2083 case). */
2084 may_use_core_reg = 0;
2085
2086 unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
2087 shift = unit_length / 4;
2088 mask = (1 << (shift * vfp_base_count)) - 1;
2089 for (regno = 0; regno < 16; regno += shift)
2090 if (((vfp_regs_free >> regno) & mask) == mask)
2091 break;
2092
2093 if (regno < 16)
2094 {
2095 int reg_char;
2096 int reg_scaled;
2097 int i;
2098
2099 vfp_regs_free &= ~(mask << regno);
2100 reg_scaled = regno / shift;
2101 reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
2102 for (i = 0; i < vfp_base_count; i++)
2103 {
2104 char name_buf[4];
2105 int regnum;
58d6951d
DJ
2106 if (reg_char == 'q')
2107 arm_neon_quad_write (gdbarch, regcache, reg_scaled + i,
90445bd3 2108 val + i * unit_length);
58d6951d
DJ
2109 else
2110 {
2111 sprintf (name_buf, "%c%d", reg_char, reg_scaled + i);
2112 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
2113 strlen (name_buf));
2114 regcache_cooked_write (regcache, regnum,
2115 val + i * unit_length);
2116 }
90445bd3
DJ
2117 }
2118 continue;
2119 }
2120 else
2121 {
2122 /* This CPRC could not go in VFP registers, so all VFP
2123 registers are now marked as used. */
2124 vfp_regs_free = 0;
2125 }
2126 }
2127
2af48f68
PB
2128 /* Push stack padding for dowubleword alignment. */
2129 if (nstack & (align - 1))
2130 {
2131 si = push_stack_item (si, val, INT_REGISTER_SIZE);
2132 nstack += INT_REGISTER_SIZE;
2133 }
2134
2135 /* Doubleword aligned quantities must go in even register pairs. */
90445bd3
DJ
2136 if (may_use_core_reg
2137 && argreg <= ARM_LAST_ARG_REGNUM
2af48f68
PB
2138 && align > INT_REGISTER_SIZE
2139 && argreg & 1)
2140 argreg++;
2141
2dd604e7
RE
2142 /* If the argument is a pointer to a function, and it is a
2143 Thumb function, create a LOCAL copy of the value and set
2144 the THUMB bit in it. */
2145 if (TYPE_CODE_PTR == typecode
2146 && target_type != NULL
2147 && TYPE_CODE_FUNC == TYPE_CODE (target_type))
2148 {
e17a4113 2149 CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
2dd604e7
RE
2150 if (arm_pc_is_thumb (regval))
2151 {
2152 val = alloca (len);
e17a4113
UW
2153 store_unsigned_integer (val, len, byte_order,
2154 MAKE_THUMB_ADDR (regval));
2dd604e7
RE
2155 }
2156 }
2157
2158 /* Copy the argument to general registers or the stack in
2159 register-sized pieces. Large arguments are split between
2160 registers and stack. */
2161 while (len > 0)
2162 {
f0c9063c 2163 int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
2dd604e7 2164
90445bd3 2165 if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
2dd604e7
RE
2166 {
2167 /* The argument is being passed in a general purpose
2168 register. */
e17a4113
UW
2169 CORE_ADDR regval
2170 = extract_unsigned_integer (val, partial_len, byte_order);
2171 if (byte_order == BFD_ENDIAN_BIG)
8bf8793c 2172 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
2dd604e7
RE
2173 if (arm_debug)
2174 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
c9f4d572
UW
2175 argnum,
2176 gdbarch_register_name
2af46ca0 2177 (gdbarch, argreg),
f0c9063c 2178 phex (regval, INT_REGISTER_SIZE));
2dd604e7
RE
2179 regcache_cooked_write_unsigned (regcache, argreg, regval);
2180 argreg++;
2181 }
2182 else
2183 {
2184 /* Push the arguments onto the stack. */
2185 if (arm_debug)
2186 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
2187 argnum, nstack);
f0c9063c
UW
2188 si = push_stack_item (si, val, INT_REGISTER_SIZE);
2189 nstack += INT_REGISTER_SIZE;
2dd604e7
RE
2190 }
2191
2192 len -= partial_len;
2193 val += partial_len;
2194 }
2195 }
2196 /* If we have an odd number of words to push, then decrement the stack
2197 by one word now, so first stack argument will be dword aligned. */
2198 if (nstack & 4)
2199 sp -= 4;
2200
2201 while (si)
2202 {
2203 sp -= si->len;
2204 write_memory (sp, si->data, si->len);
2205 si = pop_stack_item (si);
2206 }
2207
2208 /* Finally, update teh SP register. */
2209 regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
2210
2211 return sp;
2212}
2213
f53f0d0b
PB
2214
2215/* Always align the frame to an 8-byte boundary. This is required on
2216 some platforms and harmless on the rest. */
2217
2218static CORE_ADDR
2219arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
2220{
2221 /* Align the stack to eight bytes. */
2222 return sp & ~ (CORE_ADDR) 7;
2223}
2224
c906108c 2225static void
ed9a39eb 2226print_fpu_flags (int flags)
c906108c 2227{
c5aa993b
JM
2228 if (flags & (1 << 0))
2229 fputs ("IVO ", stdout);
2230 if (flags & (1 << 1))
2231 fputs ("DVZ ", stdout);
2232 if (flags & (1 << 2))
2233 fputs ("OFL ", stdout);
2234 if (flags & (1 << 3))
2235 fputs ("UFL ", stdout);
2236 if (flags & (1 << 4))
2237 fputs ("INX ", stdout);
2238 putchar ('\n');
c906108c
SS
2239}
2240
5e74b15c
RE
2241/* Print interesting information about the floating point processor
2242 (if present) or emulator. */
34e8f22d 2243static void
d855c300 2244arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
23e3a7ac 2245 struct frame_info *frame, const char *args)
c906108c 2246{
9c9acae0 2247 unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
c5aa993b
JM
2248 int type;
2249
2250 type = (status >> 24) & 127;
edefbb7c
AC
2251 if (status & (1 << 31))
2252 printf (_("Hardware FPU type %d\n"), type);
2253 else
2254 printf (_("Software FPU type %d\n"), type);
2255 /* i18n: [floating point unit] mask */
2256 fputs (_("mask: "), stdout);
c5aa993b 2257 print_fpu_flags (status >> 16);
edefbb7c
AC
2258 /* i18n: [floating point unit] flags */
2259 fputs (_("flags: "), stdout);
c5aa993b 2260 print_fpu_flags (status);
c906108c
SS
2261}
2262
27067745
UW
2263/* Construct the ARM extended floating point type. */
2264static struct type *
2265arm_ext_type (struct gdbarch *gdbarch)
2266{
2267 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2268
2269 if (!tdep->arm_ext_type)
2270 tdep->arm_ext_type
e9bb382b 2271 = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
27067745
UW
2272 floatformats_arm_ext);
2273
2274 return tdep->arm_ext_type;
2275}
2276
58d6951d
DJ
2277static struct type *
2278arm_neon_double_type (struct gdbarch *gdbarch)
2279{
2280 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2281
2282 if (tdep->neon_double_type == NULL)
2283 {
2284 struct type *t, *elem;
2285
2286 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
2287 TYPE_CODE_UNION);
2288 elem = builtin_type (gdbarch)->builtin_uint8;
2289 append_composite_type_field (t, "u8", init_vector_type (elem, 8));
2290 elem = builtin_type (gdbarch)->builtin_uint16;
2291 append_composite_type_field (t, "u16", init_vector_type (elem, 4));
2292 elem = builtin_type (gdbarch)->builtin_uint32;
2293 append_composite_type_field (t, "u32", init_vector_type (elem, 2));
2294 elem = builtin_type (gdbarch)->builtin_uint64;
2295 append_composite_type_field (t, "u64", elem);
2296 elem = builtin_type (gdbarch)->builtin_float;
2297 append_composite_type_field (t, "f32", init_vector_type (elem, 2));
2298 elem = builtin_type (gdbarch)->builtin_double;
2299 append_composite_type_field (t, "f64", elem);
2300
2301 TYPE_VECTOR (t) = 1;
2302 TYPE_NAME (t) = "neon_d";
2303 tdep->neon_double_type = t;
2304 }
2305
2306 return tdep->neon_double_type;
2307}
2308
2309/* FIXME: The vector types are not correctly ordered on big-endian
2310 targets. Just as s0 is the low bits of d0, d0[0] is also the low
2311 bits of d0 - regardless of what unit size is being held in d0. So
2312 the offset of the first uint8 in d0 is 7, but the offset of the
2313 first float is 4. This code works as-is for little-endian
2314 targets. */
2315
2316static struct type *
2317arm_neon_quad_type (struct gdbarch *gdbarch)
2318{
2319 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2320
2321 if (tdep->neon_quad_type == NULL)
2322 {
2323 struct type *t, *elem;
2324
2325 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
2326 TYPE_CODE_UNION);
2327 elem = builtin_type (gdbarch)->builtin_uint8;
2328 append_composite_type_field (t, "u8", init_vector_type (elem, 16));
2329 elem = builtin_type (gdbarch)->builtin_uint16;
2330 append_composite_type_field (t, "u16", init_vector_type (elem, 8));
2331 elem = builtin_type (gdbarch)->builtin_uint32;
2332 append_composite_type_field (t, "u32", init_vector_type (elem, 4));
2333 elem = builtin_type (gdbarch)->builtin_uint64;
2334 append_composite_type_field (t, "u64", init_vector_type (elem, 2));
2335 elem = builtin_type (gdbarch)->builtin_float;
2336 append_composite_type_field (t, "f32", init_vector_type (elem, 4));
2337 elem = builtin_type (gdbarch)->builtin_double;
2338 append_composite_type_field (t, "f64", init_vector_type (elem, 2));
2339
2340 TYPE_VECTOR (t) = 1;
2341 TYPE_NAME (t) = "neon_q";
2342 tdep->neon_quad_type = t;
2343 }
2344
2345 return tdep->neon_quad_type;
2346}
2347
34e8f22d
RE
2348/* Return the GDB type object for the "standard" data type of data in
2349 register N. */
2350
2351static struct type *
7a5ea0d4 2352arm_register_type (struct gdbarch *gdbarch, int regnum)
032758dc 2353{
58d6951d
DJ
2354 int num_regs = gdbarch_num_regs (gdbarch);
2355
2356 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
2357 && regnum >= num_regs && regnum < num_regs + 32)
2358 return builtin_type (gdbarch)->builtin_float;
2359
2360 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
2361 && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
2362 return arm_neon_quad_type (gdbarch);
2363
2364 /* If the target description has register information, we are only
2365 in this function so that we can override the types of
2366 double-precision registers for NEON. */
2367 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
2368 {
2369 struct type *t = tdesc_register_type (gdbarch, regnum);
2370
2371 if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
2372 && TYPE_CODE (t) == TYPE_CODE_FLT
2373 && gdbarch_tdep (gdbarch)->have_neon)
2374 return arm_neon_double_type (gdbarch);
2375 else
2376 return t;
2377 }
2378
34e8f22d 2379 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
58d6951d
DJ
2380 {
2381 if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
2382 return builtin_type (gdbarch)->builtin_void;
2383
2384 return arm_ext_type (gdbarch);
2385 }
e4c16157 2386 else if (regnum == ARM_SP_REGNUM)
0dfff4cb 2387 return builtin_type (gdbarch)->builtin_data_ptr;
e4c16157 2388 else if (regnum == ARM_PC_REGNUM)
0dfff4cb 2389 return builtin_type (gdbarch)->builtin_func_ptr;
ff6f572f
DJ
2390 else if (regnum >= ARRAY_SIZE (arm_register_names))
2391 /* These registers are only supported on targets which supply
2392 an XML description. */
df4df182 2393 return builtin_type (gdbarch)->builtin_int0;
032758dc 2394 else
df4df182 2395 return builtin_type (gdbarch)->builtin_uint32;
032758dc
AC
2396}
2397
ff6f572f
DJ
2398/* Map a DWARF register REGNUM onto the appropriate GDB register
2399 number. */
2400
2401static int
d3f73121 2402arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
ff6f572f
DJ
2403{
2404 /* Core integer regs. */
2405 if (reg >= 0 && reg <= 15)
2406 return reg;
2407
2408 /* Legacy FPA encoding. These were once used in a way which
2409 overlapped with VFP register numbering, so their use is
2410 discouraged, but GDB doesn't support the ARM toolchain
2411 which used them for VFP. */
2412 if (reg >= 16 && reg <= 23)
2413 return ARM_F0_REGNUM + reg - 16;
2414
2415 /* New assignments for the FPA registers. */
2416 if (reg >= 96 && reg <= 103)
2417 return ARM_F0_REGNUM + reg - 96;
2418
2419 /* WMMX register assignments. */
2420 if (reg >= 104 && reg <= 111)
2421 return ARM_WCGR0_REGNUM + reg - 104;
2422
2423 if (reg >= 112 && reg <= 127)
2424 return ARM_WR0_REGNUM + reg - 112;
2425
2426 if (reg >= 192 && reg <= 199)
2427 return ARM_WC0_REGNUM + reg - 192;
2428
58d6951d
DJ
2429 /* VFP v2 registers. A double precision value is actually
2430 in d1 rather than s2, but the ABI only defines numbering
2431 for the single precision registers. This will "just work"
2432 in GDB for little endian targets (we'll read eight bytes,
2433 starting in s0 and then progressing to s1), but will be
2434 reversed on big endian targets with VFP. This won't
2435 be a problem for the new Neon quad registers; you're supposed
2436 to use DW_OP_piece for those. */
2437 if (reg >= 64 && reg <= 95)
2438 {
2439 char name_buf[4];
2440
2441 sprintf (name_buf, "s%d", reg - 64);
2442 return user_reg_map_name_to_regnum (gdbarch, name_buf,
2443 strlen (name_buf));
2444 }
2445
2446 /* VFP v3 / Neon registers. This range is also used for VFP v2
2447 registers, except that it now describes d0 instead of s0. */
2448 if (reg >= 256 && reg <= 287)
2449 {
2450 char name_buf[4];
2451
2452 sprintf (name_buf, "d%d", reg - 256);
2453 return user_reg_map_name_to_regnum (gdbarch, name_buf,
2454 strlen (name_buf));
2455 }
2456
ff6f572f
DJ
2457 return -1;
2458}
2459
26216b98
AC
2460/* Map GDB internal REGNUM onto the Arm simulator register numbers. */
2461static int
e7faf938 2462arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
26216b98
AC
2463{
2464 int reg = regnum;
e7faf938 2465 gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
26216b98 2466
ff6f572f
DJ
2467 if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
2468 return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
2469
2470 if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
2471 return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
2472
2473 if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
2474 return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
2475
26216b98
AC
2476 if (reg < NUM_GREGS)
2477 return SIM_ARM_R0_REGNUM + reg;
2478 reg -= NUM_GREGS;
2479
2480 if (reg < NUM_FREGS)
2481 return SIM_ARM_FP0_REGNUM + reg;
2482 reg -= NUM_FREGS;
2483
2484 if (reg < NUM_SREGS)
2485 return SIM_ARM_FPS_REGNUM + reg;
2486 reg -= NUM_SREGS;
2487
edefbb7c 2488 internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
26216b98 2489}
34e8f22d 2490
a37b3cc0
AC
2491/* NOTE: cagney/2001-08-20: Both convert_from_extended() and
2492 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
2493 It is thought that this is is the floating-point register format on
2494 little-endian systems. */
c906108c 2495
ed9a39eb 2496static void
b508a996 2497convert_from_extended (const struct floatformat *fmt, const void *ptr,
be8626e0 2498 void *dbl, int endianess)
c906108c 2499{
a37b3cc0 2500 DOUBLEST d;
be8626e0
MD
2501
2502 if (endianess == BFD_ENDIAN_BIG)
a37b3cc0
AC
2503 floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
2504 else
2505 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
2506 ptr, &d);
b508a996 2507 floatformat_from_doublest (fmt, &d, dbl);
c906108c
SS
2508}
2509
34e8f22d 2510static void
be8626e0
MD
2511convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr,
2512 int endianess)
c906108c 2513{
a37b3cc0 2514 DOUBLEST d;
be8626e0 2515
b508a996 2516 floatformat_to_doublest (fmt, ptr, &d);
be8626e0 2517 if (endianess == BFD_ENDIAN_BIG)
a37b3cc0
AC
2518 floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
2519 else
2520 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
2521 &d, dbl);
c906108c 2522}
ed9a39eb 2523
c906108c 2524static int
ed9a39eb 2525condition_true (unsigned long cond, unsigned long status_reg)
c906108c
SS
2526{
2527 if (cond == INST_AL || cond == INST_NV)
2528 return 1;
2529
2530 switch (cond)
2531 {
2532 case INST_EQ:
2533 return ((status_reg & FLAG_Z) != 0);
2534 case INST_NE:
2535 return ((status_reg & FLAG_Z) == 0);
2536 case INST_CS:
2537 return ((status_reg & FLAG_C) != 0);
2538 case INST_CC:
2539 return ((status_reg & FLAG_C) == 0);
2540 case INST_MI:
2541 return ((status_reg & FLAG_N) != 0);
2542 case INST_PL:
2543 return ((status_reg & FLAG_N) == 0);
2544 case INST_VS:
2545 return ((status_reg & FLAG_V) != 0);
2546 case INST_VC:
2547 return ((status_reg & FLAG_V) == 0);
2548 case INST_HI:
2549 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
2550 case INST_LS:
2551 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
2552 case INST_GE:
2553 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
2554 case INST_LT:
2555 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
2556 case INST_GT:
f8bf5763
PM
2557 return (((status_reg & FLAG_Z) == 0)
2558 && (((status_reg & FLAG_N) == 0)
2559 == ((status_reg & FLAG_V) == 0)));
c906108c 2560 case INST_LE:
f8bf5763
PM
2561 return (((status_reg & FLAG_Z) != 0)
2562 || (((status_reg & FLAG_N) == 0)
2563 != ((status_reg & FLAG_V) == 0)));
c906108c
SS
2564 }
2565 return 1;
2566}
2567
c906108c 2568static unsigned long
0b1b3e42
UW
2569shifted_reg_val (struct frame_info *frame, unsigned long inst, int carry,
2570 unsigned long pc_val, unsigned long status_reg)
c906108c
SS
2571{
2572 unsigned long res, shift;
2573 int rm = bits (inst, 0, 3);
2574 unsigned long shifttype = bits (inst, 5, 6);
c5aa993b
JM
2575
2576 if (bit (inst, 4))
c906108c
SS
2577 {
2578 int rs = bits (inst, 8, 11);
0b1b3e42
UW
2579 shift = (rs == 15 ? pc_val + 8
2580 : get_frame_register_unsigned (frame, rs)) & 0xFF;
c906108c
SS
2581 }
2582 else
2583 shift = bits (inst, 7, 11);
c5aa993b
JM
2584
2585 res = (rm == 15
0d39a070 2586 ? (pc_val + (bit (inst, 4) ? 12 : 8))
0b1b3e42 2587 : get_frame_register_unsigned (frame, rm));
c906108c
SS
2588
2589 switch (shifttype)
2590 {
c5aa993b 2591 case 0: /* LSL */
c906108c
SS
2592 res = shift >= 32 ? 0 : res << shift;
2593 break;
c5aa993b
JM
2594
2595 case 1: /* LSR */
c906108c
SS
2596 res = shift >= 32 ? 0 : res >> shift;
2597 break;
2598
c5aa993b
JM
2599 case 2: /* ASR */
2600 if (shift >= 32)
2601 shift = 31;
c906108c
SS
2602 res = ((res & 0x80000000L)
2603 ? ~((~res) >> shift) : res >> shift);
2604 break;
2605
c5aa993b 2606 case 3: /* ROR/RRX */
c906108c
SS
2607 shift &= 31;
2608 if (shift == 0)
2609 res = (res >> 1) | (carry ? 0x80000000L : 0);
2610 else
c5aa993b 2611 res = (res >> shift) | (res << (32 - shift));
c906108c
SS
2612 break;
2613 }
2614
2615 return res & 0xffffffff;
2616}
2617
c906108c
SS
2618/* Return number of 1-bits in VAL. */
2619
2620static int
ed9a39eb 2621bitcount (unsigned long val)
c906108c
SS
2622{
2623 int nbits;
2624 for (nbits = 0; val != 0; nbits++)
c5aa993b 2625 val &= val - 1; /* delete rightmost 1-bit in val */
c906108c
SS
2626 return nbits;
2627}
2628
177321bd
DJ
2629/* Return the size in bytes of the complete Thumb instruction whose
2630 first halfword is INST1. */
2631
2632static int
2633thumb_insn_size (unsigned short inst1)
2634{
2635 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
2636 return 4;
2637 else
2638 return 2;
2639}
2640
2641static int
2642thumb_advance_itstate (unsigned int itstate)
2643{
2644 /* Preserve IT[7:5], the first three bits of the condition. Shift
2645 the upcoming condition flags left by one bit. */
2646 itstate = (itstate & 0xe0) | ((itstate << 1) & 0x1f);
2647
2648 /* If we have finished the IT block, clear the state. */
2649 if ((itstate & 0x0f) == 0)
2650 itstate = 0;
2651
2652 return itstate;
2653}
2654
2655/* Find the next PC after the current instruction executes. In some
2656 cases we can not statically determine the answer (see the IT state
2657 handling in this function); in that case, a breakpoint may be
2658 inserted in addition to the returned PC, which will be used to set
2659 another breakpoint by our caller. */
2660
ad527d2e 2661static CORE_ADDR
50e98be4 2662thumb_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc, int insert_bkpt)
c906108c 2663{
2af46ca0 2664 struct gdbarch *gdbarch = get_frame_arch (frame);
177321bd 2665 struct address_space *aspace = get_frame_address_space (frame);
e17a4113
UW
2666 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2667 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
c5aa993b 2668 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
e17a4113 2669 unsigned short inst1;
94c30b78 2670 CORE_ADDR nextpc = pc + 2; /* default is next instruction */
c906108c 2671 unsigned long offset;
177321bd 2672 ULONGEST status, itstate;
c906108c 2673
50e98be4
DJ
2674 nextpc = MAKE_THUMB_ADDR (nextpc);
2675 pc_val = MAKE_THUMB_ADDR (pc_val);
2676
e17a4113 2677 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
9d4fde75 2678
9dca5578
DJ
2679 /* Thumb-2 conditional execution support. There are eight bits in
2680 the CPSR which describe conditional execution state. Once
2681 reconstructed (they're in a funny order), the low five bits
2682 describe the low bit of the condition for each instruction and
2683 how many instructions remain. The high three bits describe the
2684 base condition. One of the low four bits will be set if an IT
2685 block is active. These bits read as zero on earlier
2686 processors. */
2687 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
177321bd 2688 itstate = ((status >> 8) & 0xfc) | ((status >> 25) & 0x3);
9dca5578 2689
177321bd
DJ
2690 /* If-Then handling. On GNU/Linux, where this routine is used, we
2691 use an undefined instruction as a breakpoint. Unlike BKPT, IT
2692 can disable execution of the undefined instruction. So we might
2693 miss the breakpoint if we set it on a skipped conditional
2694 instruction. Because conditional instructions can change the
2695 flags, affecting the execution of further instructions, we may
2696 need to set two breakpoints. */
9dca5578 2697
177321bd
DJ
2698 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint != NULL)
2699 {
2700 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
2701 {
2702 /* An IT instruction. Because this instruction does not
2703 modify the flags, we can accurately predict the next
2704 executed instruction. */
2705 itstate = inst1 & 0x00ff;
2706 pc += thumb_insn_size (inst1);
2707
2708 while (itstate != 0 && ! condition_true (itstate >> 4, status))
2709 {
2710 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2711 pc += thumb_insn_size (inst1);
2712 itstate = thumb_advance_itstate (itstate);
2713 }
2714
50e98be4 2715 return MAKE_THUMB_ADDR (pc);
177321bd
DJ
2716 }
2717 else if (itstate != 0)
2718 {
2719 /* We are in a conditional block. Check the condition. */
2720 if (! condition_true (itstate >> 4, status))
2721 {
2722 /* Advance to the next executed instruction. */
2723 pc += thumb_insn_size (inst1);
2724 itstate = thumb_advance_itstate (itstate);
2725
2726 while (itstate != 0 && ! condition_true (itstate >> 4, status))
2727 {
2728 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2729 pc += thumb_insn_size (inst1);
2730 itstate = thumb_advance_itstate (itstate);
2731 }
2732
50e98be4 2733 return MAKE_THUMB_ADDR (pc);
177321bd
DJ
2734 }
2735 else if ((itstate & 0x0f) == 0x08)
2736 {
2737 /* This is the last instruction of the conditional
2738 block, and it is executed. We can handle it normally
2739 because the following instruction is not conditional,
2740 and we must handle it normally because it is
2741 permitted to branch. Fall through. */
2742 }
2743 else
2744 {
2745 int cond_negated;
2746
2747 /* There are conditional instructions after this one.
2748 If this instruction modifies the flags, then we can
2749 not predict what the next executed instruction will
2750 be. Fortunately, this instruction is architecturally
2751 forbidden to branch; we know it will fall through.
2752 Start by skipping past it. */
2753 pc += thumb_insn_size (inst1);
2754 itstate = thumb_advance_itstate (itstate);
2755
2756 /* Set a breakpoint on the following instruction. */
2757 gdb_assert ((itstate & 0x0f) != 0);
50e98be4
DJ
2758 if (insert_bkpt)
2759 insert_single_step_breakpoint (gdbarch, aspace, pc);
177321bd
DJ
2760 cond_negated = (itstate >> 4) & 1;
2761
2762 /* Skip all following instructions with the same
2763 condition. If there is a later instruction in the IT
2764 block with the opposite condition, set the other
2765 breakpoint there. If not, then set a breakpoint on
2766 the instruction after the IT block. */
2767 do
2768 {
2769 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2770 pc += thumb_insn_size (inst1);
2771 itstate = thumb_advance_itstate (itstate);
2772 }
2773 while (itstate != 0 && ((itstate >> 4) & 1) == cond_negated);
2774
50e98be4 2775 return MAKE_THUMB_ADDR (pc);
177321bd
DJ
2776 }
2777 }
2778 }
2779 else if (itstate & 0x0f)
9dca5578
DJ
2780 {
2781 /* We are in a conditional block. Check the condition. */
177321bd 2782 int cond = itstate >> 4;
9dca5578
DJ
2783
2784 if (! condition_true (cond, status))
2785 {
2786 /* Advance to the next instruction. All the 32-bit
2787 instructions share a common prefix. */
2788 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
50e98be4 2789 return MAKE_THUMB_ADDR (pc + 4);
9dca5578 2790 else
50e98be4 2791 return MAKE_THUMB_ADDR (pc + 2);
9dca5578 2792 }
177321bd
DJ
2793
2794 /* Otherwise, handle the instruction normally. */
9dca5578
DJ
2795 }
2796
c906108c
SS
2797 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
2798 {
2799 CORE_ADDR sp;
2800
2801 /* Fetch the saved PC from the stack. It's stored above
2802 all of the other registers. */
f0c9063c 2803 offset = bitcount (bits (inst1, 0, 7)) * INT_REGISTER_SIZE;
0b1b3e42 2804 sp = get_frame_register_unsigned (frame, ARM_SP_REGNUM);
e17a4113 2805 nextpc = read_memory_unsigned_integer (sp + offset, 4, byte_order);
c906108c
SS
2806 }
2807 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
2808 {
c5aa993b 2809 unsigned long cond = bits (inst1, 8, 11);
94c30b78 2810 if (cond != 0x0f && condition_true (cond, status)) /* 0x0f = SWI */
c906108c
SS
2811 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
2812 }
2813 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
2814 {
2815 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
2816 }
9dca5578 2817 else if ((inst1 & 0xe000) == 0xe000) /* 32-bit instruction */
c906108c 2818 {
e17a4113
UW
2819 unsigned short inst2;
2820 inst2 = read_memory_unsigned_integer (pc + 2, 2, byte_order_for_code);
9dca5578
DJ
2821
2822 /* Default to the next instruction. */
2823 nextpc = pc + 4;
50e98be4 2824 nextpc = MAKE_THUMB_ADDR (nextpc);
9dca5578
DJ
2825
2826 if ((inst1 & 0xf800) == 0xf000 && (inst2 & 0x8000) == 0x8000)
2827 {
2828 /* Branches and miscellaneous control instructions. */
2829
2830 if ((inst2 & 0x1000) != 0 || (inst2 & 0xd001) == 0xc000)
2831 {
2832 /* B, BL, BLX. */
2833 int j1, j2, imm1, imm2;
2834
2835 imm1 = sbits (inst1, 0, 10);
2836 imm2 = bits (inst2, 0, 10);
2837 j1 = bit (inst2, 13);
2838 j2 = bit (inst2, 11);
2839
2840 offset = ((imm1 << 12) + (imm2 << 1));
2841 offset ^= ((!j2) << 22) | ((!j1) << 23);
2842
2843 nextpc = pc_val + offset;
2844 /* For BLX make sure to clear the low bits. */
2845 if (bit (inst2, 12) == 0)
2846 nextpc = nextpc & 0xfffffffc;
2847 }
2848 else if (inst1 == 0xf3de && (inst2 & 0xff00) == 0x3f00)
2849 {
2850 /* SUBS PC, LR, #imm8. */
2851 nextpc = get_frame_register_unsigned (frame, ARM_LR_REGNUM);
2852 nextpc -= inst2 & 0x00ff;
2853 }
4069ebbe 2854 else if ((inst2 & 0xd000) == 0x8000 && (inst1 & 0x0380) != 0x0380)
9dca5578
DJ
2855 {
2856 /* Conditional branch. */
2857 if (condition_true (bits (inst1, 6, 9), status))
2858 {
2859 int sign, j1, j2, imm1, imm2;
2860
2861 sign = sbits (inst1, 10, 10);
2862 imm1 = bits (inst1, 0, 5);
2863 imm2 = bits (inst2, 0, 10);
2864 j1 = bit (inst2, 13);
2865 j2 = bit (inst2, 11);
2866
2867 offset = (sign << 20) + (j2 << 19) + (j1 << 18);
2868 offset += (imm1 << 12) + (imm2 << 1);
2869
2870 nextpc = pc_val + offset;
2871 }
2872 }
2873 }
2874 else if ((inst1 & 0xfe50) == 0xe810)
2875 {
2876 /* Load multiple or RFE. */
2877 int rn, offset, load_pc = 1;
2878
2879 rn = bits (inst1, 0, 3);
2880 if (bit (inst1, 7) && !bit (inst1, 8))
2881 {
2882 /* LDMIA or POP */
2883 if (!bit (inst2, 15))
2884 load_pc = 0;
2885 offset = bitcount (inst2) * 4 - 4;
2886 }
2887 else if (!bit (inst1, 7) && bit (inst1, 8))
2888 {
2889 /* LDMDB */
2890 if (!bit (inst2, 15))
2891 load_pc = 0;
2892 offset = -4;
2893 }
2894 else if (bit (inst1, 7) && bit (inst1, 8))
2895 {
2896 /* RFEIA */
2897 offset = 0;
2898 }
2899 else if (!bit (inst1, 7) && !bit (inst1, 8))
2900 {
2901 /* RFEDB */
2902 offset = -8;
2903 }
2904 else
2905 load_pc = 0;
2906
2907 if (load_pc)
2908 {
2909 CORE_ADDR addr = get_frame_register_unsigned (frame, rn);
2910 nextpc = get_frame_memory_unsigned (frame, addr + offset, 4);
2911 }
2912 }
2913 else if ((inst1 & 0xffef) == 0xea4f && (inst2 & 0xfff0) == 0x0f00)
2914 {
2915 /* MOV PC or MOVS PC. */
2916 nextpc = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
50e98be4 2917 nextpc = MAKE_THUMB_ADDR (nextpc);
9dca5578
DJ
2918 }
2919 else if ((inst1 & 0xff70) == 0xf850 && (inst2 & 0xf000) == 0xf000)
2920 {
2921 /* LDR PC. */
2922 CORE_ADDR base;
2923 int rn, load_pc = 1;
2924
2925 rn = bits (inst1, 0, 3);
2926 base = get_frame_register_unsigned (frame, rn);
2927 if (rn == 15)
2928 {
2929 base = (base + 4) & ~(CORE_ADDR) 0x3;
2930 if (bit (inst1, 7))
2931 base += bits (inst2, 0, 11);
2932 else
2933 base -= bits (inst2, 0, 11);
2934 }
2935 else if (bit (inst1, 7))
2936 base += bits (inst2, 0, 11);
2937 else if (bit (inst2, 11))
2938 {
2939 if (bit (inst2, 10))
2940 {
2941 if (bit (inst2, 9))
2942 base += bits (inst2, 0, 7);
2943 else
2944 base -= bits (inst2, 0, 7);
2945 }
2946 }
2947 else if ((inst2 & 0x0fc0) == 0x0000)
2948 {
2949 int shift = bits (inst2, 4, 5), rm = bits (inst2, 0, 3);
2950 base += get_frame_register_unsigned (frame, rm) << shift;
2951 }
2952 else
2953 /* Reserved. */
2954 load_pc = 0;
2955
2956 if (load_pc)
2957 nextpc = get_frame_memory_unsigned (frame, base, 4);
2958 }
2959 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
2960 {
2961 /* TBB. */
d476da0e
RE
2962 CORE_ADDR tbl_reg, table, offset, length;
2963
2964 tbl_reg = bits (inst1, 0, 3);
2965 if (tbl_reg == 0x0f)
2966 table = pc + 4; /* Regcache copy of PC isn't right yet. */
2967 else
2968 table = get_frame_register_unsigned (frame, tbl_reg);
9dca5578 2969
9dca5578
DJ
2970 offset = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2971 length = 2 * get_frame_memory_unsigned (frame, table + offset, 1);
2972 nextpc = pc_val + length;
2973 }
d476da0e 2974 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf010)
9dca5578
DJ
2975 {
2976 /* TBH. */
d476da0e
RE
2977 CORE_ADDR tbl_reg, table, offset, length;
2978
2979 tbl_reg = bits (inst1, 0, 3);
2980 if (tbl_reg == 0x0f)
2981 table = pc + 4; /* Regcache copy of PC isn't right yet. */
2982 else
2983 table = get_frame_register_unsigned (frame, tbl_reg);
9dca5578 2984
9dca5578
DJ
2985 offset = 2 * get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2986 length = 2 * get_frame_memory_unsigned (frame, table + offset, 2);
2987 nextpc = pc_val + length;
2988 }
c906108c 2989 }
aa17d93e 2990 else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */
9498281f
DJ
2991 {
2992 if (bits (inst1, 3, 6) == 0x0f)
2993 nextpc = pc_val;
2994 else
0b1b3e42 2995 nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
9498281f 2996 }
9dca5578
DJ
2997 else if ((inst1 & 0xf500) == 0xb100)
2998 {
2999 /* CBNZ or CBZ. */
3000 int imm = (bit (inst1, 9) << 6) + (bits (inst1, 3, 7) << 1);
3001 ULONGEST reg = get_frame_register_unsigned (frame, bits (inst1, 0, 2));
3002
3003 if (bit (inst1, 11) && reg != 0)
3004 nextpc = pc_val + imm;
3005 else if (!bit (inst1, 11) && reg == 0)
3006 nextpc = pc_val + imm;
3007 }
c906108c
SS
3008 return nextpc;
3009}
3010
50e98be4
DJ
3011/* Get the raw next address. PC is the current program counter, in
3012 FRAME. INSERT_BKPT should be TRUE if we want a breakpoint set on
3013 the alternative next instruction if there are two options.
3014
3015 The value returned has the execution state of the next instruction
3016 encoded in it. Use IS_THUMB_ADDR () to see whether the instruction is
3017 in Thumb-State, and gdbarch_addr_bits_remove () to get the plain memory
3018 address.
3019*/
3020static CORE_ADDR
3021arm_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc, int insert_bkpt)
c906108c 3022{
2af46ca0 3023 struct gdbarch *gdbarch = get_frame_arch (frame);
e17a4113
UW
3024 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3025 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
c906108c
SS
3026 unsigned long pc_val;
3027 unsigned long this_instr;
3028 unsigned long status;
3029 CORE_ADDR nextpc;
3030
b39cc962 3031 if (arm_frame_is_thumb (frame))
50e98be4 3032 return thumb_get_next_pc_raw (frame, pc, insert_bkpt);
c906108c
SS
3033
3034 pc_val = (unsigned long) pc;
e17a4113 3035 this_instr = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
9d4fde75 3036
0b1b3e42 3037 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
c5aa993b 3038 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
c906108c 3039
daddc3c1
DJ
3040 if (bits (this_instr, 28, 31) == INST_NV)
3041 switch (bits (this_instr, 24, 27))
3042 {
3043 case 0xa:
3044 case 0xb:
3045 {
3046 /* Branch with Link and change to Thumb. */
3047 nextpc = BranchDest (pc, this_instr);
3048 nextpc |= bit (this_instr, 24) << 1;
50e98be4 3049 nextpc = MAKE_THUMB_ADDR (nextpc);
daddc3c1
DJ
3050 break;
3051 }
3052 case 0xc:
3053 case 0xd:
3054 case 0xe:
3055 /* Coprocessor register transfer. */
3056 if (bits (this_instr, 12, 15) == 15)
3057 error (_("Invalid update to pc in instruction"));
3058 break;
3059 }
3060 else if (condition_true (bits (this_instr, 28, 31), status))
c906108c
SS
3061 {
3062 switch (bits (this_instr, 24, 27))
3063 {
c5aa993b 3064 case 0x0:
94c30b78 3065 case 0x1: /* data processing */
c5aa993b
JM
3066 case 0x2:
3067 case 0x3:
c906108c
SS
3068 {
3069 unsigned long operand1, operand2, result = 0;
3070 unsigned long rn;
3071 int c;
c5aa993b 3072
c906108c
SS
3073 if (bits (this_instr, 12, 15) != 15)
3074 break;
3075
3076 if (bits (this_instr, 22, 25) == 0
c5aa993b 3077 && bits (this_instr, 4, 7) == 9) /* multiply */
edefbb7c 3078 error (_("Invalid update to pc in instruction"));
c906108c 3079
9498281f 3080 /* BX <reg>, BLX <reg> */
e150acc7
PB
3081 if (bits (this_instr, 4, 27) == 0x12fff1
3082 || bits (this_instr, 4, 27) == 0x12fff3)
9498281f
DJ
3083 {
3084 rn = bits (this_instr, 0, 3);
50e98be4 3085 nextpc = (rn == 15) ? pc_val + 8
0b1b3e42 3086 : get_frame_register_unsigned (frame, rn);
9498281f
DJ
3087 return nextpc;
3088 }
3089
c906108c
SS
3090 /* Multiply into PC */
3091 c = (status & FLAG_C) ? 1 : 0;
3092 rn = bits (this_instr, 16, 19);
0b1b3e42
UW
3093 operand1 = (rn == 15) ? pc_val + 8
3094 : get_frame_register_unsigned (frame, rn);
c5aa993b 3095
c906108c
SS
3096 if (bit (this_instr, 25))
3097 {
3098 unsigned long immval = bits (this_instr, 0, 7);
3099 unsigned long rotate = 2 * bits (this_instr, 8, 11);
c5aa993b
JM
3100 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
3101 & 0xffffffff;
c906108c 3102 }
c5aa993b 3103 else /* operand 2 is a shifted register */
0b1b3e42 3104 operand2 = shifted_reg_val (frame, this_instr, c, pc_val, status);
c5aa993b 3105
c906108c
SS
3106 switch (bits (this_instr, 21, 24))
3107 {
c5aa993b 3108 case 0x0: /*and */
c906108c
SS
3109 result = operand1 & operand2;
3110 break;
3111
c5aa993b 3112 case 0x1: /*eor */
c906108c
SS
3113 result = operand1 ^ operand2;
3114 break;
3115
c5aa993b 3116 case 0x2: /*sub */
c906108c
SS
3117 result = operand1 - operand2;
3118 break;
3119
c5aa993b 3120 case 0x3: /*rsb */
c906108c
SS
3121 result = operand2 - operand1;
3122 break;
3123
c5aa993b 3124 case 0x4: /*add */
c906108c
SS
3125 result = operand1 + operand2;
3126 break;
3127
c5aa993b 3128 case 0x5: /*adc */
c906108c
SS
3129 result = operand1 + operand2 + c;
3130 break;
3131
c5aa993b 3132 case 0x6: /*sbc */
c906108c
SS
3133 result = operand1 - operand2 + c;
3134 break;
3135
c5aa993b 3136 case 0x7: /*rsc */
c906108c
SS
3137 result = operand2 - operand1 + c;
3138 break;
3139
c5aa993b
JM
3140 case 0x8:
3141 case 0x9:
3142 case 0xa:
3143 case 0xb: /* tst, teq, cmp, cmn */
c906108c
SS
3144 result = (unsigned long) nextpc;
3145 break;
3146
c5aa993b 3147 case 0xc: /*orr */
c906108c
SS
3148 result = operand1 | operand2;
3149 break;
3150
c5aa993b 3151 case 0xd: /*mov */
c906108c
SS
3152 /* Always step into a function. */
3153 result = operand2;
c5aa993b 3154 break;
c906108c 3155
c5aa993b 3156 case 0xe: /*bic */
c906108c
SS
3157 result = operand1 & ~operand2;
3158 break;
3159
c5aa993b 3160 case 0xf: /*mvn */
c906108c
SS
3161 result = ~operand2;
3162 break;
3163 }
c906108c 3164
50e98be4
DJ
3165 /* In 26-bit APCS the bottom two bits of the result are
3166 ignored, and we always end up in ARM state. */
3167 if (!arm_apcs_32)
3168 nextpc = arm_addr_bits_remove (gdbarch, result);
3169 else
3170 nextpc = result;
3171
c906108c
SS
3172 break;
3173 }
c5aa993b
JM
3174
3175 case 0x4:
3176 case 0x5: /* data transfer */
3177 case 0x6:
3178 case 0x7:
c906108c
SS
3179 if (bit (this_instr, 20))
3180 {
3181 /* load */
3182 if (bits (this_instr, 12, 15) == 15)
3183 {
3184 /* rd == pc */
c5aa993b 3185 unsigned long rn;
c906108c 3186 unsigned long base;
c5aa993b 3187
c906108c 3188 if (bit (this_instr, 22))
edefbb7c 3189 error (_("Invalid update to pc in instruction"));
c906108c
SS
3190
3191 /* byte write to PC */
3192 rn = bits (this_instr, 16, 19);
0b1b3e42
UW
3193 base = (rn == 15) ? pc_val + 8
3194 : get_frame_register_unsigned (frame, rn);
c906108c
SS
3195 if (bit (this_instr, 24))
3196 {
3197 /* pre-indexed */
3198 int c = (status & FLAG_C) ? 1 : 0;
3199 unsigned long offset =
c5aa993b 3200 (bit (this_instr, 25)
0b1b3e42 3201 ? shifted_reg_val (frame, this_instr, c, pc_val, status)
c5aa993b 3202 : bits (this_instr, 0, 11));
c906108c
SS
3203
3204 if (bit (this_instr, 23))
3205 base += offset;
3206 else
3207 base -= offset;
3208 }
c5aa993b 3209 nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
e17a4113 3210 4, byte_order);
c906108c
SS
3211 }
3212 }
3213 break;
c5aa993b
JM
3214
3215 case 0x8:
3216 case 0x9: /* block transfer */
c906108c
SS
3217 if (bit (this_instr, 20))
3218 {
3219 /* LDM */
3220 if (bit (this_instr, 15))
3221 {
3222 /* loading pc */
3223 int offset = 0;
3224
3225 if (bit (this_instr, 23))
3226 {
3227 /* up */
3228 unsigned long reglist = bits (this_instr, 0, 14);
3229 offset = bitcount (reglist) * 4;
c5aa993b 3230 if (bit (this_instr, 24)) /* pre */
c906108c
SS
3231 offset += 4;
3232 }
3233 else if (bit (this_instr, 24))
3234 offset = -4;
c5aa993b 3235
c906108c 3236 {
c5aa993b 3237 unsigned long rn_val =
0b1b3e42
UW
3238 get_frame_register_unsigned (frame,
3239 bits (this_instr, 16, 19));
c906108c
SS
3240 nextpc =
3241 (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
c5aa993b 3242 + offset),
e17a4113 3243 4, byte_order);
c906108c 3244 }
c906108c
SS
3245 }
3246 }
3247 break;
c5aa993b
JM
3248
3249 case 0xb: /* branch & link */
3250 case 0xa: /* branch */
c906108c
SS
3251 {
3252 nextpc = BranchDest (pc, this_instr);
c906108c
SS
3253 break;
3254 }
c5aa993b
JM
3255
3256 case 0xc:
3257 case 0xd:
3258 case 0xe: /* coproc ops */
3259 case 0xf: /* SWI */
c906108c
SS
3260 break;
3261
3262 default:
edefbb7c 3263 fprintf_filtered (gdb_stderr, _("Bad bit-field extraction\n"));
c906108c
SS
3264 return (pc);
3265 }
3266 }
3267
3268 return nextpc;
3269}
3270
50e98be4
DJ
3271CORE_ADDR
3272arm_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
3273{
3274 struct gdbarch *gdbarch = get_frame_arch (frame);
3275 CORE_ADDR nextpc =
3276 gdbarch_addr_bits_remove (gdbarch,
3277 arm_get_next_pc_raw (frame, pc, TRUE));
3278 if (nextpc == pc)
3279 error (_("Infinite loop detected"));
3280 return nextpc;
3281}
3282
9512d7fd
FN
3283/* single_step() is called just before we want to resume the inferior,
3284 if we want to single-step it but there is no hardware or kernel
3285 single-step support. We find the target of the coming instruction
e0cd558a 3286 and breakpoint it. */
9512d7fd 3287
190dce09 3288int
0b1b3e42 3289arm_software_single_step (struct frame_info *frame)
9512d7fd 3290{
a6d9a66e 3291 struct gdbarch *gdbarch = get_frame_arch (frame);
6c95b8df 3292 struct address_space *aspace = get_frame_address_space (frame);
a6d9a66e 3293
8181d85f
DJ
3294 /* NOTE: This may insert the wrong breakpoint instruction when
3295 single-stepping over a mode-changing instruction, if the
3296 CPSR heuristics are used. */
9512d7fd 3297
0b1b3e42 3298 CORE_ADDR next_pc = arm_get_next_pc (frame, get_frame_pc (frame));
6c95b8df 3299 insert_single_step_breakpoint (gdbarch, aspace, next_pc);
e6590a1b
UW
3300
3301 return 1;
9512d7fd 3302}
9512d7fd 3303
f9d67f43
DJ
3304/* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
3305 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
3306 NULL if an error occurs. BUF is freed. */
3307
3308static gdb_byte *
3309extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
3310 int old_len, int new_len)
3311{
3312 gdb_byte *new_buf, *middle;
3313 int bytes_to_read = new_len - old_len;
3314
3315 new_buf = xmalloc (new_len);
3316 memcpy (new_buf + bytes_to_read, buf, old_len);
3317 xfree (buf);
3318 if (target_read_memory (endaddr - new_len, new_buf, bytes_to_read) != 0)
3319 {
3320 xfree (new_buf);
3321 return NULL;
3322 }
3323 return new_buf;
3324}
3325
3326/* An IT block is at most the 2-byte IT instruction followed by
3327 four 4-byte instructions. The furthest back we must search to
3328 find an IT block that affects the current instruction is thus
3329 2 + 3 * 4 == 14 bytes. */
3330#define MAX_IT_BLOCK_PREFIX 14
3331
3332/* Use a quick scan if there are more than this many bytes of
3333 code. */
3334#define IT_SCAN_THRESHOLD 32
3335
3336/* Adjust a breakpoint's address to move breakpoints out of IT blocks.
3337 A breakpoint in an IT block may not be hit, depending on the
3338 condition flags. */
3339static CORE_ADDR
3340arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
3341{
3342 gdb_byte *buf;
3343 char map_type;
3344 CORE_ADDR boundary, func_start;
3345 int buf_len, buf2_len;
3346 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
3347 int i, any, last_it, last_it_count;
3348
3349 /* If we are using BKPT breakpoints, none of this is necessary. */
3350 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
3351 return bpaddr;
3352
3353 /* ARM mode does not have this problem. */
3354 if (!arm_pc_is_thumb (bpaddr))
3355 return bpaddr;
3356
3357 /* We are setting a breakpoint in Thumb code that could potentially
3358 contain an IT block. The first step is to find how much Thumb
3359 code there is; we do not need to read outside of known Thumb
3360 sequences. */
3361 map_type = arm_find_mapping_symbol (bpaddr, &boundary);
3362 if (map_type == 0)
3363 /* Thumb-2 code must have mapping symbols to have a chance. */
3364 return bpaddr;
3365
3366 bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
3367
3368 if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
3369 && func_start > boundary)
3370 boundary = func_start;
3371
3372 /* Search for a candidate IT instruction. We have to do some fancy
3373 footwork to distinguish a real IT instruction from the second
3374 half of a 32-bit instruction, but there is no need for that if
3375 there's no candidate. */
3376 buf_len = min (bpaddr - boundary, MAX_IT_BLOCK_PREFIX);
3377 if (buf_len == 0)
3378 /* No room for an IT instruction. */
3379 return bpaddr;
3380
3381 buf = xmalloc (buf_len);
3382 if (target_read_memory (bpaddr - buf_len, buf, buf_len) != 0)
3383 return bpaddr;
3384 any = 0;
3385 for (i = 0; i < buf_len; i += 2)
3386 {
3387 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3388 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
3389 {
3390 any = 1;
3391 break;
3392 }
3393 }
3394 if (any == 0)
3395 {
3396 xfree (buf);
3397 return bpaddr;
3398 }
3399
3400 /* OK, the code bytes before this instruction contain at least one
3401 halfword which resembles an IT instruction. We know that it's
3402 Thumb code, but there are still two possibilities. Either the
3403 halfword really is an IT instruction, or it is the second half of
3404 a 32-bit Thumb instruction. The only way we can tell is to
3405 scan forwards from a known instruction boundary. */
3406 if (bpaddr - boundary > IT_SCAN_THRESHOLD)
3407 {
3408 int definite;
3409
3410 /* There's a lot of code before this instruction. Start with an
3411 optimistic search; it's easy to recognize halfwords that can
3412 not be the start of a 32-bit instruction, and use that to
3413 lock on to the instruction boundaries. */
3414 buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
3415 if (buf == NULL)
3416 return bpaddr;
3417 buf_len = IT_SCAN_THRESHOLD;
3418
3419 definite = 0;
3420 for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
3421 {
3422 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3423 if (thumb_insn_size (inst1) == 2)
3424 {
3425 definite = 1;
3426 break;
3427 }
3428 }
3429
3430 /* At this point, if DEFINITE, BUF[I] is the first place we
3431 are sure that we know the instruction boundaries, and it is far
3432 enough from BPADDR that we could not miss an IT instruction
3433 affecting BPADDR. If ! DEFINITE, give up - start from a
3434 known boundary. */
3435 if (! definite)
3436 {
3437 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
3438 if (buf == NULL)
3439 return bpaddr;
3440 buf_len = bpaddr - boundary;
3441 i = 0;
3442 }
3443 }
3444 else
3445 {
3446 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
3447 if (buf == NULL)
3448 return bpaddr;
3449 buf_len = bpaddr - boundary;
3450 i = 0;
3451 }
3452
3453 /* Scan forwards. Find the last IT instruction before BPADDR. */
3454 last_it = -1;
3455 last_it_count = 0;
3456 while (i < buf_len)
3457 {
3458 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3459 last_it_count--;
3460 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
3461 {
3462 last_it = i;
3463 if (inst1 & 0x0001)
3464 last_it_count = 4;
3465 else if (inst1 & 0x0002)
3466 last_it_count = 3;
3467 else if (inst1 & 0x0004)
3468 last_it_count = 2;
3469 else
3470 last_it_count = 1;
3471 }
3472 i += thumb_insn_size (inst1);
3473 }
3474
3475 xfree (buf);
3476
3477 if (last_it == -1)
3478 /* There wasn't really an IT instruction after all. */
3479 return bpaddr;
3480
3481 if (last_it_count < 1)
3482 /* It was too far away. */
3483 return bpaddr;
3484
3485 /* This really is a trouble spot. Move the breakpoint to the IT
3486 instruction. */
3487 return bpaddr - buf_len + last_it;
3488}
3489
cca44b1b 3490/* ARM displaced stepping support.
c906108c 3491
cca44b1b 3492 Generally ARM displaced stepping works as follows:
c906108c 3493
cca44b1b
JB
3494 1. When an instruction is to be single-stepped, it is first decoded by
3495 arm_process_displaced_insn (called from arm_displaced_step_copy_insn).
3496 Depending on the type of instruction, it is then copied to a scratch
3497 location, possibly in a modified form. The copy_* set of functions
3498 performs such modification, as necessary. A breakpoint is placed after
3499 the modified instruction in the scratch space to return control to GDB.
3500 Note in particular that instructions which modify the PC will no longer
3501 do so after modification.
c5aa993b 3502
cca44b1b
JB
3503 2. The instruction is single-stepped, by setting the PC to the scratch
3504 location address, and resuming. Control returns to GDB when the
3505 breakpoint is hit.
c5aa993b 3506
cca44b1b
JB
3507 3. A cleanup function (cleanup_*) is called corresponding to the copy_*
3508 function used for the current instruction. This function's job is to
3509 put the CPU/memory state back to what it would have been if the
3510 instruction had been executed unmodified in its original location. */
c5aa993b 3511
cca44b1b
JB
3512/* NOP instruction (mov r0, r0). */
3513#define ARM_NOP 0xe1a00000
3514
3515/* Helper for register reads for displaced stepping. In particular, this
3516 returns the PC as it would be seen by the instruction at its original
3517 location. */
3518
3519ULONGEST
3520displaced_read_reg (struct regcache *regs, CORE_ADDR from, int regno)
3521{
3522 ULONGEST ret;
3523
3524 if (regno == 15)
3525 {
3526 if (debug_displaced)
3527 fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
3528 (unsigned long) from + 8);
3529 return (ULONGEST) from + 8; /* Pipeline offset. */
3530 }
c906108c 3531 else
cca44b1b
JB
3532 {
3533 regcache_cooked_read_unsigned (regs, regno, &ret);
3534 if (debug_displaced)
3535 fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
3536 regno, (unsigned long) ret);
3537 return ret;
3538 }
c906108c
SS
3539}
3540
cca44b1b
JB
3541static int
3542displaced_in_arm_mode (struct regcache *regs)
3543{
3544 ULONGEST ps;
66e810cd 3545
cca44b1b 3546 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
66e810cd 3547
cca44b1b
JB
3548 return (ps & CPSR_T) == 0;
3549}
66e810cd 3550
cca44b1b 3551/* Write to the PC as from a branch instruction. */
c906108c 3552
cca44b1b
JB
3553static void
3554branch_write_pc (struct regcache *regs, ULONGEST val)
c906108c 3555{
cca44b1b
JB
3556 if (displaced_in_arm_mode (regs))
3557 /* Note: If bits 0/1 are set, this branch would be unpredictable for
3558 architecture versions < 6. */
3559 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & ~(ULONGEST) 0x3);
3560 else
3561 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & ~(ULONGEST) 0x1);
3562}
66e810cd 3563
cca44b1b
JB
3564/* Write to the PC as from a branch-exchange instruction. */
3565
3566static void
3567bx_write_pc (struct regcache *regs, ULONGEST val)
3568{
3569 ULONGEST ps;
3570
3571 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
3572
3573 if ((val & 1) == 1)
c906108c 3574 {
cca44b1b
JB
3575 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | CPSR_T);
3576 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
3577 }
3578 else if ((val & 2) == 0)
3579 {
3580 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM,
3581 ps & ~(ULONGEST) CPSR_T);
3582 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
c906108c
SS
3583 }
3584 else
3585 {
cca44b1b
JB
3586 /* Unpredictable behaviour. Try to do something sensible (switch to ARM
3587 mode, align dest to 4 bytes). */
3588 warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
3589 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM,
3590 ps & ~(ULONGEST) CPSR_T);
3591 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
c906108c
SS
3592 }
3593}
ed9a39eb 3594
cca44b1b 3595/* Write to the PC as if from a load instruction. */
ed9a39eb 3596
34e8f22d 3597static void
cca44b1b 3598load_write_pc (struct regcache *regs, ULONGEST val)
ed9a39eb 3599{
cca44b1b
JB
3600 if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
3601 bx_write_pc (regs, val);
3602 else
3603 branch_write_pc (regs, val);
3604}
be8626e0 3605
cca44b1b
JB
3606/* Write to the PC as if from an ALU instruction. */
3607
3608static void
3609alu_write_pc (struct regcache *regs, ULONGEST val)
3610{
3611 if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && displaced_in_arm_mode (regs))
3612 bx_write_pc (regs, val);
3613 else
3614 branch_write_pc (regs, val);
3615}
3616
3617/* Helper for writing to registers for displaced stepping. Writing to the PC
3618 has a varying effects depending on the instruction which does the write:
3619 this is controlled by the WRITE_PC argument. */
3620
3621void
3622displaced_write_reg (struct regcache *regs, struct displaced_step_closure *dsc,
3623 int regno, ULONGEST val, enum pc_write_style write_pc)
3624{
3625 if (regno == 15)
08216dd7 3626 {
cca44b1b
JB
3627 if (debug_displaced)
3628 fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
3629 (unsigned long) val);
3630 switch (write_pc)
08216dd7 3631 {
cca44b1b
JB
3632 case BRANCH_WRITE_PC:
3633 branch_write_pc (regs, val);
08216dd7
RE
3634 break;
3635
cca44b1b
JB
3636 case BX_WRITE_PC:
3637 bx_write_pc (regs, val);
3638 break;
3639
3640 case LOAD_WRITE_PC:
3641 load_write_pc (regs, val);
3642 break;
3643
3644 case ALU_WRITE_PC:
3645 alu_write_pc (regs, val);
3646 break;
3647
3648 case CANNOT_WRITE_PC:
3649 warning (_("Instruction wrote to PC in an unexpected way when "
3650 "single-stepping"));
08216dd7
RE
3651 break;
3652
3653 default:
97b9747c
JB
3654 internal_error (__FILE__, __LINE__,
3655 _("Invalid argument to displaced_write_reg"));
08216dd7 3656 }
b508a996 3657
cca44b1b 3658 dsc->wrote_to_pc = 1;
b508a996 3659 }
ed9a39eb 3660 else
b508a996 3661 {
cca44b1b
JB
3662 if (debug_displaced)
3663 fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
3664 regno, (unsigned long) val);
3665 regcache_cooked_write_unsigned (regs, regno, val);
b508a996 3666 }
34e8f22d
RE
3667}
3668
cca44b1b
JB
3669/* This function is used to concisely determine if an instruction INSN
3670 references PC. Register fields of interest in INSN should have the
3671 corresponding fields of BITMASK set to 0b1111. The function returns return 1
3672 if any of these fields in INSN reference the PC (also 0b1111, r15), else it
3673 returns 0. */
67255d04
RE
3674
3675static int
cca44b1b 3676insn_references_pc (uint32_t insn, uint32_t bitmask)
67255d04 3677{
cca44b1b 3678 uint32_t lowbit = 1;
67255d04 3679
cca44b1b
JB
3680 while (bitmask != 0)
3681 {
3682 uint32_t mask;
44e1a9eb 3683
cca44b1b
JB
3684 for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
3685 ;
67255d04 3686
cca44b1b
JB
3687 if (!lowbit)
3688 break;
67255d04 3689
cca44b1b 3690 mask = lowbit * 0xf;
67255d04 3691
cca44b1b
JB
3692 if ((insn & mask) == mask)
3693 return 1;
3694
3695 bitmask &= ~mask;
67255d04
RE
3696 }
3697
cca44b1b
JB
3698 return 0;
3699}
2af48f68 3700
cca44b1b
JB
3701/* The simplest copy function. Many instructions have the same effect no
3702 matter what address they are executed at: in those cases, use this. */
67255d04 3703
cca44b1b
JB
3704static int
3705copy_unmodified (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
3706 const char *iname, struct displaced_step_closure *dsc)
3707{
3708 if (debug_displaced)
3709 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
3710 "opcode/class '%s' unmodified\n", (unsigned long) insn,
3711 iname);
67255d04 3712
cca44b1b 3713 dsc->modinsn[0] = insn;
67255d04 3714
cca44b1b
JB
3715 return 0;
3716}
3717
3718/* Preload instructions with immediate offset. */
3719
3720static void
3721cleanup_preload (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3722 struct regcache *regs, struct displaced_step_closure *dsc)
3723{
3724 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3725 if (!dsc->u.preload.immed)
3726 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3727}
3728
3729static int
3730copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3731 struct displaced_step_closure *dsc)
3732{
3733 unsigned int rn = bits (insn, 16, 19);
3734 ULONGEST rn_val;
3735 CORE_ADDR from = dsc->insn_addr;
3736
3737 if (!insn_references_pc (insn, 0x000f0000ul))
3738 return copy_unmodified (gdbarch, insn, "preload", dsc);
3739
3740 if (debug_displaced)
3741 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
3742 (unsigned long) insn);
3743
3744 /* Preload instructions:
3745
3746 {pli/pld} [rn, #+/-imm]
3747 ->
3748 {pli/pld} [r0, #+/-imm]. */
3749
3750 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3751 rn_val = displaced_read_reg (regs, from, rn);
3752 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3753
3754 dsc->u.preload.immed = 1;
3755
3756 dsc->modinsn[0] = insn & 0xfff0ffff;
3757
3758 dsc->cleanup = &cleanup_preload;
3759
3760 return 0;
3761}
3762
3763/* Preload instructions with register offset. */
3764
3765static int
3766copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3767 struct displaced_step_closure *dsc)
3768{
3769 unsigned int rn = bits (insn, 16, 19);
3770 unsigned int rm = bits (insn, 0, 3);
3771 ULONGEST rn_val, rm_val;
3772 CORE_ADDR from = dsc->insn_addr;
3773
3774 if (!insn_references_pc (insn, 0x000f000ful))
3775 return copy_unmodified (gdbarch, insn, "preload reg", dsc);
3776
3777 if (debug_displaced)
3778 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
3779 (unsigned long) insn);
3780
3781 /* Preload register-offset instructions:
3782
3783 {pli/pld} [rn, rm {, shift}]
3784 ->
3785 {pli/pld} [r0, r1 {, shift}]. */
3786
3787 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3788 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
3789 rn_val = displaced_read_reg (regs, from, rn);
3790 rm_val = displaced_read_reg (regs, from, rm);
3791 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3792 displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
3793
3794 dsc->u.preload.immed = 0;
3795
3796 dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
3797
3798 dsc->cleanup = &cleanup_preload;
3799
3800 return 0;
3801}
3802
3803/* Copy/cleanup coprocessor load and store instructions. */
3804
3805static void
3806cleanup_copro_load_store (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3807 struct regcache *regs,
3808 struct displaced_step_closure *dsc)
3809{
3810 ULONGEST rn_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3811
3812 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3813
3814 if (dsc->u.ldst.writeback)
3815 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
3816}
3817
3818static int
3819copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
3820 struct regcache *regs,
3821 struct displaced_step_closure *dsc)
3822{
3823 unsigned int rn = bits (insn, 16, 19);
3824 ULONGEST rn_val;
3825 CORE_ADDR from = dsc->insn_addr;
3826
3827 if (!insn_references_pc (insn, 0x000f0000ul))
3828 return copy_unmodified (gdbarch, insn, "copro load/store", dsc);
3829
3830 if (debug_displaced)
3831 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
3832 "load/store insn %.8lx\n", (unsigned long) insn);
3833
3834 /* Coprocessor load/store instructions:
3835
3836 {stc/stc2} [<Rn>, #+/-imm] (and other immediate addressing modes)
3837 ->
3838 {stc/stc2} [r0, #+/-imm].
3839
3840 ldc/ldc2 are handled identically. */
3841
3842 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3843 rn_val = displaced_read_reg (regs, from, rn);
3844 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3845
3846 dsc->u.ldst.writeback = bit (insn, 25);
3847 dsc->u.ldst.rn = rn;
3848
3849 dsc->modinsn[0] = insn & 0xfff0ffff;
3850
3851 dsc->cleanup = &cleanup_copro_load_store;
3852
3853 return 0;
3854}
3855
3856/* Clean up branch instructions (actually perform the branch, by setting
3857 PC). */
3858
3859static void
3860cleanup_branch (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
3861 struct displaced_step_closure *dsc)
3862{
3863 ULONGEST from = dsc->insn_addr;
3864 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
3865 int branch_taken = condition_true (dsc->u.branch.cond, status);
3866 enum pc_write_style write_pc = dsc->u.branch.exchange
3867 ? BX_WRITE_PC : BRANCH_WRITE_PC;
3868
3869 if (!branch_taken)
3870 return;
3871
3872 if (dsc->u.branch.link)
3873 {
3874 ULONGEST pc = displaced_read_reg (regs, from, 15);
3875 displaced_write_reg (regs, dsc, 14, pc - 4, CANNOT_WRITE_PC);
3876 }
3877
3878 displaced_write_reg (regs, dsc, 15, dsc->u.branch.dest, write_pc);
3879}
3880
3881/* Copy B/BL/BLX instructions with immediate destinations. */
3882
3883static int
3884copy_b_bl_blx (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
3885 struct regcache *regs, struct displaced_step_closure *dsc)
3886{
3887 unsigned int cond = bits (insn, 28, 31);
3888 int exchange = (cond == 0xf);
3889 int link = exchange || bit (insn, 24);
3890 CORE_ADDR from = dsc->insn_addr;
3891 long offset;
3892
3893 if (debug_displaced)
3894 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
3895 "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
3896 (unsigned long) insn);
3897
3898 /* Implement "BL<cond> <label>" as:
3899
3900 Preparation: cond <- instruction condition
3901 Insn: mov r0, r0 (nop)
3902 Cleanup: if (condition true) { r14 <- pc; pc <- label }.
3903
3904 B<cond> similar, but don't set r14 in cleanup. */
3905
3906 if (exchange)
3907 /* For BLX, set bit 0 of the destination. The cleanup_branch function will
3908 then arrange the switch into Thumb mode. */
3909 offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
3910 else
3911 offset = bits (insn, 0, 23) << 2;
3912
3913 if (bit (offset, 25))
3914 offset = offset | ~0x3ffffff;
3915
3916 dsc->u.branch.cond = cond;
3917 dsc->u.branch.link = link;
3918 dsc->u.branch.exchange = exchange;
3919 dsc->u.branch.dest = from + 8 + offset;
3920
3921 dsc->modinsn[0] = ARM_NOP;
3922
3923 dsc->cleanup = &cleanup_branch;
3924
3925 return 0;
3926}
3927
3928/* Copy BX/BLX with register-specified destinations. */
3929
3930static int
3931copy_bx_blx_reg (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
3932 struct regcache *regs, struct displaced_step_closure *dsc)
3933{
3934 unsigned int cond = bits (insn, 28, 31);
3935 /* BX: x12xxx1x
3936 BLX: x12xxx3x. */
3937 int link = bit (insn, 5);
3938 unsigned int rm = bits (insn, 0, 3);
3939 CORE_ADDR from = dsc->insn_addr;
3940
3941 if (debug_displaced)
3942 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s register insn "
3943 "%.8lx\n", (link) ? "blx" : "bx", (unsigned long) insn);
3944
3945 /* Implement {BX,BLX}<cond> <reg>" as:
3946
3947 Preparation: cond <- instruction condition
3948 Insn: mov r0, r0 (nop)
3949 Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
3950
3951 Don't set r14 in cleanup for BX. */
3952
3953 dsc->u.branch.dest = displaced_read_reg (regs, from, rm);
3954
3955 dsc->u.branch.cond = cond;
3956 dsc->u.branch.link = link;
3957 dsc->u.branch.exchange = 1;
3958
3959 dsc->modinsn[0] = ARM_NOP;
3960
3961 dsc->cleanup = &cleanup_branch;
3962
3963 return 0;
3964}
3965
3966/* Copy/cleanup arithmetic/logic instruction with immediate RHS. */
3967
3968static void
3969cleanup_alu_imm (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
3970 struct regcache *regs, struct displaced_step_closure *dsc)
3971{
3972 ULONGEST rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3973 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3974 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3975 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
3976}
3977
3978static int
3979copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3980 struct displaced_step_closure *dsc)
3981{
3982 unsigned int rn = bits (insn, 16, 19);
3983 unsigned int rd = bits (insn, 12, 15);
3984 unsigned int op = bits (insn, 21, 24);
3985 int is_mov = (op == 0xd);
3986 ULONGEST rd_val, rn_val;
3987 CORE_ADDR from = dsc->insn_addr;
3988
3989 if (!insn_references_pc (insn, 0x000ff000ul))
3990 return copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
3991
3992 if (debug_displaced)
3993 fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
3994 "%.8lx\n", is_mov ? "move" : "ALU",
3995 (unsigned long) insn);
3996
3997 /* Instruction is of form:
3998
3999 <op><cond> rd, [rn,] #imm
4000
4001 Rewrite as:
4002
4003 Preparation: tmp1, tmp2 <- r0, r1;
4004 r0, r1 <- rd, rn
4005 Insn: <op><cond> r0, r1, #imm
4006 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
4007 */
4008
4009 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4010 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
4011 rn_val = displaced_read_reg (regs, from, rn);
4012 rd_val = displaced_read_reg (regs, from, rd);
4013 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
4014 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
4015 dsc->rd = rd;
4016
4017 if (is_mov)
4018 dsc->modinsn[0] = insn & 0xfff00fff;
4019 else
4020 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
4021
4022 dsc->cleanup = &cleanup_alu_imm;
4023
4024 return 0;
4025}
4026
4027/* Copy/cleanup arithmetic/logic insns with register RHS. */
4028
4029static void
4030cleanup_alu_reg (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
4031 struct regcache *regs, struct displaced_step_closure *dsc)
4032{
4033 ULONGEST rd_val;
4034 int i;
4035
4036 rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
4037
4038 for (i = 0; i < 3; i++)
4039 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
4040
4041 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
4042}
4043
4044static int
4045copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4046 struct displaced_step_closure *dsc)
4047{
4048 unsigned int rn = bits (insn, 16, 19);
4049 unsigned int rm = bits (insn, 0, 3);
4050 unsigned int rd = bits (insn, 12, 15);
4051 unsigned int op = bits (insn, 21, 24);
4052 int is_mov = (op == 0xd);
4053 ULONGEST rd_val, rn_val, rm_val;
4054 CORE_ADDR from = dsc->insn_addr;
4055
4056 if (!insn_references_pc (insn, 0x000ff00ful))
4057 return copy_unmodified (gdbarch, insn, "ALU reg", dsc);
4058
4059 if (debug_displaced)
4060 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
4061 is_mov ? "move" : "ALU", (unsigned long) insn);
4062
4063 /* Instruction is of form:
4064
4065 <op><cond> rd, [rn,] rm [, <shift>]
4066
4067 Rewrite as:
4068
4069 Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
4070 r0, r1, r2 <- rd, rn, rm
4071 Insn: <op><cond> r0, r1, r2 [, <shift>]
4072 Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
4073 */
4074
4075 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4076 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
4077 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
4078 rd_val = displaced_read_reg (regs, from, rd);
4079 rn_val = displaced_read_reg (regs, from, rn);
4080 rm_val = displaced_read_reg (regs, from, rm);
4081 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
4082 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
4083 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
4084 dsc->rd = rd;
4085
4086 if (is_mov)
4087 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
4088 else
4089 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
4090
4091 dsc->cleanup = &cleanup_alu_reg;
4092
4093 return 0;
4094}
4095
4096/* Cleanup/copy arithmetic/logic insns with shifted register RHS. */
4097
4098static void
4099cleanup_alu_shifted_reg (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
4100 struct regcache *regs,
4101 struct displaced_step_closure *dsc)
4102{
4103 ULONGEST rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
4104 int i;
4105
4106 for (i = 0; i < 4; i++)
4107 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
4108
4109 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
4110}
4111
4112static int
4113copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
4114 struct regcache *regs, struct displaced_step_closure *dsc)
4115{
4116 unsigned int rn = bits (insn, 16, 19);
4117 unsigned int rm = bits (insn, 0, 3);
4118 unsigned int rd = bits (insn, 12, 15);
4119 unsigned int rs = bits (insn, 8, 11);
4120 unsigned int op = bits (insn, 21, 24);
4121 int is_mov = (op == 0xd), i;
4122 ULONGEST rd_val, rn_val, rm_val, rs_val;
4123 CORE_ADDR from = dsc->insn_addr;
4124
4125 if (!insn_references_pc (insn, 0x000fff0ful))
4126 return copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
4127
4128 if (debug_displaced)
4129 fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
4130 "%.8lx\n", is_mov ? "move" : "ALU",
4131 (unsigned long) insn);
4132
4133 /* Instruction is of form:
4134
4135 <op><cond> rd, [rn,] rm, <shift> rs
4136
4137 Rewrite as:
4138
4139 Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
4140 r0, r1, r2, r3 <- rd, rn, rm, rs
4141 Insn: <op><cond> r0, r1, r2, <shift> r3
4142 Cleanup: tmp5 <- r0
4143 r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
4144 rd <- tmp5
4145 */
4146
4147 for (i = 0; i < 4; i++)
4148 dsc->tmp[i] = displaced_read_reg (regs, from, i);
4149
4150 rd_val = displaced_read_reg (regs, from, rd);
4151 rn_val = displaced_read_reg (regs, from, rn);
4152 rm_val = displaced_read_reg (regs, from, rm);
4153 rs_val = displaced_read_reg (regs, from, rs);
4154 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
4155 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
4156 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
4157 displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
4158 dsc->rd = rd;
4159
4160 if (is_mov)
4161 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
4162 else
4163 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
4164
4165 dsc->cleanup = &cleanup_alu_shifted_reg;
4166
4167 return 0;
4168}
4169
4170/* Clean up load instructions. */
4171
4172static void
4173cleanup_load (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
4174 struct displaced_step_closure *dsc)
4175{
4176 ULONGEST rt_val, rt_val2 = 0, rn_val;
4177 CORE_ADDR from = dsc->insn_addr;
4178
4179 rt_val = displaced_read_reg (regs, from, 0);
4180 if (dsc->u.ldst.xfersize == 8)
4181 rt_val2 = displaced_read_reg (regs, from, 1);
4182 rn_val = displaced_read_reg (regs, from, 2);
4183
4184 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4185 if (dsc->u.ldst.xfersize > 4)
4186 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4187 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
4188 if (!dsc->u.ldst.immed)
4189 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
4190
4191 /* Handle register writeback. */
4192 if (dsc->u.ldst.writeback)
4193 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
4194 /* Put result in right place. */
4195 displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
4196 if (dsc->u.ldst.xfersize == 8)
4197 displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
4198}
4199
4200/* Clean up store instructions. */
4201
4202static void
4203cleanup_store (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
4204 struct displaced_step_closure *dsc)
4205{
4206 CORE_ADDR from = dsc->insn_addr;
4207 ULONGEST rn_val = displaced_read_reg (regs, from, 2);
4208
4209 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4210 if (dsc->u.ldst.xfersize > 4)
4211 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4212 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
4213 if (!dsc->u.ldst.immed)
4214 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
4215 if (!dsc->u.ldst.restore_r4)
4216 displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
4217
4218 /* Writeback. */
4219 if (dsc->u.ldst.writeback)
4220 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
4221}
4222
4223/* Copy "extra" load/store instructions. These are halfword/doubleword
4224 transfers, which have a different encoding to byte/word transfers. */
4225
4226static int
4227copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unpriveleged,
4228 struct regcache *regs, struct displaced_step_closure *dsc)
4229{
4230 unsigned int op1 = bits (insn, 20, 24);
4231 unsigned int op2 = bits (insn, 5, 6);
4232 unsigned int rt = bits (insn, 12, 15);
4233 unsigned int rn = bits (insn, 16, 19);
4234 unsigned int rm = bits (insn, 0, 3);
4235 char load[12] = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
4236 char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
4237 int immed = (op1 & 0x4) != 0;
4238 int opcode;
4239 ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
4240 CORE_ADDR from = dsc->insn_addr;
4241
4242 if (!insn_references_pc (insn, 0x000ff00ful))
4243 return copy_unmodified (gdbarch, insn, "extra load/store", dsc);
4244
4245 if (debug_displaced)
4246 fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
4247 "insn %.8lx\n", unpriveleged ? "unpriveleged " : "",
4248 (unsigned long) insn);
4249
4250 opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
4251
4252 if (opcode < 0)
4253 internal_error (__FILE__, __LINE__,
4254 _("copy_extra_ld_st: instruction decode error"));
4255
4256 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4257 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
4258 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
4259 if (!immed)
4260 dsc->tmp[3] = displaced_read_reg (regs, from, 3);
4261
4262 rt_val = displaced_read_reg (regs, from, rt);
4263 if (bytesize[opcode] == 8)
4264 rt_val2 = displaced_read_reg (regs, from, rt + 1);
4265 rn_val = displaced_read_reg (regs, from, rn);
4266 if (!immed)
4267 rm_val = displaced_read_reg (regs, from, rm);
4268
4269 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
4270 if (bytesize[opcode] == 8)
4271 displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
4272 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
4273 if (!immed)
4274 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
4275
4276 dsc->rd = rt;
4277 dsc->u.ldst.xfersize = bytesize[opcode];
4278 dsc->u.ldst.rn = rn;
4279 dsc->u.ldst.immed = immed;
4280 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
4281 dsc->u.ldst.restore_r4 = 0;
4282
4283 if (immed)
4284 /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
4285 ->
4286 {ldr,str}<width><cond> r0, [r1,] [r2, #imm]. */
4287 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
4288 else
4289 /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
4290 ->
4291 {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3]. */
4292 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
4293
4294 dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
4295
4296 return 0;
4297}
4298
4299/* Copy byte/word loads and stores. */
4300
4301static int
4302copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
4303 struct regcache *regs,
4304 struct displaced_step_closure *dsc, int load, int byte,
4305 int usermode)
4306{
4307 int immed = !bit (insn, 25);
4308 unsigned int rt = bits (insn, 12, 15);
4309 unsigned int rn = bits (insn, 16, 19);
4310 unsigned int rm = bits (insn, 0, 3); /* Only valid if !immed. */
4311 ULONGEST rt_val, rn_val, rm_val = 0;
4312 CORE_ADDR from = dsc->insn_addr;
4313
4314 if (!insn_references_pc (insn, 0x000ff00ful))
4315 return copy_unmodified (gdbarch, insn, "load/store", dsc);
4316
4317 if (debug_displaced)
4318 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s%s insn %.8lx\n",
4319 load ? (byte ? "ldrb" : "ldr")
4320 : (byte ? "strb" : "str"), usermode ? "t" : "",
4321 (unsigned long) insn);
4322
4323 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4324 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
4325 if (!immed)
4326 dsc->tmp[3] = displaced_read_reg (regs, from, 3);
4327 if (!load)
4328 dsc->tmp[4] = displaced_read_reg (regs, from, 4);
4329
4330 rt_val = displaced_read_reg (regs, from, rt);
4331 rn_val = displaced_read_reg (regs, from, rn);
4332 if (!immed)
4333 rm_val = displaced_read_reg (regs, from, rm);
4334
4335 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
4336 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
4337 if (!immed)
4338 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
4339
4340 dsc->rd = rt;
4341 dsc->u.ldst.xfersize = byte ? 1 : 4;
4342 dsc->u.ldst.rn = rn;
4343 dsc->u.ldst.immed = immed;
4344 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
4345
4346 /* To write PC we can do:
4347
4348 scratch+0: str pc, temp (*temp = scratch + 8 + offset)
4349 scratch+4: ldr r4, temp
4350 scratch+8: sub r4, r4, pc (r4 = scratch + 8 + offset - scratch - 8 - 8)
4351 scratch+12: add r4, r4, #8 (r4 = offset)
4352 scratch+16: add r0, r0, r4
4353 scratch+20: str r0, [r2, #imm] (or str r0, [r2, r3])
4354 scratch+24: <temp>
4355
4356 Otherwise we don't know what value to write for PC, since the offset is
4357 architecture-dependent (sometimes PC+8, sometimes PC+12). */
4358
4359 if (load || rt != 15)
4360 {
4361 dsc->u.ldst.restore_r4 = 0;
4362
4363 if (immed)
4364 /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
4365 ->
4366 {ldr,str}[b]<cond> r0, [r2, #imm]. */
4367 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
4368 else
4369 /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
4370 ->
4371 {ldr,str}[b]<cond> r0, [r2, r3]. */
4372 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
4373 }
4374 else
4375 {
4376 /* We need to use r4 as scratch. Make sure it's restored afterwards. */
4377 dsc->u.ldst.restore_r4 = 1;
4378
4379 dsc->modinsn[0] = 0xe58ff014; /* str pc, [pc, #20]. */
4380 dsc->modinsn[1] = 0xe59f4010; /* ldr r4, [pc, #16]. */
4381 dsc->modinsn[2] = 0xe044400f; /* sub r4, r4, pc. */
4382 dsc->modinsn[3] = 0xe2844008; /* add r4, r4, #8. */
4383 dsc->modinsn[4] = 0xe0800004; /* add r0, r0, r4. */
4384
4385 /* As above. */
4386 if (immed)
4387 dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
4388 else
4389 dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
4390
4391 dsc->modinsn[6] = 0x0; /* breakpoint location. */
4392 dsc->modinsn[7] = 0x0; /* scratch space. */
4393
4394 dsc->numinsns = 6;
4395 }
4396
4397 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
4398
4399 return 0;
4400}
4401
4402/* Cleanup LDM instructions with fully-populated register list. This is an
4403 unfortunate corner case: it's impossible to implement correctly by modifying
4404 the instruction. The issue is as follows: we have an instruction,
4405
4406 ldm rN, {r0-r15}
4407
4408 which we must rewrite to avoid loading PC. A possible solution would be to
4409 do the load in two halves, something like (with suitable cleanup
4410 afterwards):
4411
4412 mov r8, rN
4413 ldm[id][ab] r8!, {r0-r7}
4414 str r7, <temp>
4415 ldm[id][ab] r8, {r7-r14}
4416 <bkpt>
4417
4418 but at present there's no suitable place for <temp>, since the scratch space
4419 is overwritten before the cleanup routine is called. For now, we simply
4420 emulate the instruction. */
4421
4422static void
4423cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
4424 struct displaced_step_closure *dsc)
4425{
4426 ULONGEST from = dsc->insn_addr;
4427 int inc = dsc->u.block.increment;
4428 int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
4429 int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
4430 uint32_t regmask = dsc->u.block.regmask;
4431 int regno = inc ? 0 : 15;
4432 CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
4433 int exception_return = dsc->u.block.load && dsc->u.block.user
4434 && (regmask & 0x8000) != 0;
4435 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4436 int do_transfer = condition_true (dsc->u.block.cond, status);
4437 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4438
4439 if (!do_transfer)
4440 return;
4441
4442 /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
4443 sensible we can do here. Complain loudly. */
4444 if (exception_return)
4445 error (_("Cannot single-step exception return"));
4446
4447 /* We don't handle any stores here for now. */
4448 gdb_assert (dsc->u.block.load != 0);
4449
4450 if (debug_displaced)
4451 fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
4452 "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
4453 dsc->u.block.increment ? "inc" : "dec",
4454 dsc->u.block.before ? "before" : "after");
4455
4456 while (regmask)
4457 {
4458 uint32_t memword;
4459
4460 if (inc)
4461 while (regno <= 15 && (regmask & (1 << regno)) == 0)
4462 regno++;
4463 else
4464 while (regno >= 0 && (regmask & (1 << regno)) == 0)
4465 regno--;
4466
4467 xfer_addr += bump_before;
4468
4469 memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
4470 displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
4471
4472 xfer_addr += bump_after;
4473
4474 regmask &= ~(1 << regno);
4475 }
4476
4477 if (dsc->u.block.writeback)
4478 displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
4479 CANNOT_WRITE_PC);
4480}
4481
4482/* Clean up an STM which included the PC in the register list. */
4483
4484static void
4485cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
4486 struct displaced_step_closure *dsc)
4487{
4488 ULONGEST from = dsc->insn_addr;
4489 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4490 int store_executed = condition_true (dsc->u.block.cond, status);
4491 CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
4492 CORE_ADDR stm_insn_addr;
4493 uint32_t pc_val;
4494 long offset;
4495 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4496
4497 /* If condition code fails, there's nothing else to do. */
4498 if (!store_executed)
4499 return;
4500
4501 if (dsc->u.block.increment)
4502 {
4503 pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
4504
4505 if (dsc->u.block.before)
4506 pc_stored_at += 4;
4507 }
4508 else
4509 {
4510 pc_stored_at = dsc->u.block.xfer_addr;
4511
4512 if (dsc->u.block.before)
4513 pc_stored_at -= 4;
4514 }
4515
4516 pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
4517 stm_insn_addr = dsc->scratch_base;
4518 offset = pc_val - stm_insn_addr;
4519
4520 if (debug_displaced)
4521 fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
4522 "STM instruction\n", offset);
4523
4524 /* Rewrite the stored PC to the proper value for the non-displaced original
4525 instruction. */
4526 write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
4527 dsc->insn_addr + offset);
4528}
4529
4530/* Clean up an LDM which includes the PC in the register list. We clumped all
4531 the registers in the transferred list into a contiguous range r0...rX (to
4532 avoid loading PC directly and losing control of the debugged program), so we
4533 must undo that here. */
4534
4535static void
4536cleanup_block_load_pc (struct gdbarch *gdbarch ATTRIBUTE_UNUSED,
4537 struct regcache *regs,
4538 struct displaced_step_closure *dsc)
4539{
4540 ULONGEST from = dsc->insn_addr;
4541 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4542 int load_executed = condition_true (dsc->u.block.cond, status), i;
4543 unsigned int mask = dsc->u.block.regmask, write_reg = 15;
4544 unsigned int regs_loaded = bitcount (mask);
4545 unsigned int num_to_shuffle = regs_loaded, clobbered;
4546
4547 /* The method employed here will fail if the register list is fully populated
4548 (we need to avoid loading PC directly). */
4549 gdb_assert (num_to_shuffle < 16);
4550
4551 if (!load_executed)
4552 return;
4553
4554 clobbered = (1 << num_to_shuffle) - 1;
4555
4556 while (num_to_shuffle > 0)
4557 {
4558 if ((mask & (1 << write_reg)) != 0)
4559 {
4560 unsigned int read_reg = num_to_shuffle - 1;
4561
4562 if (read_reg != write_reg)
4563 {
4564 ULONGEST rval = displaced_read_reg (regs, from, read_reg);
4565 displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
4566 if (debug_displaced)
4567 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
4568 "loaded register r%d to r%d\n"), read_reg,
4569 write_reg);
4570 }
4571 else if (debug_displaced)
4572 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
4573 "r%d already in the right place\n"),
4574 write_reg);
4575
4576 clobbered &= ~(1 << write_reg);
4577
4578 num_to_shuffle--;
4579 }
4580
4581 write_reg--;
4582 }
4583
4584 /* Restore any registers we scribbled over. */
4585 for (write_reg = 0; clobbered != 0; write_reg++)
4586 {
4587 if ((clobbered & (1 << write_reg)) != 0)
4588 {
4589 displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
4590 CANNOT_WRITE_PC);
4591 if (debug_displaced)
4592 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
4593 "clobbered register r%d\n"), write_reg);
4594 clobbered &= ~(1 << write_reg);
4595 }
4596 }
4597
4598 /* Perform register writeback manually. */
4599 if (dsc->u.block.writeback)
4600 {
4601 ULONGEST new_rn_val = dsc->u.block.xfer_addr;
4602
4603 if (dsc->u.block.increment)
4604 new_rn_val += regs_loaded * 4;
4605 else
4606 new_rn_val -= regs_loaded * 4;
4607
4608 displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
4609 CANNOT_WRITE_PC);
4610 }
4611}
4612
4613/* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
4614 in user-level code (in particular exception return, ldm rn, {...pc}^). */
4615
4616static int
4617copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4618 struct displaced_step_closure *dsc)
4619{
4620 int load = bit (insn, 20);
4621 int user = bit (insn, 22);
4622 int increment = bit (insn, 23);
4623 int before = bit (insn, 24);
4624 int writeback = bit (insn, 21);
4625 int rn = bits (insn, 16, 19);
4626 CORE_ADDR from = dsc->insn_addr;
4627
4628 /* Block transfers which don't mention PC can be run directly out-of-line. */
4629 if (rn != 15 && (insn & 0x8000) == 0)
4630 return copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
4631
4632 if (rn == 15)
4633 {
4634 warning (_("displaced: Unpredictable LDM or STM with base register r15"));
4635 return copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
4636 }
4637
4638 if (debug_displaced)
4639 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
4640 "%.8lx\n", (unsigned long) insn);
4641
4642 dsc->u.block.xfer_addr = displaced_read_reg (regs, from, rn);
4643 dsc->u.block.rn = rn;
4644
4645 dsc->u.block.load = load;
4646 dsc->u.block.user = user;
4647 dsc->u.block.increment = increment;
4648 dsc->u.block.before = before;
4649 dsc->u.block.writeback = writeback;
4650 dsc->u.block.cond = bits (insn, 28, 31);
4651
4652 dsc->u.block.regmask = insn & 0xffff;
4653
4654 if (load)
4655 {
4656 if ((insn & 0xffff) == 0xffff)
4657 {
4658 /* LDM with a fully-populated register list. This case is
4659 particularly tricky. Implement for now by fully emulating the
4660 instruction (which might not behave perfectly in all cases, but
4661 these instructions should be rare enough for that not to matter
4662 too much). */
4663 dsc->modinsn[0] = ARM_NOP;
4664
4665 dsc->cleanup = &cleanup_block_load_all;
4666 }
4667 else
4668 {
4669 /* LDM of a list of registers which includes PC. Implement by
4670 rewriting the list of registers to be transferred into a
4671 contiguous chunk r0...rX before doing the transfer, then shuffling
4672 registers into the correct places in the cleanup routine. */
4673 unsigned int regmask = insn & 0xffff;
4674 unsigned int num_in_list = bitcount (regmask), new_regmask, bit = 1;
4675 unsigned int to = 0, from = 0, i, new_rn;
4676
4677 for (i = 0; i < num_in_list; i++)
4678 dsc->tmp[i] = displaced_read_reg (regs, from, i);
4679
4680 /* Writeback makes things complicated. We need to avoid clobbering
4681 the base register with one of the registers in our modified
4682 register list, but just using a different register can't work in
4683 all cases, e.g.:
4684
4685 ldm r14!, {r0-r13,pc}
4686
4687 which would need to be rewritten as:
4688
4689 ldm rN!, {r0-r14}
4690
4691 but that can't work, because there's no free register for N.
4692
4693 Solve this by turning off the writeback bit, and emulating
4694 writeback manually in the cleanup routine. */
4695
4696 if (writeback)
4697 insn &= ~(1 << 21);
4698
4699 new_regmask = (1 << num_in_list) - 1;
4700
4701 if (debug_displaced)
4702 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
4703 "{..., pc}: original reg list %.4x, modified "
4704 "list %.4x\n"), rn, writeback ? "!" : "",
4705 (int) insn & 0xffff, new_regmask);
4706
4707 dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
4708
4709 dsc->cleanup = &cleanup_block_load_pc;
4710 }
4711 }
4712 else
4713 {
4714 /* STM of a list of registers which includes PC. Run the instruction
4715 as-is, but out of line: this will store the wrong value for the PC,
4716 so we must manually fix up the memory in the cleanup routine.
4717 Doing things this way has the advantage that we can auto-detect
4718 the offset of the PC write (which is architecture-dependent) in
4719 the cleanup routine. */
4720 dsc->modinsn[0] = insn;
4721
4722 dsc->cleanup = &cleanup_block_store_pc;
4723 }
4724
4725 return 0;
4726}
4727
4728/* Cleanup/copy SVC (SWI) instructions. These two functions are overridden
4729 for Linux, where some SVC instructions must be treated specially. */
4730
4731static void
4732cleanup_svc (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, struct regcache *regs,
4733 struct displaced_step_closure *dsc)
4734{
4735 CORE_ADDR from = dsc->insn_addr;
4736 CORE_ADDR resume_addr = from + 4;
4737
4738 if (debug_displaced)
4739 fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
4740 "%.8lx\n", (unsigned long) resume_addr);
4741
4742 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
4743}
4744
4745static int
4746copy_svc (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
4747 struct regcache *regs, struct displaced_step_closure *dsc)
4748{
4749 CORE_ADDR from = dsc->insn_addr;
4750
4751 /* Allow OS-specific code to override SVC handling. */
4752 if (dsc->u.svc.copy_svc_os)
4753 return dsc->u.svc.copy_svc_os (gdbarch, insn, to, regs, dsc);
4754
4755 if (debug_displaced)
4756 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
4757 (unsigned long) insn);
4758
4759 /* Preparation: none.
4760 Insn: unmodified svc.
4761 Cleanup: pc <- insn_addr + 4. */
4762
4763 dsc->modinsn[0] = insn;
4764
4765 dsc->cleanup = &cleanup_svc;
4766 /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
4767 instruction. */
4768 dsc->wrote_to_pc = 1;
4769
4770 return 0;
4771}
4772
4773/* Copy undefined instructions. */
4774
4775static int
4776copy_undef (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
4777 struct displaced_step_closure *dsc)
4778{
4779 if (debug_displaced)
4780 fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn %.8lx\n",
4781 (unsigned long) insn);
4782
4783 dsc->modinsn[0] = insn;
4784
4785 return 0;
4786}
4787
4788/* Copy unpredictable instructions. */
4789
4790static int
4791copy_unpred (struct gdbarch *gdbarch ATTRIBUTE_UNUSED, uint32_t insn,
4792 struct displaced_step_closure *dsc)
4793{
4794 if (debug_displaced)
4795 fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
4796 "%.8lx\n", (unsigned long) insn);
4797
4798 dsc->modinsn[0] = insn;
4799
4800 return 0;
4801}
4802
4803/* The decode_* functions are instruction decoding helpers. They mostly follow
4804 the presentation in the ARM ARM. */
4805
4806static int
4807decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
4808 struct regcache *regs,
4809 struct displaced_step_closure *dsc)
4810{
4811 unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
4812 unsigned int rn = bits (insn, 16, 19);
4813
4814 if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0xe) == 0x0)
4815 return copy_unmodified (gdbarch, insn, "cps", dsc);
4816 else if (op1 == 0x10 && op2 == 0x0 && (rn & 0xe) == 0x1)
4817 return copy_unmodified (gdbarch, insn, "setend", dsc);
4818 else if ((op1 & 0x60) == 0x20)
4819 return copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
4820 else if ((op1 & 0x71) == 0x40)
4821 return copy_unmodified (gdbarch, insn, "neon elt/struct load/store", dsc);
4822 else if ((op1 & 0x77) == 0x41)
4823 return copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
4824 else if ((op1 & 0x77) == 0x45)
4825 return copy_preload (gdbarch, insn, regs, dsc); /* pli. */
4826 else if ((op1 & 0x77) == 0x51)
4827 {
4828 if (rn != 0xf)
4829 return copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
4830 else
4831 return copy_unpred (gdbarch, insn, dsc);
4832 }
4833 else if ((op1 & 0x77) == 0x55)
4834 return copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
4835 else if (op1 == 0x57)
4836 switch (op2)
4837 {
4838 case 0x1: return copy_unmodified (gdbarch, insn, "clrex", dsc);
4839 case 0x4: return copy_unmodified (gdbarch, insn, "dsb", dsc);
4840 case 0x5: return copy_unmodified (gdbarch, insn, "dmb", dsc);
4841 case 0x6: return copy_unmodified (gdbarch, insn, "isb", dsc);
4842 default: return copy_unpred (gdbarch, insn, dsc);
4843 }
4844 else if ((op1 & 0x63) == 0x43)
4845 return copy_unpred (gdbarch, insn, dsc);
4846 else if ((op2 & 0x1) == 0x0)
4847 switch (op1 & ~0x80)
4848 {
4849 case 0x61:
4850 return copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
4851 case 0x65:
4852 return copy_preload_reg (gdbarch, insn, regs, dsc); /* pli reg. */
4853 case 0x71: case 0x75:
4854 /* pld/pldw reg. */
4855 return copy_preload_reg (gdbarch, insn, regs, dsc);
4856 case 0x63: case 0x67: case 0x73: case 0x77:
4857 return copy_unpred (gdbarch, insn, dsc);
4858 default:
4859 return copy_undef (gdbarch, insn, dsc);
4860 }
4861 else
4862 return copy_undef (gdbarch, insn, dsc); /* Probably unreachable. */
4863}
4864
4865static int
4866decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
4867 struct regcache *regs, struct displaced_step_closure *dsc)
4868{
4869 if (bit (insn, 27) == 0)
4870 return decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
4871 /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx. */
4872 else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
4873 {
4874 case 0x0: case 0x2:
4875 return copy_unmodified (gdbarch, insn, "srs", dsc);
4876
4877 case 0x1: case 0x3:
4878 return copy_unmodified (gdbarch, insn, "rfe", dsc);
4879
4880 case 0x4: case 0x5: case 0x6: case 0x7:
4881 return copy_b_bl_blx (gdbarch, insn, regs, dsc);
4882
4883 case 0x8:
4884 switch ((insn & 0xe00000) >> 21)
4885 {
4886 case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
4887 /* stc/stc2. */
4888 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4889
4890 case 0x2:
4891 return copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
4892
4893 default:
4894 return copy_undef (gdbarch, insn, dsc);
4895 }
4896
4897 case 0x9:
4898 {
4899 int rn_f = (bits (insn, 16, 19) == 0xf);
4900 switch ((insn & 0xe00000) >> 21)
4901 {
4902 case 0x1: case 0x3:
4903 /* ldc/ldc2 imm (undefined for rn == pc). */
4904 return rn_f ? copy_undef (gdbarch, insn, dsc)
4905 : copy_copro_load_store (gdbarch, insn, regs, dsc);
4906
4907 case 0x2:
4908 return copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
4909
4910 case 0x4: case 0x5: case 0x6: case 0x7:
4911 /* ldc/ldc2 lit (undefined for rn != pc). */
4912 return rn_f ? copy_copro_load_store (gdbarch, insn, regs, dsc)
4913 : copy_undef (gdbarch, insn, dsc);
4914
4915 default:
4916 return copy_undef (gdbarch, insn, dsc);
4917 }
4918 }
4919
4920 case 0xa:
4921 return copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
4922
4923 case 0xb:
4924 if (bits (insn, 16, 19) == 0xf)
4925 /* ldc/ldc2 lit. */
4926 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4927 else
4928 return copy_undef (gdbarch, insn, dsc);
4929
4930 case 0xc:
4931 if (bit (insn, 4))
4932 return copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
4933 else
4934 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4935
4936 case 0xd:
4937 if (bit (insn, 4))
4938 return copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
4939 else
4940 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4941
4942 default:
4943 return copy_undef (gdbarch, insn, dsc);
4944 }
4945}
4946
4947/* Decode miscellaneous instructions in dp/misc encoding space. */
4948
4949static int
4950decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
4951 struct regcache *regs, struct displaced_step_closure *dsc)
4952{
4953 unsigned int op2 = bits (insn, 4, 6);
4954 unsigned int op = bits (insn, 21, 22);
4955 unsigned int op1 = bits (insn, 16, 19);
4956
4957 switch (op2)
4958 {
4959 case 0x0:
4960 return copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
4961
4962 case 0x1:
4963 if (op == 0x1) /* bx. */
4964 return copy_bx_blx_reg (gdbarch, insn, regs, dsc);
4965 else if (op == 0x3)
4966 return copy_unmodified (gdbarch, insn, "clz", dsc);
4967 else
4968 return copy_undef (gdbarch, insn, dsc);
4969
4970 case 0x2:
4971 if (op == 0x1)
4972 /* Not really supported. */
4973 return copy_unmodified (gdbarch, insn, "bxj", dsc);
4974 else
4975 return copy_undef (gdbarch, insn, dsc);
4976
4977 case 0x3:
4978 if (op == 0x1)
4979 return copy_bx_blx_reg (gdbarch, insn, regs, dsc); /* blx register. */
4980 else
4981 return copy_undef (gdbarch, insn, dsc);
4982
4983 case 0x5:
4984 return copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
4985
4986 case 0x7:
4987 if (op == 0x1)
4988 return copy_unmodified (gdbarch, insn, "bkpt", dsc);
4989 else if (op == 0x3)
4990 /* Not really supported. */
4991 return copy_unmodified (gdbarch, insn, "smc", dsc);
4992
4993 default:
4994 return copy_undef (gdbarch, insn, dsc);
4995 }
4996}
4997
4998static int
4999decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5000 struct displaced_step_closure *dsc)
5001{
5002 if (bit (insn, 25))
5003 switch (bits (insn, 20, 24))
5004 {
5005 case 0x10:
5006 return copy_unmodified (gdbarch, insn, "movw", dsc);
5007
5008 case 0x14:
5009 return copy_unmodified (gdbarch, insn, "movt", dsc);
5010
5011 case 0x12: case 0x16:
5012 return copy_unmodified (gdbarch, insn, "msr imm", dsc);
5013
5014 default:
5015 return copy_alu_imm (gdbarch, insn, regs, dsc);
5016 }
5017 else
5018 {
5019 uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
5020
5021 if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
5022 return copy_alu_reg (gdbarch, insn, regs, dsc);
5023 else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
5024 return copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
5025 else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
5026 return decode_miscellaneous (gdbarch, insn, regs, dsc);
5027 else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
5028 return copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
5029 else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
5030 return copy_unmodified (gdbarch, insn, "mul/mla", dsc);
5031 else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
5032 return copy_unmodified (gdbarch, insn, "synch", dsc);
5033 else if (op2 == 0xb || (op2 & 0xd) == 0xd)
5034 /* 2nd arg means "unpriveleged". */
5035 return copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
5036 dsc);
5037 }
5038
5039 /* Should be unreachable. */
5040 return 1;
5041}
5042
5043static int
5044decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
5045 struct regcache *regs,
5046 struct displaced_step_closure *dsc)
5047{
5048 int a = bit (insn, 25), b = bit (insn, 4);
5049 uint32_t op1 = bits (insn, 20, 24);
5050 int rn_f = bits (insn, 16, 19) == 0xf;
5051
5052 if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
5053 || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
5054 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 0, 0);
5055 else if ((!a && (op1 & 0x17) == 0x02)
5056 || (a && (op1 & 0x17) == 0x02 && !b))
5057 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 0, 1);
5058 else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
5059 || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
5060 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 0, 0);
5061 else if ((!a && (op1 & 0x17) == 0x03)
5062 || (a && (op1 & 0x17) == 0x03 && !b))
5063 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 0, 1);
5064 else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
5065 || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
5066 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
5067 else if ((!a && (op1 & 0x17) == 0x06)
5068 || (a && (op1 & 0x17) == 0x06 && !b))
5069 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
5070 else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
5071 || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
5072 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
5073 else if ((!a && (op1 & 0x17) == 0x07)
5074 || (a && (op1 & 0x17) == 0x07 && !b))
5075 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
5076
5077 /* Should be unreachable. */
5078 return 1;
5079}
5080
5081static int
5082decode_media (struct gdbarch *gdbarch, uint32_t insn,
5083 struct displaced_step_closure *dsc)
5084{
5085 switch (bits (insn, 20, 24))
5086 {
5087 case 0x00: case 0x01: case 0x02: case 0x03:
5088 return copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
5089
5090 case 0x04: case 0x05: case 0x06: case 0x07:
5091 return copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
5092
5093 case 0x08: case 0x09: case 0x0a: case 0x0b:
5094 case 0x0c: case 0x0d: case 0x0e: case 0x0f:
5095 return copy_unmodified (gdbarch, insn,
5096 "decode/pack/unpack/saturate/reverse", dsc);
5097
5098 case 0x18:
5099 if (bits (insn, 5, 7) == 0) /* op2. */
5100 {
5101 if (bits (insn, 12, 15) == 0xf)
5102 return copy_unmodified (gdbarch, insn, "usad8", dsc);
5103 else
5104 return copy_unmodified (gdbarch, insn, "usada8", dsc);
5105 }
5106 else
5107 return copy_undef (gdbarch, insn, dsc);
5108
5109 case 0x1a: case 0x1b:
5110 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
5111 return copy_unmodified (gdbarch, insn, "sbfx", dsc);
5112 else
5113 return copy_undef (gdbarch, insn, dsc);
5114
5115 case 0x1c: case 0x1d:
5116 if (bits (insn, 5, 6) == 0x0) /* op2[1:0]. */
5117 {
5118 if (bits (insn, 0, 3) == 0xf)
5119 return copy_unmodified (gdbarch, insn, "bfc", dsc);
5120 else
5121 return copy_unmodified (gdbarch, insn, "bfi", dsc);
5122 }
5123 else
5124 return copy_undef (gdbarch, insn, dsc);
5125
5126 case 0x1e: case 0x1f:
5127 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
5128 return copy_unmodified (gdbarch, insn, "ubfx", dsc);
5129 else
5130 return copy_undef (gdbarch, insn, dsc);
5131 }
5132
5133 /* Should be unreachable. */
5134 return 1;
5135}
5136
5137static int
5138decode_b_bl_ldmstm (struct gdbarch *gdbarch, int32_t insn,
5139 struct regcache *regs, struct displaced_step_closure *dsc)
5140{
5141 if (bit (insn, 25))
5142 return copy_b_bl_blx (gdbarch, insn, regs, dsc);
5143 else
5144 return copy_block_xfer (gdbarch, insn, regs, dsc);
5145}
5146
5147static int
5148decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
5149 struct regcache *regs, struct displaced_step_closure *dsc)
5150{
5151 unsigned int opcode = bits (insn, 20, 24);
5152
5153 switch (opcode)
5154 {
5155 case 0x04: case 0x05: /* VFP/Neon mrrc/mcrr. */
5156 return copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
5157
5158 case 0x08: case 0x0a: case 0x0c: case 0x0e:
5159 case 0x12: case 0x16:
5160 return copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
5161
5162 case 0x09: case 0x0b: case 0x0d: case 0x0f:
5163 case 0x13: case 0x17:
5164 return copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
5165
5166 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
5167 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
5168 /* Note: no writeback for these instructions. Bit 25 will always be
5169 zero though (via caller), so the following works OK. */
5170 return copy_copro_load_store (gdbarch, insn, regs, dsc);
5171 }
5172
5173 /* Should be unreachable. */
5174 return 1;
5175}
5176
5177static int
5178decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
5179 struct regcache *regs, struct displaced_step_closure *dsc)
5180{
5181 unsigned int op1 = bits (insn, 20, 25);
5182 int op = bit (insn, 4);
5183 unsigned int coproc = bits (insn, 8, 11);
5184 unsigned int rn = bits (insn, 16, 19);
5185
5186 if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
5187 return decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
5188 else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
5189 && (coproc & 0xe) != 0xa)
5190 /* stc/stc2. */
5191 return copy_copro_load_store (gdbarch, insn, regs, dsc);
5192 else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
5193 && (coproc & 0xe) != 0xa)
5194 /* ldc/ldc2 imm/lit. */
5195 return copy_copro_load_store (gdbarch, insn, regs, dsc);
5196 else if ((op1 & 0x3e) == 0x00)
5197 return copy_undef (gdbarch, insn, dsc);
5198 else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
5199 return copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
5200 else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
5201 return copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
5202 else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
5203 return copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
5204 else if ((op1 & 0x30) == 0x20 && !op)
5205 {
5206 if ((coproc & 0xe) == 0xa)
5207 return copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
5208 else
5209 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
5210 }
5211 else if ((op1 & 0x30) == 0x20 && op)
5212 return copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
5213 else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
5214 return copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
5215 else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
5216 return copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
5217 else if ((op1 & 0x30) == 0x30)
5218 return copy_svc (gdbarch, insn, to, regs, dsc);
5219 else
5220 return copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
5221}
5222
5223void
5224arm_process_displaced_insn (struct gdbarch *gdbarch, uint32_t insn,
5225 CORE_ADDR from, CORE_ADDR to, struct regcache *regs,
5226 struct displaced_step_closure *dsc)
5227{
5228 int err = 0;
5229
5230 if (!displaced_in_arm_mode (regs))
5231 error (_("Displaced stepping is only supported in ARM mode"));
5232
5233 /* Most displaced instructions use a 1-instruction scratch space, so set this
5234 here and override below if/when necessary. */
5235 dsc->numinsns = 1;
5236 dsc->insn_addr = from;
5237 dsc->scratch_base = to;
5238 dsc->cleanup = NULL;
5239 dsc->wrote_to_pc = 0;
5240
5241 if ((insn & 0xf0000000) == 0xf0000000)
5242 err = decode_unconditional (gdbarch, insn, regs, dsc);
5243 else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
5244 {
5245 case 0x0: case 0x1: case 0x2: case 0x3:
5246 err = decode_dp_misc (gdbarch, insn, regs, dsc);
5247 break;
5248
5249 case 0x4: case 0x5: case 0x6:
5250 err = decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
5251 break;
5252
5253 case 0x7:
5254 err = decode_media (gdbarch, insn, dsc);
5255 break;
5256
5257 case 0x8: case 0x9: case 0xa: case 0xb:
5258 err = decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
5259 break;
5260
5261 case 0xc: case 0xd: case 0xe: case 0xf:
5262 err = decode_svc_copro (gdbarch, insn, to, regs, dsc);
5263 break;
5264 }
5265
5266 if (err)
5267 internal_error (__FILE__, __LINE__,
5268 _("arm_process_displaced_insn: Instruction decode error"));
5269}
5270
5271/* Actually set up the scratch space for a displaced instruction. */
5272
5273void
5274arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
5275 CORE_ADDR to, struct displaced_step_closure *dsc)
5276{
5277 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5278 unsigned int i;
5279 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5280
5281 /* Poke modified instruction(s). */
5282 for (i = 0; i < dsc->numinsns; i++)
5283 {
5284 if (debug_displaced)
5285 fprintf_unfiltered (gdb_stdlog, "displaced: writing insn %.8lx at "
5286 "%.8lx\n", (unsigned long) dsc->modinsn[i],
5287 (unsigned long) to + i * 4);
5288 write_memory_unsigned_integer (to + i * 4, 4, byte_order_for_code,
5289 dsc->modinsn[i]);
5290 }
5291
5292 /* Put breakpoint afterwards. */
5293 write_memory (to + dsc->numinsns * 4, tdep->arm_breakpoint,
5294 tdep->arm_breakpoint_size);
5295
5296 if (debug_displaced)
5297 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
5298 paddress (gdbarch, from), paddress (gdbarch, to));
5299}
5300
5301/* Entry point for copying an instruction into scratch space for displaced
5302 stepping. */
5303
5304struct displaced_step_closure *
5305arm_displaced_step_copy_insn (struct gdbarch *gdbarch,
5306 CORE_ADDR from, CORE_ADDR to,
5307 struct regcache *regs)
5308{
5309 struct displaced_step_closure *dsc
5310 = xmalloc (sizeof (struct displaced_step_closure));
5311 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5312 uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
5313
5314 if (debug_displaced)
5315 fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
5316 "at %.8lx\n", (unsigned long) insn,
5317 (unsigned long) from);
5318
5319 arm_process_displaced_insn (gdbarch, insn, from, to, regs, dsc);
5320 arm_displaced_init_closure (gdbarch, from, to, dsc);
5321
5322 return dsc;
5323}
5324
5325/* Entry point for cleaning things up after a displaced instruction has been
5326 single-stepped. */
5327
5328void
5329arm_displaced_step_fixup (struct gdbarch *gdbarch,
5330 struct displaced_step_closure *dsc,
5331 CORE_ADDR from, CORE_ADDR to,
5332 struct regcache *regs)
5333{
5334 if (dsc->cleanup)
5335 dsc->cleanup (gdbarch, regs, dsc);
5336
5337 if (!dsc->wrote_to_pc)
5338 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, dsc->insn_addr + 4);
5339}
5340
5341#include "bfd-in2.h"
5342#include "libcoff.h"
5343
5344static int
5345gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
5346{
5347 if (arm_pc_is_thumb (memaddr))
5348 {
5349 static asymbol *asym;
5350 static combined_entry_type ce;
5351 static struct coff_symbol_struct csym;
5352 static struct bfd fake_bfd;
5353 static bfd_target fake_target;
5354
5355 if (csym.native == NULL)
5356 {
5357 /* Create a fake symbol vector containing a Thumb symbol.
5358 This is solely so that the code in print_insn_little_arm()
5359 and print_insn_big_arm() in opcodes/arm-dis.c will detect
5360 the presence of a Thumb symbol and switch to decoding
5361 Thumb instructions. */
5362
5363 fake_target.flavour = bfd_target_coff_flavour;
5364 fake_bfd.xvec = &fake_target;
5365 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
5366 csym.native = &ce;
5367 csym.symbol.the_bfd = &fake_bfd;
5368 csym.symbol.name = "fake";
5369 asym = (asymbol *) & csym;
5370 }
5371
5372 memaddr = UNMAKE_THUMB_ADDR (memaddr);
5373 info->symbols = &asym;
5374 }
5375 else
5376 info->symbols = NULL;
5377
5378 if (info->endian == BFD_ENDIAN_BIG)
5379 return print_insn_big_arm (memaddr, info);
5380 else
5381 return print_insn_little_arm (memaddr, info);
5382}
5383
5384/* The following define instruction sequences that will cause ARM
5385 cpu's to take an undefined instruction trap. These are used to
5386 signal a breakpoint to GDB.
5387
5388 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
5389 modes. A different instruction is required for each mode. The ARM
5390 cpu's can also be big or little endian. Thus four different
5391 instructions are needed to support all cases.
5392
5393 Note: ARMv4 defines several new instructions that will take the
5394 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
5395 not in fact add the new instructions. The new undefined
5396 instructions in ARMv4 are all instructions that had no defined
5397 behaviour in earlier chips. There is no guarantee that they will
5398 raise an exception, but may be treated as NOP's. In practice, it
5399 may only safe to rely on instructions matching:
5400
5401 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
5402 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
5403 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
5404
5405 Even this may only true if the condition predicate is true. The
5406 following use a condition predicate of ALWAYS so it is always TRUE.
5407
5408 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
5409 and NetBSD all use a software interrupt rather than an undefined
5410 instruction to force a trap. This can be handled by by the
5411 abi-specific code during establishment of the gdbarch vector. */
5412
5413#define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
5414#define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
5415#define THUMB_LE_BREAKPOINT {0xbe,0xbe}
5416#define THUMB_BE_BREAKPOINT {0xbe,0xbe}
5417
5418static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
5419static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
5420static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
5421static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
5422
5423/* Determine the type and size of breakpoint to insert at PCPTR. Uses
5424 the program counter value to determine whether a 16-bit or 32-bit
5425 breakpoint should be used. It returns a pointer to a string of
5426 bytes that encode a breakpoint instruction, stores the length of
5427 the string to *lenptr, and adjusts the program counter (if
5428 necessary) to point to the actual memory location where the
5429 breakpoint should be inserted. */
5430
5431static const unsigned char *
5432arm_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
5433{
5434 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
177321bd 5435 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
cca44b1b
JB
5436
5437 if (arm_pc_is_thumb (*pcptr))
5438 {
5439 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
177321bd
DJ
5440
5441 /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
5442 check whether we are replacing a 32-bit instruction. */
5443 if (tdep->thumb2_breakpoint != NULL)
5444 {
5445 gdb_byte buf[2];
5446 if (target_read_memory (*pcptr, buf, 2) == 0)
5447 {
5448 unsigned short inst1;
5449 inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
5450 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
5451 {
5452 *lenptr = tdep->thumb2_breakpoint_size;
5453 return tdep->thumb2_breakpoint;
5454 }
5455 }
5456 }
5457
cca44b1b
JB
5458 *lenptr = tdep->thumb_breakpoint_size;
5459 return tdep->thumb_breakpoint;
5460 }
5461 else
5462 {
5463 *lenptr = tdep->arm_breakpoint_size;
5464 return tdep->arm_breakpoint;
5465 }
5466}
5467
177321bd
DJ
5468static void
5469arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
5470 int *kindptr)
5471{
5472 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5473
5474 arm_breakpoint_from_pc (gdbarch, pcptr, kindptr);
5475
5476 if (arm_pc_is_thumb (*pcptr) && *kindptr == 4)
5477 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so
5478 that this is not confused with a 32-bit ARM breakpoint. */
5479 *kindptr = 3;
5480}
5481
cca44b1b
JB
5482/* Extract from an array REGBUF containing the (raw) register state a
5483 function return value of type TYPE, and copy that, in virtual
5484 format, into VALBUF. */
5485
5486static void
5487arm_extract_return_value (struct type *type, struct regcache *regs,
5488 gdb_byte *valbuf)
5489{
5490 struct gdbarch *gdbarch = get_regcache_arch (regs);
5491 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5492
5493 if (TYPE_CODE_FLT == TYPE_CODE (type))
5494 {
5495 switch (gdbarch_tdep (gdbarch)->fp_model)
5496 {
5497 case ARM_FLOAT_FPA:
5498 {
5499 /* The value is in register F0 in internal format. We need to
5500 extract the raw value and then convert it to the desired
5501 internal type. */
5502 bfd_byte tmpbuf[FP_REGISTER_SIZE];
5503
5504 regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
5505 convert_from_extended (floatformat_from_type (type), tmpbuf,
5506 valbuf, gdbarch_byte_order (gdbarch));
5507 }
5508 break;
5509
5510 case ARM_FLOAT_SOFT_FPA:
5511 case ARM_FLOAT_SOFT_VFP:
5512 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5513 not using the VFP ABI code. */
5514 case ARM_FLOAT_VFP:
5515 regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
5516 if (TYPE_LENGTH (type) > 4)
5517 regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
5518 valbuf + INT_REGISTER_SIZE);
5519 break;
5520
5521 default:
5522 internal_error
5523 (__FILE__, __LINE__,
5524 _("arm_extract_return_value: Floating point model not supported"));
5525 break;
5526 }
5527 }
5528 else if (TYPE_CODE (type) == TYPE_CODE_INT
5529 || TYPE_CODE (type) == TYPE_CODE_CHAR
5530 || TYPE_CODE (type) == TYPE_CODE_BOOL
5531 || TYPE_CODE (type) == TYPE_CODE_PTR
5532 || TYPE_CODE (type) == TYPE_CODE_REF
5533 || TYPE_CODE (type) == TYPE_CODE_ENUM)
5534 {
5535 /* If the the type is a plain integer, then the access is
5536 straight-forward. Otherwise we have to play around a bit more. */
5537 int len = TYPE_LENGTH (type);
5538 int regno = ARM_A1_REGNUM;
5539 ULONGEST tmp;
5540
5541 while (len > 0)
5542 {
5543 /* By using store_unsigned_integer we avoid having to do
5544 anything special for small big-endian values. */
5545 regcache_cooked_read_unsigned (regs, regno++, &tmp);
5546 store_unsigned_integer (valbuf,
5547 (len > INT_REGISTER_SIZE
5548 ? INT_REGISTER_SIZE : len),
5549 byte_order, tmp);
5550 len -= INT_REGISTER_SIZE;
5551 valbuf += INT_REGISTER_SIZE;
5552 }
5553 }
5554 else
5555 {
5556 /* For a structure or union the behaviour is as if the value had
5557 been stored to word-aligned memory and then loaded into
5558 registers with 32-bit load instruction(s). */
5559 int len = TYPE_LENGTH (type);
5560 int regno = ARM_A1_REGNUM;
5561 bfd_byte tmpbuf[INT_REGISTER_SIZE];
5562
5563 while (len > 0)
5564 {
5565 regcache_cooked_read (regs, regno++, tmpbuf);
5566 memcpy (valbuf, tmpbuf,
5567 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
5568 len -= INT_REGISTER_SIZE;
5569 valbuf += INT_REGISTER_SIZE;
5570 }
5571 }
5572}
5573
5574
5575/* Will a function return an aggregate type in memory or in a
5576 register? Return 0 if an aggregate type can be returned in a
5577 register, 1 if it must be returned in memory. */
5578
5579static int
5580arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
5581{
5582 int nRc;
5583 enum type_code code;
5584
5585 CHECK_TYPEDEF (type);
5586
5587 /* In the ARM ABI, "integer" like aggregate types are returned in
5588 registers. For an aggregate type to be integer like, its size
5589 must be less than or equal to INT_REGISTER_SIZE and the
5590 offset of each addressable subfield must be zero. Note that bit
5591 fields are not addressable, and all addressable subfields of
5592 unions always start at offset zero.
5593
5594 This function is based on the behaviour of GCC 2.95.1.
5595 See: gcc/arm.c: arm_return_in_memory() for details.
5596
5597 Note: All versions of GCC before GCC 2.95.2 do not set up the
5598 parameters correctly for a function returning the following
5599 structure: struct { float f;}; This should be returned in memory,
5600 not a register. Richard Earnshaw sent me a patch, but I do not
5601 know of any way to detect if a function like the above has been
5602 compiled with the correct calling convention. */
5603
5604 /* All aggregate types that won't fit in a register must be returned
5605 in memory. */
5606 if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
5607 {
5608 return 1;
5609 }
5610
5611 /* The AAPCS says all aggregates not larger than a word are returned
5612 in a register. */
5613 if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
5614 return 0;
5615
5616 /* The only aggregate types that can be returned in a register are
5617 structs and unions. Arrays must be returned in memory. */
5618 code = TYPE_CODE (type);
5619 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
5620 {
5621 return 1;
5622 }
5623
5624 /* Assume all other aggregate types can be returned in a register.
5625 Run a check for structures, unions and arrays. */
5626 nRc = 0;
5627
5628 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
5629 {
5630 int i;
5631 /* Need to check if this struct/union is "integer" like. For
5632 this to be true, its size must be less than or equal to
5633 INT_REGISTER_SIZE and the offset of each addressable
5634 subfield must be zero. Note that bit fields are not
5635 addressable, and unions always start at offset zero. If any
5636 of the subfields is a floating point type, the struct/union
5637 cannot be an integer type. */
5638
5639 /* For each field in the object, check:
5640 1) Is it FP? --> yes, nRc = 1;
67255d04
RE
5641 2) Is it addressable (bitpos != 0) and
5642 not packed (bitsize == 0)?
5643 --> yes, nRc = 1
5644 */
5645
5646 for (i = 0; i < TYPE_NFIELDS (type); i++)
5647 {
5648 enum type_code field_type_code;
44e1a9eb 5649 field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i)));
67255d04
RE
5650
5651 /* Is it a floating point type field? */
5652 if (field_type_code == TYPE_CODE_FLT)
5653 {
5654 nRc = 1;
5655 break;
5656 }
5657
5658 /* If bitpos != 0, then we have to care about it. */
5659 if (TYPE_FIELD_BITPOS (type, i) != 0)
5660 {
5661 /* Bitfields are not addressable. If the field bitsize is
5662 zero, then the field is not packed. Hence it cannot be
5663 a bitfield or any other packed type. */
5664 if (TYPE_FIELD_BITSIZE (type, i) == 0)
5665 {
5666 nRc = 1;
5667 break;
5668 }
5669 }
5670 }
5671 }
5672
5673 return nRc;
5674}
5675
34e8f22d
RE
5676/* Write into appropriate registers a function return value of type
5677 TYPE, given in virtual format. */
5678
5679static void
b508a996 5680arm_store_return_value (struct type *type, struct regcache *regs,
5238cf52 5681 const gdb_byte *valbuf)
34e8f22d 5682{
be8626e0 5683 struct gdbarch *gdbarch = get_regcache_arch (regs);
e17a4113 5684 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
be8626e0 5685
34e8f22d
RE
5686 if (TYPE_CODE (type) == TYPE_CODE_FLT)
5687 {
7a5ea0d4 5688 char buf[MAX_REGISTER_SIZE];
34e8f22d 5689
be8626e0 5690 switch (gdbarch_tdep (gdbarch)->fp_model)
08216dd7
RE
5691 {
5692 case ARM_FLOAT_FPA:
5693
be8626e0
MD
5694 convert_to_extended (floatformat_from_type (type), buf, valbuf,
5695 gdbarch_byte_order (gdbarch));
b508a996 5696 regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
08216dd7
RE
5697 break;
5698
fd50bc42 5699 case ARM_FLOAT_SOFT_FPA:
08216dd7 5700 case ARM_FLOAT_SOFT_VFP:
90445bd3
DJ
5701 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5702 not using the VFP ABI code. */
5703 case ARM_FLOAT_VFP:
b508a996
RE
5704 regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
5705 if (TYPE_LENGTH (type) > 4)
5706 regcache_cooked_write (regs, ARM_A1_REGNUM + 1,
7a5ea0d4 5707 valbuf + INT_REGISTER_SIZE);
08216dd7
RE
5708 break;
5709
5710 default:
5711 internal_error
5712 (__FILE__, __LINE__,
edefbb7c 5713 _("arm_store_return_value: Floating point model not supported"));
08216dd7
RE
5714 break;
5715 }
34e8f22d 5716 }
b508a996
RE
5717 else if (TYPE_CODE (type) == TYPE_CODE_INT
5718 || TYPE_CODE (type) == TYPE_CODE_CHAR
5719 || TYPE_CODE (type) == TYPE_CODE_BOOL
5720 || TYPE_CODE (type) == TYPE_CODE_PTR
5721 || TYPE_CODE (type) == TYPE_CODE_REF
5722 || TYPE_CODE (type) == TYPE_CODE_ENUM)
5723 {
5724 if (TYPE_LENGTH (type) <= 4)
5725 {
5726 /* Values of one word or less are zero/sign-extended and
5727 returned in r0. */
7a5ea0d4 5728 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
5729 LONGEST val = unpack_long (type, valbuf);
5730
e17a4113 5731 store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
b508a996
RE
5732 regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
5733 }
5734 else
5735 {
5736 /* Integral values greater than one word are stored in consecutive
5737 registers starting with r0. This will always be a multiple of
5738 the regiser size. */
5739 int len = TYPE_LENGTH (type);
5740 int regno = ARM_A1_REGNUM;
5741
5742 while (len > 0)
5743 {
5744 regcache_cooked_write (regs, regno++, valbuf);
7a5ea0d4
DJ
5745 len -= INT_REGISTER_SIZE;
5746 valbuf += INT_REGISTER_SIZE;
b508a996
RE
5747 }
5748 }
5749 }
34e8f22d 5750 else
b508a996
RE
5751 {
5752 /* For a structure or union the behaviour is as if the value had
5753 been stored to word-aligned memory and then loaded into
5754 registers with 32-bit load instruction(s). */
5755 int len = TYPE_LENGTH (type);
5756 int regno = ARM_A1_REGNUM;
7a5ea0d4 5757 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
5758
5759 while (len > 0)
5760 {
5761 memcpy (tmpbuf, valbuf,
7a5ea0d4 5762 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
b508a996 5763 regcache_cooked_write (regs, regno++, tmpbuf);
7a5ea0d4
DJ
5764 len -= INT_REGISTER_SIZE;
5765 valbuf += INT_REGISTER_SIZE;
b508a996
RE
5766 }
5767 }
34e8f22d
RE
5768}
5769
2af48f68
PB
5770
5771/* Handle function return values. */
5772
5773static enum return_value_convention
c055b101
CV
5774arm_return_value (struct gdbarch *gdbarch, struct type *func_type,
5775 struct type *valtype, struct regcache *regcache,
5776 gdb_byte *readbuf, const gdb_byte *writebuf)
2af48f68 5777{
7c00367c 5778 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
90445bd3
DJ
5779 enum arm_vfp_cprc_base_type vfp_base_type;
5780 int vfp_base_count;
5781
5782 if (arm_vfp_abi_for_function (gdbarch, func_type)
5783 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
5784 {
5785 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
5786 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
5787 int i;
5788 for (i = 0; i < vfp_base_count; i++)
5789 {
58d6951d
DJ
5790 if (reg_char == 'q')
5791 {
5792 if (writebuf)
5793 arm_neon_quad_write (gdbarch, regcache, i,
5794 writebuf + i * unit_length);
5795
5796 if (readbuf)
5797 arm_neon_quad_read (gdbarch, regcache, i,
5798 readbuf + i * unit_length);
5799 }
5800 else
5801 {
5802 char name_buf[4];
5803 int regnum;
5804
5805 sprintf (name_buf, "%c%d", reg_char, i);
5806 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
5807 strlen (name_buf));
5808 if (writebuf)
5809 regcache_cooked_write (regcache, regnum,
5810 writebuf + i * unit_length);
5811 if (readbuf)
5812 regcache_cooked_read (regcache, regnum,
5813 readbuf + i * unit_length);
5814 }
90445bd3
DJ
5815 }
5816 return RETURN_VALUE_REGISTER_CONVENTION;
5817 }
7c00367c 5818
2af48f68
PB
5819 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
5820 || TYPE_CODE (valtype) == TYPE_CODE_UNION
5821 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
5822 {
7c00367c
MK
5823 if (tdep->struct_return == pcc_struct_return
5824 || arm_return_in_memory (gdbarch, valtype))
2af48f68
PB
5825 return RETURN_VALUE_STRUCT_CONVENTION;
5826 }
5827
5828 if (writebuf)
5829 arm_store_return_value (valtype, regcache, writebuf);
5830
5831 if (readbuf)
5832 arm_extract_return_value (valtype, regcache, readbuf);
5833
5834 return RETURN_VALUE_REGISTER_CONVENTION;
5835}
5836
5837
9df628e0 5838static int
60ade65d 5839arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
9df628e0 5840{
e17a4113
UW
5841 struct gdbarch *gdbarch = get_frame_arch (frame);
5842 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5843 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
9df628e0 5844 CORE_ADDR jb_addr;
7a5ea0d4 5845 char buf[INT_REGISTER_SIZE];
9df628e0 5846
60ade65d 5847 jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
9df628e0
RE
5848
5849 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
7a5ea0d4 5850 INT_REGISTER_SIZE))
9df628e0
RE
5851 return 0;
5852
e17a4113 5853 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
9df628e0
RE
5854 return 1;
5855}
5856
faa95490
DJ
5857/* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
5858 return the target PC. Otherwise return 0. */
c906108c
SS
5859
5860CORE_ADDR
52f729a7 5861arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
c906108c 5862{
c5aa993b 5863 char *name;
faa95490 5864 int namelen;
c906108c
SS
5865 CORE_ADDR start_addr;
5866
5867 /* Find the starting address and name of the function containing the PC. */
5868 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
5869 return 0;
5870
faa95490
DJ
5871 /* If PC is in a Thumb call or return stub, return the address of the
5872 target PC, which is in a register. The thunk functions are called
5873 _call_via_xx, where x is the register name. The possible names
3d8d5e79
DJ
5874 are r0-r9, sl, fp, ip, sp, and lr. ARM RealView has similar
5875 functions, named __ARM_call_via_r[0-7]. */
5876 if (strncmp (name, "_call_via_", 10) == 0
5877 || strncmp (name, "__ARM_call_via_", strlen ("__ARM_call_via_")) == 0)
c906108c 5878 {
ed9a39eb
JM
5879 /* Use the name suffix to determine which register contains the
5880 target PC. */
c5aa993b
JM
5881 static char *table[15] =
5882 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
5883 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
5884 };
c906108c 5885 int regno;
faa95490 5886 int offset = strlen (name) - 2;
c906108c
SS
5887
5888 for (regno = 0; regno <= 14; regno++)
faa95490 5889 if (strcmp (&name[offset], table[regno]) == 0)
52f729a7 5890 return get_frame_register_unsigned (frame, regno);
c906108c 5891 }
ed9a39eb 5892
faa95490
DJ
5893 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
5894 non-interworking calls to foo. We could decode the stubs
5895 to find the target but it's easier to use the symbol table. */
5896 namelen = strlen (name);
5897 if (name[0] == '_' && name[1] == '_'
5898 && ((namelen > 2 + strlen ("_from_thumb")
5899 && strncmp (name + namelen - strlen ("_from_thumb"), "_from_thumb",
5900 strlen ("_from_thumb")) == 0)
5901 || (namelen > 2 + strlen ("_from_arm")
5902 && strncmp (name + namelen - strlen ("_from_arm"), "_from_arm",
5903 strlen ("_from_arm")) == 0)))
5904 {
5905 char *target_name;
5906 int target_len = namelen - 2;
5907 struct minimal_symbol *minsym;
5908 struct objfile *objfile;
5909 struct obj_section *sec;
5910
5911 if (name[namelen - 1] == 'b')
5912 target_len -= strlen ("_from_thumb");
5913 else
5914 target_len -= strlen ("_from_arm");
5915
5916 target_name = alloca (target_len + 1);
5917 memcpy (target_name, name + 2, target_len);
5918 target_name[target_len] = '\0';
5919
5920 sec = find_pc_section (pc);
5921 objfile = (sec == NULL) ? NULL : sec->objfile;
5922 minsym = lookup_minimal_symbol (target_name, NULL, objfile);
5923 if (minsym != NULL)
5924 return SYMBOL_VALUE_ADDRESS (minsym);
5925 else
5926 return 0;
5927 }
5928
c5aa993b 5929 return 0; /* not a stub */
c906108c
SS
5930}
5931
afd7eef0
RE
5932static void
5933set_arm_command (char *args, int from_tty)
5934{
edefbb7c
AC
5935 printf_unfiltered (_("\
5936\"set arm\" must be followed by an apporpriate subcommand.\n"));
afd7eef0
RE
5937 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
5938}
5939
5940static void
5941show_arm_command (char *args, int from_tty)
5942{
26304000 5943 cmd_show_list (showarmcmdlist, from_tty, "");
afd7eef0
RE
5944}
5945
28e97307
DJ
5946static void
5947arm_update_current_architecture (void)
fd50bc42 5948{
28e97307 5949 struct gdbarch_info info;
fd50bc42 5950
28e97307 5951 /* If the current architecture is not ARM, we have nothing to do. */
1cf3db46 5952 if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_arm)
28e97307 5953 return;
fd50bc42 5954
28e97307
DJ
5955 /* Update the architecture. */
5956 gdbarch_info_init (&info);
fd50bc42 5957
28e97307
DJ
5958 if (!gdbarch_update_p (info))
5959 internal_error (__FILE__, __LINE__, "could not update architecture");
fd50bc42
RE
5960}
5961
5962static void
5963set_fp_model_sfunc (char *args, int from_tty,
5964 struct cmd_list_element *c)
5965{
5966 enum arm_float_model fp_model;
5967
5968 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
5969 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
5970 {
5971 arm_fp_model = fp_model;
5972 break;
5973 }
5974
5975 if (fp_model == ARM_FLOAT_LAST)
edefbb7c 5976 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
fd50bc42
RE
5977 current_fp_model);
5978
28e97307 5979 arm_update_current_architecture ();
fd50bc42
RE
5980}
5981
5982static void
08546159
AC
5983show_fp_model (struct ui_file *file, int from_tty,
5984 struct cmd_list_element *c, const char *value)
fd50bc42 5985{
1cf3db46 5986 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
fd50bc42 5987
28e97307 5988 if (arm_fp_model == ARM_FLOAT_AUTO
1cf3db46 5989 && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_arm)
28e97307
DJ
5990 fprintf_filtered (file, _("\
5991The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
5992 fp_model_strings[tdep->fp_model]);
5993 else
5994 fprintf_filtered (file, _("\
5995The current ARM floating point model is \"%s\".\n"),
5996 fp_model_strings[arm_fp_model]);
5997}
5998
5999static void
6000arm_set_abi (char *args, int from_tty,
6001 struct cmd_list_element *c)
6002{
6003 enum arm_abi_kind arm_abi;
6004
6005 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
6006 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
6007 {
6008 arm_abi_global = arm_abi;
6009 break;
6010 }
6011
6012 if (arm_abi == ARM_ABI_LAST)
6013 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
6014 arm_abi_string);
6015
6016 arm_update_current_architecture ();
6017}
6018
6019static void
6020arm_show_abi (struct ui_file *file, int from_tty,
6021 struct cmd_list_element *c, const char *value)
6022{
1cf3db46 6023 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
28e97307
DJ
6024
6025 if (arm_abi_global == ARM_ABI_AUTO
1cf3db46 6026 && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_arm)
28e97307
DJ
6027 fprintf_filtered (file, _("\
6028The current ARM ABI is \"auto\" (currently \"%s\").\n"),
6029 arm_abi_strings[tdep->arm_abi]);
6030 else
6031 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
6032 arm_abi_string);
fd50bc42
RE
6033}
6034
0428b8f5
DJ
6035static void
6036arm_show_fallback_mode (struct ui_file *file, int from_tty,
6037 struct cmd_list_element *c, const char *value)
6038{
1cf3db46 6039 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
0428b8f5
DJ
6040
6041 fprintf_filtered (file, _("\
6042The current execution mode assumed (when symbols are unavailable) is \"%s\".\n"),
6043 arm_fallback_mode_string);
6044}
6045
6046static void
6047arm_show_force_mode (struct ui_file *file, int from_tty,
6048 struct cmd_list_element *c, const char *value)
6049{
1cf3db46 6050 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
0428b8f5
DJ
6051
6052 fprintf_filtered (file, _("\
6053The current execution mode assumed (even when symbols are available) is \"%s\".\n"),
6054 arm_force_mode_string);
6055}
6056
afd7eef0
RE
6057/* If the user changes the register disassembly style used for info
6058 register and other commands, we have to also switch the style used
6059 in opcodes for disassembly output. This function is run in the "set
6060 arm disassembly" command, and does that. */
bc90b915
FN
6061
6062static void
afd7eef0 6063set_disassembly_style_sfunc (char *args, int from_tty,
bc90b915
FN
6064 struct cmd_list_element *c)
6065{
afd7eef0 6066 set_disassembly_style ();
bc90b915
FN
6067}
6068\f
966fbf70 6069/* Return the ARM register name corresponding to register I. */
a208b0cb 6070static const char *
d93859e2 6071arm_register_name (struct gdbarch *gdbarch, int i)
966fbf70 6072{
58d6951d
DJ
6073 const int num_regs = gdbarch_num_regs (gdbarch);
6074
6075 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
6076 && i >= num_regs && i < num_regs + 32)
6077 {
6078 static const char *const vfp_pseudo_names[] = {
6079 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
6080 "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
6081 "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
6082 "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
6083 };
6084
6085 return vfp_pseudo_names[i - num_regs];
6086 }
6087
6088 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
6089 && i >= num_regs + 32 && i < num_regs + 32 + 16)
6090 {
6091 static const char *const neon_pseudo_names[] = {
6092 "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
6093 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
6094 };
6095
6096 return neon_pseudo_names[i - num_regs - 32];
6097 }
6098
ff6f572f
DJ
6099 if (i >= ARRAY_SIZE (arm_register_names))
6100 /* These registers are only supported on targets which supply
6101 an XML description. */
6102 return "";
6103
966fbf70
RE
6104 return arm_register_names[i];
6105}
6106
bc90b915 6107static void
afd7eef0 6108set_disassembly_style (void)
bc90b915 6109{
123dc839 6110 int current;
bc90b915 6111
123dc839
DJ
6112 /* Find the style that the user wants. */
6113 for (current = 0; current < num_disassembly_options; current++)
6114 if (disassembly_style == valid_disassembly_styles[current])
6115 break;
6116 gdb_assert (current < num_disassembly_options);
bc90b915 6117
94c30b78 6118 /* Synchronize the disassembler. */
bc90b915
FN
6119 set_arm_regname_option (current);
6120}
6121
082fc60d
RE
6122/* Test whether the coff symbol specific value corresponds to a Thumb
6123 function. */
6124
6125static int
6126coff_sym_is_thumb (int val)
6127{
f8bf5763
PM
6128 return (val == C_THUMBEXT
6129 || val == C_THUMBSTAT
6130 || val == C_THUMBEXTFUNC
6131 || val == C_THUMBSTATFUNC
6132 || val == C_THUMBLABEL);
082fc60d
RE
6133}
6134
6135/* arm_coff_make_msymbol_special()
6136 arm_elf_make_msymbol_special()
6137
6138 These functions test whether the COFF or ELF symbol corresponds to
6139 an address in thumb code, and set a "special" bit in a minimal
6140 symbol to indicate that it does. */
6141
34e8f22d 6142static void
082fc60d
RE
6143arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
6144{
6145 /* Thumb symbols are of type STT_LOPROC, (synonymous with
6146 STT_ARM_TFUNC). */
6147 if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
6148 == STT_LOPROC)
6149 MSYMBOL_SET_SPECIAL (msym);
6150}
6151
34e8f22d 6152static void
082fc60d
RE
6153arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
6154{
6155 if (coff_sym_is_thumb (val))
6156 MSYMBOL_SET_SPECIAL (msym);
6157}
6158
60c5725c 6159static void
c1bd65d0 6160arm_objfile_data_free (struct objfile *objfile, void *arg)
60c5725c
DJ
6161{
6162 struct arm_per_objfile *data = arg;
6163 unsigned int i;
6164
6165 for (i = 0; i < objfile->obfd->section_count; i++)
6166 VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
6167}
6168
6169static void
6170arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
6171 asymbol *sym)
6172{
6173 const char *name = bfd_asymbol_name (sym);
6174 struct arm_per_objfile *data;
6175 VEC(arm_mapping_symbol_s) **map_p;
6176 struct arm_mapping_symbol new_map_sym;
6177
6178 gdb_assert (name[0] == '$');
6179 if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
6180 return;
6181
6182 data = objfile_data (objfile, arm_objfile_data_key);
6183 if (data == NULL)
6184 {
6185 data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
6186 struct arm_per_objfile);
6187 set_objfile_data (objfile, arm_objfile_data_key, data);
6188 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
6189 objfile->obfd->section_count,
6190 VEC(arm_mapping_symbol_s) *);
6191 }
6192 map_p = &data->section_maps[bfd_get_section (sym)->index];
6193
6194 new_map_sym.value = sym->value;
6195 new_map_sym.type = name[1];
6196
6197 /* Assume that most mapping symbols appear in order of increasing
6198 value. If they were randomly distributed, it would be faster to
6199 always push here and then sort at first use. */
6200 if (!VEC_empty (arm_mapping_symbol_s, *map_p))
6201 {
6202 struct arm_mapping_symbol *prev_map_sym;
6203
6204 prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
6205 if (prev_map_sym->value >= sym->value)
6206 {
6207 unsigned int idx;
6208 idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
6209 arm_compare_mapping_symbols);
6210 VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
6211 return;
6212 }
6213 }
6214
6215 VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
6216}
6217
756fe439 6218static void
61a1198a 6219arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
756fe439 6220{
61a1198a 6221 regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
756fe439
DJ
6222
6223 /* If necessary, set the T bit. */
6224 if (arm_apcs_32)
6225 {
61a1198a
UW
6226 ULONGEST val;
6227 regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
756fe439 6228 if (arm_pc_is_thumb (pc))
b39cc962 6229 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM, val | CPSR_T);
756fe439 6230 else
61a1198a 6231 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
b39cc962 6232 val & ~(ULONGEST) CPSR_T);
756fe439
DJ
6233 }
6234}
123dc839 6235
58d6951d
DJ
6236/* Read the contents of a NEON quad register, by reading from two
6237 double registers. This is used to implement the quad pseudo
6238 registers, and for argument passing in case the quad registers are
6239 missing; vectors are passed in quad registers when using the VFP
6240 ABI, even if a NEON unit is not present. REGNUM is the index of
6241 the quad register, in [0, 15]. */
6242
6243static void
6244arm_neon_quad_read (struct gdbarch *gdbarch, struct regcache *regcache,
6245 int regnum, gdb_byte *buf)
6246{
6247 char name_buf[4];
6248 gdb_byte reg_buf[8];
6249 int offset, double_regnum;
6250
6251 sprintf (name_buf, "d%d", regnum << 1);
6252 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6253 strlen (name_buf));
6254
6255 /* d0 is always the least significant half of q0. */
6256 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6257 offset = 8;
6258 else
6259 offset = 0;
6260
6261 regcache_raw_read (regcache, double_regnum, reg_buf);
6262 memcpy (buf + offset, reg_buf, 8);
6263
6264 offset = 8 - offset;
6265 regcache_raw_read (regcache, double_regnum + 1, reg_buf);
6266 memcpy (buf + offset, reg_buf, 8);
6267}
6268
6269static void
6270arm_pseudo_read (struct gdbarch *gdbarch, struct regcache *regcache,
6271 int regnum, gdb_byte *buf)
6272{
6273 const int num_regs = gdbarch_num_regs (gdbarch);
6274 char name_buf[4];
6275 gdb_byte reg_buf[8];
6276 int offset, double_regnum;
6277
6278 gdb_assert (regnum >= num_regs);
6279 regnum -= num_regs;
6280
6281 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
6282 /* Quad-precision register. */
6283 arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
6284 else
6285 {
6286 /* Single-precision register. */
6287 gdb_assert (regnum < 32);
6288
6289 /* s0 is always the least significant half of d0. */
6290 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6291 offset = (regnum & 1) ? 0 : 4;
6292 else
6293 offset = (regnum & 1) ? 4 : 0;
6294
6295 sprintf (name_buf, "d%d", regnum >> 1);
6296 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6297 strlen (name_buf));
6298
6299 regcache_raw_read (regcache, double_regnum, reg_buf);
6300 memcpy (buf, reg_buf + offset, 4);
6301 }
6302}
6303
6304/* Store the contents of BUF to a NEON quad register, by writing to
6305 two double registers. This is used to implement the quad pseudo
6306 registers, and for argument passing in case the quad registers are
6307 missing; vectors are passed in quad registers when using the VFP
6308 ABI, even if a NEON unit is not present. REGNUM is the index
6309 of the quad register, in [0, 15]. */
6310
6311static void
6312arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
6313 int regnum, const gdb_byte *buf)
6314{
6315 char name_buf[4];
6316 gdb_byte reg_buf[8];
6317 int offset, double_regnum;
6318
6319 sprintf (name_buf, "d%d", regnum << 1);
6320 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6321 strlen (name_buf));
6322
6323 /* d0 is always the least significant half of q0. */
6324 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6325 offset = 8;
6326 else
6327 offset = 0;
6328
6329 regcache_raw_write (regcache, double_regnum, buf + offset);
6330 offset = 8 - offset;
6331 regcache_raw_write (regcache, double_regnum + 1, buf + offset);
6332}
6333
6334static void
6335arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
6336 int regnum, const gdb_byte *buf)
6337{
6338 const int num_regs = gdbarch_num_regs (gdbarch);
6339 char name_buf[4];
6340 gdb_byte reg_buf[8];
6341 int offset, double_regnum;
6342
6343 gdb_assert (regnum >= num_regs);
6344 regnum -= num_regs;
6345
6346 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
6347 /* Quad-precision register. */
6348 arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
6349 else
6350 {
6351 /* Single-precision register. */
6352 gdb_assert (regnum < 32);
6353
6354 /* s0 is always the least significant half of d0. */
6355 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6356 offset = (regnum & 1) ? 0 : 4;
6357 else
6358 offset = (regnum & 1) ? 4 : 0;
6359
6360 sprintf (name_buf, "d%d", regnum >> 1);
6361 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6362 strlen (name_buf));
6363
6364 regcache_raw_read (regcache, double_regnum, reg_buf);
6365 memcpy (reg_buf + offset, buf, 4);
6366 regcache_raw_write (regcache, double_regnum, reg_buf);
6367 }
6368}
6369
123dc839
DJ
6370static struct value *
6371value_of_arm_user_reg (struct frame_info *frame, const void *baton)
6372{
6373 const int *reg_p = baton;
6374 return value_of_register (*reg_p, frame);
6375}
97e03143 6376\f
70f80edf
JT
6377static enum gdb_osabi
6378arm_elf_osabi_sniffer (bfd *abfd)
97e03143 6379{
2af48f68 6380 unsigned int elfosabi;
70f80edf 6381 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
97e03143 6382
70f80edf 6383 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
97e03143 6384
28e97307
DJ
6385 if (elfosabi == ELFOSABI_ARM)
6386 /* GNU tools use this value. Check note sections in this case,
6387 as well. */
6388 bfd_map_over_sections (abfd,
6389 generic_elf_osabi_sniff_abi_tag_sections,
6390 &osabi);
97e03143 6391
28e97307 6392 /* Anything else will be handled by the generic ELF sniffer. */
70f80edf 6393 return osabi;
97e03143
RE
6394}
6395
70f80edf 6396\f
da3c6d4a
MS
6397/* Initialize the current architecture based on INFO. If possible,
6398 re-use an architecture from ARCHES, which is a list of
6399 architectures already created during this debugging session.
97e03143 6400
da3c6d4a
MS
6401 Called e.g. at program startup, when reading a core file, and when
6402 reading a binary file. */
97e03143 6403
39bbf761
RE
6404static struct gdbarch *
6405arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
6406{
97e03143 6407 struct gdbarch_tdep *tdep;
39bbf761 6408 struct gdbarch *gdbarch;
28e97307
DJ
6409 struct gdbarch_list *best_arch;
6410 enum arm_abi_kind arm_abi = arm_abi_global;
6411 enum arm_float_model fp_model = arm_fp_model;
123dc839
DJ
6412 struct tdesc_arch_data *tdesc_data = NULL;
6413 int i;
58d6951d
DJ
6414 int have_vfp_registers = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
6415 int have_neon = 0;
ff6f572f 6416 int have_fpa_registers = 1;
123dc839
DJ
6417
6418 /* Check any target description for validity. */
6419 if (tdesc_has_registers (info.target_desc))
6420 {
6421 /* For most registers we require GDB's default names; but also allow
6422 the numeric names for sp / lr / pc, as a convenience. */
6423 static const char *const arm_sp_names[] = { "r13", "sp", NULL };
6424 static const char *const arm_lr_names[] = { "r14", "lr", NULL };
6425 static const char *const arm_pc_names[] = { "r15", "pc", NULL };
6426
6427 const struct tdesc_feature *feature;
58d6951d 6428 int valid_p;
123dc839
DJ
6429
6430 feature = tdesc_find_feature (info.target_desc,
6431 "org.gnu.gdb.arm.core");
6432 if (feature == NULL)
6433 return NULL;
6434
6435 tdesc_data = tdesc_data_alloc ();
6436
6437 valid_p = 1;
6438 for (i = 0; i < ARM_SP_REGNUM; i++)
6439 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6440 arm_register_names[i]);
6441 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6442 ARM_SP_REGNUM,
6443 arm_sp_names);
6444 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6445 ARM_LR_REGNUM,
6446 arm_lr_names);
6447 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6448 ARM_PC_REGNUM,
6449 arm_pc_names);
6450 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6451 ARM_PS_REGNUM, "cpsr");
6452
6453 if (!valid_p)
6454 {
6455 tdesc_data_cleanup (tdesc_data);
6456 return NULL;
6457 }
6458
6459 feature = tdesc_find_feature (info.target_desc,
6460 "org.gnu.gdb.arm.fpa");
6461 if (feature != NULL)
6462 {
6463 valid_p = 1;
6464 for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
6465 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6466 arm_register_names[i]);
6467 if (!valid_p)
6468 {
6469 tdesc_data_cleanup (tdesc_data);
6470 return NULL;
6471 }
6472 }
ff6f572f
DJ
6473 else
6474 have_fpa_registers = 0;
6475
6476 feature = tdesc_find_feature (info.target_desc,
6477 "org.gnu.gdb.xscale.iwmmxt");
6478 if (feature != NULL)
6479 {
6480 static const char *const iwmmxt_names[] = {
6481 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
6482 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
6483 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
6484 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
6485 };
6486
6487 valid_p = 1;
6488 for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
6489 valid_p
6490 &= tdesc_numbered_register (feature, tdesc_data, i,
6491 iwmmxt_names[i - ARM_WR0_REGNUM]);
6492
6493 /* Check for the control registers, but do not fail if they
6494 are missing. */
6495 for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
6496 tdesc_numbered_register (feature, tdesc_data, i,
6497 iwmmxt_names[i - ARM_WR0_REGNUM]);
6498
6499 for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
6500 valid_p
6501 &= tdesc_numbered_register (feature, tdesc_data, i,
6502 iwmmxt_names[i - ARM_WR0_REGNUM]);
6503
6504 if (!valid_p)
6505 {
6506 tdesc_data_cleanup (tdesc_data);
6507 return NULL;
6508 }
6509 }
58d6951d
DJ
6510
6511 /* If we have a VFP unit, check whether the single precision registers
6512 are present. If not, then we will synthesize them as pseudo
6513 registers. */
6514 feature = tdesc_find_feature (info.target_desc,
6515 "org.gnu.gdb.arm.vfp");
6516 if (feature != NULL)
6517 {
6518 static const char *const vfp_double_names[] = {
6519 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
6520 "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
6521 "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
6522 "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
6523 };
6524
6525 /* Require the double precision registers. There must be either
6526 16 or 32. */
6527 valid_p = 1;
6528 for (i = 0; i < 32; i++)
6529 {
6530 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6531 ARM_D0_REGNUM + i,
6532 vfp_double_names[i]);
6533 if (!valid_p)
6534 break;
6535 }
6536
6537 if (!valid_p && i != 16)
6538 {
6539 tdesc_data_cleanup (tdesc_data);
6540 return NULL;
6541 }
6542
6543 if (tdesc_unnumbered_register (feature, "s0") == 0)
6544 have_vfp_pseudos = 1;
6545
6546 have_vfp_registers = 1;
6547
6548 /* If we have VFP, also check for NEON. The architecture allows
6549 NEON without VFP (integer vector operations only), but GDB
6550 does not support that. */
6551 feature = tdesc_find_feature (info.target_desc,
6552 "org.gnu.gdb.arm.neon");
6553 if (feature != NULL)
6554 {
6555 /* NEON requires 32 double-precision registers. */
6556 if (i != 32)
6557 {
6558 tdesc_data_cleanup (tdesc_data);
6559 return NULL;
6560 }
6561
6562 /* If there are quad registers defined by the stub, use
6563 their type; otherwise (normally) provide them with
6564 the default type. */
6565 if (tdesc_unnumbered_register (feature, "q0") == 0)
6566 have_neon_pseudos = 1;
6567
6568 have_neon = 1;
6569 }
6570 }
123dc839 6571 }
39bbf761 6572
28e97307
DJ
6573 /* If we have an object to base this architecture on, try to determine
6574 its ABI. */
39bbf761 6575
28e97307 6576 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
97e03143 6577 {
6b26d61a 6578 int ei_osabi, e_flags;
28e97307 6579
4be87837 6580 switch (bfd_get_flavour (info.abfd))
97e03143 6581 {
4be87837
DJ
6582 case bfd_target_aout_flavour:
6583 /* Assume it's an old APCS-style ABI. */
28e97307 6584 arm_abi = ARM_ABI_APCS;
4be87837 6585 break;
97e03143 6586
4be87837
DJ
6587 case bfd_target_coff_flavour:
6588 /* Assume it's an old APCS-style ABI. */
6589 /* XXX WinCE? */
28e97307
DJ
6590 arm_abi = ARM_ABI_APCS;
6591 break;
6592
6593 case bfd_target_elf_flavour:
6594 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
6b26d61a
MK
6595 e_flags = elf_elfheader (info.abfd)->e_flags;
6596
28e97307
DJ
6597 if (ei_osabi == ELFOSABI_ARM)
6598 {
6599 /* GNU tools used to use this value, but do not for EABI
6b26d61a
MK
6600 objects. There's nowhere to tag an EABI version
6601 anyway, so assume APCS. */
28e97307
DJ
6602 arm_abi = ARM_ABI_APCS;
6603 }
6604 else if (ei_osabi == ELFOSABI_NONE)
6605 {
6b26d61a 6606 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
28e97307
DJ
6607
6608 switch (eabi_ver)
6609 {
6610 case EF_ARM_EABI_UNKNOWN:
6611 /* Assume GNU tools. */
6612 arm_abi = ARM_ABI_APCS;
6613 break;
6614
6615 case EF_ARM_EABI_VER4:
625b5003 6616 case EF_ARM_EABI_VER5:
28e97307 6617 arm_abi = ARM_ABI_AAPCS;
90445bd3
DJ
6618 /* EABI binaries default to VFP float ordering.
6619 They may also contain build attributes that can
6620 be used to identify if the VFP argument-passing
6621 ABI is in use. */
2af48f68 6622 if (fp_model == ARM_FLOAT_AUTO)
90445bd3
DJ
6623 {
6624#ifdef HAVE_ELF
6625 switch (bfd_elf_get_obj_attr_int (info.abfd,
6626 OBJ_ATTR_PROC,
6627 Tag_ABI_VFP_args))
6628 {
6629 case 0:
6630 /* "The user intended FP parameter/result
6631 passing to conform to AAPCS, base
6632 variant". */
6633 fp_model = ARM_FLOAT_SOFT_VFP;
6634 break;
6635 case 1:
6636 /* "The user intended FP parameter/result
6637 passing to conform to AAPCS, VFP
6638 variant". */
6639 fp_model = ARM_FLOAT_VFP;
6640 break;
6641 case 2:
6642 /* "The user intended FP parameter/result
6643 passing to conform to tool chain-specific
6644 conventions" - we don't know any such
6645 conventions, so leave it as "auto". */
6646 break;
6647 default:
6648 /* Attribute value not mentioned in the
6649 October 2008 ABI, so leave it as
6650 "auto". */
6651 break;
6652 }
6653#else
6654 fp_model = ARM_FLOAT_SOFT_VFP;
6655#endif
6656 }
28e97307
DJ
6657 break;
6658
6659 default:
6b26d61a 6660 /* Leave it as "auto". */
28e97307 6661 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
6b26d61a
MK
6662 break;
6663 }
6664 }
6665
6666 if (fp_model == ARM_FLOAT_AUTO)
6667 {
6668 int e_flags = elf_elfheader (info.abfd)->e_flags;
6669
6670 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
6671 {
6672 case 0:
6673 /* Leave it as "auto". Strictly speaking this case
6674 means FPA, but almost nobody uses that now, and
6675 many toolchains fail to set the appropriate bits
6676 for the floating-point model they use. */
6677 break;
6678 case EF_ARM_SOFT_FLOAT:
6679 fp_model = ARM_FLOAT_SOFT_FPA;
6680 break;
6681 case EF_ARM_VFP_FLOAT:
6682 fp_model = ARM_FLOAT_VFP;
6683 break;
6684 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
6685 fp_model = ARM_FLOAT_SOFT_VFP;
28e97307
DJ
6686 break;
6687 }
6688 }
9d4fde75
SS
6689
6690 if (e_flags & EF_ARM_BE8)
6691 info.byte_order_for_code = BFD_ENDIAN_LITTLE;
6692
4be87837 6693 break;
97e03143 6694
4be87837 6695 default:
28e97307 6696 /* Leave it as "auto". */
50ceaba5 6697 break;
97e03143
RE
6698 }
6699 }
6700
28e97307
DJ
6701 /* If there is already a candidate, use it. */
6702 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
6703 best_arch != NULL;
6704 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
6705 {
b8926edc
DJ
6706 if (arm_abi != ARM_ABI_AUTO
6707 && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
28e97307
DJ
6708 continue;
6709
b8926edc
DJ
6710 if (fp_model != ARM_FLOAT_AUTO
6711 && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
28e97307
DJ
6712 continue;
6713
58d6951d
DJ
6714 /* There are various other properties in tdep that we do not
6715 need to check here: those derived from a target description,
6716 since gdbarches with a different target description are
6717 automatically disqualified. */
6718
28e97307
DJ
6719 /* Found a match. */
6720 break;
6721 }
97e03143 6722
28e97307 6723 if (best_arch != NULL)
123dc839
DJ
6724 {
6725 if (tdesc_data != NULL)
6726 tdesc_data_cleanup (tdesc_data);
6727 return best_arch->gdbarch;
6728 }
28e97307
DJ
6729
6730 tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
97e03143
RE
6731 gdbarch = gdbarch_alloc (&info, tdep);
6732
28e97307
DJ
6733 /* Record additional information about the architecture we are defining.
6734 These are gdbarch discriminators, like the OSABI. */
6735 tdep->arm_abi = arm_abi;
6736 tdep->fp_model = fp_model;
ff6f572f 6737 tdep->have_fpa_registers = have_fpa_registers;
58d6951d
DJ
6738 tdep->have_vfp_registers = have_vfp_registers;
6739 tdep->have_vfp_pseudos = have_vfp_pseudos;
6740 tdep->have_neon_pseudos = have_neon_pseudos;
6741 tdep->have_neon = have_neon;
08216dd7
RE
6742
6743 /* Breakpoints. */
9d4fde75 6744 switch (info.byte_order_for_code)
67255d04
RE
6745 {
6746 case BFD_ENDIAN_BIG:
66e810cd
RE
6747 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
6748 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
6749 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
6750 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
6751
67255d04
RE
6752 break;
6753
6754 case BFD_ENDIAN_LITTLE:
66e810cd
RE
6755 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
6756 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
6757 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
6758 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
6759
67255d04
RE
6760 break;
6761
6762 default:
6763 internal_error (__FILE__, __LINE__,
edefbb7c 6764 _("arm_gdbarch_init: bad byte order for float format"));
67255d04
RE
6765 }
6766
d7b486e7
RE
6767 /* On ARM targets char defaults to unsigned. */
6768 set_gdbarch_char_signed (gdbarch, 0);
6769
cca44b1b
JB
6770 /* Note: for displaced stepping, this includes the breakpoint, and one word
6771 of additional scratch space. This setting isn't used for anything beside
6772 displaced stepping at present. */
6773 set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
6774
9df628e0 6775 /* This should be low enough for everything. */
97e03143 6776 tdep->lowest_pc = 0x20;
94c30b78 6777 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
97e03143 6778
7c00367c
MK
6779 /* The default, for both APCS and AAPCS, is to return small
6780 structures in registers. */
6781 tdep->struct_return = reg_struct_return;
6782
2dd604e7 6783 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
f53f0d0b 6784 set_gdbarch_frame_align (gdbarch, arm_frame_align);
39bbf761 6785
756fe439
DJ
6786 set_gdbarch_write_pc (gdbarch, arm_write_pc);
6787
148754e5 6788 /* Frame handling. */
a262aec2 6789 set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
eb5492fa
DJ
6790 set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
6791 set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
6792
eb5492fa 6793 frame_base_set_default (gdbarch, &arm_normal_base);
148754e5 6794
34e8f22d
RE
6795 /* Address manipulation. */
6796 set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
6797 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
6798
34e8f22d
RE
6799 /* Advance PC across function entry code. */
6800 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
6801
190dce09
UW
6802 /* Skip trampolines. */
6803 set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
6804
34e8f22d
RE
6805 /* The stack grows downward. */
6806 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6807
6808 /* Breakpoint manipulation. */
6809 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
177321bd
DJ
6810 set_gdbarch_remote_breakpoint_from_pc (gdbarch,
6811 arm_remote_breakpoint_from_pc);
34e8f22d
RE
6812
6813 /* Information about registers, etc. */
0ba6dca9 6814 set_gdbarch_deprecated_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
34e8f22d
RE
6815 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
6816 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
ff6f572f 6817 set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
7a5ea0d4 6818 set_gdbarch_register_type (gdbarch, arm_register_type);
34e8f22d 6819
ff6f572f
DJ
6820 /* This "info float" is FPA-specific. Use the generic version if we
6821 do not have FPA. */
6822 if (gdbarch_tdep (gdbarch)->have_fpa_registers)
6823 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
6824
26216b98 6825 /* Internal <-> external register number maps. */
ff6f572f 6826 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
26216b98
AC
6827 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
6828
34e8f22d
RE
6829 set_gdbarch_register_name (gdbarch, arm_register_name);
6830
6831 /* Returning results. */
2af48f68 6832 set_gdbarch_return_value (gdbarch, arm_return_value);
34e8f22d 6833
03d48a7d
RE
6834 /* Disassembly. */
6835 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
6836
34e8f22d
RE
6837 /* Minsymbol frobbing. */
6838 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
6839 set_gdbarch_coff_make_msymbol_special (gdbarch,
6840 arm_coff_make_msymbol_special);
60c5725c 6841 set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
34e8f22d 6842
f9d67f43
DJ
6843 /* Thumb-2 IT block support. */
6844 set_gdbarch_adjust_breakpoint_address (gdbarch,
6845 arm_adjust_breakpoint_address);
6846
0d5de010
DJ
6847 /* Virtual tables. */
6848 set_gdbarch_vbit_in_delta (gdbarch, 1);
6849
97e03143 6850 /* Hook in the ABI-specific overrides, if they have been registered. */
4be87837 6851 gdbarch_init_osabi (info, gdbarch);
97e03143 6852
b39cc962
DJ
6853 dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
6854
eb5492fa 6855 /* Add some default predicates. */
a262aec2
DJ
6856 frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
6857 dwarf2_append_unwinders (gdbarch);
6858 frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
eb5492fa 6859
97e03143
RE
6860 /* Now we have tuned the configuration, set a few final things,
6861 based on what the OS ABI has told us. */
6862
b8926edc
DJ
6863 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
6864 binaries are always marked. */
6865 if (tdep->arm_abi == ARM_ABI_AUTO)
6866 tdep->arm_abi = ARM_ABI_APCS;
6867
6868 /* We used to default to FPA for generic ARM, but almost nobody
6869 uses that now, and we now provide a way for the user to force
6870 the model. So default to the most useful variant. */
6871 if (tdep->fp_model == ARM_FLOAT_AUTO)
6872 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
6873
9df628e0
RE
6874 if (tdep->jb_pc >= 0)
6875 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
6876
08216dd7 6877 /* Floating point sizes and format. */
8da61cc4 6878 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
b8926edc 6879 if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
08216dd7 6880 {
8da61cc4
DJ
6881 set_gdbarch_double_format
6882 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
6883 set_gdbarch_long_double_format
6884 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
6885 }
6886 else
6887 {
6888 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
6889 set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
08216dd7
RE
6890 }
6891
58d6951d
DJ
6892 if (have_vfp_pseudos)
6893 {
6894 /* NOTE: These are the only pseudo registers used by
6895 the ARM target at the moment. If more are added, a
6896 little more care in numbering will be needed. */
6897
6898 int num_pseudos = 32;
6899 if (have_neon_pseudos)
6900 num_pseudos += 16;
6901 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
6902 set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
6903 set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
6904 }
6905
123dc839 6906 if (tdesc_data)
58d6951d
DJ
6907 {
6908 set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
6909
6910 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
6911
6912 /* Override tdesc_register_type to adjust the types of VFP
6913 registers for NEON. */
6914 set_gdbarch_register_type (gdbarch, arm_register_type);
6915 }
123dc839
DJ
6916
6917 /* Add standard register aliases. We add aliases even for those
6918 nanes which are used by the current architecture - it's simpler,
6919 and does no harm, since nothing ever lists user registers. */
6920 for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
6921 user_reg_add (gdbarch, arm_register_aliases[i].name,
6922 value_of_arm_user_reg, &arm_register_aliases[i].regnum);
6923
39bbf761
RE
6924 return gdbarch;
6925}
6926
97e03143 6927static void
2af46ca0 6928arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
97e03143 6929{
2af46ca0 6930 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
97e03143
RE
6931
6932 if (tdep == NULL)
6933 return;
6934
edefbb7c 6935 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
97e03143
RE
6936 (unsigned long) tdep->lowest_pc);
6937}
6938
a78f21af
AC
6939extern initialize_file_ftype _initialize_arm_tdep; /* -Wmissing-prototypes */
6940
c906108c 6941void
ed9a39eb 6942_initialize_arm_tdep (void)
c906108c 6943{
bc90b915
FN
6944 struct ui_file *stb;
6945 long length;
26304000 6946 struct cmd_list_element *new_set, *new_show;
53904c9e
AC
6947 const char *setname;
6948 const char *setdesc;
4bd7b427 6949 const char *const *regnames;
bc90b915
FN
6950 int numregs, i, j;
6951 static char *helptext;
edefbb7c
AC
6952 char regdesc[1024], *rdptr = regdesc;
6953 size_t rest = sizeof (regdesc);
085dd6e6 6954
42cf1509 6955 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
97e03143 6956
60c5725c 6957 arm_objfile_data_key
c1bd65d0 6958 = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
60c5725c 6959
70f80edf
JT
6960 /* Register an ELF OS ABI sniffer for ARM binaries. */
6961 gdbarch_register_osabi_sniffer (bfd_arch_arm,
6962 bfd_target_elf_flavour,
6963 arm_elf_osabi_sniffer);
6964
94c30b78 6965 /* Get the number of possible sets of register names defined in opcodes. */
afd7eef0
RE
6966 num_disassembly_options = get_arm_regname_num_options ();
6967
6968 /* Add root prefix command for all "set arm"/"show arm" commands. */
6969 add_prefix_cmd ("arm", no_class, set_arm_command,
edefbb7c 6970 _("Various ARM-specific commands."),
afd7eef0
RE
6971 &setarmcmdlist, "set arm ", 0, &setlist);
6972
6973 add_prefix_cmd ("arm", no_class, show_arm_command,
edefbb7c 6974 _("Various ARM-specific commands."),
afd7eef0 6975 &showarmcmdlist, "show arm ", 0, &showlist);
bc90b915 6976
94c30b78 6977 /* Sync the opcode insn printer with our register viewer. */
bc90b915 6978 parse_arm_disassembler_option ("reg-names-std");
c5aa993b 6979
eefe576e
AC
6980 /* Initialize the array that will be passed to
6981 add_setshow_enum_cmd(). */
afd7eef0
RE
6982 valid_disassembly_styles
6983 = xmalloc ((num_disassembly_options + 1) * sizeof (char *));
6984 for (i = 0; i < num_disassembly_options; i++)
bc90b915
FN
6985 {
6986 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
afd7eef0 6987 valid_disassembly_styles[i] = setname;
edefbb7c
AC
6988 length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
6989 rdptr += length;
6990 rest -= length;
123dc839
DJ
6991 /* When we find the default names, tell the disassembler to use
6992 them. */
bc90b915
FN
6993 if (!strcmp (setname, "std"))
6994 {
afd7eef0 6995 disassembly_style = setname;
bc90b915
FN
6996 set_arm_regname_option (i);
6997 }
6998 }
94c30b78 6999 /* Mark the end of valid options. */
afd7eef0 7000 valid_disassembly_styles[num_disassembly_options] = NULL;
c906108c 7001
edefbb7c
AC
7002 /* Create the help text. */
7003 stb = mem_fileopen ();
7004 fprintf_unfiltered (stb, "%s%s%s",
7005 _("The valid values are:\n"),
7006 regdesc,
7007 _("The default is \"std\"."));
759ef836 7008 helptext = ui_file_xstrdup (stb, NULL);
bc90b915 7009 ui_file_delete (stb);
ed9a39eb 7010
edefbb7c
AC
7011 add_setshow_enum_cmd("disassembler", no_class,
7012 valid_disassembly_styles, &disassembly_style,
7013 _("Set the disassembly style."),
7014 _("Show the disassembly style."),
7015 helptext,
2c5b56ce 7016 set_disassembly_style_sfunc,
7915a72c 7017 NULL, /* FIXME: i18n: The disassembly style is \"%s\". */
7376b4c2 7018 &setarmcmdlist, &showarmcmdlist);
edefbb7c
AC
7019
7020 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
7021 _("Set usage of ARM 32-bit mode."),
7022 _("Show usage of ARM 32-bit mode."),
7023 _("When off, a 26-bit PC will be used."),
2c5b56ce 7024 NULL,
7915a72c 7025 NULL, /* FIXME: i18n: Usage of ARM 32-bit mode is %s. */
26304000 7026 &setarmcmdlist, &showarmcmdlist);
c906108c 7027
fd50bc42 7028 /* Add a command to allow the user to force the FPU model. */
edefbb7c
AC
7029 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
7030 _("Set the floating point type."),
7031 _("Show the floating point type."),
7032 _("auto - Determine the FP typefrom the OS-ABI.\n\
7033softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
7034fpa - FPA co-processor (GCC compiled).\n\
7035softvfp - Software FP with pure-endian doubles.\n\
7036vfp - VFP co-processor."),
edefbb7c 7037 set_fp_model_sfunc, show_fp_model,
7376b4c2 7038 &setarmcmdlist, &showarmcmdlist);
fd50bc42 7039
28e97307
DJ
7040 /* Add a command to allow the user to force the ABI. */
7041 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
7042 _("Set the ABI."),
7043 _("Show the ABI."),
7044 NULL, arm_set_abi, arm_show_abi,
7045 &setarmcmdlist, &showarmcmdlist);
7046
0428b8f5
DJ
7047 /* Add two commands to allow the user to force the assumed
7048 execution mode. */
7049 add_setshow_enum_cmd ("fallback-mode", class_support,
7050 arm_mode_strings, &arm_fallback_mode_string,
7051 _("Set the mode assumed when symbols are unavailable."),
7052 _("Show the mode assumed when symbols are unavailable."),
7053 NULL, NULL, arm_show_fallback_mode,
7054 &setarmcmdlist, &showarmcmdlist);
7055 add_setshow_enum_cmd ("force-mode", class_support,
7056 arm_mode_strings, &arm_force_mode_string,
7057 _("Set the mode assumed even when symbols are available."),
7058 _("Show the mode assumed even when symbols are available."),
7059 NULL, NULL, arm_show_force_mode,
7060 &setarmcmdlist, &showarmcmdlist);
7061
6529d2dd 7062 /* Debugging flag. */
edefbb7c
AC
7063 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
7064 _("Set ARM debugging."),
7065 _("Show ARM debugging."),
7066 _("When on, arm-specific debugging is enabled."),
2c5b56ce 7067 NULL,
7915a72c 7068 NULL, /* FIXME: i18n: "ARM debugging is %s. */
26304000 7069 &setdebuglist, &showdebuglist);
c906108c 7070}
This page took 1.000369 seconds and 4 git commands to generate.