static struct core_fns * sniff_core_bfd (bfd *abfd) { struct core_fns *cf; struct core_fns *yummy = NULL; int matches = 0;; /* Don't sniff if we have support for register sets in CORE_GDBARCH. */ if (core_gdbarch && gdbarch_iterate_over_regset_sections_p (core_gdbarch)) return NULL; for (cf = core_file_fns; cf != NULL; cf = cf->next) { if (cf->core_sniffer (cf, abfd)) { yummy = cf; matches++; } } if (matches > 1) { warning (_("\"%s\": ambiguous core format, %d handlers match"), bfd_get_filename (abfd), matches); } else if (matches == 0) error (_("\"%s\": no core file handler recognizes format"), bfd_get_filename (abfd)); return (yummy); }
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); }
static char * fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size) { struct regcache *regcache = get_current_regcache (); char *note_data; Elf_Internal_Ehdr *i_ehdrp; struct fbsd_collect_regset_section_cb_data data; /* Put a "FreeBSD" label in the ELF header. */ i_ehdrp = elf_elfheader (obfd); i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD; gdb_assert (gdbarch_iterate_over_regset_sections_p (gdbarch)); data.regcache = regcache; data.obfd = obfd; data.note_data = NULL; data.note_size = note_size; target_fetch_registers (regcache, -1); gdbarch_iterate_over_regset_sections (gdbarch, fbsd_collect_regset_section_cb, &data, regcache); note_data = data.note_data; if (get_exec_file (0)) { const char *fname = lbasename (get_exec_file (0)); char *psargs = xstrdup (fname); if (get_inferior_args ()) psargs = reconcat (psargs, psargs, " ", get_inferior_args (), (char *) NULL); note_data = elfcore_write_prpsinfo (obfd, note_data, note_size, fname, psargs); } return note_data; }