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