OLD | NEW |
1 /* Common target dependent code for GDB on ARM systems. | 1 /* Common target dependent code for GDB on ARM systems. |
2 Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc. | 2 Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc. |
3 | 3 |
4 This file is part of GDB. | 4 This file is part of GDB. |
5 | 5 |
6 This program is free software; you can redistribute it and/or modify | 6 This program is free software; you can redistribute it and/or modify |
7 it under the terms of the GNU General Public License as published by | 7 it under the terms of the GNU General Public License as published by |
8 the Free Software Foundation; either version 3 of the License, or | 8 the Free Software Foundation; either version 3 of the License, or |
9 (at your option) any later version. | 9 (at your option) any later version. |
10 | 10 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 }; | 64 }; |
65 | 65 |
66 /* Size of integer registers. */ | 66 /* Size of integer registers. */ |
67 #define INT_REGISTER_SIZE 4 | 67 #define INT_REGISTER_SIZE 4 |
68 | 68 |
69 /* Say how long FP registers are. Used for documentation purposes and | 69 /* Say how long FP registers are. Used for documentation purposes and |
70 code readability in this header. IEEE extended doubles are 80 | 70 code readability in this header. IEEE extended doubles are 80 |
71 bits. DWORD aligned they use 96 bits. */ | 71 bits. DWORD aligned they use 96 bits. */ |
72 #define FP_REGISTER_SIZE 12 | 72 #define FP_REGISTER_SIZE 12 |
73 | 73 |
| 74 /* Say how long VFP double precision registers are. Used for documentation |
| 75 purposes and code readability. These are fixed at 64 bits. */ |
| 76 #define VFP_REGISTER_SIZE 8 |
| 77 |
74 /* Number of machine registers. The only define actually required | 78 /* Number of machine registers. The only define actually required |
75 is gdbarch_num_regs. The other definitions are used for documentation | 79 is gdbarch_num_regs. The other definitions are used for documentation |
76 purposes and code readability. */ | 80 purposes and code readability. */ |
77 /* For 26 bit ARM code, a fake copy of the PC is placed in register 25 (PS) | 81 /* For 26 bit ARM code, a fake copy of the PC is placed in register 25 (PS) |
78 (and called PS for processor status) so the status bits can be cleared | 82 (and called PS for processor status) so the status bits can be cleared |
79 from the PC (register 15). For 32 bit ARM code, a copy of CPSR is placed | 83 from the PC (register 15). For 32 bit ARM code, a copy of CPSR is placed |
80 in PS. */ | 84 in PS. */ |
81 #define NUM_FREGS 8 /* Number of floating point registers. */ | 85 #define NUM_FREGS 8 /* Number of floating point registers. */ |
82 #define NUM_SREGS 2 /* Number of status registers. */ | 86 #define NUM_SREGS 2 /* Number of status registers. */ |
83 #define NUM_GREGS 16 /* Number of general purpose registers. */ | 87 #define NUM_GREGS 16 /* Number of general purpose registers. */ |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 struct regset *gregset, *fpregset, *vfpregset; | 197 struct regset *gregset, *fpregset, *vfpregset; |
194 | 198 |
195 /* ISA-specific data types. */ | 199 /* ISA-specific data types. */ |
196 struct type *arm_ext_type; | 200 struct type *arm_ext_type; |
197 struct type *neon_double_type; | 201 struct type *neon_double_type; |
198 struct type *neon_quad_type; | 202 struct type *neon_quad_type; |
199 | 203 |
200 /* Return the expected next PC if FRAME is stopped at a syscall | 204 /* Return the expected next PC if FRAME is stopped at a syscall |
201 instruction. */ | 205 instruction. */ |
202 CORE_ADDR (*syscall_next_pc) (struct frame_info *frame); | 206 CORE_ADDR (*syscall_next_pc) (struct frame_info *frame); |
| 207 |
| 208 /* Parse swi insn args, sycall record. */ |
| 209 int (*arm_swi_record) (struct regcache *regcache); |
203 }; | 210 }; |
204 | 211 |
205 /* Structures used for displaced stepping. */ | 212 /* Structures used for displaced stepping. */ |
206 | 213 |
207 /* The maximum number of temporaries available for displaced instructions. */ | 214 /* The maximum number of temporaries available for displaced instructions. */ |
208 #define DISPLACED_TEMPS 16 | 215 #define DISPLACED_TEMPS 16 |
209 /* The maximum number of modified instructions generated for one single-stepped | 216 /* The maximum number of modified instructions generated for one single-stepped |
210 instruction, including the breakpoint (usually at the end of the instruction | 217 instruction, including the breakpoint (usually at the end of the instruction |
211 sequence) and any scratch words, etc. */ | 218 sequence) and any scratch words, etc. */ |
212 #define DISPLACED_MODIFIED_INSNS 8 | 219 #define DISPLACED_MODIFIED_INSNS 8 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
323 struct displaced_step_closure *, | 330 struct displaced_step_closure *, |
324 CORE_ADDR, CORE_ADDR, struct regcache *); | 331 CORE_ADDR, CORE_ADDR, struct regcache *); |
325 | 332 |
326 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode. */ | 333 /* Return the bit mask in ARM_PS_REGNUM that indicates Thumb mode. */ |
327 extern int arm_psr_thumb_bit (struct gdbarch *); | 334 extern int arm_psr_thumb_bit (struct gdbarch *); |
328 | 335 |
329 /* Is the instruction at the given memory address a Thumb or ARM | 336 /* Is the instruction at the given memory address a Thumb or ARM |
330 instruction? */ | 337 instruction? */ |
331 extern int arm_pc_is_thumb (struct gdbarch *, CORE_ADDR); | 338 extern int arm_pc_is_thumb (struct gdbarch *, CORE_ADDR); |
332 | 339 |
| 340 extern int arm_process_record (struct gdbarch *gdbarch, |
| 341 struct regcache *regcache, CORE_ADDR addr); |
333 /* Functions exported from armbsd-tdep.h. */ | 342 /* Functions exported from armbsd-tdep.h. */ |
334 | 343 |
335 /* Return the appropriate register set for the core section identified | 344 /* Return the appropriate register set for the core section identified |
336 by SECT_NAME and SECT_SIZE. */ | 345 by SECT_NAME and SECT_SIZE. */ |
337 | 346 |
338 extern const struct regset * | 347 extern const struct regset * |
339 armbsd_regset_from_core_section (struct gdbarch *gdbarch, | 348 armbsd_regset_from_core_section (struct gdbarch *gdbarch, |
340 const char *sect_name, size_t sect_size); | 349 const char *sect_name, size_t sect_size); |
341 | 350 |
342 /* Target descriptions. */ | 351 /* Target descriptions. */ |
343 extern struct target_desc *tdesc_arm_with_m; | 352 extern struct target_desc *tdesc_arm_with_m; |
344 extern struct target_desc *tdesc_arm_with_iwmmxt; | 353 extern struct target_desc *tdesc_arm_with_iwmmxt; |
345 extern struct target_desc *tdesc_arm_with_vfpv2; | 354 extern struct target_desc *tdesc_arm_with_vfpv2; |
346 extern struct target_desc *tdesc_arm_with_vfpv3; | 355 extern struct target_desc *tdesc_arm_with_vfpv3; |
347 extern struct target_desc *tdesc_arm_with_neon; | 356 extern struct target_desc *tdesc_arm_with_neon; |
348 | 357 |
349 #endif /* arm-tdep.h */ | 358 #endif /* arm-tdep.h */ |
OLD | NEW |