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