gas/
[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
PB
2261{
2262 if (TYPE_CODE (valtype) == TYPE_CODE_STRUCT
2263 || TYPE_CODE (valtype) == TYPE_CODE_UNION
2264 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
2265 {
2266 if (arm_return_in_memory (gdbarch, valtype))
2267 return RETURN_VALUE_STRUCT_CONVENTION;
2268 }
2269
2270 if (writebuf)
2271 arm_store_return_value (valtype, regcache, writebuf);
2272
2273 if (readbuf)
2274 arm_extract_return_value (valtype, regcache, readbuf);
2275
2276 return RETURN_VALUE_REGISTER_CONVENTION;
2277}
2278
2279
9df628e0
RE
2280static int
2281arm_get_longjmp_target (CORE_ADDR *pc)
2282{
2283 CORE_ADDR jb_addr;
7a5ea0d4 2284 char buf[INT_REGISTER_SIZE];
9df628e0
RE
2285 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2286
2287 jb_addr = read_register (ARM_A1_REGNUM);
2288
2289 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
7a5ea0d4 2290 INT_REGISTER_SIZE))
9df628e0
RE
2291 return 0;
2292
7a5ea0d4 2293 *pc = extract_unsigned_integer (buf, INT_REGISTER_SIZE);
9df628e0
RE
2294 return 1;
2295}
2296
ed9a39eb 2297/* Return non-zero if the PC is inside a thumb call thunk. */
c906108c
SS
2298
2299int
ed9a39eb 2300arm_in_call_stub (CORE_ADDR pc, char *name)
c906108c
SS
2301{
2302 CORE_ADDR start_addr;
2303
ed9a39eb
JM
2304 /* Find the starting address of the function containing the PC. If
2305 the caller didn't give us a name, look it up at the same time. */
94c30b78
MS
2306 if (0 == find_pc_partial_function (pc, name ? NULL : &name,
2307 &start_addr, NULL))
c906108c
SS
2308 return 0;
2309
2310 return strncmp (name, "_call_via_r", 11) == 0;
2311}
2312
ed9a39eb
JM
2313/* If PC is in a Thumb call or return stub, return the address of the
2314 target PC, which is in a register. The thunk functions are called
2315 _called_via_xx, where x is the register name. The possible names
2316 are r0-r9, sl, fp, ip, sp, and lr. */
c906108c
SS
2317
2318CORE_ADDR
ed9a39eb 2319arm_skip_stub (CORE_ADDR pc)
c906108c 2320{
c5aa993b 2321 char *name;
c906108c
SS
2322 CORE_ADDR start_addr;
2323
2324 /* Find the starting address and name of the function containing the PC. */
2325 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
2326 return 0;
2327
2328 /* Call thunks always start with "_call_via_". */
2329 if (strncmp (name, "_call_via_", 10) == 0)
2330 {
ed9a39eb
JM
2331 /* Use the name suffix to determine which register contains the
2332 target PC. */
c5aa993b
JM
2333 static char *table[15] =
2334 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
2335 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
2336 };
c906108c
SS
2337 int regno;
2338
2339 for (regno = 0; regno <= 14; regno++)
2340 if (strcmp (&name[10], table[regno]) == 0)
2341 return read_register (regno);
2342 }
ed9a39eb 2343
c5aa993b 2344 return 0; /* not a stub */
c906108c
SS
2345}
2346
afd7eef0
RE
2347static void
2348set_arm_command (char *args, int from_tty)
2349{
edefbb7c
AC
2350 printf_unfiltered (_("\
2351\"set arm\" must be followed by an apporpriate subcommand.\n"));
afd7eef0
RE
2352 help_list (setarmcmdlist, "set arm ", all_commands, gdb_stdout);
2353}
2354
2355static void
2356show_arm_command (char *args, int from_tty)
2357{
26304000 2358 cmd_show_list (showarmcmdlist, from_tty, "");
afd7eef0
RE
2359}
2360
28e97307
DJ
2361static void
2362arm_update_current_architecture (void)
fd50bc42 2363{
28e97307 2364 struct gdbarch_info info;
fd50bc42 2365
28e97307
DJ
2366 /* If the current architecture is not ARM, we have nothing to do. */
2367 if (gdbarch_bfd_arch_info (current_gdbarch)->arch != bfd_arch_arm)
2368 return;
fd50bc42 2369
28e97307
DJ
2370 /* Update the architecture. */
2371 gdbarch_info_init (&info);
fd50bc42 2372
28e97307
DJ
2373 if (!gdbarch_update_p (info))
2374 internal_error (__FILE__, __LINE__, "could not update architecture");
fd50bc42
RE
2375}
2376
2377static void
2378set_fp_model_sfunc (char *args, int from_tty,
2379 struct cmd_list_element *c)
2380{
2381 enum arm_float_model fp_model;
2382
2383 for (fp_model = ARM_FLOAT_AUTO; fp_model != ARM_FLOAT_LAST; fp_model++)
2384 if (strcmp (current_fp_model, fp_model_strings[fp_model]) == 0)
2385 {
2386 arm_fp_model = fp_model;
2387 break;
2388 }
2389
2390 if (fp_model == ARM_FLOAT_LAST)
edefbb7c 2391 internal_error (__FILE__, __LINE__, _("Invalid fp model accepted: %s."),
fd50bc42
RE
2392 current_fp_model);
2393
28e97307 2394 arm_update_current_architecture ();
fd50bc42
RE
2395}
2396
2397static void
08546159
AC
2398show_fp_model (struct ui_file *file, int from_tty,
2399 struct cmd_list_element *c, const char *value)
fd50bc42
RE
2400{
2401 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2402
28e97307 2403 if (arm_fp_model == ARM_FLOAT_AUTO
fd50bc42 2404 && gdbarch_bfd_arch_info (current_gdbarch)->arch == bfd_arch_arm)
28e97307
DJ
2405 fprintf_filtered (file, _("\
2406The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
2407 fp_model_strings[tdep->fp_model]);
2408 else
2409 fprintf_filtered (file, _("\
2410The current ARM floating point model is \"%s\".\n"),
2411 fp_model_strings[arm_fp_model]);
2412}
2413
2414static void
2415arm_set_abi (char *args, int from_tty,
2416 struct cmd_list_element *c)
2417{
2418 enum arm_abi_kind arm_abi;
2419
2420 for (arm_abi = ARM_ABI_AUTO; arm_abi != ARM_ABI_LAST; arm_abi++)
2421 if (strcmp (arm_abi_string, arm_abi_strings[arm_abi]) == 0)
2422 {
2423 arm_abi_global = arm_abi;
2424 break;
2425 }
2426
2427 if (arm_abi == ARM_ABI_LAST)
2428 internal_error (__FILE__, __LINE__, _("Invalid ABI accepted: %s."),
2429 arm_abi_string);
2430
2431 arm_update_current_architecture ();
2432}
2433
2434static void
2435arm_show_abi (struct ui_file *file, int from_tty,
2436 struct cmd_list_element *c, const char *value)
2437{
2438 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2439
2440 if (arm_abi_global == ARM_ABI_AUTO
2441 && gdbarch_bfd_arch_info (current_gdbarch)->arch == bfd_arch_arm)
2442 fprintf_filtered (file, _("\
2443The current ARM ABI is \"auto\" (currently \"%s\").\n"),
2444 arm_abi_strings[tdep->arm_abi]);
2445 else
2446 fprintf_filtered (file, _("The current ARM ABI is \"%s\".\n"),
2447 arm_abi_string);
fd50bc42
RE
2448}
2449
afd7eef0
RE
2450/* If the user changes the register disassembly style used for info
2451 register and other commands, we have to also switch the style used
2452 in opcodes for disassembly output. This function is run in the "set
2453 arm disassembly" command, and does that. */
bc90b915
FN
2454
2455static void
afd7eef0 2456set_disassembly_style_sfunc (char *args, int from_tty,
bc90b915
FN
2457 struct cmd_list_element *c)
2458{
afd7eef0 2459 set_disassembly_style ();
bc90b915
FN
2460}
2461\f
966fbf70 2462/* Return the ARM register name corresponding to register I. */
a208b0cb 2463static const char *
34e8f22d 2464arm_register_name (int i)
966fbf70
RE
2465{
2466 return arm_register_names[i];
2467}
2468
bc90b915 2469static void
afd7eef0 2470set_disassembly_style (void)
bc90b915 2471{
4bd7b427 2472 const char *setname, *setdesc, *const *regnames;
bc90b915
FN
2473 int numregs, j;
2474
afd7eef0 2475 /* Find the style that the user wants in the opcodes table. */
bc90b915
FN
2476 int current = 0;
2477 numregs = get_arm_regnames (current, &setname, &setdesc, &regnames);
afd7eef0
RE
2478 while ((disassembly_style != setname)
2479 && (current < num_disassembly_options))
bc90b915
FN
2480 get_arm_regnames (++current, &setname, &setdesc, &regnames);
2481 current_option = current;
2482
94c30b78 2483 /* Fill our copy. */
bc90b915
FN
2484 for (j = 0; j < numregs; j++)
2485 arm_register_names[j] = (char *) regnames[j];
2486
94c30b78 2487 /* Adjust case. */
34e8f22d 2488 if (isupper (*regnames[ARM_PC_REGNUM]))
bc90b915 2489 {
34e8f22d
RE
2490 arm_register_names[ARM_FPS_REGNUM] = "FPS";
2491 arm_register_names[ARM_PS_REGNUM] = "CPSR";
bc90b915
FN
2492 }
2493 else
2494 {
34e8f22d
RE
2495 arm_register_names[ARM_FPS_REGNUM] = "fps";
2496 arm_register_names[ARM_PS_REGNUM] = "cpsr";
bc90b915
FN
2497 }
2498
94c30b78 2499 /* Synchronize the disassembler. */
bc90b915
FN
2500 set_arm_regname_option (current);
2501}
2502
082fc60d
RE
2503/* Test whether the coff symbol specific value corresponds to a Thumb
2504 function. */
2505
2506static int
2507coff_sym_is_thumb (int val)
2508{
2509 return (val == C_THUMBEXT ||
2510 val == C_THUMBSTAT ||
2511 val == C_THUMBEXTFUNC ||
2512 val == C_THUMBSTATFUNC ||
2513 val == C_THUMBLABEL);
2514}
2515
2516/* arm_coff_make_msymbol_special()
2517 arm_elf_make_msymbol_special()
2518
2519 These functions test whether the COFF or ELF symbol corresponds to
2520 an address in thumb code, and set a "special" bit in a minimal
2521 symbol to indicate that it does. */
2522
34e8f22d 2523static void
082fc60d
RE
2524arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
2525{
2526 /* Thumb symbols are of type STT_LOPROC, (synonymous with
2527 STT_ARM_TFUNC). */
2528 if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
2529 == STT_LOPROC)
2530 MSYMBOL_SET_SPECIAL (msym);
2531}
2532
34e8f22d 2533static void
082fc60d
RE
2534arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
2535{
2536 if (coff_sym_is_thumb (val))
2537 MSYMBOL_SET_SPECIAL (msym);
2538}
2539
756fe439
DJ
2540static void
2541arm_write_pc (CORE_ADDR pc, ptid_t ptid)
2542{
2543 write_register_pid (ARM_PC_REGNUM, pc, ptid);
2544
2545 /* If necessary, set the T bit. */
2546 if (arm_apcs_32)
2547 {
2548 CORE_ADDR val = read_register_pid (ARM_PS_REGNUM, ptid);
2549 if (arm_pc_is_thumb (pc))
2550 write_register_pid (ARM_PS_REGNUM, val | 0x20, ptid);
2551 else
2552 write_register_pid (ARM_PS_REGNUM, val & ~(CORE_ADDR) 0x20, ptid);
2553 }
2554}
97e03143 2555\f
70f80edf
JT
2556static enum gdb_osabi
2557arm_elf_osabi_sniffer (bfd *abfd)
97e03143 2558{
2af48f68 2559 unsigned int elfosabi;
70f80edf 2560 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
97e03143 2561
70f80edf 2562 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
97e03143 2563
28e97307
DJ
2564 if (elfosabi == ELFOSABI_ARM)
2565 /* GNU tools use this value. Check note sections in this case,
2566 as well. */
2567 bfd_map_over_sections (abfd,
2568 generic_elf_osabi_sniff_abi_tag_sections,
2569 &osabi);
97e03143 2570
28e97307 2571 /* Anything else will be handled by the generic ELF sniffer. */
70f80edf 2572 return osabi;
97e03143
RE
2573}
2574
70f80edf 2575\f
da3c6d4a
MS
2576/* Initialize the current architecture based on INFO. If possible,
2577 re-use an architecture from ARCHES, which is a list of
2578 architectures already created during this debugging session.
97e03143 2579
da3c6d4a
MS
2580 Called e.g. at program startup, when reading a core file, and when
2581 reading a binary file. */
97e03143 2582
39bbf761
RE
2583static struct gdbarch *
2584arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2585{
97e03143 2586 struct gdbarch_tdep *tdep;
39bbf761 2587 struct gdbarch *gdbarch;
28e97307
DJ
2588 struct gdbarch_list *best_arch;
2589 enum arm_abi_kind arm_abi = arm_abi_global;
2590 enum arm_float_model fp_model = arm_fp_model;
39bbf761 2591
28e97307
DJ
2592 /* If we have an object to base this architecture on, try to determine
2593 its ABI. */
39bbf761 2594
28e97307 2595 if (arm_abi == ARM_ABI_AUTO && info.abfd != NULL)
97e03143 2596 {
6b26d61a 2597 int ei_osabi, e_flags;
28e97307 2598
4be87837 2599 switch (bfd_get_flavour (info.abfd))
97e03143 2600 {
4be87837
DJ
2601 case bfd_target_aout_flavour:
2602 /* Assume it's an old APCS-style ABI. */
28e97307 2603 arm_abi = ARM_ABI_APCS;
4be87837 2604 break;
97e03143 2605
4be87837
DJ
2606 case bfd_target_coff_flavour:
2607 /* Assume it's an old APCS-style ABI. */
2608 /* XXX WinCE? */
28e97307
DJ
2609 arm_abi = ARM_ABI_APCS;
2610 break;
2611
2612 case bfd_target_elf_flavour:
2613 ei_osabi = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
6b26d61a
MK
2614 e_flags = elf_elfheader (info.abfd)->e_flags;
2615
28e97307
DJ
2616 if (ei_osabi == ELFOSABI_ARM)
2617 {
2618 /* GNU tools used to use this value, but do not for EABI
6b26d61a
MK
2619 objects. There's nowhere to tag an EABI version
2620 anyway, so assume APCS. */
28e97307
DJ
2621 arm_abi = ARM_ABI_APCS;
2622 }
2623 else if (ei_osabi == ELFOSABI_NONE)
2624 {
6b26d61a 2625 int eabi_ver = EF_ARM_EABI_VERSION (e_flags);
28e97307
DJ
2626
2627 switch (eabi_ver)
2628 {
2629 case EF_ARM_EABI_UNKNOWN:
2630 /* Assume GNU tools. */
2631 arm_abi = ARM_ABI_APCS;
2632 break;
2633
2634 case EF_ARM_EABI_VER4:
2635 arm_abi = ARM_ABI_AAPCS;
2af48f68
PB
2636 /* EABI binaries default to VFP float ordering. */
2637 if (fp_model == ARM_FLOAT_AUTO)
2638 fp_model = ARM_FLOAT_SOFT_VFP;
28e97307
DJ
2639 break;
2640
2641 default:
6b26d61a 2642 /* Leave it as "auto". */
28e97307 2643 warning (_("unknown ARM EABI version 0x%x"), eabi_ver);
6b26d61a
MK
2644 break;
2645 }
2646 }
2647
2648 if (fp_model == ARM_FLOAT_AUTO)
2649 {
2650 int e_flags = elf_elfheader (info.abfd)->e_flags;
2651
2652 switch (e_flags & (EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT))
2653 {
2654 case 0:
2655 /* Leave it as "auto". Strictly speaking this case
2656 means FPA, but almost nobody uses that now, and
2657 many toolchains fail to set the appropriate bits
2658 for the floating-point model they use. */
2659 break;
2660 case EF_ARM_SOFT_FLOAT:
2661 fp_model = ARM_FLOAT_SOFT_FPA;
2662 break;
2663 case EF_ARM_VFP_FLOAT:
2664 fp_model = ARM_FLOAT_VFP;
2665 break;
2666 case EF_ARM_SOFT_FLOAT | EF_ARM_VFP_FLOAT:
2667 fp_model = ARM_FLOAT_SOFT_VFP;
28e97307
DJ
2668 break;
2669 }
2670 }
4be87837 2671 break;
97e03143 2672
4be87837 2673 default:
28e97307 2674 /* Leave it as "auto". */
50ceaba5 2675 break;
97e03143
RE
2676 }
2677 }
2678
28e97307
DJ
2679 /* Now that we have inferred any architecture settings that we
2680 can, try to inherit from the last ARM ABI. */
4be87837 2681 if (arches != NULL)
28e97307
DJ
2682 {
2683 if (arm_abi == ARM_ABI_AUTO)
2684 arm_abi = gdbarch_tdep (arches->gdbarch)->arm_abi;
2685
2686 if (fp_model == ARM_FLOAT_AUTO)
2687 fp_model = gdbarch_tdep (arches->gdbarch)->fp_model;
2688 }
2689 else
2690 {
2691 /* There was no prior ARM architecture; fill in default values. */
2692
2693 if (arm_abi == ARM_ABI_AUTO)
2694 arm_abi = ARM_ABI_APCS;
2695
2696 /* We used to default to FPA for generic ARM, but almost nobody
2697 uses that now, and we now provide a way for the user to force
2698 the model. So default to the most useful variant. */
2699 if (fp_model == ARM_FLOAT_AUTO)
2700 fp_model = ARM_FLOAT_SOFT_FPA;
2701 }
2702
2703 /* If there is already a candidate, use it. */
2704 for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
2705 best_arch != NULL;
2706 best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
2707 {
2708 if (arm_abi != gdbarch_tdep (best_arch->gdbarch)->arm_abi)
2709 continue;
2710
2711 if (fp_model != gdbarch_tdep (best_arch->gdbarch)->fp_model)
2712 continue;
2713
2714 /* Found a match. */
2715 break;
2716 }
97e03143 2717
28e97307
DJ
2718 if (best_arch != NULL)
2719 return best_arch->gdbarch;
2720
2721 tdep = xcalloc (1, sizeof (struct gdbarch_tdep));
97e03143
RE
2722 gdbarch = gdbarch_alloc (&info, tdep);
2723
28e97307
DJ
2724 /* Record additional information about the architecture we are defining.
2725 These are gdbarch discriminators, like the OSABI. */
2726 tdep->arm_abi = arm_abi;
2727 tdep->fp_model = fp_model;
08216dd7
RE
2728
2729 /* Breakpoints. */
67255d04
RE
2730 switch (info.byte_order)
2731 {
2732 case BFD_ENDIAN_BIG:
66e810cd
RE
2733 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
2734 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
2735 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
2736 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
2737
67255d04
RE
2738 break;
2739
2740 case BFD_ENDIAN_LITTLE:
66e810cd
RE
2741 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
2742 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
2743 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
2744 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
2745
67255d04
RE
2746 break;
2747
2748 default:
2749 internal_error (__FILE__, __LINE__,
edefbb7c 2750 _("arm_gdbarch_init: bad byte order for float format"));
67255d04
RE
2751 }
2752
d7b486e7
RE
2753 /* On ARM targets char defaults to unsigned. */
2754 set_gdbarch_char_signed (gdbarch, 0);
2755
9df628e0 2756 /* This should be low enough for everything. */
97e03143 2757 tdep->lowest_pc = 0x20;
94c30b78 2758 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
97e03143 2759
2dd604e7 2760 set_gdbarch_push_dummy_call (gdbarch, arm_push_dummy_call);
f53f0d0b 2761 set_gdbarch_frame_align (gdbarch, arm_frame_align);
39bbf761 2762
756fe439
DJ
2763 set_gdbarch_write_pc (gdbarch, arm_write_pc);
2764
148754e5 2765 /* Frame handling. */
eb5492fa
DJ
2766 set_gdbarch_unwind_dummy_id (gdbarch, arm_unwind_dummy_id);
2767 set_gdbarch_unwind_pc (gdbarch, arm_unwind_pc);
2768 set_gdbarch_unwind_sp (gdbarch, arm_unwind_sp);
2769
eb5492fa 2770 frame_base_set_default (gdbarch, &arm_normal_base);
148754e5 2771
34e8f22d
RE
2772 /* Address manipulation. */
2773 set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
2774 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
2775
34e8f22d
RE
2776 /* Advance PC across function entry code. */
2777 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
2778
34e8f22d
RE
2779 /* The stack grows downward. */
2780 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2781
2782 /* Breakpoint manipulation. */
2783 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
34e8f22d
RE
2784
2785 /* Information about registers, etc. */
2786 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
0ba6dca9 2787 set_gdbarch_deprecated_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
34e8f22d
RE
2788 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
2789 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
9c04cab7 2790 set_gdbarch_deprecated_register_byte (gdbarch, arm_register_byte);
34e8f22d 2791 set_gdbarch_num_regs (gdbarch, NUM_GREGS + NUM_FREGS + NUM_SREGS);
7a5ea0d4 2792 set_gdbarch_register_type (gdbarch, arm_register_type);
34e8f22d 2793
26216b98
AC
2794 /* Internal <-> external register number maps. */
2795 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
2796
34e8f22d 2797 /* Integer registers are 4 bytes. */
b1e29e33 2798 set_gdbarch_deprecated_register_size (gdbarch, 4);
34e8f22d
RE
2799 set_gdbarch_register_name (gdbarch, arm_register_name);
2800
2801 /* Returning results. */
2af48f68 2802 set_gdbarch_return_value (gdbarch, arm_return_value);
34e8f22d
RE
2803
2804 /* Single stepping. */
2805 /* XXX For an RDI target we should ask the target if it can single-step. */
2806 set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
2807
03d48a7d
RE
2808 /* Disassembly. */
2809 set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm);
2810
34e8f22d
RE
2811 /* Minsymbol frobbing. */
2812 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
2813 set_gdbarch_coff_make_msymbol_special (gdbarch,
2814 arm_coff_make_msymbol_special);
2815
97e03143 2816 /* Hook in the ABI-specific overrides, if they have been registered. */
4be87837 2817 gdbarch_init_osabi (info, gdbarch);
97e03143 2818
eb5492fa 2819 /* Add some default predicates. */
909cf6ea 2820 frame_unwind_append_sniffer (gdbarch, arm_stub_unwind_sniffer);
842e1f1e 2821 frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
eb5492fa
DJ
2822 frame_unwind_append_sniffer (gdbarch, arm_prologue_unwind_sniffer);
2823
97e03143
RE
2824 /* Now we have tuned the configuration, set a few final things,
2825 based on what the OS ABI has told us. */
2826
9df628e0
RE
2827 if (tdep->jb_pc >= 0)
2828 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
2829
08216dd7
RE
2830 /* Floating point sizes and format. */
2831 switch (info.byte_order)
2832 {
2833 case BFD_ENDIAN_BIG:
2834 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
2835 set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_big);
2836 set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
08216dd7
RE
2837 break;
2838
2839 case BFD_ENDIAN_LITTLE:
2840 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
28e97307
DJ
2841 if (fp_model == ARM_FLOAT_SOFT_FPA || fp_model == ARM_FLOAT_FPA)
2842 {
2843 set_gdbarch_double_format
2844 (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
2845 set_gdbarch_long_double_format
2846 (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
2847 }
2848 else
2849 {
2850 set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_little);
2851 set_gdbarch_long_double_format (gdbarch,
2852 &floatformat_ieee_double_little);
2853 }
08216dd7
RE
2854 break;
2855
2856 default:
2857 internal_error (__FILE__, __LINE__,
edefbb7c 2858 _("arm_gdbarch_init: bad byte order for float format"));
08216dd7
RE
2859 }
2860
39bbf761
RE
2861 return gdbarch;
2862}
2863
97e03143
RE
2864static void
2865arm_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
2866{
2867 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2868
2869 if (tdep == NULL)
2870 return;
2871
edefbb7c 2872 fprintf_unfiltered (file, _("arm_dump_tdep: Lowest pc = 0x%lx"),
97e03143
RE
2873 (unsigned long) tdep->lowest_pc);
2874}
2875
a78f21af
AC
2876extern initialize_file_ftype _initialize_arm_tdep; /* -Wmissing-prototypes */
2877
c906108c 2878void
ed9a39eb 2879_initialize_arm_tdep (void)
c906108c 2880{
bc90b915
FN
2881 struct ui_file *stb;
2882 long length;
26304000 2883 struct cmd_list_element *new_set, *new_show;
53904c9e
AC
2884 const char *setname;
2885 const char *setdesc;
4bd7b427 2886 const char *const *regnames;
bc90b915
FN
2887 int numregs, i, j;
2888 static char *helptext;
edefbb7c
AC
2889 char regdesc[1024], *rdptr = regdesc;
2890 size_t rest = sizeof (regdesc);
085dd6e6 2891
42cf1509 2892 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
97e03143 2893
70f80edf
JT
2894 /* Register an ELF OS ABI sniffer for ARM binaries. */
2895 gdbarch_register_osabi_sniffer (bfd_arch_arm,
2896 bfd_target_elf_flavour,
2897 arm_elf_osabi_sniffer);
2898
94c30b78 2899 /* Get the number of possible sets of register names defined in opcodes. */
afd7eef0
RE
2900 num_disassembly_options = get_arm_regname_num_options ();
2901
2902 /* Add root prefix command for all "set arm"/"show arm" commands. */
2903 add_prefix_cmd ("arm", no_class, set_arm_command,
edefbb7c 2904 _("Various ARM-specific commands."),
afd7eef0
RE
2905 &setarmcmdlist, "set arm ", 0, &setlist);
2906
2907 add_prefix_cmd ("arm", no_class, show_arm_command,
edefbb7c 2908 _("Various ARM-specific commands."),
afd7eef0 2909 &showarmcmdlist, "show arm ", 0, &showlist);
bc90b915 2910
94c30b78 2911 /* Sync the opcode insn printer with our register viewer. */
bc90b915 2912 parse_arm_disassembler_option ("reg-names-std");
c5aa993b 2913
eefe576e
AC
2914 /* Initialize the array that will be passed to
2915 add_setshow_enum_cmd(). */
afd7eef0
RE
2916 valid_disassembly_styles
2917 = xmalloc ((num_disassembly_options + 1) * sizeof (char *));
2918 for (i = 0; i < num_disassembly_options; i++)
bc90b915
FN
2919 {
2920 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
afd7eef0 2921 valid_disassembly_styles[i] = setname;
edefbb7c
AC
2922 length = snprintf (rdptr, rest, "%s - %s\n", setname, setdesc);
2923 rdptr += length;
2924 rest -= length;
94c30b78 2925 /* Copy the default names (if found) and synchronize disassembler. */
bc90b915
FN
2926 if (!strcmp (setname, "std"))
2927 {
afd7eef0 2928 disassembly_style = setname;
bc90b915
FN
2929 current_option = i;
2930 for (j = 0; j < numregs; j++)
2931 arm_register_names[j] = (char *) regnames[j];
2932 set_arm_regname_option (i);
2933 }
2934 }
94c30b78 2935 /* Mark the end of valid options. */
afd7eef0 2936 valid_disassembly_styles[num_disassembly_options] = NULL;
c906108c 2937
edefbb7c
AC
2938 /* Create the help text. */
2939 stb = mem_fileopen ();
2940 fprintf_unfiltered (stb, "%s%s%s",
2941 _("The valid values are:\n"),
2942 regdesc,
2943 _("The default is \"std\"."));
bc90b915
FN
2944 helptext = ui_file_xstrdup (stb, &length);
2945 ui_file_delete (stb);
ed9a39eb 2946
edefbb7c
AC
2947 add_setshow_enum_cmd("disassembler", no_class,
2948 valid_disassembly_styles, &disassembly_style,
2949 _("Set the disassembly style."),
2950 _("Show the disassembly style."),
2951 helptext,
2c5b56ce 2952 set_disassembly_style_sfunc,
7915a72c 2953 NULL, /* FIXME: i18n: The disassembly style is \"%s\". */
7376b4c2 2954 &setarmcmdlist, &showarmcmdlist);
edefbb7c
AC
2955
2956 add_setshow_boolean_cmd ("apcs32", no_class, &arm_apcs_32,
2957 _("Set usage of ARM 32-bit mode."),
2958 _("Show usage of ARM 32-bit mode."),
2959 _("When off, a 26-bit PC will be used."),
2c5b56ce 2960 NULL,
7915a72c 2961 NULL, /* FIXME: i18n: Usage of ARM 32-bit mode is %s. */
26304000 2962 &setarmcmdlist, &showarmcmdlist);
c906108c 2963
fd50bc42 2964 /* Add a command to allow the user to force the FPU model. */
edefbb7c
AC
2965 add_setshow_enum_cmd ("fpu", no_class, fp_model_strings, &current_fp_model,
2966 _("Set the floating point type."),
2967 _("Show the floating point type."),
2968 _("auto - Determine the FP typefrom the OS-ABI.\n\
2969softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
2970fpa - FPA co-processor (GCC compiled).\n\
2971softvfp - Software FP with pure-endian doubles.\n\
2972vfp - VFP co-processor."),
edefbb7c 2973 set_fp_model_sfunc, show_fp_model,
7376b4c2 2974 &setarmcmdlist, &showarmcmdlist);
fd50bc42 2975
28e97307
DJ
2976 /* Add a command to allow the user to force the ABI. */
2977 add_setshow_enum_cmd ("abi", class_support, arm_abi_strings, &arm_abi_string,
2978 _("Set the ABI."),
2979 _("Show the ABI."),
2980 NULL, arm_set_abi, arm_show_abi,
2981 &setarmcmdlist, &showarmcmdlist);
2982
6529d2dd 2983 /* Debugging flag. */
edefbb7c
AC
2984 add_setshow_boolean_cmd ("arm", class_maintenance, &arm_debug,
2985 _("Set ARM debugging."),
2986 _("Show ARM debugging."),
2987 _("When on, arm-specific debugging is enabled."),
2c5b56ce 2988 NULL,
7915a72c 2989 NULL, /* FIXME: i18n: "ARM debugging is %s. */
26304000 2990 &setdebuglist, &showdebuglist);
c906108c 2991}
This page took 0.603777 seconds and 4 git commands to generate.