/* Common target dependent code for GDB on ARM systems.
- Copyright (C) 2002-2015 Free Software Foundation, Inc.
+ Copyright (C) 2002-2017 Free Software Foundation, Inc.
This file is part of GDB.
struct gdbarch;
struct regset;
struct address_space;
+struct get_next_pcs;
+struct arm_get_next_pcs;
+struct gdb_get_next_pcs;
#include "arch/arm.h"
+#include "infrun.h"
+
+#include <vector>
/* Say how long FP registers are. Used for documentation purposes and
code readability in this header. IEEE extended doubles are 80
struct type *neon_double_type;
struct type *neon_quad_type;
- /* Return the expected next PC if the program is stopped at a syscall
- instruction. */
- CORE_ADDR (*syscall_next_pc) (struct regcache *regcache);
-
/* syscall record. */
int (*arm_syscall_record) (struct regcache *regcache, unsigned long svc_number);
};
sequence) and any scratch words, etc. */
#define DISPLACED_MODIFIED_INSNS 8
-struct displaced_step_closure
+struct arm_displaced_step_closure : public displaced_step_closure
{
ULONGEST tmp[DISPLACED_TEMPS];
int rd;
/* If non-NULL, override generic SVC handling (e.g. for a particular
OS). */
int (*copy_svc_os) (struct gdbarch *gdbarch, struct regcache *regs,
- struct displaced_step_closure *dsc);
+ arm_displaced_step_closure *dsc);
} svc;
} u;
CORE_ADDR insn_addr;
CORE_ADDR scratch_base;
void (*cleanup) (struct gdbarch *, struct regcache *,
- struct displaced_step_closure *);
+ arm_displaced_step_closure *);
};
/* Values for the WRITE_PC argument to displaced_write_reg. If the register
extern void
arm_process_displaced_insn (struct gdbarch *gdbarch, CORE_ADDR from,
CORE_ADDR to, struct regcache *regs,
- struct displaced_step_closure *dsc);
+ arm_displaced_step_closure *dsc);
extern void
arm_displaced_init_closure (struct gdbarch *gdbarch, CORE_ADDR from,
- CORE_ADDR to, struct displaced_step_closure *dsc);
+ CORE_ADDR to, arm_displaced_step_closure *dsc);
extern ULONGEST
- displaced_read_reg (struct regcache *regs, struct displaced_step_closure *dsc,
+ displaced_read_reg (struct regcache *regs, arm_displaced_step_closure *dsc,
int regno);
extern void
displaced_write_reg (struct regcache *regs,
- struct displaced_step_closure *dsc, int regno,
+ arm_displaced_step_closure *dsc, int regno,
ULONGEST val, enum pc_write_style write_pc);
CORE_ADDR arm_skip_stub (struct frame_info *, CORE_ADDR);
-CORE_ADDR arm_get_next_pc (struct regcache *regcache, CORE_ADDR pc);
-void arm_insert_single_step_breakpoint (struct gdbarch *,
- struct address_space *, CORE_ADDR);
-int arm_deal_with_atomic_sequence (struct regcache *);
-int arm_software_single_step (struct frame_info *);
+
+ULONGEST arm_get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr,
+ int len,
+ int byte_order);
+
+CORE_ADDR arm_get_next_pcs_addr_bits_remove (struct arm_get_next_pcs *self,
+ CORE_ADDR val);
+
+int arm_get_next_pcs_is_thumb (struct arm_get_next_pcs *self);
+
+std::vector<CORE_ADDR> arm_software_single_step (struct regcache *);
int arm_is_thumb (struct regcache *regcache);
int arm_frame_is_thumb (struct frame_info *frame);
-extern struct displaced_step_closure *
- arm_displaced_step_copy_insn (struct gdbarch *, CORE_ADDR, CORE_ADDR,
- struct regcache *);
extern void arm_displaced_step_fixup (struct gdbarch *,
struct displaced_step_closure *,
CORE_ADDR, CORE_ADDR, struct regcache *);
extern int arm_process_record (struct gdbarch *gdbarch,
struct regcache *regcache, CORE_ADDR addr);
-/* Functions exported from armbsd-tdep.h. */
+/* Functions exported from arm-bsd-tdep.h. */
/* Return the appropriate register set for the core section identified
by SECT_NAME and SECT_SIZE. */