1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
#include "efi-string.h"
#include "proto/simple-text-io.h"
#if defined __has_attribute
# if __has_attribute(no_stack_protector)
# define HAVE_NO_STACK_PROTECTOR_ATTRIBUTE
# endif
#endif
#if defined(HAVE_NO_STACK_PROTECTOR_ATTRIBUTE) && \
(defined(__SSP__) || defined(__SSP_ALL__) || \
defined(__SSP_STRONG__) || defined(__SSP_EXPLICIT__))
# define STACK_PROTECTOR_RANDOM 1
__attribute__((no_stack_protector, noinline)) void __stack_chk_guard_init(void);
#else
# define STACK_PROTECTOR_RANDOM 0
# define __stack_chk_guard_init()
#endif
_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.")
/* Debugging helper — please keep this around, even if not used */
#define log_hexdump(prefix, data, size) \
({ \
_cleanup_free_ char16_t *hex = hexdump(data, size); \
log_debug("%ls[%zu]: %ls", prefix, size, hex); \
})
|