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