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