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