Пример #1
0
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);
}
Пример #2
0
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);
}