PR 11899
[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 *
8c6363cf 1700push_stack_item (struct stack_item *prev, const void *contents, int len)
2dd604e7
RE
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;
8c6363cf 2041 const 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);
8c6363cf 2051 val = value_contents (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
f96b8fa0 2147 && TYPE_CODE_FUNC == TYPE_CODE (check_typedef (target_type)))
2dd604e7 2148 {
e17a4113 2149 CORE_ADDR regval = extract_unsigned_integer (val, len, byte_order);
2dd604e7
RE
2150 if (arm_pc_is_thumb (regval))
2151 {
8c6363cf
TT
2152 bfd_byte *copy = alloca (len);
2153 store_unsigned_integer (copy, len, byte_order,
e17a4113 2154 MAKE_THUMB_ADDR (regval));
8c6363cf 2155 val = copy;
2dd604e7
RE
2156 }
2157 }
2158
2159 /* Copy the argument to general registers or the stack in
2160 register-sized pieces. Large arguments are split between
2161 registers and stack. */
2162 while (len > 0)
2163 {
f0c9063c 2164 int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
2dd604e7 2165
90445bd3 2166 if (may_use_core_reg && argreg <= ARM_LAST_ARG_REGNUM)
2dd604e7
RE
2167 {
2168 /* The argument is being passed in a general purpose
2169 register. */
e17a4113
UW
2170 CORE_ADDR regval
2171 = extract_unsigned_integer (val, partial_len, byte_order);
2172 if (byte_order == BFD_ENDIAN_BIG)
8bf8793c 2173 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
2dd604e7
RE
2174 if (arm_debug)
2175 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
c9f4d572
UW
2176 argnum,
2177 gdbarch_register_name
2af46ca0 2178 (gdbarch, argreg),
f0c9063c 2179 phex (regval, INT_REGISTER_SIZE));
2dd604e7
RE
2180 regcache_cooked_write_unsigned (regcache, argreg, regval);
2181 argreg++;
2182 }
2183 else
2184 {
2185 /* Push the arguments onto the stack. */
2186 if (arm_debug)
2187 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
2188 argnum, nstack);
f0c9063c
UW
2189 si = push_stack_item (si, val, INT_REGISTER_SIZE);
2190 nstack += INT_REGISTER_SIZE;
2dd604e7
RE
2191 }
2192
2193 len -= partial_len;
2194 val += partial_len;
2195 }
2196 }
2197 /* If we have an odd number of words to push, then decrement the stack
2198 by one word now, so first stack argument will be dword aligned. */
2199 if (nstack & 4)
2200 sp -= 4;
2201
2202 while (si)
2203 {
2204 sp -= si->len;
2205 write_memory (sp, si->data, si->len);
2206 si = pop_stack_item (si);
2207 }
2208
2209 /* Finally, update teh SP register. */
2210 regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
2211
2212 return sp;
2213}
2214
f53f0d0b
PB
2215
2216/* Always align the frame to an 8-byte boundary. This is required on
2217 some platforms and harmless on the rest. */
2218
2219static CORE_ADDR
2220arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
2221{
2222 /* Align the stack to eight bytes. */
2223 return sp & ~ (CORE_ADDR) 7;
2224}
2225
c906108c 2226static void
ed9a39eb 2227print_fpu_flags (int flags)
c906108c 2228{
c5aa993b
JM
2229 if (flags & (1 << 0))
2230 fputs ("IVO ", stdout);
2231 if (flags & (1 << 1))
2232 fputs ("DVZ ", stdout);
2233 if (flags & (1 << 2))
2234 fputs ("OFL ", stdout);
2235 if (flags & (1 << 3))
2236 fputs ("UFL ", stdout);
2237 if (flags & (1 << 4))
2238 fputs ("INX ", stdout);
2239 putchar ('\n');
c906108c
SS
2240}
2241
5e74b15c
RE
2242/* Print interesting information about the floating point processor
2243 (if present) or emulator. */
34e8f22d 2244static void
d855c300 2245arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
23e3a7ac 2246 struct frame_info *frame, const char *args)
c906108c 2247{
9c9acae0 2248 unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
c5aa993b
JM
2249 int type;
2250
2251 type = (status >> 24) & 127;
edefbb7c
AC
2252 if (status & (1 << 31))
2253 printf (_("Hardware FPU type %d\n"), type);
2254 else
2255 printf (_("Software FPU type %d\n"), type);
2256 /* i18n: [floating point unit] mask */
2257 fputs (_("mask: "), stdout);
c5aa993b 2258 print_fpu_flags (status >> 16);
edefbb7c
AC
2259 /* i18n: [floating point unit] flags */
2260 fputs (_("flags: "), stdout);
c5aa993b 2261 print_fpu_flags (status);
c906108c
SS
2262}
2263
27067745
UW
2264/* Construct the ARM extended floating point type. */
2265static struct type *
2266arm_ext_type (struct gdbarch *gdbarch)
2267{
2268 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2269
2270 if (!tdep->arm_ext_type)
2271 tdep->arm_ext_type
e9bb382b 2272 = arch_float_type (gdbarch, -1, "builtin_type_arm_ext",
27067745
UW
2273 floatformats_arm_ext);
2274
2275 return tdep->arm_ext_type;
2276}
2277
58d6951d
DJ
2278static struct type *
2279arm_neon_double_type (struct gdbarch *gdbarch)
2280{
2281 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2282
2283 if (tdep->neon_double_type == NULL)
2284 {
2285 struct type *t, *elem;
2286
2287 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_d",
2288 TYPE_CODE_UNION);
2289 elem = builtin_type (gdbarch)->builtin_uint8;
2290 append_composite_type_field (t, "u8", init_vector_type (elem, 8));
2291 elem = builtin_type (gdbarch)->builtin_uint16;
2292 append_composite_type_field (t, "u16", init_vector_type (elem, 4));
2293 elem = builtin_type (gdbarch)->builtin_uint32;
2294 append_composite_type_field (t, "u32", init_vector_type (elem, 2));
2295 elem = builtin_type (gdbarch)->builtin_uint64;
2296 append_composite_type_field (t, "u64", elem);
2297 elem = builtin_type (gdbarch)->builtin_float;
2298 append_composite_type_field (t, "f32", init_vector_type (elem, 2));
2299 elem = builtin_type (gdbarch)->builtin_double;
2300 append_composite_type_field (t, "f64", elem);
2301
2302 TYPE_VECTOR (t) = 1;
2303 TYPE_NAME (t) = "neon_d";
2304 tdep->neon_double_type = t;
2305 }
2306
2307 return tdep->neon_double_type;
2308}
2309
2310/* FIXME: The vector types are not correctly ordered on big-endian
2311 targets. Just as s0 is the low bits of d0, d0[0] is also the low
2312 bits of d0 - regardless of what unit size is being held in d0. So
2313 the offset of the first uint8 in d0 is 7, but the offset of the
2314 first float is 4. This code works as-is for little-endian
2315 targets. */
2316
2317static struct type *
2318arm_neon_quad_type (struct gdbarch *gdbarch)
2319{
2320 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2321
2322 if (tdep->neon_quad_type == NULL)
2323 {
2324 struct type *t, *elem;
2325
2326 t = arch_composite_type (gdbarch, "__gdb_builtin_type_neon_q",
2327 TYPE_CODE_UNION);
2328 elem = builtin_type (gdbarch)->builtin_uint8;
2329 append_composite_type_field (t, "u8", init_vector_type (elem, 16));
2330 elem = builtin_type (gdbarch)->builtin_uint16;
2331 append_composite_type_field (t, "u16", init_vector_type (elem, 8));
2332 elem = builtin_type (gdbarch)->builtin_uint32;
2333 append_composite_type_field (t, "u32", init_vector_type (elem, 4));
2334 elem = builtin_type (gdbarch)->builtin_uint64;
2335 append_composite_type_field (t, "u64", init_vector_type (elem, 2));
2336 elem = builtin_type (gdbarch)->builtin_float;
2337 append_composite_type_field (t, "f32", init_vector_type (elem, 4));
2338 elem = builtin_type (gdbarch)->builtin_double;
2339 append_composite_type_field (t, "f64", init_vector_type (elem, 2));
2340
2341 TYPE_VECTOR (t) = 1;
2342 TYPE_NAME (t) = "neon_q";
2343 tdep->neon_quad_type = t;
2344 }
2345
2346 return tdep->neon_quad_type;
2347}
2348
34e8f22d
RE
2349/* Return the GDB type object for the "standard" data type of data in
2350 register N. */
2351
2352static struct type *
7a5ea0d4 2353arm_register_type (struct gdbarch *gdbarch, int regnum)
032758dc 2354{
58d6951d
DJ
2355 int num_regs = gdbarch_num_regs (gdbarch);
2356
2357 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
2358 && regnum >= num_regs && regnum < num_regs + 32)
2359 return builtin_type (gdbarch)->builtin_float;
2360
2361 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
2362 && regnum >= num_regs + 32 && regnum < num_regs + 32 + 16)
2363 return arm_neon_quad_type (gdbarch);
2364
2365 /* If the target description has register information, we are only
2366 in this function so that we can override the types of
2367 double-precision registers for NEON. */
2368 if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
2369 {
2370 struct type *t = tdesc_register_type (gdbarch, regnum);
2371
2372 if (regnum >= ARM_D0_REGNUM && regnum < ARM_D0_REGNUM + 32
2373 && TYPE_CODE (t) == TYPE_CODE_FLT
2374 && gdbarch_tdep (gdbarch)->have_neon)
2375 return arm_neon_double_type (gdbarch);
2376 else
2377 return t;
2378 }
2379
34e8f22d 2380 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
58d6951d
DJ
2381 {
2382 if (!gdbarch_tdep (gdbarch)->have_fpa_registers)
2383 return builtin_type (gdbarch)->builtin_void;
2384
2385 return arm_ext_type (gdbarch);
2386 }
e4c16157 2387 else if (regnum == ARM_SP_REGNUM)
0dfff4cb 2388 return builtin_type (gdbarch)->builtin_data_ptr;
e4c16157 2389 else if (regnum == ARM_PC_REGNUM)
0dfff4cb 2390 return builtin_type (gdbarch)->builtin_func_ptr;
ff6f572f
DJ
2391 else if (regnum >= ARRAY_SIZE (arm_register_names))
2392 /* These registers are only supported on targets which supply
2393 an XML description. */
df4df182 2394 return builtin_type (gdbarch)->builtin_int0;
032758dc 2395 else
df4df182 2396 return builtin_type (gdbarch)->builtin_uint32;
032758dc
AC
2397}
2398
ff6f572f
DJ
2399/* Map a DWARF register REGNUM onto the appropriate GDB register
2400 number. */
2401
2402static int
d3f73121 2403arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
ff6f572f
DJ
2404{
2405 /* Core integer regs. */
2406 if (reg >= 0 && reg <= 15)
2407 return reg;
2408
2409 /* Legacy FPA encoding. These were once used in a way which
2410 overlapped with VFP register numbering, so their use is
2411 discouraged, but GDB doesn't support the ARM toolchain
2412 which used them for VFP. */
2413 if (reg >= 16 && reg <= 23)
2414 return ARM_F0_REGNUM + reg - 16;
2415
2416 /* New assignments for the FPA registers. */
2417 if (reg >= 96 && reg <= 103)
2418 return ARM_F0_REGNUM + reg - 96;
2419
2420 /* WMMX register assignments. */
2421 if (reg >= 104 && reg <= 111)
2422 return ARM_WCGR0_REGNUM + reg - 104;
2423
2424 if (reg >= 112 && reg <= 127)
2425 return ARM_WR0_REGNUM + reg - 112;
2426
2427 if (reg >= 192 && reg <= 199)
2428 return ARM_WC0_REGNUM + reg - 192;
2429
58d6951d
DJ
2430 /* VFP v2 registers. A double precision value is actually
2431 in d1 rather than s2, but the ABI only defines numbering
2432 for the single precision registers. This will "just work"
2433 in GDB for little endian targets (we'll read eight bytes,
2434 starting in s0 and then progressing to s1), but will be
2435 reversed on big endian targets with VFP. This won't
2436 be a problem for the new Neon quad registers; you're supposed
2437 to use DW_OP_piece for those. */
2438 if (reg >= 64 && reg <= 95)
2439 {
2440 char name_buf[4];
2441
2442 sprintf (name_buf, "s%d", reg - 64);
2443 return user_reg_map_name_to_regnum (gdbarch, name_buf,
2444 strlen (name_buf));
2445 }
2446
2447 /* VFP v3 / Neon registers. This range is also used for VFP v2
2448 registers, except that it now describes d0 instead of s0. */
2449 if (reg >= 256 && reg <= 287)
2450 {
2451 char name_buf[4];
2452
2453 sprintf (name_buf, "d%d", reg - 256);
2454 return user_reg_map_name_to_regnum (gdbarch, name_buf,
2455 strlen (name_buf));
2456 }
2457
ff6f572f
DJ
2458 return -1;
2459}
2460
26216b98
AC
2461/* Map GDB internal REGNUM onto the Arm simulator register numbers. */
2462static int
e7faf938 2463arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
26216b98
AC
2464{
2465 int reg = regnum;
e7faf938 2466 gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
26216b98 2467
ff6f572f
DJ
2468 if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
2469 return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
2470
2471 if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
2472 return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
2473
2474 if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
2475 return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
2476
26216b98
AC
2477 if (reg < NUM_GREGS)
2478 return SIM_ARM_R0_REGNUM + reg;
2479 reg -= NUM_GREGS;
2480
2481 if (reg < NUM_FREGS)
2482 return SIM_ARM_FP0_REGNUM + reg;
2483 reg -= NUM_FREGS;
2484
2485 if (reg < NUM_SREGS)
2486 return SIM_ARM_FPS_REGNUM + reg;
2487 reg -= NUM_SREGS;
2488
edefbb7c 2489 internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
26216b98 2490}
34e8f22d 2491
a37b3cc0
AC
2492/* NOTE: cagney/2001-08-20: Both convert_from_extended() and
2493 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
2494 It is thought that this is is the floating-point register format on
2495 little-endian systems. */
c906108c 2496
ed9a39eb 2497static void
b508a996 2498convert_from_extended (const struct floatformat *fmt, const void *ptr,
be8626e0 2499 void *dbl, int endianess)
c906108c 2500{
a37b3cc0 2501 DOUBLEST d;
be8626e0
MD
2502
2503 if (endianess == BFD_ENDIAN_BIG)
a37b3cc0
AC
2504 floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
2505 else
2506 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
2507 ptr, &d);
b508a996 2508 floatformat_from_doublest (fmt, &d, dbl);
c906108c
SS
2509}
2510
34e8f22d 2511static void
be8626e0
MD
2512convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr,
2513 int endianess)
c906108c 2514{
a37b3cc0 2515 DOUBLEST d;
be8626e0 2516
b508a996 2517 floatformat_to_doublest (fmt, ptr, &d);
be8626e0 2518 if (endianess == BFD_ENDIAN_BIG)
a37b3cc0
AC
2519 floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
2520 else
2521 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
2522 &d, dbl);
c906108c 2523}
ed9a39eb 2524
c906108c 2525static int
ed9a39eb 2526condition_true (unsigned long cond, unsigned long status_reg)
c906108c
SS
2527{
2528 if (cond == INST_AL || cond == INST_NV)
2529 return 1;
2530
2531 switch (cond)
2532 {
2533 case INST_EQ:
2534 return ((status_reg & FLAG_Z) != 0);
2535 case INST_NE:
2536 return ((status_reg & FLAG_Z) == 0);
2537 case INST_CS:
2538 return ((status_reg & FLAG_C) != 0);
2539 case INST_CC:
2540 return ((status_reg & FLAG_C) == 0);
2541 case INST_MI:
2542 return ((status_reg & FLAG_N) != 0);
2543 case INST_PL:
2544 return ((status_reg & FLAG_N) == 0);
2545 case INST_VS:
2546 return ((status_reg & FLAG_V) != 0);
2547 case INST_VC:
2548 return ((status_reg & FLAG_V) == 0);
2549 case INST_HI:
2550 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
2551 case INST_LS:
2552 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
2553 case INST_GE:
2554 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
2555 case INST_LT:
2556 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
2557 case INST_GT:
f8bf5763
PM
2558 return (((status_reg & FLAG_Z) == 0)
2559 && (((status_reg & FLAG_N) == 0)
2560 == ((status_reg & FLAG_V) == 0)));
c906108c 2561 case INST_LE:
f8bf5763
PM
2562 return (((status_reg & FLAG_Z) != 0)
2563 || (((status_reg & FLAG_N) == 0)
2564 != ((status_reg & FLAG_V) == 0)));
c906108c
SS
2565 }
2566 return 1;
2567}
2568
c906108c 2569static unsigned long
0b1b3e42
UW
2570shifted_reg_val (struct frame_info *frame, unsigned long inst, int carry,
2571 unsigned long pc_val, unsigned long status_reg)
c906108c
SS
2572{
2573 unsigned long res, shift;
2574 int rm = bits (inst, 0, 3);
2575 unsigned long shifttype = bits (inst, 5, 6);
c5aa993b
JM
2576
2577 if (bit (inst, 4))
c906108c
SS
2578 {
2579 int rs = bits (inst, 8, 11);
0b1b3e42
UW
2580 shift = (rs == 15 ? pc_val + 8
2581 : get_frame_register_unsigned (frame, rs)) & 0xFF;
c906108c
SS
2582 }
2583 else
2584 shift = bits (inst, 7, 11);
c5aa993b
JM
2585
2586 res = (rm == 15
0d39a070 2587 ? (pc_val + (bit (inst, 4) ? 12 : 8))
0b1b3e42 2588 : get_frame_register_unsigned (frame, rm));
c906108c
SS
2589
2590 switch (shifttype)
2591 {
c5aa993b 2592 case 0: /* LSL */
c906108c
SS
2593 res = shift >= 32 ? 0 : res << shift;
2594 break;
c5aa993b
JM
2595
2596 case 1: /* LSR */
c906108c
SS
2597 res = shift >= 32 ? 0 : res >> shift;
2598 break;
2599
c5aa993b
JM
2600 case 2: /* ASR */
2601 if (shift >= 32)
2602 shift = 31;
c906108c
SS
2603 res = ((res & 0x80000000L)
2604 ? ~((~res) >> shift) : res >> shift);
2605 break;
2606
c5aa993b 2607 case 3: /* ROR/RRX */
c906108c
SS
2608 shift &= 31;
2609 if (shift == 0)
2610 res = (res >> 1) | (carry ? 0x80000000L : 0);
2611 else
c5aa993b 2612 res = (res >> shift) | (res << (32 - shift));
c906108c
SS
2613 break;
2614 }
2615
2616 return res & 0xffffffff;
2617}
2618
c906108c
SS
2619/* Return number of 1-bits in VAL. */
2620
2621static int
ed9a39eb 2622bitcount (unsigned long val)
c906108c
SS
2623{
2624 int nbits;
2625 for (nbits = 0; val != 0; nbits++)
c5aa993b 2626 val &= val - 1; /* delete rightmost 1-bit in val */
c906108c
SS
2627 return nbits;
2628}
2629
177321bd
DJ
2630/* Return the size in bytes of the complete Thumb instruction whose
2631 first halfword is INST1. */
2632
2633static int
2634thumb_insn_size (unsigned short inst1)
2635{
2636 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
2637 return 4;
2638 else
2639 return 2;
2640}
2641
2642static int
2643thumb_advance_itstate (unsigned int itstate)
2644{
2645 /* Preserve IT[7:5], the first three bits of the condition. Shift
2646 the upcoming condition flags left by one bit. */
2647 itstate = (itstate & 0xe0) | ((itstate << 1) & 0x1f);
2648
2649 /* If we have finished the IT block, clear the state. */
2650 if ((itstate & 0x0f) == 0)
2651 itstate = 0;
2652
2653 return itstate;
2654}
2655
2656/* Find the next PC after the current instruction executes. In some
2657 cases we can not statically determine the answer (see the IT state
2658 handling in this function); in that case, a breakpoint may be
2659 inserted in addition to the returned PC, which will be used to set
2660 another breakpoint by our caller. */
2661
ad527d2e 2662static CORE_ADDR
50e98be4 2663thumb_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc, int insert_bkpt)
c906108c 2664{
2af46ca0 2665 struct gdbarch *gdbarch = get_frame_arch (frame);
177321bd 2666 struct address_space *aspace = get_frame_address_space (frame);
e17a4113
UW
2667 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2668 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
c5aa993b 2669 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
e17a4113 2670 unsigned short inst1;
94c30b78 2671 CORE_ADDR nextpc = pc + 2; /* default is next instruction */
c906108c 2672 unsigned long offset;
177321bd 2673 ULONGEST status, itstate;
c906108c 2674
50e98be4
DJ
2675 nextpc = MAKE_THUMB_ADDR (nextpc);
2676 pc_val = MAKE_THUMB_ADDR (pc_val);
2677
e17a4113 2678 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
9d4fde75 2679
9dca5578
DJ
2680 /* Thumb-2 conditional execution support. There are eight bits in
2681 the CPSR which describe conditional execution state. Once
2682 reconstructed (they're in a funny order), the low five bits
2683 describe the low bit of the condition for each instruction and
2684 how many instructions remain. The high three bits describe the
2685 base condition. One of the low four bits will be set if an IT
2686 block is active. These bits read as zero on earlier
2687 processors. */
2688 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
177321bd 2689 itstate = ((status >> 8) & 0xfc) | ((status >> 25) & 0x3);
9dca5578 2690
177321bd
DJ
2691 /* If-Then handling. On GNU/Linux, where this routine is used, we
2692 use an undefined instruction as a breakpoint. Unlike BKPT, IT
2693 can disable execution of the undefined instruction. So we might
2694 miss the breakpoint if we set it on a skipped conditional
2695 instruction. Because conditional instructions can change the
2696 flags, affecting the execution of further instructions, we may
2697 need to set two breakpoints. */
9dca5578 2698
177321bd
DJ
2699 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint != NULL)
2700 {
2701 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
2702 {
2703 /* An IT instruction. Because this instruction does not
2704 modify the flags, we can accurately predict the next
2705 executed instruction. */
2706 itstate = inst1 & 0x00ff;
2707 pc += thumb_insn_size (inst1);
2708
2709 while (itstate != 0 && ! condition_true (itstate >> 4, status))
2710 {
2711 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2712 pc += thumb_insn_size (inst1);
2713 itstate = thumb_advance_itstate (itstate);
2714 }
2715
50e98be4 2716 return MAKE_THUMB_ADDR (pc);
177321bd
DJ
2717 }
2718 else if (itstate != 0)
2719 {
2720 /* We are in a conditional block. Check the condition. */
2721 if (! condition_true (itstate >> 4, status))
2722 {
2723 /* Advance to the next executed instruction. */
2724 pc += thumb_insn_size (inst1);
2725 itstate = thumb_advance_itstate (itstate);
2726
2727 while (itstate != 0 && ! condition_true (itstate >> 4, status))
2728 {
2729 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2730 pc += thumb_insn_size (inst1);
2731 itstate = thumb_advance_itstate (itstate);
2732 }
2733
50e98be4 2734 return MAKE_THUMB_ADDR (pc);
177321bd
DJ
2735 }
2736 else if ((itstate & 0x0f) == 0x08)
2737 {
2738 /* This is the last instruction of the conditional
2739 block, and it is executed. We can handle it normally
2740 because the following instruction is not conditional,
2741 and we must handle it normally because it is
2742 permitted to branch. Fall through. */
2743 }
2744 else
2745 {
2746 int cond_negated;
2747
2748 /* There are conditional instructions after this one.
2749 If this instruction modifies the flags, then we can
2750 not predict what the next executed instruction will
2751 be. Fortunately, this instruction is architecturally
2752 forbidden to branch; we know it will fall through.
2753 Start by skipping past it. */
2754 pc += thumb_insn_size (inst1);
2755 itstate = thumb_advance_itstate (itstate);
2756
2757 /* Set a breakpoint on the following instruction. */
2758 gdb_assert ((itstate & 0x0f) != 0);
50e98be4
DJ
2759 if (insert_bkpt)
2760 insert_single_step_breakpoint (gdbarch, aspace, pc);
177321bd
DJ
2761 cond_negated = (itstate >> 4) & 1;
2762
2763 /* Skip all following instructions with the same
2764 condition. If there is a later instruction in the IT
2765 block with the opposite condition, set the other
2766 breakpoint there. If not, then set a breakpoint on
2767 the instruction after the IT block. */
2768 do
2769 {
2770 inst1 = read_memory_unsigned_integer (pc, 2, byte_order_for_code);
2771 pc += thumb_insn_size (inst1);
2772 itstate = thumb_advance_itstate (itstate);
2773 }
2774 while (itstate != 0 && ((itstate >> 4) & 1) == cond_negated);
2775
50e98be4 2776 return MAKE_THUMB_ADDR (pc);
177321bd
DJ
2777 }
2778 }
2779 }
2780 else if (itstate & 0x0f)
9dca5578
DJ
2781 {
2782 /* We are in a conditional block. Check the condition. */
177321bd 2783 int cond = itstate >> 4;
9dca5578
DJ
2784
2785 if (! condition_true (cond, status))
2786 {
2787 /* Advance to the next instruction. All the 32-bit
2788 instructions share a common prefix. */
2789 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
50e98be4 2790 return MAKE_THUMB_ADDR (pc + 4);
9dca5578 2791 else
50e98be4 2792 return MAKE_THUMB_ADDR (pc + 2);
9dca5578 2793 }
177321bd
DJ
2794
2795 /* Otherwise, handle the instruction normally. */
9dca5578
DJ
2796 }
2797
c906108c
SS
2798 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
2799 {
2800 CORE_ADDR sp;
2801
2802 /* Fetch the saved PC from the stack. It's stored above
2803 all of the other registers. */
f0c9063c 2804 offset = bitcount (bits (inst1, 0, 7)) * INT_REGISTER_SIZE;
0b1b3e42 2805 sp = get_frame_register_unsigned (frame, ARM_SP_REGNUM);
e17a4113 2806 nextpc = read_memory_unsigned_integer (sp + offset, 4, byte_order);
c906108c
SS
2807 }
2808 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
2809 {
c5aa993b 2810 unsigned long cond = bits (inst1, 8, 11);
94c30b78 2811 if (cond != 0x0f && condition_true (cond, status)) /* 0x0f = SWI */
c906108c
SS
2812 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
2813 }
2814 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
2815 {
2816 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
2817 }
9dca5578 2818 else if ((inst1 & 0xe000) == 0xe000) /* 32-bit instruction */
c906108c 2819 {
e17a4113
UW
2820 unsigned short inst2;
2821 inst2 = read_memory_unsigned_integer (pc + 2, 2, byte_order_for_code);
9dca5578
DJ
2822
2823 /* Default to the next instruction. */
2824 nextpc = pc + 4;
50e98be4 2825 nextpc = MAKE_THUMB_ADDR (nextpc);
9dca5578
DJ
2826
2827 if ((inst1 & 0xf800) == 0xf000 && (inst2 & 0x8000) == 0x8000)
2828 {
2829 /* Branches and miscellaneous control instructions. */
2830
2831 if ((inst2 & 0x1000) != 0 || (inst2 & 0xd001) == 0xc000)
2832 {
2833 /* B, BL, BLX. */
2834 int j1, j2, imm1, imm2;
2835
2836 imm1 = sbits (inst1, 0, 10);
2837 imm2 = bits (inst2, 0, 10);
2838 j1 = bit (inst2, 13);
2839 j2 = bit (inst2, 11);
2840
2841 offset = ((imm1 << 12) + (imm2 << 1));
2842 offset ^= ((!j2) << 22) | ((!j1) << 23);
2843
2844 nextpc = pc_val + offset;
2845 /* For BLX make sure to clear the low bits. */
2846 if (bit (inst2, 12) == 0)
2847 nextpc = nextpc & 0xfffffffc;
2848 }
2849 else if (inst1 == 0xf3de && (inst2 & 0xff00) == 0x3f00)
2850 {
2851 /* SUBS PC, LR, #imm8. */
2852 nextpc = get_frame_register_unsigned (frame, ARM_LR_REGNUM);
2853 nextpc -= inst2 & 0x00ff;
2854 }
4069ebbe 2855 else if ((inst2 & 0xd000) == 0x8000 && (inst1 & 0x0380) != 0x0380)
9dca5578
DJ
2856 {
2857 /* Conditional branch. */
2858 if (condition_true (bits (inst1, 6, 9), status))
2859 {
2860 int sign, j1, j2, imm1, imm2;
2861
2862 sign = sbits (inst1, 10, 10);
2863 imm1 = bits (inst1, 0, 5);
2864 imm2 = bits (inst2, 0, 10);
2865 j1 = bit (inst2, 13);
2866 j2 = bit (inst2, 11);
2867
2868 offset = (sign << 20) + (j2 << 19) + (j1 << 18);
2869 offset += (imm1 << 12) + (imm2 << 1);
2870
2871 nextpc = pc_val + offset;
2872 }
2873 }
2874 }
2875 else if ((inst1 & 0xfe50) == 0xe810)
2876 {
2877 /* Load multiple or RFE. */
2878 int rn, offset, load_pc = 1;
2879
2880 rn = bits (inst1, 0, 3);
2881 if (bit (inst1, 7) && !bit (inst1, 8))
2882 {
2883 /* LDMIA or POP */
2884 if (!bit (inst2, 15))
2885 load_pc = 0;
2886 offset = bitcount (inst2) * 4 - 4;
2887 }
2888 else if (!bit (inst1, 7) && bit (inst1, 8))
2889 {
2890 /* LDMDB */
2891 if (!bit (inst2, 15))
2892 load_pc = 0;
2893 offset = -4;
2894 }
2895 else if (bit (inst1, 7) && bit (inst1, 8))
2896 {
2897 /* RFEIA */
2898 offset = 0;
2899 }
2900 else if (!bit (inst1, 7) && !bit (inst1, 8))
2901 {
2902 /* RFEDB */
2903 offset = -8;
2904 }
2905 else
2906 load_pc = 0;
2907
2908 if (load_pc)
2909 {
2910 CORE_ADDR addr = get_frame_register_unsigned (frame, rn);
2911 nextpc = get_frame_memory_unsigned (frame, addr + offset, 4);
2912 }
2913 }
2914 else if ((inst1 & 0xffef) == 0xea4f && (inst2 & 0xfff0) == 0x0f00)
2915 {
2916 /* MOV PC or MOVS PC. */
2917 nextpc = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
50e98be4 2918 nextpc = MAKE_THUMB_ADDR (nextpc);
9dca5578
DJ
2919 }
2920 else if ((inst1 & 0xff70) == 0xf850 && (inst2 & 0xf000) == 0xf000)
2921 {
2922 /* LDR PC. */
2923 CORE_ADDR base;
2924 int rn, load_pc = 1;
2925
2926 rn = bits (inst1, 0, 3);
2927 base = get_frame_register_unsigned (frame, rn);
2928 if (rn == 15)
2929 {
2930 base = (base + 4) & ~(CORE_ADDR) 0x3;
2931 if (bit (inst1, 7))
2932 base += bits (inst2, 0, 11);
2933 else
2934 base -= bits (inst2, 0, 11);
2935 }
2936 else if (bit (inst1, 7))
2937 base += bits (inst2, 0, 11);
2938 else if (bit (inst2, 11))
2939 {
2940 if (bit (inst2, 10))
2941 {
2942 if (bit (inst2, 9))
2943 base += bits (inst2, 0, 7);
2944 else
2945 base -= bits (inst2, 0, 7);
2946 }
2947 }
2948 else if ((inst2 & 0x0fc0) == 0x0000)
2949 {
2950 int shift = bits (inst2, 4, 5), rm = bits (inst2, 0, 3);
2951 base += get_frame_register_unsigned (frame, rm) << shift;
2952 }
2953 else
2954 /* Reserved. */
2955 load_pc = 0;
2956
2957 if (load_pc)
2958 nextpc = get_frame_memory_unsigned (frame, base, 4);
2959 }
2960 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf000)
2961 {
2962 /* TBB. */
d476da0e
RE
2963 CORE_ADDR tbl_reg, table, offset, length;
2964
2965 tbl_reg = bits (inst1, 0, 3);
2966 if (tbl_reg == 0x0f)
2967 table = pc + 4; /* Regcache copy of PC isn't right yet. */
2968 else
2969 table = get_frame_register_unsigned (frame, tbl_reg);
9dca5578 2970
9dca5578
DJ
2971 offset = get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2972 length = 2 * get_frame_memory_unsigned (frame, table + offset, 1);
2973 nextpc = pc_val + length;
2974 }
d476da0e 2975 else if ((inst1 & 0xfff0) == 0xe8d0 && (inst2 & 0xfff0) == 0xf010)
9dca5578
DJ
2976 {
2977 /* TBH. */
d476da0e
RE
2978 CORE_ADDR tbl_reg, table, offset, length;
2979
2980 tbl_reg = bits (inst1, 0, 3);
2981 if (tbl_reg == 0x0f)
2982 table = pc + 4; /* Regcache copy of PC isn't right yet. */
2983 else
2984 table = get_frame_register_unsigned (frame, tbl_reg);
9dca5578 2985
9dca5578
DJ
2986 offset = 2 * get_frame_register_unsigned (frame, bits (inst2, 0, 3));
2987 length = 2 * get_frame_memory_unsigned (frame, table + offset, 2);
2988 nextpc = pc_val + length;
2989 }
c906108c 2990 }
aa17d93e 2991 else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */
9498281f
DJ
2992 {
2993 if (bits (inst1, 3, 6) == 0x0f)
2994 nextpc = pc_val;
2995 else
0b1b3e42 2996 nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
9498281f 2997 }
9dca5578
DJ
2998 else if ((inst1 & 0xf500) == 0xb100)
2999 {
3000 /* CBNZ or CBZ. */
3001 int imm = (bit (inst1, 9) << 6) + (bits (inst1, 3, 7) << 1);
3002 ULONGEST reg = get_frame_register_unsigned (frame, bits (inst1, 0, 2));
3003
3004 if (bit (inst1, 11) && reg != 0)
3005 nextpc = pc_val + imm;
3006 else if (!bit (inst1, 11) && reg == 0)
3007 nextpc = pc_val + imm;
3008 }
c906108c
SS
3009 return nextpc;
3010}
3011
50e98be4
DJ
3012/* Get the raw next address. PC is the current program counter, in
3013 FRAME. INSERT_BKPT should be TRUE if we want a breakpoint set on
3014 the alternative next instruction if there are two options.
3015
3016 The value returned has the execution state of the next instruction
3017 encoded in it. Use IS_THUMB_ADDR () to see whether the instruction is
3018 in Thumb-State, and gdbarch_addr_bits_remove () to get the plain memory
3019 address.
3020*/
3021static CORE_ADDR
3022arm_get_next_pc_raw (struct frame_info *frame, CORE_ADDR pc, int insert_bkpt)
c906108c 3023{
2af46ca0 3024 struct gdbarch *gdbarch = get_frame_arch (frame);
e17a4113
UW
3025 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3026 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
c906108c
SS
3027 unsigned long pc_val;
3028 unsigned long this_instr;
3029 unsigned long status;
3030 CORE_ADDR nextpc;
3031
b39cc962 3032 if (arm_frame_is_thumb (frame))
50e98be4 3033 return thumb_get_next_pc_raw (frame, pc, insert_bkpt);
c906108c
SS
3034
3035 pc_val = (unsigned long) pc;
e17a4113 3036 this_instr = read_memory_unsigned_integer (pc, 4, byte_order_for_code);
9d4fde75 3037
0b1b3e42 3038 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
c5aa993b 3039 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
c906108c 3040
daddc3c1
DJ
3041 if (bits (this_instr, 28, 31) == INST_NV)
3042 switch (bits (this_instr, 24, 27))
3043 {
3044 case 0xa:
3045 case 0xb:
3046 {
3047 /* Branch with Link and change to Thumb. */
3048 nextpc = BranchDest (pc, this_instr);
3049 nextpc |= bit (this_instr, 24) << 1;
50e98be4 3050 nextpc = MAKE_THUMB_ADDR (nextpc);
daddc3c1
DJ
3051 break;
3052 }
3053 case 0xc:
3054 case 0xd:
3055 case 0xe:
3056 /* Coprocessor register transfer. */
3057 if (bits (this_instr, 12, 15) == 15)
3058 error (_("Invalid update to pc in instruction"));
3059 break;
3060 }
3061 else if (condition_true (bits (this_instr, 28, 31), status))
c906108c
SS
3062 {
3063 switch (bits (this_instr, 24, 27))
3064 {
c5aa993b 3065 case 0x0:
94c30b78 3066 case 0x1: /* data processing */
c5aa993b
JM
3067 case 0x2:
3068 case 0x3:
c906108c
SS
3069 {
3070 unsigned long operand1, operand2, result = 0;
3071 unsigned long rn;
3072 int c;
c5aa993b 3073
c906108c
SS
3074 if (bits (this_instr, 12, 15) != 15)
3075 break;
3076
3077 if (bits (this_instr, 22, 25) == 0
c5aa993b 3078 && bits (this_instr, 4, 7) == 9) /* multiply */
edefbb7c 3079 error (_("Invalid update to pc in instruction"));
c906108c 3080
9498281f 3081 /* BX <reg>, BLX <reg> */
e150acc7
PB
3082 if (bits (this_instr, 4, 27) == 0x12fff1
3083 || bits (this_instr, 4, 27) == 0x12fff3)
9498281f
DJ
3084 {
3085 rn = bits (this_instr, 0, 3);
50e98be4 3086 nextpc = (rn == 15) ? pc_val + 8
0b1b3e42 3087 : get_frame_register_unsigned (frame, rn);
9498281f
DJ
3088 return nextpc;
3089 }
3090
c906108c
SS
3091 /* Multiply into PC */
3092 c = (status & FLAG_C) ? 1 : 0;
3093 rn = bits (this_instr, 16, 19);
0b1b3e42
UW
3094 operand1 = (rn == 15) ? pc_val + 8
3095 : get_frame_register_unsigned (frame, rn);
c5aa993b 3096
c906108c
SS
3097 if (bit (this_instr, 25))
3098 {
3099 unsigned long immval = bits (this_instr, 0, 7);
3100 unsigned long rotate = 2 * bits (this_instr, 8, 11);
c5aa993b
JM
3101 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
3102 & 0xffffffff;
c906108c 3103 }
c5aa993b 3104 else /* operand 2 is a shifted register */
0b1b3e42 3105 operand2 = shifted_reg_val (frame, this_instr, c, pc_val, status);
c5aa993b 3106
c906108c
SS
3107 switch (bits (this_instr, 21, 24))
3108 {
c5aa993b 3109 case 0x0: /*and */
c906108c
SS
3110 result = operand1 & operand2;
3111 break;
3112
c5aa993b 3113 case 0x1: /*eor */
c906108c
SS
3114 result = operand1 ^ operand2;
3115 break;
3116
c5aa993b 3117 case 0x2: /*sub */
c906108c
SS
3118 result = operand1 - operand2;
3119 break;
3120
c5aa993b 3121 case 0x3: /*rsb */
c906108c
SS
3122 result = operand2 - operand1;
3123 break;
3124
c5aa993b 3125 case 0x4: /*add */
c906108c
SS
3126 result = operand1 + operand2;
3127 break;
3128
c5aa993b 3129 case 0x5: /*adc */
c906108c
SS
3130 result = operand1 + operand2 + c;
3131 break;
3132
c5aa993b 3133 case 0x6: /*sbc */
c906108c
SS
3134 result = operand1 - operand2 + c;
3135 break;
3136
c5aa993b 3137 case 0x7: /*rsc */
c906108c
SS
3138 result = operand2 - operand1 + c;
3139 break;
3140
c5aa993b
JM
3141 case 0x8:
3142 case 0x9:
3143 case 0xa:
3144 case 0xb: /* tst, teq, cmp, cmn */
c906108c
SS
3145 result = (unsigned long) nextpc;
3146 break;
3147
c5aa993b 3148 case 0xc: /*orr */
c906108c
SS
3149 result = operand1 | operand2;
3150 break;
3151
c5aa993b 3152 case 0xd: /*mov */
c906108c
SS
3153 /* Always step into a function. */
3154 result = operand2;
c5aa993b 3155 break;
c906108c 3156
c5aa993b 3157 case 0xe: /*bic */
c906108c
SS
3158 result = operand1 & ~operand2;
3159 break;
3160
c5aa993b 3161 case 0xf: /*mvn */
c906108c
SS
3162 result = ~operand2;
3163 break;
3164 }
c906108c 3165
50e98be4
DJ
3166 /* In 26-bit APCS the bottom two bits of the result are
3167 ignored, and we always end up in ARM state. */
3168 if (!arm_apcs_32)
3169 nextpc = arm_addr_bits_remove (gdbarch, result);
3170 else
3171 nextpc = result;
3172
c906108c
SS
3173 break;
3174 }
c5aa993b
JM
3175
3176 case 0x4:
3177 case 0x5: /* data transfer */
3178 case 0x6:
3179 case 0x7:
c906108c
SS
3180 if (bit (this_instr, 20))
3181 {
3182 /* load */
3183 if (bits (this_instr, 12, 15) == 15)
3184 {
3185 /* rd == pc */
c5aa993b 3186 unsigned long rn;
c906108c 3187 unsigned long base;
c5aa993b 3188
c906108c 3189 if (bit (this_instr, 22))
edefbb7c 3190 error (_("Invalid update to pc in instruction"));
c906108c
SS
3191
3192 /* byte write to PC */
3193 rn = bits (this_instr, 16, 19);
0b1b3e42
UW
3194 base = (rn == 15) ? pc_val + 8
3195 : get_frame_register_unsigned (frame, rn);
c906108c
SS
3196 if (bit (this_instr, 24))
3197 {
3198 /* pre-indexed */
3199 int c = (status & FLAG_C) ? 1 : 0;
3200 unsigned long offset =
c5aa993b 3201 (bit (this_instr, 25)
0b1b3e42 3202 ? shifted_reg_val (frame, this_instr, c, pc_val, status)
c5aa993b 3203 : bits (this_instr, 0, 11));
c906108c
SS
3204
3205 if (bit (this_instr, 23))
3206 base += offset;
3207 else
3208 base -= offset;
3209 }
c5aa993b 3210 nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
e17a4113 3211 4, byte_order);
c906108c
SS
3212 }
3213 }
3214 break;
c5aa993b
JM
3215
3216 case 0x8:
3217 case 0x9: /* block transfer */
c906108c
SS
3218 if (bit (this_instr, 20))
3219 {
3220 /* LDM */
3221 if (bit (this_instr, 15))
3222 {
3223 /* loading pc */
3224 int offset = 0;
3225
3226 if (bit (this_instr, 23))
3227 {
3228 /* up */
3229 unsigned long reglist = bits (this_instr, 0, 14);
3230 offset = bitcount (reglist) * 4;
c5aa993b 3231 if (bit (this_instr, 24)) /* pre */
c906108c
SS
3232 offset += 4;
3233 }
3234 else if (bit (this_instr, 24))
3235 offset = -4;
c5aa993b 3236
c906108c 3237 {
c5aa993b 3238 unsigned long rn_val =
0b1b3e42
UW
3239 get_frame_register_unsigned (frame,
3240 bits (this_instr, 16, 19));
c906108c
SS
3241 nextpc =
3242 (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
c5aa993b 3243 + offset),
e17a4113 3244 4, byte_order);
c906108c 3245 }
c906108c
SS
3246 }
3247 }
3248 break;
c5aa993b
JM
3249
3250 case 0xb: /* branch & link */
3251 case 0xa: /* branch */
c906108c
SS
3252 {
3253 nextpc = BranchDest (pc, this_instr);
c906108c
SS
3254 break;
3255 }
c5aa993b
JM
3256
3257 case 0xc:
3258 case 0xd:
3259 case 0xe: /* coproc ops */
3260 case 0xf: /* SWI */
c906108c
SS
3261 break;
3262
3263 default:
edefbb7c 3264 fprintf_filtered (gdb_stderr, _("Bad bit-field extraction\n"));
c906108c
SS
3265 return (pc);
3266 }
3267 }
3268
3269 return nextpc;
3270}
3271
50e98be4
DJ
3272CORE_ADDR
3273arm_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
3274{
3275 struct gdbarch *gdbarch = get_frame_arch (frame);
3276 CORE_ADDR nextpc =
3277 gdbarch_addr_bits_remove (gdbarch,
3278 arm_get_next_pc_raw (frame, pc, TRUE));
3279 if (nextpc == pc)
3280 error (_("Infinite loop detected"));
3281 return nextpc;
3282}
3283
9512d7fd
FN
3284/* single_step() is called just before we want to resume the inferior,
3285 if we want to single-step it but there is no hardware or kernel
3286 single-step support. We find the target of the coming instruction
e0cd558a 3287 and breakpoint it. */
9512d7fd 3288
190dce09 3289int
0b1b3e42 3290arm_software_single_step (struct frame_info *frame)
9512d7fd 3291{
a6d9a66e 3292 struct gdbarch *gdbarch = get_frame_arch (frame);
6c95b8df 3293 struct address_space *aspace = get_frame_address_space (frame);
a6d9a66e 3294
8181d85f
DJ
3295 /* NOTE: This may insert the wrong breakpoint instruction when
3296 single-stepping over a mode-changing instruction, if the
3297 CPSR heuristics are used. */
9512d7fd 3298
0b1b3e42 3299 CORE_ADDR next_pc = arm_get_next_pc (frame, get_frame_pc (frame));
6c95b8df 3300 insert_single_step_breakpoint (gdbarch, aspace, next_pc);
e6590a1b
UW
3301
3302 return 1;
9512d7fd 3303}
9512d7fd 3304
f9d67f43
DJ
3305/* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
3306 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
3307 NULL if an error occurs. BUF is freed. */
3308
3309static gdb_byte *
3310extend_buffer_earlier (gdb_byte *buf, CORE_ADDR endaddr,
3311 int old_len, int new_len)
3312{
3313 gdb_byte *new_buf, *middle;
3314 int bytes_to_read = new_len - old_len;
3315
3316 new_buf = xmalloc (new_len);
3317 memcpy (new_buf + bytes_to_read, buf, old_len);
3318 xfree (buf);
3319 if (target_read_memory (endaddr - new_len, new_buf, bytes_to_read) != 0)
3320 {
3321 xfree (new_buf);
3322 return NULL;
3323 }
3324 return new_buf;
3325}
3326
3327/* An IT block is at most the 2-byte IT instruction followed by
3328 four 4-byte instructions. The furthest back we must search to
3329 find an IT block that affects the current instruction is thus
3330 2 + 3 * 4 == 14 bytes. */
3331#define MAX_IT_BLOCK_PREFIX 14
3332
3333/* Use a quick scan if there are more than this many bytes of
3334 code. */
3335#define IT_SCAN_THRESHOLD 32
3336
3337/* Adjust a breakpoint's address to move breakpoints out of IT blocks.
3338 A breakpoint in an IT block may not be hit, depending on the
3339 condition flags. */
3340static CORE_ADDR
3341arm_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
3342{
3343 gdb_byte *buf;
3344 char map_type;
3345 CORE_ADDR boundary, func_start;
3346 int buf_len, buf2_len;
3347 enum bfd_endian order = gdbarch_byte_order_for_code (gdbarch);
3348 int i, any, last_it, last_it_count;
3349
3350 /* If we are using BKPT breakpoints, none of this is necessary. */
3351 if (gdbarch_tdep (gdbarch)->thumb2_breakpoint == NULL)
3352 return bpaddr;
3353
3354 /* ARM mode does not have this problem. */
3355 if (!arm_pc_is_thumb (bpaddr))
3356 return bpaddr;
3357
3358 /* We are setting a breakpoint in Thumb code that could potentially
3359 contain an IT block. The first step is to find how much Thumb
3360 code there is; we do not need to read outside of known Thumb
3361 sequences. */
3362 map_type = arm_find_mapping_symbol (bpaddr, &boundary);
3363 if (map_type == 0)
3364 /* Thumb-2 code must have mapping symbols to have a chance. */
3365 return bpaddr;
3366
3367 bpaddr = gdbarch_addr_bits_remove (gdbarch, bpaddr);
3368
3369 if (find_pc_partial_function (bpaddr, NULL, &func_start, NULL)
3370 && func_start > boundary)
3371 boundary = func_start;
3372
3373 /* Search for a candidate IT instruction. We have to do some fancy
3374 footwork to distinguish a real IT instruction from the second
3375 half of a 32-bit instruction, but there is no need for that if
3376 there's no candidate. */
3377 buf_len = min (bpaddr - boundary, MAX_IT_BLOCK_PREFIX);
3378 if (buf_len == 0)
3379 /* No room for an IT instruction. */
3380 return bpaddr;
3381
3382 buf = xmalloc (buf_len);
3383 if (target_read_memory (bpaddr - buf_len, buf, buf_len) != 0)
3384 return bpaddr;
3385 any = 0;
3386 for (i = 0; i < buf_len; i += 2)
3387 {
3388 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3389 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
3390 {
3391 any = 1;
3392 break;
3393 }
3394 }
3395 if (any == 0)
3396 {
3397 xfree (buf);
3398 return bpaddr;
3399 }
3400
3401 /* OK, the code bytes before this instruction contain at least one
3402 halfword which resembles an IT instruction. We know that it's
3403 Thumb code, but there are still two possibilities. Either the
3404 halfword really is an IT instruction, or it is the second half of
3405 a 32-bit Thumb instruction. The only way we can tell is to
3406 scan forwards from a known instruction boundary. */
3407 if (bpaddr - boundary > IT_SCAN_THRESHOLD)
3408 {
3409 int definite;
3410
3411 /* There's a lot of code before this instruction. Start with an
3412 optimistic search; it's easy to recognize halfwords that can
3413 not be the start of a 32-bit instruction, and use that to
3414 lock on to the instruction boundaries. */
3415 buf = extend_buffer_earlier (buf, bpaddr, buf_len, IT_SCAN_THRESHOLD);
3416 if (buf == NULL)
3417 return bpaddr;
3418 buf_len = IT_SCAN_THRESHOLD;
3419
3420 definite = 0;
3421 for (i = 0; i < buf_len - sizeof (buf) && ! definite; i += 2)
3422 {
3423 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3424 if (thumb_insn_size (inst1) == 2)
3425 {
3426 definite = 1;
3427 break;
3428 }
3429 }
3430
3431 /* At this point, if DEFINITE, BUF[I] is the first place we
3432 are sure that we know the instruction boundaries, and it is far
3433 enough from BPADDR that we could not miss an IT instruction
3434 affecting BPADDR. If ! DEFINITE, give up - start from a
3435 known boundary. */
3436 if (! definite)
3437 {
3438 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
3439 if (buf == NULL)
3440 return bpaddr;
3441 buf_len = bpaddr - boundary;
3442 i = 0;
3443 }
3444 }
3445 else
3446 {
3447 buf = extend_buffer_earlier (buf, bpaddr, buf_len, bpaddr - boundary);
3448 if (buf == NULL)
3449 return bpaddr;
3450 buf_len = bpaddr - boundary;
3451 i = 0;
3452 }
3453
3454 /* Scan forwards. Find the last IT instruction before BPADDR. */
3455 last_it = -1;
3456 last_it_count = 0;
3457 while (i < buf_len)
3458 {
3459 unsigned short inst1 = extract_unsigned_integer (&buf[i], 2, order);
3460 last_it_count--;
3461 if ((inst1 & 0xff00) == 0xbf00 && (inst1 & 0x000f) != 0)
3462 {
3463 last_it = i;
3464 if (inst1 & 0x0001)
3465 last_it_count = 4;
3466 else if (inst1 & 0x0002)
3467 last_it_count = 3;
3468 else if (inst1 & 0x0004)
3469 last_it_count = 2;
3470 else
3471 last_it_count = 1;
3472 }
3473 i += thumb_insn_size (inst1);
3474 }
3475
3476 xfree (buf);
3477
3478 if (last_it == -1)
3479 /* There wasn't really an IT instruction after all. */
3480 return bpaddr;
3481
3482 if (last_it_count < 1)
3483 /* It was too far away. */
3484 return bpaddr;
3485
3486 /* This really is a trouble spot. Move the breakpoint to the IT
3487 instruction. */
3488 return bpaddr - buf_len + last_it;
3489}
3490
cca44b1b 3491/* ARM displaced stepping support.
c906108c 3492
cca44b1b 3493 Generally ARM displaced stepping works as follows:
c906108c 3494
cca44b1b
JB
3495 1. When an instruction is to be single-stepped, it is first decoded by
3496 arm_process_displaced_insn (called from arm_displaced_step_copy_insn).
3497 Depending on the type of instruction, it is then copied to a scratch
3498 location, possibly in a modified form. The copy_* set of functions
3499 performs such modification, as necessary. A breakpoint is placed after
3500 the modified instruction in the scratch space to return control to GDB.
3501 Note in particular that instructions which modify the PC will no longer
3502 do so after modification.
c5aa993b 3503
cca44b1b
JB
3504 2. The instruction is single-stepped, by setting the PC to the scratch
3505 location address, and resuming. Control returns to GDB when the
3506 breakpoint is hit.
c5aa993b 3507
cca44b1b
JB
3508 3. A cleanup function (cleanup_*) is called corresponding to the copy_*
3509 function used for the current instruction. This function's job is to
3510 put the CPU/memory state back to what it would have been if the
3511 instruction had been executed unmodified in its original location. */
c5aa993b 3512
cca44b1b
JB
3513/* NOP instruction (mov r0, r0). */
3514#define ARM_NOP 0xe1a00000
3515
3516/* Helper for register reads for displaced stepping. In particular, this
3517 returns the PC as it would be seen by the instruction at its original
3518 location. */
3519
3520ULONGEST
3521displaced_read_reg (struct regcache *regs, CORE_ADDR from, int regno)
3522{
3523 ULONGEST ret;
3524
3525 if (regno == 15)
3526 {
3527 if (debug_displaced)
3528 fprintf_unfiltered (gdb_stdlog, "displaced: read pc value %.8lx\n",
3529 (unsigned long) from + 8);
3530 return (ULONGEST) from + 8; /* Pipeline offset. */
3531 }
c906108c 3532 else
cca44b1b
JB
3533 {
3534 regcache_cooked_read_unsigned (regs, regno, &ret);
3535 if (debug_displaced)
3536 fprintf_unfiltered (gdb_stdlog, "displaced: read r%d value %.8lx\n",
3537 regno, (unsigned long) ret);
3538 return ret;
3539 }
c906108c
SS
3540}
3541
cca44b1b
JB
3542static int
3543displaced_in_arm_mode (struct regcache *regs)
3544{
3545 ULONGEST ps;
66e810cd 3546
cca44b1b 3547 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
66e810cd 3548
cca44b1b
JB
3549 return (ps & CPSR_T) == 0;
3550}
66e810cd 3551
cca44b1b 3552/* Write to the PC as from a branch instruction. */
c906108c 3553
cca44b1b
JB
3554static void
3555branch_write_pc (struct regcache *regs, ULONGEST val)
c906108c 3556{
cca44b1b
JB
3557 if (displaced_in_arm_mode (regs))
3558 /* Note: If bits 0/1 are set, this branch would be unpredictable for
3559 architecture versions < 6. */
3560 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & ~(ULONGEST) 0x3);
3561 else
3562 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & ~(ULONGEST) 0x1);
3563}
66e810cd 3564
cca44b1b
JB
3565/* Write to the PC as from a branch-exchange instruction. */
3566
3567static void
3568bx_write_pc (struct regcache *regs, ULONGEST val)
3569{
3570 ULONGEST ps;
3571
3572 regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &ps);
3573
3574 if ((val & 1) == 1)
c906108c 3575 {
cca44b1b
JB
3576 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM, ps | CPSR_T);
3577 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffe);
3578 }
3579 else if ((val & 2) == 0)
3580 {
3581 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM,
3582 ps & ~(ULONGEST) CPSR_T);
3583 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val);
c906108c
SS
3584 }
3585 else
3586 {
cca44b1b
JB
3587 /* Unpredictable behaviour. Try to do something sensible (switch to ARM
3588 mode, align dest to 4 bytes). */
3589 warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
3590 regcache_cooked_write_unsigned (regs, ARM_PS_REGNUM,
3591 ps & ~(ULONGEST) CPSR_T);
3592 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, val & 0xfffffffc);
c906108c
SS
3593 }
3594}
ed9a39eb 3595
cca44b1b 3596/* Write to the PC as if from a load instruction. */
ed9a39eb 3597
34e8f22d 3598static void
cca44b1b 3599load_write_pc (struct regcache *regs, ULONGEST val)
ed9a39eb 3600{
cca44b1b
JB
3601 if (DISPLACED_STEPPING_ARCH_VERSION >= 5)
3602 bx_write_pc (regs, val);
3603 else
3604 branch_write_pc (regs, val);
3605}
be8626e0 3606
cca44b1b
JB
3607/* Write to the PC as if from an ALU instruction. */
3608
3609static void
3610alu_write_pc (struct regcache *regs, ULONGEST val)
3611{
3612 if (DISPLACED_STEPPING_ARCH_VERSION >= 7 && displaced_in_arm_mode (regs))
3613 bx_write_pc (regs, val);
3614 else
3615 branch_write_pc (regs, val);
3616}
3617
3618/* Helper for writing to registers for displaced stepping. Writing to the PC
3619 has a varying effects depending on the instruction which does the write:
3620 this is controlled by the WRITE_PC argument. */
3621
3622void
3623displaced_write_reg (struct regcache *regs, struct displaced_step_closure *dsc,
3624 int regno, ULONGEST val, enum pc_write_style write_pc)
3625{
3626 if (regno == 15)
08216dd7 3627 {
cca44b1b
JB
3628 if (debug_displaced)
3629 fprintf_unfiltered (gdb_stdlog, "displaced: writing pc %.8lx\n",
3630 (unsigned long) val);
3631 switch (write_pc)
08216dd7 3632 {
cca44b1b
JB
3633 case BRANCH_WRITE_PC:
3634 branch_write_pc (regs, val);
08216dd7
RE
3635 break;
3636
cca44b1b
JB
3637 case BX_WRITE_PC:
3638 bx_write_pc (regs, val);
3639 break;
3640
3641 case LOAD_WRITE_PC:
3642 load_write_pc (regs, val);
3643 break;
3644
3645 case ALU_WRITE_PC:
3646 alu_write_pc (regs, val);
3647 break;
3648
3649 case CANNOT_WRITE_PC:
3650 warning (_("Instruction wrote to PC in an unexpected way when "
3651 "single-stepping"));
08216dd7
RE
3652 break;
3653
3654 default:
97b9747c
JB
3655 internal_error (__FILE__, __LINE__,
3656 _("Invalid argument to displaced_write_reg"));
08216dd7 3657 }
b508a996 3658
cca44b1b 3659 dsc->wrote_to_pc = 1;
b508a996 3660 }
ed9a39eb 3661 else
b508a996 3662 {
cca44b1b
JB
3663 if (debug_displaced)
3664 fprintf_unfiltered (gdb_stdlog, "displaced: writing r%d value %.8lx\n",
3665 regno, (unsigned long) val);
3666 regcache_cooked_write_unsigned (regs, regno, val);
b508a996 3667 }
34e8f22d
RE
3668}
3669
cca44b1b
JB
3670/* This function is used to concisely determine if an instruction INSN
3671 references PC. Register fields of interest in INSN should have the
3672 corresponding fields of BITMASK set to 0b1111. The function returns return 1
3673 if any of these fields in INSN reference the PC (also 0b1111, r15), else it
3674 returns 0. */
67255d04
RE
3675
3676static int
cca44b1b 3677insn_references_pc (uint32_t insn, uint32_t bitmask)
67255d04 3678{
cca44b1b 3679 uint32_t lowbit = 1;
67255d04 3680
cca44b1b
JB
3681 while (bitmask != 0)
3682 {
3683 uint32_t mask;
44e1a9eb 3684
cca44b1b
JB
3685 for (; lowbit && (bitmask & lowbit) == 0; lowbit <<= 1)
3686 ;
67255d04 3687
cca44b1b
JB
3688 if (!lowbit)
3689 break;
67255d04 3690
cca44b1b 3691 mask = lowbit * 0xf;
67255d04 3692
cca44b1b
JB
3693 if ((insn & mask) == mask)
3694 return 1;
3695
3696 bitmask &= ~mask;
67255d04
RE
3697 }
3698
cca44b1b
JB
3699 return 0;
3700}
2af48f68 3701
cca44b1b
JB
3702/* The simplest copy function. Many instructions have the same effect no
3703 matter what address they are executed at: in those cases, use this. */
67255d04 3704
cca44b1b 3705static int
6e39997a 3706copy_unmodified (struct gdbarch *gdbarch, uint32_t insn,
cca44b1b
JB
3707 const char *iname, struct displaced_step_closure *dsc)
3708{
3709 if (debug_displaced)
3710 fprintf_unfiltered (gdb_stdlog, "displaced: copying insn %.8lx, "
3711 "opcode/class '%s' unmodified\n", (unsigned long) insn,
3712 iname);
67255d04 3713
cca44b1b 3714 dsc->modinsn[0] = insn;
67255d04 3715
cca44b1b
JB
3716 return 0;
3717}
3718
3719/* Preload instructions with immediate offset. */
3720
3721static void
6e39997a 3722cleanup_preload (struct gdbarch *gdbarch,
cca44b1b
JB
3723 struct regcache *regs, struct displaced_step_closure *dsc)
3724{
3725 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3726 if (!dsc->u.preload.immed)
3727 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3728}
3729
3730static int
3731copy_preload (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3732 struct displaced_step_closure *dsc)
3733{
3734 unsigned int rn = bits (insn, 16, 19);
3735 ULONGEST rn_val;
3736 CORE_ADDR from = dsc->insn_addr;
3737
3738 if (!insn_references_pc (insn, 0x000f0000ul))
3739 return copy_unmodified (gdbarch, insn, "preload", dsc);
3740
3741 if (debug_displaced)
3742 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
3743 (unsigned long) insn);
3744
3745 /* Preload instructions:
3746
3747 {pli/pld} [rn, #+/-imm]
3748 ->
3749 {pli/pld} [r0, #+/-imm]. */
3750
3751 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3752 rn_val = displaced_read_reg (regs, from, rn);
3753 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3754
3755 dsc->u.preload.immed = 1;
3756
3757 dsc->modinsn[0] = insn & 0xfff0ffff;
3758
3759 dsc->cleanup = &cleanup_preload;
3760
3761 return 0;
3762}
3763
3764/* Preload instructions with register offset. */
3765
3766static int
3767copy_preload_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3768 struct displaced_step_closure *dsc)
3769{
3770 unsigned int rn = bits (insn, 16, 19);
3771 unsigned int rm = bits (insn, 0, 3);
3772 ULONGEST rn_val, rm_val;
3773 CORE_ADDR from = dsc->insn_addr;
3774
3775 if (!insn_references_pc (insn, 0x000f000ful))
3776 return copy_unmodified (gdbarch, insn, "preload reg", dsc);
3777
3778 if (debug_displaced)
3779 fprintf_unfiltered (gdb_stdlog, "displaced: copying preload insn %.8lx\n",
3780 (unsigned long) insn);
3781
3782 /* Preload register-offset instructions:
3783
3784 {pli/pld} [rn, rm {, shift}]
3785 ->
3786 {pli/pld} [r0, r1 {, shift}]. */
3787
3788 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3789 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
3790 rn_val = displaced_read_reg (regs, from, rn);
3791 rm_val = displaced_read_reg (regs, from, rm);
3792 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3793 displaced_write_reg (regs, dsc, 1, rm_val, CANNOT_WRITE_PC);
3794
3795 dsc->u.preload.immed = 0;
3796
3797 dsc->modinsn[0] = (insn & 0xfff0fff0) | 0x1;
3798
3799 dsc->cleanup = &cleanup_preload;
3800
3801 return 0;
3802}
3803
3804/* Copy/cleanup coprocessor load and store instructions. */
3805
3806static void
6e39997a 3807cleanup_copro_load_store (struct gdbarch *gdbarch,
cca44b1b
JB
3808 struct regcache *regs,
3809 struct displaced_step_closure *dsc)
3810{
3811 ULONGEST rn_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3812
3813 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3814
3815 if (dsc->u.ldst.writeback)
3816 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, LOAD_WRITE_PC);
3817}
3818
3819static int
3820copy_copro_load_store (struct gdbarch *gdbarch, uint32_t insn,
3821 struct regcache *regs,
3822 struct displaced_step_closure *dsc)
3823{
3824 unsigned int rn = bits (insn, 16, 19);
3825 ULONGEST rn_val;
3826 CORE_ADDR from = dsc->insn_addr;
3827
3828 if (!insn_references_pc (insn, 0x000f0000ul))
3829 return copy_unmodified (gdbarch, insn, "copro load/store", dsc);
3830
3831 if (debug_displaced)
3832 fprintf_unfiltered (gdb_stdlog, "displaced: copying coprocessor "
3833 "load/store insn %.8lx\n", (unsigned long) insn);
3834
3835 /* Coprocessor load/store instructions:
3836
3837 {stc/stc2} [<Rn>, #+/-imm] (and other immediate addressing modes)
3838 ->
3839 {stc/stc2} [r0, #+/-imm].
3840
3841 ldc/ldc2 are handled identically. */
3842
3843 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
3844 rn_val = displaced_read_reg (regs, from, rn);
3845 displaced_write_reg (regs, dsc, 0, rn_val, CANNOT_WRITE_PC);
3846
3847 dsc->u.ldst.writeback = bit (insn, 25);
3848 dsc->u.ldst.rn = rn;
3849
3850 dsc->modinsn[0] = insn & 0xfff0ffff;
3851
3852 dsc->cleanup = &cleanup_copro_load_store;
3853
3854 return 0;
3855}
3856
3857/* Clean up branch instructions (actually perform the branch, by setting
3858 PC). */
3859
3860static void
6e39997a 3861cleanup_branch (struct gdbarch *gdbarch, struct regcache *regs,
cca44b1b
JB
3862 struct displaced_step_closure *dsc)
3863{
3864 ULONGEST from = dsc->insn_addr;
3865 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
3866 int branch_taken = condition_true (dsc->u.branch.cond, status);
3867 enum pc_write_style write_pc = dsc->u.branch.exchange
3868 ? BX_WRITE_PC : BRANCH_WRITE_PC;
3869
3870 if (!branch_taken)
3871 return;
3872
3873 if (dsc->u.branch.link)
3874 {
3875 ULONGEST pc = displaced_read_reg (regs, from, 15);
3876 displaced_write_reg (regs, dsc, 14, pc - 4, CANNOT_WRITE_PC);
3877 }
3878
3879 displaced_write_reg (regs, dsc, 15, dsc->u.branch.dest, write_pc);
3880}
3881
3882/* Copy B/BL/BLX instructions with immediate destinations. */
3883
3884static int
6e39997a 3885copy_b_bl_blx (struct gdbarch *gdbarch, uint32_t insn,
cca44b1b
JB
3886 struct regcache *regs, struct displaced_step_closure *dsc)
3887{
3888 unsigned int cond = bits (insn, 28, 31);
3889 int exchange = (cond == 0xf);
3890 int link = exchange || bit (insn, 24);
3891 CORE_ADDR from = dsc->insn_addr;
3892 long offset;
3893
3894 if (debug_displaced)
3895 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s immediate insn "
3896 "%.8lx\n", (exchange) ? "blx" : (link) ? "bl" : "b",
3897 (unsigned long) insn);
3898
3899 /* Implement "BL<cond> <label>" as:
3900
3901 Preparation: cond <- instruction condition
3902 Insn: mov r0, r0 (nop)
3903 Cleanup: if (condition true) { r14 <- pc; pc <- label }.
3904
3905 B<cond> similar, but don't set r14 in cleanup. */
3906
3907 if (exchange)
3908 /* For BLX, set bit 0 of the destination. The cleanup_branch function will
3909 then arrange the switch into Thumb mode. */
3910 offset = (bits (insn, 0, 23) << 2) | (bit (insn, 24) << 1) | 1;
3911 else
3912 offset = bits (insn, 0, 23) << 2;
3913
3914 if (bit (offset, 25))
3915 offset = offset | ~0x3ffffff;
3916
3917 dsc->u.branch.cond = cond;
3918 dsc->u.branch.link = link;
3919 dsc->u.branch.exchange = exchange;
3920 dsc->u.branch.dest = from + 8 + offset;
3921
3922 dsc->modinsn[0] = ARM_NOP;
3923
3924 dsc->cleanup = &cleanup_branch;
3925
3926 return 0;
3927}
3928
3929/* Copy BX/BLX with register-specified destinations. */
3930
3931static int
6e39997a 3932copy_bx_blx_reg (struct gdbarch *gdbarch, uint32_t insn,
cca44b1b
JB
3933 struct regcache *regs, struct displaced_step_closure *dsc)
3934{
3935 unsigned int cond = bits (insn, 28, 31);
3936 /* BX: x12xxx1x
3937 BLX: x12xxx3x. */
3938 int link = bit (insn, 5);
3939 unsigned int rm = bits (insn, 0, 3);
3940 CORE_ADDR from = dsc->insn_addr;
3941
3942 if (debug_displaced)
3943 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s register insn "
3944 "%.8lx\n", (link) ? "blx" : "bx", (unsigned long) insn);
3945
3946 /* Implement {BX,BLX}<cond> <reg>" as:
3947
3948 Preparation: cond <- instruction condition
3949 Insn: mov r0, r0 (nop)
3950 Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
3951
3952 Don't set r14 in cleanup for BX. */
3953
3954 dsc->u.branch.dest = displaced_read_reg (regs, from, rm);
3955
3956 dsc->u.branch.cond = cond;
3957 dsc->u.branch.link = link;
3958 dsc->u.branch.exchange = 1;
3959
3960 dsc->modinsn[0] = ARM_NOP;
3961
3962 dsc->cleanup = &cleanup_branch;
3963
3964 return 0;
3965}
3966
3967/* Copy/cleanup arithmetic/logic instruction with immediate RHS. */
3968
3969static void
6e39997a 3970cleanup_alu_imm (struct gdbarch *gdbarch,
cca44b1b
JB
3971 struct regcache *regs, struct displaced_step_closure *dsc)
3972{
3973 ULONGEST rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
3974 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
3975 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
3976 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
3977}
3978
3979static int
3980copy_alu_imm (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
3981 struct displaced_step_closure *dsc)
3982{
3983 unsigned int rn = bits (insn, 16, 19);
3984 unsigned int rd = bits (insn, 12, 15);
3985 unsigned int op = bits (insn, 21, 24);
3986 int is_mov = (op == 0xd);
3987 ULONGEST rd_val, rn_val;
3988 CORE_ADDR from = dsc->insn_addr;
3989
3990 if (!insn_references_pc (insn, 0x000ff000ul))
3991 return copy_unmodified (gdbarch, insn, "ALU immediate", dsc);
3992
3993 if (debug_displaced)
3994 fprintf_unfiltered (gdb_stdlog, "displaced: copying immediate %s insn "
3995 "%.8lx\n", is_mov ? "move" : "ALU",
3996 (unsigned long) insn);
3997
3998 /* Instruction is of form:
3999
4000 <op><cond> rd, [rn,] #imm
4001
4002 Rewrite as:
4003
4004 Preparation: tmp1, tmp2 <- r0, r1;
4005 r0, r1 <- rd, rn
4006 Insn: <op><cond> r0, r1, #imm
4007 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
4008 */
4009
4010 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4011 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
4012 rn_val = displaced_read_reg (regs, from, rn);
4013 rd_val = displaced_read_reg (regs, from, rd);
4014 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
4015 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
4016 dsc->rd = rd;
4017
4018 if (is_mov)
4019 dsc->modinsn[0] = insn & 0xfff00fff;
4020 else
4021 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x10000;
4022
4023 dsc->cleanup = &cleanup_alu_imm;
4024
4025 return 0;
4026}
4027
4028/* Copy/cleanup arithmetic/logic insns with register RHS. */
4029
4030static void
6e39997a 4031cleanup_alu_reg (struct gdbarch *gdbarch,
cca44b1b
JB
4032 struct regcache *regs, struct displaced_step_closure *dsc)
4033{
4034 ULONGEST rd_val;
4035 int i;
4036
4037 rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
4038
4039 for (i = 0; i < 3; i++)
4040 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
4041
4042 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
4043}
4044
4045static int
4046copy_alu_reg (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4047 struct displaced_step_closure *dsc)
4048{
4049 unsigned int rn = bits (insn, 16, 19);
4050 unsigned int rm = bits (insn, 0, 3);
4051 unsigned int rd = bits (insn, 12, 15);
4052 unsigned int op = bits (insn, 21, 24);
4053 int is_mov = (op == 0xd);
4054 ULONGEST rd_val, rn_val, rm_val;
4055 CORE_ADDR from = dsc->insn_addr;
4056
4057 if (!insn_references_pc (insn, 0x000ff00ful))
4058 return copy_unmodified (gdbarch, insn, "ALU reg", dsc);
4059
4060 if (debug_displaced)
4061 fprintf_unfiltered (gdb_stdlog, "displaced: copying reg %s insn %.8lx\n",
4062 is_mov ? "move" : "ALU", (unsigned long) insn);
4063
4064 /* Instruction is of form:
4065
4066 <op><cond> rd, [rn,] rm [, <shift>]
4067
4068 Rewrite as:
4069
4070 Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
4071 r0, r1, r2 <- rd, rn, rm
4072 Insn: <op><cond> r0, r1, r2 [, <shift>]
4073 Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
4074 */
4075
4076 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4077 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
4078 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
4079 rd_val = displaced_read_reg (regs, from, rd);
4080 rn_val = displaced_read_reg (regs, from, rn);
4081 rm_val = displaced_read_reg (regs, from, rm);
4082 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
4083 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
4084 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
4085 dsc->rd = rd;
4086
4087 if (is_mov)
4088 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x2;
4089 else
4090 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x10002;
4091
4092 dsc->cleanup = &cleanup_alu_reg;
4093
4094 return 0;
4095}
4096
4097/* Cleanup/copy arithmetic/logic insns with shifted register RHS. */
4098
4099static void
6e39997a 4100cleanup_alu_shifted_reg (struct gdbarch *gdbarch,
cca44b1b
JB
4101 struct regcache *regs,
4102 struct displaced_step_closure *dsc)
4103{
4104 ULONGEST rd_val = displaced_read_reg (regs, dsc->insn_addr, 0);
4105 int i;
4106
4107 for (i = 0; i < 4; i++)
4108 displaced_write_reg (regs, dsc, i, dsc->tmp[i], CANNOT_WRITE_PC);
4109
4110 displaced_write_reg (regs, dsc, dsc->rd, rd_val, ALU_WRITE_PC);
4111}
4112
4113static int
4114copy_alu_shifted_reg (struct gdbarch *gdbarch, uint32_t insn,
4115 struct regcache *regs, struct displaced_step_closure *dsc)
4116{
4117 unsigned int rn = bits (insn, 16, 19);
4118 unsigned int rm = bits (insn, 0, 3);
4119 unsigned int rd = bits (insn, 12, 15);
4120 unsigned int rs = bits (insn, 8, 11);
4121 unsigned int op = bits (insn, 21, 24);
4122 int is_mov = (op == 0xd), i;
4123 ULONGEST rd_val, rn_val, rm_val, rs_val;
4124 CORE_ADDR from = dsc->insn_addr;
4125
4126 if (!insn_references_pc (insn, 0x000fff0ful))
4127 return copy_unmodified (gdbarch, insn, "ALU shifted reg", dsc);
4128
4129 if (debug_displaced)
4130 fprintf_unfiltered (gdb_stdlog, "displaced: copying shifted reg %s insn "
4131 "%.8lx\n", is_mov ? "move" : "ALU",
4132 (unsigned long) insn);
4133
4134 /* Instruction is of form:
4135
4136 <op><cond> rd, [rn,] rm, <shift> rs
4137
4138 Rewrite as:
4139
4140 Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
4141 r0, r1, r2, r3 <- rd, rn, rm, rs
4142 Insn: <op><cond> r0, r1, r2, <shift> r3
4143 Cleanup: tmp5 <- r0
4144 r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
4145 rd <- tmp5
4146 */
4147
4148 for (i = 0; i < 4; i++)
4149 dsc->tmp[i] = displaced_read_reg (regs, from, i);
4150
4151 rd_val = displaced_read_reg (regs, from, rd);
4152 rn_val = displaced_read_reg (regs, from, rn);
4153 rm_val = displaced_read_reg (regs, from, rm);
4154 rs_val = displaced_read_reg (regs, from, rs);
4155 displaced_write_reg (regs, dsc, 0, rd_val, CANNOT_WRITE_PC);
4156 displaced_write_reg (regs, dsc, 1, rn_val, CANNOT_WRITE_PC);
4157 displaced_write_reg (regs, dsc, 2, rm_val, CANNOT_WRITE_PC);
4158 displaced_write_reg (regs, dsc, 3, rs_val, CANNOT_WRITE_PC);
4159 dsc->rd = rd;
4160
4161 if (is_mov)
4162 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x302;
4163 else
4164 dsc->modinsn[0] = (insn & 0xfff000f0) | 0x10302;
4165
4166 dsc->cleanup = &cleanup_alu_shifted_reg;
4167
4168 return 0;
4169}
4170
4171/* Clean up load instructions. */
4172
4173static void
6e39997a 4174cleanup_load (struct gdbarch *gdbarch, struct regcache *regs,
cca44b1b
JB
4175 struct displaced_step_closure *dsc)
4176{
4177 ULONGEST rt_val, rt_val2 = 0, rn_val;
4178 CORE_ADDR from = dsc->insn_addr;
4179
4180 rt_val = displaced_read_reg (regs, from, 0);
4181 if (dsc->u.ldst.xfersize == 8)
4182 rt_val2 = displaced_read_reg (regs, from, 1);
4183 rn_val = displaced_read_reg (regs, from, 2);
4184
4185 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4186 if (dsc->u.ldst.xfersize > 4)
4187 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4188 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
4189 if (!dsc->u.ldst.immed)
4190 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
4191
4192 /* Handle register writeback. */
4193 if (dsc->u.ldst.writeback)
4194 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
4195 /* Put result in right place. */
4196 displaced_write_reg (regs, dsc, dsc->rd, rt_val, LOAD_WRITE_PC);
4197 if (dsc->u.ldst.xfersize == 8)
4198 displaced_write_reg (regs, dsc, dsc->rd + 1, rt_val2, LOAD_WRITE_PC);
4199}
4200
4201/* Clean up store instructions. */
4202
4203static void
6e39997a 4204cleanup_store (struct gdbarch *gdbarch, struct regcache *regs,
cca44b1b
JB
4205 struct displaced_step_closure *dsc)
4206{
4207 CORE_ADDR from = dsc->insn_addr;
4208 ULONGEST rn_val = displaced_read_reg (regs, from, 2);
4209
4210 displaced_write_reg (regs, dsc, 0, dsc->tmp[0], CANNOT_WRITE_PC);
4211 if (dsc->u.ldst.xfersize > 4)
4212 displaced_write_reg (regs, dsc, 1, dsc->tmp[1], CANNOT_WRITE_PC);
4213 displaced_write_reg (regs, dsc, 2, dsc->tmp[2], CANNOT_WRITE_PC);
4214 if (!dsc->u.ldst.immed)
4215 displaced_write_reg (regs, dsc, 3, dsc->tmp[3], CANNOT_WRITE_PC);
4216 if (!dsc->u.ldst.restore_r4)
4217 displaced_write_reg (regs, dsc, 4, dsc->tmp[4], CANNOT_WRITE_PC);
4218
4219 /* Writeback. */
4220 if (dsc->u.ldst.writeback)
4221 displaced_write_reg (regs, dsc, dsc->u.ldst.rn, rn_val, CANNOT_WRITE_PC);
4222}
4223
4224/* Copy "extra" load/store instructions. These are halfword/doubleword
4225 transfers, which have a different encoding to byte/word transfers. */
4226
4227static int
4228copy_extra_ld_st (struct gdbarch *gdbarch, uint32_t insn, int unpriveleged,
4229 struct regcache *regs, struct displaced_step_closure *dsc)
4230{
4231 unsigned int op1 = bits (insn, 20, 24);
4232 unsigned int op2 = bits (insn, 5, 6);
4233 unsigned int rt = bits (insn, 12, 15);
4234 unsigned int rn = bits (insn, 16, 19);
4235 unsigned int rm = bits (insn, 0, 3);
4236 char load[12] = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
4237 char bytesize[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
4238 int immed = (op1 & 0x4) != 0;
4239 int opcode;
4240 ULONGEST rt_val, rt_val2 = 0, rn_val, rm_val = 0;
4241 CORE_ADDR from = dsc->insn_addr;
4242
4243 if (!insn_references_pc (insn, 0x000ff00ful))
4244 return copy_unmodified (gdbarch, insn, "extra load/store", dsc);
4245
4246 if (debug_displaced)
4247 fprintf_unfiltered (gdb_stdlog, "displaced: copying %sextra load/store "
4248 "insn %.8lx\n", unpriveleged ? "unpriveleged " : "",
4249 (unsigned long) insn);
4250
4251 opcode = ((op2 << 2) | (op1 & 0x1) | ((op1 & 0x4) >> 1)) - 4;
4252
4253 if (opcode < 0)
4254 internal_error (__FILE__, __LINE__,
4255 _("copy_extra_ld_st: instruction decode error"));
4256
4257 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4258 dsc->tmp[1] = displaced_read_reg (regs, from, 1);
4259 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
4260 if (!immed)
4261 dsc->tmp[3] = displaced_read_reg (regs, from, 3);
4262
4263 rt_val = displaced_read_reg (regs, from, rt);
4264 if (bytesize[opcode] == 8)
4265 rt_val2 = displaced_read_reg (regs, from, rt + 1);
4266 rn_val = displaced_read_reg (regs, from, rn);
4267 if (!immed)
4268 rm_val = displaced_read_reg (regs, from, rm);
4269
4270 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
4271 if (bytesize[opcode] == 8)
4272 displaced_write_reg (regs, dsc, 1, rt_val2, CANNOT_WRITE_PC);
4273 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
4274 if (!immed)
4275 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
4276
4277 dsc->rd = rt;
4278 dsc->u.ldst.xfersize = bytesize[opcode];
4279 dsc->u.ldst.rn = rn;
4280 dsc->u.ldst.immed = immed;
4281 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
4282 dsc->u.ldst.restore_r4 = 0;
4283
4284 if (immed)
4285 /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
4286 ->
4287 {ldr,str}<width><cond> r0, [r1,] [r2, #imm]. */
4288 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
4289 else
4290 /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
4291 ->
4292 {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3]. */
4293 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
4294
4295 dsc->cleanup = load[opcode] ? &cleanup_load : &cleanup_store;
4296
4297 return 0;
4298}
4299
4300/* Copy byte/word loads and stores. */
4301
4302static int
4303copy_ldr_str_ldrb_strb (struct gdbarch *gdbarch, uint32_t insn,
4304 struct regcache *regs,
4305 struct displaced_step_closure *dsc, int load, int byte,
4306 int usermode)
4307{
4308 int immed = !bit (insn, 25);
4309 unsigned int rt = bits (insn, 12, 15);
4310 unsigned int rn = bits (insn, 16, 19);
4311 unsigned int rm = bits (insn, 0, 3); /* Only valid if !immed. */
4312 ULONGEST rt_val, rn_val, rm_val = 0;
4313 CORE_ADDR from = dsc->insn_addr;
4314
4315 if (!insn_references_pc (insn, 0x000ff00ful))
4316 return copy_unmodified (gdbarch, insn, "load/store", dsc);
4317
4318 if (debug_displaced)
4319 fprintf_unfiltered (gdb_stdlog, "displaced: copying %s%s insn %.8lx\n",
4320 load ? (byte ? "ldrb" : "ldr")
4321 : (byte ? "strb" : "str"), usermode ? "t" : "",
4322 (unsigned long) insn);
4323
4324 dsc->tmp[0] = displaced_read_reg (regs, from, 0);
4325 dsc->tmp[2] = displaced_read_reg (regs, from, 2);
4326 if (!immed)
4327 dsc->tmp[3] = displaced_read_reg (regs, from, 3);
4328 if (!load)
4329 dsc->tmp[4] = displaced_read_reg (regs, from, 4);
4330
4331 rt_val = displaced_read_reg (regs, from, rt);
4332 rn_val = displaced_read_reg (regs, from, rn);
4333 if (!immed)
4334 rm_val = displaced_read_reg (regs, from, rm);
4335
4336 displaced_write_reg (regs, dsc, 0, rt_val, CANNOT_WRITE_PC);
4337 displaced_write_reg (regs, dsc, 2, rn_val, CANNOT_WRITE_PC);
4338 if (!immed)
4339 displaced_write_reg (regs, dsc, 3, rm_val, CANNOT_WRITE_PC);
4340
4341 dsc->rd = rt;
4342 dsc->u.ldst.xfersize = byte ? 1 : 4;
4343 dsc->u.ldst.rn = rn;
4344 dsc->u.ldst.immed = immed;
4345 dsc->u.ldst.writeback = bit (insn, 24) == 0 || bit (insn, 21) != 0;
4346
4347 /* To write PC we can do:
4348
4349 scratch+0: str pc, temp (*temp = scratch + 8 + offset)
4350 scratch+4: ldr r4, temp
4351 scratch+8: sub r4, r4, pc (r4 = scratch + 8 + offset - scratch - 8 - 8)
4352 scratch+12: add r4, r4, #8 (r4 = offset)
4353 scratch+16: add r0, r0, r4
4354 scratch+20: str r0, [r2, #imm] (or str r0, [r2, r3])
4355 scratch+24: <temp>
4356
4357 Otherwise we don't know what value to write for PC, since the offset is
4358 architecture-dependent (sometimes PC+8, sometimes PC+12). */
4359
4360 if (load || rt != 15)
4361 {
4362 dsc->u.ldst.restore_r4 = 0;
4363
4364 if (immed)
4365 /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
4366 ->
4367 {ldr,str}[b]<cond> r0, [r2, #imm]. */
4368 dsc->modinsn[0] = (insn & 0xfff00fff) | 0x20000;
4369 else
4370 /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
4371 ->
4372 {ldr,str}[b]<cond> r0, [r2, r3]. */
4373 dsc->modinsn[0] = (insn & 0xfff00ff0) | 0x20003;
4374 }
4375 else
4376 {
4377 /* We need to use r4 as scratch. Make sure it's restored afterwards. */
4378 dsc->u.ldst.restore_r4 = 1;
4379
4380 dsc->modinsn[0] = 0xe58ff014; /* str pc, [pc, #20]. */
4381 dsc->modinsn[1] = 0xe59f4010; /* ldr r4, [pc, #16]. */
4382 dsc->modinsn[2] = 0xe044400f; /* sub r4, r4, pc. */
4383 dsc->modinsn[3] = 0xe2844008; /* add r4, r4, #8. */
4384 dsc->modinsn[4] = 0xe0800004; /* add r0, r0, r4. */
4385
4386 /* As above. */
4387 if (immed)
4388 dsc->modinsn[5] = (insn & 0xfff00fff) | 0x20000;
4389 else
4390 dsc->modinsn[5] = (insn & 0xfff00ff0) | 0x20003;
4391
4392 dsc->modinsn[6] = 0x0; /* breakpoint location. */
4393 dsc->modinsn[7] = 0x0; /* scratch space. */
4394
4395 dsc->numinsns = 6;
4396 }
4397
4398 dsc->cleanup = load ? &cleanup_load : &cleanup_store;
4399
4400 return 0;
4401}
4402
4403/* Cleanup LDM instructions with fully-populated register list. This is an
4404 unfortunate corner case: it's impossible to implement correctly by modifying
4405 the instruction. The issue is as follows: we have an instruction,
4406
4407 ldm rN, {r0-r15}
4408
4409 which we must rewrite to avoid loading PC. A possible solution would be to
4410 do the load in two halves, something like (with suitable cleanup
4411 afterwards):
4412
4413 mov r8, rN
4414 ldm[id][ab] r8!, {r0-r7}
4415 str r7, <temp>
4416 ldm[id][ab] r8, {r7-r14}
4417 <bkpt>
4418
4419 but at present there's no suitable place for <temp>, since the scratch space
4420 is overwritten before the cleanup routine is called. For now, we simply
4421 emulate the instruction. */
4422
4423static void
4424cleanup_block_load_all (struct gdbarch *gdbarch, struct regcache *regs,
4425 struct displaced_step_closure *dsc)
4426{
4427 ULONGEST from = dsc->insn_addr;
4428 int inc = dsc->u.block.increment;
4429 int bump_before = dsc->u.block.before ? (inc ? 4 : -4) : 0;
4430 int bump_after = dsc->u.block.before ? 0 : (inc ? 4 : -4);
4431 uint32_t regmask = dsc->u.block.regmask;
4432 int regno = inc ? 0 : 15;
4433 CORE_ADDR xfer_addr = dsc->u.block.xfer_addr;
4434 int exception_return = dsc->u.block.load && dsc->u.block.user
4435 && (regmask & 0x8000) != 0;
4436 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4437 int do_transfer = condition_true (dsc->u.block.cond, status);
4438 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4439
4440 if (!do_transfer)
4441 return;
4442
4443 /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
4444 sensible we can do here. Complain loudly. */
4445 if (exception_return)
4446 error (_("Cannot single-step exception return"));
4447
4448 /* We don't handle any stores here for now. */
4449 gdb_assert (dsc->u.block.load != 0);
4450
4451 if (debug_displaced)
4452 fprintf_unfiltered (gdb_stdlog, "displaced: emulating block transfer: "
4453 "%s %s %s\n", dsc->u.block.load ? "ldm" : "stm",
4454 dsc->u.block.increment ? "inc" : "dec",
4455 dsc->u.block.before ? "before" : "after");
4456
4457 while (regmask)
4458 {
4459 uint32_t memword;
4460
4461 if (inc)
4462 while (regno <= 15 && (regmask & (1 << regno)) == 0)
4463 regno++;
4464 else
4465 while (regno >= 0 && (regmask & (1 << regno)) == 0)
4466 regno--;
4467
4468 xfer_addr += bump_before;
4469
4470 memword = read_memory_unsigned_integer (xfer_addr, 4, byte_order);
4471 displaced_write_reg (regs, dsc, regno, memword, LOAD_WRITE_PC);
4472
4473 xfer_addr += bump_after;
4474
4475 regmask &= ~(1 << regno);
4476 }
4477
4478 if (dsc->u.block.writeback)
4479 displaced_write_reg (regs, dsc, dsc->u.block.rn, xfer_addr,
4480 CANNOT_WRITE_PC);
4481}
4482
4483/* Clean up an STM which included the PC in the register list. */
4484
4485static void
4486cleanup_block_store_pc (struct gdbarch *gdbarch, struct regcache *regs,
4487 struct displaced_step_closure *dsc)
4488{
4489 ULONGEST from = dsc->insn_addr;
4490 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4491 int store_executed = condition_true (dsc->u.block.cond, status);
4492 CORE_ADDR pc_stored_at, transferred_regs = bitcount (dsc->u.block.regmask);
4493 CORE_ADDR stm_insn_addr;
4494 uint32_t pc_val;
4495 long offset;
4496 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4497
4498 /* If condition code fails, there's nothing else to do. */
4499 if (!store_executed)
4500 return;
4501
4502 if (dsc->u.block.increment)
4503 {
4504 pc_stored_at = dsc->u.block.xfer_addr + 4 * transferred_regs;
4505
4506 if (dsc->u.block.before)
4507 pc_stored_at += 4;
4508 }
4509 else
4510 {
4511 pc_stored_at = dsc->u.block.xfer_addr;
4512
4513 if (dsc->u.block.before)
4514 pc_stored_at -= 4;
4515 }
4516
4517 pc_val = read_memory_unsigned_integer (pc_stored_at, 4, byte_order);
4518 stm_insn_addr = dsc->scratch_base;
4519 offset = pc_val - stm_insn_addr;
4520
4521 if (debug_displaced)
4522 fprintf_unfiltered (gdb_stdlog, "displaced: detected PC offset %.8lx for "
4523 "STM instruction\n", offset);
4524
4525 /* Rewrite the stored PC to the proper value for the non-displaced original
4526 instruction. */
4527 write_memory_unsigned_integer (pc_stored_at, 4, byte_order,
4528 dsc->insn_addr + offset);
4529}
4530
4531/* Clean up an LDM which includes the PC in the register list. We clumped all
4532 the registers in the transferred list into a contiguous range r0...rX (to
4533 avoid loading PC directly and losing control of the debugged program), so we
4534 must undo that here. */
4535
4536static void
6e39997a 4537cleanup_block_load_pc (struct gdbarch *gdbarch,
cca44b1b
JB
4538 struct regcache *regs,
4539 struct displaced_step_closure *dsc)
4540{
4541 ULONGEST from = dsc->insn_addr;
4542 uint32_t status = displaced_read_reg (regs, from, ARM_PS_REGNUM);
4543 int load_executed = condition_true (dsc->u.block.cond, status), i;
4544 unsigned int mask = dsc->u.block.regmask, write_reg = 15;
4545 unsigned int regs_loaded = bitcount (mask);
4546 unsigned int num_to_shuffle = regs_loaded, clobbered;
4547
4548 /* The method employed here will fail if the register list is fully populated
4549 (we need to avoid loading PC directly). */
4550 gdb_assert (num_to_shuffle < 16);
4551
4552 if (!load_executed)
4553 return;
4554
4555 clobbered = (1 << num_to_shuffle) - 1;
4556
4557 while (num_to_shuffle > 0)
4558 {
4559 if ((mask & (1 << write_reg)) != 0)
4560 {
4561 unsigned int read_reg = num_to_shuffle - 1;
4562
4563 if (read_reg != write_reg)
4564 {
4565 ULONGEST rval = displaced_read_reg (regs, from, read_reg);
4566 displaced_write_reg (regs, dsc, write_reg, rval, LOAD_WRITE_PC);
4567 if (debug_displaced)
4568 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: move "
4569 "loaded register r%d to r%d\n"), read_reg,
4570 write_reg);
4571 }
4572 else if (debug_displaced)
4573 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: register "
4574 "r%d already in the right place\n"),
4575 write_reg);
4576
4577 clobbered &= ~(1 << write_reg);
4578
4579 num_to_shuffle--;
4580 }
4581
4582 write_reg--;
4583 }
4584
4585 /* Restore any registers we scribbled over. */
4586 for (write_reg = 0; clobbered != 0; write_reg++)
4587 {
4588 if ((clobbered & (1 << write_reg)) != 0)
4589 {
4590 displaced_write_reg (regs, dsc, write_reg, dsc->tmp[write_reg],
4591 CANNOT_WRITE_PC);
4592 if (debug_displaced)
4593 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM: restored "
4594 "clobbered register r%d\n"), write_reg);
4595 clobbered &= ~(1 << write_reg);
4596 }
4597 }
4598
4599 /* Perform register writeback manually. */
4600 if (dsc->u.block.writeback)
4601 {
4602 ULONGEST new_rn_val = dsc->u.block.xfer_addr;
4603
4604 if (dsc->u.block.increment)
4605 new_rn_val += regs_loaded * 4;
4606 else
4607 new_rn_val -= regs_loaded * 4;
4608
4609 displaced_write_reg (regs, dsc, dsc->u.block.rn, new_rn_val,
4610 CANNOT_WRITE_PC);
4611 }
4612}
4613
4614/* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
4615 in user-level code (in particular exception return, ldm rn, {...pc}^). */
4616
4617static int
4618copy_block_xfer (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
4619 struct displaced_step_closure *dsc)
4620{
4621 int load = bit (insn, 20);
4622 int user = bit (insn, 22);
4623 int increment = bit (insn, 23);
4624 int before = bit (insn, 24);
4625 int writeback = bit (insn, 21);
4626 int rn = bits (insn, 16, 19);
4627 CORE_ADDR from = dsc->insn_addr;
4628
4629 /* Block transfers which don't mention PC can be run directly out-of-line. */
4630 if (rn != 15 && (insn & 0x8000) == 0)
4631 return copy_unmodified (gdbarch, insn, "ldm/stm", dsc);
4632
4633 if (rn == 15)
4634 {
4635 warning (_("displaced: Unpredictable LDM or STM with base register r15"));
4636 return copy_unmodified (gdbarch, insn, "unpredictable ldm/stm", dsc);
4637 }
4638
4639 if (debug_displaced)
4640 fprintf_unfiltered (gdb_stdlog, "displaced: copying block transfer insn "
4641 "%.8lx\n", (unsigned long) insn);
4642
4643 dsc->u.block.xfer_addr = displaced_read_reg (regs, from, rn);
4644 dsc->u.block.rn = rn;
4645
4646 dsc->u.block.load = load;
4647 dsc->u.block.user = user;
4648 dsc->u.block.increment = increment;
4649 dsc->u.block.before = before;
4650 dsc->u.block.writeback = writeback;
4651 dsc->u.block.cond = bits (insn, 28, 31);
4652
4653 dsc->u.block.regmask = insn & 0xffff;
4654
4655 if (load)
4656 {
4657 if ((insn & 0xffff) == 0xffff)
4658 {
4659 /* LDM with a fully-populated register list. This case is
4660 particularly tricky. Implement for now by fully emulating the
4661 instruction (which might not behave perfectly in all cases, but
4662 these instructions should be rare enough for that not to matter
4663 too much). */
4664 dsc->modinsn[0] = ARM_NOP;
4665
4666 dsc->cleanup = &cleanup_block_load_all;
4667 }
4668 else
4669 {
4670 /* LDM of a list of registers which includes PC. Implement by
4671 rewriting the list of registers to be transferred into a
4672 contiguous chunk r0...rX before doing the transfer, then shuffling
4673 registers into the correct places in the cleanup routine. */
4674 unsigned int regmask = insn & 0xffff;
4675 unsigned int num_in_list = bitcount (regmask), new_regmask, bit = 1;
4676 unsigned int to = 0, from = 0, i, new_rn;
4677
4678 for (i = 0; i < num_in_list; i++)
4679 dsc->tmp[i] = displaced_read_reg (regs, from, i);
4680
4681 /* Writeback makes things complicated. We need to avoid clobbering
4682 the base register with one of the registers in our modified
4683 register list, but just using a different register can't work in
4684 all cases, e.g.:
4685
4686 ldm r14!, {r0-r13,pc}
4687
4688 which would need to be rewritten as:
4689
4690 ldm rN!, {r0-r14}
4691
4692 but that can't work, because there's no free register for N.
4693
4694 Solve this by turning off the writeback bit, and emulating
4695 writeback manually in the cleanup routine. */
4696
4697 if (writeback)
4698 insn &= ~(1 << 21);
4699
4700 new_regmask = (1 << num_in_list) - 1;
4701
4702 if (debug_displaced)
4703 fprintf_unfiltered (gdb_stdlog, _("displaced: LDM r%d%s, "
4704 "{..., pc}: original reg list %.4x, modified "
4705 "list %.4x\n"), rn, writeback ? "!" : "",
4706 (int) insn & 0xffff, new_regmask);
4707
4708 dsc->modinsn[0] = (insn & ~0xffff) | (new_regmask & 0xffff);
4709
4710 dsc->cleanup = &cleanup_block_load_pc;
4711 }
4712 }
4713 else
4714 {
4715 /* STM of a list of registers which includes PC. Run the instruction
4716 as-is, but out of line: this will store the wrong value for the PC,
4717 so we must manually fix up the memory in the cleanup routine.
4718 Doing things this way has the advantage that we can auto-detect
4719 the offset of the PC write (which is architecture-dependent) in
4720 the cleanup routine. */
4721 dsc->modinsn[0] = insn;
4722
4723 dsc->cleanup = &cleanup_block_store_pc;
4724 }
4725
4726 return 0;
4727}
4728
4729/* Cleanup/copy SVC (SWI) instructions. These two functions are overridden
4730 for Linux, where some SVC instructions must be treated specially. */
4731
4732static void
6e39997a 4733cleanup_svc (struct gdbarch *gdbarch, struct regcache *regs,
cca44b1b
JB
4734 struct displaced_step_closure *dsc)
4735{
4736 CORE_ADDR from = dsc->insn_addr;
4737 CORE_ADDR resume_addr = from + 4;
4738
4739 if (debug_displaced)
4740 fprintf_unfiltered (gdb_stdlog, "displaced: cleanup for svc, resume at "
4741 "%.8lx\n", (unsigned long) resume_addr);
4742
4743 displaced_write_reg (regs, dsc, ARM_PC_REGNUM, resume_addr, BRANCH_WRITE_PC);
4744}
4745
4746static int
4747copy_svc (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
4748 struct regcache *regs, struct displaced_step_closure *dsc)
4749{
4750 CORE_ADDR from = dsc->insn_addr;
4751
4752 /* Allow OS-specific code to override SVC handling. */
4753 if (dsc->u.svc.copy_svc_os)
4754 return dsc->u.svc.copy_svc_os (gdbarch, insn, to, regs, dsc);
4755
4756 if (debug_displaced)
4757 fprintf_unfiltered (gdb_stdlog, "displaced: copying svc insn %.8lx\n",
4758 (unsigned long) insn);
4759
4760 /* Preparation: none.
4761 Insn: unmodified svc.
4762 Cleanup: pc <- insn_addr + 4. */
4763
4764 dsc->modinsn[0] = insn;
4765
4766 dsc->cleanup = &cleanup_svc;
4767 /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
4768 instruction. */
4769 dsc->wrote_to_pc = 1;
4770
4771 return 0;
4772}
4773
4774/* Copy undefined instructions. */
4775
4776static int
6e39997a 4777copy_undef (struct gdbarch *gdbarch, uint32_t insn,
cca44b1b
JB
4778 struct displaced_step_closure *dsc)
4779{
4780 if (debug_displaced)
4781 fprintf_unfiltered (gdb_stdlog, "displaced: copying undefined insn %.8lx\n",
4782 (unsigned long) insn);
4783
4784 dsc->modinsn[0] = insn;
4785
4786 return 0;
4787}
4788
4789/* Copy unpredictable instructions. */
4790
4791static int
6e39997a 4792copy_unpred (struct gdbarch *gdbarch, uint32_t insn,
cca44b1b
JB
4793 struct displaced_step_closure *dsc)
4794{
4795 if (debug_displaced)
4796 fprintf_unfiltered (gdb_stdlog, "displaced: copying unpredictable insn "
4797 "%.8lx\n", (unsigned long) insn);
4798
4799 dsc->modinsn[0] = insn;
4800
4801 return 0;
4802}
4803
4804/* The decode_* functions are instruction decoding helpers. They mostly follow
4805 the presentation in the ARM ARM. */
4806
4807static int
4808decode_misc_memhint_neon (struct gdbarch *gdbarch, uint32_t insn,
4809 struct regcache *regs,
4810 struct displaced_step_closure *dsc)
4811{
4812 unsigned int op1 = bits (insn, 20, 26), op2 = bits (insn, 4, 7);
4813 unsigned int rn = bits (insn, 16, 19);
4814
4815 if (op1 == 0x10 && (op2 & 0x2) == 0x0 && (rn & 0xe) == 0x0)
4816 return copy_unmodified (gdbarch, insn, "cps", dsc);
4817 else if (op1 == 0x10 && op2 == 0x0 && (rn & 0xe) == 0x1)
4818 return copy_unmodified (gdbarch, insn, "setend", dsc);
4819 else if ((op1 & 0x60) == 0x20)
4820 return copy_unmodified (gdbarch, insn, "neon dataproc", dsc);
4821 else if ((op1 & 0x71) == 0x40)
4822 return copy_unmodified (gdbarch, insn, "neon elt/struct load/store", dsc);
4823 else if ((op1 & 0x77) == 0x41)
4824 return copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
4825 else if ((op1 & 0x77) == 0x45)
4826 return copy_preload (gdbarch, insn, regs, dsc); /* pli. */
4827 else if ((op1 & 0x77) == 0x51)
4828 {
4829 if (rn != 0xf)
4830 return copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
4831 else
4832 return copy_unpred (gdbarch, insn, dsc);
4833 }
4834 else if ((op1 & 0x77) == 0x55)
4835 return copy_preload (gdbarch, insn, regs, dsc); /* pld/pldw. */
4836 else if (op1 == 0x57)
4837 switch (op2)
4838 {
4839 case 0x1: return copy_unmodified (gdbarch, insn, "clrex", dsc);
4840 case 0x4: return copy_unmodified (gdbarch, insn, "dsb", dsc);
4841 case 0x5: return copy_unmodified (gdbarch, insn, "dmb", dsc);
4842 case 0x6: return copy_unmodified (gdbarch, insn, "isb", dsc);
4843 default: return copy_unpred (gdbarch, insn, dsc);
4844 }
4845 else if ((op1 & 0x63) == 0x43)
4846 return copy_unpred (gdbarch, insn, dsc);
4847 else if ((op2 & 0x1) == 0x0)
4848 switch (op1 & ~0x80)
4849 {
4850 case 0x61:
4851 return copy_unmodified (gdbarch, insn, "unallocated mem hint", dsc);
4852 case 0x65:
4853 return copy_preload_reg (gdbarch, insn, regs, dsc); /* pli reg. */
4854 case 0x71: case 0x75:
4855 /* pld/pldw reg. */
4856 return copy_preload_reg (gdbarch, insn, regs, dsc);
4857 case 0x63: case 0x67: case 0x73: case 0x77:
4858 return copy_unpred (gdbarch, insn, dsc);
4859 default:
4860 return copy_undef (gdbarch, insn, dsc);
4861 }
4862 else
4863 return copy_undef (gdbarch, insn, dsc); /* Probably unreachable. */
4864}
4865
4866static int
4867decode_unconditional (struct gdbarch *gdbarch, uint32_t insn,
4868 struct regcache *regs, struct displaced_step_closure *dsc)
4869{
4870 if (bit (insn, 27) == 0)
4871 return decode_misc_memhint_neon (gdbarch, insn, regs, dsc);
4872 /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx. */
4873 else switch (((insn & 0x7000000) >> 23) | ((insn & 0x100000) >> 20))
4874 {
4875 case 0x0: case 0x2:
4876 return copy_unmodified (gdbarch, insn, "srs", dsc);
4877
4878 case 0x1: case 0x3:
4879 return copy_unmodified (gdbarch, insn, "rfe", dsc);
4880
4881 case 0x4: case 0x5: case 0x6: case 0x7:
4882 return copy_b_bl_blx (gdbarch, insn, regs, dsc);
4883
4884 case 0x8:
4885 switch ((insn & 0xe00000) >> 21)
4886 {
4887 case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
4888 /* stc/stc2. */
4889 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4890
4891 case 0x2:
4892 return copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
4893
4894 default:
4895 return copy_undef (gdbarch, insn, dsc);
4896 }
4897
4898 case 0x9:
4899 {
4900 int rn_f = (bits (insn, 16, 19) == 0xf);
4901 switch ((insn & 0xe00000) >> 21)
4902 {
4903 case 0x1: case 0x3:
4904 /* ldc/ldc2 imm (undefined for rn == pc). */
4905 return rn_f ? copy_undef (gdbarch, insn, dsc)
4906 : copy_copro_load_store (gdbarch, insn, regs, dsc);
4907
4908 case 0x2:
4909 return copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
4910
4911 case 0x4: case 0x5: case 0x6: case 0x7:
4912 /* ldc/ldc2 lit (undefined for rn != pc). */
4913 return rn_f ? copy_copro_load_store (gdbarch, insn, regs, dsc)
4914 : copy_undef (gdbarch, insn, dsc);
4915
4916 default:
4917 return copy_undef (gdbarch, insn, dsc);
4918 }
4919 }
4920
4921 case 0xa:
4922 return copy_unmodified (gdbarch, insn, "stc/stc2", dsc);
4923
4924 case 0xb:
4925 if (bits (insn, 16, 19) == 0xf)
4926 /* ldc/ldc2 lit. */
4927 return copy_copro_load_store (gdbarch, insn, regs, dsc);
4928 else
4929 return copy_undef (gdbarch, insn, dsc);
4930
4931 case 0xc:
4932 if (bit (insn, 4))
4933 return copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
4934 else
4935 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4936
4937 case 0xd:
4938 if (bit (insn, 4))
4939 return copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
4940 else
4941 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
4942
4943 default:
4944 return copy_undef (gdbarch, insn, dsc);
4945 }
4946}
4947
4948/* Decode miscellaneous instructions in dp/misc encoding space. */
4949
4950static int
4951decode_miscellaneous (struct gdbarch *gdbarch, uint32_t insn,
4952 struct regcache *regs, struct displaced_step_closure *dsc)
4953{
4954 unsigned int op2 = bits (insn, 4, 6);
4955 unsigned int op = bits (insn, 21, 22);
4956 unsigned int op1 = bits (insn, 16, 19);
4957
4958 switch (op2)
4959 {
4960 case 0x0:
4961 return copy_unmodified (gdbarch, insn, "mrs/msr", dsc);
4962
4963 case 0x1:
4964 if (op == 0x1) /* bx. */
4965 return copy_bx_blx_reg (gdbarch, insn, regs, dsc);
4966 else if (op == 0x3)
4967 return copy_unmodified (gdbarch, insn, "clz", dsc);
4968 else
4969 return copy_undef (gdbarch, insn, dsc);
4970
4971 case 0x2:
4972 if (op == 0x1)
4973 /* Not really supported. */
4974 return copy_unmodified (gdbarch, insn, "bxj", dsc);
4975 else
4976 return copy_undef (gdbarch, insn, dsc);
4977
4978 case 0x3:
4979 if (op == 0x1)
4980 return copy_bx_blx_reg (gdbarch, insn, regs, dsc); /* blx register. */
4981 else
4982 return copy_undef (gdbarch, insn, dsc);
4983
4984 case 0x5:
4985 return copy_unmodified (gdbarch, insn, "saturating add/sub", dsc);
4986
4987 case 0x7:
4988 if (op == 0x1)
4989 return copy_unmodified (gdbarch, insn, "bkpt", dsc);
4990 else if (op == 0x3)
4991 /* Not really supported. */
4992 return copy_unmodified (gdbarch, insn, "smc", dsc);
4993
4994 default:
4995 return copy_undef (gdbarch, insn, dsc);
4996 }
4997}
4998
4999static int
5000decode_dp_misc (struct gdbarch *gdbarch, uint32_t insn, struct regcache *regs,
5001 struct displaced_step_closure *dsc)
5002{
5003 if (bit (insn, 25))
5004 switch (bits (insn, 20, 24))
5005 {
5006 case 0x10:
5007 return copy_unmodified (gdbarch, insn, "movw", dsc);
5008
5009 case 0x14:
5010 return copy_unmodified (gdbarch, insn, "movt", dsc);
5011
5012 case 0x12: case 0x16:
5013 return copy_unmodified (gdbarch, insn, "msr imm", dsc);
5014
5015 default:
5016 return copy_alu_imm (gdbarch, insn, regs, dsc);
5017 }
5018 else
5019 {
5020 uint32_t op1 = bits (insn, 20, 24), op2 = bits (insn, 4, 7);
5021
5022 if ((op1 & 0x19) != 0x10 && (op2 & 0x1) == 0x0)
5023 return copy_alu_reg (gdbarch, insn, regs, dsc);
5024 else if ((op1 & 0x19) != 0x10 && (op2 & 0x9) == 0x1)
5025 return copy_alu_shifted_reg (gdbarch, insn, regs, dsc);
5026 else if ((op1 & 0x19) == 0x10 && (op2 & 0x8) == 0x0)
5027 return decode_miscellaneous (gdbarch, insn, regs, dsc);
5028 else if ((op1 & 0x19) == 0x10 && (op2 & 0x9) == 0x8)
5029 return copy_unmodified (gdbarch, insn, "halfword mul/mla", dsc);
5030 else if ((op1 & 0x10) == 0x00 && op2 == 0x9)
5031 return copy_unmodified (gdbarch, insn, "mul/mla", dsc);
5032 else if ((op1 & 0x10) == 0x10 && op2 == 0x9)
5033 return copy_unmodified (gdbarch, insn, "synch", dsc);
5034 else if (op2 == 0xb || (op2 & 0xd) == 0xd)
5035 /* 2nd arg means "unpriveleged". */
5036 return copy_extra_ld_st (gdbarch, insn, (op1 & 0x12) == 0x02, regs,
5037 dsc);
5038 }
5039
5040 /* Should be unreachable. */
5041 return 1;
5042}
5043
5044static int
5045decode_ld_st_word_ubyte (struct gdbarch *gdbarch, uint32_t insn,
5046 struct regcache *regs,
5047 struct displaced_step_closure *dsc)
5048{
5049 int a = bit (insn, 25), b = bit (insn, 4);
5050 uint32_t op1 = bits (insn, 20, 24);
5051 int rn_f = bits (insn, 16, 19) == 0xf;
5052
5053 if ((!a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02)
5054 || (a && (op1 & 0x05) == 0x00 && (op1 & 0x17) != 0x02 && !b))
5055 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 0, 0);
5056 else if ((!a && (op1 & 0x17) == 0x02)
5057 || (a && (op1 & 0x17) == 0x02 && !b))
5058 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 0, 1);
5059 else if ((!a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03)
5060 || (a && (op1 & 0x05) == 0x01 && (op1 & 0x17) != 0x03 && !b))
5061 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 0, 0);
5062 else if ((!a && (op1 & 0x17) == 0x03)
5063 || (a && (op1 & 0x17) == 0x03 && !b))
5064 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 0, 1);
5065 else if ((!a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06)
5066 || (a && (op1 & 0x05) == 0x04 && (op1 & 0x17) != 0x06 && !b))
5067 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 0);
5068 else if ((!a && (op1 & 0x17) == 0x06)
5069 || (a && (op1 & 0x17) == 0x06 && !b))
5070 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 0, 1, 1);
5071 else if ((!a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07)
5072 || (a && (op1 & 0x05) == 0x05 && (op1 & 0x17) != 0x07 && !b))
5073 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 0);
5074 else if ((!a && (op1 & 0x17) == 0x07)
5075 || (a && (op1 & 0x17) == 0x07 && !b))
5076 return copy_ldr_str_ldrb_strb (gdbarch, insn, regs, dsc, 1, 1, 1);
5077
5078 /* Should be unreachable. */
5079 return 1;
5080}
5081
5082static int
5083decode_media (struct gdbarch *gdbarch, uint32_t insn,
5084 struct displaced_step_closure *dsc)
5085{
5086 switch (bits (insn, 20, 24))
5087 {
5088 case 0x00: case 0x01: case 0x02: case 0x03:
5089 return copy_unmodified (gdbarch, insn, "parallel add/sub signed", dsc);
5090
5091 case 0x04: case 0x05: case 0x06: case 0x07:
5092 return copy_unmodified (gdbarch, insn, "parallel add/sub unsigned", dsc);
5093
5094 case 0x08: case 0x09: case 0x0a: case 0x0b:
5095 case 0x0c: case 0x0d: case 0x0e: case 0x0f:
5096 return copy_unmodified (gdbarch, insn,
5097 "decode/pack/unpack/saturate/reverse", dsc);
5098
5099 case 0x18:
5100 if (bits (insn, 5, 7) == 0) /* op2. */
5101 {
5102 if (bits (insn, 12, 15) == 0xf)
5103 return copy_unmodified (gdbarch, insn, "usad8", dsc);
5104 else
5105 return copy_unmodified (gdbarch, insn, "usada8", dsc);
5106 }
5107 else
5108 return copy_undef (gdbarch, insn, dsc);
5109
5110 case 0x1a: case 0x1b:
5111 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
5112 return copy_unmodified (gdbarch, insn, "sbfx", dsc);
5113 else
5114 return copy_undef (gdbarch, insn, dsc);
5115
5116 case 0x1c: case 0x1d:
5117 if (bits (insn, 5, 6) == 0x0) /* op2[1:0]. */
5118 {
5119 if (bits (insn, 0, 3) == 0xf)
5120 return copy_unmodified (gdbarch, insn, "bfc", dsc);
5121 else
5122 return copy_unmodified (gdbarch, insn, "bfi", dsc);
5123 }
5124 else
5125 return copy_undef (gdbarch, insn, dsc);
5126
5127 case 0x1e: case 0x1f:
5128 if (bits (insn, 5, 6) == 0x2) /* op2[1:0]. */
5129 return copy_unmodified (gdbarch, insn, "ubfx", dsc);
5130 else
5131 return copy_undef (gdbarch, insn, dsc);
5132 }
5133
5134 /* Should be unreachable. */
5135 return 1;
5136}
5137
5138static int
5139decode_b_bl_ldmstm (struct gdbarch *gdbarch, int32_t insn,
5140 struct regcache *regs, struct displaced_step_closure *dsc)
5141{
5142 if (bit (insn, 25))
5143 return copy_b_bl_blx (gdbarch, insn, regs, dsc);
5144 else
5145 return copy_block_xfer (gdbarch, insn, regs, dsc);
5146}
5147
5148static int
5149decode_ext_reg_ld_st (struct gdbarch *gdbarch, uint32_t insn,
5150 struct regcache *regs, struct displaced_step_closure *dsc)
5151{
5152 unsigned int opcode = bits (insn, 20, 24);
5153
5154 switch (opcode)
5155 {
5156 case 0x04: case 0x05: /* VFP/Neon mrrc/mcrr. */
5157 return copy_unmodified (gdbarch, insn, "vfp/neon mrrc/mcrr", dsc);
5158
5159 case 0x08: case 0x0a: case 0x0c: case 0x0e:
5160 case 0x12: case 0x16:
5161 return copy_unmodified (gdbarch, insn, "vfp/neon vstm/vpush", dsc);
5162
5163 case 0x09: case 0x0b: case 0x0d: case 0x0f:
5164 case 0x13: case 0x17:
5165 return copy_unmodified (gdbarch, insn, "vfp/neon vldm/vpop", dsc);
5166
5167 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
5168 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
5169 /* Note: no writeback for these instructions. Bit 25 will always be
5170 zero though (via caller), so the following works OK. */
5171 return copy_copro_load_store (gdbarch, insn, regs, dsc);
5172 }
5173
5174 /* Should be unreachable. */
5175 return 1;
5176}
5177
5178static int
5179decode_svc_copro (struct gdbarch *gdbarch, uint32_t insn, CORE_ADDR to,
5180 struct regcache *regs, struct displaced_step_closure *dsc)
5181{
5182 unsigned int op1 = bits (insn, 20, 25);
5183 int op = bit (insn, 4);
5184 unsigned int coproc = bits (insn, 8, 11);
5185 unsigned int rn = bits (insn, 16, 19);
5186
5187 if ((op1 & 0x20) == 0x00 && (op1 & 0x3a) != 0x00 && (coproc & 0xe) == 0xa)
5188 return decode_ext_reg_ld_st (gdbarch, insn, regs, dsc);
5189 else if ((op1 & 0x21) == 0x00 && (op1 & 0x3a) != 0x00
5190 && (coproc & 0xe) != 0xa)
5191 /* stc/stc2. */
5192 return copy_copro_load_store (gdbarch, insn, regs, dsc);
5193 else if ((op1 & 0x21) == 0x01 && (op1 & 0x3a) != 0x00
5194 && (coproc & 0xe) != 0xa)
5195 /* ldc/ldc2 imm/lit. */
5196 return copy_copro_load_store (gdbarch, insn, regs, dsc);
5197 else if ((op1 & 0x3e) == 0x00)
5198 return copy_undef (gdbarch, insn, dsc);
5199 else if ((op1 & 0x3e) == 0x04 && (coproc & 0xe) == 0xa)
5200 return copy_unmodified (gdbarch, insn, "neon 64bit xfer", dsc);
5201 else if (op1 == 0x04 && (coproc & 0xe) != 0xa)
5202 return copy_unmodified (gdbarch, insn, "mcrr/mcrr2", dsc);
5203 else if (op1 == 0x05 && (coproc & 0xe) != 0xa)
5204 return copy_unmodified (gdbarch, insn, "mrrc/mrrc2", dsc);
5205 else if ((op1 & 0x30) == 0x20 && !op)
5206 {
5207 if ((coproc & 0xe) == 0xa)
5208 return copy_unmodified (gdbarch, insn, "vfp dataproc", dsc);
5209 else
5210 return copy_unmodified (gdbarch, insn, "cdp/cdp2", dsc);
5211 }
5212 else if ((op1 & 0x30) == 0x20 && op)
5213 return copy_unmodified (gdbarch, insn, "neon 8/16/32 bit xfer", dsc);
5214 else if ((op1 & 0x31) == 0x20 && op && (coproc & 0xe) != 0xa)
5215 return copy_unmodified (gdbarch, insn, "mcr/mcr2", dsc);
5216 else if ((op1 & 0x31) == 0x21 && op && (coproc & 0xe) != 0xa)
5217 return copy_unmodified (gdbarch, insn, "mrc/mrc2", dsc);
5218 else if ((op1 & 0x30) == 0x30)
5219 return copy_svc (gdbarch, insn, to, regs, dsc);
5220 else
5221 return copy_undef (gdbarch, insn, dsc); /* Possibly unreachable. */
5222}
5223
5224void
5225arm_process_displaced_insn (struct gdbarch *gdbarch, uint32_t insn,
5226 CORE_ADDR from, CORE_ADDR to, struct regcache *regs,
5227 struct displaced_step_closure *dsc)
5228{
5229 int err = 0;
5230
5231 if (!displaced_in_arm_mode (regs))
5232 error (_("Displaced stepping is only supported in ARM mode"));
5233
5234 /* Most displaced instructions use a 1-instruction scratch space, so set this
5235 here and override below if/when necessary. */
5236 dsc->numinsns = 1;
5237 dsc->insn_addr = from;
5238 dsc->scratch_base = to;
5239 dsc->cleanup = NULL;
5240 dsc->wrote_to_pc = 0;
5241
5242 if ((insn & 0xf0000000) == 0xf0000000)
5243 err = decode_unconditional (gdbarch, insn, regs, dsc);
5244 else switch (((insn & 0x10) >> 4) | ((insn & 0xe000000) >> 24))
5245 {
5246 case 0x0: case 0x1: case 0x2: case 0x3:
5247 err = decode_dp_misc (gdbarch, insn, regs, dsc);
5248 break;
5249
5250 case 0x4: case 0x5: case 0x6:
5251 err = decode_ld_st_word_ubyte (gdbarch, insn, regs, dsc);
5252 break;
5253
5254 case 0x7:
5255 err = decode_media (gdbarch, insn, dsc);
5256 break;
5257
5258 case 0x8: case 0x9: case 0xa: case 0xb:
5259 err = decode_b_bl_ldmstm (gdbarch, insn, regs, dsc);
5260 break;
5261
5262 case 0xc: case 0xd: case 0xe: case 0xf:
5263 err = decode_svc_copro (gdbarch, insn, to, regs, dsc);
5264 break;
5265 }
5266
5267 if (err)
5268 internal_error (__FILE__, __LINE__,
5269 _("arm_process_displaced_insn: Instruction decode error"));
5270}
5271
5272/* Actually set up the scratch space for a displaced instruction. */
5273
5274void
5275arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
5276 CORE_ADDR to, struct displaced_step_closure *dsc)
5277{
5278 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5279 unsigned int i;
5280 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5281
5282 /* Poke modified instruction(s). */
5283 for (i = 0; i < dsc->numinsns; i++)
5284 {
5285 if (debug_displaced)
5286 fprintf_unfiltered (gdb_stdlog, "displaced: writing insn %.8lx at "
5287 "%.8lx\n", (unsigned long) dsc->modinsn[i],
5288 (unsigned long) to + i * 4);
5289 write_memory_unsigned_integer (to + i * 4, 4, byte_order_for_code,
5290 dsc->modinsn[i]);
5291 }
5292
5293 /* Put breakpoint afterwards. */
5294 write_memory (to + dsc->numinsns * 4, tdep->arm_breakpoint,
5295 tdep->arm_breakpoint_size);
5296
5297 if (debug_displaced)
5298 fprintf_unfiltered (gdb_stdlog, "displaced: copy %s->%s: ",
5299 paddress (gdbarch, from), paddress (gdbarch, to));
5300}
5301
5302/* Entry point for copying an instruction into scratch space for displaced
5303 stepping. */
5304
5305struct displaced_step_closure *
5306arm_displaced_step_copy_insn (struct gdbarch *gdbarch,
5307 CORE_ADDR from, CORE_ADDR to,
5308 struct regcache *regs)
5309{
5310 struct displaced_step_closure *dsc
5311 = xmalloc (sizeof (struct displaced_step_closure));
5312 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
5313 uint32_t insn = read_memory_unsigned_integer (from, 4, byte_order_for_code);
5314
5315 if (debug_displaced)
5316 fprintf_unfiltered (gdb_stdlog, "displaced: stepping insn %.8lx "
5317 "at %.8lx\n", (unsigned long) insn,
5318 (unsigned long) from);
5319
5320 arm_process_displaced_insn (gdbarch, insn, from, to, regs, dsc);
5321 arm_displaced_init_closure (gdbarch, from, to, dsc);
5322
5323 return dsc;
5324}
5325
5326/* Entry point for cleaning things up after a displaced instruction has been
5327 single-stepped. */
5328
5329void
5330arm_displaced_step_fixup (struct gdbarch *gdbarch,
5331 struct displaced_step_closure *dsc,
5332 CORE_ADDR from, CORE_ADDR to,
5333 struct regcache *regs)
5334{
5335 if (dsc->cleanup)
5336 dsc->cleanup (gdbarch, regs, dsc);
5337
5338 if (!dsc->wrote_to_pc)
5339 regcache_cooked_write_unsigned (regs, ARM_PC_REGNUM, dsc->insn_addr + 4);
5340}
5341
5342#include "bfd-in2.h"
5343#include "libcoff.h"
5344
5345static int
5346gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
5347{
5348 if (arm_pc_is_thumb (memaddr))
5349 {
5350 static asymbol *asym;
5351 static combined_entry_type ce;
5352 static struct coff_symbol_struct csym;
5353 static struct bfd fake_bfd;
5354 static bfd_target fake_target;
5355
5356 if (csym.native == NULL)
5357 {
5358 /* Create a fake symbol vector containing a Thumb symbol.
5359 This is solely so that the code in print_insn_little_arm()
5360 and print_insn_big_arm() in opcodes/arm-dis.c will detect
5361 the presence of a Thumb symbol and switch to decoding
5362 Thumb instructions. */
5363
5364 fake_target.flavour = bfd_target_coff_flavour;
5365 fake_bfd.xvec = &fake_target;
5366 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
5367 csym.native = &ce;
5368 csym.symbol.the_bfd = &fake_bfd;
5369 csym.symbol.name = "fake";
5370 asym = (asymbol *) & csym;
5371 }
5372
5373 memaddr = UNMAKE_THUMB_ADDR (memaddr);
5374 info->symbols = &asym;
5375 }
5376 else
5377 info->symbols = NULL;
5378
5379 if (info->endian == BFD_ENDIAN_BIG)
5380 return print_insn_big_arm (memaddr, info);
5381 else
5382 return print_insn_little_arm (memaddr, info);
5383}
5384
5385/* The following define instruction sequences that will cause ARM
5386 cpu's to take an undefined instruction trap. These are used to
5387 signal a breakpoint to GDB.
5388
5389 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
5390 modes. A different instruction is required for each mode. The ARM
5391 cpu's can also be big or little endian. Thus four different
5392 instructions are needed to support all cases.
5393
5394 Note: ARMv4 defines several new instructions that will take the
5395 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
5396 not in fact add the new instructions. The new undefined
5397 instructions in ARMv4 are all instructions that had no defined
5398 behaviour in earlier chips. There is no guarantee that they will
5399 raise an exception, but may be treated as NOP's. In practice, it
5400 may only safe to rely on instructions matching:
5401
5402 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
5403 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
5404 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
5405
5406 Even this may only true if the condition predicate is true. The
5407 following use a condition predicate of ALWAYS so it is always TRUE.
5408
5409 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
5410 and NetBSD all use a software interrupt rather than an undefined
5411 instruction to force a trap. This can be handled by by the
5412 abi-specific code during establishment of the gdbarch vector. */
5413
5414#define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
5415#define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
5416#define THUMB_LE_BREAKPOINT {0xbe,0xbe}
5417#define THUMB_BE_BREAKPOINT {0xbe,0xbe}
5418
5419static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
5420static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
5421static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
5422static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
5423
5424/* Determine the type and size of breakpoint to insert at PCPTR. Uses
5425 the program counter value to determine whether a 16-bit or 32-bit
5426 breakpoint should be used. It returns a pointer to a string of
5427 bytes that encode a breakpoint instruction, stores the length of
5428 the string to *lenptr, and adjusts the program counter (if
5429 necessary) to point to the actual memory location where the
5430 breakpoint should be inserted. */
5431
5432static const unsigned char *
5433arm_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
5434{
5435 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
177321bd 5436 enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
cca44b1b
JB
5437
5438 if (arm_pc_is_thumb (*pcptr))
5439 {
5440 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
177321bd
DJ
5441
5442 /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
5443 check whether we are replacing a 32-bit instruction. */
5444 if (tdep->thumb2_breakpoint != NULL)
5445 {
5446 gdb_byte buf[2];
5447 if (target_read_memory (*pcptr, buf, 2) == 0)
5448 {
5449 unsigned short inst1;
5450 inst1 = extract_unsigned_integer (buf, 2, byte_order_for_code);
5451 if ((inst1 & 0xe000) == 0xe000 && (inst1 & 0x1800) != 0)
5452 {
5453 *lenptr = tdep->thumb2_breakpoint_size;
5454 return tdep->thumb2_breakpoint;
5455 }
5456 }
5457 }
5458
cca44b1b
JB
5459 *lenptr = tdep->thumb_breakpoint_size;
5460 return tdep->thumb_breakpoint;
5461 }
5462 else
5463 {
5464 *lenptr = tdep->arm_breakpoint_size;
5465 return tdep->arm_breakpoint;
5466 }
5467}
5468
177321bd
DJ
5469static void
5470arm_remote_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
5471 int *kindptr)
5472{
5473 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5474
5475 arm_breakpoint_from_pc (gdbarch, pcptr, kindptr);
5476
5477 if (arm_pc_is_thumb (*pcptr) && *kindptr == 4)
5478 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so
5479 that this is not confused with a 32-bit ARM breakpoint. */
5480 *kindptr = 3;
5481}
5482
cca44b1b
JB
5483/* Extract from an array REGBUF containing the (raw) register state a
5484 function return value of type TYPE, and copy that, in virtual
5485 format, into VALBUF. */
5486
5487static void
5488arm_extract_return_value (struct type *type, struct regcache *regs,
5489 gdb_byte *valbuf)
5490{
5491 struct gdbarch *gdbarch = get_regcache_arch (regs);
5492 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5493
5494 if (TYPE_CODE_FLT == TYPE_CODE (type))
5495 {
5496 switch (gdbarch_tdep (gdbarch)->fp_model)
5497 {
5498 case ARM_FLOAT_FPA:
5499 {
5500 /* The value is in register F0 in internal format. We need to
5501 extract the raw value and then convert it to the desired
5502 internal type. */
5503 bfd_byte tmpbuf[FP_REGISTER_SIZE];
5504
5505 regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
5506 convert_from_extended (floatformat_from_type (type), tmpbuf,
5507 valbuf, gdbarch_byte_order (gdbarch));
5508 }
5509 break;
5510
5511 case ARM_FLOAT_SOFT_FPA:
5512 case ARM_FLOAT_SOFT_VFP:
5513 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5514 not using the VFP ABI code. */
5515 case ARM_FLOAT_VFP:
5516 regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
5517 if (TYPE_LENGTH (type) > 4)
5518 regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
5519 valbuf + INT_REGISTER_SIZE);
5520 break;
5521
5522 default:
5523 internal_error
5524 (__FILE__, __LINE__,
5525 _("arm_extract_return_value: Floating point model not supported"));
5526 break;
5527 }
5528 }
5529 else if (TYPE_CODE (type) == TYPE_CODE_INT
5530 || TYPE_CODE (type) == TYPE_CODE_CHAR
5531 || TYPE_CODE (type) == TYPE_CODE_BOOL
5532 || TYPE_CODE (type) == TYPE_CODE_PTR
5533 || TYPE_CODE (type) == TYPE_CODE_REF
5534 || TYPE_CODE (type) == TYPE_CODE_ENUM)
5535 {
5536 /* If the the type is a plain integer, then the access is
5537 straight-forward. Otherwise we have to play around a bit more. */
5538 int len = TYPE_LENGTH (type);
5539 int regno = ARM_A1_REGNUM;
5540 ULONGEST tmp;
5541
5542 while (len > 0)
5543 {
5544 /* By using store_unsigned_integer we avoid having to do
5545 anything special for small big-endian values. */
5546 regcache_cooked_read_unsigned (regs, regno++, &tmp);
5547 store_unsigned_integer (valbuf,
5548 (len > INT_REGISTER_SIZE
5549 ? INT_REGISTER_SIZE : len),
5550 byte_order, tmp);
5551 len -= INT_REGISTER_SIZE;
5552 valbuf += INT_REGISTER_SIZE;
5553 }
5554 }
5555 else
5556 {
5557 /* For a structure or union the behaviour is as if the value had
5558 been stored to word-aligned memory and then loaded into
5559 registers with 32-bit load instruction(s). */
5560 int len = TYPE_LENGTH (type);
5561 int regno = ARM_A1_REGNUM;
5562 bfd_byte tmpbuf[INT_REGISTER_SIZE];
5563
5564 while (len > 0)
5565 {
5566 regcache_cooked_read (regs, regno++, tmpbuf);
5567 memcpy (valbuf, tmpbuf,
5568 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
5569 len -= INT_REGISTER_SIZE;
5570 valbuf += INT_REGISTER_SIZE;
5571 }
5572 }
5573}
5574
5575
5576/* Will a function return an aggregate type in memory or in a
5577 register? Return 0 if an aggregate type can be returned in a
5578 register, 1 if it must be returned in memory. */
5579
5580static int
5581arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
5582{
5583 int nRc;
5584 enum type_code code;
5585
5586 CHECK_TYPEDEF (type);
5587
5588 /* In the ARM ABI, "integer" like aggregate types are returned in
5589 registers. For an aggregate type to be integer like, its size
5590 must be less than or equal to INT_REGISTER_SIZE and the
5591 offset of each addressable subfield must be zero. Note that bit
5592 fields are not addressable, and all addressable subfields of
5593 unions always start at offset zero.
5594
5595 This function is based on the behaviour of GCC 2.95.1.
5596 See: gcc/arm.c: arm_return_in_memory() for details.
5597
5598 Note: All versions of GCC before GCC 2.95.2 do not set up the
5599 parameters correctly for a function returning the following
5600 structure: struct { float f;}; This should be returned in memory,
5601 not a register. Richard Earnshaw sent me a patch, but I do not
5602 know of any way to detect if a function like the above has been
5603 compiled with the correct calling convention. */
5604
5605 /* All aggregate types that won't fit in a register must be returned
5606 in memory. */
5607 if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
5608 {
5609 return 1;
5610 }
5611
5612 /* The AAPCS says all aggregates not larger than a word are returned
5613 in a register. */
5614 if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
5615 return 0;
5616
5617 /* The only aggregate types that can be returned in a register are
5618 structs and unions. Arrays must be returned in memory. */
5619 code = TYPE_CODE (type);
5620 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
5621 {
5622 return 1;
5623 }
5624
5625 /* Assume all other aggregate types can be returned in a register.
5626 Run a check for structures, unions and arrays. */
5627 nRc = 0;
5628
5629 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
5630 {
5631 int i;
5632 /* Need to check if this struct/union is "integer" like. For
5633 this to be true, its size must be less than or equal to
5634 INT_REGISTER_SIZE and the offset of each addressable
5635 subfield must be zero. Note that bit fields are not
5636 addressable, and unions always start at offset zero. If any
5637 of the subfields is a floating point type, the struct/union
5638 cannot be an integer type. */
5639
5640 /* For each field in the object, check:
5641 1) Is it FP? --> yes, nRc = 1;
67255d04
RE
5642 2) Is it addressable (bitpos != 0) and
5643 not packed (bitsize == 0)?
5644 --> yes, nRc = 1
5645 */
5646
5647 for (i = 0; i < TYPE_NFIELDS (type); i++)
5648 {
5649 enum type_code field_type_code;
44e1a9eb 5650 field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i)));
67255d04
RE
5651
5652 /* Is it a floating point type field? */
5653 if (field_type_code == TYPE_CODE_FLT)
5654 {
5655 nRc = 1;
5656 break;
5657 }
5658
5659 /* If bitpos != 0, then we have to care about it. */
5660 if (TYPE_FIELD_BITPOS (type, i) != 0)
5661 {
5662 /* Bitfields are not addressable. If the field bitsize is
5663 zero, then the field is not packed. Hence it cannot be
5664 a bitfield or any other packed type. */
5665 if (TYPE_FIELD_BITSIZE (type, i) == 0)
5666 {
5667 nRc = 1;
5668 break;
5669 }
5670 }
5671 }
5672 }
5673
5674 return nRc;
5675}
5676
34e8f22d
RE
5677/* Write into appropriate registers a function return value of type
5678 TYPE, given in virtual format. */
5679
5680static void
b508a996 5681arm_store_return_value (struct type *type, struct regcache *regs,
5238cf52 5682 const gdb_byte *valbuf)
34e8f22d 5683{
be8626e0 5684 struct gdbarch *gdbarch = get_regcache_arch (regs);
e17a4113 5685 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
be8626e0 5686
34e8f22d
RE
5687 if (TYPE_CODE (type) == TYPE_CODE_FLT)
5688 {
7a5ea0d4 5689 char buf[MAX_REGISTER_SIZE];
34e8f22d 5690
be8626e0 5691 switch (gdbarch_tdep (gdbarch)->fp_model)
08216dd7
RE
5692 {
5693 case ARM_FLOAT_FPA:
5694
be8626e0
MD
5695 convert_to_extended (floatformat_from_type (type), buf, valbuf,
5696 gdbarch_byte_order (gdbarch));
b508a996 5697 regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
08216dd7
RE
5698 break;
5699
fd50bc42 5700 case ARM_FLOAT_SOFT_FPA:
08216dd7 5701 case ARM_FLOAT_SOFT_VFP:
90445bd3
DJ
5702 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5703 not using the VFP ABI code. */
5704 case ARM_FLOAT_VFP:
b508a996
RE
5705 regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
5706 if (TYPE_LENGTH (type) > 4)
5707 regcache_cooked_write (regs, ARM_A1_REGNUM + 1,
7a5ea0d4 5708 valbuf + INT_REGISTER_SIZE);
08216dd7
RE
5709 break;
5710
5711 default:
5712 internal_error
5713 (__FILE__, __LINE__,
edefbb7c 5714 _("arm_store_return_value: Floating point model not supported"));
08216dd7
RE
5715 break;
5716 }
34e8f22d 5717 }
b508a996
RE
5718 else if (TYPE_CODE (type) == TYPE_CODE_INT
5719 || TYPE_CODE (type) == TYPE_CODE_CHAR
5720 || TYPE_CODE (type) == TYPE_CODE_BOOL
5721 || TYPE_CODE (type) == TYPE_CODE_PTR
5722 || TYPE_CODE (type) == TYPE_CODE_REF
5723 || TYPE_CODE (type) == TYPE_CODE_ENUM)
5724 {
5725 if (TYPE_LENGTH (type) <= 4)
5726 {
5727 /* Values of one word or less are zero/sign-extended and
5728 returned in r0. */
7a5ea0d4 5729 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
5730 LONGEST val = unpack_long (type, valbuf);
5731
e17a4113 5732 store_signed_integer (tmpbuf, INT_REGISTER_SIZE, byte_order, val);
b508a996
RE
5733 regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
5734 }
5735 else
5736 {
5737 /* Integral values greater than one word are stored in consecutive
5738 registers starting with r0. This will always be a multiple of
5739 the regiser size. */
5740 int len = TYPE_LENGTH (type);
5741 int regno = ARM_A1_REGNUM;
5742
5743 while (len > 0)
5744 {
5745 regcache_cooked_write (regs, regno++, valbuf);
7a5ea0d4
DJ
5746 len -= INT_REGISTER_SIZE;
5747 valbuf += INT_REGISTER_SIZE;
b508a996
RE
5748 }
5749 }
5750 }
34e8f22d 5751 else
b508a996
RE
5752 {
5753 /* For a structure or union the behaviour is as if the value had
5754 been stored to word-aligned memory and then loaded into
5755 registers with 32-bit load instruction(s). */
5756 int len = TYPE_LENGTH (type);
5757 int regno = ARM_A1_REGNUM;
7a5ea0d4 5758 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
5759
5760 while (len > 0)
5761 {
5762 memcpy (tmpbuf, valbuf,
7a5ea0d4 5763 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
b508a996 5764 regcache_cooked_write (regs, regno++, tmpbuf);
7a5ea0d4
DJ
5765 len -= INT_REGISTER_SIZE;
5766 valbuf += INT_REGISTER_SIZE;
b508a996
RE
5767 }
5768 }
34e8f22d
RE
5769}
5770
2af48f68
PB
5771
5772/* Handle function return values. */
5773
5774static enum return_value_convention
c055b101
CV
5775arm_return_value (struct gdbarch *gdbarch, struct type *func_type,
5776 struct type *valtype, struct regcache *regcache,
5777 gdb_byte *readbuf, const gdb_byte *writebuf)
2af48f68 5778{
7c00367c 5779 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
90445bd3
DJ
5780 enum arm_vfp_cprc_base_type vfp_base_type;
5781 int vfp_base_count;
5782
5783 if (arm_vfp_abi_for_function (gdbarch, func_type)
5784 && arm_vfp_call_candidate (valtype, &vfp_base_type, &vfp_base_count))
5785 {
5786 int reg_char = arm_vfp_cprc_reg_char (vfp_base_type);
5787 int unit_length = arm_vfp_cprc_unit_length (vfp_base_type);
5788 int i;
5789 for (i = 0; i < vfp_base_count; i++)
5790 {
58d6951d
DJ
5791 if (reg_char == 'q')
5792 {
5793 if (writebuf)
5794 arm_neon_quad_write (gdbarch, regcache, i,
5795 writebuf + i * unit_length);
5796
5797 if (readbuf)
5798 arm_neon_quad_read (gdbarch, regcache, i,
5799 readbuf + i * unit_length);
5800 }
5801 else
5802 {
5803 char name_buf[4];
5804 int regnum;
5805
5806 sprintf (name_buf, "%c%d", reg_char, i);
5807 regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
5808 strlen (name_buf));
5809 if (writebuf)
5810 regcache_cooked_write (regcache, regnum,
5811 writebuf + i * unit_length);
5812 if (readbuf)
5813 regcache_cooked_read (regcache, regnum,
5814 readbuf + i * unit_length);
5815 }
90445bd3
DJ
5816 }
5817 return RETURN_VALUE_REGISTER_CONVENTION;
5818 }
7c00367c 5819
2af48f68
PB
5820 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
5821 || TYPE_CODE (valtype) == TYPE_CODE_UNION
5822 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
5823 {
7c00367c
MK
5824 if (tdep->struct_return == pcc_struct_return
5825 || arm_return_in_memory (gdbarch, valtype))
2af48f68
PB
5826 return RETURN_VALUE_STRUCT_CONVENTION;
5827 }
5828
5829 if (writebuf)
5830 arm_store_return_value (valtype, regcache, writebuf);
5831
5832 if (readbuf)
5833 arm_extract_return_value (valtype, regcache, readbuf);
5834
5835 return RETURN_VALUE_REGISTER_CONVENTION;
5836}
5837
5838
9df628e0 5839static int
60ade65d 5840arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
9df628e0 5841{
e17a4113
UW
5842 struct gdbarch *gdbarch = get_frame_arch (frame);
5843 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5844 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
9df628e0 5845 CORE_ADDR jb_addr;
7a5ea0d4 5846 char buf[INT_REGISTER_SIZE];
9df628e0 5847
60ade65d 5848 jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
9df628e0
RE
5849
5850 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
7a5ea0d4 5851 INT_REGISTER_SIZE))
9df628e0
RE
5852 return 0;
5853
e17a4113 5854 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE, byte_order);
9df628e0
RE
5855 return 1;
5856}
5857
faa95490
DJ
5858/* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
5859 return the target PC. Otherwise return 0. */
c906108c
SS
5860
5861CORE_ADDR
52f729a7 5862arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
c906108c 5863{
c5aa993b 5864 char *name;
faa95490 5865 int namelen;
c906108c
SS
5866 CORE_ADDR start_addr;
5867
5868 /* Find the starting address and name of the function containing the PC. */
5869 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
5870 return 0;
5871
faa95490
DJ
5872 /* If PC is in a Thumb call or return stub, return the address of the
5873 target PC, which is in a register. The thunk functions are called
5874 _call_via_xx, where x is the register name. The possible names
3d8d5e79
DJ
5875 are r0-r9, sl, fp, ip, sp, and lr. ARM RealView has similar
5876 functions, named __ARM_call_via_r[0-7]. */
5877 if (strncmp (name, "_call_via_", 10) == 0
5878 || strncmp (name, "__ARM_call_via_", strlen ("__ARM_call_via_")) == 0)
c906108c 5879 {
ed9a39eb
JM
5880 /* Use the name suffix to determine which register contains the
5881 target PC. */
c5aa993b
JM
5882 static char *table[15] =
5883 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
5884 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
5885 };
c906108c 5886 int regno;
faa95490 5887 int offset = strlen (name) - 2;
c906108c
SS
5888
5889 for (regno = 0; regno <= 14; regno++)
faa95490 5890 if (strcmp (&name[offset], table[regno]) == 0)
52f729a7 5891 return get_frame_register_unsigned (frame, regno);
c906108c 5892 }
ed9a39eb 5893
faa95490
DJ
5894 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
5895 non-interworking calls to foo. We could decode the stubs
5896 to find the target but it's easier to use the symbol table. */
5897 namelen = strlen (name);
5898 if (name[0] == '_' && name[1] == '_'
5899 && ((namelen > 2 + strlen ("_from_thumb")
5900 && strncmp (name + namelen - strlen ("_from_thumb"), "_from_thumb",
5901 strlen ("_from_thumb")) == 0)
5902 || (namelen > 2 + strlen ("_from_arm")
5903 && strncmp (name + namelen - strlen ("_from_arm"), "_from_arm",
5904 strlen ("_from_arm")) == 0)))
5905 {
5906 char *target_name;
5907 int target_len = namelen - 2;
5908 struct minimal_symbol *minsym;
5909 struct objfile *objfile;
5910 struct obj_section *sec;
5911
5912 if (name[namelen - 1] == 'b')
5913 target_len -= strlen ("_from_thumb");
5914 else
5915 target_len -= strlen ("_from_arm");
5916
5917 target_name = alloca (target_len + 1);
5918 memcpy (target_name, name + 2, target_len);
5919 target_name[target_len] = '\0';
5920
5921 sec = find_pc_section (pc);
5922 objfile = (sec == NULL) ? NULL : sec->objfile;
5923 minsym = lookup_minimal_symbol (target_name, NULL, objfile);
5924 if (minsym != NULL)
5925 return SYMBOL_VALUE_ADDRESS (minsym);
5926 else
5927 return 0;
5928 }
5929
c5aa993b 5930 return 0; /* not a stub */
c906108c
SS
5931}
5932
afd7eef0
RE
5933static void
5934set_arm_command (char *args, int from_tty)
5935{
edefbb7c
AC
5936 printf_unfiltered (_("\
5937\"set arm\" must be followed by an apporpriate subcommand.\n"));
afd7eef0
RE
5938 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
5939}
5940
5941static void
5942show_arm_command (char *args, int from_tty)
5943{
26304000 5944 cmd_show_list (showarmcmdlist, from_tty, "");
afd7eef0
RE
5945}
5946
28e97307
DJ
5947static void
5948arm_update_current_architecture (void)
fd50bc42 5949{
28e97307 5950 struct gdbarch_info info;
fd50bc42 5951
28e97307 5952 /* If the current architecture is not ARM, we have nothing to do. */
1cf3db46 5953 if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_arm)
28e97307 5954 return;
fd50bc42 5955
28e97307
DJ
5956 /* Update the architecture. */
5957 gdbarch_info_init (&info);
fd50bc42 5958
28e97307
DJ
5959 if (!gdbarch_update_p (info))
5960 internal_error (__FILE__, __LINE__, "could not update architecture");
fd50bc42
RE
5961}
5962
5963static void
5964set_fp_model_sfunc (char *args, int from_tty,
5965 struct cmd_list_element *c)
5966{
5967 enum arm_float_model fp_model;
5968
5969 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
5970 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
5971 {
5972 arm_fp_model = fp_model;
5973 break;
5974 }
5975
5976 if (fp_model == ARM_FLOAT_LAST)
edefbb7c 5977 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
fd50bc42
RE
5978 current_fp_model);
5979
28e97307 5980 arm_update_current_architecture ();
fd50bc42
RE
5981}
5982
5983static void
08546159
AC
5984show_fp_model (struct ui_file *file, int from_tty,
5985 struct cmd_list_element *c, const char *value)
fd50bc42 5986{
1cf3db46 5987 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
fd50bc42 5988
28e97307 5989 if (arm_fp_model == ARM_FLOAT_AUTO
1cf3db46 5990 && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_arm)
28e97307
DJ
5991 fprintf_filtered (file, _("\
5992The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
5993 fp_model_strings[tdep->fp_model]);
5994 else
5995 fprintf_filtered (file, _("\
5996The current ARM floating point model is \"%s\".\n"),
5997 fp_model_strings[arm_fp_model]);
5998}
5999
6000static void
6001arm_set_abi (char *args, int from_tty,
6002 struct cmd_list_element *c)
6003{
6004 enum arm_abi_kind arm_abi;
6005
6006 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
6007 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
6008 {
6009 arm_abi_global = arm_abi;
6010 break;
6011 }
6012
6013 if (arm_abi == ARM_ABI_LAST)
6014 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
6015 arm_abi_string);
6016
6017 arm_update_current_architecture ();
6018}
6019
6020static void
6021arm_show_abi (struct ui_file *file, int from_tty,
6022 struct cmd_list_element *c, const char *value)
6023{
1cf3db46 6024 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
28e97307
DJ
6025
6026 if (arm_abi_global == ARM_ABI_AUTO
1cf3db46 6027 && gdbarch_bfd_arch_info (target_gdbarch)->arch == bfd_arch_arm)
28e97307
DJ
6028 fprintf_filtered (file, _("\
6029The current ARM ABI is \"auto\" (currently \"%s\").\n"),
6030 arm_abi_strings[tdep->arm_abi]);
6031 else
6032 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
6033 arm_abi_string);
fd50bc42
RE
6034}
6035
0428b8f5
DJ
6036static void
6037arm_show_fallback_mode (struct ui_file *file, int from_tty,
6038 struct cmd_list_element *c, const char *value)
6039{
1cf3db46 6040 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
0428b8f5
DJ
6041
6042 fprintf_filtered (file, _("\
6043The current execution mode assumed (when symbols are unavailable) is \"%s\".\n"),
6044 arm_fallback_mode_string);
6045}
6046
6047static void
6048arm_show_force_mode (struct ui_file *file, int from_tty,
6049 struct cmd_list_element *c, const char *value)
6050{
1cf3db46 6051 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
0428b8f5
DJ
6052
6053 fprintf_filtered (file, _("\
6054The current execution mode assumed (even when symbols are available) is \"%s\".\n"),
6055 arm_force_mode_string);
6056}
6057
afd7eef0
RE
6058/* If the user changes the register disassembly style used for info
6059 register and other commands, we have to also switch the style used
6060 in opcodes for disassembly output. This function is run in the "set
6061 arm disassembly" command, and does that. */
bc90b915
FN
6062
6063static void
afd7eef0 6064set_disassembly_style_sfunc (char *args, int from_tty,
bc90b915
FN
6065 struct cmd_list_element *c)
6066{
afd7eef0 6067 set_disassembly_style ();
bc90b915
FN
6068}
6069\f
966fbf70 6070/* Return the ARM register name corresponding to register I. */
a208b0cb 6071static const char *
d93859e2 6072arm_register_name (struct gdbarch *gdbarch, int i)
966fbf70 6073{
58d6951d
DJ
6074 const int num_regs = gdbarch_num_regs (gdbarch);
6075
6076 if (gdbarch_tdep (gdbarch)->have_vfp_pseudos
6077 && i >= num_regs && i < num_regs + 32)
6078 {
6079 static const char *const vfp_pseudo_names[] = {
6080 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
6081 "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
6082 "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
6083 "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
6084 };
6085
6086 return vfp_pseudo_names[i - num_regs];
6087 }
6088
6089 if (gdbarch_tdep (gdbarch)->have_neon_pseudos
6090 && i >= num_regs + 32 && i < num_regs + 32 + 16)
6091 {
6092 static const char *const neon_pseudo_names[] = {
6093 "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
6094 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
6095 };
6096
6097 return neon_pseudo_names[i - num_regs - 32];
6098 }
6099
ff6f572f
DJ
6100 if (i >= ARRAY_SIZE (arm_register_names))
6101 /* These registers are only supported on targets which supply
6102 an XML description. */
6103 return "";
6104
966fbf70
RE
6105 return arm_register_names[i];
6106}
6107
bc90b915 6108static void
afd7eef0 6109set_disassembly_style (void)
bc90b915 6110{
123dc839 6111 int current;
bc90b915 6112
123dc839
DJ
6113 /* Find the style that the user wants. */
6114 for (current = 0; current < num_disassembly_options; current++)
6115 if (disassembly_style == valid_disassembly_styles[current])
6116 break;
6117 gdb_assert (current < num_disassembly_options);
bc90b915 6118
94c30b78 6119 /* Synchronize the disassembler. */
bc90b915
FN
6120 set_arm_regname_option (current);
6121}
6122
082fc60d
RE
6123/* Test whether the coff symbol specific value corresponds to a Thumb
6124 function. */
6125
6126static int
6127coff_sym_is_thumb (int val)
6128{
f8bf5763
PM
6129 return (val == C_THUMBEXT
6130 || val == C_THUMBSTAT
6131 || val == C_THUMBEXTFUNC
6132 || val == C_THUMBSTATFUNC
6133 || val == C_THUMBLABEL);
082fc60d
RE
6134}
6135
6136/* arm_coff_make_msymbol_special()
6137 arm_elf_make_msymbol_special()
6138
6139 These functions test whether the COFF or ELF symbol corresponds to
6140 an address in thumb code, and set a "special" bit in a minimal
6141 symbol to indicate that it does. */
6142
34e8f22d 6143static void
082fc60d
RE
6144arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
6145{
6146 /* Thumb symbols are of type STT_LOPROC, (synonymous with
6147 STT_ARM_TFUNC). */
6148 if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
6149 == STT_LOPROC)
6150 MSYMBOL_SET_SPECIAL (msym);
6151}
6152
34e8f22d 6153static void
082fc60d
RE
6154arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
6155{
6156 if (coff_sym_is_thumb (val))
6157 MSYMBOL_SET_SPECIAL (msym);
6158}
6159
60c5725c 6160static void
c1bd65d0 6161arm_objfile_data_free (struct objfile *objfile, void *arg)
60c5725c
DJ
6162{
6163 struct arm_per_objfile *data = arg;
6164 unsigned int i;
6165
6166 for (i = 0; i < objfile->obfd->section_count; i++)
6167 VEC_free (arm_mapping_symbol_s, data->section_maps[i]);
6168}
6169
6170static void
6171arm_record_special_symbol (struct gdbarch *gdbarch, struct objfile *objfile,
6172 asymbol *sym)
6173{
6174 const char *name = bfd_asymbol_name (sym);
6175 struct arm_per_objfile *data;
6176 VEC(arm_mapping_symbol_s) **map_p;
6177 struct arm_mapping_symbol new_map_sym;
6178
6179 gdb_assert (name[0] == '$');
6180 if (name[1] != 'a' && name[1] != 't' && name[1] != 'd')
6181 return;
6182
6183 data = objfile_data (objfile, arm_objfile_data_key);
6184 if (data == NULL)
6185 {
6186 data = OBSTACK_ZALLOC (&objfile->objfile_obstack,
6187 struct arm_per_objfile);
6188 set_objfile_data (objfile, arm_objfile_data_key, data);
6189 data->section_maps = OBSTACK_CALLOC (&objfile->objfile_obstack,
6190 objfile->obfd->section_count,
6191 VEC(arm_mapping_symbol_s) *);
6192 }
6193 map_p = &data->section_maps[bfd_get_section (sym)->index];
6194
6195 new_map_sym.value = sym->value;
6196 new_map_sym.type = name[1];
6197
6198 /* Assume that most mapping symbols appear in order of increasing
6199 value. If they were randomly distributed, it would be faster to
6200 always push here and then sort at first use. */
6201 if (!VEC_empty (arm_mapping_symbol_s, *map_p))
6202 {
6203 struct arm_mapping_symbol *prev_map_sym;
6204
6205 prev_map_sym = VEC_last (arm_mapping_symbol_s, *map_p);
6206 if (prev_map_sym->value >= sym->value)
6207 {
6208 unsigned int idx;
6209 idx = VEC_lower_bound (arm_mapping_symbol_s, *map_p, &new_map_sym,
6210 arm_compare_mapping_symbols);
6211 VEC_safe_insert (arm_mapping_symbol_s, *map_p, idx, &new_map_sym);
6212 return;
6213 }
6214 }
6215
6216 VEC_safe_push (arm_mapping_symbol_s, *map_p, &new_map_sym);
6217}
6218
756fe439 6219static void
61a1198a 6220arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
756fe439 6221{
61a1198a 6222 regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
756fe439
DJ
6223
6224 /* If necessary, set the T bit. */
6225 if (arm_apcs_32)
6226 {
61a1198a
UW
6227 ULONGEST val;
6228 regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
756fe439 6229 if (arm_pc_is_thumb (pc))
b39cc962 6230 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM, val | CPSR_T);
756fe439 6231 else
61a1198a 6232 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
b39cc962 6233 val & ~(ULONGEST) CPSR_T);
756fe439
DJ
6234 }
6235}
123dc839 6236
58d6951d
DJ
6237/* Read the contents of a NEON quad register, by reading from two
6238 double registers. This is used to implement the quad pseudo
6239 registers, and for argument passing in case the quad registers are
6240 missing; vectors are passed in quad registers when using the VFP
6241 ABI, even if a NEON unit is not present. REGNUM is the index of
6242 the quad register, in [0, 15]. */
6243
6244static void
6245arm_neon_quad_read (struct gdbarch *gdbarch, struct regcache *regcache,
6246 int regnum, gdb_byte *buf)
6247{
6248 char name_buf[4];
6249 gdb_byte reg_buf[8];
6250 int offset, double_regnum;
6251
6252 sprintf (name_buf, "d%d", regnum << 1);
6253 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6254 strlen (name_buf));
6255
6256 /* d0 is always the least significant half of q0. */
6257 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6258 offset = 8;
6259 else
6260 offset = 0;
6261
6262 regcache_raw_read (regcache, double_regnum, reg_buf);
6263 memcpy (buf + offset, reg_buf, 8);
6264
6265 offset = 8 - offset;
6266 regcache_raw_read (regcache, double_regnum + 1, reg_buf);
6267 memcpy (buf + offset, reg_buf, 8);
6268}
6269
6270static void
6271arm_pseudo_read (struct gdbarch *gdbarch, struct regcache *regcache,
6272 int regnum, gdb_byte *buf)
6273{
6274 const int num_regs = gdbarch_num_regs (gdbarch);
6275 char name_buf[4];
6276 gdb_byte reg_buf[8];
6277 int offset, double_regnum;
6278
6279 gdb_assert (regnum >= num_regs);
6280 regnum -= num_regs;
6281
6282 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
6283 /* Quad-precision register. */
6284 arm_neon_quad_read (gdbarch, regcache, regnum - 32, buf);
6285 else
6286 {
6287 /* Single-precision register. */
6288 gdb_assert (regnum < 32);
6289
6290 /* s0 is always the least significant half of d0. */
6291 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6292 offset = (regnum & 1) ? 0 : 4;
6293 else
6294 offset = (regnum & 1) ? 4 : 0;
6295
6296 sprintf (name_buf, "d%d", regnum >> 1);
6297 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6298 strlen (name_buf));
6299
6300 regcache_raw_read (regcache, double_regnum, reg_buf);
6301 memcpy (buf, reg_buf + offset, 4);
6302 }
6303}
6304
6305/* Store the contents of BUF to a NEON quad register, by writing to
6306 two double registers. This is used to implement the quad pseudo
6307 registers, and for argument passing in case the quad registers are
6308 missing; vectors are passed in quad registers when using the VFP
6309 ABI, even if a NEON unit is not present. REGNUM is the index
6310 of the quad register, in [0, 15]. */
6311
6312static void
6313arm_neon_quad_write (struct gdbarch *gdbarch, struct regcache *regcache,
6314 int regnum, const gdb_byte *buf)
6315{
6316 char name_buf[4];
6317 gdb_byte reg_buf[8];
6318 int offset, double_regnum;
6319
6320 sprintf (name_buf, "d%d", regnum << 1);
6321 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6322 strlen (name_buf));
6323
6324 /* d0 is always the least significant half of q0. */
6325 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6326 offset = 8;
6327 else
6328 offset = 0;
6329
6330 regcache_raw_write (regcache, double_regnum, buf + offset);
6331 offset = 8 - offset;
6332 regcache_raw_write (regcache, double_regnum + 1, buf + offset);
6333}
6334
6335static void
6336arm_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
6337 int regnum, const gdb_byte *buf)
6338{
6339 const int num_regs = gdbarch_num_regs (gdbarch);
6340 char name_buf[4];
6341 gdb_byte reg_buf[8];
6342 int offset, double_regnum;
6343
6344 gdb_assert (regnum >= num_regs);
6345 regnum -= num_regs;
6346
6347 if (gdbarch_tdep (gdbarch)->have_neon_pseudos && regnum >= 32 && regnum < 48)
6348 /* Quad-precision register. */
6349 arm_neon_quad_write (gdbarch, regcache, regnum - 32, buf);
6350 else
6351 {
6352 /* Single-precision register. */
6353 gdb_assert (regnum < 32);
6354
6355 /* s0 is always the least significant half of d0. */
6356 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6357 offset = (regnum & 1) ? 0 : 4;
6358 else
6359 offset = (regnum & 1) ? 4 : 0;
6360
6361 sprintf (name_buf, "d%d", regnum >> 1);
6362 double_regnum = user_reg_map_name_to_regnum (gdbarch, name_buf,
6363 strlen (name_buf));
6364
6365 regcache_raw_read (regcache, double_regnum, reg_buf);
6366 memcpy (reg_buf + offset, buf, 4);
6367 regcache_raw_write (regcache, double_regnum, reg_buf);
6368 }
6369}
6370
123dc839
DJ
6371static struct value *
6372value_of_arm_user_reg (struct frame_info *frame, const void *baton)
6373{
6374 const int *reg_p = baton;
6375 return value_of_register (*reg_p, frame);
6376}
97e03143 6377\f
70f80edf
JT
6378static enum gdb_osabi
6379arm_elf_osabi_sniffer (bfd *abfd)
97e03143 6380{
2af48f68 6381 unsigned int elfosabi;
70f80edf 6382 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
97e03143 6383
70f80edf 6384 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
97e03143 6385
28e97307
DJ
6386 if (elfosabi == ELFOSABI_ARM)
6387 /* GNU tools use this value. Check note sections in this case,
6388 as well. */
6389 bfd_map_over_sections (abfd,
6390 generic_elf_osabi_sniff_abi_tag_sections,
6391 &osabi);
97e03143 6392
28e97307 6393 /* Anything else will be handled by the generic ELF sniffer. */
70f80edf 6394 return osabi;
97e03143
RE
6395}
6396
70f80edf 6397\f
da3c6d4a
MS
6398/* Initialize the current architecture based on INFO. If possible,
6399 re-use an architecture from ARCHES, which is a list of
6400 architectures already created during this debugging session.
97e03143 6401
da3c6d4a
MS
6402 Called e.g. at program startup, when reading a core file, and when
6403 reading a binary file. */
97e03143 6404
39bbf761
RE
6405static struct gdbarch *
6406arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
6407{
97e03143 6408 struct gdbarch_tdep *tdep;
39bbf761 6409 struct gdbarch *gdbarch;
28e97307
DJ
6410 struct gdbarch_list *best_arch;
6411 enum arm_abi_kind arm_abi = arm_abi_global;
6412 enum arm_float_model fp_model = arm_fp_model;
123dc839
DJ
6413 struct tdesc_arch_data *tdesc_data = NULL;
6414 int i;
58d6951d
DJ
6415 int have_vfp_registers = 0, have_vfp_pseudos = 0, have_neon_pseudos = 0;
6416 int have_neon = 0;
ff6f572f 6417 int have_fpa_registers = 1;
123dc839
DJ
6418
6419 /* Check any target description for validity. */
6420 if (tdesc_has_registers (info.target_desc))
6421 {
6422 /* For most registers we require GDB's default names; but also allow
6423 the numeric names for sp / lr / pc, as a convenience. */
6424 static const char *const arm_sp_names[] = { "r13", "sp", NULL };
6425 static const char *const arm_lr_names[] = { "r14", "lr", NULL };
6426 static const char *const arm_pc_names[] = { "r15", "pc", NULL };
6427
6428 const struct tdesc_feature *feature;
58d6951d 6429 int valid_p;
123dc839
DJ
6430
6431 feature = tdesc_find_feature (info.target_desc,
6432 "org.gnu.gdb.arm.core");
6433 if (feature == NULL)
6434 return NULL;
6435
6436 tdesc_data = tdesc_data_alloc ();
6437
6438 valid_p = 1;
6439 for (i = 0; i < ARM_SP_REGNUM; i++)
6440 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6441 arm_register_names[i]);
6442 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6443 ARM_SP_REGNUM,
6444 arm_sp_names);
6445 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6446 ARM_LR_REGNUM,
6447 arm_lr_names);
6448 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
6449 ARM_PC_REGNUM,
6450 arm_pc_names);
6451 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6452 ARM_PS_REGNUM, "cpsr");
6453
6454 if (!valid_p)
6455 {
6456 tdesc_data_cleanup (tdesc_data);
6457 return NULL;
6458 }
6459
6460 feature = tdesc_find_feature (info.target_desc,
6461 "org.gnu.gdb.arm.fpa");
6462 if (feature != NULL)
6463 {
6464 valid_p = 1;
6465 for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
6466 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6467 arm_register_names[i]);
6468 if (!valid_p)
6469 {
6470 tdesc_data_cleanup (tdesc_data);
6471 return NULL;
6472 }
6473 }
ff6f572f
DJ
6474 else
6475 have_fpa_registers = 0;
6476
6477 feature = tdesc_find_feature (info.target_desc,
6478 "org.gnu.gdb.xscale.iwmmxt");
6479 if (feature != NULL)
6480 {
6481 static const char *const iwmmxt_names[] = {
6482 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
6483 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
6484 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
6485 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
6486 };
6487
6488 valid_p = 1;
6489 for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
6490 valid_p
6491 &= tdesc_numbered_register (feature, tdesc_data, i,
6492 iwmmxt_names[i - ARM_WR0_REGNUM]);
6493
6494 /* Check for the control registers, but do not fail if they
6495 are missing. */
6496 for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
6497 tdesc_numbered_register (feature, tdesc_data, i,
6498 iwmmxt_names[i - ARM_WR0_REGNUM]);
6499
6500 for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
6501 valid_p
6502 &= tdesc_numbered_register (feature, tdesc_data, i,
6503 iwmmxt_names[i - ARM_WR0_REGNUM]);
6504
6505 if (!valid_p)
6506 {
6507 tdesc_data_cleanup (tdesc_data);
6508 return NULL;
6509 }
6510 }
58d6951d
DJ
6511
6512 /* If we have a VFP unit, check whether the single precision registers
6513 are present. If not, then we will synthesize them as pseudo
6514 registers. */
6515 feature = tdesc_find_feature (info.target_desc,
6516 "org.gnu.gdb.arm.vfp");
6517 if (feature != NULL)
6518 {
6519 static const char *const vfp_double_names[] = {
6520 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
6521 "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
6522 "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
6523 "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
6524 };
6525
6526 /* Require the double precision registers. There must be either
6527 16 or 32. */
6528 valid_p = 1;
6529 for (i = 0; i < 32; i++)
6530 {
6531 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6532 ARM_D0_REGNUM + i,
6533 vfp_double_names[i]);
6534 if (!valid_p)
6535 break;
6536 }
6537
6538 if (!valid_p && i != 16)
6539 {
6540 tdesc_data_cleanup (tdesc_data);
6541 return NULL;
6542 }
6543
6544 if (tdesc_unnumbered_register (feature, "s0") == 0)
6545 have_vfp_pseudos = 1;
6546
6547 have_vfp_registers = 1;
6548
6549 /* If we have VFP, also check for NEON. The architecture allows
6550 NEON without VFP (integer vector operations only), but GDB
6551 does not support that. */
6552 feature = tdesc_find_feature (info.target_desc,
6553 "org.gnu.gdb.arm.neon");
6554 if (feature != NULL)
6555 {
6556 /* NEON requires 32 double-precision registers. */
6557 if (i != 32)
6558 {
6559 tdesc_data_cleanup (tdesc_data);
6560 return NULL;
6561 }
6562
6563 /* If there are quad registers defined by the stub, use
6564 their type; otherwise (normally) provide them with
6565 the default type. */
6566 if (tdesc_unnumbered_register (feature, "q0") == 0)
6567 have_neon_pseudos = 1;
6568
6569 have_neon = 1;
6570 }
6571 }
123dc839 6572 }
39bbf761 6573
28e97307
DJ
6574 /* If we have an object to base this architecture on, try to determine
6575 its ABI. */
39bbf761 6576
28e97307 6577 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
97e03143 6578 {
6b26d61a 6579 int ei_osabi, e_flags;
28e97307 6580
4be87837 6581 switch (bfd_get_flavour (info.abfd))
97e03143 6582 {
4be87837
DJ
6583 case bfd_target_aout_flavour:
6584 /* Assume it's an old APCS-style ABI. */
28e97307 6585 arm_abi = ARM_ABI_APCS;
4be87837 6586 break;
97e03143 6587
4be87837
DJ
6588 case bfd_target_coff_flavour:
6589 /* Assume it's an old APCS-style ABI. */
6590 /* XXX WinCE? */
28e97307
DJ
6591 arm_abi = ARM_ABI_APCS;
6592 break;
6593
6594 case bfd_target_elf_flavour:
6595 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
6b26d61a
MK
6596 e_flags = elf_elfheader (info.abfd)->e_flags;
6597
28e97307
DJ
6598 if (ei_osabi == ELFOSABI_ARM)
6599 {
6600 /* GNU tools used to use this value, but do not for EABI
6b26d61a
MK
6601 objects. There's nowhere to tag an EABI version
6602 anyway, so assume APCS. */
28e97307
DJ
6603 arm_abi = ARM_ABI_APCS;
6604 }
6605 else if (ei_osabi == ELFOSABI_NONE)
6606 {
6b26d61a 6607 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
28e97307
DJ
6608
6609 switch (eabi_ver)
6610 {
6611 case EF_ARM_EABI_UNKNOWN:
6612 /* Assume GNU tools. */
6613 arm_abi = ARM_ABI_APCS;
6614 break;
6615
6616 case EF_ARM_EABI_VER4:
625b5003 6617 case EF_ARM_EABI_VER5:
28e97307 6618 arm_abi = ARM_ABI_AAPCS;
90445bd3
DJ
6619 /* EABI binaries default to VFP float ordering.
6620 They may also contain build attributes that can
6621 be used to identify if the VFP argument-passing
6622 ABI is in use. */
2af48f68 6623 if (fp_model == ARM_FLOAT_AUTO)
90445bd3
DJ
6624 {
6625#ifdef HAVE_ELF
6626 switch (bfd_elf_get_obj_attr_int (info.abfd,
6627 OBJ_ATTR_PROC,
6628 Tag_ABI_VFP_args))
6629 {
6630 case 0:
6631 /* "The user intended FP parameter/result
6632 passing to conform to AAPCS, base
6633 variant". */
6634 fp_model = ARM_FLOAT_SOFT_VFP;
6635 break;
6636 case 1:
6637 /* "The user intended FP parameter/result
6638 passing to conform to AAPCS, VFP
6639 variant". */
6640 fp_model = ARM_FLOAT_VFP;
6641 break;
6642 case 2:
6643 /* "The user intended FP parameter/result
6644 passing to conform to tool chain-specific
6645 conventions" - we don't know any such
6646 conventions, so leave it as "auto". */
6647 break;
6648 default:
6649 /* Attribute value not mentioned in the
6650 October 2008 ABI, so leave it as
6651 "auto". */
6652 break;
6653 }
6654#else
6655 fp_model = ARM_FLOAT_SOFT_VFP;
6656#endif
6657 }
28e97307
DJ
6658 break;
6659
6660 default:
6b26d61a 6661 /* Leave it as "auto". */
28e97307 6662 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
6b26d61a
MK
6663 break;
6664 }
6665 }
6666
6667 if (fp_model == ARM_FLOAT_AUTO)
6668 {
6669 int e_flags = elf_elfheader (info.abfd)->e_flags;
6670
6671 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
6672 {
6673 case 0:
6674 /* Leave it as "auto". Strictly speaking this case
6675 means FPA, but almost nobody uses that now, and
6676 many toolchains fail to set the appropriate bits
6677 for the floating-point model they use. */
6678 break;
6679 case EF_ARM_SOFT_FLOAT:
6680 fp_model = ARM_FLOAT_SOFT_FPA;
6681 break;
6682 case EF_ARM_VFP_FLOAT:
6683 fp_model = ARM_FLOAT_VFP;
6684 break;
6685 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
6686 fp_model = ARM_FLOAT_SOFT_VFP;
28e97307
DJ
6687 break;
6688 }
6689 }
9d4fde75
SS
6690
6691 if (e_flags & EF_ARM_BE8)
6692 info.byte_order_for_code = BFD_ENDIAN_LITTLE;
6693
4be87837 6694 break;
97e03143 6695
4be87837 6696 default:
28e97307 6697 /* Leave it as "auto". */
50ceaba5 6698 break;
97e03143
RE
6699 }
6700 }
6701
28e97307
DJ
6702 /* If there is already a candidate, use it. */
6703 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
6704 best_arch != NULL;
6705 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
6706 {
b8926edc
DJ
6707 if (arm_abi != ARM_ABI_AUTO
6708 && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
28e97307
DJ
6709 continue;
6710
b8926edc
DJ
6711 if (fp_model != ARM_FLOAT_AUTO
6712 && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
28e97307
DJ
6713 continue;
6714
58d6951d
DJ
6715 /* There are various other properties in tdep that we do not
6716 need to check here: those derived from a target description,
6717 since gdbarches with a different target description are
6718 automatically disqualified. */
6719
28e97307
DJ
6720 /* Found a match. */
6721 break;
6722 }
97e03143 6723
28e97307 6724 if (best_arch != NULL)
123dc839
DJ
6725 {
6726 if (tdesc_data != NULL)
6727 tdesc_data_cleanup (tdesc_data);
6728 return best_arch->gdbarch;
6729 }
28e97307
DJ
6730
6731 tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
97e03143
RE
6732 gdbarch = gdbarch_alloc (&info, tdep);
6733
28e97307
DJ
6734 /* Record additional information about the architecture we are defining.
6735 These are gdbarch discriminators, like the OSABI. */
6736 tdep->arm_abi = arm_abi;
6737 tdep->fp_model = fp_model;
ff6f572f 6738 tdep->have_fpa_registers = have_fpa_registers;
58d6951d
DJ
6739 tdep->have_vfp_registers = have_vfp_registers;
6740 tdep->have_vfp_pseudos = have_vfp_pseudos;
6741 tdep->have_neon_pseudos = have_neon_pseudos;
6742 tdep->have_neon = have_neon;
08216dd7
RE
6743
6744 /* Breakpoints. */
9d4fde75 6745 switch (info.byte_order_for_code)
67255d04
RE
6746 {
6747 case BFD_ENDIAN_BIG:
66e810cd
RE
6748 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
6749 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
6750 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
6751 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
6752
67255d04
RE
6753 break;
6754
6755 case BFD_ENDIAN_LITTLE:
66e810cd
RE
6756 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
6757 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
6758 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
6759 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
6760
67255d04
RE
6761 break;
6762
6763 default:
6764 internal_error (__FILE__, __LINE__,
edefbb7c 6765 _("arm_gdbarch_init: bad byte order for float format"));
67255d04
RE
6766 }
6767
d7b486e7
RE
6768 /* On ARM targets char defaults to unsigned. */
6769 set_gdbarch_char_signed (gdbarch, 0);
6770
cca44b1b
JB
6771 /* Note: for displaced stepping, this includes the breakpoint, and one word
6772 of additional scratch space. This setting isn't used for anything beside
6773 displaced stepping at present. */
6774 set_gdbarch_max_insn_length (gdbarch, 4 * DISPLACED_MODIFIED_INSNS);
6775
9df628e0 6776 /* This should be low enough for everything. */
97e03143 6777 tdep->lowest_pc = 0x20;
94c30b78 6778 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
97e03143 6779
7c00367c
MK
6780 /* The default, for both APCS and AAPCS, is to return small
6781 structures in registers. */
6782 tdep->struct_return = reg_struct_return;
6783
2dd604e7 6784 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
f53f0d0b 6785 set_gdbarch_frame_align (gdbarch, arm_frame_align);
39bbf761 6786
756fe439
DJ
6787 set_gdbarch_write_pc (gdbarch, arm_write_pc);
6788
148754e5 6789 /* Frame handling. */
a262aec2 6790 set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
eb5492fa
DJ
6791 set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
6792 set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
6793
eb5492fa 6794 frame_base_set_default (gdbarch, &arm_normal_base);
148754e5 6795
34e8f22d
RE
6796 /* Address manipulation. */
6797 set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
6798 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
6799
34e8f22d
RE
6800 /* Advance PC across function entry code. */
6801 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
6802
190dce09
UW
6803 /* Skip trampolines. */
6804 set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
6805
34e8f22d
RE
6806 /* The stack grows downward. */
6807 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6808
6809 /* Breakpoint manipulation. */
6810 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
177321bd
DJ
6811 set_gdbarch_remote_breakpoint_from_pc (gdbarch,
6812 arm_remote_breakpoint_from_pc);
34e8f22d
RE
6813
6814 /* Information about registers, etc. */
0ba6dca9 6815 set_gdbarch_deprecated_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
34e8f22d
RE
6816 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
6817 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
ff6f572f 6818 set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
7a5ea0d4 6819 set_gdbarch_register_type (gdbarch, arm_register_type);
34e8f22d 6820
ff6f572f
DJ
6821 /* This "info float" is FPA-specific. Use the generic version if we
6822 do not have FPA. */
6823 if (gdbarch_tdep (gdbarch)->have_fpa_registers)
6824 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
6825
26216b98 6826 /* Internal <-> external register number maps. */
ff6f572f 6827 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
26216b98
AC
6828 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
6829
34e8f22d
RE
6830 set_gdbarch_register_name (gdbarch, arm_register_name);
6831
6832 /* Returning results. */
2af48f68 6833 set_gdbarch_return_value (gdbarch, arm_return_value);
34e8f22d 6834
03d48a7d
RE
6835 /* Disassembly. */
6836 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
6837
34e8f22d
RE
6838 /* Minsymbol frobbing. */
6839 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
6840 set_gdbarch_coff_make_msymbol_special (gdbarch,
6841 arm_coff_make_msymbol_special);
60c5725c 6842 set_gdbarch_record_special_symbol (gdbarch, arm_record_special_symbol);
34e8f22d 6843
f9d67f43
DJ
6844 /* Thumb-2 IT block support. */
6845 set_gdbarch_adjust_breakpoint_address (gdbarch,
6846 arm_adjust_breakpoint_address);
6847
0d5de010
DJ
6848 /* Virtual tables. */
6849 set_gdbarch_vbit_in_delta (gdbarch, 1);
6850
97e03143 6851 /* Hook in the ABI-specific overrides, if they have been registered. */
4be87837 6852 gdbarch_init_osabi (info, gdbarch);
97e03143 6853
b39cc962
DJ
6854 dwarf2_frame_set_init_reg (gdbarch, arm_dwarf2_frame_init_reg);
6855
eb5492fa 6856 /* Add some default predicates. */
a262aec2
DJ
6857 frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
6858 dwarf2_append_unwinders (gdbarch);
6859 frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
eb5492fa 6860
97e03143
RE
6861 /* Now we have tuned the configuration, set a few final things,
6862 based on what the OS ABI has told us. */
6863
b8926edc
DJ
6864 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
6865 binaries are always marked. */
6866 if (tdep->arm_abi == ARM_ABI_AUTO)
6867 tdep->arm_abi = ARM_ABI_APCS;
6868
6869 /* We used to default to FPA for generic ARM, but almost nobody
6870 uses that now, and we now provide a way for the user to force
6871 the model. So default to the most useful variant. */
6872 if (tdep->fp_model == ARM_FLOAT_AUTO)
6873 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
6874
9df628e0
RE
6875 if (tdep->jb_pc >= 0)
6876 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
6877
08216dd7 6878 /* Floating point sizes and format. */
8da61cc4 6879 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
b8926edc 6880 if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
08216dd7 6881 {
8da61cc4
DJ
6882 set_gdbarch_double_format
6883 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
6884 set_gdbarch_long_double_format
6885 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
6886 }
6887 else
6888 {
6889 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
6890 set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
08216dd7
RE
6891 }
6892
58d6951d
DJ
6893 if (have_vfp_pseudos)
6894 {
6895 /* NOTE: These are the only pseudo registers used by
6896 the ARM target at the moment. If more are added, a
6897 little more care in numbering will be needed. */
6898
6899 int num_pseudos = 32;
6900 if (have_neon_pseudos)
6901 num_pseudos += 16;
6902 set_gdbarch_num_pseudo_regs (gdbarch, num_pseudos);
6903 set_gdbarch_pseudo_register_read (gdbarch, arm_pseudo_read);
6904 set_gdbarch_pseudo_register_write (gdbarch, arm_pseudo_write);
6905 }
6906
123dc839 6907 if (tdesc_data)
58d6951d
DJ
6908 {
6909 set_tdesc_pseudo_register_name (gdbarch, arm_register_name);
6910
6911 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
6912
6913 /* Override tdesc_register_type to adjust the types of VFP
6914 registers for NEON. */
6915 set_gdbarch_register_type (gdbarch, arm_register_type);
6916 }
123dc839
DJ
6917
6918 /* Add standard register aliases. We add aliases even for those
6919 nanes which are used by the current architecture - it's simpler,
6920 and does no harm, since nothing ever lists user registers. */
6921 for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
6922 user_reg_add (gdbarch, arm_register_aliases[i].name,
6923 value_of_arm_user_reg, &arm_register_aliases[i].regnum);
6924
39bbf761
RE
6925 return gdbarch;
6926}
6927
97e03143 6928static void
2af46ca0 6929arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
97e03143 6930{
2af46ca0 6931 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
97e03143
RE
6932
6933 if (tdep == NULL)
6934 return;
6935
edefbb7c 6936 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
97e03143
RE
6937 (unsigned long) tdep->lowest_pc);
6938}
6939
a78f21af
AC
6940extern initialize_file_ftype _initialize_arm_tdep; /* -Wmissing-prototypes */
6941
c906108c 6942void
ed9a39eb 6943_initialize_arm_tdep (void)
c906108c 6944{
bc90b915
FN
6945 struct ui_file *stb;
6946 long length;
26304000 6947 struct cmd_list_element *new_set, *new_show;
53904c9e
AC
6948 const char *setname;
6949 const char *setdesc;
4bd7b427 6950 const char *const *regnames;
bc90b915
FN
6951 int numregs, i, j;
6952 static char *helptext;
edefbb7c
AC
6953 char regdesc[1024], *rdptr = regdesc;
6954 size_t rest = sizeof (regdesc);
085dd6e6 6955
42cf1509 6956 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
97e03143 6957
60c5725c 6958 arm_objfile_data_key
c1bd65d0 6959 = register_objfile_data_with_cleanup (NULL, arm_objfile_data_free);
60c5725c 6960
70f80edf
JT
6961 /* Register an ELF OS ABI sniffer for ARM binaries. */
6962 gdbarch_register_osabi_sniffer (bfd_arch_arm,
6963 bfd_target_elf_flavour,
6964 arm_elf_osabi_sniffer);
6965
94c30b78 6966 /* Get the number of possible sets of register names defined in opcodes. */
afd7eef0
RE
6967 num_disassembly_options = get_arm_regname_num_options ();
6968
6969 /* Add root prefix command for all "set arm"/"show arm" commands. */
6970 add_prefix_cmd ("arm", no_class, set_arm_command,
edefbb7c 6971 _("Various ARM-specific commands."),
afd7eef0
RE
6972 &setarmcmdlist, "set arm ", 0, &setlist);
6973
6974 add_prefix_cmd ("arm", no_class, show_arm_command,
edefbb7c 6975 _("Various ARM-specific commands."),
afd7eef0 6976 &showarmcmdlist, "show arm ", 0, &showlist);
bc90b915 6977
94c30b78 6978 /* Sync the opcode insn printer with our register viewer. */
bc90b915 6979 parse_arm_disassembler_option ("reg-names-std");
c5aa993b 6980
eefe576e
AC
6981 /* Initialize the array that will be passed to
6982 add_setshow_enum_cmd(). */
afd7eef0
RE
6983 valid_disassembly_styles
6984 = xmalloc ((num_disassembly_options + 1) * sizeof (char *));
6985 for (i = 0; i < num_disassembly_options; i++)
bc90b915
FN
6986 {
6987 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
afd7eef0 6988 valid_disassembly_styles[i] = setname;
edefbb7c
AC
6989 length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
6990 rdptr += length;
6991 rest -= length;
123dc839
DJ
6992 /* When we find the default names, tell the disassembler to use
6993 them. */
bc90b915
FN
6994 if (!strcmp (setname, "std"))
6995 {
afd7eef0 6996 disassembly_style = setname;
bc90b915
FN
6997 set_arm_regname_option (i);
6998 }
6999 }
94c30b78 7000 /* Mark the end of valid options. */
afd7eef0 7001 valid_disassembly_styles[num_disassembly_options] = NULL;
c906108c 7002
edefbb7c
AC
7003 /* Create the help text. */
7004 stb = mem_fileopen ();
7005 fprintf_unfiltered (stb, "%s%s%s",
7006 _("The valid values are:\n"),
7007 regdesc,
7008 _("The default is \"std\"."));
759ef836 7009 helptext = ui_file_xstrdup (stb, NULL);
bc90b915 7010 ui_file_delete (stb);
ed9a39eb 7011
edefbb7c
AC
7012 add_setshow_enum_cmd("disassembler", no_class,
7013 valid_disassembly_styles, &disassembly_style,
7014 _("Set the disassembly style."),
7015 _("Show the disassembly style."),
7016 helptext,
2c5b56ce 7017 set_disassembly_style_sfunc,
7915a72c 7018 NULL, /* FIXME: i18n: The disassembly style is \"%s\". */
7376b4c2 7019 &setarmcmdlist, &showarmcmdlist);
edefbb7c
AC
7020
7021 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
7022 _("Set usage of ARM 32-bit mode."),
7023 _("Show usage of ARM 32-bit mode."),
7024 _("When off, a 26-bit PC will be used."),
2c5b56ce 7025 NULL,
7915a72c 7026 NULL, /* FIXME: i18n: Usage of ARM 32-bit mode is %s. */
26304000 7027 &setarmcmdlist, &showarmcmdlist);
c906108c 7028
fd50bc42 7029 /* Add a command to allow the user to force the FPU model. */
edefbb7c
AC
7030 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
7031 _("Set the floating point type."),
7032 _("Show the floating point type."),
7033 _("auto - Determine the FP typefrom the OS-ABI.\n\
7034softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
7035fpa - FPA co-processor (GCC compiled).\n\
7036softvfp - Software FP with pure-endian doubles.\n\
7037vfp - VFP co-processor."),
edefbb7c 7038 set_fp_model_sfunc, show_fp_model,
7376b4c2 7039 &setarmcmdlist, &showarmcmdlist);
fd50bc42 7040
28e97307
DJ
7041 /* Add a command to allow the user to force the ABI. */
7042 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
7043 _("Set the ABI."),
7044 _("Show the ABI."),
7045 NULL, arm_set_abi, arm_show_abi,
7046 &setarmcmdlist, &showarmcmdlist);
7047
0428b8f5
DJ
7048 /* Add two commands to allow the user to force the assumed
7049 execution mode. */
7050 add_setshow_enum_cmd ("fallback-mode", class_support,
7051 arm_mode_strings, &arm_fallback_mode_string,
7052 _("Set the mode assumed when symbols are unavailable."),
7053 _("Show the mode assumed when symbols are unavailable."),
7054 NULL, NULL, arm_show_fallback_mode,
7055 &setarmcmdlist, &showarmcmdlist);
7056 add_setshow_enum_cmd ("force-mode", class_support,
7057 arm_mode_strings, &arm_force_mode_string,
7058 _("Set the mode assumed even when symbols are available."),
7059 _("Show the mode assumed even when symbols are available."),
7060 NULL, NULL, arm_show_force_mode,
7061 &setarmcmdlist, &showarmcmdlist);
7062
6529d2dd 7063 /* Debugging flag. */
edefbb7c
AC
7064 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
7065 _("Set ARM debugging."),
7066 _("Show ARM debugging."),
7067 _("When on, arm-specific debugging is enabled."),
2c5b56ce 7068 NULL,
7915a72c 7069 NULL, /* FIXME: i18n: "ARM debugging is %s. */
26304000 7070 &setdebuglist, &showdebuglist);
c906108c 7071}
This page took 1.250126 seconds and 4 git commands to generate.