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