diff mbox

[v3,1/6] Add support to readelf for reading FreeBSD ELF core notes.

Message ID 1453084047-16175-2-git-send-email-jhb@FreeBSD.org
State New
Headers show

Commit Message

John Baldwin Jan. 18, 2016, 2:27 a.m. UTC
binutils/ChangeLog:

	* readelf.c (get_freebsd_elfcore_note_type): New
	(process_note): Add support for FreeBSD core notes.

include/ChangeLog:

	* elf/common.h (NT_FREEBSD_THRMISC): Define.
	(NT_FREEBSD_PROCSTAT_PROC): Define.
	(NT_FREEBSD_PROCSTAT_FILES): Define.
	(NT_FREEBSD_PROCSTAT_VMMAP): Define.
	(NT_FREEBSD_PROCSTAT_GROUPS): Define.
	(NT_FREEBSD_PROCSTAT_UMASK): Define.
	(NT_FREEBSD_PROCSTAT_RLIMIT): Define.
	(NT_FREEBSD_PROCSTAT_OSREL): Define.
	(NT_FREEBSD_PROCSTAT_PSSTRINGS): Define.
	(NT_FREEBSD_PROCSTAT_AUXV): Define.
---
 binutils/ChangeLog   |  5 +++++
 binutils/readelf.c   | 35 +++++++++++++++++++++++++++++++++++
 include/ChangeLog    | 13 +++++++++++++
 include/elf/common.h | 14 ++++++++++++++
 4 files changed, 67 insertions(+)

Comments

Christophe Lyon Jan. 19, 2016, 4:50 p.m. UTC | #1
On 18 January 2016 at 03:27, John Baldwin <jhb@freebsd.org> wrote:
> binutils/ChangeLog:
>
>         * readelf.c (get_freebsd_elfcore_note_type): New
>         (process_note): Add support for FreeBSD core notes.
>
> include/ChangeLog:
>
>         * elf/common.h (NT_FREEBSD_THRMISC): Define.
>         (NT_FREEBSD_PROCSTAT_PROC): Define.
>         (NT_FREEBSD_PROCSTAT_FILES): Define.
>         (NT_FREEBSD_PROCSTAT_VMMAP): Define.
>         (NT_FREEBSD_PROCSTAT_GROUPS): Define.
>         (NT_FREEBSD_PROCSTAT_UMASK): Define.
>         (NT_FREEBSD_PROCSTAT_RLIMIT): Define.
>         (NT_FREEBSD_PROCSTAT_OSREL): Define.
>         (NT_FREEBSD_PROCSTAT_PSSTRINGS): Define.
>         (NT_FREEBSD_PROCSTAT_AUXV): Define.
> ---
>  binutils/ChangeLog   |  5 +++++
>  binutils/readelf.c   | 35 +++++++++++++++++++++++++++++++++++
>  include/ChangeLog    | 13 +++++++++++++
>  include/elf/common.h | 14 ++++++++++++++
>  4 files changed, 67 insertions(+)
>
> diff --git a/binutils/ChangeLog b/binutils/ChangeLog
> index 21dcb2c..47773c9 100644
> --- a/binutils/ChangeLog
> +++ b/binutils/ChangeLog
> @@ -1,3 +1,8 @@
> +2016-01-09  John Baldwin  <jhb@FreeBSD.org>
> +
> +       * readelf.c (get_freebsd_elfcore_note_type): New
> +       (process_note): Add support for FreeBSD core notes.
> +
>  2016-01-01  Alan Modra  <amodra@gmail.com>
>
>         Update year range in copyright notice of all files.
> diff --git a/binutils/readelf.c b/binutils/readelf.c
> index 47ac1ad..fa9cda1 100644
> --- a/binutils/readelf.c
> +++ b/binutils/readelf.c
> @@ -15388,6 +15388,37 @@ process_netbsd_elf_note (Elf_Internal_Note * pnote)
>  }
>
>  static const char *
> +get_freebsd_elfcore_note_type (unsigned e_type)
> +{
> +  static char buff[64];

Hi,

This makes the build fail when using -Werror:

./../binutils/readelf.c: In function 'get_freebsd_elfcore_note_type':
../../binutils/readelf.c:15416:15: error: unused variable 'buff'
[-Werror=unused-variable]
static char buff[64];

Christophe.



> +
> +  switch (e_type)
> +    {
> +    case NT_FREEBSD_THRMISC:
> +      return _("NT_THRMISC (thrmisc structure)");
> +    case NT_FREEBSD_PROCSTAT_PROC:
> +      return _("NT_PROCSTAT_PROC (proc data)");
> +    case NT_FREEBSD_PROCSTAT_FILES:
> +      return _("NT_PROCSTAT_FILES (files data)");
> +    case NT_FREEBSD_PROCSTAT_VMMAP:
> +      return _("NT_PROCSTAT_VMMAP (vmmap data)");
> +    case NT_FREEBSD_PROCSTAT_GROUPS:
> +      return _("NT_PROCSTAT_GROUPS (groups data)");
> +    case NT_FREEBSD_PROCSTAT_UMASK:
> +      return _("NT_PROCSTAT_UMASK (umask data)");
> +    case NT_FREEBSD_PROCSTAT_RLIMIT:
> +      return _("NT_PROCSTAT_RLIMIT (rlimit data)");
> +    case NT_FREEBSD_PROCSTAT_OSREL:
> +      return _("NT_PROCSTAT_OSREL (osreldate data)");
> +    case NT_FREEBSD_PROCSTAT_PSSTRINGS:
> +      return _("NT_PROCSTAT_PSSTRINGS (ps_strings data)");
> +    case NT_FREEBSD_PROCSTAT_AUXV:
> +      return _("NT_PROCSTAT_AUXV (auxv data)");
> +    }
> +  return get_note_type (e_type);
> +}
> +
> +static const char *
>  get_netbsd_elfcore_note_type (unsigned e_type)
>  {
>    static char buff[64];
> @@ -15636,6 +15667,10 @@ process_note (Elf_Internal_Note * pnote)
>      /* GNU-specific object file notes.  */
>      nt = get_gnu_elf_note_type (pnote->type);
>
> +  else if (const_strneq (pnote->namedata, "FreeBSD"))
> +    /* FreeBSD-specific core file notes.  */
> +    nt = get_freebsd_elfcore_note_type (pnote->type);
> +
>    else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
>      /* NetBSD-specific core file notes.  */
>      nt = get_netbsd_elfcore_note_type (pnote->type);
> diff --git a/include/ChangeLog b/include/ChangeLog
> index 80fc4a8..7dadeba 100644
> --- a/include/ChangeLog
> +++ b/include/ChangeLog
> @@ -1,3 +1,16 @@
> +2016-01-16  John Baldwin  <jhb@FreeBSD.org>
> +
> +       * elf/common.h (NT_FREEBSD_THRMISC): Define.
> +       (NT_FREEBSD_PROCSTAT_PROC): Define.
> +       (NT_FREEBSD_PROCSTAT_FILES): Define.
> +       (NT_FREEBSD_PROCSTAT_VMMAP): Define.
> +       (NT_FREEBSD_PROCSTAT_GROUPS): Define.
> +       (NT_FREEBSD_PROCSTAT_UMASK): Define.
> +       (NT_FREEBSD_PROCSTAT_RLIMIT): Define.
> +       (NT_FREEBSD_PROCSTAT_OSREL): Define.
> +       (NT_FREEBSD_PROCSTAT_PSSTRINGS): Define.
> +       (NT_FREEBSD_PROCSTAT_AUXV): Define.
> +
>  2016-01-11  Nick Clifton  <nickc@redhat.com>
>
>         Import this change from GCC mainline:
> diff --git a/include/elf/common.h b/include/elf/common.h
> index ce506fc..767ad3e 100644
> --- a/include/elf/common.h
> +++ b/include/elf/common.h
> @@ -595,6 +595,20 @@
>  /* Note segment for SystemTap probes.  */
>  #define NT_STAPSDT     3
>
> +/* Note segments for core files on FreeBSD systems.  Note name is
> +   "FreeBSD".  */
> +
> +#define        NT_FREEBSD_THRMISC      7       /* Thread miscellaneous info. */
> +#define        NT_FREEBSD_PROCSTAT_PROC        8       /* Procstat proc data. */
> +#define        NT_FREEBSD_PROCSTAT_FILES       9       /* Procstat files data. */
> +#define        NT_FREEBSD_PROCSTAT_VMMAP       10      /* Procstat vmmap data. */
> +#define        NT_FREEBSD_PROCSTAT_GROUPS      11      /* Procstat groups data. */
> +#define        NT_FREEBSD_PROCSTAT_UMASK       12      /* Procstat umask data. */
> +#define        NT_FREEBSD_PROCSTAT_RLIMIT      13      /* Procstat rlimit data. */
> +#define        NT_FREEBSD_PROCSTAT_OSREL       14      /* Procstat osreldate data. */
> +#define        NT_FREEBSD_PROCSTAT_PSSTRINGS   15      /* Procstat ps_strings data. */
> +#define        NT_FREEBSD_PROCSTAT_AUXV        16      /* Procstat auxv data. */
> +
>  /* Note segments for core files on NetBSD systems.  Note name
>     must start with "NetBSD-CORE".  */
>
> --
> 2.7.0
>
diff mbox

Patch

diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 21dcb2c..47773c9 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,8 @@ 
+2016-01-09  John Baldwin  <jhb@FreeBSD.org>
+
+	* readelf.c (get_freebsd_elfcore_note_type): New
+	(process_note): Add support for FreeBSD core notes.
+
 2016-01-01  Alan Modra  <amodra@gmail.com>
 
 	Update year range in copyright notice of all files.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 47ac1ad..fa9cda1 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -15388,6 +15388,37 @@  process_netbsd_elf_note (Elf_Internal_Note * pnote)
 }
 
 static const char *
+get_freebsd_elfcore_note_type (unsigned e_type)
+{
+  static char buff[64];
+
+  switch (e_type)
+    {
+    case NT_FREEBSD_THRMISC:
+      return _("NT_THRMISC (thrmisc structure)");
+    case NT_FREEBSD_PROCSTAT_PROC:
+      return _("NT_PROCSTAT_PROC (proc data)");
+    case NT_FREEBSD_PROCSTAT_FILES:
+      return _("NT_PROCSTAT_FILES (files data)");
+    case NT_FREEBSD_PROCSTAT_VMMAP:
+      return _("NT_PROCSTAT_VMMAP (vmmap data)");
+    case NT_FREEBSD_PROCSTAT_GROUPS:
+      return _("NT_PROCSTAT_GROUPS (groups data)");
+    case NT_FREEBSD_PROCSTAT_UMASK:
+      return _("NT_PROCSTAT_UMASK (umask data)");
+    case NT_FREEBSD_PROCSTAT_RLIMIT:
+      return _("NT_PROCSTAT_RLIMIT (rlimit data)");
+    case NT_FREEBSD_PROCSTAT_OSREL:
+      return _("NT_PROCSTAT_OSREL (osreldate data)");
+    case NT_FREEBSD_PROCSTAT_PSSTRINGS:
+      return _("NT_PROCSTAT_PSSTRINGS (ps_strings data)");
+    case NT_FREEBSD_PROCSTAT_AUXV:
+      return _("NT_PROCSTAT_AUXV (auxv data)");
+    }
+  return get_note_type (e_type);
+}
+
+static const char *
 get_netbsd_elfcore_note_type (unsigned e_type)
 {
   static char buff[64];
@@ -15636,6 +15667,10 @@  process_note (Elf_Internal_Note * pnote)
     /* GNU-specific object file notes.  */
     nt = get_gnu_elf_note_type (pnote->type);
 
+  else if (const_strneq (pnote->namedata, "FreeBSD"))
+    /* FreeBSD-specific core file notes.  */
+    nt = get_freebsd_elfcore_note_type (pnote->type);
+
   else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
     /* NetBSD-specific core file notes.  */
     nt = get_netbsd_elfcore_note_type (pnote->type);
diff --git a/include/ChangeLog b/include/ChangeLog
index 80fc4a8..7dadeba 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,16 @@ 
+2016-01-16  John Baldwin  <jhb@FreeBSD.org>
+
+	* elf/common.h (NT_FREEBSD_THRMISC): Define.
+	(NT_FREEBSD_PROCSTAT_PROC): Define.
+	(NT_FREEBSD_PROCSTAT_FILES): Define.
+	(NT_FREEBSD_PROCSTAT_VMMAP): Define.
+	(NT_FREEBSD_PROCSTAT_GROUPS): Define.
+	(NT_FREEBSD_PROCSTAT_UMASK): Define.
+	(NT_FREEBSD_PROCSTAT_RLIMIT): Define.
+	(NT_FREEBSD_PROCSTAT_OSREL): Define.
+	(NT_FREEBSD_PROCSTAT_PSSTRINGS): Define.
+	(NT_FREEBSD_PROCSTAT_AUXV): Define.
+
 2016-01-11  Nick Clifton  <nickc@redhat.com>
 
 	Import this change from GCC mainline:
diff --git a/include/elf/common.h b/include/elf/common.h
index ce506fc..767ad3e 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -595,6 +595,20 @@ 
 /* Note segment for SystemTap probes.  */
 #define NT_STAPSDT	3
 
+/* Note segments for core files on FreeBSD systems.  Note name is
+   "FreeBSD".  */
+
+#define	NT_FREEBSD_THRMISC	7	/* Thread miscellaneous info. */
+#define	NT_FREEBSD_PROCSTAT_PROC	8	/* Procstat proc data. */
+#define	NT_FREEBSD_PROCSTAT_FILES	9	/* Procstat files data. */
+#define	NT_FREEBSD_PROCSTAT_VMMAP	10	/* Procstat vmmap data. */
+#define	NT_FREEBSD_PROCSTAT_GROUPS	11	/* Procstat groups data. */
+#define	NT_FREEBSD_PROCSTAT_UMASK	12	/* Procstat umask data. */
+#define	NT_FREEBSD_PROCSTAT_RLIMIT	13	/* Procstat rlimit data. */
+#define	NT_FREEBSD_PROCSTAT_OSREL	14	/* Procstat osreldate data. */
+#define	NT_FREEBSD_PROCSTAT_PSSTRINGS	15	/* Procstat ps_strings data. */
+#define	NT_FREEBSD_PROCSTAT_AUXV	16	/* Procstat auxv data. */
+
 /* Note segments for core files on NetBSD systems.  Note name
    must start with "NetBSD-CORE".  */