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