/* Dynamic architecture support for GDB, the GNU debugger.
- Copyright (C) 1998-2015 Free Software Foundation, Inc.
+ Copyright (C) 1998-2016 Free Software Foundation, Inc.
This file is part of GDB.
struct type;
struct gdbarch_info;
+#define GDBARCH_BREAKPOINT_MANIPULATION(ARCH,BREAK_INSN) \
+ static int \
+ ARCH##_breakpoint_kind_from_pc (struct gdbarch *gdbarch, \
+ CORE_ADDR *pcptr) \
+ { \
+ return sizeof (BREAK_INSN); \
+ } \
+ static const gdb_byte * \
+ ARCH##_sw_breakpoint_from_kind (struct gdbarch *gdbarch, \
+ int kind, int *size) \
+ { \
+ *size = kind; \
+ return BREAK_INSN; \
+ }
+
+#define SET_GDBARCH_BREAKPOINT_MANIPULATION(ARCH) \
+ set_gdbarch_breakpoint_kind_from_pc (gdbarch, \
+ ARCH##_breakpoint_kind_from_pc); \
+ set_gdbarch_sw_breakpoint_from_kind (gdbarch, \
+ ARCH##_sw_breakpoint_from_kind)
+
+#define GDBARCH_BREAKPOINT_MANIPULATION_ENDIAN(ARCH, \
+ LITTLE_BREAK_INSN, \
+ BIG_BREAK_INSN) \
+ static int \
+ ARCH##_breakpoint_kind_from_pc (struct gdbarch *gdbarch, \
+ CORE_ADDR *pcptr) \
+ { \
+ gdb_static_assert (ARRAY_SIZE (LITTLE_BREAK_INSN) \
+ == ARRAY_SIZE (BIG_BREAK_INSN)); \
+ return sizeof (BIG_BREAK_INSN); \
+ } \
+ static const gdb_byte * \
+ ARCH##_sw_breakpoint_from_kind (struct gdbarch *gdbarch, \
+ int kind, int *size) \
+ { \
+ *size = kind; \
+ if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) \
+ return BIG_BREAK_INSN; \
+ else \
+ return LITTLE_BREAK_INSN; \
+ }
+
/* An implementation of gdbarch_displaced_step_copy_insn for
processors that don't need to modify the instruction before
single-stepping the displaced copy.
extern gdbarch_virtual_frame_pointer_ftype legacy_virtual_frame_pointer;
+/* Default implementation of gdbarch_floatformat_for_type. */
+extern const struct floatformat **
+ default_floatformat_for_type (struct gdbarch *gdbarch,
+ const char *name, int len);
+
extern CORE_ADDR generic_skip_trampoline_code (struct frame_info *frame,
CORE_ADDR pc);
extern int generic_stack_frame_destroyed_p (struct gdbarch *gdbarch,
CORE_ADDR pc);
+extern int default_code_of_frame_writable (struct gdbarch *gdbarch,
+ struct frame_info *frame);
+
/* By default, registers are not convertible. */
extern int generic_convert_register_p (struct gdbarch *gdbarch, int regnum,
struct type *type);
extern int default_has_shared_address_space (struct gdbarch *);
extern int default_fast_tracepoint_valid_at (struct gdbarch *gdbarch,
- CORE_ADDR addr,
- int *isize, char **msg);
+ CORE_ADDR addr, char **msg);
-extern void default_remote_breakpoint_from_pc (struct gdbarch *,
- CORE_ADDR *pcptr, int *kindptr);
+extern const gdb_byte *default_breakpoint_from_pc (struct gdbarch *gdbarch,
+ CORE_ADDR *pcptr,
+ int *lenptr);
extern void default_gen_return_address (struct gdbarch *gdbarch,
struct agent_expr *ax,
extern const char *default_gnu_triplet_regexp (struct gdbarch *gdbarch);
extern int default_addressable_memory_unit_size (struct gdbarch *gdbarch);
+extern void default_guess_tracepoint_registers (struct gdbarch *gdbarch,
+ struct regcache *regcache,
+ CORE_ADDR addr);
+
#endif