summaryrefslogtreecommitdiffstats
path: root/contrib/binutils/bfd
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2010-11-22 14:42:13 +0000
committerattilio <attilio@FreeBSD.org>2010-11-22 14:42:13 +0000
commit7718cbcbf47164ddaa66a748a050f670b3b37e1d (patch)
tree8831ac1227984e07e03c6ac1b5cf30bba847610f /contrib/binutils/bfd
parent225a98d4466b7d72ce67e249a3976b499437e798 (diff)
downloadFreeBSD-src-7718cbcbf47164ddaa66a748a050f670b3b37e1d.zip
FreeBSD-src-7718cbcbf47164ddaa66a748a050f670b3b37e1d.tar.gz
Add the ability for GDB to printout the thread name along with other
thread specific informations. In order to do that, and in order to avoid KBI breakage with existing infrastructure the following semantic is implemented: - For live programs, a new member to the PT_LWPINFO is added (pl_tdname) - For cores, a new ELF note is added (NT_THRMISC) that can be used for storing thread specific, miscellaneous, informations. Right now it is just popluated with a thread name. GDB, then, retrieves the correct informations from the corefile via the BFD interface, as it groks the ELF notes and create appropriate pseudo-sections. Sponsored by: Sandvine Incorporated Tested by: gianni Discussed with: dim, kan, kib MFC after: 2 weeks
Diffstat (limited to 'contrib/binutils/bfd')
-rw-r--r--contrib/binutils/bfd/elf-bfd.h2
-rw-r--r--contrib/binutils/bfd/elf.c38
2 files changed, 40 insertions, 0 deletions
diff --git a/contrib/binutils/bfd/elf-bfd.h b/contrib/binutils/bfd/elf-bfd.h
index 110dd69..0a01867 100644
--- a/contrib/binutils/bfd/elf-bfd.h
+++ b/contrib/binutils/bfd/elf-bfd.h
@@ -1673,6 +1673,8 @@ extern char * elfcore_write_pstatus
(bfd *, char *, int *, long, int, const void *);
extern char *elfcore_write_prfpreg
(bfd *, char *, int *, const void *, int);
+extern char *elfcore_write_thrmisc
+ (bfd *, char *, int *, const char *, int);
extern char *elfcore_write_prxfpreg
(bfd *, char *, int *, const void *, int);
extern char *elfcore_write_lwpstatus
diff --git a/contrib/binutils/bfd/elf.c b/contrib/binutils/bfd/elf.c
index 2b16f86..2f4728f 100644
--- a/contrib/binutils/bfd/elf.c
+++ b/contrib/binutils/bfd/elf.c
@@ -6316,6 +6316,12 @@ _bfd_elf_rel_vtable_reloc_fn
#ifdef HAVE_SYS_PROCFS_H
# include <sys/procfs.h>
+
+/* Define HAVE_THRMISC_T for consistency with other similar GNU-type stubs. */
+#undef HAVE_THRMISC_T
+#if defined (THRMISC_VERSION)
+#define HAVE_THRMISC_T 1
+#endif
#endif
/* FIXME: this is kinda wrong, but it's what gdb wants. */
@@ -6497,6 +6503,16 @@ elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note)
return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note);
}
+#if defined (HAVE_THRMISC_T)
+
+static bfd_boolean
+elfcore_grok_thrmisc (bfd *abfd, Elf_Internal_Note *note)
+{
+ return elfcore_make_note_pseudosection (abfd, ".tname", note);
+}
+
+#endif /* defined (HAVE_THRMISC_T) */
+
#if defined (HAVE_PRPSINFO_T)
typedef prpsinfo_t elfcore_psinfo_t;
#if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */
@@ -6863,6 +6879,12 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note)
return TRUE;
}
+
+#if defined (HAVE_THRMISC_T)
+ case NT_THRMISC:
+ return elfcore_grok_thrmisc (abfd, note);
+#endif
+
}
}
@@ -7245,6 +7267,22 @@ elfcore_write_prfpreg (bfd *abfd,
}
char *
+elfcore_write_thrmisc (bfd *abfd,
+ char *buf,
+ int *bufsiz,
+ const char *tname,
+ int size)
+{
+#if defined (HAVE_THRMISC_T)
+ char *note_name = "CORE";
+ return elfcore_write_note (abfd, buf, bufsiz,
+ note_name, NT_THRMISC, tname, size);
+#else
+ return buf;
+#endif
+}
+
+char *
elfcore_write_prxfpreg (bfd *abfd,
char *buf,
int *bufsiz,
OpenPOWER on IntegriCloud