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