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