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