X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fppc-tdep.h;h=3d1e3279e6d400b70284efd184e7c820489068be;hb=858c9d13240e695bc3b750368f5d4e524b12112e;hp=9be9666a7312a188690287342dfa14158aa8b73f;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/ppc-tdep.h b/gdb/ppc-tdep.h index 9be9666a73..3d1e3279e6 100644 --- a/gdb/ppc-tdep.h +++ b/gdb/ppc-tdep.h @@ -1,6 +1,6 @@ /* Target-dependent code for GDB, the GNU debugger. - Copyright (C) 2000-2013 Free Software Foundation, Inc. + Copyright (C) 2000-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -76,7 +76,8 @@ int ppc_altivec_support_p (struct gdbarch *gdbarch); /* Return non-zero if the architecture described by GDBARCH has VSX registers (vsr0 --- vsr63). */ int vsx_support_p (struct gdbarch *gdbarch); -int ppc_deal_with_atomic_sequence (struct frame_info *frame); +std::vector ppc_deal_with_atomic_sequence + (struct regcache *regcache); /* Register set description. */ @@ -182,6 +183,15 @@ extern void ppc_collect_vsxregset (const struct regset *regset, /* Private data that this module attaches to struct gdbarch. */ +/* ELF ABI version used by the inferior. */ +enum powerpc_elf_abi +{ + POWERPC_ELF_AUTO, + POWERPC_ELF_V1, + POWERPC_ELF_V2, + POWERPC_ELF_LAST +}; + /* Vector ABI used by the inferior. */ enum powerpc_vector_abi { @@ -192,11 +202,25 @@ enum powerpc_vector_abi POWERPC_VEC_LAST }; +/* long double ABI version used by the inferior. */ +enum powerpc_long_double_abi +{ + POWERPC_LONG_DOUBLE_AUTO, + POWERPC_LONG_DOUBLE_IBM128, + POWERPC_LONG_DOUBLE_IEEE128, + POWERPC_LONG_DOUBLE_LAST +}; + struct gdbarch_tdep { int wordsize; /* Size in bytes of fixed-point word. */ int soft_float; /* Avoid FP registers for arguments? */ + enum powerpc_elf_abi elf_abi; /* ELF ABI version. */ + + /* Format to use for the "long double" data type. */ + enum powerpc_long_double_abi long_double_abi; + /* How to pass vector arguments. Never set to AUTO or LAST. */ enum powerpc_vector_abi vector_abi; @@ -248,6 +272,8 @@ struct gdbarch_tdep /* ISA-specific types. */ struct type *ppc_builtin_type_vec64; struct type *ppc_builtin_type_vec128; + + int (*ppc_syscall_record) (struct regcache *regcache); }; @@ -291,6 +317,27 @@ enum { PPC_NUM_REGS }; +/* Big enough to hold the size of the largest register in bytes. */ +#define PPC_MAX_REGISTER_SIZE 64 + +/* An instruction to match. */ + +struct ppc_insn_pattern +{ + unsigned int mask; /* mask the insn with this... */ + unsigned int data; /* ...and see if it matches this. */ + int optional; /* If non-zero, this insn may be absent. */ +}; + +extern int ppc_insns_match_pattern (struct frame_info *frame, CORE_ADDR pc, + struct ppc_insn_pattern *pattern, + unsigned int *insns); +extern CORE_ADDR ppc_insn_d_field (unsigned int insn); + +extern CORE_ADDR ppc_insn_ds_field (unsigned int insn); + +extern int ppc_process_record (struct gdbarch *gdbarch, + struct regcache *regcache, CORE_ADDR addr); /* Instruction size. */ #define PPC_INSN_SIZE 4