mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-26 09:57:26 +03:00
boot: Drop use of Print
The custom print helpers have been replaced with explicit checks at the call site to keep this in line with the way it is done in userspace. Any calls where the check has been ommited should not need them as the value is expected to alawys be around.
This commit is contained in:
parent
2f3c3b0bee
commit
9220b2c46b
@ -443,22 +443,9 @@ static bool unicode_supported(void) {
|
||||
return cache;
|
||||
}
|
||||
|
||||
static void ps_string(const char16_t *fmt, const void *value) {
|
||||
assert(fmt);
|
||||
if (value)
|
||||
Print(fmt, value);
|
||||
}
|
||||
|
||||
static void ps_bool(const char16_t *fmt, bool value) {
|
||||
assert(fmt);
|
||||
Print(fmt, yes_no(value));
|
||||
}
|
||||
|
||||
static bool ps_continue(void) {
|
||||
if (unicode_supported())
|
||||
Print(L"\n─── Press any key to continue, ESC or q to quit. ───\n\n");
|
||||
else
|
||||
Print(L"\n--- Press any key to continue, ESC or q to quit. ---\n\n");
|
||||
const char16_t *sep = unicode_supported() ? u"───" : u"---";
|
||||
printf("\n%ls Press any key to continue, ESC or q to quit. %ls\n\n", sep, sep);
|
||||
|
||||
uint64_t key;
|
||||
return console_key_read(&key, UINT64_MAX) == EFI_SUCCESS &&
|
||||
@ -480,112 +467,143 @@ static void print_status(Config *config, char16_t *loaded_image_path) {
|
||||
secure = secure_boot_mode();
|
||||
(void) efivar_get(LOADER_GUID, L"LoaderDevicePartUUID", &device_part_uuid);
|
||||
|
||||
/* We employ some unusual indentation here for readability. */
|
||||
|
||||
ps_string(L" systemd-boot version: %a\n", GIT_VERSION);
|
||||
ps_string(L" loaded image: %s\n", loaded_image_path);
|
||||
ps_string(L" loader partition UUID: %s\n", device_part_uuid);
|
||||
ps_string(L" architecture: %a\n", EFI_MACHINE_TYPE_NAME);
|
||||
Print(L" UEFI specification: %u.%02u\n", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
|
||||
ps_string(L" firmware vendor: %s\n", ST->FirmwareVendor);
|
||||
Print(L" firmware version: %u.%02u\n", ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
|
||||
Print(L" OS indications: %lu\n", get_os_indications_supported());
|
||||
Print(L" secure boot: %s (%s)\n", yes_no(IN_SET(secure, SECURE_BOOT_USER, SECURE_BOOT_DEPLOYED)), secure_boot_mode_to_string(secure));
|
||||
ps_bool(L" shim: %s\n", shim_loaded());
|
||||
ps_bool(L" TPM: %s\n", tpm_present());
|
||||
Print(L" console mode: %d/%ld (%" PRIuN L"x%" PRIuN L" @%ux%u)\n", ST->ConOut->Mode->Mode, ST->ConOut->Mode->MaxMode - INT64_C(1), x_max, y_max, screen_width, screen_height);
|
||||
printf(" systemd-boot version: " GIT_VERSION "\n");
|
||||
if (loaded_image_path)
|
||||
printf(" loaded image: %ls\n", loaded_image_path);
|
||||
if (device_part_uuid)
|
||||
printf(" loader partition UUID: %ls\n", device_part_uuid);
|
||||
printf(" architecture: " EFI_MACHINE_TYPE_NAME "\n");
|
||||
printf(" UEFI specification: %u.%02u\n", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
|
||||
printf(" firmware vendor: %ls\n", ST->FirmwareVendor);
|
||||
printf(" firmware version: %u.%02u\n", ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
|
||||
printf(" OS indications: %#" PRIx64 "\n", get_os_indications_supported());
|
||||
printf(" secure boot: %ls (%ls)\n",
|
||||
yes_no(IN_SET(secure, SECURE_BOOT_USER, SECURE_BOOT_DEPLOYED)),
|
||||
secure_boot_mode_to_string(secure));
|
||||
printf(" shim: %ls\n", yes_no(shim_loaded()));
|
||||
printf(" TPM: %ls\n", yes_no(tpm_present()));
|
||||
printf(" console mode: %i/%" PRIi64 " (%zux%zu @%ux%u)\n",
|
||||
ST->ConOut->Mode->Mode, ST->ConOut->Mode->MaxMode - INT64_C(1),
|
||||
x_max, y_max, screen_width, screen_height);
|
||||
|
||||
if (!ps_continue())
|
||||
return;
|
||||
|
||||
switch (config->timeout_sec_config) {
|
||||
case TIMEOUT_UNSET:
|
||||
break;
|
||||
break;
|
||||
case TIMEOUT_MENU_FORCE:
|
||||
Print(L" timeout (config): menu-force\n"); break;
|
||||
printf(" timeout (config): menu-force\n");
|
||||
break;
|
||||
case TIMEOUT_MENU_HIDDEN:
|
||||
Print(L" timeout (config): menu-hidden\n"); break;
|
||||
printf(" timeout (config): menu-hidden\n");
|
||||
break;
|
||||
default:
|
||||
Print(L" timeout (config): %u s\n", config->timeout_sec_config);
|
||||
printf(" timeout (config): %u s\n", config->timeout_sec_config);
|
||||
}
|
||||
|
||||
switch (config->timeout_sec_efivar) {
|
||||
case TIMEOUT_UNSET:
|
||||
break;
|
||||
break;
|
||||
case TIMEOUT_MENU_FORCE:
|
||||
Print(L" timeout (EFI var): menu-force\n"); break;
|
||||
printf(" timeout (EFI var): menu-force\n");
|
||||
break;
|
||||
case TIMEOUT_MENU_HIDDEN:
|
||||
Print(L" timeout (EFI var): menu-hidden\n"); break;
|
||||
printf(" timeout (EFI var): menu-hidden\n");
|
||||
break;
|
||||
default:
|
||||
Print(L" timeout (EFI var): %u s\n", config->timeout_sec_efivar);
|
||||
printf(" timeout (EFI var): %u s\n", config->timeout_sec_efivar);
|
||||
}
|
||||
|
||||
ps_string(L" default (config): %s\n", config->entry_default_config);
|
||||
ps_string(L" default (EFI var): %s\n", config->entry_default_efivar);
|
||||
ps_string(L" default (one-shot): %s\n", config->entry_oneshot);
|
||||
ps_string(L" saved entry: %s\n", config->entry_saved);
|
||||
ps_bool(L" editor: %s\n", config->editor);
|
||||
ps_bool(L" auto-entries: %s\n", config->auto_entries);
|
||||
ps_bool(L" auto-firmware: %s\n", config->auto_firmware);
|
||||
ps_bool(L" beep: %s\n", config->beep);
|
||||
ps_bool(L" reboot-for-bitlocker: %s\n", config->reboot_for_bitlocker);
|
||||
if (config->entry_default_config)
|
||||
printf(" default (config): %ls\n", config->entry_default_config);
|
||||
if (config->entry_default_efivar)
|
||||
printf(" default (EFI var): %ls\n", config->entry_default_efivar);
|
||||
if (config->entry_oneshot)
|
||||
printf(" default (one-shot): %ls\n", config->entry_oneshot);
|
||||
if (config->entry_saved)
|
||||
printf(" saved entry: %ls\n", config->entry_saved);
|
||||
printf(" editor: %ls\n", yes_no(config->editor));
|
||||
printf(" auto-entries: %ls\n", yes_no(config->auto_entries));
|
||||
printf(" auto-firmware: %ls\n", yes_no(config->auto_firmware));
|
||||
printf(" beep: %ls\n", yes_no(config->beep));
|
||||
printf(" reboot-for-bitlocker: %ls\n", yes_no(config->reboot_for_bitlocker));
|
||||
|
||||
switch (config->secure_boot_enroll) {
|
||||
case ENROLL_OFF:
|
||||
Print(L" secure-boot-enroll: off\n"); break;
|
||||
printf(" secure-boot-enroll: off\n");
|
||||
break;
|
||||
case ENROLL_MANUAL:
|
||||
Print(L" secure-boot-enroll: manual\n"); break;
|
||||
printf(" secure-boot-enroll: manual\n");
|
||||
break;
|
||||
case ENROLL_FORCE:
|
||||
Print(L" secure-boot-enroll: force\n"); break;
|
||||
printf(" secure-boot-enroll: force\n");
|
||||
break;
|
||||
default:
|
||||
assert_not_reached();
|
||||
}
|
||||
|
||||
switch (config->console_mode) {
|
||||
case CONSOLE_MODE_AUTO:
|
||||
Print(L" console-mode (config): %s\n", L"auto"); break;
|
||||
printf(" console-mode (config): auto\n");
|
||||
break;
|
||||
case CONSOLE_MODE_KEEP:
|
||||
Print(L" console-mode (config): %s\n", L"keep"); break;
|
||||
printf(" console-mode (config): keep\n");
|
||||
break;
|
||||
case CONSOLE_MODE_FIRMWARE_MAX:
|
||||
Print(L" console-mode (config): %s\n", L"max"); break;
|
||||
printf(" console-mode (config): max\n");
|
||||
break;
|
||||
default:
|
||||
Print(L" console-mode (config): %ld\n", config->console_mode); break;
|
||||
printf(" console-mode (config): %" PRIi64 "\n", config->console_mode);
|
||||
break;
|
||||
}
|
||||
|
||||
/* EFI var console mode is always a concrete value or unset. */
|
||||
if (config->console_mode_efivar != CONSOLE_MODE_KEEP)
|
||||
Print(L"console-mode (EFI var): %ld\n", config->console_mode_efivar);
|
||||
printf("console-mode (EFI var): %" PRIi64 "\n", config->console_mode_efivar);
|
||||
|
||||
if (!ps_continue())
|
||||
return;
|
||||
|
||||
for (UINTN i = 0; i < config->entry_count; i++) {
|
||||
ConfigEntry *entry = config->entries[i];
|
||||
EFI_DEVICE_PATH *dp = NULL;
|
||||
_cleanup_free_ char16_t *dp_str = NULL;
|
||||
|
||||
_cleanup_free_ char16_t *dp = NULL;
|
||||
if (entry->device)
|
||||
(void) device_path_to_str(DevicePathFromHandle(entry->device), &dp);
|
||||
if (entry->device &&
|
||||
BS->HandleProtocol(entry->device, &(EFI_GUID) EFI_DEVICE_PATH_PROTOCOL_GUID, (void **) &dp) ==
|
||||
EFI_SUCCESS)
|
||||
(void) device_path_to_str(dp, &dp_str);
|
||||
|
||||
Print(L" config entry: %" PRIuN L"/%" PRIuN L"\n", i + 1, config->entry_count);
|
||||
ps_string(L" id: %s\n", entry->id);
|
||||
ps_string(L" title: %s\n", entry->title);
|
||||
ps_string(L" title show: %s\n", streq16(entry->title, entry->title_show) ? NULL : entry->title_show);
|
||||
ps_string(L" sort key: %s\n", entry->sort_key);
|
||||
ps_string(L" version: %s\n", entry->version);
|
||||
ps_string(L" machine-id: %s\n", entry->machine_id);
|
||||
ps_string(L" device: %s\n", dp);
|
||||
ps_string(L" loader: %s\n", entry->loader);
|
||||
printf(" config entry: %zu/%zu\n", i + 1, config->entry_count);
|
||||
printf(" id: %ls\n", entry->id);
|
||||
if (entry->title)
|
||||
printf(" title: %ls\n", entry->title);
|
||||
if (entry->title_show && !streq16(entry->title, entry->title_show))
|
||||
printf(" title show: %ls\n", entry->title_show);
|
||||
if (entry->sort_key)
|
||||
printf(" sort key: %ls\n", entry->sort_key);
|
||||
if (entry->version)
|
||||
printf(" version: %ls\n", entry->version);
|
||||
if (entry->machine_id)
|
||||
printf(" machine-id: %ls\n", entry->machine_id);
|
||||
if (dp_str)
|
||||
printf(" device: %ls\n", dp_str);
|
||||
if (entry->loader)
|
||||
printf(" loader: %ls\n", entry->loader);
|
||||
STRV_FOREACH(initrd, entry->initrd)
|
||||
Print(L" initrd: %s\n", *initrd);
|
||||
ps_string(L" devicetree: %s\n", entry->devicetree);
|
||||
ps_string(L" options: %s\n", entry->options);
|
||||
ps_bool(L" internal call: %s\n", !!entry->call);
|
||||
printf(" initrd: %ls\n", *initrd);
|
||||
if (entry->devicetree)
|
||||
printf(" devicetree: %ls\n", entry->devicetree);
|
||||
if (entry->options)
|
||||
printf(" options: %ls\n", entry->options);
|
||||
printf(" internal call: %ls\n", yes_no(!!entry->call));
|
||||
|
||||
ps_bool(L"counting boots: %s\n", entry->tries_left >= 0);
|
||||
printf("counting boots: %ls\n", yes_no(entry->tries_left >= 0));
|
||||
if (entry->tries_left >= 0) {
|
||||
Print(L" tries: %u left, %u done\n", entry->tries_left, entry->tries_done);
|
||||
Print(L" current path: %s\\%s\n", entry->path, entry->current_name);
|
||||
Print(L" next path: %s\\%s\n", entry->path, entry->next_name);
|
||||
printf(" tries: %i left, %i done\n", entry->tries_left, entry->tries_done);
|
||||
printf(" current path: %ls\\%ls\n", entry->path, entry->current_name);
|
||||
printf(" next path: %ls\\%ls\n", entry->path, entry->next_name);
|
||||
}
|
||||
|
||||
if (!ps_continue())
|
||||
@ -641,7 +659,7 @@ static bool menu_run(
|
||||
ST->ConOut->EnableCursor(ST->ConOut, false);
|
||||
|
||||
/* draw a single character to make ClearScreen work on some firmware */
|
||||
Print(L" ");
|
||||
ST->ConOut->OutputString(ST->ConOut, (char16_t *) u" ");
|
||||
|
||||
err = console_set_mode(config->console_mode_efivar != CONSOLE_MODE_KEEP ?
|
||||
config->console_mode_efivar : config->console_mode);
|
||||
@ -2729,7 +2747,7 @@ out:
|
||||
EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
|
||||
InitializeLib(image, sys_table);
|
||||
|
||||
debug_hook(L"systemd-boot");
|
||||
debug_hook("systemd-boot");
|
||||
/* Uncomment the next line if you need to wait for debugger. */
|
||||
// debug_break();
|
||||
|
||||
|
@ -44,16 +44,16 @@ EFI_STATUS secure_boot_enroll_at(EFI_FILE *root_dir, const char16_t *path) {
|
||||
|
||||
clear_screen(COLOR_NORMAL);
|
||||
|
||||
Print(u"Enrolling secure boot keys from directory: %s\n", path);
|
||||
printf("Enrolling secure boot keys from directory: %ls\n", path);
|
||||
|
||||
/* Enrolling secure boot keys is safe to do in virtualized environments as there is nothing
|
||||
* we can brick there. */
|
||||
if (!in_hypervisor()) {
|
||||
Print(u"Warning: Enrolling custom Secure Boot keys might soft-brick your machine!\n");
|
||||
printf("Warning: Enrolling custom Secure Boot keys might soft-brick your machine!\n");
|
||||
|
||||
unsigned timeout_sec = 15;
|
||||
for (;;) {
|
||||
Print(u"\rEnrolling in %2u s, press any key to abort.", timeout_sec);
|
||||
printf("\rEnrolling in %2u s, press any key to abort.", timeout_sec);
|
||||
|
||||
uint64_t key;
|
||||
err = console_key_read(&key, 1000 * 1000);
|
||||
|
@ -420,7 +420,7 @@ static EFI_STATUS real_main(EFI_HANDLE image) {
|
||||
EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
|
||||
InitializeLib(image, sys_table);
|
||||
|
||||
debug_hook(L"systemd-stub");
|
||||
debug_hook("systemd-stub");
|
||||
/* Uncomment the next line if you need to wait for debugger. */
|
||||
// debug_break();
|
||||
|
||||
|
@ -11,20 +11,6 @@
|
||||
#define UINTN_MAX (~(UINTN)0)
|
||||
#define INTN_MAX ((INTN)(UINTN_MAX>>1))
|
||||
|
||||
/* gnu-efi format specifiers for integers are fixed to either 64bit with 'l' and 32bit without a size prefix.
|
||||
* We rely on %u/%d/%x to format regular ints, so ensure the size is what we expect. At the same time, we also
|
||||
* need specifiers for (U)INTN which are native (pointer) sized. */
|
||||
assert_cc(sizeof(int) == sizeof(uint32_t));
|
||||
#if __SIZEOF_POINTER__ == 4
|
||||
# define PRIuN L"u"
|
||||
# define PRIiN L"d"
|
||||
#elif __SIZEOF_POINTER__ == 8
|
||||
# define PRIuN L"lu"
|
||||
# define PRIiN L"ld"
|
||||
#else
|
||||
# error "Unexpected pointer size"
|
||||
#endif
|
||||
|
||||
static inline void free(void *p) {
|
||||
if (!p)
|
||||
return;
|
||||
@ -180,7 +166,7 @@ void debug_break(void);
|
||||
extern uint8_t _text, _data;
|
||||
/* Report the relocated position of text and data sections so that a debugger
|
||||
* can attach to us. See debug-sd-boot.sh for how this can be done. */
|
||||
# define debug_hook(identity) Print(identity L"@0x%lx,0x%lx\n", POINTER_TO_PHYSICAL_ADDRESS(&_text), POINTER_TO_PHYSICAL_ADDRESS(&_data))
|
||||
# define debug_hook(identity) printf(identity "@%p,%p\n", &_text, &_data)
|
||||
#else
|
||||
# define debug_hook(identity)
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user