Add support to readelf for reading NetBSD ELF core notes.
authorStephen Fisher <sfisher@panix.com>
Tue, 27 Oct 2015 11:32:38 +0000 (11:32 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 27 Oct 2015 11:32:38 +0000 (11:32 +0000)
binutils * binutils.c (process_netbsd_elf_note): New function.
(process_note): Call the new function for NetBSD core notes.

include * common.h (NT_NETBSD_MARCH): Define.

binutils/ChangeLog
binutils/readelf.c
include/elf/ChangeLog
include/elf/common.h

index 5cf05cc1bc2f4663b25cf5e2acf498c62359f116..f5627fc0138696e94b341491bfab1633c5022f83 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-27  Stephen Fisher  <sfisher@panix.com>
+
+       * binutils.c (process_netbsd_elf_note): New function.
+       (process_note): Call the new function for NetBSD core notes.
+
 2015-10-22  Hans-Peter Nilsson  <hp@bitrange.com>
 
        * objcopy.c (setup_section): Don't omit bfd_copy_private_bfd_data
index 22cec2ce4e726f46d6d6ce762cd36a99516c035a..70a84e54e8efd7630ecfef37288868dac1028ccc 100644 (file)
@@ -15365,6 +15365,40 @@ print_v850_note (Elf_Internal_Note * pnote)
   return 0;
 }
 
+static int 
+process_netbsd_elf_note (Elf_Internal_Note * pnote)
+{
+  unsigned int version;
+
+  switch (pnote->type)
+    {
+    case NT_NETBSD_IDENT:
+      version = byte_get ((unsigned char *) pnote->descdata, sizeof (version));
+      if ((version / 10000) % 100)
+        printf ("  NetBSD\t\t0x%08lx\tIDENT %u (%u.%u%s%c)\n", pnote->descsz,
+               version, version / 100000000, (version / 1000000) % 100,
+               (version / 10000) % 100 > 26 ? "Z" : "",
+               'A' + (version / 10000) % 26); 
+      else
+       printf ("  NetBSD\t\t0x%08lx\tIDENT %u (%u.%u.%u)\n", pnote->descsz,
+               version, version / 100000000, (version / 1000000) % 100,
+               (version / 100) % 100); 
+      return 1;
+
+    case NT_NETBSD_MARCH:
+      printf ("  NetBSD\t0x%08lx\tMARCH <%s>\n", pnote->descsz,
+             pnote->descdata);
+      return 1;
+
+    default:
+      break;
+    }
+
+  printf ("  NetBSD\t0x%08lx\tUnknown note type: (0x%08lx)\n", pnote->descsz,
+         pnote->type);
+  return 1;
+}
+
 static const char *
 get_netbsd_elfcore_note_type (unsigned e_type)
 {
@@ -15618,6 +15652,10 @@ process_note (Elf_Internal_Note * pnote)
     /* NetBSD-specific core file notes.  */
     nt = get_netbsd_elfcore_note_type (pnote->type);
 
+  else if (const_strneq (pnote->namedata, "NetBSD"))
+    /* NetBSD-specific core file notes.  */
+    return process_netbsd_elf_note (pnote);
+
   else if (strneq (pnote->namedata, "SPU/", 4))
     {
       /* SPU-specific core file notes.  */
index 08b67019b65a718b146cab0efb3ae1ccb29247ec..8b354e18e7261fcfb8145f4d1d9ce34b9ce9da70 100644 (file)
@@ -1,3 +1,7 @@
+2015-10-27  Stephen Fisher  <sfisher@panix.com>
+
+       * common.h (NT_NETBSD_MARCH): Define.
+
 2015-10-22  H.J. Lu  <hongjiu.lu@intel.com>
 
        * x86-64.h (R_X86_64_GOTPCRELX): New.
index bb15b7d0b4627dab033a250923f4372e7461c879..5c20c5ea299f5e69924f7a09ea55861ea25ab8d1 100644 (file)
 /* Values for NetBSD .note.netbsd.ident notes.  Note name is "NetBSD".  */
 
 #define NT_NETBSD_IDENT                1
+#define NT_NETBSD_MARCH                5
 
 /* Values for OpenBSD .note.openbsd.ident notes.  Note name is "OpenBSD".  */