`template' isn't a very good name for a variable.
[deliverable/binutils-gdb.git] / gdb / arm-tdep.c
CommitLineData
ed9a39eb 1/* Common target dependent code for GDB on ARM systems.
da59e081 2 Copyright 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000
c906108c
SS
3 Free Software Foundation, Inc.
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
SS
21
22#include "defs.h"
23#include "frame.h"
24#include "inferior.h"
25#include "gdbcmd.h"
26#include "gdbcore.h"
27#include "symfile.h"
28#include "gdb_string.h"
29#include "coff/internal.h" /* Internal format of COFF symbols in BFD */
e8b09175 30#include "dis-asm.h" /* For register flavors. */
30f6df08 31#include <ctype.h> /* for isupper () */
c906108c 32
ed9a39eb
JM
33extern void _initialize_arm_tdep (void);
34
bc90b915
FN
35/* Number of different reg name sets (options). */
36static int num_flavor_options;
37
38/* We have more registers than the disassembler as gdb can print the value
39 of special registers as well.
40 The general register names are overwritten by whatever is being used by
41 the disassembler at the moment. We also adjust the case of cpsr and fps. */
42
43/* Initial value: Register names used in ARM's ISA documentation. */
44static char * arm_register_name_strings[] =
da59e081
JM
45{"r0", "r1", "r2", "r3", /* 0 1 2 3 */
46 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
47 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
48 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
49 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
50 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
bc90b915
FN
51 "fps", "cpsr" }; /* 24 25 */
52char **arm_register_names = arm_register_name_strings;
ed9a39eb 53
bc90b915 54/* Valid register name flavors. */
53904c9e 55static const char **valid_flavors;
ed9a39eb 56
bc90b915 57/* Disassembly flavor to use. Default to "std" register names. */
53904c9e 58static const char *disassembly_flavor;
bc90b915 59static int current_option; /* Index to that option in the opcodes table. */
96baa820 60
ed9a39eb
JM
61/* This is used to keep the bfd arch_info in sync with the disassembly
62 flavor. */
63static void set_disassembly_flavor_sfunc(char *, int,
64 struct cmd_list_element *);
65static void set_disassembly_flavor (void);
66
67static void convert_from_extended (void *ptr, void *dbl);
68
69/* Define other aspects of the stack frame. We keep the offsets of
70 all saved registers, 'cause we need 'em a lot! We also keep the
71 current size of the stack frame, and the offset of the frame
72 pointer from the stack pointer (for frameless functions, and when
73 we're still in the prologue of a function with a frame) */
74
75struct frame_extra_info
76 {
77 struct frame_saved_regs fsr;
78 int framesize;
79 int frameoffset;
80 int framereg;
81 };
82
bc90b915
FN
83/* Addresses for calling Thumb functions have the bit 0 set.
84 Here are some macros to test, set, or clear bit 0 of addresses. */
85#define IS_THUMB_ADDR(addr) ((addr) & 1)
86#define MAKE_THUMB_ADDR(addr) ((addr) | 1)
87#define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
88
8b93c638
JM
89#define SWAP_TARGET_AND_HOST(buffer,len) \
90 do \
91 { \
92 if (TARGET_BYTE_ORDER != HOST_BYTE_ORDER) \
93 { \
94 char tmp; \
95 char *p = (char *)(buffer); \
96 char *q = ((char *)(buffer)) + len - 1; \
97 for (; p < q; p++, q--) \
98 { \
99 tmp = *q; \
100 *q = *p; \
101 *p = tmp; \
102 } \
103 } \
104 } \
105 while (0)
106
ed9a39eb
JM
107/* Will a function return an aggregate type in memory or in a
108 register? Return 0 if an aggregate type can be returned in a
109 register, 1 if it must be returned in memory. */
085dd6e6 110
c906108c 111int
ed9a39eb 112arm_use_struct_convention (int gcc_p, struct type *type)
c906108c 113{
ed9a39eb
JM
114 int nRc;
115 register enum type_code code;
116
117 /* In the ARM ABI, "integer" like aggregate types are returned in
118 registers. For an aggregate type to be integer like, its size
119 must be less than or equal to REGISTER_SIZE and the offset of
120 each addressable subfield must be zero. Note that bit fields are
121 not addressable, and all addressable subfields of unions always
122 start at offset zero.
123
124 This function is based on the behaviour of GCC 2.95.1.
125 See: gcc/arm.c: arm_return_in_memory() for details.
126
127 Note: All versions of GCC before GCC 2.95.2 do not set up the
128 parameters correctly for a function returning the following
129 structure: struct { float f;}; This should be returned in memory,
130 not a register. Richard Earnshaw sent me a patch, but I do not
131 know of any way to detect if a function like the above has been
132 compiled with the correct calling convention. */
133
134 /* All aggregate types that won't fit in a register must be returned
135 in memory. */
136 if (TYPE_LENGTH (type) > REGISTER_SIZE)
137 {
138 return 1;
139 }
140
141 /* The only aggregate types that can be returned in a register are
142 structs and unions. Arrays must be returned in memory. */
143 code = TYPE_CODE (type);
144 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
145 {
146 return 1;
147 }
148
149 /* Assume all other aggregate types can be returned in a register.
150 Run a check for structures, unions and arrays. */
151 nRc = 0;
152
153 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
154 {
155 int i;
156 /* Need to check if this struct/union is "integer" like. For
157 this to be true, its size must be less than or equal to
158 REGISTER_SIZE and the offset of each addressable subfield
159 must be zero. Note that bit fields are not addressable, and
160 unions always start at offset zero. If any of the subfields
161 is a floating point type, the struct/union cannot be an
162 integer type. */
163
164 /* For each field in the object, check:
165 1) Is it FP? --> yes, nRc = 1;
166 2) Is it addressable (bitpos != 0) and
167 not packed (bitsize == 0)?
168 --> yes, nRc = 1
169 */
170
171 for (i = 0; i < TYPE_NFIELDS (type); i++)
172 {
173 enum type_code field_type_code;
174 field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i));
175
176 /* Is it a floating point type field? */
177 if (field_type_code == TYPE_CODE_FLT)
178 {
179 nRc = 1;
180 break;
181 }
182
183 /* If bitpos != 0, then we have to care about it. */
184 if (TYPE_FIELD_BITPOS (type, i) != 0)
185 {
186 /* Bitfields are not addressable. If the field bitsize is
187 zero, then the field is not packed. Hence it cannot be
188 a bitfield or any other packed type. */
189 if (TYPE_FIELD_BITSIZE (type, i) == 0)
190 {
191 nRc = 1;
192 break;
193 }
194 }
195 }
196 }
197
198 return nRc;
c906108c
SS
199}
200
201int
ed9a39eb 202arm_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
c906108c 203{
c906108c
SS
204 return (chain != 0 && (FRAME_SAVED_PC (thisframe) >= LOWEST_PC));
205}
206
207/* Set to true if the 32-bit mode is in use. */
208
209int arm_apcs_32 = 1;
210
ed9a39eb
JM
211/* Flag set by arm_fix_call_dummy that tells whether the target
212 function is a Thumb function. This flag is checked by
213 arm_push_arguments. FIXME: Change the PUSH_ARGUMENTS macro (and
214 its use in valops.c) to pass the function address as an additional
215 parameter. */
c906108c
SS
216
217static int target_is_thumb;
218
ed9a39eb
JM
219/* Flag set by arm_fix_call_dummy that tells whether the calling
220 function is a Thumb function. This flag is checked by
221 arm_pc_is_thumb and arm_call_dummy_breakpoint_offset. */
c906108c
SS
222
223static int caller_is_thumb;
224
ed9a39eb
JM
225/* Determine if the program counter specified in MEMADDR is in a Thumb
226 function. */
c906108c
SS
227
228int
ed9a39eb 229arm_pc_is_thumb (bfd_vma memaddr)
c906108c 230{
c5aa993b 231 struct minimal_symbol *sym;
c906108c 232
ed9a39eb 233 /* If bit 0 of the address is set, assume this is a Thumb address. */
c906108c
SS
234 if (IS_THUMB_ADDR (memaddr))
235 return 1;
236
ed9a39eb 237 /* Thumb functions have a "special" bit set in minimal symbols. */
c906108c
SS
238 sym = lookup_minimal_symbol_by_pc (memaddr);
239 if (sym)
240 {
c5aa993b 241 return (MSYMBOL_IS_SPECIAL (sym));
c906108c
SS
242 }
243 else
ed9a39eb
JM
244 {
245 return 0;
246 }
c906108c
SS
247}
248
ed9a39eb
JM
249/* Determine if the program counter specified in MEMADDR is in a call
250 dummy being called from a Thumb function. */
c906108c
SS
251
252int
ed9a39eb 253arm_pc_is_thumb_dummy (bfd_vma memaddr)
c906108c 254{
c5aa993b 255 CORE_ADDR sp = read_sp ();
c906108c 256
dfcd3bfb
JM
257 /* FIXME: Until we switch for the new call dummy macros, this heuristic
258 is the best we can do. We are trying to determine if the pc is on
259 the stack, which (hopefully) will only happen in a call dummy.
260 We hope the current stack pointer is not so far alway from the dummy
261 frame location (true if we have not pushed large data structures or
262 gone too many levels deep) and that our 1024 is not enough to consider
263 code regions as part of the stack (true for most practical purposes) */
264 if (PC_IN_CALL_DUMMY (memaddr, sp, sp + 1024))
c906108c
SS
265 return caller_is_thumb;
266 else
267 return 0;
268}
269
270CORE_ADDR
ed9a39eb 271arm_addr_bits_remove (CORE_ADDR val)
c906108c
SS
272{
273 if (arm_pc_is_thumb (val))
274 return (val & (arm_apcs_32 ? 0xfffffffe : 0x03fffffe));
275 else
276 return (val & (arm_apcs_32 ? 0xfffffffc : 0x03fffffc));
277}
278
279CORE_ADDR
ed9a39eb 280arm_saved_pc_after_call (struct frame_info *frame)
c906108c
SS
281{
282 return ADDR_BITS_REMOVE (read_register (LR_REGNUM));
283}
284
392a587b 285int
ed9a39eb 286arm_frameless_function_invocation (struct frame_info *fi)
392a587b 287{
392a587b 288 CORE_ADDR func_start, after_prologue;
96baa820 289 int frameless;
ed9a39eb 290
392a587b 291 func_start = (get_pc_function_start ((fi)->pc) + FUNCTION_START_OFFSET);
7be570e7 292 after_prologue = SKIP_PROLOGUE (func_start);
ed9a39eb 293
96baa820 294 /* There are some frameless functions whose first two instructions
ed9a39eb
JM
295 follow the standard APCS form, in which case after_prologue will
296 be func_start + 8. */
297
96baa820 298 frameless = (after_prologue < func_start + 12);
392a587b
JM
299 return frameless;
300}
301
c906108c 302/* A typical Thumb prologue looks like this:
c5aa993b
JM
303 push {r7, lr}
304 add sp, sp, #-28
305 add r7, sp, #12
c906108c 306 Sometimes the latter instruction may be replaced by:
da59e081
JM
307 mov r7, sp
308
309 or like this:
310 push {r7, lr}
311 mov r7, sp
312 sub sp, #12
313
314 or, on tpcs, like this:
315 sub sp,#16
316 push {r7, lr}
317 (many instructions)
318 mov r7, sp
319 sub sp, #12
320
321 There is always one instruction of three classes:
322 1 - push
323 2 - setting of r7
324 3 - adjusting of sp
325
326 When we have found at least one of each class we are done with the prolog.
327 Note that the "sub sp, #NN" before the push does not count.
ed9a39eb 328 */
c906108c
SS
329
330static CORE_ADDR
c7885828 331thumb_skip_prologue (CORE_ADDR pc, CORE_ADDR func_end)
c906108c
SS
332{
333 CORE_ADDR current_pc;
da59e081
JM
334 int findmask = 0; /* findmask:
335 bit 0 - push { rlist }
336 bit 1 - mov r7, sp OR add r7, sp, #imm (setting of r7)
337 bit 2 - sub sp, #simm OR add sp, #simm (adjusting of sp)
338 */
c906108c 339
c7885828 340 for (current_pc = pc; current_pc + 2 < func_end && current_pc < pc + 40; current_pc += 2)
c906108c
SS
341 {
342 unsigned short insn = read_memory_unsigned_integer (current_pc, 2);
343
da59e081
JM
344 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
345 {
346 findmask |= 1; /* push found */
347 }
348 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR sub sp, #simm */
349 {
350 if ((findmask & 1) == 0) /* before push ? */
351 continue;
352 else
353 findmask |= 4; /* add/sub sp found */
354 }
355 else if ((insn & 0xff00) == 0xaf00) /* add r7, sp, #imm */
356 {
357 findmask |= 2; /* setting of r7 found */
358 }
359 else if (insn == 0x466f) /* mov r7, sp */
360 {
361 findmask |= 2; /* setting of r7 found */
362 }
363 else
364 continue; /* something in the prolog that we don't care about or some
365 instruction from outside the prolog scheduled here for optimization */
c906108c
SS
366 }
367
368 return current_pc;
369}
370
ed9a39eb
JM
371/* The APCS (ARM Procedure Call Standard) defines the following
372 prologue:
c906108c 373
c5aa993b
JM
374 mov ip, sp
375 [stmfd sp!, {a1,a2,a3,a4}]
376 stmfd sp!, {...,fp,ip,lr,pc}
ed9a39eb
JM
377 [stfe f7, [sp, #-12]!]
378 [stfe f6, [sp, #-12]!]
379 [stfe f5, [sp, #-12]!]
380 [stfe f4, [sp, #-12]!]
381 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
c906108c
SS
382
383CORE_ADDR
ed9a39eb 384arm_skip_prologue (CORE_ADDR pc)
c906108c
SS
385{
386 unsigned long inst;
387 CORE_ADDR skip_pc;
388 CORE_ADDR func_addr, func_end;
389 struct symtab_and_line sal;
390
96baa820 391 /* See what the symbol table says. */
ed9a39eb 392
c5aa993b 393 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
c906108c
SS
394 {
395 sal = find_pc_line (func_addr, 0);
96baa820 396 if ((sal.line != 0) && (sal.end < func_end))
c906108c
SS
397 return sal.end;
398 }
399
400 /* Check if this is Thumb code. */
401 if (arm_pc_is_thumb (pc))
c7885828 402 return thumb_skip_prologue (pc, func_end);
c906108c
SS
403
404 /* Can't find the prologue end in the symbol table, try it the hard way
405 by disassembling the instructions. */
406 skip_pc = pc;
407 inst = read_memory_integer (skip_pc, 4);
c5aa993b 408 if (inst != 0xe1a0c00d) /* mov ip, sp */
c906108c
SS
409 return pc;
410
411 skip_pc += 4;
412 inst = read_memory_integer (skip_pc, 4);
c5aa993b 413 if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */
c906108c
SS
414 {
415 skip_pc += 4;
416 inst = read_memory_integer (skip_pc, 4);
417 }
418
c5aa993b 419 if ((inst & 0xfffff800) != 0xe92dd800) /* stmfd sp!,{...,fp,ip,lr,pc} */
c906108c
SS
420 return pc;
421
422 skip_pc += 4;
423 inst = read_memory_integer (skip_pc, 4);
424
425 /* Any insns after this point may float into the code, if it makes
ed9a39eb
JM
426 for better instruction scheduling, so we skip them only if we
427 find them, but still consdier the function to be frame-ful. */
c906108c 428
ed9a39eb
JM
429 /* We may have either one sfmfd instruction here, or several stfe
430 insns, depending on the version of floating point code we
431 support. */
c5aa993b 432 if ((inst & 0xffbf0fff) == 0xec2d0200) /* sfmfd fn, <cnt>, [sp]! */
c906108c
SS
433 {
434 skip_pc += 4;
435 inst = read_memory_integer (skip_pc, 4);
436 }
437 else
438 {
c5aa993b
JM
439 while ((inst & 0xffff8fff) == 0xed6d0103) /* stfe fn, [sp, #-12]! */
440 {
441 skip_pc += 4;
442 inst = read_memory_integer (skip_pc, 4);
443 }
c906108c
SS
444 }
445
c5aa993b 446 if ((inst & 0xfffff000) == 0xe24cb000) /* sub fp, ip, #nn */
c906108c
SS
447 skip_pc += 4;
448
449 return skip_pc;
450}
c5aa993b 451/* *INDENT-OFF* */
c906108c
SS
452/* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
453 This function decodes a Thumb function prologue to determine:
454 1) the size of the stack frame
455 2) which registers are saved on it
456 3) the offsets of saved regs
457 4) the offset from the stack pointer to the frame pointer
458 This information is stored in the "extra" fields of the frame_info.
459
da59e081
JM
460 A typical Thumb function prologue would create this stack frame
461 (offsets relative to FP)
c906108c
SS
462 old SP -> 24 stack parameters
463 20 LR
464 16 R7
465 R7 -> 0 local variables (16 bytes)
466 SP -> -12 additional stack space (12 bytes)
467 The frame size would thus be 36 bytes, and the frame offset would be
da59e081
JM
468 12 bytes. The frame register is R7.
469
470 The comments for thumb_skip_prolog() describe the algorithm we use to detect
471 the end of the prolog */
c5aa993b
JM
472/* *INDENT-ON* */
473
c906108c 474static void
ed9a39eb 475thumb_scan_prologue (struct frame_info *fi)
c906108c
SS
476{
477 CORE_ADDR prologue_start;
478 CORE_ADDR prologue_end;
479 CORE_ADDR current_pc;
c5aa993b 480 int saved_reg[16]; /* which register has been copied to register n? */
da59e081
JM
481 int findmask = 0; /* findmask:
482 bit 0 - push { rlist }
483 bit 1 - mov r7, sp OR add r7, sp, #imm (setting of r7)
484 bit 2 - sub sp, #simm OR add sp, #simm (adjusting of sp)
485 */
c5aa993b 486 int i;
c906108c 487
c5aa993b 488 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
c906108c
SS
489 {
490 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
491
c5aa993b 492 if (sal.line == 0) /* no line info, use current PC */
c906108c
SS
493 prologue_end = fi->pc;
494 else if (sal.end < prologue_end) /* next line begins after fn end */
c5aa993b 495 prologue_end = sal.end; /* (probably means no prologue) */
c906108c
SS
496 }
497 else
c5aa993b
JM
498 prologue_end = prologue_start + 40; /* We're in the boondocks: allow for */
499 /* 16 pushes, an add, and "mv fp,sp" */
c906108c
SS
500
501 prologue_end = min (prologue_end, fi->pc);
502
503 /* Initialize the saved register map. When register H is copied to
504 register L, we will put H in saved_reg[L]. */
505 for (i = 0; i < 16; i++)
506 saved_reg[i] = i;
507
508 /* Search the prologue looking for instructions that set up the
da59e081
JM
509 frame pointer, adjust the stack pointer, and save registers.
510 Do this until all basic prolog instructions are found. */
c906108c
SS
511
512 fi->framesize = 0;
da59e081
JM
513 for (current_pc = prologue_start;
514 (current_pc < prologue_end) && ((findmask & 7) != 7);
515 current_pc += 2)
c906108c
SS
516 {
517 unsigned short insn;
518 int regno;
519 int offset;
520
521 insn = read_memory_unsigned_integer (current_pc, 2);
522
c5aa993b 523 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
c906108c 524 {
da59e081
JM
525 int mask;
526 findmask |= 1; /* push found */
c906108c
SS
527 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
528 whether to save LR (R14). */
da59e081 529 mask = (insn & 0xff) | ((insn & 0x100) << 6);
c906108c
SS
530
531 /* Calculate offsets of saved R0-R7 and LR. */
532 for (regno = LR_REGNUM; regno >= 0; regno--)
533 if (mask & (1 << regno))
c5aa993b 534 {
c906108c
SS
535 fi->framesize += 4;
536 fi->fsr.regs[saved_reg[regno]] = -(fi->framesize);
537 saved_reg[regno] = regno; /* reset saved register map */
538 }
539 }
da59e081 540 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR sub sp, #simm */
c906108c 541 {
da59e081
JM
542 if ((findmask & 1) == 0) /* before push ? */
543 continue;
544 else
545 findmask |= 4; /* add/sub sp found */
546
c5aa993b 547 offset = (insn & 0x7f) << 2; /* get scaled offset */
da59e081
JM
548 if (insn & 0x80) /* is it signed? (==subtracting) */
549 {
550 fi->frameoffset += offset;
551 offset = -offset;
552 }
c906108c
SS
553 fi->framesize -= offset;
554 }
555 else if ((insn & 0xff00) == 0xaf00) /* add r7, sp, #imm */
556 {
da59e081 557 findmask |= 2; /* setting of r7 found */
c906108c 558 fi->framereg = THUMB_FP_REGNUM;
c5aa993b 559 fi->frameoffset = (insn & 0xff) << 2; /* get scaled offset */
c906108c 560 }
da59e081 561 else if (insn == 0x466f) /* mov r7, sp */
c906108c 562 {
da59e081 563 findmask |= 2; /* setting of r7 found */
c906108c
SS
564 fi->framereg = THUMB_FP_REGNUM;
565 fi->frameoffset = 0;
566 saved_reg[THUMB_FP_REGNUM] = SP_REGNUM;
567 }
568 else if ((insn & 0xffc0) == 0x4640) /* mov r0-r7, r8-r15 */
569 {
c5aa993b 570 int lo_reg = insn & 7; /* dest. register (r0-r7) */
c906108c 571 int hi_reg = ((insn >> 3) & 7) + 8; /* source register (r8-15) */
c5aa993b 572 saved_reg[lo_reg] = hi_reg; /* remember hi reg was saved */
c906108c
SS
573 }
574 else
da59e081
JM
575 continue; /* something in the prolog that we don't care about or some
576 instruction from outside the prolog scheduled here for optimization */
c906108c
SS
577 }
578}
579
ed9a39eb
JM
580/* Check if prologue for this frame's PC has already been scanned. If
581 it has, copy the relevant information about that prologue and
c906108c
SS
582 return non-zero. Otherwise do not copy anything and return zero.
583
584 The information saved in the cache includes:
c5aa993b
JM
585 * the frame register number;
586 * the size of the stack frame;
587 * the offsets of saved regs (relative to the old SP); and
588 * the offset from the stack pointer to the frame pointer
c906108c 589
ed9a39eb
JM
590 The cache contains only one entry, since this is adequate for the
591 typical sequence of prologue scan requests we get. When performing
592 a backtrace, GDB will usually ask to scan the same function twice
593 in a row (once to get the frame chain, and once to fill in the
594 extra frame information). */
c906108c
SS
595
596static struct frame_info prologue_cache;
597
598static int
ed9a39eb 599check_prologue_cache (struct frame_info *fi)
c906108c
SS
600{
601 int i;
602
603 if (fi->pc == prologue_cache.pc)
604 {
605 fi->framereg = prologue_cache.framereg;
606 fi->framesize = prologue_cache.framesize;
607 fi->frameoffset = prologue_cache.frameoffset;
608 for (i = 0; i <= NUM_REGS; i++)
609 fi->fsr.regs[i] = prologue_cache.fsr.regs[i];
610 return 1;
611 }
612 else
613 return 0;
614}
615
616
ed9a39eb 617/* Copy the prologue information from fi to the prologue cache. */
c906108c
SS
618
619static void
ed9a39eb 620save_prologue_cache (struct frame_info *fi)
c906108c
SS
621{
622 int i;
623
c5aa993b
JM
624 prologue_cache.pc = fi->pc;
625 prologue_cache.framereg = fi->framereg;
626 prologue_cache.framesize = fi->framesize;
c906108c 627 prologue_cache.frameoffset = fi->frameoffset;
c5aa993b 628
c906108c
SS
629 for (i = 0; i <= NUM_REGS; i++)
630 prologue_cache.fsr.regs[i] = fi->fsr.regs[i];
631}
632
633
ed9a39eb 634/* This function decodes an ARM function prologue to determine:
c5aa993b
JM
635 1) the size of the stack frame
636 2) which registers are saved on it
637 3) the offsets of saved regs
638 4) the offset from the stack pointer to the frame pointer
c906108c
SS
639 This information is stored in the "extra" fields of the frame_info.
640
96baa820
JM
641 There are two basic forms for the ARM prologue. The fixed argument
642 function call will look like:
ed9a39eb
JM
643
644 mov ip, sp
645 stmfd sp!, {fp, ip, lr, pc}
646 sub fp, ip, #4
647 [sub sp, sp, #4]
96baa820 648
c906108c 649 Which would create this stack frame (offsets relative to FP):
ed9a39eb
JM
650 IP -> 4 (caller's stack)
651 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
652 -4 LR (return address in caller)
653 -8 IP (copy of caller's SP)
654 -12 FP (caller's FP)
655 SP -> -28 Local variables
656
c906108c 657 The frame size would thus be 32 bytes, and the frame offset would be
96baa820
JM
658 28 bytes. The stmfd call can also save any of the vN registers it
659 plans to use, which increases the frame size accordingly.
660
661 Note: The stored PC is 8 off of the STMFD instruction that stored it
662 because the ARM Store instructions always store PC + 8 when you read
663 the PC register.
ed9a39eb 664
96baa820
JM
665 A variable argument function call will look like:
666
ed9a39eb
JM
667 mov ip, sp
668 stmfd sp!, {a1, a2, a3, a4}
669 stmfd sp!, {fp, ip, lr, pc}
670 sub fp, ip, #20
671
96baa820 672 Which would create this stack frame (offsets relative to FP):
ed9a39eb
JM
673 IP -> 20 (caller's stack)
674 16 A4
675 12 A3
676 8 A2
677 4 A1
678 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
679 -4 LR (return address in caller)
680 -8 IP (copy of caller's SP)
681 -12 FP (caller's FP)
682 SP -> -28 Local variables
96baa820
JM
683
684 The frame size would thus be 48 bytes, and the frame offset would be
685 28 bytes.
686
687 There is another potential complication, which is that the optimizer
688 will try to separate the store of fp in the "stmfd" instruction from
689 the "sub fp, ip, #NN" instruction. Almost anything can be there, so
690 we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
691
692 Also, note, the original version of the ARM toolchain claimed that there
693 should be an
694
695 instruction at the end of the prologue. I have never seen GCC produce
696 this, and the ARM docs don't mention it. We still test for it below in
697 case it happens...
ed9a39eb
JM
698
699 */
c906108c
SS
700
701static void
ed9a39eb 702arm_scan_prologue (struct frame_info *fi)
c906108c
SS
703{
704 int regno, sp_offset, fp_offset;
705 CORE_ADDR prologue_start, prologue_end, current_pc;
706
707 /* Check if this function is already in the cache of frame information. */
708 if (check_prologue_cache (fi))
709 return;
710
711 /* Assume there is no frame until proven otherwise. */
c5aa993b
JM
712 fi->framereg = SP_REGNUM;
713 fi->framesize = 0;
c906108c
SS
714 fi->frameoffset = 0;
715
716 /* Check for Thumb prologue. */
717 if (arm_pc_is_thumb (fi->pc))
718 {
719 thumb_scan_prologue (fi);
720 save_prologue_cache (fi);
721 return;
722 }
723
724 /* Find the function prologue. If we can't find the function in
725 the symbol table, peek in the stack frame to find the PC. */
726 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
727 {
728 /* Assume the prologue is everything between the first instruction
729 in the function and the first source line. */
730 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
731
c5aa993b 732 if (sal.line == 0) /* no line info, use current PC */
c906108c
SS
733 prologue_end = fi->pc;
734 else if (sal.end < prologue_end) /* next line begins after fn end */
c5aa993b 735 prologue_end = sal.end; /* (probably means no prologue) */
c906108c
SS
736 }
737 else
738 {
739 /* Get address of the stmfd in the prologue of the callee; the saved
96baa820 740 PC is the address of the stmfd + 8. */
ed9a39eb 741 prologue_start = ADDR_BITS_REMOVE (read_memory_integer (fi->frame, 4))
96baa820 742 - 8;
ed9a39eb
JM
743 prologue_end = prologue_start + 64; /* This is all the insn's
744 that could be in the prologue,
745 plus room for 5 insn's inserted
746 by the scheduler. */
c906108c
SS
747 }
748
749 /* Now search the prologue looking for instructions that set up the
96baa820 750 frame pointer, adjust the stack pointer, and save registers.
ed9a39eb 751
96baa820
JM
752 Be careful, however, and if it doesn't look like a prologue,
753 don't try to scan it. If, for instance, a frameless function
754 begins with stmfd sp!, then we will tell ourselves there is
755 a frame, which will confuse stack traceback, as well ad"finish"
756 and other operations that rely on a knowledge of the stack
757 traceback.
758
759 In the APCS, the prologue should start with "mov ip, sp" so
760 if we don't see this as the first insn, we will stop. */
c906108c
SS
761
762 sp_offset = fp_offset = 0;
c906108c 763
ed9a39eb
JM
764 if (read_memory_unsigned_integer (prologue_start, 4)
765 == 0xe1a0c00d) /* mov ip, sp */
96baa820 766 {
ed9a39eb 767 for (current_pc = prologue_start + 4; current_pc < prologue_end;
96baa820 768 current_pc += 4)
c906108c 769 {
96baa820 770 unsigned int insn = read_memory_unsigned_integer (current_pc, 4);
ed9a39eb 771
96baa820
JM
772 if ((insn & 0xffff0000) == 0xe92d0000)
773 /* stmfd sp!, {..., fp, ip, lr, pc}
774 or
775 stmfd sp!, {a1, a2, a3, a4} */
776 {
777 int mask = insn & 0xffff;
ed9a39eb 778
96baa820
JM
779 /* Calculate offsets of saved registers. */
780 for (regno = PC_REGNUM; regno >= 0; regno--)
781 if (mask & (1 << regno))
782 {
783 sp_offset -= 4;
784 fi->fsr.regs[regno] = sp_offset;
785 }
786 }
ed9a39eb 787 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
96baa820 788 {
ed9a39eb
JM
789 unsigned imm = insn & 0xff; /* immediate value */
790 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
791 imm = (imm >> rot) | (imm << (32 - rot));
96baa820
JM
792 fp_offset = -imm;
793 fi->framereg = FP_REGNUM;
794 }
ed9a39eb 795 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
96baa820 796 {
ed9a39eb
JM
797 unsigned imm = insn & 0xff; /* immediate value */
798 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
799 imm = (imm >> rot) | (imm << (32 - rot));
96baa820
JM
800 sp_offset -= imm;
801 }
ed9a39eb 802 else if ((insn & 0xffff7fff) == 0xed6d0103) /* stfe f?, [sp, -#c]! */
96baa820
JM
803 {
804 sp_offset -= 12;
805 regno = F0_REGNUM + ((insn >> 12) & 0x07);
806 fi->fsr.regs[regno] = sp_offset;
807 }
ed9a39eb 808 else if ((insn & 0xffbf0fff) == 0xec2d0200) /* sfmfd f0, 4, [sp!] */
96baa820 809 {
ed9a39eb 810 int n_saved_fp_regs;
96baa820 811 unsigned int fp_start_reg, fp_bound_reg;
ed9a39eb
JM
812
813 if ((insn & 0x800) == 0x800) /* N0 is set */
814 {
815 if ((insn & 0x40000) == 0x40000) /* N1 is set */
96baa820
JM
816 n_saved_fp_regs = 3;
817 else
818 n_saved_fp_regs = 1;
819 }
820 else
ed9a39eb
JM
821 {
822 if ((insn & 0x40000) == 0x40000) /* N1 is set */
96baa820
JM
823 n_saved_fp_regs = 2;
824 else
825 n_saved_fp_regs = 4;
826 }
ed9a39eb 827
96baa820
JM
828 fp_start_reg = F0_REGNUM + ((insn >> 12) & 0x7);
829 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
830 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
831 {
832 sp_offset -= 12;
833 fi->fsr.regs[fp_start_reg++] = sp_offset;
834 }
835 }
836 else
ed9a39eb
JM
837 /* The optimizer might shove anything into the prologue,
838 so we just skip what we don't recognize. */
839 continue;
c906108c 840 }
c906108c
SS
841 }
842
843 /* The frame size is just the negative of the offset (from the original SP)
844 of the last thing thing we pushed on the stack. The frame offset is
845 [new FP] - [new SP]. */
846 fi->framesize = -sp_offset;
847 fi->frameoffset = fp_offset - sp_offset;
ed9a39eb 848
c906108c
SS
849 save_prologue_cache (fi);
850}
851
ed9a39eb
JM
852/* Find REGNUM on the stack. Otherwise, it's in an active register.
853 One thing we might want to do here is to check REGNUM against the
854 clobber mask, and somehow flag it as invalid if it isn't saved on
855 the stack somewhere. This would provide a graceful failure mode
856 when trying to get the value of caller-saves registers for an inner
857 frame. */
c906108c
SS
858
859static CORE_ADDR
ed9a39eb 860arm_find_callers_reg (struct frame_info *fi, int regnum)
c906108c
SS
861{
862 for (; fi; fi = fi->next)
c5aa993b
JM
863
864#if 0 /* FIXME: enable this code if we convert to new call dummy scheme. */
c906108c
SS
865 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
866 return generic_read_register_dummy (fi->pc, fi->frame, regnum);
867 else
868#endif
c5aa993b
JM
869 if (fi->fsr.regs[regnum] != 0)
870 return read_memory_integer (fi->fsr.regs[regnum],
871 REGISTER_RAW_SIZE (regnum));
c906108c
SS
872 return read_register (regnum);
873}
c5aa993b 874/* *INDENT-OFF* */
c906108c
SS
875/* Function: frame_chain
876 Given a GDB frame, determine the address of the calling function's frame.
877 This will be used to create a new GDB frame struct, and then
878 INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC will be called for the new frame.
879 For ARM, we save the frame size when we initialize the frame_info.
880
881 The original definition of this function was a macro in tm-arm.h:
882 { In the case of the ARM, the frame's nominal address is the FP value,
883 and 12 bytes before comes the saved previous FP value as a 4-byte word. }
884
885 #define FRAME_CHAIN(thisframe) \
886 ((thisframe)->pc >= LOWEST_PC ? \
887 read_memory_integer ((thisframe)->frame - 12, 4) :\
888 0)
889*/
c5aa993b
JM
890/* *INDENT-ON* */
891
c906108c 892CORE_ADDR
ed9a39eb 893arm_frame_chain (struct frame_info *fi)
c906108c 894{
c5aa993b 895#if 0 /* FIXME: enable this code if we convert to new call dummy scheme. */
c906108c
SS
896 CORE_ADDR fn_start, callers_pc, fp;
897
898 /* is this a dummy frame? */
899 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
c5aa993b 900 return fi->frame; /* dummy frame same as caller's frame */
c906108c
SS
901
902 /* is caller-of-this a dummy frame? */
c5aa993b 903 callers_pc = FRAME_SAVED_PC (fi); /* find out who called us: */
c906108c 904 fp = arm_find_callers_reg (fi, FP_REGNUM);
c5aa993b
JM
905 if (PC_IN_CALL_DUMMY (callers_pc, fp, fp))
906 return fp; /* dummy frame's frame may bear no relation to ours */
c906108c
SS
907
908 if (find_pc_partial_function (fi->pc, 0, &fn_start, 0))
909 if (fn_start == entry_point_address ())
c5aa993b 910 return 0; /* in _start fn, don't chain further */
c906108c
SS
911#endif
912 CORE_ADDR caller_pc, fn_start;
913 struct frame_info caller_fi;
914 int framereg = fi->framereg;
915
916 if (fi->pc < LOWEST_PC)
917 return 0;
918
919 /* If the caller is the startup code, we're at the end of the chain. */
920 caller_pc = FRAME_SAVED_PC (fi);
921 if (find_pc_partial_function (caller_pc, 0, &fn_start, 0))
922 if (fn_start == entry_point_address ())
923 return 0;
924
925 /* If the caller is Thumb and the caller is ARM, or vice versa,
926 the frame register of the caller is different from ours.
927 So we must scan the prologue of the caller to determine its
928 frame register number. */
929 if (arm_pc_is_thumb (caller_pc) != arm_pc_is_thumb (fi->pc))
930 {
c5aa993b 931 memset (&caller_fi, 0, sizeof (caller_fi));
c906108c 932 caller_fi.pc = caller_pc;
c5aa993b 933 arm_scan_prologue (&caller_fi);
c906108c
SS
934 framereg = caller_fi.framereg;
935 }
936
937 /* If the caller used a frame register, return its value.
938 Otherwise, return the caller's stack pointer. */
939 if (framereg == FP_REGNUM || framereg == THUMB_FP_REGNUM)
940 return arm_find_callers_reg (fi, framereg);
941 else
942 return fi->frame + fi->framesize;
943}
944
ed9a39eb
JM
945/* This function actually figures out the frame address for a given pc
946 and sp. This is tricky because we sometimes don't use an explicit
947 frame pointer, and the previous stack pointer isn't necessarily
948 recorded on the stack. The only reliable way to get this info is
949 to examine the prologue. FROMLEAF is a little confusing, it means
950 this is the next frame up the chain AFTER a frameless function. If
951 this is true, then the frame value for this frame is still in the
952 fp register. */
c906108c
SS
953
954void
ed9a39eb 955arm_init_extra_frame_info (int fromleaf, struct frame_info *fi)
c906108c
SS
956{
957 int reg;
958
959 if (fi->next)
960 fi->pc = FRAME_SAVED_PC (fi->next);
961
962 memset (fi->fsr.regs, '\000', sizeof fi->fsr.regs);
963
c5aa993b 964#if 0 /* FIXME: enable this code if we convert to new call dummy scheme. */
c906108c
SS
965 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
966 {
967 /* We need to setup fi->frame here because run_stack_dummy gets it wrong
c5aa993b
JM
968 by assuming it's always FP. */
969 fi->frame = generic_read_register_dummy (fi->pc, fi->frame, SP_REGNUM);
970 fi->framesize = 0;
c906108c
SS
971 fi->frameoffset = 0;
972 return;
973 }
c5aa993b 974 else
c906108c
SS
975#endif
976 {
977 arm_scan_prologue (fi);
978
104c1213
JM
979 if (!fi->next)
980 /* this is the innermost frame? */
c906108c 981 fi->frame = read_register (fi->framereg);
ed9a39eb
JM
982 else if (fi->framereg == FP_REGNUM || fi->framereg == THUMB_FP_REGNUM)
983 {
984 /* not the innermost frame */
985 /* If we have an FP, the callee saved it. */
986 if (fi->next->fsr.regs[fi->framereg] != 0)
987 fi->frame =
988 read_memory_integer (fi->next->fsr.regs[fi->framereg], 4);
989 else if (fromleaf)
990 /* If we were called by a frameless fn. then our frame is
991 still in the frame pointer register on the board... */
992 fi->frame = read_fp ();
993 }
c906108c 994
ed9a39eb
JM
995 /* Calculate actual addresses of saved registers using offsets
996 determined by arm_scan_prologue. */
c906108c
SS
997 for (reg = 0; reg < NUM_REGS; reg++)
998 if (fi->fsr.regs[reg] != 0)
999 fi->fsr.regs[reg] += fi->frame + fi->framesize - fi->frameoffset;
1000 }
1001}
1002
1003
ed9a39eb
JM
1004/* Find the caller of this frame. We do this by seeing if LR_REGNUM
1005 is saved in the stack anywhere, otherwise we get it from the
1006 registers.
c906108c
SS
1007
1008 The old definition of this function was a macro:
c5aa993b 1009 #define FRAME_SAVED_PC(FRAME) \
ed9a39eb 1010 ADDR_BITS_REMOVE (read_memory_integer ((FRAME)->frame - 4, 4)) */
c906108c
SS
1011
1012CORE_ADDR
ed9a39eb 1013arm_frame_saved_pc (struct frame_info *fi)
c906108c 1014{
c5aa993b 1015#if 0 /* FIXME: enable this code if we convert to new call dummy scheme. */
c906108c
SS
1016 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame, fi->frame))
1017 return generic_read_register_dummy (fi->pc, fi->frame, PC_REGNUM);
1018 else
1019#endif
1020 {
1021 CORE_ADDR pc = arm_find_callers_reg (fi, LR_REGNUM);
1022 return IS_THUMB_ADDR (pc) ? UNMAKE_THUMB_ADDR (pc) : pc;
1023 }
1024}
1025
c906108c
SS
1026/* Return the frame address. On ARM, it is R11; on Thumb it is R7.
1027 Examine the Program Status Register to decide which state we're in. */
1028
1029CORE_ADDR
ed9a39eb 1030arm_target_read_fp (void)
c906108c
SS
1031{
1032 if (read_register (PS_REGNUM) & 0x20) /* Bit 5 is Thumb state bit */
1033 return read_register (THUMB_FP_REGNUM); /* R7 if Thumb */
1034 else
c5aa993b 1035 return read_register (FP_REGNUM); /* R11 if ARM */
c906108c
SS
1036}
1037
ed9a39eb 1038/* Calculate the frame offsets of the saved registers (ARM version). */
c906108c 1039
c906108c 1040void
ed9a39eb
JM
1041arm_frame_find_saved_regs (struct frame_info *fi,
1042 struct frame_saved_regs *regaddr)
c906108c
SS
1043{
1044 memcpy (regaddr, &fi->fsr, sizeof (struct frame_saved_regs));
1045}
1046
c906108c 1047void
ed9a39eb 1048arm_push_dummy_frame (void)
c906108c
SS
1049{
1050 CORE_ADDR old_sp = read_register (SP_REGNUM);
1051 CORE_ADDR sp = old_sp;
1052 CORE_ADDR fp, prologue_start;
1053 int regnum;
1054
1055 /* Push the two dummy prologue instructions in reverse order,
1056 so that they'll be in the correct low-to-high order in memory. */
1057 /* sub fp, ip, #4 */
1058 sp = push_word (sp, 0xe24cb004);
1059 /* stmdb sp!, {r0-r10, fp, ip, lr, pc} */
1060 prologue_start = sp = push_word (sp, 0xe92ddfff);
1061
ed9a39eb
JM
1062 /* Push a pointer to the dummy prologue + 12, because when stm
1063 instruction stores the PC, it stores the address of the stm
c906108c
SS
1064 instruction itself plus 12. */
1065 fp = sp = push_word (sp, prologue_start + 12);
c5aa993b 1066 sp = push_word (sp, read_register (PC_REGNUM)); /* FIXME: was PS_REGNUM */
c906108c
SS
1067 sp = push_word (sp, old_sp);
1068 sp = push_word (sp, read_register (FP_REGNUM));
c5aa993b
JM
1069
1070 for (regnum = 10; regnum >= 0; regnum--)
c906108c 1071 sp = push_word (sp, read_register (regnum));
c5aa993b 1072
c906108c
SS
1073 write_register (FP_REGNUM, fp);
1074 write_register (THUMB_FP_REGNUM, fp);
1075 write_register (SP_REGNUM, sp);
1076}
1077
1078/* Fix up the call dummy, based on whether the processor is currently
ed9a39eb
JM
1079 in Thumb or ARM mode, and whether the target function is Thumb or
1080 ARM. There are three different situations requiring three
c906108c
SS
1081 different dummies:
1082
1083 * ARM calling ARM: uses the call dummy in tm-arm.h, which has already
c5aa993b 1084 been copied into the dummy parameter to this function.
c906108c 1085 * ARM calling Thumb: uses the call dummy in tm-arm.h, but with the
c5aa993b 1086 "mov pc,r4" instruction patched to be a "bx r4" instead.
c906108c 1087 * Thumb calling anything: uses the Thumb dummy defined below, which
c5aa993b 1088 works for calling both ARM and Thumb functions.
c906108c 1089
ed9a39eb
JM
1090 All three call dummies expect to receive the target function
1091 address in R4, with the low bit set if it's a Thumb function. */
c906108c
SS
1092
1093void
ed9a39eb
JM
1094arm_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
1095 value_ptr *args, struct type *type, int gcc_p)
c906108c
SS
1096{
1097 static short thumb_dummy[4] =
1098 {
c5aa993b
JM
1099 0xf000, 0xf801, /* bl label */
1100 0xdf18, /* swi 24 */
1101 0x4720, /* label: bx r4 */
c906108c
SS
1102 };
1103 static unsigned long arm_bx_r4 = 0xe12fff14; /* bx r4 instruction */
1104
1105 /* Set flag indicating whether the current PC is in a Thumb function. */
c5aa993b 1106 caller_is_thumb = arm_pc_is_thumb (read_pc ());
c906108c 1107
ed9a39eb
JM
1108 /* If the target function is Thumb, set the low bit of the function
1109 address. And if the CPU is currently in ARM mode, patch the
1110 second instruction of call dummy to use a BX instruction to
1111 switch to Thumb mode. */
c906108c
SS
1112 target_is_thumb = arm_pc_is_thumb (fun);
1113 if (target_is_thumb)
1114 {
1115 fun |= 1;
1116 if (!caller_is_thumb)
1117 store_unsigned_integer (dummy + 4, sizeof (arm_bx_r4), arm_bx_r4);
1118 }
1119
1120 /* If the CPU is currently in Thumb mode, use the Thumb call dummy
1121 instead of the ARM one that's already been copied. This will
1122 work for both Thumb and ARM target functions. */
1123 if (caller_is_thumb)
1124 {
1125 int i;
1126 char *p = dummy;
1127 int len = sizeof (thumb_dummy) / sizeof (thumb_dummy[0]);
1128
1129 for (i = 0; i < len; i++)
1130 {
1131 store_unsigned_integer (p, sizeof (thumb_dummy[0]), thumb_dummy[i]);
1132 p += sizeof (thumb_dummy[0]);
1133 }
1134 }
1135
ed9a39eb
JM
1136 /* Put the target address in r4; the call dummy will copy this to
1137 the PC. */
c906108c
SS
1138 write_register (4, fun);
1139}
1140
c906108c 1141/* Return the offset in the call dummy of the instruction that needs
ed9a39eb
JM
1142 to have a breakpoint placed on it. This is the offset of the 'swi
1143 24' instruction, which is no longer actually used, but simply acts
c906108c
SS
1144 as a place-holder now.
1145
ed9a39eb 1146 This implements the CALL_DUMMY_BREAK_OFFSET macro. */
c906108c
SS
1147
1148int
ed9a39eb 1149arm_call_dummy_breakpoint_offset (void)
c906108c
SS
1150{
1151 if (caller_is_thumb)
1152 return 4;
1153 else
1154 return 8;
1155}
1156
ed9a39eb
JM
1157/* Note: ScottB
1158
1159 This function does not support passing parameters using the FPA
1160 variant of the APCS. It passes any floating point arguments in the
1161 general registers and/or on the stack. */
c906108c
SS
1162
1163CORE_ADDR
ed9a39eb
JM
1164arm_push_arguments (int nargs, value_ptr * args, CORE_ADDR sp,
1165 int struct_return, CORE_ADDR struct_addr)
c906108c 1166{
ed9a39eb
JM
1167 char *fp;
1168 int argnum, argreg, nstack_size;
1169
1170 /* Walk through the list of args and determine how large a temporary
1171 stack is required. Need to take care here as structs may be
1172 passed on the stack, and we have to to push them. */
1173 nstack_size = -4 * REGISTER_SIZE; /* Some arguments go into A1-A4. */
1174 if (struct_return) /* The struct address goes in A1. */
1175 nstack_size += REGISTER_SIZE;
1176
1177 /* Walk through the arguments and add their size to nstack_size. */
1178 for (argnum = 0; argnum < nargs; argnum++)
c5aa993b 1179 {
c906108c 1180 int len;
ed9a39eb
JM
1181 struct type *arg_type;
1182
1183 arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1184 len = TYPE_LENGTH (arg_type);
c906108c 1185
ed9a39eb
JM
1186 /* ANSI C code passes float arguments as integers, K&R code
1187 passes float arguments as doubles. Correct for this here. */
1188 if (TYPE_CODE_FLT == TYPE_CODE (arg_type) && REGISTER_SIZE == len)
1189 nstack_size += FP_REGISTER_VIRTUAL_SIZE;
1190 else
1191 nstack_size += len;
1192 }
c906108c 1193
ed9a39eb
JM
1194 /* Allocate room on the stack, and initialize our stack frame
1195 pointer. */
1196 fp = NULL;
1197 if (nstack_size > 0)
1198 {
1199 sp -= nstack_size;
1200 fp = (char *) sp;
1201 }
1202
1203 /* Initialize the integer argument register pointer. */
c906108c 1204 argreg = A1_REGNUM;
c906108c 1205
ed9a39eb
JM
1206 /* The struct_return pointer occupies the first parameter passing
1207 register. */
c906108c 1208 if (struct_return)
c5aa993b 1209 write_register (argreg++, struct_addr);
c906108c 1210
ed9a39eb
JM
1211 /* Process arguments from left to right. Store as many as allowed
1212 in the parameter passing registers (A1-A4), and save the rest on
1213 the temporary stack. */
c5aa993b 1214 for (argnum = 0; argnum < nargs; argnum++)
c906108c 1215 {
ed9a39eb 1216 int len;
c5aa993b 1217 char *val;
ed9a39eb 1218 double dbl_arg;
c5aa993b 1219 CORE_ADDR regval;
ed9a39eb
JM
1220 enum type_code typecode;
1221 struct type *arg_type, *target_type;
1222
1223 arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1224 target_type = TYPE_TARGET_TYPE (arg_type);
1225 len = TYPE_LENGTH (arg_type);
1226 typecode = TYPE_CODE (arg_type);
1227 val = (char *) VALUE_CONTENTS (args[argnum]);
1228
1229 /* ANSI C code passes float arguments as integers, K&R code
1230 passes float arguments as doubles. The .stabs record for
1231 for ANSI prototype floating point arguments records the
1232 type as FP_INTEGER, while a K&R style (no prototype)
1233 .stabs records the type as FP_FLOAT. In this latter case
1234 the compiler converts the float arguments to double before
1235 calling the function. */
1236 if (TYPE_CODE_FLT == typecode && REGISTER_SIZE == len)
1237 {
8b93c638
JM
1238 float f;
1239 double d;
1240 char * bufo = (char *) &d;
1241 char * bufd = (char *) &dbl_arg;
1242
ed9a39eb 1243 len = sizeof (double);
8b93c638
JM
1244 f = *(float *) val;
1245 SWAP_TARGET_AND_HOST (&f, sizeof (float)); /* adjust endianess */
1246 d = f;
1247 /* We must revert the longwords so they get loaded into the
1248 the right registers. */
1249 memcpy (bufd, bufo + len / 2, len / 2);
1250 SWAP_TARGET_AND_HOST (bufd, len / 2); /* adjust endianess */
1251 memcpy (bufd + len / 2, bufo, len / 2);
1252 SWAP_TARGET_AND_HOST (bufd + len / 2, len / 2); /* adjust endianess */
1253 val = (char *) &dbl_arg;
ed9a39eb 1254 }
da59e081
JM
1255#if 1
1256 /* I don't know why this code was disable. The only logical use
1257 for a function pointer is to call that function, so setting
1258 the mode bit is perfectly fine. FN */
ed9a39eb 1259 /* If the argument is a pointer to a function, and it is a Thumb
c906108c 1260 function, set the low bit of the pointer. */
ed9a39eb
JM
1261 if (TYPE_CODE_PTR == typecode
1262 && NULL != target_type
1263 && TYPE_CODE_FUNC == TYPE_CODE (target_type))
c906108c 1264 {
ed9a39eb 1265 CORE_ADDR regval = extract_address (val, len);
c906108c
SS
1266 if (arm_pc_is_thumb (regval))
1267 store_address (val, len, MAKE_THUMB_ADDR (regval));
1268 }
c906108c 1269#endif
ed9a39eb
JM
1270 /* Copy the argument to general registers or the stack in
1271 register-sized pieces. Large arguments are split between
1272 registers and stack. */
1273 while (len > 0)
c906108c 1274 {
ed9a39eb
JM
1275 int partial_len = len < REGISTER_SIZE ? len : REGISTER_SIZE;
1276
1277 if (argreg <= ARM_LAST_ARG_REGNUM)
c906108c 1278 {
ed9a39eb
JM
1279 /* It's an argument being passed in a general register. */
1280 regval = extract_address (val, partial_len);
1281 write_register (argreg++, regval);
c906108c 1282 }
ed9a39eb
JM
1283 else
1284 {
1285 /* Push the arguments onto the stack. */
1286 write_memory ((CORE_ADDR) fp, val, REGISTER_SIZE);
1287 fp += REGISTER_SIZE;
1288 }
1289
1290 len -= partial_len;
1291 val += partial_len;
c906108c
SS
1292 }
1293 }
c906108c
SS
1294
1295 /* Return adjusted stack pointer. */
1296 return sp;
1297}
1298
1299void
ed9a39eb 1300arm_pop_frame (void)
c906108c 1301{
c906108c 1302 int regnum;
8b93c638 1303 struct frame_info *frame = get_current_frame ();
c906108c 1304
8b93c638
JM
1305 if (!PC_IN_CALL_DUMMY(frame->pc, frame->frame, read_fp()))
1306 {
1307 CORE_ADDR old_SP;
1308
1309 old_SP = read_register (frame->framereg);
1310 for (regnum = 0; regnum < NUM_REGS; regnum++)
1311 if (frame->fsr.regs[regnum] != 0)
1312 write_register (regnum,
c906108c
SS
1313 read_memory_integer (frame->fsr.regs[regnum], 4));
1314
8b93c638
JM
1315 write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
1316 write_register (SP_REGNUM, old_SP);
1317 }
1318 else
1319 {
1320 CORE_ADDR sp;
1321
1322 sp = read_register (FP_REGNUM);
1323 sp -= sizeof(CORE_ADDR); /* we don't care about this first word */
1324
1325 write_register (PC_REGNUM, read_memory_integer (sp, 4));
1326 sp -= sizeof(CORE_ADDR);
1327 write_register (SP_REGNUM, read_memory_integer (sp, 4));
1328 sp -= sizeof(CORE_ADDR);
1329 write_register (FP_REGNUM, read_memory_integer (sp, 4));
1330 sp -= sizeof(CORE_ADDR);
1331
1332 for (regnum = 10; regnum >= 0; regnum--)
1333 {
1334 write_register (regnum, read_memory_integer (sp, 4));
1335 sp -= sizeof(CORE_ADDR);
1336 }
1337 }
c906108c
SS
1338
1339 flush_cached_frames ();
1340}
1341
1342static void
ed9a39eb 1343print_fpu_flags (int flags)
c906108c 1344{
c5aa993b
JM
1345 if (flags & (1 << 0))
1346 fputs ("IVO ", stdout);
1347 if (flags & (1 << 1))
1348 fputs ("DVZ ", stdout);
1349 if (flags & (1 << 2))
1350 fputs ("OFL ", stdout);
1351 if (flags & (1 << 3))
1352 fputs ("UFL ", stdout);
1353 if (flags & (1 << 4))
1354 fputs ("INX ", stdout);
1355 putchar ('\n');
c906108c
SS
1356}
1357
1358void
ed9a39eb 1359arm_float_info (void)
c906108c 1360{
c5aa993b
JM
1361 register unsigned long status = read_register (FPS_REGNUM);
1362 int type;
1363
1364 type = (status >> 24) & 127;
1365 printf ("%s FPU type %d\n",
ed9a39eb 1366 (status & (1 << 31)) ? "Hardware" : "Software",
c5aa993b
JM
1367 type);
1368 fputs ("mask: ", stdout);
1369 print_fpu_flags (status >> 16);
1370 fputs ("flags: ", stdout);
1371 print_fpu_flags (status);
c906108c
SS
1372}
1373
ed9a39eb
JM
1374#if 0
1375/* FIXME: The generated assembler works but sucks. Instead of using
1376 r0, r1 it pushes them on the stack, then loads them into r3, r4 and
1377 uses those registers. I must be missing something. ScottB */
c906108c 1378
c5aa993b 1379void
ed9a39eb
JM
1380convert_from_extended (void *ptr, void *dbl)
1381{
1382 __asm__ ("
1383 ldfe f0,[%0]
1384 stfd f0,[%1] "
1385: /* no output */
1386: "r" (ptr), "r" (dbl));
1387}
1388
1389void
1390convert_to_extended (void *dbl, void *ptr)
1391{
1392 __asm__ ("
1393 ldfd f0,[%0]
1394 stfe f0,[%1] "
1395: /* no output */
1396: "r" (dbl), "r" (ptr));
1397}
1398#else
1399static void
1400convert_from_extended (void *ptr, void *dbl)
c906108c 1401{
104c1213 1402 *(double *) dbl = *(double *) ptr;
c906108c
SS
1403}
1404
c5aa993b 1405void
ed9a39eb 1406convert_to_extended (void *dbl, void *ptr)
c906108c 1407{
104c1213 1408 *(double *) ptr = *(double *) dbl;
c906108c 1409}
ed9a39eb
JM
1410#endif
1411
1412/* Nonzero if register N requires conversion from raw format to
1413 virtual format. */
1414
1415int
1416arm_register_convertible (unsigned int regnum)
1417{
1418 return ((regnum - F0_REGNUM) < 8);
1419}
1420
1421/* Convert data from raw format for register REGNUM in buffer FROM to
1422 virtual format with type TYPE in buffer TO. */
1423
1424void
1425arm_register_convert_to_virtual (unsigned int regnum, struct type *type,
1426 void *from, void *to)
1427{
1428 double val;
1429
1430 convert_from_extended (from, &val);
1431 store_floating (to, TYPE_LENGTH (type), val);
1432}
1433
1434/* Convert data from virtual format with type TYPE in buffer FROM to
1435 raw format for register REGNUM in buffer TO. */
1436
1437void
1438arm_register_convert_to_raw (unsigned int regnum, struct type *type,
1439 void *from, void *to)
1440{
1441 double val = extract_floating (from, TYPE_LENGTH (type));
1442
1443 convert_to_extended (&val, to);
1444}
c906108c
SS
1445
1446static int
ed9a39eb 1447condition_true (unsigned long cond, unsigned long status_reg)
c906108c
SS
1448{
1449 if (cond == INST_AL || cond == INST_NV)
1450 return 1;
1451
1452 switch (cond)
1453 {
1454 case INST_EQ:
1455 return ((status_reg & FLAG_Z) != 0);
1456 case INST_NE:
1457 return ((status_reg & FLAG_Z) == 0);
1458 case INST_CS:
1459 return ((status_reg & FLAG_C) != 0);
1460 case INST_CC:
1461 return ((status_reg & FLAG_C) == 0);
1462 case INST_MI:
1463 return ((status_reg & FLAG_N) != 0);
1464 case INST_PL:
1465 return ((status_reg & FLAG_N) == 0);
1466 case INST_VS:
1467 return ((status_reg & FLAG_V) != 0);
1468 case INST_VC:
1469 return ((status_reg & FLAG_V) == 0);
1470 case INST_HI:
1471 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
1472 case INST_LS:
1473 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
1474 case INST_GE:
1475 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
1476 case INST_LT:
1477 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
1478 case INST_GT:
1479 return (((status_reg & FLAG_Z) == 0) &&
ed9a39eb 1480 (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0)));
c906108c
SS
1481 case INST_LE:
1482 return (((status_reg & FLAG_Z) != 0) ||
ed9a39eb 1483 (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0)));
c906108c
SS
1484 }
1485 return 1;
1486}
1487
1488#define submask(x) ((1L << ((x) + 1)) - 1)
1489#define bit(obj,st) (((obj) >> (st)) & 1)
1490#define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
1491#define sbits(obj,st,fn) \
1492 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
1493#define BranchDest(addr,instr) \
1494 ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
1495#define ARM_PC_32 1
1496
1497static unsigned long
ed9a39eb
JM
1498shifted_reg_val (unsigned long inst, int carry, unsigned long pc_val,
1499 unsigned long status_reg)
c906108c
SS
1500{
1501 unsigned long res, shift;
1502 int rm = bits (inst, 0, 3);
1503 unsigned long shifttype = bits (inst, 5, 6);
c5aa993b
JM
1504
1505 if (bit (inst, 4))
c906108c
SS
1506 {
1507 int rs = bits (inst, 8, 11);
1508 shift = (rs == 15 ? pc_val + 8 : read_register (rs)) & 0xFF;
1509 }
1510 else
1511 shift = bits (inst, 7, 11);
c5aa993b
JM
1512
1513 res = (rm == 15
c906108c 1514 ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
c5aa993b 1515 + (bit (inst, 4) ? 12 : 8))
c906108c
SS
1516 : read_register (rm));
1517
1518 switch (shifttype)
1519 {
c5aa993b 1520 case 0: /* LSL */
c906108c
SS
1521 res = shift >= 32 ? 0 : res << shift;
1522 break;
c5aa993b
JM
1523
1524 case 1: /* LSR */
c906108c
SS
1525 res = shift >= 32 ? 0 : res >> shift;
1526 break;
1527
c5aa993b
JM
1528 case 2: /* ASR */
1529 if (shift >= 32)
1530 shift = 31;
c906108c
SS
1531 res = ((res & 0x80000000L)
1532 ? ~((~res) >> shift) : res >> shift);
1533 break;
1534
c5aa993b 1535 case 3: /* ROR/RRX */
c906108c
SS
1536 shift &= 31;
1537 if (shift == 0)
1538 res = (res >> 1) | (carry ? 0x80000000L : 0);
1539 else
c5aa993b 1540 res = (res >> shift) | (res << (32 - shift));
c906108c
SS
1541 break;
1542 }
1543
1544 return res & 0xffffffff;
1545}
1546
c906108c
SS
1547/* Return number of 1-bits in VAL. */
1548
1549static int
ed9a39eb 1550bitcount (unsigned long val)
c906108c
SS
1551{
1552 int nbits;
1553 for (nbits = 0; val != 0; nbits++)
c5aa993b 1554 val &= val - 1; /* delete rightmost 1-bit in val */
c906108c
SS
1555 return nbits;
1556}
1557
c906108c 1558static CORE_ADDR
ed9a39eb 1559thumb_get_next_pc (CORE_ADDR pc)
c906108c 1560{
c5aa993b 1561 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
c906108c 1562 unsigned short inst1 = read_memory_integer (pc, 2);
c5aa993b 1563 CORE_ADDR nextpc = pc + 2; /* default is next instruction */
c906108c
SS
1564 unsigned long offset;
1565
1566 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
1567 {
1568 CORE_ADDR sp;
1569
1570 /* Fetch the saved PC from the stack. It's stored above
1571 all of the other registers. */
1572 offset = bitcount (bits (inst1, 0, 7)) * REGISTER_SIZE;
1573 sp = read_register (SP_REGNUM);
1574 nextpc = (CORE_ADDR) read_memory_integer (sp + offset, 4);
1575 nextpc = ADDR_BITS_REMOVE (nextpc);
1576 if (nextpc == pc)
1577 error ("Infinite loop detected");
1578 }
1579 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
1580 {
1581 unsigned long status = read_register (PS_REGNUM);
c5aa993b 1582 unsigned long cond = bits (inst1, 8, 11);
c906108c
SS
1583 if (cond != 0x0f && condition_true (cond, status)) /* 0x0f = SWI */
1584 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
1585 }
1586 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
1587 {
1588 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
1589 }
1590 else if ((inst1 & 0xf800) == 0xf000) /* long branch with link */
1591 {
1592 unsigned short inst2 = read_memory_integer (pc + 2, 2);
c5aa993b 1593 offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) << 1);
c906108c
SS
1594 nextpc = pc_val + offset;
1595 }
1596
1597 return nextpc;
1598}
1599
c906108c 1600CORE_ADDR
ed9a39eb 1601arm_get_next_pc (CORE_ADDR pc)
c906108c
SS
1602{
1603 unsigned long pc_val;
1604 unsigned long this_instr;
1605 unsigned long status;
1606 CORE_ADDR nextpc;
1607
1608 if (arm_pc_is_thumb (pc))
1609 return thumb_get_next_pc (pc);
1610
1611 pc_val = (unsigned long) pc;
1612 this_instr = read_memory_integer (pc, 4);
1613 status = read_register (PS_REGNUM);
c5aa993b 1614 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
c906108c
SS
1615
1616 if (condition_true (bits (this_instr, 28, 31), status))
1617 {
1618 switch (bits (this_instr, 24, 27))
1619 {
c5aa993b
JM
1620 case 0x0:
1621 case 0x1: /* data processing */
1622 case 0x2:
1623 case 0x3:
c906108c
SS
1624 {
1625 unsigned long operand1, operand2, result = 0;
1626 unsigned long rn;
1627 int c;
c5aa993b 1628
c906108c
SS
1629 if (bits (this_instr, 12, 15) != 15)
1630 break;
1631
1632 if (bits (this_instr, 22, 25) == 0
c5aa993b 1633 && bits (this_instr, 4, 7) == 9) /* multiply */
c906108c
SS
1634 error ("Illegal update to pc in instruction");
1635
1636 /* Multiply into PC */
1637 c = (status & FLAG_C) ? 1 : 0;
1638 rn = bits (this_instr, 16, 19);
1639 operand1 = (rn == 15) ? pc_val + 8 : read_register (rn);
c5aa993b 1640
c906108c
SS
1641 if (bit (this_instr, 25))
1642 {
1643 unsigned long immval = bits (this_instr, 0, 7);
1644 unsigned long rotate = 2 * bits (this_instr, 8, 11);
c5aa993b
JM
1645 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
1646 & 0xffffffff;
c906108c 1647 }
c5aa993b 1648 else /* operand 2 is a shifted register */
c906108c 1649 operand2 = shifted_reg_val (this_instr, c, pc_val, status);
c5aa993b 1650
c906108c
SS
1651 switch (bits (this_instr, 21, 24))
1652 {
c5aa993b 1653 case 0x0: /*and */
c906108c
SS
1654 result = operand1 & operand2;
1655 break;
1656
c5aa993b 1657 case 0x1: /*eor */
c906108c
SS
1658 result = operand1 ^ operand2;
1659 break;
1660
c5aa993b 1661 case 0x2: /*sub */
c906108c
SS
1662 result = operand1 - operand2;
1663 break;
1664
c5aa993b 1665 case 0x3: /*rsb */
c906108c
SS
1666 result = operand2 - operand1;
1667 break;
1668
c5aa993b 1669 case 0x4: /*add */
c906108c
SS
1670 result = operand1 + operand2;
1671 break;
1672
c5aa993b 1673 case 0x5: /*adc */
c906108c
SS
1674 result = operand1 + operand2 + c;
1675 break;
1676
c5aa993b 1677 case 0x6: /*sbc */
c906108c
SS
1678 result = operand1 - operand2 + c;
1679 break;
1680
c5aa993b 1681 case 0x7: /*rsc */
c906108c
SS
1682 result = operand2 - operand1 + c;
1683 break;
1684
c5aa993b
JM
1685 case 0x8:
1686 case 0x9:
1687 case 0xa:
1688 case 0xb: /* tst, teq, cmp, cmn */
c906108c
SS
1689 result = (unsigned long) nextpc;
1690 break;
1691
c5aa993b 1692 case 0xc: /*orr */
c906108c
SS
1693 result = operand1 | operand2;
1694 break;
1695
c5aa993b 1696 case 0xd: /*mov */
c906108c
SS
1697 /* Always step into a function. */
1698 result = operand2;
c5aa993b 1699 break;
c906108c 1700
c5aa993b 1701 case 0xe: /*bic */
c906108c
SS
1702 result = operand1 & ~operand2;
1703 break;
1704
c5aa993b 1705 case 0xf: /*mvn */
c906108c
SS
1706 result = ~operand2;
1707 break;
1708 }
1709 nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
1710
1711 if (nextpc == pc)
1712 error ("Infinite loop detected");
1713 break;
1714 }
c5aa993b
JM
1715
1716 case 0x4:
1717 case 0x5: /* data transfer */
1718 case 0x6:
1719 case 0x7:
c906108c
SS
1720 if (bit (this_instr, 20))
1721 {
1722 /* load */
1723 if (bits (this_instr, 12, 15) == 15)
1724 {
1725 /* rd == pc */
c5aa993b 1726 unsigned long rn;
c906108c 1727 unsigned long base;
c5aa993b 1728
c906108c
SS
1729 if (bit (this_instr, 22))
1730 error ("Illegal update to pc in instruction");
1731
1732 /* byte write to PC */
1733 rn = bits (this_instr, 16, 19);
1734 base = (rn == 15) ? pc_val + 8 : read_register (rn);
1735 if (bit (this_instr, 24))
1736 {
1737 /* pre-indexed */
1738 int c = (status & FLAG_C) ? 1 : 0;
1739 unsigned long offset =
c5aa993b 1740 (bit (this_instr, 25)
ed9a39eb 1741 ? shifted_reg_val (this_instr, c, pc_val, status)
c5aa993b 1742 : bits (this_instr, 0, 11));
c906108c
SS
1743
1744 if (bit (this_instr, 23))
1745 base += offset;
1746 else
1747 base -= offset;
1748 }
c5aa993b 1749 nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
c906108c 1750 4);
c5aa993b 1751
c906108c
SS
1752 nextpc = ADDR_BITS_REMOVE (nextpc);
1753
1754 if (nextpc == pc)
1755 error ("Infinite loop detected");
1756 }
1757 }
1758 break;
c5aa993b
JM
1759
1760 case 0x8:
1761 case 0x9: /* block transfer */
c906108c
SS
1762 if (bit (this_instr, 20))
1763 {
1764 /* LDM */
1765 if (bit (this_instr, 15))
1766 {
1767 /* loading pc */
1768 int offset = 0;
1769
1770 if (bit (this_instr, 23))
1771 {
1772 /* up */
1773 unsigned long reglist = bits (this_instr, 0, 14);
1774 offset = bitcount (reglist) * 4;
c5aa993b 1775 if (bit (this_instr, 24)) /* pre */
c906108c
SS
1776 offset += 4;
1777 }
1778 else if (bit (this_instr, 24))
1779 offset = -4;
c5aa993b 1780
c906108c 1781 {
c5aa993b
JM
1782 unsigned long rn_val =
1783 read_register (bits (this_instr, 16, 19));
c906108c
SS
1784 nextpc =
1785 (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
c5aa993b 1786 + offset),
c906108c
SS
1787 4);
1788 }
1789 nextpc = ADDR_BITS_REMOVE (nextpc);
1790 if (nextpc == pc)
1791 error ("Infinite loop detected");
1792 }
1793 }
1794 break;
c5aa993b
JM
1795
1796 case 0xb: /* branch & link */
1797 case 0xa: /* branch */
c906108c
SS
1798 {
1799 nextpc = BranchDest (pc, this_instr);
1800
1801 nextpc = ADDR_BITS_REMOVE (nextpc);
1802 if (nextpc == pc)
1803 error ("Infinite loop detected");
1804 break;
1805 }
c5aa993b
JM
1806
1807 case 0xc:
1808 case 0xd:
1809 case 0xe: /* coproc ops */
1810 case 0xf: /* SWI */
c906108c
SS
1811 break;
1812
1813 default:
1814 fprintf (stderr, "Bad bit-field extraction\n");
1815 return (pc);
1816 }
1817 }
1818
1819 return nextpc;
1820}
1821
1822#include "bfd-in2.h"
1823#include "libcoff.h"
1824
1825static int
ed9a39eb 1826gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
c906108c
SS
1827{
1828 if (arm_pc_is_thumb (memaddr))
1829 {
c5aa993b
JM
1830 static asymbol *asym;
1831 static combined_entry_type ce;
1832 static struct coff_symbol_struct csym;
1833 static struct _bfd fake_bfd;
1834 static bfd_target fake_target;
c906108c
SS
1835
1836 if (csym.native == NULL)
1837 {
1838 /* Create a fake symbol vector containing a Thumb symbol. This is
1839 solely so that the code in print_insn_little_arm() and
1840 print_insn_big_arm() in opcodes/arm-dis.c will detect the presence
1841 of a Thumb symbol and switch to decoding Thumb instructions. */
c5aa993b
JM
1842
1843 fake_target.flavour = bfd_target_coff_flavour;
1844 fake_bfd.xvec = &fake_target;
c906108c 1845 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
c5aa993b
JM
1846 csym.native = &ce;
1847 csym.symbol.the_bfd = &fake_bfd;
1848 csym.symbol.name = "fake";
1849 asym = (asymbol *) & csym;
c906108c 1850 }
c5aa993b 1851
c906108c 1852 memaddr = UNMAKE_THUMB_ADDR (memaddr);
c5aa993b 1853 info->symbols = &asym;
c906108c
SS
1854 }
1855 else
1856 info->symbols = NULL;
c5aa993b 1857
c906108c
SS
1858 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1859 return print_insn_big_arm (memaddr, info);
1860 else
1861 return print_insn_little_arm (memaddr, info);
1862}
1863
ed9a39eb
JM
1864/* This function implements the BREAKPOINT_FROM_PC macro. It uses the
1865 program counter value to determine whether a 16-bit or 32-bit
1866 breakpoint should be used. It returns a pointer to a string of
1867 bytes that encode a breakpoint instruction, stores the length of
1868 the string to *lenptr, and adjusts the program counter (if
1869 necessary) to point to the actual memory location where the
c906108c
SS
1870 breakpoint should be inserted. */
1871
1872unsigned char *
ed9a39eb 1873arm_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
c906108c
SS
1874{
1875 if (arm_pc_is_thumb (*pcptr) || arm_pc_is_thumb_dummy (*pcptr))
1876 {
1877 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
c5aa993b
JM
1878 {
1879 static char thumb_breakpoint[] = THUMB_BE_BREAKPOINT;
1880 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
1881 *lenptr = sizeof (thumb_breakpoint);
1882 return thumb_breakpoint;
1883 }
c906108c 1884 else
c5aa993b
JM
1885 {
1886 static char thumb_breakpoint[] = THUMB_LE_BREAKPOINT;
1887 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
1888 *lenptr = sizeof (thumb_breakpoint);
1889 return thumb_breakpoint;
1890 }
c906108c
SS
1891 }
1892 else
1893 {
1894 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
c5aa993b
JM
1895 {
1896 static char arm_breakpoint[] = ARM_BE_BREAKPOINT;
1897 *lenptr = sizeof (arm_breakpoint);
1898 return arm_breakpoint;
1899 }
c906108c 1900 else
c5aa993b
JM
1901 {
1902 static char arm_breakpoint[] = ARM_LE_BREAKPOINT;
1903 *lenptr = sizeof (arm_breakpoint);
1904 return arm_breakpoint;
1905 }
c906108c
SS
1906 }
1907}
ed9a39eb
JM
1908
1909/* Extract from an array REGBUF containing the (raw) register state a
1910 function return value of type TYPE, and copy that, in virtual
1911 format, into VALBUF. */
1912
1913void
1914arm_extract_return_value (struct type *type,
1915 char regbuf[REGISTER_BYTES],
1916 char *valbuf)
1917{
1918 if (TYPE_CODE_FLT == TYPE_CODE (type))
1919 convert_from_extended (&regbuf[REGISTER_BYTE (F0_REGNUM)], valbuf);
1920 else
1921 memcpy (valbuf, &regbuf[REGISTER_BYTE (A1_REGNUM)], TYPE_LENGTH (type));
1922}
1923
1924/* Return non-zero if the PC is inside a thumb call thunk. */
c906108c
SS
1925
1926int
ed9a39eb 1927arm_in_call_stub (CORE_ADDR pc, char *name)
c906108c
SS
1928{
1929 CORE_ADDR start_addr;
1930
ed9a39eb
JM
1931 /* Find the starting address of the function containing the PC. If
1932 the caller didn't give us a name, look it up at the same time. */
c906108c
SS
1933 if (find_pc_partial_function (pc, name ? NULL : &name, &start_addr, NULL) == 0)
1934 return 0;
1935
1936 return strncmp (name, "_call_via_r", 11) == 0;
1937}
1938
ed9a39eb
JM
1939/* If PC is in a Thumb call or return stub, return the address of the
1940 target PC, which is in a register. The thunk functions are called
1941 _called_via_xx, where x is the register name. The possible names
1942 are r0-r9, sl, fp, ip, sp, and lr. */
c906108c
SS
1943
1944CORE_ADDR
ed9a39eb 1945arm_skip_stub (CORE_ADDR pc)
c906108c 1946{
c5aa993b 1947 char *name;
c906108c
SS
1948 CORE_ADDR start_addr;
1949
1950 /* Find the starting address and name of the function containing the PC. */
1951 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
1952 return 0;
1953
1954 /* Call thunks always start with "_call_via_". */
1955 if (strncmp (name, "_call_via_", 10) == 0)
1956 {
ed9a39eb
JM
1957 /* Use the name suffix to determine which register contains the
1958 target PC. */
c5aa993b
JM
1959 static char *table[15] =
1960 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
1961 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
1962 };
c906108c
SS
1963 int regno;
1964
1965 for (regno = 0; regno <= 14; regno++)
1966 if (strcmp (&name[10], table[regno]) == 0)
1967 return read_register (regno);
1968 }
ed9a39eb 1969
c5aa993b 1970 return 0; /* not a stub */
c906108c
SS
1971}
1972
bc90b915
FN
1973/* If the user changes the register disassembly flavor used for info register
1974 and other commands, we have to also switch the flavor used in opcodes
1975 for disassembly output.
1976 This function is run in the set disassembly_flavor command, and does that. */
1977
1978static void
1979set_disassembly_flavor_sfunc (char *args, int from_tty,
1980 struct cmd_list_element *c)
1981{
1982 set_disassembly_flavor ();
1983}
1984\f
1985static void
1986set_disassembly_flavor (void)
1987{
1988 const char *setname, *setdesc, **regnames;
1989 int numregs, j;
1990
1991 /* Find the flavor that the user wants in the opcodes table. */
1992 int current = 0;
1993 numregs = get_arm_regnames (current, &setname, &setdesc, &regnames);
1994 while ((disassembly_flavor != setname)
1995 && (current < num_flavor_options))
1996 get_arm_regnames (++current, &setname, &setdesc, &regnames);
1997 current_option = current;
1998
1999 /* Fill our copy. */
2000 for (j = 0; j < numregs; j++)
2001 arm_register_names[j] = (char *) regnames[j];
2002
2003 /* Adjust case. */
2004 if (isupper (*regnames[PC_REGNUM]))
2005 {
2006 arm_register_names[FPS_REGNUM] = "FPS";
2007 arm_register_names[PS_REGNUM] = "CPSR";
2008 }
2009 else
2010 {
2011 arm_register_names[FPS_REGNUM] = "fps";
2012 arm_register_names[PS_REGNUM] = "cpsr";
2013 }
2014
2015 /* Synchronize the disassembler. */
2016 set_arm_regname_option (current);
2017}
2018
2019/* arm_othernames implements the "othernames" command. This is kind
2020 of hacky, and I prefer the set-show disassembly-flavor which is
2021 also used for the x86 gdb. I will keep this around, however, in
2022 case anyone is actually using it. */
2023
2024static void
2025arm_othernames (char *names, int n)
2026{
2027 /* Circle through the various flavors. */
2028 current_option = (current_option + 1) % num_flavor_options;
2029
2030 disassembly_flavor = valid_flavors[current_option];
2031 set_disassembly_flavor ();
2032}
2033
c906108c 2034void
ed9a39eb 2035_initialize_arm_tdep (void)
c906108c 2036{
bc90b915
FN
2037 struct ui_file *stb;
2038 long length;
96baa820 2039 struct cmd_list_element *new_cmd;
53904c9e
AC
2040 const char *setname;
2041 const char *setdesc;
2042 const char **regnames;
bc90b915
FN
2043 int numregs, i, j;
2044 static char *helptext;
085dd6e6 2045
c906108c 2046 tm_print_insn = gdb_print_insn_arm;
ed9a39eb 2047
bc90b915
FN
2048 /* Get the number of possible sets of register names defined in opcodes. */
2049 num_flavor_options = get_arm_regname_num_options ();
2050
085dd6e6 2051 /* Sync the opcode insn printer with our register viewer: */
bc90b915 2052 parse_arm_disassembler_option ("reg-names-std");
c5aa993b 2053
bc90b915
FN
2054 /* Begin creating the help text. */
2055 stb = mem_fileopen ();
2056 fprintf_unfiltered (stb, "Set the disassembly flavor.\n\
2057The valid values are:\n");
ed9a39eb 2058
bc90b915
FN
2059 /* Initialize the array that will be passed to add_set_enum_cmd(). */
2060 valid_flavors = xmalloc ((num_flavor_options + 1) * sizeof (char *));
2061 for (i = 0; i < num_flavor_options; i++)
2062 {
2063 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
53904c9e 2064 valid_flavors[i] = setname;
bc90b915
FN
2065 fprintf_unfiltered (stb, "%s - %s\n", setname,
2066 setdesc);
2067 /* Copy the default names (if found) and synchronize disassembler. */
2068 if (!strcmp (setname, "std"))
2069 {
53904c9e 2070 disassembly_flavor = setname;
bc90b915
FN
2071 current_option = i;
2072 for (j = 0; j < numregs; j++)
2073 arm_register_names[j] = (char *) regnames[j];
2074 set_arm_regname_option (i);
2075 }
2076 }
2077 /* Mark the end of valid options. */
2078 valid_flavors[num_flavor_options] = NULL;
c906108c 2079
bc90b915
FN
2080 /* Finish the creation of the help text. */
2081 fprintf_unfiltered (stb, "The default is \"std\".");
2082 helptext = ui_file_xstrdup (stb, &length);
2083 ui_file_delete (stb);
ed9a39eb 2084
bc90b915 2085 /* Add the disassembly-flavor command */
96baa820 2086 new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
ed9a39eb 2087 valid_flavors,
1ed2a135 2088 &disassembly_flavor,
bc90b915 2089 helptext,
ed9a39eb 2090 &setlist);
96baa820 2091 new_cmd->function.sfunc = set_disassembly_flavor_sfunc;
ed9a39eb
JM
2092 add_show_from_set (new_cmd, &showlist);
2093
c906108c
SS
2094 /* ??? Maybe this should be a boolean. */
2095 add_show_from_set (add_set_cmd ("apcs32", no_class,
ed9a39eb 2096 var_zinteger, (char *) &arm_apcs_32,
96baa820 2097 "Set usage of ARM 32-bit mode.\n", &setlist),
ed9a39eb 2098 &showlist);
c906108c 2099
bc90b915
FN
2100 /* Add the deprecated "othernames" command */
2101
2102 add_com ("othernames", class_obscure, arm_othernames,
2103 "Switch to the next set of register names.");
c906108c
SS
2104}
2105
ed9a39eb
JM
2106/* Test whether the coff symbol specific value corresponds to a Thumb
2107 function. */
2108
c906108c 2109int
c5aa993b 2110coff_sym_is_thumb (int val)
c906108c 2111{
c5aa993b
JM
2112 return (val == C_THUMBEXT ||
2113 val == C_THUMBSTAT ||
2114 val == C_THUMBEXTFUNC ||
2115 val == C_THUMBSTATFUNC ||
2116 val == C_THUMBLABEL);
c906108c 2117}
This page took 0.170859 seconds and 4 git commands to generate.