aboutsummaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorAttilio Rao <attilio@FreeBSD.org>2010-11-22 14:42:13 +0000
committerAttilio Rao <attilio@FreeBSD.org>2010-11-22 14:42:13 +0000
commit7f08176ee8b672feebd8a12572b43dddcb88046e (patch)
tree8831ac1227984e07e03c6ac1b5cf30bba847610f /usr.bin
parent7a3923c00eb666a0fe0aedeef6fbfb9b6573acb1 (diff)
Notes
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/gcore/elfcore.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/usr.bin/gcore/elfcore.c b/usr.bin/gcore/elfcore.c
index 5d655c3d6832..9da22d7cd8fd 100644
--- a/usr.bin/gcore/elfcore.c
+++ b/usr.bin/gcore/elfcore.c
@@ -284,10 +284,12 @@ elf_getstatus(pid_t pid, prpsinfo_t *psinfo)
static void
elf_puthdr(pid_t pid, vm_map_entry_t map, void *dst, size_t *off, int numsegs)
{
+ struct ptrace_lwpinfo lwpinfo;
struct {
prstatus_t status;
prfpregset_t fpregset;
prpsinfo_t psinfo;
+ thrmisc_t thrmisc;
} *tempdata;
size_t ehoff;
size_t phoff;
@@ -300,6 +302,7 @@ elf_puthdr(pid_t pid, vm_map_entry_t map, void *dst, size_t *off, int numsegs)
prstatus_t *status;
prfpregset_t *fpregset;
prpsinfo_t *psinfo;
+ thrmisc_t *thrmisc;
ehoff = *off;
*off += sizeof(Elf_Ehdr);
@@ -315,11 +318,13 @@ elf_puthdr(pid_t pid, vm_map_entry_t map, void *dst, size_t *off, int numsegs)
status = &tempdata->status;
fpregset = &tempdata->fpregset;
psinfo = &tempdata->psinfo;
+ thrmisc = &tempdata->thrmisc;
} else {
tempdata = NULL;
status = NULL;
fpregset = NULL;
psinfo = NULL;
+ thrmisc = NULL;
}
errno = 0;
@@ -356,11 +361,17 @@ elf_puthdr(pid_t pid, vm_map_entry_t map, void *dst, size_t *off, int numsegs)
ptrace(PT_GETREGS, tids[i], (void *)&status->pr_reg, 0);
ptrace(PT_GETFPREGS, tids[i], (void *)fpregset, 0);
+ ptrace(PT_LWPINFO, tids[i], (void *)&lwpinfo,
+ sizeof(lwpinfo));
+ memset(&thrmisc->_pad, 0, sizeof(thrmisc->_pad));
+ strcpy(thrmisc->pr_tname, lwpinfo.pl_tdname);
}
elf_putnote(dst, off, "FreeBSD", NT_PRSTATUS, status,
sizeof *status);
elf_putnote(dst, off, "FreeBSD", NT_FPREGSET, fpregset,
sizeof *fpregset);
+ elf_putnote(dst, off, "FreeBSD", NT_THRMISC, thrmisc,
+ sizeof *thrmisc);
}
notesz = *off - noteoff;