1 /* Common target dependent code for GDB on ARM systems.
3 Copyright (C) 1988, 1989, 1991, 1992, 1993, 1995, 1996, 1998, 1999, 2000,
4 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
5 Free Software Foundation, Inc.
7 This file is part of GDB.
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 3 of the License, or
12 (at your option) any later version.
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.
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
22 #include <ctype.h> /* XXX for isupper () */
29 #include "gdb_string.h"
30 #include "dis-asm.h" /* For register styles. */
34 #include "arch-utils.h"
36 #include "frame-unwind.h"
37 #include "frame-base.h"
38 #include "trad-frame.h"
40 #include "dwarf2-frame.h"
42 #include "prologue-value.h"
43 #include "target-descriptions.h"
44 #include "user-regs.h"
47 #include "gdb/sim-arm.h"
50 #include "coff/internal.h"
53 #include "gdb_assert.h"
58 /* Macros for setting and testing a bit in a minimal symbol that marks
59 it as Thumb function. The MSB of the minimal symbol's "info" field
60 is used for this purpose.
62 MSYMBOL_SET_SPECIAL Actually sets the "special" bit.
63 MSYMBOL_IS_SPECIAL Tests the "special" bit in a minimal symbol. */
65 #define MSYMBOL_SET_SPECIAL(msym) \
66 MSYMBOL_TARGET_FLAG_1 (msym) = 1
68 #define MSYMBOL_IS_SPECIAL(msym) \
69 MSYMBOL_TARGET_FLAG_1 (msym)
71 /* Per-objfile data used for mapping symbols. */
72 static const struct objfile_data
*arm_objfile_data_key
;
74 struct arm_mapping_symbol
79 typedef struct arm_mapping_symbol arm_mapping_symbol_s
;
80 DEF_VEC_O(arm_mapping_symbol_s
);
82 struct arm_per_objfile
84 VEC(arm_mapping_symbol_s
) **section_maps
;
87 /* The list of available "set arm ..." and "show arm ..." commands. */
88 static struct cmd_list_element
*setarmcmdlist
= NULL
;
89 static struct cmd_list_element
*showarmcmdlist
= NULL
;
91 /* The type of floating-point to use. Keep this in sync with enum
92 arm_float_model, and the help string in _initialize_arm_tdep. */
93 static const char *fp_model_strings
[] =
103 /* A variable that can be configured by the user. */
104 static enum arm_float_model arm_fp_model
= ARM_FLOAT_AUTO
;
105 static const char *current_fp_model
= "auto";
107 /* The ABI to use. Keep this in sync with arm_abi_kind. */
108 static const char *arm_abi_strings
[] =
116 /* A variable that can be configured by the user. */
117 static enum arm_abi_kind arm_abi_global
= ARM_ABI_AUTO
;
118 static const char *arm_abi_string
= "auto";
120 /* The execution mode to assume. */
121 static const char *arm_mode_strings
[] =
128 static const char *arm_fallback_mode_string
= "auto";
129 static const char *arm_force_mode_string
= "auto";
131 /* Number of different reg name sets (options). */
132 static int num_disassembly_options
;
134 /* The standard register names, and all the valid aliases for them. */
139 } arm_register_aliases
[] = {
140 /* Basic register numbers. */
157 /* Synonyms (argument and variable registers). */
170 /* Other platform-specific names for r9. */
178 /* Names used by GCC (not listed in the ARM EABI). */
181 /* A special name from the older ATPCS. */
185 static const char *const arm_register_names
[] =
186 {"r0", "r1", "r2", "r3", /* 0 1 2 3 */
187 "r4", "r5", "r6", "r7", /* 4 5 6 7 */
188 "r8", "r9", "r10", "r11", /* 8 9 10 11 */
189 "r12", "sp", "lr", "pc", /* 12 13 14 15 */
190 "f0", "f1", "f2", "f3", /* 16 17 18 19 */
191 "f4", "f5", "f6", "f7", /* 20 21 22 23 */
192 "fps", "cpsr" }; /* 24 25 */
194 /* Valid register name styles. */
195 static const char **valid_disassembly_styles
;
197 /* Disassembly style to use. Default to "std" register names. */
198 static const char *disassembly_style
;
200 /* This is used to keep the bfd arch_info in sync with the disassembly
202 static void set_disassembly_style_sfunc(char *, int,
203 struct cmd_list_element
*);
204 static void set_disassembly_style (void);
206 static void convert_from_extended (const struct floatformat
*, const void *,
208 static void convert_to_extended (const struct floatformat
*, void *,
211 static void arm_neon_quad_read (struct gdbarch
*gdbarch
,
212 struct regcache
*regcache
,
213 int regnum
, gdb_byte
*buf
);
214 static void arm_neon_quad_write (struct gdbarch
*gdbarch
,
215 struct regcache
*regcache
,
216 int regnum
, const gdb_byte
*buf
);
218 struct arm_prologue_cache
220 /* The stack pointer at the time this frame was created; i.e. the
221 caller's stack pointer when this function was called. It is used
222 to identify this frame. */
225 /* The frame base for this frame is just prev_sp - frame size.
226 FRAMESIZE is the distance from the frame pointer to the
227 initial stack pointer. */
231 /* The register used to hold the frame pointer for this frame. */
234 /* Saved register offsets. */
235 struct trad_frame_saved_reg
*saved_regs
;
238 /* Architecture version for displaced stepping. This effects the behaviour of
239 certain instructions, and really should not be hard-wired. */
241 #define DISPLACED_STEPPING_ARCH_VERSION 5
243 /* Addresses for calling Thumb functions have the bit 0 set.
244 Here are some macros to test, set, or clear bit 0 of addresses. */
245 #define IS_THUMB_ADDR(addr) ((addr) & 1)
246 #define MAKE_THUMB_ADDR(addr) ((addr) | 1)
247 #define UNMAKE_THUMB_ADDR(addr) ((addr) & ~1)
249 /* Set to true if the 32-bit mode is in use. */
253 /* Determine if FRAME is executing in Thumb mode. */
256 arm_frame_is_thumb (struct frame_info
*frame
)
260 /* Every ARM frame unwinder can unwind the T bit of the CPSR, either
261 directly (from a signal frame or dummy frame) or by interpreting
262 the saved LR (from a prologue or DWARF frame). So consult it and
263 trust the unwinders. */
264 cpsr
= get_frame_register_unsigned (frame
, ARM_PS_REGNUM
);
266 return (cpsr
& CPSR_T
) != 0;
269 /* Callback for VEC_lower_bound. */
272 arm_compare_mapping_symbols (const struct arm_mapping_symbol
*lhs
,
273 const struct arm_mapping_symbol
*rhs
)
275 return lhs
->value
< rhs
->value
;
278 /* Search for the mapping symbol covering MEMADDR. If one is found,
279 return its type. Otherwise, return 0. If START is non-NULL,
280 set *START to the location of the mapping symbol. */
283 arm_find_mapping_symbol (CORE_ADDR memaddr
, CORE_ADDR
*start
)
285 struct obj_section
*sec
;
287 /* If there are mapping symbols, consult them. */
288 sec
= find_pc_section (memaddr
);
291 struct arm_per_objfile
*data
;
292 VEC(arm_mapping_symbol_s
) *map
;
293 struct arm_mapping_symbol map_key
= { memaddr
- obj_section_addr (sec
),
297 data
= objfile_data (sec
->objfile
, arm_objfile_data_key
);
300 map
= data
->section_maps
[sec
->the_bfd_section
->index
];
301 if (!VEC_empty (arm_mapping_symbol_s
, map
))
303 struct arm_mapping_symbol
*map_sym
;
305 idx
= VEC_lower_bound (arm_mapping_symbol_s
, map
, &map_key
,
306 arm_compare_mapping_symbols
);
308 /* VEC_lower_bound finds the earliest ordered insertion
309 point. If the following symbol starts at this exact
310 address, we use that; otherwise, the preceding
311 mapping symbol covers this address. */
312 if (idx
< VEC_length (arm_mapping_symbol_s
, map
))
314 map_sym
= VEC_index (arm_mapping_symbol_s
, map
, idx
);
315 if (map_sym
->value
== map_key
.value
)
318 *start
= map_sym
->value
+ obj_section_addr (sec
);
319 return map_sym
->type
;
325 map_sym
= VEC_index (arm_mapping_symbol_s
, map
, idx
- 1);
327 *start
= map_sym
->value
+ obj_section_addr (sec
);
328 return map_sym
->type
;
337 /* Determine if the program counter specified in MEMADDR is in a Thumb
338 function. This function should be called for addresses unrelated to
339 any executing frame; otherwise, prefer arm_frame_is_thumb. */
342 arm_pc_is_thumb (CORE_ADDR memaddr
)
344 struct obj_section
*sec
;
345 struct minimal_symbol
*sym
;
348 /* If bit 0 of the address is set, assume this is a Thumb address. */
349 if (IS_THUMB_ADDR (memaddr
))
352 /* If the user wants to override the symbol table, let him. */
353 if (strcmp (arm_force_mode_string
, "arm") == 0)
355 if (strcmp (arm_force_mode_string
, "thumb") == 0)
358 /* If there are mapping symbols, consult them. */
359 type
= arm_find_mapping_symbol (memaddr
, NULL
);
363 /* Thumb functions have a "special" bit set in minimal symbols. */
364 sym
= lookup_minimal_symbol_by_pc (memaddr
);
366 return (MSYMBOL_IS_SPECIAL (sym
));
368 /* If the user wants to override the fallback mode, let them. */
369 if (strcmp (arm_fallback_mode_string
, "arm") == 0)
371 if (strcmp (arm_fallback_mode_string
, "thumb") == 0)
374 /* If we couldn't find any symbol, but we're talking to a running
375 target, then trust the current value of $cpsr. This lets
376 "display/i $pc" always show the correct mode (though if there is
377 a symbol table we will not reach here, so it still may not be
378 displayed in the mode it will be executed). */
379 if (target_has_registers
)
380 return arm_frame_is_thumb (get_current_frame ());
382 /* Otherwise we're out of luck; we assume ARM. */
386 /* Remove useless bits from addresses in a running program. */
388 arm_addr_bits_remove (struct gdbarch
*gdbarch
, CORE_ADDR val
)
391 return UNMAKE_THUMB_ADDR (val
);
393 return (val
& 0x03fffffc);
396 /* When reading symbols, we need to zap the low bit of the address,
397 which may be set to 1 for Thumb functions. */
399 arm_smash_text_address (struct gdbarch
*gdbarch
, CORE_ADDR val
)
404 /* Analyze a Thumb prologue, looking for a recognizable stack frame
405 and frame pointer. Scan until we encounter a store that could
406 clobber the stack frame unexpectedly, or an unknown instruction. */
409 thumb_analyze_prologue (struct gdbarch
*gdbarch
,
410 CORE_ADDR start
, CORE_ADDR limit
,
411 struct arm_prologue_cache
*cache
)
413 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
416 struct pv_area
*stack
;
417 struct cleanup
*back_to
;
420 for (i
= 0; i
< 16; i
++)
421 regs
[i
] = pv_register (i
, 0);
422 stack
= make_pv_area (ARM_SP_REGNUM
, gdbarch_addr_bit (gdbarch
));
423 back_to
= make_cleanup_free_pv_area (stack
);
425 while (start
< limit
)
429 insn
= read_memory_unsigned_integer (start
, 2, byte_order_for_code
);
431 if ((insn
& 0xfe00) == 0xb400) /* push { rlist } */
436 if (pv_area_store_would_trash (stack
, regs
[ARM_SP_REGNUM
]))
439 /* Bits 0-7 contain a mask for registers R0-R7. Bit 8 says
440 whether to save LR (R14). */
441 mask
= (insn
& 0xff) | ((insn
& 0x100) << 6);
443 /* Calculate offsets of saved R0-R7 and LR. */
444 for (regno
= ARM_LR_REGNUM
; regno
>= 0; regno
--)
445 if (mask
& (1 << regno
))
447 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
],
449 pv_area_store (stack
, regs
[ARM_SP_REGNUM
], 4, regs
[regno
]);
452 else if ((insn
& 0xff00) == 0xb000) /* add sp, #simm OR
455 offset
= (insn
& 0x7f) << 2; /* get scaled offset */
456 if (insn
& 0x80) /* Check for SUB. */
457 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
],
460 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
],
463 else if ((insn
& 0xff00) == 0xaf00) /* add r7, sp, #imm */
464 regs
[THUMB_FP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
],
466 else if ((insn
& 0xff00) == 0x4600) /* mov hi, lo or mov lo, hi */
468 int dst_reg
= (insn
& 0x7) + ((insn
& 0x80) >> 4);
469 int src_reg
= (insn
& 0x78) >> 3;
470 regs
[dst_reg
] = regs
[src_reg
];
472 else if ((insn
& 0xf800) == 0x9000) /* str rd, [sp, #off] */
474 /* Handle stores to the stack. Normally pushes are used,
475 but with GCC -mtpcs-frame, there may be other stores
476 in the prologue to create the frame. */
477 int regno
= (insn
>> 8) & 0x7;
480 offset
= (insn
& 0xff) << 2;
481 addr
= pv_add_constant (regs
[ARM_SP_REGNUM
], offset
);
483 if (pv_area_store_would_trash (stack
, addr
))
486 pv_area_store (stack
, addr
, 4, regs
[regno
]);
490 /* We don't know what this instruction is. We're finished
491 scanning. NOTE: Recognizing more safe-to-ignore
492 instructions here will improve support for optimized
502 do_cleanups (back_to
);
506 if (pv_is_register (regs
[ARM_FP_REGNUM
], ARM_SP_REGNUM
))
508 /* Frame pointer is fp. Frame size is constant. */
509 cache
->framereg
= ARM_FP_REGNUM
;
510 cache
->framesize
= -regs
[ARM_FP_REGNUM
].k
;
512 else if (pv_is_register (regs
[THUMB_FP_REGNUM
], ARM_SP_REGNUM
))
514 /* Frame pointer is r7. Frame size is constant. */
515 cache
->framereg
= THUMB_FP_REGNUM
;
516 cache
->framesize
= -regs
[THUMB_FP_REGNUM
].k
;
518 else if (pv_is_register (regs
[ARM_SP_REGNUM
], ARM_SP_REGNUM
))
520 /* Try the stack pointer... this is a bit desperate. */
521 cache
->framereg
= ARM_SP_REGNUM
;
522 cache
->framesize
= -regs
[ARM_SP_REGNUM
].k
;
526 /* We're just out of luck. We don't know where the frame is. */
527 cache
->framereg
= -1;
528 cache
->framesize
= 0;
531 for (i
= 0; i
< 16; i
++)
532 if (pv_area_find_reg (stack
, gdbarch
, i
, &offset
))
533 cache
->saved_regs
[i
].addr
= offset
;
535 do_cleanups (back_to
);
539 /* Advance the PC across any function entry prologue instructions to
540 reach some "real" code.
542 The APCS (ARM Procedure Call Standard) defines the following
546 [stmfd sp!, {a1,a2,a3,a4}]
547 stmfd sp!, {...,fp,ip,lr,pc}
548 [stfe f7, [sp, #-12]!]
549 [stfe f6, [sp, #-12]!]
550 [stfe f5, [sp, #-12]!]
551 [stfe f4, [sp, #-12]!]
552 sub fp, ip, #nn @@ nn == 20 or 4 depending on second insn */
555 arm_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
557 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
560 CORE_ADDR func_addr
, limit_pc
;
561 struct symtab_and_line sal
;
563 /* If we're in a dummy frame, don't even try to skip the prologue. */
564 if (deprecated_pc_in_call_dummy (gdbarch
, pc
))
567 /* See if we can determine the end of the prologue via the symbol table.
568 If so, then return either PC, or the PC after the prologue, whichever
570 if (find_pc_partial_function (pc
, NULL
, &func_addr
, NULL
))
572 CORE_ADDR post_prologue_pc
573 = skip_prologue_using_sal (gdbarch
, func_addr
);
574 if (post_prologue_pc
!= 0)
575 return max (pc
, post_prologue_pc
);
578 /* Can't determine prologue from the symbol table, need to examine
581 /* Find an upper limit on the function prologue using the debug
582 information. If the debug information could not be used to provide
583 that bound, then use an arbitrary large number as the upper bound. */
584 /* Like arm_scan_prologue, stop no later than pc + 64. */
585 limit_pc
= skip_prologue_using_sal (gdbarch
, pc
);
587 limit_pc
= pc
+ 64; /* Magic. */
590 /* Check if this is Thumb code. */
591 if (arm_pc_is_thumb (pc
))
592 return thumb_analyze_prologue (gdbarch
, pc
, limit_pc
, NULL
);
594 for (skip_pc
= pc
; skip_pc
< limit_pc
; skip_pc
+= 4)
596 inst
= read_memory_unsigned_integer (skip_pc
, 4, byte_order_for_code
);
598 /* "mov ip, sp" is no longer a required part of the prologue. */
599 if (inst
== 0xe1a0c00d) /* mov ip, sp */
602 if ((inst
& 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
605 if ((inst
& 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
608 /* Some prologues begin with "str lr, [sp, #-4]!". */
609 if (inst
== 0xe52de004) /* str lr, [sp, #-4]! */
612 if ((inst
& 0xfffffff0) == 0xe92d0000) /* stmfd sp!,{a1,a2,a3,a4} */
615 if ((inst
& 0xfffff800) == 0xe92dd800) /* stmfd sp!,{fp,ip,lr,pc} */
618 /* Any insns after this point may float into the code, if it makes
619 for better instruction scheduling, so we skip them only if we
620 find them, but still consider the function to be frame-ful. */
622 /* We may have either one sfmfd instruction here, or several stfe
623 insns, depending on the version of floating point code we
625 if ((inst
& 0xffbf0fff) == 0xec2d0200) /* sfmfd fn, <cnt>, [sp]! */
628 if ((inst
& 0xffff8fff) == 0xed6d0103) /* stfe fn, [sp, #-12]! */
631 if ((inst
& 0xfffff000) == 0xe24cb000) /* sub fp, ip, #nn */
634 if ((inst
& 0xfffff000) == 0xe24dd000) /* sub sp, sp, #nn */
637 if ((inst
& 0xffffc000) == 0xe54b0000 /* strb r(0123),[r11,#-nn] */
638 || (inst
& 0xffffc0f0) == 0xe14b00b0 /* strh r(0123),[r11,#-nn] */
639 || (inst
& 0xffffc000) == 0xe50b0000) /* str r(0123),[r11,#-nn] */
642 if ((inst
& 0xffffc000) == 0xe5cd0000 /* strb r(0123),[sp,#nn] */
643 || (inst
& 0xffffc0f0) == 0xe1cd00b0 /* strh r(0123),[sp,#nn] */
644 || (inst
& 0xffffc000) == 0xe58d0000) /* str r(0123),[sp,#nn] */
647 /* Un-recognized instruction; stop scanning. */
651 return skip_pc
; /* End of prologue */
655 /* Function: thumb_scan_prologue (helper function for arm_scan_prologue)
656 This function decodes a Thumb function prologue to determine:
657 1) the size of the stack frame
658 2) which registers are saved on it
659 3) the offsets of saved regs
660 4) the offset from the stack pointer to the frame pointer
662 A typical Thumb function prologue would create this stack frame
663 (offsets relative to FP)
664 old SP -> 24 stack parameters
667 R7 -> 0 local variables (16 bytes)
668 SP -> -12 additional stack space (12 bytes)
669 The frame size would thus be 36 bytes, and the frame offset would be
670 12 bytes. The frame register is R7.
672 The comments for thumb_skip_prolog() describe the algorithm we use
673 to detect the end of the prolog. */
677 thumb_scan_prologue (struct gdbarch
*gdbarch
, CORE_ADDR prev_pc
,
678 CORE_ADDR block_addr
, struct arm_prologue_cache
*cache
)
680 CORE_ADDR prologue_start
;
681 CORE_ADDR prologue_end
;
682 CORE_ADDR current_pc
;
684 if (find_pc_partial_function (block_addr
, NULL
, &prologue_start
,
687 struct symtab_and_line sal
= find_pc_line (prologue_start
, 0);
689 if (sal
.line
== 0) /* no line info, use current PC */
690 prologue_end
= prev_pc
;
691 else if (sal
.end
< prologue_end
) /* next line begins after fn end */
692 prologue_end
= sal
.end
; /* (probably means no prologue) */
695 /* We're in the boondocks: we have no idea where the start of the
699 prologue_end
= min (prologue_end
, prev_pc
);
701 thumb_analyze_prologue (gdbarch
, prologue_start
, prologue_end
, cache
);
704 /* This function decodes an ARM function prologue to determine:
705 1) the size of the stack frame
706 2) which registers are saved on it
707 3) the offsets of saved regs
708 4) the offset from the stack pointer to the frame pointer
709 This information is stored in the "extra" fields of the frame_info.
711 There are two basic forms for the ARM prologue. The fixed argument
712 function call will look like:
715 stmfd sp!, {fp, ip, lr, pc}
719 Which would create this stack frame (offsets relative to FP):
720 IP -> 4 (caller's stack)
721 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
722 -4 LR (return address in caller)
723 -8 IP (copy of caller's SP)
725 SP -> -28 Local variables
727 The frame size would thus be 32 bytes, and the frame offset would be
728 28 bytes. The stmfd call can also save any of the vN registers it
729 plans to use, which increases the frame size accordingly.
731 Note: The stored PC is 8 off of the STMFD instruction that stored it
732 because the ARM Store instructions always store PC + 8 when you read
735 A variable argument function call will look like:
738 stmfd sp!, {a1, a2, a3, a4}
739 stmfd sp!, {fp, ip, lr, pc}
742 Which would create this stack frame (offsets relative to FP):
743 IP -> 20 (caller's stack)
748 FP -> 0 PC (points to address of stmfd instruction + 8 in callee)
749 -4 LR (return address in caller)
750 -8 IP (copy of caller's SP)
752 SP -> -28 Local variables
754 The frame size would thus be 48 bytes, and the frame offset would be
757 There is another potential complication, which is that the optimizer
758 will try to separate the store of fp in the "stmfd" instruction from
759 the "sub fp, ip, #NN" instruction. Almost anything can be there, so
760 we just key on the stmfd, and then scan for the "sub fp, ip, #NN"...
762 Also, note, the original version of the ARM toolchain claimed that there
765 instruction at the end of the prologue. I have never seen GCC produce
766 this, and the ARM docs don't mention it. We still test for it below in
772 arm_scan_prologue (struct frame_info
*this_frame
,
773 struct arm_prologue_cache
*cache
)
775 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
776 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
777 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
779 CORE_ADDR prologue_start
, prologue_end
, current_pc
;
780 CORE_ADDR prev_pc
= get_frame_pc (this_frame
);
781 CORE_ADDR block_addr
= get_frame_address_in_block (this_frame
);
782 pv_t regs
[ARM_FPS_REGNUM
];
783 struct pv_area
*stack
;
784 struct cleanup
*back_to
;
787 /* Assume there is no frame until proven otherwise. */
788 cache
->framereg
= ARM_SP_REGNUM
;
789 cache
->framesize
= 0;
791 /* Check for Thumb prologue. */
792 if (arm_frame_is_thumb (this_frame
))
794 thumb_scan_prologue (gdbarch
, prev_pc
, block_addr
, cache
);
798 /* Find the function prologue. If we can't find the function in
799 the symbol table, peek in the stack frame to find the PC. */
800 if (find_pc_partial_function (block_addr
, NULL
, &prologue_start
,
803 /* One way to find the end of the prologue (which works well
804 for unoptimized code) is to do the following:
806 struct symtab_and_line sal = find_pc_line (prologue_start, 0);
809 prologue_end = prev_pc;
810 else if (sal.end < prologue_end)
811 prologue_end = sal.end;
813 This mechanism is very accurate so long as the optimizer
814 doesn't move any instructions from the function body into the
815 prologue. If this happens, sal.end will be the last
816 instruction in the first hunk of prologue code just before
817 the first instruction that the scheduler has moved from
818 the body to the prologue.
820 In order to make sure that we scan all of the prologue
821 instructions, we use a slightly less accurate mechanism which
822 may scan more than necessary. To help compensate for this
823 lack of accuracy, the prologue scanning loop below contains
824 several clauses which'll cause the loop to terminate early if
825 an implausible prologue instruction is encountered.
831 is a suitable endpoint since it accounts for the largest
832 possible prologue plus up to five instructions inserted by
835 if (prologue_end
> prologue_start
+ 64)
837 prologue_end
= prologue_start
+ 64; /* See above. */
842 /* We have no symbol information. Our only option is to assume this
843 function has a standard stack frame and the normal frame register.
844 Then, we can find the value of our frame pointer on entrance to
845 the callee (or at the present moment if this is the innermost frame).
846 The value stored there should be the address of the stmfd + 8. */
848 LONGEST return_value
;
850 frame_loc
= get_frame_register_unsigned (this_frame
, ARM_FP_REGNUM
);
851 if (!safe_read_memory_integer (frame_loc
, 4, byte_order
, &return_value
))
855 prologue_start
= gdbarch_addr_bits_remove
856 (gdbarch
, return_value
) - 8;
857 prologue_end
= prologue_start
+ 64; /* See above. */
861 if (prev_pc
< prologue_end
)
862 prologue_end
= prev_pc
;
864 /* Now search the prologue looking for instructions that set up the
865 frame pointer, adjust the stack pointer, and save registers.
867 Be careful, however, and if it doesn't look like a prologue,
868 don't try to scan it. If, for instance, a frameless function
869 begins with stmfd sp!, then we will tell ourselves there is
870 a frame, which will confuse stack traceback, as well as "finish"
871 and other operations that rely on a knowledge of the stack
874 In the APCS, the prologue should start with "mov ip, sp" so
875 if we don't see this as the first insn, we will stop.
877 [Note: This doesn't seem to be true any longer, so it's now an
878 optional part of the prologue. - Kevin Buettner, 2001-11-20]
880 [Note further: The "mov ip,sp" only seems to be missing in
881 frameless functions at optimization level "-O2" or above,
882 in which case it is often (but not always) replaced by
883 "str lr, [sp, #-4]!". - Michael Snyder, 2002-04-23] */
885 for (regno
= 0; regno
< ARM_FPS_REGNUM
; regno
++)
886 regs
[regno
] = pv_register (regno
, 0);
887 stack
= make_pv_area (ARM_SP_REGNUM
, gdbarch_addr_bit (gdbarch
));
888 back_to
= make_cleanup_free_pv_area (stack
);
890 for (current_pc
= prologue_start
;
891 current_pc
< prologue_end
;
895 = read_memory_unsigned_integer (current_pc
, 4, byte_order_for_code
);
897 if (insn
== 0xe1a0c00d) /* mov ip, sp */
899 regs
[ARM_IP_REGNUM
] = regs
[ARM_SP_REGNUM
];
902 else if ((insn
& 0xfffff000) == 0xe28dc000) /* add ip, sp #n */
904 unsigned imm
= insn
& 0xff; /* immediate value */
905 unsigned rot
= (insn
& 0xf00) >> 7; /* rotate amount */
906 imm
= (imm
>> rot
) | (imm
<< (32 - rot
));
907 regs
[ARM_IP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], imm
);
910 else if ((insn
& 0xfffff000) == 0xe24dc000) /* sub ip, sp #n */
912 unsigned imm
= insn
& 0xff; /* immediate value */
913 unsigned rot
= (insn
& 0xf00) >> 7; /* rotate amount */
914 imm
= (imm
>> rot
) | (imm
<< (32 - rot
));
915 regs
[ARM_IP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], -imm
);
918 else if (insn
== 0xe52de004) /* str lr, [sp, #-4]! */
920 if (pv_area_store_would_trash (stack
, regs
[ARM_SP_REGNUM
]))
922 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], -4);
923 pv_area_store (stack
, regs
[ARM_SP_REGNUM
], 4, regs
[ARM_LR_REGNUM
]);
926 else if ((insn
& 0xffff0000) == 0xe92d0000)
927 /* stmfd sp!, {..., fp, ip, lr, pc}
929 stmfd sp!, {a1, a2, a3, a4} */
931 int mask
= insn
& 0xffff;
933 if (pv_area_store_would_trash (stack
, regs
[ARM_SP_REGNUM
]))
936 /* Calculate offsets of saved registers. */
937 for (regno
= ARM_PC_REGNUM
; regno
>= 0; regno
--)
938 if (mask
& (1 << regno
))
940 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], -4);
941 pv_area_store (stack
, regs
[ARM_SP_REGNUM
], 4, regs
[regno
]);
944 else if ((insn
& 0xffffc000) == 0xe54b0000 /* strb rx,[r11,#-n] */
945 || (insn
& 0xffffc0f0) == 0xe14b00b0 /* strh rx,[r11,#-n] */
946 || (insn
& 0xffffc000) == 0xe50b0000) /* str rx,[r11,#-n] */
948 /* No need to add this to saved_regs -- it's just an arg reg. */
951 else if ((insn
& 0xffffc000) == 0xe5cd0000 /* strb rx,[sp,#n] */
952 || (insn
& 0xffffc0f0) == 0xe1cd00b0 /* strh rx,[sp,#n] */
953 || (insn
& 0xffffc000) == 0xe58d0000) /* str rx,[sp,#n] */
955 /* No need to add this to saved_regs -- it's just an arg reg. */
958 else if ((insn
& 0xfffff000) == 0xe24cb000) /* sub fp, ip #n */
960 unsigned imm
= insn
& 0xff; /* immediate value */
961 unsigned rot
= (insn
& 0xf00) >> 7; /* rotate amount */
962 imm
= (imm
>> rot
) | (imm
<< (32 - rot
));
963 regs
[ARM_FP_REGNUM
] = pv_add_constant (regs
[ARM_IP_REGNUM
], -imm
);
965 else if ((insn
& 0xfffff000) == 0xe24dd000) /* sub sp, sp #n */
967 unsigned imm
= insn
& 0xff; /* immediate value */
968 unsigned rot
= (insn
& 0xf00) >> 7; /* rotate amount */
969 imm
= (imm
>> rot
) | (imm
<< (32 - rot
));
970 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], -imm
);
972 else if ((insn
& 0xffff7fff) == 0xed6d0103 /* stfe f?, [sp, -#c]! */
973 && gdbarch_tdep (gdbarch
)->have_fpa_registers
)
975 if (pv_area_store_would_trash (stack
, regs
[ARM_SP_REGNUM
]))
978 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], -12);
979 regno
= ARM_F0_REGNUM
+ ((insn
>> 12) & 0x07);
980 pv_area_store (stack
, regs
[ARM_SP_REGNUM
], 12, regs
[regno
]);
982 else if ((insn
& 0xffbf0fff) == 0xec2d0200 /* sfmfd f0, 4, [sp!] */
983 && gdbarch_tdep (gdbarch
)->have_fpa_registers
)
986 unsigned int fp_start_reg
, fp_bound_reg
;
988 if (pv_area_store_would_trash (stack
, regs
[ARM_SP_REGNUM
]))
991 if ((insn
& 0x800) == 0x800) /* N0 is set */
993 if ((insn
& 0x40000) == 0x40000) /* N1 is set */
1000 if ((insn
& 0x40000) == 0x40000) /* N1 is set */
1001 n_saved_fp_regs
= 2;
1003 n_saved_fp_regs
= 4;
1006 fp_start_reg
= ARM_F0_REGNUM
+ ((insn
>> 12) & 0x7);
1007 fp_bound_reg
= fp_start_reg
+ n_saved_fp_regs
;
1008 for (; fp_start_reg
< fp_bound_reg
; fp_start_reg
++)
1010 regs
[ARM_SP_REGNUM
] = pv_add_constant (regs
[ARM_SP_REGNUM
], -12);
1011 pv_area_store (stack
, regs
[ARM_SP_REGNUM
], 12,
1012 regs
[fp_start_reg
++]);
1015 else if ((insn
& 0xf0000000) != 0xe0000000)
1016 break; /* Condition not true, exit early */
1017 else if ((insn
& 0xfe200000) == 0xe8200000) /* ldm? */
1018 break; /* Don't scan past a block load */
1020 /* The optimizer might shove anything into the prologue,
1021 so we just skip what we don't recognize. */
1025 /* The frame size is just the distance from the frame register
1026 to the original stack pointer. */
1027 if (pv_is_register (regs
[ARM_FP_REGNUM
], ARM_SP_REGNUM
))
1029 /* Frame pointer is fp. */
1030 cache
->framereg
= ARM_FP_REGNUM
;
1031 cache
->framesize
= -regs
[ARM_FP_REGNUM
].k
;
1033 else if (pv_is_register (regs
[ARM_SP_REGNUM
], ARM_SP_REGNUM
))
1035 /* Try the stack pointer... this is a bit desperate. */
1036 cache
->framereg
= ARM_SP_REGNUM
;
1037 cache
->framesize
= -regs
[ARM_SP_REGNUM
].k
;
1041 /* We're just out of luck. We don't know where the frame is. */
1042 cache
->framereg
= -1;
1043 cache
->framesize
= 0;
1046 for (regno
= 0; regno
< ARM_FPS_REGNUM
; regno
++)
1047 if (pv_area_find_reg (stack
, gdbarch
, regno
, &offset
))
1048 cache
->saved_regs
[regno
].addr
= offset
;
1050 do_cleanups (back_to
);
1053 static struct arm_prologue_cache
*
1054 arm_make_prologue_cache (struct frame_info
*this_frame
)
1057 struct arm_prologue_cache
*cache
;
1058 CORE_ADDR unwound_fp
;
1060 cache
= FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache
);
1061 cache
->saved_regs
= trad_frame_alloc_saved_regs (this_frame
);
1063 arm_scan_prologue (this_frame
, cache
);
1065 unwound_fp
= get_frame_register_unsigned (this_frame
, cache
->framereg
);
1066 if (unwound_fp
== 0)
1069 cache
->prev_sp
= unwound_fp
+ cache
->framesize
;
1071 /* Calculate actual addresses of saved registers using offsets
1072 determined by arm_scan_prologue. */
1073 for (reg
= 0; reg
< gdbarch_num_regs (get_frame_arch (this_frame
)); reg
++)
1074 if (trad_frame_addr_p (cache
->saved_regs
, reg
))
1075 cache
->saved_regs
[reg
].addr
+= cache
->prev_sp
;
1080 /* Our frame ID for a normal frame is the current function's starting PC
1081 and the caller's SP when we were called. */
1084 arm_prologue_this_id (struct frame_info
*this_frame
,
1086 struct frame_id
*this_id
)
1088 struct arm_prologue_cache
*cache
;
1092 if (*this_cache
== NULL
)
1093 *this_cache
= arm_make_prologue_cache (this_frame
);
1094 cache
= *this_cache
;
1096 /* This is meant to halt the backtrace at "_start". */
1097 pc
= get_frame_pc (this_frame
);
1098 if (pc
<= gdbarch_tdep (get_frame_arch (this_frame
))->lowest_pc
)
1101 /* If we've hit a wall, stop. */
1102 if (cache
->prev_sp
== 0)
1105 func
= get_frame_func (this_frame
);
1106 id
= frame_id_build (cache
->prev_sp
, func
);
1110 static struct value
*
1111 arm_prologue_prev_register (struct frame_info
*this_frame
,
1115 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1116 struct arm_prologue_cache
*cache
;
1118 if (*this_cache
== NULL
)
1119 *this_cache
= arm_make_prologue_cache (this_frame
);
1120 cache
= *this_cache
;
1122 /* If we are asked to unwind the PC, then we need to return the LR
1123 instead. The prologue may save PC, but it will point into this
1124 frame's prologue, not the next frame's resume location. Also
1125 strip the saved T bit. A valid LR may have the low bit set, but
1126 a valid PC never does. */
1127 if (prev_regnum
== ARM_PC_REGNUM
)
1131 lr
= frame_unwind_register_unsigned (this_frame
, ARM_LR_REGNUM
);
1132 return frame_unwind_got_constant (this_frame
, prev_regnum
,
1133 arm_addr_bits_remove (gdbarch
, lr
));
1136 /* SP is generally not saved to the stack, but this frame is
1137 identified by the next frame's stack pointer at the time of the call.
1138 The value was already reconstructed into PREV_SP. */
1139 if (prev_regnum
== ARM_SP_REGNUM
)
1140 return frame_unwind_got_constant (this_frame
, prev_regnum
, cache
->prev_sp
);
1142 /* The CPSR may have been changed by the call instruction and by the
1143 called function. The only bit we can reconstruct is the T bit,
1144 by checking the low bit of LR as of the call. This is a reliable
1145 indicator of Thumb-ness except for some ARM v4T pre-interworking
1146 Thumb code, which could get away with a clear low bit as long as
1147 the called function did not use bx. Guess that all other
1148 bits are unchanged; the condition flags are presumably lost,
1149 but the processor status is likely valid. */
1150 if (prev_regnum
== ARM_PS_REGNUM
)
1154 cpsr
= get_frame_register_unsigned (this_frame
, prev_regnum
);
1155 lr
= frame_unwind_register_unsigned (this_frame
, ARM_LR_REGNUM
);
1156 if (IS_THUMB_ADDR (lr
))
1160 return frame_unwind_got_constant (this_frame
, prev_regnum
, cpsr
);
1163 return trad_frame_get_prev_register (this_frame
, cache
->saved_regs
,
1167 struct frame_unwind arm_prologue_unwind
= {
1169 arm_prologue_this_id
,
1170 arm_prologue_prev_register
,
1172 default_frame_sniffer
1175 static struct arm_prologue_cache
*
1176 arm_make_stub_cache (struct frame_info
*this_frame
)
1179 struct arm_prologue_cache
*cache
;
1180 CORE_ADDR unwound_fp
;
1182 cache
= FRAME_OBSTACK_ZALLOC (struct arm_prologue_cache
);
1183 cache
->saved_regs
= trad_frame_alloc_saved_regs (this_frame
);
1185 cache
->prev_sp
= get_frame_register_unsigned (this_frame
, ARM_SP_REGNUM
);
1190 /* Our frame ID for a stub frame is the current SP and LR. */
1193 arm_stub_this_id (struct frame_info
*this_frame
,
1195 struct frame_id
*this_id
)
1197 struct arm_prologue_cache
*cache
;
1199 if (*this_cache
== NULL
)
1200 *this_cache
= arm_make_stub_cache (this_frame
);
1201 cache
= *this_cache
;
1203 *this_id
= frame_id_build (cache
->prev_sp
, get_frame_pc (this_frame
));
1207 arm_stub_unwind_sniffer (const struct frame_unwind
*self
,
1208 struct frame_info
*this_frame
,
1209 void **this_prologue_cache
)
1211 CORE_ADDR addr_in_block
;
1214 addr_in_block
= get_frame_address_in_block (this_frame
);
1215 if (in_plt_section (addr_in_block
, NULL
)
1216 || target_read_memory (get_frame_pc (this_frame
), dummy
, 4) != 0)
1222 struct frame_unwind arm_stub_unwind
= {
1225 arm_prologue_prev_register
,
1227 arm_stub_unwind_sniffer
1231 arm_normal_frame_base (struct frame_info
*this_frame
, void **this_cache
)
1233 struct arm_prologue_cache
*cache
;
1235 if (*this_cache
== NULL
)
1236 *this_cache
= arm_make_prologue_cache (this_frame
);
1237 cache
= *this_cache
;
1239 return cache
->prev_sp
- cache
->framesize
;
1242 struct frame_base arm_normal_base
= {
1243 &arm_prologue_unwind
,
1244 arm_normal_frame_base
,
1245 arm_normal_frame_base
,
1246 arm_normal_frame_base
1249 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
1250 dummy frame. The frame ID's base needs to match the TOS value
1251 saved by save_dummy_frame_tos() and returned from
1252 arm_push_dummy_call, and the PC needs to match the dummy frame's
1255 static struct frame_id
1256 arm_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
1258 return frame_id_build (get_frame_register_unsigned (this_frame
, ARM_SP_REGNUM
),
1259 get_frame_pc (this_frame
));
1262 /* Given THIS_FRAME, find the previous frame's resume PC (which will
1263 be used to construct the previous frame's ID, after looking up the
1264 containing function). */
1267 arm_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
1270 pc
= frame_unwind_register_unsigned (this_frame
, ARM_PC_REGNUM
);
1271 return arm_addr_bits_remove (gdbarch
, pc
);
1275 arm_unwind_sp (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
1277 return frame_unwind_register_unsigned (this_frame
, ARM_SP_REGNUM
);
1280 static struct value
*
1281 arm_dwarf2_prev_register (struct frame_info
*this_frame
, void **this_cache
,
1284 struct gdbarch
* gdbarch
= get_frame_arch (this_frame
);
1290 /* The PC is normally copied from the return column, which
1291 describes saves of LR. However, that version may have an
1292 extra bit set to indicate Thumb state. The bit is not
1294 lr
= frame_unwind_register_unsigned (this_frame
, ARM_LR_REGNUM
);
1295 return frame_unwind_got_constant (this_frame
, regnum
,
1296 arm_addr_bits_remove (gdbarch
, lr
));
1299 /* Reconstruct the T bit; see arm_prologue_prev_register for details. */
1300 cpsr
= get_frame_register_unsigned (this_frame
, regnum
);
1301 lr
= frame_unwind_register_unsigned (this_frame
, ARM_LR_REGNUM
);
1302 if (IS_THUMB_ADDR (lr
))
1306 return frame_unwind_got_constant (this_frame
, regnum
, cpsr
);
1309 internal_error (__FILE__
, __LINE__
,
1310 _("Unexpected register %d"), regnum
);
1315 arm_dwarf2_frame_init_reg (struct gdbarch
*gdbarch
, int regnum
,
1316 struct dwarf2_frame_state_reg
*reg
,
1317 struct frame_info
*this_frame
)
1323 reg
->how
= DWARF2_FRAME_REG_FN
;
1324 reg
->loc
.fn
= arm_dwarf2_prev_register
;
1327 reg
->how
= DWARF2_FRAME_REG_CFA
;
1332 /* When arguments must be pushed onto the stack, they go on in reverse
1333 order. The code below implements a FILO (stack) to do this. */
1338 struct stack_item
*prev
;
1342 static struct stack_item
*
1343 push_stack_item (struct stack_item
*prev
, void *contents
, int len
)
1345 struct stack_item
*si
;
1346 si
= xmalloc (sizeof (struct stack_item
));
1347 si
->data
= xmalloc (len
);
1350 memcpy (si
->data
, contents
, len
);
1354 static struct stack_item
*
1355 pop_stack_item (struct stack_item
*si
)
1357 struct stack_item
*dead
= si
;
1365 /* Return the alignment (in bytes) of the given type. */
1368 arm_type_align (struct type
*t
)
1374 t
= check_typedef (t
);
1375 switch (TYPE_CODE (t
))
1378 /* Should never happen. */
1379 internal_error (__FILE__
, __LINE__
, _("unknown type alignment"));
1383 case TYPE_CODE_ENUM
:
1387 case TYPE_CODE_RANGE
:
1388 case TYPE_CODE_BITSTRING
:
1390 case TYPE_CODE_CHAR
:
1391 case TYPE_CODE_BOOL
:
1392 return TYPE_LENGTH (t
);
1394 case TYPE_CODE_ARRAY
:
1395 case TYPE_CODE_COMPLEX
:
1396 /* TODO: What about vector types? */
1397 return arm_type_align (TYPE_TARGET_TYPE (t
));
1399 case TYPE_CODE_STRUCT
:
1400 case TYPE_CODE_UNION
:
1402 for (n
= 0; n
< TYPE_NFIELDS (t
); n
++)
1404 falign
= arm_type_align (TYPE_FIELD_TYPE (t
, n
));
1412 /* Possible base types for a candidate for passing and returning in
1415 enum arm_vfp_cprc_base_type
1424 /* The length of one element of base type B. */
1427 arm_vfp_cprc_unit_length (enum arm_vfp_cprc_base_type b
)
1431 case VFP_CPRC_SINGLE
:
1433 case VFP_CPRC_DOUBLE
:
1435 case VFP_CPRC_VEC64
:
1437 case VFP_CPRC_VEC128
:
1440 internal_error (__FILE__
, __LINE__
, _("Invalid VFP CPRC type: %d."),
1445 /* The character ('s', 'd' or 'q') for the type of VFP register used
1446 for passing base type B. */
1449 arm_vfp_cprc_reg_char (enum arm_vfp_cprc_base_type b
)
1453 case VFP_CPRC_SINGLE
:
1455 case VFP_CPRC_DOUBLE
:
1457 case VFP_CPRC_VEC64
:
1459 case VFP_CPRC_VEC128
:
1462 internal_error (__FILE__
, __LINE__
, _("Invalid VFP CPRC type: %d."),
1467 /* Determine whether T may be part of a candidate for passing and
1468 returning in VFP registers, ignoring the limit on the total number
1469 of components. If *BASE_TYPE is VFP_CPRC_UNKNOWN, set it to the
1470 classification of the first valid component found; if it is not
1471 VFP_CPRC_UNKNOWN, all components must have the same classification
1472 as *BASE_TYPE. If it is found that T contains a type not permitted
1473 for passing and returning in VFP registers, a type differently
1474 classified from *BASE_TYPE, or two types differently classified
1475 from each other, return -1, otherwise return the total number of
1476 base-type elements found (possibly 0 in an empty structure or
1477 array). Vectors and complex types are not currently supported,
1478 matching the generic AAPCS support. */
1481 arm_vfp_cprc_sub_candidate (struct type
*t
,
1482 enum arm_vfp_cprc_base_type
*base_type
)
1484 t
= check_typedef (t
);
1485 switch (TYPE_CODE (t
))
1488 switch (TYPE_LENGTH (t
))
1491 if (*base_type
== VFP_CPRC_UNKNOWN
)
1492 *base_type
= VFP_CPRC_SINGLE
;
1493 else if (*base_type
!= VFP_CPRC_SINGLE
)
1498 if (*base_type
== VFP_CPRC_UNKNOWN
)
1499 *base_type
= VFP_CPRC_DOUBLE
;
1500 else if (*base_type
!= VFP_CPRC_DOUBLE
)
1509 case TYPE_CODE_ARRAY
:
1513 count
= arm_vfp_cprc_sub_candidate (TYPE_TARGET_TYPE (t
), base_type
);
1516 if (TYPE_LENGTH (t
) == 0)
1518 gdb_assert (count
== 0);
1521 else if (count
== 0)
1523 unitlen
= arm_vfp_cprc_unit_length (*base_type
);
1524 gdb_assert ((TYPE_LENGTH (t
) % unitlen
) == 0);
1525 return TYPE_LENGTH (t
) / unitlen
;
1529 case TYPE_CODE_STRUCT
:
1534 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
1536 int sub_count
= arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t
, i
),
1538 if (sub_count
== -1)
1542 if (TYPE_LENGTH (t
) == 0)
1544 gdb_assert (count
== 0);
1547 else if (count
== 0)
1549 unitlen
= arm_vfp_cprc_unit_length (*base_type
);
1550 if (TYPE_LENGTH (t
) != unitlen
* count
)
1555 case TYPE_CODE_UNION
:
1560 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
1562 int sub_count
= arm_vfp_cprc_sub_candidate (TYPE_FIELD_TYPE (t
, i
),
1564 if (sub_count
== -1)
1566 count
= (count
> sub_count
? count
: sub_count
);
1568 if (TYPE_LENGTH (t
) == 0)
1570 gdb_assert (count
== 0);
1573 else if (count
== 0)
1575 unitlen
= arm_vfp_cprc_unit_length (*base_type
);
1576 if (TYPE_LENGTH (t
) != unitlen
* count
)
1588 /* Determine whether T is a VFP co-processor register candidate (CPRC)
1589 if passed to or returned from a non-variadic function with the VFP
1590 ABI in effect. Return 1 if it is, 0 otherwise. If it is, set
1591 *BASE_TYPE to the base type for T and *COUNT to the number of
1592 elements of that base type before returning. */
1595 arm_vfp_call_candidate (struct type
*t
, enum arm_vfp_cprc_base_type
*base_type
,
1598 enum arm_vfp_cprc_base_type b
= VFP_CPRC_UNKNOWN
;
1599 int c
= arm_vfp_cprc_sub_candidate (t
, &b
);
1600 if (c
<= 0 || c
> 4)
1607 /* Return 1 if the VFP ABI should be used for passing arguments to and
1608 returning values from a function of type FUNC_TYPE, 0
1612 arm_vfp_abi_for_function (struct gdbarch
*gdbarch
, struct type
*func_type
)
1614 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
1615 /* Variadic functions always use the base ABI. Assume that functions
1616 without debug info are not variadic. */
1617 if (func_type
&& TYPE_VARARGS (check_typedef (func_type
)))
1619 /* The VFP ABI is only supported as a variant of AAPCS. */
1620 if (tdep
->arm_abi
!= ARM_ABI_AAPCS
)
1622 return gdbarch_tdep (gdbarch
)->fp_model
== ARM_FLOAT_VFP
;
1625 /* We currently only support passing parameters in integer registers, which
1626 conforms with GCC's default model, and VFP argument passing following
1627 the VFP variant of AAPCS. Several other variants exist and
1628 we should probably support some of them based on the selected ABI. */
1631 arm_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
1632 struct regcache
*regcache
, CORE_ADDR bp_addr
, int nargs
,
1633 struct value
**args
, CORE_ADDR sp
, int struct_return
,
1634 CORE_ADDR struct_addr
)
1636 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1640 struct stack_item
*si
= NULL
;
1643 unsigned vfp_regs_free
= (1 << 16) - 1;
1645 /* Determine the type of this function and whether the VFP ABI
1647 ftype
= check_typedef (value_type (function
));
1648 if (TYPE_CODE (ftype
) == TYPE_CODE_PTR
)
1649 ftype
= check_typedef (TYPE_TARGET_TYPE (ftype
));
1650 use_vfp_abi
= arm_vfp_abi_for_function (gdbarch
, ftype
);
1652 /* Set the return address. For the ARM, the return breakpoint is
1653 always at BP_ADDR. */
1654 if (arm_pc_is_thumb (bp_addr
))
1656 regcache_cooked_write_unsigned (regcache
, ARM_LR_REGNUM
, bp_addr
);
1658 /* Walk through the list of args and determine how large a temporary
1659 stack is required. Need to take care here as structs may be
1660 passed on the stack, and we have to to push them. */
1663 argreg
= ARM_A1_REGNUM
;
1666 /* The struct_return pointer occupies the first parameter
1667 passing register. */
1671 fprintf_unfiltered (gdb_stdlog
, "struct return in %s = %s\n",
1672 gdbarch_register_name (gdbarch
, argreg
),
1673 paddress (gdbarch
, struct_addr
));
1674 regcache_cooked_write_unsigned (regcache
, argreg
, struct_addr
);
1678 for (argnum
= 0; argnum
< nargs
; argnum
++)
1681 struct type
*arg_type
;
1682 struct type
*target_type
;
1683 enum type_code typecode
;
1686 enum arm_vfp_cprc_base_type vfp_base_type
;
1688 int may_use_core_reg
= 1;
1690 arg_type
= check_typedef (value_type (args
[argnum
]));
1691 len
= TYPE_LENGTH (arg_type
);
1692 target_type
= TYPE_TARGET_TYPE (arg_type
);
1693 typecode
= TYPE_CODE (arg_type
);
1694 val
= value_contents_writeable (args
[argnum
]);
1696 align
= arm_type_align (arg_type
);
1697 /* Round alignment up to a whole number of words. */
1698 align
= (align
+ INT_REGISTER_SIZE
- 1) & ~(INT_REGISTER_SIZE
- 1);
1699 /* Different ABIs have different maximum alignments. */
1700 if (gdbarch_tdep (gdbarch
)->arm_abi
== ARM_ABI_APCS
)
1702 /* The APCS ABI only requires word alignment. */
1703 align
= INT_REGISTER_SIZE
;
1707 /* The AAPCS requires at most doubleword alignment. */
1708 if (align
> INT_REGISTER_SIZE
* 2)
1709 align
= INT_REGISTER_SIZE
* 2;
1713 && arm_vfp_call_candidate (arg_type
, &vfp_base_type
,
1721 /* Because this is a CPRC it cannot go in a core register or
1722 cause a core register to be skipped for alignment.
1723 Either it goes in VFP registers and the rest of this loop
1724 iteration is skipped for this argument, or it goes on the
1725 stack (and the stack alignment code is correct for this
1727 may_use_core_reg
= 0;
1729 unit_length
= arm_vfp_cprc_unit_length (vfp_base_type
);
1730 shift
= unit_length
/ 4;
1731 mask
= (1 << (shift
* vfp_base_count
)) - 1;
1732 for (regno
= 0; regno
< 16; regno
+= shift
)
1733 if (((vfp_regs_free
>> regno
) & mask
) == mask
)
1742 vfp_regs_free
&= ~(mask
<< regno
);
1743 reg_scaled
= regno
/ shift
;
1744 reg_char
= arm_vfp_cprc_reg_char (vfp_base_type
);
1745 for (i
= 0; i
< vfp_base_count
; i
++)
1749 if (reg_char
== 'q')
1750 arm_neon_quad_write (gdbarch
, regcache
, reg_scaled
+ i
,
1751 val
+ i
* unit_length
);
1754 sprintf (name_buf
, "%c%d", reg_char
, reg_scaled
+ i
);
1755 regnum
= user_reg_map_name_to_regnum (gdbarch
, name_buf
,
1757 regcache_cooked_write (regcache
, regnum
,
1758 val
+ i
* unit_length
);
1765 /* This CPRC could not go in VFP registers, so all VFP
1766 registers are now marked as used. */
1771 /* Push stack padding for dowubleword alignment. */
1772 if (nstack
& (align
- 1))
1774 si
= push_stack_item (si
, val
, INT_REGISTER_SIZE
);
1775 nstack
+= INT_REGISTER_SIZE
;
1778 /* Doubleword aligned quantities must go in even register pairs. */
1779 if (may_use_core_reg
1780 && argreg
<= ARM_LAST_ARG_REGNUM
1781 && align
> INT_REGISTER_SIZE
1785 /* If the argument is a pointer to a function, and it is a
1786 Thumb function, create a LOCAL copy of the value and set
1787 the THUMB bit in it. */
1788 if (TYPE_CODE_PTR
== typecode
1789 && target_type
!= NULL
1790 && TYPE_CODE_FUNC
== TYPE_CODE (target_type
))
1792 CORE_ADDR regval
= extract_unsigned_integer (val
, len
, byte_order
);
1793 if (arm_pc_is_thumb (regval
))
1796 store_unsigned_integer (val
, len
, byte_order
,
1797 MAKE_THUMB_ADDR (regval
));
1801 /* Copy the argument to general registers or the stack in
1802 register-sized pieces. Large arguments are split between
1803 registers and stack. */
1806 int partial_len
= len
< INT_REGISTER_SIZE
? len
: INT_REGISTER_SIZE
;
1808 if (may_use_core_reg
&& argreg
<= ARM_LAST_ARG_REGNUM
)
1810 /* The argument is being passed in a general purpose
1813 = extract_unsigned_integer (val
, partial_len
, byte_order
);
1814 if (byte_order
== BFD_ENDIAN_BIG
)
1815 regval
<<= (INT_REGISTER_SIZE
- partial_len
) * 8;
1817 fprintf_unfiltered (gdb_stdlog
, "arg %d in %s = 0x%s\n",
1819 gdbarch_register_name
1821 phex (regval
, INT_REGISTER_SIZE
));
1822 regcache_cooked_write_unsigned (regcache
, argreg
, regval
);
1827 /* Push the arguments onto the stack. */
1829 fprintf_unfiltered (gdb_stdlog
, "arg %d @ sp + %d\n",
1831 si
= push_stack_item (si
, val
, INT_REGISTER_SIZE
);
1832 nstack
+= INT_REGISTER_SIZE
;
1839 /* If we have an odd number of words to push, then decrement the stack
1840 by one word now, so first stack argument will be dword aligned. */
1847 write_memory (sp
, si
->data
, si
->len
);
1848 si
= pop_stack_item (si
);
1851 /* Finally, update teh SP register. */
1852 regcache_cooked_write_unsigned (regcache
, ARM_SP_REGNUM
, sp
);
1858 /* Always align the frame to an 8-byte boundary. This is required on
1859 some platforms and harmless on the rest. */
1862 arm_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR sp
)
1864 /* Align the stack to eight bytes. */
1865 return sp
& ~ (CORE_ADDR
) 7;
1869 print_fpu_flags (int flags
)
1871 if (flags
& (1 << 0))
1872 fputs ("IVO ", stdout
);
1873 if (flags
& (1 << 1))
1874 fputs ("DVZ ", stdout
);
1875 if (flags
& (1 << 2))
1876 fputs ("OFL ", stdout
);
1877 if (flags
& (1 << 3))
1878 fputs ("UFL ", stdout
);
1879 if (flags
& (1 << 4))
1880 fputs ("INX ", stdout
);
1884 /* Print interesting information about the floating point processor
1885 (if present) or emulator. */
1887 arm_print_float_info (struct gdbarch
*gdbarch
, struct ui_file
*file
,
1888 struct frame_info
*frame
, const char *args
)
1890 unsigned long status
= get_frame_register_unsigned (frame
, ARM_FPS_REGNUM
);
1893 type
= (status
>> 24) & 127;
1894 if (status
& (1 << 31))
1895 printf (_("Hardware FPU type %d\n"), type
);
1897 printf (_("Software FPU type %d\n"), type
);
1898 /* i18n: [floating point unit] mask */
1899 fputs (_("mask: "), stdout
);
1900 print_fpu_flags (status
>> 16);
1901 /* i18n: [floating point unit] flags */
1902 fputs (_("flags: "), stdout
);
1903 print_fpu_flags (status
);
1906 /* Construct the ARM extended floating point type. */
1907 static struct type
*
1908 arm_ext_type (struct gdbarch
*gdbarch
)
1910 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
1912 if (!tdep
->arm_ext_type
)
1914 = arch_float_type (gdbarch
, -1, "builtin_type_arm_ext",
1915 floatformats_arm_ext
);
1917 return tdep
->arm_ext_type
;
1920 static struct type
*
1921 arm_neon_double_type (struct gdbarch
*gdbarch
)
1923 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
1925 if (tdep
->neon_double_type
== NULL
)
1927 struct type
*t
, *elem
;
1929 t
= arch_composite_type (gdbarch
, "__gdb_builtin_type_neon_d",
1931 elem
= builtin_type (gdbarch
)->builtin_uint8
;
1932 append_composite_type_field (t
, "u8", init_vector_type (elem
, 8));
1933 elem
= builtin_type (gdbarch
)->builtin_uint16
;
1934 append_composite_type_field (t
, "u16", init_vector_type (elem
, 4));
1935 elem
= builtin_type (gdbarch
)->builtin_uint32
;
1936 append_composite_type_field (t
, "u32", init_vector_type (elem
, 2));
1937 elem
= builtin_type (gdbarch
)->builtin_uint64
;
1938 append_composite_type_field (t
, "u64", elem
);
1939 elem
= builtin_type (gdbarch
)->builtin_float
;
1940 append_composite_type_field (t
, "f32", init_vector_type (elem
, 2));
1941 elem
= builtin_type (gdbarch
)->builtin_double
;
1942 append_composite_type_field (t
, "f64", elem
);
1944 TYPE_VECTOR (t
) = 1;
1945 TYPE_NAME (t
) = "neon_d";
1946 tdep
->neon_double_type
= t
;
1949 return tdep
->neon_double_type
;
1952 /* FIXME: The vector types are not correctly ordered on big-endian
1953 targets. Just as s0 is the low bits of d0, d0[0] is also the low
1954 bits of d0 - regardless of what unit size is being held in d0. So
1955 the offset of the first uint8 in d0 is 7, but the offset of the
1956 first float is 4. This code works as-is for little-endian
1959 static struct type
*
1960 arm_neon_quad_type (struct gdbarch
*gdbarch
)
1962 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
1964 if (tdep
->neon_quad_type
== NULL
)
1966 struct type
*t
, *elem
;
1968 t
= arch_composite_type (gdbarch
, "__gdb_builtin_type_neon_q",
1970 elem
= builtin_type (gdbarch
)->builtin_uint8
;
1971 append_composite_type_field (t
, "u8", init_vector_type (elem
, 16));
1972 elem
= builtin_type (gdbarch
)->builtin_uint16
;
1973 append_composite_type_field (t
, "u16", init_vector_type (elem
, 8));
1974 elem
= builtin_type (gdbarch
)->builtin_uint32
;
1975 append_composite_type_field (t
, "u32", init_vector_type (elem
, 4));
1976 elem
= builtin_type (gdbarch
)->builtin_uint64
;
1977 append_composite_type_field (t
, "u64", init_vector_type (elem
, 2));
1978 elem
= builtin_type (gdbarch
)->builtin_float
;
1979 append_composite_type_field (t
, "f32", init_vector_type (elem
, 4));
1980 elem
= builtin_type (gdbarch
)->builtin_double
;
1981 append_composite_type_field (t
, "f64", init_vector_type (elem
, 2));
1983 TYPE_VECTOR (t
) = 1;
1984 TYPE_NAME (t
) = "neon_q";
1985 tdep
->neon_quad_type
= t
;
1988 return tdep
->neon_quad_type
;
1991 /* Return the GDB type object for the "standard" data type of data in
1994 static struct type
*
1995 arm_register_type (struct gdbarch
*gdbarch
, int regnum
)
1997 int num_regs
= gdbarch_num_regs (gdbarch
);
1999 if (gdbarch_tdep (gdbarch
)->have_vfp_pseudos
2000 && regnum
>= num_regs
&& regnum
< num_regs
+ 32)
2001 return builtin_type (gdbarch
)->builtin_float
;
2003 if (gdbarch_tdep (gdbarch
)->have_neon_pseudos
2004 && regnum
>= num_regs
+ 32 && regnum
< num_regs
+ 32 + 16)
2005 return arm_neon_quad_type (gdbarch
);
2007 /* If the target description has register information, we are only
2008 in this function so that we can override the types of
2009 double-precision registers for NEON. */
2010 if (tdesc_has_registers (gdbarch_target_desc (gdbarch
)))
2012 struct type
*t
= tdesc_register_type (gdbarch
, regnum
);
2014 if (regnum
>= ARM_D0_REGNUM
&& regnum
< ARM_D0_REGNUM
+ 32
2015 && TYPE_CODE (t
) == TYPE_CODE_FLT
2016 && gdbarch_tdep (gdbarch
)->have_neon
)
2017 return arm_neon_double_type (gdbarch
);
2022 if (regnum
>= ARM_F0_REGNUM
&& regnum
< ARM_F0_REGNUM
+ NUM_FREGS
)
2024 if (!gdbarch_tdep (gdbarch
)->have_fpa_registers
)
2025 return builtin_type (gdbarch
)->builtin_void
;
2027 return arm_ext_type (gdbarch
);
2029 else if (regnum
== ARM_SP_REGNUM
)
2030 return builtin_type (gdbarch
)->builtin_data_ptr
;
2031 else if (regnum
== ARM_PC_REGNUM
)
2032 return builtin_type (gdbarch
)->builtin_func_ptr
;
2033 else if (regnum
>= ARRAY_SIZE (arm_register_names
))
2034 /* These registers are only supported on targets which supply
2035 an XML description. */
2036 return builtin_type (gdbarch
)->builtin_int0
;
2038 return builtin_type (gdbarch
)->builtin_uint32
;
2041 /* Map a DWARF register REGNUM onto the appropriate GDB register
2045 arm_dwarf_reg_to_regnum (struct gdbarch
*gdbarch
, int reg
)
2047 /* Core integer regs. */
2048 if (reg
>= 0 && reg
<= 15)
2051 /* Legacy FPA encoding. These were once used in a way which
2052 overlapped with VFP register numbering, so their use is
2053 discouraged, but GDB doesn't support the ARM toolchain
2054 which used them for VFP. */
2055 if (reg
>= 16 && reg
<= 23)
2056 return ARM_F0_REGNUM
+ reg
- 16;
2058 /* New assignments for the FPA registers. */
2059 if (reg
>= 96 && reg
<= 103)
2060 return ARM_F0_REGNUM
+ reg
- 96;
2062 /* WMMX register assignments. */
2063 if (reg
>= 104 && reg
<= 111)
2064 return ARM_WCGR0_REGNUM
+ reg
- 104;
2066 if (reg
>= 112 && reg
<= 127)
2067 return ARM_WR0_REGNUM
+ reg
- 112;
2069 if (reg
>= 192 && reg
<= 199)
2070 return ARM_WC0_REGNUM
+ reg
- 192;
2072 /* VFP v2 registers. A double precision value is actually
2073 in d1 rather than s2, but the ABI only defines numbering
2074 for the single precision registers. This will "just work"
2075 in GDB for little endian targets (we'll read eight bytes,
2076 starting in s0 and then progressing to s1), but will be
2077 reversed on big endian targets with VFP. This won't
2078 be a problem for the new Neon quad registers; you're supposed
2079 to use DW_OP_piece for those. */
2080 if (reg
>= 64 && reg
<= 95)
2084 sprintf (name_buf
, "s%d", reg
- 64);
2085 return user_reg_map_name_to_regnum (gdbarch
, name_buf
,
2089 /* VFP v3 / Neon registers. This range is also used for VFP v2
2090 registers, except that it now describes d0 instead of s0. */
2091 if (reg
>= 256 && reg
<= 287)
2095 sprintf (name_buf
, "d%d", reg
- 256);
2096 return user_reg_map_name_to_regnum (gdbarch
, name_buf
,
2103 /* Map GDB internal REGNUM onto the Arm simulator register numbers. */
2105 arm_register_sim_regno (struct gdbarch
*gdbarch
, int regnum
)
2108 gdb_assert (reg
>= 0 && reg
< gdbarch_num_regs (gdbarch
));
2110 if (regnum
>= ARM_WR0_REGNUM
&& regnum
<= ARM_WR15_REGNUM
)
2111 return regnum
- ARM_WR0_REGNUM
+ SIM_ARM_IWMMXT_COP0R0_REGNUM
;
2113 if (regnum
>= ARM_WC0_REGNUM
&& regnum
<= ARM_WC7_REGNUM
)
2114 return regnum
- ARM_WC0_REGNUM
+ SIM_ARM_IWMMXT_COP1R0_REGNUM
;
2116 if (regnum
>= ARM_WCGR0_REGNUM
&& regnum
<= ARM_WCGR7_REGNUM
)
2117 return regnum
- ARM_WCGR0_REGNUM
+ SIM_ARM_IWMMXT_COP1R8_REGNUM
;
2119 if (reg
< NUM_GREGS
)
2120 return SIM_ARM_R0_REGNUM
+ reg
;
2123 if (reg
< NUM_FREGS
)
2124 return SIM_ARM_FP0_REGNUM
+ reg
;
2127 if (reg
< NUM_SREGS
)
2128 return SIM_ARM_FPS_REGNUM
+ reg
;
2131 internal_error (__FILE__
, __LINE__
, _("Bad REGNUM %d"), regnum
);
2134 /* NOTE: cagney/2001-08-20: Both convert_from_extended() and
2135 convert_to_extended() use floatformat_arm_ext_littlebyte_bigword.
2136 It is thought that this is is the floating-point register format on
2137 little-endian systems. */
2140 convert_from_extended (const struct floatformat
*fmt
, const void *ptr
,
2141 void *dbl
, int endianess
)
2145 if (endianess
== BFD_ENDIAN_BIG
)
2146 floatformat_to_doublest (&floatformat_arm_ext_big
, ptr
, &d
);
2148 floatformat_to_doublest (&floatformat_arm_ext_littlebyte_bigword
,
2150 floatformat_from_doublest (fmt
, &d
, dbl
);
2154 convert_to_extended (const struct floatformat
*fmt
, void *dbl
, const void *ptr
,
2159 floatformat_to_doublest (fmt
, ptr
, &d
);
2160 if (endianess
== BFD_ENDIAN_BIG
)
2161 floatformat_from_doublest (&floatformat_arm_ext_big
, &d
, dbl
);
2163 floatformat_from_doublest (&floatformat_arm_ext_littlebyte_bigword
,
2168 condition_true (unsigned long cond
, unsigned long status_reg
)
2170 if (cond
== INST_AL
|| cond
== INST_NV
)
2176 return ((status_reg
& FLAG_Z
) != 0);
2178 return ((status_reg
& FLAG_Z
) == 0);
2180 return ((status_reg
& FLAG_C
) != 0);
2182 return ((status_reg
& FLAG_C
) == 0);
2184 return ((status_reg
& FLAG_N
) != 0);
2186 return ((status_reg
& FLAG_N
) == 0);
2188 return ((status_reg
& FLAG_V
) != 0);
2190 return ((status_reg
& FLAG_V
) == 0);
2192 return ((status_reg
& (FLAG_C
| FLAG_Z
)) == FLAG_C
);
2194 return ((status_reg
& (FLAG_C
| FLAG_Z
)) != FLAG_C
);
2196 return (((status_reg
& FLAG_N
) == 0) == ((status_reg
& FLAG_V
) == 0));
2198 return (((status_reg
& FLAG_N
) == 0) != ((status_reg
& FLAG_V
) == 0));
2200 return (((status_reg
& FLAG_Z
) == 0)
2201 && (((status_reg
& FLAG_N
) == 0)
2202 == ((status_reg
& FLAG_V
) == 0)));
2204 return (((status_reg
& FLAG_Z
) != 0)
2205 || (((status_reg
& FLAG_N
) == 0)
2206 != ((status_reg
& FLAG_V
) == 0)));
2211 /* Support routines for single stepping. Calculate the next PC value. */
2212 #define submask(x) ((1L << ((x) + 1)) - 1)
2213 #define bit(obj,st) (((obj) >> (st)) & 1)
2214 #define bits(obj,st,fn) (((obj) >> (st)) & submask ((fn) - (st)))
2215 #define sbits(obj,st,fn) \
2216 ((long) (bits(obj,st,fn) | ((long) bit(obj,fn) * ~ submask (fn - st))))
2217 #define BranchDest(addr,instr) \
2218 ((CORE_ADDR) (((long) (addr)) + 8 + (sbits (instr, 0, 23) << 2)))
2221 static unsigned long
2222 shifted_reg_val (struct frame_info
*frame
, unsigned long inst
, int carry
,
2223 unsigned long pc_val
, unsigned long status_reg
)
2225 unsigned long res
, shift
;
2226 int rm
= bits (inst
, 0, 3);
2227 unsigned long shifttype
= bits (inst
, 5, 6);
2231 int rs
= bits (inst
, 8, 11);
2232 shift
= (rs
== 15 ? pc_val
+ 8
2233 : get_frame_register_unsigned (frame
, rs
)) & 0xFF;
2236 shift
= bits (inst
, 7, 11);
2239 ? ((pc_val
| (ARM_PC_32
? 0 : status_reg
))
2240 + (bit (inst
, 4) ? 12 : 8))
2241 : get_frame_register_unsigned (frame
, rm
));
2246 res
= shift
>= 32 ? 0 : res
<< shift
;
2250 res
= shift
>= 32 ? 0 : res
>> shift
;
2256 res
= ((res
& 0x80000000L
)
2257 ? ~((~res
) >> shift
) : res
>> shift
);
2260 case 3: /* ROR/RRX */
2263 res
= (res
>> 1) | (carry
? 0x80000000L
: 0);
2265 res
= (res
>> shift
) | (res
<< (32 - shift
));
2269 return res
& 0xffffffff;
2272 /* Return number of 1-bits in VAL. */
2275 bitcount (unsigned long val
)
2278 for (nbits
= 0; val
!= 0; nbits
++)
2279 val
&= val
- 1; /* delete rightmost 1-bit in val */
2283 /* Return the size in bytes of the complete Thumb instruction whose
2284 first halfword is INST1. */
2287 thumb_insn_size (unsigned short inst1
)
2289 if ((inst1
& 0xe000) == 0xe000 && (inst1
& 0x1800) != 0)
2296 thumb_advance_itstate (unsigned int itstate
)
2298 /* Preserve IT[7:5], the first three bits of the condition. Shift
2299 the upcoming condition flags left by one bit. */
2300 itstate
= (itstate
& 0xe0) | ((itstate
<< 1) & 0x1f);
2302 /* If we have finished the IT block, clear the state. */
2303 if ((itstate
& 0x0f) == 0)
2309 /* Find the next PC after the current instruction executes. In some
2310 cases we can not statically determine the answer (see the IT state
2311 handling in this function); in that case, a breakpoint may be
2312 inserted in addition to the returned PC, which will be used to set
2313 another breakpoint by our caller. */
2316 thumb_get_next_pc (struct frame_info
*frame
, CORE_ADDR pc
)
2318 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
2319 struct address_space
*aspace
= get_frame_address_space (frame
);
2320 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2321 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
2322 unsigned long pc_val
= ((unsigned long) pc
) + 4; /* PC after prefetch */
2323 unsigned short inst1
;
2324 CORE_ADDR nextpc
= pc
+ 2; /* default is next instruction */
2325 unsigned long offset
;
2326 ULONGEST status
, itstate
;
2328 inst1
= read_memory_unsigned_integer (pc
, 2, byte_order_for_code
);
2330 /* Thumb-2 conditional execution support. There are eight bits in
2331 the CPSR which describe conditional execution state. Once
2332 reconstructed (they're in a funny order), the low five bits
2333 describe the low bit of the condition for each instruction and
2334 how many instructions remain. The high three bits describe the
2335 base condition. One of the low four bits will be set if an IT
2336 block is active. These bits read as zero on earlier
2338 status
= get_frame_register_unsigned (frame
, ARM_PS_REGNUM
);
2339 itstate
= ((status
>> 8) & 0xfc) | ((status
>> 25) & 0x3);
2341 /* If-Then handling. On GNU/Linux, where this routine is used, we
2342 use an undefined instruction as a breakpoint. Unlike BKPT, IT
2343 can disable execution of the undefined instruction. So we might
2344 miss the breakpoint if we set it on a skipped conditional
2345 instruction. Because conditional instructions can change the
2346 flags, affecting the execution of further instructions, we may
2347 need to set two breakpoints. */
2349 if (gdbarch_tdep (gdbarch
)->thumb2_breakpoint
!= NULL
)
2351 if ((inst1
& 0xff00) == 0xbf00 && (inst1
& 0x000f) != 0)
2353 /* An IT instruction. Because this instruction does not
2354 modify the flags, we can accurately predict the next
2355 executed instruction. */
2356 itstate
= inst1
& 0x00ff;
2357 pc
+= thumb_insn_size (inst1
);
2359 while (itstate
!= 0 && ! condition_true (itstate
>> 4, status
))
2361 inst1
= read_memory_unsigned_integer (pc
, 2, byte_order_for_code
);
2362 pc
+= thumb_insn_size (inst1
);
2363 itstate
= thumb_advance_itstate (itstate
);
2368 else if (itstate
!= 0)
2370 /* We are in a conditional block. Check the condition. */
2371 if (! condition_true (itstate
>> 4, status
))
2373 /* Advance to the next executed instruction. */
2374 pc
+= thumb_insn_size (inst1
);
2375 itstate
= thumb_advance_itstate (itstate
);
2377 while (itstate
!= 0 && ! condition_true (itstate
>> 4, status
))
2379 inst1
= read_memory_unsigned_integer (pc
, 2, byte_order_for_code
);
2380 pc
+= thumb_insn_size (inst1
);
2381 itstate
= thumb_advance_itstate (itstate
);
2386 else if ((itstate
& 0x0f) == 0x08)
2388 /* This is the last instruction of the conditional
2389 block, and it is executed. We can handle it normally
2390 because the following instruction is not conditional,
2391 and we must handle it normally because it is
2392 permitted to branch. Fall through. */
2398 /* There are conditional instructions after this one.
2399 If this instruction modifies the flags, then we can
2400 not predict what the next executed instruction will
2401 be. Fortunately, this instruction is architecturally
2402 forbidden to branch; we know it will fall through.
2403 Start by skipping past it. */
2404 pc
+= thumb_insn_size (inst1
);
2405 itstate
= thumb_advance_itstate (itstate
);
2407 /* Set a breakpoint on the following instruction. */
2408 gdb_assert ((itstate
& 0x0f) != 0);
2409 insert_single_step_breakpoint (gdbarch
, aspace
, pc
);
2410 cond_negated
= (itstate
>> 4) & 1;
2412 /* Skip all following instructions with the same
2413 condition. If there is a later instruction in the IT
2414 block with the opposite condition, set the other
2415 breakpoint there. If not, then set a breakpoint on
2416 the instruction after the IT block. */
2419 inst1
= read_memory_unsigned_integer (pc
, 2, byte_order_for_code
);
2420 pc
+= thumb_insn_size (inst1
);
2421 itstate
= thumb_advance_itstate (itstate
);
2423 while (itstate
!= 0 && ((itstate
>> 4) & 1) == cond_negated
);
2429 else if (itstate
& 0x0f)
2431 /* We are in a conditional block. Check the condition. */
2432 int cond
= itstate
>> 4;
2434 if (! condition_true (cond
, status
))
2436 /* Advance to the next instruction. All the 32-bit
2437 instructions share a common prefix. */
2438 if ((inst1
& 0xe000) == 0xe000 && (inst1
& 0x1800) != 0)
2444 /* Otherwise, handle the instruction normally. */
2447 if ((inst1
& 0xff00) == 0xbd00) /* pop {rlist, pc} */
2451 /* Fetch the saved PC from the stack. It's stored above
2452 all of the other registers. */
2453 offset
= bitcount (bits (inst1
, 0, 7)) * INT_REGISTER_SIZE
;
2454 sp
= get_frame_register_unsigned (frame
, ARM_SP_REGNUM
);
2455 nextpc
= read_memory_unsigned_integer (sp
+ offset
, 4, byte_order
);
2456 nextpc
= gdbarch_addr_bits_remove (gdbarch
, nextpc
);
2458 error (_("Infinite loop detected"));
2460 else if ((inst1
& 0xf000) == 0xd000) /* conditional branch */
2462 unsigned long cond
= bits (inst1
, 8, 11);
2463 if (cond
!= 0x0f && condition_true (cond
, status
)) /* 0x0f = SWI */
2464 nextpc
= pc_val
+ (sbits (inst1
, 0, 7) << 1);
2466 else if ((inst1
& 0xf800) == 0xe000) /* unconditional branch */
2468 nextpc
= pc_val
+ (sbits (inst1
, 0, 10) << 1);
2470 else if ((inst1
& 0xe000) == 0xe000) /* 32-bit instruction */
2472 unsigned short inst2
;
2473 inst2
= read_memory_unsigned_integer (pc
+ 2, 2, byte_order_for_code
);
2475 /* Default to the next instruction. */
2478 if ((inst1
& 0xf800) == 0xf000 && (inst2
& 0x8000) == 0x8000)
2480 /* Branches and miscellaneous control instructions. */
2482 if ((inst2
& 0x1000) != 0 || (inst2
& 0xd001) == 0xc000)
2485 int j1
, j2
, imm1
, imm2
;
2487 imm1
= sbits (inst1
, 0, 10);
2488 imm2
= bits (inst2
, 0, 10);
2489 j1
= bit (inst2
, 13);
2490 j2
= bit (inst2
, 11);
2492 offset
= ((imm1
<< 12) + (imm2
<< 1));
2493 offset
^= ((!j2
) << 22) | ((!j1
) << 23);
2495 nextpc
= pc_val
+ offset
;
2496 /* For BLX make sure to clear the low bits. */
2497 if (bit (inst2
, 12) == 0)
2498 nextpc
= nextpc
& 0xfffffffc;
2500 else if (inst1
== 0xf3de && (inst2
& 0xff00) == 0x3f00)
2502 /* SUBS PC, LR, #imm8. */
2503 nextpc
= get_frame_register_unsigned (frame
, ARM_LR_REGNUM
);
2504 nextpc
-= inst2
& 0x00ff;
2506 else if ((inst2
& 0xd000) == 0xc000 && (inst1
& 0x0380) != 0x0380)
2508 /* Conditional branch. */
2509 if (condition_true (bits (inst1
, 6, 9), status
))
2511 int sign
, j1
, j2
, imm1
, imm2
;
2513 sign
= sbits (inst1
, 10, 10);
2514 imm1
= bits (inst1
, 0, 5);
2515 imm2
= bits (inst2
, 0, 10);
2516 j1
= bit (inst2
, 13);
2517 j2
= bit (inst2
, 11);
2519 offset
= (sign
<< 20) + (j2
<< 19) + (j1
<< 18);
2520 offset
+= (imm1
<< 12) + (imm2
<< 1);
2522 nextpc
= pc_val
+ offset
;
2526 else if ((inst1
& 0xfe50) == 0xe810)
2528 /* Load multiple or RFE. */
2529 int rn
, offset
, load_pc
= 1;
2531 rn
= bits (inst1
, 0, 3);
2532 if (bit (inst1
, 7) && !bit (inst1
, 8))
2535 if (!bit (inst2
, 15))
2537 offset
= bitcount (inst2
) * 4 - 4;
2539 else if (!bit (inst1
, 7) && bit (inst1
, 8))
2542 if (!bit (inst2
, 15))
2546 else if (bit (inst1
, 7) && bit (inst1
, 8))
2551 else if (!bit (inst1
, 7) && !bit (inst1
, 8))
2561 CORE_ADDR addr
= get_frame_register_unsigned (frame
, rn
);
2562 nextpc
= get_frame_memory_unsigned (frame
, addr
+ offset
, 4);
2565 else if ((inst1
& 0xffef) == 0xea4f && (inst2
& 0xfff0) == 0x0f00)
2567 /* MOV PC or MOVS PC. */
2568 nextpc
= get_frame_register_unsigned (frame
, bits (inst2
, 0, 3));
2570 else if ((inst1
& 0xff70) == 0xf850 && (inst2
& 0xf000) == 0xf000)
2574 int rn
, load_pc
= 1;
2576 rn
= bits (inst1
, 0, 3);
2577 base
= get_frame_register_unsigned (frame
, rn
);
2580 base
= (base
+ 4) & ~(CORE_ADDR
) 0x3;
2582 base
+= bits (inst2
, 0, 11);
2584 base
-= bits (inst2
, 0, 11);
2586 else if (bit (inst1
, 7))
2587 base
+= bits (inst2
, 0, 11);
2588 else if (bit (inst2
, 11))
2590 if (bit (inst2
, 10))
2593 base
+= bits (inst2
, 0, 7);
2595 base
-= bits (inst2
, 0, 7);
2598 else if ((inst2
& 0x0fc0) == 0x0000)
2600 int shift
= bits (inst2
, 4, 5), rm
= bits (inst2
, 0, 3);
2601 base
+= get_frame_register_unsigned (frame
, rm
) << shift
;
2608 nextpc
= get_frame_memory_unsigned (frame
, base
, 4);
2610 else if ((inst1
& 0xfff0) == 0xe8d0 && (inst2
& 0xfff0) == 0xf000)
2613 CORE_ADDR table
, offset
, length
;
2615 table
= get_frame_register_unsigned (frame
, bits (inst1
, 0, 3));
2616 offset
= get_frame_register_unsigned (frame
, bits (inst2
, 0, 3));
2617 length
= 2 * get_frame_memory_unsigned (frame
, table
+ offset
, 1);
2618 nextpc
= pc_val
+ length
;
2620 else if ((inst1
& 0xfff0) == 0xe8d0 && (inst2
& 0xfff0) == 0xf000)
2623 CORE_ADDR table
, offset
, length
;
2625 table
= get_frame_register_unsigned (frame
, bits (inst1
, 0, 3));
2626 offset
= 2 * get_frame_register_unsigned (frame
, bits (inst2
, 0, 3));
2627 length
= 2 * get_frame_memory_unsigned (frame
, table
+ offset
, 2);
2628 nextpc
= pc_val
+ length
;
2631 else if ((inst1
& 0xff00) == 0x4700) /* bx REG, blx REG */
2633 if (bits (inst1
, 3, 6) == 0x0f)
2636 nextpc
= get_frame_register_unsigned (frame
, bits (inst1
, 3, 6));
2638 nextpc
= gdbarch_addr_bits_remove (gdbarch
, nextpc
);
2640 error (_("Infinite loop detected"));
2642 else if ((inst1
& 0xf500) == 0xb100)
2645 int imm
= (bit (inst1
, 9) << 6) + (bits (inst1
, 3, 7) << 1);
2646 ULONGEST reg
= get_frame_register_unsigned (frame
, bits (inst1
, 0, 2));
2648 if (bit (inst1
, 11) && reg
!= 0)
2649 nextpc
= pc_val
+ imm
;
2650 else if (!bit (inst1
, 11) && reg
== 0)
2651 nextpc
= pc_val
+ imm
;
2658 arm_get_next_pc (struct frame_info
*frame
, CORE_ADDR pc
)
2660 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
2661 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2662 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
2663 unsigned long pc_val
;
2664 unsigned long this_instr
;
2665 unsigned long status
;
2668 if (arm_frame_is_thumb (frame
))
2669 return thumb_get_next_pc (frame
, pc
);
2671 pc_val
= (unsigned long) pc
;
2672 this_instr
= read_memory_unsigned_integer (pc
, 4, byte_order_for_code
);
2674 status
= get_frame_register_unsigned (frame
, ARM_PS_REGNUM
);
2675 nextpc
= (CORE_ADDR
) (pc_val
+ 4); /* Default case */
2677 if (bits (this_instr
, 28, 31) == INST_NV
)
2678 switch (bits (this_instr
, 24, 27))
2683 /* Branch with Link and change to Thumb. */
2684 nextpc
= BranchDest (pc
, this_instr
);
2685 nextpc
|= bit (this_instr
, 24) << 1;
2687 nextpc
= gdbarch_addr_bits_remove (gdbarch
, nextpc
);
2689 error (_("Infinite loop detected"));
2695 /* Coprocessor register transfer. */
2696 if (bits (this_instr
, 12, 15) == 15)
2697 error (_("Invalid update to pc in instruction"));
2700 else if (condition_true (bits (this_instr
, 28, 31), status
))
2702 switch (bits (this_instr
, 24, 27))
2705 case 0x1: /* data processing */
2709 unsigned long operand1
, operand2
, result
= 0;
2713 if (bits (this_instr
, 12, 15) != 15)
2716 if (bits (this_instr
, 22, 25) == 0
2717 && bits (this_instr
, 4, 7) == 9) /* multiply */
2718 error (_("Invalid update to pc in instruction"));
2720 /* BX <reg>, BLX <reg> */
2721 if (bits (this_instr
, 4, 27) == 0x12fff1
2722 || bits (this_instr
, 4, 27) == 0x12fff3)
2724 rn
= bits (this_instr
, 0, 3);
2725 result
= (rn
== 15) ? pc_val
+ 8
2726 : get_frame_register_unsigned (frame
, rn
);
2727 nextpc
= (CORE_ADDR
) gdbarch_addr_bits_remove
2731 error (_("Infinite loop detected"));
2736 /* Multiply into PC */
2737 c
= (status
& FLAG_C
) ? 1 : 0;
2738 rn
= bits (this_instr
, 16, 19);
2739 operand1
= (rn
== 15) ? pc_val
+ 8
2740 : get_frame_register_unsigned (frame
, rn
);
2742 if (bit (this_instr
, 25))
2744 unsigned long immval
= bits (this_instr
, 0, 7);
2745 unsigned long rotate
= 2 * bits (this_instr
, 8, 11);
2746 operand2
= ((immval
>> rotate
) | (immval
<< (32 - rotate
)))
2749 else /* operand 2 is a shifted register */
2750 operand2
= shifted_reg_val (frame
, this_instr
, c
, pc_val
, status
);
2752 switch (bits (this_instr
, 21, 24))
2755 result
= operand1
& operand2
;
2759 result
= operand1
^ operand2
;
2763 result
= operand1
- operand2
;
2767 result
= operand2
- operand1
;
2771 result
= operand1
+ operand2
;
2775 result
= operand1
+ operand2
+ c
;
2779 result
= operand1
- operand2
+ c
;
2783 result
= operand2
- operand1
+ c
;
2789 case 0xb: /* tst, teq, cmp, cmn */
2790 result
= (unsigned long) nextpc
;
2794 result
= operand1
| operand2
;
2798 /* Always step into a function. */
2803 result
= operand1
& ~operand2
;
2810 nextpc
= (CORE_ADDR
) gdbarch_addr_bits_remove
2814 error (_("Infinite loop detected"));
2819 case 0x5: /* data transfer */
2822 if (bit (this_instr
, 20))
2825 if (bits (this_instr
, 12, 15) == 15)
2831 if (bit (this_instr
, 22))
2832 error (_("Invalid update to pc in instruction"));
2834 /* byte write to PC */
2835 rn
= bits (this_instr
, 16, 19);
2836 base
= (rn
== 15) ? pc_val
+ 8
2837 : get_frame_register_unsigned (frame
, rn
);
2838 if (bit (this_instr
, 24))
2841 int c
= (status
& FLAG_C
) ? 1 : 0;
2842 unsigned long offset
=
2843 (bit (this_instr
, 25)
2844 ? shifted_reg_val (frame
, this_instr
, c
, pc_val
, status
)
2845 : bits (this_instr
, 0, 11));
2847 if (bit (this_instr
, 23))
2852 nextpc
= (CORE_ADDR
) read_memory_integer ((CORE_ADDR
) base
,
2855 nextpc
= gdbarch_addr_bits_remove (gdbarch
, nextpc
);
2858 error (_("Infinite loop detected"));
2864 case 0x9: /* block transfer */
2865 if (bit (this_instr
, 20))
2868 if (bit (this_instr
, 15))
2873 if (bit (this_instr
, 23))
2876 unsigned long reglist
= bits (this_instr
, 0, 14);
2877 offset
= bitcount (reglist
) * 4;
2878 if (bit (this_instr
, 24)) /* pre */
2881 else if (bit (this_instr
, 24))
2885 unsigned long rn_val
=
2886 get_frame_register_unsigned (frame
,
2887 bits (this_instr
, 16, 19));
2889 (CORE_ADDR
) read_memory_integer ((CORE_ADDR
) (rn_val
2893 nextpc
= gdbarch_addr_bits_remove
2896 error (_("Infinite loop detected"));
2901 case 0xb: /* branch & link */
2902 case 0xa: /* branch */
2904 nextpc
= BranchDest (pc
, this_instr
);
2906 nextpc
= gdbarch_addr_bits_remove (gdbarch
, nextpc
);
2908 error (_("Infinite loop detected"));
2914 case 0xe: /* coproc ops */
2919 fprintf_filtered (gdb_stderr
, _("Bad bit-field extraction\n"));
2927 /* single_step() is called just before we want to resume the inferior,
2928 if we want to single-step it but there is no hardware or kernel
2929 single-step support. We find the target of the coming instruction
2930 and breakpoint it. */
2933 arm_software_single_step (struct frame_info
*frame
)
2935 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
2936 struct address_space
*aspace
= get_frame_address_space (frame
);
2938 /* NOTE: This may insert the wrong breakpoint instruction when
2939 single-stepping over a mode-changing instruction, if the
2940 CPSR heuristics are used. */
2942 CORE_ADDR next_pc
= arm_get_next_pc (frame
, get_frame_pc (frame
));
2943 insert_single_step_breakpoint (gdbarch
, aspace
, next_pc
);
2948 /* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
2949 the buffer to be NEW_LEN bytes ending at ENDADDR. Return
2950 NULL if an error occurs. BUF is freed. */
2953 extend_buffer_earlier (gdb_byte
*buf
, CORE_ADDR endaddr
,
2954 int old_len
, int new_len
)
2956 gdb_byte
*new_buf
, *middle
;
2957 int bytes_to_read
= new_len
- old_len
;
2959 new_buf
= xmalloc (new_len
);
2960 memcpy (new_buf
+ bytes_to_read
, buf
, old_len
);
2962 if (target_read_memory (endaddr
- new_len
, new_buf
, bytes_to_read
) != 0)
2970 /* An IT block is at most the 2-byte IT instruction followed by
2971 four 4-byte instructions. The furthest back we must search to
2972 find an IT block that affects the current instruction is thus
2973 2 + 3 * 4 == 14 bytes. */
2974 #define MAX_IT_BLOCK_PREFIX 14
2976 /* Use a quick scan if there are more than this many bytes of
2978 #define IT_SCAN_THRESHOLD 32
2980 /* Adjust a breakpoint's address to move breakpoints out of IT blocks.
2981 A breakpoint in an IT block may not be hit, depending on the
2984 arm_adjust_breakpoint_address (struct gdbarch
*gdbarch
, CORE_ADDR bpaddr
)
2988 CORE_ADDR boundary
, func_start
;
2989 int buf_len
, buf2_len
;
2990 enum bfd_endian order
= gdbarch_byte_order_for_code (gdbarch
);
2991 int i
, any
, last_it
, last_it_count
;
2993 /* If we are using BKPT breakpoints, none of this is necessary. */
2994 if (gdbarch_tdep (gdbarch
)->thumb2_breakpoint
== NULL
)
2997 /* ARM mode does not have this problem. */
2998 if (!arm_pc_is_thumb (bpaddr
))
3001 /* We are setting a breakpoint in Thumb code that could potentially
3002 contain an IT block. The first step is to find how much Thumb
3003 code there is; we do not need to read outside of known Thumb
3005 map_type
= arm_find_mapping_symbol (bpaddr
, &boundary
);
3007 /* Thumb-2 code must have mapping symbols to have a chance. */
3010 bpaddr
= gdbarch_addr_bits_remove (gdbarch
, bpaddr
);
3012 if (find_pc_partial_function (bpaddr
, NULL
, &func_start
, NULL
)
3013 && func_start
> boundary
)
3014 boundary
= func_start
;
3016 /* Search for a candidate IT instruction. We have to do some fancy
3017 footwork to distinguish a real IT instruction from the second
3018 half of a 32-bit instruction, but there is no need for that if
3019 there's no candidate. */
3020 buf_len
= min (bpaddr
- boundary
, MAX_IT_BLOCK_PREFIX
);
3022 /* No room for an IT instruction. */
3025 buf
= xmalloc (buf_len
);
3026 if (target_read_memory (bpaddr
- buf_len
, buf
, buf_len
) != 0)
3029 for (i
= 0; i
< buf_len
; i
+= 2)
3031 unsigned short inst1
= extract_unsigned_integer (&buf
[i
], 2, order
);
3032 if ((inst1
& 0xff00) == 0xbf00 && (inst1
& 0x000f) != 0)
3044 /* OK, the code bytes before this instruction contain at least one
3045 halfword which resembles an IT instruction. We know that it's
3046 Thumb code, but there are still two possibilities. Either the
3047 halfword really is an IT instruction, or it is the second half of
3048 a 32-bit Thumb instruction. The only way we can tell is to
3049 scan forwards from a known instruction boundary. */
3050 if (bpaddr
- boundary
> IT_SCAN_THRESHOLD
)
3054 /* There's a lot of code before this instruction. Start with an
3055 optimistic search; it's easy to recognize halfwords that can
3056 not be the start of a 32-bit instruction, and use that to
3057 lock on to the instruction boundaries. */
3058 buf
= extend_buffer_earlier (buf
, bpaddr
, buf_len
, IT_SCAN_THRESHOLD
);
3061 buf_len
= IT_SCAN_THRESHOLD
;
3064 for (i
= 0; i
< buf_len
- sizeof (buf
) && ! definite
; i
+= 2)
3066 unsigned short inst1
= extract_unsigned_integer (&buf
[i
], 2, order
);
3067 if (thumb_insn_size (inst1
) == 2)
3074 /* At this point, if DEFINITE, BUF[I] is the first place we
3075 are sure that we know the instruction boundaries, and it is far
3076 enough from BPADDR that we could not miss an IT instruction
3077 affecting BPADDR. If ! DEFINITE, give up - start from a
3081 buf
= extend_buffer_earlier (buf
, bpaddr
, buf_len
, bpaddr
- boundary
);
3084 buf_len
= bpaddr
- boundary
;
3090 buf
= extend_buffer_earlier (buf
, bpaddr
, buf_len
, bpaddr
- boundary
);
3093 buf_len
= bpaddr
- boundary
;
3097 /* Scan forwards. Find the last IT instruction before BPADDR. */
3102 unsigned short inst1
= extract_unsigned_integer (&buf
[i
], 2, order
);
3104 if ((inst1
& 0xff00) == 0xbf00 && (inst1
& 0x000f) != 0)
3109 else if (inst1
& 0x0002)
3111 else if (inst1
& 0x0004)
3116 i
+= thumb_insn_size (inst1
);
3122 /* There wasn't really an IT instruction after all. */
3125 if (last_it_count
< 1)
3126 /* It was too far away. */
3129 /* This really is a trouble spot. Move the breakpoint to the IT
3131 return bpaddr
- buf_len
+ last_it
;
3134 /* ARM displaced stepping support.
3136 Generally ARM displaced stepping works as follows:
3138 1. When an instruction is to be single-stepped, it is first decoded by
3139 arm_process_displaced_insn (called from arm_displaced_step_copy_insn).
3140 Depending on the type of instruction, it is then copied to a scratch
3141 location, possibly in a modified form. The copy_* set of functions
3142 performs such modification, as necessary. A breakpoint is placed after
3143 the modified instruction in the scratch space to return control to GDB.
3144 Note in particular that instructions which modify the PC will no longer
3145 do so after modification.
3147 2. The instruction is single-stepped, by setting the PC to the scratch
3148 location address, and resuming. Control returns to GDB when the
3151 3. A cleanup function (cleanup_*) is called corresponding to the copy_*
3152 function used for the current instruction. This function's job is to
3153 put the CPU/memory state back to what it would have been if the
3154 instruction had been executed unmodified in its original location. */
3156 /* NOP instruction (mov r0, r0). */
3157 #define ARM_NOP 0xe1a00000
3159 /* Helper for register reads for displaced stepping. In particular, this
3160 returns the PC as it would be seen by the instruction at its original
3164 displaced_read_reg (struct regcache
*regs
, CORE_ADDR from
, int regno
)
3170 if (debug_displaced
)
3171 fprintf_unfiltered (gdb_stdlog
, "displaced: read pc value %.8lx\n",
3172 (unsigned long) from
+ 8);
3173 return (ULONGEST
) from
+ 8; /* Pipeline offset. */
3177 regcache_cooked_read_unsigned (regs
, regno
, &ret
);
3178 if (debug_displaced
)
3179 fprintf_unfiltered (gdb_stdlog
, "displaced: read r%d value %.8lx\n",
3180 regno
, (unsigned long) ret
);
3186 displaced_in_arm_mode (struct regcache
*regs
)
3190 regcache_cooked_read_unsigned (regs
, ARM_PS_REGNUM
, &ps
);
3192 return (ps
& CPSR_T
) == 0;
3195 /* Write to the PC as from a branch instruction. */
3198 branch_write_pc (struct regcache
*regs
, ULONGEST val
)
3200 if (displaced_in_arm_mode (regs
))
3201 /* Note: If bits 0/1 are set, this branch would be unpredictable for
3202 architecture versions < 6. */
3203 regcache_cooked_write_unsigned (regs
, ARM_PC_REGNUM
, val
& ~(ULONGEST
) 0x3);
3205 regcache_cooked_write_unsigned (regs
, ARM_PC_REGNUM
, val
& ~(ULONGEST
) 0x1);
3208 /* Write to the PC as from a branch-exchange instruction. */
3211 bx_write_pc (struct regcache
*regs
, ULONGEST val
)
3215 regcache_cooked_read_unsigned (regs
, ARM_PS_REGNUM
, &ps
);
3219 regcache_cooked_write_unsigned (regs
, ARM_PS_REGNUM
, ps
| CPSR_T
);
3220 regcache_cooked_write_unsigned (regs
, ARM_PC_REGNUM
, val
& 0xfffffffe);
3222 else if ((val
& 2) == 0)
3224 regcache_cooked_write_unsigned (regs
, ARM_PS_REGNUM
,
3225 ps
& ~(ULONGEST
) CPSR_T
);
3226 regcache_cooked_write_unsigned (regs
, ARM_PC_REGNUM
, val
);
3230 /* Unpredictable behaviour. Try to do something sensible (switch to ARM
3231 mode, align dest to 4 bytes). */
3232 warning (_("Single-stepping BX to non-word-aligned ARM instruction."));
3233 regcache_cooked_write_unsigned (regs
, ARM_PS_REGNUM
,
3234 ps
& ~(ULONGEST
) CPSR_T
);
3235 regcache_cooked_write_unsigned (regs
, ARM_PC_REGNUM
, val
& 0xfffffffc);
3239 /* Write to the PC as if from a load instruction. */
3242 load_write_pc (struct regcache
*regs
, ULONGEST val
)
3244 if (DISPLACED_STEPPING_ARCH_VERSION
>= 5)
3245 bx_write_pc (regs
, val
);
3247 branch_write_pc (regs
, val
);
3250 /* Write to the PC as if from an ALU instruction. */
3253 alu_write_pc (struct regcache
*regs
, ULONGEST val
)
3255 if (DISPLACED_STEPPING_ARCH_VERSION
>= 7 && displaced_in_arm_mode (regs
))
3256 bx_write_pc (regs
, val
);
3258 branch_write_pc (regs
, val
);
3261 /* Helper for writing to registers for displaced stepping. Writing to the PC
3262 has a varying effects depending on the instruction which does the write:
3263 this is controlled by the WRITE_PC argument. */
3266 displaced_write_reg (struct regcache
*regs
, struct displaced_step_closure
*dsc
,
3267 int regno
, ULONGEST val
, enum pc_write_style write_pc
)
3271 if (debug_displaced
)
3272 fprintf_unfiltered (gdb_stdlog
, "displaced: writing pc %.8lx\n",
3273 (unsigned long) val
);
3276 case BRANCH_WRITE_PC
:
3277 branch_write_pc (regs
, val
);
3281 bx_write_pc (regs
, val
);
3285 load_write_pc (regs
, val
);
3289 alu_write_pc (regs
, val
);
3292 case CANNOT_WRITE_PC
:
3293 warning (_("Instruction wrote to PC in an unexpected way when "
3294 "single-stepping"));
3298 internal_error (__FILE__
, __LINE__
,
3299 _("Invalid argument to displaced_write_reg"));
3302 dsc
->wrote_to_pc
= 1;
3306 if (debug_displaced
)
3307 fprintf_unfiltered (gdb_stdlog
, "displaced: writing r%d value %.8lx\n",
3308 regno
, (unsigned long) val
);
3309 regcache_cooked_write_unsigned (regs
, regno
, val
);
3313 /* This function is used to concisely determine if an instruction INSN
3314 references PC. Register fields of interest in INSN should have the
3315 corresponding fields of BITMASK set to 0b1111. The function returns return 1
3316 if any of these fields in INSN reference the PC (also 0b1111, r15), else it
3320 insn_references_pc (uint32_t insn
, uint32_t bitmask
)
3322 uint32_t lowbit
= 1;
3324 while (bitmask
!= 0)
3328 for (; lowbit
&& (bitmask
& lowbit
) == 0; lowbit
<<= 1)
3334 mask
= lowbit
* 0xf;
3336 if ((insn
& mask
) == mask
)
3345 /* The simplest copy function. Many instructions have the same effect no
3346 matter what address they are executed at: in those cases, use this. */
3349 copy_unmodified (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, uint32_t insn
,
3350 const char *iname
, struct displaced_step_closure
*dsc
)
3352 if (debug_displaced
)
3353 fprintf_unfiltered (gdb_stdlog
, "displaced: copying insn %.8lx, "
3354 "opcode/class '%s' unmodified\n", (unsigned long) insn
,
3357 dsc
->modinsn
[0] = insn
;
3362 /* Preload instructions with immediate offset. */
3365 cleanup_preload (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
,
3366 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3368 displaced_write_reg (regs
, dsc
, 0, dsc
->tmp
[0], CANNOT_WRITE_PC
);
3369 if (!dsc
->u
.preload
.immed
)
3370 displaced_write_reg (regs
, dsc
, 1, dsc
->tmp
[1], CANNOT_WRITE_PC
);
3374 copy_preload (struct gdbarch
*gdbarch
, uint32_t insn
, struct regcache
*regs
,
3375 struct displaced_step_closure
*dsc
)
3377 unsigned int rn
= bits (insn
, 16, 19);
3379 CORE_ADDR from
= dsc
->insn_addr
;
3381 if (!insn_references_pc (insn
, 0x000f0000ul
))
3382 return copy_unmodified (gdbarch
, insn
, "preload", dsc
);
3384 if (debug_displaced
)
3385 fprintf_unfiltered (gdb_stdlog
, "displaced: copying preload insn %.8lx\n",
3386 (unsigned long) insn
);
3388 /* Preload instructions:
3390 {pli/pld} [rn, #+/-imm]
3392 {pli/pld} [r0, #+/-imm]. */
3394 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3395 rn_val
= displaced_read_reg (regs
, from
, rn
);
3396 displaced_write_reg (regs
, dsc
, 0, rn_val
, CANNOT_WRITE_PC
);
3398 dsc
->u
.preload
.immed
= 1;
3400 dsc
->modinsn
[0] = insn
& 0xfff0ffff;
3402 dsc
->cleanup
= &cleanup_preload
;
3407 /* Preload instructions with register offset. */
3410 copy_preload_reg (struct gdbarch
*gdbarch
, uint32_t insn
, struct regcache
*regs
,
3411 struct displaced_step_closure
*dsc
)
3413 unsigned int rn
= bits (insn
, 16, 19);
3414 unsigned int rm
= bits (insn
, 0, 3);
3415 ULONGEST rn_val
, rm_val
;
3416 CORE_ADDR from
= dsc
->insn_addr
;
3418 if (!insn_references_pc (insn
, 0x000f000ful
))
3419 return copy_unmodified (gdbarch
, insn
, "preload reg", dsc
);
3421 if (debug_displaced
)
3422 fprintf_unfiltered (gdb_stdlog
, "displaced: copying preload insn %.8lx\n",
3423 (unsigned long) insn
);
3425 /* Preload register-offset instructions:
3427 {pli/pld} [rn, rm {, shift}]
3429 {pli/pld} [r0, r1 {, shift}]. */
3431 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3432 dsc
->tmp
[1] = displaced_read_reg (regs
, from
, 1);
3433 rn_val
= displaced_read_reg (regs
, from
, rn
);
3434 rm_val
= displaced_read_reg (regs
, from
, rm
);
3435 displaced_write_reg (regs
, dsc
, 0, rn_val
, CANNOT_WRITE_PC
);
3436 displaced_write_reg (regs
, dsc
, 1, rm_val
, CANNOT_WRITE_PC
);
3438 dsc
->u
.preload
.immed
= 0;
3440 dsc
->modinsn
[0] = (insn
& 0xfff0fff0) | 0x1;
3442 dsc
->cleanup
= &cleanup_preload
;
3447 /* Copy/cleanup coprocessor load and store instructions. */
3450 cleanup_copro_load_store (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
,
3451 struct regcache
*regs
,
3452 struct displaced_step_closure
*dsc
)
3454 ULONGEST rn_val
= displaced_read_reg (regs
, dsc
->insn_addr
, 0);
3456 displaced_write_reg (regs
, dsc
, 0, dsc
->tmp
[0], CANNOT_WRITE_PC
);
3458 if (dsc
->u
.ldst
.writeback
)
3459 displaced_write_reg (regs
, dsc
, dsc
->u
.ldst
.rn
, rn_val
, LOAD_WRITE_PC
);
3463 copy_copro_load_store (struct gdbarch
*gdbarch
, uint32_t insn
,
3464 struct regcache
*regs
,
3465 struct displaced_step_closure
*dsc
)
3467 unsigned int rn
= bits (insn
, 16, 19);
3469 CORE_ADDR from
= dsc
->insn_addr
;
3471 if (!insn_references_pc (insn
, 0x000f0000ul
))
3472 return copy_unmodified (gdbarch
, insn
, "copro load/store", dsc
);
3474 if (debug_displaced
)
3475 fprintf_unfiltered (gdb_stdlog
, "displaced: copying coprocessor "
3476 "load/store insn %.8lx\n", (unsigned long) insn
);
3478 /* Coprocessor load/store instructions:
3480 {stc/stc2} [<Rn>, #+/-imm] (and other immediate addressing modes)
3482 {stc/stc2} [r0, #+/-imm].
3484 ldc/ldc2 are handled identically. */
3486 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3487 rn_val
= displaced_read_reg (regs
, from
, rn
);
3488 displaced_write_reg (regs
, dsc
, 0, rn_val
, CANNOT_WRITE_PC
);
3490 dsc
->u
.ldst
.writeback
= bit (insn
, 25);
3491 dsc
->u
.ldst
.rn
= rn
;
3493 dsc
->modinsn
[0] = insn
& 0xfff0ffff;
3495 dsc
->cleanup
= &cleanup_copro_load_store
;
3500 /* Clean up branch instructions (actually perform the branch, by setting
3504 cleanup_branch (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, struct regcache
*regs
,
3505 struct displaced_step_closure
*dsc
)
3507 ULONGEST from
= dsc
->insn_addr
;
3508 uint32_t status
= displaced_read_reg (regs
, from
, ARM_PS_REGNUM
);
3509 int branch_taken
= condition_true (dsc
->u
.branch
.cond
, status
);
3510 enum pc_write_style write_pc
= dsc
->u
.branch
.exchange
3511 ? BX_WRITE_PC
: BRANCH_WRITE_PC
;
3516 if (dsc
->u
.branch
.link
)
3518 ULONGEST pc
= displaced_read_reg (regs
, from
, 15);
3519 displaced_write_reg (regs
, dsc
, 14, pc
- 4, CANNOT_WRITE_PC
);
3522 displaced_write_reg (regs
, dsc
, 15, dsc
->u
.branch
.dest
, write_pc
);
3525 /* Copy B/BL/BLX instructions with immediate destinations. */
3528 copy_b_bl_blx (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, uint32_t insn
,
3529 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3531 unsigned int cond
= bits (insn
, 28, 31);
3532 int exchange
= (cond
== 0xf);
3533 int link
= exchange
|| bit (insn
, 24);
3534 CORE_ADDR from
= dsc
->insn_addr
;
3537 if (debug_displaced
)
3538 fprintf_unfiltered (gdb_stdlog
, "displaced: copying %s immediate insn "
3539 "%.8lx\n", (exchange
) ? "blx" : (link
) ? "bl" : "b",
3540 (unsigned long) insn
);
3542 /* Implement "BL<cond> <label>" as:
3544 Preparation: cond <- instruction condition
3545 Insn: mov r0, r0 (nop)
3546 Cleanup: if (condition true) { r14 <- pc; pc <- label }.
3548 B<cond> similar, but don't set r14 in cleanup. */
3551 /* For BLX, set bit 0 of the destination. The cleanup_branch function will
3552 then arrange the switch into Thumb mode. */
3553 offset
= (bits (insn
, 0, 23) << 2) | (bit (insn
, 24) << 1) | 1;
3555 offset
= bits (insn
, 0, 23) << 2;
3557 if (bit (offset
, 25))
3558 offset
= offset
| ~0x3ffffff;
3560 dsc
->u
.branch
.cond
= cond
;
3561 dsc
->u
.branch
.link
= link
;
3562 dsc
->u
.branch
.exchange
= exchange
;
3563 dsc
->u
.branch
.dest
= from
+ 8 + offset
;
3565 dsc
->modinsn
[0] = ARM_NOP
;
3567 dsc
->cleanup
= &cleanup_branch
;
3572 /* Copy BX/BLX with register-specified destinations. */
3575 copy_bx_blx_reg (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, uint32_t insn
,
3576 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3578 unsigned int cond
= bits (insn
, 28, 31);
3581 int link
= bit (insn
, 5);
3582 unsigned int rm
= bits (insn
, 0, 3);
3583 CORE_ADDR from
= dsc
->insn_addr
;
3585 if (debug_displaced
)
3586 fprintf_unfiltered (gdb_stdlog
, "displaced: copying %s register insn "
3587 "%.8lx\n", (link
) ? "blx" : "bx", (unsigned long) insn
);
3589 /* Implement {BX,BLX}<cond> <reg>" as:
3591 Preparation: cond <- instruction condition
3592 Insn: mov r0, r0 (nop)
3593 Cleanup: if (condition true) { r14 <- pc; pc <- dest; }.
3595 Don't set r14 in cleanup for BX. */
3597 dsc
->u
.branch
.dest
= displaced_read_reg (regs
, from
, rm
);
3599 dsc
->u
.branch
.cond
= cond
;
3600 dsc
->u
.branch
.link
= link
;
3601 dsc
->u
.branch
.exchange
= 1;
3603 dsc
->modinsn
[0] = ARM_NOP
;
3605 dsc
->cleanup
= &cleanup_branch
;
3610 /* Copy/cleanup arithmetic/logic instruction with immediate RHS. */
3613 cleanup_alu_imm (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
,
3614 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3616 ULONGEST rd_val
= displaced_read_reg (regs
, dsc
->insn_addr
, 0);
3617 displaced_write_reg (regs
, dsc
, 0, dsc
->tmp
[0], CANNOT_WRITE_PC
);
3618 displaced_write_reg (regs
, dsc
, 1, dsc
->tmp
[1], CANNOT_WRITE_PC
);
3619 displaced_write_reg (regs
, dsc
, dsc
->rd
, rd_val
, ALU_WRITE_PC
);
3623 copy_alu_imm (struct gdbarch
*gdbarch
, uint32_t insn
, struct regcache
*regs
,
3624 struct displaced_step_closure
*dsc
)
3626 unsigned int rn
= bits (insn
, 16, 19);
3627 unsigned int rd
= bits (insn
, 12, 15);
3628 unsigned int op
= bits (insn
, 21, 24);
3629 int is_mov
= (op
== 0xd);
3630 ULONGEST rd_val
, rn_val
;
3631 CORE_ADDR from
= dsc
->insn_addr
;
3633 if (!insn_references_pc (insn
, 0x000ff000ul
))
3634 return copy_unmodified (gdbarch
, insn
, "ALU immediate", dsc
);
3636 if (debug_displaced
)
3637 fprintf_unfiltered (gdb_stdlog
, "displaced: copying immediate %s insn "
3638 "%.8lx\n", is_mov
? "move" : "ALU",
3639 (unsigned long) insn
);
3641 /* Instruction is of form:
3643 <op><cond> rd, [rn,] #imm
3647 Preparation: tmp1, tmp2 <- r0, r1;
3649 Insn: <op><cond> r0, r1, #imm
3650 Cleanup: rd <- r0; r0 <- tmp1; r1 <- tmp2
3653 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3654 dsc
->tmp
[1] = displaced_read_reg (regs
, from
, 1);
3655 rn_val
= displaced_read_reg (regs
, from
, rn
);
3656 rd_val
= displaced_read_reg (regs
, from
, rd
);
3657 displaced_write_reg (regs
, dsc
, 0, rd_val
, CANNOT_WRITE_PC
);
3658 displaced_write_reg (regs
, dsc
, 1, rn_val
, CANNOT_WRITE_PC
);
3662 dsc
->modinsn
[0] = insn
& 0xfff00fff;
3664 dsc
->modinsn
[0] = (insn
& 0xfff00fff) | 0x10000;
3666 dsc
->cleanup
= &cleanup_alu_imm
;
3671 /* Copy/cleanup arithmetic/logic insns with register RHS. */
3674 cleanup_alu_reg (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
,
3675 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3680 rd_val
= displaced_read_reg (regs
, dsc
->insn_addr
, 0);
3682 for (i
= 0; i
< 3; i
++)
3683 displaced_write_reg (regs
, dsc
, i
, dsc
->tmp
[i
], CANNOT_WRITE_PC
);
3685 displaced_write_reg (regs
, dsc
, dsc
->rd
, rd_val
, ALU_WRITE_PC
);
3689 copy_alu_reg (struct gdbarch
*gdbarch
, uint32_t insn
, struct regcache
*regs
,
3690 struct displaced_step_closure
*dsc
)
3692 unsigned int rn
= bits (insn
, 16, 19);
3693 unsigned int rm
= bits (insn
, 0, 3);
3694 unsigned int rd
= bits (insn
, 12, 15);
3695 unsigned int op
= bits (insn
, 21, 24);
3696 int is_mov
= (op
== 0xd);
3697 ULONGEST rd_val
, rn_val
, rm_val
;
3698 CORE_ADDR from
= dsc
->insn_addr
;
3700 if (!insn_references_pc (insn
, 0x000ff00ful
))
3701 return copy_unmodified (gdbarch
, insn
, "ALU reg", dsc
);
3703 if (debug_displaced
)
3704 fprintf_unfiltered (gdb_stdlog
, "displaced: copying reg %s insn %.8lx\n",
3705 is_mov
? "move" : "ALU", (unsigned long) insn
);
3707 /* Instruction is of form:
3709 <op><cond> rd, [rn,] rm [, <shift>]
3713 Preparation: tmp1, tmp2, tmp3 <- r0, r1, r2;
3714 r0, r1, r2 <- rd, rn, rm
3715 Insn: <op><cond> r0, r1, r2 [, <shift>]
3716 Cleanup: rd <- r0; r0, r1, r2 <- tmp1, tmp2, tmp3
3719 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3720 dsc
->tmp
[1] = displaced_read_reg (regs
, from
, 1);
3721 dsc
->tmp
[2] = displaced_read_reg (regs
, from
, 2);
3722 rd_val
= displaced_read_reg (regs
, from
, rd
);
3723 rn_val
= displaced_read_reg (regs
, from
, rn
);
3724 rm_val
= displaced_read_reg (regs
, from
, rm
);
3725 displaced_write_reg (regs
, dsc
, 0, rd_val
, CANNOT_WRITE_PC
);
3726 displaced_write_reg (regs
, dsc
, 1, rn_val
, CANNOT_WRITE_PC
);
3727 displaced_write_reg (regs
, dsc
, 2, rm_val
, CANNOT_WRITE_PC
);
3731 dsc
->modinsn
[0] = (insn
& 0xfff00ff0) | 0x2;
3733 dsc
->modinsn
[0] = (insn
& 0xfff00ff0) | 0x10002;
3735 dsc
->cleanup
= &cleanup_alu_reg
;
3740 /* Cleanup/copy arithmetic/logic insns with shifted register RHS. */
3743 cleanup_alu_shifted_reg (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
,
3744 struct regcache
*regs
,
3745 struct displaced_step_closure
*dsc
)
3747 ULONGEST rd_val
= displaced_read_reg (regs
, dsc
->insn_addr
, 0);
3750 for (i
= 0; i
< 4; i
++)
3751 displaced_write_reg (regs
, dsc
, i
, dsc
->tmp
[i
], CANNOT_WRITE_PC
);
3753 displaced_write_reg (regs
, dsc
, dsc
->rd
, rd_val
, ALU_WRITE_PC
);
3757 copy_alu_shifted_reg (struct gdbarch
*gdbarch
, uint32_t insn
,
3758 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3760 unsigned int rn
= bits (insn
, 16, 19);
3761 unsigned int rm
= bits (insn
, 0, 3);
3762 unsigned int rd
= bits (insn
, 12, 15);
3763 unsigned int rs
= bits (insn
, 8, 11);
3764 unsigned int op
= bits (insn
, 21, 24);
3765 int is_mov
= (op
== 0xd), i
;
3766 ULONGEST rd_val
, rn_val
, rm_val
, rs_val
;
3767 CORE_ADDR from
= dsc
->insn_addr
;
3769 if (!insn_references_pc (insn
, 0x000fff0ful
))
3770 return copy_unmodified (gdbarch
, insn
, "ALU shifted reg", dsc
);
3772 if (debug_displaced
)
3773 fprintf_unfiltered (gdb_stdlog
, "displaced: copying shifted reg %s insn "
3774 "%.8lx\n", is_mov
? "move" : "ALU",
3775 (unsigned long) insn
);
3777 /* Instruction is of form:
3779 <op><cond> rd, [rn,] rm, <shift> rs
3783 Preparation: tmp1, tmp2, tmp3, tmp4 <- r0, r1, r2, r3
3784 r0, r1, r2, r3 <- rd, rn, rm, rs
3785 Insn: <op><cond> r0, r1, r2, <shift> r3
3787 r0, r1, r2, r3 <- tmp1, tmp2, tmp3, tmp4
3791 for (i
= 0; i
< 4; i
++)
3792 dsc
->tmp
[i
] = displaced_read_reg (regs
, from
, i
);
3794 rd_val
= displaced_read_reg (regs
, from
, rd
);
3795 rn_val
= displaced_read_reg (regs
, from
, rn
);
3796 rm_val
= displaced_read_reg (regs
, from
, rm
);
3797 rs_val
= displaced_read_reg (regs
, from
, rs
);
3798 displaced_write_reg (regs
, dsc
, 0, rd_val
, CANNOT_WRITE_PC
);
3799 displaced_write_reg (regs
, dsc
, 1, rn_val
, CANNOT_WRITE_PC
);
3800 displaced_write_reg (regs
, dsc
, 2, rm_val
, CANNOT_WRITE_PC
);
3801 displaced_write_reg (regs
, dsc
, 3, rs_val
, CANNOT_WRITE_PC
);
3805 dsc
->modinsn
[0] = (insn
& 0xfff000f0) | 0x302;
3807 dsc
->modinsn
[0] = (insn
& 0xfff000f0) | 0x10302;
3809 dsc
->cleanup
= &cleanup_alu_shifted_reg
;
3814 /* Clean up load instructions. */
3817 cleanup_load (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, struct regcache
*regs
,
3818 struct displaced_step_closure
*dsc
)
3820 ULONGEST rt_val
, rt_val2
= 0, rn_val
;
3821 CORE_ADDR from
= dsc
->insn_addr
;
3823 rt_val
= displaced_read_reg (regs
, from
, 0);
3824 if (dsc
->u
.ldst
.xfersize
== 8)
3825 rt_val2
= displaced_read_reg (regs
, from
, 1);
3826 rn_val
= displaced_read_reg (regs
, from
, 2);
3828 displaced_write_reg (regs
, dsc
, 0, dsc
->tmp
[0], CANNOT_WRITE_PC
);
3829 if (dsc
->u
.ldst
.xfersize
> 4)
3830 displaced_write_reg (regs
, dsc
, 1, dsc
->tmp
[1], CANNOT_WRITE_PC
);
3831 displaced_write_reg (regs
, dsc
, 2, dsc
->tmp
[2], CANNOT_WRITE_PC
);
3832 if (!dsc
->u
.ldst
.immed
)
3833 displaced_write_reg (regs
, dsc
, 3, dsc
->tmp
[3], CANNOT_WRITE_PC
);
3835 /* Handle register writeback. */
3836 if (dsc
->u
.ldst
.writeback
)
3837 displaced_write_reg (regs
, dsc
, dsc
->u
.ldst
.rn
, rn_val
, CANNOT_WRITE_PC
);
3838 /* Put result in right place. */
3839 displaced_write_reg (regs
, dsc
, dsc
->rd
, rt_val
, LOAD_WRITE_PC
);
3840 if (dsc
->u
.ldst
.xfersize
== 8)
3841 displaced_write_reg (regs
, dsc
, dsc
->rd
+ 1, rt_val2
, LOAD_WRITE_PC
);
3844 /* Clean up store instructions. */
3847 cleanup_store (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, struct regcache
*regs
,
3848 struct displaced_step_closure
*dsc
)
3850 CORE_ADDR from
= dsc
->insn_addr
;
3851 ULONGEST rn_val
= displaced_read_reg (regs
, from
, 2);
3853 displaced_write_reg (regs
, dsc
, 0, dsc
->tmp
[0], CANNOT_WRITE_PC
);
3854 if (dsc
->u
.ldst
.xfersize
> 4)
3855 displaced_write_reg (regs
, dsc
, 1, dsc
->tmp
[1], CANNOT_WRITE_PC
);
3856 displaced_write_reg (regs
, dsc
, 2, dsc
->tmp
[2], CANNOT_WRITE_PC
);
3857 if (!dsc
->u
.ldst
.immed
)
3858 displaced_write_reg (regs
, dsc
, 3, dsc
->tmp
[3], CANNOT_WRITE_PC
);
3859 if (!dsc
->u
.ldst
.restore_r4
)
3860 displaced_write_reg (regs
, dsc
, 4, dsc
->tmp
[4], CANNOT_WRITE_PC
);
3863 if (dsc
->u
.ldst
.writeback
)
3864 displaced_write_reg (regs
, dsc
, dsc
->u
.ldst
.rn
, rn_val
, CANNOT_WRITE_PC
);
3867 /* Copy "extra" load/store instructions. These are halfword/doubleword
3868 transfers, which have a different encoding to byte/word transfers. */
3871 copy_extra_ld_st (struct gdbarch
*gdbarch
, uint32_t insn
, int unpriveleged
,
3872 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
3874 unsigned int op1
= bits (insn
, 20, 24);
3875 unsigned int op2
= bits (insn
, 5, 6);
3876 unsigned int rt
= bits (insn
, 12, 15);
3877 unsigned int rn
= bits (insn
, 16, 19);
3878 unsigned int rm
= bits (insn
, 0, 3);
3879 char load
[12] = {0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1};
3880 char bytesize
[12] = {2, 2, 2, 2, 8, 1, 8, 1, 8, 2, 8, 2};
3881 int immed
= (op1
& 0x4) != 0;
3883 ULONGEST rt_val
, rt_val2
= 0, rn_val
, rm_val
= 0;
3884 CORE_ADDR from
= dsc
->insn_addr
;
3886 if (!insn_references_pc (insn
, 0x000ff00ful
))
3887 return copy_unmodified (gdbarch
, insn
, "extra load/store", dsc
);
3889 if (debug_displaced
)
3890 fprintf_unfiltered (gdb_stdlog
, "displaced: copying %sextra load/store "
3891 "insn %.8lx\n", unpriveleged
? "unpriveleged " : "",
3892 (unsigned long) insn
);
3894 opcode
= ((op2
<< 2) | (op1
& 0x1) | ((op1
& 0x4) >> 1)) - 4;
3897 internal_error (__FILE__
, __LINE__
,
3898 _("copy_extra_ld_st: instruction decode error"));
3900 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3901 dsc
->tmp
[1] = displaced_read_reg (regs
, from
, 1);
3902 dsc
->tmp
[2] = displaced_read_reg (regs
, from
, 2);
3904 dsc
->tmp
[3] = displaced_read_reg (regs
, from
, 3);
3906 rt_val
= displaced_read_reg (regs
, from
, rt
);
3907 if (bytesize
[opcode
] == 8)
3908 rt_val2
= displaced_read_reg (regs
, from
, rt
+ 1);
3909 rn_val
= displaced_read_reg (regs
, from
, rn
);
3911 rm_val
= displaced_read_reg (regs
, from
, rm
);
3913 displaced_write_reg (regs
, dsc
, 0, rt_val
, CANNOT_WRITE_PC
);
3914 if (bytesize
[opcode
] == 8)
3915 displaced_write_reg (regs
, dsc
, 1, rt_val2
, CANNOT_WRITE_PC
);
3916 displaced_write_reg (regs
, dsc
, 2, rn_val
, CANNOT_WRITE_PC
);
3918 displaced_write_reg (regs
, dsc
, 3, rm_val
, CANNOT_WRITE_PC
);
3921 dsc
->u
.ldst
.xfersize
= bytesize
[opcode
];
3922 dsc
->u
.ldst
.rn
= rn
;
3923 dsc
->u
.ldst
.immed
= immed
;
3924 dsc
->u
.ldst
.writeback
= bit (insn
, 24) == 0 || bit (insn
, 21) != 0;
3925 dsc
->u
.ldst
.restore_r4
= 0;
3928 /* {ldr,str}<width><cond> rt, [rt2,] [rn, #imm]
3930 {ldr,str}<width><cond> r0, [r1,] [r2, #imm]. */
3931 dsc
->modinsn
[0] = (insn
& 0xfff00fff) | 0x20000;
3933 /* {ldr,str}<width><cond> rt, [rt2,] [rn, +/-rm]
3935 {ldr,str}<width><cond> r0, [r1,] [r2, +/-r3]. */
3936 dsc
->modinsn
[0] = (insn
& 0xfff00ff0) | 0x20003;
3938 dsc
->cleanup
= load
[opcode
] ? &cleanup_load
: &cleanup_store
;
3943 /* Copy byte/word loads and stores. */
3946 copy_ldr_str_ldrb_strb (struct gdbarch
*gdbarch
, uint32_t insn
,
3947 struct regcache
*regs
,
3948 struct displaced_step_closure
*dsc
, int load
, int byte
,
3951 int immed
= !bit (insn
, 25);
3952 unsigned int rt
= bits (insn
, 12, 15);
3953 unsigned int rn
= bits (insn
, 16, 19);
3954 unsigned int rm
= bits (insn
, 0, 3); /* Only valid if !immed. */
3955 ULONGEST rt_val
, rn_val
, rm_val
= 0;
3956 CORE_ADDR from
= dsc
->insn_addr
;
3958 if (!insn_references_pc (insn
, 0x000ff00ful
))
3959 return copy_unmodified (gdbarch
, insn
, "load/store", dsc
);
3961 if (debug_displaced
)
3962 fprintf_unfiltered (gdb_stdlog
, "displaced: copying %s%s insn %.8lx\n",
3963 load
? (byte
? "ldrb" : "ldr")
3964 : (byte
? "strb" : "str"), usermode
? "t" : "",
3965 (unsigned long) insn
);
3967 dsc
->tmp
[0] = displaced_read_reg (regs
, from
, 0);
3968 dsc
->tmp
[2] = displaced_read_reg (regs
, from
, 2);
3970 dsc
->tmp
[3] = displaced_read_reg (regs
, from
, 3);
3972 dsc
->tmp
[4] = displaced_read_reg (regs
, from
, 4);
3974 rt_val
= displaced_read_reg (regs
, from
, rt
);
3975 rn_val
= displaced_read_reg (regs
, from
, rn
);
3977 rm_val
= displaced_read_reg (regs
, from
, rm
);
3979 displaced_write_reg (regs
, dsc
, 0, rt_val
, CANNOT_WRITE_PC
);
3980 displaced_write_reg (regs
, dsc
, 2, rn_val
, CANNOT_WRITE_PC
);
3982 displaced_write_reg (regs
, dsc
, 3, rm_val
, CANNOT_WRITE_PC
);
3985 dsc
->u
.ldst
.xfersize
= byte
? 1 : 4;
3986 dsc
->u
.ldst
.rn
= rn
;
3987 dsc
->u
.ldst
.immed
= immed
;
3988 dsc
->u
.ldst
.writeback
= bit (insn
, 24) == 0 || bit (insn
, 21) != 0;
3990 /* To write PC we can do:
3992 scratch+0: str pc, temp (*temp = scratch + 8 + offset)
3993 scratch+4: ldr r4, temp
3994 scratch+8: sub r4, r4, pc (r4 = scratch + 8 + offset - scratch - 8 - 8)
3995 scratch+12: add r4, r4, #8 (r4 = offset)
3996 scratch+16: add r0, r0, r4
3997 scratch+20: str r0, [r2, #imm] (or str r0, [r2, r3])
4000 Otherwise we don't know what value to write for PC, since the offset is
4001 architecture-dependent (sometimes PC+8, sometimes PC+12). */
4003 if (load
|| rt
!= 15)
4005 dsc
->u
.ldst
.restore_r4
= 0;
4008 /* {ldr,str}[b]<cond> rt, [rn, #imm], etc.
4010 {ldr,str}[b]<cond> r0, [r2, #imm]. */
4011 dsc
->modinsn
[0] = (insn
& 0xfff00fff) | 0x20000;
4013 /* {ldr,str}[b]<cond> rt, [rn, rm], etc.
4015 {ldr,str}[b]<cond> r0, [r2, r3]. */
4016 dsc
->modinsn
[0] = (insn
& 0xfff00ff0) | 0x20003;
4020 /* We need to use r4 as scratch. Make sure it's restored afterwards. */
4021 dsc
->u
.ldst
.restore_r4
= 1;
4023 dsc
->modinsn
[0] = 0xe58ff014; /* str pc, [pc, #20]. */
4024 dsc
->modinsn
[1] = 0xe59f4010; /* ldr r4, [pc, #16]. */
4025 dsc
->modinsn
[2] = 0xe044400f; /* sub r4, r4, pc. */
4026 dsc
->modinsn
[3] = 0xe2844008; /* add r4, r4, #8. */
4027 dsc
->modinsn
[4] = 0xe0800004; /* add r0, r0, r4. */
4031 dsc
->modinsn
[5] = (insn
& 0xfff00fff) | 0x20000;
4033 dsc
->modinsn
[5] = (insn
& 0xfff00ff0) | 0x20003;
4035 dsc
->modinsn
[6] = 0x0; /* breakpoint location. */
4036 dsc
->modinsn
[7] = 0x0; /* scratch space. */
4041 dsc
->cleanup
= load
? &cleanup_load
: &cleanup_store
;
4046 /* Cleanup LDM instructions with fully-populated register list. This is an
4047 unfortunate corner case: it's impossible to implement correctly by modifying
4048 the instruction. The issue is as follows: we have an instruction,
4052 which we must rewrite to avoid loading PC. A possible solution would be to
4053 do the load in two halves, something like (with suitable cleanup
4057 ldm[id][ab] r8!, {r0-r7}
4059 ldm[id][ab] r8, {r7-r14}
4062 but at present there's no suitable place for <temp>, since the scratch space
4063 is overwritten before the cleanup routine is called. For now, we simply
4064 emulate the instruction. */
4067 cleanup_block_load_all (struct gdbarch
*gdbarch
, struct regcache
*regs
,
4068 struct displaced_step_closure
*dsc
)
4070 ULONGEST from
= dsc
->insn_addr
;
4071 int inc
= dsc
->u
.block
.increment
;
4072 int bump_before
= dsc
->u
.block
.before
? (inc
? 4 : -4) : 0;
4073 int bump_after
= dsc
->u
.block
.before
? 0 : (inc
? 4 : -4);
4074 uint32_t regmask
= dsc
->u
.block
.regmask
;
4075 int regno
= inc
? 0 : 15;
4076 CORE_ADDR xfer_addr
= dsc
->u
.block
.xfer_addr
;
4077 int exception_return
= dsc
->u
.block
.load
&& dsc
->u
.block
.user
4078 && (regmask
& 0x8000) != 0;
4079 uint32_t status
= displaced_read_reg (regs
, from
, ARM_PS_REGNUM
);
4080 int do_transfer
= condition_true (dsc
->u
.block
.cond
, status
);
4081 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
4086 /* If the instruction is ldm rN, {...pc}^, I don't think there's anything
4087 sensible we can do here. Complain loudly. */
4088 if (exception_return
)
4089 error (_("Cannot single-step exception return"));
4091 /* We don't handle any stores here for now. */
4092 gdb_assert (dsc
->u
.block
.load
!= 0);
4094 if (debug_displaced
)
4095 fprintf_unfiltered (gdb_stdlog
, "displaced: emulating block transfer: "
4096 "%s %s %s\n", dsc
->u
.block
.load
? "ldm" : "stm",
4097 dsc
->u
.block
.increment
? "inc" : "dec",
4098 dsc
->u
.block
.before
? "before" : "after");
4105 while (regno
<= 15 && (regmask
& (1 << regno
)) == 0)
4108 while (regno
>= 0 && (regmask
& (1 << regno
)) == 0)
4111 xfer_addr
+= bump_before
;
4113 memword
= read_memory_unsigned_integer (xfer_addr
, 4, byte_order
);
4114 displaced_write_reg (regs
, dsc
, regno
, memword
, LOAD_WRITE_PC
);
4116 xfer_addr
+= bump_after
;
4118 regmask
&= ~(1 << regno
);
4121 if (dsc
->u
.block
.writeback
)
4122 displaced_write_reg (regs
, dsc
, dsc
->u
.block
.rn
, xfer_addr
,
4126 /* Clean up an STM which included the PC in the register list. */
4129 cleanup_block_store_pc (struct gdbarch
*gdbarch
, struct regcache
*regs
,
4130 struct displaced_step_closure
*dsc
)
4132 ULONGEST from
= dsc
->insn_addr
;
4133 uint32_t status
= displaced_read_reg (regs
, from
, ARM_PS_REGNUM
);
4134 int store_executed
= condition_true (dsc
->u
.block
.cond
, status
);
4135 CORE_ADDR pc_stored_at
, transferred_regs
= bitcount (dsc
->u
.block
.regmask
);
4136 CORE_ADDR stm_insn_addr
;
4139 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
4141 /* If condition code fails, there's nothing else to do. */
4142 if (!store_executed
)
4145 if (dsc
->u
.block
.increment
)
4147 pc_stored_at
= dsc
->u
.block
.xfer_addr
+ 4 * transferred_regs
;
4149 if (dsc
->u
.block
.before
)
4154 pc_stored_at
= dsc
->u
.block
.xfer_addr
;
4156 if (dsc
->u
.block
.before
)
4160 pc_val
= read_memory_unsigned_integer (pc_stored_at
, 4, byte_order
);
4161 stm_insn_addr
= dsc
->scratch_base
;
4162 offset
= pc_val
- stm_insn_addr
;
4164 if (debug_displaced
)
4165 fprintf_unfiltered (gdb_stdlog
, "displaced: detected PC offset %.8lx for "
4166 "STM instruction\n", offset
);
4168 /* Rewrite the stored PC to the proper value for the non-displaced original
4170 write_memory_unsigned_integer (pc_stored_at
, 4, byte_order
,
4171 dsc
->insn_addr
+ offset
);
4174 /* Clean up an LDM which includes the PC in the register list. We clumped all
4175 the registers in the transferred list into a contiguous range r0...rX (to
4176 avoid loading PC directly and losing control of the debugged program), so we
4177 must undo that here. */
4180 cleanup_block_load_pc (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
,
4181 struct regcache
*regs
,
4182 struct displaced_step_closure
*dsc
)
4184 ULONGEST from
= dsc
->insn_addr
;
4185 uint32_t status
= displaced_read_reg (regs
, from
, ARM_PS_REGNUM
);
4186 int load_executed
= condition_true (dsc
->u
.block
.cond
, status
), i
;
4187 unsigned int mask
= dsc
->u
.block
.regmask
, write_reg
= 15;
4188 unsigned int regs_loaded
= bitcount (mask
);
4189 unsigned int num_to_shuffle
= regs_loaded
, clobbered
;
4191 /* The method employed here will fail if the register list is fully populated
4192 (we need to avoid loading PC directly). */
4193 gdb_assert (num_to_shuffle
< 16);
4198 clobbered
= (1 << num_to_shuffle
) - 1;
4200 while (num_to_shuffle
> 0)
4202 if ((mask
& (1 << write_reg
)) != 0)
4204 unsigned int read_reg
= num_to_shuffle
- 1;
4206 if (read_reg
!= write_reg
)
4208 ULONGEST rval
= displaced_read_reg (regs
, from
, read_reg
);
4209 displaced_write_reg (regs
, dsc
, write_reg
, rval
, LOAD_WRITE_PC
);
4210 if (debug_displaced
)
4211 fprintf_unfiltered (gdb_stdlog
, _("displaced: LDM: move "
4212 "loaded register r%d to r%d\n"), read_reg
,
4215 else if (debug_displaced
)
4216 fprintf_unfiltered (gdb_stdlog
, _("displaced: LDM: register "
4217 "r%d already in the right place\n"),
4220 clobbered
&= ~(1 << write_reg
);
4228 /* Restore any registers we scribbled over. */
4229 for (write_reg
= 0; clobbered
!= 0; write_reg
++)
4231 if ((clobbered
& (1 << write_reg
)) != 0)
4233 displaced_write_reg (regs
, dsc
, write_reg
, dsc
->tmp
[write_reg
],
4235 if (debug_displaced
)
4236 fprintf_unfiltered (gdb_stdlog
, _("displaced: LDM: restored "
4237 "clobbered register r%d\n"), write_reg
);
4238 clobbered
&= ~(1 << write_reg
);
4242 /* Perform register writeback manually. */
4243 if (dsc
->u
.block
.writeback
)
4245 ULONGEST new_rn_val
= dsc
->u
.block
.xfer_addr
;
4247 if (dsc
->u
.block
.increment
)
4248 new_rn_val
+= regs_loaded
* 4;
4250 new_rn_val
-= regs_loaded
* 4;
4252 displaced_write_reg (regs
, dsc
, dsc
->u
.block
.rn
, new_rn_val
,
4257 /* Handle ldm/stm, apart from some tricky cases which are unlikely to occur
4258 in user-level code (in particular exception return, ldm rn, {...pc}^). */
4261 copy_block_xfer (struct gdbarch
*gdbarch
, uint32_t insn
, struct regcache
*regs
,
4262 struct displaced_step_closure
*dsc
)
4264 int load
= bit (insn
, 20);
4265 int user
= bit (insn
, 22);
4266 int increment
= bit (insn
, 23);
4267 int before
= bit (insn
, 24);
4268 int writeback
= bit (insn
, 21);
4269 int rn
= bits (insn
, 16, 19);
4270 CORE_ADDR from
= dsc
->insn_addr
;
4272 /* Block transfers which don't mention PC can be run directly out-of-line. */
4273 if (rn
!= 15 && (insn
& 0x8000) == 0)
4274 return copy_unmodified (gdbarch
, insn
, "ldm/stm", dsc
);
4278 warning (_("displaced: Unpredictable LDM or STM with base register r15"));
4279 return copy_unmodified (gdbarch
, insn
, "unpredictable ldm/stm", dsc
);
4282 if (debug_displaced
)
4283 fprintf_unfiltered (gdb_stdlog
, "displaced: copying block transfer insn "
4284 "%.8lx\n", (unsigned long) insn
);
4286 dsc
->u
.block
.xfer_addr
= displaced_read_reg (regs
, from
, rn
);
4287 dsc
->u
.block
.rn
= rn
;
4289 dsc
->u
.block
.load
= load
;
4290 dsc
->u
.block
.user
= user
;
4291 dsc
->u
.block
.increment
= increment
;
4292 dsc
->u
.block
.before
= before
;
4293 dsc
->u
.block
.writeback
= writeback
;
4294 dsc
->u
.block
.cond
= bits (insn
, 28, 31);
4296 dsc
->u
.block
.regmask
= insn
& 0xffff;
4300 if ((insn
& 0xffff) == 0xffff)
4302 /* LDM with a fully-populated register list. This case is
4303 particularly tricky. Implement for now by fully emulating the
4304 instruction (which might not behave perfectly in all cases, but
4305 these instructions should be rare enough for that not to matter
4307 dsc
->modinsn
[0] = ARM_NOP
;
4309 dsc
->cleanup
= &cleanup_block_load_all
;
4313 /* LDM of a list of registers which includes PC. Implement by
4314 rewriting the list of registers to be transferred into a
4315 contiguous chunk r0...rX before doing the transfer, then shuffling
4316 registers into the correct places in the cleanup routine. */
4317 unsigned int regmask
= insn
& 0xffff;
4318 unsigned int num_in_list
= bitcount (regmask
), new_regmask
, bit
= 1;
4319 unsigned int to
= 0, from
= 0, i
, new_rn
;
4321 for (i
= 0; i
< num_in_list
; i
++)
4322 dsc
->tmp
[i
] = displaced_read_reg (regs
, from
, i
);
4324 /* Writeback makes things complicated. We need to avoid clobbering
4325 the base register with one of the registers in our modified
4326 register list, but just using a different register can't work in
4329 ldm r14!, {r0-r13,pc}
4331 which would need to be rewritten as:
4335 but that can't work, because there's no free register for N.
4337 Solve this by turning off the writeback bit, and emulating
4338 writeback manually in the cleanup routine. */
4343 new_regmask
= (1 << num_in_list
) - 1;
4345 if (debug_displaced
)
4346 fprintf_unfiltered (gdb_stdlog
, _("displaced: LDM r%d%s, "
4347 "{..., pc}: original reg list %.4x, modified "
4348 "list %.4x\n"), rn
, writeback
? "!" : "",
4349 (int) insn
& 0xffff, new_regmask
);
4351 dsc
->modinsn
[0] = (insn
& ~0xffff) | (new_regmask
& 0xffff);
4353 dsc
->cleanup
= &cleanup_block_load_pc
;
4358 /* STM of a list of registers which includes PC. Run the instruction
4359 as-is, but out of line: this will store the wrong value for the PC,
4360 so we must manually fix up the memory in the cleanup routine.
4361 Doing things this way has the advantage that we can auto-detect
4362 the offset of the PC write (which is architecture-dependent) in
4363 the cleanup routine. */
4364 dsc
->modinsn
[0] = insn
;
4366 dsc
->cleanup
= &cleanup_block_store_pc
;
4372 /* Cleanup/copy SVC (SWI) instructions. These two functions are overridden
4373 for Linux, where some SVC instructions must be treated specially. */
4376 cleanup_svc (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, struct regcache
*regs
,
4377 struct displaced_step_closure
*dsc
)
4379 CORE_ADDR from
= dsc
->insn_addr
;
4380 CORE_ADDR resume_addr
= from
+ 4;
4382 if (debug_displaced
)
4383 fprintf_unfiltered (gdb_stdlog
, "displaced: cleanup for svc, resume at "
4384 "%.8lx\n", (unsigned long) resume_addr
);
4386 displaced_write_reg (regs
, dsc
, ARM_PC_REGNUM
, resume_addr
, BRANCH_WRITE_PC
);
4390 copy_svc (struct gdbarch
*gdbarch
, uint32_t insn
, CORE_ADDR to
,
4391 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
4393 CORE_ADDR from
= dsc
->insn_addr
;
4395 /* Allow OS-specific code to override SVC handling. */
4396 if (dsc
->u
.svc
.copy_svc_os
)
4397 return dsc
->u
.svc
.copy_svc_os (gdbarch
, insn
, to
, regs
, dsc
);
4399 if (debug_displaced
)
4400 fprintf_unfiltered (gdb_stdlog
, "displaced: copying svc insn %.8lx\n",
4401 (unsigned long) insn
);
4403 /* Preparation: none.
4404 Insn: unmodified svc.
4405 Cleanup: pc <- insn_addr + 4. */
4407 dsc
->modinsn
[0] = insn
;
4409 dsc
->cleanup
= &cleanup_svc
;
4410 /* Pretend we wrote to the PC, so cleanup doesn't set PC to the next
4412 dsc
->wrote_to_pc
= 1;
4417 /* Copy undefined instructions. */
4420 copy_undef (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, uint32_t insn
,
4421 struct displaced_step_closure
*dsc
)
4423 if (debug_displaced
)
4424 fprintf_unfiltered (gdb_stdlog
, "displaced: copying undefined insn %.8lx\n",
4425 (unsigned long) insn
);
4427 dsc
->modinsn
[0] = insn
;
4432 /* Copy unpredictable instructions. */
4435 copy_unpred (struct gdbarch
*gdbarch ATTRIBUTE_UNUSED
, uint32_t insn
,
4436 struct displaced_step_closure
*dsc
)
4438 if (debug_displaced
)
4439 fprintf_unfiltered (gdb_stdlog
, "displaced: copying unpredictable insn "
4440 "%.8lx\n", (unsigned long) insn
);
4442 dsc
->modinsn
[0] = insn
;
4447 /* The decode_* functions are instruction decoding helpers. They mostly follow
4448 the presentation in the ARM ARM. */
4451 decode_misc_memhint_neon (struct gdbarch
*gdbarch
, uint32_t insn
,
4452 struct regcache
*regs
,
4453 struct displaced_step_closure
*dsc
)
4455 unsigned int op1
= bits (insn
, 20, 26), op2
= bits (insn
, 4, 7);
4456 unsigned int rn
= bits (insn
, 16, 19);
4458 if (op1
== 0x10 && (op2
& 0x2) == 0x0 && (rn
& 0xe) == 0x0)
4459 return copy_unmodified (gdbarch
, insn
, "cps", dsc
);
4460 else if (op1
== 0x10 && op2
== 0x0 && (rn
& 0xe) == 0x1)
4461 return copy_unmodified (gdbarch
, insn
, "setend", dsc
);
4462 else if ((op1
& 0x60) == 0x20)
4463 return copy_unmodified (gdbarch
, insn
, "neon dataproc", dsc
);
4464 else if ((op1
& 0x71) == 0x40)
4465 return copy_unmodified (gdbarch
, insn
, "neon elt/struct load/store", dsc
);
4466 else if ((op1
& 0x77) == 0x41)
4467 return copy_unmodified (gdbarch
, insn
, "unallocated mem hint", dsc
);
4468 else if ((op1
& 0x77) == 0x45)
4469 return copy_preload (gdbarch
, insn
, regs
, dsc
); /* pli. */
4470 else if ((op1
& 0x77) == 0x51)
4473 return copy_preload (gdbarch
, insn
, regs
, dsc
); /* pld/pldw. */
4475 return copy_unpred (gdbarch
, insn
, dsc
);
4477 else if ((op1
& 0x77) == 0x55)
4478 return copy_preload (gdbarch
, insn
, regs
, dsc
); /* pld/pldw. */
4479 else if (op1
== 0x57)
4482 case 0x1: return copy_unmodified (gdbarch
, insn
, "clrex", dsc
);
4483 case 0x4: return copy_unmodified (gdbarch
, insn
, "dsb", dsc
);
4484 case 0x5: return copy_unmodified (gdbarch
, insn
, "dmb", dsc
);
4485 case 0x6: return copy_unmodified (gdbarch
, insn
, "isb", dsc
);
4486 default: return copy_unpred (gdbarch
, insn
, dsc
);
4488 else if ((op1
& 0x63) == 0x43)
4489 return copy_unpred (gdbarch
, insn
, dsc
);
4490 else if ((op2
& 0x1) == 0x0)
4491 switch (op1
& ~0x80)
4494 return copy_unmodified (gdbarch
, insn
, "unallocated mem hint", dsc
);
4496 return copy_preload_reg (gdbarch
, insn
, regs
, dsc
); /* pli reg. */
4497 case 0x71: case 0x75:
4499 return copy_preload_reg (gdbarch
, insn
, regs
, dsc
);
4500 case 0x63: case 0x67: case 0x73: case 0x77:
4501 return copy_unpred (gdbarch
, insn
, dsc
);
4503 return copy_undef (gdbarch
, insn
, dsc
);
4506 return copy_undef (gdbarch
, insn
, dsc
); /* Probably unreachable. */
4510 decode_unconditional (struct gdbarch
*gdbarch
, uint32_t insn
,
4511 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
4513 if (bit (insn
, 27) == 0)
4514 return decode_misc_memhint_neon (gdbarch
, insn
, regs
, dsc
);
4515 /* Switch on bits: 0bxxxxx321xxx0xxxxxxxxxxxxxxxxxxxx. */
4516 else switch (((insn
& 0x7000000) >> 23) | ((insn
& 0x100000) >> 20))
4519 return copy_unmodified (gdbarch
, insn
, "srs", dsc
);
4522 return copy_unmodified (gdbarch
, insn
, "rfe", dsc
);
4524 case 0x4: case 0x5: case 0x6: case 0x7:
4525 return copy_b_bl_blx (gdbarch
, insn
, regs
, dsc
);
4528 switch ((insn
& 0xe00000) >> 21)
4530 case 0x1: case 0x3: case 0x4: case 0x5: case 0x6: case 0x7:
4532 return copy_copro_load_store (gdbarch
, insn
, regs
, dsc
);
4535 return copy_unmodified (gdbarch
, insn
, "mcrr/mcrr2", dsc
);
4538 return copy_undef (gdbarch
, insn
, dsc
);
4543 int rn_f
= (bits (insn
, 16, 19) == 0xf);
4544 switch ((insn
& 0xe00000) >> 21)
4547 /* ldc/ldc2 imm (undefined for rn == pc). */
4548 return rn_f
? copy_undef (gdbarch
, insn
, dsc
)
4549 : copy_copro_load_store (gdbarch
, insn
, regs
, dsc
);
4552 return copy_unmodified (gdbarch
, insn
, "mrrc/mrrc2", dsc
);
4554 case 0x4: case 0x5: case 0x6: case 0x7:
4555 /* ldc/ldc2 lit (undefined for rn != pc). */
4556 return rn_f
? copy_copro_load_store (gdbarch
, insn
, regs
, dsc
)
4557 : copy_undef (gdbarch
, insn
, dsc
);
4560 return copy_undef (gdbarch
, insn
, dsc
);
4565 return copy_unmodified (gdbarch
, insn
, "stc/stc2", dsc
);
4568 if (bits (insn
, 16, 19) == 0xf)
4570 return copy_copro_load_store (gdbarch
, insn
, regs
, dsc
);
4572 return copy_undef (gdbarch
, insn
, dsc
);
4576 return copy_unmodified (gdbarch
, insn
, "mcr/mcr2", dsc
);
4578 return copy_unmodified (gdbarch
, insn
, "cdp/cdp2", dsc
);
4582 return copy_unmodified (gdbarch
, insn
, "mrc/mrc2", dsc
);
4584 return copy_unmodified (gdbarch
, insn
, "cdp/cdp2", dsc
);
4587 return copy_undef (gdbarch
, insn
, dsc
);
4591 /* Decode miscellaneous instructions in dp/misc encoding space. */
4594 decode_miscellaneous (struct gdbarch
*gdbarch
, uint32_t insn
,
4595 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
4597 unsigned int op2
= bits (insn
, 4, 6);
4598 unsigned int op
= bits (insn
, 21, 22);
4599 unsigned int op1
= bits (insn
, 16, 19);
4604 return copy_unmodified (gdbarch
, insn
, "mrs/msr", dsc
);
4607 if (op
== 0x1) /* bx. */
4608 return copy_bx_blx_reg (gdbarch
, insn
, regs
, dsc
);
4610 return copy_unmodified (gdbarch
, insn
, "clz", dsc
);
4612 return copy_undef (gdbarch
, insn
, dsc
);
4616 /* Not really supported. */
4617 return copy_unmodified (gdbarch
, insn
, "bxj", dsc
);
4619 return copy_undef (gdbarch
, insn
, dsc
);
4623 return copy_bx_blx_reg (gdbarch
, insn
, regs
, dsc
); /* blx register. */
4625 return copy_undef (gdbarch
, insn
, dsc
);
4628 return copy_unmodified (gdbarch
, insn
, "saturating add/sub", dsc
);
4632 return copy_unmodified (gdbarch
, insn
, "bkpt", dsc
);
4634 /* Not really supported. */
4635 return copy_unmodified (gdbarch
, insn
, "smc", dsc
);
4638 return copy_undef (gdbarch
, insn
, dsc
);
4643 decode_dp_misc (struct gdbarch
*gdbarch
, uint32_t insn
, struct regcache
*regs
,
4644 struct displaced_step_closure
*dsc
)
4647 switch (bits (insn
, 20, 24))
4650 return copy_unmodified (gdbarch
, insn
, "movw", dsc
);
4653 return copy_unmodified (gdbarch
, insn
, "movt", dsc
);
4655 case 0x12: case 0x16:
4656 return copy_unmodified (gdbarch
, insn
, "msr imm", dsc
);
4659 return copy_alu_imm (gdbarch
, insn
, regs
, dsc
);
4663 uint32_t op1
= bits (insn
, 20, 24), op2
= bits (insn
, 4, 7);
4665 if ((op1
& 0x19) != 0x10 && (op2
& 0x1) == 0x0)
4666 return copy_alu_reg (gdbarch
, insn
, regs
, dsc
);
4667 else if ((op1
& 0x19) != 0x10 && (op2
& 0x9) == 0x1)
4668 return copy_alu_shifted_reg (gdbarch
, insn
, regs
, dsc
);
4669 else if ((op1
& 0x19) == 0x10 && (op2
& 0x8) == 0x0)
4670 return decode_miscellaneous (gdbarch
, insn
, regs
, dsc
);
4671 else if ((op1
& 0x19) == 0x10 && (op2
& 0x9) == 0x8)
4672 return copy_unmodified (gdbarch
, insn
, "halfword mul/mla", dsc
);
4673 else if ((op1
& 0x10) == 0x00 && op2
== 0x9)
4674 return copy_unmodified (gdbarch
, insn
, "mul/mla", dsc
);
4675 else if ((op1
& 0x10) == 0x10 && op2
== 0x9)
4676 return copy_unmodified (gdbarch
, insn
, "synch", dsc
);
4677 else if (op2
== 0xb || (op2
& 0xd) == 0xd)
4678 /* 2nd arg means "unpriveleged". */
4679 return copy_extra_ld_st (gdbarch
, insn
, (op1
& 0x12) == 0x02, regs
,
4683 /* Should be unreachable. */
4688 decode_ld_st_word_ubyte (struct gdbarch
*gdbarch
, uint32_t insn
,
4689 struct regcache
*regs
,
4690 struct displaced_step_closure
*dsc
)
4692 int a
= bit (insn
, 25), b
= bit (insn
, 4);
4693 uint32_t op1
= bits (insn
, 20, 24);
4694 int rn_f
= bits (insn
, 16, 19) == 0xf;
4696 if ((!a
&& (op1
& 0x05) == 0x00 && (op1
& 0x17) != 0x02)
4697 || (a
&& (op1
& 0x05) == 0x00 && (op1
& 0x17) != 0x02 && !b
))
4698 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 0, 0, 0);
4699 else if ((!a
&& (op1
& 0x17) == 0x02)
4700 || (a
&& (op1
& 0x17) == 0x02 && !b
))
4701 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 0, 0, 1);
4702 else if ((!a
&& (op1
& 0x05) == 0x01 && (op1
& 0x17) != 0x03)
4703 || (a
&& (op1
& 0x05) == 0x01 && (op1
& 0x17) != 0x03 && !b
))
4704 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 1, 0, 0);
4705 else if ((!a
&& (op1
& 0x17) == 0x03)
4706 || (a
&& (op1
& 0x17) == 0x03 && !b
))
4707 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 1, 0, 1);
4708 else if ((!a
&& (op1
& 0x05) == 0x04 && (op1
& 0x17) != 0x06)
4709 || (a
&& (op1
& 0x05) == 0x04 && (op1
& 0x17) != 0x06 && !b
))
4710 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 0, 1, 0);
4711 else if ((!a
&& (op1
& 0x17) == 0x06)
4712 || (a
&& (op1
& 0x17) == 0x06 && !b
))
4713 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 0, 1, 1);
4714 else if ((!a
&& (op1
& 0x05) == 0x05 && (op1
& 0x17) != 0x07)
4715 || (a
&& (op1
& 0x05) == 0x05 && (op1
& 0x17) != 0x07 && !b
))
4716 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 1, 1, 0);
4717 else if ((!a
&& (op1
& 0x17) == 0x07)
4718 || (a
&& (op1
& 0x17) == 0x07 && !b
))
4719 return copy_ldr_str_ldrb_strb (gdbarch
, insn
, regs
, dsc
, 1, 1, 1);
4721 /* Should be unreachable. */
4726 decode_media (struct gdbarch
*gdbarch
, uint32_t insn
,
4727 struct displaced_step_closure
*dsc
)
4729 switch (bits (insn
, 20, 24))
4731 case 0x00: case 0x01: case 0x02: case 0x03:
4732 return copy_unmodified (gdbarch
, insn
, "parallel add/sub signed", dsc
);
4734 case 0x04: case 0x05: case 0x06: case 0x07:
4735 return copy_unmodified (gdbarch
, insn
, "parallel add/sub unsigned", dsc
);
4737 case 0x08: case 0x09: case 0x0a: case 0x0b:
4738 case 0x0c: case 0x0d: case 0x0e: case 0x0f:
4739 return copy_unmodified (gdbarch
, insn
,
4740 "decode/pack/unpack/saturate/reverse", dsc
);
4743 if (bits (insn
, 5, 7) == 0) /* op2. */
4745 if (bits (insn
, 12, 15) == 0xf)
4746 return copy_unmodified (gdbarch
, insn
, "usad8", dsc
);
4748 return copy_unmodified (gdbarch
, insn
, "usada8", dsc
);
4751 return copy_undef (gdbarch
, insn
, dsc
);
4753 case 0x1a: case 0x1b:
4754 if (bits (insn
, 5, 6) == 0x2) /* op2[1:0]. */
4755 return copy_unmodified (gdbarch
, insn
, "sbfx", dsc
);
4757 return copy_undef (gdbarch
, insn
, dsc
);
4759 case 0x1c: case 0x1d:
4760 if (bits (insn
, 5, 6) == 0x0) /* op2[1:0]. */
4762 if (bits (insn
, 0, 3) == 0xf)
4763 return copy_unmodified (gdbarch
, insn
, "bfc", dsc
);
4765 return copy_unmodified (gdbarch
, insn
, "bfi", dsc
);
4768 return copy_undef (gdbarch
, insn
, dsc
);
4770 case 0x1e: case 0x1f:
4771 if (bits (insn
, 5, 6) == 0x2) /* op2[1:0]. */
4772 return copy_unmodified (gdbarch
, insn
, "ubfx", dsc
);
4774 return copy_undef (gdbarch
, insn
, dsc
);
4777 /* Should be unreachable. */
4782 decode_b_bl_ldmstm (struct gdbarch
*gdbarch
, int32_t insn
,
4783 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
4786 return copy_b_bl_blx (gdbarch
, insn
, regs
, dsc
);
4788 return copy_block_xfer (gdbarch
, insn
, regs
, dsc
);
4792 decode_ext_reg_ld_st (struct gdbarch
*gdbarch
, uint32_t insn
,
4793 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
4795 unsigned int opcode
= bits (insn
, 20, 24);
4799 case 0x04: case 0x05: /* VFP/Neon mrrc/mcrr. */
4800 return copy_unmodified (gdbarch
, insn
, "vfp/neon mrrc/mcrr", dsc
);
4802 case 0x08: case 0x0a: case 0x0c: case 0x0e:
4803 case 0x12: case 0x16:
4804 return copy_unmodified (gdbarch
, insn
, "vfp/neon vstm/vpush", dsc
);
4806 case 0x09: case 0x0b: case 0x0d: case 0x0f:
4807 case 0x13: case 0x17:
4808 return copy_unmodified (gdbarch
, insn
, "vfp/neon vldm/vpop", dsc
);
4810 case 0x10: case 0x14: case 0x18: case 0x1c: /* vstr. */
4811 case 0x11: case 0x15: case 0x19: case 0x1d: /* vldr. */
4812 /* Note: no writeback for these instructions. Bit 25 will always be
4813 zero though (via caller), so the following works OK. */
4814 return copy_copro_load_store (gdbarch
, insn
, regs
, dsc
);
4817 /* Should be unreachable. */
4822 decode_svc_copro (struct gdbarch
*gdbarch
, uint32_t insn
, CORE_ADDR to
,
4823 struct regcache
*regs
, struct displaced_step_closure
*dsc
)
4825 unsigned int op1
= bits (insn
, 20, 25);
4826 int op
= bit (insn
, 4);
4827 unsigned int coproc
= bits (insn
, 8, 11);
4828 unsigned int rn
= bits (insn
, 16, 19);
4830 if ((op1
& 0x20) == 0x00 && (op1
& 0x3a) != 0x00 && (coproc
& 0xe) == 0xa)
4831 return decode_ext_reg_ld_st (gdbarch
, insn
, regs
, dsc
);
4832 else if ((op1
& 0x21) == 0x00 && (op1
& 0x3a) != 0x00
4833 && (coproc
& 0xe) != 0xa)
4835 return copy_copro_load_store (gdbarch
, insn
, regs
, dsc
);
4836 else if ((op1
& 0x21) == 0x01 && (op1
& 0x3a) != 0x00
4837 && (coproc
& 0xe) != 0xa)
4838 /* ldc/ldc2 imm/lit. */
4839 return copy_copro_load_store (gdbarch
, insn
, regs
, dsc
);
4840 else if ((op1
& 0x3e) == 0x00)
4841 return copy_undef (gdbarch
, insn
, dsc
);
4842 else if ((op1
& 0x3e) == 0x04 && (coproc
& 0xe) == 0xa)
4843 return copy_unmodified (gdbarch
, insn
, "neon 64bit xfer", dsc
);
4844 else if (op1
== 0x04 && (coproc
& 0xe) != 0xa)
4845 return copy_unmodified (gdbarch
, insn
, "mcrr/mcrr2", dsc
);
4846 else if (op1
== 0x05 && (coproc
& 0xe) != 0xa)
4847 return copy_unmodified (gdbarch
, insn
, "mrrc/mrrc2", dsc
);
4848 else if ((op1
& 0x30) == 0x20 && !op
)
4850 if ((coproc
& 0xe) == 0xa)
4851 return copy_unmodified (gdbarch
, insn
, "vfp dataproc", dsc
);
4853 return copy_unmodified (gdbarch
, insn
, "cdp/cdp2", dsc
);
4855 else if ((op1
& 0x30) == 0x20 && op
)
4856 return copy_unmodified (gdbarch
, insn
, "neon 8/16/32 bit xfer", dsc
);
4857 else if ((op1
& 0x31) == 0x20 && op
&& (coproc
& 0xe) != 0xa)
4858 return copy_unmodified (gdbarch
, insn
, "mcr/mcr2", dsc
);
4859 else if ((op1
& 0x31) == 0x21 && op
&& (coproc
& 0xe) != 0xa)
4860 return copy_unmodified (gdbarch
, insn
, "mrc/mrc2", dsc
);
4861 else if ((op1
& 0x30) == 0x30)
4862 return copy_svc (gdbarch
, insn
, to
, regs
, dsc
);
4864 return copy_undef (gdbarch
, insn
, dsc
); /* Possibly unreachable. */
4868 arm_process_displaced_insn (struct gdbarch
*gdbarch
, uint32_t insn
,
4869 CORE_ADDR from
, CORE_ADDR to
, struct regcache
*regs
,
4870 struct displaced_step_closure
*dsc
)
4874 if (!displaced_in_arm_mode (regs
))
4875 error (_("Displaced stepping is only supported in ARM mode"));
4877 /* Most displaced instructions use a 1-instruction scratch space, so set this
4878 here and override below if/when necessary. */
4880 dsc
->insn_addr
= from
;
4881 dsc
->scratch_base
= to
;
4882 dsc
->cleanup
= NULL
;
4883 dsc
->wrote_to_pc
= 0;
4885 if ((insn
& 0xf0000000) == 0xf0000000)
4886 err
= decode_unconditional (gdbarch
, insn
, regs
, dsc
);
4887 else switch (((insn
& 0x10) >> 4) | ((insn
& 0xe000000) >> 24))
4889 case 0x0: case 0x1: case 0x2: case 0x3:
4890 err
= decode_dp_misc (gdbarch
, insn
, regs
, dsc
);
4893 case 0x4: case 0x5: case 0x6:
4894 err
= decode_ld_st_word_ubyte (gdbarch
, insn
, regs
, dsc
);
4898 err
= decode_media (gdbarch
, insn
, dsc
);
4901 case 0x8: case 0x9: case 0xa: case 0xb:
4902 err
= decode_b_bl_ldmstm (gdbarch
, insn
, regs
, dsc
);
4905 case 0xc: case 0xd: case 0xe: case 0xf:
4906 err
= decode_svc_copro (gdbarch
, insn
, to
, regs
, dsc
);
4911 internal_error (__FILE__
, __LINE__
,
4912 _("arm_process_displaced_insn: Instruction decode error"));
4915 /* Actually set up the scratch space for a displaced instruction. */
4918 arm_displaced_init_closure (struct gdbarch
*gdbarch
, CORE_ADDR from
,
4919 CORE_ADDR to
, struct displaced_step_closure
*dsc
)
4921 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
4923 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
4925 /* Poke modified instruction(s). */
4926 for (i
= 0; i
< dsc
->numinsns
; i
++)
4928 if (debug_displaced
)
4929 fprintf_unfiltered (gdb_stdlog
, "displaced: writing insn %.8lx at "
4930 "%.8lx\n", (unsigned long) dsc
->modinsn
[i
],
4931 (unsigned long) to
+ i
* 4);
4932 write_memory_unsigned_integer (to
+ i
* 4, 4, byte_order_for_code
,
4936 /* Put breakpoint afterwards. */
4937 write_memory (to
+ dsc
->numinsns
* 4, tdep
->arm_breakpoint
,
4938 tdep
->arm_breakpoint_size
);
4940 if (debug_displaced
)
4941 fprintf_unfiltered (gdb_stdlog
, "displaced: copy %s->%s: ",
4942 paddress (gdbarch
, from
), paddress (gdbarch
, to
));
4945 /* Entry point for copying an instruction into scratch space for displaced
4948 struct displaced_step_closure
*
4949 arm_displaced_step_copy_insn (struct gdbarch
*gdbarch
,
4950 CORE_ADDR from
, CORE_ADDR to
,
4951 struct regcache
*regs
)
4953 struct displaced_step_closure
*dsc
4954 = xmalloc (sizeof (struct displaced_step_closure
));
4955 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
4956 uint32_t insn
= read_memory_unsigned_integer (from
, 4, byte_order_for_code
);
4958 if (debug_displaced
)
4959 fprintf_unfiltered (gdb_stdlog
, "displaced: stepping insn %.8lx "
4960 "at %.8lx\n", (unsigned long) insn
,
4961 (unsigned long) from
);
4963 arm_process_displaced_insn (gdbarch
, insn
, from
, to
, regs
, dsc
);
4964 arm_displaced_init_closure (gdbarch
, from
, to
, dsc
);
4969 /* Entry point for cleaning things up after a displaced instruction has been
4973 arm_displaced_step_fixup (struct gdbarch
*gdbarch
,
4974 struct displaced_step_closure
*dsc
,
4975 CORE_ADDR from
, CORE_ADDR to
,
4976 struct regcache
*regs
)
4979 dsc
->cleanup (gdbarch
, regs
, dsc
);
4981 if (!dsc
->wrote_to_pc
)
4982 regcache_cooked_write_unsigned (regs
, ARM_PC_REGNUM
, dsc
->insn_addr
+ 4);
4985 #include "bfd-in2.h"
4986 #include "libcoff.h"
4989 gdb_print_insn_arm (bfd_vma memaddr
, disassemble_info
*info
)
4991 if (arm_pc_is_thumb (memaddr
))
4993 static asymbol
*asym
;
4994 static combined_entry_type ce
;
4995 static struct coff_symbol_struct csym
;
4996 static struct bfd fake_bfd
;
4997 static bfd_target fake_target
;
4999 if (csym
.native
== NULL
)
5001 /* Create a fake symbol vector containing a Thumb symbol.
5002 This is solely so that the code in print_insn_little_arm()
5003 and print_insn_big_arm() in opcodes/arm-dis.c will detect
5004 the presence of a Thumb symbol and switch to decoding
5005 Thumb instructions. */
5007 fake_target
.flavour
= bfd_target_coff_flavour
;
5008 fake_bfd
.xvec
= &fake_target
;
5009 ce
.u
.syment
.n_sclass
= C_THUMBEXTFUNC
;
5011 csym
.symbol
.the_bfd
= &fake_bfd
;
5012 csym
.symbol
.name
= "fake";
5013 asym
= (asymbol
*) & csym
;
5016 memaddr
= UNMAKE_THUMB_ADDR (memaddr
);
5017 info
->symbols
= &asym
;
5020 info
->symbols
= NULL
;
5022 if (info
->endian
== BFD_ENDIAN_BIG
)
5023 return print_insn_big_arm (memaddr
, info
);
5025 return print_insn_little_arm (memaddr
, info
);
5028 /* The following define instruction sequences that will cause ARM
5029 cpu's to take an undefined instruction trap. These are used to
5030 signal a breakpoint to GDB.
5032 The newer ARMv4T cpu's are capable of operating in ARM or Thumb
5033 modes. A different instruction is required for each mode. The ARM
5034 cpu's can also be big or little endian. Thus four different
5035 instructions are needed to support all cases.
5037 Note: ARMv4 defines several new instructions that will take the
5038 undefined instruction trap. ARM7TDMI is nominally ARMv4T, but does
5039 not in fact add the new instructions. The new undefined
5040 instructions in ARMv4 are all instructions that had no defined
5041 behaviour in earlier chips. There is no guarantee that they will
5042 raise an exception, but may be treated as NOP's. In practice, it
5043 may only safe to rely on instructions matching:
5045 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
5046 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
5047 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
5049 Even this may only true if the condition predicate is true. The
5050 following use a condition predicate of ALWAYS so it is always TRUE.
5052 There are other ways of forcing a breakpoint. GNU/Linux, RISC iX,
5053 and NetBSD all use a software interrupt rather than an undefined
5054 instruction to force a trap. This can be handled by by the
5055 abi-specific code during establishment of the gdbarch vector. */
5057 #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7}
5058 #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE}
5059 #define THUMB_LE_BREAKPOINT {0xbe,0xbe}
5060 #define THUMB_BE_BREAKPOINT {0xbe,0xbe}
5062 static const char arm_default_arm_le_breakpoint
[] = ARM_LE_BREAKPOINT
;
5063 static const char arm_default_arm_be_breakpoint
[] = ARM_BE_BREAKPOINT
;
5064 static const char arm_default_thumb_le_breakpoint
[] = THUMB_LE_BREAKPOINT
;
5065 static const char arm_default_thumb_be_breakpoint
[] = THUMB_BE_BREAKPOINT
;
5067 /* Determine the type and size of breakpoint to insert at PCPTR. Uses
5068 the program counter value to determine whether a 16-bit or 32-bit
5069 breakpoint should be used. It returns a pointer to a string of
5070 bytes that encode a breakpoint instruction, stores the length of
5071 the string to *lenptr, and adjusts the program counter (if
5072 necessary) to point to the actual memory location where the
5073 breakpoint should be inserted. */
5075 static const unsigned char *
5076 arm_breakpoint_from_pc (struct gdbarch
*gdbarch
, CORE_ADDR
*pcptr
, int *lenptr
)
5078 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5079 enum bfd_endian byte_order_for_code
= gdbarch_byte_order_for_code (gdbarch
);
5081 if (arm_pc_is_thumb (*pcptr
))
5083 *pcptr
= UNMAKE_THUMB_ADDR (*pcptr
);
5085 /* If we have a separate 32-bit breakpoint instruction for Thumb-2,
5086 check whether we are replacing a 32-bit instruction. */
5087 if (tdep
->thumb2_breakpoint
!= NULL
)
5090 if (target_read_memory (*pcptr
, buf
, 2) == 0)
5092 unsigned short inst1
;
5093 inst1
= extract_unsigned_integer (buf
, 2, byte_order_for_code
);
5094 if ((inst1
& 0xe000) == 0xe000 && (inst1
& 0x1800) != 0)
5096 *lenptr
= tdep
->thumb2_breakpoint_size
;
5097 return tdep
->thumb2_breakpoint
;
5102 *lenptr
= tdep
->thumb_breakpoint_size
;
5103 return tdep
->thumb_breakpoint
;
5107 *lenptr
= tdep
->arm_breakpoint_size
;
5108 return tdep
->arm_breakpoint
;
5113 arm_remote_breakpoint_from_pc (struct gdbarch
*gdbarch
, CORE_ADDR
*pcptr
,
5116 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5118 arm_breakpoint_from_pc (gdbarch
, pcptr
, kindptr
);
5120 if (arm_pc_is_thumb (*pcptr
) && *kindptr
== 4)
5121 /* The documented magic value for a 32-bit Thumb-2 breakpoint, so
5122 that this is not confused with a 32-bit ARM breakpoint. */
5126 /* Extract from an array REGBUF containing the (raw) register state a
5127 function return value of type TYPE, and copy that, in virtual
5128 format, into VALBUF. */
5131 arm_extract_return_value (struct type
*type
, struct regcache
*regs
,
5134 struct gdbarch
*gdbarch
= get_regcache_arch (regs
);
5135 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
5137 if (TYPE_CODE_FLT
== TYPE_CODE (type
))
5139 switch (gdbarch_tdep (gdbarch
)->fp_model
)
5143 /* The value is in register F0 in internal format. We need to
5144 extract the raw value and then convert it to the desired
5146 bfd_byte tmpbuf
[FP_REGISTER_SIZE
];
5148 regcache_cooked_read (regs
, ARM_F0_REGNUM
, tmpbuf
);
5149 convert_from_extended (floatformat_from_type (type
), tmpbuf
,
5150 valbuf
, gdbarch_byte_order (gdbarch
));
5154 case ARM_FLOAT_SOFT_FPA
:
5155 case ARM_FLOAT_SOFT_VFP
:
5156 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5157 not using the VFP ABI code. */
5159 regcache_cooked_read (regs
, ARM_A1_REGNUM
, valbuf
);
5160 if (TYPE_LENGTH (type
) > 4)
5161 regcache_cooked_read (regs
, ARM_A1_REGNUM
+ 1,
5162 valbuf
+ INT_REGISTER_SIZE
);
5167 (__FILE__
, __LINE__
,
5168 _("arm_extract_return_value: Floating point model not supported"));
5172 else if (TYPE_CODE (type
) == TYPE_CODE_INT
5173 || TYPE_CODE (type
) == TYPE_CODE_CHAR
5174 || TYPE_CODE (type
) == TYPE_CODE_BOOL
5175 || TYPE_CODE (type
) == TYPE_CODE_PTR
5176 || TYPE_CODE (type
) == TYPE_CODE_REF
5177 || TYPE_CODE (type
) == TYPE_CODE_ENUM
)
5179 /* If the the type is a plain integer, then the access is
5180 straight-forward. Otherwise we have to play around a bit more. */
5181 int len
= TYPE_LENGTH (type
);
5182 int regno
= ARM_A1_REGNUM
;
5187 /* By using store_unsigned_integer we avoid having to do
5188 anything special for small big-endian values. */
5189 regcache_cooked_read_unsigned (regs
, regno
++, &tmp
);
5190 store_unsigned_integer (valbuf
,
5191 (len
> INT_REGISTER_SIZE
5192 ? INT_REGISTER_SIZE
: len
),
5194 len
-= INT_REGISTER_SIZE
;
5195 valbuf
+= INT_REGISTER_SIZE
;
5200 /* For a structure or union the behaviour is as if the value had
5201 been stored to word-aligned memory and then loaded into
5202 registers with 32-bit load instruction(s). */
5203 int len
= TYPE_LENGTH (type
);
5204 int regno
= ARM_A1_REGNUM
;
5205 bfd_byte tmpbuf
[INT_REGISTER_SIZE
];
5209 regcache_cooked_read (regs
, regno
++, tmpbuf
);
5210 memcpy (valbuf
, tmpbuf
,
5211 len
> INT_REGISTER_SIZE
? INT_REGISTER_SIZE
: len
);
5212 len
-= INT_REGISTER_SIZE
;
5213 valbuf
+= INT_REGISTER_SIZE
;
5219 /* Will a function return an aggregate type in memory or in a
5220 register? Return 0 if an aggregate type can be returned in a
5221 register, 1 if it must be returned in memory. */
5224 arm_return_in_memory (struct gdbarch
*gdbarch
, struct type
*type
)
5227 enum type_code code
;
5229 CHECK_TYPEDEF (type
);
5231 /* In the ARM ABI, "integer" like aggregate types are returned in
5232 registers. For an aggregate type to be integer like, its size
5233 must be less than or equal to INT_REGISTER_SIZE and the
5234 offset of each addressable subfield must be zero. Note that bit
5235 fields are not addressable, and all addressable subfields of
5236 unions always start at offset zero.
5238 This function is based on the behaviour of GCC 2.95.1.
5239 See: gcc/arm.c: arm_return_in_memory() for details.
5241 Note: All versions of GCC before GCC 2.95.2 do not set up the
5242 parameters correctly for a function returning the following
5243 structure: struct { float f;}; This should be returned in memory,
5244 not a register. Richard Earnshaw sent me a patch, but I do not
5245 know of any way to detect if a function like the above has been
5246 compiled with the correct calling convention. */
5248 /* All aggregate types that won't fit in a register must be returned
5250 if (TYPE_LENGTH (type
) > INT_REGISTER_SIZE
)
5255 /* The AAPCS says all aggregates not larger than a word are returned
5257 if (gdbarch_tdep (gdbarch
)->arm_abi
!= ARM_ABI_APCS
)
5260 /* The only aggregate types that can be returned in a register are
5261 structs and unions. Arrays must be returned in memory. */
5262 code
= TYPE_CODE (type
);
5263 if ((TYPE_CODE_STRUCT
!= code
) && (TYPE_CODE_UNION
!= code
))
5268 /* Assume all other aggregate types can be returned in a register.
5269 Run a check for structures, unions and arrays. */
5272 if ((TYPE_CODE_STRUCT
== code
) || (TYPE_CODE_UNION
== code
))
5275 /* Need to check if this struct/union is "integer" like. For
5276 this to be true, its size must be less than or equal to
5277 INT_REGISTER_SIZE and the offset of each addressable
5278 subfield must be zero. Note that bit fields are not
5279 addressable, and unions always start at offset zero. If any
5280 of the subfields is a floating point type, the struct/union
5281 cannot be an integer type. */
5283 /* For each field in the object, check:
5284 1) Is it FP? --> yes, nRc = 1;
5285 2) Is it addressable (bitpos != 0) and
5286 not packed (bitsize == 0)?
5290 for (i
= 0; i
< TYPE_NFIELDS (type
); i
++)
5292 enum type_code field_type_code
;
5293 field_type_code
= TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type
, i
)));
5295 /* Is it a floating point type field? */
5296 if (field_type_code
== TYPE_CODE_FLT
)
5302 /* If bitpos != 0, then we have to care about it. */
5303 if (TYPE_FIELD_BITPOS (type
, i
) != 0)
5305 /* Bitfields are not addressable. If the field bitsize is
5306 zero, then the field is not packed. Hence it cannot be
5307 a bitfield or any other packed type. */
5308 if (TYPE_FIELD_BITSIZE (type
, i
) == 0)
5320 /* Write into appropriate registers a function return value of type
5321 TYPE, given in virtual format. */
5324 arm_store_return_value (struct type
*type
, struct regcache
*regs
,
5325 const gdb_byte
*valbuf
)
5327 struct gdbarch
*gdbarch
= get_regcache_arch (regs
);
5328 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
5330 if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
5332 char buf
[MAX_REGISTER_SIZE
];
5334 switch (gdbarch_tdep (gdbarch
)->fp_model
)
5338 convert_to_extended (floatformat_from_type (type
), buf
, valbuf
,
5339 gdbarch_byte_order (gdbarch
));
5340 regcache_cooked_write (regs
, ARM_F0_REGNUM
, buf
);
5343 case ARM_FLOAT_SOFT_FPA
:
5344 case ARM_FLOAT_SOFT_VFP
:
5345 /* ARM_FLOAT_VFP can arise if this is a variadic function so
5346 not using the VFP ABI code. */
5348 regcache_cooked_write (regs
, ARM_A1_REGNUM
, valbuf
);
5349 if (TYPE_LENGTH (type
) > 4)
5350 regcache_cooked_write (regs
, ARM_A1_REGNUM
+ 1,
5351 valbuf
+ INT_REGISTER_SIZE
);
5356 (__FILE__
, __LINE__
,
5357 _("arm_store_return_value: Floating point model not supported"));
5361 else if (TYPE_CODE (type
) == TYPE_CODE_INT
5362 || TYPE_CODE (type
) == TYPE_CODE_CHAR
5363 || TYPE_CODE (type
) == TYPE_CODE_BOOL
5364 || TYPE_CODE (type
) == TYPE_CODE_PTR
5365 || TYPE_CODE (type
) == TYPE_CODE_REF
5366 || TYPE_CODE (type
) == TYPE_CODE_ENUM
)
5368 if (TYPE_LENGTH (type
) <= 4)
5370 /* Values of one word or less are zero/sign-extended and
5372 bfd_byte tmpbuf
[INT_REGISTER_SIZE
];
5373 LONGEST val
= unpack_long (type
, valbuf
);
5375 store_signed_integer (tmpbuf
, INT_REGISTER_SIZE
, byte_order
, val
);
5376 regcache_cooked_write (regs
, ARM_A1_REGNUM
, tmpbuf
);
5380 /* Integral values greater than one word are stored in consecutive
5381 registers starting with r0. This will always be a multiple of
5382 the regiser size. */
5383 int len
= TYPE_LENGTH (type
);
5384 int regno
= ARM_A1_REGNUM
;
5388 regcache_cooked_write (regs
, regno
++, valbuf
);
5389 len
-= INT_REGISTER_SIZE
;
5390 valbuf
+= INT_REGISTER_SIZE
;
5396 /* For a structure or union the behaviour is as if the value had
5397 been stored to word-aligned memory and then loaded into
5398 registers with 32-bit load instruction(s). */
5399 int len
= TYPE_LENGTH (type
);
5400 int regno
= ARM_A1_REGNUM
;
5401 bfd_byte tmpbuf
[INT_REGISTER_SIZE
];
5405 memcpy (tmpbuf
, valbuf
,
5406 len
> INT_REGISTER_SIZE
? INT_REGISTER_SIZE
: len
);
5407 regcache_cooked_write (regs
, regno
++, tmpbuf
);
5408 len
-= INT_REGISTER_SIZE
;
5409 valbuf
+= INT_REGISTER_SIZE
;
5415 /* Handle function return values. */
5417 static enum return_value_convention
5418 arm_return_value (struct gdbarch
*gdbarch
, struct type
*func_type
,
5419 struct type
*valtype
, struct regcache
*regcache
,
5420 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
5422 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5423 enum arm_vfp_cprc_base_type vfp_base_type
;
5426 if (arm_vfp_abi_for_function (gdbarch
, func_type
)
5427 && arm_vfp_call_candidate (valtype
, &vfp_base_type
, &vfp_base_count
))
5429 int reg_char
= arm_vfp_cprc_reg_char (vfp_base_type
);
5430 int unit_length
= arm_vfp_cprc_unit_length (vfp_base_type
);
5432 for (i
= 0; i
< vfp_base_count
; i
++)
5434 if (reg_char
== 'q')
5437 arm_neon_quad_write (gdbarch
, regcache
, i
,
5438 writebuf
+ i
* unit_length
);
5441 arm_neon_quad_read (gdbarch
, regcache
, i
,
5442 readbuf
+ i
* unit_length
);
5449 sprintf (name_buf
, "%c%d", reg_char
, i
);
5450 regnum
= user_reg_map_name_to_regnum (gdbarch
, name_buf
,
5453 regcache_cooked_write (regcache
, regnum
,
5454 writebuf
+ i
* unit_length
);
5456 regcache_cooked_read (regcache
, regnum
,
5457 readbuf
+ i
* unit_length
);
5460 return RETURN_VALUE_REGISTER_CONVENTION
;
5463 if (TYPE_CODE (valtype
) == TYPE_CODE_STRUCT
5464 || TYPE_CODE (valtype
) == TYPE_CODE_UNION
5465 || TYPE_CODE (valtype
) == TYPE_CODE_ARRAY
)
5467 if (tdep
->struct_return
== pcc_struct_return
5468 || arm_return_in_memory (gdbarch
, valtype
))
5469 return RETURN_VALUE_STRUCT_CONVENTION
;
5473 arm_store_return_value (valtype
, regcache
, writebuf
);
5476 arm_extract_return_value (valtype
, regcache
, readbuf
);
5478 return RETURN_VALUE_REGISTER_CONVENTION
;
5483 arm_get_longjmp_target (struct frame_info
*frame
, CORE_ADDR
*pc
)
5485 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
5486 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
5487 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
5489 char buf
[INT_REGISTER_SIZE
];
5491 jb_addr
= get_frame_register_unsigned (frame
, ARM_A1_REGNUM
);
5493 if (target_read_memory (jb_addr
+ tdep
->jb_pc
* tdep
->jb_elt_size
, buf
,
5497 *pc
= extract_unsigned_integer (buf
, INT_REGISTER_SIZE
, byte_order
);
5501 /* Recognize GCC and GNU ld's trampolines. If we are in a trampoline,
5502 return the target PC. Otherwise return 0. */
5505 arm_skip_stub (struct frame_info
*frame
, CORE_ADDR pc
)
5509 CORE_ADDR start_addr
;
5511 /* Find the starting address and name of the function containing the PC. */
5512 if (find_pc_partial_function (pc
, &name
, &start_addr
, NULL
) == 0)
5515 /* If PC is in a Thumb call or return stub, return the address of the
5516 target PC, which is in a register. The thunk functions are called
5517 _call_via_xx, where x is the register name. The possible names
5518 are r0-r9, sl, fp, ip, sp, and lr. ARM RealView has similar
5519 functions, named __ARM_call_via_r[0-7]. */
5520 if (strncmp (name
, "_call_via_", 10) == 0
5521 || strncmp (name
, "__ARM_call_via_", strlen ("__ARM_call_via_")) == 0)
5523 /* Use the name suffix to determine which register contains the
5525 static char *table
[15] =
5526 {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
5527 "r8", "r9", "sl", "fp", "ip", "sp", "lr"
5530 int offset
= strlen (name
) - 2;
5532 for (regno
= 0; regno
<= 14; regno
++)
5533 if (strcmp (&name
[offset
], table
[regno
]) == 0)
5534 return get_frame_register_unsigned (frame
, regno
);
5537 /* GNU ld generates __foo_from_arm or __foo_from_thumb for
5538 non-interworking calls to foo. We could decode the stubs
5539 to find the target but it's easier to use the symbol table. */
5540 namelen
= strlen (name
);
5541 if (name
[0] == '_' && name
[1] == '_'
5542 && ((namelen
> 2 + strlen ("_from_thumb")
5543 && strncmp (name
+ namelen
- strlen ("_from_thumb"), "_from_thumb",
5544 strlen ("_from_thumb")) == 0)
5545 || (namelen
> 2 + strlen ("_from_arm")
5546 && strncmp (name
+ namelen
- strlen ("_from_arm"), "_from_arm",
5547 strlen ("_from_arm")) == 0)))
5550 int target_len
= namelen
- 2;
5551 struct minimal_symbol
*minsym
;
5552 struct objfile
*objfile
;
5553 struct obj_section
*sec
;
5555 if (name
[namelen
- 1] == 'b')
5556 target_len
-= strlen ("_from_thumb");
5558 target_len
-= strlen ("_from_arm");
5560 target_name
= alloca (target_len
+ 1);
5561 memcpy (target_name
, name
+ 2, target_len
);
5562 target_name
[target_len
] = '\0';
5564 sec
= find_pc_section (pc
);
5565 objfile
= (sec
== NULL
) ? NULL
: sec
->objfile
;
5566 minsym
= lookup_minimal_symbol (target_name
, NULL
, objfile
);
5568 return SYMBOL_VALUE_ADDRESS (minsym
);
5573 return 0; /* not a stub */
5577 set_arm_command (char *args
, int from_tty
)
5579 printf_unfiltered (_("\
5580 \"set arm\" must be followed by an apporpriate subcommand.\n"));
5581 help_list (setarmcmdlist
, "set arm ", all_commands
, gdb_stdout
);
5585 show_arm_command (char *args
, int from_tty
)
5587 cmd_show_list (showarmcmdlist
, from_tty
, "");
5591 arm_update_current_architecture (void)
5593 struct gdbarch_info info
;
5595 /* If the current architecture is not ARM, we have nothing to do. */
5596 if (gdbarch_bfd_arch_info (target_gdbarch
)->arch
!= bfd_arch_arm
)
5599 /* Update the architecture. */
5600 gdbarch_info_init (&info
);
5602 if (!gdbarch_update_p (info
))
5603 internal_error (__FILE__
, __LINE__
, "could not update architecture");
5607 set_fp_model_sfunc (char *args
, int from_tty
,
5608 struct cmd_list_element
*c
)
5610 enum arm_float_model fp_model
;
5612 for (fp_model
= ARM_FLOAT_AUTO
; fp_model
!= ARM_FLOAT_LAST
; fp_model
++)
5613 if (strcmp (current_fp_model
, fp_model_strings
[fp_model
]) == 0)
5615 arm_fp_model
= fp_model
;
5619 if (fp_model
== ARM_FLOAT_LAST
)
5620 internal_error (__FILE__
, __LINE__
, _("Invalid fp model accepted: %s."),
5623 arm_update_current_architecture ();
5627 show_fp_model (struct ui_file
*file
, int from_tty
,
5628 struct cmd_list_element
*c
, const char *value
)
5630 struct gdbarch_tdep
*tdep
= gdbarch_tdep (target_gdbarch
);
5632 if (arm_fp_model
== ARM_FLOAT_AUTO
5633 && gdbarch_bfd_arch_info (target_gdbarch
)->arch
== bfd_arch_arm
)
5634 fprintf_filtered (file
, _("\
5635 The current ARM floating point model is \"auto\" (currently \"%s\").\n"),
5636 fp_model_strings
[tdep
->fp_model
]);
5638 fprintf_filtered (file
, _("\
5639 The current ARM floating point model is \"%s\".\n"),
5640 fp_model_strings
[arm_fp_model
]);
5644 arm_set_abi (char *args
, int from_tty
,
5645 struct cmd_list_element
*c
)
5647 enum arm_abi_kind arm_abi
;
5649 for (arm_abi
= ARM_ABI_AUTO
; arm_abi
!= ARM_ABI_LAST
; arm_abi
++)
5650 if (strcmp (arm_abi_string
, arm_abi_strings
[arm_abi
]) == 0)
5652 arm_abi_global
= arm_abi
;
5656 if (arm_abi
== ARM_ABI_LAST
)
5657 internal_error (__FILE__
, __LINE__
, _("Invalid ABI accepted: %s."),
5660 arm_update_current_architecture ();
5664 arm_show_abi (struct ui_file
*file
, int from_tty
,
5665 struct cmd_list_element
*c
, const char *value
)
5667 struct gdbarch_tdep
*tdep
= gdbarch_tdep (target_gdbarch
);
5669 if (arm_abi_global
== ARM_ABI_AUTO
5670 && gdbarch_bfd_arch_info (target_gdbarch
)->arch
== bfd_arch_arm
)
5671 fprintf_filtered (file
, _("\
5672 The current ARM ABI is \"auto\" (currently \"%s\").\n"),
5673 arm_abi_strings
[tdep
->arm_abi
]);
5675 fprintf_filtered (file
, _("The current ARM ABI is \"%s\".\n"),
5680 arm_show_fallback_mode (struct ui_file
*file
, int from_tty
,
5681 struct cmd_list_element
*c
, const char *value
)
5683 struct gdbarch_tdep
*tdep
= gdbarch_tdep (target_gdbarch
);
5685 fprintf_filtered (file
, _("\
5686 The current execution mode assumed (when symbols are unavailable) is \"%s\".\n"),
5687 arm_fallback_mode_string
);
5691 arm_show_force_mode (struct ui_file
*file
, int from_tty
,
5692 struct cmd_list_element
*c
, const char *value
)
5694 struct gdbarch_tdep
*tdep
= gdbarch_tdep (target_gdbarch
);
5696 fprintf_filtered (file
, _("\
5697 The current execution mode assumed (even when symbols are available) is \"%s\".\n"),
5698 arm_force_mode_string
);
5701 /* If the user changes the register disassembly style used for info
5702 register and other commands, we have to also switch the style used
5703 in opcodes for disassembly output. This function is run in the "set
5704 arm disassembly" command, and does that. */
5707 set_disassembly_style_sfunc (char *args
, int from_tty
,
5708 struct cmd_list_element
*c
)
5710 set_disassembly_style ();
5713 /* Return the ARM register name corresponding to register I. */
5715 arm_register_name (struct gdbarch
*gdbarch
, int i
)
5717 const int num_regs
= gdbarch_num_regs (gdbarch
);
5719 if (gdbarch_tdep (gdbarch
)->have_vfp_pseudos
5720 && i
>= num_regs
&& i
< num_regs
+ 32)
5722 static const char *const vfp_pseudo_names
[] = {
5723 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
5724 "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
5725 "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
5726 "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31",
5729 return vfp_pseudo_names
[i
- num_regs
];
5732 if (gdbarch_tdep (gdbarch
)->have_neon_pseudos
5733 && i
>= num_regs
+ 32 && i
< num_regs
+ 32 + 16)
5735 static const char *const neon_pseudo_names
[] = {
5736 "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7",
5737 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15",
5740 return neon_pseudo_names
[i
- num_regs
- 32];
5743 if (i
>= ARRAY_SIZE (arm_register_names
))
5744 /* These registers are only supported on targets which supply
5745 an XML description. */
5748 return arm_register_names
[i
];
5752 set_disassembly_style (void)
5756 /* Find the style that the user wants. */
5757 for (current
= 0; current
< num_disassembly_options
; current
++)
5758 if (disassembly_style
== valid_disassembly_styles
[current
])
5760 gdb_assert (current
< num_disassembly_options
);
5762 /* Synchronize the disassembler. */
5763 set_arm_regname_option (current
);
5766 /* Test whether the coff symbol specific value corresponds to a Thumb
5770 coff_sym_is_thumb (int val
)
5772 return (val
== C_THUMBEXT
5773 || val
== C_THUMBSTAT
5774 || val
== C_THUMBEXTFUNC
5775 || val
== C_THUMBSTATFUNC
5776 || val
== C_THUMBLABEL
);
5779 /* arm_coff_make_msymbol_special()
5780 arm_elf_make_msymbol_special()
5782 These functions test whether the COFF or ELF symbol corresponds to
5783 an address in thumb code, and set a "special" bit in a minimal
5784 symbol to indicate that it does. */
5787 arm_elf_make_msymbol_special(asymbol
*sym
, struct minimal_symbol
*msym
)
5789 /* Thumb symbols are of type STT_LOPROC, (synonymous with
5791 if (ELF_ST_TYPE (((elf_symbol_type
*)sym
)->internal_elf_sym
.st_info
)
5793 MSYMBOL_SET_SPECIAL (msym
);
5797 arm_coff_make_msymbol_special(int val
, struct minimal_symbol
*msym
)
5799 if (coff_sym_is_thumb (val
))
5800 MSYMBOL_SET_SPECIAL (msym
);
5804 arm_objfile_data_free (struct objfile
*objfile
, void *arg
)
5806 struct arm_per_objfile
*data
= arg
;
5809 for (i
= 0; i
< objfile
->obfd
->section_count
; i
++)
5810 VEC_free (arm_mapping_symbol_s
, data
->section_maps
[i
]);
5814 arm_record_special_symbol (struct gdbarch
*gdbarch
, struct objfile
*objfile
,
5817 const char *name
= bfd_asymbol_name (sym
);
5818 struct arm_per_objfile
*data
;
5819 VEC(arm_mapping_symbol_s
) **map_p
;
5820 struct arm_mapping_symbol new_map_sym
;
5822 gdb_assert (name
[0] == '$');
5823 if (name
[1] != 'a' && name
[1] != 't' && name
[1] != 'd')
5826 data
= objfile_data (objfile
, arm_objfile_data_key
);
5829 data
= OBSTACK_ZALLOC (&objfile
->objfile_obstack
,
5830 struct arm_per_objfile
);
5831 set_objfile_data (objfile
, arm_objfile_data_key
, data
);
5832 data
->section_maps
= OBSTACK_CALLOC (&objfile
->objfile_obstack
,
5833 objfile
->obfd
->section_count
,
5834 VEC(arm_mapping_symbol_s
) *);
5836 map_p
= &data
->section_maps
[bfd_get_section (sym
)->index
];
5838 new_map_sym
.value
= sym
->value
;
5839 new_map_sym
.type
= name
[1];
5841 /* Assume that most mapping symbols appear in order of increasing
5842 value. If they were randomly distributed, it would be faster to
5843 always push here and then sort at first use. */
5844 if (!VEC_empty (arm_mapping_symbol_s
, *map_p
))
5846 struct arm_mapping_symbol
*prev_map_sym
;
5848 prev_map_sym
= VEC_last (arm_mapping_symbol_s
, *map_p
);
5849 if (prev_map_sym
->value
>= sym
->value
)
5852 idx
= VEC_lower_bound (arm_mapping_symbol_s
, *map_p
, &new_map_sym
,
5853 arm_compare_mapping_symbols
);
5854 VEC_safe_insert (arm_mapping_symbol_s
, *map_p
, idx
, &new_map_sym
);
5859 VEC_safe_push (arm_mapping_symbol_s
, *map_p
, &new_map_sym
);
5863 arm_write_pc (struct regcache
*regcache
, CORE_ADDR pc
)
5865 regcache_cooked_write_unsigned (regcache
, ARM_PC_REGNUM
, pc
);
5867 /* If necessary, set the T bit. */
5871 regcache_cooked_read_unsigned (regcache
, ARM_PS_REGNUM
, &val
);
5872 if (arm_pc_is_thumb (pc
))
5873 regcache_cooked_write_unsigned (regcache
, ARM_PS_REGNUM
, val
| CPSR_T
);
5875 regcache_cooked_write_unsigned (regcache
, ARM_PS_REGNUM
,
5876 val
& ~(ULONGEST
) CPSR_T
);
5880 /* Read the contents of a NEON quad register, by reading from two
5881 double registers. This is used to implement the quad pseudo
5882 registers, and for argument passing in case the quad registers are
5883 missing; vectors are passed in quad registers when using the VFP
5884 ABI, even if a NEON unit is not present. REGNUM is the index of
5885 the quad register, in [0, 15]. */
5888 arm_neon_quad_read (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5889 int regnum
, gdb_byte
*buf
)
5892 gdb_byte reg_buf
[8];
5893 int offset
, double_regnum
;
5895 sprintf (name_buf
, "d%d", regnum
<< 1);
5896 double_regnum
= user_reg_map_name_to_regnum (gdbarch
, name_buf
,
5899 /* d0 is always the least significant half of q0. */
5900 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
5905 regcache_raw_read (regcache
, double_regnum
, reg_buf
);
5906 memcpy (buf
+ offset
, reg_buf
, 8);
5908 offset
= 8 - offset
;
5909 regcache_raw_read (regcache
, double_regnum
+ 1, reg_buf
);
5910 memcpy (buf
+ offset
, reg_buf
, 8);
5914 arm_pseudo_read (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5915 int regnum
, gdb_byte
*buf
)
5917 const int num_regs
= gdbarch_num_regs (gdbarch
);
5919 gdb_byte reg_buf
[8];
5920 int offset
, double_regnum
;
5922 gdb_assert (regnum
>= num_regs
);
5925 if (gdbarch_tdep (gdbarch
)->have_neon_pseudos
&& regnum
>= 32 && regnum
< 48)
5926 /* Quad-precision register. */
5927 arm_neon_quad_read (gdbarch
, regcache
, regnum
- 32, buf
);
5930 /* Single-precision register. */
5931 gdb_assert (regnum
< 32);
5933 /* s0 is always the least significant half of d0. */
5934 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
5935 offset
= (regnum
& 1) ? 0 : 4;
5937 offset
= (regnum
& 1) ? 4 : 0;
5939 sprintf (name_buf
, "d%d", regnum
>> 1);
5940 double_regnum
= user_reg_map_name_to_regnum (gdbarch
, name_buf
,
5943 regcache_raw_read (regcache
, double_regnum
, reg_buf
);
5944 memcpy (buf
, reg_buf
+ offset
, 4);
5948 /* Store the contents of BUF to a NEON quad register, by writing to
5949 two double registers. This is used to implement the quad pseudo
5950 registers, and for argument passing in case the quad registers are
5951 missing; vectors are passed in quad registers when using the VFP
5952 ABI, even if a NEON unit is not present. REGNUM is the index
5953 of the quad register, in [0, 15]. */
5956 arm_neon_quad_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5957 int regnum
, const gdb_byte
*buf
)
5960 gdb_byte reg_buf
[8];
5961 int offset
, double_regnum
;
5963 sprintf (name_buf
, "d%d", regnum
<< 1);
5964 double_regnum
= user_reg_map_name_to_regnum (gdbarch
, name_buf
,
5967 /* d0 is always the least significant half of q0. */
5968 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
5973 regcache_raw_write (regcache
, double_regnum
, buf
+ offset
);
5974 offset
= 8 - offset
;
5975 regcache_raw_write (regcache
, double_regnum
+ 1, buf
+ offset
);
5979 arm_pseudo_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
5980 int regnum
, const gdb_byte
*buf
)
5982 const int num_regs
= gdbarch_num_regs (gdbarch
);
5984 gdb_byte reg_buf
[8];
5985 int offset
, double_regnum
;
5987 gdb_assert (regnum
>= num_regs
);
5990 if (gdbarch_tdep (gdbarch
)->have_neon_pseudos
&& regnum
>= 32 && regnum
< 48)
5991 /* Quad-precision register. */
5992 arm_neon_quad_write (gdbarch
, regcache
, regnum
- 32, buf
);
5995 /* Single-precision register. */
5996 gdb_assert (regnum
< 32);
5998 /* s0 is always the least significant half of d0. */
5999 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
6000 offset
= (regnum
& 1) ? 0 : 4;
6002 offset
= (regnum
& 1) ? 4 : 0;
6004 sprintf (name_buf
, "d%d", regnum
>> 1);
6005 double_regnum
= user_reg_map_name_to_regnum (gdbarch
, name_buf
,
6008 regcache_raw_read (regcache
, double_regnum
, reg_buf
);
6009 memcpy (reg_buf
+ offset
, buf
, 4);
6010 regcache_raw_write (regcache
, double_regnum
, reg_buf
);
6014 static struct value
*
6015 value_of_arm_user_reg (struct frame_info
*frame
, const void *baton
)
6017 const int *reg_p
= baton
;
6018 return value_of_register (*reg_p
, frame
);
6021 static enum gdb_osabi
6022 arm_elf_osabi_sniffer (bfd
*abfd
)
6024 unsigned int elfosabi
;
6025 enum gdb_osabi osabi
= GDB_OSABI_UNKNOWN
;
6027 elfosabi
= elf_elfheader (abfd
)->e_ident
[EI_OSABI
];
6029 if (elfosabi
== ELFOSABI_ARM
)
6030 /* GNU tools use this value. Check note sections in this case,
6032 bfd_map_over_sections (abfd
,
6033 generic_elf_osabi_sniff_abi_tag_sections
,
6036 /* Anything else will be handled by the generic ELF sniffer. */
6041 /* Initialize the current architecture based on INFO. If possible,
6042 re-use an architecture from ARCHES, which is a list of
6043 architectures already created during this debugging session.
6045 Called e.g. at program startup, when reading a core file, and when
6046 reading a binary file. */
6048 static struct gdbarch
*
6049 arm_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
6051 struct gdbarch_tdep
*tdep
;
6052 struct gdbarch
*gdbarch
;
6053 struct gdbarch_list
*best_arch
;
6054 enum arm_abi_kind arm_abi
= arm_abi_global
;
6055 enum arm_float_model fp_model
= arm_fp_model
;
6056 struct tdesc_arch_data
*tdesc_data
= NULL
;
6058 int have_vfp_registers
= 0, have_vfp_pseudos
= 0, have_neon_pseudos
= 0;
6060 int have_fpa_registers
= 1;
6062 /* Check any target description for validity. */
6063 if (tdesc_has_registers (info
.target_desc
))
6065 /* For most registers we require GDB's default names; but also allow
6066 the numeric names for sp / lr / pc, as a convenience. */
6067 static const char *const arm_sp_names
[] = { "r13", "sp", NULL
};
6068 static const char *const arm_lr_names
[] = { "r14", "lr", NULL
};
6069 static const char *const arm_pc_names
[] = { "r15", "pc", NULL
};
6071 const struct tdesc_feature
*feature
;
6074 feature
= tdesc_find_feature (info
.target_desc
,
6075 "org.gnu.gdb.arm.core");
6076 if (feature
== NULL
)
6079 tdesc_data
= tdesc_data_alloc ();
6082 for (i
= 0; i
< ARM_SP_REGNUM
; i
++)
6083 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
, i
,
6084 arm_register_names
[i
]);
6085 valid_p
&= tdesc_numbered_register_choices (feature
, tdesc_data
,
6088 valid_p
&= tdesc_numbered_register_choices (feature
, tdesc_data
,
6091 valid_p
&= tdesc_numbered_register_choices (feature
, tdesc_data
,
6094 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6095 ARM_PS_REGNUM
, "cpsr");
6099 tdesc_data_cleanup (tdesc_data
);
6103 feature
= tdesc_find_feature (info
.target_desc
,
6104 "org.gnu.gdb.arm.fpa");
6105 if (feature
!= NULL
)
6108 for (i
= ARM_F0_REGNUM
; i
<= ARM_FPS_REGNUM
; i
++)
6109 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
, i
,
6110 arm_register_names
[i
]);
6113 tdesc_data_cleanup (tdesc_data
);
6118 have_fpa_registers
= 0;
6120 feature
= tdesc_find_feature (info
.target_desc
,
6121 "org.gnu.gdb.xscale.iwmmxt");
6122 if (feature
!= NULL
)
6124 static const char *const iwmmxt_names
[] = {
6125 "wR0", "wR1", "wR2", "wR3", "wR4", "wR5", "wR6", "wR7",
6126 "wR8", "wR9", "wR10", "wR11", "wR12", "wR13", "wR14", "wR15",
6127 "wCID", "wCon", "wCSSF", "wCASF", "", "", "", "",
6128 "wCGR0", "wCGR1", "wCGR2", "wCGR3", "", "", "", "",
6132 for (i
= ARM_WR0_REGNUM
; i
<= ARM_WR15_REGNUM
; i
++)
6134 &= tdesc_numbered_register (feature
, tdesc_data
, i
,
6135 iwmmxt_names
[i
- ARM_WR0_REGNUM
]);
6137 /* Check for the control registers, but do not fail if they
6139 for (i
= ARM_WC0_REGNUM
; i
<= ARM_WCASF_REGNUM
; i
++)
6140 tdesc_numbered_register (feature
, tdesc_data
, i
,
6141 iwmmxt_names
[i
- ARM_WR0_REGNUM
]);
6143 for (i
= ARM_WCGR0_REGNUM
; i
<= ARM_WCGR3_REGNUM
; i
++)
6145 &= tdesc_numbered_register (feature
, tdesc_data
, i
,
6146 iwmmxt_names
[i
- ARM_WR0_REGNUM
]);
6150 tdesc_data_cleanup (tdesc_data
);
6155 /* If we have a VFP unit, check whether the single precision registers
6156 are present. If not, then we will synthesize them as pseudo
6158 feature
= tdesc_find_feature (info
.target_desc
,
6159 "org.gnu.gdb.arm.vfp");
6160 if (feature
!= NULL
)
6162 static const char *const vfp_double_names
[] = {
6163 "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
6164 "d8", "d9", "d10", "d11", "d12", "d13", "d14", "d15",
6165 "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23",
6166 "d24", "d25", "d26", "d27", "d28", "d29", "d30", "d31",
6169 /* Require the double precision registers. There must be either
6172 for (i
= 0; i
< 32; i
++)
6174 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
,
6176 vfp_double_names
[i
]);
6181 if (!valid_p
&& i
!= 16)
6183 tdesc_data_cleanup (tdesc_data
);
6187 if (tdesc_unnumbered_register (feature
, "s0") == 0)
6188 have_vfp_pseudos
= 1;
6190 have_vfp_registers
= 1;
6192 /* If we have VFP, also check for NEON. The architecture allows
6193 NEON without VFP (integer vector operations only), but GDB
6194 does not support that. */
6195 feature
= tdesc_find_feature (info
.target_desc
,
6196 "org.gnu.gdb.arm.neon");
6197 if (feature
!= NULL
)
6199 /* NEON requires 32 double-precision registers. */
6202 tdesc_data_cleanup (tdesc_data
);
6206 /* If there are quad registers defined by the stub, use
6207 their type; otherwise (normally) provide them with
6208 the default type. */
6209 if (tdesc_unnumbered_register (feature
, "q0") == 0)
6210 have_neon_pseudos
= 1;
6217 /* If we have an object to base this architecture on, try to determine
6220 if (arm_abi
== ARM_ABI_AUTO
&& info
.abfd
!= NULL
)
6222 int ei_osabi
, e_flags
;
6224 switch (bfd_get_flavour (info
.abfd
))
6226 case bfd_target_aout_flavour
:
6227 /* Assume it's an old APCS-style ABI. */
6228 arm_abi
= ARM_ABI_APCS
;
6231 case bfd_target_coff_flavour
:
6232 /* Assume it's an old APCS-style ABI. */
6234 arm_abi
= ARM_ABI_APCS
;
6237 case bfd_target_elf_flavour
:
6238 ei_osabi
= elf_elfheader (info
.abfd
)->e_ident
[EI_OSABI
];
6239 e_flags
= elf_elfheader (info
.abfd
)->e_flags
;
6241 if (ei_osabi
== ELFOSABI_ARM
)
6243 /* GNU tools used to use this value, but do not for EABI
6244 objects. There's nowhere to tag an EABI version
6245 anyway, so assume APCS. */
6246 arm_abi
= ARM_ABI_APCS
;
6248 else if (ei_osabi
== ELFOSABI_NONE
)
6250 int eabi_ver
= EF_ARM_EABI_VERSION (e_flags
);
6254 case EF_ARM_EABI_UNKNOWN
:
6255 /* Assume GNU tools. */
6256 arm_abi
= ARM_ABI_APCS
;
6259 case EF_ARM_EABI_VER4
:
6260 case EF_ARM_EABI_VER5
:
6261 arm_abi
= ARM_ABI_AAPCS
;
6262 /* EABI binaries default to VFP float ordering.
6263 They may also contain build attributes that can
6264 be used to identify if the VFP argument-passing
6266 if (fp_model
== ARM_FLOAT_AUTO
)
6269 switch (bfd_elf_get_obj_attr_int (info
.abfd
,
6274 /* "The user intended FP parameter/result
6275 passing to conform to AAPCS, base
6277 fp_model
= ARM_FLOAT_SOFT_VFP
;
6280 /* "The user intended FP parameter/result
6281 passing to conform to AAPCS, VFP
6283 fp_model
= ARM_FLOAT_VFP
;
6286 /* "The user intended FP parameter/result
6287 passing to conform to tool chain-specific
6288 conventions" - we don't know any such
6289 conventions, so leave it as "auto". */
6292 /* Attribute value not mentioned in the
6293 October 2008 ABI, so leave it as
6298 fp_model
= ARM_FLOAT_SOFT_VFP
;
6304 /* Leave it as "auto". */
6305 warning (_("unknown ARM EABI version 0x%x"), eabi_ver
);
6310 if (fp_model
== ARM_FLOAT_AUTO
)
6312 int e_flags
= elf_elfheader (info
.abfd
)->e_flags
;
6314 switch (e_flags
& (EF_ARM_SOFT_FLOAT
| EF_ARM_VFP_FLOAT
))
6317 /* Leave it as "auto". Strictly speaking this case
6318 means FPA, but almost nobody uses that now, and
6319 many toolchains fail to set the appropriate bits
6320 for the floating-point model they use. */
6322 case EF_ARM_SOFT_FLOAT
:
6323 fp_model
= ARM_FLOAT_SOFT_FPA
;
6325 case EF_ARM_VFP_FLOAT
:
6326 fp_model
= ARM_FLOAT_VFP
;
6328 case EF_ARM_SOFT_FLOAT
| EF_ARM_VFP_FLOAT
:
6329 fp_model
= ARM_FLOAT_SOFT_VFP
;
6334 if (e_flags
& EF_ARM_BE8
)
6335 info
.byte_order_for_code
= BFD_ENDIAN_LITTLE
;
6340 /* Leave it as "auto". */
6345 /* If there is already a candidate, use it. */
6346 for (best_arch
= gdbarch_list_lookup_by_info (arches
, &info
);
6348 best_arch
= gdbarch_list_lookup_by_info (best_arch
->next
, &info
))
6350 if (arm_abi
!= ARM_ABI_AUTO
6351 && arm_abi
!= gdbarch_tdep (best_arch
->gdbarch
)->arm_abi
)
6354 if (fp_model
!= ARM_FLOAT_AUTO
6355 && fp_model
!= gdbarch_tdep (best_arch
->gdbarch
)->fp_model
)
6358 /* There are various other properties in tdep that we do not
6359 need to check here: those derived from a target description,
6360 since gdbarches with a different target description are
6361 automatically disqualified. */
6363 /* Found a match. */
6367 if (best_arch
!= NULL
)
6369 if (tdesc_data
!= NULL
)
6370 tdesc_data_cleanup (tdesc_data
);
6371 return best_arch
->gdbarch
;
6374 tdep
= xcalloc (1, sizeof (struct gdbarch_tdep
));
6375 gdbarch
= gdbarch_alloc (&info
, tdep
);
6377 /* Record additional information about the architecture we are defining.
6378 These are gdbarch discriminators, like the OSABI. */
6379 tdep
->arm_abi
= arm_abi
;
6380 tdep
->fp_model
= fp_model
;
6381 tdep
->have_fpa_registers
= have_fpa_registers
;
6382 tdep
->have_vfp_registers
= have_vfp_registers
;
6383 tdep
->have_vfp_pseudos
= have_vfp_pseudos
;
6384 tdep
->have_neon_pseudos
= have_neon_pseudos
;
6385 tdep
->have_neon
= have_neon
;
6388 switch (info
.byte_order_for_code
)
6390 case BFD_ENDIAN_BIG
:
6391 tdep
->arm_breakpoint
= arm_default_arm_be_breakpoint
;
6392 tdep
->arm_breakpoint_size
= sizeof (arm_default_arm_be_breakpoint
);
6393 tdep
->thumb_breakpoint
= arm_default_thumb_be_breakpoint
;
6394 tdep
->thumb_breakpoint_size
= sizeof (arm_default_thumb_be_breakpoint
);
6398 case BFD_ENDIAN_LITTLE
:
6399 tdep
->arm_breakpoint
= arm_default_arm_le_breakpoint
;
6400 tdep
->arm_breakpoint_size
= sizeof (arm_default_arm_le_breakpoint
);
6401 tdep
->thumb_breakpoint
= arm_default_thumb_le_breakpoint
;
6402 tdep
->thumb_breakpoint_size
= sizeof (arm_default_thumb_le_breakpoint
);
6407 internal_error (__FILE__
, __LINE__
,
6408 _("arm_gdbarch_init: bad byte order for float format"));
6411 /* On ARM targets char defaults to unsigned. */
6412 set_gdbarch_char_signed (gdbarch
, 0);
6414 /* Note: for displaced stepping, this includes the breakpoint, and one word
6415 of additional scratch space. This setting isn't used for anything beside
6416 displaced stepping at present. */
6417 set_gdbarch_max_insn_length (gdbarch
, 4 * DISPLACED_MODIFIED_INSNS
);
6419 /* This should be low enough for everything. */
6420 tdep
->lowest_pc
= 0x20;
6421 tdep
->jb_pc
= -1; /* Longjump support not enabled by default. */
6423 /* The default, for both APCS and AAPCS, is to return small
6424 structures in registers. */
6425 tdep
->struct_return
= reg_struct_return
;
6427 set_gdbarch_push_dummy_call (gdbarch
, arm_push_dummy_call
);
6428 set_gdbarch_frame_align (gdbarch
, arm_frame_align
);
6430 set_gdbarch_write_pc (gdbarch
, arm_write_pc
);
6432 /* Frame handling. */
6433 set_gdbarch_dummy_id (gdbarch
, arm_dummy_id
);
6434 set_gdbarch_unwind_pc (gdbarch
, arm_unwind_pc
);
6435 set_gdbarch_unwind_sp (gdbarch
, arm_unwind_sp
);
6437 frame_base_set_default (gdbarch
, &arm_normal_base
);
6439 /* Address manipulation. */
6440 set_gdbarch_smash_text_address (gdbarch
, arm_smash_text_address
);
6441 set_gdbarch_addr_bits_remove (gdbarch
, arm_addr_bits_remove
);
6443 /* Advance PC across function entry code. */
6444 set_gdbarch_skip_prologue (gdbarch
, arm_skip_prologue
);
6446 /* Skip trampolines. */
6447 set_gdbarch_skip_trampoline_code (gdbarch
, arm_skip_stub
);
6449 /* The stack grows downward. */
6450 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
6452 /* Breakpoint manipulation. */
6453 set_gdbarch_breakpoint_from_pc (gdbarch
, arm_breakpoint_from_pc
);
6454 set_gdbarch_remote_breakpoint_from_pc (gdbarch
,
6455 arm_remote_breakpoint_from_pc
);
6457 /* Information about registers, etc. */
6458 set_gdbarch_deprecated_fp_regnum (gdbarch
, ARM_FP_REGNUM
); /* ??? */
6459 set_gdbarch_sp_regnum (gdbarch
, ARM_SP_REGNUM
);
6460 set_gdbarch_pc_regnum (gdbarch
, ARM_PC_REGNUM
);
6461 set_gdbarch_num_regs (gdbarch
, ARM_NUM_REGS
);
6462 set_gdbarch_register_type (gdbarch
, arm_register_type
);
6464 /* This "info float" is FPA-specific. Use the generic version if we
6466 if (gdbarch_tdep (gdbarch
)->have_fpa_registers
)
6467 set_gdbarch_print_float_info (gdbarch
, arm_print_float_info
);
6469 /* Internal <-> external register number maps. */
6470 set_gdbarch_dwarf2_reg_to_regnum (gdbarch
, arm_dwarf_reg_to_regnum
);
6471 set_gdbarch_register_sim_regno (gdbarch
, arm_register_sim_regno
);
6473 set_gdbarch_register_name (gdbarch
, arm_register_name
);
6475 /* Returning results. */
6476 set_gdbarch_return_value (gdbarch
, arm_return_value
);
6479 set_gdbarch_print_insn (gdbarch
, gdb_print_insn_arm
);
6481 /* Minsymbol frobbing. */
6482 set_gdbarch_elf_make_msymbol_special (gdbarch
, arm_elf_make_msymbol_special
);
6483 set_gdbarch_coff_make_msymbol_special (gdbarch
,
6484 arm_coff_make_msymbol_special
);
6485 set_gdbarch_record_special_symbol (gdbarch
, arm_record_special_symbol
);
6487 /* Thumb-2 IT block support. */
6488 set_gdbarch_adjust_breakpoint_address (gdbarch
,
6489 arm_adjust_breakpoint_address
);
6491 /* Virtual tables. */
6492 set_gdbarch_vbit_in_delta (gdbarch
, 1);
6494 /* Hook in the ABI-specific overrides, if they have been registered. */
6495 gdbarch_init_osabi (info
, gdbarch
);
6497 dwarf2_frame_set_init_reg (gdbarch
, arm_dwarf2_frame_init_reg
);
6499 /* Add some default predicates. */
6500 frame_unwind_append_unwinder (gdbarch
, &arm_stub_unwind
);
6501 dwarf2_append_unwinders (gdbarch
);
6502 frame_unwind_append_unwinder (gdbarch
, &arm_prologue_unwind
);
6504 /* Now we have tuned the configuration, set a few final things,
6505 based on what the OS ABI has told us. */
6507 /* If the ABI is not otherwise marked, assume the old GNU APCS. EABI
6508 binaries are always marked. */
6509 if (tdep
->arm_abi
== ARM_ABI_AUTO
)
6510 tdep
->arm_abi
= ARM_ABI_APCS
;
6512 /* We used to default to FPA for generic ARM, but almost nobody
6513 uses that now, and we now provide a way for the user to force
6514 the model. So default to the most useful variant. */
6515 if (tdep
->fp_model
== ARM_FLOAT_AUTO
)
6516 tdep
->fp_model
= ARM_FLOAT_SOFT_FPA
;
6518 if (tdep
->jb_pc
>= 0)
6519 set_gdbarch_get_longjmp_target (gdbarch
, arm_get_longjmp_target
);
6521 /* Floating point sizes and format. */
6522 set_gdbarch_float_format (gdbarch
, floatformats_ieee_single
);
6523 if (tdep
->fp_model
== ARM_FLOAT_SOFT_FPA
|| tdep
->fp_model
== ARM_FLOAT_FPA
)
6525 set_gdbarch_double_format
6526 (gdbarch
, floatformats_ieee_double_littlebyte_bigword
);
6527 set_gdbarch_long_double_format
6528 (gdbarch
, floatformats_ieee_double_littlebyte_bigword
);
6532 set_gdbarch_double_format (gdbarch
, floatformats_ieee_double
);
6533 set_gdbarch_long_double_format (gdbarch
, floatformats_ieee_double
);
6536 if (have_vfp_pseudos
)
6538 /* NOTE: These are the only pseudo registers used by
6539 the ARM target at the moment. If more are added, a
6540 little more care in numbering will be needed. */
6542 int num_pseudos
= 32;
6543 if (have_neon_pseudos
)
6545 set_gdbarch_num_pseudo_regs (gdbarch
, num_pseudos
);
6546 set_gdbarch_pseudo_register_read (gdbarch
, arm_pseudo_read
);
6547 set_gdbarch_pseudo_register_write (gdbarch
, arm_pseudo_write
);
6552 set_tdesc_pseudo_register_name (gdbarch
, arm_register_name
);
6554 tdesc_use_registers (gdbarch
, info
.target_desc
, tdesc_data
);
6556 /* Override tdesc_register_type to adjust the types of VFP
6557 registers for NEON. */
6558 set_gdbarch_register_type (gdbarch
, arm_register_type
);
6561 /* Add standard register aliases. We add aliases even for those
6562 nanes which are used by the current architecture - it's simpler,
6563 and does no harm, since nothing ever lists user registers. */
6564 for (i
= 0; i
< ARRAY_SIZE (arm_register_aliases
); i
++)
6565 user_reg_add (gdbarch
, arm_register_aliases
[i
].name
,
6566 value_of_arm_user_reg
, &arm_register_aliases
[i
].regnum
);
6572 arm_dump_tdep (struct gdbarch
*gdbarch
, struct ui_file
*file
)
6574 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
6579 fprintf_unfiltered (file
, _("arm_dump_tdep: Lowest pc = 0x%lx"),
6580 (unsigned long) tdep
->lowest_pc
);
6583 extern initialize_file_ftype _initialize_arm_tdep
; /* -Wmissing-prototypes */
6586 _initialize_arm_tdep (void)
6588 struct ui_file
*stb
;
6590 struct cmd_list_element
*new_set
, *new_show
;
6591 const char *setname
;
6592 const char *setdesc
;
6593 const char *const *regnames
;
6595 static char *helptext
;
6596 char regdesc
[1024], *rdptr
= regdesc
;
6597 size_t rest
= sizeof (regdesc
);
6599 gdbarch_register (bfd_arch_arm
, arm_gdbarch_init
, arm_dump_tdep
);
6601 arm_objfile_data_key
6602 = register_objfile_data_with_cleanup (NULL
, arm_objfile_data_free
);
6604 /* Register an ELF OS ABI sniffer for ARM binaries. */
6605 gdbarch_register_osabi_sniffer (bfd_arch_arm
,
6606 bfd_target_elf_flavour
,
6607 arm_elf_osabi_sniffer
);
6609 /* Get the number of possible sets of register names defined in opcodes. */
6610 num_disassembly_options
= get_arm_regname_num_options ();
6612 /* Add root prefix command for all "set arm"/"show arm" commands. */
6613 add_prefix_cmd ("arm", no_class
, set_arm_command
,
6614 _("Various ARM-specific commands."),
6615 &setarmcmdlist
, "set arm ", 0, &setlist
);
6617 add_prefix_cmd ("arm", no_class
, show_arm_command
,
6618 _("Various ARM-specific commands."),
6619 &showarmcmdlist
, "show arm ", 0, &showlist
);
6621 /* Sync the opcode insn printer with our register viewer. */
6622 parse_arm_disassembler_option ("reg-names-std");
6624 /* Initialize the array that will be passed to
6625 add_setshow_enum_cmd(). */
6626 valid_disassembly_styles
6627 = xmalloc ((num_disassembly_options
+ 1) * sizeof (char *));
6628 for (i
= 0; i
< num_disassembly_options
; i
++)
6630 numregs
= get_arm_regnames (i
, &setname
, &setdesc
, ®names
);
6631 valid_disassembly_styles
[i
] = setname
;
6632 length
= snprintf (rdptr
, rest
, "%s - %s\n", setname
, setdesc
);
6635 /* When we find the default names, tell the disassembler to use
6637 if (!strcmp (setname
, "std"))
6639 disassembly_style
= setname
;
6640 set_arm_regname_option (i
);
6643 /* Mark the end of valid options. */
6644 valid_disassembly_styles
[num_disassembly_options
] = NULL
;
6646 /* Create the help text. */
6647 stb
= mem_fileopen ();
6648 fprintf_unfiltered (stb
, "%s%s%s",
6649 _("The valid values are:\n"),
6651 _("The default is \"std\"."));
6652 helptext
= ui_file_xstrdup (stb
, NULL
);
6653 ui_file_delete (stb
);
6655 add_setshow_enum_cmd("disassembler", no_class
,
6656 valid_disassembly_styles
, &disassembly_style
,
6657 _("Set the disassembly style."),
6658 _("Show the disassembly style."),
6660 set_disassembly_style_sfunc
,
6661 NULL
, /* FIXME: i18n: The disassembly style is \"%s\". */
6662 &setarmcmdlist
, &showarmcmdlist
);
6664 add_setshow_boolean_cmd ("apcs32", no_class
, &arm_apcs_32
,
6665 _("Set usage of ARM 32-bit mode."),
6666 _("Show usage of ARM 32-bit mode."),
6667 _("When off, a 26-bit PC will be used."),
6669 NULL
, /* FIXME: i18n: Usage of ARM 32-bit mode is %s. */
6670 &setarmcmdlist
, &showarmcmdlist
);
6672 /* Add a command to allow the user to force the FPU model. */
6673 add_setshow_enum_cmd ("fpu", no_class
, fp_model_strings
, ¤t_fp_model
,
6674 _("Set the floating point type."),
6675 _("Show the floating point type."),
6676 _("auto - Determine the FP typefrom the OS-ABI.\n\
6677 softfpa - Software FP, mixed-endian doubles on little-endian ARMs.\n\
6678 fpa - FPA co-processor (GCC compiled).\n\
6679 softvfp - Software FP with pure-endian doubles.\n\
6680 vfp - VFP co-processor."),
6681 set_fp_model_sfunc
, show_fp_model
,
6682 &setarmcmdlist
, &showarmcmdlist
);
6684 /* Add a command to allow the user to force the ABI. */
6685 add_setshow_enum_cmd ("abi", class_support
, arm_abi_strings
, &arm_abi_string
,
6688 NULL
, arm_set_abi
, arm_show_abi
,
6689 &setarmcmdlist
, &showarmcmdlist
);
6691 /* Add two commands to allow the user to force the assumed
6693 add_setshow_enum_cmd ("fallback-mode", class_support
,
6694 arm_mode_strings
, &arm_fallback_mode_string
,
6695 _("Set the mode assumed when symbols are unavailable."),
6696 _("Show the mode assumed when symbols are unavailable."),
6697 NULL
, NULL
, arm_show_fallback_mode
,
6698 &setarmcmdlist
, &showarmcmdlist
);
6699 add_setshow_enum_cmd ("force-mode", class_support
,
6700 arm_mode_strings
, &arm_force_mode_string
,
6701 _("Set the mode assumed even when symbols are available."),
6702 _("Show the mode assumed even when symbols are available."),
6703 NULL
, NULL
, arm_show_force_mode
,
6704 &setarmcmdlist
, &showarmcmdlist
);
6706 /* Debugging flag. */
6707 add_setshow_boolean_cmd ("arm", class_maintenance
, &arm_debug
,
6708 _("Set ARM debugging."),
6709 _("Show ARM debugging."),
6710 _("When on, arm-specific debugging is enabled."),
6712 NULL
, /* FIXME: i18n: "ARM debugging is %s. */
6713 &setdebuglist
, &showdebuglist
);