Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/external/gpl3/binutils/dist Teach readelf how to interpet ne...



details:   https://anonhg.NetBSD.org/src/rev/65ee03f9db0e
branches:  trunk
changeset: 789870:65ee03f9db0e
user:      matt <matt%NetBSD.org@localhost>
date:      Wed Sep 11 18:53:54 2013 +0000

description:
Teach readelf how to interpet netbsd notes.

Notes at offset 0x00000128 with length 0x00000018:
  Owner         Data size       Description
  NetBSD        0x00000004      IDENT 699002300 (6.99.23)

Notes at offset 0x00000154 with length 0x00000020:
  Owner         Data size       Description
  NetBSD        0x00000009      MARCH <earmv7hf>

diffstat:

 external/gpl3/binutils/dist/binutils/readelf.c   |  36 ++++++++++++++++++++++++
 external/gpl3/binutils/dist/include/elf/common.h |   1 +
 2 files changed, 37 insertions(+), 0 deletions(-)

diffs (64 lines):

diff -r e3d16960b4ee -r 65ee03f9db0e external/gpl3/binutils/dist/binutils/readelf.c
--- a/external/gpl3/binutils/dist/binutils/readelf.c    Wed Sep 11 18:50:00 2013 +0000
+++ b/external/gpl3/binutils/dist/binutils/readelf.c    Wed Sep 11 18:53:54 2013 +0000
@@ -11890,6 +11890,38 @@
   return buff;
 }
 
+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\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\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)
 {
@@ -11989,6 +12021,10 @@
     /* GNU-specific object file notes.  */
     nt = get_gnu_elf_note_type (pnote->type);
 
+  else if (const_strneq (pnote->namedata, "NetBSD"))
+    /* NetBSD-specific core file notes.  */
+    return process_netbsd_elf_note (pnote);
+
   else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
     /* NetBSD-specific core file notes.  */
     nt = get_netbsd_elfcore_note_type (pnote->type);
diff -r e3d16960b4ee -r 65ee03f9db0e external/gpl3/binutils/dist/include/elf/common.h
--- a/external/gpl3/binutils/dist/include/elf/common.h  Wed Sep 11 18:50:00 2013 +0000
+++ b/external/gpl3/binutils/dist/include/elf/common.h  Wed Sep 11 18:53:54 2013 +0000
@@ -594,6 +594,7 @@
 /* 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".  */
 



Home | Main Index | Thread Index | Old Index