svn commit: r359189 - head/contrib/elftoolchain/readelf
Ed Maste
emaste at FreeBSD.org
Sat Mar 21 00:08:34 UTC 2020
Author: emaste
Date: Sat Mar 21 00:08:33 2020
New Revision: 359189
URL: https://svnweb.freebsd.org/changeset/base/359189
Log:
readelf: simplify Xen string note printing
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D24140
Modified:
head/contrib/elftoolchain/readelf/readelf.c
Modified: head/contrib/elftoolchain/readelf/readelf.c
==============================================================================
--- head/contrib/elftoolchain/readelf/readelf.c Sat Mar 21 00:01:06 2020 (r359188)
+++ head/contrib/elftoolchain/readelf/readelf.c Sat Mar 21 00:08:33 2020 (r359189)
@@ -3676,37 +3676,45 @@ static struct flag_desc note_feature_ctl_flags[] = {
{ 0, NULL }
};
-static void
+static bool
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;
+ return (false);
} 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");
+ if (!isprint(s[i]))
+ return (false);
}
+
+ printf(" %s: %s\n", description, s);
+ return (true);
}
+struct note_desc {
+ uint32_t type;
+ const char *description;
+ bool (*fp)(const char *, const char *, size_t);
+};
+
+static struct note_desc xen_notes[] = {
+ { 5, "Xen version", dump_note_string },
+ { 6, "Guest OS", dump_note_string },
+ { 7, "Guest version", dump_note_string },
+ { 8, "Loader", dump_note_string },
+ { 9, "PAE mode", dump_note_string },
+ { 10, "Features", dump_note_string },
+ { 11, "BSD symtab", dump_note_string },
+ { 0, NULL, NULL }
+};
+
static void
dump_notes_data(struct readelf *re, const char *name, uint32_t type,
const char *buf, size_t sz)
{
+ struct note_desc *nd;
size_t i;
const uint32_t *ubuf;
@@ -3750,28 +3758,13 @@ dump_notes_data(struct readelf *re, const char *name,
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;
+ for (nd = xen_notes; nd->description != NULL; nd++) {
+ if (nd->type == type) {
+ if (nd->fp(nd->description, buf, sz))
+ return;
+ else
+ break;
+ }
}
}
unknown:
More information about the svn-src-head
mailing list