mirror of
https://github.com/morgan9e/systemd
synced 2026-04-15 00:47:10 +09:00
sd-boot: efi-log: use log levels internally
Change log_internal() to receive a log level from which a text color is derived, rather than the text color directly, and adjust various log_* macros to use them internally.
This commit is contained in:
@@ -35,7 +35,7 @@ static EFI_STATUS load_one_driver(
|
||||
|
||||
if (loaded_image->ImageCodeType != EfiBootServicesCode &&
|
||||
loaded_image->ImageCodeType != EfiRuntimeServicesCode)
|
||||
return log_error("Image %ls is not a driver, refusing.", fname);
|
||||
return log_error_status(EFI_INVALID_PARAMETER, "Image %ls is not a driver, refusing.", fname);
|
||||
|
||||
err = BS->StartImage(image, NULL, NULL);
|
||||
if (err != EFI_SUCCESS) {
|
||||
|
||||
@@ -6,6 +6,17 @@
|
||||
|
||||
static unsigned log_count = 0;
|
||||
|
||||
static const uint8_t log_level_color[_LOG_MAX] = {
|
||||
[LOG_EMERG] = EFI_LIGHTRED,
|
||||
[LOG_ALERT] = EFI_LIGHTRED,
|
||||
[LOG_CRIT] = EFI_LIGHTRED,
|
||||
[LOG_ERR] = EFI_LIGHTRED,
|
||||
[LOG_WARNING] = EFI_YELLOW,
|
||||
[LOG_NOTICE] = EFI_WHITE,
|
||||
[LOG_INFO] = EFI_WHITE,
|
||||
[LOG_DEBUG] = EFI_LIGHTGRAY,
|
||||
};
|
||||
|
||||
void freeze(void) {
|
||||
for (;;)
|
||||
BS->Stall(60 * 1000 * 1000);
|
||||
@@ -31,14 +42,15 @@ void efi_assert(const char *expr, const char *file, unsigned line, const char *f
|
||||
freeze();
|
||||
}
|
||||
|
||||
EFI_STATUS log_internal(EFI_STATUS status, uint8_t text_color, const char *format, ...) {
|
||||
EFI_STATUS log_internal(EFI_STATUS status, LogLevel log_level, const char *format, ...) {
|
||||
assert(format);
|
||||
assert(log_level >= 0 && log_level < _LOG_MAX);
|
||||
|
||||
int32_t attr = ST->ConOut->Mode->Attribute;
|
||||
|
||||
if (ST->ConOut->Mode->CursorColumn > 0)
|
||||
ST->ConOut->OutputString(ST->ConOut, (char16_t *) u"\r\n");
|
||||
ST->ConOut->SetAttribute(ST->ConOut, EFI_TEXT_ATTR(text_color, EFI_BLACK));
|
||||
ST->ConOut->SetAttribute(ST->ConOut, EFI_TEXT_ATTR(log_level_color[log_level], EFI_BLACK));
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
|
||||
@@ -21,17 +21,41 @@ __attribute__((no_stack_protector, noinline)) void __stack_chk_guard_init(void);
|
||||
# define __stack_chk_guard_init()
|
||||
#endif
|
||||
|
||||
typedef enum LogLevel {
|
||||
LOG_EMERG,
|
||||
LOG_ALERT,
|
||||
LOG_CRIT,
|
||||
LOG_ERR,
|
||||
LOG_WARNING,
|
||||
LOG_NOTICE,
|
||||
LOG_INFO,
|
||||
LOG_DEBUG,
|
||||
_LOG_MAX,
|
||||
_LOG_INVALID = -1,
|
||||
} LogLevel;
|
||||
|
||||
_noreturn_ void freeze(void);
|
||||
void log_wait(void);
|
||||
_gnu_printf_(3, 4) EFI_STATUS log_internal(EFI_STATUS status, uint8_t text_color, const char *format, ...);
|
||||
#define log_full(status, text_color, format, ...) \
|
||||
log_internal(status, text_color, "%s:%i@%s: " format, __FILE__, __LINE__, __func__, ##__VA_ARGS__)
|
||||
#define log_debug(...) log_full(EFI_SUCCESS, EFI_LIGHTGRAY, __VA_ARGS__)
|
||||
#define log_info(...) log_full(EFI_SUCCESS, EFI_WHITE, __VA_ARGS__)
|
||||
#define log_warning_status(status, ...) log_full(status, EFI_YELLOW, __VA_ARGS__)
|
||||
#define log_error_status(status, ...) log_full(status, EFI_LIGHTRED, __VA_ARGS__)
|
||||
#define log_error(...) log_full(EFI_INVALID_PARAMETER, EFI_LIGHTRED, __VA_ARGS__)
|
||||
#define log_oom() log_full(EFI_OUT_OF_RESOURCES, EFI_LIGHTRED, "Out of memory.")
|
||||
_gnu_printf_(3, 4) EFI_STATUS log_internal(EFI_STATUS status, LogLevel log_level, const char *format, ...);
|
||||
|
||||
#define log_full(status, log_level, format, ...) \
|
||||
log_internal(status, log_level, "%s:%i@%s: " format, __FILE__, __LINE__, __func__, ##__VA_ARGS__)
|
||||
|
||||
#define log_debug(...) log_full(EFI_SUCCESS, LOG_DEBUG, __VA_ARGS__)
|
||||
#define log_info(...) log_full(EFI_SUCCESS, LOG_INFO, __VA_ARGS__)
|
||||
#define log_notice(...) log_full(EFI_SUCCESS, LOG_NOTICE, __VA_ARGS__)
|
||||
#define log_warning(...) log_full(EFI_SUCCESS, LOG_WARNING, __VA_ARGS__)
|
||||
#define log_error(...) log_full(EFI_SUCCESS, LOG_ERR, __VA_ARGS__)
|
||||
#define log_emergency(...) log_full(EFI_SUCCESS, LOG_EMERG, __VA_ARGS__)
|
||||
|
||||
#define log_debug_status(status, ...) log_full(status, LOG_DEBUG, __VA_ARGS__)
|
||||
#define log_info_status(status, ...) log_full(status, LOG_INFO, __VA_ARGS__)
|
||||
#define log_notice_status(status, ...) log_full(status, LOG_NOTICE, __VA_ARGS__)
|
||||
#define log_warning_status(status, ...) log_full(status, LOG_WARNING, __VA_ARGS__)
|
||||
#define log_error_status(status, ...) log_full(status, LOG_ERR, __VA_ARGS__)
|
||||
#define log_emergency_status(status, ...) log_full(status, LOG_EMERG, __VA_ARGS__)
|
||||
|
||||
#define log_oom() log_full(EFI_OUT_OF_RESOURCES, LOG_ERR, "Out of memory.")
|
||||
|
||||
/* Debugging helper — please keep this around, even if not used */
|
||||
#define log_hexdump(prefix, data, size) \
|
||||
|
||||
@@ -211,10 +211,10 @@ EFI_STATUS process_random_seed(EFI_FILE *root_dir) {
|
||||
|
||||
size = info->FileSize;
|
||||
if (size < RANDOM_MAX_SIZE_MIN)
|
||||
return log_error("Random seed file is too short.");
|
||||
return log_error_status(EFI_INVALID_PARAMETER, "Random seed file is too short.");
|
||||
|
||||
if (size > RANDOM_MAX_SIZE_MAX)
|
||||
return log_error("Random seed file is too large.");
|
||||
return log_error_status(EFI_INVALID_PARAMETER, "Random seed file is too large.");
|
||||
|
||||
seed = xmalloc(size);
|
||||
rsize = size;
|
||||
|
||||
Reference in New Issue
Block a user