static void get_core_registers (struct target_ops *ops, struct regcache *regcache, int regno) { struct core_regset_section *sect_list; int i; if (!(core_gdbarch && gdbarch_regset_from_core_section_p (core_gdbarch)) && (core_vec == NULL || core_vec->core_read_registers == NULL)) { fprintf_filtered (gdb_stderr, "Can't fetch registers from this type of core file\n"); return; } sect_list = gdbarch_core_regset_sections (get_regcache_arch (regcache)); if (sect_list) while (sect_list->sect_name != NULL) { if (strcmp (sect_list->sect_name, ".reg") == 0) get_core_register_section (regcache, sect_list->sect_name, 0, sect_list->human_name, 1); else if (strcmp (sect_list->sect_name, ".reg2") == 0) get_core_register_section (regcache, sect_list->sect_name, 2, sect_list->human_name, 0); else get_core_register_section (regcache, sect_list->sect_name, 3, sect_list->human_name, 0); sect_list++; } else { get_core_register_section (regcache, ".reg", 0, "general-purpose", 1); get_core_register_section (regcache, ".reg2", 2, "floating-point", 0); } /* Mark all registers not found in the core as unavailable. */ for (i = 0; i < gdbarch_num_regs (get_regcache_arch (regcache)); i++) if (regcache_register_status (regcache, i) == REG_UNKNOWN) regcache_raw_supply (regcache, i, NULL); }
void core_target::fetch_registers (struct regcache *regcache, int regno) { int i; struct gdbarch *gdbarch; if (!(m_core_gdbarch != nullptr && gdbarch_iterate_over_regset_sections_p (m_core_gdbarch)) && (m_core_vec == NULL || m_core_vec->core_read_registers == NULL)) { fprintf_filtered (gdb_stderr, "Can't fetch registers from this type of core file\n"); return; } gdbarch = regcache->arch (); if (gdbarch_iterate_over_regset_sections_p (gdbarch)) { get_core_registers_cb_data data = { this, regcache }; gdbarch_iterate_over_regset_sections (gdbarch, get_core_registers_cb, (void *) &data, NULL); } else { get_core_register_section (regcache, NULL, ".reg", 0, 0, "general-purpose", 1); get_core_register_section (regcache, NULL, ".reg2", 0, 2, "floating-point", 0); } /* Mark all registers not found in the core as unavailable. */ for (i = 0; i < gdbarch_num_regs (regcache->arch ()); i++) if (regcache->get_register_status (i) == REG_UNKNOWN) regcache->raw_supply (i, NULL); }