From 664f90a33173273f8b2d43508b48150ade0a1694 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 25 Apr 2011 14:53:27 +0000 Subject: * readelf.c (print_gnu_note): New function. (process_note): Use it. --- binutils/ChangeLog | 5 +++++ binutils/readelf.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) (limited to 'binutils') diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 74dd853..4db8572 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2011-04-21 Tom Tromey + + * readelf.c (print_gnu_note): New function. + (process_note): Use it. + 2011-04-21 Jie Zhang * MAINTAINERS: Update my email address. diff --git a/binutils/readelf.c b/binutils/readelf.c index 7ac9914..2cc8cf3 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -12231,6 +12231,63 @@ get_gnu_elf_note_type (unsigned e_type) return buff; } +static int +print_gnu_note (Elf_Internal_Note *pnote) +{ + switch (pnote->type) + { + case NT_GNU_BUILD_ID: + { + unsigned long i; + + printf (_(" Build ID: ")); + for (i = 0; i < pnote->descsz; ++i) + printf ("%02x", pnote->descdata[i] & 0xff); + printf (_("\n")); + } + break; + + case NT_GNU_ABI_TAG: + { + unsigned long os, major, minor, subminor; + const char *osname; + + os = byte_get ((unsigned char *) pnote->descdata, 4); + major = byte_get ((unsigned char *) pnote->descdata + 4, 4); + minor = byte_get ((unsigned char *) pnote->descdata + 8, 4); + subminor = byte_get ((unsigned char *) pnote->descdata + 12, 4); + + switch (os) + { + case GNU_ABI_TAG_LINUX: + osname = "Linux"; + break; + case GNU_ABI_TAG_HURD: + osname = "Hurd"; + break; + case GNU_ABI_TAG_SOLARIS: + osname = "Solaris"; + break; + case GNU_ABI_TAG_FREEBSD: + osname = "FreeBSD"; + break; + case GNU_ABI_TAG_NETBSD: + osname = "NetBSD"; + break; + default: + osname = "Unknown"; + break; + } + + printf (_(" OS: %s, ABI: %ld.%ld.%ld\n"), osname, + major, minor, subminor); + } + break; + } + + return 1; +} + static const char * get_netbsd_elfcore_note_type (unsigned e_type) { @@ -12448,6 +12505,8 @@ process_note (Elf_Internal_Note * pnote) if (const_strneq (pnote->namedata, "IPF/VMS")) return print_ia64_vms_note (pnote); + else if (const_strneq (pnote->namedata, "GNU")) + return print_gnu_note (pnote); else return 1; } -- cgit v1.1