+ * gdbarch.sh (DEPRECATED_EXTRACT_RETURN_VALUE): Rename
[binutils-gdb.git] / gdb / arm-tdep.c
1 /* Common target dependent code for GDB on ARM systems.
2 Copyright 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
3 2001, 2002 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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. */
21
22 #include <ctype.h> /* XXX for isupper () */
23
24 #include "defs.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "symfile.h"
30 #include "gdb_string.h"
31 #include "dis-asm.h" /* For register flavors. */
32 #include "regcache.h"
33 #include "doublest.h"
34 #include "value.h"
35 #include "arch-utils.h"
36 #include "solib-svr4.h"
37
38 #include "arm-tdep.h"
39 #include "gdb/sim-arm.h"
40
41 #include "elf-bfd.h"
42 #include "coff/internal.h"
43 #include "elf/arm.h"
44
45 #include "gdb_assert.h"
46
47 static int arm_debug;
48
49 /* Each OS has a different mechanism for accessing the various
50 registers stored in the sigcontext structure.
51
52 SIGCONTEXT_REGISTER_ADDRESS should be defined to the name (or
53 function pointer) which may be used to determine the addresses
54 of the various saved registers in the sigcontext structure.
55
56 For the ARM target, there are three parameters to this function.
57 The first is the pc value of the frame under consideration, the
58 second the stack pointer of this frame, and the last is the
59 register number to fetch.
60
61 If the tm.h file does not define this macro, then it's assumed that
62 no mechanism is needed and we define SIGCONTEXT_REGISTER_ADDRESS to
63 be 0.
64
65 When it comes time to multi-arching this code, see the identically
66 named machinery in ia64-tdep.c for an example of how it could be
67 done. It should not be necessary to modify the code below where
68 this macro is used. */
69
70 #ifdef SIGCONTEXT_REGISTER_ADDRESS
71 #ifndef SIGCONTEXT_REGISTER_ADDRESS_P
72 #define SIGCONTEXT_REGISTER_ADDRESS_P() 1
73 #endif
74 #else
75 #define SIGCONTEXT_REGISTER_ADDRESS(SP,PC,REG) 0
76 #define SIGCONTEXT_REGISTER_ADDRESS_P() 0
77 #endif
78
79 /* Macros for setting and testing a bit in a minimal symbol that marks
80 it as Thumb function. The MSB of the minimal symbol's "info" field
81 is used for this purpose. This field is already being used to store
82 the symbol size, so the assumption is that the symbol size cannot
83 exceed 2^31.
84
85 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
86 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol.
87 MSYMBOL_SIZE Returns the size of the minimal symbol,
88 i.e. the "info" field with the "special" bit
89 masked out. */
90
91 #define MSYMBOL_SET_SPECIAL(msym) \
92 MSYMBOL_INFO (msym) = (char *) (((long) MSYMBOL_INFO (msym)) \
93 | 0x80000000)
94
95 #define MSYMBOL_IS_SPECIAL(msym) \
96 (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0)
97
98 #define MSYMBOL_SIZE(msym) \
99 ((long) MSYMBOL_INFO (msym) & 0x7fffffff)
100
101 /* Number of different reg name sets (options). */
102 static int num_flavor_options;
103
104 /* We have more registers than the disassembler as gdb can print the value
105 of special registers as well.
106 The general register names are overwritten by whatever is being used by
107 the disassembler at the moment. We also adjust the case of cpsr and fps. */
108
109 /* Initial value: Register names used in ARM's ISA documentation. */
110 static char * arm_register_name_strings[] =
111 {"r0", "r1", "r2", "r3", /* 0 1 2 3 */
112 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
113 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
114 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
115 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
116 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
117 "fps", "cpsr" }; /* 24 25 */
118 static char **arm_register_names = arm_register_name_strings;
119
120 /* Valid register name flavors. */
121 static const char **valid_flavors;
122
123 /* Disassembly flavor to use. Default to "std" register names. */
124 static const char *disassembly_flavor;
125 /* Index to that option in the opcodes table. */
126 static int current_option;
127
128 /* This is used to keep the bfd arch_info in sync with the disassembly
129 flavor. */
130 static void set_disassembly_flavor_sfunc(char *, int,
131 struct cmd_list_element *);
132 static void set_disassembly_flavor (void);
133
134 static void convert_from_extended (void *ptr, void *dbl);
135
136 /* Define other aspects of the stack frame. We keep the offsets of
137 all saved registers, 'cause we need 'em a lot! We also keep the
138 current size of the stack frame, and the offset of the frame
139 pointer from the stack pointer (for frameless functions, and when
140 we're still in the prologue of a function with a frame). */
141
142 struct frame_extra_info
143 {
144 int framesize;
145 int frameoffset;
146 int framereg;
147 };
148
149 /* Addresses for calling Thumb functions have the bit 0 set.
150 Here are some macros to test, set, or clear bit 0 of addresses. */
151 #define IS_THUMB_ADDR(addr) ((addr) & 1)
152 #define MAKE_THUMB_ADDR(addr) ((addr) | 1)
153 #define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
154
155 static int
156 arm_frame_chain_valid (CORE_ADDR chain, struct frame_info *thisframe)
157 {
158 return (chain != 0 && (FRAME_SAVED_PC (thisframe) >= LOWEST_PC));
159 }
160
161 /* Set to true if the 32-bit mode is in use. */
162
163 int arm_apcs_32 = 1;
164
165 /* Flag set by arm_fix_call_dummy that tells whether the target
166 function is a Thumb function. This flag is checked by
167 arm_push_arguments. FIXME: Change the PUSH_ARGUMENTS macro (and
168 its use in valops.c) to pass the function address as an additional
169 parameter. */
170
171 static int target_is_thumb;
172
173 /* Flag set by arm_fix_call_dummy that tells whether the calling
174 function is a Thumb function. This flag is checked by
175 arm_pc_is_thumb and arm_call_dummy_breakpoint_offset. */
176
177 static int caller_is_thumb;
178
179 /* Determine if the program counter specified in MEMADDR is in a Thumb
180 function. */
181
182 int
183 arm_pc_is_thumb (CORE_ADDR memaddr)
184 {
185 struct minimal_symbol *sym;
186
187 /* If bit 0 of the address is set, assume this is a Thumb address. */
188 if (IS_THUMB_ADDR (memaddr))
189 return 1;
190
191 /* Thumb functions have a "special" bit set in minimal symbols. */
192 sym = lookup_minimal_symbol_by_pc (memaddr);
193 if (sym)
194 {
195 return (MSYMBOL_IS_SPECIAL (sym));
196 }
197 else
198 {
199 return 0;
200 }
201 }
202
203 /* Determine if the program counter specified in MEMADDR is in a call
204 dummy being called from a Thumb function. */
205
206 int
207 arm_pc_is_thumb_dummy (CORE_ADDR memaddr)
208 {
209 CORE_ADDR sp = read_sp ();
210
211 /* FIXME: Until we switch for the new call dummy macros, this heuristic
212 is the best we can do. We are trying to determine if the pc is on
213 the stack, which (hopefully) will only happen in a call dummy.
214 We hope the current stack pointer is not so far alway from the dummy
215 frame location (true if we have not pushed large data structures or
216 gone too many levels deep) and that our 1024 is not enough to consider
217 code regions as part of the stack (true for most practical purposes). */
218 if (PC_IN_CALL_DUMMY (memaddr, sp, sp + 1024))
219 return caller_is_thumb;
220 else
221 return 0;
222 }
223
224 /* Remove useless bits from addresses in a running program. */
225 static CORE_ADDR
226 arm_addr_bits_remove (CORE_ADDR val)
227 {
228 if (arm_pc_is_thumb (val))
229 return (val & (arm_apcs_32 ? 0xfffffffe : 0x03fffffe));
230 else
231 return (val & (arm_apcs_32 ? 0xfffffffc : 0x03fffffc));
232 }
233
234 /* When reading symbols, we need to zap the low bit of the address,
235 which may be set to 1 for Thumb functions. */
236 static CORE_ADDR
237 arm_smash_text_address (CORE_ADDR val)
238 {
239 return val & ~1;
240 }
241
242 /* Immediately after a function call, return the saved pc. Can't
243 always go through the frames for this because on some machines the
244 new frame is not set up until the new function executes some
245 instructions. */
246
247 static CORE_ADDR
248 arm_saved_pc_after_call (struct frame_info *frame)
249 {
250 return ADDR_BITS_REMOVE (read_register (ARM_LR_REGNUM));
251 }
252
253 /* Determine whether the function invocation represented by FI has a
254 frame on the stack associated with it. If it does return zero,
255 otherwise return 1. */
256
257 static int
258 arm_frameless_function_invocation (struct frame_info *fi)
259 {
260 CORE_ADDR func_start, after_prologue;
261 int frameless;
262
263 /* Sometimes we have functions that do a little setup (like saving the
264 vN registers with the stmdb instruction, but DO NOT set up a frame.
265 The symbol table will report this as a prologue. However, it is
266 important not to try to parse these partial frames as frames, or we
267 will get really confused.
268
269 So I will demand 3 instructions between the start & end of the
270 prologue before I call it a real prologue, i.e. at least
271 mov ip, sp,
272 stmdb sp!, {}
273 sub sp, ip, #4. */
274
275 func_start = (get_pc_function_start ((fi)->pc) + FUNCTION_START_OFFSET);
276 after_prologue = SKIP_PROLOGUE (func_start);
277
278 /* There are some frameless functions whose first two instructions
279 follow the standard APCS form, in which case after_prologue will
280 be func_start + 8. */
281
282 frameless = (after_prologue < func_start + 12);
283 return frameless;
284 }
285
286 /* The address of the arguments in the frame. */
287 static CORE_ADDR
288 arm_frame_args_address (struct frame_info *fi)
289 {
290 return fi->frame;
291 }
292
293 /* The address of the local variables in the frame. */
294 static CORE_ADDR
295 arm_frame_locals_address (struct frame_info *fi)
296 {
297 return fi->frame;
298 }
299
300 /* The number of arguments being passed in the frame. */
301 static int
302 arm_frame_num_args (struct frame_info *fi)
303 {
304 /* We have no way of knowing. */
305 return -1;
306 }
307
308 /* A typical Thumb prologue looks like this:
309 push {r7, lr}
310 add sp, sp, #-28
311 add r7, sp, #12
312 Sometimes the latter instruction may be replaced by:
313 mov r7, sp
314
315 or like this:
316 push {r7, lr}
317 mov r7, sp
318 sub sp, #12
319
320 or, on tpcs, like this:
321 sub sp,#16
322 push {r7, lr}
323 (many instructions)
324 mov r7, sp
325 sub sp, #12
326
327 There is always one instruction of three classes:
328 1 - push
329 2 - setting of r7
330 3 - adjusting of sp
331
332 When we have found at least one of each class we are done with the prolog.
333 Note that the "sub sp, #NN" before the push does not count.
334 */
335
336 static CORE_ADDR
337 thumb_skip_prologue (CORE_ADDR pc, CORE_ADDR func_end)
338 {
339 CORE_ADDR current_pc;
340 /* findmask:
341 bit 0 - push { rlist }
342 bit 1 - mov r7, sp OR add r7, sp, #imm (setting of r7)
343 bit 2 - sub sp, #simm OR add sp, #simm (adjusting of sp)
344 */
345 int findmask = 0;
346
347 for (current_pc = pc;
348 current_pc + 2 < func_end && current_pc < pc + 40;
349 current_pc += 2)
350 {
351 unsigned short insn = read_memory_unsigned_integer (current_pc, 2);
352
353 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
354 {
355 findmask |= 1; /* push found */
356 }
357 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR
358 sub sp, #simm */
359 {
360 if ((findmask & 1) == 0) /* before push ? */
361 continue;
362 else
363 findmask |= 4; /* add/sub sp found */
364 }
365 else if ((insn & 0xff00) == 0xaf00) /* add r7, sp, #imm */
366 {
367 findmask |= 2; /* setting of r7 found */
368 }
369 else if (insn == 0x466f) /* mov r7, sp */
370 {
371 findmask |= 2; /* setting of r7 found */
372 }
373 else if (findmask == (4+2+1))
374 {
375 /* We have found one of each type of prologue instruction */
376 break;
377 }
378 else
379 /* Something in the prolog that we don't care about or some
380 instruction from outside the prolog scheduled here for
381 optimization. */
382 continue;
383 }
384
385 return current_pc;
386 }
387
388 /* Advance the PC across any function entry prologue instructions to
389 reach some "real" code.
390
391 The APCS (ARM Procedure Call Standard) defines the following
392 prologue:
393
394 mov ip, sp
395 [stmfd sp!, {a1,a2,a3,a4}]
396 stmfd sp!, {...,fp,ip,lr,pc}
397 [stfe f7, [sp, #-12]!]
398 [stfe f6, [sp, #-12]!]
399 [stfe f5, [sp, #-12]!]
400 [stfe f4, [sp, #-12]!]
401 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
402
403 static CORE_ADDR
404 arm_skip_prologue (CORE_ADDR pc)
405 {
406 unsigned long inst;
407 CORE_ADDR skip_pc;
408 CORE_ADDR func_addr, func_end = 0;
409 char *func_name;
410 struct symtab_and_line sal;
411
412 /* If we're in a dummy frame, don't even try to skip the prologue. */
413 if (USE_GENERIC_DUMMY_FRAMES
414 && PC_IN_CALL_DUMMY (pc, 0, 0))
415 return pc;
416
417 /* See what the symbol table says. */
418
419 if (find_pc_partial_function (pc, &func_name, &func_addr, &func_end))
420 {
421 struct symbol *sym;
422
423 /* Found a function. */
424 sym = lookup_symbol (func_name, NULL, VAR_NAMESPACE, NULL, NULL);
425 if (sym && SYMBOL_LANGUAGE (sym) != language_asm)
426 {
427 /* Don't use this trick for assembly source files. */
428 sal = find_pc_line (func_addr, 0);
429 if ((sal.line != 0) && (sal.end < func_end))
430 return sal.end;
431 }
432 }
433
434 /* Check if this is Thumb code. */
435 if (arm_pc_is_thumb (pc))
436 return thumb_skip_prologue (pc, func_end);
437
438 /* Can't find the prologue end in the symbol table, try it the hard way
439 by disassembling the instructions. */
440
441 /* Like arm_scan_prologue, stop no later than pc + 64. */
442 if (func_end == 0 || func_end > pc + 64)
443 func_end = pc + 64;
444
445 for (skip_pc = pc; skip_pc < func_end; skip_pc += 4)
446 {
447 inst = read_memory_integer (skip_pc, 4);
448
449 /* "mov ip, sp" is no longer a required part of the prologue. */
450 if (inst == 0xe1a0c00d) /* mov ip, sp */
451 continue;
452
453 /* Some prologues begin with "str lr, [sp, #-4]!". */
454 if (inst == 0xe52de004) /* str lr, [sp, #-4]! */
455 continue;
456
457 if ((inst & 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */
458 continue;
459
460 if ((inst & 0xfffff800) == 0xe92dd800) /* stmfd sp!,{fp,ip,lr,pc} */
461 continue;
462
463 /* Any insns after this point may float into the code, if it makes
464 for better instruction scheduling, so we skip them only if we
465 find them, but still consider the function to be frame-ful. */
466
467 /* We may have either one sfmfd instruction here, or several stfe
468 insns, depending on the version of floating point code we
469 support. */
470 if ((inst & 0xffbf0fff) == 0xec2d0200) /* sfmfd fn, <cnt>, [sp]! */
471 continue;
472
473 if ((inst & 0xffff8fff) == 0xed6d0103) /* stfe fn, [sp, #-12]! */
474 continue;
475
476 if ((inst & 0xfffff000) == 0xe24cb000) /* sub fp, ip, #nn */
477 continue;
478
479 if ((inst & 0xfffff000) == 0xe24dd000) /* sub sp, sp, #nn */
480 continue;
481
482 if ((inst & 0xffffc000) == 0xe54b0000 || /* strb r(0123),[r11,#-nn] */
483 (inst & 0xffffc0f0) == 0xe14b00b0 || /* strh r(0123),[r11,#-nn] */
484 (inst & 0xffffc000) == 0xe50b0000) /* str r(0123),[r11,#-nn] */
485 continue;
486
487 if ((inst & 0xffffc000) == 0xe5cd0000 || /* strb r(0123),[sp,#nn] */
488 (inst & 0xffffc0f0) == 0xe1cd00b0 || /* strh r(0123),[sp,#nn] */
489 (inst & 0xffffc000) == 0xe58d0000) /* str r(0123),[sp,#nn] */
490 continue;
491
492 /* Un-recognized instruction; stop scanning. */
493 break;
494 }
495
496 return skip_pc; /* End of prologue */
497 }
498
499 /* *INDENT-OFF* */
500 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
501 This function decodes a Thumb function prologue to determine:
502 1) the size of the stack frame
503 2) which registers are saved on it
504 3) the offsets of saved regs
505 4) the offset from the stack pointer to the frame pointer
506 This information is stored in the "extra" fields of the frame_info.
507
508 A typical Thumb function prologue would create this stack frame
509 (offsets relative to FP)
510 old SP -> 24 stack parameters
511 20 LR
512 16 R7
513 R7 -> 0 local variables (16 bytes)
514 SP -> -12 additional stack space (12 bytes)
515 The frame size would thus be 36 bytes, and the frame offset would be
516 12 bytes. The frame register is R7.
517
518 The comments for thumb_skip_prolog() describe the algorithm we use
519 to detect the end of the prolog. */
520 /* *INDENT-ON* */
521
522 static void
523 thumb_scan_prologue (struct frame_info *fi)
524 {
525 CORE_ADDR prologue_start;
526 CORE_ADDR prologue_end;
527 CORE_ADDR current_pc;
528 /* Which register has been copied to register n? */
529 int saved_reg[16];
530 /* findmask:
531 bit 0 - push { rlist }
532 bit 1 - mov r7, sp OR add r7, sp, #imm (setting of r7)
533 bit 2 - sub sp, #simm OR add sp, #simm (adjusting of sp)
534 */
535 int findmask = 0;
536 int i;
537
538 /* Don't try to scan dummy frames. */
539 if (USE_GENERIC_DUMMY_FRAMES
540 && fi != NULL
541 && PC_IN_CALL_DUMMY (fi->pc, 0, 0))
542 return;
543
544 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
545 {
546 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
547
548 if (sal.line == 0) /* no line info, use current PC */
549 prologue_end = fi->pc;
550 else if (sal.end < prologue_end) /* next line begins after fn end */
551 prologue_end = sal.end; /* (probably means no prologue) */
552 }
553 else
554 /* We're in the boondocks: allow for
555 16 pushes, an add, and "mv fp,sp". */
556 prologue_end = prologue_start + 40;
557
558 prologue_end = min (prologue_end, fi->pc);
559
560 /* Initialize the saved register map. When register H is copied to
561 register L, we will put H in saved_reg[L]. */
562 for (i = 0; i < 16; i++)
563 saved_reg[i] = i;
564
565 /* Search the prologue looking for instructions that set up the
566 frame pointer, adjust the stack pointer, and save registers.
567 Do this until all basic prolog instructions are found. */
568
569 fi->extra_info->framesize = 0;
570 for (current_pc = prologue_start;
571 (current_pc < prologue_end) && ((findmask & 7) != 7);
572 current_pc += 2)
573 {
574 unsigned short insn;
575 int regno;
576 int offset;
577
578 insn = read_memory_unsigned_integer (current_pc, 2);
579
580 if ((insn & 0xfe00) == 0xb400) /* push { rlist } */
581 {
582 int mask;
583 findmask |= 1; /* push found */
584 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
585 whether to save LR (R14). */
586 mask = (insn & 0xff) | ((insn & 0x100) << 6);
587
588 /* Calculate offsets of saved R0-R7 and LR. */
589 for (regno = ARM_LR_REGNUM; regno >= 0; regno--)
590 if (mask & (1 << regno))
591 {
592 fi->extra_info->framesize += 4;
593 fi->saved_regs[saved_reg[regno]] =
594 -(fi->extra_info->framesize);
595 /* Reset saved register map. */
596 saved_reg[regno] = regno;
597 }
598 }
599 else if ((insn & 0xff00) == 0xb000) /* add sp, #simm OR
600 sub sp, #simm */
601 {
602 if ((findmask & 1) == 0) /* before push? */
603 continue;
604 else
605 findmask |= 4; /* add/sub sp found */
606
607 offset = (insn & 0x7f) << 2; /* get scaled offset */
608 if (insn & 0x80) /* is it signed? (==subtracting) */
609 {
610 fi->extra_info->frameoffset += offset;
611 offset = -offset;
612 }
613 fi->extra_info->framesize -= offset;
614 }
615 else if ((insn & 0xff00) == 0xaf00) /* add r7, sp, #imm */
616 {
617 findmask |= 2; /* setting of r7 found */
618 fi->extra_info->framereg = THUMB_FP_REGNUM;
619 /* get scaled offset */
620 fi->extra_info->frameoffset = (insn & 0xff) << 2;
621 }
622 else if (insn == 0x466f) /* mov r7, sp */
623 {
624 findmask |= 2; /* setting of r7 found */
625 fi->extra_info->framereg = THUMB_FP_REGNUM;
626 fi->extra_info->frameoffset = 0;
627 saved_reg[THUMB_FP_REGNUM] = ARM_SP_REGNUM;
628 }
629 else if ((insn & 0xffc0) == 0x4640) /* mov r0-r7, r8-r15 */
630 {
631 int lo_reg = insn & 7; /* dest. register (r0-r7) */
632 int hi_reg = ((insn >> 3) & 7) + 8; /* source register (r8-15) */
633 saved_reg[lo_reg] = hi_reg; /* remember hi reg was saved */
634 }
635 else
636 /* Something in the prolog that we don't care about or some
637 instruction from outside the prolog scheduled here for
638 optimization. */
639 continue;
640 }
641 }
642
643 /* Check if prologue for this frame's PC has already been scanned. If
644 it has, copy the relevant information about that prologue and
645 return non-zero. Otherwise do not copy anything and return zero.
646
647 The information saved in the cache includes:
648 * the frame register number;
649 * the size of the stack frame;
650 * the offsets of saved regs (relative to the old SP); and
651 * the offset from the stack pointer to the frame pointer
652
653 The cache contains only one entry, since this is adequate for the
654 typical sequence of prologue scan requests we get. When performing
655 a backtrace, GDB will usually ask to scan the same function twice
656 in a row (once to get the frame chain, and once to fill in the
657 extra frame information). */
658
659 static struct frame_info prologue_cache;
660
661 static int
662 check_prologue_cache (struct frame_info *fi)
663 {
664 int i;
665
666 if (fi->pc == prologue_cache.pc)
667 {
668 fi->extra_info->framereg = prologue_cache.extra_info->framereg;
669 fi->extra_info->framesize = prologue_cache.extra_info->framesize;
670 fi->extra_info->frameoffset = prologue_cache.extra_info->frameoffset;
671 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
672 fi->saved_regs[i] = prologue_cache.saved_regs[i];
673 return 1;
674 }
675 else
676 return 0;
677 }
678
679
680 /* Copy the prologue information from fi to the prologue cache. */
681
682 static void
683 save_prologue_cache (struct frame_info *fi)
684 {
685 int i;
686
687 prologue_cache.pc = fi->pc;
688 prologue_cache.extra_info->framereg = fi->extra_info->framereg;
689 prologue_cache.extra_info->framesize = fi->extra_info->framesize;
690 prologue_cache.extra_info->frameoffset = fi->extra_info->frameoffset;
691
692 for (i = 0; i < NUM_REGS + NUM_PSEUDO_REGS; i++)
693 prologue_cache.saved_regs[i] = fi->saved_regs[i];
694 }
695
696
697 /* This function decodes an ARM function prologue to determine:
698 1) the size of the stack frame
699 2) which registers are saved on it
700 3) the offsets of saved regs
701 4) the offset from the stack pointer to the frame pointer
702 This information is stored in the "extra" fields of the frame_info.
703
704 There are two basic forms for the ARM prologue. The fixed argument
705 function call will look like:
706
707 mov ip, sp
708 stmfd sp!, {fp, ip, lr, pc}
709 sub fp, ip, #4
710 [sub sp, sp, #4]
711
712 Which would create this stack frame (offsets relative to FP):
713 IP -> 4 (caller's stack)
714 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
715 -4 LR (return address in caller)
716 -8 IP (copy of caller's SP)
717 -12 FP (caller's FP)
718 SP -> -28 Local variables
719
720 The frame size would thus be 32 bytes, and the frame offset would be
721 28 bytes. The stmfd call can also save any of the vN registers it
722 plans to use, which increases the frame size accordingly.
723
724 Note: The stored PC is 8 off of the STMFD instruction that stored it
725 because the ARM Store instructions always store PC + 8 when you read
726 the PC register.
727
728 A variable argument function call will look like:
729
730 mov ip, sp
731 stmfd sp!, {a1, a2, a3, a4}
732 stmfd sp!, {fp, ip, lr, pc}
733 sub fp, ip, #20
734
735 Which would create this stack frame (offsets relative to FP):
736 IP -> 20 (caller's stack)
737 16 A4
738 12 A3
739 8 A2
740 4 A1
741 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
742 -4 LR (return address in caller)
743 -8 IP (copy of caller's SP)
744 -12 FP (caller's FP)
745 SP -> -28 Local variables
746
747 The frame size would thus be 48 bytes, and the frame offset would be
748 28 bytes.
749
750 There is another potential complication, which is that the optimizer
751 will try to separate the store of fp in the "stmfd" instruction from
752 the "sub fp, ip, #NN" instruction. Almost anything can be there, so
753 we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
754
755 Also, note, the original version of the ARM toolchain claimed that there
756 should be an
757
758 instruction at the end of the prologue. I have never seen GCC produce
759 this, and the ARM docs don't mention it. We still test for it below in
760 case it happens...
761
762 */
763
764 static void
765 arm_scan_prologue (struct frame_info *fi)
766 {
767 int regno, sp_offset, fp_offset;
768 LONGEST return_value;
769 CORE_ADDR prologue_start, prologue_end, current_pc;
770
771 /* Check if this function is already in the cache of frame information. */
772 if (check_prologue_cache (fi))
773 return;
774
775 /* Assume there is no frame until proven otherwise. */
776 fi->extra_info->framereg = ARM_SP_REGNUM;
777 fi->extra_info->framesize = 0;
778 fi->extra_info->frameoffset = 0;
779
780 /* Check for Thumb prologue. */
781 if (arm_pc_is_thumb (fi->pc))
782 {
783 thumb_scan_prologue (fi);
784 save_prologue_cache (fi);
785 return;
786 }
787
788 /* Find the function prologue. If we can't find the function in
789 the symbol table, peek in the stack frame to find the PC. */
790 if (find_pc_partial_function (fi->pc, NULL, &prologue_start, &prologue_end))
791 {
792 /* One way to find the end of the prologue (which works well
793 for unoptimized code) is to do the following:
794
795 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
796
797 if (sal.line == 0)
798 prologue_end = fi->pc;
799 else if (sal.end < prologue_end)
800 prologue_end = sal.end;
801
802 This mechanism is very accurate so long as the optimizer
803 doesn't move any instructions from the function body into the
804 prologue. If this happens, sal.end will be the last
805 instruction in the first hunk of prologue code just before
806 the first instruction that the scheduler has moved from
807 the body to the prologue.
808
809 In order to make sure that we scan all of the prologue
810 instructions, we use a slightly less accurate mechanism which
811 may scan more than necessary. To help compensate for this
812 lack of accuracy, the prologue scanning loop below contains
813 several clauses which'll cause the loop to terminate early if
814 an implausible prologue instruction is encountered.
815
816 The expression
817
818 prologue_start + 64
819
820 is a suitable endpoint since it accounts for the largest
821 possible prologue plus up to five instructions inserted by
822 the scheduler. */
823
824 if (prologue_end > prologue_start + 64)
825 {
826 prologue_end = prologue_start + 64; /* See above. */
827 }
828 }
829 else
830 {
831 /* Get address of the stmfd in the prologue of the callee;
832 the saved PC is the address of the stmfd + 8. */
833 if (!safe_read_memory_integer (fi->frame, 4, &return_value))
834 return;
835 else
836 {
837 prologue_start = ADDR_BITS_REMOVE (return_value) - 8;
838 prologue_end = prologue_start + 64; /* See above. */
839 }
840 }
841
842 /* Now search the prologue looking for instructions that set up the
843 frame pointer, adjust the stack pointer, and save registers.
844
845 Be careful, however, and if it doesn't look like a prologue,
846 don't try to scan it. If, for instance, a frameless function
847 begins with stmfd sp!, then we will tell ourselves there is
848 a frame, which will confuse stack traceback, as well as "finish"
849 and other operations that rely on a knowledge of the stack
850 traceback.
851
852 In the APCS, the prologue should start with "mov ip, sp" so
853 if we don't see this as the first insn, we will stop.
854
855 [Note: This doesn't seem to be true any longer, so it's now an
856 optional part of the prologue. - Kevin Buettner, 2001-11-20]
857
858 [Note further: The "mov ip,sp" only seems to be missing in
859 frameless functions at optimization level "-O2" or above,
860 in which case it is often (but not always) replaced by
861 "str lr, [sp, #-4]!". - Michael Snyder, 2002-04-23] */
862
863 sp_offset = fp_offset = 0;
864
865 for (current_pc = prologue_start;
866 current_pc < prologue_end;
867 current_pc += 4)
868 {
869 unsigned int insn = read_memory_unsigned_integer (current_pc, 4);
870
871 if (insn == 0xe1a0c00d) /* mov ip, sp */
872 {
873 continue;
874 }
875 else if (insn == 0xe52de004) /* str lr, [sp, #-4]! */
876 {
877 /* Function is frameless: extra_info defaults OK? */
878 continue;
879 }
880 else if ((insn & 0xffff0000) == 0xe92d0000)
881 /* stmfd sp!, {..., fp, ip, lr, pc}
882 or
883 stmfd sp!, {a1, a2, a3, a4} */
884 {
885 int mask = insn & 0xffff;
886
887 /* Calculate offsets of saved registers. */
888 for (regno = ARM_PC_REGNUM; regno >= 0; regno--)
889 if (mask & (1 << regno))
890 {
891 sp_offset -= 4;
892 fi->saved_regs[regno] = sp_offset;
893 }
894 }
895 else if ((insn & 0xffffc000) == 0xe54b0000 || /* strb rx,[r11,#-n] */
896 (insn & 0xffffc0f0) == 0xe14b00b0 || /* strh rx,[r11,#-n] */
897 (insn & 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
898 {
899 /* No need to add this to saved_regs -- it's just an arg reg. */
900 continue;
901 }
902 else if ((insn & 0xffffc000) == 0xe5cd0000 || /* strb rx,[sp,#n] */
903 (insn & 0xffffc0f0) == 0xe1cd00b0 || /* strh rx,[sp,#n] */
904 (insn & 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
905 {
906 /* No need to add this to saved_regs -- it's just an arg reg. */
907 continue;
908 }
909 else if ((insn & 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
910 {
911 unsigned imm = insn & 0xff; /* immediate value */
912 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
913 imm = (imm >> rot) | (imm << (32 - rot));
914 fp_offset = -imm;
915 fi->extra_info->framereg = ARM_FP_REGNUM;
916 }
917 else if ((insn & 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
918 {
919 unsigned imm = insn & 0xff; /* immediate value */
920 unsigned rot = (insn & 0xf00) >> 7; /* rotate amount */
921 imm = (imm >> rot) | (imm << (32 - rot));
922 sp_offset -= imm;
923 }
924 else if ((insn & 0xffff7fff) == 0xed6d0103) /* stfe f?, [sp, -#c]! */
925 {
926 sp_offset -= 12;
927 regno = ARM_F0_REGNUM + ((insn >> 12) & 0x07);
928 fi->saved_regs[regno] = sp_offset;
929 }
930 else if ((insn & 0xffbf0fff) == 0xec2d0200) /* sfmfd f0, 4, [sp!] */
931 {
932 int n_saved_fp_regs;
933 unsigned int fp_start_reg, fp_bound_reg;
934
935 if ((insn & 0x800) == 0x800) /* N0 is set */
936 {
937 if ((insn & 0x40000) == 0x40000) /* N1 is set */
938 n_saved_fp_regs = 3;
939 else
940 n_saved_fp_regs = 1;
941 }
942 else
943 {
944 if ((insn & 0x40000) == 0x40000) /* N1 is set */
945 n_saved_fp_regs = 2;
946 else
947 n_saved_fp_regs = 4;
948 }
949
950 fp_start_reg = ARM_F0_REGNUM + ((insn >> 12) & 0x7);
951 fp_bound_reg = fp_start_reg + n_saved_fp_regs;
952 for (; fp_start_reg < fp_bound_reg; fp_start_reg++)
953 {
954 sp_offset -= 12;
955 fi->saved_regs[fp_start_reg++] = sp_offset;
956 }
957 }
958 else if ((insn & 0xf0000000) != 0xe0000000)
959 break; /* Condition not true, exit early */
960 else if ((insn & 0xfe200000) == 0xe8200000) /* ldm? */
961 break; /* Don't scan past a block load */
962 else
963 /* The optimizer might shove anything into the prologue,
964 so we just skip what we don't recognize. */
965 continue;
966 }
967
968 /* The frame size is just the negative of the offset (from the
969 original SP) of the last thing thing we pushed on the stack.
970 The frame offset is [new FP] - [new SP]. */
971 fi->extra_info->framesize = -sp_offset;
972 if (fi->extra_info->framereg == ARM_FP_REGNUM)
973 fi->extra_info->frameoffset = fp_offset - sp_offset;
974 else
975 fi->extra_info->frameoffset = 0;
976
977 save_prologue_cache (fi);
978 }
979
980 /* Find REGNUM on the stack. Otherwise, it's in an active register.
981 One thing we might want to do here is to check REGNUM against the
982 clobber mask, and somehow flag it as invalid if it isn't saved on
983 the stack somewhere. This would provide a graceful failure mode
984 when trying to get the value of caller-saves registers for an inner
985 frame. */
986
987 static CORE_ADDR
988 arm_find_callers_reg (struct frame_info *fi, int regnum)
989 {
990 /* NOTE: cagney/2002-05-03: This function really shouldn't be
991 needed. Instead the (still being written) register unwind
992 function could be called directly. */
993 for (; fi; fi = fi->next)
994 {
995 if (USE_GENERIC_DUMMY_FRAMES
996 && PC_IN_CALL_DUMMY (fi->pc, 0, 0))
997 {
998 return generic_read_register_dummy (fi->pc, fi->frame, regnum);
999 }
1000 else if (fi->saved_regs[regnum] != 0)
1001 {
1002 /* NOTE: cagney/2002-05-03: This would normally need to
1003 handle ARM_SP_REGNUM as a special case as, according to
1004 the frame.h comments, saved_regs[SP_REGNUM] contains the
1005 SP value not its address. It appears that the ARM isn't
1006 doing this though. */
1007 return read_memory_integer (fi->saved_regs[regnum],
1008 REGISTER_RAW_SIZE (regnum));
1009 }
1010 }
1011 return read_register (regnum);
1012 }
1013 /* Function: frame_chain Given a GDB frame, determine the address of
1014 the calling function's frame. This will be used to create a new
1015 GDB frame struct, and then INIT_EXTRA_FRAME_INFO and INIT_FRAME_PC
1016 will be called for the new frame. For ARM, we save the frame size
1017 when we initialize the frame_info. */
1018
1019 static CORE_ADDR
1020 arm_frame_chain (struct frame_info *fi)
1021 {
1022 CORE_ADDR caller_pc;
1023 int framereg = fi->extra_info->framereg;
1024
1025 if (USE_GENERIC_DUMMY_FRAMES
1026 && PC_IN_CALL_DUMMY (fi->pc, 0, 0))
1027 /* A generic call dummy's frame is the same as caller's. */
1028 return fi->frame;
1029
1030 if (fi->pc < LOWEST_PC)
1031 return 0;
1032
1033 /* If the caller is the startup code, we're at the end of the chain. */
1034 caller_pc = FRAME_SAVED_PC (fi);
1035
1036 /* If the caller is Thumb and the caller is ARM, or vice versa,
1037 the frame register of the caller is different from ours.
1038 So we must scan the prologue of the caller to determine its
1039 frame register number. */
1040 /* XXX Fixme, we should try to do this without creating a temporary
1041 caller_fi. */
1042 if (arm_pc_is_thumb (caller_pc) != arm_pc_is_thumb (fi->pc))
1043 {
1044 struct frame_info caller_fi;
1045 struct cleanup *old_chain;
1046
1047 /* Create a temporary frame suitable for scanning the caller's
1048 prologue. (Ugh.) */
1049 memset (&caller_fi, 0, sizeof (caller_fi));
1050 caller_fi.extra_info = (struct frame_extra_info *)
1051 xcalloc (1, sizeof (struct frame_extra_info));
1052 old_chain = make_cleanup (xfree, caller_fi.extra_info);
1053 caller_fi.saved_regs = (CORE_ADDR *)
1054 xcalloc (1, SIZEOF_FRAME_SAVED_REGS);
1055 make_cleanup (xfree, caller_fi.saved_regs);
1056
1057 /* Now, scan the prologue and obtain the frame register. */
1058 caller_fi.pc = caller_pc;
1059 arm_scan_prologue (&caller_fi);
1060 framereg = caller_fi.extra_info->framereg;
1061
1062 /* Deallocate the storage associated with the temporary frame
1063 created above. */
1064 do_cleanups (old_chain);
1065 }
1066
1067 /* If the caller used a frame register, return its value.
1068 Otherwise, return the caller's stack pointer. */
1069 if (framereg == ARM_FP_REGNUM || framereg == THUMB_FP_REGNUM)
1070 return arm_find_callers_reg (fi, framereg);
1071 else
1072 return fi->frame + fi->extra_info->framesize;
1073 }
1074
1075 /* This function actually figures out the frame address for a given pc
1076 and sp. This is tricky because we sometimes don't use an explicit
1077 frame pointer, and the previous stack pointer isn't necessarily
1078 recorded on the stack. The only reliable way to get this info is
1079 to examine the prologue. FROMLEAF is a little confusing, it means
1080 this is the next frame up the chain AFTER a frameless function. If
1081 this is true, then the frame value for this frame is still in the
1082 fp register. */
1083
1084 static void
1085 arm_init_extra_frame_info (int fromleaf, struct frame_info *fi)
1086 {
1087 int reg;
1088 CORE_ADDR sp;
1089
1090 if (fi->saved_regs == NULL)
1091 frame_saved_regs_zalloc (fi);
1092
1093 fi->extra_info = (struct frame_extra_info *)
1094 frame_obstack_alloc (sizeof (struct frame_extra_info));
1095
1096 fi->extra_info->framesize = 0;
1097 fi->extra_info->frameoffset = 0;
1098 fi->extra_info->framereg = 0;
1099
1100 if (fi->next)
1101 fi->pc = FRAME_SAVED_PC (fi->next);
1102
1103 memset (fi->saved_regs, '\000', sizeof fi->saved_regs);
1104
1105 /* Compute stack pointer for this frame. We use this value for both
1106 the sigtramp and call dummy cases. */
1107 if (!fi->next)
1108 sp = read_sp();
1109 else if (USE_GENERIC_DUMMY_FRAMES
1110 && PC_IN_CALL_DUMMY (fi->next->pc, 0, 0))
1111 /* For generic dummy frames, pull the value direct from the frame.
1112 Having an unwind function to do this would be nice. */
1113 sp = generic_read_register_dummy (fi->next->pc, fi->next->frame,
1114 ARM_SP_REGNUM);
1115 else
1116 sp = (fi->next->frame - fi->next->extra_info->frameoffset
1117 + fi->next->extra_info->framesize);
1118
1119 /* Determine whether or not we're in a sigtramp frame.
1120 Unfortunately, it isn't sufficient to test
1121 fi->signal_handler_caller because this value is sometimes set
1122 after invoking INIT_EXTRA_FRAME_INFO. So we test *both*
1123 fi->signal_handler_caller and PC_IN_SIGTRAMP to determine if we
1124 need to use the sigcontext addresses for the saved registers.
1125
1126 Note: If an ARM PC_IN_SIGTRAMP method ever needs to compare
1127 against the name of the function, the code below will have to be
1128 changed to first fetch the name of the function and then pass
1129 this name to PC_IN_SIGTRAMP. */
1130
1131 if (SIGCONTEXT_REGISTER_ADDRESS_P ()
1132 && (fi->signal_handler_caller || PC_IN_SIGTRAMP (fi->pc, (char *)0)))
1133 {
1134 for (reg = 0; reg < NUM_REGS; reg++)
1135 fi->saved_regs[reg] = SIGCONTEXT_REGISTER_ADDRESS (sp, fi->pc, reg);
1136
1137 /* FIXME: What about thumb mode? */
1138 fi->extra_info->framereg = ARM_SP_REGNUM;
1139 fi->frame =
1140 read_memory_integer (fi->saved_regs[fi->extra_info->framereg],
1141 REGISTER_RAW_SIZE (fi->extra_info->framereg));
1142 fi->extra_info->framesize = 0;
1143 fi->extra_info->frameoffset = 0;
1144
1145 }
1146 else if (PC_IN_CALL_DUMMY (fi->pc, sp, fi->frame))
1147 {
1148 CORE_ADDR rp;
1149 CORE_ADDR callers_sp;
1150
1151 /* Set rp point at the high end of the saved registers. */
1152 rp = fi->frame - REGISTER_SIZE;
1153
1154 /* Fill in addresses of saved registers. */
1155 fi->saved_regs[ARM_PS_REGNUM] = rp;
1156 rp -= REGISTER_RAW_SIZE (ARM_PS_REGNUM);
1157 for (reg = ARM_PC_REGNUM; reg >= 0; reg--)
1158 {
1159 fi->saved_regs[reg] = rp;
1160 rp -= REGISTER_RAW_SIZE (reg);
1161 }
1162
1163 callers_sp = read_memory_integer (fi->saved_regs[ARM_SP_REGNUM],
1164 REGISTER_RAW_SIZE (ARM_SP_REGNUM));
1165 fi->extra_info->framereg = ARM_FP_REGNUM;
1166 fi->extra_info->framesize = callers_sp - sp;
1167 fi->extra_info->frameoffset = fi->frame - sp;
1168 }
1169 else
1170 {
1171 arm_scan_prologue (fi);
1172
1173 if (!fi->next)
1174 /* This is the innermost frame? */
1175 fi->frame = read_register (fi->extra_info->framereg);
1176 else if (USE_GENERIC_DUMMY_FRAMES
1177 && PC_IN_CALL_DUMMY (fi->next->pc, 0, 0))
1178 /* Next inner most frame is a dummy, just grab its frame.
1179 Dummy frames always have the same FP as their caller. */
1180 fi->frame = fi->next->frame;
1181 else if (fi->extra_info->framereg == ARM_FP_REGNUM
1182 || fi->extra_info->framereg == THUMB_FP_REGNUM)
1183 {
1184 /* not the innermost frame */
1185 /* If we have an FP, the callee saved it. */
1186 if (fi->next->saved_regs[fi->extra_info->framereg] != 0)
1187 fi->frame =
1188 read_memory_integer (fi->next
1189 ->saved_regs[fi->extra_info->framereg], 4);
1190 else if (fromleaf)
1191 /* If we were called by a frameless fn. then our frame is
1192 still in the frame pointer register on the board... */
1193 fi->frame = read_fp ();
1194 }
1195
1196 /* Calculate actual addresses of saved registers using offsets
1197 determined by arm_scan_prologue. */
1198 for (reg = 0; reg < NUM_REGS; reg++)
1199 if (fi->saved_regs[reg] != 0)
1200 fi->saved_regs[reg] += (fi->frame + fi->extra_info->framesize
1201 - fi->extra_info->frameoffset);
1202 }
1203 }
1204
1205
1206 /* Find the caller of this frame. We do this by seeing if ARM_LR_REGNUM
1207 is saved in the stack anywhere, otherwise we get it from the
1208 registers.
1209
1210 The old definition of this function was a macro:
1211 #define FRAME_SAVED_PC(FRAME) \
1212 ADDR_BITS_REMOVE (read_memory_integer ((FRAME)->frame - 4, 4)) */
1213
1214 static CORE_ADDR
1215 arm_frame_saved_pc (struct frame_info *fi)
1216 {
1217 /* If a dummy frame, pull the PC out of the frame's register buffer. */
1218 if (USE_GENERIC_DUMMY_FRAMES
1219 && PC_IN_CALL_DUMMY (fi->pc, 0, 0))
1220 return generic_read_register_dummy (fi->pc, fi->frame, ARM_PC_REGNUM);
1221
1222 if (PC_IN_CALL_DUMMY (fi->pc, fi->frame - fi->extra_info->frameoffset,
1223 fi->frame))
1224 {
1225 return read_memory_integer (fi->saved_regs[ARM_PC_REGNUM],
1226 REGISTER_RAW_SIZE (ARM_PC_REGNUM));
1227 }
1228 else
1229 {
1230 CORE_ADDR pc = arm_find_callers_reg (fi, ARM_LR_REGNUM);
1231 return IS_THUMB_ADDR (pc) ? UNMAKE_THUMB_ADDR (pc) : pc;
1232 }
1233 }
1234
1235 /* Return the frame address. On ARM, it is R11; on Thumb it is R7.
1236 Examine the Program Status Register to decide which state we're in. */
1237
1238 static CORE_ADDR
1239 arm_read_fp (void)
1240 {
1241 if (read_register (ARM_PS_REGNUM) & 0x20) /* Bit 5 is Thumb state bit */
1242 return read_register (THUMB_FP_REGNUM); /* R7 if Thumb */
1243 else
1244 return read_register (ARM_FP_REGNUM); /* R11 if ARM */
1245 }
1246
1247 /* Store into a struct frame_saved_regs the addresses of the saved
1248 registers of frame described by FRAME_INFO. This includes special
1249 registers such as PC and FP saved in special ways in the stack
1250 frame. SP is even more special: the address we return for it IS
1251 the sp for the next frame. */
1252
1253 static void
1254 arm_frame_init_saved_regs (struct frame_info *fip)
1255 {
1256
1257 if (fip->saved_regs)
1258 return;
1259
1260 arm_init_extra_frame_info (0, fip);
1261 }
1262
1263 /* Set the return address for a generic dummy frame. ARM uses the
1264 entry point. */
1265
1266 static CORE_ADDR
1267 arm_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
1268 {
1269 write_register (ARM_LR_REGNUM, CALL_DUMMY_ADDRESS ());
1270 return sp;
1271 }
1272
1273 /* Push an empty stack frame, to record the current PC, etc. */
1274
1275 static void
1276 arm_push_dummy_frame (void)
1277 {
1278 CORE_ADDR old_sp = read_register (ARM_SP_REGNUM);
1279 CORE_ADDR sp = old_sp;
1280 CORE_ADDR fp, prologue_start;
1281 int regnum;
1282
1283 /* Push the two dummy prologue instructions in reverse order,
1284 so that they'll be in the correct low-to-high order in memory. */
1285 /* sub fp, ip, #4 */
1286 sp = push_word (sp, 0xe24cb004);
1287 /* stmdb sp!, {r0-r10, fp, ip, lr, pc} */
1288 prologue_start = sp = push_word (sp, 0xe92ddfff);
1289
1290 /* Push a pointer to the dummy prologue + 12, because when stm
1291 instruction stores the PC, it stores the address of the stm
1292 instruction itself plus 12. */
1293 fp = sp = push_word (sp, prologue_start + 12);
1294
1295 /* Push the processor status. */
1296 sp = push_word (sp, read_register (ARM_PS_REGNUM));
1297
1298 /* Push all 16 registers starting with r15. */
1299 for (regnum = ARM_PC_REGNUM; regnum >= 0; regnum--)
1300 sp = push_word (sp, read_register (regnum));
1301
1302 /* Update fp (for both Thumb and ARM) and sp. */
1303 write_register (ARM_FP_REGNUM, fp);
1304 write_register (THUMB_FP_REGNUM, fp);
1305 write_register (ARM_SP_REGNUM, sp);
1306 }
1307
1308 /* CALL_DUMMY_WORDS:
1309 This sequence of words is the instructions
1310
1311 mov lr,pc
1312 mov pc,r4
1313 illegal
1314
1315 Note this is 12 bytes. */
1316
1317 static LONGEST arm_call_dummy_words[] =
1318 {
1319 0xe1a0e00f, 0xe1a0f004, 0xe7ffdefe
1320 };
1321
1322 /* Adjust the call_dummy_breakpoint_offset for the bp_call_dummy
1323 breakpoint to the proper address in the call dummy, so that
1324 `finish' after a stop in a call dummy works.
1325
1326 FIXME rearnsha 2002-02018: Tweeking current_gdbarch is not an
1327 optimal solution, but the call to arm_fix_call_dummy is immediately
1328 followed by a call to run_stack_dummy, which is the only function
1329 where call_dummy_breakpoint_offset is actually used. */
1330
1331
1332 static void
1333 arm_set_call_dummy_breakpoint_offset (void)
1334 {
1335 if (caller_is_thumb)
1336 set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 4);
1337 else
1338 set_gdbarch_call_dummy_breakpoint_offset (current_gdbarch, 8);
1339 }
1340
1341 /* Fix up the call dummy, based on whether the processor is currently
1342 in Thumb or ARM mode, and whether the target function is Thumb or
1343 ARM. There are three different situations requiring three
1344 different dummies:
1345
1346 * ARM calling ARM: uses the call dummy in tm-arm.h, which has already
1347 been copied into the dummy parameter to this function.
1348 * ARM calling Thumb: uses the call dummy in tm-arm.h, but with the
1349 "mov pc,r4" instruction patched to be a "bx r4" instead.
1350 * Thumb calling anything: uses the Thumb dummy defined below, which
1351 works for calling both ARM and Thumb functions.
1352
1353 All three call dummies expect to receive the target function
1354 address in R4, with the low bit set if it's a Thumb function. */
1355
1356 static void
1357 arm_fix_call_dummy (char *dummy, CORE_ADDR pc, CORE_ADDR fun, int nargs,
1358 struct value **args, struct type *type, int gcc_p)
1359 {
1360 static short thumb_dummy[4] =
1361 {
1362 0xf000, 0xf801, /* bl label */
1363 0xdf18, /* swi 24 */
1364 0x4720, /* label: bx r4 */
1365 };
1366 static unsigned long arm_bx_r4 = 0xe12fff14; /* bx r4 instruction */
1367
1368 /* Set flag indicating whether the current PC is in a Thumb function. */
1369 caller_is_thumb = arm_pc_is_thumb (read_pc ());
1370 arm_set_call_dummy_breakpoint_offset ();
1371
1372 /* If the target function is Thumb, set the low bit of the function
1373 address. And if the CPU is currently in ARM mode, patch the
1374 second instruction of call dummy to use a BX instruction to
1375 switch to Thumb mode. */
1376 target_is_thumb = arm_pc_is_thumb (fun);
1377 if (target_is_thumb)
1378 {
1379 fun |= 1;
1380 if (!caller_is_thumb)
1381 store_unsigned_integer (dummy + 4, sizeof (arm_bx_r4), arm_bx_r4);
1382 }
1383
1384 /* If the CPU is currently in Thumb mode, use the Thumb call dummy
1385 instead of the ARM one that's already been copied. This will
1386 work for both Thumb and ARM target functions. */
1387 if (caller_is_thumb)
1388 {
1389 int i;
1390 char *p = dummy;
1391 int len = sizeof (thumb_dummy) / sizeof (thumb_dummy[0]);
1392
1393 for (i = 0; i < len; i++)
1394 {
1395 store_unsigned_integer (p, sizeof (thumb_dummy[0]), thumb_dummy[i]);
1396 p += sizeof (thumb_dummy[0]);
1397 }
1398 }
1399
1400 /* Put the target address in r4; the call dummy will copy this to
1401 the PC. */
1402 write_register (4, fun);
1403 }
1404
1405 /* Note: ScottB
1406
1407 This function does not support passing parameters using the FPA
1408 variant of the APCS. It passes any floating point arguments in the
1409 general registers and/or on the stack. */
1410
1411 static CORE_ADDR
1412 arm_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1413 int struct_return, CORE_ADDR struct_addr)
1414 {
1415 CORE_ADDR fp;
1416 int argnum;
1417 int argreg;
1418 int nstack;
1419 int simd_argreg;
1420 int second_pass;
1421 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
1422
1423 /* Walk through the list of args and determine how large a temporary
1424 stack is required. Need to take care here as structs may be
1425 passed on the stack, and we have to to push them. On the second
1426 pass, do the store. */
1427 nstack = 0;
1428 fp = sp;
1429 for (second_pass = 0; second_pass < 2; second_pass++)
1430 {
1431 /* Compute the FP using the information computed during the
1432 first pass. */
1433 if (second_pass)
1434 fp = sp - nstack;
1435
1436 simd_argreg = 0;
1437 argreg = ARM_A1_REGNUM;
1438 nstack = 0;
1439
1440 /* The struct_return pointer occupies the first parameter
1441 passing register. */
1442 if (struct_return)
1443 {
1444 if (second_pass)
1445 {
1446 if (arm_debug)
1447 fprintf_unfiltered (gdb_stdlog,
1448 "struct return in %s = 0x%s\n",
1449 REGISTER_NAME (argreg),
1450 paddr (struct_addr));
1451 write_register (argreg, struct_addr);
1452 }
1453 argreg++;
1454 }
1455
1456 for (argnum = 0; argnum < nargs; argnum++)
1457 {
1458 int len;
1459 struct type *arg_type;
1460 struct type *target_type;
1461 enum type_code typecode;
1462 char *val;
1463
1464 arg_type = check_typedef (VALUE_TYPE (args[argnum]));
1465 len = TYPE_LENGTH (arg_type);
1466 target_type = TYPE_TARGET_TYPE (arg_type);
1467 typecode = TYPE_CODE (arg_type);
1468 val = VALUE_CONTENTS (args[argnum]);
1469
1470 /* If the argument is a pointer to a function, and it is a
1471 Thumb function, create a LOCAL copy of the value and set
1472 the THUMB bit in it. */
1473 if (second_pass
1474 && TYPE_CODE_PTR == typecode
1475 && target_type != NULL
1476 && TYPE_CODE_FUNC == TYPE_CODE (target_type))
1477 {
1478 CORE_ADDR regval = extract_address (val, len);
1479 if (arm_pc_is_thumb (regval))
1480 {
1481 val = alloca (len);
1482 store_address (val, len, MAKE_THUMB_ADDR (regval));
1483 }
1484 }
1485
1486 /* Copy the argument to general registers or the stack in
1487 register-sized pieces. Large arguments are split between
1488 registers and stack. */
1489 while (len > 0)
1490 {
1491 int partial_len = len < REGISTER_SIZE ? len : REGISTER_SIZE;
1492
1493 if (argreg <= ARM_LAST_ARG_REGNUM)
1494 {
1495 /* The argument is being passed in a general purpose
1496 register. */
1497 if (second_pass)
1498 {
1499 CORE_ADDR regval = extract_address (val,
1500 partial_len);
1501 if (arm_debug)
1502 fprintf_unfiltered (gdb_stdlog,
1503 "arg %d in %s = 0x%s\n",
1504 argnum,
1505 REGISTER_NAME (argreg),
1506 phex (regval, REGISTER_SIZE));
1507 write_register (argreg, regval);
1508 }
1509 argreg++;
1510 }
1511 else
1512 {
1513 if (second_pass)
1514 {
1515 /* Push the arguments onto the stack. */
1516 if (arm_debug)
1517 fprintf_unfiltered (gdb_stdlog,
1518 "arg %d @ 0x%s + %d\n",
1519 argnum, paddr (fp), nstack);
1520 write_memory (fp + nstack, val, REGISTER_SIZE);
1521 }
1522 nstack += REGISTER_SIZE;
1523 }
1524
1525 len -= partial_len;
1526 val += partial_len;
1527 }
1528
1529 }
1530 }
1531
1532 /* Return the botom of the argument list (pointed to by fp). */
1533 return fp;
1534 }
1535
1536 /* Pop the current frame. So long as the frame info has been
1537 initialized properly (see arm_init_extra_frame_info), this code
1538 works for dummy frames as well as regular frames. I.e, there's no
1539 need to have a special case for dummy frames. */
1540 static void
1541 arm_pop_frame (void)
1542 {
1543 int regnum;
1544 struct frame_info *frame = get_current_frame ();
1545 CORE_ADDR old_SP = (frame->frame - frame->extra_info->frameoffset
1546 + frame->extra_info->framesize);
1547
1548 if (USE_GENERIC_DUMMY_FRAMES
1549 && PC_IN_CALL_DUMMY (frame->pc, frame->frame, frame->frame))
1550 {
1551 generic_pop_dummy_frame ();
1552 flush_cached_frames ();
1553 return;
1554 }
1555
1556 for (regnum = 0; regnum < NUM_REGS; regnum++)
1557 if (frame->saved_regs[regnum] != 0)
1558 write_register (regnum,
1559 read_memory_integer (frame->saved_regs[regnum],
1560 REGISTER_RAW_SIZE (regnum)));
1561
1562 write_register (ARM_PC_REGNUM, FRAME_SAVED_PC (frame));
1563 write_register (ARM_SP_REGNUM, old_SP);
1564
1565 flush_cached_frames ();
1566 }
1567
1568 static void
1569 print_fpu_flags (int flags)
1570 {
1571 if (flags & (1 << 0))
1572 fputs ("IVO ", stdout);
1573 if (flags & (1 << 1))
1574 fputs ("DVZ ", stdout);
1575 if (flags & (1 << 2))
1576 fputs ("OFL ", stdout);
1577 if (flags & (1 << 3))
1578 fputs ("UFL ", stdout);
1579 if (flags & (1 << 4))
1580 fputs ("INX ", stdout);
1581 putchar ('\n');
1582 }
1583
1584 /* Print interesting information about the floating point processor
1585 (if present) or emulator. */
1586 static void
1587 arm_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
1588 struct frame_info *frame)
1589 {
1590 register unsigned long status = read_register (ARM_FPS_REGNUM);
1591 int type;
1592
1593 type = (status >> 24) & 127;
1594 printf ("%s FPU type %d\n",
1595 (status & (1 << 31)) ? "Hardware" : "Software",
1596 type);
1597 fputs ("mask: ", stdout);
1598 print_fpu_flags (status >> 16);
1599 fputs ("flags: ", stdout);
1600 print_fpu_flags (status);
1601 }
1602
1603 /* Return the GDB type object for the "standard" data type of data in
1604 register N. */
1605
1606 static struct type *
1607 arm_register_type (int regnum)
1608 {
1609 if (regnum >= ARM_F0_REGNUM && regnum < ARM_F0_REGNUM + NUM_FREGS)
1610 {
1611 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1612 return builtin_type_arm_ext_big;
1613 else
1614 return builtin_type_arm_ext_littlebyte_bigword;
1615 }
1616 else
1617 return builtin_type_int32;
1618 }
1619
1620 /* Index within `registers' of the first byte of the space for
1621 register N. */
1622
1623 static int
1624 arm_register_byte (int regnum)
1625 {
1626 if (regnum < ARM_F0_REGNUM)
1627 return regnum * INT_REGISTER_RAW_SIZE;
1628 else if (regnum < ARM_PS_REGNUM)
1629 return (NUM_GREGS * INT_REGISTER_RAW_SIZE
1630 + (regnum - ARM_F0_REGNUM) * FP_REGISTER_RAW_SIZE);
1631 else
1632 return (NUM_GREGS * INT_REGISTER_RAW_SIZE
1633 + NUM_FREGS * FP_REGISTER_RAW_SIZE
1634 + (regnum - ARM_FPS_REGNUM) * STATUS_REGISTER_SIZE);
1635 }
1636
1637 /* Number of bytes of storage in the actual machine representation for
1638 register N. All registers are 4 bytes, except fp0 - fp7, which are
1639 12 bytes in length. */
1640
1641 static int
1642 arm_register_raw_size (int regnum)
1643 {
1644 if (regnum < ARM_F0_REGNUM)
1645 return INT_REGISTER_RAW_SIZE;
1646 else if (regnum < ARM_FPS_REGNUM)
1647 return FP_REGISTER_RAW_SIZE;
1648 else
1649 return STATUS_REGISTER_SIZE;
1650 }
1651
1652 /* Number of bytes of storage in a program's representation
1653 for register N. */
1654 static int
1655 arm_register_virtual_size (int regnum)
1656 {
1657 if (regnum < ARM_F0_REGNUM)
1658 return INT_REGISTER_VIRTUAL_SIZE;
1659 else if (regnum < ARM_FPS_REGNUM)
1660 return FP_REGISTER_VIRTUAL_SIZE;
1661 else
1662 return STATUS_REGISTER_SIZE;
1663 }
1664
1665 /* Map GDB internal REGNUM onto the Arm simulator register numbers. */
1666 static int
1667 arm_register_sim_regno (int regnum)
1668 {
1669 int reg = regnum;
1670 gdb_assert (reg >= 0 && reg < NUM_REGS);
1671
1672 if (reg < NUM_GREGS)
1673 return SIM_ARM_R0_REGNUM + reg;
1674 reg -= NUM_GREGS;
1675
1676 if (reg < NUM_FREGS)
1677 return SIM_ARM_FP0_REGNUM + reg;
1678 reg -= NUM_FREGS;
1679
1680 if (reg < NUM_SREGS)
1681 return SIM_ARM_FPS_REGNUM + reg;
1682 reg -= NUM_SREGS;
1683
1684 internal_error (__FILE__, __LINE__, "Bad REGNUM %d", regnum);
1685 }
1686
1687 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
1688 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
1689 It is thought that this is is the floating-point register format on
1690 little-endian systems. */
1691
1692 static void
1693 convert_from_extended (void *ptr, void *dbl)
1694 {
1695 DOUBLEST d;
1696 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1697 floatformat_to_doublest (&floatformat_arm_ext_big, ptr, &d);
1698 else
1699 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword,
1700 ptr, &d);
1701 floatformat_from_doublest (TARGET_DOUBLE_FORMAT, &d, dbl);
1702 }
1703
1704 static void
1705 convert_to_extended (void *dbl, void *ptr)
1706 {
1707 DOUBLEST d;
1708 floatformat_to_doublest (TARGET_DOUBLE_FORMAT, ptr, &d);
1709 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1710 floatformat_from_doublest (&floatformat_arm_ext_big, &d, dbl);
1711 else
1712 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword,
1713 &d, dbl);
1714 }
1715
1716 static int
1717 condition_true (unsigned long cond, unsigned long status_reg)
1718 {
1719 if (cond == INST_AL || cond == INST_NV)
1720 return 1;
1721
1722 switch (cond)
1723 {
1724 case INST_EQ:
1725 return ((status_reg & FLAG_Z) != 0);
1726 case INST_NE:
1727 return ((status_reg & FLAG_Z) == 0);
1728 case INST_CS:
1729 return ((status_reg & FLAG_C) != 0);
1730 case INST_CC:
1731 return ((status_reg & FLAG_C) == 0);
1732 case INST_MI:
1733 return ((status_reg & FLAG_N) != 0);
1734 case INST_PL:
1735 return ((status_reg & FLAG_N) == 0);
1736 case INST_VS:
1737 return ((status_reg & FLAG_V) != 0);
1738 case INST_VC:
1739 return ((status_reg & FLAG_V) == 0);
1740 case INST_HI:
1741 return ((status_reg & (FLAG_C | FLAG_Z)) == FLAG_C);
1742 case INST_LS:
1743 return ((status_reg & (FLAG_C | FLAG_Z)) != FLAG_C);
1744 case INST_GE:
1745 return (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0));
1746 case INST_LT:
1747 return (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0));
1748 case INST_GT:
1749 return (((status_reg & FLAG_Z) == 0) &&
1750 (((status_reg & FLAG_N) == 0) == ((status_reg & FLAG_V) == 0)));
1751 case INST_LE:
1752 return (((status_reg & FLAG_Z) != 0) ||
1753 (((status_reg & FLAG_N) == 0) != ((status_reg & FLAG_V) == 0)));
1754 }
1755 return 1;
1756 }
1757
1758 /* Support routines for single stepping. Calculate the next PC value. */
1759 #define submask(x) ((1L << ((x) + 1)) - 1)
1760 #define bit(obj,st) (((obj) >> (st)) & 1)
1761 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
1762 #define sbits(obj,st,fn) \
1763 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
1764 #define BranchDest(addr,instr) \
1765 ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
1766 #define ARM_PC_32 1
1767
1768 static unsigned long
1769 shifted_reg_val (unsigned long inst, int carry, unsigned long pc_val,
1770 unsigned long status_reg)
1771 {
1772 unsigned long res, shift;
1773 int rm = bits (inst, 0, 3);
1774 unsigned long shifttype = bits (inst, 5, 6);
1775
1776 if (bit (inst, 4))
1777 {
1778 int rs = bits (inst, 8, 11);
1779 shift = (rs == 15 ? pc_val + 8 : read_register (rs)) & 0xFF;
1780 }
1781 else
1782 shift = bits (inst, 7, 11);
1783
1784 res = (rm == 15
1785 ? ((pc_val | (ARM_PC_32 ? 0 : status_reg))
1786 + (bit (inst, 4) ? 12 : 8))
1787 : read_register (rm));
1788
1789 switch (shifttype)
1790 {
1791 case 0: /* LSL */
1792 res = shift >= 32 ? 0 : res << shift;
1793 break;
1794
1795 case 1: /* LSR */
1796 res = shift >= 32 ? 0 : res >> shift;
1797 break;
1798
1799 case 2: /* ASR */
1800 if (shift >= 32)
1801 shift = 31;
1802 res = ((res & 0x80000000L)
1803 ? ~((~res) >> shift) : res >> shift);
1804 break;
1805
1806 case 3: /* ROR/RRX */
1807 shift &= 31;
1808 if (shift == 0)
1809 res = (res >> 1) | (carry ? 0x80000000L : 0);
1810 else
1811 res = (res >> shift) | (res << (32 - shift));
1812 break;
1813 }
1814
1815 return res & 0xffffffff;
1816 }
1817
1818 /* Return number of 1-bits in VAL. */
1819
1820 static int
1821 bitcount (unsigned long val)
1822 {
1823 int nbits;
1824 for (nbits = 0; val != 0; nbits++)
1825 val &= val - 1; /* delete rightmost 1-bit in val */
1826 return nbits;
1827 }
1828
1829 CORE_ADDR
1830 thumb_get_next_pc (CORE_ADDR pc)
1831 {
1832 unsigned long pc_val = ((unsigned long) pc) + 4; /* PC after prefetch */
1833 unsigned short inst1 = read_memory_integer (pc, 2);
1834 CORE_ADDR nextpc = pc + 2; /* default is next instruction */
1835 unsigned long offset;
1836
1837 if ((inst1 & 0xff00) == 0xbd00) /* pop {rlist, pc} */
1838 {
1839 CORE_ADDR sp;
1840
1841 /* Fetch the saved PC from the stack. It's stored above
1842 all of the other registers. */
1843 offset = bitcount (bits (inst1, 0, 7)) * REGISTER_SIZE;
1844 sp = read_register (ARM_SP_REGNUM);
1845 nextpc = (CORE_ADDR) read_memory_integer (sp + offset, 4);
1846 nextpc = ADDR_BITS_REMOVE (nextpc);
1847 if (nextpc == pc)
1848 error ("Infinite loop detected");
1849 }
1850 else if ((inst1 & 0xf000) == 0xd000) /* conditional branch */
1851 {
1852 unsigned long status = read_register (ARM_PS_REGNUM);
1853 unsigned long cond = bits (inst1, 8, 11);
1854 if (cond != 0x0f && condition_true (cond, status)) /* 0x0f = SWI */
1855 nextpc = pc_val + (sbits (inst1, 0, 7) << 1);
1856 }
1857 else if ((inst1 & 0xf800) == 0xe000) /* unconditional branch */
1858 {
1859 nextpc = pc_val + (sbits (inst1, 0, 10) << 1);
1860 }
1861 else if ((inst1 & 0xf800) == 0xf000) /* long branch with link */
1862 {
1863 unsigned short inst2 = read_memory_integer (pc + 2, 2);
1864 offset = (sbits (inst1, 0, 10) << 12) + (bits (inst2, 0, 10) << 1);
1865 nextpc = pc_val + offset;
1866 }
1867
1868 return nextpc;
1869 }
1870
1871 CORE_ADDR
1872 arm_get_next_pc (CORE_ADDR pc)
1873 {
1874 unsigned long pc_val;
1875 unsigned long this_instr;
1876 unsigned long status;
1877 CORE_ADDR nextpc;
1878
1879 if (arm_pc_is_thumb (pc))
1880 return thumb_get_next_pc (pc);
1881
1882 pc_val = (unsigned long) pc;
1883 this_instr = read_memory_integer (pc, 4);
1884 status = read_register (ARM_PS_REGNUM);
1885 nextpc = (CORE_ADDR) (pc_val + 4); /* Default case */
1886
1887 if (condition_true (bits (this_instr, 28, 31), status))
1888 {
1889 switch (bits (this_instr, 24, 27))
1890 {
1891 case 0x0:
1892 case 0x1: /* data processing */
1893 case 0x2:
1894 case 0x3:
1895 {
1896 unsigned long operand1, operand2, result = 0;
1897 unsigned long rn;
1898 int c;
1899
1900 if (bits (this_instr, 12, 15) != 15)
1901 break;
1902
1903 if (bits (this_instr, 22, 25) == 0
1904 && bits (this_instr, 4, 7) == 9) /* multiply */
1905 error ("Illegal update to pc in instruction");
1906
1907 /* Multiply into PC */
1908 c = (status & FLAG_C) ? 1 : 0;
1909 rn = bits (this_instr, 16, 19);
1910 operand1 = (rn == 15) ? pc_val + 8 : read_register (rn);
1911
1912 if (bit (this_instr, 25))
1913 {
1914 unsigned long immval = bits (this_instr, 0, 7);
1915 unsigned long rotate = 2 * bits (this_instr, 8, 11);
1916 operand2 = ((immval >> rotate) | (immval << (32 - rotate)))
1917 & 0xffffffff;
1918 }
1919 else /* operand 2 is a shifted register */
1920 operand2 = shifted_reg_val (this_instr, c, pc_val, status);
1921
1922 switch (bits (this_instr, 21, 24))
1923 {
1924 case 0x0: /*and */
1925 result = operand1 & operand2;
1926 break;
1927
1928 case 0x1: /*eor */
1929 result = operand1 ^ operand2;
1930 break;
1931
1932 case 0x2: /*sub */
1933 result = operand1 - operand2;
1934 break;
1935
1936 case 0x3: /*rsb */
1937 result = operand2 - operand1;
1938 break;
1939
1940 case 0x4: /*add */
1941 result = operand1 + operand2;
1942 break;
1943
1944 case 0x5: /*adc */
1945 result = operand1 + operand2 + c;
1946 break;
1947
1948 case 0x6: /*sbc */
1949 result = operand1 - operand2 + c;
1950 break;
1951
1952 case 0x7: /*rsc */
1953 result = operand2 - operand1 + c;
1954 break;
1955
1956 case 0x8:
1957 case 0x9:
1958 case 0xa:
1959 case 0xb: /* tst, teq, cmp, cmn */
1960 result = (unsigned long) nextpc;
1961 break;
1962
1963 case 0xc: /*orr */
1964 result = operand1 | operand2;
1965 break;
1966
1967 case 0xd: /*mov */
1968 /* Always step into a function. */
1969 result = operand2;
1970 break;
1971
1972 case 0xe: /*bic */
1973 result = operand1 & ~operand2;
1974 break;
1975
1976 case 0xf: /*mvn */
1977 result = ~operand2;
1978 break;
1979 }
1980 nextpc = (CORE_ADDR) ADDR_BITS_REMOVE (result);
1981
1982 if (nextpc == pc)
1983 error ("Infinite loop detected");
1984 break;
1985 }
1986
1987 case 0x4:
1988 case 0x5: /* data transfer */
1989 case 0x6:
1990 case 0x7:
1991 if (bit (this_instr, 20))
1992 {
1993 /* load */
1994 if (bits (this_instr, 12, 15) == 15)
1995 {
1996 /* rd == pc */
1997 unsigned long rn;
1998 unsigned long base;
1999
2000 if (bit (this_instr, 22))
2001 error ("Illegal update to pc in instruction");
2002
2003 /* byte write to PC */
2004 rn = bits (this_instr, 16, 19);
2005 base = (rn == 15) ? pc_val + 8 : read_register (rn);
2006 if (bit (this_instr, 24))
2007 {
2008 /* pre-indexed */
2009 int c = (status & FLAG_C) ? 1 : 0;
2010 unsigned long offset =
2011 (bit (this_instr, 25)
2012 ? shifted_reg_val (this_instr, c, pc_val, status)
2013 : bits (this_instr, 0, 11));
2014
2015 if (bit (this_instr, 23))
2016 base += offset;
2017 else
2018 base -= offset;
2019 }
2020 nextpc = (CORE_ADDR) read_memory_integer ((CORE_ADDR) base,
2021 4);
2022
2023 nextpc = ADDR_BITS_REMOVE (nextpc);
2024
2025 if (nextpc == pc)
2026 error ("Infinite loop detected");
2027 }
2028 }
2029 break;
2030
2031 case 0x8:
2032 case 0x9: /* block transfer */
2033 if (bit (this_instr, 20))
2034 {
2035 /* LDM */
2036 if (bit (this_instr, 15))
2037 {
2038 /* loading pc */
2039 int offset = 0;
2040
2041 if (bit (this_instr, 23))
2042 {
2043 /* up */
2044 unsigned long reglist = bits (this_instr, 0, 14);
2045 offset = bitcount (reglist) * 4;
2046 if (bit (this_instr, 24)) /* pre */
2047 offset += 4;
2048 }
2049 else if (bit (this_instr, 24))
2050 offset = -4;
2051
2052 {
2053 unsigned long rn_val =
2054 read_register (bits (this_instr, 16, 19));
2055 nextpc =
2056 (CORE_ADDR) read_memory_integer ((CORE_ADDR) (rn_val
2057 + offset),
2058 4);
2059 }
2060 nextpc = ADDR_BITS_REMOVE (nextpc);
2061 if (nextpc == pc)
2062 error ("Infinite loop detected");
2063 }
2064 }
2065 break;
2066
2067 case 0xb: /* branch & link */
2068 case 0xa: /* branch */
2069 {
2070 nextpc = BranchDest (pc, this_instr);
2071
2072 nextpc = ADDR_BITS_REMOVE (nextpc);
2073 if (nextpc == pc)
2074 error ("Infinite loop detected");
2075 break;
2076 }
2077
2078 case 0xc:
2079 case 0xd:
2080 case 0xe: /* coproc ops */
2081 case 0xf: /* SWI */
2082 break;
2083
2084 default:
2085 fprintf_filtered (gdb_stderr, "Bad bit-field extraction\n");
2086 return (pc);
2087 }
2088 }
2089
2090 return nextpc;
2091 }
2092
2093 /* single_step() is called just before we want to resume the inferior,
2094 if we want to single-step it but there is no hardware or kernel
2095 single-step support. We find the target of the coming instruction
2096 and breakpoint it.
2097
2098 single_step() is also called just after the inferior stops. If we
2099 had set up a simulated single-step, we undo our damage. */
2100
2101 static void
2102 arm_software_single_step (enum target_signal sig, int insert_bpt)
2103 {
2104 static int next_pc; /* State between setting and unsetting. */
2105 static char break_mem[BREAKPOINT_MAX]; /* Temporary storage for mem@bpt */
2106
2107 if (insert_bpt)
2108 {
2109 next_pc = arm_get_next_pc (read_register (ARM_PC_REGNUM));
2110 target_insert_breakpoint (next_pc, break_mem);
2111 }
2112 else
2113 target_remove_breakpoint (next_pc, break_mem);
2114 }
2115
2116 #include "bfd-in2.h"
2117 #include "libcoff.h"
2118
2119 static int
2120 gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info)
2121 {
2122 if (arm_pc_is_thumb (memaddr))
2123 {
2124 static asymbol *asym;
2125 static combined_entry_type ce;
2126 static struct coff_symbol_struct csym;
2127 static struct _bfd fake_bfd;
2128 static bfd_target fake_target;
2129
2130 if (csym.native == NULL)
2131 {
2132 /* Create a fake symbol vector containing a Thumb symbol.
2133 This is solely so that the code in print_insn_little_arm()
2134 and print_insn_big_arm() in opcodes/arm-dis.c will detect
2135 the presence of a Thumb symbol and switch to decoding
2136 Thumb instructions. */
2137
2138 fake_target.flavour = bfd_target_coff_flavour;
2139 fake_bfd.xvec = &fake_target;
2140 ce.u.syment.n_sclass = C_THUMBEXTFUNC;
2141 csym.native = &ce;
2142 csym.symbol.the_bfd = &fake_bfd;
2143 csym.symbol.name = "fake";
2144 asym = (asymbol *) & csym;
2145 }
2146
2147 memaddr = UNMAKE_THUMB_ADDR (memaddr);
2148 info->symbols = &asym;
2149 }
2150 else
2151 info->symbols = NULL;
2152
2153 if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2154 return print_insn_big_arm (memaddr, info);
2155 else
2156 return print_insn_little_arm (memaddr, info);
2157 }
2158
2159 /* The following define instruction sequences that will cause ARM
2160 cpu's to take an undefined instruction trap. These are used to
2161 signal a breakpoint to GDB.
2162
2163 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
2164 modes. A different instruction is required for each mode. The ARM
2165 cpu's can also be big or little endian. Thus four different
2166 instructions are needed to support all cases.
2167
2168 Note: ARMv4 defines several new instructions that will take the
2169 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
2170 not in fact add the new instructions. The new undefined
2171 instructions in ARMv4 are all instructions that had no defined
2172 behaviour in earlier chips. There is no guarantee that they will
2173 raise an exception, but may be treated as NOP's. In practice, it
2174 may only safe to rely on instructions matching:
2175
2176 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
2177 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
2178 C C C C 0 1 1 x x x x x x x x x x x x x x x x x x x x 1 x x x x
2179
2180 Even this may only true if the condition predicate is true. The
2181 following use a condition predicate of ALWAYS so it is always TRUE.
2182
2183 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
2184 and NetBSD all use a software interrupt rather than an undefined
2185 instruction to force a trap. This can be handled by by the
2186 abi-specific code during establishment of the gdbarch vector. */
2187
2188
2189 /* NOTE rearnsha 2002-02-18: for now we allow a non-multi-arch gdb to
2190 override these definitions. */
2191 #ifndef ARM_LE_BREAKPOINT
2192 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
2193 #endif
2194 #ifndef ARM_BE_BREAKPOINT
2195 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
2196 #endif
2197 #ifndef THUMB_LE_BREAKPOINT
2198 #define THUMB_LE_BREAKPOINT {0xfe,0xdf}
2199 #endif
2200 #ifndef THUMB_BE_BREAKPOINT
2201 #define THUMB_BE_BREAKPOINT {0xdf,0xfe}
2202 #endif
2203
2204 static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT;
2205 static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT;
2206 static const char arm_default_thumb_le_breakpoint[] = THUMB_LE_BREAKPOINT;
2207 static const char arm_default_thumb_be_breakpoint[] = THUMB_BE_BREAKPOINT;
2208
2209 /* Determine the type and size of breakpoint to insert at PCPTR. Uses
2210 the program counter value to determine whether a 16-bit or 32-bit
2211 breakpoint should be used. It returns a pointer to a string of
2212 bytes that encode a breakpoint instruction, stores the length of
2213 the string to *lenptr, and adjusts the program counter (if
2214 necessary) to point to the actual memory location where the
2215 breakpoint should be inserted. */
2216
2217 /* XXX ??? from old tm-arm.h: if we're using RDP, then we're inserting
2218 breakpoints and storing their handles instread of what was in
2219 memory. It is nice that this is the same size as a handle -
2220 otherwise remote-rdp will have to change. */
2221
2222 static const unsigned char *
2223 arm_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
2224 {
2225 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2226
2227 if (arm_pc_is_thumb (*pcptr) || arm_pc_is_thumb_dummy (*pcptr))
2228 {
2229 *pcptr = UNMAKE_THUMB_ADDR (*pcptr);
2230 *lenptr = tdep->thumb_breakpoint_size;
2231 return tdep->thumb_breakpoint;
2232 }
2233 else
2234 {
2235 *lenptr = tdep->arm_breakpoint_size;
2236 return tdep->arm_breakpoint;
2237 }
2238 }
2239
2240 /* Extract from an array REGBUF containing the (raw) register state a
2241 function return value of type TYPE, and copy that, in virtual
2242 format, into VALBUF. */
2243
2244 static void
2245 arm_extract_return_value (struct type *type,
2246 char regbuf[REGISTER_BYTES],
2247 char *valbuf)
2248 {
2249 if (TYPE_CODE_FLT == TYPE_CODE (type))
2250 {
2251 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2252
2253 switch (tdep->fp_model)
2254 {
2255 case ARM_FLOAT_FPA:
2256 convert_from_extended (&regbuf[REGISTER_BYTE (ARM_F0_REGNUM)],
2257 valbuf);
2258 break;
2259
2260 case ARM_FLOAT_SOFT:
2261 case ARM_FLOAT_SOFT_VFP:
2262 memcpy (valbuf, &regbuf[REGISTER_BYTE (ARM_A1_REGNUM)],
2263 TYPE_LENGTH (type));
2264 break;
2265
2266 default:
2267 internal_error
2268 (__FILE__, __LINE__,
2269 "arm_extract_return_value: Floating point model not supported");
2270 break;
2271 }
2272 }
2273 else
2274 memcpy (valbuf, &regbuf[REGISTER_BYTE (ARM_A1_REGNUM)],
2275 TYPE_LENGTH (type));
2276 }
2277
2278 /* Extract from an array REGBUF containing the (raw) register state
2279 the address in which a function should return its structure value. */
2280
2281 static CORE_ADDR
2282 arm_extract_struct_value_address (char *regbuf)
2283 {
2284 return extract_address (regbuf, REGISTER_RAW_SIZE(ARM_A1_REGNUM));
2285 }
2286
2287 /* Will a function return an aggregate type in memory or in a
2288 register? Return 0 if an aggregate type can be returned in a
2289 register, 1 if it must be returned in memory. */
2290
2291 static int
2292 arm_use_struct_convention (int gcc_p, struct type *type)
2293 {
2294 int nRc;
2295 register enum type_code code;
2296
2297 /* In the ARM ABI, "integer" like aggregate types are returned in
2298 registers. For an aggregate type to be integer like, its size
2299 must be less than or equal to REGISTER_SIZE and the offset of
2300 each addressable subfield must be zero. Note that bit fields are
2301 not addressable, and all addressable subfields of unions always
2302 start at offset zero.
2303
2304 This function is based on the behaviour of GCC 2.95.1.
2305 See: gcc/arm.c: arm_return_in_memory() for details.
2306
2307 Note: All versions of GCC before GCC 2.95.2 do not set up the
2308 parameters correctly for a function returning the following
2309 structure: struct { float f;}; This should be returned in memory,
2310 not a register. Richard Earnshaw sent me a patch, but I do not
2311 know of any way to detect if a function like the above has been
2312 compiled with the correct calling convention. */
2313
2314 /* All aggregate types that won't fit in a register must be returned
2315 in memory. */
2316 if (TYPE_LENGTH (type) > REGISTER_SIZE)
2317 {
2318 return 1;
2319 }
2320
2321 /* The only aggregate types that can be returned in a register are
2322 structs and unions. Arrays must be returned in memory. */
2323 code = TYPE_CODE (type);
2324 if ((TYPE_CODE_STRUCT != code) && (TYPE_CODE_UNION != code))
2325 {
2326 return 1;
2327 }
2328
2329 /* Assume all other aggregate types can be returned in a register.
2330 Run a check for structures, unions and arrays. */
2331 nRc = 0;
2332
2333 if ((TYPE_CODE_STRUCT == code) || (TYPE_CODE_UNION == code))
2334 {
2335 int i;
2336 /* Need to check if this struct/union is "integer" like. For
2337 this to be true, its size must be less than or equal to
2338 REGISTER_SIZE and the offset of each addressable subfield
2339 must be zero. Note that bit fields are not addressable, and
2340 unions always start at offset zero. If any of the subfields
2341 is a floating point type, the struct/union cannot be an
2342 integer type. */
2343
2344 /* For each field in the object, check:
2345 1) Is it FP? --> yes, nRc = 1;
2346 2) Is it addressable (bitpos != 0) and
2347 not packed (bitsize == 0)?
2348 --> yes, nRc = 1
2349 */
2350
2351 for (i = 0; i < TYPE_NFIELDS (type); i++)
2352 {
2353 enum type_code field_type_code;
2354 field_type_code = TYPE_CODE (TYPE_FIELD_TYPE (type, i));
2355
2356 /* Is it a floating point type field? */
2357 if (field_type_code == TYPE_CODE_FLT)
2358 {
2359 nRc = 1;
2360 break;
2361 }
2362
2363 /* If bitpos != 0, then we have to care about it. */
2364 if (TYPE_FIELD_BITPOS (type, i) != 0)
2365 {
2366 /* Bitfields are not addressable. If the field bitsize is
2367 zero, then the field is not packed. Hence it cannot be
2368 a bitfield or any other packed type. */
2369 if (TYPE_FIELD_BITSIZE (type, i) == 0)
2370 {
2371 nRc = 1;
2372 break;
2373 }
2374 }
2375 }
2376 }
2377
2378 return nRc;
2379 }
2380
2381 /* Write into appropriate registers a function return value of type
2382 TYPE, given in virtual format. */
2383
2384 static void
2385 arm_store_return_value (struct type *type, char *valbuf)
2386 {
2387 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2388 {
2389 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2390 char buf[ARM_MAX_REGISTER_RAW_SIZE];
2391
2392 switch (tdep->fp_model)
2393 {
2394 case ARM_FLOAT_FPA:
2395
2396 convert_to_extended (valbuf, buf);
2397 write_register_bytes (REGISTER_BYTE (ARM_F0_REGNUM), buf,
2398 FP_REGISTER_RAW_SIZE);
2399 break;
2400
2401 case ARM_FLOAT_SOFT:
2402 case ARM_FLOAT_SOFT_VFP:
2403 write_register_bytes (ARM_A1_REGNUM, valbuf, TYPE_LENGTH (type));
2404 break;
2405
2406 default:
2407 internal_error
2408 (__FILE__, __LINE__,
2409 "arm_store_return_value: Floating point model not supported");
2410 break;
2411 }
2412 }
2413 else
2414 write_register_bytes (ARM_A1_REGNUM, valbuf, TYPE_LENGTH (type));
2415 }
2416
2417 /* Store the address of the place in which to copy the structure the
2418 subroutine will return. This is called from call_function. */
2419
2420 static void
2421 arm_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
2422 {
2423 write_register (ARM_A1_REGNUM, addr);
2424 }
2425
2426 static int
2427 arm_get_longjmp_target (CORE_ADDR *pc)
2428 {
2429 CORE_ADDR jb_addr;
2430 char buf[INT_REGISTER_RAW_SIZE];
2431 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2432
2433 jb_addr = read_register (ARM_A1_REGNUM);
2434
2435 if (target_read_memory (jb_addr + tdep->jb_pc * tdep->jb_elt_size, buf,
2436 INT_REGISTER_RAW_SIZE))
2437 return 0;
2438
2439 *pc = extract_address (buf, INT_REGISTER_RAW_SIZE);
2440 return 1;
2441 }
2442
2443 /* Return non-zero if the PC is inside a thumb call thunk. */
2444
2445 int
2446 arm_in_call_stub (CORE_ADDR pc, char *name)
2447 {
2448 CORE_ADDR start_addr;
2449
2450 /* Find the starting address of the function containing the PC. If
2451 the caller didn't give us a name, look it up at the same time. */
2452 if (0 == find_pc_partial_function (pc, name ? NULL : &name,
2453 &start_addr, NULL))
2454 return 0;
2455
2456 return strncmp (name, "_call_via_r", 11) == 0;
2457 }
2458
2459 /* If PC is in a Thumb call or return stub, return the address of the
2460 target PC, which is in a register. The thunk functions are called
2461 _called_via_xx, where x is the register name. The possible names
2462 are r0-r9, sl, fp, ip, sp, and lr. */
2463
2464 CORE_ADDR
2465 arm_skip_stub (CORE_ADDR pc)
2466 {
2467 char *name;
2468 CORE_ADDR start_addr;
2469
2470 /* Find the starting address and name of the function containing the PC. */
2471 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
2472 return 0;
2473
2474 /* Call thunks always start with "_call_via_". */
2475 if (strncmp (name, "_call_via_", 10) == 0)
2476 {
2477 /* Use the name suffix to determine which register contains the
2478 target PC. */
2479 static char *table[15] =
2480 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
2481 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
2482 };
2483 int regno;
2484
2485 for (regno = 0; regno <= 14; regno++)
2486 if (strcmp (&name[10], table[regno]) == 0)
2487 return read_register (regno);
2488 }
2489
2490 return 0; /* not a stub */
2491 }
2492
2493 /* If the user changes the register disassembly flavor used for info
2494 register and other commands, we have to also switch the flavor used
2495 in opcodes for disassembly output. This function is run in the set
2496 disassembly_flavor command, and does that. */
2497
2498 static void
2499 set_disassembly_flavor_sfunc (char *args, int from_tty,
2500 struct cmd_list_element *c)
2501 {
2502 set_disassembly_flavor ();
2503 }
2504 \f
2505 /* Return the ARM register name corresponding to register I. */
2506 static char *
2507 arm_register_name (int i)
2508 {
2509 return arm_register_names[i];
2510 }
2511
2512 static void
2513 set_disassembly_flavor (void)
2514 {
2515 const char *setname, *setdesc, **regnames;
2516 int numregs, j;
2517
2518 /* Find the flavor that the user wants in the opcodes table. */
2519 int current = 0;
2520 numregs = get_arm_regnames (current, &setname, &setdesc, &regnames);
2521 while ((disassembly_flavor != setname)
2522 && (current < num_flavor_options))
2523 get_arm_regnames (++current, &setname, &setdesc, &regnames);
2524 current_option = current;
2525
2526 /* Fill our copy. */
2527 for (j = 0; j < numregs; j++)
2528 arm_register_names[j] = (char *) regnames[j];
2529
2530 /* Adjust case. */
2531 if (isupper (*regnames[ARM_PC_REGNUM]))
2532 {
2533 arm_register_names[ARM_FPS_REGNUM] = "FPS";
2534 arm_register_names[ARM_PS_REGNUM] = "CPSR";
2535 }
2536 else
2537 {
2538 arm_register_names[ARM_FPS_REGNUM] = "fps";
2539 arm_register_names[ARM_PS_REGNUM] = "cpsr";
2540 }
2541
2542 /* Synchronize the disassembler. */
2543 set_arm_regname_option (current);
2544 }
2545
2546 /* arm_othernames implements the "othernames" command. This is kind
2547 of hacky, and I prefer the set-show disassembly-flavor which is
2548 also used for the x86 gdb. I will keep this around, however, in
2549 case anyone is actually using it. */
2550
2551 static void
2552 arm_othernames (char *names, int n)
2553 {
2554 /* Circle through the various flavors. */
2555 current_option = (current_option + 1) % num_flavor_options;
2556
2557 disassembly_flavor = valid_flavors[current_option];
2558 set_disassembly_flavor ();
2559 }
2560
2561 /* Fetch, and possibly build, an appropriate link_map_offsets structure
2562 for ARM linux targets using the struct offsets defined in <link.h>.
2563 Note, however, that link.h is not actually referred to in this file.
2564 Instead, the relevant structs offsets were obtained from examining
2565 link.h. (We can't refer to link.h from this file because the host
2566 system won't necessarily have it, or if it does, the structs which
2567 it defines will refer to the host system, not the target). */
2568
2569 struct link_map_offsets *
2570 arm_linux_svr4_fetch_link_map_offsets (void)
2571 {
2572 static struct link_map_offsets lmo;
2573 static struct link_map_offsets *lmp = 0;
2574
2575 if (lmp == 0)
2576 {
2577 lmp = &lmo;
2578
2579 lmo.r_debug_size = 8; /* Actual size is 20, but this is all we
2580 need. */
2581
2582 lmo.r_map_offset = 4;
2583 lmo.r_map_size = 4;
2584
2585 lmo.link_map_size = 20; /* Actual size is 552, but this is all we
2586 need. */
2587
2588 lmo.l_addr_offset = 0;
2589 lmo.l_addr_size = 4;
2590
2591 lmo.l_name_offset = 4;
2592 lmo.l_name_size = 4;
2593
2594 lmo.l_next_offset = 12;
2595 lmo.l_next_size = 4;
2596
2597 lmo.l_prev_offset = 16;
2598 lmo.l_prev_size = 4;
2599 }
2600
2601 return lmp;
2602 }
2603
2604 /* Test whether the coff symbol specific value corresponds to a Thumb
2605 function. */
2606
2607 static int
2608 coff_sym_is_thumb (int val)
2609 {
2610 return (val == C_THUMBEXT ||
2611 val == C_THUMBSTAT ||
2612 val == C_THUMBEXTFUNC ||
2613 val == C_THUMBSTATFUNC ||
2614 val == C_THUMBLABEL);
2615 }
2616
2617 /* arm_coff_make_msymbol_special()
2618 arm_elf_make_msymbol_special()
2619
2620 These functions test whether the COFF or ELF symbol corresponds to
2621 an address in thumb code, and set a "special" bit in a minimal
2622 symbol to indicate that it does. */
2623
2624 static void
2625 arm_elf_make_msymbol_special(asymbol *sym, struct minimal_symbol *msym)
2626 {
2627 /* Thumb symbols are of type STT_LOPROC, (synonymous with
2628 STT_ARM_TFUNC). */
2629 if (ELF_ST_TYPE (((elf_symbol_type *)sym)->internal_elf_sym.st_info)
2630 == STT_LOPROC)
2631 MSYMBOL_SET_SPECIAL (msym);
2632 }
2633
2634 static void
2635 arm_coff_make_msymbol_special(int val, struct minimal_symbol *msym)
2636 {
2637 if (coff_sym_is_thumb (val))
2638 MSYMBOL_SET_SPECIAL (msym);
2639 }
2640
2641 \f
2642 static enum gdb_osabi
2643 arm_elf_osabi_sniffer (bfd *abfd)
2644 {
2645 unsigned int elfosabi, eflags;
2646 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
2647
2648 elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI];
2649
2650 switch (elfosabi)
2651 {
2652 case ELFOSABI_NONE:
2653 /* When elfosabi is ELFOSABI_NONE (0), then the ELF structures in the
2654 file are conforming to the base specification for that machine
2655 (there are no OS-specific extensions). In order to determine the
2656 real OS in use we must look for OS notes that have been added. */
2657 bfd_map_over_sections (abfd,
2658 generic_elf_osabi_sniff_abi_tag_sections,
2659 &osabi);
2660 if (osabi == GDB_OSABI_UNKNOWN)
2661 {
2662 /* Existing ARM tools don't set this field, so look at the EI_FLAGS
2663 field for more information. */
2664 eflags = EF_ARM_EABI_VERSION(elf_elfheader(abfd)->e_flags);
2665 switch (eflags)
2666 {
2667 case EF_ARM_EABI_VER1:
2668 osabi = GDB_OSABI_ARM_EABI_V1;
2669 break;
2670
2671 case EF_ARM_EABI_VER2:
2672 osabi = GDB_OSABI_ARM_EABI_V2;
2673 break;
2674
2675 case EF_ARM_EABI_UNKNOWN:
2676 /* Assume GNU tools. */
2677 osabi = GDB_OSABI_ARM_APCS;
2678 break;
2679
2680 default:
2681 internal_error (__FILE__, __LINE__,
2682 "arm_elf_osabi_sniffer: Unknown ARM EABI "
2683 "version 0x%x", eflags);
2684 }
2685 }
2686 break;
2687
2688 case ELFOSABI_ARM:
2689 /* GNU tools use this value. Check note sections in this case,
2690 as well. */
2691 bfd_map_over_sections (abfd,
2692 generic_elf_osabi_sniff_abi_tag_sections,
2693 &osabi);
2694 if (osabi == GDB_OSABI_UNKNOWN)
2695 {
2696 /* Assume APCS ABI. */
2697 osabi = GDB_OSABI_ARM_APCS;
2698 }
2699 break;
2700
2701 case ELFOSABI_FREEBSD:
2702 osabi = GDB_OSABI_FREEBSD_ELF;
2703 break;
2704
2705 case ELFOSABI_NETBSD:
2706 osabi = GDB_OSABI_NETBSD_ELF;
2707 break;
2708
2709 case ELFOSABI_LINUX:
2710 osabi = GDB_OSABI_LINUX;
2711 break;
2712 }
2713
2714 return osabi;
2715 }
2716
2717 \f
2718 /* Initialize the current architecture based on INFO. If possible,
2719 re-use an architecture from ARCHES, which is a list of
2720 architectures already created during this debugging session.
2721
2722 Called e.g. at program startup, when reading a core file, and when
2723 reading a binary file. */
2724
2725 static struct gdbarch *
2726 arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2727 {
2728 struct gdbarch_tdep *tdep;
2729 struct gdbarch *gdbarch;
2730 enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
2731
2732 /* Try to deterimine the ABI of the object we are loading. */
2733
2734 if (info.abfd != NULL)
2735 {
2736 osabi = gdbarch_lookup_osabi (info.abfd);
2737 if (osabi == GDB_OSABI_UNKNOWN)
2738 {
2739 switch (bfd_get_flavour (info.abfd))
2740 {
2741 case bfd_target_aout_flavour:
2742 /* Assume it's an old APCS-style ABI. */
2743 osabi = GDB_OSABI_ARM_APCS;
2744 break;
2745
2746 case bfd_target_coff_flavour:
2747 /* Assume it's an old APCS-style ABI. */
2748 /* XXX WinCE? */
2749 osabi = GDB_OSABI_ARM_APCS;
2750 break;
2751
2752 default:
2753 /* Leave it as "unknown". */
2754 }
2755 }
2756 }
2757
2758 /* Find a candidate among extant architectures. */
2759 for (arches = gdbarch_list_lookup_by_info (arches, &info);
2760 arches != NULL;
2761 arches = gdbarch_list_lookup_by_info (arches->next, &info))
2762 {
2763 /* Make sure the ABI selection matches. */
2764 tdep = gdbarch_tdep (arches->gdbarch);
2765 if (tdep && tdep->osabi == osabi)
2766 return arches->gdbarch;
2767 }
2768
2769 tdep = xmalloc (sizeof (struct gdbarch_tdep));
2770 gdbarch = gdbarch_alloc (&info, tdep);
2771
2772 tdep->osabi = osabi;
2773
2774 /* This is the way it has always defaulted. */
2775 tdep->fp_model = ARM_FLOAT_FPA;
2776
2777 /* Breakpoints. */
2778 switch (info.byte_order)
2779 {
2780 case BFD_ENDIAN_BIG:
2781 tdep->arm_breakpoint = arm_default_arm_be_breakpoint;
2782 tdep->arm_breakpoint_size = sizeof (arm_default_arm_be_breakpoint);
2783 tdep->thumb_breakpoint = arm_default_thumb_be_breakpoint;
2784 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_be_breakpoint);
2785
2786 break;
2787
2788 case BFD_ENDIAN_LITTLE:
2789 tdep->arm_breakpoint = arm_default_arm_le_breakpoint;
2790 tdep->arm_breakpoint_size = sizeof (arm_default_arm_le_breakpoint);
2791 tdep->thumb_breakpoint = arm_default_thumb_le_breakpoint;
2792 tdep->thumb_breakpoint_size = sizeof (arm_default_thumb_le_breakpoint);
2793
2794 break;
2795
2796 default:
2797 internal_error (__FILE__, __LINE__,
2798 "arm_gdbarch_init: bad byte order for float format");
2799 }
2800
2801 /* On ARM targets char defaults to unsigned. */
2802 set_gdbarch_char_signed (gdbarch, 0);
2803
2804 /* This should be low enough for everything. */
2805 tdep->lowest_pc = 0x20;
2806 tdep->jb_pc = -1; /* Longjump support not enabled by default. */
2807
2808 #if OLD_STYLE_ARM_DUMMY_FRAMES
2809 /* NOTE: cagney/2002-05-07: Enable the below to restore the old ARM
2810 specific (non-generic) dummy frame code. Might be useful if
2811 there appears to be a problem with the generic dummy frame
2812 mechanism that replaced it. */
2813 set_gdbarch_use_generic_dummy_frames (gdbarch, 0);
2814
2815 /* Call dummy code. */
2816 set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
2817 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
2818 /* We have to give this a value now, even though we will re-set it
2819 during each call to arm_fix_call_dummy. */
2820 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 8);
2821 set_gdbarch_call_dummy_p (gdbarch, 1);
2822 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
2823
2824 set_gdbarch_call_dummy_words (gdbarch, arm_call_dummy_words);
2825 set_gdbarch_sizeof_call_dummy_words (gdbarch, sizeof (arm_call_dummy_words));
2826 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
2827 set_gdbarch_call_dummy_length (gdbarch, 0);
2828
2829 set_gdbarch_fix_call_dummy (gdbarch, arm_fix_call_dummy);
2830
2831 set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_on_stack);
2832 #else
2833 set_gdbarch_use_generic_dummy_frames (gdbarch, 1);
2834 set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
2835
2836 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
2837 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
2838
2839 set_gdbarch_call_dummy_p (gdbarch, 1);
2840 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
2841
2842 set_gdbarch_call_dummy_words (gdbarch, arm_call_dummy_words);
2843 set_gdbarch_sizeof_call_dummy_words (gdbarch, 0);
2844 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
2845 set_gdbarch_call_dummy_length (gdbarch, 0);
2846
2847 set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
2848 set_gdbarch_pc_in_call_dummy (gdbarch, generic_pc_in_call_dummy);
2849
2850 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
2851 set_gdbarch_push_return_address (gdbarch, arm_push_return_address);
2852 #endif
2853
2854 set_gdbarch_get_saved_register (gdbarch, generic_get_saved_register);
2855 set_gdbarch_push_arguments (gdbarch, arm_push_arguments);
2856 set_gdbarch_coerce_float_to_double (gdbarch,
2857 standard_coerce_float_to_double);
2858
2859 /* Frame handling. */
2860 set_gdbarch_frame_chain_valid (gdbarch, arm_frame_chain_valid);
2861 set_gdbarch_init_extra_frame_info (gdbarch, arm_init_extra_frame_info);
2862 set_gdbarch_read_fp (gdbarch, arm_read_fp);
2863 set_gdbarch_frame_chain (gdbarch, arm_frame_chain);
2864 set_gdbarch_frameless_function_invocation
2865 (gdbarch, arm_frameless_function_invocation);
2866 set_gdbarch_frame_saved_pc (gdbarch, arm_frame_saved_pc);
2867 set_gdbarch_frame_args_address (gdbarch, arm_frame_args_address);
2868 set_gdbarch_frame_locals_address (gdbarch, arm_frame_locals_address);
2869 set_gdbarch_frame_num_args (gdbarch, arm_frame_num_args);
2870 set_gdbarch_frame_args_skip (gdbarch, 0);
2871 set_gdbarch_frame_init_saved_regs (gdbarch, arm_frame_init_saved_regs);
2872 #if OLD_STYLE_ARM_DUMMY_FRAMES
2873 /* NOTE: cagney/2002-05-07: Enable the below to restore the old ARM
2874 specific (non-generic) dummy frame code. Might be useful if
2875 there appears to be a problem with the generic dummy frame
2876 mechanism that replaced it. */
2877 set_gdbarch_push_dummy_frame (gdbarch, arm_push_dummy_frame);
2878 #else
2879 set_gdbarch_push_dummy_frame (gdbarch, generic_push_dummy_frame);
2880 #endif
2881 set_gdbarch_pop_frame (gdbarch, arm_pop_frame);
2882
2883 /* Address manipulation. */
2884 set_gdbarch_smash_text_address (gdbarch, arm_smash_text_address);
2885 set_gdbarch_addr_bits_remove (gdbarch, arm_addr_bits_remove);
2886
2887 /* Offset from address of function to start of its code. */
2888 set_gdbarch_function_start_offset (gdbarch, 0);
2889
2890 /* Advance PC across function entry code. */
2891 set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue);
2892
2893 /* Get the PC when a frame might not be available. */
2894 set_gdbarch_saved_pc_after_call (gdbarch, arm_saved_pc_after_call);
2895
2896 /* The stack grows downward. */
2897 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2898
2899 /* Breakpoint manipulation. */
2900 set_gdbarch_breakpoint_from_pc (gdbarch, arm_breakpoint_from_pc);
2901 set_gdbarch_decr_pc_after_break (gdbarch, 0);
2902
2903 /* Information about registers, etc. */
2904 set_gdbarch_print_float_info (gdbarch, arm_print_float_info);
2905 set_gdbarch_fp_regnum (gdbarch, ARM_FP_REGNUM); /* ??? */
2906 set_gdbarch_sp_regnum (gdbarch, ARM_SP_REGNUM);
2907 set_gdbarch_pc_regnum (gdbarch, ARM_PC_REGNUM);
2908 set_gdbarch_register_byte (gdbarch, arm_register_byte);
2909 set_gdbarch_register_bytes (gdbarch,
2910 (NUM_GREGS * INT_REGISTER_RAW_SIZE
2911 + NUM_FREGS * FP_REGISTER_RAW_SIZE
2912 + NUM_SREGS * STATUS_REGISTER_SIZE));
2913 set_gdbarch_num_regs (gdbarch, NUM_GREGS + NUM_FREGS + NUM_SREGS);
2914 set_gdbarch_register_raw_size (gdbarch, arm_register_raw_size);
2915 set_gdbarch_register_virtual_size (gdbarch, arm_register_virtual_size);
2916 set_gdbarch_max_register_raw_size (gdbarch, FP_REGISTER_RAW_SIZE);
2917 set_gdbarch_max_register_virtual_size (gdbarch, FP_REGISTER_VIRTUAL_SIZE);
2918 set_gdbarch_register_virtual_type (gdbarch, arm_register_type);
2919
2920 /* Internal <-> external register number maps. */
2921 set_gdbarch_register_sim_regno (gdbarch, arm_register_sim_regno);
2922
2923 /* Integer registers are 4 bytes. */
2924 set_gdbarch_register_size (gdbarch, 4);
2925 set_gdbarch_register_name (gdbarch, arm_register_name);
2926
2927 /* Returning results. */
2928 set_gdbarch_deprecated_extract_return_value (gdbarch, arm_extract_return_value);
2929 set_gdbarch_store_return_value (gdbarch, arm_store_return_value);
2930 set_gdbarch_store_struct_return (gdbarch, arm_store_struct_return);
2931 set_gdbarch_use_struct_convention (gdbarch, arm_use_struct_convention);
2932 set_gdbarch_deprecated_extract_struct_value_address (gdbarch,
2933 arm_extract_struct_value_address);
2934
2935 /* Single stepping. */
2936 /* XXX For an RDI target we should ask the target if it can single-step. */
2937 set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
2938
2939 /* Minsymbol frobbing. */
2940 set_gdbarch_elf_make_msymbol_special (gdbarch, arm_elf_make_msymbol_special);
2941 set_gdbarch_coff_make_msymbol_special (gdbarch,
2942 arm_coff_make_msymbol_special);
2943
2944 /* Hook in the ABI-specific overrides, if they have been registered. */
2945 gdbarch_init_osabi (info, gdbarch, osabi);
2946
2947 /* Now we have tuned the configuration, set a few final things,
2948 based on what the OS ABI has told us. */
2949
2950 if (tdep->jb_pc >= 0)
2951 set_gdbarch_get_longjmp_target (gdbarch, arm_get_longjmp_target);
2952
2953 /* Floating point sizes and format. */
2954 switch (info.byte_order)
2955 {
2956 case BFD_ENDIAN_BIG:
2957 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_big);
2958 set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_big);
2959 set_gdbarch_long_double_format (gdbarch, &floatformat_ieee_double_big);
2960
2961 break;
2962
2963 case BFD_ENDIAN_LITTLE:
2964 set_gdbarch_float_format (gdbarch, &floatformat_ieee_single_little);
2965 if (tdep->fp_model == ARM_FLOAT_VFP
2966 || tdep->fp_model == ARM_FLOAT_SOFT_VFP)
2967 {
2968 set_gdbarch_double_format (gdbarch, &floatformat_ieee_double_little);
2969 set_gdbarch_long_double_format (gdbarch,
2970 &floatformat_ieee_double_little);
2971 }
2972 else
2973 {
2974 set_gdbarch_double_format
2975 (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
2976 set_gdbarch_long_double_format
2977 (gdbarch, &floatformat_ieee_double_littlebyte_bigword);
2978 }
2979 break;
2980
2981 default:
2982 internal_error (__FILE__, __LINE__,
2983 "arm_gdbarch_init: bad byte order for float format");
2984 }
2985
2986 /* We can't use SIZEOF_FRAME_SAVED_REGS here, since that still
2987 references the old architecture vector, not the one we are
2988 building here. */
2989 if (prologue_cache.saved_regs != NULL)
2990 xfree (prologue_cache.saved_regs);
2991
2992 /* We can't use NUM_REGS nor NUM_PSEUDO_REGS here, since that still
2993 references the old architecture vector, not the one we are
2994 building here. */
2995 prologue_cache.saved_regs = (CORE_ADDR *)
2996 xcalloc (1, (sizeof (CORE_ADDR)
2997 * (gdbarch_num_regs (gdbarch)
2998 + gdbarch_num_pseudo_regs (gdbarch))));
2999
3000 return gdbarch;
3001 }
3002
3003 static void
3004 arm_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
3005 {
3006 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
3007
3008 if (tdep == NULL)
3009 return;
3010
3011 fprintf_unfiltered (file, "arm_dump_tdep: OS ABI = %s\n",
3012 gdbarch_osabi_name (tdep->osabi));
3013
3014 fprintf_unfiltered (file, "arm_dump_tdep: Lowest pc = 0x%lx",
3015 (unsigned long) tdep->lowest_pc);
3016 }
3017
3018 static void
3019 arm_init_abi_eabi_v1 (struct gdbarch_info info,
3020 struct gdbarch *gdbarch)
3021 {
3022 /* Place-holder. */
3023 }
3024
3025 static void
3026 arm_init_abi_eabi_v2 (struct gdbarch_info info,
3027 struct gdbarch *gdbarch)
3028 {
3029 /* Place-holder. */
3030 }
3031
3032 static void
3033 arm_init_abi_apcs (struct gdbarch_info info,
3034 struct gdbarch *gdbarch)
3035 {
3036 /* Place-holder. */
3037 }
3038
3039 void
3040 _initialize_arm_tdep (void)
3041 {
3042 struct ui_file *stb;
3043 long length;
3044 struct cmd_list_element *new_cmd;
3045 const char *setname;
3046 const char *setdesc;
3047 const char **regnames;
3048 int numregs, i, j;
3049 static char *helptext;
3050
3051 if (GDB_MULTI_ARCH)
3052 gdbarch_register (bfd_arch_arm, arm_gdbarch_init, arm_dump_tdep);
3053
3054 /* Register an ELF OS ABI sniffer for ARM binaries. */
3055 gdbarch_register_osabi_sniffer (bfd_arch_arm,
3056 bfd_target_elf_flavour,
3057 arm_elf_osabi_sniffer);
3058
3059 /* Register some ABI variants for embedded systems. */
3060 gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_ARM_EABI_V1,
3061 arm_init_abi_eabi_v1);
3062 gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_ARM_EABI_V2,
3063 arm_init_abi_eabi_v2);
3064 gdbarch_register_osabi (bfd_arch_arm, GDB_OSABI_ARM_APCS,
3065 arm_init_abi_apcs);
3066
3067 tm_print_insn = gdb_print_insn_arm;
3068
3069 /* Get the number of possible sets of register names defined in opcodes. */
3070 num_flavor_options = get_arm_regname_num_options ();
3071
3072 /* Sync the opcode insn printer with our register viewer. */
3073 parse_arm_disassembler_option ("reg-names-std");
3074
3075 /* Begin creating the help text. */
3076 stb = mem_fileopen ();
3077 fprintf_unfiltered (stb, "Set the disassembly flavor.\n\
3078 The valid values are:\n");
3079
3080 /* Initialize the array that will be passed to add_set_enum_cmd(). */
3081 valid_flavors = xmalloc ((num_flavor_options + 1) * sizeof (char *));
3082 for (i = 0; i < num_flavor_options; i++)
3083 {
3084 numregs = get_arm_regnames (i, &setname, &setdesc, &regnames);
3085 valid_flavors[i] = setname;
3086 fprintf_unfiltered (stb, "%s - %s\n", setname,
3087 setdesc);
3088 /* Copy the default names (if found) and synchronize disassembler. */
3089 if (!strcmp (setname, "std"))
3090 {
3091 disassembly_flavor = setname;
3092 current_option = i;
3093 for (j = 0; j < numregs; j++)
3094 arm_register_names[j] = (char *) regnames[j];
3095 set_arm_regname_option (i);
3096 }
3097 }
3098 /* Mark the end of valid options. */
3099 valid_flavors[num_flavor_options] = NULL;
3100
3101 /* Finish the creation of the help text. */
3102 fprintf_unfiltered (stb, "The default is \"std\".");
3103 helptext = ui_file_xstrdup (stb, &length);
3104 ui_file_delete (stb);
3105
3106 /* Add the disassembly-flavor command. */
3107 new_cmd = add_set_enum_cmd ("disassembly-flavor", no_class,
3108 valid_flavors,
3109 &disassembly_flavor,
3110 helptext,
3111 &setlist);
3112 set_cmd_sfunc (new_cmd, set_disassembly_flavor_sfunc);
3113 add_show_from_set (new_cmd, &showlist);
3114
3115 /* ??? Maybe this should be a boolean. */
3116 add_show_from_set (add_set_cmd ("apcs32", no_class,
3117 var_zinteger, (char *) &arm_apcs_32,
3118 "Set usage of ARM 32-bit mode.\n", &setlist),
3119 &showlist);
3120
3121 /* Add the deprecated "othernames" command. */
3122
3123 add_com ("othernames", class_obscure, arm_othernames,
3124 "Switch to the next set of register names.");
3125
3126 /* Fill in the prologue_cache fields. */
3127 prologue_cache.saved_regs = NULL;
3128 prologue_cache.extra_info = (struct frame_extra_info *)
3129 xcalloc (1, sizeof (struct frame_extra_info));
3130
3131 /* Debugging flag. */
3132 add_show_from_set (add_set_cmd ("arm", class_maintenance, var_zinteger,
3133 &arm_debug, "Set arm debugging.\n\
3134 When non-zero, arm specific debugging is enabled.", &setdebuglist),
3135 &showdebuglist);
3136 }