do_cleanups (cleanup);
return 0;
}
-
-static int
-find_signalled_thread (struct thread_info *info, void *data)
-{
- if (info->suspend.stop_signal != GDB_SIGNAL_0
- && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid))
- return 1;
-
- return 0;
-}
-
-static enum gdb_signal
-find_stop_signal (void)
-{
- struct thread_info *info =
- iterate_over_threads (find_signalled_thread, NULL);
-
- if (info)
- return info->suspend.stop_signal;
- else
- return GDB_SIGNAL_0;
-}
-
-/* Create appropriate note sections for a corefile, returning them in
- allocated memory. */
-
-char *
-fbsd_make_corefile_notes (struct target_ops *self, bfd *obfd, int *note_size)
-{
- const struct regcache *regcache = get_current_regcache ();
- struct gdbarch *gdbarch = get_regcache_arch (regcache);
- gregset_t gregs;
- fpregset_t fpregs;
- char *note_data = NULL;
- Elf_Internal_Ehdr *i_ehdrp;
- const struct regset *regset;
- size_t size;
-
- /* Put a "FreeBSD" label in the ELF header. */
- i_ehdrp = elf_elfheader (obfd);
- i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_FREEBSD;
-
- gdb_assert (gdbarch_regset_from_core_section_p (gdbarch));
-
- size = sizeof gregs;
- regset = gdbarch_regset_from_core_section (gdbarch, ".reg", size);
- gdb_assert (regset && regset->collect_regset);
- regset->collect_regset (regset, regcache, -1, &gregs, size);
-
- note_data = elfcore_write_prstatus (obfd, note_data, note_size,
- ptid_get_pid (inferior_ptid),
- find_stop_signal (), &gregs);
-
- size = sizeof fpregs;
- regset = gdbarch_regset_from_core_section (gdbarch, ".reg2", size);
- gdb_assert (regset && regset->collect_regset);
- regset->collect_regset (regset, regcache, -1, &fpregs, size);
-
- note_data = elfcore_write_prfpreg (obfd, note_data, note_size,
- &fpregs, sizeof (fpregs));
-
- 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;
-}