From owner-svn-src-head@freebsd.org Sat Mar 21 00:08:34 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 37F812773CD; Sat, 21 Mar 2020 00:08:34 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48kgwK6VZlz3Nq3; Sat, 21 Mar 2020 00:08:33 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8CA303E92; Sat, 21 Mar 2020 00:08:33 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 02L08Xf5054010; Sat, 21 Mar 2020 00:08:33 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 02L08XIw054009; Sat, 21 Mar 2020 00:08:33 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <202003210008.02L08XIw054009@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Sat, 21 Mar 2020 00:08:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r359189 - head/contrib/elftoolchain/readelf X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/contrib/elftoolchain/readelf X-SVN-Commit-Revision: 359189 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 21 Mar 2020 00:08:34 -0000 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: