static void sparc_ravenscar_store_registers (struct regcache *regcache, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int buf_size = register_size (gdbarch, regnum); char buf [buf_size]; ULONGEST register_address; if (register_in_thread_descriptor_p (regnum)) register_address = ptid_get_tid (inferior_ptid) + sparc_register_offsets [regnum]; else if (register_on_stack_p (regnum)) { regcache_cooked_read_unsigned (regcache, SPARC_SP_REGNUM, ®ister_address); register_address += sparc_register_offsets [regnum]; } else return; regcache_raw_collect (regcache, regnum, buf); write_memory (register_address, buf, buf_size); }
static void ppc_ravenscar_generic_fetch_registers (const struct ravenscar_reg_info *reg_info, struct regcache *regcache, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); const int sp_regnum = gdbarch_sp_regnum (gdbarch); const int num_regs = gdbarch_num_regs (gdbarch); int current_regnum; CORE_ADDR current_address; CORE_ADDR thread_descriptor_address; /* The tid is the thread_id field, which is a pointer to the thread. */ thread_descriptor_address = (CORE_ADDR) ptid_get_tid (inferior_ptid); /* Read registers. */ for (current_regnum = 0; current_regnum < num_regs; current_regnum++) { if (register_in_thread_descriptor_p (reg_info, current_regnum)) { current_address = thread_descriptor_address + reg_info->context_offsets[current_regnum]; supply_register_at_address (regcache, current_regnum, current_address); } } }
static void ppc_ravenscar_generic_store_registers (const struct ravenscar_reg_info *reg_info, struct regcache *regcache, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); int buf_size = register_size (gdbarch, regnum); gdb_byte buf[buf_size]; ULONGEST register_address; if (register_in_thread_descriptor_p (reg_info, regnum)) register_address = ptid_get_tid (inferior_ptid) + reg_info->context_offsets [regnum]; else return; regcache_raw_collect (regcache, regnum, buf); write_memory (register_address, buf, buf_size); }
static void sparc_ravenscar_fetch_registers (struct regcache *regcache, int regnum) { struct gdbarch *gdbarch = get_regcache_arch (regcache); const int sp_regnum = gdbarch_sp_regnum (gdbarch); const int num_regs = gdbarch_num_regs (gdbarch); int current_regnum; CORE_ADDR current_address; CORE_ADDR thread_descriptor_address; ULONGEST stack_address; /* The tid is the thread_id field, which is a pointer to the thread. */ thread_descriptor_address = (CORE_ADDR) ptid_get_tid (inferior_ptid); /* Read the saved SP in the context buffer. */ current_address = thread_descriptor_address + sparc_register_offsets [sp_regnum]; supply_register_at_address (regcache, sp_regnum, current_address); regcache_cooked_read_unsigned (regcache, sp_regnum, &stack_address); /* Read registers. */ for (current_regnum = 0; current_regnum < num_regs; current_regnum ++) { if (register_in_thread_descriptor_p (current_regnum)) { current_address = thread_descriptor_address + sparc_register_offsets [current_regnum]; supply_register_at_address (regcache, current_regnum, current_address); } else if (register_on_stack_p (current_regnum)) { current_address = stack_address + sparc_register_offsets [current_regnum]; supply_register_at_address (regcache, current_regnum, current_address); } } }