* spu-tdep.c: Update for unwinder changes.
[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,
9b254dd1
DJ
4 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
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
AC
53#include "gdb_assert.h"
54
6529d2dd
AC
55static int arm_debug;
56
082fc60d
RE
57/* Macros for setting and testing a bit in a minimal symbol that marks
58 it as Thumb function. The MSB of the minimal symbol's "info" field
f594e5e9 59 is used for this purpose.
082fc60d
RE
60
61 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
f594e5e9 62 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
082fc60d
RE
63
64#define MSYMBOL_SET_SPECIAL(msym) \
65 MSYMBOL_INFO (msym) = (char *) (((long) MSYMBOL_INFO (msym)) \
66 | 0x80000000)
67
68#define MSYMBOL_IS_SPECIAL(msym) \
69 (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
70
afd7eef0
RE
71/* The list of available "set arm ..." and "show arm ..." commands. */
72static struct cmd_list_element *setarmcmdlist = NULL;
73static struct cmd_list_element *showarmcmdlist = NULL;
74
fd50bc42
RE
75/* The type of floating-point to use. Keep this in sync with enum
76 arm_float_model, and the help string in _initialize_arm_tdep. */
77static const char *fp_model_strings[] =
78{
79 "auto",
80 "softfpa",
81 "fpa",
82 "softvfp",
28e97307
DJ
83 "vfp",
84 NULL
fd50bc42
RE
85};
86
87/* A variable that can be configured by the user. */
88static enum arm_float_model arm_fp_model = ARM_FLOAT_AUTO;
89static const char *current_fp_model = "auto";
90
28e97307
DJ
91/* The ABI to use. Keep this in sync with arm_abi_kind. */
92static const char *arm_abi_strings[] =
93{
94 "auto",
95 "APCS",
96 "AAPCS",
97 NULL
98};
99
100/* A variable that can be configured by the user. */
101static enum arm_abi_kind arm_abi_global = ARM_ABI_AUTO;
102static const char *arm_abi_string = "auto";
103
94c30b78 104/* Number of different reg name sets (options). */
afd7eef0 105static int num_disassembly_options;
bc90b915 106
123dc839
DJ
107/* The standard register names, and all the valid aliases for them. */
108static const struct
109{
110 const char *name;
111 int regnum;
112} arm_register_aliases[] = {
113 /* Basic register numbers. */
114 { "r0", 0 },
115 { "r1", 1 },
116 { "r2", 2 },
117 { "r3", 3 },
118 { "r4", 4 },
119 { "r5", 5 },
120 { "r6", 6 },
121 { "r7", 7 },
122 { "r8", 8 },
123 { "r9", 9 },
124 { "r10", 10 },
125 { "r11", 11 },
126 { "r12", 12 },
127 { "r13", 13 },
128 { "r14", 14 },
129 { "r15", 15 },
130 /* Synonyms (argument and variable registers). */
131 { "a1", 0 },
132 { "a2", 1 },
133 { "a3", 2 },
134 { "a4", 3 },
135 { "v1", 4 },
136 { "v2", 5 },
137 { "v3", 6 },
138 { "v4", 7 },
139 { "v5", 8 },
140 { "v6", 9 },
141 { "v7", 10 },
142 { "v8", 11 },
143 /* Other platform-specific names for r9. */
144 { "sb", 9 },
145 { "tr", 9 },
146 /* Special names. */
147 { "ip", 12 },
148 { "sp", 13 },
149 { "lr", 14 },
150 { "pc", 15 },
151 /* Names used by GCC (not listed in the ARM EABI). */
152 { "sl", 10 },
153 { "fp", 11 },
154 /* A special name from the older ATPCS. */
155 { "wr", 7 },
156};
bc90b915 157
123dc839 158static const char *const arm_register_names[] =
da59e081
JM
159{"r0", "r1", "r2", "r3", /* 0 1 2 3 */
160 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
161 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
162 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
163 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
164 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
94c30b78 165 "fps", "cpsr" }; /* 24 25 */
ed9a39eb 166
afd7eef0
RE
167/* Valid register name styles. */
168static const char **valid_disassembly_styles;
ed9a39eb 169
afd7eef0
RE
170/* Disassembly style to use. Default to "std" register names. */
171static const char *disassembly_style;
96baa820 172
ed9a39eb 173/* This is used to keep the bfd arch_info in sync with the disassembly
afd7eef0
RE
174 style. */
175static void set_disassembly_style_sfunc(char *, int,
ed9a39eb 176 struct cmd_list_element *);
afd7eef0 177static void set_disassembly_style (void);
ed9a39eb 178
b508a996 179static void convert_from_extended (const struct floatformat *, const void *,
be8626e0 180 void *, int);
b508a996 181static void convert_to_extended (const struct floatformat *, void *,
be8626e0 182 const void *, int);
ed9a39eb 183
9b8d791a 184struct arm_prologue_cache
c3b4394c 185{
eb5492fa
DJ
186 /* The stack pointer at the time this frame was created; i.e. the
187 caller's stack pointer when this function was called. It is used
188 to identify this frame. */
189 CORE_ADDR prev_sp;
190
4be43953
DJ
191 /* The frame base for this frame is just prev_sp - frame size.
192 FRAMESIZE is the distance from the frame pointer to the
193 initial stack pointer. */
eb5492fa 194
c3b4394c 195 int framesize;
eb5492fa
DJ
196
197 /* The register used to hold the frame pointer for this frame. */
c3b4394c 198 int framereg;
eb5492fa
DJ
199
200 /* Saved register offsets. */
201 struct trad_frame_saved_reg *saved_regs;
c3b4394c 202};
ed9a39eb 203
bc90b915
FN
204/* Addresses for calling Thumb functions have the bit 0 set.
205 Here are some macros to test, set, or clear bit 0 of addresses. */
206#define IS_THUMB_ADDR(addr) ((addr) & 1)
207#define MAKE_THUMB_ADDR(addr) ((addr) | 1)
208#define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
209
94c30b78 210/* Set to true if the 32-bit mode is in use. */
c906108c
SS
211
212int arm_apcs_32 = 1;
213
ed9a39eb
JM
214/* Determine if the program counter specified in MEMADDR is in a Thumb
215 function. */
c906108c 216
ad527d2e 217static int
2a451106 218arm_pc_is_thumb (CORE_ADDR memaddr)
c906108c 219{
c5aa993b 220 struct minimal_symbol *sym;
c906108c 221
ed9a39eb 222 /* If bit 0 of the address is set, assume this is a Thumb address. */
c906108c
SS
223 if (IS_THUMB_ADDR (memaddr))
224 return 1;
225
ed9a39eb 226 /* Thumb functions have a "special" bit set in minimal symbols. */
c906108c
SS
227 sym = lookup_minimal_symbol_by_pc (memaddr);
228 if (sym)
229 {
c5aa993b 230 return (MSYMBOL_IS_SPECIAL (sym));
c906108c
SS
231 }
232 else
ed9a39eb
JM
233 {
234 return 0;
235 }
c906108c
SS
236}
237
181c1381 238/* Remove useless bits from addresses in a running program. */
34e8f22d 239static CORE_ADDR
ed9a39eb 240arm_addr_bits_remove (CORE_ADDR val)
c906108c 241{
a3a2ee65 242 if (arm_apcs_32)
dd6be234 243 return UNMAKE_THUMB_ADDR (val);
c906108c 244 else
a3a2ee65 245 return (val & 0x03fffffc);
c906108c
SS
246}
247
181c1381
RE
248/* When reading symbols, we need to zap the low bit of the address,
249 which may be set to 1 for Thumb functions. */
34e8f22d 250static CORE_ADDR
181c1381
RE
251arm_smash_text_address (CORE_ADDR val)
252{
253 return val & ~1;
254}
255
29d73ae4
DJ
256/* Analyze a Thumb prologue, looking for a recognizable stack frame
257 and frame pointer. Scan until we encounter a store that could
258 clobber the stack frame unexpectedly, or an unknown instruction. */
c906108c
SS
259
260static CORE_ADDR
29d73ae4
DJ
261thumb_analyze_prologue (struct gdbarch *gdbarch,
262 CORE_ADDR start, CORE_ADDR limit,
263 struct arm_prologue_cache *cache)
c906108c 264{
29d73ae4
DJ
265 int i;
266 pv_t regs[16];
267 struct pv_area *stack;
268 struct cleanup *back_to;
269 CORE_ADDR offset;
da3c6d4a 270
29d73ae4
DJ
271 for (i = 0; i < 16; i++)
272 regs[i] = pv_register (i, 0);
273 stack = make_pv_area (ARM_SP_REGNUM);
274 back_to = make_cleanup_free_pv_area (stack);
275
276 /* The call instruction saved PC in LR, and the current PC is not
277 interesting. Due to this file's conventions, we want the value
278 of LR at this function's entry, not at the call site, so we do
279 not record the save of the PC - when the ARM prologue analyzer
280 has also been converted to the pv mechanism, we could record the
281 save here and remove the hack in prev_register. */
282 regs[ARM_PC_REGNUM] = pv_unknown ();
283
284 while (start < limit)
c906108c 285 {
29d73ae4
DJ
286 unsigned short insn;
287
288 insn = read_memory_unsigned_integer (start, 2);
c906108c 289
94c30b78 290 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
da59e081 291 {
29d73ae4
DJ
292 int regno;
293 int mask;
4be43953
DJ
294
295 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
296 break;
29d73ae4
DJ
297
298 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
299 whether to save LR (R14). */
300 mask = (insn & 0xff) | ((insn & 0x100) << 6);
301
302 /* Calculate offsets of saved R0-R7 and LR. */
303 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
304 if (mask & (1 << regno))
305 {
29d73ae4
DJ
306 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
307 -4);
308 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
309 }
da59e081 310 }
da3c6d4a
MS
311 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR
312 sub sp, #simm */
da59e081 313 {
29d73ae4
DJ
314 offset = (insn & 0x7f) << 2; /* get scaled offset */
315 if (insn & 0x80) /* Check for SUB. */
316 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
317 -offset);
da59e081 318 else
29d73ae4
DJ
319 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
320 offset);
da59e081
JM
321 }
322 else if ((insn & 0xff00) == 0xaf00) /* add r7, sp, #imm */
29d73ae4
DJ
323 regs[THUMB_FP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM],
324 (insn & 0xff) << 2);
325 else if ((insn & 0xff00) == 0x4600) /* mov hi, lo or mov lo, hi */
da59e081 326 {
29d73ae4
DJ
327 int dst_reg = (insn & 0x7) + ((insn & 0x80) >> 4);
328 int src_reg = (insn & 0x78) >> 3;
329 regs[dst_reg] = regs[src_reg];
da59e081 330 }
29d73ae4 331 else if ((insn & 0xf800) == 0x9000) /* str rd, [sp, #off] */
da59e081 332 {
29d73ae4
DJ
333 /* Handle stores to the stack. Normally pushes are used,
334 but with GCC -mtpcs-frame, there may be other stores
335 in the prologue to create the frame. */
336 int regno = (insn >> 8) & 0x7;
337 pv_t addr;
338
339 offset = (insn & 0xff) << 2;
340 addr = pv_add_constant (regs[ARM_SP_REGNUM], offset);
341
342 if (pv_area_store_would_trash (stack, addr))
343 break;
344
345 pv_area_store (stack, addr, 4, regs[regno]);
da59e081 346 }
29d73ae4 347 else
3d74b771 348 {
29d73ae4
DJ
349 /* We don't know what this instruction is. We're finished
350 scanning. NOTE: Recognizing more safe-to-ignore
351 instructions here will improve support for optimized
352 code. */
da3c6d4a 353 break;
3d74b771 354 }
29d73ae4
DJ
355
356 start += 2;
c906108c
SS
357 }
358
29d73ae4
DJ
359 if (cache == NULL)
360 {
361 do_cleanups (back_to);
362 return start;
363 }
364
29d73ae4
DJ
365 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
366 {
367 /* Frame pointer is fp. Frame size is constant. */
368 cache->framereg = ARM_FP_REGNUM;
369 cache->framesize = -regs[ARM_FP_REGNUM].k;
370 }
371 else if (pv_is_register (regs[THUMB_FP_REGNUM], ARM_SP_REGNUM))
372 {
373 /* Frame pointer is r7. Frame size is constant. */
374 cache->framereg = THUMB_FP_REGNUM;
375 cache->framesize = -regs[THUMB_FP_REGNUM].k;
376 }
377 else if (pv_is_register (regs[ARM_SP_REGNUM], ARM_SP_REGNUM))
378 {
379 /* Try the stack pointer... this is a bit desperate. */
380 cache->framereg = ARM_SP_REGNUM;
381 cache->framesize = -regs[ARM_SP_REGNUM].k;
382 }
383 else
384 {
385 /* We're just out of luck. We don't know where the frame is. */
386 cache->framereg = -1;
387 cache->framesize = 0;
388 }
389
390 for (i = 0; i < 16; i++)
391 if (pv_area_find_reg (stack, gdbarch, i, &offset))
392 cache->saved_regs[i].addr = offset;
393
394 do_cleanups (back_to);
395 return start;
c906108c
SS
396}
397
da3c6d4a
MS
398/* Advance the PC across any function entry prologue instructions to
399 reach some "real" code.
34e8f22d
RE
400
401 The APCS (ARM Procedure Call Standard) defines the following
ed9a39eb 402 prologue:
c906108c 403
c5aa993b
JM
404 mov ip, sp
405 [stmfd sp!, {a1,a2,a3,a4}]
406 stmfd sp!, {...,fp,ip,lr,pc}
ed9a39eb
JM
407 [stfe f7, [sp, #-12]!]
408 [stfe f6, [sp, #-12]!]
409 [stfe f5, [sp, #-12]!]
410 [stfe f4, [sp, #-12]!]
411 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
c906108c 412
34e8f22d 413static CORE_ADDR
6093d2eb 414arm_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
c906108c
SS
415{
416 unsigned long inst;
417 CORE_ADDR skip_pc;
b8d5e71d 418 CORE_ADDR func_addr, func_end = 0;
50f6fb4b 419 char *func_name;
c906108c
SS
420 struct symtab_and_line sal;
421
848cfffb 422 /* If we're in a dummy frame, don't even try to skip the prologue. */
30a4a8e0 423 if (deprecated_pc_in_call_dummy (pc))
848cfffb
AC
424 return pc;
425
96baa820 426 /* See what the symbol table says. */
ed9a39eb 427
50f6fb4b 428 if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
c906108c 429 {
50f6fb4b
CV
430 struct symbol *sym;
431
432 /* Found a function. */
176620f1 433 sym = lookup_symbol (func_name, NULL, VAR_DOMAIN, NULL, NULL);
50f6fb4b
CV
434 if (sym && SYMBOL_LANGUAGE (sym) != language_asm)
435 {
94c30b78 436 /* Don't use this trick for assembly source files. */
50f6fb4b
CV
437 sal = find_pc_line (func_addr, 0);
438 if ((sal.line != 0) && (sal.end < func_end))
439 return sal.end;
440 }
c906108c
SS
441 }
442
c906108c 443 /* Can't find the prologue end in the symbol table, try it the hard way
94c30b78 444 by disassembling the instructions. */
c906108c 445
b8d5e71d
MS
446 /* Like arm_scan_prologue, stop no later than pc + 64. */
447 if (func_end == 0 || func_end > pc + 64)
448 func_end = pc + 64;
c906108c 449
29d73ae4
DJ
450 /* Check if this is Thumb code. */
451 if (arm_pc_is_thumb (pc))
6093d2eb 452 return thumb_analyze_prologue (gdbarch, pc, func_end, NULL);
29d73ae4 453
b8d5e71d 454 for (skip_pc = pc; skip_pc < func_end; skip_pc += 4)
f43845b3 455 {
1c5bada0 456 inst = read_memory_unsigned_integer (skip_pc, 4);
f43845b3 457
b8d5e71d
MS
458 /* "mov ip, sp" is no longer a required part of the prologue. */
459 if (inst == 0xe1a0c00d) /* mov ip, sp */
460 continue;
c906108c 461
28cd8767
JG
462 if ((inst & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
463 continue;
464
465 if ((inst & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
466 continue;
467
b8d5e71d
MS
468 /* Some prologues begin with "str lr, [sp, #-4]!". */
469 if (inst == 0xe52de004) /* str lr, [sp, #-4]! */
470 continue;
c906108c 471
b8d5e71d
MS
472 if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */
473 continue;
c906108c 474
b8d5e71d
MS
475 if ((inst & 0xfffff800) == 0xe92dd800) /* stmfd sp!,{fp,ip,lr,pc} */
476 continue;
11d3b27d 477
b8d5e71d
MS
478 /* Any insns after this point may float into the code, if it makes
479 for better instruction scheduling, so we skip them only if we
480 find them, but still consider the function to be frame-ful. */
f43845b3 481
b8d5e71d
MS
482 /* We may have either one sfmfd instruction here, or several stfe
483 insns, depending on the version of floating point code we
484 support. */
485 if ((inst & 0xffbf0fff) == 0xec2d0200) /* sfmfd fn, <cnt>, [sp]! */
486 continue;
487
488 if ((inst & 0xffff8fff) == 0xed6d0103) /* stfe fn, [sp, #-12]! */
489 continue;
490
491 if ((inst & 0xfffff000) == 0xe24cb000) /* sub fp, ip, #nn */
492 continue;
493
494 if ((inst & 0xfffff000) == 0xe24dd000) /* sub sp, sp, #nn */
495 continue;
496
497 if ((inst & 0xffffc000) == 0xe54b0000 || /* strb r(0123),[r11,#-nn] */
498 (inst & 0xffffc0f0) == 0xe14b00b0 || /* strh r(0123),[r11,#-nn] */
499 (inst & 0xffffc000) == 0xe50b0000) /* str r(0123),[r11,#-nn] */
500 continue;
501
502 if ((inst & 0xffffc000) == 0xe5cd0000 || /* strb r(0123),[sp,#nn] */
503 (inst & 0xffffc0f0) == 0xe1cd00b0 || /* strh r(0123),[sp,#nn] */
504 (inst & 0xffffc000) == 0xe58d0000) /* str r(0123),[sp,#nn] */
505 continue;
506
507 /* Un-recognized instruction; stop scanning. */
508 break;
f43845b3 509 }
c906108c 510
b8d5e71d 511 return skip_pc; /* End of prologue */
c906108c 512}
94c30b78 513
c5aa993b 514/* *INDENT-OFF* */
c906108c
SS
515/* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
516 This function decodes a Thumb function prologue to determine:
517 1) the size of the stack frame
518 2) which registers are saved on it
519 3) the offsets of saved regs
520 4) the offset from the stack pointer to the frame pointer
c906108c 521
da59e081
JM
522 A typical Thumb function prologue would create this stack frame
523 (offsets relative to FP)
c906108c
SS
524 old SP -> 24 stack parameters
525 20 LR
526 16 R7
527 R7 -> 0 local variables (16 bytes)
528 SP -> -12 additional stack space (12 bytes)
529 The frame size would thus be 36 bytes, and the frame offset would be
da59e081
JM
530 12 bytes. The frame register is R7.
531
da3c6d4a
MS
532 The comments for thumb_skip_prolog() describe the algorithm we use
533 to detect the end of the prolog. */
c5aa993b
JM
534/* *INDENT-ON* */
535
c906108c 536static void
be8626e0
MD
537thumb_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR prev_pc,
538 struct arm_prologue_cache *cache)
c906108c
SS
539{
540 CORE_ADDR prologue_start;
541 CORE_ADDR prologue_end;
542 CORE_ADDR current_pc;
94c30b78 543 /* Which register has been copied to register n? */
da3c6d4a
MS
544 int saved_reg[16];
545 /* findmask:
546 bit 0 - push { rlist }
547 bit 1 - mov r7, sp OR add r7, sp, #imm (setting of r7)
548 bit 2 - sub sp, #simm OR add sp, #simm (adjusting of sp)
549 */
550 int findmask = 0;
c5aa993b 551 int i;
c906108c 552
eb5492fa 553 if (find_pc_partial_function (prev_pc, NULL, &prologue_start, &prologue_end))
c906108c
SS
554 {
555 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
556
94c30b78 557 if (sal.line == 0) /* no line info, use current PC */
eb5492fa 558 prologue_end = prev_pc;
c906108c 559 else if (sal.end < prologue_end) /* next line begins after fn end */
94c30b78 560 prologue_end = sal.end; /* (probably means no prologue) */
c906108c
SS
561 }
562 else
f7060f85
DJ
563 /* We're in the boondocks: we have no idea where the start of the
564 function is. */
565 return;
c906108c 566
eb5492fa 567 prologue_end = min (prologue_end, prev_pc);
c906108c 568
be8626e0 569 thumb_analyze_prologue (gdbarch, prologue_start, prologue_end, cache);
c906108c
SS
570}
571
ed9a39eb 572/* This function decodes an ARM function prologue to determine:
c5aa993b
JM
573 1) the size of the stack frame
574 2) which registers are saved on it
575 3) the offsets of saved regs
576 4) the offset from the stack pointer to the frame pointer
c906108c
SS
577 This information is stored in the "extra" fields of the frame_info.
578
96baa820
JM
579 There are two basic forms for the ARM prologue. The fixed argument
580 function call will look like:
ed9a39eb
JM
581
582 mov ip, sp
583 stmfd sp!, {fp, ip, lr, pc}
584 sub fp, ip, #4
585 [sub sp, sp, #4]
96baa820 586
c906108c 587 Which would create this stack frame (offsets relative to FP):
ed9a39eb
JM
588 IP -> 4 (caller's stack)
589 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
590 -4 LR (return address in caller)
591 -8 IP (copy of caller's SP)
592 -12 FP (caller's FP)
593 SP -> -28 Local variables
594
c906108c 595 The frame size would thus be 32 bytes, and the frame offset would be
96baa820
JM
596 28 bytes. The stmfd call can also save any of the vN registers it
597 plans to use, which increases the frame size accordingly.
598
599 Note: The stored PC is 8 off of the STMFD instruction that stored it
600 because the ARM Store instructions always store PC + 8 when you read
601 the PC register.
ed9a39eb 602
96baa820
JM
603 A variable argument function call will look like:
604
ed9a39eb
JM
605 mov ip, sp
606 stmfd sp!, {a1, a2, a3, a4}
607 stmfd sp!, {fp, ip, lr, pc}
608 sub fp, ip, #20
609
96baa820 610 Which would create this stack frame (offsets relative to FP):
ed9a39eb
JM
611 IP -> 20 (caller's stack)
612 16 A4
613 12 A3
614 8 A2
615 4 A1
616 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
617 -4 LR (return address in caller)
618 -8 IP (copy of caller's SP)
619 -12 FP (caller's FP)
620 SP -> -28 Local variables
96baa820
JM
621
622 The frame size would thus be 48 bytes, and the frame offset would be
623 28 bytes.
624
625 There is another potential complication, which is that the optimizer
626 will try to separate the store of fp in the "stmfd" instruction from
627 the "sub fp, ip, #NN" instruction. Almost anything can be there, so
628 we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
629
630 Also, note, the original version of the ARM toolchain claimed that there
631 should be an
632
633 instruction at the end of the prologue. I have never seen GCC produce
634 this, and the ARM docs don't mention it. We still test for it below in
635 case it happens...
ed9a39eb
JM
636
637 */
c906108c
SS
638
639static void
a262aec2 640arm_scan_prologue (struct frame_info *this_frame,
2af46ca0 641 struct arm_prologue_cache *cache)
c906108c 642{
a262aec2 643 struct gdbarch *gdbarch = get_frame_arch (this_frame);
4be43953 644 int regno;
c906108c 645 CORE_ADDR prologue_start, prologue_end, current_pc;
a262aec2 646 CORE_ADDR prev_pc = get_frame_pc (this_frame);
4be43953
DJ
647 pv_t regs[ARM_FPS_REGNUM];
648 struct pv_area *stack;
649 struct cleanup *back_to;
650 CORE_ADDR offset;
c906108c 651
c906108c 652 /* Assume there is no frame until proven otherwise. */
9b8d791a
DJ
653 cache->framereg = ARM_SP_REGNUM;
654 cache->framesize = 0;
c906108c
SS
655
656 /* Check for Thumb prologue. */
eb5492fa 657 if (arm_pc_is_thumb (prev_pc))
c906108c 658 {
be8626e0 659 thumb_scan_prologue (gdbarch, prev_pc, cache);
c906108c
SS
660 return;
661 }
662
663 /* Find the function prologue. If we can't find the function in
664 the symbol table, peek in the stack frame to find the PC. */
eb5492fa 665 if (find_pc_partial_function (prev_pc, NULL, &prologue_start, &prologue_end))
c906108c 666 {
2a451106
KB
667 /* One way to find the end of the prologue (which works well
668 for unoptimized code) is to do the following:
669
670 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
671
672 if (sal.line == 0)
eb5492fa 673 prologue_end = prev_pc;
2a451106
KB
674 else if (sal.end < prologue_end)
675 prologue_end = sal.end;
676
677 This mechanism is very accurate so long as the optimizer
678 doesn't move any instructions from the function body into the
679 prologue. If this happens, sal.end will be the last
680 instruction in the first hunk of prologue code just before
681 the first instruction that the scheduler has moved from
682 the body to the prologue.
683
684 In order to make sure that we scan all of the prologue
685 instructions, we use a slightly less accurate mechanism which
686 may scan more than necessary. To help compensate for this
687 lack of accuracy, the prologue scanning loop below contains
688 several clauses which'll cause the loop to terminate early if
689 an implausible prologue instruction is encountered.
690
691 The expression
692
693 prologue_start + 64
694
695 is a suitable endpoint since it accounts for the largest
696 possible prologue plus up to five instructions inserted by
94c30b78 697 the scheduler. */
2a451106
KB
698
699 if (prologue_end > prologue_start + 64)
700 {
94c30b78 701 prologue_end = prologue_start + 64; /* See above. */
2a451106 702 }
c906108c
SS
703 }
704 else
705 {
eb5492fa
DJ
706 /* We have no symbol information. Our only option is to assume this
707 function has a standard stack frame and the normal frame register.
708 Then, we can find the value of our frame pointer on entrance to
709 the callee (or at the present moment if this is the innermost frame).
710 The value stored there should be the address of the stmfd + 8. */
711 CORE_ADDR frame_loc;
712 LONGEST return_value;
713
a262aec2 714 frame_loc = get_frame_register_unsigned (this_frame, ARM_FP_REGNUM);
eb5492fa 715 if (!safe_read_memory_integer (frame_loc, 4, &return_value))
16a0f3e7
EZ
716 return;
717 else
718 {
bf6ae464 719 prologue_start = gdbarch_addr_bits_remove
2af46ca0 720 (gdbarch, return_value) - 8;
94c30b78 721 prologue_end = prologue_start + 64; /* See above. */
16a0f3e7 722 }
c906108c
SS
723 }
724
eb5492fa
DJ
725 if (prev_pc < prologue_end)
726 prologue_end = prev_pc;
727
c906108c 728 /* Now search the prologue looking for instructions that set up the
96baa820 729 frame pointer, adjust the stack pointer, and save registers.
ed9a39eb 730
96baa820
JM
731 Be careful, however, and if it doesn't look like a prologue,
732 don't try to scan it. If, for instance, a frameless function
733 begins with stmfd sp!, then we will tell ourselves there is
b8d5e71d 734 a frame, which will confuse stack traceback, as well as "finish"
96baa820
JM
735 and other operations that rely on a knowledge of the stack
736 traceback.
737
738 In the APCS, the prologue should start with "mov ip, sp" so
f43845b3 739 if we don't see this as the first insn, we will stop.
c906108c 740
f43845b3
MS
741 [Note: This doesn't seem to be true any longer, so it's now an
742 optional part of the prologue. - Kevin Buettner, 2001-11-20]
c906108c 743
f43845b3
MS
744 [Note further: The "mov ip,sp" only seems to be missing in
745 frameless functions at optimization level "-O2" or above,
746 in which case it is often (but not always) replaced by
b8d5e71d 747 "str lr, [sp, #-4]!". - Michael Snyder, 2002-04-23] */
d4473757 748
4be43953
DJ
749 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
750 regs[regno] = pv_register (regno, 0);
751 stack = make_pv_area (ARM_SP_REGNUM);
752 back_to = make_cleanup_free_pv_area (stack);
753
754 regs[ARM_PC_REGNUM] = pv_unknown ();
f43845b3 755
94c30b78
MS
756 for (current_pc = prologue_start;
757 current_pc < prologue_end;
f43845b3 758 current_pc += 4)
96baa820 759 {
d4473757
KB
760 unsigned int insn = read_memory_unsigned_integer (current_pc, 4);
761
94c30b78 762 if (insn == 0xe1a0c00d) /* mov ip, sp */
f43845b3 763 {
4be43953 764 regs[ARM_IP_REGNUM] = regs[ARM_SP_REGNUM];
28cd8767
JG
765 continue;
766 }
767 else if ((insn & 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
768 {
769 unsigned imm = insn & 0xff; /* immediate value */
770 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
771 imm = (imm >> rot) | (imm << (32 - rot));
4be43953 772 regs[ARM_IP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], imm);
28cd8767
JG
773 continue;
774 }
775 else if ((insn & 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
776 {
777 unsigned imm = insn & 0xff; /* immediate value */
778 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
779 imm = (imm >> rot) | (imm << (32 - rot));
4be43953 780 regs[ARM_IP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
f43845b3
MS
781 continue;
782 }
94c30b78 783 else if (insn == 0xe52de004) /* str lr, [sp, #-4]! */
f43845b3 784 {
4be43953
DJ
785 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
786 break;
787 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
788 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[ARM_LR_REGNUM]);
f43845b3
MS
789 continue;
790 }
791 else if ((insn & 0xffff0000) == 0xe92d0000)
d4473757
KB
792 /* stmfd sp!, {..., fp, ip, lr, pc}
793 or
794 stmfd sp!, {a1, a2, a3, a4} */
c906108c 795 {
d4473757 796 int mask = insn & 0xffff;
ed9a39eb 797
4be43953
DJ
798 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
799 break;
800
94c30b78 801 /* Calculate offsets of saved registers. */
34e8f22d 802 for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
d4473757
KB
803 if (mask & (1 << regno))
804 {
4be43953
DJ
805 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -4);
806 pv_area_store (stack, regs[ARM_SP_REGNUM], 4, regs[regno]);
d4473757
KB
807 }
808 }
b8d5e71d
MS
809 else if ((insn & 0xffffc000) == 0xe54b0000 || /* strb rx,[r11,#-n] */
810 (insn & 0xffffc0f0) == 0xe14b00b0 || /* strh rx,[r11,#-n] */
811 (insn & 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
812 {
813 /* No need to add this to saved_regs -- it's just an arg reg. */
814 continue;
815 }
816 else if ((insn & 0xffffc000) == 0xe5cd0000 || /* strb rx,[sp,#n] */
817 (insn & 0xffffc0f0) == 0xe1cd00b0 || /* strh rx,[sp,#n] */
818 (insn & 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
f43845b3
MS
819 {
820 /* No need to add this to saved_regs -- it's just an arg reg. */
821 continue;
822 }
d4473757
KB
823 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
824 {
94c30b78
MS
825 unsigned imm = insn & 0xff; /* immediate value */
826 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
d4473757 827 imm = (imm >> rot) | (imm << (32 - rot));
4be43953 828 regs[ARM_FP_REGNUM] = pv_add_constant (regs[ARM_IP_REGNUM], -imm);
d4473757
KB
829 }
830 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
831 {
94c30b78
MS
832 unsigned imm = insn & 0xff; /* immediate value */
833 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
d4473757 834 imm = (imm >> rot) | (imm << (32 - rot));
4be43953 835 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -imm);
d4473757 836 }
ff6f572f 837 else if ((insn & 0xffff7fff) == 0xed6d0103 /* stfe f?, [sp, -#c]! */
2af46ca0 838 && gdbarch_tdep (gdbarch)->have_fpa_registers)
d4473757 839 {
4be43953
DJ
840 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
841 break;
842
843 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
34e8f22d 844 regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
4be43953 845 pv_area_store (stack, regs[ARM_SP_REGNUM], 12, regs[regno]);
d4473757 846 }
ff6f572f 847 else if ((insn & 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4, [sp!] */
2af46ca0 848 && gdbarch_tdep (gdbarch)->have_fpa_registers)
d4473757
KB
849 {
850 int n_saved_fp_regs;
851 unsigned int fp_start_reg, fp_bound_reg;
852
4be43953
DJ
853 if (pv_area_store_would_trash (stack, regs[ARM_SP_REGNUM]))
854 break;
855
94c30b78 856 if ((insn & 0x800) == 0x800) /* N0 is set */
96baa820 857 {
d4473757
KB
858 if ((insn & 0x40000) == 0x40000) /* N1 is set */
859 n_saved_fp_regs = 3;
860 else
861 n_saved_fp_regs = 1;
96baa820 862 }
d4473757 863 else
96baa820 864 {
d4473757
KB
865 if ((insn & 0x40000) == 0x40000) /* N1 is set */
866 n_saved_fp_regs = 2;
867 else
868 n_saved_fp_regs = 4;
96baa820 869 }
d4473757 870
34e8f22d 871 fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
d4473757
KB
872 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
873 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
96baa820 874 {
4be43953
DJ
875 regs[ARM_SP_REGNUM] = pv_add_constant (regs[ARM_SP_REGNUM], -12);
876 pv_area_store (stack, regs[ARM_SP_REGNUM], 12,
877 regs[fp_start_reg++]);
96baa820 878 }
c906108c 879 }
d4473757 880 else if ((insn & 0xf0000000) != 0xe0000000)
94c30b78 881 break; /* Condition not true, exit early */
b8d5e71d 882 else if ((insn & 0xfe200000) == 0xe8200000) /* ldm? */
94c30b78 883 break; /* Don't scan past a block load */
d4473757
KB
884 else
885 /* The optimizer might shove anything into the prologue,
94c30b78 886 so we just skip what we don't recognize. */
d4473757 887 continue;
c906108c
SS
888 }
889
4be43953
DJ
890 /* The frame size is just the distance from the frame register
891 to the original stack pointer. */
892 if (pv_is_register (regs[ARM_FP_REGNUM], ARM_SP_REGNUM))
893 {
894 /* Frame pointer is fp. */
895 cache->framereg = ARM_FP_REGNUM;
896 cache->framesize = -regs[ARM_FP_REGNUM].k;
897 }
898 else if (pv_is_register (regs[ARM_SP_REGNUM], ARM_SP_REGNUM))
899 {
900 /* Try the stack pointer... this is a bit desperate. */
901 cache->framereg = ARM_SP_REGNUM;
902 cache->framesize = -regs[ARM_SP_REGNUM].k;
903 }
d4473757 904 else
4be43953
DJ
905 {
906 /* We're just out of luck. We don't know where the frame is. */
907 cache->framereg = -1;
908 cache->framesize = 0;
909 }
910
911 for (regno = 0; regno < ARM_FPS_REGNUM; regno++)
912 if (pv_area_find_reg (stack, gdbarch, regno, &offset))
913 cache->saved_regs[regno].addr = offset;
914
915 do_cleanups (back_to);
c906108c
SS
916}
917
eb5492fa 918static struct arm_prologue_cache *
a262aec2 919arm_make_prologue_cache (struct frame_info *this_frame)
c906108c 920{
eb5492fa
DJ
921 int reg;
922 struct arm_prologue_cache *cache;
923 CORE_ADDR unwound_fp;
c5aa993b 924
35d5d4ee 925 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
a262aec2 926 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
c906108c 927
a262aec2 928 arm_scan_prologue (this_frame, cache);
848cfffb 929
a262aec2 930 unwound_fp = get_frame_register_unsigned (this_frame, cache->framereg);
eb5492fa
DJ
931 if (unwound_fp == 0)
932 return cache;
c906108c 933
4be43953 934 cache->prev_sp = unwound_fp + cache->framesize;
c906108c 935
eb5492fa
DJ
936 /* Calculate actual addresses of saved registers using offsets
937 determined by arm_scan_prologue. */
a262aec2 938 for (reg = 0; reg < gdbarch_num_regs (get_frame_arch (this_frame)); reg++)
e28a332c 939 if (trad_frame_addr_p (cache->saved_regs, reg))
eb5492fa
DJ
940 cache->saved_regs[reg].addr += cache->prev_sp;
941
942 return cache;
c906108c
SS
943}
944
eb5492fa
DJ
945/* Our frame ID for a normal frame is the current function's starting PC
946 and the caller's SP when we were called. */
c906108c 947
148754e5 948static void
a262aec2 949arm_prologue_this_id (struct frame_info *this_frame,
eb5492fa
DJ
950 void **this_cache,
951 struct frame_id *this_id)
c906108c 952{
eb5492fa
DJ
953 struct arm_prologue_cache *cache;
954 struct frame_id id;
955 CORE_ADDR func;
f079148d 956
eb5492fa 957 if (*this_cache == NULL)
a262aec2 958 *this_cache = arm_make_prologue_cache (this_frame);
eb5492fa 959 cache = *this_cache;
2a451106 960
a262aec2 961 func = get_frame_func (this_frame);
2a451106 962
eb5492fa
DJ
963 /* This is meant to halt the backtrace at "_start". Make sure we
964 don't halt it at a generic dummy frame. */
a262aec2 965 if (func <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
eb5492fa 966 return;
5a203e44 967
eb5492fa
DJ
968 /* If we've hit a wall, stop. */
969 if (cache->prev_sp == 0)
970 return;
24de872b 971
eb5492fa 972 id = frame_id_build (cache->prev_sp, func);
eb5492fa 973 *this_id = id;
c906108c
SS
974}
975
a262aec2
DJ
976static struct value *
977arm_prologue_prev_register (struct frame_info *this_frame,
eb5492fa 978 void **this_cache,
a262aec2 979 int prev_regnum)
24de872b
DJ
980{
981 struct arm_prologue_cache *cache;
982
eb5492fa 983 if (*this_cache == NULL)
a262aec2 984 *this_cache = arm_make_prologue_cache (this_frame);
eb5492fa 985 cache = *this_cache;
24de872b 986
eb5492fa
DJ
987 /* If we are asked to unwind the PC, then we need to return the LR
988 instead. The saved value of PC points into this frame's
989 prologue, not the next frame's resume location. */
990 if (prev_regnum == ARM_PC_REGNUM)
991 prev_regnum = ARM_LR_REGNUM;
24de872b 992
eb5492fa 993 /* SP is generally not saved to the stack, but this frame is
a262aec2 994 identified by the next frame's stack pointer at the time of the call.
eb5492fa
DJ
995 The value was already reconstructed into PREV_SP. */
996 if (prev_regnum == ARM_SP_REGNUM)
a262aec2 997 return frame_unwind_got_constant (this_frame, prev_regnum, cache->prev_sp);
eb5492fa 998
a262aec2
DJ
999 return trad_frame_get_prev_register (this_frame, cache->saved_regs,
1000 prev_regnum);
eb5492fa
DJ
1001}
1002
1003struct frame_unwind arm_prologue_unwind = {
1004 NORMAL_FRAME,
1005 arm_prologue_this_id,
a262aec2
DJ
1006 arm_prologue_prev_register,
1007 NULL,
1008 default_frame_sniffer
eb5492fa
DJ
1009};
1010
909cf6ea 1011static struct arm_prologue_cache *
a262aec2 1012arm_make_stub_cache (struct frame_info *this_frame)
909cf6ea
DJ
1013{
1014 int reg;
1015 struct arm_prologue_cache *cache;
1016 CORE_ADDR unwound_fp;
1017
35d5d4ee 1018 cache = FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache);
a262aec2 1019 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
909cf6ea 1020
a262aec2 1021 cache->prev_sp = get_frame_register_unsigned (this_frame, ARM_SP_REGNUM);
909cf6ea
DJ
1022
1023 return cache;
1024}
1025
1026/* Our frame ID for a stub frame is the current SP and LR. */
1027
1028static void
a262aec2 1029arm_stub_this_id (struct frame_info *this_frame,
909cf6ea
DJ
1030 void **this_cache,
1031 struct frame_id *this_id)
1032{
1033 struct arm_prologue_cache *cache;
1034
1035 if (*this_cache == NULL)
a262aec2 1036 *this_cache = arm_make_stub_cache (this_frame);
909cf6ea
DJ
1037 cache = *this_cache;
1038
a262aec2 1039 *this_id = frame_id_build (cache->prev_sp, get_frame_pc (this_frame));
909cf6ea
DJ
1040}
1041
a262aec2
DJ
1042static int
1043arm_stub_unwind_sniffer (const struct frame_unwind *self,
1044 struct frame_info *this_frame,
1045 void **this_prologue_cache)
909cf6ea 1046{
93d42b30 1047 CORE_ADDR addr_in_block;
909cf6ea
DJ
1048 char dummy[4];
1049
a262aec2 1050 addr_in_block = get_frame_address_in_block (this_frame);
93d42b30 1051 if (in_plt_section (addr_in_block, NULL)
a262aec2
DJ
1052 || target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
1053 return 1;
909cf6ea 1054
a262aec2 1055 return 0;
909cf6ea
DJ
1056}
1057
a262aec2
DJ
1058struct frame_unwind arm_stub_unwind = {
1059 NORMAL_FRAME,
1060 arm_stub_this_id,
1061 arm_prologue_prev_register,
1062 NULL,
1063 arm_stub_unwind_sniffer
1064};
1065
24de872b 1066static CORE_ADDR
a262aec2 1067arm_normal_frame_base (struct frame_info *this_frame, void **this_cache)
24de872b
DJ
1068{
1069 struct arm_prologue_cache *cache;
1070
eb5492fa 1071 if (*this_cache == NULL)
a262aec2 1072 *this_cache = arm_make_prologue_cache (this_frame);
eb5492fa
DJ
1073 cache = *this_cache;
1074
4be43953 1075 return cache->prev_sp - cache->framesize;
24de872b
DJ
1076}
1077
eb5492fa
DJ
1078struct frame_base arm_normal_base = {
1079 &arm_prologue_unwind,
1080 arm_normal_frame_base,
1081 arm_normal_frame_base,
1082 arm_normal_frame_base
1083};
1084
a262aec2 1085/* Assuming THIS_FRAME is a dummy, return the frame ID of that
eb5492fa
DJ
1086 dummy frame. The frame ID's base needs to match the TOS value
1087 saved by save_dummy_frame_tos() and returned from
1088 arm_push_dummy_call, and the PC needs to match the dummy frame's
1089 breakpoint. */
c906108c 1090
eb5492fa 1091static struct frame_id
a262aec2 1092arm_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
c906108c 1093{
a262aec2
DJ
1094 return frame_id_build (get_frame_register_unsigned (this_frame, ARM_SP_REGNUM),
1095 get_frame_pc (this_frame));
eb5492fa 1096}
c3b4394c 1097
eb5492fa
DJ
1098/* Given THIS_FRAME, find the previous frame's resume PC (which will
1099 be used to construct the previous frame's ID, after looking up the
1100 containing function). */
c3b4394c 1101
eb5492fa
DJ
1102static CORE_ADDR
1103arm_unwind_pc (struct gdbarch *gdbarch, struct frame_info *this_frame)
1104{
1105 CORE_ADDR pc;
1106 pc = frame_unwind_register_unsigned (this_frame, ARM_PC_REGNUM);
59ea4f70 1107 return arm_addr_bits_remove (pc);
eb5492fa
DJ
1108}
1109
1110static CORE_ADDR
1111arm_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
1112{
1113 return frame_unwind_register_unsigned (this_frame, ARM_SP_REGNUM);
c906108c
SS
1114}
1115
2dd604e7
RE
1116/* When arguments must be pushed onto the stack, they go on in reverse
1117 order. The code below implements a FILO (stack) to do this. */
1118
1119struct stack_item
1120{
1121 int len;
1122 struct stack_item *prev;
1123 void *data;
1124};
1125
1126static struct stack_item *
1127push_stack_item (struct stack_item *prev, void *contents, int len)
1128{
1129 struct stack_item *si;
1130 si = xmalloc (sizeof (struct stack_item));
226c7fbc 1131 si->data = xmalloc (len);
2dd604e7
RE
1132 si->len = len;
1133 si->prev = prev;
1134 memcpy (si->data, contents, len);
1135 return si;
1136}
1137
1138static struct stack_item *
1139pop_stack_item (struct stack_item *si)
1140{
1141 struct stack_item *dead = si;
1142 si = si->prev;
1143 xfree (dead->data);
1144 xfree (dead);
1145 return si;
1146}
1147
2af48f68
PB
1148
1149/* Return the alignment (in bytes) of the given type. */
1150
1151static int
1152arm_type_align (struct type *t)
1153{
1154 int n;
1155 int align;
1156 int falign;
1157
1158 t = check_typedef (t);
1159 switch (TYPE_CODE (t))
1160 {
1161 default:
1162 /* Should never happen. */
1163 internal_error (__FILE__, __LINE__, _("unknown type alignment"));
1164 return 4;
1165
1166 case TYPE_CODE_PTR:
1167 case TYPE_CODE_ENUM:
1168 case TYPE_CODE_INT:
1169 case TYPE_CODE_FLT:
1170 case TYPE_CODE_SET:
1171 case TYPE_CODE_RANGE:
1172 case TYPE_CODE_BITSTRING:
1173 case TYPE_CODE_REF:
1174 case TYPE_CODE_CHAR:
1175 case TYPE_CODE_BOOL:
1176 return TYPE_LENGTH (t);
1177
1178 case TYPE_CODE_ARRAY:
1179 case TYPE_CODE_COMPLEX:
1180 /* TODO: What about vector types? */
1181 return arm_type_align (TYPE_TARGET_TYPE (t));
1182
1183 case TYPE_CODE_STRUCT:
1184 case TYPE_CODE_UNION:
1185 align = 1;
1186 for (n = 0; n < TYPE_NFIELDS (t); n++)
1187 {
1188 falign = arm_type_align (TYPE_FIELD_TYPE (t, n));
1189 if (falign > align)
1190 align = falign;
1191 }
1192 return align;
1193 }
1194}
1195
2dd604e7
RE
1196/* We currently only support passing parameters in integer registers. This
1197 conforms with GCC's default model. Several other variants exist and
1198 we should probably support some of them based on the selected ABI. */
1199
1200static CORE_ADDR
7d9b040b 1201arm_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
6a65450a
AC
1202 struct regcache *regcache, CORE_ADDR bp_addr, int nargs,
1203 struct value **args, CORE_ADDR sp, int struct_return,
1204 CORE_ADDR struct_addr)
2dd604e7
RE
1205{
1206 int argnum;
1207 int argreg;
1208 int nstack;
1209 struct stack_item *si = NULL;
1210
6a65450a
AC
1211 /* Set the return address. For the ARM, the return breakpoint is
1212 always at BP_ADDR. */
2dd604e7 1213 /* XXX Fix for Thumb. */
6a65450a 1214 regcache_cooked_write_unsigned (regcache, ARM_LR_REGNUM, bp_addr);
2dd604e7
RE
1215
1216 /* Walk through the list of args and determine how large a temporary
1217 stack is required. Need to take care here as structs may be
1218 passed on the stack, and we have to to push them. */
1219 nstack = 0;
1220
1221 argreg = ARM_A1_REGNUM;
1222 nstack = 0;
1223
2dd604e7
RE
1224 /* The struct_return pointer occupies the first parameter
1225 passing register. */
1226 if (struct_return)
1227 {
1228 if (arm_debug)
1229 fprintf_unfiltered (gdb_stdlog, "struct return in %s = 0x%s\n",
2af46ca0 1230 gdbarch_register_name (gdbarch, argreg),
c9f4d572 1231 paddr (struct_addr));
2dd604e7
RE
1232 regcache_cooked_write_unsigned (regcache, argreg, struct_addr);
1233 argreg++;
1234 }
1235
1236 for (argnum = 0; argnum < nargs; argnum++)
1237 {
1238 int len;
1239 struct type *arg_type;
1240 struct type *target_type;
1241 enum type_code typecode;
0fd88904 1242 bfd_byte *val;
2af48f68 1243 int align;
2dd604e7 1244
df407dfe 1245 arg_type = check_typedef (value_type (args[argnum]));
2dd604e7
RE
1246 len = TYPE_LENGTH (arg_type);
1247 target_type = TYPE_TARGET_TYPE (arg_type);
1248 typecode = TYPE_CODE (arg_type);
0fd88904 1249 val = value_contents_writeable (args[argnum]);
2dd604e7 1250
2af48f68
PB
1251 align = arm_type_align (arg_type);
1252 /* Round alignment up to a whole number of words. */
1253 align = (align + INT_REGISTER_SIZE - 1) & ~(INT_REGISTER_SIZE - 1);
1254 /* Different ABIs have different maximum alignments. */
1255 if (gdbarch_tdep (gdbarch)->arm_abi == ARM_ABI_APCS)
1256 {
1257 /* The APCS ABI only requires word alignment. */
1258 align = INT_REGISTER_SIZE;
1259 }
1260 else
1261 {
1262 /* The AAPCS requires at most doubleword alignment. */
1263 if (align > INT_REGISTER_SIZE * 2)
1264 align = INT_REGISTER_SIZE * 2;
1265 }
1266
1267 /* Push stack padding for dowubleword alignment. */
1268 if (nstack & (align - 1))
1269 {
1270 si = push_stack_item (si, val, INT_REGISTER_SIZE);
1271 nstack += INT_REGISTER_SIZE;
1272 }
1273
1274 /* Doubleword aligned quantities must go in even register pairs. */
1275 if (argreg <= ARM_LAST_ARG_REGNUM
1276 && align > INT_REGISTER_SIZE
1277 && argreg & 1)
1278 argreg++;
1279
2dd604e7
RE
1280 /* If the argument is a pointer to a function, and it is a
1281 Thumb function, create a LOCAL copy of the value and set
1282 the THUMB bit in it. */
1283 if (TYPE_CODE_PTR == typecode
1284 && target_type != NULL
1285 && TYPE_CODE_FUNC == TYPE_CODE (target_type))
1286 {
7c0b4a20 1287 CORE_ADDR regval = extract_unsigned_integer (val, len);
2dd604e7
RE
1288 if (arm_pc_is_thumb (regval))
1289 {
1290 val = alloca (len);
fbd9dcd3 1291 store_unsigned_integer (val, len, MAKE_THUMB_ADDR (regval));
2dd604e7
RE
1292 }
1293 }
1294
1295 /* Copy the argument to general registers or the stack in
1296 register-sized pieces. Large arguments are split between
1297 registers and stack. */
1298 while (len > 0)
1299 {
f0c9063c 1300 int partial_len = len < INT_REGISTER_SIZE ? len : INT_REGISTER_SIZE;
2dd604e7
RE
1301
1302 if (argreg <= ARM_LAST_ARG_REGNUM)
1303 {
1304 /* The argument is being passed in a general purpose
1305 register. */
7c0b4a20 1306 CORE_ADDR regval = extract_unsigned_integer (val, partial_len);
2af46ca0 1307 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
8bf8793c 1308 regval <<= (INT_REGISTER_SIZE - partial_len) * 8;
2dd604e7
RE
1309 if (arm_debug)
1310 fprintf_unfiltered (gdb_stdlog, "arg %d in %s = 0x%s\n",
c9f4d572
UW
1311 argnum,
1312 gdbarch_register_name
2af46ca0 1313 (gdbarch, argreg),
f0c9063c 1314 phex (regval, INT_REGISTER_SIZE));
2dd604e7
RE
1315 regcache_cooked_write_unsigned (regcache, argreg, regval);
1316 argreg++;
1317 }
1318 else
1319 {
1320 /* Push the arguments onto the stack. */
1321 if (arm_debug)
1322 fprintf_unfiltered (gdb_stdlog, "arg %d @ sp + %d\n",
1323 argnum, nstack);
f0c9063c
UW
1324 si = push_stack_item (si, val, INT_REGISTER_SIZE);
1325 nstack += INT_REGISTER_SIZE;
2dd604e7
RE
1326 }
1327
1328 len -= partial_len;
1329 val += partial_len;
1330 }
1331 }
1332 /* If we have an odd number of words to push, then decrement the stack
1333 by one word now, so first stack argument will be dword aligned. */
1334 if (nstack & 4)
1335 sp -= 4;
1336
1337 while (si)
1338 {
1339 sp -= si->len;
1340 write_memory (sp, si->data, si->len);
1341 si = pop_stack_item (si);
1342 }
1343
1344 /* Finally, update teh SP register. */
1345 regcache_cooked_write_unsigned (regcache, ARM_SP_REGNUM, sp);
1346
1347 return sp;
1348}
1349
f53f0d0b
PB
1350
1351/* Always align the frame to an 8-byte boundary. This is required on
1352 some platforms and harmless on the rest. */
1353
1354static CORE_ADDR
1355arm_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
1356{
1357 /* Align the stack to eight bytes. */
1358 return sp & ~ (CORE_ADDR) 7;
1359}
1360
c906108c 1361static void
ed9a39eb 1362print_fpu_flags (int flags)
c906108c 1363{
c5aa993b
JM
1364 if (flags & (1 << 0))
1365 fputs ("IVO ", stdout);
1366 if (flags & (1 << 1))
1367 fputs ("DVZ ", stdout);
1368 if (flags & (1 << 2))
1369 fputs ("OFL ", stdout);
1370 if (flags & (1 << 3))
1371 fputs ("UFL ", stdout);
1372 if (flags & (1 << 4))
1373 fputs ("INX ", stdout);
1374 putchar ('\n');
c906108c
SS
1375}
1376
5e74b15c
RE
1377/* Print interesting information about the floating point processor
1378 (if present) or emulator. */
34e8f22d 1379static void
d855c300 1380arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
23e3a7ac 1381 struct frame_info *frame, const char *args)
c906108c 1382{
9c9acae0 1383 unsigned long status = get_frame_register_unsigned (frame, ARM_FPS_REGNUM);
c5aa993b
JM
1384 int type;
1385
1386 type = (status >> 24) & 127;
edefbb7c
AC
1387 if (status & (1 << 31))
1388 printf (_("Hardware FPU type %d\n"), type);
1389 else
1390 printf (_("Software FPU type %d\n"), type);
1391 /* i18n: [floating point unit] mask */
1392 fputs (_("mask: "), stdout);
c5aa993b 1393 print_fpu_flags (status >> 16);
edefbb7c
AC
1394 /* i18n: [floating point unit] flags */
1395 fputs (_("flags: "), stdout);
c5aa993b 1396 print_fpu_flags (status);
c906108c
SS
1397}
1398
34e8f22d
RE
1399/* Return the GDB type object for the "standard" data type of data in
1400 register N. */
1401
1402static struct type *
7a5ea0d4 1403arm_register_type (struct gdbarch *gdbarch, int regnum)
032758dc 1404{
34e8f22d 1405 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
8da61cc4 1406 return builtin_type_arm_ext;
e4c16157
DJ
1407 else if (regnum == ARM_SP_REGNUM)
1408 return builtin_type_void_data_ptr;
1409 else if (regnum == ARM_PC_REGNUM)
1410 return builtin_type_void_func_ptr;
ff6f572f
DJ
1411 else if (regnum >= ARRAY_SIZE (arm_register_names))
1412 /* These registers are only supported on targets which supply
1413 an XML description. */
1414 return builtin_type_int0;
032758dc 1415 else
e4c16157 1416 return builtin_type_uint32;
032758dc
AC
1417}
1418
ff6f572f
DJ
1419/* Map a DWARF register REGNUM onto the appropriate GDB register
1420 number. */
1421
1422static int
d3f73121 1423arm_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
ff6f572f
DJ
1424{
1425 /* Core integer regs. */
1426 if (reg >= 0 && reg <= 15)
1427 return reg;
1428
1429 /* Legacy FPA encoding. These were once used in a way which
1430 overlapped with VFP register numbering, so their use is
1431 discouraged, but GDB doesn't support the ARM toolchain
1432 which used them for VFP. */
1433 if (reg >= 16 && reg <= 23)
1434 return ARM_F0_REGNUM + reg - 16;
1435
1436 /* New assignments for the FPA registers. */
1437 if (reg >= 96 && reg <= 103)
1438 return ARM_F0_REGNUM + reg - 96;
1439
1440 /* WMMX register assignments. */
1441 if (reg >= 104 && reg <= 111)
1442 return ARM_WCGR0_REGNUM + reg - 104;
1443
1444 if (reg >= 112 && reg <= 127)
1445 return ARM_WR0_REGNUM + reg - 112;
1446
1447 if (reg >= 192 && reg <= 199)
1448 return ARM_WC0_REGNUM + reg - 192;
1449
1450 return -1;
1451}
1452
26216b98
AC
1453/* Map GDB internal REGNUM onto the Arm simulator register numbers. */
1454static int
e7faf938 1455arm_register_sim_regno (struct gdbarch *gdbarch, int regnum)
26216b98
AC
1456{
1457 int reg = regnum;
e7faf938 1458 gdb_assert (reg >= 0 && reg < gdbarch_num_regs (gdbarch));
26216b98 1459
ff6f572f
DJ
1460 if (regnum >= ARM_WR0_REGNUM && regnum <= ARM_WR15_REGNUM)
1461 return regnum - ARM_WR0_REGNUM + SIM_ARM_IWMMXT_COP0R0_REGNUM;
1462
1463 if (regnum >= ARM_WC0_REGNUM && regnum <= ARM_WC7_REGNUM)
1464 return regnum - ARM_WC0_REGNUM + SIM_ARM_IWMMXT_COP1R0_REGNUM;
1465
1466 if (regnum >= ARM_WCGR0_REGNUM && regnum <= ARM_WCGR7_REGNUM)
1467 return regnum - ARM_WCGR0_REGNUM + SIM_ARM_IWMMXT_COP1R8_REGNUM;
1468
26216b98
AC
1469 if (reg < NUM_GREGS)
1470 return SIM_ARM_R0_REGNUM + reg;
1471 reg -= NUM_GREGS;
1472
1473 if (reg < NUM_FREGS)
1474 return SIM_ARM_FP0_REGNUM + reg;
1475 reg -= NUM_FREGS;
1476
1477 if (reg < NUM_SREGS)
1478 return SIM_ARM_FPS_REGNUM + reg;
1479 reg -= NUM_SREGS;
1480
edefbb7c 1481 internal_error (__FILE__, __LINE__, _("Bad REGNUM %d"), regnum);
26216b98 1482}
34e8f22d 1483
a37b3cc0
AC
1484/* NOTE: cagney/2001-08-20: Both convert_from_extended() and
1485 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
1486 It is thought that this is is the floating-point register format on
1487 little-endian systems. */
c906108c 1488
ed9a39eb 1489static void
b508a996 1490convert_from_extended (const struct floatformat *fmt, const void *ptr,
be8626e0 1491 void *dbl, int endianess)
c906108c 1492{
a37b3cc0 1493 DOUBLEST d;
be8626e0
MD
1494
1495 if (endianess == BFD_ENDIAN_BIG)
a37b3cc0
AC
1496 floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
1497 else
1498 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
1499 ptr, &d);
b508a996 1500 floatformat_from_doublest (fmt, &d, dbl);
c906108c
SS
1501}
1502
34e8f22d 1503static void
be8626e0
MD
1504convert_to_extended (const struct floatformat *fmt, void *dbl, const void *ptr,
1505 int endianess)
c906108c 1506{
a37b3cc0 1507 DOUBLEST d;
be8626e0 1508
b508a996 1509 floatformat_to_doublest (fmt, ptr, &d);
be8626e0 1510 if (endianess == BFD_ENDIAN_BIG)
a37b3cc0
AC
1511 floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
1512 else
1513 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
1514 &d, dbl);
c906108c 1515}
ed9a39eb 1516
c906108c 1517static int
ed9a39eb 1518condition_true (unsigned long cond, unsigned long status_reg)
c906108c
SS
1519{
1520 if (cond == INST_AL || cond == INST_NV)
1521 return 1;
1522
1523 switch (cond)
1524 {
1525 case INST_EQ:
1526 return ((status_reg & FLAG_Z) != 0);
1527 case INST_NE:
1528 return ((status_reg & FLAG_Z) == 0);
1529 case INST_CS:
1530 return ((status_reg & FLAG_C) != 0);
1531 case INST_CC:
1532 return ((status_reg & FLAG_C) == 0);
1533 case INST_MI:
1534 return ((status_reg & FLAG_N) != 0);
1535 case INST_PL:
1536 return ((status_reg & FLAG_N) == 0);
1537 case INST_VS:
1538 return ((status_reg & FLAG_V) != 0);
1539 case INST_VC:
1540 return ((status_reg & FLAG_V) == 0);
1541 case INST_HI:
1542 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
1543 case INST_LS:
1544 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
1545 case INST_GE:
1546 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
1547 case INST_LT:
1548 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
1549 case INST_GT:
1550 return (((status_reg & FLAG_Z) == 0) &&
ed9a39eb 1551 (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0)));
c906108c
SS
1552 case INST_LE:
1553 return (((status_reg & FLAG_Z) != 0) ||
ed9a39eb 1554 (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0)));
c906108c
SS
1555 }
1556 return 1;
1557}
1558
9512d7fd 1559/* Support routines for single stepping. Calculate the next PC value. */
c906108c
SS
1560#define submask(x) ((1L << ((x) + 1)) - 1)
1561#define bit(obj,st) (((obj) >> (st)) & 1)
1562#define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
1563#define sbits(obj,st,fn) \
1564 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
1565#define BranchDest(addr,instr) \
1566 ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
1567#define ARM_PC_32 1
1568
1569static unsigned long
0b1b3e42
UW
1570shifted_reg_val (struct frame_info *frame, unsigned long inst, int carry,
1571 unsigned long pc_val, unsigned long status_reg)
c906108c
SS
1572{
1573 unsigned long res, shift;
1574 int rm = bits (inst, 0, 3);
1575 unsigned long shifttype = bits (inst, 5, 6);
c5aa993b
JM
1576
1577 if (bit (inst, 4))
c906108c
SS
1578 {
1579 int rs = bits (inst, 8, 11);
0b1b3e42
UW
1580 shift = (rs == 15 ? pc_val + 8
1581 : get_frame_register_unsigned (frame, rs)) & 0xFF;
c906108c
SS
1582 }
1583 else
1584 shift = bits (inst, 7, 11);
c5aa993b
JM
1585
1586 res = (rm == 15
c906108c 1587 ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
c5aa993b 1588 + (bit (inst, 4) ? 12 : 8))
0b1b3e42 1589 : get_frame_register_unsigned (frame, rm));
c906108c
SS
1590
1591 switch (shifttype)
1592 {
c5aa993b 1593 case 0: /* LSL */
c906108c
SS
1594 res = shift >= 32 ? 0 : res << shift;
1595 break;
c5aa993b
JM
1596
1597 case 1: /* LSR */
c906108c
SS
1598 res = shift >= 32 ? 0 : res >> shift;
1599 break;
1600
c5aa993b
JM
1601 case 2: /* ASR */
1602 if (shift >= 32)
1603 shift = 31;
c906108c
SS
1604 res = ((res & 0x80000000L)
1605 ? ~((~res) >> shift) : res >> shift);
1606 break;
1607
c5aa993b 1608 case 3: /* ROR/RRX */
c906108c
SS
1609 shift &= 31;
1610 if (shift == 0)
1611 res = (res >> 1) | (carry ? 0x80000000L : 0);
1612 else
c5aa993b 1613 res = (res >> shift) | (res << (32 - shift));
c906108c
SS
1614 break;
1615 }
1616
1617 return res & 0xffffffff;
1618}
1619
c906108c
SS
1620/* Return number of 1-bits in VAL. */
1621
1622static int
ed9a39eb 1623bitcount (unsigned long val)
c906108c
SS
1624{
1625 int nbits;
1626 for (nbits = 0; val != 0; nbits++)
c5aa993b 1627 val &= val - 1; /* delete rightmost 1-bit in val */
c906108c
SS
1628 return nbits;
1629}
1630
ad527d2e 1631static CORE_ADDR
0b1b3e42 1632thumb_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
c906108c 1633{
2af46ca0 1634 struct gdbarch *gdbarch = get_frame_arch (frame);
c5aa993b 1635 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
1c5bada0 1636 unsigned short inst1 = read_memory_unsigned_integer (pc, 2);
94c30b78 1637 CORE_ADDR nextpc = pc + 2; /* default is next instruction */
c906108c
SS
1638 unsigned long offset;
1639
1640 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
1641 {
1642 CORE_ADDR sp;
1643
1644 /* Fetch the saved PC from the stack. It's stored above
1645 all of the other registers. */
f0c9063c 1646 offset = bitcount (bits (inst1, 0, 7)) * INT_REGISTER_SIZE;
0b1b3e42 1647 sp = get_frame_register_unsigned (frame, ARM_SP_REGNUM);
1c5bada0 1648 nextpc = (CORE_ADDR) read_memory_unsigned_integer (sp + offset, 4);
2af46ca0 1649 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
c906108c 1650 if (nextpc == pc)
edefbb7c 1651 error (_("Infinite loop detected"));
c906108c
SS
1652 }
1653 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
1654 {
0b1b3e42 1655 unsigned long status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
c5aa993b 1656 unsigned long cond = bits (inst1, 8, 11);
94c30b78 1657 if (cond != 0x0f && condition_true (cond, status)) /* 0x0f = SWI */
c906108c
SS
1658 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
1659 }
1660 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
1661 {
1662 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
1663 }
aa17d93e 1664 else if ((inst1 & 0xf800) == 0xf000) /* long branch with link, and blx */
c906108c 1665 {
1c5bada0 1666 unsigned short inst2 = read_memory_unsigned_integer (pc + 2, 2);
c5aa993b 1667 offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) << 1);
c906108c 1668 nextpc = pc_val + offset;
aa17d93e
DJ
1669 /* For BLX make sure to clear the low bits. */
1670 if (bits (inst2, 11, 12) == 1)
1671 nextpc = nextpc & 0xfffffffc;
c906108c 1672 }
aa17d93e 1673 else if ((inst1 & 0xff00) == 0x4700) /* bx REG, blx REG */
9498281f
DJ
1674 {
1675 if (bits (inst1, 3, 6) == 0x0f)
1676 nextpc = pc_val;
1677 else
0b1b3e42 1678 nextpc = get_frame_register_unsigned (frame, bits (inst1, 3, 6));
9498281f 1679
2af46ca0 1680 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
9498281f 1681 if (nextpc == pc)
edefbb7c 1682 error (_("Infinite loop detected"));
9498281f 1683 }
c906108c
SS
1684
1685 return nextpc;
1686}
1687
daddc3c1 1688CORE_ADDR
0b1b3e42 1689arm_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
c906108c 1690{
2af46ca0 1691 struct gdbarch *gdbarch = get_frame_arch (frame);
c906108c
SS
1692 unsigned long pc_val;
1693 unsigned long this_instr;
1694 unsigned long status;
1695 CORE_ADDR nextpc;
1696
1697 if (arm_pc_is_thumb (pc))
0b1b3e42 1698 return thumb_get_next_pc (frame, pc);
c906108c
SS
1699
1700 pc_val = (unsigned long) pc;
1c5bada0 1701 this_instr = read_memory_unsigned_integer (pc, 4);
0b1b3e42 1702 status = get_frame_register_unsigned (frame, ARM_PS_REGNUM);
c5aa993b 1703 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
c906108c 1704
daddc3c1
DJ
1705 if (bits (this_instr, 28, 31) == INST_NV)
1706 switch (bits (this_instr, 24, 27))
1707 {
1708 case 0xa:
1709 case 0xb:
1710 {
1711 /* Branch with Link and change to Thumb. */
1712 nextpc = BranchDest (pc, this_instr);
1713 nextpc |= bit (this_instr, 24) << 1;
1714
e1e01acd 1715 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
daddc3c1
DJ
1716 if (nextpc == pc)
1717 error (_("Infinite loop detected"));
1718 break;
1719 }
1720 case 0xc:
1721 case 0xd:
1722 case 0xe:
1723 /* Coprocessor register transfer. */
1724 if (bits (this_instr, 12, 15) == 15)
1725 error (_("Invalid update to pc in instruction"));
1726 break;
1727 }
1728 else if (condition_true (bits (this_instr, 28, 31), status))
c906108c
SS
1729 {
1730 switch (bits (this_instr, 24, 27))
1731 {
c5aa993b 1732 case 0x0:
94c30b78 1733 case 0x1: /* data processing */
c5aa993b
JM
1734 case 0x2:
1735 case 0x3:
c906108c
SS
1736 {
1737 unsigned long operand1, operand2, result = 0;
1738 unsigned long rn;
1739 int c;
c5aa993b 1740
c906108c
SS
1741 if (bits (this_instr, 12, 15) != 15)
1742 break;
1743
1744 if (bits (this_instr, 22, 25) == 0
c5aa993b 1745 && bits (this_instr, 4, 7) == 9) /* multiply */
edefbb7c 1746 error (_("Invalid update to pc in instruction"));
c906108c 1747
9498281f 1748 /* BX <reg>, BLX <reg> */
e150acc7
PB
1749 if (bits (this_instr, 4, 27) == 0x12fff1
1750 || bits (this_instr, 4, 27) == 0x12fff3)
9498281f
DJ
1751 {
1752 rn = bits (this_instr, 0, 3);
0b1b3e42
UW
1753 result = (rn == 15) ? pc_val + 8
1754 : get_frame_register_unsigned (frame, rn);
bf6ae464 1755 nextpc = (CORE_ADDR) gdbarch_addr_bits_remove
2af46ca0 1756 (gdbarch, result);
9498281f
DJ
1757
1758 if (nextpc == pc)
edefbb7c 1759 error (_("Infinite loop detected"));
9498281f
DJ
1760
1761 return nextpc;
1762 }
1763
c906108c
SS
1764 /* Multiply into PC */
1765 c = (status & FLAG_C) ? 1 : 0;
1766 rn = bits (this_instr, 16, 19);
0b1b3e42
UW
1767 operand1 = (rn == 15) ? pc_val + 8
1768 : get_frame_register_unsigned (frame, rn);
c5aa993b 1769
c906108c
SS
1770 if (bit (this_instr, 25))
1771 {
1772 unsigned long immval = bits (this_instr, 0, 7);
1773 unsigned long rotate = 2 * bits (this_instr, 8, 11);
c5aa993b
JM
1774 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
1775 & 0xffffffff;
c906108c 1776 }
c5aa993b 1777 else /* operand 2 is a shifted register */
0b1b3e42 1778 operand2 = shifted_reg_val (frame, this_instr, c, pc_val, status);
c5aa993b 1779
c906108c
SS
1780 switch (bits (this_instr, 21, 24))
1781 {
c5aa993b 1782 case 0x0: /*and */
c906108c
SS
1783 result = operand1 & operand2;
1784 break;
1785
c5aa993b 1786 case 0x1: /*eor */
c906108c
SS
1787 result = operand1 ^ operand2;
1788 break;
1789
c5aa993b 1790 case 0x2: /*sub */
c906108c
SS
1791 result = operand1 - operand2;
1792 break;
1793
c5aa993b 1794 case 0x3: /*rsb */
c906108c
SS
1795 result = operand2 - operand1;
1796 break;
1797
c5aa993b 1798 case 0x4: /*add */
c906108c
SS
1799 result = operand1 + operand2;
1800 break;
1801
c5aa993b 1802 case 0x5: /*adc */
c906108c
SS
1803 result = operand1 + operand2 + c;
1804 break;
1805
c5aa993b 1806 case 0x6: /*sbc */
c906108c
SS
1807 result = operand1 - operand2 + c;
1808 break;
1809
c5aa993b 1810 case 0x7: /*rsc */
c906108c
SS
1811 result = operand2 - operand1 + c;
1812 break;
1813
c5aa993b
JM
1814 case 0x8:
1815 case 0x9:
1816 case 0xa:
1817 case 0xb: /* tst, teq, cmp, cmn */
c906108c
SS
1818 result = (unsigned long) nextpc;
1819 break;
1820
c5aa993b 1821 case 0xc: /*orr */
c906108c
SS
1822 result = operand1 | operand2;
1823 break;
1824
c5aa993b 1825 case 0xd: /*mov */
c906108c
SS
1826 /* Always step into a function. */
1827 result = operand2;
c5aa993b 1828 break;
c906108c 1829
c5aa993b 1830 case 0xe: /*bic */
c906108c
SS
1831 result = operand1 & ~operand2;
1832 break;
1833
c5aa993b 1834 case 0xf: /*mvn */
c906108c
SS
1835 result = ~operand2;
1836 break;
1837 }
bf6ae464 1838 nextpc = (CORE_ADDR) gdbarch_addr_bits_remove
2af46ca0 1839 (gdbarch, result);
c906108c
SS
1840
1841 if (nextpc == pc)
edefbb7c 1842 error (_("Infinite loop detected"));
c906108c
SS
1843 break;
1844 }
c5aa993b
JM
1845
1846 case 0x4:
1847 case 0x5: /* data transfer */
1848 case 0x6:
1849 case 0x7:
c906108c
SS
1850 if (bit (this_instr, 20))
1851 {
1852 /* load */
1853 if (bits (this_instr, 12, 15) == 15)
1854 {
1855 /* rd == pc */
c5aa993b 1856 unsigned long rn;
c906108c 1857 unsigned long base;
c5aa993b 1858
c906108c 1859 if (bit (this_instr, 22))
edefbb7c 1860 error (_("Invalid update to pc in instruction"));
c906108c
SS
1861
1862 /* byte write to PC */
1863 rn = bits (this_instr, 16, 19);
0b1b3e42
UW
1864 base = (rn == 15) ? pc_val + 8
1865 : get_frame_register_unsigned (frame, rn);
c906108c
SS
1866 if (bit (this_instr, 24))
1867 {
1868 /* pre-indexed */
1869 int c = (status & FLAG_C) ? 1 : 0;
1870 unsigned long offset =
c5aa993b 1871 (bit (this_instr, 25)
0b1b3e42 1872 ? shifted_reg_val (frame, this_instr, c, pc_val, status)
c5aa993b 1873 : bits (this_instr, 0, 11));
c906108c
SS
1874
1875 if (bit (this_instr, 23))
1876 base += offset;
1877 else
1878 base -= offset;
1879 }
c5aa993b 1880 nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
c906108c 1881 4);
c5aa993b 1882
2af46ca0 1883 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
c906108c
SS
1884
1885 if (nextpc == pc)
edefbb7c 1886 error (_("Infinite loop detected"));
c906108c
SS
1887 }
1888 }
1889 break;
c5aa993b
JM
1890
1891 case 0x8:
1892 case 0x9: /* block transfer */
c906108c
SS
1893 if (bit (this_instr, 20))
1894 {
1895 /* LDM */
1896 if (bit (this_instr, 15))
1897 {
1898 /* loading pc */
1899 int offset = 0;
1900
1901 if (bit (this_instr, 23))
1902 {
1903 /* up */
1904 unsigned long reglist = bits (this_instr, 0, 14);
1905 offset = bitcount (reglist) * 4;
c5aa993b 1906 if (bit (this_instr, 24)) /* pre */
c906108c
SS
1907 offset += 4;
1908 }
1909 else if (bit (this_instr, 24))
1910 offset = -4;
c5aa993b 1911
c906108c 1912 {
c5aa993b 1913 unsigned long rn_val =
0b1b3e42
UW
1914 get_frame_register_unsigned (frame,
1915 bits (this_instr, 16, 19));
c906108c
SS
1916 nextpc =
1917 (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
c5aa993b 1918 + offset),
c906108c
SS
1919 4);
1920 }
bf6ae464 1921 nextpc = gdbarch_addr_bits_remove
2af46ca0 1922 (gdbarch, nextpc);
c906108c 1923 if (nextpc == pc)
edefbb7c 1924 error (_("Infinite loop detected"));
c906108c
SS
1925 }
1926 }
1927 break;
c5aa993b
JM
1928
1929 case 0xb: /* branch & link */
1930 case 0xa: /* branch */
c906108c
SS
1931 {
1932 nextpc = BranchDest (pc, this_instr);
1933
2af46ca0 1934 nextpc = gdbarch_addr_bits_remove (gdbarch, nextpc);
c906108c 1935 if (nextpc == pc)
edefbb7c 1936 error (_("Infinite loop detected"));
c906108c
SS
1937 break;
1938 }
c5aa993b
JM
1939
1940 case 0xc:
1941 case 0xd:
1942 case 0xe: /* coproc ops */
1943 case 0xf: /* SWI */
c906108c
SS
1944 break;
1945
1946 default:
edefbb7c 1947 fprintf_filtered (gdb_stderr, _("Bad bit-field extraction\n"));
c906108c
SS
1948 return (pc);
1949 }
1950 }
1951
1952 return nextpc;
1953}
1954
9512d7fd
FN
1955/* single_step() is called just before we want to resume the inferior,
1956 if we want to single-step it but there is no hardware or kernel
1957 single-step support. We find the target of the coming instruction
e0cd558a 1958 and breakpoint it. */
9512d7fd 1959
190dce09 1960int
0b1b3e42 1961arm_software_single_step (struct frame_info *frame)
9512d7fd 1962{
8181d85f
DJ
1963 /* NOTE: This may insert the wrong breakpoint instruction when
1964 single-stepping over a mode-changing instruction, if the
1965 CPSR heuristics are used. */
9512d7fd 1966
0b1b3e42 1967 CORE_ADDR next_pc = arm_get_next_pc (frame, get_frame_pc (frame));
e0cd558a 1968 insert_single_step_breakpoint (next_pc);
e6590a1b
UW
1969
1970 return 1;
9512d7fd 1971}
9512d7fd 1972
c906108c
SS
1973#include "bfd-in2.h"
1974#include "libcoff.h"
1975
1976static int
ed9a39eb 1977gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
c906108c
SS
1978{
1979 if (arm_pc_is_thumb (memaddr))
1980 {
c5aa993b
JM
1981 static asymbol *asym;
1982 static combined_entry_type ce;
1983 static struct coff_symbol_struct csym;
27cddce2 1984 static struct bfd fake_bfd;
c5aa993b 1985 static bfd_target fake_target;
c906108c
SS
1986
1987 if (csym.native == NULL)
1988 {
da3c6d4a
MS
1989 /* Create a fake symbol vector containing a Thumb symbol.
1990 This is solely so that the code in print_insn_little_arm()
1991 and print_insn_big_arm() in opcodes/arm-dis.c will detect
1992 the presence of a Thumb symbol and switch to decoding
1993 Thumb instructions. */
c5aa993b
JM
1994
1995 fake_target.flavour = bfd_target_coff_flavour;
1996 fake_bfd.xvec = &fake_target;
c906108c 1997 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
c5aa993b
JM
1998 csym.native = &ce;
1999 csym.symbol.the_bfd = &fake_bfd;
2000 csym.symbol.name = "fake";
2001 asym = (asymbol *) & csym;
c906108c 2002 }
c5aa993b 2003
c906108c 2004 memaddr = UNMAKE_THUMB_ADDR (memaddr);
c5aa993b 2005 info->symbols = &asym;
c906108c
SS
2006 }
2007 else
2008 info->symbols = NULL;
c5aa993b 2009
40887e1a 2010 if (info->endian == BFD_ENDIAN_BIG)
c906108c
SS
2011 return print_insn_big_arm (memaddr, info);
2012 else
2013 return print_insn_little_arm (memaddr, info);
2014}
2015
66e810cd
RE
2016/* The following define instruction sequences that will cause ARM
2017 cpu's to take an undefined instruction trap. These are used to
2018 signal a breakpoint to GDB.
2019
2020 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
2021 modes. A different instruction is required for each mode. The ARM
2022 cpu's can also be big or little endian. Thus four different
2023 instructions are needed to support all cases.
2024
2025 Note: ARMv4 defines several new instructions that will take the
2026 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
2027 not in fact add the new instructions. The new undefined
2028 instructions in ARMv4 are all instructions that had no defined
2029 behaviour in earlier chips. There is no guarantee that they will
2030 raise an exception, but may be treated as NOP's. In practice, it
2031 may only safe to rely on instructions matching:
2032
2033 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2034 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
2035 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
2036
2037 Even this may only true if the condition predicate is true. The
2038 following use a condition predicate of ALWAYS so it is always TRUE.
2039
2040 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
2041 and NetBSD all use a software interrupt rather than an undefined
2042 instruction to force a trap. This can be handled by by the
2043 abi-specific code during establishment of the gdbarch vector. */
2044
66e810cd 2045#define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
66e810cd 2046#define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
190dce09
UW
2047#define THUMB_LE_BREAKPOINT {0xbe,0xbe}
2048#define THUMB_BE_BREAKPOINT {0xbe,0xbe}
66e810cd
RE
2049
2050static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
2051static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
2052static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
2053static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
2054
34e8f22d
RE
2055/* Determine the type and size of breakpoint to insert at PCPTR. Uses
2056 the program counter value to determine whether a 16-bit or 32-bit
ed9a39eb
JM
2057 breakpoint should be used. It returns a pointer to a string of
2058 bytes that encode a breakpoint instruction, stores the length of
2059 the string to *lenptr, and adjusts the program counter (if
2060 necessary) to point to the actual memory location where the
c906108c
SS
2061 breakpoint should be inserted. */
2062
ab89facf 2063static const unsigned char *
67d57894 2064arm_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
c906108c 2065{
67d57894 2066 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
66e810cd 2067
4bf7064c 2068 if (arm_pc_is_thumb (*pcptr))
c906108c 2069 {
66e810cd
RE
2070 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
2071 *lenptr = tdep->thumb_breakpoint_size;
2072 return tdep->thumb_breakpoint;
c906108c
SS
2073 }
2074 else
2075 {
66e810cd
RE
2076 *lenptr = tdep->arm_breakpoint_size;
2077 return tdep->arm_breakpoint;
c906108c
SS
2078 }
2079}
ed9a39eb
JM
2080
2081/* Extract from an array REGBUF containing the (raw) register state a
2082 function return value of type TYPE, and copy that, in virtual
2083 format, into VALBUF. */
2084
34e8f22d 2085static void
5238cf52
MK
2086arm_extract_return_value (struct type *type, struct regcache *regs,
2087 gdb_byte *valbuf)
ed9a39eb 2088{
be8626e0
MD
2089 struct gdbarch *gdbarch = get_regcache_arch (regs);
2090
ed9a39eb 2091 if (TYPE_CODE_FLT == TYPE_CODE (type))
08216dd7 2092 {
be8626e0 2093 switch (gdbarch_tdep (gdbarch)->fp_model)
08216dd7
RE
2094 {
2095 case ARM_FLOAT_FPA:
b508a996
RE
2096 {
2097 /* The value is in register F0 in internal format. We need to
2098 extract the raw value and then convert it to the desired
2099 internal type. */
7a5ea0d4 2100 bfd_byte tmpbuf[FP_REGISTER_SIZE];
b508a996
RE
2101
2102 regcache_cooked_read (regs, ARM_F0_REGNUM, tmpbuf);
2103 convert_from_extended (floatformat_from_type (type), tmpbuf,
be8626e0 2104 valbuf, gdbarch_byte_order (gdbarch));
b508a996 2105 }
08216dd7
RE
2106 break;
2107
fd50bc42 2108 case ARM_FLOAT_SOFT_FPA:
08216dd7 2109 case ARM_FLOAT_SOFT_VFP:
b508a996
RE
2110 regcache_cooked_read (regs, ARM_A1_REGNUM, valbuf);
2111 if (TYPE_LENGTH (type) > 4)
2112 regcache_cooked_read (regs, ARM_A1_REGNUM + 1,
7a5ea0d4 2113 valbuf + INT_REGISTER_SIZE);
08216dd7
RE
2114 break;
2115
2116 default:
2117 internal_error
2118 (__FILE__, __LINE__,
edefbb7c 2119 _("arm_extract_return_value: Floating point model not supported"));
08216dd7
RE
2120 break;
2121 }
2122 }
b508a996
RE
2123 else if (TYPE_CODE (type) == TYPE_CODE_INT
2124 || TYPE_CODE (type) == TYPE_CODE_CHAR
2125 || TYPE_CODE (type) == TYPE_CODE_BOOL
2126 || TYPE_CODE (type) == TYPE_CODE_PTR
2127 || TYPE_CODE (type) == TYPE_CODE_REF
2128 || TYPE_CODE (type) == TYPE_CODE_ENUM)
2129 {
2130 /* If the the type is a plain integer, then the access is
2131 straight-forward. Otherwise we have to play around a bit more. */
2132 int len = TYPE_LENGTH (type);
2133 int regno = ARM_A1_REGNUM;
2134 ULONGEST tmp;
2135
2136 while (len > 0)
2137 {
2138 /* By using store_unsigned_integer we avoid having to do
2139 anything special for small big-endian values. */
2140 regcache_cooked_read_unsigned (regs, regno++, &tmp);
2141 store_unsigned_integer (valbuf,
7a5ea0d4
DJ
2142 (len > INT_REGISTER_SIZE
2143 ? INT_REGISTER_SIZE : len),
b508a996 2144 tmp);
7a5ea0d4
DJ
2145 len -= INT_REGISTER_SIZE;
2146 valbuf += INT_REGISTER_SIZE;
b508a996
RE
2147 }
2148 }
ed9a39eb 2149 else
b508a996
RE
2150 {
2151 /* For a structure or union the behaviour is as if the value had
2152 been stored to word-aligned memory and then loaded into
2153 registers with 32-bit load instruction(s). */
2154 int len = TYPE_LENGTH (type);
2155 int regno = ARM_A1_REGNUM;
7a5ea0d4 2156 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
2157
2158 while (len > 0)
2159 {
2160 regcache_cooked_read (regs, regno++, tmpbuf);
2161 memcpy (valbuf, tmpbuf,
7a5ea0d4
DJ
2162 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
2163 len -= INT_REGISTER_SIZE;
2164 valbuf += INT_REGISTER_SIZE;
b508a996
RE
2165 }
2166 }
34e8f22d
RE
2167}
2168
67255d04
RE
2169
2170/* Will a function return an aggregate type in memory or in a
2171 register? Return 0 if an aggregate type can be returned in a
2172 register, 1 if it must be returned in memory. */
2173
2174static int
2af48f68 2175arm_return_in_memory (struct gdbarch *gdbarch, struct type *type)
67255d04
RE
2176{
2177 int nRc;
52f0bd74 2178 enum type_code code;
67255d04 2179
44e1a9eb
DJ
2180 CHECK_TYPEDEF (type);
2181
67255d04
RE
2182 /* In the ARM ABI, "integer" like aggregate types are returned in
2183 registers. For an aggregate type to be integer like, its size
f0c9063c 2184 must be less than or equal to INT_REGISTER_SIZE and the
b1e29e33
AC
2185 offset of each addressable subfield must be zero. Note that bit
2186 fields are not addressable, and all addressable subfields of
2187 unions always start at offset zero.
67255d04
RE
2188
2189 This function is based on the behaviour of GCC 2.95.1.
2190 See: gcc/arm.c: arm_return_in_memory() for details.
2191
2192 Note: All versions of GCC before GCC 2.95.2 do not set up the
2193 parameters correctly for a function returning the following
2194 structure: struct { float f;}; This should be returned in memory,
2195 not a register. Richard Earnshaw sent me a patch, but I do not
2196 know of any way to detect if a function like the above has been
2197 compiled with the correct calling convention. */
2198
2199 /* All aggregate types that won't fit in a register must be returned
2200 in memory. */
f0c9063c 2201 if (TYPE_LENGTH (type) > INT_REGISTER_SIZE)
67255d04
RE
2202 {
2203 return 1;
2204 }
2205
2af48f68
PB
2206 /* The AAPCS says all aggregates not larger than a word are returned
2207 in a register. */
2208 if (gdbarch_tdep (gdbarch)->arm_abi != ARM_ABI_APCS)
2209 return 0;
2210
67255d04
RE
2211 /* The only aggregate types that can be returned in a register are
2212 structs and unions. Arrays must be returned in memory. */
2213 code = TYPE_CODE (type);
2214 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
2215 {
2216 return 1;
2217 }
2218
2219 /* Assume all other aggregate types can be returned in a register.
2220 Run a check for structures, unions and arrays. */
2221 nRc = 0;
2222
2223 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
2224 {
2225 int i;
2226 /* Need to check if this struct/union is "integer" like. For
2227 this to be true, its size must be less than or equal to
f0c9063c 2228 INT_REGISTER_SIZE and the offset of each addressable
b1e29e33
AC
2229 subfield must be zero. Note that bit fields are not
2230 addressable, and unions always start at offset zero. If any
2231 of the subfields is a floating point type, the struct/union
2232 cannot be an integer type. */
67255d04
RE
2233
2234 /* For each field in the object, check:
2235 1) Is it FP? --> yes, nRc = 1;
2236 2) Is it addressable (bitpos != 0) and
2237 not packed (bitsize == 0)?
2238 --> yes, nRc = 1
2239 */
2240
2241 for (i = 0; i < TYPE_NFIELDS (type); i++)
2242 {
2243 enum type_code field_type_code;
44e1a9eb 2244 field_type_code = TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, i)));
67255d04
RE
2245
2246 /* Is it a floating point type field? */
2247 if (field_type_code == TYPE_CODE_FLT)
2248 {
2249 nRc = 1;
2250 break;
2251 }
2252
2253 /* If bitpos != 0, then we have to care about it. */
2254 if (TYPE_FIELD_BITPOS (type, i) != 0)
2255 {
2256 /* Bitfields are not addressable. If the field bitsize is
2257 zero, then the field is not packed. Hence it cannot be
2258 a bitfield or any other packed type. */
2259 if (TYPE_FIELD_BITSIZE (type, i) == 0)
2260 {
2261 nRc = 1;
2262 break;
2263 }
2264 }
2265 }
2266 }
2267
2268 return nRc;
2269}
2270
34e8f22d
RE
2271/* Write into appropriate registers a function return value of type
2272 TYPE, given in virtual format. */
2273
2274static void
b508a996 2275arm_store_return_value (struct type *type, struct regcache *regs,
5238cf52 2276 const gdb_byte *valbuf)
34e8f22d 2277{
be8626e0
MD
2278 struct gdbarch *gdbarch = get_regcache_arch (regs);
2279
34e8f22d
RE
2280 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2281 {
7a5ea0d4 2282 char buf[MAX_REGISTER_SIZE];
34e8f22d 2283
be8626e0 2284 switch (gdbarch_tdep (gdbarch)->fp_model)
08216dd7
RE
2285 {
2286 case ARM_FLOAT_FPA:
2287
be8626e0
MD
2288 convert_to_extended (floatformat_from_type (type), buf, valbuf,
2289 gdbarch_byte_order (gdbarch));
b508a996 2290 regcache_cooked_write (regs, ARM_F0_REGNUM, buf);
08216dd7
RE
2291 break;
2292
fd50bc42 2293 case ARM_FLOAT_SOFT_FPA:
08216dd7 2294 case ARM_FLOAT_SOFT_VFP:
b508a996
RE
2295 regcache_cooked_write (regs, ARM_A1_REGNUM, valbuf);
2296 if (TYPE_LENGTH (type) > 4)
2297 regcache_cooked_write (regs, ARM_A1_REGNUM + 1,
7a5ea0d4 2298 valbuf + INT_REGISTER_SIZE);
08216dd7
RE
2299 break;
2300
2301 default:
2302 internal_error
2303 (__FILE__, __LINE__,
edefbb7c 2304 _("arm_store_return_value: Floating point model not supported"));
08216dd7
RE
2305 break;
2306 }
34e8f22d 2307 }
b508a996
RE
2308 else if (TYPE_CODE (type) == TYPE_CODE_INT
2309 || TYPE_CODE (type) == TYPE_CODE_CHAR
2310 || TYPE_CODE (type) == TYPE_CODE_BOOL
2311 || TYPE_CODE (type) == TYPE_CODE_PTR
2312 || TYPE_CODE (type) == TYPE_CODE_REF
2313 || TYPE_CODE (type) == TYPE_CODE_ENUM)
2314 {
2315 if (TYPE_LENGTH (type) <= 4)
2316 {
2317 /* Values of one word or less are zero/sign-extended and
2318 returned in r0. */
7a5ea0d4 2319 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
2320 LONGEST val = unpack_long (type, valbuf);
2321
7a5ea0d4 2322 store_signed_integer (tmpbuf, INT_REGISTER_SIZE, val);
b508a996
RE
2323 regcache_cooked_write (regs, ARM_A1_REGNUM, tmpbuf);
2324 }
2325 else
2326 {
2327 /* Integral values greater than one word are stored in consecutive
2328 registers starting with r0. This will always be a multiple of
2329 the regiser size. */
2330 int len = TYPE_LENGTH (type);
2331 int regno = ARM_A1_REGNUM;
2332
2333 while (len > 0)
2334 {
2335 regcache_cooked_write (regs, regno++, valbuf);
7a5ea0d4
DJ
2336 len -= INT_REGISTER_SIZE;
2337 valbuf += INT_REGISTER_SIZE;
b508a996
RE
2338 }
2339 }
2340 }
34e8f22d 2341 else
b508a996
RE
2342 {
2343 /* For a structure or union the behaviour is as if the value had
2344 been stored to word-aligned memory and then loaded into
2345 registers with 32-bit load instruction(s). */
2346 int len = TYPE_LENGTH (type);
2347 int regno = ARM_A1_REGNUM;
7a5ea0d4 2348 bfd_byte tmpbuf[INT_REGISTER_SIZE];
b508a996
RE
2349
2350 while (len > 0)
2351 {
2352 memcpy (tmpbuf, valbuf,
7a5ea0d4 2353 len > INT_REGISTER_SIZE ? INT_REGISTER_SIZE : len);
b508a996 2354 regcache_cooked_write (regs, regno++, tmpbuf);
7a5ea0d4
DJ
2355 len -= INT_REGISTER_SIZE;
2356 valbuf += INT_REGISTER_SIZE;
b508a996
RE
2357 }
2358 }
34e8f22d
RE
2359}
2360
2af48f68
PB
2361
2362/* Handle function return values. */
2363
2364static enum return_value_convention
c055b101
CV
2365arm_return_value (struct gdbarch *gdbarch, struct type *func_type,
2366 struct type *valtype, struct regcache *regcache,
2367 gdb_byte *readbuf, const gdb_byte *writebuf)
2af48f68 2368{
7c00367c
MK
2369 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2370
2af48f68
PB
2371 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
2372 || TYPE_CODE (valtype) == TYPE_CODE_UNION
2373 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
2374 {
7c00367c
MK
2375 if (tdep->struct_return == pcc_struct_return
2376 || arm_return_in_memory (gdbarch, valtype))
2af48f68
PB
2377 return RETURN_VALUE_STRUCT_CONVENTION;
2378 }
2379
2380 if (writebuf)
2381 arm_store_return_value (valtype, regcache, writebuf);
2382
2383 if (readbuf)
2384 arm_extract_return_value (valtype, regcache, readbuf);
2385
2386 return RETURN_VALUE_REGISTER_CONVENTION;
2387}
2388
2389
9df628e0 2390static int
60ade65d 2391arm_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
9df628e0
RE
2392{
2393 CORE_ADDR jb_addr;
7a5ea0d4 2394 char buf[INT_REGISTER_SIZE];
60ade65d 2395 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (frame));
9df628e0 2396
60ade65d 2397 jb_addr = get_frame_register_unsigned (frame, ARM_A1_REGNUM);
9df628e0
RE
2398
2399 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
7a5ea0d4 2400 INT_REGISTER_SIZE))
9df628e0
RE
2401 return 0;
2402
7a5ea0d4 2403 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE);
9df628e0
RE
2404 return 1;
2405}
2406
faa95490
DJ
2407/* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
2408 return the target PC. Otherwise return 0. */
c906108c
SS
2409
2410CORE_ADDR
52f729a7 2411arm_skip_stub (struct frame_info *frame, CORE_ADDR pc)
c906108c 2412{
c5aa993b 2413 char *name;
faa95490 2414 int namelen;
c906108c
SS
2415 CORE_ADDR start_addr;
2416
2417 /* Find the starting address and name of the function containing the PC. */
2418 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
2419 return 0;
2420
faa95490
DJ
2421 /* If PC is in a Thumb call or return stub, return the address of the
2422 target PC, which is in a register. The thunk functions are called
2423 _call_via_xx, where x is the register name. The possible names
2424 are r0-r9, sl, fp, ip, sp, and lr. */
c906108c
SS
2425 if (strncmp (name, "_call_via_", 10) == 0)
2426 {
ed9a39eb
JM
2427 /* Use the name suffix to determine which register contains the
2428 target PC. */
c5aa993b
JM
2429 static char *table[15] =
2430 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
2431 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
2432 };
c906108c 2433 int regno;
faa95490 2434 int offset = strlen (name) - 2;
c906108c
SS
2435
2436 for (regno = 0; regno <= 14; regno++)
faa95490 2437 if (strcmp (&name[offset], table[regno]) == 0)
52f729a7 2438 return get_frame_register_unsigned (frame, regno);
c906108c 2439 }
ed9a39eb 2440
faa95490
DJ
2441 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
2442 non-interworking calls to foo. We could decode the stubs
2443 to find the target but it's easier to use the symbol table. */
2444 namelen = strlen (name);
2445 if (name[0] == '_' && name[1] == '_'
2446 && ((namelen > 2 + strlen ("_from_thumb")
2447 && strncmp (name + namelen - strlen ("_from_thumb"), "_from_thumb",
2448 strlen ("_from_thumb")) == 0)
2449 || (namelen > 2 + strlen ("_from_arm")
2450 && strncmp (name + namelen - strlen ("_from_arm"), "_from_arm",
2451 strlen ("_from_arm")) == 0)))
2452 {
2453 char *target_name;
2454 int target_len = namelen - 2;
2455 struct minimal_symbol *minsym;
2456 struct objfile *objfile;
2457 struct obj_section *sec;
2458
2459 if (name[namelen - 1] == 'b')
2460 target_len -= strlen ("_from_thumb");
2461 else
2462 target_len -= strlen ("_from_arm");
2463
2464 target_name = alloca (target_len + 1);
2465 memcpy (target_name, name + 2, target_len);
2466 target_name[target_len] = '\0';
2467
2468 sec = find_pc_section (pc);
2469 objfile = (sec == NULL) ? NULL : sec->objfile;
2470 minsym = lookup_minimal_symbol (target_name, NULL, objfile);
2471 if (minsym != NULL)
2472 return SYMBOL_VALUE_ADDRESS (minsym);
2473 else
2474 return 0;
2475 }
2476
c5aa993b 2477 return 0; /* not a stub */
c906108c
SS
2478}
2479
afd7eef0
RE
2480static void
2481set_arm_command (char *args, int from_tty)
2482{
edefbb7c
AC
2483 printf_unfiltered (_("\
2484\"set arm\" must be followed by an apporpriate subcommand.\n"));
afd7eef0
RE
2485 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
2486}
2487
2488static void
2489show_arm_command (char *args, int from_tty)
2490{
26304000 2491 cmd_show_list (showarmcmdlist, from_tty, "");
afd7eef0
RE
2492}
2493
28e97307
DJ
2494static void
2495arm_update_current_architecture (void)
fd50bc42 2496{
28e97307 2497 struct gdbarch_info info;
fd50bc42 2498
28e97307
DJ
2499 /* If the current architecture is not ARM, we have nothing to do. */
2500 if (gdbarch_bfd_arch_info (current_gdbarch)->arch != bfd_arch_arm)
2501 return;
fd50bc42 2502
28e97307
DJ
2503 /* Update the architecture. */
2504 gdbarch_info_init (&info);
fd50bc42 2505
28e97307
DJ
2506 if (!gdbarch_update_p (info))
2507 internal_error (__FILE__, __LINE__, "could not update architecture");
fd50bc42
RE
2508}
2509
2510static void
2511set_fp_model_sfunc (char *args, int from_tty,
2512 struct cmd_list_element *c)
2513{
2514 enum arm_float_model fp_model;
2515
2516 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
2517 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
2518 {
2519 arm_fp_model = fp_model;
2520 break;
2521 }
2522
2523 if (fp_model == ARM_FLOAT_LAST)
edefbb7c 2524 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
fd50bc42
RE
2525 current_fp_model);
2526
28e97307 2527 arm_update_current_architecture ();
fd50bc42
RE
2528}
2529
2530static void
08546159
AC
2531show_fp_model (struct ui_file *file, int from_tty,
2532 struct cmd_list_element *c, const char *value)
fd50bc42
RE
2533{
2534 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2535
28e97307 2536 if (arm_fp_model == ARM_FLOAT_AUTO
fd50bc42 2537 && gdbarch_bfd_arch_info (current_gdbarch)->arch == bfd_arch_arm)
28e97307
DJ
2538 fprintf_filtered (file, _("\
2539The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
2540 fp_model_strings[tdep->fp_model]);
2541 else
2542 fprintf_filtered (file, _("\
2543The current ARM floating point model is \"%s\".\n"),
2544 fp_model_strings[arm_fp_model]);
2545}
2546
2547static void
2548arm_set_abi (char *args, int from_tty,
2549 struct cmd_list_element *c)
2550{
2551 enum arm_abi_kind arm_abi;
2552
2553 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
2554 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
2555 {
2556 arm_abi_global = arm_abi;
2557 break;
2558 }
2559
2560 if (arm_abi == ARM_ABI_LAST)
2561 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
2562 arm_abi_string);
2563
2564 arm_update_current_architecture ();
2565}
2566
2567static void
2568arm_show_abi (struct ui_file *file, int from_tty,
2569 struct cmd_list_element *c, const char *value)
2570{
2571 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2572
2573 if (arm_abi_global == ARM_ABI_AUTO
2574 && gdbarch_bfd_arch_info (current_gdbarch)->arch == bfd_arch_arm)
2575 fprintf_filtered (file, _("\
2576The current ARM ABI is \"auto\" (currently \"%s\").\n"),
2577 arm_abi_strings[tdep->arm_abi]);
2578 else
2579 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
2580 arm_abi_string);
fd50bc42
RE
2581}
2582
afd7eef0
RE
2583/* If the user changes the register disassembly style used for info
2584 register and other commands, we have to also switch the style used
2585 in opcodes for disassembly output. This function is run in the "set
2586 arm disassembly" command, and does that. */
bc90b915
FN
2587
2588static void
afd7eef0 2589set_disassembly_style_sfunc (char *args, int from_tty,
bc90b915
FN
2590 struct cmd_list_element *c)
2591{
afd7eef0 2592 set_disassembly_style ();
bc90b915
FN
2593}
2594\f
966fbf70 2595/* Return the ARM register name corresponding to register I. */
a208b0cb 2596static const char *
d93859e2 2597arm_register_name (struct gdbarch *gdbarch, int i)
966fbf70 2598{
ff6f572f
DJ
2599 if (i >= ARRAY_SIZE (arm_register_names))
2600 /* These registers are only supported on targets which supply
2601 an XML description. */
2602 return "";
2603
966fbf70
RE
2604 return arm_register_names[i];
2605}
2606
bc90b915 2607static void
afd7eef0 2608set_disassembly_style (void)
bc90b915 2609{
123dc839 2610 int current;
bc90b915 2611
123dc839
DJ
2612 /* Find the style that the user wants. */
2613 for (current = 0; current < num_disassembly_options; current++)
2614 if (disassembly_style == valid_disassembly_styles[current])
2615 break;
2616 gdb_assert (current < num_disassembly_options);
bc90b915 2617
94c30b78 2618 /* Synchronize the disassembler. */
bc90b915
FN
2619 set_arm_regname_option (current);
2620}
2621
082fc60d
RE
2622/* Test whether the coff symbol specific value corresponds to a Thumb
2623 function. */
2624
2625static int
2626coff_sym_is_thumb (int val)
2627{
2628 return (val == C_THUMBEXT ||
2629 val == C_THUMBSTAT ||
2630 val == C_THUMBEXTFUNC ||
2631 val == C_THUMBSTATFUNC ||
2632 val == C_THUMBLABEL);
2633}
2634
2635/* arm_coff_make_msymbol_special()
2636 arm_elf_make_msymbol_special()
2637
2638 These functions test whether the COFF or ELF symbol corresponds to
2639 an address in thumb code, and set a "special" bit in a minimal
2640 symbol to indicate that it does. */
2641
34e8f22d 2642static void
082fc60d
RE
2643arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
2644{
2645 /* Thumb symbols are of type STT_LOPROC, (synonymous with
2646 STT_ARM_TFUNC). */
2647 if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
2648 == STT_LOPROC)
2649 MSYMBOL_SET_SPECIAL (msym);
2650}
2651
34e8f22d 2652static void
082fc60d
RE
2653arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
2654{
2655 if (coff_sym_is_thumb (val))
2656 MSYMBOL_SET_SPECIAL (msym);
2657}
2658
756fe439 2659static void
61a1198a 2660arm_write_pc (struct regcache *regcache, CORE_ADDR pc)
756fe439 2661{
61a1198a 2662 regcache_cooked_write_unsigned (regcache, ARM_PC_REGNUM, pc);
756fe439
DJ
2663
2664 /* If necessary, set the T bit. */
2665 if (arm_apcs_32)
2666 {
61a1198a
UW
2667 ULONGEST val;
2668 regcache_cooked_read_unsigned (regcache, ARM_PS_REGNUM, &val);
756fe439 2669 if (arm_pc_is_thumb (pc))
61a1198a 2670 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM, val | 0x20);
756fe439 2671 else
61a1198a
UW
2672 regcache_cooked_write_unsigned (regcache, ARM_PS_REGNUM,
2673 val & ~(ULONGEST) 0x20);
756fe439
DJ
2674 }
2675}
123dc839
DJ
2676
2677static struct value *
2678value_of_arm_user_reg (struct frame_info *frame, const void *baton)
2679{
2680 const int *reg_p = baton;
2681 return value_of_register (*reg_p, frame);
2682}
97e03143 2683\f
70f80edf
JT
2684static enum gdb_osabi
2685arm_elf_osabi_sniffer (bfd *abfd)
97e03143 2686{
2af48f68 2687 unsigned int elfosabi;
70f80edf 2688 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
97e03143 2689
70f80edf 2690 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
97e03143 2691
28e97307
DJ
2692 if (elfosabi == ELFOSABI_ARM)
2693 /* GNU tools use this value. Check note sections in this case,
2694 as well. */
2695 bfd_map_over_sections (abfd,
2696 generic_elf_osabi_sniff_abi_tag_sections,
2697 &osabi);
97e03143 2698
28e97307 2699 /* Anything else will be handled by the generic ELF sniffer. */
70f80edf 2700 return osabi;
97e03143
RE
2701}
2702
70f80edf 2703\f
da3c6d4a
MS
2704/* Initialize the current architecture based on INFO. If possible,
2705 re-use an architecture from ARCHES, which is a list of
2706 architectures already created during this debugging session.
97e03143 2707
da3c6d4a
MS
2708 Called e.g. at program startup, when reading a core file, and when
2709 reading a binary file. */
97e03143 2710
39bbf761
RE
2711static struct gdbarch *
2712arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2713{
97e03143 2714 struct gdbarch_tdep *tdep;
39bbf761 2715 struct gdbarch *gdbarch;
28e97307
DJ
2716 struct gdbarch_list *best_arch;
2717 enum arm_abi_kind arm_abi = arm_abi_global;
2718 enum arm_float_model fp_model = arm_fp_model;
123dc839
DJ
2719 struct tdesc_arch_data *tdesc_data = NULL;
2720 int i;
ff6f572f 2721 int have_fpa_registers = 1;
123dc839
DJ
2722
2723 /* Check any target description for validity. */
2724 if (tdesc_has_registers (info.target_desc))
2725 {
2726 /* For most registers we require GDB's default names; but also allow
2727 the numeric names for sp / lr / pc, as a convenience. */
2728 static const char *const arm_sp_names[] = { "r13", "sp", NULL };
2729 static const char *const arm_lr_names[] = { "r14", "lr", NULL };
2730 static const char *const arm_pc_names[] = { "r15", "pc", NULL };
2731
2732 const struct tdesc_feature *feature;
2733 int i, valid_p;
2734
2735 feature = tdesc_find_feature (info.target_desc,
2736 "org.gnu.gdb.arm.core");
2737 if (feature == NULL)
2738 return NULL;
2739
2740 tdesc_data = tdesc_data_alloc ();
2741
2742 valid_p = 1;
2743 for (i = 0; i < ARM_SP_REGNUM; i++)
2744 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
2745 arm_register_names[i]);
2746 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
2747 ARM_SP_REGNUM,
2748 arm_sp_names);
2749 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
2750 ARM_LR_REGNUM,
2751 arm_lr_names);
2752 valid_p &= tdesc_numbered_register_choices (feature, tdesc_data,
2753 ARM_PC_REGNUM,
2754 arm_pc_names);
2755 valid_p &= tdesc_numbered_register (feature, tdesc_data,
2756 ARM_PS_REGNUM, "cpsr");
2757
2758 if (!valid_p)
2759 {
2760 tdesc_data_cleanup (tdesc_data);
2761 return NULL;
2762 }
2763
2764 feature = tdesc_find_feature (info.target_desc,
2765 "org.gnu.gdb.arm.fpa");
2766 if (feature != NULL)
2767 {
2768 valid_p = 1;
2769 for (i = ARM_F0_REGNUM; i <= ARM_FPS_REGNUM; i++)
2770 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
2771 arm_register_names[i]);
2772 if (!valid_p)
2773 {
2774 tdesc_data_cleanup (tdesc_data);
2775 return NULL;
2776 }
2777 }
ff6f572f
DJ
2778 else
2779 have_fpa_registers = 0;
2780
2781 feature = tdesc_find_feature (info.target_desc,
2782 "org.gnu.gdb.xscale.iwmmxt");
2783 if (feature != NULL)
2784 {
2785 static const char *const iwmmxt_names[] = {
2786 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
2787 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
2788 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
2789 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
2790 };
2791
2792 valid_p = 1;
2793 for (i = ARM_WR0_REGNUM; i <= ARM_WR15_REGNUM; i++)
2794 valid_p
2795 &= tdesc_numbered_register (feature, tdesc_data, i,
2796 iwmmxt_names[i - ARM_WR0_REGNUM]);
2797
2798 /* Check for the control registers, but do not fail if they
2799 are missing. */
2800 for (i = ARM_WC0_REGNUM; i <= ARM_WCASF_REGNUM; i++)
2801 tdesc_numbered_register (feature, tdesc_data, i,
2802 iwmmxt_names[i - ARM_WR0_REGNUM]);
2803
2804 for (i = ARM_WCGR0_REGNUM; i <= ARM_WCGR3_REGNUM; i++)
2805 valid_p
2806 &= tdesc_numbered_register (feature, tdesc_data, i,
2807 iwmmxt_names[i - ARM_WR0_REGNUM]);
2808
2809 if (!valid_p)
2810 {
2811 tdesc_data_cleanup (tdesc_data);
2812 return NULL;
2813 }
2814 }
123dc839 2815 }
39bbf761 2816
28e97307
DJ
2817 /* If we have an object to base this architecture on, try to determine
2818 its ABI. */
39bbf761 2819
28e97307 2820 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
97e03143 2821 {
6b26d61a 2822 int ei_osabi, e_flags;
28e97307 2823
4be87837 2824 switch (bfd_get_flavour (info.abfd))
97e03143 2825 {
4be87837
DJ
2826 case bfd_target_aout_flavour:
2827 /* Assume it's an old APCS-style ABI. */
28e97307 2828 arm_abi = ARM_ABI_APCS;
4be87837 2829 break;
97e03143 2830
4be87837
DJ
2831 case bfd_target_coff_flavour:
2832 /* Assume it's an old APCS-style ABI. */
2833 /* XXX WinCE? */
28e97307
DJ
2834 arm_abi = ARM_ABI_APCS;
2835 break;
2836
2837 case bfd_target_elf_flavour:
2838 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
6b26d61a
MK
2839 e_flags = elf_elfheader (info.abfd)->e_flags;
2840
28e97307
DJ
2841 if (ei_osabi == ELFOSABI_ARM)
2842 {
2843 /* GNU tools used to use this value, but do not for EABI
6b26d61a
MK
2844 objects. There's nowhere to tag an EABI version
2845 anyway, so assume APCS. */
28e97307
DJ
2846 arm_abi = ARM_ABI_APCS;
2847 }
2848 else if (ei_osabi == ELFOSABI_NONE)
2849 {
6b26d61a 2850 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
28e97307
DJ
2851
2852 switch (eabi_ver)
2853 {
2854 case EF_ARM_EABI_UNKNOWN:
2855 /* Assume GNU tools. */
2856 arm_abi = ARM_ABI_APCS;
2857 break;
2858
2859 case EF_ARM_EABI_VER4:
625b5003 2860 case EF_ARM_EABI_VER5:
28e97307 2861 arm_abi = ARM_ABI_AAPCS;
2af48f68
PB
2862 /* EABI binaries default to VFP float ordering. */
2863 if (fp_model == ARM_FLOAT_AUTO)
2864 fp_model = ARM_FLOAT_SOFT_VFP;
28e97307
DJ
2865 break;
2866
2867 default:
6b26d61a 2868 /* Leave it as "auto". */
28e97307 2869 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
6b26d61a
MK
2870 break;
2871 }
2872 }
2873
2874 if (fp_model == ARM_FLOAT_AUTO)
2875 {
2876 int e_flags = elf_elfheader (info.abfd)->e_flags;
2877
2878 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
2879 {
2880 case 0:
2881 /* Leave it as "auto". Strictly speaking this case
2882 means FPA, but almost nobody uses that now, and
2883 many toolchains fail to set the appropriate bits
2884 for the floating-point model they use. */
2885 break;
2886 case EF_ARM_SOFT_FLOAT:
2887 fp_model = ARM_FLOAT_SOFT_FPA;
2888 break;
2889 case EF_ARM_VFP_FLOAT:
2890 fp_model = ARM_FLOAT_VFP;
2891 break;
2892 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
2893 fp_model = ARM_FLOAT_SOFT_VFP;
28e97307
DJ
2894 break;
2895 }
2896 }
4be87837 2897 break;
97e03143 2898
4be87837 2899 default:
28e97307 2900 /* Leave it as "auto". */
50ceaba5 2901 break;
97e03143
RE
2902 }
2903 }
2904
28e97307
DJ
2905 /* If there is already a candidate, use it. */
2906 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
2907 best_arch != NULL;
2908 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
2909 {
b8926edc
DJ
2910 if (arm_abi != ARM_ABI_AUTO
2911 && arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
28e97307
DJ
2912 continue;
2913
b8926edc
DJ
2914 if (fp_model != ARM_FLOAT_AUTO
2915 && fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
28e97307
DJ
2916 continue;
2917
2918 /* Found a match. */
2919 break;
2920 }
97e03143 2921
28e97307 2922 if (best_arch != NULL)
123dc839
DJ
2923 {
2924 if (tdesc_data != NULL)
2925 tdesc_data_cleanup (tdesc_data);
2926 return best_arch->gdbarch;
2927 }
28e97307
DJ
2928
2929 tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
97e03143
RE
2930 gdbarch = gdbarch_alloc (&info, tdep);
2931
28e97307
DJ
2932 /* Record additional information about the architecture we are defining.
2933 These are gdbarch discriminators, like the OSABI. */
2934 tdep->arm_abi = arm_abi;
2935 tdep->fp_model = fp_model;
ff6f572f 2936 tdep->have_fpa_registers = have_fpa_registers;
08216dd7
RE
2937
2938 /* Breakpoints. */
67255d04
RE
2939 switch (info.byte_order)
2940 {
2941 case BFD_ENDIAN_BIG:
66e810cd
RE
2942 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
2943 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
2944 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
2945 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
2946
67255d04
RE
2947 break;
2948
2949 case BFD_ENDIAN_LITTLE:
66e810cd
RE
2950 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
2951 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
2952 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
2953 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
2954
67255d04
RE
2955 break;
2956
2957 default:
2958 internal_error (__FILE__, __LINE__,
edefbb7c 2959 _("arm_gdbarch_init: bad byte order for float format"));
67255d04
RE
2960 }
2961
d7b486e7
RE
2962 /* On ARM targets char defaults to unsigned. */
2963 set_gdbarch_char_signed (gdbarch, 0);
2964
9df628e0 2965 /* This should be low enough for everything. */
97e03143 2966 tdep->lowest_pc = 0x20;
94c30b78 2967 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
97e03143 2968
7c00367c
MK
2969 /* The default, for both APCS and AAPCS, is to return small
2970 structures in registers. */
2971 tdep->struct_return = reg_struct_return;
2972
2dd604e7 2973 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
f53f0d0b 2974 set_gdbarch_frame_align (gdbarch, arm_frame_align);
39bbf761 2975
756fe439
DJ
2976 set_gdbarch_write_pc (gdbarch, arm_write_pc);
2977
148754e5 2978 /* Frame handling. */
a262aec2 2979 set_gdbarch_dummy_id (gdbarch, arm_dummy_id);
eb5492fa
DJ
2980 set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
2981 set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
2982
eb5492fa 2983 frame_base_set_default (gdbarch, &arm_normal_base);
148754e5 2984
34e8f22d
RE
2985 /* Address manipulation. */
2986 set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
2987 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
2988
34e8f22d
RE
2989 /* Advance PC across function entry code. */
2990 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
2991
190dce09
UW
2992 /* Skip trampolines. */
2993 set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub);
2994
34e8f22d
RE
2995 /* The stack grows downward. */
2996 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2997
2998 /* Breakpoint manipulation. */
2999 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
34e8f22d
RE
3000
3001 /* Information about registers, etc. */
0ba6dca9 3002 set_gdbarch_deprecated_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
34e8f22d
RE
3003 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
3004 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
ff6f572f 3005 set_gdbarch_num_regs (gdbarch, ARM_NUM_REGS);
7a5ea0d4 3006 set_gdbarch_register_type (gdbarch, arm_register_type);
34e8f22d 3007
ff6f572f
DJ
3008 /* This "info float" is FPA-specific. Use the generic version if we
3009 do not have FPA. */
3010 if (gdbarch_tdep (gdbarch)->have_fpa_registers)
3011 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
3012
26216b98 3013 /* Internal <-> external register number maps. */
ff6f572f
DJ
3014 set_gdbarch_dwarf_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
3015 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, arm_dwarf_reg_to_regnum);
26216b98
AC
3016 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
3017
34e8f22d
RE
3018 set_gdbarch_register_name (gdbarch, arm_register_name);
3019
3020 /* Returning results. */
2af48f68 3021 set_gdbarch_return_value (gdbarch, arm_return_value);
34e8f22d 3022
03d48a7d
RE
3023 /* Disassembly. */
3024 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
3025
34e8f22d
RE
3026 /* Minsymbol frobbing. */
3027 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
3028 set_gdbarch_coff_make_msymbol_special (gdbarch,
3029 arm_coff_make_msymbol_special);
3030
0d5de010
DJ
3031 /* Virtual tables. */
3032 set_gdbarch_vbit_in_delta (gdbarch, 1);
3033
97e03143 3034 /* Hook in the ABI-specific overrides, if they have been registered. */
4be87837 3035 gdbarch_init_osabi (info, gdbarch);
97e03143 3036
eb5492fa 3037 /* Add some default predicates. */
a262aec2
DJ
3038 frame_unwind_append_unwinder (gdbarch, &arm_stub_unwind);
3039 dwarf2_append_unwinders (gdbarch);
3040 frame_unwind_append_unwinder (gdbarch, &arm_prologue_unwind);
eb5492fa 3041
97e03143
RE
3042 /* Now we have tuned the configuration, set a few final things,
3043 based on what the OS ABI has told us. */
3044
b8926edc
DJ
3045 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
3046 binaries are always marked. */
3047 if (tdep->arm_abi == ARM_ABI_AUTO)
3048 tdep->arm_abi = ARM_ABI_APCS;
3049
3050 /* We used to default to FPA for generic ARM, but almost nobody
3051 uses that now, and we now provide a way for the user to force
3052 the model. So default to the most useful variant. */
3053 if (tdep->fp_model == ARM_FLOAT_AUTO)
3054 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
3055
9df628e0
RE
3056 if (tdep->jb_pc >= 0)
3057 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
3058
08216dd7 3059 /* Floating point sizes and format. */
8da61cc4 3060 set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
b8926edc 3061 if (tdep->fp_model == ARM_FLOAT_SOFT_FPA || tdep->fp_model == ARM_FLOAT_FPA)
08216dd7 3062 {
8da61cc4
DJ
3063 set_gdbarch_double_format
3064 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
3065 set_gdbarch_long_double_format
3066 (gdbarch, floatformats_ieee_double_littlebyte_bigword);
3067 }
3068 else
3069 {
3070 set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
3071 set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
08216dd7
RE
3072 }
3073
123dc839 3074 if (tdesc_data)
7cc46491 3075 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
123dc839
DJ
3076
3077 /* Add standard register aliases. We add aliases even for those
3078 nanes which are used by the current architecture - it's simpler,
3079 and does no harm, since nothing ever lists user registers. */
3080 for (i = 0; i < ARRAY_SIZE (arm_register_aliases); i++)
3081 user_reg_add (gdbarch, arm_register_aliases[i].name,
3082 value_of_arm_user_reg, &arm_register_aliases[i].regnum);
3083
39bbf761
RE
3084 return gdbarch;
3085}
3086
97e03143 3087static void
2af46ca0 3088arm_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
97e03143 3089{
2af46ca0 3090 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
97e03143
RE
3091
3092 if (tdep == NULL)
3093 return;
3094
edefbb7c 3095 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
97e03143
RE
3096 (unsigned long) tdep->lowest_pc);
3097}
3098
a78f21af
AC
3099extern initialize_file_ftype _initialize_arm_tdep; /* -Wmissing-prototypes */
3100
c906108c 3101void
ed9a39eb 3102_initialize_arm_tdep (void)
c906108c 3103{
bc90b915
FN
3104 struct ui_file *stb;
3105 long length;
26304000 3106 struct cmd_list_element *new_set, *new_show;
53904c9e
AC
3107 const char *setname;
3108 const char *setdesc;
4bd7b427 3109 const char *const *regnames;
bc90b915
FN
3110 int numregs, i, j;
3111 static char *helptext;
edefbb7c
AC
3112 char regdesc[1024], *rdptr = regdesc;
3113 size_t rest = sizeof (regdesc);
085dd6e6 3114
42cf1509 3115 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
97e03143 3116
70f80edf
JT
3117 /* Register an ELF OS ABI sniffer for ARM binaries. */
3118 gdbarch_register_osabi_sniffer (bfd_arch_arm,
3119 bfd_target_elf_flavour,
3120 arm_elf_osabi_sniffer);
3121
94c30b78 3122 /* Get the number of possible sets of register names defined in opcodes. */
afd7eef0
RE
3123 num_disassembly_options = get_arm_regname_num_options ();
3124
3125 /* Add root prefix command for all "set arm"/"show arm" commands. */
3126 add_prefix_cmd ("arm", no_class, set_arm_command,
edefbb7c 3127 _("Various ARM-specific commands."),
afd7eef0
RE
3128 &setarmcmdlist, "set arm ", 0, &setlist);
3129
3130 add_prefix_cmd ("arm", no_class, show_arm_command,
edefbb7c 3131 _("Various ARM-specific commands."),
afd7eef0 3132 &showarmcmdlist, "show arm ", 0, &showlist);
bc90b915 3133
94c30b78 3134 /* Sync the opcode insn printer with our register viewer. */
bc90b915 3135 parse_arm_disassembler_option ("reg-names-std");
c5aa993b 3136
eefe576e
AC
3137 /* Initialize the array that will be passed to
3138 add_setshow_enum_cmd(). */
afd7eef0
RE
3139 valid_disassembly_styles
3140 = xmalloc ((num_disassembly_options + 1) * sizeof (char *));
3141 for (i = 0; i < num_disassembly_options; i++)
bc90b915
FN
3142 {
3143 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
afd7eef0 3144 valid_disassembly_styles[i] = setname;
edefbb7c
AC
3145 length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
3146 rdptr += length;
3147 rest -= length;
123dc839
DJ
3148 /* When we find the default names, tell the disassembler to use
3149 them. */
bc90b915
FN
3150 if (!strcmp (setname, "std"))
3151 {
afd7eef0 3152 disassembly_style = setname;
bc90b915
FN
3153 set_arm_regname_option (i);
3154 }
3155 }
94c30b78 3156 /* Mark the end of valid options. */
afd7eef0 3157 valid_disassembly_styles[num_disassembly_options] = NULL;
c906108c 3158
edefbb7c
AC
3159 /* Create the help text. */
3160 stb = mem_fileopen ();
3161 fprintf_unfiltered (stb, "%s%s%s",
3162 _("The valid values are:\n"),
3163 regdesc,
3164 _("The default is \"std\"."));
bc90b915
FN
3165 helptext = ui_file_xstrdup (stb, &length);
3166 ui_file_delete (stb);
ed9a39eb 3167
edefbb7c
AC
3168 add_setshow_enum_cmd("disassembler", no_class,
3169 valid_disassembly_styles, &disassembly_style,
3170 _("Set the disassembly style."),
3171 _("Show the disassembly style."),
3172 helptext,
2c5b56ce 3173 set_disassembly_style_sfunc,
7915a72c 3174 NULL, /* FIXME: i18n: The disassembly style is \"%s\". */
7376b4c2 3175 &setarmcmdlist, &showarmcmdlist);
edefbb7c
AC
3176
3177 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
3178 _("Set usage of ARM 32-bit mode."),
3179 _("Show usage of ARM 32-bit mode."),
3180 _("When off, a 26-bit PC will be used."),
2c5b56ce 3181 NULL,
7915a72c 3182 NULL, /* FIXME: i18n: Usage of ARM 32-bit mode is %s. */
26304000 3183 &setarmcmdlist, &showarmcmdlist);
c906108c 3184
fd50bc42 3185 /* Add a command to allow the user to force the FPU model. */
edefbb7c
AC
3186 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
3187 _("Set the floating point type."),
3188 _("Show the floating point type."),
3189 _("auto - Determine the FP typefrom the OS-ABI.\n\
3190softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
3191fpa - FPA co-processor (GCC compiled).\n\
3192softvfp - Software FP with pure-endian doubles.\n\
3193vfp - VFP co-processor."),
edefbb7c 3194 set_fp_model_sfunc, show_fp_model,
7376b4c2 3195 &setarmcmdlist, &showarmcmdlist);
fd50bc42 3196
28e97307
DJ
3197 /* Add a command to allow the user to force the ABI. */
3198 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
3199 _("Set the ABI."),
3200 _("Show the ABI."),
3201 NULL, arm_set_abi, arm_show_abi,
3202 &setarmcmdlist, &showarmcmdlist);
3203
6529d2dd 3204 /* Debugging flag. */
edefbb7c
AC
3205 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
3206 _("Set ARM debugging."),
3207 _("Show ARM debugging."),
3208 _("When on, arm-specific debugging is enabled."),
2c5b56ce 3209 NULL,
7915a72c 3210 NULL, /* FIXME: i18n: "ARM debugging is %s. */
26304000 3211 &setdebuglist, &showdebuglist);
c906108c 3212}
This page took 0.787312 seconds and 4 git commands to generate.