Author: emaste
Date: Fri Mar  6 15:58:52 2020
New Revision: 358708
URL: https://svnweb.freebsd.org/changeset/base/358708

Log:
  readelf: decode and print Xen ELF note strings
  
  Sponsored by: The FreeBSD Foundation

Modified:
  head/contrib/elftoolchain/readelf/readelf.c

Modified: head/contrib/elftoolchain/readelf/readelf.c
==============================================================================
--- head/contrib/elftoolchain/readelf/readelf.c Fri Mar  6 15:57:21 2020        
(r358707)
+++ head/contrib/elftoolchain/readelf/readelf.c Fri Mar  6 15:58:52 2020        
(r358708)
@@ -3677,6 +3677,33 @@ static struct flag_desc note_feature_ctl_flags[] = {
 };
 
 static void
+dump_note_string(const char *description, const char *s, size_t len)
+{
+       size_t i;
+       int printable = 1;
+
+       if (len == 0 || s[--len] != '\0') {
+               printable = 0;
+       } else {
+               for (i = 0; i < len; i++) {
+                       if (!isprint(s[i])) {
+                               printable = 0;
+                               break;
+                       }
+               }
+       }
+
+       if (printable) {
+               printf("   %s: %s\n", description, s);
+       } else {
+               printf("   description data:");
+               for (i = 0; i < len; i++)
+                       printf(" %02x", (unsigned char)s[i]);
+               printf("\n");
+       }
+}
+
+static void
 dump_notes_data(struct readelf *re, const char *name, uint32_t type,
     const char *buf, size_t sz)
 {
@@ -3714,6 +3741,30 @@ dump_notes_data(struct readelf *re, const char *name, 
                switch (type) {
                case NT_GNU_PROPERTY_TYPE_0:
                        dump_gnu_property_type_0(re, buf, sz);
+                       return;
+               }
+       } else if (strcmp(name, "Xen") == 0) {
+               switch (type) {
+               case 5:
+                       dump_note_string("Xen version", buf, sz);
+                       return;
+               case 6:
+                       dump_note_string("Guest OS", buf, sz);
+                       return;
+               case 7:
+                       dump_note_string("Guest version", buf, sz);
+                       return;
+               case 8:
+                       dump_note_string("Loader", buf, sz);
+                       return;
+               case 9:
+                       dump_note_string("PAE mode", buf, sz);
+                       return;
+               case 10:
+                       dump_note_string("Features", buf, sz);
+                       return;
+               case 11:
+                       dump_note_string("BSD symtab", buf, sz);
                        return;
                }
        }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to