Create a test which does some sample calls and checks the output. Expand the size of the sandbox bloblist to accommodate the log.
Signed-off-by: Simon Glass <s...@chromium.org> --- (no changes since v1) MAINTAINERS | 1 + configs/sandbox_defconfig | 3 +++ lib/efi_loader/efi_log.c | 7 +++--- test/lib/Makefile | 1 + test/lib/efi_log.c | 49 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 test/lib/efi_log.c diff --git a/MAINTAINERS b/MAINTAINERS index 890ca4290d3..5e795ce9a4b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1080,6 +1080,7 @@ M: Simon Glass <s...@chromium.org> S: Maintained F: include/efi_log.h F: lib/efi_loader/efi_log.c +F: test/lib/efi_log.c EFI PAYLOAD M: Heinrich Schuchardt <xypron.g...@gmx.de> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 718e4a8283c..3c5954b6c7f 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -17,6 +17,7 @@ CONFIG_EFI_CAPSULE_ON_DISK=y CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y CONFIG_EFI_CAPSULE_AUTHENTICATE=y CONFIG_EFI_CAPSULE_CRT_FILE="board/sandbox/capsule_pub_key_good.crt" +CONFIG_EFI_LOG=y CONFIG_BUTTON_CMD=y CONFIG_FIT=y CONFIG_FIT_RSASSA_PSS=y @@ -50,6 +51,7 @@ CONFIG_LOG_DEFAULT_LEVEL=6 CONFIG_LOGF_FUNC=y CONFIG_DISPLAY_BOARDINFO_LATE=y CONFIG_STACKPROTECTOR=y +CONFIG_BLOBLIST_SIZE_RELOC=0x5000 CONFIG_CMD_CPU=y CONFIG_CMD_LICENSE=y CONFIG_CMD_SMBIOS=y @@ -71,6 +73,7 @@ CONFIG_CMD_NVEDIT_LOAD=y CONFIG_CMD_NVEDIT_SELECT=y CONFIG_LOOPW=y CONFIG_CMD_MD5SUM=y +CONFIG_CMD_MEMINFO=y CONFIG_CMD_MEM_SEARCH=y CONFIG_CMD_MX_CYCLIC=y CONFIG_CMD_MEMTEST=y diff --git a/lib/efi_loader/efi_log.c b/lib/efi_loader/efi_log.c index 01e495d3995..780860d8b2f 100644 --- a/lib/efi_loader/efi_log.c +++ b/lib/efi_loader/efi_log.c @@ -129,6 +129,7 @@ int efi_logs_testing(enum efil_test_t enum_val, efi_uintn_t int_val, if (ret < 0) return ret; + rec->enum_val = enum_val; rec->int_val = int_val; rec->buffer = buffer; rec->memory = memory; @@ -194,10 +195,8 @@ void show_rec(int seq, struct efil_rec_hdr *rec_hdr) show_addr("buf", map_to_sysmem(rec->buffer)); show_addr("mem", map_to_sysmem(rec->memory)); if (rec_hdr->ended) { - show_addr("*buf", - (ulong)map_to_sysmem((void *)rec->e_buffer)); - show_addr("*mem", - (ulong)rec->e_memory); + show_addr("*buf", (ulong)map_to_sysmem(rec->e_buffer)); + show_addr("*mem", (ulong)rec->e_memory); show_ret(rec_hdr->e_ret); } } diff --git a/test/lib/Makefile b/test/lib/Makefile index f516d001747..3556c4d199c 100644 --- a/test/lib/Makefile +++ b/test/lib/Makefile @@ -11,6 +11,7 @@ obj-y += abuf.o obj-y += alist.o obj-$(CONFIG_EFI_LOADER) += efi_device_path.o obj-$(CONFIG_EFI_SECURE_BOOT) += efi_image_region.o +obj-$(CONFIG_EFI_LOG) += efi_log.o obj-y += hexdump.o obj-$(CONFIG_SANDBOX) += kconfig.o obj-y += lmb.o diff --git a/test/lib/efi_log.c b/test/lib/efi_log.c new file mode 100644 index 00000000000..414b7081bd9 --- /dev/null +++ b/test/lib/efi_log.c @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright 2024 Google LLC + * Written by Simon Glass <s...@chromium.org> + */ + +#include <efi_log.h> +#include <mapmem.h> +#include <test/lib.h> +#include <test/test.h> +#include <test/ut.h> + +/* basic test of logging */ +static int lib_test_efi_log_base(struct unit_test_state *uts) +{ + void **buf = map_sysmem(0x1000, 0); + u64 *addr = map_sysmem(0x1010, 0); + int ofs1, ofs2; + + ut_assertok(efi_log_reset()); + + ofs1 = efi_logs_testing(EFI_LOG_TEST0, 123, &buf[0], &addr[0]); + + ofs2 = efi_logs_testing(EFI_LOG_TEST1, 456, &buf[1], &addr[1]); + + /* simulate an EFI call setting the return values */ + addr[0] = 0x100; + buf[0] = map_sysmem(0x1100, 0); + addr[1] = 0x200; + buf[1] = map_sysmem(0x1200, 0); + + ut_assertok(efi_loge_testing(ofs2, EFI_LOAD_ERROR)); + ut_assertok(efi_loge_testing(ofs1, EFI_SUCCESS)); + + ut_assertok(efi_log_show()); + ut_assert_nextline("EFI log (size 98)"); + ut_assert_nextline( + " 0 testing test0 int 7b/123 buf 1000 mem 1010 *buf 1100 *mem 100 ret OK"); + ut_assert_nextline( + " 1 testing test1 int 1c8/456 buf 1008 mem 1018 *buf 1200 *mem 200 ret load"); + ut_assert_nextline("2 records"); + ut_assert_console_end(); + + unmap_sysmem(buf); + unmap_sysmem(addr); + + return 0; +} +LIB_TEST(lib_test_efi_log_base, UTF_CONSOLE); -- 2.34.1