Date: Tue, 28 Apr 2026 20:59:09 +0000 From: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: =?utf-8?Q?St=C3=A9pha?=ne Rochoy <stephane.rochoy@stormshield.eu> Subject: git: 76de40889eed - main - efibootmgr: Show attributes, category and optional data when verbose Message-ID: <69f11f9d.3ad79.7d56299a@gitrepo.freebsd.org>
index | next in thread | raw e-mail
The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=76de40889eed130442b67e14249f96e2e8f88f48 commit 76de40889eed130442b67e14249f96e2e8f88f48 Author: Stéphane Rochoy <stephane.rochoy@stormshield.eu> AuthorDate: 2026-04-24 07:03:31 +0000 Commit: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org> CommitDate: 2026-04-28 20:58:59 +0000 efibootmgr: Show attributes, category and optional data when verbose Also rework a bit the way device path are displayed for consistency. Signed-off-by: stephane.rochoy@stormshield.eu Reviewed by: imp Sponsored by: Stormshield Pull-Request: https://github.com/freebsd/freebsd-src/pull/2167 --- usr.sbin/efibootmgr/efibootmgr.8 | 2 +- usr.sbin/efibootmgr/efibootmgr.c | 71 +++++++++++++++++++++++++++++++++------- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/usr.sbin/efibootmgr/efibootmgr.8 b/usr.sbin/efibootmgr/efibootmgr.8 index 62ca0d6da3b2..2d7aaf5bd4a4 100644 --- a/usr.sbin/efibootmgr/efibootmgr.8 +++ b/usr.sbin/efibootmgr/efibootmgr.8 @@ -200,7 +200,7 @@ variable. Displays the UEFI device path of .Ar unix-path . .It Fl v -verbose -Display the device path of boot entries in the output. +Display extra information on boot entries: device path, attributes, category and optional data. .El .Sh EXAMPLES To display the current diff --git a/usr.sbin/efibootmgr/efibootmgr.c b/usr.sbin/efibootmgr/efibootmgr.c index 1b572b613e05..e1786d9fc1bc 100644 --- a/usr.sbin/efibootmgr/efibootmgr.c +++ b/usr.sbin/efibootmgr/efibootmgr.c @@ -54,11 +54,27 @@ #include <efivar-dp.h> #ifndef LOAD_OPTION_ACTIVE -#define LOAD_OPTION_ACTIVE 0x00000001 +#define LOAD_OPTION_ACTIVE 0x00000001 +#endif + +#ifndef LOAD_OPTION_FORCE_RECONNECT +#define LOAD_OPTION_FORCE_RECONNECT 0x00000002 +#endif + +#ifndef LOAD_OPTION_HIDDEN +#define LOAD_OPTION_HIDDEN 0x00000008 +#endif + +#ifndef LOAD_OPTION_CATEGORY +#define LOAD_OPTION_CATEGORY 0x00001F00 #endif #ifndef LOAD_OPTION_CATEGORY_BOOT -#define LOAD_OPTION_CATEGORY_BOOT 0x00000000 +#define LOAD_OPTION_CATEGORY_BOOT 0x00000000 +#endif + +#ifndef LOAD_OPTION_CATEGORY_APP +#define LOAD_OPTION_CATEGORY_APP 0x00000100 #endif #define BAD_LENGTH ((size_t)-1) @@ -744,14 +760,14 @@ static void print_loadopt_str(uint8_t *data, size_t datalen) { char *dev, *relpath, *abspath; - uint32_t attr; + uint32_t attr, categ; uint16_t fplen; efi_char *descr; uint8_t *ep = data + datalen; - uint8_t *walker = data; + uint8_t *walker = data, *opt; efidp dp, edp; char buf[1024]; - int len; + int len, optlen; int rv; int indent; @@ -775,11 +791,13 @@ print_loadopt_str(uint8_t *data, size_t datalen) if (walker > ep) return; edp = (efidp)walker; - /* - * Everything left is the binary option args - * opt = walker; - * optlen = ep - walker; - */ + + /* Everything left is the binary option args */ + opt = walker; + optlen = ep - walker; + + printf("\n"); + printf(" dp:"); indent = 1; while (dp < edp) { if (efidp_size(dp) == 0) @@ -787,7 +805,7 @@ print_loadopt_str(uint8_t *data, size_t datalen) efidp_format_device_path(buf, sizeof(buf), dp, (intptr_t)(void *)edp - (intptr_t)(void *)dp); printf("%*s%s\n", indent, "", buf); - indent = 10 + len + 1; + indent = 11; rv = efivar_device_path_to_unix_path(dp, &dev, &relpath, &abspath); if (rv == 0) { printf("%*s%s:%s %s\n", indent + 4, "", dev, relpath, abspath); @@ -797,6 +815,37 @@ print_loadopt_str(uint8_t *data, size_t datalen) } dp = (efidp)((char *)dp + efidp_size(dp)); } + + /* Optional Data */ + if (optlen > 0) { + printf(" opt/x: "); + efi_hexdump(opt, optlen, 11); + printf(" opt/a: "); + efi_asciidump(opt, optlen, 11); + } + + /* Attributes */ + printf(" attr: %#x<", attr); + if (attr & LOAD_OPTION_ACTIVE) + printf("ACTIVE,"); + if (attr & LOAD_OPTION_FORCE_RECONNECT) + printf("FORCE_RECONNECT,"); + if (attr & LOAD_OPTION_HIDDEN) + printf("HIDDEN,"); + printf(">\n"); + + /* Category */ + categ = (attr & LOAD_OPTION_CATEGORY); + printf(" categ: %#x<", categ); + switch (categ) { + case LOAD_OPTION_CATEGORY_APP: + printf("APP"); + break; + case LOAD_OPTION_CATEGORY_BOOT: + printf("BOOT"); + break; + } + printf(">\n"); } static char *home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69f11f9d.3ad79.7d56299a>
