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