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>
This commit is contained in:
matt 2013-09-11 18:53:54 +00:00
parent 4d518571b9
commit 92fd66d6e7
2 changed files with 37 additions and 0 deletions

View File

@ -11890,6 +11890,38 @@ get_gnu_elf_note_type (unsigned e_type)
return buff; 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 * static const char *
get_netbsd_elfcore_note_type (unsigned e_type) get_netbsd_elfcore_note_type (unsigned e_type)
{ {
@ -11989,6 +12021,10 @@ process_note (Elf_Internal_Note * pnote)
/* GNU-specific object file notes. */ /* GNU-specific object file notes. */
nt = get_gnu_elf_note_type (pnote->type); 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")) else if (const_strneq (pnote->namedata, "NetBSD-CORE"))
/* NetBSD-specific core file notes. */ /* NetBSD-specific core file notes. */
nt = get_netbsd_elfcore_note_type (pnote->type); nt = get_netbsd_elfcore_note_type (pnote->type);

View File

@ -594,6 +594,7 @@
/* Values for NetBSD .note.netbsd.ident notes. Note name is "NetBSD". */ /* Values for NetBSD .note.netbsd.ident notes. Note name is "NetBSD". */
#define NT_NETBSD_IDENT 1 #define NT_NETBSD_IDENT 1
#define NT_NETBSD_MARCH 5
/* Values for OpenBSD .note.openbsd.ident notes. Note name is "OpenBSD". */ /* Values for OpenBSD .note.openbsd.ident notes. Note name is "OpenBSD". */