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 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); } } }