gdb/gdbserver/lynx-ppc-low.c - gdb
Global variables defined
Data types defined
Functions defined
Macros defined
Source code
- #include "server.h"
- #include "lynx-low.h"
- #include <stdint.h>
- #include <limits.h>
- #include <sys/ptrace.h>
- typedef struct usr_econtext_s
- {
- uint32_t uec_iregs[32];
- uint32_t uec_inum;
- uint32_t uec_srr0;
- uint32_t uec_srr1;
- uint32_t uec_lr;
- uint32_t uec_ctr;
- uint32_t uec_cr;
- uint32_t uec_xer;
- uint32_t uec_dar;
- uint32_t uec_mq;
- uint32_t uec_msr;
- uint32_t uec_sregs[16];
- uint32_t uec_ss_count;
- uint32_t uec_ss_addr1;
- uint32_t uec_ss_addr2;
- uint32_t uec_ss_code1;
- uint32_t uec_ss_code2;
- } usr_econtext_t;
- typedef struct usr_fcontext_s
- {
- uint64_t ufc_freg[32];
- uint32_t ufc_fpscr[2];
- } usr_fcontext_t;
- #define R0_REGNUM 0
- #define F0_REGNUM 32
- #define PC_REGNUM 64
- #define MSR_REGNUM 65
- #define CR_REGNUM 66
- #define LR_REGNUM 67
- #define CTR_REGNUM 68
- #define XER_REGNUM 69
- #define FPSCR_REGNUM 70
- extern void init_registers_powerpc_32 (void);
- extern const struct target_desc *tdesc_powerpc_32;
- static void
- lynx_ppc_fill_gregset (struct regcache *regcache, char *buf)
- {
- int i;
-
- for (i = 0; i < 32; i++)
- collect_register (regcache, R0_REGNUM + i,
- buf + offsetof (usr_econtext_t, uec_iregs[i]));
-
- collect_register (regcache, PC_REGNUM,
- buf + offsetof (usr_econtext_t, uec_srr0));
- collect_register (regcache, MSR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_srr1));
- collect_register (regcache, CR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_cr));
- collect_register (regcache, LR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_lr));
- collect_register (regcache, CTR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_ctr));
- collect_register (regcache, XER_REGNUM,
- buf + offsetof (usr_econtext_t, uec_xer));
- }
- static void
- lynx_ppc_store_gregset (struct regcache *regcache, const char *buf)
- {
- int i;
-
- for (i = 0; i < 32; i++)
- supply_register (regcache, R0_REGNUM + i,
- buf + offsetof (usr_econtext_t, uec_iregs[i]));
-
- supply_register (regcache, PC_REGNUM,
- buf + offsetof (usr_econtext_t, uec_srr0));
- supply_register (regcache, MSR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_srr1));
- supply_register (regcache, CR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_cr));
- supply_register (regcache, LR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_lr));
- supply_register (regcache, CTR_REGNUM,
- buf + offsetof (usr_econtext_t, uec_ctr));
- supply_register (regcache, XER_REGNUM,
- buf + offsetof (usr_econtext_t, uec_xer));
- }
- static void
- lynx_ppc_fill_fpregset (struct regcache *regcache, char *buf)
- {
- int i;
-
- for (i = 0; i < 32; i++)
- collect_register (regcache, F0_REGNUM + i,
- buf + offsetof (usr_fcontext_t, ufc_freg[i]));
-
- collect_register (regcache, FPSCR_REGNUM,
- buf + offsetof (usr_fcontext_t, ufc_fpscr));
- }
- static void
- lynx_ppc_store_fpregset (struct regcache *regcache, const char *buf)
- {
- int i;
-
- for (i = 0; i < 32; i++)
- supply_register (regcache, F0_REGNUM + i,
- buf + offsetof (usr_fcontext_t, ufc_freg[i]));
-
- supply_register (regcache, FPSCR_REGNUM,
- buf + offsetof (usr_fcontext_t, ufc_fpscr));
- }
- static void
- lynx_ppc_arch_setup (void)
- {
- init_registers_powerpc_32 ();
- lynx_tdesc = tdesc_powerpc_32;
- }
- struct lynx_regset_info lynx_target_regsets[] = {
-
- {PTRACE_GETREGS, PTRACE_SETREGS, sizeof(usr_econtext_t),
- lynx_ppc_fill_gregset, lynx_ppc_store_gregset},
-
- { PTRACE_GETFPREGS, PTRACE_SETFPREGS, sizeof(usr_fcontext_t),
- lynx_ppc_fill_fpregset, lynx_ppc_store_fpregset },
-
- {0, 0, -1, NULL, NULL }
- };
- struct lynx_target_ops the_low_target = {
- lynx_ppc_arch_setup,
- };