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